[geographiclib] 01/03: Imported Upstream version 1.34

Francesco Lovergine frankie at moszumanska.debian.org
Wed Mar 12 12:47:51 UTC 2014


This is an automated email from the git hooks/post-receive script.

frankie pushed a commit to branch master
in repository geographiclib.

commit 14eadab1a69da0333e1520b200c9b49364fcc3e1
Author: Francesco Paolo Lovergine <frankie at debian.org>
Date:   Wed Mar 12 10:03:44 2014 +0100

    Imported Upstream version 1.34
---
 00README.txt                                       |   39 +-
 AUTHORS                                            |    4 +
 CMakeLists.txt                                     |  413 +-
 INSTALL                                            |    6 -
 LICENSE.txt                                        |    2 +-
 Makefile.am                                        |   16 +-
 Makefile.in                                        |  259 +-
 Makefile.mk                                        |   12 +-
 NEWS                                               |  264 +-
 aclocal.m4                                         |  372 +-
 cmake/CMakeLists.txt                               |   52 +
 cmake/FindGeographicLib.cmake                      |   11 +-
 cmake/Makefile.am                                  |    5 +-
 cmake/Makefile.in                                  |   56 +-
 cmake/Makefile.mk                                  |    2 -
 cmake/geographiclib-config-version.cmake.in        |   19 -
 cmake/geographiclib-config.cmake.in                |   28 -
 cmake/project-config-version.cmake.in              |   54 +
 cmake/project-config.cmake.in                      |   82 +
 config.guess                                       |  261 +-
 config.sub                                         |  213 +-
 configure                                          | 1014 ++-
 configure.ac                                       |   34 +-
 depcomp                                            |  189 +-
 doc/CMakeLists.txt                                 |   98 +-
 doc/Geographic.doc                                 | 3795 ----------
 doc/GeographicLib.dox                              | 5545 ++++++++++++++
 doc/Makefile.am                                    |  214 +-
 doc/Makefile.in                                    |  268 +-
 doc/Makefile.mk                                    |   40 +-
 doc/NETGeographicLib.dox                           |  241 +
 doc/NETGeographicLib1.png                          |  Bin 0 -> 17226 bytes
 doc/NETGeographicLib2.png                          |  Bin 0 -> 15067 bytes
 doc/NETGeographicLib3.png                          |  Bin 0 -> 31495 bytes
 doc/doxyfile-c.in                                  | 1810 +++++
 doc/doxyfile-for.in                                | 1810 +++++
 doc/doxyfile-net.in                                | 1811 +++++
 doc/doxyfile.in                                    |  853 ++-
 doc/gauss-krueger-convergence-scale.png            |  Bin 0 -> 31802 bytes
 doc/gauss-krueger-error.png                        |  Bin 0 -> 35661 bytes
 doc/gauss-krueger-graticule-a.png                  |  Bin 0 -> 31702 bytes
 doc/gauss-krueger-graticule.png                    |  Bin 0 -> 33208 bytes
 doc/gauss-schreiber-graticule-a.png                |  Bin 0 -> 31698 bytes
 doc/geodesic-c.dox                                 |  118 +
 doc/geodesic-for.dox                               |  100 +
 doc/geodseries30.html                              |  950 +--
 doc/html/Accumulator_8hpp.html                     |  121 -
 doc/html/Accumulator_8hpp_source.html              |  264 -
 doc/html/AlbersEqualArea_8cpp.html                 |  115 -
 doc/html/AlbersEqualArea_8cpp_source.html          |  527 --
 doc/html/AlbersEqualArea_8hpp.html                 |  122 -
 doc/html/AlbersEqualArea_8hpp_source.html          |  389 -
 doc/html/AzimuthalEquidistant_8cpp.html            |  115 -
 doc/html/AzimuthalEquidistant_8cpp_source.html     |  123 -
 doc/html/AzimuthalEquidistant_8hpp.html            |  122 -
 doc/html/AzimuthalEquidistant_8hpp_source.html     |  227 -
 doc/html/CartConvert.1.html                        |  183 -
 doc/html/CartConvert_8cpp.html                     |  135 -
 doc/html/CartConvert_8cpp_source.html              |  278 -
 doc/html/CassiniSoldner_8cpp.html                  |  115 -
 doc/html/CassiniSoldner_8cpp_source.html           |  173 -
 doc/html/CassiniSoldner_8hpp.html                  |  123 -
 doc/html/CassiniSoldner_8hpp_source.html           |  320 -
 doc/html/CircularEngine_8cpp.html                  |  116 -
 doc/html/CircularEngine_8cpp_source.html           |  179 -
 doc/html/CircularEngine_8hpp.html                  |  123 -
 doc/html/CircularEngine_8hpp_source.html           |  282 -
 doc/html/ConicProj.1.html                          |  209 -
 doc/html/ConicProj_8cpp.html                       |  135 -
 doc/html/ConicProj_8cpp_source.html                |  318 -
 doc/html/Constants_8hpp.html                       |  195 -
 doc/html/Constants_8hpp_source.html                |  405 -
 doc/html/DMS_8cpp.html                             |  117 -
 doc/html/DMS_8cpp_source.html                      |  417 -
 doc/html/DMS_8hpp.html                             |  124 -
 doc/html/DMS_8hpp_source.html                      |  450 --
 doc/html/EllipticFunction_8cpp.html                |  115 -
 doc/html/EllipticFunction_8cpp_source.html         |  294 -
 doc/html/EllipticFunction_8hpp.html                |  121 -
 doc/html/EllipticFunction_8hpp_source.html         |  213 -
 doc/html/GeoConvert.1.html                         |  405 -
 doc/html/GeoConvert_8cpp.html                      |  134 -
 doc/html/GeoConvert_8cpp_source.html               |  300 -
 doc/html/GeoCoords_8cpp.html                       |  120 -
 doc/html/GeoCoords_8cpp_source.html                |  238 -
 doc/html/GeoCoords_8hpp.html                       |  122 -
 doc/html/GeoCoords_8hpp_source.html                |  559 --
 doc/html/Geocentric_8cpp.html                      |  115 -
 doc/html/Geocentric_8cpp_source.html               |  258 -
 doc/html/Geocentric_8hpp.html                      |  123 -
 doc/html/Geocentric_8hpp_source.html               |  354 -
 doc/html/Geod.1.html                               |  316 -
 doc/html/Geod_8cpp.html                            |  345 -
 doc/html/Geod_8cpp_source.html                     |  383 -
 doc/html/GeodesicLine_8cpp.html                    |  138 -
 doc/html/GeodesicLine_8cpp_source.html             |  344 -
 doc/html/GeodesicLine_8hpp.html                    |  122 -
 doc/html/GeodesicLine_8hpp_source.html             |  673 --
 doc/html/GeodesicProj.1.html                       |  206 -
 doc/html/GeodesicProj_8cpp.html                    |  137 -
 doc/html/GeodesicProj_8cpp_source.html             |  298 -
 doc/html/Geodesic_8cpp.html                        |  139 -
 doc/html/Geodesic_8cpp_source.html                 | 1540 ----
 doc/html/Geodesic_8hpp.html                        |  138 -
 doc/html/Geodesic_8hpp_source.html                 |  924 ---
 doc/html/Geographic.tag                            | 5663 --------------
 doc/html/Geographic_8doc.html                      |   78 -
 doc/html/GeoidEval.1.html                          |  381 -
 doc/html/GeoidEval_8cpp.html                       |  135 -
 doc/html/GeoidEval_8cpp_source.html                |  372 -
 doc/html/Geoid_8cpp.html                           |  155 -
 doc/html/Geoid_8cpp_source.html                    |  626 --
 doc/html/Geoid_8hpp.html                           |  141 -
 doc/html/Geoid_8hpp_source.html                    |  581 --
 doc/html/Gnomonic_8cpp.html                        |  115 -
 doc/html/Gnomonic_8cpp_source.html                 |  156 -
 doc/html/Gnomonic_8hpp.html                        |  123 -
 doc/html/Gnomonic_8hpp_source.html                 |  304 -
 doc/html/Gravity.1.html                            |  299 -
 doc/html/GravityCircle_8cpp.html                   |  134 -
 doc/html/GravityCircle_8cpp_source.html            |  213 -
 doc/html/GravityCircle_8hpp.html                   |  125 -
 doc/html/GravityCircle_8hpp_source.html            |  381 -
 doc/html/GravityModel_8cpp.html                    |  155 -
 doc/html/GravityModel_8cpp_source.html             |  440 --
 doc/html/GravityModel_8hpp.html                    |  127 -
 doc/html/GravityModel_8hpp_source.html             |  591 --
 doc/html/Gravity_8cpp.html                         |  135 -
 doc/html/Gravity_8cpp_source.html                  |  389 -
 doc/html/LICENSE.txt                               |   23 -
 doc/html/LambertConformalConic_8cpp.html           |  115 -
 doc/html/LambertConformalConic_8cpp_source.html    |  545 --
 doc/html/LambertConformalConic_8hpp.html           |  122 -
 doc/html/LambertConformalConic_8hpp_source.html    |  404 -
 doc/html/LocalCartesian_8cpp.html                  |  115 -
 doc/html/LocalCartesian_8cpp_source.html           |  147 -
 doc/html/LocalCartesian_8hpp.html                  |  122 -
 doc/html/LocalCartesian_8hpp_source.html           |  318 -
 doc/html/MGRS_8cpp.html                            |  116 -
 doc/html/MGRS_8cpp_source.html                     |  419 --
 doc/html/MGRS_8hpp.html                            |  123 -
 doc/html/MGRS_8hpp_source.html                     |  369 -
 doc/html/MagneticCircle_8cpp.html                  |  134 -
 doc/html/MagneticCircle_8cpp_source.html           |  133 -
 doc/html/MagneticCircle_8hpp.html                  |  124 -
 doc/html/MagneticCircle_8hpp_source.html           |  235 -
 doc/html/MagneticField.1.html                      |  306 -
 doc/html/MagneticField_8cpp.html                   |  135 -
 doc/html/MagneticField_8cpp_source.html            |  420 --
 doc/html/MagneticModel_8cpp.html                   |  155 -
 doc/html/MagneticModel_8cpp_source.html            |  334 -
 doc/html/MagneticModel_8hpp.html                   |  126 -
 doc/html/MagneticModel_8hpp_source.html            |  419 --
 doc/html/Math_8hpp.html                            |  175 -
 doc/html/Math_8hpp_source.html                     |  485 --
 doc/html/NormalGravity_8cpp.html                   |  115 -
 doc/html/NormalGravity_8cpp_source.html            |  316 -
 doc/html/NormalGravity_8hpp.html                   |  122 -
 doc/html/NormalGravity_8hpp_source.html            |  387 -
 doc/html/OSGB_8cpp.html                            |  116 -
 doc/html/OSGB_8cpp_source.html                     |  234 -
 doc/html/OSGB_8hpp.html                            |  124 -
 doc/html/OSGB_8hpp_source.html                     |  317 -
 doc/html/Planimeter.1.html                         |  220 -
 doc/html/Planimeter_8cpp.html                      |  135 -
 doc/html/Planimeter_8cpp_source.html               |  270 -
 doc/html/PolarStereographic_8cpp.html              |  115 -
 doc/html/PolarStereographic_8cpp_source.html       |  213 -
 doc/html/PolarStereographic_8hpp.html              |  121 -
 doc/html/PolarStereographic_8hpp_source.html       |  254 -
 doc/html/PolygonArea_8cpp.html                     |  115 -
 doc/html/PolygonArea_8cpp_source.html              |  207 -
 doc/html/PolygonArea_8hpp.html                     |  123 -
 doc/html/PolygonArea_8hpp_source.html              |  270 -
 doc/html/SphericalEngine_8cpp.html                 |  215 -
 doc/html/SphericalEngine_8cpp_source.html          |  555 --
 doc/html/SphericalEngine_8hpp.html                 |  125 -
 doc/html/SphericalEngine_8hpp_source.html          |  439 --
 doc/html/SphericalHarmonic1_8hpp.html              |  124 -
 doc/html/SphericalHarmonic1_8hpp_source.html       |  352 -
 doc/html/SphericalHarmonic2_8hpp.html              |  124 -
 doc/html/SphericalHarmonic2_8hpp_source.html       |  381 -
 doc/html/SphericalHarmonic_8hpp.html               |  125 -
 doc/html/SphericalHarmonic_8hpp_source.html        |  419 --
 doc/html/TransverseMercatorExact_8cpp.html         |  145 -
 doc/html/TransverseMercatorExact_8cpp_source.html  |  580 --
 doc/html/TransverseMercatorExact_8hpp.html         |  122 -
 doc/html/TransverseMercatorExact_8hpp_source.html  |  350 -
 doc/html/TransverseMercatorProj.1.html             |  221 -
 doc/html/TransverseMercatorProj_8cpp.html          |  136 -
 doc/html/TransverseMercatorProj_8cpp_source.html   |  307 -
 doc/html/TransverseMercator_8cpp.html              |  131 -
 doc/html/TransverseMercator_8cpp_source.html       |  577 --
 doc/html/TransverseMercator_8hpp.html              |  138 -
 doc/html/TransverseMercator_8hpp_source.html       |  285 -
 doc/html/UTMUPS_8cpp.html                          |  120 -
 doc/html/UTMUPS_8cpp_source.html                   |  321 -
 doc/html/UTMUPS_8hpp.html                          |  122 -
 doc/html/UTMUPS_8hpp_source.html                   |  397 -
 doc/html/Utility_8cpp.html                         |  115 -
 doc/html/Utility_8cpp_source.html                  |  124 -
 doc/html/Utility_8hpp.html                         |  127 -
 doc/html/Utility_8hpp_source.html                  |  578 --
 doc/html/annotated.html                            |  108 -
 doc/html/bc_s.png                                  |  Bin 677 -> 0 bytes
 .../classGeographicLib_1_1Accumulator-members.html |   90 -
 doc/html/classGeographicLib_1_1Accumulator.html    |  441 --
 ...ssGeographicLib_1_1AlbersEqualArea-members.html |   92 -
 .../classGeographicLib_1_1AlbersEqualArea.html     |  769 --
 ...graphicLib_1_1AzimuthalEquidistant-members.html |   84 -
 ...classGeographicLib_1_1AzimuthalEquidistant.html |  483 --
 ...assGeographicLib_1_1CassiniSoldner-members.html |   89 -
 doc/html/classGeographicLib_1_1CassiniSoldner.html |  576 --
 ...assGeographicLib_1_1CircularEngine-members.html |   85 -
 doc/html/classGeographicLib_1_1CircularEngine.html |  392 -
 .../classGeographicLib_1_1Constants-members.html   |  113 -
 doc/html/classGeographicLib_1_1Constants.html      |  951 ---
 doc/html/classGeographicLib_1_1DMS-members.html    |   97 -
 doc/html/classGeographicLib_1_1DMS.html            |  732 --
 ...sGeographicLib_1_1EllipticFunction-members.html |   86 -
 .../classGeographicLib_1_1EllipticFunction.html    |  390 -
 .../classGeographicLib_1_1GeoCoords-members.html   |  108 -
 doc/html/classGeographicLib_1_1GeoCoords.html      | 1107 ---
 .../classGeographicLib_1_1Geocentric-members.html  |   96 -
 doc/html/classGeographicLib_1_1Geocentric.html     |  735 --
 .../classGeographicLib_1_1Geodesic-members.html    |  117 -
 doc/html/classGeographicLib_1_1Geodesic.html       | 2167 ------
 ...classGeographicLib_1_1GeodesicLine-members.html |  115 -
 doc/html/classGeographicLib_1_1GeodesicLine.html   | 1404 ----
 ...lassGeographicLib_1_1GeographicErr-members.html |   78 -
 doc/html/classGeographicLib_1_1GeographicErr.html  |  142 -
 doc/html/classGeographicLib_1_1Geoid-members.html  |  108 -
 doc/html/classGeographicLib_1_1Geoid.html          |  923 ---
 .../classGeographicLib_1_1Gnomonic-members.html    |   84 -
 doc/html/classGeographicLib_1_1Gnomonic.html       |  507 --
 ...lassGeographicLib_1_1GravityCircle-members.html |   94 -
 doc/html/classGeographicLib_1_1GravityCircle.html  |  710 --
 ...classGeographicLib_1_1GravityModel-members.html |  111 -
 doc/html/classGeographicLib_1_1GravityModel.html   | 1238 ---
 ...raphicLib_1_1LambertConformalConic-members.html |   90 -
 ...lassGeographicLib_1_1LambertConformalConic.html |  742 --
 ...assGeographicLib_1_1LocalCartesian-members.html |   89 -
 doc/html/classGeographicLib_1_1LocalCartesian.html |  662 --
 doc/html/classGeographicLib_1_1MGRS-members.html   |   83 -
 doc/html/classGeographicLib_1_1MGRS.html           |  465 --
 ...assGeographicLib_1_1MagneticCircle-members.html |   87 -
 doc/html/classGeographicLib_1_1MagneticCircle.html |  431 --
 ...lassGeographicLib_1_1MagneticModel-members.html |   96 -
 doc/html/classGeographicLib_1_1MagneticModel.html  |  911 ---
 doc/html/classGeographicLib_1_1Math-members.html   |   98 -
 doc/html/classGeographicLib_1_1Math.html           |  769 --
 ...lassGeographicLib_1_1NormalGravity-members.html |   98 -
 doc/html/classGeographicLib_1_1NormalGravity.html  |  801 --
 doc/html/classGeographicLib_1_1OSGB-members.html   |   90 -
 doc/html/classGeographicLib_1_1OSGB.html           |  630 --
 ...eographicLib_1_1PolarStereographic-members.html |   87 -
 .../classGeographicLib_1_1PolarStereographic.html  |  568 --
 .../classGeographicLib_1_1PolygonArea-members.html |   84 -
 doc/html/classGeographicLib_1_1PolygonArea.html    |  404 -
 ...ssGeographicLib_1_1SphericalEngine-members.html |   85 -
 .../classGeographicLib_1_1SphericalEngine.html     |  420 --
 ...hicLib_1_1SphericalEngine_1_1coeff-members.html |   92 -
 ...sGeographicLib_1_1SphericalEngine_1_1coeff.html |  644 --
 ...GeographicLib_1_1SphericalHarmonic-members.html |   87 -
 .../classGeographicLib_1_1SphericalHarmonic.html   |  558 --
 ...eographicLib_1_1SphericalHarmonic1-members.html |   88 -
 .../classGeographicLib_1_1SphericalHarmonic1.html  |  603 --
 ...eographicLib_1_1SphericalHarmonic2-members.html |   89 -
 .../classGeographicLib_1_1SphericalHarmonic2.html  |  702 --
 ...eographicLib_1_1TransverseMercator-members.html |   86 -
 .../classGeographicLib_1_1TransverseMercator.html  |  531 --
 ...phicLib_1_1TransverseMercatorExact-members.html |   86 -
 ...ssGeographicLib_1_1TransverseMercatorExact.html |  549 --
 doc/html/classGeographicLib_1_1UTMUPS-members.html |   99 -
 doc/html/classGeographicLib_1_1UTMUPS.html         |  751 --
 .../classGeographicLib_1_1Utility-members.html     |   94 -
 doc/html/classGeographicLib_1_1Utility.html        |  903 ---
 doc/html/classes.html                              |  102 -
 doc/html/closed.png                                |  Bin 126 -> 0 bytes
 doc/html/dir_20dd3cf0f425f295158796088ceb05f4.html |  157 -
 doc/html/dir_27ad12676aedce3065ab152db424ea04.html |  103 -
 doc/html/dir_addd23a7fcb542c6c8ac894d486b21be.html |   74 -
 doc/html/dir_b4d36717c8020107727c093197410e9d.html |  176 -
 doc/html/dirs.html                                 |   72 -
 doc/html/doxygen.css                               |  946 ---
 doc/html/doxygen.png                               |  Bin 3942 -> 0 bytes
 doc/html/ellint.mac                                |  159 -
 doc/html/files.html                                |  144 -
 doc/html/functions.html                            |  189 -
 doc/html/functions_0x62.html                       |  111 -
 doc/html/functions_0x63.html                       |  210 -
 doc/html/functions_0x64.html                       |  194 -
 doc/html/functions_0x65.html                       |  147 -
 doc/html/functions_0x66.html                       |  192 -
 doc/html/functions_0x67.html                       |  216 -
 doc/html/functions_0x68.html                       |  124 -
 doc/html/functions_0x69.html                       |  137 -
 doc/html/functions_0x6b.html                       |  117 -
 doc/html/functions_0x6c.html                       |  162 -
 doc/html/functions_0x6d.html                       |  221 -
 doc/html/functions_0x6e.html                       |  152 -
 doc/html/functions_0x6f.html                       |  169 -
 doc/html/functions_0x70.html                       |  130 -
 doc/html/functions_0x72.html                       |  161 -
 doc/html/functions_0x73.html                       |  197 -
 doc/html/functions_0x74.html                       |  127 -
 doc/html/functions_0x75.html                       |  136 -
 doc/html/functions_0x76.html                       |  118 -
 doc/html/functions_0x77.html                       |  135 -
 doc/html/functions_0x79.html                       |  111 -
 doc/html/functions_0x7a.html                       |  114 -
 doc/html/functions_enum.html                       |  102 -
 doc/html/functions_eval.html                       |  266 -
 doc/html/functions_func.html                       |  168 -
 doc/html/functions_func_0x63.html                  |  199 -
 doc/html/functions_func_0x64.html                  |  176 -
 doc/html/functions_func_0x65.html                  |  140 -
 doc/html/functions_func_0x66.html                  |  182 -
 doc/html/functions_func_0x67.html                  |  191 -
 doc/html/functions_func_0x68.html                  |  123 -
 doc/html/functions_func_0x69.html                  |  133 -
 doc/html/functions_func_0x6b.html                  |  116 -
 doc/html/functions_func_0x6c.html                  |  140 -
 doc/html/functions_func_0x6d.html                  |  184 -
 doc/html/functions_func_0x6e.html                  |  134 -
 doc/html/functions_func_0x6f.html                  |  168 -
 doc/html/functions_func_0x70.html                  |  129 -
 doc/html/functions_func_0x72.html                  |  155 -
 doc/html/functions_func_0x73.html                  |  174 -
 doc/html/functions_func_0x74.html                  |  126 -
 doc/html/functions_func_0x75.html                  |  123 -
 doc/html/functions_func_0x76.html                  |  117 -
 doc/html/functions_func_0x77.html                  |  129 -
 doc/html/functions_func_0x79.html                  |  110 -
 doc/html/functions_func_0x7a.html                  |  110 -
 doc/html/functions_rela.html                       |  127 -
 doc/html/functions_type.html                       |   85 -
 doc/html/functions_vars.html                       |  109 -
 doc/html/geocentric.html                           |   91 -
 doc/html/geod.mac                                  |  581 --
 doc/html/geodesic.html                             |  393 -
 doc/html/geodseries30.html                         | 1715 -----
 doc/html/geoid.html                                |  287 -
 doc/html/globals.html                              |  388 -
 doc/html/globals_defs.html                         |  346 -
 doc/html/globals_func.html                         |  100 -
 doc/html/globals_type.html                         |   79 -
 doc/html/gravity.html                              |  356 -
 doc/html/index.html                                |  109 -
 doc/html/install.html                              |  232 -
 doc/html/intro.html                                |   80 -
 doc/html/jquery.js                                 |   54 -
 doc/html/magnetic.html                             |  190 -
 doc/html/namespaceGeographicLib.html               |  151 -
 doc/html/namespaces.html                           |   72 -
 doc/html/nav_f.png                                 |  Bin 159 -> 0 bytes
 doc/html/nav_h.png                                 |  Bin 97 -> 0 bytes
 doc/html/old.html                                  |  591 --
 doc/html/open.png                                  |  Bin 118 -> 0 bytes
 doc/html/organization.html                         |   86 -
 doc/html/other.html                                |  182 -
 doc/html/pages.html                                |   92 -
 doc/html/start.html                                |  139 -
 doc/html/tab_a.png                                 |  Bin 140 -> 0 bytes
 doc/html/tab_b.png                                 |  Bin 178 -> 0 bytes
 doc/html/tab_h.png                                 |  Bin 192 -> 0 bytes
 doc/html/tab_s.png                                 |  Bin 189 -> 0 bytes
 doc/html/tabs.css                                  |   59 -
 doc/html/tm.mac                                    |  400 -
 doc/html/tmseries.mac                              |  214 -
 doc/html/tmseries30.html                           | 1047 ---
 doc/html/transversemercator.html                   |  236 -
 doc/html/utilities.html                            |   90 -
 doc/index.html.in                                  |   24 +
 doc/meridian-measures.png                          |  Bin 0 -> 7994 bytes
 doc/scripts/GeographicLib/DMS.js                   |   38 +-
 doc/scripts/GeographicLib/Geodesic.js              |  394 +-
 doc/scripts/GeographicLib/GeodesicLine.js          |   98 +-
 doc/scripts/GeographicLib/Interface.js             |   48 +-
 doc/scripts/GeographicLib/Math.js                  |   65 +-
 doc/scripts/GeographicLib/PolygonArea.js           |   89 +-
 doc/scripts/geod-calc.html                         |   33 +-
 doc/scripts/geod-google-instructions.html          |   28 +-
 doc/scripts/geod-google.html                       |    1 -
 doc/thompson-tm-graticule-a.png                    |  Bin 0 -> 27085 bytes
 doc/thompson-tm-graticule.png                      |  Bin 0 -> 34398 bytes
 doc/tmseries30.html                                |    1 -
 doc/utilities.html.in                              |   24 +
 dotnet/NETGeographicLib/Accumulator.cpp            |   99 +
 dotnet/NETGeographicLib/Accumulator.h              |  116 +
 dotnet/NETGeographicLib/AlbersEqualArea.cpp        |  186 +
 dotnet/NETGeographicLib/AlbersEqualArea.h          |  269 +
 dotnet/NETGeographicLib/AssemblyInfo.cpp           |   43 +
 dotnet/NETGeographicLib/AzimuthalEquidistant.cpp   |  110 +
 dotnet/NETGeographicLib/AzimuthalEquidistant.h     |  161 +
 dotnet/NETGeographicLib/CMakeLists.txt             |   42 +
 dotnet/NETGeographicLib/CassiniSoldner.cpp         |  134 +
 dotnet/NETGeographicLib/CassiniSoldner.h           |  201 +
 dotnet/NETGeographicLib/CircularEngine.cpp         |   83 +
 dotnet/NETGeographicLib/CircularEngine.h           |  142 +
 dotnet/NETGeographicLib/DMS.cpp                    |  130 +
 dotnet/NETGeographicLib/DMS.h                      |  326 +
 dotnet/NETGeographicLib/Ellipsoid.cpp              |  270 +
 dotnet/NETGeographicLib/Ellipsoid.h                |  521 ++
 dotnet/NETGeographicLib/EllipticFunction.cpp       |  311 +
 dotnet/NETGeographicLib/EllipticFunction.h         |  698 ++
 dotnet/NETGeographicLib/GeoCoords.cpp              |  243 +
 dotnet/NETGeographicLib/GeoCoords.h                |  474 ++
 dotnet/NETGeographicLib/Geocentric.cpp             |  151 +
 dotnet/NETGeographicLib/Geocentric.h               |  227 +
 dotnet/NETGeographicLib/Geodesic.cpp               |  483 ++
 dotnet/NETGeographicLib/Geodesic.h                 |  688 ++
 dotnet/NETGeographicLib/GeodesicExact.cpp          |  489 ++
 dotnet/NETGeographicLib/GeodesicExact.h            |  603 ++
 dotnet/NETGeographicLib/GeodesicLine.cpp           |  350 +
 dotnet/NETGeographicLib/GeodesicLine.h             |  471 ++
 dotnet/NETGeographicLib/GeodesicLineExact.cpp      |  354 +
 dotnet/NETGeographicLib/GeodesicLineExact.h        |  448 ++
 dotnet/NETGeographicLib/Geohash.cpp                |   84 +
 dotnet/NETGeographicLib/Geohash.h                  |  139 +
 dotnet/NETGeographicLib/Geoid.cpp                  |  215 +
 dotnet/NETGeographicLib/Geoid.h                    |  379 +
 dotnet/NETGeographicLib/Gnomonic.cpp               |  116 +
 dotnet/NETGeographicLib/Gnomonic.h                 |  219 +
 dotnet/NETGeographicLib/GravityCircle.cpp          |  178 +
 dotnet/NETGeographicLib/GravityCircle.h            |  256 +
 dotnet/NETGeographicLib/GravityModel.cpp           |  266 +
 dotnet/NETGeographicLib/GravityModel.h             |  513 ++
 dotnet/NETGeographicLib/LambertConformalConic.cpp  |  183 +
 dotnet/NETGeographicLib/LambertConformalConic.h    |  263 +
 dotnet/NETGeographicLib/LocalCartesian.cpp         |  180 +
 dotnet/NETGeographicLib/LocalCartesian.h           |  250 +
 dotnet/NETGeographicLib/MGRS.cpp                   |   83 +
 dotnet/NETGeographicLib/MGRS.h                     |  235 +
 dotnet/NETGeographicLib/MagneticCircle.cpp         |  114 +
 dotnet/NETGeographicLib/MagneticCircle.h           |  147 +
 dotnet/NETGeographicLib/MagneticModel.cpp          |  234 +
 dotnet/NETGeographicLib/MagneticModel.h            |  365 +
 dotnet/NETGeographicLib/NETGeographicLib.cpp       |   49 +
 dotnet/NETGeographicLib/NETGeographicLib.h         |  256 +
 dotnet/NETGeographicLib/NormalGravity.cpp          |  174 +
 dotnet/NETGeographicLib/NormalGravity.h            |  319 +
 dotnet/NETGeographicLib/OSGB.cpp                   |  134 +
 dotnet/NETGeographicLib/OSGB.h                     |  200 +
 dotnet/NETGeographicLib/PolarStereographic.cpp     |  138 +
 dotnet/NETGeographicLib/PolarStereographic.h       |  175 +
 dotnet/NETGeographicLib/PolygonArea.cpp            |  128 +
 dotnet/NETGeographicLib/PolygonArea.h              |  215 +
 dotnet/NETGeographicLib/ReadMe.txt                 |   38 +
 dotnet/NETGeographicLib/SphericalCoefficients.cpp  |   30 +
 dotnet/NETGeographicLib/SphericalCoefficients.h    |  140 +
 dotnet/NETGeographicLib/SphericalHarmonic.cpp      |  127 +
 dotnet/NETGeographicLib/SphericalHarmonic.h        |  271 +
 dotnet/NETGeographicLib/SphericalHarmonic1.cpp     |  168 +
 dotnet/NETGeographicLib/SphericalHarmonic1.h       |  226 +
 dotnet/NETGeographicLib/SphericalHarmonic2.cpp     |  186 +
 dotnet/NETGeographicLib/SphericalHarmonic2.h       |  251 +
 dotnet/NETGeographicLib/TransverseMercator.cpp     |  123 +
 dotnet/NETGeographicLib/TransverseMercator.h       |  188 +
 .../NETGeographicLib/TransverseMercatorExact.cpp   |  128 +
 dotnet/NETGeographicLib/TransverseMercatorExact.h  |  236 +
 dotnet/NETGeographicLib/UTMUPS.cpp                 |  215 +
 dotnet/NETGeographicLib/UTMUPS.h                   |  398 +
 dotnet/NETGeographicLib/stdafx.cpp                 |    5 +
 dotnet/NETGeographicLib/stdafx.h                   |    5 +
 dotnet/Projections/AccumPanel.Designer.cs          |  193 +
 dotnet/Projections/AccumPanel.cs                   |   84 +
 dotnet/Projections/AccumPanel.resx                 |  120 +
 dotnet/Projections/AlbersPanel.Designer.cs         |  551 ++
 dotnet/Projections/AlbersPanel.cs                  |  570 ++
 dotnet/Projections/AlbersPanel.resx                |  123 +
 dotnet/Projections/EllipsoidPanel.Designer.cs      |  493 ++
 dotnet/Projections/EllipsoidPanel.cs               |  117 +
 dotnet/Projections/EllipsoidPanel.resx             |  123 +
 dotnet/Projections/EllipticPanel.Designer.cs       |  529 ++
 dotnet/Projections/EllipticPanel.cs                |  136 +
 dotnet/Projections/EllipticPanel.resx              |  123 +
 dotnet/Projections/Form1.Designer.cs               |  266 +
 dotnet/Projections/Form1.cs                        |   49 +
 dotnet/Projections/Form1.resx                      |  120 +
 dotnet/Projections/GeocentricPanel.Designer.cs     |  426 ++
 dotnet/Projections/GeocentricPanel.cs              |  150 +
 dotnet/Projections/GeocentricPanel.resx            |  126 +
 dotnet/Projections/GeodesicPanel.Designer.cs       |  484 ++
 dotnet/Projections/GeodesicPanel.cs                |  633 ++
 dotnet/Projections/GeodesicPanel.resx              |  123 +
 dotnet/Projections/GeoidPanel.Designer.cs          |  441 ++
 dotnet/Projections/GeoidPanel.cs                   |  170 +
 dotnet/Projections/GeoidPanel.resx                 |  123 +
 dotnet/Projections/GravityPanel.Designer.cs        |  382 +
 dotnet/Projections/GravityPanel.cs                 |  188 +
 dotnet/Projections/GravityPanel.resx               |  123 +
 dotnet/Projections/LocalCartesianPanel.Designer.cs |  520 ++
 dotnet/Projections/LocalCartesianPanel.cs          |  173 +
 dotnet/Projections/LocalCartesianPanel.resx        |  123 +
 dotnet/Projections/MagneticPanel.Designer.cs       |  411 +
 dotnet/Projections/MagneticPanel.cs                |  145 +
 dotnet/Projections/MagneticPanel.resx              |  123 +
 dotnet/Projections/MiscPanel.Designer.cs           |  212 +
 dotnet/Projections/MiscPanel.cs                    |  118 +
 dotnet/Projections/MiscPanel.resx                  |  123 +
 dotnet/Projections/PolarStereoPanel.Designer.cs    |  349 +
 dotnet/Projections/PolarStereoPanel.cs             |  130 +
 dotnet/Projections/PolarStereoPanel.resx           |  126 +
 dotnet/Projections/PolyPanel.Designer.cs           |  389 +
 dotnet/Projections/PolyPanel.cs                    |  129 +
 dotnet/Projections/PolyPanel.resx                  |  120 +
 dotnet/Projections/Program.cs                      |   31 +
 dotnet/Projections/Projections.csproj              |  256 +
 dotnet/Projections/ProjectionsPanel.Designer.cs    |  388 +
 dotnet/Projections/ProjectionsPanel.cs             |  250 +
 dotnet/Projections/ProjectionsPanel.resx           |  123 +
 dotnet/Projections/Properties/AssemblyInfo.cs      |   36 +
 .../Projections/Properties/Resources.Designer.cs   |   71 +
 dotnet/Projections/Properties/Resources.resx       |  117 +
 dotnet/Projections/Properties/Settings.Designer.cs |   30 +
 dotnet/Projections/Properties/Settings.settings    |    7 +
 .../SphericalHarmonicsPanel.Designer.cs            |  390 +
 dotnet/Projections/SphericalHarmonicsPanel.cs      |  199 +
 dotnet/Projections/SphericalHarmonicsPanel.resx    |  123 +
 dotnet/Projections/TypeIIIProjPanel.Designer.cs    |  336 +
 dotnet/Projections/TypeIIIProjPanel.cs             |  157 +
 dotnet/Projections/TypeIIIProjPanel.resx           |  120 +
 dotnet/examples/CS/example-Accumulator.cs          |   25 +
 dotnet/examples/CS/example-AlbersEqualArea.cs      |   39 +
 dotnet/examples/CS/example-AzimuthalEquidistant.cs |   34 +
 dotnet/examples/CS/example-CassiniSoldner.cs       |   34 +
 dotnet/examples/CS/example-CircularEngine.cs       |   30 +
 dotnet/examples/CS/example-DMS.cs                  |   28 +
 dotnet/examples/CS/example-Ellipsoid.cs            |   29 +
 dotnet/examples/CS/example-EllipticFunction.cs     |   39 +
 dotnet/examples/CS/example-GeoCoords.cs            |   26 +
 dotnet/examples/CS/example-Geocentric.cs           |   37 +
 dotnet/examples/CS/example-Geodesic.cs             |   36 +
 dotnet/examples/CS/example-GeodesicExact.cs        |   36 +
 dotnet/examples/CS/example-GeodesicLine.cs         |   50 +
 dotnet/examples/CS/example-GeodesicLineExact.cs    |   46 +
 dotnet/examples/CS/example-Geohash.cs              |   37 +
 dotnet/examples/CS/example-Geoid.cs                |   25 +
 dotnet/examples/CS/example-Gnomonic.cs             |   34 +
 dotnet/examples/CS/example-GravityCircle.cs        |   40 +
 dotnet/examples/CS/example-GravityModel.cs         |   22 +
 .../examples/CS/example-LambertConformalConic.cs   |   48 +
 dotnet/examples/CS/example-LocalCartesian.cs       |   34 +
 dotnet/examples/CS/example-MGRS.cs                 |   40 +
 dotnet/examples/CS/example-MagneticCircle.cs       |   40 +
 dotnet/examples/CS/example-MagneticModel.cs        |   24 +
 dotnet/examples/CS/example-NormalGravity.cs        |   22 +
 dotnet/examples/CS/example-OSGB.cs                 |   39 +
 dotnet/examples/CS/example-PolarStereographic.cs   |   33 +
 dotnet/examples/CS/example-PolygonArea.cs          |   26 +
 dotnet/examples/CS/example-SphericalHarmonic.cs    |   26 +
 dotnet/examples/CS/example-SphericalHarmonic1.cs   |   28 +
 dotnet/examples/CS/example-SphericalHarmonic2.cs   |   35 +
 dotnet/examples/CS/example-TransverseMercator.cs   |   33 +
 .../examples/CS/example-TransverseMercatorExact.cs |   33 +
 dotnet/examples/CS/example-UTMUPS.cs               |   39 +
 dotnet/examples/ManagedCPP/CMakeLists.txt          |   39 +
 dotnet/examples/ManagedCPP/example-Accumulator.cpp |   21 +
 .../ManagedCPP/example-AlbersEqualArea.cpp         |   35 +
 .../ManagedCPP/example-AzimuthalEquidistant.cpp    |   30 +
 .../examples/ManagedCPP/example-CassiniSoldner.cpp |   30 +
 .../examples/ManagedCPP/example-CircularEngine.cpp |   26 +
 dotnet/examples/ManagedCPP/example-DMS.cpp         |   24 +
 dotnet/examples/ManagedCPP/example-Ellipsoid.cpp   |   25 +
 .../ManagedCPP/example-EllipticFunction.cpp        |   35 +
 dotnet/examples/ManagedCPP/example-GeoCoords.cpp   |   22 +
 dotnet/examples/ManagedCPP/example-Geocentric.cpp  |   33 +
 .../examples/ManagedCPP/example-Geodesic-small.cpp |   14 +
 dotnet/examples/ManagedCPP/example-Geodesic.cpp    |   32 +
 .../examples/ManagedCPP/example-GeodesicExact.cpp  |   32 +
 .../examples/ManagedCPP/example-GeodesicLine.cpp   |   43 +
 .../ManagedCPP/example-GeodesicLineExact.cpp       |   43 +
 dotnet/examples/ManagedCPP/example-Geohash.cpp     |   33 +
 dotnet/examples/ManagedCPP/example-Geoid.cpp       |   21 +
 dotnet/examples/ManagedCPP/example-Gnomonic.cpp    |   30 +
 .../examples/ManagedCPP/example-GravityCircle.cpp  |   36 +
 .../examples/ManagedCPP/example-GravityModel.cpp   |   18 +
 .../ManagedCPP/example-LambertConformalConic.cpp   |   44 +
 .../examples/ManagedCPP/example-LocalCartesian.cpp |   30 +
 dotnet/examples/ManagedCPP/example-MGRS.cpp        |   36 +
 .../examples/ManagedCPP/example-MagneticCircle.cpp |   36 +
 .../examples/ManagedCPP/example-MagneticModel.cpp  |   20 +
 .../examples/ManagedCPP/example-NormalGravity.cpp  |   18 +
 dotnet/examples/ManagedCPP/example-OSGB.cpp        |   35 +
 .../ManagedCPP/example-PolarStereographic.cpp      |   29 +
 dotnet/examples/ManagedCPP/example-PolygonArea.cpp |   22 +
 .../ManagedCPP/example-SphericalHarmonic.cpp       |   22 +
 .../ManagedCPP/example-SphericalHarmonic1.cpp      |   24 +
 .../ManagedCPP/example-SphericalHarmonic2.cpp      |   30 +
 .../ManagedCPP/example-TransverseMercator.cpp      |   29 +
 .../ManagedCPP/example-TransverseMercatorExact.cpp |   29 +
 dotnet/examples/ManagedCPP/example-UTMUPS.cpp      |   35 +
 dotnet/examples/VB/example-Accumulator.vb          |   18 +
 dotnet/examples/VB/example-AlbersEqualArea.vb      |   26 +
 dotnet/examples/VB/example-AzimuthalEquidistant.vb |   22 +
 dotnet/examples/VB/example-CassiniSoldner.vb       |   22 +
 dotnet/examples/VB/example-CircularEngine.vb       |   23 +
 dotnet/examples/VB/example-DMS.vb                  |   18 +
 dotnet/examples/VB/example-Ellipsoid.vb            |   22 +
 dotnet/examples/VB/example-EllipticFunction.vb     |   32 +
 dotnet/examples/VB/example-GeoCoords.vb            |   19 +
 dotnet/examples/VB/example-Geocentric.vb           |   25 +
 dotnet/examples/VB/example-Geodesic.vb             |   23 +
 dotnet/examples/VB/example-GeodesicExact.vb        |   23 +
 dotnet/examples/VB/example-GeodesicLine.vb         |   34 +
 dotnet/examples/VB/example-GeodesicLineExact.vb    |   34 +
 dotnet/examples/VB/example-Geohash.vb              |   25 +
 dotnet/examples/VB/example-Geoid.vb                |   17 +
 dotnet/examples/VB/example-Gnomonic.vb             |   22 +
 dotnet/examples/VB/example-GravityCircle.vb        |   29 +
 dotnet/examples/VB/example-GravityModel.vb         |   15 +
 .../examples/VB/example-LambertConformalConic.vb   |   35 +
 dotnet/examples/VB/example-LocalCartesian.vb       |   22 +
 dotnet/examples/VB/example-MGRS.vb                 |   26 +
 dotnet/examples/VB/example-MagneticCircle.vb       |   29 +
 dotnet/examples/VB/example-MagneticModel.vb        |   17 +
 dotnet/examples/VB/example-NormalGravity.vb        |   15 +
 dotnet/examples/VB/example-OSGB.vb                 |   25 +
 dotnet/examples/VB/example-PolarStereographic.vb   |   21 +
 dotnet/examples/VB/example-PolygonArea.vb          |   19 +
 dotnet/examples/VB/example-SphericalHarmonic.vb    |   19 +
 dotnet/examples/VB/example-SphericalHarmonic1.vb   |   21 +
 dotnet/examples/VB/example-SphericalHarmonic2.vb   |   26 +
 dotnet/examples/VB/example-TransverseMercator.vb   |   21 +
 .../examples/VB/example-TransverseMercatorExact.vb |   21 +
 dotnet/examples/VB/example-UTMUPS.vb               |   25 +
 examples/CMakeLists.txt                            |   53 +-
 examples/GeoidToGTX.cpp                            |    6 +-
 examples/Makefile.am                               |    5 +-
 examples/Makefile.in                               |   56 +-
 examples/example-Accumulator.cpp                   |    1 -
 examples/example-AlbersEqualArea.cpp               |    1 -
 examples/example-AzimuthalEquidistant.cpp          |    1 -
 examples/example-CassiniSoldner.cpp                |    1 -
 examples/example-CircularEngine.cpp                |    1 -
 examples/example-Constants.cpp                     |    5 +-
 examples/example-DMS.cpp                           |    1 -
 examples/example-Ellipsoid.cpp                     |   26 +
 examples/example-EllipticFunction.cpp              |   18 +-
 examples/example-GeoCoords.cpp                     |    1 -
 examples/example-Geocentric.cpp                    |    1 -
 examples/example-Geodesic-small.cpp                |    1 -
 examples/example-Geodesic.cpp                      |    1 -
 examples/example-GeodesicExact.cpp                 |   37 +
 examples/example-GeodesicLine.cpp                  |    1 -
 examples/example-GeodesicLineExact.cpp             |   54 +
 examples/example-GeographicErr.cpp                 |    1 -
 examples/example-Geohash.cpp                       |   42 +
 examples/example-Geoid.cpp                         |    1 -
 examples/example-Gnomonic.cpp                      |    1 -
 examples/example-GravityCircle.cpp                 |    1 -
 examples/example-GravityModel.cpp                  |    1 -
 examples/example-LambertConformalConic.cpp         |    2 +-
 examples/example-LocalCartesian.cpp                |    1 -
 examples/example-MGRS.cpp                          |    3 +-
 examples/example-MagneticCircle.cpp                |    1 -
 examples/example-MagneticModel.cpp                 |    1 -
 examples/example-Math.cpp                          |    1 -
 examples/example-NormalGravity.cpp                 |    1 -
 examples/example-OSGB.cpp                          |   18 +-
 examples/example-PolarStereographic.cpp            |    1 -
 examples/example-PolygonArea.cpp                   |    1 -
 examples/example-SphericalEngine.cpp               |    1 -
 examples/example-SphericalHarmonic.cpp             |    1 -
 examples/example-SphericalHarmonic1.cpp            |    1 -
 examples/example-SphericalHarmonic2.cpp            |    1 -
 examples/example-TransverseMercator.cpp            |    1 -
 examples/example-TransverseMercatorExact.cpp       |    1 -
 examples/example-UTMUPS.cpp                        |    1 -
 examples/example-Utility.cpp                       |    1 -
 include/GeographicLib/Accumulator.hpp              |   45 +-
 include/GeographicLib/AlbersEqualArea.hpp          |   92 +-
 include/GeographicLib/AzimuthalEquidistant.hpp     |   36 +-
 include/GeographicLib/CMakeLists.txt               |    4 +-
 include/GeographicLib/CassiniSoldner.hpp           |   34 +-
 include/GeographicLib/CircularEngine.hpp           |   15 +-
 include/GeographicLib/Config-ac.h.in               |    9 +
 include/GeographicLib/Config.h                     |   13 +-
 include/GeographicLib/Config.h.in                  |   28 +-
 include/GeographicLib/Constants.hpp                |   63 +-
 include/GeographicLib/DMS.hpp                      |   99 +-
 include/GeographicLib/Ellipsoid.hpp                |  537 ++
 include/GeographicLib/EllipticFunction.hpp         |  683 +-
 include/GeographicLib/GeoCoords.hpp                |  193 +-
 include/GeographicLib/Geocentric.hpp               |   32 +-
 include/GeographicLib/Geodesic.hpp                 |  308 +-
 include/GeographicLib/GeodesicExact.hpp            |  783 ++
 include/GeographicLib/GeodesicLine.hpp             |  104 +-
 include/GeographicLib/GeodesicLineExact.hpp        |  573 ++
 include/GeographicLib/Geohash.hpp                  |  179 +
 include/GeographicLib/Geoid.hpp                    |  104 +-
 include/GeographicLib/Gnomonic.hpp                 |   95 +-
 include/GeographicLib/GravityCircle.hpp            |   61 +-
 include/GeographicLib/GravityModel.hpp             |  149 +-
 include/GeographicLib/LambertConformalConic.hpp    |   93 +-
 include/GeographicLib/LocalCartesian.hpp           |   32 +-
 include/GeographicLib/MGRS.hpp                     |   65 +-
 include/GeographicLib/MagneticCircle.hpp           |    8 +-
 include/GeographicLib/MagneticModel.hpp            |   25 +-
 include/GeographicLib/Math.hpp                     |  222 +-
 include/GeographicLib/NormalGravity.hpp            |  101 +-
 include/GeographicLib/OSGB.hpp                     |   73 +-
 include/GeographicLib/PolarStereographic.hpp       |   33 +-
 include/GeographicLib/PolygonArea.hpp              |  170 +-
 include/GeographicLib/SphericalEngine.hpp          |   92 +-
 include/GeographicLib/SphericalHarmonic.hpp        |  138 +-
 include/GeographicLib/SphericalHarmonic1.hpp       |   34 +-
 include/GeographicLib/SphericalHarmonic2.hpp       |   40 +-
 include/GeographicLib/TransverseMercator.hpp       |   44 +-
 include/GeographicLib/TransverseMercatorExact.hpp  |   57 +-
 include/GeographicLib/UTMUPS.hpp                   |  167 +-
 include/GeographicLib/Utility.hpp                  |   54 +-
 include/Makefile.am                                |    9 +-
 include/Makefile.in                                |   91 +-
 include/Makefile.mk                                |    6 +-
 install-sh                                         |   35 +-
 java/README.txt                                    |   21 +
 java/direct/pom.xml                                |   87 +
 java/direct/src/main/java/Direct.java              |   27 +
 java/inverse/pom.xml                               |   87 +
 java/inverse/src/main/java/Inverse.java            |   27 +
 java/planimeter/pom.xml                            |   87 +
 java/planimeter/src/main/java/Planimeter.java      |   28 +
 java/pom.xml                                       |   90 +
 .../java/net/sf/geographiclib/Accumulator.java     |  113 +
 .../main/java/net/sf/geographiclib/Constants.java  |   26 +
 .../main/java/net/sf/geographiclib/GeoMath.java    |  191 +
 .../main/java/net/sf/geographiclib/Geodesic.java   | 1563 ++++
 .../java/net/sf/geographiclib/GeodesicData.java    |   78 +
 .../java/net/sf/geographiclib/GeodesicLine.java    |  632 ++
 .../java/net/sf/geographiclib/GeodesicMask.java    |   77 +
 .../java/net/sf/geographiclib/GeographicErr.java   |   24 +
 java/src/main/java/net/sf/geographiclib/Pair.java  |   32 +
 .../java/net/sf/geographiclib/PolygonArea.java     |  383 +
 .../java/net/sf/geographiclib/PolygonResult.java   |   39 +
 .../java/net/sf/geographiclib/package-info.java    |  182 +
 legacy/C/00README.txt                              |   27 +
 legacy/C/CMakeLists.txt                            |   25 +
 legacy/C/direct.c                                  |   32 +
 legacy/C/geodesic.c                                | 1770 +++++
 legacy/C/geodesic.h                                |  745 ++
 legacy/C/inverse.c                                 |   32 +
 legacy/C/planimeter.c                              |   37 +
 legacy/Fortran/00README.txt                        |   27 +
 legacy/Fortran/CMakeLists.txt                      |   18 +
 legacy/Fortran/geoddirect.for                      |   35 +
 legacy/Fortran/geodesic.for                        | 2000 +++++
 legacy/Fortran/geodesic.inc                        |   35 +
 legacy/Fortran/geodinverse.for                     |   33 +
 legacy/Fortran/planimeter.for                      |   36 +
 ltmain.sh                                          |   93 +-
 m4/libtool.m4                                      |  265 +-
 m4/ltoptions.m4                                    |   19 +-
 m4/ltversion.m4                                    |   10 +-
 man/CMakeLists.txt                                 |   42 +-
 man/CartConvert.1                                  |    4 +-
 man/CartConvert.1.html                             |  205 +-
 man/CartConvert.pod                                |    2 -
 man/CartConvert.usage                              |    4 +-
 man/ConicProj.1                                    |    4 +-
 man/ConicProj.1.html                               |  239 +-
 man/ConicProj.pod                                  |    2 -
 man/ConicProj.usage                                |    4 +-
 man/GeoConvert.1                                   |   78 +-
 man/GeoConvert.1.html                              |  509 +-
 man/GeoConvert.pod                                 |   68 +-
 man/GeoConvert.usage                               |   82 +-
 man/Geod.1                                         |  345 -
 man/Geod.1.html                                    |  316 -
 man/Geod.pod                                       |  255 -
 man/Geod.usage                                     |  209 -
 man/GeodSolve.1                                    |  427 ++
 man/GeodSolve.1.html                               |  288 +
 man/GeodSolve.pod                                  |  342 +
 man/GeodSolve.usage                                |  285 +
 man/GeodesicProj.1                                 |   13 +-
 man/GeodesicProj.1.html                            |  236 +-
 man/GeodesicProj.pod                               |   11 +-
 man/GeodesicProj.usage                             |   15 +-
 man/GeoidEval.1                                    |   19 +-
 man/GeoidEval.1.html                               |  481 +-
 man/GeoidEval.pod                                  |   17 +-
 man/GeoidEval.usage                                |   18 +-
 man/Gravity.1                                      |    8 +-
 man/Gravity.1.html                                 |  372 +-
 man/Gravity.pod                                    |    6 +-
 man/Gravity.usage                                  |    8 +-
 man/MagneticField.1                                |    8 +-
 man/MagneticField.1.html                           |  380 +-
 man/MagneticField.pod                              |    6 +-
 man/MagneticField.usage                            |    9 +-
 man/Makefile.am                                    |  179 +-
 man/Makefile.in                                    |  274 +-
 man/Makefile.mk                                    |   20 +-
 man/Planimeter.1                                   |   22 +-
 man/Planimeter.1.html                              |  239 +-
 man/Planimeter.pod                                 |   21 +-
 man/Planimeter.usage                               |   22 +-
 man/TransverseMercatorProj.1                       |   10 +-
 man/TransverseMercatorProj.1.html                  |  257 +-
 man/TransverseMercatorProj.pod                     |    8 +-
 man/TransverseMercatorProj.usage                   |   12 +-
 man/dummy.1.html.in                                |   23 +
 man/dummy.1.in                                     |   12 +
 man/dummy.usage.in                                 |    8 +
 man/makeusage.sh                                   |    6 +-
 matlab/CMakeLists.txt                              |   81 +-
 matlab/Makefile.am                                 |   53 +-
 matlab/Makefile.in                                 |  105 +-
 matlab/Makefile.mk                                 |   15 +-
 matlab/cassini_fwd.m                               |   92 +
 matlab/cassini_inv.m                               |   46 +
 matlab/defaultellipsoid.m                          |   16 +
 matlab/ecc2flat.m                                  |   10 +
 matlab/eqdazim_fwd.m                               |   61 +
 matlab/eqdazim_inv.m                               |   59 +
 matlab/flat2ecc.m                                  |    9 +
 matlab/geocentricforward.cpp                       |   10 +-
 matlab/geocentricforward.m                         |    8 +-
 matlab/geocentricreverse.cpp                       |    8 +-
 matlab/geocentricreverse.m                         |    8 +-
 matlab/geodarea.m                                  |  129 +
 matlab/geoddistance.m                              |  515 ++
 matlab/geoddoc.m                                   |  198 +
 matlab/geodesicdirect.cpp                          |   14 +-
 matlab/geodesicdirect.m                            |   20 +-
 matlab/geodesicinverse.cpp                         |   13 +-
 matlab/geodesicinverse.m                           |   20 +-
 matlab/geodesicline.cpp                            |   14 +-
 matlab/geodesicline.m                              |   20 +-
 matlab/geodproj.m                                  |  139 +
 matlab/geodreckon.m                                |  250 +
 matlab/geographiclibinterface.m                    |    9 +-
 matlab/geoidheight.cpp                             |   16 +-
 matlab/geoidheight.m                               |    6 +-
 matlab/gnomonic_fwd.m                              |   70 +
 matlab/gnomonic_inv.m                              |   98 +
 matlab/localcartesianforward.cpp                   |   14 +-
 matlab/localcartesianforward.m                     |    4 +-
 matlab/localcartesianreverse.cpp                   |   12 +-
 matlab/localcartesianreverse.m                     |    8 +-
 matlab/mgrsforward.cpp                             |    6 +-
 matlab/mgrsforward.m                               |    8 +-
 matlab/mgrsreverse.cpp                             |   10 +-
 matlab/mgrsreverse.m                               |    8 +-
 matlab/polygonarea.cpp                             |   10 +-
 matlab/polygonarea.m                               |   22 +-
 matlab/private/A1m1f.m                             |   10 +
 matlab/private/A2m1f.m                             |   10 +
 matlab/private/A3coeff.m                           |   15 +
 matlab/private/A3f.m                               |   12 +
 matlab/private/AngDiff.m                           |   13 +
 matlab/private/AngNormalize.m                      |    9 +
 matlab/private/AngNormalize2.m                     |    8 +
 matlab/private/AngRound.m                          |   11 +
 matlab/private/C1f.m                               |   22 +
 matlab/private/C1pf.m                              |   22 +
 matlab/private/C2f.m                               |   22 +
 matlab/private/C3coeff.m                           |   25 +
 matlab/private/C3f.m                               |   25 +
 matlab/private/C4coeff.m                           |   32 +
 matlab/private/C4f.m                               |   26 +
 matlab/private/SinCosNorm.m                        |   10 +
 matlab/private/SinCosSeries.m                      |   35 +
 matlab/private/atanhee.m                           |   15 +
 matlab/private/cbrt.m                              |    9 +
 matlab/private/cvmgt.m                             |   23 +
 matlab/private/sumx.m                              |   14 +
 matlab/private/swap.m                              |    8 +
 matlab/tranmerc_fwd.m                              |  170 +
 matlab/tranmerc_inv.m                              |  185 +
 matlab/utm_fwd.m                                   |   50 +
 matlab/utm_inv.m                                   |   51 +
 matlab/utmupsforward.cpp                           |    6 +-
 matlab/utmupsforward.m                             |    6 +-
 matlab/utmupsreverse.cpp                           |    6 +-
 matlab/utmupsreverse.m                             |    8 +-
 maxima/Makefile.mk                                 |    2 -
 maxima/ellint.mac                                  |  232 +-
 maxima/geod.mac                                    |  161 +-
 maxima/geodesic.mac                                | 1195 +++
 maxima/tm.mac                                      |    5 +-
 maxima/tmseries.mac                                |    7 +-
 missing                                            |  148 +-
 python/Makefile.am                                 |    1 -
 python/Makefile.in                                 |   52 +-
 python/Makefile.mk                                 |    2 -
 python/README.txt                                  |    2 -
 python/geographiclib/CMakeLists.txt                |   20 +-
 python/geographiclib/__init__.py                   |    1 +
 python/geographiclib/accumulator.py                |   39 +-
 python/geographiclib/constants.py                  |   11 +-
 python/geographiclib/geodesic.py                   |  499 +-
 python/geographiclib/geodesiccapability.py         |   41 +-
 python/geographiclib/geodesicline.py               |  164 +-
 python/geographiclib/geomath.py                    |   65 +-
 python/geographiclib/polygonarea.py                |  113 +-
 python/setup.py                                    |    4 +-
 src/Accumulator.cpp                                |   23 +
 src/AlbersEqualArea.cpp                            |   35 +-
 src/AzimuthalEquidistant.cpp                       |    6 -
 src/CMakeLists.txt                                 |   84 +-
 src/CassiniSoldner.cpp                             |   12 +-
 src/CircularEngine.cpp                             |    7 -
 src/DMS.cpp                                        |   83 +-
 src/Ellipsoid.cpp                                  |  123 +
 src/EllipticFunction.cpp                           |  500 +-
 src/GeoCoords.cpp                                  |   52 +-
 src/Geocentric.cpp                                 |    8 +-
 src/Geodesic.cpp                                   |  559 +-
 src/GeodesicExact.cpp                              | 7954 ++++++++++++++++++++
 src/GeodesicLine.cpp                               |   79 +-
 src/GeodesicLineExact.cpp                          |  252 +
 src/Geographic.pro                                 |    6 +-
 src/Geohash.cpp                                    |   99 +
 src/Geoid.cpp                                      |   19 +-
 src/Gnomonic.cpp                                   |   12 +-
 src/GravityCircle.cpp                              |   14 +-
 src/GravityModel.cpp                               |   23 +-
 src/LambertConformalConic.cpp                      |   67 +-
 src/LocalCartesian.cpp                             |    8 +-
 src/MGRS.cpp                                       |   56 +-
 src/MagneticCircle.cpp                             |    8 -
 src/MagneticModel.cpp                              |   10 +-
 src/Makefile.am                                    |   19 +-
 src/Makefile.in                                    |  125 +-
 src/Makefile.mk                                    |   20 +-
 src/NormalGravity.cpp                              |    6 -
 src/OSGB.cpp                                       |   20 +-
 src/PolarStereographic.cpp                         |   34 +-
 src/PolygonArea.cpp                                |   84 +-
 src/SphericalEngine.cpp                            |  112 +-
 src/TransverseMercator.cpp                         |  159 +-
 src/TransverseMercatorExact.cpp                    |   59 +-
 src/UTMUPS.cpp                                     |   86 +-
 src/Utility.cpp                                    |    6 -
 tools/CMakeLists.txt                               |  198 +-
 tools/CartConvert.cpp                              |   11 +-
 tools/ConicProj.cpp                                |   15 +-
 tools/GeoConvert.cpp                               |   37 +-
 tools/Geod.cpp                                     |  307 -
 tools/GeodSolve.cpp                                |  335 +
 tools/GeodesicProj.cpp                             |   11 +-
 tools/GeoidEval.cpp                                |   11 +-
 tools/Gravity.cpp                                  |   18 +-
 tools/MagneticField.cpp                            |   17 +-
 tools/Makefile.am                                  |   15 +-
 tools/Makefile.in                                  |  176 +-
 tools/Makefile.mk                                  |   21 +-
 tools/Planimeter.cpp                               |   18 +-
 tools/TransverseMercatorProj.cpp                   |   15 +-
 tools/geographiclib-get-geoids.sh                  |   89 +-
 tools/geographiclib-get-gravity.sh                 |   91 +-
 tools/geographiclib-get-magnetic.sh                |   82 +-
 windows/CartConvert-vc10.vcxproj                   |    8 +-
 windows/ConicProj-vc10.vcxproj                     |    8 +-
 windows/GeoConvert-vc10.vcxproj                    |    8 +-
 windows/Geod-vc10.vcxproj                          |  163 -
 windows/Geod-vc8.vcproj                            |  340 -
 windows/Geod-vc9.vcproj                            |  351 -
 windows/GeodSolve-vc10.vcxproj                     |  163 +
 windows/GeodSolve-vc8.vcproj                       |  340 +
 windows/GeodSolve-vc9.vcproj                       |  351 +
 windows/GeodesicProj-vc10.vcxproj                  |    8 +-
 windows/Geographic-vc10.vcxproj                    |   17 +-
 windows/Geographic-vc8.vcproj                      |   36 +
 windows/Geographic-vc9.vcproj                      |   36 +
 windows/GeographicLib-vc10.sln                     |   46 +-
 windows/GeographicLib-vc8.sln                      |    2 +-
 windows/GeographicLib-vc9.sln                      |    2 +-
 windows/GeoidEval-vc10.vcxproj                     |    8 +-
 windows/Gravity-vc10.vcxproj                       |    8 +-
 windows/MagneticField-vc10.vcxproj                 |    8 +-
 windows/Makefile.mk                                |   25 -
 windows/NETGeographic-vc10.vcxproj                 |  237 +
 windows/Planimeter-vc10.vcxproj                    |    8 +-
 windows/TransverseMercatorProj-vc10.vcxproj        |    8 +-
 978 files changed, 83375 insertions(+), 106159 deletions(-)

diff --git a/00README.txt b/00README.txt
index 902f3af..47ef4b8 100644
--- a/00README.txt
+++ b/00README.txt
@@ -1,5 +1,3 @@
-# $Id: 1001171ae9372d1bfc31646763709bc4e4f279e1 $
-
 A library for geographic projections.
 
 Written by Charles Karney <charles at karney.com> and licensed under
@@ -19,8 +17,8 @@ Files
       Config.h.in, Config.h -- system dependent configuration
       Constants.hpp -- WGS84 constants
       Math.hpp -- math routines
-      Accumulator.hpp -- quad precision adder
       Utility.hpp -- I/O and date routines
+      Accumulator.[ch]pp -- quad precision adder
       PolarStereographic.[ch]pp -- polar stereographic projection
       TransverseMercator.[ch]pp -- transverse Mercator projection
       UTMUPS.[ch]pp -- UTM and UPS
@@ -46,6 +44,8 @@ Files
       AlbersEqualArea.[ch]pp -- Albers equal area projection
       Gnomonic.[ch]pp -- Ellipsoidal gnomonic projection
       OSGB.[ch]pp -- Ordnance Survey grid system
+      Geohash.[ch]pp -- conversions for geohashes
+      Ellipsoid.[ch]pp -- ellipsoid properties
 
     examples/
       example-*.cpp -- simple usage examples for all the classes
@@ -54,7 +54,7 @@ Files
     tools/
       GeoConvert.cpp -- geographic conversion utility
       TransverseMercatorTest.cpp -- TM tester
-      Geod.cpp -- geodesic utility
+      GeodSolve.cpp -- geodesic utility
       CartConvert.cpp -- convert to geocentric and local cartesian
       EquidistantTest.cpp -- exercise AzimuthalEquidistant and CassiniSoldner
       GeoidEval.cpp -- evaluate geoid heights
@@ -78,12 +78,14 @@ Files
       MagneticField-vc9.vcproj -- project for MagneticField
       also files for MS Studio 2005 (with vc8)
       also files for MS Studio 2010 (with vc10)
+      NETGeographic-vc10.vcxproj -- project for .NET wrapper
 
     maxima/
       tm.mac -- Maxima code for high precision TM
       ellint.mac -- Maxima code for elliptic functions needed by tm.mac
       tmseries.mac -- Maxima code for series approximations for TM
-      geod.mac -- Maxima code for series approximates for Geodesic
+      geod.mac -- Maxima code for series approximations for Geodesic
+      geodesic.mac -- Maxima code for geodesic problems
 
     matlab/
       geographiclibinterface.m -- Matlab code to compile Matlab interfaces
@@ -96,15 +98,23 @@ Files
       geodesicline.{cpp,m} -- Matlab code for geodesic lines
       geoidheight.{cpp,m} -- Matlab code to look up geoid heights
       polygonarea.{cpp,m} -- Matlab code for polygon areas
+      geoddoc.m -- documentation for native Matlab geodesic routines
+      geodreckon.m -- native Matlab implementation of direct geodesic problem
+      geoddistance.m -- native Matlab implementation of inverse geodesic problem
+      geodarea.m -- native Matlab implementation of polygon area
+      defaultellipsoid.m, ecc2flat.m, flat2ecc.m -- auxiliary functions
+      geodproj.m -- documentation for geodesic projections
+      *_{fwd,inv}.m -- native Matlab implementation of geodesic projections
+      private/*.m -- internal functions for geodesic routines
 
     doc/
       doxyfile.in -- Doxygen config file
-      Geographic.doc -- main page of Doxygen documentation
+      Geographic.dox -- main page of Doxygen documentation
       geodseries30.html -- geodesic series to 30th order
       tmseries30.html -- transverse Mercator series to 30th order
       html/* -- directory with built documentation
-      scripts/*.html -- demonstrations of the Javascript interface
-      scripts/GeographicLib/*.js -- Javascript implementation of geodesics
+      scripts/*.html -- demonstrations of the JavaScript interface
+      scripts/GeographicLib/*.js -- JavaScript implementation of geodesics
 
     man/
       *.pod -- plain old documentation
@@ -112,7 +122,18 @@ Files
       *.1.html -- man pages in html format
       *.usage -- documentation for incorporation into executables
 
-    python/GeographicLib/*.py -- Python implementation of geodesics
+    python/GeographicLib/*.py -- Python implementation of geodesic routines
+
+    java/.../*.java -- Java implementation of geodesic routines
+
+    dotnet/NETGeographicLib/*.{cpp,h} -- .NET wrapper for GeographicLib
+    dotnet/examples/CS/*.cs -- simple C# examples for each class
+    dotnet/examples/ManagedCPP/*.cpp -- Managed C++ examples for each class
+    dotnet/examples/VB/*.vb -- simple Visual Basic examples for each class
+    dotnet/Projection/* -- a more complex C# application
+
+    legacy/C/* -- C implementation of geodesic routines
+    legacy/Fortran/* -- Fortran implementation of geodesic routines
 
     Makefile.mk -- Unix/Linux makefiles
     configure -- autoconf configuration script
diff --git a/AUTHORS b/AUTHORS
index 1c7c106..01c6997 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,2 +1,6 @@
 Charles Karney <charles at karney.com>
 Francesco Paolo Lovergine <frankie at debian.org> (autoconfiscation)
+Mathieu Peyréga <mathieu.peyrega at gmail.com> (help with gravity models)
+Andrew MacIntyre <Andrew.MacIntyre at acma.gov.au> (python/setup.py)
+Skip Breidbach <skip.breidbach at sri.com> (maven support for Java)
+Scott Heiman <mrmtdew2 at outlook.com> (.NET wrappers + C# examples)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 559ce10..f90893d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,42 +1,84 @@
-# $Id: a3ad2e3a9ae71b3bc393ca9a3f1ab2277f171d35 $
-
-cmake_minimum_required (VERSION 2.6)
 project (GeographicLib)
 
 # Version information
-set (GeographicLib_VERSION_MAJOR 1)
-set (GeographicLib_VERSION_MINOR 21)
-set (GeographicLib_VERSION
-     "${GeographicLib_VERSION_MAJOR}.${GeographicLib_VERSION_MINOR}")
+set (PROJECT_VERSION_MAJOR 1)
+set (PROJECT_VERSION_MINOR 34)
+set (PROJECT_VERSION_PATCH 0)
+set (PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
+if (PROJECT_VERSION_PATCH GREATER 0)
+  set (PROJECT_VERSION "${PROJECT_VERSION}.${PROJECT_VERSION_PATCH}")
+endif ()
+
+set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
+set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
+set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
+
 # The library version tracks the numbering given by libtool in the
 # autoconf set up.
-set (LIBVERSION 9)
-set (LIBVERSIONFULL 9.3.0)
+set (LIBVERSION 10)
+set (LIBVERSIONFULL 10.1.1)
+string (TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
+string (TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
 
-# Set CMAKE_INSTALL_PREFIX from first element of CMAKE_PREFIX_PATH
-if (WIN32)
-  if (DEFINED CMAKE_PREFIX_PATH
-    AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-    list (GET CMAKE_PREFIX_PATH 0 CMAKE_INSTALL_PREFIX)
-    set (CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}
-      CACHE PATH "Installation directory for GeographicLib" FORCE)
-  endif ()
-  message (STATUS "CMAKE_INSTALL_PREFIX set to ${CMAKE_INSTALL_PREFIX}")
-endif ()
+cmake_minimum_required (VERSION 2.8.4) # This version was released 2011-02-16
 
-# User-settable cache variables
+# User-settable variables
+
+# (1) COMMON_INSTALL_PATH governs the installation convention.  If it
+# is on ON (the Linux default), the installation is to a common
+# directory, e.g., /usr/local.  If it is OFF (the Windows default),
+# the installation directory contains the package name, e.g.,
+# c:/pkg/GeographicLib-1.22.  The installation directories for the
+# documentation, cmake configuration, python and matlab interfaces all
+# depend on the variable with deeper paths relative to
+# CMAKE_INSTALL_PREFIX being used when it's ON.
 
-# (1) Build as a shared library?  On Windows systems, this is typically
-# more trouble than it's worth.
 if (WIN32)
-  option (GEOGRAPHIC_SHARED_LIB "Build GeographicLib as a shared library" OFF)
+  option (COMMON_INSTALL_PATH "Use a common installation path for packages" OFF)
 else ()
-  option (GEOGRAPHIC_SHARED_LIB "Build GeographicLib as a shared library" ON)
+  option (COMMON_INSTALL_PATH "Use a common installation path for packages" ON)
 endif ()
 
-# (2) Compiler the Matlab interfaces?  Skip Matlab compilation if OFF
-option (MATLAB_COMPILER
-  "Compiler for matlab/octave interface: mex or mkoctfile or OFF" OFF)
+# The use of PACKAGE_PATH and INSTALL_PATH is now DEPRECATED.
+# (2) PACKAGE_PATH and INSTALL_PATH govern the find_package search
+# path and the installation directory.  (find_package is not used by
+# GeographicLib since it doesn't depend on other packages.  However
+# PACKAGE_PATH is used here for uniformity with other packages which
+# adopt the same conventions.)
+#
+# If PACKAGE_PATH is defined, it is prepended to CMAKE_PREFIX_PATH.
+#
+# If INSTALL_PATH is not specified but PACKAGE_PATH is, then
+# INSTALL_PATH is set to
+#   ${PACKAGE_PATH}, if COMMON_INSTALL_PATH is ON;
+#   ${PACKAGE_PATH}/${PROJECT_NAME}-${PROJECT_VERSION}, otherwise.
+#
+# If INSTALL_PATH is now defined, then set CMAKE_INSTALL_PREFIX to
+# INSTALL_PATH.
+#
+# Typically, only PACKAGE_PATH needs to be specified, e.g.,
+# cmake -D PACKAGE_PATH=/opt .. (on Linux)
+#   => CMAKE_PREFIX_PATH=/opt   CMAKE_INSTALL_PREFIX=/opt
+# cmake -D PACKAGE_PATH=C:/pkg .. (on Windows)
+#   => CMAKE_PREFIX_PATH=C:/pkg CMAKE_INSTALL_PREFIX=C:/pkg/GeographicLib-1.22
+
+if (PACKAGE_PATH)
+  set (CMAKE_PREFIX_PATH ${PACKAGE_PATH} ${CMAKE_PREFIX_PATH})
+  message (STATUS "CMAKE_PREFIX_PATH set to ${CMAKE_PREFIX_PATH}")
+endif ()
+
+if (NOT INSTALL_PATH AND PACKAGE_PATH)
+  if (COMMON_INSTALL_PATH)
+    set (INSTALL_PATH ${PACKAGE_PATH} CACHE PATH "Installation directory" FORCE)
+  else ()
+    set (INSTALL_PATH ${PACKAGE_PATH}/${PROJECT_NAME}-${PROJECT_VERSION}
+      CACHE PATH "Installation directory" FORCE)
+  endif ()
+endif ()
+if (INSTALL_PATH)
+  file (TO_CMAKE_PATH ${INSTALL_PATH} CMAKE_INSTALL_PREFIX)
+  message (STATUS "CMAKE_INSTALL_PREFIX set to ${CMAKE_INSTALL_PREFIX}")
+endif ()
 
 # (3) Where to look for data files.  Various classes look in the geoids,
 # gravity, magnetic, subdirectories of ${GEOGRAPHICLIB_DATA}.
@@ -52,55 +94,160 @@ if (WIN32)
     CACHE PATH "Location for data for GeographicLib")
 else ()
   set (GEOGRAPHICLIB_DATA
-    "${CMAKE_INSTALL_PREFIX}/share/GeographicLib"
+    "/usr/local/share/GeographicLib"
     CACHE PATH "Location for data for GeographicLib")
 endif ()
 
-# (4) Compiler the Matlab interfaces?  Skip Matlab compilation if OFF
-if (WIN32)
-  option (GEOGRAPHICLIB_EXAMPLES
-    "Build example programs in examples directory" OFF)
-elseif ()
-  option (GEOGRAPHICLIB_EXAMPLES
-    "Build example programs in examples directory" ON)
+# (4) Build which libraries?  Possible values are SHARED, STATIC, BOTH.
+if (MSVC)
+  set (GEOGRAPHICLIB_LIB_TYPE STATIC CACHE STRING
+    "Types of library generated: SHARED, STATIC (default), or BOTH")
+else ()
+  set (GEOGRAPHICLIB_LIB_TYPE SHARED CACHE STRING
+    "Types of library generated: SHARED (default), STATIC, or BOTH")
+endif ()
+set_property (CACHE GEOGRAPHICLIB_LIB_TYPE
+  PROPERTY STRINGS "SHARED" "STATIC" "BOTH")
+
+if (GEOGRAPHICLIB_LIB_TYPE STREQUAL "BOTH")
+  set (GEOGRAPHICLIB_SHARED_LIB ON)
+  set (GEOGRAPHICLIB_STATIC_LIB ON)
+  set (GEOGRAPHICLIB_LIB_TYPE_VAL 2)
+elseif (GEOGRAPHICLIB_LIB_TYPE STREQUAL "SHARED")
+  set (GEOGRAPHICLIB_SHARED_LIB ON)
+  set (GEOGRAPHICLIB_STATIC_LIB OFF)
+  set (GEOGRAPHICLIB_LIB_TYPE_VAL 1)
+elseif (GEOGRAPHICLIB_LIB_TYPE STREQUAL "STATIC")
+  set (GEOGRAPHICLIB_SHARED_LIB OFF)
+  set (GEOGRAPHICLIB_STATIC_LIB ON)
+  set (GEOGRAPHICLIB_LIB_TYPE_VAL 0)
+else ()
+  message (FATAL_ERROR
+    "Bad value of GEOGRAPHICLIB_LIB_TYPE, \"${GEOGRAPHICLIB_LIB_TYPE}\" "
+    "(should be SHARED, STATIC or BOTH)")
+endif ()
+
+if (GEOGRAPHICLIB_STATIC_LIB)
+  set (PROJECT_STATIC_LIBRARIES GeographicLib_STATIC)
+  set (PROJECT_STATIC_DEFINITIONS -DGEOGRAPHICLIB_SHARED_LIB=0)
+else ()
+  set (PROJECT_STATIC_LIBRARIES)
+  set (PROJECT_STATIC_DEFINITIONS)
+endif ()
+
+if (GEOGRAPHICLIB_SHARED_LIB)
+  set (PROJECT_SHARED_LIBRARIES GeographicLib)
+  set (PROJECT_LIBRARIES ${PROJECT_SHARED_LIBRARIES})
+  set (PROJECT_SHARED_DEFINITIONS -DGEOGRAPHICLIB_SHARED_LIB=1)
+  set (PROJECT_DEFINITIONS ${PROJECT_SHARED_DEFINITIONS})
+else ()
+  set (PROJECT_SHARED_LIBRARIES)
+  set (PROJECT_LIBRARIES ${PROJECT_STATIC_LIBRARIES})
+  set (PROJECT_SHARED_DEFINITIONS)
+  set (PROJECT_DEFINITIONS ${PROJECT_STATIC_DEFINITIONS})
+endif ()
+
+# (5) Compile the Matlab interfaces?  Skip Matlab compilation if OFF
+set (MATLAB_COMPILER OFF CACHE STRING
+  "Compiler for matlab/octave interface: mex or mkoctfile or OFF")
+set_property (CACHE MATLAB_COMPILER PROPERTY STRINGS "mex" "mkoctfile" OFF)
+
+# (6) Create the documentation?  This depends on whether doxygen can be
+# found.  If this is OFF, then links will be provided to the online
+# documentation on Sourceforge.
+option (GEOGRAPHICLIB_DOCUMENTATION
+  "Use doxygen to create the documentation" OFF)
+
+# (7) Build .NET wrapper library NETGeographicLib.  This only applies to
+# Windows.  Default is OFF, because, currently, most people don't use
+# this interface.
+option (BUILD_NETGEOGRAPHICLIB "Build NETGeographicLib library" OFF)
+
+# (8) Set the default "real" precision.  This should probably be left
+# at 2 (double).
+set (GEOGRAPHICLIB_PRECISION 2 CACHE STRING
+  "Default real precision: 1 = float, 2 = double, 3 = long double")
+set_property (CACHE GEOGRAPHICLIB_PRECISION PROPERTY STRINGS 1 2 3)
+
+# (9) When making a binary package, should we include the debug version
+# of the library?  This applies to MSVC only, because that's the
+# platform where debug and release compilations do not inter-operate.
+# It requires building as follows:
+#   cmake --build . --config Debug   --target ALL_BUILD
+#   cmake --build . --config Release --target ALL_BUILD
+#   cmake --build . --config Release --target PACKAGE
+option (PACKAGE_DEBUG_LIBS
+  "Include debug versions of library in binary package" OFF)
+
+set (LIBNAME Geographic)
+if (MSVC OR CMAKE_CONFIGURATION_TYPES)
+  # For multi-config systems and for Visual Studio, the debug version of
+  # the library is called Geographic_d.
+  set (CMAKE_DEBUG_POSTFIX _d)
 endif ()
 
-# The debug version of the library is called Geographic_d.
-set (CMAKE_DEBUG_POSTFIX _d)
+if (NOT MSVC)
+  # Set the run time path for shared libraries for non-Windows machines.
+  # (1) include link path for external packages (not needed with
+  # GeographicLib because there are no external packages).
+  set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+  # (2) include installed path for GeographicLib.
+  if (NOT APPLE)
+    # Use relative path so that package is relocatable
+    set (CMAKE_INSTALL_RPATH "\$ORIGIN/../lib${LIB_SUFFIX}")
+  else ()
+    # Need absolute path with MacOSx
+    set (CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
+  endif ()
+endif ()
 
-# Determine system properties
-include (CheckTypeSize)
-check_type_size ("long double" LONG_DOUBLE BUILTIN_TYPES_ONLY)
+if (NOT CYGWIN)
+  # cygwin has a long double but the support for ::cbrtl etc is missing
+  include (CheckTypeSize)
+  check_type_size ("long double" LONG_DOUBLE BUILTIN_TYPES_ONLY)
+endif ()
 include (TestBigEndian)
 test_big_endian (WORDS_BIGENDIAN)
 
 # Create a Config.h to expose system information to the compiler
 configure_file (
-    "${PROJECT_SOURCE_DIR}/include/GeographicLib/Config.h.in"
-    "${PROJECT_BINARY_DIR}/include/GeographicLib/Config.h" )
-
-# The documentation depends on doxygen.  In addition, the man pages are
-# written as pod files and converted to nroff format, C++ code, and
-# html.  Because this require tools that may not be available on an
-# end-user's system, the creation of the final documentation is
-# therefore only done in "MAINTAINER" mode.  The maintainer runs "make
-# distrib-all" which installs the transformed documentation files into
-# the source tree.
-if (NOT WIN32)
+  include/GeographicLib/Config.h.in
+  include/GeographicLib/Config.h )
+
+# The documentation depends on doxygen.  Need version 1.8.1.2 or later
+# for support of greek letters and math symbols.
+if (GEOGRAPHICLIB_DOCUMENTATION)
   set (DOXYGEN_SKIP_DOT ON)
-  find_package (Doxygen)
+  find_package (Doxygen 1.8.1.2)
+  if (DOXYGEN_FOUND)
+    execute_process (COMMAND ${DOXYGEN_EXECUTABLE} --version
+      OUTPUT_VARIABLE DOXYGEN_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if (DOXYGEN_VERSION VERSION_LESS 1.4.0)
+      set (DOXYGEN_FOUND FALSE)
+      message (STATUS "Doxygen version found, ${DOXYGEN_VERSION}, is too old")
+    endif ()
+  endif ()
+endif ()
+
+# The man pages are written as pod files and converted to nroff format,
+# C++ code, and html.  Because this require tools that may not be
+# available on an end-user's system, the creation of the final
+# documentation is therefore only done in "MAINTAINER" mode.  The
+# maintainer runs "make distrib-all" which installs the transformed
+# documentation files into the source tree.
+if (NOT WIN32 AND NOT APPLE)
   find_program (HAVE_POD2MAN pod2man)
   find_program (HAVE_POD2HTML pod2html)
-  find_program (HAVE_DOXYGEN doxygen)
+  find_program (HAVE_COL col)
 endif ()
-if (NOT WIN32 AND HAVE_POD2MAN AND HAVE_POD2HTML AND DOXYGEN_FOUND)
-  set (MAINTAINER ON CACHE BOOL "Allow build of additional components")
+if (HAVE_POD2MAN AND HAVE_POD2HTML AND HAVE_COL)
+  set (MAINTAINER ON)
 else ()
-  set (MAINTAINER OFF CACHE BOOL "Allow build of additional components")
+  set (MAINTAINER OFF)
 endif ()
 if (MAINTAINER)
   add_custom_target (distrib-all)
-  add_dependencies (distrib-all distrib-man distrib-doc)
+  add_dependencies (distrib-all distrib-man)
 endif ()
 
 # Look for the tool to compile the Matlab interfaces.
@@ -118,8 +265,15 @@ if (MATLAB_COMPILER)
       PATHS "${MATLABDIR}")
     execute_process (COMMAND "${MEXEXTPROG}"
       OUTPUT_VARIABLE MEXEXT OUTPUT_STRIP_TRAILING_WHITESPACE)
+    set (MEXOPTIONS "-largeArrayDims")
   else ()
     set (MEXEXT "mex")
+    set (MEXOPTIONS "--mex")
+  endif ()
+  if (NOT MSVC)
+    # mex files are shared objects => require static lib to be built with
+    # position independent code
+    set (CMAKE_POSITION_INDEPENDENT_CODE ON)
   endif ()
   if (NOT MEX)
     message (WARNING
@@ -136,22 +290,48 @@ if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
   set (CMAKE_BUILD_TYPE Release)
 endif ()
 
-# On non-Windows machine, make the compiler more picky.
-if (NOT WIN32)
+# Make the compiler more picky.
+if (MSVC)
+  string (REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
+else ()
   set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
+  # check for C++11 support
+  include (CheckCXXCompilerFlag)
+  set (CXX11FLAG "-std=c++11")
+  check_cxx_compiler_flag (${CXX11FLAG} CXX11TEST1)
+  if (NOT CXX11TEST1)
+    set (CXX11FLAG "-std=c++0x")
+    check_cxx_compiler_flag (${CXX11FLAG} CXX11TEST2)
+    if (NOT CXX11TEST2)
+      unset (CXX11FLAG)
+    endif ()
+  endif ()
+  if (CXX11FLAG)
+    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11FLAG}")
+  endif ()
+endif ()
+
+if (APPLE)
+  if (CMAKE_SYSTEM_PROCESSOR MATCHES "i.86" OR
+      CMAKE_SYSTEM_PROCESSOR MATCHES "amd64" OR
+      CMAKE_SYSTEM_PROCESSOR MATCHES "x86")
+    set (CMAKE_OSX_ARCHITECTURES "i386 -arch x86_64")
+  endif ()
 endif ()
 
 # The list of tools (to be installed into, e.g., /usr/local/bin)
-set (TOOLS CartConvert ConicProj GeodesicProj GeoConvert Geod
+set (TOOLS CartConvert ConicProj GeodesicProj GeoConvert GeodSolve
   GeoidEval Gravity MagneticField Planimeter TransverseMercatorProj)
 # The list of scripts (to be installed into, e.g., /usr/local/sbin)
 set (SCRIPTS
   geographiclib-get-geoids geographiclib-get-gravity geographiclib-get-magnetic)
 
+set_property (GLOBAL PROPERTY USE_FOLDERS ON)
+
 # Set the include directories.  Look in ${PROJECT_BINARY_DIR}/include
 # first because that's where Config.h will be
-include_directories ("${PROJECT_BINARY_DIR}/include")
-include_directories (include)
+include_directories ("${PROJECT_BINARY_DIR}/include" include)
 
 # The list of subdirectories to process
 add_subdirectory (src)
@@ -161,40 +341,24 @@ add_subdirectory (man)
 add_subdirectory (doc)
 add_subdirectory (matlab)
 add_subdirectory (python/geographiclib)
-if (GEOGRAPHICLIB_EXAMPLES)
+if (GEOGRAPHICLIB_PRECISION EQUAL 2)
+  # The examples assume double precision
   add_subdirectory (examples)
 endif ()
-
-# config file support for find_package(GeographicLib).  This only
-# supports finding GeographicLib in the "install" tree (as opposed to
-# the "build" tree).  The process installs geographiclib-config.cmake in
-# ${INSTALL_CMAKE_DIR} and @GEOGRAPHICLIB_ROOT_DIR@ is the relative path
-# to the root from there.  (Thus the whole install tree can be
-# relocated.)
-if (WIN32)
-  set (INSTALL_CMAKE_DIR "cmake")
-  set (GEOGRAPHICLIB_ROOT_DIR "..")
-else ()
-  set (INSTALL_CMAKE_DIR
-    "share/cmake/${PROJECT_NAME}-${GeographicLib_VERSION}")
-  set (GEOGRAPHICLIB_ROOT_DIR "../../..")
+if (BUILD_NETGEOGRAPHICLIB)
+  set (NETGEOGRAPHICLIB_LIBRARIES NETGeographicLib)
+  set (NETLIBNAME NETGeographic)
+  add_subdirectory (dotnet/NETGeographicLib)
+  if (GEOGRAPHICLIB_PRECISION EQUAL 2)
+    add_subdirectory (dotnet/examples/ManagedCPP)
+  endif ()
 endif ()
-configure_file (cmake/geographiclib-config.cmake.in
-  "${PROJECT_BINARY_DIR}/cmake/geographiclib-config.cmake" @ONLY)
-configure_file (cmake/geographiclib-config-version.cmake.in
-  "${PROJECT_BINARY_DIR}/cmake/geographiclib-config-version.cmake" @ONLY)
-install (FILES
-  "${PROJECT_BINARY_DIR}/cmake/geographiclib-config.cmake"
-  "${PROJECT_BINARY_DIR}/cmake/geographiclib-config-version.cmake"
-  DESTINATION "${INSTALL_CMAKE_DIR}")
-
-# Make information about the cmake targets (the library and the tools)
-# available.
-install (EXPORT depends
-  FILE geographiclib-depends.cmake
-  DESTINATION "${INSTALL_CMAKE_DIR}")
-
-# Packaging support; we deal with 
+add_subdirectory (cmake)
+if (EXISTS ${PROJECT_SOURCE_DIR}/tests/CMakeLists.txt)
+  add_subdirectory (tests)
+endif ()
+
+# Packaging support; we deal with
 # (1) a source distribution: cmake make a tar.gz file and the zip file
 # is created from this.  Only the maintainer can do this, because of
 # the need to generate additional documentation files.
@@ -207,17 +371,15 @@ if (NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
   # squelch the warning.
   set (CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON)
 endif ()
+set (CMAKE_INSTALL_DEBUG_LIBRARIES ON)
 include (InstallRequiredSystemLibraries)
 
 # The configuration of CPack is via variable that need to be set before
 # the include (CPack).
-set (CPACK_PACKAGE_VERSION_MAJOR ${GeographicLib_VERSION_MAJOR})
-set (CPACK_PACKAGE_VERSION_MINOR ${GeographicLib_VERSION_MINOR})
-set (CPACK_PACKAGE_VERSION_PATCH 0)
 set (CPACK_PACKAGE_CONTACT charles at karney.com)
 set (CPACK_PACKAGE_VENDOR "GeographicLib")
 set (CPACK_PACKAGE_DESCRIPTION_SUMMARY
-  "Geographic library, utilities, and documentation")
+  "GeographicLib library, utilities, and documentation")
 # The list of files to be excluded from the source distribution.
 set (CPACK_SOURCE_IGNORE_FILES
   "#"
@@ -226,14 +388,14 @@ set (CPACK_SOURCE_IGNORE_FILES
   "${PROJECT_SOURCE_DIR}/BUILD"
   "${PROJECT_SOURCE_DIR}/(tests|testdata|cgi-bin|.*\\\\.cache)/"
   "${PROJECT_SOURCE_DIR}/(distrib|.*-distrib|.*-installer|geodesic-papers)/"
-  "${PROJECT_SOURCE_DIR}/[^/]*\\\\.(html|kmz)\$"
+  "${PROJECT_SOURCE_DIR}/[^/]*\\\\.(html|kmz|pdf|xml)\$"
   "${PROJECT_SOURCE_DIR}/(autogen|biblio|js-compress)\\\\.sh\$"
-  "${PROJECT_SOURCE_DIR}/(geodesic-biblio.txt|makefile-admin)\$" )
+  "${PROJECT_SOURCE_DIR}/(geodesic-biblio.txt|makefile-admin|[^/]*\\\\.png)\$"
+  "${PROJECT_SOURCE_DIR}/matlab/matlab-.*blurb.txt\$" )
 set (CPACK_SOURCE_GENERATOR TGZ)
 
 set (CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE.txt)
-set (CPACK_PACKAGE_INSTALL_DIRECTORY
-  "${PROJECT_NAME}-${GeographicLib_VERSION}")
+set (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}-${PROJECT_VERSION}")
 set (CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
 
 if (WIN32)
@@ -246,33 +408,29 @@ if (WIN32)
     # Hardcode the prefix for Visual Studio 10
     set (CPACK_NSIS_INSTALL_ROOT "C:\\\\pkg-vc10-x64")
     set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}-win64")
-    set (CPACK_NSIS_PACKAGE_NAME
-      "${PROJECT_NAME} x64 ${GeographicLib_VERSION}")
+    set (CPACK_NSIS_PACKAGE_NAME "${PROJECT_NAME} x64 ${PROJECT_VERSION}")
     set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY
-      "${PROJECT_NAME}-x64-${GeographicLib_VERSION}")
+      "${PROJECT_NAME}-x64-${PROJECT_VERSION}")
   else ()
     # Hardcode the prefix for Visual Studio 10
     set (CPACK_NSIS_INSTALL_ROOT "C:\\\\pkg-vc10")
     set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}-win32")
-    set (CPACK_NSIS_PACKAGE_NAME
-      "${PROJECT_NAME} ${GeographicLib_VERSION}")
+    set (CPACK_NSIS_PACKAGE_NAME "${PROJECT_NAME} ${PROJECT_VERSION}")
     set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY
-      "${PROJECT_NAME}-${GeographicLib_VERSION}")
+      "${PROJECT_NAME}-${PROJECT_VERSION}")
   endif ()
   set (CPACK_NSIS_DISPLAY_NAME ${CPACK_NSIS_PACKAGE_NAME})
-  set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
-  CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Library Documentation.lnk\\\" \\\"$INSTDIR\\\\share\\\\doc\\\\GeographicLib\\\\html\\\\index.html\\\"
-  CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Utility Documentation.lnk\\\" \\\"$INSTDIR\\\\share\\\\doc\\\\GeographicLib\\\\html\\\\utilities.html\\\"
-")
-  set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
-  !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
-  Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Library Documentation.lnk\\\"
-  Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Utility Documentation.lnk\\\"
-")
+  set (CPACK_NSIS_MENU_LINKS
+    "http://geographiclib.sf.net/${PROJECT_VERSION}/index.html"
+    "Library documentation"
+    "http://geographiclib.sf.net/${PROJECT_VERSION}/utilities.html"
+    "Utilities documentation"
+    "http://geographiclib.sf.net" "GeographicLib home page"
+    "http://sf.net/projects/geographiclib/" "Main project page")
   set (CPACK_NSIS_MODIFY_PATH ON)
 elseif (APPLE)
   # Not tested
-  set (CPACK_GENERATOR DMG)
+  set (CPACK_GENERATOR Bundle)
   set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}-darwin")
 else ()
   # Not tested
@@ -298,18 +456,29 @@ if (MAINTAINER)
     COMMAND
       cd _CPack_Packages/Linux-Source/TGZ/${CPACK_SOURCE_PACKAGE_FILE_NAME} &&
       echo include Makefile.mk > Makefile &&
-      echo "\\#define" GEOGRAPHICLIB_VERSION_STRING
-      \\"${GeographicLib_VERSION}\\" > include/GeographicLib/Config.h
+      sed -e "s/Unconfigured/${PROJECT_VERSION}/"
+      -e "s/MAJOR .*/MAJOR ${CPACK_PACKAGE_VERSION_MAJOR}/"
+      -e "s/MINOR .*/MINOR ${CPACK_PACKAGE_VERSION_MINOR}/"
+      -e "s/PATCH .*/PATCH ${CPACK_PACKAGE_VERSION_PATCH}/"
+      include/GeographicLib/Config.h > include/GeographicLib/Config.h.new &&
+      mv include/GeographicLib/Config.h.new include/GeographicLib/Config.h
     COMMAND
       cd _CPack_Packages/Linux-Source/TGZ/${CPACK_SOURCE_PACKAGE_FILE_NAME} &&
-      touch man/*.usage man/*.1 man/*.1.html && touch doc/html/index.html
+      touch man/[A-Za-z]*.usage man/[A-Za-z]*.1 man/[A-Za-z]*.1.html &&
+      chmod -R g-w .
     COMMAND
       cd _CPack_Packages/Linux-Source/TGZ &&
       find ${CPACK_SOURCE_PACKAGE_FILE_NAME} -type f |
       tar cfzT ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz -
     COMMAND
-      rm -f ${CPACK_SOURCE_PACKAGE_FILE_NAME}.zip &&
-      cd _CPack_Packages/Linux-Source/TGZ &&
+      rm -f ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME}.zip &&
+      rsync -a --delete
+      _CPack_Packages/Linux-Source/TGZ/${CPACK_SOURCE_PACKAGE_FILE_NAME}
+      _CPack_Packages/Linux-Source/TGZ.DOS/ &&
+      cd _CPack_Packages/Linux-Source/TGZ.DOS &&
+      find . -type f |
+      egrep  '/\(doxyfile.*\\.in|MANIFEST.in|NEWS|AUTHORS|INSTALL|pom\\.xml|dummy.*\\.in|.*\\.\(cpp|hpp|h\\.in|txt|pro|usage|pod|py|m|mac|cmake\\.in|cmake|h|js|c|for|dox|cs|vb|inc|java|html\\.in\)\)$$' |
+      xargs unix2dos -q -k &&
       find ${CPACK_SOURCE_PACKAGE_FILE_NAME} -type f |
       zip -q ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME}.zip -@
   )
diff --git a/INSTALL b/INSTALL
index e1a6a60..f669d15 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,9 +1,3 @@
-# $Id: 81231982ade5ead96deeb78912e17c5cf4bdb4b6 $
-
 For installation instructions, open
 
-  doc/html/install.html
-
-or
-
   http://geographiclib.sourceforge.net/html/install.html
diff --git a/LICENSE.txt b/LICENSE.txt
index 692304c..e70861b 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,6 +1,6 @@
 This license applies to GeographicLib, versions 1.12 and later.
 
-Copyright (c) 2008-2012, Charles Karney
+Copyright (c) 2008-2013, Charles Karney
 
 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
diff --git a/Makefile.am b/Makefile.am
index d187664..4008b07 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,6 @@
 # Makefile.am
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
-# $Id: 9e9190d7a798cd96abe4d009adc10535e2fffe73 $
 
 AUTOMAKE_OPTIONS = foreign
 
@@ -11,10 +10,13 @@ ACLOCAL_AMFLAGS = -I m4
 SUBDIRS = src man tools doc include matlab python cmake examples
 
 EXTRA_DIST = AUTHORS 00README.txt LICENSE.txt NEWS INSTALL \
-	Makefile.mk CMakeLists.txt windows maxima doc
+	Makefile.mk CMakeLists.txt windows maxima doc legacy java dotnet
 
 dist-hook:
+	rm -rf $(distdir)/doc/html $(distdir)/doc/manpages ; \
 	find $(distdir)/maxima -type f -name '*.lsp' | xargs rm -rf ; \
+	rm -rf $(distdir)/java/targets ; \
+	find $(distdir)/java -type f -name '*.class' | xargs rm -rf ; \
 	find $(distdir)/windows -mindepth 1 -type d | xargs rm -rf ; \
 	find $(distdir)/windows -type f \
 		! \( -name '*.sln' -o -name '*.vc*proj' -o -name '*.mk' \)| \
@@ -22,9 +24,13 @@ dist-hook:
 	find $(distdir) \
 		\( -name .svn -o -name '.git*' -o -name CVS -o -name Makefile -o -name '*~' -o -name '*#*' -o -name 'CMakeFiles' -o -name '*.log' -o -name '*.tmp' -o -name '*.pyc' -o -name '*.bak' -o -name '*.BAK' -o -name geographiclib.js \)| \
 		xargs rm -rf ; \
-	echo include Makefile.mk > $(distdir)/Makefile
-	echo '#define' GEOGRAPHICLIB_VERSION_STRING \
-	\"$(PACKAGE_VERSION)\" > $(distdir)/include/GeographicLib/Config.h
+	echo include Makefile.mk > $(distdir)/Makefile ; \
+	sed -e "s/Unconfigured/$(PACKAGE_VERSION)/" \
+		-e "s/MAJOR .*/MAJOR ${GEOGRAPHICLIB_VERSION_MAJOR}/" \
+		-e "s/MINOR .*/MINOR ${GEOGRAPHICLIB_VERSION_MINOR}/" \
+		-e "s/PATCH .*/PATCH ${GEOGRAPHICLIB_VERSION_PATCH}/" \
+		$(top_srcdir)/include/GeographicLib/Config.h > \
+		$(distdir)/include/GeographicLib/Config.h
 # Custom rules
 
 all-local: man doc
diff --git a/Makefile.in b/Makefile.in
index c6391bf..44520c3 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,8 +18,24 @@
 # Makefile.am
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
-# $Id: 9e9190d7a798cd96abe4d009adc10535e2fffe73 $
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -68,21 +83,30 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir dist dist-all distcheck
+	cscope distdir dist dist-all distcheck
 ETAGS = etags
 CTAGS = ctags
+CSCOPE = cscope
 DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -110,7 +134,10 @@ am__relativize = \
   reldir="$$dir2"
 DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
 distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -122,6 +149,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -132,6 +160,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -140,6 +169,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -175,6 +207,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -243,12 +277,12 @@ AUTOMAKE_OPTIONS = foreign
 ACLOCAL_AMFLAGS = -I m4
 SUBDIRS = src man tools doc include matlab python cmake examples
 EXTRA_DIST = AUTHORS 00README.txt LICENSE.txt NEWS INSTALL \
-	Makefile.mk CMakeLists.txt windows maxima doc
+	Makefile.mk CMakeLists.txt windows maxima doc legacy java dotnet
 
 all: all-recursive
 
 .SUFFIXES:
-am--refresh:
+am--refresh: Makefile
 	@:
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
@@ -284,10 +318,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 include/GeographicLib/Config-ac.h: include/GeographicLib/stamp-h1
-	@if test ! -f $@; then \
-	  rm -f include/GeographicLib/stamp-h1; \
-	  $(MAKE) $(AM_MAKEFLAGS) include/GeographicLib/stamp-h1; \
-	else :; fi
+	@if test ! -f $@; then rm -f include/GeographicLib/stamp-h1; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) include/GeographicLib/stamp-h1; else :; fi
 
 include/GeographicLib/stamp-h1: $(top_srcdir)/include/GeographicLib/Config-ac.h.in $(top_builddir)/config.status
 	@rm -f include/GeographicLib/stamp-h1
@@ -310,12 +342,12 @@ distclean-libtool:
 	-rm -f libtool config.lt
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS):
 	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
@@ -325,7 +357,11 @@ $(RECURSIVE_TARGETS):
 	done; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
 	  echo "Making $$target in $$subdir"; \
 	  if test "$$subdir" = "."; then \
 	    dot_seen=yes; \
@@ -339,37 +375,6 @@ $(RECURSIVE_TARGETS):
 	if test "$$dot_seen" = "no"; then \
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
 tags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
@@ -378,6 +383,10 @@ ctags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
 	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -441,8 +450,32 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscope: cscope.files
+	test ! -s cscope.files \
+	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+
+clean-cscope:
+	-rm -f cscope.files
+
+cscope.files: clean-cscope cscopelist-recursive cscopelist
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
 distdir: $(DISTFILES)
 	$(am__remove_distdir)
@@ -478,13 +511,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -516,36 +546,36 @@ distdir: $(DISTFILES)
 	|| chmod -R a+r "$(distdir)"
 dist-gzip: distdir
 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__post_remove_distdir)
 
-dist-lzma: distdir
-	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
-	$(am__remove_distdir)
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__post_remove_distdir)
 
 dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
-	$(am__remove_distdir)
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-shar: distdir
 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-zip: distdir
 	-rm -f $(distdir).zip
 	zip -rq $(distdir).zip $(distdir)
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
-dist dist-all: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
+dist dist-all:
+	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+	$(am__post_remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
 # it guarantees that the distribution is self-contained by making another
@@ -556,8 +586,8 @@ distcheck: dist
 	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.lzma*) \
-	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
@@ -567,7 +597,7 @@ distcheck: dist
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
-	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	chmod -R a-w $(distdir); chmod u+w $(distdir)
 	mkdir $(distdir)/_build
 	mkdir $(distdir)/_inst
 	chmod a-w $(distdir)
@@ -577,6 +607,7 @@ distcheck: dist
 	  && am__cwd=`pwd` \
 	  && $(am__cd) $(distdir)/_build \
 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -600,13 +631,21 @@ distcheck: dist
 	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
 	  && cd "$$am__cwd" \
 	  || exit 1
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 	@(echo "$(distdir) archives ready for distribution: "; \
 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
 	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-	@$(am__cd) '$(distuninstallcheck_dir)' \
-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
 	   || { echo "ERROR: files left after uninstall:" ; \
 	        if test -n "$(DESTDIR)"; then \
 	          echo "  (check DESTDIR support)"; \
@@ -637,10 +676,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -722,29 +766,34 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-strip tags-recursive
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am install-strip \
+	tags-recursive
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am all-local am--refresh check check-am clean \
-	clean-generic clean-libtool ctags ctags-recursive dist \
-	dist-all dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar \
-	dist-tarZ dist-xz dist-zip distcheck distclean \
-	distclean-generic distclean-hdr distclean-libtool \
-	distclean-tags distcleancheck distdir distuninstallcheck dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am
+	clean-cscope clean-generic clean-libtool cscope cscopelist \
+	cscopelist-recursive ctags ctags-recursive dist dist-all \
+	dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar dist-tarZ \
+	dist-xz dist-zip distcheck distclean distclean-generic \
+	distclean-hdr distclean-libtool distclean-tags distcleancheck \
+	distdir distuninstallcheck dvi dvi-am html html-am info \
+	info-am install install-am install-data install-data-am \
+	install-data-local install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
 
 
 dist-hook:
+	rm -rf $(distdir)/doc/html $(distdir)/doc/manpages ; \
 	find $(distdir)/maxima -type f -name '*.lsp' | xargs rm -rf ; \
+	rm -rf $(distdir)/java/targets ; \
+	find $(distdir)/java -type f -name '*.class' | xargs rm -rf ; \
 	find $(distdir)/windows -mindepth 1 -type d | xargs rm -rf ; \
 	find $(distdir)/windows -type f \
 		! \( -name '*.sln' -o -name '*.vc*proj' -o -name '*.mk' \)| \
@@ -752,9 +801,13 @@ dist-hook:
 	find $(distdir) \
 		\( -name .svn -o -name '.git*' -o -name CVS -o -name Makefile -o -name '*~' -o -name '*#*' -o -name 'CMakeFiles' -o -name '*.log' -o -name '*.tmp' -o -name '*.pyc' -o -name '*.bak' -o -name '*.BAK' -o -name geographiclib.js \)| \
 		xargs rm -rf ; \
-	echo include Makefile.mk > $(distdir)/Makefile
-	echo '#define' GEOGRAPHICLIB_VERSION_STRING \
-	\"$(PACKAGE_VERSION)\" > $(distdir)/include/GeographicLib/Config.h
+	echo include Makefile.mk > $(distdir)/Makefile ; \
+	sed -e "s/Unconfigured/$(PACKAGE_VERSION)/" \
+		-e "s/MAJOR .*/MAJOR ${GEOGRAPHICLIB_VERSION_MAJOR}/" \
+		-e "s/MINOR .*/MINOR ${GEOGRAPHICLIB_VERSION_MINOR}/" \
+		-e "s/PATCH .*/PATCH ${GEOGRAPHICLIB_VERSION_PATCH}/" \
+		$(top_srcdir)/include/GeographicLib/Config.h > \
+		$(distdir)/include/GeographicLib/Config.h
 # Custom rules
 
 all-local: man doc
diff --git a/Makefile.mk b/Makefile.mk
index b75eef6..e9d2b63 100644
--- a/Makefile.mk
+++ b/Makefile.mk
@@ -1,9 +1,7 @@
-# $Id: e41e5a29e46933b242fce49416e474403fc4bb65 $
-
 MAKEFILE := $(lastword $(MAKEFILE_LIST))
 MAKE := $(MAKE) -f $(MAKEFILE)
 SUBDIRS = src man tools doc
-ALLDIRS = include $(SUBDIRS) maxima matlab python windows cmake
+ALLDIRS = include $(SUBDIRS) maxima matlab python cmake
 
 all: src man tools
 
@@ -14,7 +12,7 @@ tools: src
 install: install-headers install-lib install-tools install-man install-cmake \
 	install-doc install-matlab install-python
 clean: clean-src clean-tools clean-doc clean-man clean-matlab clean-python
-maintainer-clean: clean maintainer-clean-doc maintainer-clean-man
+
 install-headers:
 	$(MAKE) -C include install
 install-lib:
@@ -43,10 +41,6 @@ clean-matlab: matlab
 	$(MAKE) -C matlab clean
 clean-python: python
 	$(MAKE) -C python clean
-maintainer-clean-doc:
-	$(MAKE) -C doc maintainer-clean
-maintainer-clean-man:
-	$(MAKE) -C man maintainer-clean
 
 VERSION:=$(shell grep '\bVERSION=' configure | cut -f2 -d\' | head -1)
 
@@ -54,4 +48,4 @@ VERSION:=$(shell grep '\bVERSION=' configure | cut -f2 -d\' | head -1)
 	install-headers install-lib install-tools install-cmake install-man \
 	install-matlab install-python \
 	clean clean-src clean-tools clean-doc clean-man clean-matlab \
-	clean-python maintainer-clean maintainer-clean-doc maintainer-clean-man
+	clean-python
diff --git a/NEWS b/NEWS
index f7093d6..1d5614c 100644
--- a/NEWS
+++ b/NEWS
@@ -1,12 +1,266 @@
-# $Id: a8ebe2940755523ec7b77a1645c4155c441a7f17 $
-
 A reverse chronological list of changes to GeographicLib
 
 For more information, see
 
     http://geographiclib.sourceforge.net/
 
-The current version of the library is 1.21.
+The current version of the library is 1.34.
+
+Changes between 1.34 (released 2013-12-11) and 1.33 versions:
+
+   * Many changes in cmake support:
+     + minimum version of cmake needed increased to 2.8.4 (which was
+       released in 2011-02);
+     + allow building both shared and static librarys with
+       -D GEOGRAPHICLIB_LIB_TYPE=BOTH;
+     + both shared and static libraries (Release plus Debug) included in
+       binary installer;
+     + find_package uses COMPONENTS and GeographicLib_USE_STATIC_LIBS to
+       select the library to use;
+     + find_package version checking allows nmake and Visual Studio
+       generators to interoperate on Windows;
+     + find_package (GeographicLib ...) requires that GeographicLib be
+       capitalized correctly;
+     + on Unix/Linux, don't include the version number in directory for
+       the cmake configuration files;
+     + defaults for GEOGRAPHICLIB_DOCUMENTATION and
+       BUILD_NETGEOGRAPHICLIB are now OFF;
+     + the GEOGRAPHICLIB_EXAMPLES configuration parameter is no longer
+       used; cmake always configures to build the examples, but they are
+       not built by default (instead build targets: exampleprograms and
+       netexamples);
+     + matlab-all target renamed to matlabinterface;
+     + the configuration parameters PACKAGE_PATH and INSTALL_PATH are
+       now deprecated (use CMAKE_INSTALL_PREFIX instead);
+     + on Linux, the installed package is relocatable;
+     + on MacOSX, the installed utilities can find the shared library.
+
+   * Use a more precise value for OSGB::CentralScale().
+
+   * Add Arc routines to python interface.
+
+   * The Geod utility has been removed; the same functionality lives on
+     with GeodSolve (introduced in version 1.30).
+
+Changes between 1.33 (released 2013-10-08) and 1.32 versions:
+
+   * Add NETGeographic .NET wrapper library (courtesy of Scott Heiman).
+
+   * Make inspector functions in GeographicLib::Ellipsoid const.
+
+   * Add Accumulator.cpp to instantiate GeographicLib::Accumulator.
+
+   * Defer some of the initialization of GeographicLib::OSGB to when it
+     is first called.
+
+   * Fix bug in autoconf builds under MacOS.
+
+Changes between 1.32 (released 2013-07-12) and 1.31 versions:
+
+   * Generalize C interface for polygon areas to allow vertices to be
+     specified incrementally.
+
+   * Fix way flags for C++11 support are determined.
+
+Changes between 1.31 (released 2013-07-01) and 1.30 versions:
+
+   * Changes breaking binary compatibility (source compatibility is
+     maintained):
+     + overloaded versions of DMS::Encode,
+       EllipticFunction::EllipticFunction, and
+       GeoCoords::DMSRepresentation, have been eliminated by the use of
+       optional arguments;
+     + correct the declaration of first arg to UTMUPS::DecodeEPSG.
+
+   * FIX BUG in GeographicLib::GravityCircle constructor (found by
+     Mathieu Peyréga) which caused bogus results for the gravity
+     disturbance and gravity anomaly vectors. (This only affected
+     calculations using GravityCircle. GravityModel calculations did not
+     suffer from this bug.)
+
+   * Improvements to the build:
+     + add macros GEOGRAPHICLIB_VERSION_{MAJOR,MINOR,PATCH} to Config.h;
+     + fix documentation for new version of perlpod;
+     + improving setting of runtime path for Unix-like systems with
+       cmake;
+     + install PDB files when compiling with Visual Studio to aid
+       debugging;
+     + Windows binary release now uses Matlab R2013a (64-bit) and uses
+       the -largeArrayDims option.
+
+   * Changes to the geodesic routines:
+     + add Java implementation of the geodesic routines (thanks to Skip
+       Breidbach for the maven support);
+     + FIX BUG: avoid altering input args in Fortran implementation;
+     + more systematic treatment of very short geodesic;
+     + fixes to python port so that they work with version 3.x, in
+       addition to 2.x (courtesy of Amato);
+     + accumulate the perimeter and area of polygons via a double-wide
+       accumulator in Fortran, C, and Matlab implementations (this is
+       already included in the other implementations);
+     + port PolygonArea::AddEdge and PolygonArea::TestEdge to JavaScript
+       and python interfaces;
+     + include documentation on short geodesics.
+
+   * Unix scripts for downloading datasets,
+     geographiclib-get-{geoids,gravity,magnetic}, skip already download
+     models by default, unless the -f flag is given.
+
+   * FIX BUGS: meridian convergence and scale returned by
+     TransverseMercatorExact was wrong at a pole.
+
+   * Improve efficiency of MGRS::Forward by avoiding the calculation of
+     the latitude if possible (adapting an idea of Craig Rollins).
+
+   * Fixes to the way the Matlab interface routines are built (thanks to
+     Phil Miller and Chris F.).
+
+Changes between 1.30 (released 2013-02-27) and 1.29 versions:
+
+   * Changes to geodesic routines:
+     + fix BUG in fail-safe mechanisms in Geodesic::Inverse;
+     + the command line utility Geod is now called GeodSolve;
+     + allow addition of polygon edges in PolygonArea;
+     + add full Maxima implementation of geodesic algorithms.
+
+Changes between 1.29 (released 2013-01-16) and 1.28 versions:
+
+   * Changes to allow compilation with libc++ (courtesy of Kal Conley).
+
+   * Add description of geodesics on triaxial ellipsoid to
+     documentation.
+
+   * Update journal reference for "Algorithms for geodesics".
+
+Changes between 1.28 (released 2012-12-11) and 1.27 versions:
+
+   * Changes to geodesic routines:
+     + compute longitude difference exactly;
+     + hence fix BUG in area calculations for polygons with vertices very
+       close to the prime meridian;
+     + fix BUG is geoddistance.m where the value of m12 was wrong for
+       meridional geodesics;
+     + add Matlab implementations of the geodesic projections;
+     + remove unneeded special code for geodesics which start at a pole;
+     + include polygon area routine in C and Fortran implementations;
+     + add doxygen documentation for C and Fortran libraries.
+
+Changes between 1.27 (released 2012-11-29) and 1.26 versions:
+
+   * Changes to geodesic routines:
+     + add native Matlab implementations: geoddistance.m, geodreckon.m,
+       geodarea.m;
+     + add C and Fortran implementations;
+     + improve the solution of the direct problem so that the series
+       solution is accurate to round off for |f| < 1/50;
+     + tighten up the convergence criteria for solution of the inverse
+       problem;
+     + no longer signal failures of convergence with NaNs (a slightly
+       less accurate answer is returned instead).
+
+   * Fix DMS::Decode double rounding BUG.
+
+   * On MacOSX platforms with the cmake configuration, universal
+     binaries are built.
+
+Changes between 1.26 (released 2012-10-22) and 1.25 versions:
+
+   * Replace the series used for geodesic areas by one with better
+     convergence (this only makes an appreciable difference if |f| >
+     1/150).
+
+Changes between 1.25 (released 2012-10-16) and 1.24 versions:
+
+   * Changes to geodesic calculations:
+     + restart Newton's method in Geodesic::Inverse when it goes awry;
+     + back up Newton's method with the bisection method;
+     + Geodesic::Inverse now converges for any value of f;
+     + add GeodesicExact and GeodesicLineExact which are formulated in
+       terms of elliptic integrals and thus yield accurate results
+       even for very eccentric ellipsoids.
+     + the -E option to Geod invokes these exact classes.
+
+   * Add functionality to EllipticFunction:
+     + add all the traditional elliptic integrals;
+     + remove restrictions on argument range for incomplete elliptic
+       integrals;
+     + allow imaginary modulus for elliptic integrals and elliptic
+       functions;
+     + make interface to the symmetric elliptic integrals public.
+
+   * Allow GeographicLib::Ellipsoid to be copied.
+
+   * Changes to the build tools:
+     + cmake uses folders in Visual Studio to reduce clutter;
+     + allow precision of reals to be set in cmake;
+     + fail gracefully in the absence of pod documentation tools;
+     + remove support for maintainer tasks in Makefile.mk.
+
+Changes between 1.24 (released 2012-09-22) and 1.23 versions:
+
+   * Allow the specification of the hemisphere in UTM coordinates in
+     order to provide continuity across the equator:
+     + add UTMUPS::Transfer;
+     + add GeoCoords::UTMUPSRepresentation(bool, int) and
+       GeoCoords::AltUTMUPSRepresentation(bool, int);
+     + use the hemisphere letter in, e.g., GeoConvert -u -z 31N.
+
+   * Add UTMUPS::DecodeEPSG and UTMUPS::EncodeEPSG.
+
+   * cmake changes:
+     + restore support for cmake 2.4.x;
+     + explicitly check version of doxygen.
+
+   * Fix building under cygwin.
+
+   * Document restrictions on f in the Introduction.
+
+   * Fix python interface to work with version 2.6.x.
+
+Changes between 1.23 (released 2012-07-17) and 1.22 versions:
+
+  * Documentation changes:
+    + remove html documentation from distribution and use web links if
+      doxygen is not available;
+    + use doxygen tags to document exceptions;
+    + begin migrating the documentation to using Greek letters where
+      appropriate (requires doxygen 1.8.1.2 or later).
+
+  * Add Math::AngNormalize and Math::AngNormalize2; the allowed range
+    for longitudes and azimuths widened to [-540d, 540d).
+
+  * DMS::Decode understands more unicode symbols.
+
+  * Geohash uses geohash code "nan" to stand for not a number.
+
+  * Add Ellipsoid::NormalCurvatureRadius.
+
+  * Various fixes in LambertConformalConic, TransverseMercator,
+    PolarStereographic, and Ellipsoid to handle reverse projections of
+    points near infinity.
+
+  * Fix programming blunder in LambertConformalConic::Forward (incorrect
+    results were returned if the tangent latitude was negative).
+
+Changes between 1.22 (released 2012-05-27) and 1.21 versions:
+
+  * Add Geohash and Ellipsoid classes.
+
+  * Fix bug in AlbersEqualArea of very prolate ellipsoids (b^2 > 2
+    a^2).
+
+  * cmake changes:
+    + optionally use PACKAGE_PATH and INSTALL_PATH to determine
+      CMAKE_INSTALL_PREFIX;
+    + use COMMON_INSTALL_PATH to determine layout of installation
+      directories;
+    + as a consequence, the installation paths for the documentation,
+      and python and matlab interfaces are shortened for Windows;
+    + zip source distribution now uses DOS line endings;
+    + the tests work in debug mode for Windows;
+    + default setting of GEOGRAPHICLIB_DATA does not depend on
+      CMAKE_INSTALL_PREFIX;
+    + add a cmake configuration for build tree.
 
 Changes between 1.21 (released 2012-04-25) and 1.20 versions:
 
@@ -159,7 +413,7 @@ Changes between 1.13 (released 2011-08-13) and 1.12 versions:
       functions to make longitude precede latitude;
     + GeoConvert now has a -w option to make longitude precede latitude
       on input and output;
-    + include a Javascript version of DMS.
+    + include a JavaScript version of DMS.
 
   * Slight improvement in starting guess for solution of geographic
     latitude in terms of conformal latitude in TransverseMercator,
@@ -188,7 +442,7 @@ Changes between 1.12 (released 2011-07-21) and 1.11 versions:
 
   * Add GeographicLib::PolygonArea class and equivalent Matlab function.
 
-  * Provide Javascript and Python implementations of geodesic routines.
+  * Provide JavaScript and Python implementations of geodesic routines.
 
   * Fix Windows installer to include runtime dlls for Matlab.
 
diff --git a/aclocal.m4 b/aclocal.m4
index 41f705a..ec1e5de 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.12.2 -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,28 +13,30 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
-[m4_warning([this file was generated for autoconf 2.68.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 8
+
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
+[am__api_version='1.12'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.1], [],
+m4_if([$1], [1.12.2], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -50,22 +52,24 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.1])dnl
+[AM_AUTOMAKE_VERSION([1.12.2])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 2
+
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
 #
 # Of course, Automake must honor this variable whenever it calls a
 # tool from the auxiliary directory.  The problem is that $srcdir (and
@@ -84,7 +88,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 #
 # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
 # are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
+# harmless because $srcdir is '.', but things will broke when you
 # start a VPATH build or use an absolute $srcdir.
 #
 # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
@@ -110,22 +114,21 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 9
+# serial 10
 
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
 # Define a conditional.
 AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
 AC_SUBST([$1_TRUE])dnl
 AC_SUBST([$1_FALSE])dnl
 _AM_SUBST_NOTMAKE([$1_TRUE])dnl
@@ -144,16 +147,15 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 10
+# serial 17
 
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
 # will think it sees a *use*, and therefore will trigger all it's
 # C support machinery.  Also note that it means that autoscan, seeing
@@ -163,7 +165,7 @@ fi])])
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
 # We try a few techniques and use that to set a single cache variable.
 #
 # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
@@ -176,12 +178,13 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
 AC_REQUIRE([AM_MAKE_INCLUDE])dnl
 AC_REQUIRE([AM_DEP_TRACK])dnl
 
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
+      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
 
 AC_CACHE_CHECK([dependency style of $depcc],
                [am_cv_$1_dependencies_compiler_type],
@@ -189,8 +192,9 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -229,16 +233,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -247,16 +251,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -304,7 +308,7 @@ AM_CONDITIONAL([am__fastdep$1], [
 # AM_SET_DEPDIR
 # -------------
 # Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
 AC_DEFUN([AM_SET_DEPDIR],
 [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
@@ -314,28 +318,34 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
 # AM_DEP_TRACK
 # ------------
 AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
 AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
 AC_SUBST([AMDEPBACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
 ])
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-#serial 5
+# serial 6
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
@@ -354,7 +364,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -366,21 +376,19 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
     test -z "am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`AS_DIRNAME(["$file"])`
@@ -398,7 +406,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 # This macro should only be invoked once -- use via AC_REQUIRE.
 #
 # This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
+# is enabled.  FIXME.  This creates each '.P' file that we will
 # need in order to bootstrap the dependency handling code.
 AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 [AC_CONFIG_COMMANDS([depfiles],
@@ -408,14 +416,13 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 16
+# serial 19
 
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
@@ -461,31 +468,41 @@ AC_SUBST([CYGPATH_W])
 # Define the identity of the package.
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+[AC_DIAGNOSE([obsolete],
+[$0: two- and three-arguments forms are deprecated.  For more info, see:
+http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
  AC_SUBST([PACKAGE], [$1])dnl
  AC_SUBST([VERSION], [$2])],
 [_AM_SET_OPTIONS([$1])dnl
 dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+m4_if(
+  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
   [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
 
 _AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
 
 # Some tools Automake needs.
 AC_REQUIRE([AM_SANITY_CHECK])dnl
 AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
 AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
 AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
@@ -496,28 +513,35 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
 			     [_AM_PROG_TAR([v7])])])
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
-		  [_AM_DEPENDENCIES(CC)],
-		  [define([AC_PROG_CC],
-			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+		  [_AM_DEPENDENCIES([CC])],
+		  [m4_define([AC_PROG_CC],
+			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
-		  [_AM_DEPENDENCIES(CXX)],
-		  [define([AC_PROG_CXX],
-			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+		  [_AM_DEPENDENCIES([CXX])],
+		  [m4_define([AC_PROG_CXX],
+			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-		  [_AM_DEPENDENCIES(OBJC)],
-		  [define([AC_PROG_OBJC],
-			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+		  [_AM_DEPENDENCIES([OBJC])],
+		  [m4_define([AC_PROG_OBJC],
+			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+dnl Support for Objective C++ was only introduced in Autoconf 2.65,
+dnl but we still cater to Autoconf 2.62.
+m4_ifdef([AC_PROG_OBJCXX],
+[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+		  [_AM_DEPENDENCIES([OBJCXX])],
+		  [m4_define([AC_PROG_OBJCXX],
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
 ])
 _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
 dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
 AC_CONFIG_COMMANDS_PRE(dnl
 [m4_provide_if([_AM_COMPILER_EXEEXT],
   [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
 ])
 
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
 dnl mangled by Autoconf and run in a shell conditional statement.
 m4_define([_AC_COMPILER_EXEEXT],
@@ -545,12 +569,14 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 8
+
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -564,9 +590,9 @@ if test x"${install_sh}" != xset; then
     install_sh="\${SHELL} $am_aux_dir/install-sh"
   esac
 fi
-AC_SUBST(install_sh)])
+AC_SUBST([install_sh])])
 
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -590,20 +616,19 @@ AC_SUBST([am__leading_dot])])
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
+# serial 7
 
 # AM_MAINTAINER_MODE([DEFAULT-MODE])
 # ----------------------------------
 # Control maintainer-specific portions of Makefiles.
-# Default is to disable them, unless `enable' is passed literally.
-# For symmetry, `disable' may be passed as well.  Anyway, the user
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well.  Anyway, the user
 # can override the default with the --enable/--disable switch.
 AC_DEFUN([AM_MAINTAINER_MODE],
 [m4_case(m4_default([$1], [disable]),
@@ -611,13 +636,14 @@ AC_DEFUN([AM_MAINTAINER_MODE],
        [disable], [m4_define([am_maintainer_other], [enable])],
        [m4_define([am_maintainer_other], [enable])
         m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
-AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
   dnl maintainer-mode's default is 'disable' unless 'enable' is passed
   AC_ARG_ENABLE([maintainer-mode],
-[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
-			  (and sometimes confusing) to the casual installer],
-      [USE_MAINTAINER_MODE=$enableval],
-      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+      am_maintainer_other[ make rules and dependencies not useful
+      (and sometimes confusing) to the casual installer])],
+    [USE_MAINTAINER_MODE=$enableval],
+    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
   AC_MSG_RESULT([$USE_MAINTAINER_MODE])
   AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
   MAINT=$MAINTAINER_MODE_TRUE
@@ -629,13 +655,13 @@ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# serial 5
 
 # AM_MAKE_INCLUDE()
 # -----------------
@@ -654,7 +680,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -681,14 +707,13 @@ rm -f confinc confmf
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 6
+# serial 7
 
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
@@ -718,45 +743,19 @@ if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
+  AC_MSG_WARN(['missing' script is too old or missing])
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# serial 6
 
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
@@ -764,13 +763,13 @@ AC_DEFUN([_AM_MANGLE_OPTION],
 [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
 
 # _AM_SET_OPTION(NAME)
-# ------------------------------
+# --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
 
 # _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
+# ------------------------
 # OPTIONS is a space-separated list of Automake options.
 AC_DEFUN([_AM_SET_OPTIONS],
 [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
@@ -783,22 +782,18 @@ AC_DEFUN([_AM_IF_OPTION],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
+# serial 9
 
 # AM_SANITY_CHECK
 # ---------------
 AC_DEFUN([AM_SANITY_CHECK],
 [AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -809,32 +804,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$[*]" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$[*]" != "X $srcdir/configure conftest.file" \
+	&& test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment])
+     fi
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$[2]" = conftest.file
    )
 then
@@ -844,43 +847,61 @@ else
    AC_MSG_ERROR([newly created file is older than distributed files!
 Check your system clock])
 fi
-AC_MSG_RESULT(yes)])
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 2
+
 # AM_PROG_INSTALL_STRIP
 # ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
+# One issue with vendor 'install' (even GNU) is that you can't
 # specify the program used to strip binaries.  This is especially
 # annoying in cross-compiling environments, where the build's strip
 # is unlikely to handle the host's binaries.
 # Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
+# always use install-sh in "make install-strip", and initialize
 # STRIPPROG with the value of the STRIP variable (set by the user).
 AC_DEFUN([AM_PROG_INSTALL_STRIP],
 [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
 if test "$cross_compiling" != no; then
   AC_CHECK_TOOL([STRIP], [strip], :)
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -889,24 +910,24 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_PROG_TAR(FORMAT)
 # --------------------
 # Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
 #
 # Substitute a variable $(am__tar) that is a command
 # writing to stdout a FORMAT-tarball containing the directory
@@ -917,10 +938,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
 m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
      [m4_case([$1], [ustar],, [pax],,
               [m4_fatal([Unknown tar format])])
 AC_MSG_CHECKING([how to create a $1 tar archive])
@@ -928,7 +950,7 @@ AC_MSG_CHECKING([how to create a $1 tar archive])
 _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
 _am_tools=${am_cv_prog_tar_$1-$_am_tools}
 # Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
+# Solaris sh will not grok spaces in the rhs of '-'.
 for _am_tool in $_am_tools
 do
   case $_am_tool in
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
new file mode 100644
index 0000000..51e6c44
--- /dev/null
+++ b/cmake/CMakeLists.txt
@@ -0,0 +1,52 @@
+# config file support for find_package (GeographicLib).  This needs to
+# deal with two environments: (1) finding the build tree and (2)
+# finding the install tree.  geographiclib-config.cmake detects which
+# situation it is handing by looking at @PROJECT_ROOT_DIR at .  If
+# this is an absolute path, it's in the build tree; otherwise, it's in the
+# install tree.  (Note that the whole install tree can be relocated.)
+
+# geographiclib-config.cmake for the build tree
+set (PROJECT_ROOT_DIR "${PROJECT_BINARY_DIR}")
+set (PROJECT_INCLUDE_DIRS
+  "${PROJECT_BINARY_DIR}/include" "${PROJECT_SOURCE_DIR}/include" )
+configure_file (project-config.cmake.in
+  "${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config.cmake" @ONLY)
+configure_file (project-config-version.cmake.in
+  "${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config-version.cmake" @ONLY)
+export (TARGETS ${PROJECT_SHARED_LIBRARIES} ${PROJECT_STATIC_LIBRARIES} ${TOOLS}
+  FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME_LOWER}-depends.cmake")
+
+# geographiclib-config.cmake for the install tree.  It's installed in
+# ${INSTALL_CMAKE_DIR} and @PROJECT_ROOT_DIR@ is the relative
+# path to the root from there.  (Note that the whole install tree can
+# be relocated.)
+if (COMMON_INSTALL_PATH)
+  set (INSTALL_CMAKE_DIR "share/cmake/${PROJECT_NAME}")
+  set (PROJECT_ROOT_DIR "../../..")
+else ()
+  set (INSTALL_CMAKE_DIR "cmake")
+  set (PROJECT_ROOT_DIR "..")
+endif ()
+# @PROJECT_INCLUDE_DIRS@ is not used in the install tree; reset
+# it to prevent the source and build paths appearing in the installed
+# config files
+set (PROJECT_INCLUDE_DIRS)
+configure_file (project-config.cmake.in
+  ${PROJECT_NAME_LOWER}-config.cmake @ONLY)
+configure_file (project-config-version.cmake.in
+  ${PROJECT_NAME_LOWER}-config-version.cmake @ONLY)
+install (FILES
+  "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config.cmake"
+  "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config-version.cmake"
+  DESTINATION "${INSTALL_CMAKE_DIR}")
+# Make information about the cmake targets (the library and the tools)
+# available.
+install (EXPORT depends
+  FILE ${PROJECT_NAME_LOWER}-depends.cmake
+  DESTINATION "${INSTALL_CMAKE_DIR}")
+
+if (MSVC AND PACKAGE_DEBUG_LIBS)
+  install (FILES
+    "${PROJECT_BINARY_DIR}/cmake/CMakeFiles/Export/cmake/${PROJECT_NAME_LOWER}-depends-debug.cmake"
+    DESTINATION "${INSTALL_CMAKE_DIR}" CONFIGURATIONS Release)
+endif ()
diff --git a/cmake/FindGeographicLib.cmake b/cmake/FindGeographicLib.cmake
index ce626c0..9c52b3e 100644
--- a/cmake/FindGeographicLib.cmake
+++ b/cmake/FindGeographicLib.cmake
@@ -1,5 +1,3 @@
-# $Id: 68ad590f505a0fc2f5419b6abf59d457d7901fc7 $
-#
 # Look for GeographicLib
 #
 # Set
@@ -14,14 +12,15 @@ find_library (GeographicLib_LIBRARIES Geographic
 if (GeographicLib_LIBRARIES)
   get_filename_component (GeographicLib_LIBRARY_DIRS
     "${GeographicLib_LIBRARIES}" PATH)
-  get_filename_component (GEOGRAPHICLIB_ROOT_DIR
-    "${GeographicLib_LIBRARY_DIRS}" PATH)
-  set (GeographicLib_INCLUDE_DIRS "${GEOGRAPHICLIB_ROOT_DIR}/include")
-  unset (GEOGRAPHICLIB_ROOT_DIR)
+  get_filename_component (_ROOT_DIR "${GeographicLib_LIBRARY_DIRS}" PATH)
+  set (GeographicLib_INCLUDE_DIRS "${_ROOT_DIR}/include")
+  set (GeographicLib_BINARY_DIRS "${_ROOT_DIR}/bin")
+  unset (_ROOT_DIR)
   if (NOT EXISTS "${GeographicLib_INCLUDE_DIRS}/GeographicLib/Config.h")
     unset (GeographicLib_INCLUDE_DIRS)
     unset (GeographicLib_LIBRARIES)
     unset (GeographicLib_LIBRARY_DIRS)
+    unset (GeographicLib_BINARY_DIRS)
   endif ()
 endif ()
 
diff --git a/cmake/Makefile.am b/cmake/Makefile.am
index bcb82ef..212e9f3 100644
--- a/cmake/Makefile.am
+++ b/cmake/Makefile.am
@@ -2,7 +2,6 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: f340bddbdd117ebc666bf508bc582ac92690bf57 $
 
 cmakedir=$(datadir)/cmake/GeographicLib
 
@@ -11,5 +10,5 @@ install:
 	$(INSTALL) -m 644 $(srcdir)/FindGeographicLib.cmake \
 		$(DESTDIR)$(cmakedir)
 
-EXTRA_DIST = Makefile.mk FindGeographicLib.cmake \
-	geographiclib-config-version.cmake.in geographiclib-config.cmake.in
+EXTRA_DIST = Makefile.mk CMakeLists.txt FindGeographicLib.cmake \
+	project-config-version.cmake.in project-config.cmake.in
diff --git a/cmake/Makefile.in b/cmake/Makefile.in
index be90427..a781b65 100644
--- a/cmake/Makefile.in
+++ b/cmake/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,8 +18,24 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: f340bddbdd117ebc666bf508bc582ac92690bf57 $
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -55,6 +70,11 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -66,6 +86,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -76,6 +97,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -84,6 +106,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -119,6 +144,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -184,8 +211,8 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 cmakedir = $(datadir)/cmake/GeographicLib
-EXTRA_DIST = Makefile.mk FindGeographicLib.cmake \
-	geographiclib-config-version.cmake.in geographiclib-config.cmake.in
+EXTRA_DIST = Makefile.mk CMakeLists.txt FindGeographicLib.cmake \
+	project-config-version.cmake.in project-config.cmake.in
 
 all: all-am
 
@@ -232,6 +259,8 @@ TAGS:
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -276,10 +305,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/cmake/Makefile.mk b/cmake/Makefile.mk
index 84c33b6..e747bdb 100644
--- a/cmake/Makefile.mk
+++ b/cmake/Makefile.mk
@@ -1,5 +1,3 @@
-# $Id: 9c58123e002564d0252e543c70539b5a79df36a6 $
-
 DEST = $(PREFIX)/share/cmake/GeographicLib
 
 INSTALL=install -b
diff --git a/cmake/geographiclib-config-version.cmake.in b/cmake/geographiclib-config-version.cmake.in
deleted file mode 100644
index 791732c..0000000
--- a/cmake/geographiclib-config-version.cmake.in
+++ /dev/null
@@ -1,19 +0,0 @@
-# $Id: bcb4b84d50be4e5bf5a85d13dff07dcfa3e6715a $
-
-# Version checking for GeographicLib
-
-set (PACKAGE_VERSION "@GeographicLib_VERSION@")
-set (PACKAGE_VERSION_MAJOR "@GeographicLib_VERSION_MAJOR@")
-set (PACKAGE_VERSION_MINOR "@GeographicLib_VERSION_MINOR@")
-
-if (WIN32 AND NOT "${CMAKE_GENERATOR}" STREQUAL "@CMAKE_GENERATOR@")
-  # Reject if there's a mismatch on compiler versions (Windows only)
-  set (PACKAGE_VERSION_UNSUITABLE TRUE)
-elseif (PACKAGE_FIND_VERSION)
-  if (${PACKAGE_FIND_VERSION} VERSION_EQUAL ${PACKAGE_VERSION})
-    set (PACKAGE_VERSION_EXACT TRUE)
-  elseif (${PACKAGE_FIND_VERSION} VERSION_LESS ${PACKAGE_VERSION}
-    AND ${PACKAGE_FIND_VERSION_MAJOR} EQUAL ${PACKAGE_VERSION_MAJOR})
-    set (PACKAGE_VERSION_COMPATIBLE TRUE)
-  endif ()
-endif ()
diff --git a/cmake/geographiclib-config.cmake.in b/cmake/geographiclib-config.cmake.in
deleted file mode 100644
index 95ea765..0000000
--- a/cmake/geographiclib-config.cmake.in
+++ /dev/null
@@ -1,28 +0,0 @@
-# $Id: 6f2f024584465d9903d8e3cd313cd876a850b4d2 $
-#
-# Configure GeographicLib
-#
-# Set
-#  GEOGRAPHICLIB_FOUND = TRUE
-#  GeographicLib_INCLUDE_DIRS = /usr/local/include
-#  GeographicLib_LIBRARIES = Geographic
-#  GeographicLib_LIBRARY_DIRS = /usr/local/lib
-#  GeographicLib_VERSION = 1.13 (for example)
-
-message (STATUS "Reading ${CMAKE_CURRENT_LIST_FILE}")
-set (GeographicLib_VERSION "@GeographicLib_VERSION@")
-message (STATUS "GeographicLib configuration, version "
-  ${GeographicLib_VERSION})
-
-# Tell the user project where to find our headers and libraries
-get_filename_component (_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
-get_filename_component (GEOGRAPHICLIB_ROOT_DIR
-  "${_DIR}/@GEOGRAPHICLIB_ROOT_DIR@" ABSOLUTE)
-set (GeographicLib_INCLUDE_DIRS "${GEOGRAPHICLIB_ROOT_DIR}/include")
-set (GeographicLib_LIBRARY_DIRS "${GEOGRAPHICLIB_ROOT_DIR}/lib")
-
-# Read in the exported definition of the library
-include ("${_DIR}/geographiclib-depends.cmake")
-set (GeographicLib_LIBRARIES Geographic)
-
-set (GEOGRAPHICLIB_FOUND TRUE)
diff --git a/cmake/project-config-version.cmake.in b/cmake/project-config-version.cmake.in
new file mode 100644
index 0000000..2b20f0b
--- /dev/null
+++ b/cmake/project-config-version.cmake.in
@@ -0,0 +1,54 @@
+# Version checking for @PROJECT_NAME@
+
+set (PACKAGE_VERSION "@PROJECT_VERSION@")
+set (PACKAGE_VERSION_MAJOR "@PROJECT_VERSION_MAJOR@")
+set (PACKAGE_VERSION_MINOR "@PROJECT_VERSION_MINOR@")
+set (PACKAGE_VERSION_PATCH "@PROJECT_VERSION_PATCH@")
+
+if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_NAME@")
+  # Check package name (in particular, because of the way cmake finds
+  # package config files, the capitalization could easily be "wrong").
+  # This is necessary to ensure that the automatically generated
+  # variables, e.g., <package>_FOUND, are consistently spelled.  Make
+  # this a WARNING, because this is a user error that needs to be fixed.
+  message (WARNING
+    "Mismatched package names: use find_package(@PROJECT_NAME@ ...) instead"
+    " of find_package(${PACKAGE_FIND_NAME} ...)")
+  set (PACKAGE_VERSION_UNSUITABLE TRUE)
+elseif (NOT (APPLE OR CMAKE_SIZEOF_VOID_P EQUAL @CMAKE_SIZEOF_VOID_P@))
+  # Reject if there's a 32-bit/64-bit mismatch (not necessary with Apple
+  # since a multi-architecture library is built for that platform).
+  message (STATUS
+    "${CMAKE_CURRENT_LIST_FILE} unsuitable because package built with "
+    "sizeof(*void) =  @CMAKE_SIZEOF_VOID_P@")
+  set (PACKAGE_VERSION_UNSUITABLE TRUE)
+elseif (MSVC AND NOT MSVC_VERSION STREQUAL "@MSVC_VERSION@")
+  # Reject if there's a mismatch in MSVC compiler versions
+  message (STATUS
+    "${CMAKE_CURRENT_LIST_FILE} unsuitable because package built with "
+    "_MSC_VER = @MSVC_VERSION@")
+  set (PACKAGE_VERSION_UNSUITABLE TRUE)
+elseif (PACKAGE_FIND_VERSION)
+  if (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
+    set (PACKAGE_VERSION_EXACT TRUE)
+  elseif (PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION
+    AND PACKAGE_FIND_VERSION_MAJOR EQUAL PACKAGE_VERSION_MAJOR)
+    set (PACKAGE_VERSION_COMPATIBLE TRUE)
+  endif ()
+endif ()
+
+set (@PROJECT_NAME at _SHARED_FOUND @GEOGRAPHICLIB_SHARED_LIB@)
+set (@PROJECT_NAME at _STATIC_FOUND @GEOGRAPHICLIB_STATIC_LIB@)
+set (@PROJECT_NAME at _NETGeographicLib_FOUND @BUILD_NETGEOGRAPHICLIB@)
+
+# Check for the components requested.  The convention is that
+# GeographicLib_${comp}_FOUND should be true for all the required
+# components.
+if (@PROJECT_NAME at _FIND_COMPONENTS)
+  foreach (comp ${@PROJECT_NAME at _FIND_COMPONENTS})
+    if (@PROJECT_NAME at _FIND_REQUIRED_${comp} AND
+        NOT @PROJECT_NAME at _${comp}_FOUND)
+      set (PACKAGE_VERSION_UNSUITABLE TRUE)
+    endif ()
+  endforeach ()
+endif ()
diff --git a/cmake/project-config.cmake.in b/cmake/project-config.cmake.in
new file mode 100644
index 0000000..a8b15a0
--- /dev/null
+++ b/cmake/project-config.cmake.in
@@ -0,0 +1,82 @@
+# Configure @PROJECT_NAME@
+#
+# Set
+#  @PROJECT_NAME at _FOUND = @PROJECT_NAME_UPPER at _FOUND = 1
+#  @PROJECT_NAME at _INCLUDE_DIRS = /usr/local/include
+#  @PROJECT_NAME at _SHARED_LIBRARIES = GeographicLib        (or empty)
+#  @PROJECT_NAME at _STATIC_LIBRARIES = GeographicLib_STATIC (or empty)
+#  @PROJECT_NAME at _SHARED_DEFINITIONS = GEOGRAPHICLIB_SHARED_LIB=1
+#  @PROJECT_NAME at _STATIC_DEFINITIONS = GEOGRAPHICLIB_SHARED_LIB=0
+#  @PROJECT_NAME at _LIBRARY_DIRS = /usr/local/lib
+#  @PROJECT_NAME at _BINARY_DIRS = /usr/local/bin
+#  @PROJECT_NAME at _VERSION = 1.9 (for example)
+#  Depending on @PROJECT_NAME at _USE_STATIC_LIBS
+#    @PROJECT_NAME at _LIBRARIES = ${@PROJECT_NAME at _SHARED_LIBRARIES}, if OFF
+#    @PROJECT_NAME at _LIBRARIES = ${@PROJECT_NAME at _STATIC_LIBRARIES}, if ON
+#    @PROJECT_NAME at _DEFINITIONS = ${@PROJECT_NAME at _SHARED_DEFINITIONS}, if OFF
+#    @PROJECT_NAME at _DEFINITIONS = ${@PROJECT_NAME at _STATIC_DEFINITIONS}, if ON
+#  If only one of the libraries is provided, then
+#    @PROJECT_NAME at _USE_STATIC_LIBS is ignored.
+
+message (STATUS "Reading ${CMAKE_CURRENT_LIST_FILE}")
+set (@PROJECT_NAME at _VERSION "@PROJECT_VERSION@")
+message (STATUS
+  "@PROJECT_NAME@ configuration, version ${@PROJECT_NAME at _VERSION}")
+
+# Tell the user project where to find our headers and libraries
+get_filename_component (_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
+if (IS_ABSOLUTE "@PROJECT_ROOT_DIR@")
+  # This is an uninstalled package (still in the build tree)
+  set (_ROOT "@PROJECT_ROOT_DIR@")
+  set (@PROJECT_NAME at _INCLUDE_DIRS "@PROJECT_INCLUDE_DIRS@")
+  set (@PROJECT_NAME at _LIBRARY_DIRS "${_ROOT}/src")
+  set (@PROJECT_NAME at _BINARY_DIRS "${_ROOT}/src")
+else ()
+  # This is an installed package; figure out the paths relative to the
+  # current directory.
+  get_filename_component (_ROOT "${_DIR}/@PROJECT_ROOT_DIR@" ABSOLUTE)
+  set (@PROJECT_NAME at _INCLUDE_DIRS "${_ROOT}/include")
+  set (@PROJECT_NAME at _LIBRARY_DIRS "${_ROOT}/lib")
+  set (@PROJECT_NAME at _BINARY_DIRS "${_ROOT}/bin")
+endif ()
+message (STATUS "  include directory: \${@PROJECT_NAME at _INCLUDE_DIRS}")
+
+set (@PROJECT_NAME at _SHARED_LIBRARIES @PROJECT_SHARED_LIBRARIES@)
+set (@PROJECT_NAME at _STATIC_LIBRARIES @PROJECT_STATIC_LIBRARIES@)
+set (@PROJECT_NAME at _SHARED_DEFINITIONS @PROJECT_SHARED_DEFINITIONS@)
+set (@PROJECT_NAME at _STATIC_DEFINITIONS @PROJECT_STATIC_DEFINITIONS@)
+# Read in the exported definition of the library
+include ("${_DIR}/@PROJECT_NAME_LOWER at -depends.cmake")
+
+if ((NOT @PROJECT_NAME at _SHARED_LIBRARIES) OR
+    (@PROJECT_NAME at _USE_STATIC_LIBS AND @PROJECT_NAME at _STATIC_LIBRARIES))
+  set (@PROJECT_NAME at _LIBRARIES ${@PROJECT_NAME at _STATIC_LIBRARIES})
+  set (@PROJECT_NAME at _DEFINITIONS ${@PROJECT_NAME at _STATIC_DEFINITIONS})
+  message (STATUS "  \${@PROJECT_NAME at _LIBRARIES} set to static library")
+else ()
+  set (@PROJECT_NAME at _LIBRARIES ${@PROJECT_NAME at _SHARED_LIBRARIES})
+  set (@PROJECT_NAME at _DEFINITIONS ${@PROJECT_NAME at _SHARED_DEFINITIONS})
+  message (STATUS "  \${@PROJECT_NAME at _LIBRARIES} set to shared library")
+endif ()
+
+set (@PROJECT_NAME at _NETGeographicLib_LIBRARIES @NETGEOGRAPHICLIB_LIBRARIES@)
+
+# Check for the components requested.  This only supports components
+# STATIC, SHARED, and NETGeographicLib by checking the value of
+# @PROJECT_NAME at _${comp}_LIBRARIES.  No need to check if the component
+# is required or not--the version file took care of that.
+# @PROJECT_NAME at _${comp}_FOUND is set appropriately for each component.
+if (@PROJECT_NAME at _FIND_COMPONENTS)
+  foreach (comp ${@PROJECT_NAME at _FIND_COMPONENTS})
+    if (@PROJECT_NAME at _${comp}_LIBRARIES)
+      set (@PROJECT_NAME at _${comp}_FOUND 1)
+      message (STATUS "@PROJECT_NAME@ component ${comp} found")
+    else ()
+      set (@PROJECT_NAME at _${comp}_FOUND 0)
+      message (WARNING "@PROJECT_NAME@ component ${comp} not found")
+    endif ()
+  endforeach ()
+endif ()
+
+# @PROJECT_NAME at _FOUND is set to 1 automatically
+set (@PROJECT_NAME_UPPER at _FOUND 1)     # for backwards compatibility
diff --git a/config.guess b/config.guess
index dc84c68..c0adba9 100755
--- a/config.guess
+++ b/config.guess
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-11-20'
+timestamp='2012-06-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,9 +17,7 @@ timestamp='2009-11-20'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -56,8 +54,9 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -144,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -180,7 +179,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		fi
 		;;
 	    *)
-	        os=netbsd
+		os=netbsd
 		;;
 	esac
 	# The OS release
@@ -223,7 +222,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -269,7 +268,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
@@ -295,7 +297,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	echo s390-ibm-zvmoe
 	exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+	echo powerpc-ibm-os400
 	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
@@ -394,23 +396,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+	exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-unknown-mint${UNAME_RELEASE}
+	exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
 	exit ;;
@@ -480,8 +482,8 @@ EOF
 	echo m88k-motorola-sysv3
 	exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -494,7 +496,7 @@ EOF
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit ;;
+	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
 	exit ;;
@@ -551,7 +553,7 @@ EOF
 		echo rs6000-ibm-aix3.2
 	fi
 	exit ;;
-    *:AIX:*:[456])
+    *:AIX:*:[4567])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
@@ -594,52 +596,52 @@ EOF
 	    9000/[678][0-9][0-9])
 		if [ -x /usr/bin/getconf ]; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH="hppa2.0n" ;;
+			  64) HP_ARCH="hppa2.0w" ;;
 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+			esac ;;
+		    esac
 		fi
 		if [ "${HP_ARCH}" = "" ]; then
 		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
+		    sed 's/^		//' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
 EOF
 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -730,22 +732,22 @@ EOF
 	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit ;;
+	exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit ;;
+	exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit ;;
+	exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit ;;
+	exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit ;;
+	exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
@@ -769,14 +771,14 @@ EOF
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -788,13 +790,12 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:FreeBSD:*:*)
-	case ${UNAME_MACHINE} in
-	    pc98)
-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
 	    amd64)
 		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	    *)
-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	esac
 	exit ;;
     i*:CYGWIN*:*)
@@ -803,15 +804,18 @@ EOF
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
     i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
 	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
     *:Interix*:*)
-    	case ${UNAME_MACHINE} in
+	case ${UNAME_MACHINE} in
 	    x86)
 		echo i586-pc-interix${UNAME_RELEASE}
 		exit ;;
@@ -857,6 +861,13 @@ EOF
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -866,7 +877,7 @@ EOF
 	  EV6)   UNAME_MACHINE=alphaev6 ;;
 	  EV67)  UNAME_MACHINE=alphaev67 ;;
 	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
+	esac
 	objdump --private-headers /bin/sh | grep -q ld.so.1
 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
@@ -878,20 +889,29 @@ EOF
 	then
 	    echo ${UNAME_MACHINE}-unknown-linux-gnu
 	else
-	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+	    fi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     frv:Linux:*:*)
-    	echo frv-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     i*86:Linux:*:*)
 	LIBC=gnu
@@ -933,7 +953,7 @@ EOF
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
     or32:Linux:*:*)
-	echo or32-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     padre:Linux:*:*)
 	echo sparc-unknown-linux-gnu
@@ -959,7 +979,7 @@ EOF
 	echo ${UNAME_MACHINE}-ibm-linux
 	exit ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     sh*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -967,14 +987,17 @@ EOF
     sparc:Linux:*:* | sparc64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     vax:Linux:*:*)
 	echo ${UNAME_MACHINE}-dec-linux-gnu
 	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     xtensa*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -983,11 +1006,11 @@ EOF
 	echo i386-sequent-sysv4
 	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+	# Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit ;;
     i*86:OS/2:*:*)
@@ -1019,7 +1042,7 @@ EOF
 	fi
 	exit ;;
     i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
@@ -1047,13 +1070,13 @@ EOF
 	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i586.
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
 	# Note: whatever this is, it MUST be the same as what config.sub
 	# prints for the "djgpp" host, or else GDB configury will decide that
 	# this is a cross-build.
 	echo i586-pc-msdosdjgpp
-        exit ;;
+	exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
 	exit ;;
@@ -1088,8 +1111,8 @@ EOF
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
 	OS_REL='.3'
 	test -r /etc/.relid \
@@ -1132,10 +1155,10 @@ EOF
 		echo ns32k-sni-sysv
 	fi
 	exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel at ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard.M.Bartel at ccMail.Census.GOV>
+	echo i586-unisys-sysv4
+	exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes at openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
@@ -1161,11 +1184,11 @@ EOF
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
+		echo mips-nec-sysv${UNAME_RELEASE}
 	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
+		echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit ;;
+	exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
 	exit ;;
@@ -1230,7 +1253,10 @@ EOF
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSE-*:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
@@ -1275,13 +1301,13 @@ EOF
 	echo pdp10-unknown-its
 	exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+	echo mips-sei-seiux${UNAME_RELEASE}
 	exit ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     *:*VMS:*:*)
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
@@ -1299,6 +1325,9 @@ EOF
     i*86:AROS:*:*)
 	echo ${UNAME_MACHINE}-pc-aros
 	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1321,11 +1350,11 @@ main ()
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-          "4"
+	"4"
 #else
-	  ""
+	""
 #endif
-         ); exit (0);
+	); exit (0);
 #endif
 #endif
 
diff --git a/config.sub b/config.sub
index 2a55a50..6205f84 100755
--- a/config.sub
+++ b/config.sub
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-11-20'
+timestamp='2012-04-18'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2009-11-20'
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -75,8 +73,9 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -123,13 +122,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -156,8 +160,8 @@ case $os in
 		os=
 		basic_machine=$1
 		;;
-        -bluegene*)
-	        os=-cnk
+	-bluegene*)
+		os=-cnk
 		;;
 	-sim | -cisco | -oki | -wec | -winbond)
 		os=
@@ -173,10 +177,10 @@ case $os in
 		os=-chorusos
 		basic_machine=$1
 		;;
- 	-chorusrdb)
- 		os=-chorusrdb
+	-chorusrdb)
+		os=-chorusrdb
 		basic_machine=$1
- 		;;
+		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
@@ -221,6 +225,12 @@ case $os in
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -245,17 +255,22 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
 	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
+	| epiphany \
 	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
 	| maxq | mb | microblaze | mcore | mep | metag \
@@ -281,29 +296,39 @@ case $basic_machine in
 	| moxie \
 	| mt \
 	| msp430 \
+	| nds32 | nds32le | nds32be \
 	| nios | nios2 \
 	| ns16k | ns32k \
+	| open8 \
 	| or32 \
 	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
-	| rx \
+	| rl78 | rx \
 	| score \
 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu | strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
 	| ubicom32 \
-	| v850 | v850e \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| we32k \
-	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
-		# Motorola 68HC11/12.
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -313,6 +338,21 @@ case $basic_machine in
 		basic_machine=mt-unknown
 		;;
 
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
+
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
@@ -327,21 +367,25 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
 	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
@@ -367,25 +411,29 @@ case $basic_machine in
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
+	| nds32-* | nds32le-* | nds32be-* \
 	| nios-* | nios2-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
-	| romp-* | rs6000-* | rx-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| tahoe-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
 	| tron-* \
 	| ubicom32-* \
-	| v850-* | v850e-* | vax-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
 	| ymp-* \
 	| z8k-* | z80-*)
@@ -410,7 +458,7 @@ case $basic_machine in
 		basic_machine=a29k-amd
 		os=-udi
 		;;
-    	abacus)
+	abacus)
 		basic_machine=abacus-unknown
 		;;
 	adobe68k)
@@ -480,11 +528,20 @@ case $basic_machine in
 		basic_machine=powerpc-ibm
 		os=-cnk
 		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
 		;;
-        cegcc)
+	cegcc)
 		basic_machine=arm-unknown
 		os=-cegcc
 		;;
@@ -516,7 +573,7 @@ case $basic_machine in
 		basic_machine=craynv-cray
 		os=-unicosmp
 		;;
-	cr16)
+	cr16 | cr16-*)
 		basic_machine=cr16-unknown
 		os=-elf
 		;;
@@ -674,7 +731,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -732,7 +788,7 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
-        microblaze)
+	microblaze)
 		basic_machine=microblaze-xilinx
 		;;
 	mingw32)
@@ -771,10 +827,18 @@ case $basic_machine in
 	ms1-*)
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
+	msys)
+		basic_machine=i386-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
 		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -839,6 +903,12 @@ case $basic_machine in
 	np1)
 		basic_machine=np1-gould
 		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
@@ -921,9 +991,10 @@ case $basic_machine in
 		;;
 	power)	basic_machine=power-ibm
 		;;
-	ppc)	basic_machine=powerpc-unknown
+	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
@@ -1017,6 +1088,9 @@ case $basic_machine in
 		basic_machine=i860-stratus
 		os=-sysv4
 		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	sun2)
 		basic_machine=m68000-sun
 		;;
@@ -1073,20 +1147,8 @@ case $basic_machine in
 		basic_machine=t90-cray
 		os=-unicos
 		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
-		;;
 	tile*)
-		basic_machine=tile-unknown
+		basic_machine=$basic_machine-unknown
 		os=-linux-gnu
 		;;
 	tx39)
@@ -1156,6 +1218,9 @@ case $basic_machine in
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
 	ymp)
 		basic_machine=ymp-cray
 		os=-unicos
@@ -1253,11 +1318,11 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+	# First match some system type aliases
+	# that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
-        -auroraux)
-	        os=-auroraux
+	-auroraux)
+		os=-auroraux
 		;;
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
@@ -1293,8 +1358,9 @@ case $os in
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1341,7 +1407,7 @@ case $os in
 	-opened*)
 		os=-openedition
 		;;
-        -os400*)
+	-os400*)
 		os=-os400
 		;;
 	-wince*)
@@ -1390,7 +1456,7 @@ case $os in
 	-sinix*)
 		os=-sysv4
 		;;
-        -tpf*)
+	-tpf*)
 		os=-tpf
 		;;
 	-triton*)
@@ -1435,6 +1501,8 @@ case $os in
 	-dicos*)
 		os=-dicos
 		;;
+	-nacl*)
+		;;
 	-none)
 		;;
 	*)
@@ -1457,10 +1525,10 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
-        score-*)
+	score-*)
 		os=-elf
 		;;
-        spu-*)
+	spu-*)
 		os=-elf
 		;;
 	*-acorn)
@@ -1472,8 +1540,20 @@ case $basic_machine in
 	arm*-semi)
 		os=-aout
 		;;
-        c4x-* | tic4x-*)
-        	os=-coff
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	hexagon-*)
+		os=-elf
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
 		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
@@ -1493,14 +1573,11 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
 		;;
-        mep-*)
+	mep-*)
 		os=-elf
 		;;
 	mips*-cisco)
@@ -1527,7 +1604,7 @@ case $basic_machine in
 	*-ibm)
 		os=-aix
 		;;
-    	*-knuth)
+	*-knuth)
 		os=-mmixware
 		;;
 	*-wec)
diff --git a/configure b/configure
index 429c6cc..cc81327 100755
--- a/configure
+++ b/configure
@@ -1,13 +1,11 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for GeographicLib 1.21.
+# Generated by GNU Autoconf 2.69 for GeographicLib 1.34.
 #
 # Report bugs to <charles at karney.com>.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -136,6 +134,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -169,7 +192,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -222,21 +246,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	# Preserve -v and -x to the replacement shell.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	case $- in # ((((
-	  *v*x* | *x*v* ) as_opts=-vx ;;
-	  *v* ) as_opts=-v ;;
-	  *x* ) as_opts=-x ;;
-	  * ) as_opts= ;;
-	esac
-	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -339,6 +367,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -460,6 +496,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -494,16 +534,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -515,28 +555,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -570,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='GeographicLib'
 PACKAGE_TARNAME='geographiclib'
-PACKAGE_VERSION='1.21'
-PACKAGE_STRING='GeographicLib 1.21'
+PACKAGE_VERSION='1.34'
+PACKAGE_STRING='GeographicLib 1.34'
 PACKAGE_BUGREPORT='charles at karney.com'
 PACKAGE_URL=''
 
@@ -615,6 +635,14 @@ ac_includes_default="\
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
+HAVE_PODPROGS_FALSE
+HAVE_PODPROGS_TRUE
+COL
+POD2HTML
+POD2MAN
+HAVE_DOXYGEN_FALSE
+HAVE_DOXYGEN_TRUE
+DOXYGEN
 LIBOBJS
 POW_LIB
 CXXCPP
@@ -649,6 +677,7 @@ CPP
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
+am__nodep
 AMDEPBACKSLASH
 AMDEP_FALSE
 AMDEP_TRUE
@@ -668,6 +697,9 @@ LT_CURRENT
 MAINT
 MAINTAINER_MODE_FALSE
 MAINTAINER_MODE_TRUE
+GEOGRAPHICLIB_VERSION_PATCH
+GEOGRAPHICLIB_VERSION_MINOR
+GEOGRAPHICLIB_VERSION_MAJOR
 am__untar
 am__tar
 AMTAR
@@ -1222,8 +1254,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1309,7 +1339,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures GeographicLib 1.21 to adapt to many kinds of systems.
+\`configure' configures GeographicLib 1.34 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1380,7 +1410,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GeographicLib 1.21:";;
+     short | recursive ) echo "Configuration of GeographicLib 1.34:";;
    esac
   cat <<\_ACEOF
 
@@ -1388,10 +1418,13 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-maintainer-mode  enable make rules and dependencies not useful
-			  (and sometimes confusing) to the casual installer
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-maintainer-mode
+                          enable make rules and dependencies not useful (and
+                          sometimes confusing) to the casual installer
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-static[=PKGS]  build static libraries [default=yes]
   --enable-fast-install[=PKGS]
@@ -1401,7 +1434,7 @@ Optional Features:
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-sysroot=DIR Search for dependent libraries within DIR
@@ -1486,10 +1519,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GeographicLib configure 1.21
-generated by GNU Autoconf 2.68
+GeographicLib configure 1.34
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1640,7 +1673,7 @@ $as_echo "$ac_try_echo"; } >&5
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
 	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
+	 test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -1863,7 +1896,7 @@ $as_echo "$ac_try_echo"; } >&5
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
 	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
+	 test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -2030,8 +2063,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by GeographicLib $as_me 1.21, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+It was created by GeographicLib $as_me 1.34, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2521,7 +2554,7 @@ test -n "$target_alias" &&
 
 
 
-am__api_version='1.11'
+am__api_version='1.12'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -2560,7 +2593,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
 	  if test $ac_prog = install &&
 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 	    # AIX install.  It has an incompatible calling convention.
@@ -2618,9 +2651,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
 $as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -2631,32 +2661,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+	&& test "$*" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$2" = conftest.file
    )
 then
@@ -2668,6 +2706,16 @@ Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
@@ -2694,8 +2742,8 @@ if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
 if test x"${install_sh}" != xset; then
@@ -2707,10 +2755,10 @@ if test x"${install_sh}" != xset; then
   esac
 fi
 
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
+# will honor the 'STRIP' environment variable to overrule this program.
 if test "$cross_compiling" != no; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
@@ -2729,7 +2777,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2769,7 +2817,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2820,7 +2868,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_prog in mkdir gmkdir; do
 	 for ac_exec_ext in '' $ac_executable_extensions; do
-	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
 	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
 	     'mkdir (GNU coreutils) '* | \
 	     'mkdir (coreutils) '* | \
@@ -2849,12 +2897,6 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
 $as_echo "$MKDIR_P" >&6; }
 
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -2873,7 +2915,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2959,7 +3001,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='geographiclib'
- VERSION='1.21'
+ VERSION='1.34'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2987,14 +3029,42 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+GEOGRAPHICLIB_VERSION_MAJOR=1
+GEOGRAPHICLIB_VERSION_MINOR=34
+GEOGRAPHICLIB_VERSION_PATCH=0
 
-AMTAR=${AMTAR-"${am_missing_run}tar"}
+cat >>confdefs.h <<_ACEOF
+#define GEOGRAPHICLIB_VERSION_MAJOR $GEOGRAPHICLIB_VERSION_MAJOR
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define GEOGRAPHICLIB_VERSION_MINOR $GEOGRAPHICLIB_VERSION_MINOR
+_ACEOF
 
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
 
+cat >>confdefs.h <<_ACEOF
+#define GEOGRAPHICLIB_VERSION_PATCH $GEOGRAPHICLIB_VERSION_PATCH
+_ACEOF
 
 
 
@@ -3027,9 +3097,9 @@ fi
 ac_config_headers="$ac_config_headers include/GeographicLib/Config-ac.h"
 
 
-LT_CURRENT=12
-LT_REVISION=0
-LT_AGE=3
+LT_CURRENT=11
+LT_REVISION=1
+LT_AGE=1
 
 
 
@@ -3054,7 +3124,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -3087,6 +3157,7 @@ fi
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
  if test "x$enable_dependency_tracking" != xno; then
   AMDEP_TRUE=
@@ -3119,7 +3190,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3159,7 +3230,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3212,7 +3283,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3253,7 +3324,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -3311,7 +3382,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3355,7 +3426,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3801,8 +3872,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -3898,8 +3968,9 @@ else
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -3933,16 +4004,16 @@ else
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -3951,16 +4022,16 @@ else
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -4211,7 +4282,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4255,7 +4326,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4451,8 +4522,9 @@ else
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -4486,16 +4558,16 @@ else
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -4504,16 +4576,16 @@ else
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -4575,8 +4647,8 @@ esac
 
 
 
-macro_version='2.4'
-macro_revision='1.3293'
+macro_version='2.4.2'
+macro_revision='1.3337'
 
 
 
@@ -4683,7 +4755,7 @@ do
     for ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+      as_fn_executable_p "$ac_path_SED" || continue
 # Check for GNU ac_path_SED and select it if it is found.
   # Check for GNU $ac_path_SED
 case `"$ac_path_SED" --version 2>&1` in
@@ -4759,7 +4831,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4825,7 +4897,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4892,7 +4964,7 @@ do
     for ac_prog in fgrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+      as_fn_executable_p "$ac_path_FGREP" || continue
 # Check for GNU ac_path_FGREP and select it if it is found.
   # Check for GNU $ac_path_FGREP
 case `"$ac_path_FGREP" --version 2>&1` in
@@ -5148,7 +5220,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5192,7 +5264,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5350,6 +5422,11 @@ else
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -5389,7 +5466,7 @@ else
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
 	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
@@ -5611,7 +5688,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5651,7 +5728,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5818,7 +5895,7 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -5957,7 +6034,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5997,7 +6074,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6101,7 +6178,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6145,7 +6222,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6270,7 +6347,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6310,7 +6387,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6369,7 +6446,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6409,7 +6486,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6459,13 +6536,13 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
 
 case $host_os in
@@ -6612,6 +6689,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -7000,7 +7078,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
@@ -7011,7 +7089,20 @@ sparc*-*solaris*)
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
 	  LD="${LD-ld} -64"
@@ -7044,7 +7135,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7084,7 +7175,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7164,7 +7255,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7204,7 +7295,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7256,7 +7347,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7296,7 +7387,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7348,7 +7439,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7388,7 +7479,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_LIPO="lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7440,7 +7531,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7480,7 +7571,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL="otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7532,7 +7623,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7572,7 +7663,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL64="otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7651,7 +7742,13 @@ else
 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&5
@@ -7662,6 +7759,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
 if ${lt_cv_ld_exported_symbols_list+:} false; then :
@@ -7694,6 +7792,7 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
 $as_echo_n "checking for -force_load linker flag... " >&6; }
 if ${lt_cv_ld_force_load+:} false; then :
@@ -7715,7 +7814,9 @@ _LT_EOF
       echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
       $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
       _lt_result=$?
-      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
 	lt_cv_ld_force_load=yes
       else
 	cat conftest.err >&5
@@ -7994,7 +8095,22 @@ fi
 
 # Check whether --with-pic was given.
 if test "${with_pic+set}" = set; then :
-  withval=$with_pic; pic_mode="$withval"
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
   pic_mode=default
 fi
@@ -8072,6 +8188,10 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
 
+
+
+
+
 test -z "$LN_S" && LN_S="ln -s"
 
 
@@ -8531,7 +8651,9 @@ lt_prog_compiler_static=
     case $cc_basename in
     nvcc*) # Cuda Compiler Driver 2.2
       lt_prog_compiler_wl='-Xlinker '
-      lt_prog_compiler_pic='-Xcompiler -fPIC'
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
       ;;
     esac
   else
@@ -8622,18 +8744,33 @@ lt_prog_compiler_static=
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ F* | *Sun*Fortran*)
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
 	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
 	  lt_prog_compiler_wl=''
 	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
 	*Sun\ C*)
 	  # Sun C 5.9
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
 	  lt_prog_compiler_wl='-Wl,'
 	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
+	  lt_prog_compiler_static='-Bstatic'
+	  ;;
 	esac
 	;;
       esac
@@ -8995,7 +9132,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   hardcode_direct=no
   hardcode_direct_absolute=no
   hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
   hardcode_libdir_separator=
   hardcode_minus_L=no
   hardcode_shlibpath_var=unsupported
@@ -9245,8 +9381,7 @@ _LT_EOF
 	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-	  hardcode_libdir_flag_spec=
-	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
+	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
 	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
@@ -9625,6 +9760,7 @@ fi
 	# The linker will not automatically build a static lib if we build a DLL.
 	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
 	enable_shared_with_static_runtimes=yes
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
 	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
 	# Don't use ranlib
 	old_postinstall_cmds='chmod 644 $oldlib'
@@ -9670,6 +9806,7 @@ fi
   hardcode_shlibpath_var=unsupported
   if test "$lt_cv_ld_force_load" = "yes"; then
     whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
   else
     whole_archive_flag_spec=''
   fi
@@ -9698,10 +9835,6 @@ fi
       hardcode_shlibpath_var=no
       ;;
 
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -9714,7 +9847,7 @@ fi
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct=yes
       hardcode_minus_L=yes
@@ -9753,7 +9886,6 @@ fi
       fi
       if test "$with_gnu_ld" = no; then
 	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	hardcode_libdir_flag_spec_ld='+b $libdir'
 	hardcode_libdir_separator=:
 	hardcode_direct=yes
 	hardcode_direct_absolute=yes
@@ -10377,11 +10509,6 @@ esac
 
 
 
-
-
-
-
-
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
@@ -10471,7 +10598,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -10480,7 +10607,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -10545,7 +10672,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -10684,7 +10811,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -10692,10 +10819,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -10703,7 +10826,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -10721,7 +10844,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -10741,17 +10864,18 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   ;;
 
 haiku*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
@@ -10812,7 +10936,7 @@ hpux9* | hpux10* | hpux11*)
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -10828,7 +10952,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -10865,9 +10989,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -10953,7 +11077,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -11022,7 +11146,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11047,7 +11171,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -11071,7 +11195,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -11102,7 +11226,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11112,7 +11236,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -12037,7 +12161,6 @@ export_dynamic_flag_spec_CXX=
 hardcode_direct_CXX=no
 hardcode_direct_absolute_CXX=no
 hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
 hardcode_libdir_separator_CXX=
 hardcode_minus_L_CXX=no
 hardcode_shlibpath_var_CXX=unsupported
@@ -12621,6 +12744,7 @@ fi
   hardcode_shlibpath_var_CXX=unsupported
   if test "$lt_cv_ld_force_load" = "yes"; then
     whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
   else
     whole_archive_flag_spec_CXX=''
   fi
@@ -12665,7 +12789,7 @@ fi
         esac
         ;;
 
-      freebsd[12]*)
+      freebsd2.*)
         # C++ shared libraries reported to be fairly broken before
 	# switch to ELF
         ld_shlibs_CXX=no
@@ -13341,6 +13465,7 @@ _lt_libdeps_save_CFLAGS=$CFLAGS
 case "$CC $CFLAGS " in #(
 *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
 *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
 esac
 
 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
@@ -14130,7 +14255,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
-    cl*) ;;
+    cl*)
+      exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
     *)
       export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
       exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
@@ -14283,8 +14410,6 @@ esac
 
 
 
-
-
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
@@ -14310,7 +14435,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -14319,7 +14444,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -14384,7 +14509,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -14521,7 +14646,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -14529,10 +14654,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -14540,7 +14661,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -14558,7 +14679,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -14578,17 +14699,18 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   ;;
 
 haiku*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
@@ -14649,7 +14771,7 @@ hpux9* | hpux10* | hpux11*)
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -14665,7 +14787,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -14702,9 +14824,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -14790,7 +14912,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -14859,7 +14981,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -14884,7 +15006,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -14908,7 +15030,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -14939,7 +15061,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -14949,7 +15071,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -15088,6 +15210,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+
+
         ac_config_commands="$ac_config_commands libtool"
 
 
@@ -15120,60 +15244,60 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#include <stdbool.h>
-#ifndef bool
- "error: bool is not defined"
-#endif
-#ifndef false
- "error: false is not defined"
-#endif
-#if false
- "error: false is not 0"
-#endif
-#ifndef true
- "error: true is not defined"
-#endif
-#if true != 1
- "error: true is not 1"
-#endif
-#ifndef __bool_true_false_are_defined
- "error: __bool_true_false_are_defined is not defined"
-#endif
-
-	struct s { _Bool s: 1; _Bool t; } s;
-
-	char a[true == 1 ? 1 : -1];
-	char b[false == 0 ? 1 : -1];
-	char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-	char d[(bool) 0.5 == true ? 1 : -1];
-	/* See body of main program for 'e'.  */
-	char f[(_Bool) 0.0 == false ? 1 : -1];
-	char g[true];
-	char h[sizeof (_Bool)];
-	char i[sizeof s.t];
-	enum { j = false, k = true, l = false * true, m = true * 256 };
-	/* The following fails for
-	   HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
-	_Bool n[m];
-	char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-	char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-	/* Catch a bug in an HP-UX C compiler.  See
-	   http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-	   http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-	 */
-	_Bool q = true;
-	_Bool *pq = &q;
+             #include <stdbool.h>
+             #ifndef bool
+              "error: bool is not defined"
+             #endif
+             #ifndef false
+              "error: false is not defined"
+             #endif
+             #if false
+              "error: false is not 0"
+             #endif
+             #ifndef true
+              "error: true is not defined"
+             #endif
+             #if true != 1
+              "error: true is not 1"
+             #endif
+             #ifndef __bool_true_false_are_defined
+              "error: __bool_true_false_are_defined is not defined"
+             #endif
+
+             struct s { _Bool s: 1; _Bool t; } s;
+
+             char a[true == 1 ? 1 : -1];
+             char b[false == 0 ? 1 : -1];
+             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+             char d[(bool) 0.5 == true ? 1 : -1];
+             /* See body of main program for 'e'.  */
+             char f[(_Bool) 0.0 == false ? 1 : -1];
+             char g[true];
+             char h[sizeof (_Bool)];
+             char i[sizeof s.t];
+             enum { j = false, k = true, l = false * true, m = true * 256 };
+             /* The following fails for
+                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+             _Bool n[m];
+             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+             /* Catch a bug in an HP-UX C compiler.  See
+                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+              */
+             _Bool q = true;
+             _Bool *pq = &q;
 
 int
 main ()
 {
 
-	bool e = &s;
-	*pq |= q;
-	*pq |= ! q;
-	/* Refer to every declared value, to avoid compiler optimizations.  */
-	return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-		+ !m + !n + !o + !p + !q + !pq);
+             bool e = &s;
+             *pq |= q;
+             *pq |= ! q;
+             /* Refer to every declared value, to avoid compiler optimizations.  */
+             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+                     + !m + !n + !o + !p + !q + !pq);
 
   ;
   return 0;
@@ -15188,7 +15312,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
 $as_echo "$ac_cv_header_stdbool_h" >&6; }
-ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+   ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
 if test "x$ac_cv_type__Bool" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
@@ -15198,6 +15322,7 @@ _ACEOF
 
 fi
 
+
 if test $ac_cv_header_stdbool_h = yes; then
 
 $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
@@ -15265,7 +15390,8 @@ main ()
 {
 static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
 	      sizeof (double) <= sizeof (long double))];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -15808,6 +15934,195 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
  esac
 
 
+# Check for doxygen.
+# Need version 1.8.1.2 or later for greek and math symbols.
+for ac_prog in doxygen
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DOXYGEN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DOXYGEN"; then
+  ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DOXYGEN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DOXYGEN=$ac_cv_prog_DOXYGEN
+if test -n "$DOXYGEN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5
+$as_echo "$DOXYGEN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$DOXYGEN" && break
+done
+
+ if test "$DOXYGEN" && test `"$DOXYGEN" --version |
+	sed 's/^\([0-9]\)\.\([0-9]\)\./\1.0\2./'` '>' 1.08.1.1; then
+  HAVE_DOXYGEN_TRUE=
+  HAVE_DOXYGEN_FALSE='#'
+else
+  HAVE_DOXYGEN_TRUE='#'
+  HAVE_DOXYGEN_FALSE=
+fi
+
+
+for ac_prog in pod2man
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_POD2MAN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$POD2MAN"; then
+  ac_cv_prog_POD2MAN="$POD2MAN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_POD2MAN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+POD2MAN=$ac_cv_prog_POD2MAN
+if test -n "$POD2MAN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POD2MAN" >&5
+$as_echo "$POD2MAN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$POD2MAN" && break
+done
+
+for ac_prog in pod2html
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_POD2HTML+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$POD2HTML"; then
+  ac_cv_prog_POD2HTML="$POD2HTML" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_POD2HTML="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+POD2HTML=$ac_cv_prog_POD2HTML
+if test -n "$POD2HTML"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POD2HTML" >&5
+$as_echo "$POD2HTML" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$POD2HTML" && break
+done
+
+for ac_prog in col
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_COL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$COL"; then
+  ac_cv_prog_COL="$COL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_COL="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+COL=$ac_cv_prog_COL
+if test -n "$COL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COL" >&5
+$as_echo "$COL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$COL" && break
+done
+
+ if test "$POD2MAN" -a  "$POD2HTML" -a "$COL"; then
+  HAVE_PODPROGS_TRUE=
+  HAVE_PODPROGS_FALSE='#'
+else
+  HAVE_PODPROGS_TRUE='#'
+  HAVE_PODPROGS_FALSE=
+fi
+
+
 ac_config_files="$ac_config_files Makefile src/Makefile include/Makefile tools/Makefile doc/Makefile man/Makefile matlab/Makefile python/Makefile cmake/Makefile examples/Makefile"
 
 cat >confcache <<\_ACEOF
@@ -15919,6 +16234,14 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
  if test -n "$EXEEXT"; then
   am__EXEEXT_TRUE=
   am__EXEEXT_FALSE='#'
@@ -15944,6 +16267,14 @@ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
+if test -z "${HAVE_DOXYGEN_TRUE}" && test -z "${HAVE_DOXYGEN_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_DOXYGEN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_PODPROGS_TRUE}" && test -z "${HAVE_PODPROGS_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_PODPROGS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -16242,16 +16573,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -16311,28 +16642,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -16353,8 +16672,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GeographicLib $as_me 1.21, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+This file was extended by GeographicLib $as_me 1.34, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -16419,11 +16738,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-GeographicLib config.status 1.21
-configured by $0, generated by GNU Autoconf 2.68,
+GeographicLib config.status 1.34
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -16514,7 +16833,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
@@ -16556,6 +16875,7 @@ pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
 enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
 SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
 ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
 host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
 host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
 host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
@@ -16638,7 +16958,6 @@ with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
 allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
 no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
 hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
 hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
 hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
 hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
@@ -16710,7 +17029,6 @@ with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
 allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
 no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
 hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`'
 hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
 hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
 hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
@@ -16749,6 +17067,7 @@ _LTECHO_EOF'
 # Quote evaled strings.
 for var in SHELL \
 ECHO \
+PATH_SEPARATOR \
 SED \
 GREP \
 EGREP \
@@ -16799,7 +17118,6 @@ with_gnu_ld \
 allow_undefined_flag \
 no_undefined_flag \
 hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
 hardcode_libdir_separator \
 exclude_expsyms \
 include_expsyms \
@@ -16833,7 +17151,6 @@ with_gnu_ld_CXX \
 allow_undefined_flag_CXX \
 no_undefined_flag_CXX \
 hardcode_libdir_flag_spec_CXX \
-hardcode_libdir_flag_spec_ld_CXX \
 hardcode_libdir_separator_CXX \
 exclude_expsyms_CXX \
 include_expsyms_CXX \
@@ -17547,7 +17864,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -17581,21 +17898,19 @@ $as_echo X"$mf" |
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
     test -z "am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`$as_dirname -- "$file" ||
@@ -17649,8 +17964,8 @@ $as_echo X"$file" |
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-#                 Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -17704,6 +18019,9 @@ SHELL=$lt_SHELL
 # An echo program that protects backslashes.
 ECHO=$lt_ECHO
 
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
 # The host system.
 host_alias=$host_alias
 host=$host
@@ -18005,10 +18323,6 @@ no_undefined_flag=$lt_no_undefined_flag
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
@@ -18351,10 +18665,6 @@ no_undefined_flag=$lt_no_undefined_flag_CXX
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
 
diff --git a/configure.ac b/configure.ac
index c56338e..e9fb7b6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,14 +1,26 @@
 dnl
 dnl Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
-dnl $Id: 681a427014d2d61ab6b066354ed7b0ef245f75c3 $
 
-AC_INIT([GeographicLib],[1.21],[charles at karney.com])
+AC_INIT([GeographicLib],[1.34],[charles at karney.com])
 AC_CANONICAL_SYSTEM
 AC_PREREQ(2.61)
 AC_CONFIG_SRCDIR(src/Geodesic.cpp)
 AC_CONFIG_MACRO_DIR(m4)
 AM_INIT_AUTOMAKE
 
+GEOGRAPHICLIB_VERSION_MAJOR=1
+GEOGRAPHICLIB_VERSION_MINOR=34
+GEOGRAPHICLIB_VERSION_PATCH=0
+AC_DEFINE_UNQUOTED([GEOGRAPHICLIB_VERSION_MAJOR],
+	[$GEOGRAPHICLIB_VERSION_MAJOR],[major version number])
+AC_DEFINE_UNQUOTED([GEOGRAPHICLIB_VERSION_MINOR],
+	[$GEOGRAPHICLIB_VERSION_MINOR],[minor version number])
+AC_DEFINE_UNQUOTED([GEOGRAPHICLIB_VERSION_PATCH],
+	[$GEOGRAPHICLIB_VERSION_PATCH],[patch number])
+AC_SUBST(GEOGRAPHICLIB_VERSION_MAJOR)
+AC_SUBST(GEOGRAPHICLIB_VERSION_MINOR)
+AC_SUBST(GEOGRAPHICLIB_VERSION_PATCH)
+
 dnl
 dnl This directive is deprecated by someone, but I prefer to avoid
 dnl running autotools if not required explicitly. The reason is
@@ -22,9 +34,9 @@ dnl Library code modified:              REVISION++
 dnl Interfaces changed/added/removed:   CURRENT++ REVISION=0
 dnl Interfaces added:                   AGE++
 dnl Interfaces removed:                 AGE=0
-LT_CURRENT=12
-LT_REVISION=0
-LT_AGE=3
+LT_CURRENT=11
+LT_REVISION=1
+LT_AGE=1
 AC_SUBST(LT_CURRENT)
 AC_SUBST(LT_REVISION)
 AC_SUBST(LT_AGE)
@@ -54,6 +66,18 @@ AC_SEARCH_LIBS([sqrt],[m])
 # Check endianness
 AC_C_BIGENDIAN
 
+# Check for doxygen.
+# Need version 1.8.1.2 or later for greek and math symbols.
+AC_CHECK_PROGS([DOXYGEN], [doxygen])
+AM_CONDITIONAL([HAVE_DOXYGEN],
+	[test "$DOXYGEN" && test `"$DOXYGEN" --version |
+	sed 's/^\([[0-9]]\)\.\([[0-9]]\)\./\1.0\2./'` '>' 1.08.1.1])
+
+AC_CHECK_PROGS([POD2MAN], [pod2man])
+AC_CHECK_PROGS([POD2HTML], [pod2html])
+AC_CHECK_PROGS([COL], [col])
+AM_CONDITIONAL([HAVE_PODPROGS], [test "$POD2MAN" -a  "$POD2HTML" -a "$COL"])
+
 dnl
 dnl Add here new file to be generated
 dnl
diff --git a/depcomp b/depcomp
index df8eea7..debb6ff 100755
--- a/depcomp
+++ b/depcomp
@@ -1,10 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-03-27.16; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -28,7 +27,7 @@ scriptversion=2009-04-28.21; # UTC
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
      exit 1;
      ;;
   -h | --h*)
@@ -40,11 +39,11 @@ as side-effects.
 
 Environment variables:
   depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
+  tmpdepfile  Temporary file to use when outputting dependencies.
   libtool     Whether libtool is used (yes/no).
 
 Report bugs to <bug-automake at gnu.org>.
@@ -57,6 +56,12 @@ EOF
     ;;
 esac
 
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
@@ -90,10 +95,24 @@ if test "$depmode" = msvcmsys; then
    # This is just like msvisualcpp but w/o cygpath translation.
    # Just convert the backslash-escaped backslashes to single forward
    # slashes to satisfy depend.m4
-   cygpath_u="sed s,\\\\\\\\,/,g"
+   cygpath_u='sed s,\\\\,/,g'
    depmode=msvisualcpp
 fi
 
+if test "$depmode" = msvc7msys; then
+   # This is just like msvc7 but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u='sed s,\\\\,/,g'
+   depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
+   gccflag=-qmakedep=gcc,-MF
+   depmode=gcc
+fi
+
 case "$depmode" in
 gcc3)
 ## gcc 3 implements dependency tracking that does exactly what
@@ -148,20 +167,21 @@ gcc)
 ## The second -e expression handles DOS-style file names with drive letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
+  tr ' ' "$nl" < "$tmpdepfile" |
+## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
-## well.
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+      | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -193,18 +213,15 @@ sgi)
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
+    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
+    tr ' ' "$nl" < "$tmpdepfile" \
     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> "$depfile"
+    tr "$nl" ' ' >> "$depfile"
     echo >> "$depfile"
 
     # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
+    tr ' ' "$nl" < "$tmpdepfile" \
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
    >> "$depfile"
   else
@@ -216,10 +233,17 @@ sgi)
   rm -f "$tmpdepfile"
   ;;
 
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
@@ -249,12 +273,11 @@ aix)
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    # Each line is of the form `foo.o: dependent.h'.
+    # Each line is of the form 'foo.o: dependent.h'.
     # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
+    # '$object: dependent.h' and one to simply 'dependent.h:'.
     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-    # That's a tab and a space in the [].
-    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
   else
     # The sourcefile does not contain any dependencies, so just
     # store a dummy comment line, to avoid errors with the Makefile
@@ -265,23 +288,26 @@ aix)
   ;;
 
 icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
+  # However on
+  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
   # ICC 7.0 will fill foo.d with something like
   #    foo.o: sub/foo.c
   #    foo.o: sub/foo.h
-  # which is wrong.  We want:
+  # which is wrong.  We want
   #    sub/foo.o: sub/foo.c
   #    sub/foo.o: sub/foo.h
   #    sub/foo.c:
   #    sub/foo.h:
   # ICC 7.1 will output
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
+  # and will wrap long lines using '\':
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
-
+  # tcc 0.9.26 (FIXME still under development at the moment of writing)
+  # will emit a similar output, but also prepend the continuation lines
+  # with horizontal tabulation characters.
   "$@" -MD -MF "$tmpdepfile"
   stat=$?
   if test $stat -eq 0; then :
@@ -290,15 +316,21 @@ icc)
     exit $stat
   fi
   rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Each line is of the form 'foo.o: dependent.h',
+  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
   # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
+  # '$object: dependent.h' and one to simply 'dependent.h:'.
+  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
+    < "$tmpdepfile" > "$depfile"
+  sed '
+    s/[ '"$tab"'][ '"$tab"']*/ /g
+    s/^ *//
+    s/ *\\*$//
+    s/^[^:]*: *//
+    /^$/d
+    /:$/d
+    s/$/ :/
+  ' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -334,7 +366,7 @@ hp2)
   done
   if test -f "$tmpdepfile"; then
     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add `dependent.h:' lines.
+    # Add 'dependent.h:' lines.
     sed -ne '2,${
 	       s/^ *//
 	       s/ \\*$//
@@ -349,9 +381,9 @@ hp2)
 
 tru64)
    # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
+   # dependencies in 'foo.d' instead, so we check for that too.
    # Subdirectories are respected.
    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    test "x$dir" = "x$object" && dir=
@@ -397,14 +429,59 @@ tru64)
    done
    if test -f "$tmpdepfile"; then
       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    else
       echo "#dummy" > "$depfile"
    fi
    rm -f "$tmpdepfile"
    ;;
 
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test "$stat" = 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 #nosideeffect)
   # This comment above is used by automake to tell side-effect
   # dependency tracking mechanisms from slower ones.
@@ -422,7 +499,7 @@ dashmstdout)
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -442,15 +519,14 @@ dashmstdout)
   done
 
   test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
+  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
+  tr ' ' "$nl" < "$tmpdepfile" | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -503,9 +579,10 @@ makedepend)
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -525,7 +602,7 @@ cpp)
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -594,8 +671,8 @@ msvisualcpp)
   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
-  echo "	" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index f251445..7390a40 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -1,69 +1,83 @@
-# $Id: a9ac6876ce9b9276e0b6add11f6d77a9c8f7c75b $
-
 # Where the html versions of the man pages (extension .1.html) are
 # found.
-if (MAINTAINER)
-  set (MANDIR ${PROJECT_BINARY_DIR}/man)
-else ()
-  set (MANDIR ${PROJECT_SOURCE_DIR}/man)
-endif ()
+set (MANDIR ${PROJECT_BINARY_DIR}/man)
 
-# BUILD UP A LIST OF THE .1.HTML FILES.
+# Build up a list of the .1.html files.
 set (HTMLMAN)
 foreach (TOOL ${TOOLS})
   set (HTMLMAN ${HTMLMAN} ${MANDIR}/${TOOL}.1.html)
 endforeach ()
 
+if (COMMON_INSTALL_PATH)
+  set (INSTALL_DOC_DIR "share/doc/GeographicLib")
+else ()
+  set (INSTALL_DOC_DIR "doc")
+endif ()
+
 # Run doxygen, if available
 
 # First assemble a list of all the files the documentation uses.  Add a
-# dependency on htmlman (from man/CMakeLists.txt).  Use doxygen.log as
-# the make target.  To make this target, copy the non-doxygen generated
-# files into html/.  Run doxfile.in cmake's config process so that
-# absolute path names are used and so that the pathnames are properly
-# stripped by doxygen (via STRIP_FROM_PATH). The distrib-doc target
-# copies the html directory into the source tree.
+# dependency on htmlman (from man/CMakeLists.txt).  Use html/index.html
+# as the make target.  To make this target, copy the non-doxygen
+# generated files into html/.  Run doxfile.in thru cmake's config
+# process so that absolute path names are used and so that the pathnames
+# are properly stripped by doxygen (via STRIP_FROM_PATH). The
+# distrib-doc target copies the html directory into the source tree.
 
 # If doxygen is not available, only the install step (from the source
 # tree) is done.
 
+file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html-stage)
 if (DOXYGEN_FOUND)
-  configure_file (
-      "${CMAKE_CURRENT_SOURCE_DIR}/doxyfile.in"
-      "${CMAKE_CURRENT_BINARY_DIR}/doxyfile" )
+  configure_file (doxyfile.in doxyfile)
+  configure_file (doxyfile-c.in doxyfile-c)
+  configure_file (doxyfile-for.in doxyfile-for)
+  configure_file (doxyfile-net.in doxyfile-net)
   file (GLOB SOURCES
-    ../src/*.cpp ../include/GeographicLib/*.hpp
-    ../tools/*.cpp ../examples/*.cpp)
-  file (GLOB EXTRA_FILES ../maxima/*.mac tmseries30.html geodseries30.html
-    ../LICENSE.txt)
+    ../src/[A-Za-z]*.cpp ../include/GeographicLib/[A-Za-z]*.hpp
+    ../tools/[A-Za-z]*.cpp ../examples/[A-Za-z]*.cpp
+    ../legacy/C/*.[ch] ../legacy/Fortran/*.for ../legacy/Fortran/*.inc
+    ../dotnet/NETGeographicLib/*.cpp ../dotnet/NETGeographicLib/*.h
+    ../dotnet/examples/CS/*.cs ../dotnet/examples/ManagedCPP/*.cpp
+    ../dotnet/examples/VB/*.vb)
+  file (GLOB EXTRA_FILES ../maxima/[A-Za-z]*.mac
+    tmseries30.html geodseries30.html ../LICENSE.txt)
+  file (GLOB FIGURES *.png)
+  file (COPY ${EXTRA_FILES} DESTINATION html-stage)
   add_custom_target (doc ALL
-    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxygen.log)
+    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/index.html)
   add_dependencies (doc htmlman)
-  add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doxygen.log
+  add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/index.html
     DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxyfile
-      Geographic.doc ${SOURCES} ${EXTRA_FILES} ${HTMLMAN}
-    COMMAND rm -rf html && mkdir html
-    COMMAND
-      cp -p ${EXTRA_FILES} ${HTMLMAN} html/
+      ${CMAKE_CURRENT_BINARY_DIR}/doxyfile-c
+      ${CMAKE_CURRENT_BINARY_DIR}/doxyfile-for
+      ${CMAKE_CURRENT_BINARY_DIR}/doxyfile-net
+      GeographicLib.dox geodesic-c.dox geodesic-for.dox NETGeographicLib.dox
+      ${SOURCES} ${EXTRA_FILES} ${FIGURES} ${HTMLMAN}
+    COMMAND ${CMAKE_COMMAND} -E remove_directory html
+    COMMAND ${CMAKE_COMMAND} -E copy_directory html-stage html
     COMMAND ${DOXYGEN_EXECUTABLE} doxyfile > doxygen.log
+    COMMAND ${DOXYGEN_EXECUTABLE} doxyfile-c > doxygen-c.log
+    COMMAND ${DOXYGEN_EXECUTABLE} doxyfile-for > doxygen-for.log
+    COMMAND ${DOXYGEN_EXECUTABLE} doxyfile-net > doxygen-net.log
     COMMENT "Generating html documentation tree")
   install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
-    DESTINATION share/doc/GeographicLib)
-
-  add_custom_target (distrib-doc)
-  add_dependencies (distrib-doc doc)
-  add_custom_command (TARGET distrib-doc
-    COMMAND rsync -a --delete html/ ${CMAKE_CURRENT_SOURCE_DIR}/html/
-    COMMAND touch ${CMAKE_CURRENT_SOURCE_DIR}/html/index.html
-    COMMENT "Installing html documentation tree in source tree")
-
+    DESTINATION ${INSTALL_DOC_DIR})
 else ()
-  install (DIRECTORY html DESTINATION share/doc/GeographicLib)
+  file (COPY ../LICENSE.txt DESTINATION html)
+  # Need to absolute path on destination to support old versions of cmake
+  configure_file (index.html.in html/index.html)
+  configure_file (utilities.html.in html/utilities.html)
+  install (FILES
+    ${CMAKE_CURRENT_BINARY_DIR}/html/LICENSE.txt
+    ${CMAKE_CURRENT_BINARY_DIR}/html/index.html
+    ${CMAKE_CURRENT_BINARY_DIR}/html/utilities.html
+    DESTINATION ${INSTALL_DOC_DIR}/html)
 endif ()
 
-# Finally install the Javascript files
-file (GLOB SCRIPTDRIVERS scripts/*.html)
-file (GLOB JSSCRIPTS scripts/GeographicLib/*.js)
-install (FILES ${SCRIPTDRIVERS} DESTINATION share/doc/GeographicLib/scripts)
+# Finally install the JavaScript files
+file (GLOB SCRIPTDRIVERS scripts/[A-Za-z]*.html)
+file (GLOB JSSCRIPTS scripts/GeographicLib/[A-Za-z]*.js)
+install (FILES ${SCRIPTDRIVERS} DESTINATION ${INSTALL_DOC_DIR}/scripts)
 install (FILES ${JSSCRIPTS}
-  DESTINATION share/doc/GeographicLib/scripts/GeographicLib)
+  DESTINATION ${INSTALL_DOC_DIR}/scripts/GeographicLib)
diff --git a/doc/Geographic.doc b/doc/Geographic.doc
deleted file mode 100644
index 769e694..0000000
--- a/doc/Geographic.doc
+++ /dev/null
@@ -1,3795 +0,0 @@
-// -*- text -*-
-/**
- * \file Geographic.doc
- * \brief Documentation for GeographicLib
- *
- * Written by Charles Karney <charles at karney.com> and licensed under the
- * MIT/X11 License.  For more information, see
- * http://geographiclib.sourceforge.net/
- **********************************************************************/
-// $Id: 39fe7aa302faa3170132f94a3e800b401ce18c89 $
-/**
-\mainpage Geographic library
-\author Charles Karney
-<charles at karney.com>
-\version 1.21
-\date 2012-04-25
-
-\section abstract Abstract
-
-%GeographicLib is a small set of <a href="annotated.html">C++
-classes</a> for performing conversions between geographic, UTM, UPS,
-MGRS, geocentric, and local cartesian coordinates, for gravity (e.g.,
-EGM2008), geoid height and geomagnetic field (e.g., WMM2010)
-calculations, and for solving geodesic problems.  The emphasis is on
-returning accurate results with errors close to round-off (about
-5–15 nanometers).  New accurate algorithms for \ref geodesic and
-\ref transversemercator have been developed for this library.  The
-functionality of the library can be accessed from user code, from the
-\ref utilities provided, or via the \ref other.  For a sample of the
-geodesic capabilities in Javascript, check out the
-<a href="../scripts/geod-calc.html">online geodesic calculator</a> and
-the script for displaying
-<a href="../scripts/geod-google.html">geodesics in Google Maps</a>
-
-This library is <i>not</i> a general purpose projection library; use
-<a href="http://trac.osgeo.org/proj/">proj.4</a> for that.  On the other
-hand, it does provide the core functionality offered by
-<a href="http://earth-info.nima.mil/GandG/geotrans/">geotrans</a> and it
-cures several of the defects of that package.
-
-\section download Download
-
-The main project page is at
-- <a href="http://sourceforge.net/projects/geographiclib">
-  http://sourceforge.net/projects/geographiclib </a>
-.
-The code is available for download at
-- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.21.tar.gz/download">
-  GeographicLib-1.21.tar.gz</a>
-- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.21.zip/download">
-  GeographicLib-1.21.zip</a>
-.
-as either a compressed tar file (tar.gz) or a zip file.  (The two archives
-have identical contents.)  Alternatively you can get the latest stable release
-using git \verbatim
-  git clone git://geographiclib.git.sf.net/gitroot/geographiclib/geographiclib-release geographiclib
-  cd geographiclib; git checkout stable
-\endverbatim
-There are also a binary installers for Windows available at
-- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win32.exe/download">
-  GeographicLib-1.21-win32.exe</a>
-- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win64.exe/download">
-  GeographicLib-1.21-win64.exe</a>
-.
-It is licensed under the
-<a href="http://www.opensource.org/licenses/MIT">MIT/X11 License</a>;
-see <a href="LICENSE.txt">LICENSE.txt</a> for the terms.
-For more information, see http://geographiclib.sourceforge.net/.
-
-\section contents Contents
- - \ref intro
- - \ref install
- - \ref start
- - \ref utilities
- - \ref organization
- - \ref other
- - \ref geoid
- - \ref gravity
- - \ref magnetic
- - \ref geodesic
- - \ref transversemercator
- - \ref geocentric
- - \ref old
-
-<center>
-Forward to \ref intro.
-</center>
-
-**********************************************************************/
-/**
-\page intro Introduction
-
-<center>
-Forward to \ref install.  Up to \ref contents.
-</center>
-
-%GeographicLib offers a C++ interfaces to a small (but important!) set
-of geographic transformations.  It grew out of a desire to improve on
-the <a href="http://earth-info.nima.mil/GandG/geotrans/">geotrans</a>
-package for transforming between geographic and MGRS coordinates.  At
-present, %GeographicLib provides UTM, UPS, MGRS, geocentric, and local
-cartesian projections, gravity and geomagnetic models, and classes for
-geodesic calculations.
-
-The goals of %GeographicLib are:
- - Accuracy.  In most applications the accuracy is close to round-off,
-   about 5 nm (5 nanometers).  Even though in many geographic
-   applications 1 cm is considered "accurate enough", there is little
-   penalty in providing much better accuracy.  If situations where a
-   faster approximate algorithm is necessary, %GeographicLib offers an
-   accurate benchmark to guide the development.
- - Completeness.  For each of the projections included, an attempt is
-   made to provide a complete solution.  For example,
-   GeographicLib::Geodesic::Inverse works for anti-podal points.
-   Similarly, GeographicLib::Geocentric.Reverse will return accurate
-   geodetic coordinates even for points close to the center of the
-   earth.
- - C++ interface.  For the projection methods, this allows encapsulation
-   of the ellipsoid parameters.
- - Emphasis on projections necessary for analyzing military data.
- - Uniform treatment of UTM/UPS.  The GeographicLib::UTMUPS class treats
-   UPS as zone 0.  This simplifies conversions between UTM and UPS
-   coordinates, etc.
- - Well defined and stable conventions for the conversion between
-   UTM/UPS to MGRS coordinates.
- - Detailed internal documentation on the algorithms.  For the most part
-   %GeographicLib uses published algorithms and references are given.  If
-   changes have been made (usually to improve the numerical accuracy),
-   these are described in the code.
-
-Various \ref utilities are provided with the library.  These illustrate
-the use of the library and are useful in their own right.  This library
-and the utilities have been tested with g++ 4.4 under Linux, with g++
-4.2 under Mac OS X, and with MS Visual Studio 2008 and 2010.
-
-Matlab, Javascript, and Python interfaces are provided to portions of
-%GeographicLib; see \ref other.
-
-The section \ref geodesic documents the method of solving the geodesic
-problem.
-
-The section \ref transversemercator documents various properties of this
-projection.
-
-Undoubtedly, bugs lurk in this code and in the documentation.  Please
-report any you find to <charles at karney.com>.
-
-<center>
-Forward to \ref install.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page install Installing %GeographicLib
-
-<center>
-Back to \ref intro.  Forward to \ref start.  Up to \ref contents.
-</center>
-
-%GeographicLib has been developed under Linux with the g++ compiler (versions
-4.0 and later) and under Windows with Visual Studio 2005, 2008, and
-2010.  Earlier versions were tested also under Darwin and Solaris.  It
-should compile on a wide range of other systems.  First
-download either
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.21.tar.gz/download">
-GeographicLib-1.21.tar.gz</a> or
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.21.zip/download">
-GeographicLib-1.21.zip</a> (or
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win32.exe/download">
-GeographicLib-1.21-win32.exe</a> or
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win64.exe/download">
-GeographicLib-1.21-win64.exe</a> for binary installation under Windows).
-Then pick one of the first five options below:
-- \ref cmake.  This is the preferred installation method as it will work
-  on the widest range of platforms.  However it requires that you have
-  <a href="http://www.cmake.org">cmake</a> installed.
-- \ref autoconf.  This method works for most Unix-like systems,
-  including Linux and Mac OS X.
-- \ref gnu.  This is a simple installation method that works with g++
-  and GNU make on Linux and many Unix platforms.
-- \ref windows.  This is a simple installation method that works with
-  Visual Studio 2005, 2008, and 2010 under Windows.
-- \ref windowsbin.  Use this installation method if you only need to use
-  the \ref utilities supplied with %GeographicLib.  (This method also
-  installs the header files and the static library for use by Visual
-  Studio 2010.)
-- \ref qt.  How to compile %GeographicLib so that it can be used by Qt
-  programs.
-- \ref maintainer.  This describes addition tasks of interest only to
-  the maintainers of this code.
-.
-This section documents only how to install the <i>software</i>.  If you
-wish to use %GeographicLib to evaluate geoid heights or the earth's
-gravitational or magnetic fields, then you must also install the
-relevant data files.  See \ref geoidinst, \ref gravityinst, and \ref
-magneticinst for instructions.
-
-The first two installation methods use two important techniques which
-make software maintanence simpler
-- <b>Out-of-source builds:</b>  This means that you create a separate
-  directory for compiling the code.  In the description here the
-  directories are called BUILD and are located in the top-level of the
-  source tree.  You might want to use a suffix to denote the type of
-  build, e.g., BUILD-vc9 for Visual Studio 9, or BUILD-shared for a
-  build which creates a shared library.  The advantages of out-of-source
-  builds are:
-  - You don't mess up the source tree, so it's easy to "clean up".
-    Indeed the source tree might be on a read-only file system.
-  - Builds for multiple platforms or compilers don't interfere with each
-    other.
-- <b>The library is installed:</b> After compilation, there is a
-  separate <i>install</i> step which copies the headers, libraries,
-  tools, and documentation to a "central" location.  You may at this
-  point delete the source and build directories.  If you have
-  administrative privileges, you can install %GeographicLib for the use
-  of all users (e.g., in /usr/local).  Otherwise, you can install it for
-  your personal use (e.g., in $HOME/packages).
-
-\section cmake Installation with cmake
-
-This is the recommended method of installation; however it requires that
-<a href="http://www.cmake.org">cmake</a> be installed on your system.
-This permits %GeographicLib to be built either as a shared or a static
-library on a wide variety of systems.  cmake can also determine the
-capabilities of your system and adjust the compilation of the
-libraries and examples appropriately.
-
-cmake is available for most computer platforms.  On Linux systems cmake
-will typically one of the standard packages and can be installed by a
-command like
-  \verbatim
-  yum install cmake \endverbatim
-(executed as root).  On other systems, download a binary
-installer from http://www.cmake.org click on download, and save and run
-the appropriate installer.  Run the cmake command with no arguments to
-get help.  Other useful tools are ccmake and cmake-gui which offer
-curses and graphical interfaces to cmake.  Building under cmake depends
-on whether it is targeting an IDE (interactive development environment)
-or generating Unix-style makefiles.  The instructions below have been
-tested with makefiles and g++ on Linux and with the Visual Studio IDE on
-Windows.
-
-Here are the steps to compile and install %GeographicLib:
-- Unpack the source, running one of \verbatim
-  tar xfpz GeographicLib-1.21.tar.gz
-  unzip -q GeographicLib-1.21.zip \endverbatim
-  then enter the directory created with one of \verbatim
-  cd GeographicLib-1.21 \endverbatim
-- Create a separate build directory and enter it, for example, \verbatim
-  mkdir BUILD
-  cd BUILD\endverbatim
-- Run cmake, pointing it to the source directory (..).  On Linux, Unix,
-  and MacOSX systems, the command is \verbatim
-  cmake .. \endverbatim
-  For Windows, the command is typically one of \verbatim
-  cmake -G "Visual Studio 10" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10/GeographicLib ..
-  cmake -G "Visual Studio 9 2008" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc9/GeographicLib ..
-  cmake -G "Visual Studio 8 2005" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc8/GeographicLib ..
-\endverbatim
-  Instead of setting CMAKE_INSTALL_PREFIX, you can (on Windows) set
-  CMAKE_PREFIX_PATH to point to its parent directory, e.g., \verbatim
-  cmake -G "Visual Studio 10" -D CMAKE_PREFIX_PATH=C:/pkg-vc10 ..
-\endverbatim
-  The definitions of CMAKE_INSTALL_PREFIX are optional (see below).  The
-  settings given above are recommended to ensure that packages that use
-  %GeographicLib use the version compiled with the right compiler.
-  If you need to rerun cmake, use \verbatim
-  cmake . \endverbatim
-  possibly including some options via <code>-D</code> (see the next step).
-- cmake allows you to configure how %GeographicLib is built and installed by
-  supplying options, for example \verbatim
-  cmake -D CMAKE_INSTALL_PREFIX=/tmp/geographic . \endverbatim
-  The options you might need to change are
-  - <code>CMAKE_INSTALL_PREFIX</code> (default: /usr/local on
-    non-Windows systems, C:/Program Files/GeographicLib on Windows
-    systems) specifies where the library will be installed.  For windows
-    systems, it is recommended to use a prefix which includes the
-    compiler version, as shown above (and also, possibly, whether this
-    is a 64-bit build, e.g., <code>cmake -G "Visual Studio 10 Win64" -D
-    CMAKE_INSTALL_PREFIX=C:/pkg-vc10-x64/GeographicLib ..</code>) If you
-    just want to try the library to see if it suits your needs, pick
-    <code>CMAKE_INSTALL_PREFIX</code>=/tmp/geographic, for example, and
-    set <code>GEOGRAPHIC_SHARED_LIB</code>=OFF.
-  - <code>GEOGRAPHICLIB_DATA</code> (default:
-    /usr/local/share/GeographicLib for non-Windows systems,
-    C:/Documents and Settings/All Users/Application
-    Data/GeographicLib for Windows systems) specifies the default
-    location for the various datasets for use by GeographicLib::Geoid,
-    GeographicLib::GravityModel, and GeographicLib::MagneticModel.
-    See \ref geoidinst, \ref gravityinst, and \ref magneticinst for more
-    information.
-  - <code>GEOGRAPHIC_SHARED_LIB</code> (default: ON for
-    non-Windows systems, OFF for Windows systems)
-    determines whether a shared or static library is built.  The default
-    is OFF for Windows because there's no standard place to install the
-    dlls.
-  - <code>CMAKE_BUILD_TYPE</code> (default: Release).  This
-    flags only affects non-IDE compile environments (like make + g++).
-    The default is actually blank, but this is treated as
-    Release.  Choose one of
-    \verbatim
-  Debug
-  Release
-  RelWithDebInfo
-  MinSizeRel
-\endverbatim
-    (With IDE compile environments, you get to select the build type in
-    the IDE.)
-  - <code>MATLAB_COMPILER</code> (default: OFF).  Set this to either
-    "mex" (for Matlab) or "mkoctfile" (for Octave) to specify the
-    compiler to use for the Matlab/Octave interface.  See \ref matlab
-    for more information.
-  - <code>MAINTAINER</code> (default: ON for non-Windows environments
-    provided doxygen, pod2man, and pod2html are found).  This affects
-    whether the targets for creating source packages are activated.
-    See \ref maintainer for details.
-  - <code>GEOGRAPHICLIB_EXAMPLES</code> (default: ON for the maintainer
-    and OFF otherwise).  If set to ON, then the short example programs
-    in the <code>examples</code> directory are built.
-- Build and install the software.  In non-IDE environments, run
-  \verbatim
-  make         # compile the library and the examples
-  make test    # run some tests
-  make install # as root, if CMAKE_INSTALL_PREFIX is a system directory
-\endverbatim
-  On IDE environments, run your IDE (e.g., Visual Studio), load
-  GeographicLib.sln, pick the build type (e.g., Release), and select "Build
-  Solution".  If this succeeds, select "RUN_TESTS" to build.  Finally,
-  select "INSTALL" to build.
-- The headers, library, and utilities are installed in the
-  include/GeographicLib, lib, and bin directories under
-  <code>CMAKE_INSTALL_PREFIX</code>.  (dll dynamic libraries are
-  installed in bin.)  The Matlab/Octave interface is installed in
-  libexec/GeographicLib/matlab.  For documentation, open
-  <a href="index.html">
-  share/doc/GeographicLib/html/index.html</a> in a web browser.
-
-\section autoconf Installation using the autoconfigure tools
-
-The method works on most Unix-like systems including Linux and Mac OS X.
-Here are the steps to compile and install %GeographicLib:
-- Unpack the source, running \verbatim
-  tar xfpz GeographicLib-1.21.tar.gz \endverbatim
-  then enter the directory created \verbatim
-  cd GeographicLib-1.21 \endverbatim
-- Create a separate build directory and enter it, for example, \verbatim
-  mkdir BUILD
-  cd BUILD\endverbatim
-- Configure the software, specifing the path of the source directory,
-  with \verbatim
-  ../configure \endverbatim
-- By default %GeographicLib will be installed under /usr/local.
-  You can change this with, for example \verbatim
-  ../configure --prefix=/tmp/geographic \endverbatim
-- Compile and install the software with \verbatim
-  make
-  make install \endverbatim
-- The headers, library, and utilities are installed in the
-  include/GeographicLib, lib, and bin directories under
-  <code>prefix</code>.  This installation method does not compile
-  the Matlab/Octave interface;  however the source for the interface is
-  installed in libexec/GeographicLib/matlab, see \ref matlab of
-  instructions on compiling the interface.  For documentation, open
-  <a href="index.html">
-  share/doc/GeographicLib/html/index.html</a> in a web browser.
-
-\section gnu Installation with GNU compiler and Make
-
-This method requires the standard GNU suite of tools, in particular make
-and g++.  This builds a static library and the examples.
-
-Here are the steps to compile and install %GeographicLib:
-- Unpack the source, running \verbatim
-  tar xfpz GeographicLib-1.21.tar.gz \endverbatim
-  then enter the directory created \verbatim
-  cd GeographicLib-1.21 \endverbatim
-- Edit \verbatim
-  include/GeographicLib/Config.h \endverbatim
-  If your C++ compiler does not recognize the long double type
-  (unlikely), insert \code
-  #undef HAVE_LONG_DOUBLE \endcode
-  If you machine using big endian ordering, then insert \code
-  #define WORDS_BIGENDIAN 1 \endcode
-- Build and install the software: \verbatim
-  make             # compile the library and the examples
-  make install     # as root \endverbatim
-  The installation is in directories under /usr/local.  You
-  can specify a different installation directory with, for example,
-  \verbatim
-  make PREFIX=/tmp/geographic install \endverbatim
-- The headers, library, and utilities are installed in the
-  include/GeographicLib, lib, and bin directories under
-  <code>PREFIX</code>.  This installation method does not compile
-  the Matlab/Octave interface;  however the source for the interface is
-  installed in libexec/GeographicLib/matlab, see \ref matlab of
-  instructions on compiling the interface.  For documentation, open
-  <a href="index.html">
-  share/doc/GeographicLib/html/index.html</a> in a web browser.
-
-\section windows Installation on Windows
-
-This method requires Visual Studio 2005, 2008, or 2010.  This builds a
-static library and the utilities.  If you only have Visual Studio 2003,
-use cmake to create the necessary solution file, see \ref cmake.  (cmake
-is needed to build the Matlab interface and to run the tests.)
-- Unpack the source, running \verbatim
-  unzip -q GeographicLib-1.21.zip \endverbatim
-- Open GeographicLib-1.21/windows/GeographicLib-vc10.sln in Visual Studio
-  2010 (for Visual Studio 2005 and 2008, replace -vc10 by -vc8 or -vc9).
-- Pick the build type (e.g., Release), and select "Build Solution".
-- The library and the compiled examples are in the windows/Release.
-- Copy the library windows/Release/Geographic.lib and the
-  headers in include/GeographicLib somewhere convenient.  The
-  headers should remain in a directory named %GeographicLib.  If you
-  expect to use the Matlab/Octave interface, copy matlab/*.m and
-  matlab/*.cpp to a directory in your matlab/octave path, see \ref
-  matlab for instructions on compiling the interface.  For documentation,
-  open
-  <a href="index.html">doc/html/index.html</a> in a web
-  browser.
-
-\section windowsbin Using a binary installer for Windows
-
-Use this method if you only need to use the %GeographicLib utilities.
-The header files and static library are provided, but can only be used
-by Visual Studio 2010 in release mode.   However, if you plan to use the
-library, it is advisable to build it with the compiler you are using for
-your own code using either \ref cmake or \ref windows.
-
-Download and run
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win32.exe/download">
-GeographicLib-1.21-win32.exe</a> or
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win64.exe/download">
-GeographicLib-1.21-win64.exe</a>:
- - read the MIT/X11 License agreement,
- - select whether you want your PATH modified,
- - select the installation folder, by default
-   C:\\pkg-vc10\\GeographicLib-1.21 or C:\\pkg-vc10-x64\\GeographicLib-1.21,
- - select the start menu folder,
- - and install.
- .
-(Note that the default installation folder adheres the the convention
-given in \ref cmake.)  The start menu will now include links to the
-documentation for the library and for the utilities (and a link for
-uninstalling the library).  If you ask for your PATH to be modified, it
-will include C:/pkg-vc10/GeographicLib-1.21/bin where the utilities are
-installed.  The headers and library are installed in the
-include/GeographicLib and lib folders.  With the 64-bit installer, the
-Matlab interface is installed in the libexec/GeographicLib/matlab
-folder.  Add this to your path in Matlab to access this interface.  The
-binaries were built using Visual Studio 10 (2010) in Release mode.  The
-Matlab interface was compiled with Matlab R2010b 64-bit, however it may
-work with some other 64-bit versions of Matlab.
-
-\section qt Building the library for use with Qt
-
-If Qt is using a standard compiler, then build %GeographicLib with that
-same compiler (and optimization flags) as Qt.
-
-If you are using the mingw compiler on Windows for Qt, then you need to
-build %GeographicLib with mingw.  You can accomplish this with cmake
-under cygwin with, for example, \verbatim
-  export PATH="`cygpath -m c:/QtSDK/mingw/bin`:$PATH"
-  mkdir BUILD
-  cd BUILD
-  cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=C:/pkg-mingw/GeographicLib ..
-  mingw32-make
-  mingw32-make install \endverbatim
-If cmake complains that sh mustn't be in your path, invoke cmake with
-\verbatim
-  env PATH="$( echo $PATH | tr : '\n' |
-  while read d; do test -f "$d/sh.exe" || echo -n "$d:"; done |
-  sed 's/:$//' )" cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=C:/pkg-mingw/GeographicLib ..
-\endverbatim
-If cmake is not available, there is a simple project file that compiles
-the %GeographicLib library <i>only</i> with the Qt compiler: \verbatim
-  cd src
-  qmake Geographic.pro   # configure the project
-  make                   # build the library \endverbatim
-The library will be in the src directory (or the src/release or
-src/debug directory under Windows).  The headers are in
-include/GeographicLib.
-
-\section maintainer Maintainer tasks
-
-Check the code out of git with \verbatim
-  git clone git://geographiclib.git.sf.net/gitroot/geographiclib/geographiclib
-\endverbatim
-The autoconf configuration script, the html version of the
-documentation, and the formatted man pages not checked into git.  In
-order to create the autoconf configuration script, run \verbatim
-  sh autogen.sh \endverbatim
-in the top level directory.  Provided you are running on a system with
-doxygen, pod2man, and pod2html installed, then you can create the
-documentation and the man pages by building the system using cmake (the
-<code>MAINTAINER</code> configuration variable set to ON, if the
-necessary tools are found) or configure.
-
-In the case of cmake, you then run \verbatim
-  make dist \endverbatim
-which will copy the documentation and man pages from the build directory
-back into the source tree and package the resulting source tree for
-distribution as \verbatim
-  GeographicLib-1.21.tar.gz
-  GeographicLib-1.21.zip \endverbatim
-Finally, \verbatim
-  make package \endverbatim
-or building PACKAGE in Visual Studio will create a binary installer for
-%GeographicLib.  For Windows, this requires in the installation of
-<a href="http://nsis.sourceforge.net">NSIS</a>.
-
-With configure, run \verbatim
-  make dist-gzip \endverbatim
-which will create the additional files and packages the results ready
-for distribution as \verbatim
-  geographiclib-1.21.tar.gz \endverbatim
-
-<center>
-Back to \ref intro.  Forward to \ref start.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page start Getting started
-
-<center>
-Back to \ref install.  Forward to \ref utilities.  Up to \ref contents.
-</center>
-
-Much (but not all!) of the useful functionality of %GeographicLib is
-available via simple command line utilities.  Interfaces to some of them
-are available via the web.  See \ref utilities for documentation on
-these.
-
-In order to use %GeographicLib from C++ code, you will need to
-- Include the header files for the %GeographicLib classes in your code.
-  E.g., \code
-  #include <GeographicLib/LambertConformalConic.hpp> \endcode
-- Include the GeographicLib:: namespace prefix to the %GeographicLib classes,
-  or include \code
-  using namespace GeographicLib; \endcode
-  in your code.
-- Tell the compiler where to find the header files.  With g++ and with
-  /usr/local specified as the installation directory,
-  this is accomplished with \verbatim
-  g++ -c -g -O3 -I/usr/local/include testprogram.cpp
-\endverbatim
-  With Visual Studio, specify the include directory in the IDE via,
-  e.g.,
-  \verbatim
-C/C++ -> General -> Additional Include Directories = C:\pkg-vc10\GeographicLib\include
-\endverbatim
-- Tell the linker the name, Geographic, and location of the
-  library.  Using g++ as the linker, you would use \verbatim
-  g++ -g -o testprogram testprogram.o -L/usr/local/lib -lGeographic
-\endverbatim
-  With Visual Studio, you supply this information in the IDE via,
-  e.g.,
-  \verbatim
-Linker -> Input -> Additional Dependencies = Geographic.lib
-Linker -> General -> Additional Library Directories = C:\pkg-vc10\GeographicLib\lib
-\endverbatim
-  Note that the library name is <b>Geographic</b> and not
-  %GeographicLib.  If the library was configured and built with cmake,
-  then the debug version of the library is called Geographic_d.lib.
-- Tell the runtime environment where to find the shared library
-  (assuming you compiled %GeographicLib as a shared library).  With g++,
-  this is accomplished by modifying the link line above to read \verbatim
-  g++ -g -o testprogram testprogram.o -Wl,-rpath=/usr/local/lib -L/usr/local/lib -lGeographic
-\endverbatim
-  (There are two other ways to specify the location of shared libraries
-  at runtime: (1) define the environment variable
-  <code>LD_LIBRARY_PATH</code> to be a colon-separated list of
-  directories to search; (2) as <b>root</b>, specify /usr/local/lib as a
-  directory searched by ldconfig(8).)  On Windows, you need to ensure
-  that Geographic.dll is in the same directory as your executable or
-  else include the directory containing the dll in your
-  <code>PATH</code>.
-- If you're using cmake to configure and build your project, then
-  instead of the previous three steps, insert \verbatim
-  # Put in your top-level CMakeLists.txt
-  find_package (GeographicLib 1.9 REQUIRED)
-  # In the top-level CMakeLists.txt or wherever your code is compiled
-  include_directories (${GeographicLib_INCLUDE_DIRS})
-  # In the CMakeLists.txt where you define your executable targets
-  target_link_libraries (program1 ${GeographicLib_LIBRARIES})
-  target_link_libraries (program2 ${GeographicLib_LIBRARIES}) \endverbatim
-  in your CMakeLists.txt files (as noted).  find_package command should
-  find the library and set the required cmake variables (including
-  <code>GEOGRAPHICLIB_FOUND = TRUE</code>).  For find_package to be able
-  to locate %GeographicLib, it may be necessary for %GeographicLib to be
-  built and installed with cmake (see \ref cmake) instead of using some
-  other installation method.  In addition, on Windows systems, you
-  should specify <code>CMAKE_PREFIX_PATH</code> with, for example,
-  \verbatim
-  cmake -G "Visual Studio 10" -D CMAKE_PREFIX_PATH=C:/pkg-vc10 -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10/XYZProject ..
-\endverbatim
-  (If you used some other method of installing %GeographicLib, you can
-  try copying cmake/FindGeographicLib.cmake to somewhere in your
-  <code>CMAKE_MODULE_PATH</code> in order for find_package to work.
-  However, this method has not been thoroughly tested.)
-- For Windows, ensure that you build the library with the same version
-  of the compiler and you use for your code.  In addition, you have
-  to build a separate debug version of the library when you can
-  compiling your code in debug mode.  The configuration of cmake
-  described above ensures that the right version of the compiler is used
-  and, assuming you built and installed %GeographicLib in debug mode, the
-  debug version of the library Geographic_d.lib will be used.
-
-Here is a very simple test code, which uses the GeographicLib::Geodesic
-class:
-\include example-Geodesic-small.cpp
-This example is <code>examples/example-Geodesic-small.cpp</code>.  If you
-compile, link, and run it according to the instructions above, it should
-print out \verbatim
-  5551.76 km
-\endverbatim
-
-The next steps are:
- - Learn about and run the \ref utilities.
- - Read the section, \ref organization, for an overview of the library.
- - Browse the <a href="annotated.html">Class List</a> for full documentation
-   on the classes in the library.
- - Look at the example code in the examples directory.  Each file
-   provides a very simple standalone example of using one %GeographicLib
-   class.  These are included in the descriptions of the classes.
- - Look at the source code for the utilities in the tools directory for
-   more examples of using %GeographicLib from C++ code, e.g.,
-   GeodesicProj.cpp is a program to performing various geodesic
-   projections.
-
-Here's a list of some of the abbreviations used here with links to the
-corresponding Wikipedia articles:
- - <a href="http://en.wikipedia.org/wiki/WGS84">
-   WGS84</a>, World Geodetic System 1984.
- - <a href="http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system">
-   UTM</a>, Universal Transverse Mercator coordinate system.
- - <a href="http://en.wikipedia.org/wiki/Universal_Polar_Stereographic">
-   UPS</a>, Universal Polar Stereographic coordinate system.
- - <a href="http://en.wikipedia.org/wiki/Military_grid_reference_system">
-   MGRS</a>, Military Grid Reference System.
- - <a href="http://en.wikipedia.org/wiki/Geoid">
-   EGM</a>, Earth Gravity Model.
- - <a href="http://en.wikipedia.org/wiki/World_Magnetic_Model">
-   WMM</a>, World Magnetic Model.
- - <a href="http://en.wikipedia.org/wiki/IGRF">
-   IGRF</a>, International Geomagnetic Reference Field.
-
-<center>
-Back to \ref install.  Forward to \ref utilities.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page utilities Utility programs
-
-<center>
-Back to \ref start.  Forward to \ref organization.  Up to \ref contents.
-</center>
-
-Various utility programs are provided with %GeographicLib.  These should
-be installed in a directory included in your PATH (e.g.,
-/usr/local/bin).  These programs are wrapper programs that invoke
-the underlying functionality provided by the library.
-
-The utilities are
- - <a href="GeoConvert.1.html">
-   <b>GeoConvert</b></a>: convert geographic coordinates using
-   GeographicLib::GeoCoords.
- - <a href="Geod.1.html">
-   <b>Geod</b></a>: perform geodesic calculations using
-   GeographicLib::Geodesic and GeographicLib::GeodesicLine.
- - <a href="Planimeter.1.html">
-   <b>Planimeter</b></a>: compute the area of geodesic polygons using
-   GeographicLib::PolygonArea.
- - <a href="TransverseMercatorProj.1.html">
-   <b>TransverseMercatorProj</b></a>: convert between geographic
-   and transverse Mercator.  This is for testing
-   GeographicLib::TransverseMercatorExact and
-   GeographicLib::TransverseMercator.
- - <a href="CartConvert.1.html">
-   <b>CartConvert</b></a>: convert geodetic coordinates to geocentric or
-   local cartesian using GeographicLib::Geocentric and
-   GeographicLib::LocalCartesian.
- - <a href="GeodesicProj.1.html">
-   <b>GeodesicProj</b></a>: perform projections based on geodesics
-   using GeographicLib::AzimuthalEquidistant, GeographicLib::Gnomonic,
-   and GeographicLib::CassiniSoldner.
- - <a href="ConicProj.1.html">
-   <b>ConicProj</b></a>: perform conic projections using
-   GeographicLib::LambertConformalConic and
-   GeographicLib::AlbersEqualArea.
- - <a href="GeoidEval.1.html">
-   <b>GeoidEval</b></a>: look up geoid heights using
-   GeographicLib::Geoid.
- - <a href="Gravity.1.html">
-   <b>Gravity</b></a>: compute the earth's gravitational field using
-   GeographicLib::GravityModel and GeographicLib::GravityCircle.
- - <a href="MagneticField.1.html">
-   <b>MagneticField</b></a>: compute the earth's magnetic field using
-   GeographicLib::MagneticModel and GeographicLib::MagneticCircle.
- .
-The documentation for these utilities is in the form of man pages.  This
-documentation can be accessed by clicking on the utility name in the
-list above, running the man command on Unix-like systems, or by invoking
-the utility with the --help option.  A brief summary of usage is given
-by invoking the utility with the -h option.  The version of the utility
-is given by the --version option.
-
-The utilities all accept data on standard input, transform it in some
-way, and print the results on standard output.  This makes the utilities
-easy to use within scripts to transform tabular data; however they can
-also be used interactively, often with the input supplied via a pipe,
-e.g.,
- - echo 38SMB4488 | GeoConvert -d
-
-Online versions of three of these utilities are provided:
- - <a href="http://geographiclib.sf.net/cgi-bin/GeoConvert">GeoConvert</a>
- - <a href="http://geographiclib.sf.net/cgi-bin/Geod">Geod</a>
- - <a href="http://geographiclib.sf.net/cgi-bin/Planimeter">Planimeter</a>
- - <a href="http://geographiclib.sf.net/cgi-bin/GeoidEval">GeoidEval</a>
-
-<center>
-Back to \ref start.  Forward to \ref organization.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page organization Code organization
-
-<center>
-Back to \ref utilities.  Forward to \ref other.  Up to \ref contents.
-</center>
-
-Here is a brief description of the relationship between the various
-components of %GeographicLib.  All of these are defined in the
-GeographicLib namespace.
-
-GeographicLib::TransverseMercator, GeographicLib::PolarStereographic,
-GeographicLib::LambertConformalConic, and GeographicLib::AlbersEqualArea
-provide the basic projections.  The constructors for these classes
-specify the ellipsoid and the forward and reverse projections are
-implemented as const member functions.  TransverseMercator uses
-Krüger's series which have been extended to sixth order in the
-square of the eccentricity.  PolarStereographic, LambertConformalConic,
-and AlbersEqualArea use the exact formulas for the projections (e.g.,
-from Snyder).
-
-GeographicLib::TransverseMercator::UTM and
-GeographicLib::PolarStereographic::UPS are const static instantiations
-specific for the WGS84 ellipsoid with the UTM and UPS scale factors.
-(These do \e not add the standard false eastings or false northings for
-UTM and UPS.)  Similarly GeographicLib::LambertConformalConic::Mercator
-is a const static instantiation of this projection for a WGS84 ellipsoid
-and a standard parallel of 0 (which gives the Mercator projection).
-GeographicLib::AlbersEqualArea::CylindricalEqualArea,
-AzimuthalEqualAreaNorth, and AzimuthalEqualAreaSouth, likewise provide
-special cases of the equal area projection.
-
-GeographicLib::UTMUPS uses TransverseMercator::UTM and
-PolarStereographic::UPS to perform the UTM and UPS
-projections.  The class offers a uniform interface to UTM and UPS by
-treating UPS as UTM zone 0.  This class stores no internal state and the
-forward and reverse projections are provided via static member
-functions.  The forward projection offers the ability to override the
-standard UTM/UPS choice and the UTM zone.
-
-GeographicLib::MGRS transforms between UTM/UPS coordinates and MGRS.
-UPS coordinates are handled as UTM zone 0.  This class stores no
-internal state and the forward (UTM/UPS to MGRS) and reverse (MGRS to
-UTM/UPS) conversions are provided via static member functions.
-
-GeographicLib::GeoCoords holds a single geographic location which may be
-specified as latitude and longitude, UTM or UPS, or MGRS.  Member
-functions are provided to convert between coordinate systems and to
-provide formatted representations of them.
-<a href="GeoConvert.1.html">GeoConvert</a> is a simple command line
-utility to provide access to the GeoCoords class.
-
-GeographicLib::TransverseMercatorExact is a drop in replacement for
-TransverseMercator which uses the exact formulas, based on elliptic
-functions, for the projection as given by Lee.
-<a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a> is a
-simple command line utility to test to the TransverseMercator and
-TransverseMercatorExact.
-
-GeographicLib::Geodesic and GeographicLib::GeodesicLine perform geodesic
-calculations.  The constructor for GeographicLib::Geodesic specifies the
-ellipsoid and the direct and inverse calculations are implemented as
-const member functions.  GeographicLib::Geocentric::WGS84 is a const
-static instantiation of Geodesic specific for the WGS84 ellipsoid.  In
-order to perform a series of direct geodesic calculations on a single
-line, the GeographicLib::GeodesicLine class can be used.  This packages
-all the information needed to specify a geodesic.  A const member
-function returns the coordinates a specified distance from the starting
-point.  <a href="Geod.1.html">Geod</a> is a simple command line utility
-to perform geodesic calculations.  GeographicLib::PolygonArea is a class
-which compute the area of geodesic polygons using the Geodesic class and
-<a href="Planimeter.1.html">Geod</a> is a command line utility for the
-same purpose.
-GeographicLib::AzimuthalEquidistant, GeographicLib::CassiniSoldner, and
-GeographicLib::Gnomonic are projections based on the Geodesic class.
-<a href="GeodesicProj.1.html">GeodesicProj</a> is a command line utility
-to exercise these projections.
-
-GeographicLib::Geocentric and GeographicLib::LocalCartesian convert between
-geodetic and geocentric or a local cartesian system.  The constructor for
-specifies the ellipsoid and the forward and reverse projections are
-implemented as const member functions.  GeographicLib::Geocentric::WGS84 is a
-const static instantiation of Geocentric specific for the WGS84 ellipsoid.
-<a href="CartConvert.1.html">CartConvert</a> is a simple command line
-utility to provide access to these classes.
-
-GeographicLib::Geoid evaluates geoid heights by interpolation.  This is
-provided by the operator() member function.
-<a href="GeoidEval.1.html">GeoidEval</a> is a simple command line
-utility to provide access to this class.  This class requires
-installation of data files for the various geoid models; see \ref
-geoidinst for details.
-
-GeographicLib::GravityModel evaluates the earth's gravitational field
-using a particular gravity model.  Various member functions return the
-gravitational field, the gravity disturbance, the gravity anomaly, and
-the geoid height <a href="Gravity.1.html">Gravity</a> is a simple
-command line utility to provide access to this class.  If the field
-several points on a circle of latitude are sought then use
-GeographicLib::GravityModel::Circle to return a
-GeographicLib::GravityCircle object whose member functions performs the
-calculations efficiently.  (This is particularly important for high
-degree models such as EGM2008.)  These classes requires installation of
-data files for the various gravity models; see \ref gravityinst for
-details.
-
-GeographicLib::MagneticModel evaluates the earth's magnetic field using
-a particular magnetic model.  The field is provided by the operator()
-member function.  <a href="MagneticField.1.html">MagneticField</a> is a
-simple command line utility to provide access to this class.  If the
-field several points on a circle of latitude are sought then use
-GeographicLib::MagneticModel::Circle to return a
-GeographicLib::MagneticCircle object whose operator() member function
-performs the calculation efficiently.  (This is particularly important
-for high degree models such as emm2010.)  These classes requires
-installation of data files for the various magnetic models; see \ref
-magneticinst for details.
-
-GeographicLib::Constants, GeographicLib::Math, GeographicLib::Utility,
-GeographicLib::DMS, are general utility class which are used internally
-by the library; in addition GeographicLib::EllipticFunction is used by
-GeographicLib::TransverseMercatorExact, GeographicLib::Accumulator is
-used by GeographicLib::PolygonArea, and GeographicLib::SphericalEngine,
-GeographicLib::CircularEngine, GeographicLib::SphericalHarmonic,
-GeographicLib::SphericalHarmonic1, and GeographicLib::SphericalHarmonic2
-facilitate the summation of spherical harmonic series which is needed by
-and GeographicLib::MagneticModel and GeographicLib::MagneticCircle.  One
-important definition is GeographicLib::Math::real which is the type used
-for real numbers.  This allows the library to be easily switched to
-using floats, doubles, or long doubles.  However all the testing has
-been with real set to double and the library should be installed in this
-way.
-
-In general, the constructors for the classes in %GeographicLib check
-their arguments and throw GeographicLib::GeographicErr exceptions with a
-explanatory message if these are illegal.  The member functions, e.g.,
-the projections implemented by TransverseMercator and
-PolarStereographic, the solutions to the geodesic problem, etc.,
-typically do <i>not</i> check their arguments; the calling program
-should ensure that the arguments are legitimate.  However, the functions
-implemented by UTMUPS, MGRS, and GeoCoords do check their arguments and
-may throw GeographicLib::GeographicErr exceptions.  Similarly Geoid may
-throw exceptions on file errors.  If a function does throw an exception,
-then the function arguments used for return values will not have been
-altered.
-
-%GeographicLib attempts to act sensibly with NaNs.  NaNs in constructors
-typically throw errors (an exception is GeodesicLine).  However, calling
-the class functions with NaNs as arguments is not an error; NaNs are
-returned as appropriate.  "INV" is treated as an invalid zone
-designation by UTMUPS.  "INVALID" is the corresponding invalid MGRS
-string.  NaNs allow the projection of polylines which are separated by
-NaNs; in this format they can be easily plotted in Matlab.
-
-A note about portability.  For the most part, the code uses standard C++
-and should be able to be deployed on any system with a modern C++
-compiler.  System dependencies come into
- - GeographicLib::Math -- GeographicLib needs to define functions such
-   as atanh for systems that lack them.  The system dependence will
-   disappear with the adoption of C++11 because the needed functions are
-   part of that standard.
- - use of long double -- the type is used only for testing.  On systems
-   which lack this data type the cmake and autoconf configuration
-   methods should detect its absence and omit the code that depends on
-   it.
- - GeographicLib::Geoid, GeographicLib::GravityModel, and
-   GeographicLib::MagneticModel -- these class uses system-dependent
-   default paths for looking up the respective datasets.  It also relies
-   on getenv to find the value of the environment variables.
- - GeographicLib::Utility::readarray reads numerical data from binary
-   files.  This assumes that floating point numbers are in IEEE format.
-   It attempts to handled the "endianness" of the target platform using
-   the WORDS_BIGENDIAN macro (which sets the compile-time constant
-   GeographicLib::Math::bigendian).
-
-<center>
-Back to \ref utilities.  Forward to \ref other.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page other Other interfaces (Javascript, Python, Matlab, Octave)
-
-<center>
-Back to \ref organization.  Forward to \ref geoid.  Up to \ref contents.
-</center>
-
-Interfaces to subsets of %GeographicLib are available in other languages
-- \ref javascript.
-- \ref python.
-- \ref matlab.
-
-\section javascript Javascript interface
-
-The directory doc/scripts/GeographicLib contains the classes
-- GeographicLib::Math
-- GeographicLib::Accumulator
-- GeographicLib::Geodesic
-- GeographicLib::GeodesicLine
-- GeographicLib::PolygonArea
-- GeographicLib::DMS
-.
-translated into Javascript.  See Interface.js for a simple Javascript
-interface to these routines (documented near the top of the file).
-Examples of using this interface are
-- a <a href="../scripts/geod-calc.html">geodesic calculator</a> showing
-  the solution of direct and inverse geodesic problem, finding
-  intermediate points on a geodesic line, and computing the area of a
-  geodesic polygon.
-- <a href="../scripts/geod-google.html">displaying geodesics in Google
-  Maps</a> which shows the geodesic, the geodesic circle, and various
-  geodesic envelopes.
-.
-These examples include a "stripped" version of the Javascript code, \code
-<script type="text/javascript"
-        src="http://geographiclib.sf.net/scripts/geographiclib.js">
-</script>\endcode
-which loads faster.
-
-\section python Python interface
-
-A python implementation of the geodesic routines from GeographicLib are
-provided in the python/geographiclib directory (which is installed as
-PREFIX/lib/python/site-packages/geographiclib).  This contains
-implementations of the classes
-- GeographicLib::Math
-- GeographicLib::Accumulator
-- GeographicLib::Geodesic
-- GeographicLib::GeodesicLine
-- GeographicLib::PolygonArea
-.
-You can also download the python interface independent of the rest of
-%GeographicLib from
-- <a href="http://pypi.python.org/pypi/geographiclib">
-  http://pypi.python.org/pypi/geographiclib</a>
-.
-and then unpack the .tar.gz or .zip file.
-
-You can "install" these routines, so that they are in python's default
-path with, for example \verbatim
-  cd geographiclib-1.16
-  python setup.py install
-\endverbatim
-(this will require root privileges).  Or else you can set the path
-within python using \code
->>> import sys
->>> sys.path.append("/usr/local/lib/python/site-packages");
-\endcode
-
-An example of using this interface is \code
->>> from geographiclib.geodesic import Geodesic
->>> # The geodesic inverse problem
-... Geodesic.WGS84.Inverse(-41.32, 174.81, 40.96, -5.50)
->>> # The geodesic direct problem
-... Geodesic.WGS84.Direct(40.6, -73.8, 45, 10000e3)
->>> # How to obtain several points along a geodesic
-... line = Geodesic.WGS84.Line(40.6, -73.8, 45)
->>> line.Position( 5000e3)
->>> line.Position(10000e3)
->>> # Computing the area of a geodesic polygon
-... def p(lat,lon): return {'lat': lat, 'lon': lon}
-...
->>> Geodesic.WGS84.Area([p(0, 0), p(0, 90), p(90, 0)])
->>> # Introductory help
-... help(Geodesic)
-\endcode
-
-(Note: The initial version of setup.py was provided by Andrew MacIntyre
-of the Australian Communications and Media Authority.)
-
-\section matlab Matlab and Octave interfaces
-
-The matlab directory contains interface code so that some %GeographicLib
-classes can be accessed from Matlab or Octave.  There are two ways of
-compiling this code: (1) using cmake and (2) invoking the compiler from
-Matlab.
- - <b>Using cmake:</b> Before running cmake, configure MATLAB on
-   Windows to use the same compiler that you're going to use for compiling
-   %GeographicLib.  For example \verbatim
-   mex.bat -setup
-
-   Please choose your compiler for building external interface (MEX) files:
-   Would you like mex to locate installed compilers [y]/n? y
-   Select a compiler:
-   [1] Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2010b\sys\lcc
-   [2] Microsoft Visual C++ 2010 in C:\Program Files\Microsoft Visual Studio 10.0
-   [0] None
-
-   Compiler: 2
-   etc. \endverbatim
-   (This will require that mex.bat is in your PATH.  With Linux, use
-   <code>mex -setup</code>.)  Then configure cmake with, for example
-   \verbatim
-   cmake -G "Visual Studio 10" -D MATLAB_COMPILER=mex .. \endverbatim
-   If you are running a 64-bit version of Matlab, be sure to select a
-   64-bit generator with cmake, e.g., "Visual Studio 10 Win64".  Finally
-   compile %GeographicLib with Visual Studio.  (The binary installer for
-   64-bit Windows includes the compiled interface built with Visual
-   Studio 10 and Matlab R2010b 64-bit).<br>
-   On Linux systems, you can compile the interface for use with octave
-   instead by using \verbatim
-   cmake -D MATLAB_COMPILER=mkoctfile .. \endverbatim
- - <b>Invoking the compiler from Matlab or Octave:</b> Start Matlab or
-   Octave and run, e.g., \code
-   mex -setup
-   cd 'C:/pkg-vc10-x64/GeographicLib-1.21/libexec/GeographicLib/matlab'
-   help geographiclibinterface
-   geographiclibinterface('C:/pkg-vc10/GeographicLib-1.21');
-   addpath(pwd);
-   \endcode
-   The first command allows you to select the compiler to use (which
-   should be the same as that used to compile %GeographicLib).
-
-To use the interface routines for %GeographicLib, run one of (for
-example) \verbatim
-  addpath /usr/local/libexec/GeographicLib/matlab
-  addpath 'C:/pkg-vc10-x64/GeographicLib-1.21/libexec/GeographicLib/matlab'
-\endverbatim
-in Octave or Matlab.  The available functions are:
- - geodesicdirect: solve direct geodesic problem
-   (see GeographicLib::Geodesic::Direct)
- - geodesicinverse: solve inverse geodesic problem
-   (see GeographicLib::Geodesic::Inverse)
- - geodesicline: compute points along a geodesic
-   (see GeographicLib::GeodesicLine::Position)
- - polygonarea: compute area of a geodesic polygon
-   (see GeographicLib::PolygonArea)
- - utmupsforward: convert geographic coordinates to UTM/UPS
-   (see GeographicLib::UTMUPS::Forward)
- - utmupsreverse: convert UTM/UPS coordinates to geographic
-   (see GeographicLib::UTMUPS::Reverse)
- - mgrsforward: convert UTM/UPS coordinates to MGRS
-   (see GeographicLib::MGRS::Forward)
- - mgrsreverse: convert MGRS coordinates to UTM/UPS
-   (see GeographicLib::MGRS::Reverse)
- - geoidheight: compute geoid height
-   (see GeographicLib::Geoid::operator()())
- - geocentricforward: convert geographic coordinates to geocentric
-   (see GeographicLib::Geocentric::Forward)
- - geocentricreverse: convert geocentric coordinates to geographic
-   (see GeographicLib::Geocentric::Reverse)
- - localcartesianforward: convert geographic coordinates to local cartesian
-   (see GeographicLib::LocalCartesian::Forward)
- - localcartesianreverse: convert local cartesian coordinates to geographic
-   (see GeographicLib::LocalCartesian::Reverse)
- .
-These routines just offer a simple interface to the corresponding C++
-class.  Use the help function to get documentation, e.g., \code
-  help geodesicdirect \endcode
-Unfortunately, the help function does not work for compiled functions in
-Octave; in this case, just list the .m file, e.g., \code
-  type geodesicdirect \endcode
-Other useful functions, e.g., to convert from geographic
-coordinates to MGRS can easily be written with Matlab code.
-
-Note that geoidheight, when compiled with Visual Studio 2008 causes
-Matlab to crash.  (The problem does not occur with Visual Studio 2005 or
-Visual Studio 2010.)
-
-<center>
-Back to \ref organization.  Forward to \ref geoid.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page geoid Geoid height
-
-<center>
-Back to \ref other.  Forward to \ref gravity.  Up to \ref contents.
-</center>
-
-The gravitational equipotential surface approximately coinciding with
-mean sea level is called the geoid.  The GeographicLib::Geoid class and
-the <a href="GeoidEval.1.html">GeoidEval</a> utility evaluate the height
-of the geoid above the WGS84 ellipsoid.  This can be used to convert
-heights above mean sea level to heights above the WGS84 ellipsoid.
-Because the normal to the ellipsoid differs from the normal to the geoid
-(the direction of a plumb line) there is a slight ambiguity in the
-measurement of heights; however for heights up to 10 km this ambiguity
-is only 1 mm.
-
-The geoid is usually approximated by an "earth gravity model" (EGM).
-The models published by the NGA are:
-- <b>EGM84</b>:
-  http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html
-- <b>EGM96</b>:
-  http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html
-- <b>EGM2008</b>:
-  http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
-.
-GeographicLib::Geoid offers a uniform way to handle all 3 geoids at a
-variety of grid resolutions.  (In contrast, the software tools that NGA
-offers are different for each geoid, and the interpolation programs are
-different for each grid resolution.  In addition these tools are written
-in Fortran with is nowadays difficult to integrate with other software.)
-
-Unlike other components of %GeographicLib, there is a appreciable error
-in the results obtained (at best, the RMS error is 1 mm).  However the
-class provides methods to report the maximum and RMS errors in the
-results.  The class also returns the gradient of the geoid.  This can be
-used to estimate the direction of a plumb line relative to the WGS84
-ellipsoid.
-
-The GeographicLib::GravityModel class calculates geoid heights using the
-underlying gravity model.  This is slower then GeographicLib::Geoid but
-considerably more accurate.  This class also can accurately compute all
-the components of the acceleration due to gravity (and hence the
-direction of plumb line).
-
-Go to
- - \ref geoidinst
- - \ref geoidformat
- - \ref geoidinterp
- - \ref geoidcache
- - \ref testgeoid
-
-\section geoidinst Installing the geoid datasets
-
-The geoid heights are computed using interpolation into a rectangular
-grid.  The grids are read from data files which have been are computed
-using the NGA synthesis programs in the case of the EGM84 and EGM96
-models and using the NGA binary gridded data files in the case of
-EGM2008.  These data files are available for download:
-<center>
-<table>
-<caption>Available geoid data files</caption>
-<tr>
- <th rowspan="2">name         <th rowspan="2">geoid    <th rowspan="2">grid
- <th rowspan="2">size\n(MB)
- <th colspan="3"><center>Download Links (size, MB)</center></th>
-<tr>
- <th>tar file</th>
- <th>Windows\n installer</th>
- <th>zip file</th>
-<tr>
- <td>egm84-30
- <td>EGM84
- <td><center>30'</center>
- <td><center>0.6</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-30.tar.bz2/download">
- link</a> (0.5)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-30.exe/download">
- link</a> (0.8)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-30.zip/download">
- link</a> (0.5)</center>
-<tr>
- <td>egm84-15
- <td>EGM84
- <td><center>15'</center>
- <td><center>2.1</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-15.tar.bz2/download">
- link</a> (1.5)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-15.exe/download">
- link</a> (1.9)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-15.zip/download">
- link</a> (2.0)</center>
-<tr>
- <td>egm96-15
- <td>EGM96
- <td><center>15'</center>
- <td><center>2.1</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-15.tar.bz2/download">
- link</a> (1.5)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-15.exe/download">
- link</a> (1.9)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-15.zip/download">
- link</a> (2.0)</center>
-<tr>
- <td>egm96-5
- <td>EGM96
- <td><center>5'</center>
- <td><center> 19</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-5.tar.bz2/download">
- link</a> (11)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-5.exe/download">
- link</a> (11)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-5.zip/download">
- link</a> (17)</center>
-<tr>
- <td>egm2008-5
- <td>EGM2008
- <td><center>5'</center>
- <td><center> 19</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-5.tar.bz2/download">
- link</a> (11)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-5.exe/download">
- link</a> (11)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-5.zip/download">
- link</a> (17)</center>
-<tr>
- <td>egm2008-2_5
- <td>EGM2008
- <td><center>2.5'</center>
- <td><center> 75</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-2_5.tar.bz2/download">
- link</a> (35)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-2_5.exe/download">
- link</a> (33)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-2_5.zip/download">
- link</a> (65)</center>
-<tr>
- <td>egm2008-1
- <td>EGM2008
- <td><center>1'</center>
- <td><center>470</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-1.tar.bz2/download">
- link</a> (170)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-1.exe/download">
- link</a> (130)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-1.zip/download">
- link</a> (390)</center>
-</table>
-</center>
-The "size" column is the size of the uncompressed data and it also
-gives the memory requirements for caching the entire dataset using the
-GeographicLib::Geoid::CacheAll method.
-At a minimum you should install egm96-5 and either egm2008-1 or
-egm2008-2_5.  Many applications use the EGM96 geoid, however the use of
-EGM2008 is growing. (EGM84 is rarely used now.)
-
-For Linux and Unix systems, %GeographicLib provides a shell script
-geographiclib-get-geoids (typically installed in /usr/local/sbin) which
-automates the process of downloading and installing the geoid data.  For
-example
-\verbatim
-   geographiclib-get-geoids best # to install egm84-15, egm96-5, egm2008-1
-   geographiclib-get-geoids -h   # for help
-\endverbatim
-This script should be run as a user with write access to the
-installation directory, which is typically
-/usr/local/share/GeographicLib (this can be overridden with the -p
-flag), and the data will then be placed in the "geoids" subdirectory.
-
-Windows users should download and run the Windows installers.  These
-will prompt for an installation directory with the default being one of
-\verbatim
-   C:/Documents and Settings/All Users/Application Data/GeographicLib
-   C:/ProgramData/GeographicLib
-\endverbatim
-(which you probably should not change) and the data is installed in the
-"geoids" sub-directory.  (The second directory name is an alternate name
-that Windows 7 for the "Application Data" directory.)
-
-Otherwise download \e either the tar.bz2 file \e or the zip file (they
-have the same contents).  If possible use the tar.bz2 files, since these
-are compressed about 2 times better than the zip file.  To unpack these,
-run, for example
-\verbatim
-   mkdir -p /usr/local/share/GeographicLib
-   tar xofjC egm96-5.tar.bz2 /usr/local/share/GeographicLib
-   tar xofjC egm2008-2_5.tar.bz2 /usr/local/share/GeographicLib
-   etc.
-\endverbatim
-and, again, the data will be placed in the "geoids" subdirectory.
-
-However you install the geoid data, all the datasets should
-be installed in the same directory.  GeographicLib::Geoid and
-<a href="GeoidEval.1.html">GeoidEval</a> uses a compile time default to
-locate the datasets.  This is
-- /usr/local/share/GeographicLib/geoids, for non-Windows systems
-- C:/Documents and Settings/All Users/Application Data/GeographicLib/geoids,
-  for Windows systems
-.
-consistent with the examples above.  This may be overridden at run-time
-by defining the GEOID_PATH or the GEOGRAPHIC_DATA environment variables;
-see GeographicLib::Geoid::DefaultGeoidPath() for details.  Finally, the
-path may be set using the optional second argument to the
-GeographicLib::Geoid constructor or with the "-d" flag to
-<a href="GeoidEval.1.html">GeoidEval</a>.  Supplying the "-h" flag to
-<a href="GeoidEval.1.html">GeoidEval</a> reports the default geoid path
-for that utility.  The "-v" flag causes GeoidEval to report the full
-path name of the data file it uses.
-
-\section geoidformat The format of the geoid data files
-
-The gridded data used by the GeographicLib::Geoid class is stored in
-16-bit PGM files.  Thus the data for egm96-5 might be stored in the file
-- /usr/local/share/GeographicLib/geoids/egm96-5.pgm
-.
-PGM simple graphic format with the following properties
-- it is well documented
-  <a href="http://netpbm.sf.net/doc/pgm.html">here</a>;
-- there are no separate "little-endian" and "big-endian" versions;
-- it uses 1 or 2 bytes per pixel;
-- pixels can be randomly accessed;
-- comments can be added to the file header;
-- it is sufficiently simple that it can be easily read without using the
-  <a href="http://netpbm.sf.net/doc/libnetpbm.html">libnetpbm</a>
-  library (and thus we avoid adding a software dependency to
-  %GeographicLib).
-.
-The major drawback of this format is that since there are only 65535
-possible pixel values, the height must be quantized to 3 mm.  However,
-the resulting quantization error (up to 1.5 mm) is typically smaller
-than the linear interpolation errors.  The comments in the header for
-egm96-5 are
-\verbatim
-   # Geoid file in PGM format for the GeographicLib::Geoid class
-   # Description WGS84 EGM96, 5-minute grid
-   # URL http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html
-   # DateTime 2009-08-29 18:45:03
-   # MaxBilinearError 0.140
-   # RMSBilinearError 0.005
-   # MaxCubicError 0.003
-   # RMSCubicError 0.001
-   # Offset -108
-   # Scale 0.003
-   # Origin 90N 0E
-   # AREA_OR_POINT Point
-   # Vertical_Datum WGS84
-\endverbatim
-Of these lines, the Scale and Offset lines are required and define the
-conversion from pixel value to height (in meters) using \e height =
-\e offset + \e scale \e pixel.  The Geoid constructor also reads the
-Description, DateTime, and error lines (if present) and stores the
-resulting data so that it can be returned by
-GeographicLib::Geoid::Description, GeographicLib::Geoid::DateTime,
-GeographicLib::Geoid::MaxError, and GeographicLib::Geoid::RMSError
-methods.  The other lines serve as additional documentation but are not
-used by this class.  Accompanying egm96-5.pgm (and similarly with the
-other geoid data files) are two files egm96-5.wld and
-egm96-5.pgm.aux.xml.  The first is an ESRI "world" file and the second
-supplies complete projection metadata for use by
-<a href="http://www.gdal.org">GDAL</a>.  Neither of these files is read
-by GeographicLib::Geoid.
-
-You can use gdal_translate to convert the data files to a standard
-GeoTiff, e.g., with
-\verbatim
-   gdal_translate -ot Float32 -scale 0 65000 -108 87 egm96-5.pgm egm96-5.tif
-\endverbatim
-The arguments to -scale here are specific to the Offset and Scale
-parameters used in the pgm file (note 65000 * 0.003 - 108 = 87).  You
-can check these by running <a href="GeoidEval.1.html">GeoidEval</a> with
-the "-v" option.
-
-Here is a sample script which uses GDAL to create a 1-degree
-squared grid of geoid heights at 3" resolution (matching DTED1) by
-bilinear interpolation.
-\verbatim
-   #! /bin/sh
-   lat=37
-   lon=067
-   res=3                           # resolution in seconds
-   TEMP=`mktemp junkXXXXXXXXXX`    # temporary file for GDAL
-   gdalwarp -q -te `echo $lon $lat $res | awk '{
-       lon = $1; lat = $2; res = $3;
-       printf "%.14f %.14f %.14f %.14f",
-           lon  -0.5*res/3600, lat  -0.5*res/3600,
-           lon+1+0.5*res/3600, lat+1+0.5*res/3600;
-   }'` -ts $((3600/res+1)) $((3600/res+1)) -r bilinear egm96-5.tif $TEMP
-   gdal_translate -quiet \
-       -mo AREA_OR_POINT=Point \
-       -mo Description="WGS84 EGM96, $res-second grid" \
-       -mo Vertical_Datum=WGS84 \
-       -mo Tie_Point_Location=pixel_corner \
-       $TEMP e$lon-n$lat.tif
-   rm -f $TEMP
-\endverbatim
-
-Because the pgm files are uncompressed, they can take up a lot of disk
-space.  Some compressed formats compress in tiles and so might be
-compatible with the requirement that the data can be randomly accessed.
-In particular gdal_translate can be used to convert the pgm files to
-compressed tiff files with
-\verbatim
-gdal_translate -co COMPRESS=LZW -co PREDICTOR=2 \
-   -co TILED=YES -co BLOCKXSIZE=256 -co BLOCKYSIZE=256 \
-   egmyy-g.pgm egmyy-g.tif
-\endverbatim
-The resulting files sizes are
-\verbatim
-                  pgm      tif
-    egm84-30      0.6 MB   0.5 MB
-    egm84-15      2.1 MB   1.4 MB
-    egm96-15      2.1 MB   1.5 MB
-    egm96-5        19 MB   8.5 MB
-    egm2008-5      19 MB   9.8 MB
-    egm2008-2_5    75 MB    28 MB
-    egm2008-1     470 MB    97 MB
-\endverbatim
-Currently, there are no plans for %GeographicLib to support this
-compressed format.
-
-\section geoidinterp Interpolating the geoid data
-
-GeographicLib::Geoid evaluates the geoid height using bilinear or cubic
-interpolation.  The gradient of the geoid height is obtained by
-differentiating the interpolated height and referencing the result to
-distance on the WGS84 ellipsoid. 
-
-<b>WARNING</b>: Although GeographicLib::Geoid computes the gradient of
-the geoid height, this is subject to large quantization errors as a
-result of the way that the geoid data is stored.  This is particularly
-acute for fine grids, at high latitudes, and for the easterly gradient.
-If you need to compute the direction of the acceleration due to gravity
-accurately, you should use GeographicLib::GravityModel::Gravity.
-
-The bilinear interpolation is based on the values at the 4 corners of
-the enclosing cell.  The interpolated height is a continuous function of
-position; however the gradient has discontinuities are cell boundaries.
-The quantization of the data files exacerbates the errors in the
-gradients.
-
-The cubic interpolation is a least-squares fit to the values on a
-12-point stencil with weights as follows:
-\verbatim
-   . 1 1 .
-   1 2 2 1
-   1 2 2 1
-   . 1 1 .
-\endverbatim
-The cubic is constrained to be independent of longitude when evaluating
-the height at one of the poles.  Cubic interpolation is considerably
-more accurate than bilinear interpolation; however, in this
-implementation there are small discontinuities in the heights are cell
-boundaries.  The over-constrained cubic fit slightly reduces the
-quantization errors on average.
-
-The algorithm for the least squares fit is taken from, F. H. Lesh,
-Multi-dimensional least-squares polynomial curve fitting, CACM 2, 29-30
-(1959).  This algorithm is not part of GeographicLib::Geoid; instead it is
-implemented as
-<a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a>
-code which is used to precompute the matrices to convert the function
-values on the stencil into the coefficients from the cubic polynomial.
-This code is included as a comment in Geoid.cpp.
-
-The interpolation methods are quick and give good accuracy.  Here is a
-summary of the combined quantization and interpolation errors for the
-heights.
-<center><table>
-<caption>Interpolation and quantization errors for geoid heights</caption>
-<tr>
- <th rowspan="2">name
- <th rowspan="2">geoid
- <th rowspan="2">grid
- <th colspan="2"><center>bilinear error</center></th>
- <th colspan="2"><center>cubic error</center></th>
-<tr>
- <th><center>max</center><th><center>rms</center>
- <th><center>max</center><th><center>rms</center>
-<tr>
- <td>egm84-30   <td>EGM84  <td><center>30'  </center>
- <td><center>1.546 m</center><td><center>70 mm</center>
- <td><center>0.274 m</center><td><center>14 mm</center>
-<tr>
- <td>egm84-15   <td>EGM84  <td><center>15'  </center>
- <td><center>0.413 m</center><td><center>18 mm</center>
- <td><center>0.021 m</center><td><center>1.2 mm</center>
-<tr>
- <td>egm96-15   <td>EGM96  <td><center>15'  </center>
- <td><center>1.152 m</center><td><center>40 mm</center>
- <td><center>0.169 m</center><td><center>7.0 mm</center>
-<tr>
- <td>egm96-5    <td>EGM96  <td><center> 5'  </center>
- <td><center>0.140 m</center><td><center>4.6 mm</center>
- <td><center>0.0032 m</center><td><center>0.7 mm</center>
-<tr>
- <td>egm2008-5  <td>EGM2008<td><center> 5'  </center>
- <td><center>0.478 m</center><td><center>12 mm</center>
- <td><center>0.294 m</center><td><center>4.5 mm</center>
-<tr>
- <td>egm2008-2_5<td>EGM2008<td><center> 2.5'</center>
- <td><center>0.135 m</center><td><center>3.2 mm</center>
- <td><center>0.031 m</center><td><center>0.8 mm</center>
-<tr>
- <td>egm2008-1  <td>EGM2008<td><center> 1'  </center>
- <td><center>0.025 m</center><td><center>0.8 mm</center>
- <td><center>0.0022 m</center><td><center>0.7 mm</center>
-</table></center>
-The errors are with respect to the specific NGA earth gravity model
-(not to any "real" geoid).  The RMS values are obtained using 5 million
-uniformly distributed random points.  The maximum values are obtained by
-evaluating the errors using a different grid with points at the
-centers of the original grid.  (The RMS difference between EGM96 and
-EGM2008 is about 0.5 m.  The RMS difference between EGM84 and EGM96 is
-about 1.5 m.)
-
-The errors in the table above include the quantization errors that arise
-because the height data that GeographicLib::Geoid uses are quantized to
-3 mm.  If, instead, GeographicLib::Geoid were to use data files without
-such quantization artifacts, the overall error would be reduced <i>but
-only modestly</i> as shown in the following table, where only the
-changed rows are included and where the changed entries are given in
-bold:
-<center><table>
-<caption>Interpolation (only!) errors for geoid heights</caption>
-<tr>
- <th rowspan="2">name
- <th rowspan="2">geoid
- <th rowspan="2">grid
- <th colspan="2"><center>bilinear error</center></th>
- <th colspan="2"><center>cubic error</center></th>
-<tr>
- <th><center>max</center><th><center>rms</center>
- <th><center>max</center><th><center>rms</center>
-<tr>
- <td>egm96-5    <td>EGM96  <td><center> 5'  </center>
- <td><center>0.140 m</center><td><center>4.6 mm</center>
- <td><center><b>0.0026 m</b></center><td><center><b>0.1 mm</b></center>
-<tr>
- <td>egm2008-2_5<td>EGM2008<td><center> 2.5'</center>
- <td><center>0.135 m</center><td><center>3.2 mm</center>
- <td><center>0.031 m</center><td><center><b>0.4 mm</b></center>
-<tr>
- <td>egm2008-1  <td>EGM2008<td><center> 1'  </center>
- <td><center>0.025 m</center><td><center><b>0.6 mm</b></center>
- <td><center><b>0.0010 m</b></center><td><center><b>0.011 mm</b></center>
-</table></center>
-
-\section geoidcache Caching the geoid data
-
-A simple way of calling Geoid is as follows
-\code
-   #include <GeographicLib/Geoid.hpp>
-   #include <iostream>
-   ...
-   GeographicLib::Geoid g("egm96-5");
-   double lat, lon;
-   while (std::cin >> lat >> lon)
-      std::cout << g(lat, lon) << "\n";
-   ...
-\endcode
-
-The first call to g(lat, lon) causes the data for the stencil points (4
-points for bilinear interpolation and 12 for cubic interpolation) to be
-read and the interpolated value returned.  A simple 0th-order caching
-scheme is provided by default, so that, if the second and subsequent
-points falls within the same grid cell, the data values are not reread
-from the file.  This is adequate for most interactive use and also
-minimizes disk accesses for the case when a continuous track is being
-followed.
-
-If a large quantity of geoid calculations are needed, the calculation
-can be sped up by preloading the data for a rectangular block with
-GeographicLib::Geoid::CacheArea or the entire dataset with
-GeographicLib::Geoid::CacheAll.  If the requested points lie within the
-cached area, the cached data values are used; otherwise the data is read
-from disk as before.  Caching all the data is a reasonable choice for
-the 5' grids and coarser.  Caching all the data for the 1' grid will
-require 0.5 GB of RAM and should only be used on systems with sufficient
-memory.
-
-The use of caching does not affect the values returned.  Because of the
-caching and the random file access, this class is \e not normally thread
-safe; i.e., a single instantiation cannot be safely used by multiple
-threads.  If multiple threads need to calculate geoid heights, there are
-two alternatives:
- - they should all construct thread-local instantiations.
- - GeographicLib::Geoid should be constructed with \e threadsafe = true.
-   This causes all the data to be read at the time of construction (and
-   if this fails, an exception is thrown), the data file to be closed
-   and the single-cell caching to be turned off.  The resulting object
-   may then be shared safely between threads.
-
-\section testgeoid Test data for geoids
-
-A test set for the geoid models is available at
- - <a href="http://sf.net/projects/geographiclib/files/testdata/GeoidHeights.dat.gz/download">
-   GeoidHeights.dat.gz</a>
- .
-This is about 11 MB (compressed).  This test set consists of a set of
-500000 geographic coordinates together with the corresponding geoid
-heights according to various earth gravity models.
-
-Each line of the test set gives 6 space delimited numbers
- - latitude (degrees, exact)
- - longitude (degrees, exact)
- - EGM84 height (meters, accurate to 1 um)
- - EGM96 height (meters, accurate to 1 um)
- - EGM2008 height (meters, accurate to 1 um)
- .
-The latitude and longitude are all multiples of 10<sup>-6</sup> deg and
-should be regarded as exact.  The geoid heights are computed using the
-harmonic NGA synthesis programs, where the programs were compiled (with
-gfortran) and run under Linux.  In the case of the EGM2008 program, a
-<code>SAVE</code> statement needed to be added to subroutine
-<code>latf</code>, in order for the program to compile correctly with a
-stack-based compiler.  Similarly the EGM96 code requires a
-<code>SAVE</code> statement in subroutine <code>legfdn</code>.
-
-<center>
-Back to \ref other.  Forward to \ref gravity.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page gravity Gravity models
-
-<center>
-Back to \ref geoid.  Forward to \ref magnetic.  Up to \ref contents.
-</center>
-
-%GeographicLib can compute the earth's gravitational field with an
-earth gravity model using the GeographicLib::GravityModel and
-GeographicLib::GravityCircle classes and with the
-<a href="Gravity.1.html">Gravity</a> utility.  These models expand the
-gravitational potential of the earth as sum of spherical harmonics.  The
-models also specify a reference ellipsoid, relative to which geoid
-heights and gravity disturbances are measured.
-
-The supported models are
- - <b>egm84</b>, the
-   <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">
-   Earth Gravity Model 1984</a>, which includes terms up to degree 180.
- - <b>egm96</b>, the
-   <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">
-   Earth Gravity Model 1996</a>, which includes terms up to degree 360.
- - <b>egm2008</b>, the
-   <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">
-   Earth Gravity Model 2008</a>, which includes terms up to degree 2190.
- - <b>wgs84</b>, the
-   <a href="http://earth-info.nga.mil/GandG/publications/tr8350.2/tr8350_2.html">
-   WGS84 Reference Ellipsoid</a>.  This is just reproduces the normal
-   gravitational field for the reference ellipsoid.  Usually
-   GeographicLib::NormalGravity::WGS84 should be used instead.
-
-See
- - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San
-   Francisco, 1967).
- .
-for more information.
-
-<b>Acknowledgment:</b> I would like to thank Mathieu Peyréga for
-sharing EGM_Geoid_CalculatorClass from his Geo library with me.  His
-implementation was the first I could easily understand and he and I
-together worked through some of the issues with overflow and underflow
-the occur while performing high-degree spherical harmonic sums.
-
-Go to
- - \ref gravityinst
- - \ref gravityformat
- - \ref gravitynga
- - \ref gravitygeoid
- - \ref gravityatmos
- - \ref gravityparallel
-
-\section gravityinst Installing the gravity models
-
-These gravity models are available for download:
-<center>
-<table>
-<caption>Available gravity models</caption>
-<tr>
- <th rowspan="2">name         <th rowspan="2">max\n degree
- <th rowspan="2">size\n(kB)
- <th colspan="3"><center>Download Links (size, kB)</center></th>
-<tr>
- <th>tar file</th>
- <th>Windows\n installer</th>
- <th>zip file</th>
-<tr>
- <td>egm84
- <td><center>180</center>
- <td><center>27</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm84.tar.bz2/download">
- link</a> (26)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm84.exe/download">
- link</a> (55)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm84.zip/download">
- link</a> (26)</center>
-<tr>
- <td>egm96
- <td><center>360</center>
- <td><center>2100</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm96.tar.bz2/download">
- link</a> (2100)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm96.exe/download">
- link</a> (2300)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm96.zip/download">
- link</a> (2100)</center>
-<tr>
- <td>egm2008
- <td><center>2190</center>
- <td><center>76000</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm2008.tar.bz2/download">
- link</a> (75000)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm2008.exe/download">
- link</a> (72000)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm2008.zip/download">
- link</a> (73000)</center>
-<tr>
- <td>wgs84
- <td><center>20</center>
- <td><center>1</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/wgs84.tar.bz2/download">
- link</a> (1)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/wgs84.exe/download">
- link</a> (30)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/wgs84.zip/download">
- link</a> (1)</center>
-</table>
-</center>
-The "size" column is the size of the uncompressed data.
-
-For Linux and Unix systems, %GeographicLib provides a shell script
-geographiclib-get-gravity (typically installed in /usr/local/sbin)
-which automates the process of downloading and installing the gravity
-models.  For example
-\verbatim
-   geographiclib-get-gravity all  # to install egm84, egm96, egm2008, wgs84
-   geographiclib-get-gravity -h   # for help
-\endverbatim
-This script should be run as a user with write access to the
-installation directory, which is typically
-/usr/local/share/GeographicLib (this can be overridden with the -p
-flag), and the data will then be placed in the "gravity" subdirectory.
-
-Windows users should download and run the Windows installers.  These
-will prompt for an installation directory with the default being one of
-\verbatim
-   C:/Documents and Settings/All Users/Application Data/GeographicLib
-   C:/ProgramData/GeographicLib
-\endverbatim
-(which you probably should not change) and the data is installed in the
-"gravity" sub-directory.  (The second directory name is an alternate name
-that Windows 7 for the "Application Data" directory.)
-
-Otherwise download \e either the tar.bz2 file \e or the zip file (they
-have the same contents).  To unpack these, run, for example
-\verbatim
-   mkdir -p /usr/local/share/GeographicLib
-   tar xofjC egm96.tar.bz2 /usr/local/share/GeographicLib
-   tar xofjC egm2008.tar.bz2 /usr/local/share/GeographicLib
-   etc.
-\endverbatim
-and, again, the data will be placed in the "gravity" subdirectory.
-
-However you install the gravity models, all the datasets should be
-installed in the same directory.  GeographicLib::GravityModel and
-<a href="Gravity.1.html">Gravity</a> uses a compile time default to
-locate the datasets.  This is
-- /usr/local/share/GeographicLib/gravity, for non-Windows systems
-- C:/Documents and Settings/All Users/Application Data/GeographicLib/gravity,
-  for Windows systems
-.
-consistent with the examples above.  This may be overridden at run-time
-by defining the GRAVITY_PATH or the GEOGRAPHIC_DATA environment
-variables; see GeographicLib::GravityModel::DefaultGravityPath() for
-details.  Finally, the path may be set using the optional second
-argument to the GeographicLib::GravityModel constructor or with the "-d"
-flag to
-<a href="Gravity.1.html">Gravity</a>.  Supplying the "-h" flag to
-<a href="Gravity.1.html">Gravity</a> reports the default path for
-gravity models for that utility.  The "-v" flag causes Gravity to report
-the full path name of the data file it uses.
-
-\section gravityformat The format of the gravity model files
-
-The constructor for GeographicLib::GravityModel reads a file called
-NAME.egm which specifies various properties for the gravity model.  It
-then opens a binary file NAME.egm.cof to obtain the coefficients of the
-spherical harmonic sum.
-
-The first line of the .egm file must consist of "EGMF-v" where EGMF
-stands for "Earth Gravity Model Format" and v is the version number of
-the format (currently "1").
-
-The rest of the File is read a line at a time.  A # character and
-everything after it are discarded.  If the result is just white space it
-is discarded.  The remaining lines are of the form "KEY WHITESPACE
-VALUE".  In general, the KEY and the VALUE are case-sensitive.
-
-GeographicLib::GravityModel only pays attention to the following
-keywords
- - keywords that affect the field calculation, namely:
-   - <b>ModelRadius</b> (required), the normalizing radius for the model
-     in meters.
-   - <b>ReferenceRadius</b> (required), the major radius \e a for the
-     reference ellipsoid meters.
-   - <b>ModelMass</b> (required), the mass constant \e GM for the model
-     in meters<sup>3</sup>/seconds<sup>2</sup>.
-   - <b>ReferenceMass</b> (required), the mass constant \e GM for the
-     reference ellipsoid in meters<sup>3</sup>/seconds<sup>2</sup>.
-   - <b>AngularVelocity</b> (required), the angular velocity \e omega for
-     the model \e and the reference ellipsoid in rad
-     seconds<sup>-1</sup>.
-   - <b>Flattening</b>, the flattening of the reference ellipsoid; this
-     can be given a fraction, e.g., 1/298.257223563.  One of
-     <b>Flattening</b> and <b>DynamicalFormFactor</b> is required.
-   - <b>DynamicalFormFactor</b>, the dynamical form factor
-     <i>J</i><sub>2</sub> for the reference ellipsoid.  One of
-     <b>Flattening</b> and <b>DynamicalFormFactor</b> is required.
-   - <b>HeightOffset</b> (default 0), the constant height offset
-     (meters) added to obtain the geoid height.
-   - <b>CorrectionMultiplier</b> (default 1), the multiplier for the
-     "zeta-to-N" correction terms for the geoid height to convert them
-     to meters.
-   - <b>Normalization</b> (default full), the normalization used for the
-     associated Legendre functions (full or schmidt).
-   - <b>ID</b> (required), 8 printable characters which serve as a
-     signature for the .egm.cof file (they must appear as the first 8
-     bytes of this file).
-   .
-   The parameters <b>ModelRadius</b>, <b>ModelMass</b>, and
-   <b>AngularVelocity</b> apply to the gravity model, while
-   <b>ReferenceRadius</b>, <b>ReferenceMass</b>, <b>AngularVelocity</b>,
-   and either <b>Flattening</b> or <b>DynamicalFormFactor</b>
-   characterize the reference ellipsoid.  <b>AngularVelocity</b>
-   (because it can be measured precisely) is the same for the gravity
-   model and the reference ellipsoid.  <b>ModelRadius</b> is merely a
-   scaling parameter for the gravity model and there's no requirement
-   that it be close to the major radius of the earth (although that's
-   typically how it is chosen).  <b>ModelMass</b> and
-   <b>ReferenceMass</b> need not be the same and, indeed, they are
-   slightly difference for egm2008.  As a result the disturbing
-   potential \e T has a 1/\e r dependence at large distances.
- - keywords that store data that the user can query:
-   - <b>Name</b>, the name of the model.
-   - <b>Description</b>, a more descriptive name of the model.
-   - <b>ReleaseDate</b>, when the model was created.
- - keywords that are examined to verify that their values are valid:
-   - <b>ByteOrder</b> (default little), the order of bytes in the
-     .egm.cof file.  Only little endian is supported at present.
- .
-Other keywords are ignored.
-
-The coefficient file NAME.egm.cof is a binary file in little endian
-order.  The first 8 bytes of this file must match the ID given in
-NAME.egm.  This is followed by 2 sets of spherical harmonic
-coefficients.  The first of these gives the gravity potential and the
-second gives the zeta-to-N corrections to the geoid height.  The format
-for each set of coefficients is:
- - \e N, the maximum degree of the sum stored as a 4-byte signed integer.
-   This must satisfy \e N >= -1.
- - \e M, the maximum order of the sum stored as a 4-byte signed integer.
-   This must satisfy \e N >= \e M >= -1.
- - \e C<sub>\e nm</sub>, the coefficients of the cosine coefficients of
-   the sum in column (i.e., \e m) major order.  There are (\e M + 1)
-   (2\e N - \e M + 2) / 2 elements which are stored as IEEE doubles (8
-   bytes).  For example for \e N = \e M = 3, there are 10 coefficients
-   arranged as
-   <i>C</i><sub>00</sub>,
-   <i>C</i><sub>10</sub>,
-   <i>C</i><sub>20</sub>,
-   <i>C</i><sub>30</sub>,
-   <i>C</i><sub>11</sub>,
-   <i>C</i><sub>21</sub>,
-   <i>C</i><sub>31</sub>,
-   <i>C</i><sub>22</sub>,
-   <i>C</i><sub>32</sub>,
-   <i>C</i><sub>33</sub>.
- - \e S<sub>\e nm</sub>, the coefficients of the sine coefficients of
-   the sum in column (i.e., \e m) major order starting at \e m = 1.
-   There are \e M (2\e N - \e M + 1) / 2 elements which are stored as
-   IEEE doubles (8 bytes).  For example for \e N = \e M = 3, there are 6
-   coefficients arranged as
-   <i>S</i><sub>11</sub>,
-   <i>S</i><sub>21</sub>,
-   <i>S</i><sub>31</sub>,
-   <i>S</i><sub>22</sub>,
-   <i>S</i><sub>32</sub>,
-   <i>S</i><sub>33</sub>.
- .
-Although the coefficient file is in little endian order, %GeographicLib
-can read it on big endian machines.  It can only be read on machines
-which store doubles in IEEE format.
-
-As an illustration, here is egm2008.egm:
-\verbatim
-EGMF-1
-# An Earth Gravity Model (Format 1) file.  For documentation on the
-# format of this file see
-# http://geographiclib.sf.net/html/gravity.html#gravityformat
-Name            egm2008
-Publisher       National Geospatial Intelligence Agency
-Description     Earth Gravity Model 2008
-URL             http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
-ReleaseDate     2008-06-01
-ConversionDate  2011-11-19
-DataVersion     1
-ModelRadius     6378136.3
-ModelMass       3986004.415e8
-AngularVelocity 7292115e-11
-ReferenceRadius 6378137
-ReferenceMass   3986004.418e8
-Flattening      1/298.257223563
-HeightOffset    -0.41
-
-# Gravitational and correction coefficients taken from
-# EGM2008_to2190_TideFree and Zeta-to-N_to2160_egm2008 from
-# the egm2008 distribution.
-ID              EGM2008A
-\endverbatim
-
-\section gravitynga Comments on the NGA harmonic synthesis code
-
-GeographicLib::GravityModel attempts to reproduce the results of NGA's
-harmonic synthesis code for EGM2008, hsynth_WGS84.f.  Listed here are
-issues that I encountered using the NGA code:
- -# A compiler which allocates local variables on the stack produces an
-    executable with just returns NaNs.  The problem here is a missing
-    <code>SAVE</code> statement in subroutine <code>latf</code>.
- -# Because the model and references masses for egm2008 differ (by about
-    1 part in 10<sup>9</sup>), there should be a 1/\e r contribution to
-    the disturbing potential \e T.  However, this term is set to zero in
-    hsynth_WGS84 (effectively altering the normal potential).  This
-    shifts the surface \e W = <i>U</i><sub>0</sub> outward by about 5 mm.
-    Note too that the reference ellipsoid is no longer a level surface of
-    the effective normal potential.
- -# Subroutine <code>radgrav</code> computes the ellipsoidal coordinate
-    \e beta incorrectly.  This leads to small errors in the deflection
-    of the vertical, \e xi and \e eta, when the height above the
-    ellipsoid, \e h, is non-zero (about 1e-7 arcsec at \e h = 400 km).
- -# There are several expressions which will return inaccurate results
-    due to cancellation.  For example, subroutine <code>grs</code>
-    computes the flattening using \e f = 1 - sqrt(1 -
-    <i>e</i><sup>2</sup>).  Much better is to use \e f =
-    <i>e</i><sup>2</sup>/(1 + sqrt(1 - <i>e</i><sup>2</sup>)).  The
-    expressions for \e q and \e q' in <code>grs</code> and
-    <code>radgrav</code> suffer from similar problems.  The resulting
-    errors are tiny (about 50 pm in the geoid height); however, given
-    that's there's essentially no cost to using more accurate
-    expressions, it's preferable to do so.
- -# hsynth_WGS84 returns an "undefined" value for \e xi and \e eta at the
-    poles.  Better would be to return the value obtained by taking the
-    limit \e lat -> +/- 90<sup>o</sup>.
- .
-Issues 1–4 have been reported to the authors of hsynth_WGS84.
-Issue 1 is peculiar to Fortran and is not encountered in C++ code and
-GeographicLib::GravityModel corrects issues 3–5.  On issue 2,
-GeographicLib::GravityModel neglects the 1/\e r term in \e T in
-GeographicLib::GravityModel::GeoidHeight and
-GeographicLib::GravityModel::SphericalAnomaly in order to produce
-results which match NGA's for these quantities.  On the other hand,
-GeographicLib::GravityModel::Disturbance and
-GeographicLib::GravityModel::T <i>do</i> include this term.
-
-\section gravitygeoid Details of the geoid height and anomaly calculations
-
-Ideally, the geoid represents a surface of constant gravitational
-potential which approximates mean sea level.  In reality some
-approximations are taken in determining this surface.  The steps taking
-by GeographicLib::GravityModel in computing the geoid height are
-described here (in the context of EGM2008).  This mimics NGA's code
-hsynth_WGS84 closely because most users of EGM2008 use the gridded data
-generated by this code (e.g., GeographicLib::Geoid) and it is desirable
-to use a consistent definition of the geoid height.
- - The model potential is band limited; the minimum wavelength that is
-   represented is 360<sup>o</sup>/2160 = 10' (i.e., about 10NM or
-   18.5km).  The maximum degree for the spherical harmonic sum is 2190;
-   however the model was derived using ellipsoidal harmonics of degree
-   and order 2160 and the degree was increased to 2190 in order to
-   capture the ellipsoidal harmonics faithfully with spherical
-   harmonics.
- - The 1/\e r term is omitted from the \e T (this is issue 2 in \ref
-   gravitynga).  This moves the equipotential surface by about 5mm.
- - The surface \e W = <i>U</i><sub>0</sub> is determined by Bruns'
-   formula, which is roughly equivalent to a single iteration of
-   Newton's method.  The RMS error in this approximation is about 1.5mm
-   with a maximum error of about 10 mm.
- - The model potential is only valid above the earth's surface.  A
-   correction therefore needs to be included where the geoid lies
-   beneath the terrain.  This is NGA's "zeta-to-N" correction, which is
-   represented by a spherical harmonic sum of degree and order 2160 (and
-   so it misses short wavelength terrain variations).  In addition, it
-   entails estimating the isostatic equilibrium of the earth's crust.
-   The correction lies in the range [-5.05 m, 0.05 m], however for 99.9%
-   of the earth's surface the correction is less than 10 mm in
-   magnitude.
- - The resulting surface lies above the observed mean sea level,
-   so -0.41m is added to the geoid height.  (Better would be to change
-   the potential used to define the geoid; but this would only change
-   the result by about 2mm.)
- .
-A useful discussion of the problems with defining a geoid is given by
-Dru A. Smith in
-<a href="http://www.ngs.noaa.gov/PUBS_LIB/EGM96_GEOID_PAPER/egm96_geoid_paper.html">
-There is no such thing as "The" EGM96 geoid: Subtle points on the use of
-a global geopotential model</a>, IGeS Bulletin No. 8, International
-Geoid Service, Milan, Italy, pp. 17–28 (1998).
-
-GeographicLib::GravityModel::GeoidHeight reproduces the results of the
-several NGA codes for harmonic synthesis with the following maximum
-discrepancies:
- - egm84 = 1.1mm.  This is probably due to inconsistent parameters for the
-   reference ellipsoid in the NGA code.  (In particular, the value of
-   mass constant excludes the atmosphere; however, it's not clear
-   whether the other parameters have been correspondingly adjusted.)
-   Note that geoid heights predicted by egm84 differ from those of more
-   recent gravity models by about 1 meter.
- - egm96 = 23nm.
- - egm2008 = 78pm.  After addressing some of the issues alluded to in
-   issue 4 in \ref gravitynga, the maximum discrepancy becomes 23pm.
-
-The formula for the gravity anomaly vector involves computing gravity
-and normal gravity at two different points (with the displacement
-between the points unknown <i>ab initio</i>).  Since the gravity anomaly
-is already a small quantity it is sometimes acceptable to employ
-approximations that change the quantities by \e O(\e f).  The NGA code
-uses the spherical approximation described by Heiskanen and Moritz,
-Sec. 2-14 and GeographicLib::GravityModel::SphericalAnomaly uses the
-same approximation for compatibility.  In this approximation, the
-gravity disturbance <b>delta</b> = <b>grad</b> \e T is calculated.
-Here, \e T once again excludes the 1/\e r term (this is issue 2 in \ref
-gravitynga and is consistent with the computation of the geoid height).
-Note that <b>delta</b> compares the gravity and the normal gravity at
-the \e same point; the gravity anomaly vector is then found by
-estimating the gradient of the normal gravity in the limit that the
-earth is spherically symmetric.  <b>delta</b> is expressed in \e
-spherical coordinates as \e deltax, \e deltay, \e deltaz where, for
-example, \e deltaz is the \e radial component of <b>delta</b> (not the
-component perpendicular to the ellipsoid) and \e deltay is similarly
-slightly different from the usual northerly component.  The components
-of the anomaly are then given by
- - gravity anomaly, \e Dg01 = \e deltaz - 2<i>T</i>/\e R, where \e R
-   distance to the center of the earth;
- - northerly component of the deflection of the vertical, \e xi = -
-   <i>deltay</i>/\e gamma, where \e gamma is the magnitude of the normal
-   gravity;
- - easterly component of the deflection of the vertical, \e eta = -
-   <i>deltax</i>/\e gamma.
- .
-GeographicLib::NormalGravity computes the normal gravity accurately and
-avoids issue 3 of \ref gravitynga.  Thus while
-GeographicLib::GravityModel::SphericalAnomaly reproduces the results for
-\e xi and \e eta at \e h = 0, there is a slight discrepancy if \e h is
-non-zero.
-
-\section gravityatmos The effect of the mass of the atmosphere
-
-All of the supported models use WGS84 for the reference ellipsoid.  This
-has (see
-<a href="http://earth-info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf">
-TR8350.2</a>, table 3.1)
- - \e a = 6378137 m
- - \e f = 1/298.257223563
- - \e omega = 7292115e-11 rad s<sup>-1</sup>
- - \e GM = 3986004.418e8 m<sup>3</sup>/s<sup>2</sup>.
- .
-The value of \e GM includes the mass of the atmosphere and so strictly
-only applies above the earth's atmosphere.  Near the surface of the
-earth, the value of \e g will be less (in absolute value) than the value
-predicted by these models by about \e delta \e g = (4 \e pi
-<i>G</i>/\e g) \e A = 8.552e-11 \e A m<sup>2</sup>/kg, where \e G is the
-gravitational constant, \e g is the earth's gravity, and \e A is the
-pressure of the atmosphere.  At sea level we have \e A = 101.3 kPa, and
-\e delta \e g = 8.7e-6 m s<sup>-2</sup>, approximately.  (In other words
-the effect is about 1 part in a million; by way of comparison, buoyancy
-effects are about 100 times larger.)
-
-\section gravityparallel Geoid heights on a multi-processor system
-
-The egm2008 model includes many terms (over 2 million spherical
-harmonics).  For that reason computations using this model may be slow;
-for example it takes about 78 ms to compute the geoid height at a single
-point.  There are two ways to speed up this computation:
- - Use a GeographicLib::GravityCircle to compute the geoid height at
-   several points on a circle of latitude.  This reduces the cost per
-   point to about 92 us (a reduction by a factor of over 800).
- - Compute the values on several circles of latitude in parallel.  One
-   of the simplest ways of doing this is with
-   <a href="http://openmp.org"> OpenMP</a>; on an 8-processor system,
-   this can speed up the computation by another factor of 8.
- .
-Both of these techniques are illustrated by the following code,
-which computes a table of geoid heights on
-a regular grid and writes on the result in a
-<a href="http://vdatum.noaa.gov/dev/gtx_info.html#dev_gtx_binary">.gtx</a>
-file.  On an 8-processor Intel 2.66 GHz machine using OpenMP
-(-DHAVE_OPENMP=1), it takes about 40 minutes of elapsed time to compute
-the geoid height for EGM2008 on a 1' gride.  (Without these
-optimizations, the computation would have taken about 200 days!)
-\include GeoidToGTX.cpp
-
-This example is built if cmake is invoked with <code>-D
-GEOGRAPHICLIB_EXAMPLES=ON</code>.  cmake will add in support for OpenMP,
-if it is available.
-
-<center>
-Back to \ref geoid.  Forward to \ref magnetic.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page magnetic Magnetic models
-
-<center>
-Back to \ref gravity.  Forward to \ref geodesic.  Up to \ref contents.
-</center>
-
-%GeographicLib can compute the earth's magnetic field by a magnetic
-model using the GeographicLib::MagneticModel and
-GeographicLib::MagneticCircle classes and with the
-<a href="MagneticField.1.html">MagneticField</a> utility.  These models
-expand the internal magnetic potential of the earth as sum of spherical
-harmonics.  They neglect magnetic fields due to the ionosphere, the
-magnetosphere, nearby magnetized materials, electric machinery, etc.
-Users of GeographicLib::MagneticModel are advised to read the
-<a href="http://www.ngdc.noaa.gov/IAGA/vmod/igrfhw.html">"Health
-Warning"</a> this is provided with igrf11.  Although the advice is
-specific to igrf11, many of the comments apply to all magnetic field
-models.
-
-The supported models are
- - <b>wmm2010</b>, the
-   <a href="http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml"> World
-   Magnetic Model 2010</a>, which approximates the main magnetic field
-   for the period 2010–2015.
- - <b>igrf11</b>, the
-   <a href="http://ngdc.noaa.gov/IAGA/vmod/igrf.html">International
-   Geomagnetic Reference Field (11th generation)</a>, which approximates
-   the main magnetic field for the period 1900–2015.
- - <b>emm2010</b>, the
-   <a href="http://ngdc.noaa.gov/geomag/EMM/index.html"> Enhanced
-   Magnetic Model 2010</a>, which approximates the main and crustal
-   magnetic fields for the period 2010–2015.
-
-Go to
- - \ref magneticinst
- - \ref magneticformat
-
-\section magneticinst Installing the magnetic field models
-
-These magnetic models are available for download:
-<center>
-<table>
-<caption>Available magnetic models</caption>
-<tr>
- <th rowspan="2">name         <th rowspan="2">max\n degree
- <th rowspan="2">time\n interval
- <th rowspan="2">size\n(kB)
- <th colspan="3"><center>Download Links (size, kB)</center></th>
-<tr>
- <th>tar file</th>
- <th>Windows\n installer</th>
- <th>zip file</th>
-<tr>
- <td>wmm2010
- <td><center>12</center>
- <td><center>2010–2015</center>
- <td><center>3</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/wmm2010.tar.bz2/download">
- link</a> (2)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/wmm2010.exe/download">
- link</a> (300)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/wmm2010.zip/download">
- link</a> (2)</center>
-<tr>
- <td>igrf11
- <td><center>13</center>
- <td><center>1900–2015</center>
- <td><center>25</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/igrf11.tar.bz2/download">
- link</a> (7)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/igrf11.exe/download">
- link</a> (310)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/igrf11.zip/download">
- link</a> (8)</center>
-<tr>
- <td>emm2010
- <td><center>739</center>
- <td><center>2010–2015</center>
- <td><center>4400</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/emm2010.tar.bz2/download">
- link</a> (3700)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/emm2010.exe/download">
- link</a> (3000)</center>
- <td><center>
- <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/emm2010.zip/download">
- link</a> (4100)</center>
-</table>
-</center>
-The "size" column is the size of the uncompressed data.
-
-For Linux and Unix systems, %GeographicLib provides a shell script
-geographiclib-get-magnetic (typically installed in /usr/local/sbin)
-which automates the process of downloading and installing the magnetic
-models.  For example
-\verbatim
-   geographiclib-get-magnetic all  # to install wmm2010, igrf11, emm2010
-   geographiclib-get-magnetic -h   # for help
-\endverbatim
-This script should be run as a user with write access to the
-installation directory, which is typically
-/usr/local/share/GeographicLib (this can be overridden with the -p
-flag), and the data will then be placed in the "magnetic" subdirectory.
-
-Windows users should download and run the Windows installers.  These
-will prompt for an installation directory with the default being one of
-\verbatim
-   C:/Documents and Settings/All Users/Application Data/GeographicLib
-   C:/ProgramData/GeographicLib
-\endverbatim
-(which you probably should not change) and the data is installed in the
-"magnetic" sub-directory.  (The second directory name is an alternate name
-that Windows 7 for the "Application Data" directory.)
-
-Otherwise download \e either the tar.bz2 file \e or the zip file (they
-have the same contents).  To unpack these, run, for example
-\verbatim
-   mkdir -p /usr/local/share/GeographicLib
-   tar xofjC wmm2010.tar.bz2 /usr/local/share/GeographicLib
-   tar xofjC emm2010.tar.bz2 /usr/local/share/GeographicLib
-   etc.
-\endverbatim
-and, again, the data will be placed in the "magnetic" subdirectory.
-
-However you install the magnetic models, all the datasets should be
-installed in the same directory.  GeographicLib::MagneticModel and
-<a href="MagneticField.1.html">MagneticField</a> uses a compile time
-default to locate the datasets.  This is
-- /usr/local/share/GeographicLib/magnetic, for non-Windows systems
-- C:/Documents and Settings/All Users/Application Data/GeographicLib/magnetic,
-  for Windows systems
-.
-consistent with the examples above.  This may be overridden at run-time
-by defining the MAGNETIC_PATH  or the GEOGRAPHIC_DATA environment
-variables; see GeographicLib::MagneticModel::DefaultMagneticPath() for
-details.  Finally, the path may be set using the optional second
-argument to the GeographicLib::MagneticModel constructor or with the
-"-d" flag to <a href="MagneticField.1.html">MagneticField</a>.
-Supplying the "-h" flag to
-<a href="MagneticField.1.html">MagneticField</a> reports the default
-path for magnetic models for that utility.  The "-v" flag causes
-MagneticField to report the full path name of the data file it uses.
-
-\section magneticformat The format of the magnetic model files
-
-The constructor for GeographicLib::MagneticModel reads a file called
-NAME.wmm which specifies various properties for the magnetic model.  It
-then opens a binary file NAME.wmm.cof to obtain the coefficients of the
-spherical harmonic sum.
-
-The first line of the .wmm file must consist of "WMMF-v" where WMMF
-stands for "World Magnetic Model Format" and v is the version number of
-the format (currently "1").
-
-The rest of the File is read a line at a time.  A # character and
-everything after it are discarded.  If the result is just white space it
-is discarded.  The remaining lines are of the form "KEY WHITESPACE
-VALUE".  In general, the KEY and the VALUE are case-sensitive.
-
-GeographicLib::MagneticModel only pays attention to the following
-keywords
- - keywords that affect the field calculation, namely:
-   - <b>Radius</b> (required), the normalizing radius of the model in
-     meters.
-   - <b>NumModels</b> (default 1), the number of models.  WMM2010
-     consists of a single model giving the magnetic field and its time
-     variation at 2010.  IGRF11 consists of 23 models for 1900 thru 2010
-     at 5 year intervals.  The time variation is given only for the last
-     model to allow extrapolation beyond 2010.  For dates prior to 2010,
-     linear interpolation is used.
-   - <b>Epoch</b> (required), the time origin (in fractional years) for
-     the first model.
-   - <b>DeltaEpoch</b> (default 1), the interval between models in years
-     (only relevant for NumModels > 1).
-   - <b>Normalization</b> (default schmidt), the normalization used for
-     the associated Legendre functions (schmidt or full).
-   - <b>ID</b> (required), 8 printable characters which serve as a
-     signature for the .wmm.cof file (they must appear as the first 8
-     bytes of this file).
- - keywords that store data that the user can query:
-   - <b>Name</b>, the name of the model.
-   - <b>Description</b>, a more descriptive name of the model.
-   - <b>ReleaseDate</b>, when the model was created.
-   - <b>MinTime</b>, the minimum date at which the model should be used.
-   - <b>MaxTime</b>, the maximum date at which the model should be used.
-   - <b>MinHeight</b>, the minimum height above the ellipsoid for which
-     the model should be used.
-   - <b>MaxHeight</b>, the maximum height above the ellipsoid for which
-     the model should be used.
-   .
-   GeographicLib::MagneticModel does not enforce the restrictions
-   implied by last four quantities.  However,
-   <a href="MagneticField.1.html">MagneticField</a> issues a warning if
-   these limits are exceeded.
- - keywords that are examined to verify that their values are valid:
-   - <b>Type</b> (default linear), the type of the model.  "linear"
-     means that the time variation is piece-wise linear (either using
-     interpolation between the field at two dates or using the field and
-     its first derivative with respect to time).  This is the only type
-     of model supported at present.
-   - <b>ByteOrder</b> (default little), the order of bytes in the
-     .wmm.cof file.  Only little endian is supported at present.
- .
-Other keywords are ignored.
-
-The coefficient file NAME.wmm.cof is a binary file in little endian
-order.  The first 8 bytes of this file must match the ID given in
-NAME.wmm.  This is followed by NumModels + 1 sets of spherical harmonic
-coefficients.  The first NumModels of these model the magnetic field at
-Epoch + \e i * DeltaEpoch for 0 <= \e i < NumModels.  The last set of
-coefficients model the rate of change of the magnetic field at Epoch +
-(NumModels - 1) * DeltaEpoch.  The format for each set of coefficients
-is:
- - \e N, the maximum degree of the sum stored as a 4-byte signed integer.
-   This must satisfy \e N >= -1.
- - \e M, the maximum order of the sum stored as a 4-byte signed integer.
-   This must satisfy \e N >= \e M >= -1.
- - \e C<sub>\e nm</sub>, the coefficients of the cosine coefficients of
-   the sum in column (i.e., \e m) major order.  There are (\e M + 1)
-   (2\e N - \e M + 2) / 2 elements which are stored as IEEE doubles (8
-   bytes).  For example for \e N = \e M = 3, there are 10 coefficients
-   arranged as
-   <i>C</i><sub>00</sub>,
-   <i>C</i><sub>10</sub>,
-   <i>C</i><sub>20</sub>,
-   <i>C</i><sub>30</sub>,
-   <i>C</i><sub>11</sub>,
-   <i>C</i><sub>21</sub>,
-   <i>C</i><sub>31</sub>,
-   <i>C</i><sub>22</sub>,
-   <i>C</i><sub>32</sub>,
-   <i>C</i><sub>33</sub>.
- - \e S<sub>\e nm</sub>, the coefficients of the sine coefficients of
-   the sum in column (i.e., \e m) major order starting at \e m = 1.
-   There are \e M (2\e N - \e M + 1) / 2 elements which are stored as
-   IEEE doubles (8 bytes).  For example for \e N = \e M = 3, there are 6
-   coefficients arranged as
-   <i>S</i><sub>11</sub>,
-   <i>S</i><sub>21</sub>,
-   <i>S</i><sub>31</sub>,
-   <i>S</i><sub>22</sub>,
-   <i>S</i><sub>32</sub>,
-   <i>S</i><sub>33</sub>.
- .
-Although the coefficient file is in little endian order, %GeographicLib
-can read it on big endian machines.  It can only be read on machines
-which store doubles in IEEE format.
-
-As an illustration, here is igrf11.wmm:
-\verbatim
-WMMF-1
-# A World Magnetic Model (Format 1) file.  For documentation on the
-# format of this file see
-# http://geographiclib.sf.net/html/magnetic.html#magneticformat
-Name            igrf11
-Description     International Geomagnetic Reference Field 11th Generation
-URL             http://ngdc.noaa.gov/IAGA/vmod/igrf.html
-Publisher       National Oceanic and Atmospheric Administration
-ReleaseDate     2009-12-15
-DataCutOff      2009-10-01
-ConversionDate  2011-11-04
-DataVersion     1
-Radius          6371200
-NumModels       23
-Epoch           1900
-DeltaEpoch      5
-MinTime         1900
-MaxTime         2015
-MinHeight       -1000
-MaxHeight       600000
-
-# The coefficients are stored in a file obtained by appending ".cof" to
-# the name of this file.  The coefficients were obtained from IGRF11.COF
-# in the geomag70 distribution.
-ID              IGRF11-A
-\endverbatim
-
-<center>
-Back to \ref gravity.  Forward to \ref geodesic.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page geodesic Geodesics on the ellipsoid
-
-<center>
-Back to \ref magnetic.  Forward to \ref transversemercator.  Up to
-\ref contents.
-</center>
-
-GeographicLib::Geodesic and GeographicLib::GeodesicLine provide accurate
-solutions to the direct and inverse geodesic problems.  The
-<a href="Geod.1.html">Geod</a> utility provides an interface to these
-classes.  GeographicLib::AzimuthalEquidistant implements the azimuthal
-equidistant projection in terms of geodesics.
-GeographicLib::CassiniSoldner implements a transverse cylindrical
-equidistant projection in terms of geodesics.  The
-<a href="GeodesicProj.1.html">GeodesicProj</a> utility provides an
-interface to these projections.
-
-References
- - F. W. Bessel,
-   <a href="http://dx.doi.org/10.1002/asna.201011352">The calculation
-   of longitude and latitude from geodesic measurements (1825)</a>,
-   Astron. Nachr. 331(8), 852-861 (2010);
-   translated by C. F. F. Karney and R. E. Deakin.  Preprint:
-   <a href="http://arxiv.org/abs/0908.1824">arXiv:0908.1824</a>.
- - F. R. Helmert,
-   <a href="http://geographiclib.sf.net/geodesic-papers/helmert80-en.pdf">
-   Mathematical and Physical Theories of Higher Geodesy, Part 1 (1880)</a>,
-   Aeronautical Chart and Information Center (St. Louis, 1964),
-   Chaps. 5–7.
- - J. Danielsen,
-   The Area under the Geodesic,
-   Survey Review 30 (232), 61–66 (1989).
- - C. F. F. Karney,
-   <a href="http://arxiv.org/abs/1102.1215v1">
-   Geodesics on an ellipsoid of revolution</a>,
-   Feb. 2011; preprint
-   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>;
-   resource page
-   <a href="http://geographiclib.sf.net/geod.html">geod.html</a>.
- - C. F. F. Karney,
-   <a href="http://arxiv.org/abs/1109.4448">
-   Algorithms for geodesics</a>,
-   Sept. 2011, preprint
-   <a href="http://arxiv.org/abs/1109.4448">arXiv:1109.4448</a>.
- - A collection of some papers on geodesics is available at
-   http://geographiclib.sourceforge.net/geodesic-papers/biblio.html
-
-\section testgeod Test data for geodesics
-
-A test set a geodesics is available at
- - <a href="http://sf.net/projects/geographiclib/files/testdata/GeodTest.dat.gz/download">
-   GeodTest.dat.gz</a>
- .
-This is about 39 MB (compressed).  This consists of a set of geodesics
-for the WGS84 ellipsoid.  A subset of this (consisting of 1/50 of the
-members — about 690 kB, compressed) is available at
- - <a href="http://sf.net/projects/geographiclib/files/testdata/GeodTest-short.dat.gz/download">
-   GeodTest-short.dat.gz</a>
-
-Each line of the test set gives 10 space delimited numbers
- - latitude for point 1, \e lat1 (degrees, exact)
- - longitude for point 1, \e lon1 (degrees, always 0)
- - azimuth for point 1, \e azi1 (clockwise from north in degrees, exact)
- - latitude for point 2, \e lat2 (degrees, accurate to 10<sup>-18</sup> deg)
- - longitude for point 2, \e lon2 (degrees, accurate to 10<sup>-18</sup> deg)
- - azimuth for point 2, \e azi2 (degrees, accurate to 10<sup>-18</sup> deg)
- - geodesic distance from point 1 to point 2, \e s12 (meters, exact)
- - arc distance on the auxiliary sphere, \e a12 (degrees, accurate to
-   10<sup>-18</sup> deg)
- - reduced length of the geodesic, \e m12 (meters, accurate to 0.1 pm)
- - the area under the geodesic, \e S12 (m<sup>2</sup>, accurate to
-   1 mm<sup>2</sup>)
- .
-These are computed using as direct geodesic calculations with the given
-\e lat1, \e lon1, \e azi1, and \e s12.  The distance \e s12 always
-corresponds to an arc length \e a12 <= 180<sup>o</sup>, so the given
-geodesics give the shortest paths from point 1 to point 2.  For
-simplicity and without loss of generality, \e lat1 is chosen in
-[0<sup>o</sup>, 90<sup>o</sup>], \e lon1 is taken to be zero, \e azi1 is
-chosen in [0<sup>o</sup>, 180<sup>o</sup>].  Furthermore, \e lat1 and \e
-azi1 are taken to be multiples of 10<sup>-12</sup> deg and \e s12 is a
-multiple of 0.1 um in [0 m, 20003931.4586254 m].  This results \e lon2
-in [0<sup>o</sup>, 180<sup>o</sup>] and \e azi2 in [0<sup>o</sup>,
-180<sup>o</sup>].
-
-The direct calculation uses an expansion of the geodesic equations
-accurate to <i>f</i><sup>30</sup> (approximately 1 part in 10<sup>50</sup>)
-and is computed with with
-<a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a>'s
-bfloats and fpprec set to 100 (so the errors in the data are probably
-1/2 of the values quoted above).
-
-The contents of the file are as follows:
- - 100000 entries randomly distributed
- - 50000 entries which are nearly antipodal
- - 50000 entries with short distances
- - 50000 entries with one end near a pole
- - 50000 entries with both ends near opposite poles
- - 50000 entries which are nearly meridional
- - 50000 entries which are nearly equatorial
- - 50000 entries running between vertices (\e azi1 = \e azi2 = 90<sup>o</sup>)
- - 50000 entries ending close to vertices
- .
-(a total of 500000 entries).  The values for \e s12 for the geodesics
-running between vertices are truncated to a multiple of 0.1 pm and this
-is used to determine point 2.
-
-This data can be fed to the <a href="Geod.1.html">Geod</a> utility as
-follows
- - Direct from point 1:
-\verbatim
-  gunzip -c GeodTest.dat.gz | cut -d' ' -f1,2,3,7 | ./Geod
-\endverbatim
-   This should yield columns 4, 5, 6, and 9 of the test set.
- - Direct from point 2:
-\verbatim
-  gunzip -c GeodTest.dat.gz | cut -d' ' -f4,5,6,7 |
-  sed "s/ \([^ ]*$\)/ -\1/" | ./Geod
-\endverbatim
-   (The sed command negates the distance.)  This should yield columns 1,
-   2, and 3, and the negative of column 9 of the test set.
- - Inverse between points 1 and 2:
-\verbatim
-  gunzip -c GeodTest.dat.gz | cut -d' ' -f1,2,4,5 | ./Geod -i
-\endverbatim
-   This should yield columns 3, 6, 7, and 9 of the test set.
- .
-Add, e.g., "-p 6", to the call to Geod to change the precision of the
-output.  Adding "-f" causes Geod to print 12 fields specifying the
-geodesic; these include the 10 fields in the test set plus the geodesic
-scales \e M12 and \e M21 which are inserted between \e m12 and \e S12.
-
-\section geodseries Expansions for geodesics
-
-We give here the series expansions for the various geodesic integrals
-valid to order <i>f</i><sup>10</sup>.  In this release of the code, we
-use a 6th-order expansions.  This is sufficient to maintain accuracy for
-doubles for the SRMmax ellipsoid (\e a = 6400 km, \e f = 1/150).
-However, the preprocessor macro GEOD_ORD can be used to select any order
-up to 8.  (If using long doubles, with a 64-bit fraction, the default
-order is 7.)  The series expanded to order <i>f</i><sup>30</sup> are
-given in <a href="geodseries30.html"> geodseries30.html</a>.
-
-In the formulas below ^ indicates exponentiation (\e f^3 = \e f*\e f*\e
-f) and / indicates real division (3/5 = 0.6).  The equations need to be
-converted to Horner form, but are here left in expanded form so that
-they can be easily truncated to lower order.  These expansions were
-obtained using the Maxima code, <a href="geod.mac">geod.mac</a>.
-
-In the expansions below, we have
- - \e alpha is the azimuth
- - <i>alpha</i><sub>0</sub> is the azimuth at the equator crossing
- - \e lambda is the longitude measured from the equator crossing
- - \e omega is the spherical longitude
- - \e sigma is the spherical arc length
- - \e a is the equatorial radius
- - \e b is the polar semi-axis
- - \e f is the flattening
- - <i>e</i><sup>2</sup> = \e f (2 - \e f)
- - <i>e'</i><sup>2</sup> = <i>e</i><sup>2</sup>/(1 - <i>e</i><sup>2</sup>)
- - <i>k</i><sup>2</sup> = <i>e'</i><sup>2</sup> cos<sup>2</sup>
-   <i>alpha</i><sub>0</sub> = 4 \e eps / (1 - \e eps)<sup>2</sup>
- - \e n = \e f / (2 - \e f)
- - <i>c</i><sup>2</sup> = <i>a</i><sup>2</sup>/2 +
-   <i>b</i><sup>2</sup>/2 (tanh<sup>-1</sup> \e e)/\e e
- - \e ep2 = <i>e'</i><sup>2</sup>
- - \e k2 = <i>k</i><sup>2</sup>
-
-The formula for distance is
-
-    <i>s</i>/\e b = \e I1(\e sigma)
-
-where
-
-    \e I1(\e sigma) = \e A1 (\e sigma + \e B1(\e sigma))<br>
-    \e B1(\e sigma) =
-sum<sub>\e j = 1</sub> \e C1<sub>j</sub> sin(2 \e j \e sigma)
-
-and
-
-\verbatim
-A1 = (1 + 1/4 * eps^2
-        + 1/64 * eps^4
-        + 1/256 * eps^6
-        + 25/16384 * eps^8
-        + 49/65536 * eps^10) / (1 - eps);
-\endverbatim
-
-\verbatim
-C1[1] = - 1/2 * eps
-        + 3/16 * eps^3
-        - 1/32 * eps^5
-        + 19/2048 * eps^7
-        - 3/4096 * eps^9;
-C1[2] = - 1/16 * eps^2
-        + 1/32 * eps^4
-        - 9/2048 * eps^6
-        + 7/4096 * eps^8
-        + 1/65536 * eps^10;
-C1[3] = - 1/48 * eps^3
-        + 3/256 * eps^5
-        - 3/2048 * eps^7
-        + 17/24576 * eps^9;
-C1[4] = - 5/512 * eps^4
-        + 3/512 * eps^6
-        - 11/16384 * eps^8
-        + 3/8192 * eps^10;
-C1[5] = - 7/1280 * eps^5
-        + 7/2048 * eps^7
-        - 3/8192 * eps^9;
-C1[6] = - 7/2048 * eps^6
-        + 9/4096 * eps^8
-        - 117/524288 * eps^10;
-C1[7] = - 33/14336 * eps^7
-        + 99/65536 * eps^9;
-C1[8] = - 429/262144 * eps^8
-        + 143/131072 * eps^10;
-C1[9] = - 715/589824 * eps^9;
-C1[10] = - 2431/2621440 * eps^10;
-\endverbatim
-
-The function \e tau(\e sigma) = <i>s</i>/(\e b \e A1) = \e sigma + \e B1(\e
-sigma) may be inverted by series reversion giving
-
-    \e sigma(\e tau) =
-\e tau + sum<sub>\e j = 1</sub> \e C1'<sub>j</sub> sin(2 \e j \e tau)
-
-where
-
-\verbatim
-C1'[1] = + 1/2 * eps
-         - 9/32 * eps^3
-         + 205/1536 * eps^5
-         - 4879/73728 * eps^7
-         + 9039/327680 * eps^9;
-C1'[2] = + 5/16 * eps^2
-         - 37/96 * eps^4
-         + 1335/4096 * eps^6
-         - 86171/368640 * eps^8
-         + 4119073/28311552 * eps^10;
-C1'[3] = + 29/96 * eps^3
-         - 75/128 * eps^5
-         + 2901/4096 * eps^7
-         - 443327/655360 * eps^9;
-C1'[4] = + 539/1536 * eps^4
-         - 2391/2560 * eps^6
-         + 1082857/737280 * eps^8
-         - 2722891/1548288 * eps^10;
-C1'[5] = + 3467/7680 * eps^5
-         - 28223/18432 * eps^7
-         + 1361343/458752 * eps^9;
-C1'[6] = + 38081/61440 * eps^6
-         - 733437/286720 * eps^8
-         + 10820079/1835008 * eps^10;
-C1'[7] = + 459485/516096 * eps^7
-         - 709743/163840 * eps^9;
-C1'[8] = + 109167851/82575360 * eps^8
-         - 550835669/74317824 * eps^10;
-C1'[9] = + 83141299/41287680 * eps^9;
-C1'[10] = + 9303339907/2972712960 * eps^10;
-\endverbatim
-
-The reduced length is given by
-
-    <i>m</i>/\e b =
-sqrt(1 + <i>k</i><sup>2</sup> sin<sup>2</sup><i>sigma</i><sub>2</sub>)
-cos <i>sigma</i><sub>1</sub> sin <i>sigma</i><sub>2</sub><br>
-            -
-sqrt(1 + <i>k</i><sup>2</sup> sin<sup>2</sup><i>sigma</i><sub>1</sub>)
-sin <i>sigma</i><sub>1</sub> cos <i>sigma</i><sub>2</sub><br>
-            -
-cos <i>sigma</i><sub>1</sub>  cos <i>sigma</i><sub>2</sub>
-(\e J(<i>sigma</i><sub>2</sub>) - \e J(<i>sigma</i><sub>1</sub>))
-
-where
-
-    \e J(\e sigma) =
-\e I1(\e sigma) - \e I2(\e sigma)<br>
-    \e I2(\e sigma) = \e A2 (\e sigma + \e B2(\e sigma))<br>
-    \e B2(\e sigma) =
-sum<sub>\e j = 1</sub> \e C2<sub>j</sub> sin(2 \e j \e sigma)
-
-\verbatim
-A2 = (1 + 1/4 * eps^2
-        + 9/64 * eps^4
-        + 25/256 * eps^6
-        + 1225/16384 * eps^8
-        + 3969/65536 * eps^10) * (1 - eps);
-\endverbatim
-
-\verbatim
-C2[1] = + 1/2 * eps
-        + 1/16 * eps^3
-        + 1/32 * eps^5
-        + 41/2048 * eps^7
-        + 59/4096 * eps^9;
-C2[2] = + 3/16 * eps^2
-        + 1/32 * eps^4
-        + 35/2048 * eps^6
-        + 47/4096 * eps^8
-        + 557/65536 * eps^10;
-C2[3] = + 5/48 * eps^3
-        + 5/256 * eps^5
-        + 23/2048 * eps^7
-        + 191/24576 * eps^9;
-C2[4] = + 35/512 * eps^4
-        + 7/512 * eps^6
-        + 133/16384 * eps^8
-        + 47/8192 * eps^10;
-C2[5] = + 63/1280 * eps^5
-        + 21/2048 * eps^7
-        + 51/8192 * eps^9;
-C2[6] = + 77/2048 * eps^6
-        + 33/4096 * eps^8
-        + 2607/524288 * eps^10;
-C2[7] = + 429/14336 * eps^7
-        + 429/65536 * eps^9;
-C2[8] = + 6435/262144 * eps^8
-        + 715/131072 * eps^10;
-C2[9] = + 12155/589824 * eps^9;
-C2[10] = + 46189/2621440 * eps^10;
-\endverbatim
-
-The longitude is given in terms of the spherical longitude by
-
-   
-\e lambda = \e omega - \e f sin <i>alpha</i><sub>0</sub> \e I3(\e sigma)
-
-where
-
-    \e I3(\e sigma) = \e A3 (\e sigma + \e B3(\e sigma))<br>
-    \e B3(\e sigma) =
-sum<sub>\e j = 1</sub> \e C3<sub>j</sub> sin(2 \e j \e sigma)
-
-and
-
-\verbatim
-A3 = 1 - (1/2 - 1/2 * n) * eps
-       - (1/4 + 1/8 * n - 3/8 * n^2) * eps^2
-       - (1/16 + 3/16 * n + 1/16 * n^2 - 5/16 * n^3) * eps^3
-       - (3/64 + 1/32 * n + 5/32 * n^2 + 5/128 * n^3 - 35/128 * n^4) * eps^4
-       - (3/128 + 5/128 * n + 5/256 * n^2 + 35/256 * n^3 + 7/256 * n^4) * eps^5
-       - (5/256 + 15/1024 * n + 35/1024 * n^2 + 7/512 * n^3) * eps^6
-       - (25/2048 + 35/2048 * n + 21/2048 * n^2) * eps^7
-       - (175/16384 + 35/4096 * n) * eps^8
-       - 245/32768 * eps^9;
-\endverbatim
-
-\verbatim
-C3[1] = + (1/4 - 1/4 * n) * eps
-        + (1/8 - 1/8 * n^2) * eps^2
-        + (3/64 + 3/64 * n - 1/64 * n^2 - 5/64 * n^3) * eps^3
-        + (5/128 + 1/64 * n + 1/64 * n^2 - 1/64 * n^3 - 7/128 * n^4) * eps^4
-        + (3/128 + 11/512 * n + 3/512 * n^2 + 1/256 * n^3 - 7/512 * n^4) * eps^5
-        + (21/1024 + 5/512 * n + 13/1024 * n^2 + 1/512 * n^3) * eps^6
-        + (243/16384 + 189/16384 * n + 83/16384 * n^2) * eps^7
-        + (435/32768 + 109/16384 * n) * eps^8
-        + 345/32768 * eps^9;
-C3[2] = + (1/16 - 3/32 * n + 1/32 * n^2) * eps^2
-        + (3/64 - 1/32 * n - 3/64 * n^2 + 1/32 * n^3) * eps^3
-        + (3/128 + 1/128 * n - 9/256 * n^2 - 3/128 * n^3 + 7/256 * n^4) * eps^4
-        + (5/256 + 1/256 * n - 1/128 * n^2 - 7/256 * n^3 - 3/256 * n^4) * eps^5
-        + (27/2048 + 69/8192 * n - 39/8192 * n^2 - 47/4096 * n^3) * eps^6
-        + (187/16384 + 39/8192 * n + 31/16384 * n^2) * eps^7
-        + (287/32768 + 47/8192 * n) * eps^8
-        + 255/32768 * eps^9;
-C3[3] = + (5/192 - 3/64 * n + 5/192 * n^2 - 1/192 * n^3) * eps^3
-        + (3/128 - 5/192 * n - 1/64 * n^2 + 5/192 * n^3 - 1/128 * n^4) * eps^4
-        + (7/512 - 1/384 * n - 77/3072 * n^2 + 5/3072 * n^3 + 65/3072 * n^4) * eps^5
-        + (3/256 - 1/1024 * n - 71/6144 * n^2 - 47/3072 * n^3) * eps^6
-        + (139/16384 + 143/49152 * n - 383/49152 * n^2) * eps^7
-        + (243/32768 + 95/49152 * n) * eps^8
-        + 581/98304 * eps^9;
-C3[4] = + (7/512 - 7/256 * n + 5/256 * n^2 - 7/1024 * n^3 + 1/1024 * n^4) * eps^4
-        + (7/512 - 5/256 * n - 7/2048 * n^2 + 9/512 * n^3 - 21/2048 * n^4) * eps^5
-        + (9/1024 - 43/8192 * n - 129/8192 * n^2 + 39/4096 * n^3) * eps^6
-        + (127/16384 - 23/8192 * n - 165/16384 * n^2) * eps^7
-        + (193/32768 + 3/8192 * n) * eps^8
-        + 171/32768 * eps^9;
-C3[5] = + (21/2560 - 9/512 * n + 15/1024 * n^2 - 7/1024 * n^3 + 9/5120 * n^4) * eps^5
-        + (9/1024 - 15/1024 * n + 3/2048 * n^2 + 57/5120 * n^3) * eps^6
-        + (99/16384 - 91/16384 * n - 781/81920 * n^2) * eps^7
-        + (179/32768 - 55/16384 * n) * eps^8
-        + 141/32768 * eps^9;
-C3[6] = + (11/2048 - 99/8192 * n + 275/24576 * n^2 - 77/12288 * n^3) * eps^6
-        + (99/16384 - 275/24576 * n + 55/16384 * n^2) * eps^7
-        + (143/32768 - 253/49152 * n) * eps^8
-        + 33/8192 * eps^9;
-C3[7] = + (429/114688 - 143/16384 * n + 143/16384 * n^2) * eps^7
-        + (143/32768 - 143/16384 * n) * eps^8
-        + 429/131072 * eps^9;
-C3[8] = + (715/262144 - 429/65536 * n) * eps^8
-        + 429/131072 * eps^9;
-C3[9] = + 2431/1179648 * eps^9;
-\endverbatim
-
-The formula for area between the geodesic and the equator is given in
-Sec. 15 of
-<a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>
-in terms of \e S,
-
-   
-\e S = <i>c</i><sup>2</sup> \e alpha + <i>e</i><sup>2</sup>
-<i>a</i><sup>2</sup> cos <i>alpha</i><sub>0</sub> sin
-<i>alpha</i><sub>0</sub> \e I4(\e sigma)
-
-where
-
-    \e I4(\e sigma) =
-sum<sub>\e j = 0</sub> \e C4<sub>j</sub> cos((2\e j + 1) \e sigma)
-
-with
-
-\verbatim
-C4[0] = + (2/3 - 1/15 * ep2 + 4/105 * ep2^2 - 8/315 * ep2^3 + 64/3465 * ep2^4 - 128/9009 * ep2^5 + 512/45045 * ep2^6 - 1024/109395 * ep2^7 + 16384/2078505 * ep2^8 - 32768/4849845 * ep2^9)
-        - (1/20 - 1/35 * ep2 + 2/105 * ep2^2 - 16/1155 * ep2^3 + 32/3003 * ep2^4 - 128/15015 * ep2^5 + 256/36465 * ep2^6 - 4096/692835 * ep2^7 + 8192/1616615 * ep2^8) * k2
-        + (1/42 - 1/63 * ep2 + 8/693 * ep2^2 - 80/9009 * ep2^3 + 64/9009 * ep2^4 - 128/21879 * ep2^5 + 2048/415701 * ep2^6 - 4096/969969 * ep2^7) * k2^2
-        - (1/72 - 1/99 * ep2 + 10/1287 * ep2^2 - 8/1287 * ep2^3 + 112/21879 * ep2^4 - 1792/415701 * ep2^5 + 512/138567 * ep2^6) * k2^3
-        + (1/110 - 1/143 * ep2 + 4/715 * ep2^2 - 56/12155 * ep2^3 + 896/230945 * ep2^4 - 768/230945 * ep2^5) * k2^4
-        - (1/156 - 1/195 * ep2 + 14/3315 * ep2^2 - 224/62985 * ep2^3 + 64/20995 * ep2^4) * k2^5
-        + (1/210 - 1/255 * ep2 + 16/4845 * ep2^2 - 32/11305 * ep2^3) * k2^6
-        - (1/272 - 1/323 * ep2 + 6/2261 * ep2^2) * k2^7
-        + (1/342 - 1/399 * ep2) * k2^8
-        - 1/420 * k2^9;
-C4[1] = + (1/180 - 1/315 * ep2 + 2/945 * ep2^2 - 16/10395 * ep2^3 + 32/27027 * ep2^4 - 128/135135 * ep2^5 + 256/328185 * ep2^6 - 4096/6235515 * ep2^7 + 8192/14549535 * ep2^8) * k2
-        - (1/252 - 1/378 * ep2 + 4/2079 * ep2^2 - 40/27027 * ep2^3 + 32/27027 * ep2^4 - 64/65637 * ep2^5 + 1024/1247103 * ep2^6 - 2048/2909907 * ep2^7) * k2^2
-        + (1/360 - 1/495 * ep2 + 2/1287 * ep2^2 - 8/6435 * ep2^3 + 112/109395 * ep2^4 - 1792/2078505 * ep2^5 + 512/692835 * ep2^6) * k2^3
-        - (1/495 - 2/1287 * ep2 + 8/6435 * ep2^2 - 112/109395 * ep2^3 + 1792/2078505 * ep2^4 - 512/692835 * ep2^5) * k2^4
-        + (5/3276 - 1/819 * ep2 + 2/1989 * ep2^2 - 32/37791 * ep2^3 + 64/88179 * ep2^4) * k2^5
-        - (1/840 - 1/1020 * ep2 + 4/4845 * ep2^2 - 8/11305 * ep2^3) * k2^6
-        + (7/7344 - 7/8721 * ep2 + 2/2907 * ep2^2) * k2^7
-        - (2/2565 - 4/5985 * ep2) * k2^8
-        + 1/1540 * k2^9;
-C4[2] = + (1/2100 - 1/3150 * ep2 + 4/17325 * ep2^2 - 8/45045 * ep2^3 + 32/225225 * ep2^4 - 64/546975 * ep2^5 + 1024/10392525 * ep2^6 - 2048/24249225 * ep2^7) * k2^2
-        - (1/1800 - 1/2475 * ep2 + 2/6435 * ep2^2 - 8/32175 * ep2^3 + 112/546975 * ep2^4 - 1792/10392525 * ep2^5 + 512/3464175 * ep2^6) * k2^3
-        + (1/1925 - 2/5005 * ep2 + 8/25025 * ep2^2 - 16/60775 * ep2^3 + 256/1154725 * ep2^4 - 1536/8083075 * ep2^5) * k2^4
-        - (1/2184 - 1/2730 * ep2 + 1/3315 * ep2^2 - 16/62985 * ep2^3 + 32/146965 * ep2^4) * k2^5
-        + (1/2520 - 1/3060 * ep2 + 4/14535 * ep2^2 - 8/33915 * ep2^3) * k2^6
-        - (7/20400 - 7/24225 * ep2 + 2/8075 * ep2^2) * k2^7
-        + (14/47025 - 4/15675 * ep2) * k2^8
-        - 1/3850 * k2^9;
-C4[3] = + (1/17640 - 1/24255 * ep2 + 2/63063 * ep2^2 - 8/315315 * ep2^3 + 16/765765 * ep2^4 - 256/14549535 * ep2^5 + 512/33948915 * ep2^6) * k2^3
-        - (1/10780 - 1/14014 * ep2 + 2/35035 * ep2^2 - 4/85085 * ep2^3 + 64/1616615 * ep2^4 - 384/11316305 * ep2^5) * k2^4
-        + (5/45864 - 1/11466 * ep2 + 1/13923 * ep2^2 - 16/264537 * ep2^3 + 32/617253 * ep2^4) * k2^5
-        - (1/8820 - 1/10710 * ep2 + 8/101745 * ep2^2 - 16/237405 * ep2^3) * k2^6
-        + (1/8976 - 1/10659 * ep2 + 2/24871 * ep2^2) * k2^7
-        - (1/9405 - 2/21945 * ep2) * k2^8
-        + 1/10010 * k2^9;
-C4[4] = + (1/124740 - 1/162162 * ep2 + 2/405405 * ep2^2 - 4/984555 * ep2^3 + 64/18706545 * ep2^4 - 128/43648605 * ep2^5) * k2^4
-        - (1/58968 - 1/73710 * ep2 + 1/89505 * ep2^2 - 16/1700595 * ep2^3 + 32/3968055 * ep2^4) * k2^5
-        + (1/41580 - 1/50490 * ep2 + 8/479655 * ep2^2 - 16/1119195 * ep2^3) * k2^6
-        - (7/242352 - 7/287793 * ep2 + 2/95931 * ep2^2) * k2^7
-        + (7/220077 - 2/73359 * ep2) * k2^8
-        - 1/30030 * k2^9;
-C4[5] = + (1/792792 - 1/990990 * ep2 + 1/1203345 * ep2^2 - 16/22863555 * ep2^3 + 32/53348295 * ep2^4) * k2^5
-        - (1/304920 - 1/370260 * ep2 + 4/1758735 * ep2^2 - 8/4103715 * ep2^3) * k2^6
-        + (7/1283568 - 7/1524237 * ep2 + 2/508079 * ep2^2) * k2^7
-        - (2/268983 - 4/627627 * ep2) * k2^8
-        + 1/110110 * k2^9;
-C4[6] = + (1/4684680 - 1/5688540 * ep2 + 4/27020565 * ep2^2 - 8/63047985 * ep2^3) * k2^6
-        - (1/1516944 - 1/1801371 * ep2 + 2/4203199 * ep2^2) * k2^7
-        + (2/1589445 - 4/3708705 * ep2) * k2^8
-        - 1/520520 * k2^9;
-C4[7] = + (1/26254800 - 1/31177575 * ep2 + 2/72747675 * ep2^2) * k2^7
-        - (1/7335900 - 1/8558550 * ep2) * k2^8
-        + 1/3403400 * k2^9;
-C4[8] = + (1/141338340 - 1/164894730 * ep2) * k2^8
-        - 1/34714680 * k2^9;
-C4[9] = + 1/737176440 * k2^9;
-\endverbatim
-
-<center>
-Back to \ref magnetic.  Forward to \ref transversemercator.  Up to
-\ref contents.
-</center>
-**********************************************************************/
-/**
-\page transversemercator Transverse Mercator projection
-
-<center>
-Back to \ref geodesic.  Forward to \ref geocentric.  Up to \ref contents.
-</center>
-
-GeographicLib::TransverseMercator and
-GeographicLib::TransverseMercatorExact provide accurate implementations
-of the transverse Mercator projection.  The
- <a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a>
-utility provides an interface to these classes.
-
-References
- - L. Krüger,
-   <a href="http://dx.doi.org/10.2312/GFZ.b103-krueger28"> Konforme
-   Abbildung des Erdellipsoids in der Ebene</a> (Conformal mapping of
-   the ellipsoidal earth to the plane), Royal Prussian Geodetic Institute,
-   New Series 52, 172 pp. (1912).
- - L. P. Lee,
-   Conformal Projections Based on Elliptic Functions,
-   (B. V. Gutsell, Toronto, 1976), 128pp.,
-   ISBN: 0919870163
-   (Also appeared as:
-   Monograph 16, Suppl. No. 1 to Canadian Cartographer, Vol 13).
-   Part V, pp. 67–101,
-   <a href="http://dx.doi.org/10.3138/X687-1574-4325-WM62">Conformal
-   Projections Based On Jacobian Elliptic Functions</a>.
- - C. F. F. Karney,
-   <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
-   Transverse Mercator with an accuracy of a few nanometers,</a>
-   J. Geodesy 85(8), 475–485 (Aug. 2011);
-   preprint
-   <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>;
-   resource page
-   <a href="http://geographiclib.sf.net/tm.html">tm.html</a>.
- .
-The algorithm for GeographicLib::TransverseMercator is based on
-Krüger (1912); that for GeographicLib::TransverseMercatorExact is
-based on Lee (1976).
-
-See <a href="http://geographiclib.sourceforge.net/tm-grid.kmz"
-type="application/vnd.google-earth.kmz"> tm-grid.kmz</a>, for an
-illustration of the exact transverse Mercator grid in Google Earth.
-
-\section testmerc Test data for the transverse Mercator projection
-
-A test set for the transverse Mercator projection is available at
- - <a href="http://sf.net/projects/geographiclib/files/testdata/TMcoords.dat.gz/download">
-   TMcoords.dat.gz</a>
- .
-This is about 17 MB (compressed).  This test set consists of a set of
-geographic coordinates together with the corresponding transverse
-Mercator coordinates.  The WGS84 ellipsoid is used, with central
-meridian 0<sup>o</sup>, central scale factor 0.9996 (the UTM value),
-false easting = false northing = 0 m.
-
-Each line of the test set gives 6 space delimited numbers
- - latitude (degrees, exact)
- - longitude (degrees, exact — see below)
- - easting (meters, accurate to 0.1 pm)
- - northing (meters, accurate to 0.1 pm)
- - meridian convergence (degrees, accurate to 10<sup>-18</sup> deg)
- - scale (accurate to 10<sup>-20</sup>)
- .
-The latitude and longitude are all multiples of 10<sup>-12</sup> deg and
-should be regarded as exact, except that longitude =
-82.63627282416406551 should be interpreted as exactly 90 (1 - \e e)
-degrees.  These results are computed using Lee's formulas with
-<a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a>'s
-bfloats and fpprec set to 80 (so the errors in the data are probably 1/2
-of the values quoted above).  The Maxima code,
-<a href="tm.mac">tm.mac</a> and <a href="ellint.mac">ellint.mac</a>,
-used to prepare this data set is included in the distribution.  You will
-need to have Maxima installed to use this code.  The comments at the top
-of <a href="tm.mac">tm.mac</a> illustrate how to run it.
-
-The contents of the file are as follows:
- - 250000 entries randomly distributed in lat in [0, 90], lon in [0, 90];
- - 1000 entries randomly distributed on lat in [0, 90], lon = 0;
- - 1000 entries randomly distributed on lat = 0, lon in [0, 90];
- - 1000 entries randomly distributed on lat in [0, 90], lon = 90;
- - 1000 entries close to lat = 90 with lon in [0, 90];
- - 1000 entries close to lat = 0, lon = 0 with lat >= 0, lon >= 0;
- - 1000 entries close to lat = 0, lon = 90 with lat >= 0, lon <= 90;
- - 2000 entries close to lat = 0, lon = 90 (1 - \e e) with lat >= 0;
- - 25000 entries randomly distributed in lat
-   in [-89, 0], lon in [90 (1 - \e e), 90];
- - 1000 entries randomly distributed on lat in [-89, 0], lon = 90;
- - 1000 entries randomly distributed on lat in [-89, 0], lon = 90 (1 - \e e);
- - 1000 entries close to lat = 0, lon = 90 (lat < 0, lon <= 90);
- - 1000 entries close to lat = 0, lon = 90 (1 - \e e)
-   (lat < 0, lon <= 90 (1 - \e e));
- .
-(a total of 287000 entries).  The entries for lat < 0<sup>o</sup> and
-lon in [90<sup>o</sup> (1 - \e e), 90<sup>o</sup>] use the "extended"
-domain for the transverse Mercator projection explained in Sec. 5 of
-<a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.  The first
-258000 entries have lat >= 0<sup>o</sup> and are suitable for testing
-implementations following the standard convention.
-
-\section tmseries Series approximation for transverse Mercator
-
-Krüger (1912) gives a 4th-order approximation to the transverse
-Mercator projection.  This is accurate to about 200 nm (200 nanometers)
-within the UTM domain.  Here we present the series extended to 10th
-order.  By default, GeographicLib::TransverseMercator uses the 6th-order
-approximation. The preprocessor variable TM_TX_MAXPOW can be used to
-select an order from 4 thru 8.  The series expanded to order
-<i>n</i><sup>30</sup> are given in
-<a href="tmseries30.html"> tmseries30.html</a>.
-
-In the formulas below ^ indicates exponentiation (\e n^3 = \e n*\e n*\e
-n) and / indicates real division (3/5 = 0.6).  The equations need to be
-converted to Horner form, but are here left in expanded form so that
-they can be easily truncated to lower order in \e n.  Some of the
-integers here are not representable as 32-bit integers and will need to
-be included as double literals.
-
-\e A in Krüger, p. 12, eq. (5)
-\verbatim
-  A = a/(n + 1) * (1 + 1/4 * n^2
-                     + 1/64 * n^4
-                     + 1/256 * n^6
-                     + 25/16384 * n^8
-                     + 49/65536 * n^10);
-\endverbatim
-
-\e gamma in Krüger, p. 21, eq. (41)
-\verbatim
-alpha[1] =   1/2 * n
-           - 2/3 * n^2
-           + 5/16 * n^3
-           + 41/180 * n^4
-           - 127/288 * n^5
-           + 7891/37800 * n^6
-           + 72161/387072 * n^7
-           - 18975107/50803200 * n^8
-           + 60193001/290304000 * n^9
-           + 134592031/1026432000 * n^10;
-alpha[2] =   13/48 * n^2
-           - 3/5 * n^3
-           + 557/1440 * n^4
-           + 281/630 * n^5
-           - 1983433/1935360 * n^6
-           + 13769/28800 * n^7
-           + 148003883/174182400 * n^8
-           - 705286231/465696000 * n^9
-           + 1703267974087/3218890752000 * n^10;
-alpha[3] =   61/240 * n^3
-           - 103/140 * n^4
-           + 15061/26880 * n^5
-           + 167603/181440 * n^6
-           - 67102379/29030400 * n^7
-           + 79682431/79833600 * n^8
-           + 6304945039/2128896000 * n^9
-           - 6601904925257/1307674368000 * n^10;
-alpha[4] =   49561/161280 * n^4
-           - 179/168 * n^5
-           + 6601661/7257600 * n^6
-           + 97445/49896 * n^7
-           - 40176129013/7664025600 * n^8
-           + 138471097/66528000 * n^9
-           + 48087451385201/5230697472000 * n^10;
-alpha[5] =   34729/80640 * n^5
-           - 3418889/1995840 * n^6
-           + 14644087/9123840 * n^7
-           + 2605413599/622702080 * n^8
-           - 31015475399/2583060480 * n^9
-           + 5820486440369/1307674368000 * n^10;
-alpha[6] =   212378941/319334400 * n^6
-           - 30705481/10378368 * n^7
-           + 175214326799/58118860800 * n^8
-           + 870492877/96096000 * n^9
-           - 1328004581729009/47823519744000 * n^10;
-alpha[7] =   1522256789/1383782400 * n^7
-           - 16759934899/3113510400 * n^8
-           + 1315149374443/221405184000 * n^9
-           + 71809987837451/3629463552000 * n^10;
-alpha[8] =   1424729850961/743921418240 * n^8
-           - 256783708069/25204608000 * n^9
-           + 2468749292989891/203249958912000 * n^10;
-alpha[9] =   21091646195357/6080126976000 * n^9
-           - 67196182138355857/3379030566912000 * n^10;
-alpha[10]=   77911515623232821/12014330904576000 * n^10;
-\endverbatim
-
-\e beta in Krüger, p. 18, eq. (26*)
-\verbatim
- beta[1] =   1/2 * n
-           - 2/3 * n^2
-           + 37/96 * n^3
-           - 1/360 * n^4
-           - 81/512 * n^5
-           + 96199/604800 * n^6
-           - 5406467/38707200 * n^7
-           + 7944359/67737600 * n^8
-           - 7378753979/97542144000 * n^9
-           + 25123531261/804722688000 * n^10;
- beta[2] =   1/48 * n^2
-           + 1/15 * n^3
-           - 437/1440 * n^4
-           + 46/105 * n^5
-           - 1118711/3870720 * n^6
-           + 51841/1209600 * n^7
-           + 24749483/348364800 * n^8
-           - 115295683/1397088000 * n^9
-           + 5487737251099/51502252032000 * n^10;
- beta[3] =   17/480 * n^3
-           - 37/840 * n^4
-           - 209/4480 * n^5
-           + 5569/90720 * n^6
-           + 9261899/58060800 * n^7
-           - 6457463/17740800 * n^8
-           + 2473691167/9289728000 * n^9
-           - 852549456029/20922789888000 * n^10;
- beta[4] =   4397/161280 * n^4
-           - 11/504 * n^5
-           - 830251/7257600 * n^6
-           + 466511/2494800 * n^7
-           + 324154477/7664025600 * n^8
-           - 937932223/3891888000 * n^9
-           - 89112264211/5230697472000 * n^10;
- beta[5] =   4583/161280 * n^5
-           - 108847/3991680 * n^6
-           - 8005831/63866880 * n^7
-           + 22894433/124540416 * n^8
-           + 112731569449/557941063680 * n^9
-           - 5391039814733/10461394944000 * n^10;
- beta[6] =   20648693/638668800 * n^6
-           - 16363163/518918400 * n^7
-           - 2204645983/12915302400 * n^8
-           + 4543317553/18162144000 * n^9
-           + 54894890298749/167382319104000 * n^10;
- beta[7] =   219941297/5535129600 * n^7
-           - 497323811/12454041600 * n^8
-           - 79431132943/332107776000 * n^9
-           + 4346429528407/12703122432000 * n^10;
- beta[8] =   191773887257/3719607091200 * n^8
-           - 17822319343/336825216000 * n^9
-           - 497155444501631/1422749712384000 * n^10;
- beta[9] =   11025641854267/158083301376000 * n^9
-           - 492293158444691/6758061133824000 * n^10;
- beta[10]=   7028504530429621/72085985427456000 * n^10;
-\endverbatim
-
-The high-order expansions for \e alpha and \e beta were produced by the
-Maxima program <a href="tmseries.mac">tmseries.mac</a> (included in the
-distribution).  To run, start Maxima and enter
-\verbatim
-  load("tmseries.mac")$
-\endverbatim
-Further instructions are included at the top of the file.
-
-<center>
-Back to \ref geodesic.  Forward to \ref geocentric.  Up to \ref contents.
-</center>
-**********************************************************************/
-/**
-\page geocentric Geocentric coordinates
-
-<center>
-Back to \ref transversemercator.  Forward to \ref old.  Up to \ref contents.
-</center>
-
-The implementation of GeographicLib::Geocentric::Reverse is adapted from
- - H. Vermeille,
-   <a href="http://dx.doi.org/10.1007/s00190-002-0273-6">
-   Direct transformation from geocentric coordinates to geodetic
-   coordinates</a>, J. Geodesy 76, 451–454 (2002).
-
-This provides a closed-form solution but can't directly be applied close to
-the center of the earth.  Several changes have been made to remove this
-restriction and to improve the numerical accuracy.  Now the method is
-accurate for all inputs (even if \e h is infinite).  The changes are
-described in Appendix B of
- - C. F. F. Karney,
-   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
-   on an ellipsoid of revolution</a>,
-   Feb. 2011; preprint
-   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.
-
-The problems encountered near the center of the ellipsoid are:
- - There's a potential division by zero in the definition of \e s. The
-   equations are easily reformulated to avoid this problem.
- - <i>t</i><sup>3</sup> may be negative.  This is OK; we just take the
-   real root.
- - The solution for \e t may be complex.  However this leads to 3 real roots
-   for <i>u</i>/\e r.  It's then just a matter of picking the one that computes
-   the geodetic result which minimizes |\e h| and which avoids large
-   round-off errors.
- - Some of the equations result in a large loss of accuracy due to
-   subtracting nearly equal quantities.  E.g., \e k= sqrt(\e u + \e v +
-   <i>w</i><sup>2</sup>) - \e w is inaccurate if \e u + \e v is small;
-   we can fix this by writing \e k = (\e u + \e v)/(sqrt(\e u + \e v +
-   <i>w</i><sup>2</sup>) + \e w).
-
-The error is computed as follows.  Write a version of
-Geocentric::WGS84.Forward which uses long doubles (including using long
-doubles for the WGS84 parameters).  Generate random (long double)
-geodetic coordinates (\e lat0, \e lon0, \e h0) and use the "long double"
-WGS84.Forward to obtain the corresponding (long double) geocentric
-coordinates (\e x0, \e y0, \e z0).  [We restrict \e h0 so that
-\e h0 >= - \e a (1 - <i>e</i><sup>2</sup>) / sqrt(1 -
-<i>e</i><sup>2</sup> sin<sup>2</sup>\e lat0), which ensures that (\e
-lat0, \e lon0, \e h0) is the principal geodetic inverse of (\e x0, \e
-y0, \e z0).]  Because the forward calculation is numerically stable and
-because long doubles (on Linux systems using g++) provide 11 bits
-additional accuracy (about 3.3 decimal digits), we regard this set of
-test data as exact.
-
-Apply the double version of WGS84.Reverse to (\e x0, \e y0, \e z0) to
-compute the approximate geodetic coordinates (\e lat1, \e lon1, \e h1).
-Convert (\e lat1 - \e lat0, \e lon1 - \e lon0) to a distance, \e ds, on the
-surface of the ellipsoid and define \e err = hypot(\e ds, \e h1 - \e h0).
-For |\e h0| < 5000 km, we have \e err < 7 nm (7 nanometers).
-
-This methodology is not very useful very far from the globe, because the
-absolute errors in the approximate geodetic height become large, or
-within 50 km of the center of the earth, because of errors in computing
-the approximate geodetic latitude.  To illustrate the second issue, the
-maximum value of \e err for \e h0 < 0 is about 80 mm.  The error is
-maximum close to the circle given by geocentric coordinates satisfying
-hypot(\e x, \e y) = \e a <i>e</i><sup>2</sup> (= 42.7 km), \e z = 0.
-(This is the center of meridional curvature for \e lat = 0.)  The
-geodetic latitude for these points is \e lat = 0.  However, if we move 1
-nm towards the center of the earth, the geodetic latitude becomes 0.04",
-a distance of 1.4 m from the equator.  If, instead, we move 1 nm up, the
-geodetic latitude becomes 7.45", a distance of 229 m from the equator.
-In light of this, Reverse does quite well in this vicinity.
-
-To obtain a practical measure of the error for the general case we define
-- <i>err</i><sub>h</sub> = |\e h1 - \e h0| / max(1, \e h0 / \e a)
-- for \e h0 > 0, <i>err</i><sub>out</sub> = \e ds
-- for \e h0 < 0, apply the long double version of WGS84.Forward to (\e lat1,
-  \e lon1, \e h1) to give (\e x1, \e y1, \e z1) and compute
-  <i>err</i><sub>in</sub> = hypot(\e x1 - \e x0, \e y1 - \e y0, \e z1 - \e
-  z0).
-.
-We then find <i>err</i><sub>h</sub> < 8 nm, <i>err</i><sub>out</sub> < 4 nm,
-and <i>err</i><sub>in</sub> < 7 nm.  (1 nm = 1 nanometer.)
-
-The testing has been confined to the WGS84 ellipsoid.  The method will work
-for all ellipsoids used in terrestrial geodesy.  However, the central region,
-which leads to multiple real roots for the cubic equation in Reverse, pokes
-outside the ellipsoid (at the poles) for ellipsoids with \e e > 1/sqrt(2).
-Reverse has not been analyzed for this case.  Similarly ellipsoids which are
-very nearly spherical near yield inaccurate results due to underflow; in the
-other hand, the case of the sphere, \e f = 0, is treated specially and gives
-accurate results.
-
-Other comparable methods are K. M. Borkowski,
-<a href="http://dx.doi.org/10.1007/BF00643807"> Transformation
-of geocentric to geodetic coordinates without approximations</a>,
-Astrophys. Space Sci. 139, 1–4 (1987)
-(<a href="http://dx.doi.org/10.1007/BF00656995"> erratum</a>)
-and T. Fukushima,
-<a href="http://dx.doi.org/10.1007/s001900050271"> Fast transform from
-geocentric to geodetic coordinates</a>, J. Geodesy 73, 603–610 (2003).
-However the choice of independent variables in these methods leads
-to a loss of accuracy for points near the equatorial plane.
-
-<center>
-Back to \ref transversemercator.  Forward to \ref old.  Up to \ref contents.
-
-</center>
-**********************************************************************/
-/**
-\page old Old versions
-
-<center>
-Back to \ref geocentric.  Up to \ref contents.
-</center>
-
-List of versions in reverse chronological order together with a brief
-list of changes.  (Note: Old versions of the library use a year-month
-style of numbering.  Now, the library uses a major and minor version
-number.)  Recent versions of %GeographicLib are available at
-<a href="http://sf.net/projects/geographiclib/files/distrib/">
-http://sourceforge.net/projects/geographiclib/files/distrib/</a>.
-Older versions are in
-<a href="http://sf.net/projects/geographiclib/files/distrib/archive/">
-http://sourceforge.net/projects/geographiclib/files/distrib/archive/</a>.
-
- - Version 1.21 (released 2012-04-25)
-  - Support colon-separated DMS output:
-     - GeographicLib::DMS::Encode and
-       GeographicLib::GeoCoords::DMSRepresentation generalized;
-     - <a href="GeoConvert.1.html">GeoConvert</a> and
-       <a href="Geod.1.html">Geod</a> now accept a -: option.
-  - <a href="GeoidEval.1.html">GeoidEval</a> does not print the gradient
-    of the geoid height by default (because it's subject to large
-    errors); give the -g option to get the gradient printed.
-  - Work around optimization BUG in GeographicLib::Geodesic::Inverse
-    with tdm mingw g++ version 4.6.1.
-  - autoconf fixed to ensure that that out-of-sources builds work;
-    document this as the preferred method of using autoconf.
-  - cmake tweaks:
-     - simplify the configuration of doxygen;
-     - allow the Matlab compiler to be specified with the
-       MATLAB_COMPILER option.
-
- - Version 1.20 (released 2012-03-23)
-  - cmake tweaks:
-    - improve find_package's matching of compiler versions;
-    - CMAKE_INSTALL_PREFIX set from CMAKE_PREFIX_PATH if available;
-    - add "x64" to the package name for the 64-bit binary installer;
-    - fix cmake warning with Visual Studio Express.
-  - Fix GeographicLib::SphericalEngine to deal with aggessive iterator
-    checking by Visual Studio.
-  - Fix transcription BUG is Geodesic.js.
-
- - Version 1.19 (released 2012-03-13)
-  - Slight improvement in GeographicLib::Geodesic::Inverse for very
-    short lines.
-  - Fix argument checking tests in GeographicLib::MGRS::Forward.
-  - Add --comment-delimiter and --line-separator options to the \ref
-    utilities.
-  - Add installer for 64-bit Windows; the compiled Matlab interface is
-    supplied with the Windows 64-bit installer only.
-
- - Version 1.18 (released 2012-02-18)
-  - Improve documentation on configuration with cmake.
-  - cmake's find_package ensures that the compiler versions match on Windows.
-  - Improve documentation on compiling Matlab interface.
-  - Binary installer for Windows installs under C:/pkg-vc10 by default.
-
- - Version 1.17 (released 2012-01-21)
-  - Work around optimization BUG in GeographicLib::Geodesic::Inverse
-    with g++ version 4.4.0 (mingw).
-  - Fix BUG in argument checking with GeographicLib::OSGB::GridReference.
-  - Fix missing include file in GeographicLib::SphericalHarmonic2.
-  - Add simple examples of usage for each class.
-  - Add internal documentation to the cmake configuration files.
-
- - Version 1.16 (released 2011-12-07)
-  - Add calculation of the earth's gravitational field:
-    - add GeographicLib::NormalGravity GeographicLib::GravityModel and
-       GeographicLib::GravityCircle classes;
-    - add command line utility
-      <a href="Gravity.1.html">Gravity</a>;
-    - add \ref gravity;
-    - add GeographicLib::Constants::WGS84_GM(),
-       GeographicLib::Constants::WGS84_omega(), and similarly for GRS80.
-  - Build uses GEOGRAPHICLIB_DATA to specify a common parent directory
-     for geoid, gravity, and magnetic data (instead of
-     GEOGRAPHICLIB_GEOID_PATH, etc.); similarly,
-     <a href="GeoidEval.1.html">GeoidEval</a>,
-     <a href="Gravity.1.html">Gravity</a>, and
-     <a href="MagneticField.1.html">MagneticField</a>, look at the
-     environment variable GEOGRAPHICLIB_DATA to locate the data.
-  - Spherical harmonic software changes:
-     - capitalize enums GeographicLib::SphericalHarmonic::FULL and
-       GeographicLib::SphericalHarmonic::SCHMIDT (the lower case names
-       are retained but deprecated);
-     - optimize the sum by using a static table of square roots which is
-       updated by GeographicLib::SphericalEngine::RootTable;
-     - avoid overflow for high degree models.
-  - Magnetic software fixes:
-     - fix documentation BUG in GeographicLib::MagneticModel::Circle;
-     - make GeographicLib::MagneticModel constructor explicit;
-     - provide default GeographicLib::MagneticCircle constructor;
-     - add additional inspector functions to
-       GeographicLib::MagneticCircle;
-     - add -c option to <a href="MagneticField.1.html">MagneticField</a>;
-     - default height to zero in
-       <a href="MagneticField.1.html">MagneticField</a>.
-
- - Version 1.15 (released 2011-11-08)
-  - Add calculation of the earth's magnetic field:
-    - add GeographicLib::MagneticModel and GeographicLib::MagneticCircle
-      classes;
-    - add command line utility
-      <a href="MagneticField.1.html">MagneticField</a>;
-    - add \ref magnetic;
-    - add \ref magneticinst;
-    - add \ref magneticformat;
-    - add classes GeographicLib::SphericalEngine,
-      GeographicLib::CircularEngine, GeographicLib::SphericalHarmonic,
-      GeographicLib::SphericalHarmonic1, and
-      GeographicLib::SphericalHarmonic2. which sum spherical harmonic
-      series.
-  - Add GeographicLib::Utility class to support I/O and date
-    manipulation.
-  - Cmake configuration includes a _d suffix on the library built in
-    debug mode.
-  - For the Python package, include manifest and readme files; don't
-    install setup.py for non-Windows systems.
-  - Include Doxygen tag file in distribution as doc/html/Geographic.tag.
-
- - Version 1.14 (released 2011-09-30)
-  - Ensure that geographiclib-config.cmake is relocatable.
-  - Allow more unicode symbols to be used in GeographicLib::DMS::Decode.
-  - Modify <a href="GeoidEval.1.html">GeoidEval</a> so that it can be
-    used to convert the height datum for LIDAR data.
-  - Modest speed-up of Geodesic::Inverse.
-  - Changes in python interface:
-    - FIX BUG in transcription of Geodesic::Inverse;
-    - include setup.py for easy installation;
-    - python only distribution is available at
-      http://pypi.python.org/pypi/geographiclib
-  - Supply a minimal Qt qmake project file for library
-    src/Geographic.pro.
-
- - Version 1.13 (released 2011-08-13)
-  - Changes to I/O:
-    - allow : (colon) to be used as a DMS separator in
-      GeographicLib::DMS::Decode(const std::string&, flag&);
-    - also accept Unicode symbols for degrees, minutes, and seconds
-      (coded as UTF-8);
-    - provide optional \e swaplatlong argument to various
-      GeographicLib::DMS and GeographicLib::GeoCoords functions to make
-      longitude precede latitude;
-    - <a href="GeoConvert.1.html">GeoConvert</a> now has a -w option to
-      make longitude precede latitude on input and output;
-    - include a Javascript version of GeographicLib::DMS.
-  - Slight improvement in starting guess for solution of geographic
-    latitude in terms of conformal latitude in TransverseMercator,
-    TransverseMercatorExact, and LambertConformalConic.
-  - For most classes, get rid of const member variables so that the
-    default copy assignment works.
-  - Put GeographicLib::Math and GeographicLib::Accumulator in their own
-    header files.
-  - Remove unused "fast" GeographicLib::Accumulator method.
-  - Reorganize the \ref python.
-  - Withdraw some deprecated routines.
-  - cmake changes:
-    - include FindGeographic.cmake in distribution;
-    - building with cmake creates and installs
-      geographiclib-config.cmake;
-    - better support for building a shared library under Windows.
-
- - Version 1.12 (released 2011-07-21)
-  - Change license to MIT/X11.
-  - Add GeographicLib::PolygonArea class and equivalent Matlab function.
-  - Provide Javascript and Python implementations of geodesic routines.
-  - Fix Windows installer to include runtime dlls for Matlab.
-  - Fix (innocuous) unassigned variable in Geodesic::GenInverse.
-  - Geodesic routines in Matlab return a12 as first column of aux return
-    value (incompatible change).
-  - A couple of code changes to enable compilation with Visual
-    Studio 2003.
-
- - Version 1.11 (released 2011-06-27)
-  - Changes to <a href="Planimeter.1.html">Planimeter</a>:
-    - add -l flag to <a href="Planimeter.1.html">Planimeter</a> for polyline
-      calculations;
-    - trim precision of area to 3 decimal places;
-    - FIX BUG with pole crossing edges (due to compiler optimization).
-  - <a href="Geod.1.html">Geod</a> no longer reports the reduced length
-    by default; however the -f flag still reports this and in addition
-    gives the geodesic scales and the geodesic area.
-  - FIX BUGS (compiler-specific) in inverse geodesic calculations.
-  - FIX BUG: accommodate tellg() returning -1 at end of string.
-  - Change way flattening of the ellipsoid is specified:
-    - constructors take \e f argument which is taken to be the
-      flattening if \e f < 1 and the inverse flattening otherwise
-      (this is a compatible change for spheres and oblate ellipsoids, but it
-      is an INCOMPATIBLE change for prolate ellipsoids);
-    - the -e arguments to the \ref utilities are handled similarly; in
-      addition, simple fractions, e.g., 1/297, can be used for the
-      flattening;
-    - introduce GeographicLib::Constants::WGS84_f() for the WGS84
-      flattening (and deprecate Constants::WGS84_r() for the inverse
-      flattening);
-    - most classes have a Flattening() member function;
-    - InverseFlattening() has been deprecated (and now returns inf for a
-      sphere, instead of 0).
-
- - Version 1.10 (released 2011-06-11)
-  - Improvements to Matlab/Octave interface:
-     - add {geocentric,localcartesian}{forward,reverse};
-     - make geographiclibinterface more general;
-     - install the source for the interface;
-     - cmake compiles the interface if ENABLE_MATLAB=ON;
-     - include compiled interface with Windows binary installer.
-  - Fix various configuration issues
-     - autoconf did not install Config.h;
-     - cmake installed in man/man1 instead of share/man/man1;
-     - cmake did not set the rpath on the tools.
-
- - Version 1.9 (released 2011-05-28)
-  - FIX BUG in area returned by
-    <a href="Planimeter.1.html">Planimeter</a> for pole encircling polygons.
-  - FIX BUG in error message reported when DMS::Decode reads the string
-    "5d.".
-  - FIX BUG in AlbersEqualArea::Reverse (lon0 not being used).
-  - Ensure that all exceptions thrown in the \ref utilities are caught.
-  - Avoid using catch within GeographicLib::DMS.
-  - Move GeographicLib::Accumulator class from Planimeter.cpp to
-    Constants.hpp.
-  - Add GeographicLib::Math::sq<T>.
-  - Simplify \ref geoidinst
-    - add geographiclib-get-geoids for Unix-like systems;
-    - add installers for Windows.
-  - Provide cmake support:
-    - build binary installer for Windows;
-    - include regression tests;
-    - add --input-string, --input-file, --output-file options to the
-      \ref utilities to support tests.
-  - Rename utility EquidistantTest as <a href="GeodesicProj.1.html">
-    GeodesicProj</a> and TransverseMercatorTest as
-    <a href="TransverseMercatorProj.1.html"> TransverseMercatorProj</a>.
-  - Add <a href="ConicProj.1.html"> ConicProj</a>.
-  - Reverse the initial sense of the -s option for
-    <a href="Planimeter.1.html"> Planimeter</a>.
-  - Migrate source from subversion to
-    <a href="http://geographiclib.git.sf.net/git/gitweb-index.cgi">
-    git</a>.
-
- - Version 1.8 (released 2011-02-22)
-  - Optionally return rotation matrix from GeographicLib::Geocentric and
-    GeographicLib::LocalCartesian.
-  - For the \ref utilities, supply man pages, -h prints the synopsis,
-    --help prints the man page, --version prints the version.
-  - Use accurate summation in <a href="Planimeter.1.html">Planimeter</a>.
-  - Add 64-bit targets for Visual Studio 2010.
-  - Use templates for defining math functions and some constants.
-  - GeographicLib::Geoid updates
-    - Add GeographicLib::Geoid::DefaultGeoidPath and
-      GeographicLib::Geoid::DefaultGeoidName;
-    - <a href="GeoidEval.1.html">GeoidEval</a> uses environment variable
-      GEOID_NAME as the default geoid;
-    - Add --msltohae and --haetomsl as
-      <a href="GeoidEval.1.html">GeoidEval</a> options (and don't
-      document the single hyphen versions).
-  - Remove documentation that duplicates papers on transverse Mercator
-    and geodesics.
-
- - Version 1.7 (released 2010-12-21)
-  - FIX BUG in scale returned by GeographicLib::LambertConformalConic::Reverse.
-  - Add GeographicLib::AlbersEqualArea projection.
-  - Library created by Visual Studio is Geographic.lib instead of
-    GeographicLib.lib (compatible with makefiles).
-  - Make classes NaN aware.
-  - Use cell arrays for MGRS strings in Matlab.
-  - Add solution/project files for Visual Studio 2010 (32-bit only).
-  - Use C++11 static_assert and math functions, if available.
-
- - Version 1.6 (released 2010-11-23)
-  - FIX BUG introduced in GeographicLib::Geoid in version 1.5 (found by
-    Dave Edwards).
-
- - Version 1.5 (released 2010-11-19)
-  - Improve area calculations for small polygons.
-  - Add -s and -r flags to <a href="Planimeter.1.html">Planimeter</a>.
-  - Improve the accuracy of GeographicLib::LambertConformalConic using
-    divided differences.
-  - FIX BUG in meridian convergence returned by
-    LambertConformalConic::Forward.
-  - Add optional threadsafe parameter to GeographicLib::Geoid
-    constructor.  WARNING: This changes may break binary compatibility
-    with previous versions of %GeographicLib.  However, the library is
-    source compatible.
-  - Add GeographicLib::OSGB.
-  - Matlab and Octave interfaces to GeographicLib::UTMUPS,
-    GeographicLib::MGRS, GeographicLib::Geoid, GeographicLib::Geodesic
-    provided.
-  - Minor changes
-    - explicitly turn on optimization in Visual Studio 2008 projects;
-    - add missing dependencies in some Makefiles;
-    - move pi() and degree() from GeographicLib::Constants to
-      GeographicLib::Math;
-    - introduce GeographicLib::Math::extended type to aid testing;
-    - add GeographicLib::Math::epi() and GeographicLib::Math::edegree().
-    - fixes to compile under cygwin;
-    - tweak expression used to find latitude from conformal latitude.
-
- - Version 1.4 (released 2010-09-12)
-  - Changes to GeographicLib::Geodesic and GeographicLib::GeodesicLine:
-    - FIX BUG in Geodesic::Inverse with prolate ellipsoids;
-    - add area computations to Geodesic::Direct and Geodesic::Inverse;
-    - add geodesic areas to geodesic test set;
-    - make GeodesicLine constructor public;
-    - change longitude series in Geodesic into Helmert-like form;
-    - ensure that equatorial geodesics have cos(alpha0) = 0 identically;
-    - generalize interface for Geodesic and GeodesicLine;
-    - split GeodesicLine and Geodesic into different files;
-    - signal convergence failure in Geodesic::Inverse with NaNs;
-    - deprecate one function in Geodesic and two functions in
-      GeodesicLine;
-    - deprecate -n option for <a href="Geod.1.html">Geod</a>.
-    .
-    WARNING: These changes may break binary compatibility with previous
-    versions of %GeographicLib.  However, the library is source
-    compatible (with the proviso that GeographicLib/GeodesicLine.hpp may
-    now need to be included).
-  - Add the <a href="Planimeter.1.html">Planimeter</a> utility for
-    computing the areas of geodesic polygons.
-  - Improve iterative solution of GeographicLib::Gnomonic::Reverse.
-  - Add GeographicLib::Geoid::ConvertHeight.
-  - Add -msltohae, -haetomsl, and -z options to
-    <a href="GeoidEval.1.html">GeoidEval</a>.
-  - Constructors check that minor radius is positive.
-  - Add overloaded Forward and Reverse functions to the projection
-    classes which don't return the convergence (or azimuth) and scale.
-  - Document function parameters and return values consistently.
-
- - Version 1.3 (released 2010-07-21)
-  - Add GeographicLib::Gnomonic, the ellipsoid generalization of the
-    gnomonic projection.
-  - Add -g and -e options to
-    <a href="GeodesicProj.1.html">EquidistantTest</a>.
-  - Use fixed-point notation for output from
-    <a href="CartConvert.1.html">CartConvert</a>,
-    <a href="GeodesicProj.1.html">EquidistantTest</a>,
-    <a href="TransverseMercatorProj.1.html">TransverseMercatorTest</a>.
-  - PolarStereographic:
-    - Improved conversion to conformal coordinates;
-    - Fix bug with scale at opposite pole;
-    - Complain if latitude out of range in SetScale.
-  - Add GeographicLib::Math::NaN().
-  - Add long double version of hypot for Windows.
-  - Add EllipticFunction::E(real).
-  - Update references to Geotrans in MGRS documentation.
-  - Speed up tmseries.mac.
-
- - Version 1.2 (released 2010-05-21)
-  - FIX BUGS in GeographicLib::Geodesic,
-    - wrong azimuth returned by Direct if point 2 is on a pole;
-    - Inverse sometimes fails with very close points.
-  - Improve calculation of scale in GeographicLib::CassiniSoldner,
-    - add GeographicLib::GeodesicLine::Scale,
-      GeographicLib::GeodesicLine::EquatorialAzimuth, and
-      GeographicLib::GeodesicLine::EquatorialArc;
-    - break friend connection between CassiniSoldner and Geodesic.
-  - Add GeographicLib::DMS::DecodeAngle and
-    GeographicLib::DMS::DecodeAzimuth.  Extend
-    GeographicLib::DMS::Decode and GeographicLib::DMS::Encode to deal
-    with distances.
-  - Code and documentation changes in GeographicLib::Geodesic and
-    GeographicLib::Geocentric for consistency with
-    the forthcoming paper on geodesics.
-  - Increase order of series using in GeographicLib::Geodesic to 6 (full
-    accuracy maintained for ellipsoid flattening < 0.01).
-  - Macro __NO_LONG_DOUBLE_MATH to disable use of long double.
-  - Correct declaration of GeographicLib::Math::isfinite to return a bool.
-  - Changes in the \ref utilities,
-    - improve error reporting when parsing command line arguments;
-    - accept latitudes and longitudes in decimal degrees or degrees,
-      minutes, and seconds, with optional hemisphere designators;
-    - <a href="GeoConvert.1.html">GeoConvert</a> -z accepts zone or
-      zone+hemisphere;
-    - <a href="GeoidEval.1.html">GeoidEval</a> accepts any of the input
-      formats used by <a href="GeoConvert.1.html">GeoConvert</a>;
-    - <a href="CartConvert.1.html">CartConvert</a> allows the ellipsoid
-      to be specified with -e.
-
- - Version 1.1 (released 2010-02-09)
-  - FIX BUG (introduced in 2009-03) in EllipticFunction::E(sn,cn,dn).
-  - Increase accuracy of scale calculation in TransverseMercator and
-    TransverseMercatorExact.
-  - Code and documentation changes for consistency with
-    <a  href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>
-
- - Version 1.0 (released 2010-01-07)
-  - Add autoconf configuration files.
-  - BUG FIX: Improve initial guess for Newton's method in
-    PolarStereographic::Reverse.  (Previously this failed to converge
-    when the co-latitude exceeded about 130 deg.)
-  - Constructors for TransverseMercator, TransverseMercatorExact,
-    PolarStereographic, Geocentric, and Geodesic now check for obvious
-    problems with their arguments and throw an exception if necessary.
-  - Most classes now include inspector functions such as MajorRadius()
-    so that you can determine how instances were constructed.
-  - Add GeographicLib::LambertConformalConic class.
-  - Add GeographicLib::PolarStereographic::SetScale to allow the
-    latitude of true scale to be specified.
-  - Add solution and project files for Visual Studio 2008.
-  - Add GeographicLib::GeographicErr for exceptions.
-  - GeographicLib::Geoid changes:
-    - BUG FIX: fix typo in GeographicLib::Geoid::Cache which could cause
-      a segmentation fault in some cases when the cached area spanned
-      the prime meridian.
-    - Include sufficient edge data to allow heights to be returned for
-      cached area without disk reads;
-    - Add inspector functions to query the extent of the cache.
-
- - Version 2009-11
-  - Allow specification of "closest UTM zone" in GeographicLib::UTMUPS
-    and <a href="GeoConvert.1.html">GeoConvert</a> (via -t option).
-  - Utilities now complain is there are too many tokens on input lines.
-  - Include real-to-real versions of GeographicLib::DMS::Decode and
-    GeographicLib::DMS::Encode.
-  - More house-cleaning changes:
-    - Ensure that functions which return results through reference
-      arguments do not alter the arguments when an exception is thrown.
-    - Improve accuracy of GeographicLib::MGRS::Forward.
-    - Include more information in some error messages.
-    - Improve accuracy of inverse hyperbolic functions.
-    - Fix the way GeographicLib::Math functions handle different precisions.
-
- - Version 2009-10
-  - Change web site to http://geographiclib.sourceforge.net
-  - Several house-cleaning changes:
-    - Change from the a flat directory structure to a more easily
-      maintained one.
-    - Introduce Math class for common mathematical functions (in
-      Constants.hpp).
-    - Use Math::real as the type for all real quantities.  By default this
-      is typedef'ed to double; and the library should be installed this
-      way.
-    - Eliminate const reference members of AzimuthalEquidistant,
-      CassiniSoldner and LocalCartesian so that they may be copied.
-    - Make several constructors explicit.  Disallow some constructors.
-      Disallow copy constructor/assignment for Geoid.
-    - Document least squares formulas in Geoid.cpp.
-    - Use unsigned long long for files positions of geoid files in Geoid.
-    - Introduce optional mgrslimits argument in UTMUPS::Forward and
-      UTMUPS::Reverse to enforce stricter MGRS limits on eastings and
-      northings.
-    - Add 64-bit targets in Visual Studio project files.
-
- - Version 2009-09
-  - Add GeographicLib::Geoid and
-    <a href="GeoidEval.1.html">GeoidEval</a> utility.
-
- - Version 2009-08
-  - Add GeographicLib::CassiniSoldner class and
-    <a href="GeodesicProj.1.html">EquidistantTest</a> utility.
-  - Fix bug in GeographicLib::Geodesic::Inverse where NaNs were
-    sometimes returned.
-  - INCOMPATIBLE CHANGE: AzimuthalEquidistant now returns the reciprocal
-    of the azimuthal scale instead of the reduced length.
-  - Add -n option to <a href="GeoConvert.1.html">GeoConvert</a>.
-
- - Version 2009-07
-  - Speed up the series inversion code in tmseries.mac and geod.mac.
-  - Reference Borkowski in section on \ref geocentric.
-
- - Version 2009-06
-  - Add routines to decode and encode zone+hemisphere to GeographicLib::UTMUPS.
-  - Clean up code in GeographicLib::Geodesic.
-
- - Version 2009-05
-  - Improvements to GeographicLib::Geodesic:
-    - more economical series expansions,
-    - return reduced length (as does the
-      <a href="Geod.1.html">Geod</a> utility),
-    - improved calculation of starting point for inverse method,
-    - use reduced length to give derivative for Newton's method.
-  - Add GeographicLib::AzimuthalEquidistant class.
-  - Make GeographicLib::Geocentric, GeographicLib::TransverseMercator,
-    and GeographicLib::PolarStereographic classes work with prolate
-    ellipsoids.
-  - <a href="CartConvert.1.html">CartConvert</a> checks its inputs more
-    carefully.
-  - Remove reference to defunct Constants.cpp from GeographicLib.vcproj.
-
- - Version 2009-04
-  - Use compile-time constants to select the order of series in
-    GeographicLib::TransverseMercator.
-  - 2x unroll of Clenshaw summation to avoid data shuffling.
-  - Simplification of GeographicLib::EllipticFunction::E.
-  - Use STATIC_ASSERT for compile-time checking of constants.
-  - Improvements to GeographicLib::Geodesic:
-    - compile-time option to change order of series used,
-    - post Maxima code for generating the series,
-    - tune the order of series for double,
-    - improvements in the selection of starting points for Newton's
-      method,
-    - accept and return spherical arc lengths,
-    - works with both oblate and prolate ellipsoids,
-    - add -a, -e, -b options to the <a href="Geod.1.html">Geod</a> utility.
-
- - Version 2009-03
-  - Add GeographicLib::Geodesic and the <a href="Geod.1.html">Geod</a> utility.
-  - Declare when no exceptions are thrown by functions.
-  - Minor changes to GeographicLib::DMS class.
-  - Use invf = 0 to mean a sphere in constructors to some classes.
-  - The makefile creates a library and includes an install target.
-  - Rename GeographicLib::ECEF to GeographicLib::Geocentric, ECEFConvert
-    to <a href="CartConvert.1.html">CartConvert</a>.
-  - Use inline functions to define constant doubles in Constants.hpp.
-
- - Version 2009-02
-  - Fix documentation of constructors (flattening -> inverse
-    flattening).
-  - Use std versions of math functions.
-  - Add GeographicLib::ECEF and GeographicLib::LocalCartesian classes
-    and the ECEFConvert utility.
-  - Gather the documentation on the \ref utilities onto one page.
-
- - Version 2009-01
-  - First proper release of library.
-  - More robust GeographicLib::TransverseMercatorExact:
-    - Introduce \e extendp version of constructor,
-    - Test against extended test data,
-    - Optimize starting positions for Newton's method,
-    - Fix behavior near all singularities,
-    - Fix order dependence in C++ start-up code,
-    - Improved method of computing scale and convergence.
-  - Documentation on transverse Mercator projection.
-  - Add GeographicLib::MGRS, GeographicLib::UTMUPS, etc.
-
- - Version 2008-09
-  - Ad hoc posting of information on the transverse Mercator projection.
-
-<center>
-Back to \ref geocentric.  Up to \ref contents.
-</center>
-**********************************************************************/
diff --git a/doc/GeographicLib.dox b/doc/GeographicLib.dox
new file mode 100644
index 0000000..b0f980d
--- /dev/null
+++ b/doc/GeographicLib.dox
@@ -0,0 +1,5545 @@
+// -*- text -*-
+/**
+ * \file GeographicLib.dox
+ * \brief Documentation for GeographicLib
+ *
+ * Written by Charles Karney <charles at karney.com> and licensed under the
+ * MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+/**
+\mainpage GeographicLib library
+\author Charles F. F. Karney (charles at karney.com)
+\version 1.34
+\date 2013-12-11
+
+\section abstract Abstract
+
+%GeographicLib is a small set of <a href="annotated.html">C++
+classes</a> for performing conversions between geographic, UTM, UPS,
+MGRS, geocentric, and local cartesian coordinates, for gravity (e.g.,
+EGM2008), geoid height and geomagnetic field (e.g., WMM2010)
+calculations, and for solving geodesic problems.  The emphasis is on
+returning accurate results with errors close to round-off (about 5--15
+nanometers).  New accurate algorithms for \ref geodesic and \ref
+transversemercator have been developed for this library.  The
+functionality of the library can be accessed from user code, from the
+\ref utilities provided, or via the \ref other.  Also included is a .NET
+wrapper library <a href="NET/index.html">NETGeographicLib</a>
+which exposes the functionality to .NET applications.  For a sample of
+the geodesic capabilities in JavaScript, check out the
+<a href="../scripts/geod-calc.html">online geodesic calculator</a> and
+the script for displaying
+<a href="../scripts/geod-google.html">geodesics in Google Maps</a>
+
+This library is <i>not</i> a general purpose projection library; use
+<a href="http://trac.osgeo.org/proj/">proj.4</a> for that.  On the other
+hand, it does provide the core functionality offered by
+<a href="http://earth-info.nima.mil/GandG/geotrans/">GEOTRANS</a>.
+
+\section download Download
+
+The main project page is at
+- <a href="http://sourceforge.net/projects/geographiclib">
+  http://sourceforge.net/projects/geographiclib </a>
+.
+The code is available for download at
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.34.tar.gz">
+  GeographicLib-1.34.tar.gz</a>
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.34.zip">
+  GeographicLib-1.34.zip</a>
+.
+as either a compressed tar file (tar.gz) or a zip file.  (The two
+archives have identical contents, except that the zip file has DOS
+line endings.)  Alternatively you can get the latest release using git
+\verbatim
+  git clone -b r1.34 git://git.code.sf.net/p/geographiclib/code geographiclib
+\endverbatim
+There are also binary installers for Windows available at
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.34-win32.exe">
+  GeographicLib-1.34-win32.exe</a>
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.34-win64.exe">
+  GeographicLib-1.34-win64.exe</a>
+.
+It is licensed under the
+<a href="http://www.opensource.org/licenses/MIT">MIT/X11 License</a>;
+see <a href="LICENSE.txt">LICENSE.txt</a> for the terms.
+For more information, see http://geographiclib.sourceforge.net/.
+
+\section contents Contents
+ - \ref intro
+ - \ref install
+ - \ref start
+ - \ref utilities
+ - \ref organization
+ - \ref other
+ - \ref geoid
+ - \ref gravity
+ - \ref magnetic
+ - \ref geodesic
+ - \ref triaxial
+ - \ref transversemercator
+ - \ref geocentric
+ - \ref old
+
+<center>
+Forward to \ref intro.
+</center>
+
+**********************************************************************/
+/**
+\page intro Introduction
+
+<center>
+Forward to \ref install.  Up to \ref contents.
+</center>
+
+%GeographicLib offers a C++ interfaces to a small (but important!) set
+of geographic transformations.  It grew out of a desire to improve on
+the <a href="http://earth-info.nima.mil/GandG/geotrans/">geotrans</a>
+package for transforming between geographic and MGRS coordinates.  At
+present, %GeographicLib provides UTM, UPS, MGRS, geocentric, and local
+cartesian projections, gravity and geomagnetic models, and classes for
+geodesic calculations.
+
+The goals of %GeographicLib are:
+ - Accuracy.  In most applications the accuracy is close to round-off,
+   about 5 nm (5 nanometers).  Even though in many geographic
+   applications 1 cm is considered "accurate enough", there is little
+   penalty in providing much better accuracy.  In situations where a
+   faster approximate algorithm is necessary, %GeographicLib offers an
+   accurate benchmark to guide the development.
+ - Completeness.  For each of the projections included, an attempt is
+   made to provide a complete solution.  For example,
+   GeographicLib::Geodesic::Inverse works for anti-podal points.
+   Similarly, GeographicLib::Geocentric.Reverse will return accurate
+   geodetic coordinates even for points close to the center of the
+   earth.
+ - C++ interface.  For the projection methods, this allows encapsulation
+   of the ellipsoid parameters.
+ - Emphasis on projections necessary for analyzing military data.
+ - Uniform treatment of UTM/UPS.  The GeographicLib::UTMUPS class treats
+   UPS as zone 0.  This simplifies conversions between UTM and UPS
+   coordinates, etc.
+ - Well defined and stable conventions for the conversion between
+   UTM/UPS to MGRS coordinates.
+ - Detailed internal documentation on the algorithms.  For the most part
+   %GeographicLib uses published algorithms and references are given.  If
+   changes have been made (usually to improve the numerical accuracy),
+   these are described in the code.
+
+Various \ref utilities are provided with the library.  These illustrate
+the use of the library and are useful in their own right.  This library
+and the utilities have been tested with g++ 4.4 under Linux, with g++
+4.2 under Mac OS X, and with MS Visual Studio 9 (2008), 10 (2010), 11
+(2012), and 12 (2013) compiled for 32 bit and 64 bit.
+
+Matlab, JavaScript, and Python interfaces are provided to portions of
+%GeographicLib; see \ref other.
+
+The section \ref geodesic documents the method of solving the geodesic
+problem.
+
+The section \ref transversemercator documents various properties of this
+projection.
+
+The bulk of the testing has used geographically relevant values of the
+flattening.  Thus, you can expect close to full accuracy for -0.01 ≤
+\e f ≤ 0.01 (but note that GeographicLib::TransverseMercatorExact is
+restricted to \e f > 0).  However, reasonably accurate results can be
+expected if -0.1 ≤ \e f ≤ 0.1.  Outside this range, you should
+attempt to verify the accuracy of the routines independently.  Two types
+of problems may occur with larger values of \e f:
+ - Some classes, specifically GeographicLib::Geodesic,
+   GeographicLib::GeodesicLine, and GeographicLib::TransverseMercator,
+   use series expansions using \e f as a small parameter.  The accuracy
+   of these routines will degrade as \e f becomes large.
+ - Even when exact formulas are used, many of the classes need to invert
+   the exact formulas (e.g., to invert a projection), typically, using
+   Newton's method.  This usually provides an essentially exact
+   inversion.  However, the choice of starting guess and the exit
+   conditions have been tuned to cover small values of \e f and the
+   inversion may be incorrect if \e f is large.
+
+Undoubtedly, bugs lurk in this code and in the documentation.  Please
+report any you find to charles at karney.com.
+
+<center>
+Forward to \ref install.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page install Installing %GeographicLib
+
+<center>
+Back to \ref intro.  Forward to \ref start.  Up to \ref contents.
+</center>
+
+%GeographicLib has been developed under Linux with the g++ compiler
+(versions 4.0 and later) and under Windows with Visual Studio 2005, 2008,
+and 2010.  Earlier versions were tested also under Darwin and Solaris.  It
+should compile on a wide range of other systems.  First download either
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.34.tar.gz">
+GeographicLib-1.34.tar.gz</a> or
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.34.zip">
+GeographicLib-1.34.zip</a> (or
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.34-win32.exe">
+GeographicLib-1.34-win32.exe</a> or
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.34-win64.exe">
+GeographicLib-1.34-win64.exe</a> for binary installation under Windows).
+Then pick one of the first five options below:
+- \ref cmake.  This is the preferred installation method as it will work
+  on the widest range of platforms.  However it requires that you have
+  <a href="http://www.cmake.org">cmake</a> installed.
+- \ref autoconf.  This method works for most Unix-like systems,
+  including Linux and Mac OS X.
+- \ref gnu.  This is a simple installation method that works with g++
+  and GNU make on Linux and many Unix platforms.
+- \ref windows.  This is a simple installation method that works with
+  Visual Studio 2005, 2008, and 2010 under Windows.
+- \ref windowsbin.  Use this installation method if you only need to use
+  the \ref utilities supplied with %GeographicLib.  (This method also
+  installs the header files and the library for use by Visual Studio 10.)
+- \ref qt.  How to compile %GeographicLib so that it can be used by Qt
+  programs.
+- \ref maintainer.  This describes addition tasks of interest only to
+  the maintainers of this code.
+.
+This section documents only how to install the <i>software</i>.  If you
+wish to use %GeographicLib to evaluate geoid heights or the earth's
+gravitational or magnetic fields, then you must also install the
+relevant data files.  See \ref geoidinst, \ref gravityinst, and \ref
+magneticinst for instructions.
+
+The first two installation methods use two important techniques which
+make software maintanence simpler
+- <b>Out-of-source builds:</b>  This means that you create a separate
+  directory for compiling the code.  In the description here the
+  directories are called BUILD and are located in the top-level of the
+  source tree.  You might want to use a suffix to denote the type of
+  build, e.g., BUILD-vc9 for Visual Studio 9, or BUILD-shared for a
+  build which creates a shared library.  The advantages of out-of-source
+  builds are:
+  - You don't mess up the source tree, so it's easy to "clean up".
+    Indeed the source tree might be on a read-only file system.
+  - Builds for multiple platforms or compilers don't interfere with each
+    other.
+- <b>The library is installed:</b> After compilation, there is a
+  separate <i>install</i> step which copies the headers, libraries,
+  tools, and documentation to a "central" location.  You may at this
+  point delete the source and build directories.  If you have
+  administrative privileges, you can install %GeographicLib for the use
+  of all users (e.g., in /usr/local).  Otherwise, you can install it for
+  your personal use (e.g., in $HOME/packages).
+
+\section cmake Installation with cmake
+
+This is the recommended method of installation; however it requires that
+<a href="http://www.cmake.org">cmake</a> be installed on your system.
+This permits %GeographicLib to be built either as a shared or a static
+library on a wide variety of systems.  cmake can also determine the
+capabilities of your system and adjust the compilation of the
+libraries and examples appropriately.
+
+cmake is available for most computer platforms.  On Linux systems cmake
+will typically one of the standard packages and can be installed by a
+command like
+  \verbatim
+  yum install cmake \endverbatim
+(executed as root).  The minimum version of cmake supported for building
+%GeographicLib is 2.8.4 (which was released on 2011-02-16).  (Actually,
+a few earlier versions will also work for non-Windows platforms.)
+
+On other systems, download a binary installer from http://www.cmake.org
+click on download, and save and run the appropriate installer.  Run the
+cmake command with no arguments to get help.  Other useful tools are
+ccmake and cmake-gui which offer curses and graphical interfaces to
+cmake.  Building under cmake depends on whether it is targeting an IDE
+(interactive development environment) or generating Unix-style
+makefiles.  The instructions below have been tested with makefiles and
+g++ on Linux and with the Visual Studio IDE on Windows.
+
+Here are the steps to compile and install %GeographicLib:
+- Unpack the source, running one of \verbatim
+  tar xfpz GeographicLib-1.34.tar.gz
+  unzip -q GeographicLib-1.34.zip \endverbatim
+  then enter the directory created with one of \verbatim
+  cd GeographicLib-1.34 \endverbatim
+- Create a separate build directory and enter it, for example, \verbatim
+  mkdir BUILD
+  cd BUILD \endverbatim
+- Run cmake, pointing it to the source directory (..).  On Linux, Unix,
+  and MacOSX systems, the command is \verbatim
+  cmake .. \endverbatim
+  For Windows, the command is typically one of \verbatim
+  cmake -G "Visual Studio 10" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10/GeographicLib-1.34 ..
+  cmake -G "Visual Studio 9 2008" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc9/GeographicLib-1.34 ..
+\endverbatim
+  The definitions of CMAKE_INSTALL_PREFIX are optional (see below).  The
+  settings given above are recommended to ensure that packages that use
+  %GeographicLib use the version compiled with the right compiler.
+  If you need to rerun cmake, use \verbatim
+  cmake . \endverbatim
+  possibly including some options via <code>-D</code> (see the next step).
+- cmake allows you to configure how %GeographicLib is built and installed by
+  supplying options, for example \verbatim
+  cmake -D CMAKE_INSTALL_PREFIX=/tmp/geographic . \endverbatim
+  The options you might need to change are
+  - <code>COMMON_INSTALL_PATH</code> governs the installation
+    convention.  If it is on ON (the Linux default), the installation
+    is to a common directory, e.g., /usr/local.  If it is OFF (the
+    Windows default), the installation directory contains the package
+    name, e.g., C:/pkg/GeographicLib-1.34.  The installation
+    directories for the documentation, cmake configuration, python and
+    matlab interfaces all depend on the variable with deeper paths
+    relative to CMAKE_INSTALL_PREFIX being used when it's ON:
+    - documentation: OFF: doc/html; ON: share/doc/GeographicLib/html;
+    - cmake configuration: OFF cmake; ON: share/cmake/GeographicLib;
+    - python interface: OFF: python; ON: lib/python/site-packages;
+    - matlab interface: OFF: matlab; ON: libexec/GeographicLib/matlab;
+    .
+  - <code>CMAKE_INSTALL_PREFIX</code> (default: <code>/usr/local</code>
+    on non-Windows systems, <code>C:/Program Files/GeographicLib</code>
+    on Windows systems) specifies where the library will be installed.
+    For windows systems, it is recommended to use a prefix which
+    includes the compiler version, as shown above (and also, possibly,
+    whether this is a 64-bit build, e.g., <code>cmake -G "Visual Studio
+    10 Win64" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10-x64/GeographicLib-1.34
+    ..</code>).  If you just want to try the library to see if it suits
+    your needs, pick, for example,
+    <code>CMAKE_INSTALL_PREFIX</code>=/tmp/geographic.
+  - <code>GEOGRAPHICLIB_DATA</code> (default:
+    /usr/local/share/GeographicLib for non-Windows systems,
+    C:/Documents and Settings/All Users/Application
+    Data/GeographicLib for Windows systems) specifies the default
+    location for the various datasets for use by GeographicLib::Geoid,
+    GeographicLib::GravityModel, and GeographicLib::MagneticModel.
+    See \ref geoidinst, \ref gravityinst, and \ref magneticinst for more
+    information.
+  - <code>GEOGRAPHICLIB_LIB_TYPE</code> (allowed values: SHARED, STATIC, or
+    BOTH), specifies the types of libraries build.  The default is
+    STATIC for Windows and SHARED otherwise.  If building %GeographicLib
+    for sytem-wide use, BOTH is recommended, because this provides users
+    with the choice of which library to use.
+  - <code>CMAKE_BUILD_TYPE</code> (default: Release).  This
+    flags only affects non-IDE compile environments (like make + g++).
+    The default is actually blank, but this is treated as
+    Release.  Choose one of
+    \verbatim
+  Debug
+  Release
+  RelWithDebInfo
+  MinSizeRel
+\endverbatim
+    (With IDE compile environments, you get to select the build type in
+    the IDE.)
+  - <code>MATLAB_COMPILER</code> (default: OFF).  Set this to either
+    "mex" (for Matlab) or "mkoctfile" (for Octave) to specify the
+    compiler to use for the Matlab/Octave interface.  See \ref matlab
+    for more information.
+  - <code>GEOGRAPHICLIB_DOCUMENTATION</code> (default: OFF).  If set to
+    ON, then html documentation is created from the source files,
+    provided a sufficiently recent version of doxygen can be found.
+    Otherwise, the html documentation will redirect to the appropriate
+    version of the online documentation.
+  - <code>BUILD_NETGEOGRAPHICLIB</code> (default: OFF).  If set to ON,
+    build the managed C++ wrapper library
+    <a href="NET/index.html">NETGeographicLib</a>.  This only makes
+    sense for Windows systems.
+  - <code>GEOGRAPHICLIB_PRECISION</code> specifies the precision to be
+    used for "real" (i.e., floating point) numbers.  1 means float
+    (single precision); 2 (the default) means double; 3 means long
+    double; 4 is reserved for quadruple precision.  Nearly all the
+    testing has been carried out with doubles and that's the
+    recommended configuration.  In particular you should avoid
+    "installing" the library with a precision different from double.
+- Build and install the software.  In non-IDE environments, run
+  \verbatim
+  make         # compile the library and the examples
+  make test    # run some tests
+  make install # as root, if CMAKE_INSTALL_PREFIX is a system directory
+\endverbatim
+  Possible additional targets are \verbatim
+  make matlabinterface (only for the Release configuration on Windows)
+  make dist
+  make exampleprograms
+  make netexamples (supported only for Release configuration) \endverbatim
+  On IDE environments, run your IDE (e.g., Visual Studio), load
+  GeographicLib.sln, pick the build type (e.g., Release), and select
+  "Build Solution".  If this succeeds, select "RUN_TESTS" to build;
+  finally, select "INSTALL" to install (RUN_TESTS and INSTALL are in
+  the CMakePredefinedTargets folder).  Alternatively, you run the
+  Visual Studio compiler from the command line with \verbatim
+  cmake --build . --config Release --target ALL_BUILD
+  cmake --build . --config Release --target RUN_TESTS
+  cmake --build . --config Release --target INSTALL \endverbatim
+  For maximum flexibility, it's a good idea to build and install both
+  the Debug and Release versions of the library (in that order).  The
+  installation directories will then contain the release versions of the
+  tools and <i>both</i> versions (debug and release) of the libraries.
+  If you use cmake to configure and build your programs, then the right
+  version of the library (debug vs. release) will automatically be used.
+- The headers, library, and utilities are installed in the
+  include/GeographicLib, lib, and bin directories under
+  <code>CMAKE_INSTALL_PREFIX</code>.  (dll dynamic libraries are
+  installed in bin.)  For documentation, open in a web browser
+  <a href="index.html">
+  PREFIX/share/doc/GeographicLib/html/index.html</a>, if
+  COMMON_INSTALL_PATH is ON, or <a href="index.html">
+  PREFIX/doc/index.html</a>, otherwise.
+
+\section autoconf Installation using the autoconfigure tools
+
+The method works on most Unix-like systems including Linux and Mac OS X.
+Here are the steps to compile and install %GeographicLib:
+- Unpack the source, running \verbatim
+  tar xfpz GeographicLib-1.34.tar.gz \endverbatim
+  then enter the directory created \verbatim
+  cd GeographicLib-1.34 \endverbatim
+- Create a separate build directory and enter it, for example, \verbatim
+  mkdir BUILD
+  cd BUILD \endverbatim
+- Configure the software, specifing the path of the source directory,
+  with \verbatim
+  ../configure \endverbatim
+- By default %GeographicLib will be installed under /usr/local.
+  You can change this with, for example \verbatim
+  ../configure --prefix=/tmp/geographic \endverbatim
+- Compile and install the software with \verbatim
+  make
+  make install \endverbatim
+- The headers, library, and utilities are installed in the
+  include/GeographicLib, lib, and bin directories under
+  <code>prefix</code>.  This installation method does not compile
+  the Matlab/Octave interface;  however the source for the interface is
+  installed in libexec/GeographicLib/matlab, see \ref matlab of
+  instructions on compiling the interface.  For documentation, open
+  <a href="index.html">
+  share/doc/GeographicLib/html/index.html</a> in a web browser.
+
+\section gnu Installation with GNU compiler and Make
+
+This method requires the standard GNU suite of tools, in particular make
+and g++.  This builds a static library and the examples.
+
+Here are the steps to compile and install %GeographicLib:
+- Unpack the source, running \verbatim
+  tar xfpz GeographicLib-1.34.tar.gz \endverbatim
+  then enter the directory created \verbatim
+  cd GeographicLib-1.34 \endverbatim
+- Edit \verbatim
+  include/GeographicLib/Config.h \endverbatim
+  If your C++ compiler does not recognize the long double type
+  (unlikely), insert \code
+  #undef HAVE_LONG_DOUBLE \endcode
+  If your machine using big endian ordering, then insert \code
+  #define WORDS_BIGENDIAN 1 \endcode
+- Build and install the software: \verbatim
+  make             # compile the library and the examples
+  make install     # as root \endverbatim
+  The installation is in directories under /usr/local.  You
+  can specify a different installation directory with, for example,
+  \verbatim
+  make PREFIX=/tmp/geographic install \endverbatim
+- The headers, library, and utilities are installed in the
+  include/GeographicLib, lib, and bin directories under
+  <code>PREFIX</code>.  This installation method does not compile
+  the Matlab/Octave interface;  however the source for the interface is
+  installed in libexec/GeographicLib/matlab, see \ref matlab of
+  instructions on compiling the interface.  For documentation, open
+  <a href="index.html">
+  share/doc/GeographicLib/html/index.html</a> in a web browser.
+
+\section windows Installation on Windows
+
+This method requires Visual Studio 2005, 2008, or 2010.  This builds a
+static library and the utilities.  If you only have Visual Studio 2003,
+use cmake to create the necessary solution file, see \ref cmake.  (cmake
+is needed to build the Matlab interface and to run the tests.)
+- Unpack the source, running \verbatim
+  unzip -q GeographicLib-1.34.zip \endverbatim
+- Open GeographicLib-1.34/windows/GeographicLib-vc10.sln in Visual Studio
+  2010 (for Visual Studio 2005 and 2008, replace -vc10 by -vc8 or -vc9).
+- Pick the build type (e.g., Release), and select "Build Solution".
+- The library and the compiled examples are in the windows/Release.
+- Copy the library windows/Release/GeographicLib.lib and the
+  headers in include/GeographicLib somewhere convenient.  The
+  headers should remain in a directory named %GeographicLib.  If you
+  expect to use the Matlab/Octave interface, copy matlab/*.m and
+  matlab/*.cpp to a directory in your matlab/octave path, see \ref
+  matlab for instructions on compiling the interface.  For documentation,
+  open
+  <a href="index.html">doc/html/index.html</a> in a web
+  browser.
+
+The Visual Studio 10 solution also contains projects to build
+<a href="NET/index.html">NETGeographicLib</a> and the C# example project.
+
+\section windowsbin Using a binary installer for Windows
+
+Use this method if you only need to use the %GeographicLib utilities.
+The header files and static and shared versions of library are also
+provided; these can only be used by Visual Studio 2010 (in either
+release or debug mode).  However, if you plan to use the library, it may
+be advisable to build it with the compiler you are using for your own
+code using either \ref cmake or \ref windows.
+
+Download and run
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.34-win32.exe">
+GeographicLib-1.34-win32.exe</a> or
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.34-win64.exe">
+GeographicLib-1.34-win64.exe</a>:
+ - read the MIT/X11 License agreement,
+ - select whether you want your PATH modified,
+ - select the installation folder, by default
+   C:\\pkg-vc10\\GeographicLib-1.34 or C:\\pkg-vc10-x64\\GeographicLib-1.34,
+ - select the start menu folder,
+ - and install.
+ .
+(Note that the default installation folder adheres the the convention
+given in \ref cmake.)  The start menu will now include links to the
+documentation for the library and for the utilities (and a link for
+uninstalling the library).  If you ask for your PATH to be modified, it
+will include C:/pkg-vc10/GeographicLib-1.34/bin where the utilities are
+installed.  The headers and library are installed in the
+include/GeographicLib and lib folders.  With the 64-bit installer, the
+Matlab interface is installed in the matlab folder.  Add this to your
+path in Matlab to access this interface.  The libraries were built using
+using Visual Studio 10 in release and debug modes.  The utilities were
+linked against the release-mode shared library.  The Matlab interface
+was compiled with Matlab R2013a 64-bit, however it may work with some
+other 64-bit versions of Matlab.
+<a href="NET/index.html">NETGeographicLib</a> library dlls (release and
+debug) are included with the binary installers; these are linked against
+the shared library for %GeographicLib.
+
+\section qt Building the library for use with Qt
+
+If Qt is using a standard compiler, then build %GeographicLib with that
+same compiler (and optimization flags) as Qt.
+
+If you are using the mingw compiler on Windows for Qt, then you need to
+build %GeographicLib with mingw.  You can accomplish this with cmake
+under cygwin with, for example, \verbatim
+  export PATH="`cygpath -m c:/QtSDK/mingw/bin`:$PATH"
+  mkdir BUILD
+  cd BUILD
+  cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=C:/pkg-mingw/GeographicLib ..
+  mingw32-make
+  mingw32-make install \endverbatim
+If cmake complains that sh mustn't be in your path, invoke cmake with
+\verbatim
+  env PATH="$( echo $PATH | tr : '\n' |
+  while read d; do test -f "$d/sh.exe" || echo -n "$d:"; done |
+  sed 's/:$//' )" \
+  cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=C:/pkg-mingw/GeographicLib ..
+\endverbatim
+If cmake is not available, there is a simple project file that compiles
+the %GeographicLib library <i>only</i> with the Qt compiler: \verbatim
+  cd src
+  qmake GeographicLib.pro # configure the project
+  make                    # build the library \endverbatim
+The library will be in the src directory (or the src/release or
+src/debug directory under Windows).  The headers are in
+include/GeographicLib.
+
+\section maintainer Maintainer tasks
+
+Check the code out of git with \verbatim
+  git clone -b master git://git.code.sf.net/p/geographiclib/code geographiclib
+\endverbatim
+Here the "master" branch is checked out.  There are three branches in
+the git repository:
+- <b>master</b>: the main branch for code maintainence.  Releases are
+  tagged on this branch as, e.g., v1.34.
+- <b>devel</b>: the development branch; changes made here are merged
+  into master.
+- <b>release</b>: the release branch created by unpacking the source
+  releases (git is \e not used to merge changes from the other
+  branches into this branch).  This is the \e default branch of the
+  repository (the branch you get if cloning the repository without
+  specifying a branch).  This differs from the master branch in that
+  some administrative files are excluded while some intermediate files
+  are included (in order to aid building on as many platforms as
+  possible).  Releases are tagged on this branch as, e.g., r1.34.
+.
+The autoconf configuration script and the formatted man pages are not
+checked into master branch of the repository.  In order to create the
+autoconf configuration script, run \verbatim
+  sh autogen.sh \endverbatim
+in the top level directory.  Provided you are running on a system with
+doxygen, pod2man, and pod2html installed, then you can create the
+documentation and the man pages by building the system using cmake or
+configure.
+
+In the case of cmake, you then run \verbatim
+  make dist \endverbatim
+which will copy the man pages from the build directory back into the
+source tree and package the resulting source tree for distribution as
+\verbatim
+  GeographicLib-1.34.tar.gz
+  GeographicLib-1.34.zip \endverbatim
+Finally, \verbatim
+  make package \endverbatim
+or building PACKAGE in Visual Studio will create a binary installer for
+%GeographicLib.  For Windows, this requires in the installation of
+<a href="http://nsis.sourceforge.net">NSIS</a>.  On Windows, you should
+configure %GeographicLib with <code>PACKAGE_DEBUG_LIBS</code>=ON, build both
+Release and Debug versions of the library and finally build PACKAGE in
+Release mode.  This will get the release and debug versions of the
+library included in the package.  For example, the 64-bit binary
+installer is created with \verbatim
+  cmake -G "Visual Studio 10 Win64" \
+    -D GEOGRAPHICLIB_LIB_TYPE=BOTH \
+    -D PACKAGE_DEBUG_LIBS=ON \
+    -D MATLAB_COMPILER=mex \
+    -D BUILD_NETGEOGRAPHICLIB=ON \
+    ..
+  cmake --build . --config Debug --target ALL_BUILD
+  cmake --build . --config Release --target ALL_BUILD
+  cmake --build . --config Release --target matlabinterface
+  cmake --build . --config Release --target PACKAGE \endverbatim
+
+With configure, run \verbatim
+  make dist-gzip \endverbatim
+which will create the additional files and packages the results ready
+for distribution as \verbatim
+  geographiclib-1.34.tar.gz \endverbatim
+
+<center>
+Back to \ref intro.  Forward to \ref start.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page start Getting started
+
+<center>
+Back to \ref install.  Forward to \ref utilities.  Up to \ref contents.
+</center>
+
+Much (but not all!) of the useful functionality of %GeographicLib is
+available via simple command line utilities.  Interfaces to some of them
+are available via the web.  See \ref utilities for documentation on
+these.
+
+In order to use %GeographicLib from C++ code, you will need to
+- Include the header files for the %GeographicLib classes in your code.
+  E.g., \code
+  #include <GeographicLib/LambertConformalConic.hpp> \endcode
+- Include the GeographicLib:: namespace prefix to the %GeographicLib classes,
+  or include \code
+  using namespace GeographicLib; \endcode
+  in your code.
+- Finally compile and link your code.  You have two options here.
+  - Use cmake to build your package.  If you are familiar with cmake
+    this typically will be far the simplest option.
+  - Set the include paths and linking options "manually".
+- Building your code with cmake.  In brief, the necessary steps are:
+  - include in your CMakeLists.txt files \verbatim
+    find_package (GeographicLib 1.34 REQUIRED)
+    include_directories (${GeographicLib_INCLUDE_DIRS})
+    add_definitions (${GeographicLib_DEFINITIONS})
+    add_executable (program source1.cpp source2.cpp)
+    target_link_libraries (program ${GeographicLib_LIBRARIES}) \endverbatim
+    (The <code>add_definitions</code> line is only needed for Windows
+    and can be omitted if you're using cmake version 2.8.11 or later.)
+  - configure your package, e.g., with \verbatim
+    mkdir BUILD
+    cd BUILD
+    cmake -G "Visual Studio 10" \
+      -D CMAKE_PREFIX_PATH=C:/pkg-vc10 \
+      -D CMAKE_PREFIX_PATH=C:/pkg-vc10/testgeographic \
+      .. \endverbatim
+    Note that you almost always want to configure and build your code
+    somewhere other than the source directory (in this case, we use the
+    BUILD subdirectory).
+  - build your package.  On Linux and MacOS this usually involves just
+    running make.  On Windows, you can load the solution file created by
+    cmake into Visual Studio; alternatively, you can get cmake to run
+    build your code with \verbatim
+    cmake --build . --config Release --target ALL_BUILD \endverbatim
+    You might also want to install your package (using "make install" or
+    build the "INSTALL" target with the command above).
+  .
+  The most import step is the find_package command.  The cmake
+  documentation describes the locations searched by find_package (the
+  appropriate rule for %GeographicLib are those for "Config" mode lookups).
+  In brief, the locations that are searched are (from least specific to
+  most specific, i.e., in <i>reverse</i> order) are
+  - under the system paths, i.e., locations such as <code>C:/Program
+    Files</code> and <code>/usr/local</code>);
+  - frequently, it's necessary to search within a "package directory"
+    (or set of directories) for external dependencies; this is given by
+    a (semicolon separated) list of directories specified by the cmake
+    variable <code>CMAKE_PREFIX_PATH</code> (illustrated above);
+  - the package directory for %GeographicLib can be overridden with the
+    <i>environment variable</i> <code>GeographicLib_DIR</code> (which is the
+    directory under which %GeographicLib is installed);
+  - finally, if you need to point to a particular build of %GeographicLib,
+    define the <i>cmake variable</i> <code>GeographicLib_DIR</code>, which
+    specifies the directory containing the configuration file
+    <code>geographiclib-config.cmake</code> (for debugging this be the
+    top-level <i>build</i> directory, as opposed to <i>installation</i>
+    directory, for %GeographicLib).
+  .
+  Typically, specifying nothing or <code>CMAKE_PREFIX_PATH</code>
+  suffices.  However the two <code>GeographicLib_DIR</code> variables allow
+  for a specific version to be chosen.  On Windows systems (with Visual
+  Studio), find_package will only find versions of %GeographicLib built with
+  the right version of the compiler.  (If you used a non-cmake method of
+  installing %GeographicLib, you can try copying cmake/FindGeographicLib.cmake
+  to somewhere in your <code>CMAKE_MODULE_PATH</code> in order for
+  find_package to work.  However, this method has not been thoroughly
+  tested.)
+
+  If %GeographicLib is found, then the following cmake variables are set:
+  - <code>GeographicLib_FOUND</code> = 1
+  - <code>GeographicLib_VERSION</code> = 1.34
+  - <code>GeographicLib_INCLUDE_DIRS</code>
+  - <code>GeographicLib_LIBRARIES</code> = one of the following two:
+  - <code>GeographicLib_SHARED_LIBRARIES</code> = %GeographicLib
+  - <code>GeographicLib_STATIC_LIBRARIES</code> = GeographicLib_STATIC
+  - <code>GeographicLib_DEFINITIONS</code> = one of the following two:
+  - <code>GeographicLib_SHARED_DEFINITIONS</code> = -DGEOGRAPHICLIB_SHARED_LIB=1
+  - <code>GeographicLib_STATIC_DEFINITIONS</code> = -DGEOGRAPHICLIB_SHARED_LIB=0
+  - <code>GeographicLib_LIBRARY_DIRS</code>
+  - <code>GeographicLib_BINARY_DIRS</code>
+  .
+  Either of <code>GeographicLib_SHARED_LIBRARIES</code> or
+  <code>GeographicLib_STATIC_LIBRARIES</code> may be empty, if that version
+  of the library is unavailable.  If you require a specific version,
+  SHARED or STATIC, of the library, add a <code>COMPONENTS</code> clause
+  to find_package, e.g.,
+  \verbatim
+    find_package (GeographicLib 1.34 REQUIRED COMPONENTS SHARED) \endverbatim
+  causes only packages which include the shared library to be found.  If
+  the package includes both versions of the library, then
+  <code>GeographicLib_LIBRARIES</code> and
+  <code>GeographicLib_DEFINITIONS</code> are set to the shared versions,
+  unless you include \verbatim
+    set (GeographicLib_USE_STATIC_LIBS ON) \endverbatim
+  <i>before</i> the find_package command.  You can check whether
+  <code>GeographicLib_LIBRARIES</code> refers to the shared or static
+  library with \verbatim
+    get_target_property(_LIBTYPE ${GeographicLib_LIBRARIES} TYPE) \endverbatim
+  which results in <code>_LIBTYPE</code> being set to
+  <code>SHARED_LIBRARY</code> or <code>STATIC_LIBRARY</code>.
+  On Windows, cmake takes care of linking to the release or debug
+  version of the library as appropriate.  (This assumes that the Release
+  and Debug versions of the libraries were built and installed.  This is
+  true for the Windows binary installer for %GeographicLib version 1.34 and
+  later.)
+- Here are the steps to compile and link your code using %GeographicLib
+  "manually".
+  - Tell the compiler where to find the header files.  With g++ and with
+    /usr/local specified as the installation directory,
+    this is accomplished with \verbatim
+    g++ -c -g -O3 -funroll-loops -I/usr/local/include testprogram.cpp
+    \endverbatim
+    With Visual Studio, specify the include directory in the IDE via,
+    e.g.,
+    \verbatim
+    C/C++ -> General -> Additional Include Directories = C:\pkg-vc10\GeographicLib\include
+    \endverbatim
+  - If using the shared (or static) library with Visual Studio, define
+    the macro <code>GEOGRAPHICLIB_SHARED_LIB=1</code> (or
+    <code>0</code>), e.g.,
+    \verbatim
+    C/C++ -> Preprocessor -> Preprocessor Definitions = GEOGRAPHICLIB_SHARED_LIB=1
+    \endverbatim
+    This is only needed for Windows systems when both shared and static
+    libraries have been installed.  (If you configure your package with
+    cmake, this definition is added automatically.)
+  - Tell the linker the name, Geographic, and location of the
+    library.  Using g++ as the linker, you would use \verbatim
+    g++ -g -o testprogram testprogram.o -L/usr/local/lib -lGeographic
+    \endverbatim
+    With Visual Studio, you supply this information in the IDE via,
+    e.g., \verbatim
+    Linker -> Input -> Additional Dependencies = Geographic-i.lib (for shared library)
+    Linker -> Input -> Additional Dependencies = Geographic.lib (for static library)
+    Linker -> General -> Additional Library Directories = C:\pkg-vc10\Geographic\lib
+    \endverbatim
+    Note that the library name is <b>Geographic</b> and not
+    %GeographicLib.  For the Debug version of your program on Windows
+    add "_d" to the library, e.g., Geographic_d-i.lib or
+    Geographic_d.lib.
+  - Tell the runtime environment where to find the shared library
+    (assuming you compiled %Geographic as a shared library).  With g++,
+    this is accomplished by modifying the link line above to read \verbatim
+    g++ -g -o testprogram testprogram.o -Wl,-rpath=/usr/local/lib \
+      -L/usr/local/lib -lGeographic
+    \endverbatim
+    (There are two other ways to specify the location of shared libraries
+    at runtime: (1) define the environment variable
+    <code>LD_LIBRARY_PATH</code> to be a colon-separated list of
+    directories to search; (2) as <b>root</b>, specify /usr/local/lib as a
+    directory searched by ldconfig(8).)  On Windows, you need to ensure
+    that Geographic.dll or Geographic_d.dll is in the same directory as
+    your executable or else include the directory containing the dll in
+    your <code>PATH</code>.
+
+Here is a very simple test code, which uses the GeographicLib::Geodesic
+class:
+\include example-Geodesic-small.cpp
+This example is <code>examples/example-Geodesic-small.cpp</code>.  If you
+compile, link, and run it according to the instructions above, it should
+print out \verbatim
+  5551.76 km \endverbatim
+Here is a complete CMakeList.txt files you can use to build this test
+code using the installed library: \verbatim
+project (geodesictest)
+cmake_minimum_required (VERSION 2.8.4)
+
+find_package (GeographicLib 1.34 REQUIRED)
+
+if (NOT MSVC)
+  set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+endif ()
+
+include_directories (${GeographicLib_INCLUDE_DIRS})
+add_definitions (${GeographicLib_DEFINITIONS})
+add_executable (${PROJECT_NAME} example-Geodesic-small.cpp)
+target_link_libraries (${PROJECT_NAME} ${GeographicLib_LIBRARIES})
+
+if (MSVC)
+  get_target_property (_LIBTYPE ${GeographicLib_LIBRARIES} TYPE)
+  if (_LIBTYPE STREQUAL "SHARED_LIBRARY")
+    # On Windows systems, copy the shared library to build directory
+    add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD
+      COMMAND ${CMAKE_COMMAND} -E
+      copy $<TARGET_FILE:${GeographicLib_LIBRARIES}> ${CMAKE_CFG_INTDIR}
+      COMMENT "Copying shared library for GeographicLib")
+  endif ()
+endif () \endverbatim
+
+The next steps are:
+ - Learn about and run the \ref utilities.
+ - Read the section, \ref organization, for an overview of the library.
+ - Browse the <a href="annotated.html">Class List</a> for full documentation
+   on the classes in the library.
+ - Look at the example code in the examples directory.  Each file
+   provides a very simple standalone example of using one %GeographicLib
+   class.  These are included in the descriptions of the classes.
+ - Look at the source code for the utilities in the tools directory for
+   more examples of using %GeographicLib from C++ code, e.g.,
+   GeodesicProj.cpp is a program to performing various geodesic
+   projections.
+
+Here's a list of some of the abbreviations used here with links to the
+corresponding Wikipedia articles:
+ - <a href="http://en.wikipedia.org/wiki/WGS84">
+   WGS84</a>, World Geodetic System 1984.
+ - <a href="http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system">
+   UTM</a>, Universal Transverse Mercator coordinate system.
+ - <a href="http://en.wikipedia.org/wiki/Universal_Polar_Stereographic">
+   UPS</a>, Universal Polar Stereographic coordinate system.
+ - <a href="http://en.wikipedia.org/wiki/Military_grid_reference_system">
+   MGRS</a>, Military Grid Reference System.
+ - <a href="http://en.wikipedia.org/wiki/Geoid">
+   EGM</a>, Earth Gravity Model.
+ - <a href="http://en.wikipedia.org/wiki/World_Magnetic_Model">
+   WMM</a>, World Magnetic Model.
+ - <a href="http://en.wikipedia.org/wiki/IGRF">
+   IGRF</a>, International Geomagnetic Reference Field.
+
+<center>
+Back to \ref install.  Forward to \ref utilities.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page utilities Utility programs
+
+<center>
+Back to \ref start.  Forward to \ref organization.  Up to \ref contents.
+</center>
+
+Various utility programs are provided with %GeographicLib.  These should
+be installed in a directory included in your PATH (e.g.,
+/usr/local/bin).  These programs are wrapper programs that invoke
+the underlying functionality provided by the library.
+
+The utilities are
+ - <a href="GeoConvert.1.html">
+   <b>GeoConvert</b></a>: convert geographic coordinates using
+   GeographicLib::GeoCoords.
+ - <a href="GeodSolve.1.html">
+   <b>GeodSolve</b></a>: perform geodesic calculations using
+   GeographicLib::Geodesic and GeographicLib::GeodesicLine.
+ - <a href="Planimeter.1.html">
+   <b>Planimeter</b></a>: compute the area of geodesic polygons using
+   GeographicLib::PolygonArea.
+ - <a href="TransverseMercatorProj.1.html">
+   <b>TransverseMercatorProj</b></a>: convert between geographic
+   and transverse Mercator.  This is for testing
+   GeographicLib::TransverseMercatorExact and
+   GeographicLib::TransverseMercator.
+ - <a href="CartConvert.1.html">
+   <b>CartConvert</b></a>: convert geodetic coordinates to geocentric or
+   local cartesian using GeographicLib::Geocentric and
+   GeographicLib::LocalCartesian.
+ - <a href="GeodesicProj.1.html">
+   <b>GeodesicProj</b></a>: perform projections based on geodesics
+   using GeographicLib::AzimuthalEquidistant, GeographicLib::Gnomonic,
+   and GeographicLib::CassiniSoldner.
+ - <a href="ConicProj.1.html">
+   <b>ConicProj</b></a>: perform conic projections using
+   GeographicLib::LambertConformalConic and
+   GeographicLib::AlbersEqualArea.
+ - <a href="GeoidEval.1.html">
+   <b>GeoidEval</b></a>: look up geoid heights using
+   GeographicLib::Geoid.
+ - <a href="Gravity.1.html">
+   <b>Gravity</b></a>: compute the earth's gravitational field using
+   GeographicLib::GravityModel and GeographicLib::GravityCircle.
+ - <a href="MagneticField.1.html">
+   <b>MagneticField</b></a>: compute the earth's magnetic field using
+   GeographicLib::MagneticModel and GeographicLib::MagneticCircle.
+ .
+The documentation for these utilities is in the form of man pages.  This
+documentation can be accessed by clicking on the utility name in the
+list above, running the man command on Unix-like systems, or by invoking
+the utility with the --help option.  A brief summary of usage is given
+by invoking the utility with the -h option.  The version of the utility
+is given by the --version option.
+
+The utilities all accept data on standard input, transform it in some
+way, and print the results on standard output.  This makes the utilities
+easy to use within scripts to transform tabular data; however they can
+also be used interactively, often with the input supplied via a pipe,
+e.g.,
+ - echo 38SMB4488 | GeoConvert -d
+
+Online versions of four of these utilities are provided:
+ - <a href="http://geographiclib.sf.net/cgi-bin/GeoConvert">GeoConvert</a>
+ - <a href="http://geographiclib.sf.net/cgi-bin/GeodSolve">GeodSolve</a>
+ - <a href="http://geographiclib.sf.net/cgi-bin/Planimeter">Planimeter</a>
+ - <a href="http://geographiclib.sf.net/cgi-bin/GeoidEval">GeoidEval</a>
+
+<center>
+Back to \ref start.  Forward to \ref organization.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page organization Code organization
+
+<center>
+Back to \ref utilities.  Forward to \ref other.  Up to \ref contents.
+</center>
+
+Here is a brief description of the relationship between the various
+components of %GeographicLib.  All of these are defined in the
+GeographicLib namespace.
+
+GeographicLib::TransverseMercator, GeographicLib::PolarStereographic,
+GeographicLib::LambertConformalConic, and GeographicLib::AlbersEqualArea
+provide the basic projections.  The constructors for these classes
+specify the ellipsoid and the forward and reverse projections are
+implemented as const member functions.  TransverseMercator uses
+Krüger's series which have been extended to sixth order in the
+square of the eccentricity.  PolarStereographic, LambertConformalConic,
+and AlbersEqualArea use the exact formulas for the projections (e.g.,
+from Snyder).
+
+GeographicLib::TransverseMercator::UTM and
+GeographicLib::PolarStereographic::UPS are const static instantiations
+specific for the WGS84 ellipsoid with the UTM and UPS scale factors.
+(These do \e not add the standard false eastings or false northings for
+UTM and UPS.)  Similarly GeographicLib::LambertConformalConic::Mercator
+is a const static instantiation of this projection for a WGS84 ellipsoid
+and a standard parallel of 0 (which gives the Mercator projection).
+GeographicLib::AlbersEqualArea::CylindricalEqualArea,
+AzimuthalEqualAreaNorth, and AzimuthalEqualAreaSouth, likewise provide
+special cases of the equal area projection.
+
+GeographicLib::UTMUPS uses TransverseMercator::UTM and
+PolarStereographic::UPS to perform the UTM and UPS
+projections.  The class offers a uniform interface to UTM and UPS by
+treating UPS as UTM zone 0.  This class stores no internal state and the
+forward and reverse projections are provided via static member
+functions.  The forward projection offers the ability to override the
+standard UTM/UPS choice and the UTM zone.
+
+GeographicLib::MGRS transforms between UTM/UPS coordinates and MGRS.
+UPS coordinates are handled as UTM zone 0.  This class stores no
+internal state and the forward (UTM/UPS to MGRS) and reverse (MGRS to
+UTM/UPS) conversions are provided via static member functions.
+
+GeographicLib::GeoCoords holds a single geographic location which may be
+specified as latitude and longitude, UTM or UPS, or MGRS.  Member
+functions are provided to convert between coordinate systems and to
+provide formatted representations of them.
+<a href="GeoConvert.1.html">GeoConvert</a> is a simple command line
+utility to provide access to the GeoCoords class.
+
+GeographicLib::TransverseMercatorExact is a drop in replacement for
+TransverseMercator which uses the exact formulas, based on elliptic
+functions, for the projection as given by Lee.
+<a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a> is a
+simple command line utility to test to the TransverseMercator and
+TransverseMercatorExact.
+
+GeographicLib::Geodesic and GeographicLib::GeodesicLine perform geodesic
+calculations.  The constructor for GeographicLib::Geodesic specifies the
+ellipsoid and the direct and inverse calculations are implemented as
+const member functions.  GeographicLib::Geocentric::WGS84 is a const
+static instantiation of Geodesic specific for the WGS84 ellipsoid.  In
+order to perform a series of direct geodesic calculations on a single
+line, the GeographicLib::GeodesicLine class can be used.  This packages
+all the information needed to specify a geodesic.  A const member
+function returns the coordinates a specified distance from the starting
+point.  <a href="GeodSolve.1.html">GeodSolve</a> is a simple command
+line utility to perform geodesic calculations.
+GeographicLib::PolygonArea is a class which compute the area of geodesic
+polygons using the Geodesic class and <a
+href="Planimeter.1.html">Planimeter</a> is a command line utility for
+the same purpose.  GeographicLib::AzimuthalEquidistant,
+GeographicLib::CassiniSoldner, and GeographicLib::Gnomonic are
+projections based on the Geodesic class.  <a
+href="GeodesicProj.1.html">GeodesicProj</a> is a command line utility to
+exercise these projections.
+
+GeographicLib::GeodesicExact and GeographicLib::GeodesicLineExact are
+drop in replacements for GeographicLib::Geodesic and
+GeographicLib::GeodesicLine in which the solution is given in terms of
+elliptic integrals (computed by GeographicLib::EllipticFunction).
+These classes should be used if the absolute value of the flattening
+exceeds 0.02.  The -E option to <a href="GeodSolve.1.html">GeodSolve</a>
+uses these classes.
+
+GeographicLib::Geocentric and GeographicLib::LocalCartesian convert between
+geodetic and geocentric or a local cartesian system.  The constructor for
+specifies the ellipsoid and the forward and reverse projections are
+implemented as const member functions.  GeographicLib::Geocentric::WGS84 is a
+const static instantiation of Geocentric specific for the WGS84 ellipsoid.
+<a href="CartConvert.1.html">CartConvert</a> is a simple command line
+utility to provide access to these classes.
+
+GeographicLib::Geoid evaluates geoid heights by interpolation.  This is
+provided by the operator() member function.
+<a href="GeoidEval.1.html">GeoidEval</a> is a simple command line
+utility to provide access to this class.  This class requires
+installation of data files for the various geoid models; see \ref
+geoidinst for details.
+
+GeographicLib::Ellipsoid is a class which performs latitude
+conversions and returns various properties of the ellipsoid.
+
+GeographicLib::GravityModel evaluates the earth's gravitational field
+using a particular gravity model.  Various member functions return the
+gravitational field, the gravity disturbance, the gravity anomaly, and
+the geoid height <a href="Gravity.1.html">Gravity</a> is a simple
+command line utility to provide access to this class.  If the field
+several points on a circle of latitude are sought then use
+GeographicLib::GravityModel::Circle to return a
+GeographicLib::GravityCircle object whose member functions performs the
+calculations efficiently.  (This is particularly important for high
+degree models such as EGM2008.)  These classes requires installation of
+data files for the various gravity models; see \ref gravityinst for
+details.
+
+GeographicLib::MagneticModel evaluates the earth's magnetic field using
+a particular magnetic model.  The field is provided by the operator()
+member function.  <a href="MagneticField.1.html">MagneticField</a> is a
+simple command line utility to provide access to this class.  If the
+field several points on a circle of latitude are sought then use
+GeographicLib::MagneticModel::Circle to return a
+GeographicLib::MagneticCircle object whose operator() member function
+performs the calculation efficiently.  (This is particularly important
+for high degree models such as emm2010.)  These classes requires
+installation of data files for the various magnetic models; see \ref
+magneticinst for details.
+
+GeographicLib::Constants, GeographicLib::Math, GeographicLib::Utility,
+GeographicLib::DMS, are general utility class which are used
+internally by the library; in addition GeographicLib::EllipticFunction
+is used by GeographicLib::TransverseMercatorExact,
+GeographicLib::Ellipsoid, and GeographicLib::GeodesicExact, and
+GeographicLib::GeodesicLineExact; GeographicLib::Accumulator is used
+by GeographicLib::PolygonArea, and GeographicLib::SphericalEngine,
+GeographicLib::CircularEngine, GeographicLib::SphericalHarmonic,
+GeographicLib::SphericalHarmonic1, and
+GeographicLib::SphericalHarmonic2 facilitate the summation of
+spherical harmonic series which is needed by and
+GeographicLib::MagneticModel and GeographicLib::MagneticCircle.  One
+important definition is GeographicLib::Math::real which is the type
+used for real numbers.  This allows the library to be easily switched
+to using floats, doubles, or long doubles.  However all the testing
+has been with real set to double and the library should be installed
+in this way.
+
+In general, the constructors for the classes in %GeographicLib check
+their arguments and throw GeographicLib::GeographicErr exceptions with a
+explanatory message if these are illegal.  The member functions, e.g.,
+the projections implemented by TransverseMercator and
+PolarStereographic, the solutions to the geodesic problem, etc.,
+typically do <i>not</i> check their arguments; the calling program
+should ensure that the arguments are legitimate.  However, the functions
+implemented by UTMUPS, MGRS, and GeoCoords do check their arguments and
+may throw GeographicLib::GeographicErr exceptions.  Similarly Geoid may
+throw exceptions on file errors.  If a function does throw an exception,
+then the function arguments used for return values will not have been
+altered.
+
+%GeographicLib attempts to act sensibly with NaNs.  NaNs in constructors
+typically throw errors (an exception is GeodesicLine).  However, calling
+the class functions with NaNs as arguments is not an error; NaNs are
+returned as appropriate.  "INV" is treated as an invalid zone
+designation by UTMUPS.  "INVALID" is the corresponding invalid MGRS
+string.  (Similary "nan" is the equivalent invalid Geohash.)  NaNs allow
+the projection of polylines which are separated by NaNs; in this format
+they can be easily plotted in Matlab.
+
+A note about portability.  For the most part, the code uses standard C++
+and should be able to be deployed on any system with a modern C++
+compiler.  System dependencies come into
+ - GeographicLib::Math -- GeographicLib needs to define functions such
+   as atanh for systems that lack them.  The system dependence will
+   disappear with the adoption of C++11 because the needed functions are
+   part of that standard.
+ - use of long double -- the type is used only for testing.  On systems
+   which lack this data type the cmake and autoconf configuration
+   methods should detect its absence and omit the code that depends on
+   it.
+ - GeographicLib::Geoid, GeographicLib::GravityModel, and
+   GeographicLib::MagneticModel -- these class uses system-dependent
+   default paths for looking up the respective datasets.  It also relies
+   on getenv to find the value of the environment variables.
+ - GeographicLib::Utility::readarray reads numerical data from binary
+   files.  This assumes that floating point numbers are in IEEE format.
+   It attempts to handled the "endianness" of the target platform using
+   the WORDS_BIGENDIAN macro (which sets the compile-time constant
+   GeographicLib::Math::bigendian).
+
+An attempt is made to maintain backward compatibility with
+%GeographicLib (especially at the level of your source code).  Sometimes
+it's necessary to take actions that depend on what version of
+%GeographicLib is being used; for example, you may want to use a new
+feature of %GeographicLib, but want your code still to work with older
+versions.  In that case, you can test the values of the macros
+GEOGRAPHICLIB_VERSION_MAJOR, GEOGRAPHICLIB_VERSION_MINOR, and
+GEOGRAPHICLIB_VERSION_PATCH; these expand to numbers (and the last one
+is usually 0); these macros appeared starting in version 1.34.  There's
+also a macro GEOGRAPHICLIB_VERSION_STRING which expands to, e.g.,
+"1.34"; this macro has been defined since version 1.9.
+
+<center>
+Back to \ref utilities.  Forward to \ref other.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page other Implementations in other languages
+
+<center>
+Back to \ref organization.  Forward to \ref geoid.  Up to \ref contents.
+</center>
+
+Implementations of subsets of %GeographicLib are available in other languages
+- \ref c-fortran
+- \ref java.
+- \ref javascript.
+- \ref python.
+- \ref matlab.
+- \ref maxima.
+- \ref dotnet.
+
+\section c-fortran C and Fortran implementation
+
+The directories <code>legacy/C</code> and <code>legacy/Fortran</code>
+contain implementations of GeographicLib::Geodesic,
+GeographicLib::GeodesicLine, and GeographicLib::PolygonArea in C and
+Fortran respectively.  These are intended for use in old codes written
+in these languages and should work any reasonably modern compiler.
+These implementations are entirely self-contained and do not depend on
+the rest of %GeographicLib.  Sample main programs to solve the direct
+and inverse geodesic problems and to compute polygonal areas are
+provided.
+
+For documentation, see
+ - <a href="C/index.html">C library for geodesics</a>,
+ - <a href="Fortran/index.html">Fortran library for geodesics</a>.
+
+\section java Java implementation
+
+The directory <code>java</code> contains implementations of
+GeographicLib::Geodesic, GeographicLib::GeodesicLine, and
+GeographicLib::PolygonArea in Java.  This implementation is entirely
+self-contained and does not depend on the rest of %GeographicLib.
+Sample main programs to solve the direct and inverse geodesic problems
+and to compute polygonal areas are provided.
+
+For documentation, see
+ - <a href="java/index.html">Java library for geodesics</a>.
+
+\section javascript JavaScript implementation
+
+The directory doc/scripts/GeographicLib contains the classes
+- GeographicLib::Math
+- GeographicLib::Accumulator
+- GeographicLib::Geodesic
+- GeographicLib::GeodesicLine
+- GeographicLib::PolygonArea
+- GeographicLib::DMS
+.
+translated into JavaScript.  See Interface.js for a simple JavaScript
+interface to these routines (documented near the top of the file).
+Examples of using this interface are
+- a <a href="../scripts/geod-calc.html">geodesic calculator</a> showing
+  the solution of direct and inverse geodesic problem, finding
+  intermediate points on a geodesic line, and computing the area of a
+  geodesic polygon.
+- <a href="../scripts/geod-google.html">displaying geodesics in Google
+  Maps</a> which shows the geodesic, the geodesic circle, and various
+  geodesic envelopes.
+.
+These examples include a "stripped" version of the JavaScript code, \code
+<script type="text/javascript"
+        src="http://geographiclib.sf.net/scripts/geographiclib.js">
+</script> \endcode
+which loads faster.
+
+\section python Python implementation
+
+A python implementation of the geodesic routines from GeographicLib
+are provided in the python/geographiclib directory (which is installed
+as PREFIX/lib/python/site-packages/geographiclib, if
+COMMON_INSTALL_PATH is ON, and as PREFIX/python/geographiclib,
+otherwise).  This contains implementations of the classes
+- GeographicLib::Math
+- GeographicLib::Accumulator
+- GeographicLib::Geodesic
+- GeographicLib::GeodesicLine
+- GeographicLib::PolygonArea
+.
+You can also download the python interface independent of the rest of
+%GeographicLib from
+- <a href="http://pypi.python.org/pypi/geographiclib">
+  http://pypi.python.org/pypi/geographiclib</a>
+.
+and then unpack the .tar.gz or .zip file.
+
+You can "install" these routines, so that they are in python's default
+path with, for example \verbatim
+  cd geographiclib-1.16
+  python setup.py install
+\endverbatim
+(this will require root privileges).  Or else you can set the path
+within python using \code
+>>> import sys
+>>> sys.path.append("/usr/local/lib/python/site-packages")
+\endcode
+
+An example of using this interface is \code
+>>> from geographiclib.geodesic import Geodesic
+>>> # The geodesic inverse problem
+... Geodesic.WGS84.Inverse(-41.32, 174.81, 40.96, -5.50)
+>>> # The geodesic direct problem
+... Geodesic.WGS84.Direct(40.6, -73.8, 45, 10000e3)
+>>> # How to obtain several points along a geodesic
+... line = Geodesic.WGS84.Line(40.6, -73.8, 45)
+>>> line.Position( 5000e3)
+>>> line.Position(10000e3)
+>>> # Computing the area of a geodesic polygon
+... def p(lat,lon): return {'lat': lat, 'lon': lon}
+...
+>>> Geodesic.WGS84.Area([p(0, 0), p(0, 90), p(90, 0)])
+>>> # Introductory help
+... help(Geodesic)
+\endcode
+
+Another illustrative exercise is finding the point midway between JFK
+Airport to Singapore Changi Airport
+\code
+from geographiclib.geodesic import Geodesic
+
+# Coordinates of airports
+lat1, lon1 = 40.640, -73.779  # JFK
+lat2, lon2 =  1.359, 103.989  # SIN
+
+# Compute path from 1 to 2
+g = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2)
+
+# Compute midpoint starting at 1
+h = Geodesic.WGS84.Direct(lat1, lon1, g['azi1'], g['s12']/2)
+print(h['lat2'], h['lon2']);
+\endcode
+
+(Note: The initial version of setup.py was provided by Andrew MacIntyre
+of the Australian Communications and Media Authority.)
+
+\section matlab Matlab and Octave implementations
+
+The <code>matlab</code> directory contains
+ - Native Matlab implementations of the geodesic routines.  To use
+   these, start Matlab or Octave and run one of (for example) \verbatim
+   addpath /usr/local/libexec/GeographicLib/matlab
+   addpath 'C:/pkg-vc10-x64/GeographicLib-1.34/libexec/GeographicLib/matlab'
+   \endverbatim
+   The available functions are:
+   - geoddoc: briefly descibe the routines
+   - geodreckon: solve the direct geodesic problem
+   - geoddistance: solve the inverse geodesic problem
+   - geodarea: compute the area of ellipsoidal polygons
+   .
+   Use the help function to get documentation, e.g., \code
+   help geoddistance \endcode
+   to obtain documentation.  These functions are also available as a
+   standalone package from
+   <a href="http://www.mathworks.com/matlabcentral/fileexchange/">
+   Matlab File Exchange</a> using the link
+   - <a href="http://www.mathworks.com/matlabcentral/fileexchange/39108">
+     http://www.mathworks.com/matlabcentral/fileexchange/39108</a>
+ - Native Matlab implementations of projections which are related to
+   geodesics.  These are
+   - geodproj: briefly descibe the routines
+   - eqdazim_fwd, eqdazim_inv: azimuthal equidistant
+   - cassini_fwd, cassini_inv: Cassini-Soldner
+   - tranmerc_fwd, tranmerc_inv: transverse Mercator
+   - gnomonic_fwd, gnomonic_inv: ellipsoidal gnomonic
+   - utm_fwd, utm_inv: universal transverse Mercator
+   .
+   These functions are also available as a package from
+   <a href="http://www.mathworks.com/matlabcentral/fileexchange/">
+   Matlab File Exchange</a> using the link
+   - <a href="http://www.mathworks.com/matlabcentral/fileexchange/39366">
+     http://www.mathworks.com/matlabcentral/fileexchange/39366</a>
+   .
+   (This requires that the previous package also be installed.)
+ - Interface code so that some %GeographicLib classes can be accessed
+   from Matlab or Octave.  The rest of this section describes how to
+   compile and use these interfaces.
+
+There are two ways of compiling the interface code: (1) using cmake and
+(2) invoking the compiler from Matlab.
+ - <b>Using cmake:</b> Before running cmake, configure MATLAB on
+   Windows to use the same compiler that you're going to use for compiling
+   %GeographicLib.  For example \verbatim
+   mex.bat -setup
+
+   Please choose your compiler for building MEX-files:
+   Would you like mex to locate installed compilers [y]/n? y
+   Select a compiler:
+   [1] Microsoft Visual C++ 2012 in C:\Program Files (x86)\Microsoft Visual Studio 11.0
+   [2] Microsoft Visual C++ 2010 in C:\Program Files (x86)\Microsoft Visual Studio 10.0
+
+   [0] None
+
+   Compiler: 2
+   etc. \endverbatim
+   (This will require that mex.bat is in your PATH.  With Linux, use
+   <code>mex -setup</code>.)  Then configure cmake with, for example
+   \verbatim
+   cmake -G "Visual Studio 10" -D MATLAB_COMPILER=mex ..
+   cmake --build . --config Release --target matlabinterface \endverbatim
+   (Note that only the Release configuration is supported for Matlab.)
+   If you are running a 64-bit version of Matlab, be sure to select a
+   64-bit generator with cmake, e.g., "Visual Studio 10 Win64".  Finally
+   compile %GeographicLib with Visual Studio.  (The binary installer for
+   64-bit Windows includes the compiled interface built with Visual
+   Studio 10 and Matlab R2013a 64-bit).<br>
+   On Linux systems, you can compile the interface for use with octave
+   instead by using \verbatim
+   cmake -D MATLAB_COMPILER=mkoctfile ..
+   make matlabinterface \endverbatim
+ - <b>Invoking the compiler from Matlab or Octave:</b> Start Matlab or
+   Octave and run, e.g., \code
+   mex -setup
+   cd 'C:/pkg-vc10-x64/GeographicLib-1.34/matlab'
+   help geographiclibinterface
+   geographiclibinterface('C:/pkg-vc10/GeographicLib-1.34');
+   addpath(pwd);
+   \endcode
+   The first command allows you to select the compiler to use (which
+   should be the same as that used to compile %GeographicLib).
+
+To use the interface routines for %GeographicLib, run one of (for
+example) \verbatim
+  addpath /usr/local/libexec/GeographicLib/matlab
+  addpath 'C:/pkg-vc10-x64/GeographicLib-1.34/libexec/GeographicLib/matlab'
+\endverbatim
+in Octave or Matlab.  The available functions are:
+ - geodesicdirect: solve direct geodesic problem
+   (see GeographicLib::Geodesic::Direct)
+ - geodesicinverse: solve inverse geodesic problem
+   (see GeographicLib::Geodesic::Inverse)
+ - geodesicline: compute points along a geodesic
+   (see GeographicLib::GeodesicLine::Position)
+ - polygonarea: compute area of a geodesic polygon
+   (see GeographicLib::PolygonArea)
+ - utmupsforward: convert geographic coordinates to UTM/UPS
+   (see GeographicLib::UTMUPS::Forward)
+ - utmupsreverse: convert UTM/UPS coordinates to geographic
+   (see GeographicLib::UTMUPS::Reverse)
+ - mgrsforward: convert UTM/UPS coordinates to MGRS
+   (see GeographicLib::MGRS::Forward)
+ - mgrsreverse: convert MGRS coordinates to UTM/UPS
+   (see GeographicLib::MGRS::Reverse)
+ - geoidheight: compute geoid height
+   (see GeographicLib::Geoid::operator()())
+ - geocentricforward: convert geographic coordinates to geocentric
+   (see GeographicLib::Geocentric::Forward)
+ - geocentricreverse: convert geocentric coordinates to geographic
+   (see GeographicLib::Geocentric::Reverse)
+ - localcartesianforward: convert geographic coordinates to local cartesian
+   (see GeographicLib::LocalCartesian::Forward)
+ - localcartesianreverse: convert local cartesian coordinates to geographic
+   (see GeographicLib::LocalCartesian::Reverse)
+ .
+These routines just offer a simple interface to the corresponding C++
+class.  Use the help function to get documentation, e.g., \code
+  help geodesicdirect \endcode
+Unfortunately, the help function does not work for compiled functions in
+Octave; in this case, just list the .m file, e.g., \code
+  type geodesicdirect \endcode
+Other useful functions, e.g., to convert from geographic
+coordinates to MGRS can easily be written with Matlab code.
+
+Note that geoidheight, when compiled with Visual Studio 2008 causes
+Matlab to crash.  (The problem does not occur with Visual Studio 2005 or
+Visual Studio 2010.)
+
+\section maxima Maxima routines
+
+Maxima is a free computer algebra system which can be downloaded from
+http://maxima.sf.net.  Maxima was used to generate the series used by
+GeographicLib::TransverseMercator (<a href="tmseries.mac">
+tmseries.mac</a>) and GeographicLib::Geodesic (<a href="geod.mac">
+geod.mac</a>) and to generate accurate data for testing
+(<a href="tm.mac"> tm.mac</a> and <a href="geodesic.mac">
+geodesic.mac</a>).  The latter uses Maxima's bigfloat arithmetic
+together with series extended to high order or solutions in terms of
+elliptic integrals (<a href="ellint.mac"> ellint.mac</a>).  These files
+contain brief instructions on how to use them.
+
+\section dotnet .NET wrapper
+
+This is a comprehensive wrapper library, written and maintained by Scott
+Heiman, which exposes all of the functionality of %GeographicLib to the
+.NET family of languages.  For documentation, see
+ - <a href="NET/index.html">NETGeographicLib .NET wrapper library</a>.
+
+<center>
+Back to \ref organization.  Forward to \ref geoid.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page geoid Geoid height
+
+<center>
+Back to \ref other.  Forward to \ref gravity.  Up to \ref contents.
+</center>
+
+The gravitational equipotential surface approximately coinciding with
+mean sea level is called the geoid.  The GeographicLib::Geoid class and
+the <a href="GeoidEval.1.html">GeoidEval</a> utility evaluate the height
+of the geoid above the WGS84 ellipsoid.  This can be used to convert
+heights above mean sea level to heights above the WGS84 ellipsoid.
+Because the normal to the ellipsoid differs from the normal to the geoid
+(the direction of a plumb line) there is a slight ambiguity in the
+measurement of heights; however for heights up to 10 km this ambiguity
+is only 1 mm.
+
+The geoid is usually approximated by an "earth gravity model" (EGM).
+The models published by the NGA are:
+- <b>EGM84</b>:
+  http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html
+- <b>EGM96</b>:
+  http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html
+- <b>EGM2008</b>:
+  http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
+.
+GeographicLib::Geoid offers a uniform way to handle all 3 geoids at a
+variety of grid resolutions.  (In contrast, the software tools that NGA
+offers are different for each geoid, and the interpolation programs are
+different for each grid resolution.  In addition these tools are written
+in Fortran with is nowadays difficult to integrate with other software.)
+
+Unlike other components of %GeographicLib, there is a appreciable error
+in the results obtained (at best, the RMS error is 1 mm).  However the
+class provides methods to report the maximum and RMS errors in the
+results.  The class also returns the gradient of the geoid.  This can be
+used to estimate the direction of a plumb line relative to the WGS84
+ellipsoid.
+
+The GeographicLib::GravityModel class calculates geoid heights using the
+underlying gravity model.  This is slower then GeographicLib::Geoid but
+considerably more accurate.  This class also can accurately compute all
+the components of the acceleration due to gravity (and hence the
+direction of plumb line).
+
+Go to
+ - \ref geoidinst
+ - \ref geoidformat
+ - \ref geoidinterp
+ - \ref geoidcache
+ - \ref testgeoid
+
+\section geoidinst Installing the geoid datasets
+
+The geoid heights are computed using interpolation into a rectangular
+grid.  The grids are read from data files which have been are computed
+using the NGA synthesis programs in the case of the EGM84 and EGM96
+models and using the NGA binary gridded data files in the case of
+EGM2008.  These data files are available for download:
+<center>
+<table>
+<caption>Available geoid data files</caption>
+<tr>
+ <th rowspan="2">name         <th rowspan="2">geoid    <th rowspan="2">grid
+ <th rowspan="2">size\n(MB)
+ <th colspan="3"><center>Download Links (size, MB)</center></th>
+<tr>
+ <th>tar file</th>
+ <th>Windows\n installer</th>
+ <th>zip file</th>
+<tr>
+ <td>egm84-30
+ <td>EGM84
+ <td><center>30'</center>
+ <td><center>0.6</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-30.tar.bz2">
+ link</a> (0.5)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-30.exe">
+ link</a> (0.8)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-30.zip">
+ link</a> (0.5)</center>
+<tr>
+ <td>egm84-15
+ <td>EGM84
+ <td><center>15'</center>
+ <td><center>2.1</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-15.tar.bz2">
+ link</a> (1.5)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-15.exe">
+ link</a> (1.9)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-15.zip">
+ link</a> (2.0)</center>
+<tr>
+ <td>egm96-15
+ <td>EGM96
+ <td><center>15'</center>
+ <td><center>2.1</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-15.tar.bz2">
+ link</a> (1.5)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-15.exe">
+ link</a> (1.9)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-15.zip">
+ link</a> (2.0)</center>
+<tr>
+ <td>egm96-5
+ <td>EGM96
+ <td><center>5'</center>
+ <td><center> 19</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-5.tar.bz2">
+ link</a> (11)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-5.exe">
+ link</a> (11)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-5.zip">
+ link</a> (17)</center>
+<tr>
+ <td>egm2008-5
+ <td>EGM2008
+ <td><center>5'</center>
+ <td><center> 19</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-5.tar.bz2">
+ link</a> (11)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-5.exe">
+ link</a> (11)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-5.zip">
+ link</a> (17)</center>
+<tr>
+ <td>egm2008-2_5
+ <td>EGM2008
+ <td><center>2.5'</center>
+ <td><center> 75</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-2_5.tar.bz2">
+ link</a> (35)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-2_5.exe">
+ link</a> (33)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-2_5.zip">
+ link</a> (65)</center>
+<tr>
+ <td>egm2008-1
+ <td>EGM2008
+ <td><center>1'</center>
+ <td><center>470</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-1.tar.bz2">
+ link</a> (170)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-1.exe">
+ link</a> (130)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-1.zip">
+ link</a> (390)</center>
+</table>
+</center>
+The "size" column is the size of the uncompressed data and it also
+gives the memory requirements for caching the entire dataset using the
+GeographicLib::Geoid::CacheAll method.
+At a minimum you should install egm96-5 and either egm2008-1 or
+egm2008-2_5.  Many applications use the EGM96 geoid, however the use of
+EGM2008 is growing. (EGM84 is rarely used now.)
+
+For Linux and Unix systems, %GeographicLib provides a shell script
+geographiclib-get-geoids (typically installed in /usr/local/sbin) which
+automates the process of downloading and installing the geoid data.  For
+example
+\verbatim
+   geographiclib-get-geoids best # to install egm84-15, egm96-5, egm2008-1
+   geographiclib-get-geoids -h   # for help
+\endverbatim
+This script should be run as a user with write access to the
+installation directory, which is typically
+/usr/local/share/GeographicLib (this can be overridden with the -p
+flag), and the data will then be placed in the "geoids" subdirectory.
+
+Windows users should download and run the Windows installers.  These
+will prompt for an installation directory with the default being one of
+\verbatim
+   C:/Documents and Settings/All Users/Application Data/GeographicLib
+   C:/ProgramData/GeographicLib
+\endverbatim
+(which you probably should not change) and the data is installed in the
+"geoids" sub-directory.  (The second directory name is an alternate name
+that Windows 7 uses for the "Application Data" directory.)
+
+Otherwise download \e either the tar.bz2 file \e or the zip file (they
+have the same contents).  If possible use the tar.bz2 files, since these
+are compressed about 2 times better than the zip file.  To unpack these,
+run, for example
+\verbatim
+   mkdir -p /usr/local/share/GeographicLib
+   tar xofjC egm96-5.tar.bz2 /usr/local/share/GeographicLib
+   tar xofjC egm2008-2_5.tar.bz2 /usr/local/share/GeographicLib
+   etc.
+\endverbatim
+and, again, the data will be placed in the "geoids" subdirectory.
+
+However you install the geoid data, all the datasets should
+be installed in the same directory.  GeographicLib::Geoid and
+<a href="GeoidEval.1.html">GeoidEval</a> uses a compile time default to
+locate the datasets.  This is
+- /usr/local/share/GeographicLib/geoids, for non-Windows systems
+- C:/Documents and Settings/All Users/Application Data/GeographicLib/geoids,
+  for Windows systems
+.
+consistent with the examples above.  This may be overridden at run-time
+by defining the GEOID_PATH or the GEOGRAPHICLIB_DATA environment variables;
+see GeographicLib::Geoid::DefaultGeoidPath() for details.  Finally, the
+path may be set using the optional second argument to the
+GeographicLib::Geoid constructor or with the "-d" flag to
+<a href="GeoidEval.1.html">GeoidEval</a>.  Supplying the "-h" flag to
+<a href="GeoidEval.1.html">GeoidEval</a> reports the default geoid path
+for that utility.  The "-v" flag causes GeoidEval to report the full
+path name of the data file it uses.
+
+\section geoidformat The format of the geoid data files
+
+The gridded data used by the GeographicLib::Geoid class is stored in
+16-bit PGM files.  Thus the data for egm96-5 might be stored in the file
+- /usr/local/share/GeographicLib/geoids/egm96-5.pgm
+.
+PGM simple graphic format with the following properties
+- it is well documented
+  <a href="http://netpbm.sf.net/doc/pgm.html">here</a>;
+- there are no separate "little-endian" and "big-endian" versions;
+- it uses 1 or 2 bytes per pixel;
+- pixels can be randomly accessed;
+- comments can be added to the file header;
+- it is sufficiently simple that it can be easily read without using the
+  <a href="http://netpbm.sf.net/doc/libnetpbm.html">libnetpbm</a>
+  library (and thus we avoid adding a software dependency to
+  %GeographicLib).
+.
+The major drawback of this format is that since there are only 65535
+possible pixel values, the height must be quantized to 3 mm.  However,
+the resulting quantization error (up to 1.5 mm) is typically smaller
+than the linear interpolation errors.  The comments in the header for
+egm96-5 are
+\verbatim
+   # Geoid file in PGM format for the GeographicLib::Geoid class
+   # Description WGS84 EGM96, 5-minute grid
+   # URL http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html
+   # DateTime 2009-08-29 18:45:03
+   # MaxBilinearError 0.140
+   # RMSBilinearError 0.005
+   # MaxCubicError 0.003
+   # RMSCubicError 0.001
+   # Offset -108
+   # Scale 0.003
+   # Origin 90N 0E
+   # AREA_OR_POINT Point
+   # Vertical_Datum WGS84
+\endverbatim
+Of these lines, the Scale and Offset lines are required and define the
+conversion from pixel value to height (in meters) using \e height =
+\e offset + \e scale \e pixel.  The Geoid constructor also reads the
+Description, DateTime, and error lines (if present) and stores the
+resulting data so that it can be returned by
+GeographicLib::Geoid::Description, GeographicLib::Geoid::DateTime,
+GeographicLib::Geoid::MaxError, and GeographicLib::Geoid::RMSError
+methods.  The other lines serve as additional documentation but are not
+used by this class.  Accompanying egm96-5.pgm (and similarly with the
+other geoid data files) are two files egm96-5.wld and
+egm96-5.pgm.aux.xml.  The first is an ESRI "world" file and the second
+supplies complete projection metadata for use by
+<a href="http://www.gdal.org">GDAL</a>.  Neither of these files is read
+by GeographicLib::Geoid.
+
+You can use gdal_translate to convert the data files to a standard
+GeoTiff, e.g., with
+\verbatim
+   gdal_translate -ot Float32 -scale 0 65000 -108 87 egm96-5.pgm egm96-5.tif
+\endverbatim
+The arguments to -scale here are specific to the Offset and Scale
+parameters used in the pgm file (note 65000 * 0.003 - 108 = 87).  You
+can check these by running <a href="GeoidEval.1.html">GeoidEval</a> with
+the "-v" option.
+
+Here is a sample script which uses GDAL to create a 1-degree
+squared grid of geoid heights at 3" resolution (matching DTED1) by
+bilinear interpolation.
+\verbatim
+   #! /bin/sh
+   lat=37
+   lon=067
+   res=3                           # resolution in seconds
+   TEMP=`mktemp junkXXXXXXXXXX`    # temporary file for GDAL
+   gdalwarp -q -te `echo $lon $lat $res | awk '{
+       lon = $1; lat = $2; res = $3;
+       printf "%.14f %.14f %.14f %.14f",
+           lon  -0.5*res/3600, lat  -0.5*res/3600,
+           lon+1+0.5*res/3600, lat+1+0.5*res/3600;
+   }'` -ts $((3600/res+1)) $((3600/res+1)) -r bilinear egm96-5.tif $TEMP
+   gdal_translate -quiet \
+       -mo AREA_OR_POINT=Point \
+       -mo Description="WGS84 EGM96, $res-second grid" \
+       -mo Vertical_Datum=WGS84 \
+       -mo Tie_Point_Location=pixel_corner \
+       $TEMP e$lon-n$lat.tif
+   rm -f $TEMP
+\endverbatim
+
+Because the pgm files are uncompressed, they can take up a lot of disk
+space.  Some compressed formats compress in tiles and so might be
+compatible with the requirement that the data can be randomly accessed.
+In particular gdal_translate can be used to convert the pgm files to
+compressed tiff files with
+\verbatim
+gdal_translate -co COMPRESS=LZW -co PREDICTOR=2 \
+   -co TILED=YES -co BLOCKXSIZE=256 -co BLOCKYSIZE=256 \
+   egmyy-g.pgm egmyy-g.tif
+\endverbatim
+The resulting files sizes are
+\verbatim
+                  pgm      tif
+    egm84-30      0.6 MB   0.5 MB
+    egm84-15      2.1 MB   1.4 MB
+    egm96-15      2.1 MB   1.5 MB
+    egm96-5        19 MB   8.5 MB
+    egm2008-5      19 MB   9.8 MB
+    egm2008-2_5    75 MB    28 MB
+    egm2008-1     470 MB    97 MB
+\endverbatim
+Currently, there are no plans for %GeographicLib to support this
+compressed format.
+
+\section geoidinterp Interpolating the geoid data
+
+GeographicLib::Geoid evaluates the geoid height using bilinear or cubic
+interpolation.  The gradient of the geoid height is obtained by
+differentiating the interpolated height and referencing the result to
+distance on the WGS84 ellipsoid.
+
+<b>WARNING</b>: Although GeographicLib::Geoid computes the gradient of
+the geoid height, this is subject to large quantization errors as a
+result of the way that the geoid data is stored.  This is particularly
+acute for fine grids, at high latitudes, and for the easterly gradient.
+If you need to compute the direction of the acceleration due to gravity
+accurately, you should use GeographicLib::GravityModel::Gravity.
+
+The bilinear interpolation is based on the values at the 4 corners of
+the enclosing cell.  The interpolated height is a continuous function of
+position; however the gradient has discontinuities are cell boundaries.
+The quantization of the data files exacerbates the errors in the
+gradients.
+
+The cubic interpolation is a least-squares fit to the values on a
+12-point stencil with weights as follows:
+\verbatim
+   . 1 1 .
+   1 2 2 1
+   1 2 2 1
+   . 1 1 .
+\endverbatim
+The cubic is constrained to be independent of longitude when evaluating
+the height at one of the poles.  Cubic interpolation is considerably
+more accurate than bilinear interpolation; however, in this
+implementation there are small discontinuities in the heights are cell
+boundaries.  The over-constrained cubic fit slightly reduces the
+quantization errors on average.
+
+The algorithm for the least squares fit is taken from, F. H. Lesh,
+Multi-dimensional least-squares polynomial curve fitting, CACM 2, 29-30
+(1959).  This algorithm is not part of GeographicLib::Geoid; instead it is
+implemented as
+<a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a>
+code which is used to precompute the matrices to convert the function
+values on the stencil into the coefficients from the cubic polynomial.
+This code is included as a comment in Geoid.cpp.
+
+The interpolation methods are quick and give good accuracy.  Here is a
+summary of the combined quantization and interpolation errors for the
+heights.
+<center><table>
+<caption>Interpolation and quantization errors for geoid heights</caption>
+<tr>
+ <th rowspan="2">name
+ <th rowspan="2">geoid
+ <th rowspan="2">grid
+ <th colspan="2"><center>bilinear error</center></th>
+ <th colspan="2"><center>cubic error</center></th>
+<tr>
+ <th><center>max</center><th><center>rms</center>
+ <th><center>max</center><th><center>rms</center>
+<tr>
+ <td>egm84-30   <td>EGM84  <td><center>30'  </center>
+ <td><center>1.546 m</center><td><center>70 mm</center>
+ <td><center>0.274 m</center><td><center>14 mm</center>
+<tr>
+ <td>egm84-15   <td>EGM84  <td><center>15'  </center>
+ <td><center>0.413 m</center><td><center>18 mm</center>
+ <td><center>0.021 m</center><td><center>1.2 mm</center>
+<tr>
+ <td>egm96-15   <td>EGM96  <td><center>15'  </center>
+ <td><center>1.152 m</center><td><center>40 mm</center>
+ <td><center>0.169 m</center><td><center>7.0 mm</center>
+<tr>
+ <td>egm96-5    <td>EGM96  <td><center> 5'  </center>
+ <td><center>0.140 m</center><td><center>4.6 mm</center>
+ <td><center>0.0032 m</center><td><center>0.7 mm</center>
+<tr>
+ <td>egm2008-5  <td>EGM2008<td><center> 5'  </center>
+ <td><center>0.478 m</center><td><center>12 mm</center>
+ <td><center>0.294 m</center><td><center>4.5 mm</center>
+<tr>
+ <td>egm2008-2_5<td>EGM2008<td><center> 2.5'</center>
+ <td><center>0.135 m</center><td><center>3.2 mm</center>
+ <td><center>0.031 m</center><td><center>0.8 mm</center>
+<tr>
+ <td>egm2008-1  <td>EGM2008<td><center> 1'  </center>
+ <td><center>0.025 m</center><td><center>0.8 mm</center>
+ <td><center>0.0022 m</center><td><center>0.7 mm</center>
+</table></center>
+The errors are with respect to the specific NGA earth gravity model
+(not to any "real" geoid).  The RMS values are obtained using 5 million
+uniformly distributed random points.  The maximum values are obtained by
+evaluating the errors using a different grid with points at the
+centers of the original grid.  (The RMS difference between EGM96 and
+EGM2008 is about 0.5 m.  The RMS difference between EGM84 and EGM96 is
+about 1.5 m.)
+
+The errors in the table above include the quantization errors that arise
+because the height data that GeographicLib::Geoid uses are quantized to
+3 mm.  If, instead, GeographicLib::Geoid were to use data files without
+such quantization artifacts, the overall error would be reduced <i>but
+only modestly</i> as shown in the following table, where only the
+changed rows are included and where the changed entries are given in
+bold:
+<center><table>
+<caption>Interpolation (only!) errors for geoid heights</caption>
+<tr>
+ <th rowspan="2">name
+ <th rowspan="2">geoid
+ <th rowspan="2">grid
+ <th colspan="2"><center>bilinear error</center></th>
+ <th colspan="2"><center>cubic error</center></th>
+<tr>
+ <th><center>max</center><th><center>rms</center>
+ <th><center>max</center><th><center>rms</center>
+<tr>
+ <td>egm96-5    <td>EGM96  <td><center> 5'  </center>
+ <td><center>0.140 m</center><td><center>4.6 mm</center>
+ <td><center><b>0.0026 m</b></center><td><center><b>0.1 mm</b></center>
+<tr>
+ <td>egm2008-2_5<td>EGM2008<td><center> 2.5'</center>
+ <td><center>0.135 m</center><td><center>3.2 mm</center>
+ <td><center>0.031 m</center><td><center><b>0.4 mm</b></center>
+<tr>
+ <td>egm2008-1  <td>EGM2008<td><center> 1'  </center>
+ <td><center>0.025 m</center><td><center><b>0.6 mm</b></center>
+ <td><center><b>0.0010 m</b></center><td><center><b>0.011 mm</b></center>
+</table></center>
+
+\section geoidcache Caching the geoid data
+
+A simple way of calling Geoid is as follows
+\code
+   #include <GeographicLib/Geoid.hpp>
+   #include <iostream>
+   ...
+   GeographicLib::Geoid g("egm96-5");
+   double lat, lon;
+   while (std::cin >> lat >> lon)
+      std::cout << g(lat, lon) << "\n";
+   ...
+\endcode
+
+The first call to g(lat, lon) causes the data for the stencil points (4
+points for bilinear interpolation and 12 for cubic interpolation) to be
+read and the interpolated value returned.  A simple 0th-order caching
+scheme is provided by default, so that, if the second and subsequent
+points falls within the same grid cell, the data values are not reread
+from the file.  This is adequate for most interactive use and also
+minimizes disk accesses for the case when a continuous track is being
+followed.
+
+If a large quantity of geoid calculations are needed, the calculation
+can be sped up by preloading the data for a rectangular block with
+GeographicLib::Geoid::CacheArea or the entire dataset with
+GeographicLib::Geoid::CacheAll.  If the requested points lie within the
+cached area, the cached data values are used; otherwise the data is read
+from disk as before.  Caching all the data is a reasonable choice for
+the 5' grids and coarser.  Caching all the data for the 1' grid will
+require 0.5 GB of RAM and should only be used on systems with sufficient
+memory.
+
+The use of caching does not affect the values returned.  Because of the
+caching and the random file access, this class is \e not normally thread
+safe; i.e., a single instantiation cannot be safely used by multiple
+threads.  If multiple threads need to calculate geoid heights, there are
+two alternatives:
+ - they should all construct thread-local instantiations.
+ - GeographicLib::Geoid should be constructed with \e threadsafe = true.
+   This causes all the data to be read at the time of construction (and
+   if this fails, an exception is thrown), the data file to be closed
+   and the single-cell caching to be turned off.  The resulting object
+   may then be shared safely between threads.
+
+\section testgeoid Test data for geoids
+
+A test set for the geoid models is available at
+ - <a href="http://sf.net/projects/geographiclib/files/testdata/GeoidHeights.dat.gz">
+   GeoidHeights.dat.gz</a>
+ .
+This is about 11 MB (compressed).  This test set consists of a set of
+500000 geographic coordinates together with the corresponding geoid
+heights according to various earth gravity models.
+
+Each line of the test set gives 6 space delimited numbers
+ - latitude (degrees, exact)
+ - longitude (degrees, exact)
+ - EGM84 height (meters, accurate to 1 μm)
+ - EGM96 height (meters, accurate to 1 μm)
+ - EGM2008 height (meters, accurate to 1 μm)
+ .
+The latitude and longitude are all multiples of 10<sup>−6</sup>
+deg and should be regarded as exact.  The geoid heights are computed
+using the harmonic NGA synthesis programs, where the programs were
+compiled (with gfortran) and run under Linux.  In the case of the
+EGM2008 program, a <code>SAVE</code> statement needed to be added to
+subroutine <code>latf</code>, in order for the program to compile
+correctly with a stack-based compiler.  Similarly the EGM96 code
+requires a <code>SAVE</code> statement in subroutine
+<code>legfdn</code>.
+
+<center>
+Back to \ref other.  Forward to \ref gravity.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page gravity Gravity models
+
+<center>
+Back to \ref geoid.  Forward to \ref magnetic.  Up to \ref contents.
+</center>
+
+%GeographicLib can compute the earth's gravitational field with an
+earth gravity model using the GeographicLib::GravityModel and
+GeographicLib::GravityCircle classes and with the
+<a href="Gravity.1.html">Gravity</a> utility.  These models expand the
+gravitational potential of the earth as sum of spherical harmonics.  The
+models also specify a reference ellipsoid, relative to which geoid
+heights and gravity disturbances are measured.
+
+The supported models are
+ - <b>egm84</b>, the
+   <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">
+   Earth Gravity Model 1984</a>, which includes terms up to degree 180.
+ - <b>egm96</b>, the
+   <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">
+   Earth Gravity Model 1996</a>, which includes terms up to degree 360.
+ - <b>egm2008</b>, the
+   <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">
+   Earth Gravity Model 2008</a>, which includes terms up to degree 2190.
+ - <b>wgs84</b>, the
+   <a href="http://earth-info.nga.mil/GandG/publications/tr8350.2/tr8350_2.html">
+   WGS84 Reference Ellipsoid</a>.  This is just reproduces the normal
+   gravitational field for the reference ellipsoid.  Usually
+   GeographicLib::NormalGravity::WGS84 should be used instead.
+
+See
+ - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San
+   Francisco, 1967).
+ .
+for more information.
+
+<b>Acknowledgment:</b> I would like to thank Mathieu Peyréga for
+sharing EGM_Geoid_CalculatorClass from his Geo library with me.  His
+implementation was the first I could easily understand and he and I
+together worked through some of the issues with overflow and underflow
+the occur while performing high-degree spherical harmonic sums.
+
+Go to
+ - \ref gravityinst
+ - \ref gravityformat
+ - \ref gravitynga
+ - \ref gravitygeoid
+ - \ref gravityatmos
+ - \ref gravityparallel
+
+\section gravityinst Installing the gravity models
+
+These gravity models are available for download:
+<center>
+<table>
+<caption>Available gravity models</caption>
+<tr>
+ <th rowspan="2">name         <th rowspan="2">max\n degree
+ <th rowspan="2">size\n(kB)
+ <th colspan="3"><center>Download Links (size, kB)</center></th>
+<tr>
+ <th>tar file</th>
+ <th>Windows\n installer</th>
+ <th>zip file</th>
+<tr>
+ <td>egm84
+ <td><center>180</center>
+ <td><center>27</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm84.tar.bz2">
+ link</a> (26)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm84.exe">
+ link</a> (55)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm84.zip">
+ link</a> (26)</center>
+<tr>
+ <td>egm96
+ <td><center>360</center>
+ <td><center>2100</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm96.tar.bz2">
+ link</a> (2100)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm96.exe">
+ link</a> (2300)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm96.zip">
+ link</a> (2100)</center>
+<tr>
+ <td>egm2008
+ <td><center>2190</center>
+ <td><center>76000</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm2008.tar.bz2">
+ link</a> (75000)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm2008.exe">
+ link</a> (72000)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm2008.zip">
+ link</a> (73000)</center>
+<tr>
+ <td>wgs84
+ <td><center>20</center>
+ <td><center>1</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/wgs84.tar.bz2">
+ link</a> (1)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/wgs84.exe">
+ link</a> (30)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/wgs84.zip">
+ link</a> (1)</center>
+</table>
+</center>
+The "size" column is the size of the uncompressed data.
+
+For Linux and Unix systems, %GeographicLib provides a shell script
+geographiclib-get-gravity (typically installed in /usr/local/sbin)
+which automates the process of downloading and installing the gravity
+models.  For example
+\verbatim
+   geographiclib-get-gravity all  # to install egm84, egm96, egm2008, wgs84
+   geographiclib-get-gravity -h   # for help
+\endverbatim
+This script should be run as a user with write access to the
+installation directory, which is typically
+/usr/local/share/GeographicLib (this can be overridden with the -p
+flag), and the data will then be placed in the "gravity" subdirectory.
+
+Windows users should download and run the Windows installers.  These
+will prompt for an installation directory with the default being one of
+\verbatim
+   C:/Documents and Settings/All Users/Application Data/GeographicLib
+   C:/ProgramData/GeographicLib
+\endverbatim
+(which you probably should not change) and the data is installed in the
+"gravity" sub-directory.  (The second directory name is an alternate name
+that Windows 7 uses for the "Application Data" directory.)
+
+Otherwise download \e either the tar.bz2 file \e or the zip file (they
+have the same contents).  To unpack these, run, for example
+\verbatim
+   mkdir -p /usr/local/share/GeographicLib
+   tar xofjC egm96.tar.bz2 /usr/local/share/GeographicLib
+   tar xofjC egm2008.tar.bz2 /usr/local/share/GeographicLib
+   etc.
+\endverbatim
+and, again, the data will be placed in the "gravity" subdirectory.
+
+However you install the gravity models, all the datasets should be
+installed in the same directory.  GeographicLib::GravityModel and
+<a href="Gravity.1.html">Gravity</a> uses a compile time default to
+locate the datasets.  This is
+- /usr/local/share/GeographicLib/gravity, for non-Windows systems
+- C:/Documents and Settings/All Users/Application Data/GeographicLib/gravity,
+  for Windows systems
+.
+consistent with the examples above.  This may be overridden at run-time
+by defining the GRAVITY_PATH or the GEOGRAPHICLIB_DATA environment
+variables; see GeographicLib::GravityModel::DefaultGravityPath() for
+details.  Finally, the path may be set using the optional second
+argument to the GeographicLib::GravityModel constructor or with the "-d"
+flag to
+<a href="Gravity.1.html">Gravity</a>.  Supplying the "-h" flag to
+<a href="Gravity.1.html">Gravity</a> reports the default path for
+gravity models for that utility.  The "-v" flag causes Gravity to report
+the full path name of the data file it uses.
+
+\section gravityformat The format of the gravity model files
+
+The constructor for GeographicLib::GravityModel reads a file called
+NAME.egm which specifies various properties for the gravity model.  It
+then opens a binary file NAME.egm.cof to obtain the coefficients of the
+spherical harmonic sum.
+
+The first line of the .egm file must consist of "EGMF-v" where EGMF
+stands for "Earth Gravity Model Format" and v is the version number of
+the format (currently "1").
+
+The rest of the File is read a line at a time.  A # character and
+everything after it are discarded.  If the result is just white space it
+is discarded.  The remaining lines are of the form "KEY WHITESPACE
+VALUE".  In general, the KEY and the VALUE are case-sensitive.
+
+GeographicLib::GravityModel only pays attention to the following
+keywords
+ - keywords that affect the field calculation, namely:
+   - <b>ModelRadius</b> (required), the normalizing radius for the model
+     in meters.
+   - <b>ReferenceRadius</b> (required), the major radius \e a for the
+     reference ellipsoid meters.
+   - <b>ModelMass</b> (required), the mass constant \e GM for the model
+     in meters<sup>3</sup>/seconds<sup>2</sup>.
+   - <b>ReferenceMass</b> (required), the mass constant \e GM for the
+     reference ellipsoid in meters<sup>3</sup>/seconds<sup>2</sup>.
+   - <b>AngularVelocity</b> (required), the angular velocity ω for
+     the model \e and the reference ellipsoid in rad
+     seconds<sup>−1</sup>.
+   - <b>Flattening</b>, the flattening of the reference ellipsoid; this
+     can be given a fraction, e.g., 1/298.257223563.  One of
+     <b>Flattening</b> and <b>DynamicalFormFactor</b> is required.
+   - <b>DynamicalFormFactor</b>, the dynamical form factor
+     <i>J</i><sub>2</sub> for the reference ellipsoid.  One of
+     <b>Flattening</b> and <b>DynamicalFormFactor</b> is required.
+   - <b>HeightOffset</b> (default 0), the constant height offset
+     (meters) added to obtain the geoid height.
+   - <b>CorrectionMultiplier</b> (default 1), the multiplier for the
+     "zeta-to-N" correction terms for the geoid height to convert them
+     to meters.
+   - <b>Normalization</b> (default full), the normalization used for the
+     associated Legendre functions (full or schmidt).
+   - <b>ID</b> (required), 8 printable characters which serve as a
+     signature for the .egm.cof file (they must appear as the first 8
+     bytes of this file).
+   .
+   The parameters <b>ModelRadius</b>, <b>ModelMass</b>, and
+   <b>AngularVelocity</b> apply to the gravity model, while
+   <b>ReferenceRadius</b>, <b>ReferenceMass</b>, <b>AngularVelocity</b>,
+   and either <b>Flattening</b> or <b>DynamicalFormFactor</b>
+   characterize the reference ellipsoid.  <b>AngularVelocity</b>
+   (because it can be measured precisely) is the same for the gravity
+   model and the reference ellipsoid.  <b>ModelRadius</b> is merely a
+   scaling parameter for the gravity model and there's no requirement
+   that it be close to the major radius of the earth (although that's
+   typically how it is chosen).  <b>ModelMass</b> and
+   <b>ReferenceMass</b> need not be the same and, indeed, they are
+   slightly difference for egm2008.  As a result the disturbing
+   potential \e T has a 1/\e r dependence at large distances.
+ - keywords that store data that the user can query:
+   - <b>Name</b>, the name of the model.
+   - <b>Description</b>, a more descriptive name of the model.
+   - <b>ReleaseDate</b>, when the model was created.
+ - keywords that are examined to verify that their values are valid:
+   - <b>ByteOrder</b> (default little), the order of bytes in the
+     .egm.cof file.  Only little endian is supported at present.
+ .
+Other keywords are ignored.
+
+The coefficient file NAME.egm.cof is a binary file in little endian
+order.  The first 8 bytes of this file must match the ID given in
+NAME.egm.  This is followed by 2 sets of spherical harmonic
+coefficients.  The first of these gives the gravity potential and the
+second gives the zeta-to-N corrections to the geoid height.  The format
+for each set of coefficients is:
+ - \e N, the maximum degree of the sum stored as a 4-byte signed integer.
+   This must satisfy \e N ≥ −1.
+ - \e M, the maximum order of the sum stored as a 4-byte signed integer.
+   This must satisfy \e N ≥ \e M ≥ −1.
+ - \e C<sub>\e nm</sub>, the coefficients of the cosine coefficients of
+   the sum in column (i.e., \e m) major order.  There are (\e M + 1)
+   (2\e N - \e M + 2) / 2 elements which are stored as IEEE doubles (8
+   bytes).  For example for \e N = \e M = 3, there are 10 coefficients
+   arranged as
+   <i>C</i><sub>00</sub>,
+   <i>C</i><sub>10</sub>,
+   <i>C</i><sub>20</sub>,
+   <i>C</i><sub>30</sub>,
+   <i>C</i><sub>11</sub>,
+   <i>C</i><sub>21</sub>,
+   <i>C</i><sub>31</sub>,
+   <i>C</i><sub>22</sub>,
+   <i>C</i><sub>32</sub>,
+   <i>C</i><sub>33</sub>.
+ - \e S<sub>\e nm</sub>, the coefficients of the sine coefficients of
+   the sum in column (i.e., \e m) major order starting at \e m = 1.
+   There are \e M (2\e N - \e M + 1) / 2 elements which are stored as
+   IEEE doubles (8 bytes).  For example for \e N = \e M = 3, there are 6
+   coefficients arranged as
+   <i>S</i><sub>11</sub>,
+   <i>S</i><sub>21</sub>,
+   <i>S</i><sub>31</sub>,
+   <i>S</i><sub>22</sub>,
+   <i>S</i><sub>32</sub>,
+   <i>S</i><sub>33</sub>.
+ .
+Although the coefficient file is in little endian order, %GeographicLib
+can read it on big endian machines.  It can only be read on machines
+which store doubles in IEEE format.
+
+As an illustration, here is egm2008.egm:
+\verbatim
+EGMF-1
+# An Earth Gravity Model (Format 1) file.  For documentation on the
+# format of this file see
+# http://geographiclib.sf.net/html/gravity.html#gravityformat
+Name            egm2008
+Publisher       National Geospatial Intelligence Agency
+Description     Earth Gravity Model 2008
+URL             http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
+ReleaseDate     2008-06-01
+ConversionDate  2011-11-19
+DataVersion     1
+ModelRadius     6378136.3
+ModelMass       3986004.415e8
+AngularVelocity 7292115e-11
+ReferenceRadius 6378137
+ReferenceMass   3986004.418e8
+Flattening      1/298.257223563
+HeightOffset    -0.41
+
+# Gravitational and correction coefficients taken from
+# EGM2008_to2190_TideFree and Zeta-to-N_to2160_egm2008 from
+# the egm2008 distribution.
+ID              EGM2008A
+\endverbatim
+
+\section gravitynga Comments on the NGA harmonic synthesis code
+
+GeographicLib::GravityModel attempts to reproduce the results of NGA's
+harmonic synthesis code for EGM2008, hsynth_WGS84.f.  Listed here are
+issues that I encountered using the NGA code:
+ -# A compiler which allocates local variables on the stack produces an
+    executable with just returns NaNs.  The problem here is a missing
+    <code>SAVE</code> statement in subroutine <code>latf</code>.
+ -# Because the model and references masses for egm2008 differ (by about
+    1 part in 10<sup>9</sup>), there should be a 1/\e r contribution to
+    the disturbing potential \e T.  However, this term is set to zero in
+    hsynth_WGS84 (effectively altering the normal potential).  This
+    shifts the surface \e W = <i>U</i><sub>0</sub> outward by about 5 mm.
+    Note too that the reference ellipsoid is no longer a level surface of
+    the effective normal potential.
+ -# Subroutine <code>radgrav</code> computes the ellipsoidal coordinate
+    β incorrectly.  This leads to small errors in the deflection
+    of the vertical, ξ and η, when the height above the
+    ellipsoid, \e h, is non-zero (about 10<sup>−7</sup> arcsec at
+    \e h = 400 km).
+ -# There are several expressions which will return inaccurate results
+    due to cancellation.  For example, subroutine <code>grs</code>
+    computes the flattening using \e f = 1 - sqrt(1 -
+    <i>e</i><sup>2</sup>).  Much better is to use \e f =
+    <i>e</i><sup>2</sup>/(1 + sqrt(1 - <i>e</i><sup>2</sup>)).  The
+    expressions for \e q and \e q' in <code>grs</code> and
+    <code>radgrav</code> suffer from similar problems.  The resulting
+    errors are tiny (about 50 pm in the geoid height); however, given
+    that's there's essentially no cost to using more accurate
+    expressions, it's preferable to do so.
+ -# hsynth_WGS84 returns an "undefined" value for \e xi and \e eta at the
+    poles.  Better would be to return the value obtained by taking the
+    limit \e lat -> +/- 90°.
+ .
+Issues 1--4 have been reported to the authors of hsynth_WGS84.
+Issue 1 is peculiar to Fortran and is not encountered in C++ code and
+GeographicLib::GravityModel corrects issues 3--5.  On issue 2,
+GeographicLib::GravityModel neglects the 1/\e r term in \e T in
+GeographicLib::GravityModel::GeoidHeight and
+GeographicLib::GravityModel::SphericalAnomaly in order to produce
+results which match NGA's for these quantities.  On the other hand,
+GeographicLib::GravityModel::Disturbance and
+GeographicLib::GravityModel::T <i>do</i> include this term.
+
+\section gravitygeoid Details of the geoid height and anomaly calculations
+
+Ideally, the geoid represents a surface of constant gravitational
+potential which approximates mean sea level.  In reality some
+approximations are taken in determining this surface.  The steps taking
+by GeographicLib::GravityModel in computing the geoid height are
+described here (in the context of EGM2008).  This mimics NGA's code
+hsynth_WGS84 closely because most users of EGM2008 use the gridded data
+generated by this code (e.g., GeographicLib::Geoid) and it is desirable
+to use a consistent definition of the geoid height.
+ - The model potential is band limited; the minimum wavelength that is
+   represented is 360°/2160 = 10' (i.e., about 10NM or
+   18.5km).  The maximum degree for the spherical harmonic sum is 2190;
+   however the model was derived using ellipsoidal harmonics of degree
+   and order 2160 and the degree was increased to 2190 in order to
+   capture the ellipsoidal harmonics faithfully with spherical
+   harmonics.
+ - The 1/\e r term is omitted from the \e T (this is issue 2 in \ref
+   gravitynga).  This moves the equipotential surface by about 5mm.
+ - The surface \e W = <i>U</i><sub>0</sub> is determined by Bruns'
+   formula, which is roughly equivalent to a single iteration of
+   Newton's method.  The RMS error in this approximation is about 1.5mm
+   with a maximum error of about 10 mm.
+ - The model potential is only valid above the earth's surface.  A
+   correction therefore needs to be included where the geoid lies
+   beneath the terrain.  This is NGA's "zeta-to-N" correction, which is
+   represented by a spherical harmonic sum of degree and order 2160 (and
+   so it misses short wavelength terrain variations).  In addition, it
+   entails estimating the isostatic equilibrium of the earth's crust.
+   The correction lies in the range [-5.05 m, 0.05 m], however for 99.9%
+   of the earth's surface the correction is less than 10 mm in
+   magnitude.
+ - The resulting surface lies above the observed mean sea level,
+   so -0.41m is added to the geoid height.  (Better would be to change
+   the potential used to define the geoid; but this would only change
+   the result by about 2mm.)
+ .
+A useful discussion of the problems with defining a geoid is given by
+Dru A. Smith in
+<a href="http://www.ngs.noaa.gov/PUBS_LIB/EGM96_GEOID_PAPER/egm96_geoid_paper.html">
+There is no such thing as "The" EGM96 geoid: Subtle points on the use of
+a global geopotential model</a>, IGeS Bulletin No. 8, International
+Geoid Service, Milan, Italy, pp. 17--28 (1998).
+
+GeographicLib::GravityModel::GeoidHeight reproduces the results of the
+several NGA codes for harmonic synthesis with the following maximum
+discrepancies:
+ - egm84 = 1.1mm.  This is probably due to inconsistent parameters for the
+   reference ellipsoid in the NGA code.  (In particular, the value of
+   mass constant excludes the atmosphere; however, it's not clear
+   whether the other parameters have been correspondingly adjusted.)
+   Note that geoid heights predicted by egm84 differ from those of more
+   recent gravity models by about 1 meter.
+ - egm96 = 23nm.
+ - egm2008 = 78pm.  After addressing some of the issues alluded to in
+   issue 4 in \ref gravitynga, the maximum discrepancy becomes 23pm.
+
+The formula for the gravity anomaly vector involves computing gravity
+and normal gravity at two different points (with the displacement
+between the points unknown <i>ab initio</i>).  Since the gravity anomaly
+is already a small quantity it is sometimes acceptable to employ
+approximations that change the quantities by \e O(\e f).  The NGA code
+uses the spherical approximation described by Heiskanen and Moritz,
+Sec. 2-14 and GeographicLib::GravityModel::SphericalAnomaly uses the
+same approximation for compatibility.  In this approximation, the
+gravity disturbance <b>delta</b> = <b>grad</b> \e T is calculated.
+Here, \e T once again excludes the 1/\e r term (this is issue 2 in \ref
+gravitynga and is consistent with the computation of the geoid height).
+Note that <b>delta</b> compares the gravity and the normal gravity at
+the \e same point; the gravity anomaly vector is then found by
+estimating the gradient of the normal gravity in the limit that the
+earth is spherically symmetric.  <b>delta</b> is expressed in \e
+spherical coordinates as \e deltax, \e deltay, \e deltaz where, for
+example, \e deltaz is the \e radial component of <b>delta</b> (not the
+component perpendicular to the ellipsoid) and \e deltay is similarly
+slightly different from the usual northerly component.  The components
+of the anomaly are then given by
+ - gravity anomaly, \e Dg01 = \e deltaz - 2<i>T</i>/\e R, where \e R
+   distance to the center of the earth;
+ - northerly component of the deflection of the vertical, \e xi = -
+   <i>deltay</i>/\e gamma, where \e gamma is the magnitude of the normal
+   gravity;
+ - easterly component of the deflection of the vertical, \e eta = -
+   <i>deltax</i>/\e gamma.
+ .
+GeographicLib::NormalGravity computes the normal gravity accurately and
+avoids issue 3 of \ref gravitynga.  Thus while
+GeographicLib::GravityModel::SphericalAnomaly reproduces the results for
+\e xi and \e eta at \e h = 0, there is a slight discrepancy if \e h is
+non-zero.
+
+\section gravityatmos The effect of the mass of the atmosphere
+
+All of the supported models use WGS84 for the reference ellipsoid.  This
+has (see
+<a href="http://earth-info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf">
+TR8350.2</a>, table 3.1)
+ - \e a = 6378137 m
+ - \e f = 1/298.257223563
+ - ω = 7292115 × 10<sup>−11</sup> rad
+   s<sup>−1</sup>
+ - \e GM = 3986004.418 × 10<sup>8</sup> m<sup>3</sup>
+   s<sup>−2</sup>.
+ .
+The value of \e GM includes the mass of the atmosphere and so strictly
+only applies above the earth's atmosphere.  Near the surface of the
+earth, the value of \e g will be less (in absolute value) than the value
+predicted by these models by about δ\e g = (4π<i>G</i>/\e
+g) \e A = 8.552 × 10<sup>−11</sup> \e A m<sup>2</sup>/kg,
+where \e G is the gravitational constant, \e g is the earth's gravity,
+and \e A is the pressure of the atmosphere.  At sea level we have \e A =
+101.3 kPa, and δ\e g = 8.7 × 10<sup>−6</sup> m
+s<sup>−2</sup>, approximately.  (In other words the effect is
+about 1 part in a million; by way of comparison, buoyancy effects
+are about 100 times larger.)
+
+\section gravityparallel Geoid heights on a multi-processor system
+
+The egm2008 model includes many terms (over 2 million spherical
+harmonics).  For that reason computations using this model may be slow;
+for example it takes about 78 ms to compute the geoid height at a single
+point.  There are two ways to speed up this computation:
+ - Use a GeographicLib::GravityCircle to compute the geoid height at
+   several points on a circle of latitude.  This reduces the cost per
+   point to about 92 μs (a reduction by a factor of over 800).
+ - Compute the values on several circles of latitude in parallel.  One
+   of the simplest ways of doing this is with
+   <a href="http://openmp.org"> OpenMP</a>; on an 8-processor system,
+   this can speed up the computation by another factor of 8.
+ .
+Both of these techniques are illustrated by the following code,
+which computes a table of geoid heights on
+a regular grid and writes on the result in a
+<a href="http://vdatum.noaa.gov/dev/gtx_info.html#dev_gtx_binary">.gtx</a>
+file.  On an 8-processor Intel 2.66 GHz machine using OpenMP
+(-DHAVE_OPENMP=1), it takes about 40 minutes of elapsed time to compute
+the geoid height for EGM2008 on a 1' gride.  (Without these
+optimizations, the computation would have taken about 200 days!)
+\include GeoidToGTX.cpp
+
+This example, <code>examples/GeoidToGTX.cpp</code>, is built if cmake
+is configured with <code>-D GEOGRAPHICLIB_EXAMPLES=ON</code>.  cmake
+will add in support for OpenMP, if it is available.
+
+<center>
+Back to \ref geoid.  Forward to \ref magnetic.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page magnetic Magnetic models
+
+<center>
+Back to \ref gravity.  Forward to \ref geodesic.  Up to \ref contents.
+</center>
+
+%GeographicLib can compute the earth's magnetic field by a magnetic
+model using the GeographicLib::MagneticModel and
+GeographicLib::MagneticCircle classes and with the
+<a href="MagneticField.1.html">MagneticField</a> utility.  These models
+expand the internal magnetic potential of the earth as sum of spherical
+harmonics.  They neglect magnetic fields due to the ionosphere, the
+magnetosphere, nearby magnetized materials, electric machinery, etc.
+Users of GeographicLib::MagneticModel are advised to read the
+<a href="http://www.ngdc.noaa.gov/IAGA/vmod/igrfhw.html">"Health
+Warning"</a> this is provided with igrf11.  Although the advice is
+specific to igrf11, many of the comments apply to all magnetic field
+models.
+
+The supported models are
+ - <b>wmm2010</b>, the
+   <a href="http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml"> World
+   Magnetic Model 2010</a>, which approximates the main magnetic field
+   for the period 2010--2015.
+ - <b>igrf11</b>, the
+   <a href="http://ngdc.noaa.gov/IAGA/vmod/igrf.html">International
+   Geomagnetic Reference Field (11th generation)</a>, which approximates
+   the main magnetic field for the period 1900--2015.
+ - <b>emm2010</b>, the
+   <a href="http://ngdc.noaa.gov/geomag/EMM/index.html"> Enhanced
+   Magnetic Model 2010</a>, which approximates the main and crustal
+   magnetic fields for the period 2010--2015.
+
+Go to
+ - \ref magneticinst
+ - \ref magneticformat
+
+\section magneticinst Installing the magnetic field models
+
+These magnetic models are available for download:
+<center>
+<table>
+<caption>Available magnetic models</caption>
+<tr>
+ <th rowspan="2">name         <th rowspan="2">max\n degree
+ <th rowspan="2">time\n interval
+ <th rowspan="2">size\n(kB)
+ <th colspan="3"><center>Download Links (size, kB)</center></th>
+<tr>
+ <th>tar file</th>
+ <th>Windows\n installer</th>
+ <th>zip file</th>
+<tr>
+ <td>wmm2010
+ <td><center>12</center>
+ <td><center>2010--2015</center>
+ <td><center>3</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/wmm2010.tar.bz2">
+ link</a> (2)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/wmm2010.exe">
+ link</a> (300)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/wmm2010.zip">
+ link</a> (2)</center>
+<tr>
+ <td>igrf11
+ <td><center>13</center>
+ <td><center>1900--2015</center>
+ <td><center>25</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/igrf11.tar.bz2">
+ link</a> (7)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/igrf11.exe">
+ link</a> (310)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/igrf11.zip">
+ link</a> (8)</center>
+<tr>
+ <td>emm2010
+ <td><center>739</center>
+ <td><center>2010--2015</center>
+ <td><center>4400</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/emm2010.tar.bz2">
+ link</a> (3700)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/emm2010.exe">
+ link</a> (3000)</center>
+ <td><center>
+ <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/emm2010.zip">
+ link</a> (4100)</center>
+</table>
+</center>
+The "size" column is the size of the uncompressed data.
+
+For Linux and Unix systems, %GeographicLib provides a shell script
+geographiclib-get-magnetic (typically installed in /usr/local/sbin)
+which automates the process of downloading and installing the magnetic
+models.  For example
+\verbatim
+   geographiclib-get-magnetic all  # to install wmm2010, igrf11, emm2010
+   geographiclib-get-magnetic -h   # for help
+\endverbatim
+This script should be run as a user with write access to the
+installation directory, which is typically
+/usr/local/share/GeographicLib (this can be overridden with the -p
+flag), and the data will then be placed in the "magnetic" subdirectory.
+
+Windows users should download and run the Windows installers.  These
+will prompt for an installation directory with the default being one of
+\verbatim
+   C:/Documents and Settings/All Users/Application Data/GeographicLib
+   C:/ProgramData/GeographicLib
+\endverbatim
+(which you probably should not change) and the data is installed in the
+"magnetic" sub-directory.  (The second directory name is an alternate name
+that Windows 7 uses for the "Application Data" directory.)
+
+Otherwise download \e either the tar.bz2 file \e or the zip file (they
+have the same contents).  To unpack these, run, for example
+\verbatim
+   mkdir -p /usr/local/share/GeographicLib
+   tar xofjC wmm2010.tar.bz2 /usr/local/share/GeographicLib
+   tar xofjC emm2010.tar.bz2 /usr/local/share/GeographicLib
+   etc.
+\endverbatim
+and, again, the data will be placed in the "magnetic" subdirectory.
+
+However you install the magnetic models, all the datasets should be
+installed in the same directory.  GeographicLib::MagneticModel and
+<a href="MagneticField.1.html">MagneticField</a> uses a compile time
+default to locate the datasets.  This is
+- /usr/local/share/GeographicLib/magnetic, for non-Windows systems
+- C:/Documents and Settings/All Users/Application Data/GeographicLib/magnetic,
+  for Windows systems
+.
+consistent with the examples above.  This may be overridden at run-time
+by defining the MAGNETIC_PATH  or the GEOGRAPHIC_DATA environment
+variables; see GeographicLib::MagneticModel::DefaultMagneticPath() for
+details.  Finally, the path may be set using the optional second
+argument to the GeographicLib::MagneticModel constructor or with the
+"-d" flag to <a href="MagneticField.1.html">MagneticField</a>.
+Supplying the "-h" flag to
+<a href="MagneticField.1.html">MagneticField</a> reports the default
+path for magnetic models for that utility.  The "-v" flag causes
+MagneticField to report the full path name of the data file it uses.
+
+\section magneticformat The format of the magnetic model files
+
+The constructor for GeographicLib::MagneticModel reads a file called
+NAME.wmm which specifies various properties for the magnetic model.  It
+then opens a binary file NAME.wmm.cof to obtain the coefficients of the
+spherical harmonic sum.
+
+The first line of the .wmm file must consist of "WMMF-v" where WMMF
+stands for "World Magnetic Model Format" and v is the version number of
+the format (currently "1").
+
+The rest of the File is read a line at a time.  A # character and
+everything after it are discarded.  If the result is just white space it
+is discarded.  The remaining lines are of the form "KEY WHITESPACE
+VALUE".  In general, the KEY and the VALUE are case-sensitive.
+
+GeographicLib::MagneticModel only pays attention to the following
+keywords
+ - keywords that affect the field calculation, namely:
+   - <b>Radius</b> (required), the normalizing radius of the model in
+     meters.
+   - <b>NumModels</b> (default 1), the number of models.  WMM2010
+     consists of a single model giving the magnetic field and its time
+     variation at 2010.  IGRF11 consists of 23 models for 1900 thru 2010
+     at 5 year intervals.  The time variation is given only for the last
+     model to allow extrapolation beyond 2010.  For dates prior to 2010,
+     linear interpolation is used.
+   - <b>Epoch</b> (required), the time origin (in fractional years) for
+     the first model.
+   - <b>DeltaEpoch</b> (default 1), the interval between models in years
+     (only relevant for NumModels > 1).
+   - <b>Normalization</b> (default schmidt), the normalization used for
+     the associated Legendre functions (schmidt or full).
+   - <b>ID</b> (required), 8 printable characters which serve as a
+     signature for the .wmm.cof file (they must appear as the first 8
+     bytes of this file).
+ - keywords that store data that the user can query:
+   - <b>Name</b>, the name of the model.
+   - <b>Description</b>, a more descriptive name of the model.
+   - <b>ReleaseDate</b>, when the model was created.
+   - <b>MinTime</b>, the minimum date at which the model should be used.
+   - <b>MaxTime</b>, the maximum date at which the model should be used.
+   - <b>MinHeight</b>, the minimum height above the ellipsoid for which
+     the model should be used.
+   - <b>MaxHeight</b>, the maximum height above the ellipsoid for which
+     the model should be used.
+   .
+   GeographicLib::MagneticModel does not enforce the restrictions
+   implied by last four quantities.  However,
+   <a href="MagneticField.1.html">MagneticField</a> issues a warning if
+   these limits are exceeded.
+ - keywords that are examined to verify that their values are valid:
+   - <b>Type</b> (default linear), the type of the model.  "linear"
+     means that the time variation is piece-wise linear (either using
+     interpolation between the field at two dates or using the field and
+     its first derivative with respect to time).  This is the only type
+     of model supported at present.
+   - <b>ByteOrder</b> (default little), the order of bytes in the
+     .wmm.cof file.  Only little endian is supported at present.
+ .
+Other keywords are ignored.
+
+The coefficient file NAME.wmm.cof is a binary file in little endian
+order.  The first 8 bytes of this file must match the ID given in
+NAME.wmm.  This is followed by NumModels + 1 sets of spherical harmonic
+coefficients.  The first NumModels of these model the magnetic field at
+Epoch + \e i * DeltaEpoch for 0 ≤ \e i < NumModels.  The last set of
+coefficients model the rate of change of the magnetic field at Epoch +
+(NumModels − 1) * DeltaEpoch.  The format for each set of coefficients
+is:
+ - \e N, the maximum degree of the sum stored as a 4-byte signed integer.
+   This must satisfy \e N ≥ −1.
+ - \e M, the maximum order of the sum stored as a 4-byte signed integer.
+   This must satisfy \e N ≥ \e M ≥ −1.
+ - \e C<sub>\e nm</sub>, the coefficients of the cosine coefficients of
+   the sum in column (i.e., \e m) major order.  There are (\e M + 1)
+   (2\e N − \e M + 2) / 2 elements which are stored as IEEE doubles (8
+   bytes).  For example for \e N = \e M = 3, there are 10 coefficients
+   arranged as
+   <i>C</i><sub>00</sub>,
+   <i>C</i><sub>10</sub>,
+   <i>C</i><sub>20</sub>,
+   <i>C</i><sub>30</sub>,
+   <i>C</i><sub>11</sub>,
+   <i>C</i><sub>21</sub>,
+   <i>C</i><sub>31</sub>,
+   <i>C</i><sub>22</sub>,
+   <i>C</i><sub>32</sub>,
+   <i>C</i><sub>33</sub>.
+ - \e S<sub>\e nm</sub>, the coefficients of the sine coefficients of
+   the sum in column (i.e., \e m) major order starting at \e m = 1.
+   There are \e M (2\e N − \e M + 1) / 2 elements which are stored as
+   IEEE doubles (8 bytes).  For example for \e N = \e M = 3, there are 6
+   coefficients arranged as
+   <i>S</i><sub>11</sub>,
+   <i>S</i><sub>21</sub>,
+   <i>S</i><sub>31</sub>,
+   <i>S</i><sub>22</sub>,
+   <i>S</i><sub>32</sub>,
+   <i>S</i><sub>33</sub>.
+ .
+Although the coefficient file is in little endian order, %GeographicLib
+can read it on big endian machines.  It can only be read on machines
+which store doubles in IEEE format.
+
+As an illustration, here is igrf11.wmm:
+\verbatim
+WMMF-1
+# A World Magnetic Model (Format 1) file.  For documentation on the
+# format of this file see
+# http://geographiclib.sf.net/html/magnetic.html#magneticformat
+Name            igrf11
+Description     International Geomagnetic Reference Field 11th Generation
+URL             http://ngdc.noaa.gov/IAGA/vmod/igrf.html
+Publisher       National Oceanic and Atmospheric Administration
+ReleaseDate     2009-12-15
+DataCutOff      2009-10-01
+ConversionDate  2011-11-04
+DataVersion     1
+Radius          6371200
+NumModels       23
+Epoch           1900
+DeltaEpoch      5
+MinTime         1900
+MaxTime         2015
+MinHeight       -1000
+MaxHeight       600000
+
+# The coefficients are stored in a file obtained by appending ".cof" to
+# the name of this file.  The coefficients were obtained from IGRF11.COF
+# in the geomag70 distribution.
+ID              IGRF11-A
+\endverbatim
+
+<center>
+Back to \ref gravity.  Forward to \ref geodesic.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page geodesic Geodesics on an ellipsoid of revolution
+
+<center>
+Back to \ref magnetic.  Forward to \ref triaxial.  Up to \ref contents.
+</center>
+
+GeographicLib::Geodesic and GeographicLib::GeodesicLine provide accurate
+solutions to the direct and inverse geodesic problems.  The
+<a href="GeodSolve.1.html">GeodSolve</a> utility provides an interface
+to these classes.  GeographicLib::AzimuthalEquidistant implements the
+azimuthal equidistant projection in terms of geodesics.
+GeographicLib::CassiniSoldner implements a transverse cylindrical
+equidistant projection in terms of geodesics.  The <a
+href="GeodesicProj.1.html">GeodesicProj</a> utility provides an
+interface to these projections.
+
+The algorithms used by GeographicLib::Geodesic and
+GeographicLib::GeodesicLine are based on a Taylor expansion of the
+geodesic integrals valid when the flattening \e f is small.
+GeographicLib::GeodesicExact and GeographicLib::GeodesicLineExact
+evaluate the integrals exactly (in terms of incomplete elliptic
+integrals).  For the WGS84 ellipsoid, the series solutions are about
+2--3 times faster and 2--3 times more accurate (because it's easier to
+control round-off errors with series solutions); thus
+GeographicLib::Geodesic and GeographicLib::GeodesicLine are
+recommended for most geodetic applications.  However, in applications
+where the absolute value of \e f is greater than about 0.02, the exact
+classes should be used.
+
+Go to
+ - \ref testgeod
+ - \ref geodseries
+ - \ref geodellip
+ - \ref meridian
+ - \ref geodshort
+ .
+For some background information on geodesics on triaxial ellipsoids, see
+\ref triaxial.
+
+References
+ - F. W. Bessel,
+   <a href="http://dx.doi.org/10.1002/asna.201011352">The calculation
+   of longitude and latitude from geodesic measurements (1825)</a>,
+   Astron. Nachr. 331(8), 852-861 (2010);
+   translated by C. F. F. Karney and R. E. Deakin.  Preprint:
+   <a href="http://arxiv.org/abs/0908.1824">arXiv:0908.1824</a>.
+ - F. R. Helmert,
+   <a href="http://geographiclib.sf.net/geodesic-papers/helmert80-en.pdf">
+   Mathematical and Physical Theories of Higher Geodesy, Part 1 (1880)</a>,
+   Aeronautical Chart and Information Center (St. Louis, 1964),
+   Chaps. 5--7.
+ - J. Danielsen,
+   The Area under the Geodesic,
+   Survey Review 30(232), 61--66 (1989).
+ - C. F. F. Karney,
+   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   Algorithms for geodesics</a>,
+   J. Geodesy 87(1), 43--55 (Jan. 2013);
+   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   10.1007/s00190-012-0578-z</a>;
+   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   geod-addenda.html</a>;
+   resource page:
+   <a href="http://geographiclib.sf.net/geod.html"> geod.html</a>.
+ - A collection of some papers on geodesics is available at
+   http://geographiclib.sourceforge.net/geodesic-papers/biblio.html
+ - The wikipedia page,
+   <a href="http://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid">
+   Geodesics on an ellipsoid</a>.
+
+\section testgeod Test data for geodesics
+
+A test set a geodesics is available at
+ - <a href="http://sf.net/projects/geographiclib/files/testdata/GeodTest.dat.gz">
+   GeodTest.dat.gz</a>
+ .
+This is about 39 MB (compressed).  This consists of a set of geodesics
+for the WGS84 ellipsoid.  A subset of this (consisting of 1/50 of the
+members — about 690 kB, compressed) is available at
+ - <a href="http://sf.net/projects/geographiclib/files/testdata/GeodTest-short.dat.gz">
+   GeodTest-short.dat.gz</a>
+
+Each line of the test set gives 10 space delimited numbers
+ - latitude for point 1, \e lat1 (degrees, exact)
+ - longitude for point 1, \e lon1 (degrees, always 0)
+ - azimuth for point 1, \e azi1 (clockwise from north in degrees, exact)
+ - latitude for point 2, \e lat2 (degrees, accurate to
+   10<sup>−18</sup> deg)
+ - longitude for point 2, \e lon2 (degrees, accurate to
+   10<sup>−18</sup> deg)
+ - azimuth for point 2, \e azi2 (degrees, accurate to
+   10<sup>−18</sup> deg)
+ - geodesic distance from point 1 to point 2, \e s12 (meters, exact)
+ - arc distance on the auxiliary sphere, \e a12 (degrees, accurate to
+   10<sup>−18</sup> deg)
+ - reduced length of the geodesic, \e m12 (meters, accurate to 0.1 pm)
+ - the area under the geodesic, \e S12 (m<sup>2</sup>, accurate to
+   1 mm<sup>2</sup>)
+ .
+These are computed using as direct geodesic calculations with the given
+\e lat1, \e lon1, \e azi1, and \e s12.  The distance \e s12 always
+corresponds to an arc length \e a12 ≤ 180°, so the given
+geodesics give the shortest paths from point 1 to point 2.  For
+simplicity and without loss of generality, \e lat1 is chosen in
+[0°, 90°], \e lon1 is taken to be zero, \e azi1 is
+chosen in [0°, 180°].  Furthermore, \e lat1 and \e
+azi1 are taken to be multiples of 10<sup>−12</sup> deg and \e s12
+is a multiple of 0.1 μm in [0 m, 20003931.4586254 m].  This results \e
+lon2 in [0°, 180°] and \e azi2 in [0°, 180°].
+
+The direct calculation uses an expansion of the geodesic equations
+accurate to <i>f</i><sup>30</sup> (approximately 1 part in 10<sup>50</sup>)
+and is computed with with
+<a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a>'s
+bfloats and fpprec set to 100 (so the errors in the data are probably
+1/2 of the values quoted above).
+
+The contents of the file are as follows:
+ - 100000 entries randomly distributed
+ - 50000 entries which are nearly antipodal
+ - 50000 entries with short distances
+ - 50000 entries with one end near a pole
+ - 50000 entries with both ends near opposite poles
+ - 50000 entries which are nearly meridional
+ - 50000 entries which are nearly equatorial
+ - 50000 entries running between vertices (\e azi1 = \e azi2 = 90°)
+ - 50000 entries ending close to vertices
+ .
+(a total of 500000 entries).  The values for \e s12 for the geodesics
+running between vertices are truncated to a multiple of 0.1 pm and this
+is used to determine point 2.
+
+This data can be fed to the <a href="GeodSolve.1.html">GeodSolve</a>
+utility as follows
+ - Direct from point 1:
+\verbatim
+  gunzip -c GeodTest.dat.gz | cut -d' ' -f1,2,3,7 | ./GeodSolve
+\endverbatim
+   This should yield columns 4, 5, 6, and 9 of the test set.
+ - Direct from point 2:
+\verbatim
+  gunzip -c GeodTest.dat.gz | cut -d' ' -f4,5,6,7 |
+  sed "s/ \([^ ]*$\)/ -\1/" | ./GeodSolve
+\endverbatim
+   (The sed command negates the distance.)  This should yield columns 1,
+   2, and 3, and the negative of column 9 of the test set.
+ - Inverse between points 1 and 2:
+\verbatim
+  gunzip -c GeodTest.dat.gz | cut -d' ' -f1,2,4,5 | ./GeodSolve -i
+\endverbatim
+   This should yield columns 3, 6, 7, and 9 of the test set.
+ .
+Add, e.g., "-p 6", to the call to GeodSolve to change the precision of
+the output.  Adding "-f" causes GeodSolve to print 12 fields specifying
+the geodesic; these include the 10 fields in the test set plus the
+geodesic scales \e M12 and \e M21 which are inserted between \e m12 and
+\e S12.
+
+Code for computing arbitrarily accurate geodesics in maxima is available
+in <a href="geodesic.mac"> geodesic.mac</a> (this depends on
+<a href="ellint.mac"> ellint.mac</a> and uses the series computed by
+<a href="geod.mac"> geod.mac</a>).  This solve both the direct and
+inverse geodesic problems and offers the ability to solve the problems
+either using series expansions (similar to GeographicLib::Geodesic) or
+in terms of elliptic integrals (similar to
+GeographicLib::GeodesicExact).
+
+\section geodseries Expansions for geodesics
+
+We give here the series expansions for the various geodesic integrals
+valid to order <i>f</i><sup>10</sup>.  In this release of the code, we
+use a 6th-order expansions.  This is sufficient to maintain accuracy
+for doubles for the SRMmax ellipsoid (\e a = 6400 km, \e f = 1/150).
+However, the preprocessor macro GEOGRAPHICLIB_GEODESIC_ORDER can be
+used to select any order up to 8.  (If using long doubles, with a
+64-bit fraction, the default order is 7.)  The series expanded to
+order <i>f</i><sup>30</sup> are given in <a href="geodseries30.html">
+geodseries30.html</a>.
+
+In the formulas below ^ indicates exponentiation (\e f^3 =
+<i>f</i><sup>3</sup>) and / indicates real division (3/5 = 0.6).  The
+equations need to be converted to Horner form, but are here left in
+expanded form so that they can be easily truncated to lower order.
+These expansions were obtained using the Maxima code,
+<a href="geod.mac">geod.mac</a>.
+
+In the expansions below, we have
+ - \f$ \alpha \f$ is the azimuth
+ - \f$ \alpha_0 \f$ is the azimuth at the equator crossing
+ - \f$ \lambda \f$ is the longitude measured from the equator crossing
+ - \f$ \sigma \f$ is the spherical arc length
+ - \f$ \omega = \tan^{-1}(\sin\alpha_0\tan\sigma) \f$ is the spherical longitude
+ - \f$ a \f$ is the equatorial radius
+ - \f$ b \f$ is the polar semi-axis
+ - \f$ f \f$ is the flattening
+ - \f$ e^2 = f(2 - f) \f$
+ - \f$ e'^2 = e^2/(1-e^2) \f$
+ - \f$ k^2 = e'^2 \cos^2\alpha_0 = 4 \epsilon / (1 - \epsilon)^2 \f$
+ - \f$ n = f / (2 - f) \f$
+ - \f$ c^2 = a^2/2 + b^2/2 (\tanh^{-1}e)/e \f$
+ - \e ep2 = \f$ e'^2 \f$
+ - \e k2 = \f$ k^2 \f$
+ - \e eps = \f$ \epsilon \f$
+
+The formula for distance is
+\f[
+ \frac sb = I_1(\sigma)
+\f]
+where
+\f[
+\begin{aligned}
+  I_1(\sigma) &= A_1\bigl(\sigma + B_1(\sigma)\bigr) \\
+  B_1(\sigma) &= \sum_{j=1} C_{1j} \sin 2j\sigma
+\end{aligned}
+\f]
+and
+\verbatim
+A1 = (1 + 1/4 * eps^2
+        + 1/64 * eps^4
+        + 1/256 * eps^6
+        + 25/16384 * eps^8
+        + 49/65536 * eps^10) / (1 - eps);
+\endverbatim
+\verbatim
+C1[1] = - 1/2 * eps
+        + 3/16 * eps^3
+        - 1/32 * eps^5
+        + 19/2048 * eps^7
+        - 3/4096 * eps^9;
+C1[2] = - 1/16 * eps^2
+        + 1/32 * eps^4
+        - 9/2048 * eps^6
+        + 7/4096 * eps^8
+        + 1/65536 * eps^10;
+C1[3] = - 1/48 * eps^3
+        + 3/256 * eps^5
+        - 3/2048 * eps^7
+        + 17/24576 * eps^9;
+C1[4] = - 5/512 * eps^4
+        + 3/512 * eps^6
+        - 11/16384 * eps^8
+        + 3/8192 * eps^10;
+C1[5] = - 7/1280 * eps^5
+        + 7/2048 * eps^7
+        - 3/8192 * eps^9;
+C1[6] = - 7/2048 * eps^6
+        + 9/4096 * eps^8
+        - 117/524288 * eps^10;
+C1[7] = - 33/14336 * eps^7
+        + 99/65536 * eps^9;
+C1[8] = - 429/262144 * eps^8
+        + 143/131072 * eps^10;
+C1[9] = - 715/589824 * eps^9;
+C1[10] = - 2431/2621440 * eps^10;
+\endverbatim
+
+The function \f$ \tau(\sigma) = s/(b A_1) = \sigma + B_1(\sigma) \f$
+may be inverted by series reversion giving
+\f[
+  \sigma(\tau) = \tau + \sum_{j=1} C'_{1j} \sin 2j\sigma
+\f]
+where
+\verbatim
+C1'[1] = + 1/2 * eps
+         - 9/32 * eps^3
+         + 205/1536 * eps^5
+         - 4879/73728 * eps^7
+         + 9039/327680 * eps^9;
+C1'[2] = + 5/16 * eps^2
+         - 37/96 * eps^4
+         + 1335/4096 * eps^6
+         - 86171/368640 * eps^8
+         + 4119073/28311552 * eps^10;
+C1'[3] = + 29/96 * eps^3
+         - 75/128 * eps^5
+         + 2901/4096 * eps^7
+         - 443327/655360 * eps^9;
+C1'[4] = + 539/1536 * eps^4
+         - 2391/2560 * eps^6
+         + 1082857/737280 * eps^8
+         - 2722891/1548288 * eps^10;
+C1'[5] = + 3467/7680 * eps^5
+         - 28223/18432 * eps^7
+         + 1361343/458752 * eps^9;
+C1'[6] = + 38081/61440 * eps^6
+         - 733437/286720 * eps^8
+         + 10820079/1835008 * eps^10;
+C1'[7] = + 459485/516096 * eps^7
+         - 709743/163840 * eps^9;
+C1'[8] = + 109167851/82575360 * eps^8
+         - 550835669/74317824 * eps^10;
+C1'[9] = + 83141299/41287680 * eps^9;
+C1'[10] = + 9303339907/2972712960 * eps^10;
+\endverbatim
+
+The reduced length is given by
+\f[
+\begin{aligned}
+  \frac mb &= \sqrt{1 + k^2 \sin^2\sigma_2} \cos\sigma_1 \sin\sigma_2 \\
+  &\quad {}-\sqrt{1 + k^2 \sin^2\sigma_1} \sin\sigma_1 \cos\sigma_2 \\
+  &\quad {}-\cos\sigma_1 \cos\sigma_2 \bigl(J(\sigma_2) - J(\sigma_1)\bigr)
+\end{aligned}
+\f]
+where
+\f[
+\begin{aligned}
+ J(\sigma) &= I_1(\sigma) - I_2(\sigma) \\
+ I_2(\sigma) &= A_2\bigl(\sigma + B_2(\sigma)\bigr) \\
+ B_2(\sigma) &= \sum_{j=1} C_{2j} \sin 2j\sigma
+\end{aligned}
+\f]
+\verbatim
+A2 = (1 + 1/4 * eps^2
+        + 9/64 * eps^4
+        + 25/256 * eps^6
+        + 1225/16384 * eps^8
+        + 3969/65536 * eps^10) * (1 - eps);
+\endverbatim
+\verbatim
+C2[1] = + 1/2 * eps
+        + 1/16 * eps^3
+        + 1/32 * eps^5
+        + 41/2048 * eps^7
+        + 59/4096 * eps^9;
+C2[2] = + 3/16 * eps^2
+        + 1/32 * eps^4
+        + 35/2048 * eps^6
+        + 47/4096 * eps^8
+        + 557/65536 * eps^10;
+C2[3] = + 5/48 * eps^3
+        + 5/256 * eps^5
+        + 23/2048 * eps^7
+        + 191/24576 * eps^9;
+C2[4] = + 35/512 * eps^4
+        + 7/512 * eps^6
+        + 133/16384 * eps^8
+        + 47/8192 * eps^10;
+C2[5] = + 63/1280 * eps^5
+        + 21/2048 * eps^7
+        + 51/8192 * eps^9;
+C2[6] = + 77/2048 * eps^6
+        + 33/4096 * eps^8
+        + 2607/524288 * eps^10;
+C2[7] = + 429/14336 * eps^7
+        + 429/65536 * eps^9;
+C2[8] = + 6435/262144 * eps^8
+        + 715/131072 * eps^10;
+C2[9] = + 12155/589824 * eps^9;
+C2[10] = + 46189/2621440 * eps^10;
+\endverbatim
+
+The longitude is given in terms of the spherical longitude by
+\f[
+\lambda = \omega - f \sin\alpha_0 I_3(\sigma)
+\f]
+where
+\f[
+\begin{aligned}
+ I_3(\sigma) &= A_3\bigl(\sigma + B_3(\sigma)\bigr) \\
+ B_3(\sigma) &= \sum_{j=1} C_{3j} \sin 2j\sigma
+\end{aligned}
+\f]
+and
+\verbatim
+A3 = 1 - (1/2 - 1/2*n) * eps
+       - (1/4 + 1/8*n - 3/8*n^2) * eps^2
+       - (1/16 + 3/16*n + 1/16*n^2 - 5/16*n^3) * eps^3
+       - (3/64 + 1/32*n + 5/32*n^2 + 5/128*n^3 - 35/128*n^4) * eps^4
+       - (3/128 + 5/128*n + 5/256*n^2 + 35/256*n^3 + 7/256*n^4) * eps^5
+       - (5/256 + 15/1024*n + 35/1024*n^2 + 7/512*n^3) * eps^6
+       - (25/2048 + 35/2048*n + 21/2048*n^2) * eps^7
+       - (175/16384 + 35/4096*n) * eps^8
+       - 245/32768 * eps^9;
+\endverbatim
+\verbatim
+C3[1] = + (1/4 - 1/4*n) * eps
+        + (1/8 - 1/8*n^2) * eps^2
+        + (3/64 + 3/64*n - 1/64*n^2 - 5/64*n^3) * eps^3
+        + (5/128 + 1/64*n + 1/64*n^2 - 1/64*n^3 - 7/128*n^4) * eps^4
+        + (3/128 + 11/512*n + 3/512*n^2 + 1/256*n^3 - 7/512*n^4) * eps^5
+        + (21/1024 + 5/512*n + 13/1024*n^2 + 1/512*n^3) * eps^6
+        + (243/16384 + 189/16384*n + 83/16384*n^2) * eps^7
+        + (435/32768 + 109/16384*n) * eps^8
+        + 345/32768 * eps^9;
+C3[2] = + (1/16 - 3/32*n + 1/32*n^2) * eps^2
+        + (3/64 - 1/32*n - 3/64*n^2 + 1/32*n^3) * eps^3
+        + (3/128 + 1/128*n - 9/256*n^2 - 3/128*n^3 + 7/256*n^4) * eps^4
+        + (5/256 + 1/256*n - 1/128*n^2 - 7/256*n^3 - 3/256*n^4) * eps^5
+        + (27/2048 + 69/8192*n - 39/8192*n^2 - 47/4096*n^3) * eps^6
+        + (187/16384 + 39/8192*n + 31/16384*n^2) * eps^7
+        + (287/32768 + 47/8192*n) * eps^8
+        + 255/32768 * eps^9;
+C3[3] = + (5/192 - 3/64*n + 5/192*n^2 - 1/192*n^3) * eps^3
+        + (3/128 - 5/192*n - 1/64*n^2 + 5/192*n^3 - 1/128*n^4) * eps^4
+        + (7/512 - 1/384*n - 77/3072*n^2 + 5/3072*n^3 + 65/3072*n^4) * eps^5
+        + (3/256 - 1/1024*n - 71/6144*n^2 - 47/3072*n^3) * eps^6
+        + (139/16384 + 143/49152*n - 383/49152*n^2) * eps^7
+        + (243/32768 + 95/49152*n) * eps^8
+        + 581/98304 * eps^9;
+C3[4] = + (7/512 - 7/256*n + 5/256*n^2 - 7/1024*n^3 + 1/1024*n^4) * eps^4
+        + (7/512 - 5/256*n - 7/2048*n^2 + 9/512*n^3 - 21/2048*n^4) * eps^5
+        + (9/1024 - 43/8192*n - 129/8192*n^2 + 39/4096*n^3) * eps^6
+        + (127/16384 - 23/8192*n - 165/16384*n^2) * eps^7
+        + (193/32768 + 3/8192*n) * eps^8
+        + 171/32768 * eps^9;
+C3[5] = + (21/2560 - 9/512*n + 15/1024*n^2 - 7/1024*n^3 + 9/5120*n^4) * eps^5
+        + (9/1024 - 15/1024*n + 3/2048*n^2 + 57/5120*n^3) * eps^6
+        + (99/16384 - 91/16384*n - 781/81920*n^2) * eps^7
+        + (179/32768 - 55/16384*n) * eps^8
+        + 141/32768 * eps^9;
+C3[6] = + (11/2048 - 99/8192*n + 275/24576*n^2 - 77/12288*n^3) * eps^6
+        + (99/16384 - 275/24576*n + 55/16384*n^2) * eps^7
+        + (143/32768 - 253/49152*n) * eps^8
+        + 33/8192 * eps^9;
+C3[7] = + (429/114688 - 143/16384*n + 143/16384*n^2) * eps^7
+        + (143/32768 - 143/16384*n) * eps^8
+        + 429/131072 * eps^9;
+C3[8] = + (715/262144 - 429/65536*n) * eps^8
+        + 429/131072 * eps^9;
+C3[9] = + 2431/1179648 * eps^9;
+\endverbatim
+
+The formula for area between the geodesic and the equator is given in
+Sec. 6 of <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+Algorithms for geodesics</a> in terms of \e S,
+\f[
+S = c^2 \alpha + e^2 a^2 \cos\alpha_0 \sin\alpha_0 I_4(\sigma)
+\f]
+where
+\f[
+I_4(\sigma) = \sum_{j=0} C_{4j} \cos(2j+1)\sigma
+\f]
+In the paper, this was expanded in \f$ e'^2 \f$ and \f$ k^2 \f$.
+However, the series converges faster for eccentric ellipsoids if the
+expansion is in \f$ n \f$ and \f$ \epsilon \f$.  The series to order
+\f$ f^{10} \f$ becomes
+\verbatim
+C4[0] = + (2/3 - 4/15*n + 8/105*n^2 + 4/315*n^3 + 16/3465*n^4 + 20/9009*n^5 + 8/6435*n^6 + 28/36465*n^7 + 32/62985*n^8 + 4/11305*n^9)
+        - (1/5 - 16/35*n + 32/105*n^2 - 16/385*n^3 - 64/15015*n^4 - 16/15015*n^5 - 32/85085*n^6 - 112/692835*n^7 - 128/1616615*n^8) * eps
+        - (2/105 + 32/315*n - 1088/3465*n^2 + 1184/5005*n^3 - 128/3465*n^4 - 3232/765765*n^5 - 1856/1616615*n^6 - 6304/14549535*n^7) * eps^2
+        + (11/315 - 368/3465*n - 32/6435*n^2 + 976/4095*n^3 - 154048/765765*n^4 + 368/11115*n^5 + 5216/1322685*n^6) * eps^3
+        + (4/1155 + 1088/45045*n - 128/1287*n^2 + 64/3927*n^3 + 2877184/14549535*n^4 - 370112/2078505*n^5) * eps^4
+        + (97/15015 - 464/45045*n + 4192/153153*n^2 - 88240/969969*n^3 + 31168/1322685*n^4) * eps^5
+        + (10/9009 + 4192/765765*n - 188096/14549535*n^2 + 23392/855855*n^3) * eps^6
+        + (193/85085 - 6832/2078505*n + 106976/14549535*n^2) * eps^7
+        + (632/1322685 + 3456/1616615*n) * eps^8
+        + 107/101745 * eps^9;
+C4[1] = + (1/45 - 16/315*n + 32/945*n^2 - 16/3465*n^3 - 64/135135*n^4 - 16/135135*n^5 - 32/765765*n^6 - 112/6235515*n^7 - 128/14549535*n^8) * eps
+        - (2/105 - 64/945*n + 128/1485*n^2 - 1984/45045*n^3 + 256/45045*n^4 + 64/109395*n^5 + 128/855855*n^6 + 2368/43648605*n^7) * eps^2
+        - (1/105 - 16/2079*n - 5792/135135*n^2 + 3568/45045*n^3 - 103744/2297295*n^4 + 264464/43648605*n^5 + 544/855855*n^6) * eps^3
+        + (4/1155 - 2944/135135*n + 256/9009*n^2 + 17536/765765*n^3 - 3053056/43648605*n^4 + 1923968/43648605*n^5) * eps^4
+        + (1/9009 + 16/19305*n - 2656/153153*n^2 + 65072/2078505*n^3 + 526912/43648605*n^4) * eps^5
+        + (10/9009 - 1472/459459*n + 106112/43648605*n^2 - 204352/14549535*n^3) * eps^6
+        + (349/2297295 + 28144/43648605*n - 32288/8729721*n^2) * eps^7
+        + (632/1322685 - 44288/43648605*n) * eps^8
+        + 43/479655 * eps^9;
+C4[2] = + (4/525 - 32/1575*n + 64/3465*n^2 - 32/5005*n^3 + 128/225225*n^4 + 32/765765*n^5 + 64/8083075*n^6 + 32/14549535*n^7) * eps^2
+        - (8/1575 - 128/5775*n + 256/6825*n^2 - 6784/225225*n^3 + 4608/425425*n^4 - 128/124355*n^5 - 5888/72747675*n^6) * eps^3
+        - (8/1925 - 1856/225225*n - 128/17325*n^2 + 42176/1276275*n^3 - 2434816/72747675*n^4 + 195136/14549535*n^5) * eps^4
+        + (8/10725 - 128/17325*n + 64256/3828825*n^2 - 128/25935*n^3 - 266752/10392525*n^4) * eps^5
+        - (4/25025 + 928/3828825*n + 292288/72747675*n^2 - 106528/6613425*n^3) * eps^6
+        + (464/1276275 - 17152/10392525*n + 83456/72747675*n^2) * eps^7
+        + (1168/72747675 + 128/1865325*n) * eps^8
+        + 208/1119195 * eps^9;
+C4[3] = + (8/2205 - 256/24255*n + 512/45045*n^2 - 256/45045*n^3 + 1024/765765*n^4 - 256/2909907*n^5 - 512/101846745*n^6) * eps^3
+        - (16/8085 - 1024/105105*n + 2048/105105*n^2 - 1024/51051*n^3 + 4096/373065*n^4 - 1024/357357*n^5) * eps^4
+        - (136/63063 - 256/45045*n + 512/1072071*n^2 + 494336/33948915*n^3 - 44032/1996995*n^4) * eps^5
+        + (64/315315 - 16384/5360355*n + 966656/101846745*n^2 - 868352/101846745*n^3) * eps^6
+        - (16/97461 + 14848/101846745*n + 74752/101846745*n^2) * eps^7
+        + (5024/33948915 - 96256/101846745*n) * eps^8
+        - 1744/101846745 * eps^9;
+C4[4] = + (64/31185 - 512/81081*n + 1024/135135*n^2 - 512/109395*n^3 + 2048/1247103*n^4 - 2560/8729721*n^5) * eps^4
+        - (128/135135 - 2048/405405*n + 77824/6891885*n^2 - 198656/14549535*n^3 + 8192/855855*n^4) * eps^5
+        - (512/405405 - 2048/530145*n + 299008/130945815*n^2 + 280576/43648605*n^3) * eps^6
+        + (128/2297295 - 2048/1438965*n + 241664/43648605*n^2) * eps^7
+        - (17536/130945815 + 1024/43648605*n) * eps^8
+        + 2944/43648605 * eps^9;
+C4[5] = + (128/99099 - 2048/495495*n + 4096/765765*n^2 - 6144/1616615*n^3 + 8192/4849845*n^4) * eps^5
+        - (256/495495 - 8192/2807805*n + 376832/53348295*n^2 - 8192/855855*n^3) * eps^6
+        - (6784/8423415 - 432128/160044885*n + 397312/160044885*n^2) * eps^7
+        + (512/53348295 - 16384/22863555*n) * eps^8
+        - 16768/160044885 * eps^9;
+C4[6] = + (512/585585 - 4096/1422135*n + 8192/2078505*n^2 - 4096/1322685*n^3) * eps^6
+        - (1024/3318315 - 16384/9006855*n + 98304/21015995*n^2) * eps^7
+        - (103424/189143955 - 8192/4203199*n) * eps^8
+        - 1024/189143955 * eps^9;
+C4[7] = + (1024/1640925 - 65536/31177575*n + 131072/43648605*n^2) * eps^7
+        - (2048/10392525 - 262144/218243025*n) * eps^8
+        - 84992/218243025 * eps^9;
+C4[8] = + (16384/35334585 - 131072/82447365*n) * eps^8
+        - 32768/247342095 * eps^9;
+C4[9] = + 32768/92147055 * eps^9;
+\endverbatim
+
+\section geodellip Geodesics in terms of elliptic integrals
+
+GeographicLib::GeodesicExact and GeographicLib::GeodesicLineExact solve
+the geodesic problem using elliptic integrals.  The formulation of
+geodesic in terms of incomplete elliptic integrals is given in
+ - C. F. F. Karney,
+   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
+   on an ellipsoid of revolution</a>,
+   Feb. 2011; preprint
+   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.
+ .
+It is most convenient to use the form derived for a prolate ellipsoid in
+Appendix D.  For an oblate ellipsoid this results in elliptic integrals
+with an imaginary modulus.  However, the integrals themselves are real
+and the algorithms used to compute the elliptic integrals handles the
+case of an imaginary modulus using real arithmetic.
+
+The key relations used by %GeographicLib are
+\f[
+ \begin{aligned}
+  \frac sb &= E(\sigma, ik), \\
+  \lambda &= (1 - f) \sin\alpha_0  G(\sigma, \cos^2\alpha_0, ik) \\
+          &= \chi
+           - \frac{e'^2}{\sqrt{1+e'^2}}\sin\alpha_0 H(\sigma, -e'^2, ik), \\
+  J(\sigma) &= k^2 D(\sigma, ik),
+ \end{aligned}
+\f]
+where \f$ \chi \f$ is a modified spherical longitude given by
+\f[
+\tan\chi = \sqrt{\frac{1+e'^2}{1+k^2\sin^2\sigma}}\tan\omega,
+\f]
+and
+\f[
+ \begin{aligned}
+ D(\phi,k) &= \int_0^\phi
+ \frac{\sin^2\theta}{\sqrt{1 - k^2\sin^2\theta}}\,d\theta\\
+ &=\frac{F(\phi, k) - E(\phi, k)}{k^2},\\
+ G(\phi,\alpha^2,k) &= \int_0^\phi
+ \frac{\sqrt{1 - k^2\sin^2\theta}}{1 - \alpha^2\sin^2\theta}\,d\theta\\
+ &=\frac{k^2}{\alpha^2}F(\phi, k)
+ +\biggl(1-\frac{k^2}{\alpha^2}\biggr)\Pi(\phi, \alpha^2, k),\\
+ H(\phi, \alpha^2, k)
+ &= \int_0^\phi
+   \frac{\cos^2\theta}{(1-\alpha^2\sin^2\theta)\sqrt{1-k^2\sin^2\theta}}
+   \,d\theta \\
+ &=
+ \frac1{\alpha^2} F(\phi, k) +
+      \biggl(1 - \frac1{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k),
+ \end{aligned}
+\f]
+and \f$F(\phi, k)\f$, \f$E(\phi, k)\f$, \f$D(\phi, k)\f$, and
+\f$\Pi(\phi, \alpha^2, k)\f$, are incomplete elliptic integrals (see
+http://dlmf.nist.gov/19.2.ii).  The formula for \f$ s \f$ and the
+first expression for \f$ \lambda \f$ are given by Legendre (1811) and
+are the most common representation of geodesics in terms of elliptic
+integrals.  The second (equivalent) expression for \f$ \lambda \f$,
+which was given by Cayley (1870), is useful in that the elliptic
+integral is relegated to a small correction term.  This form allows
+the longitude to be computed more accurately and is used in
+%GeographicLib.  (The equivalence of the two expressions for \f$
+\lambda \f$ follows from http://dlmf.nist.gov/19.7.E8.)
+
+Nominally, GeographicLib::GeodesicExact and
+GeographicLib::GeodesicLineExact will give "exact" results for any value
+of the flattening.  However, the geographic latitude is a distorted
+measure of distance from the equator with very eccentric ellipsoids and
+this introducing an irreducible representational error in the algorithms
+in this case.  It is therefore recommended to restrict the use of these
+classes to \e b/\e a ∈ [0.01, 100] or \e f ∈ [-99, 0.99].
+Note that GeographicLib::GeodesicExact still uses a series expansion for
+the area \e S12.  However the series is taken out to 30th order and
+gives accurate results for \e b/\e a ∈ [1/2, 2]; the accuracy is
+about 8 decimal digits for \e b/\e a ∈ [1/4, 4].  Additional work
+planned for this aspect of the geodesic problem:
+- formulate the area integral \e S12 in terms of elliptic integrals;
+- generate accurate test geodesics for highly eccentric ellipsoids so
+  that the roundoff errors can be quantified.
+
+Thomas (1952) and Rollins (2010) use a different independent variable
+for geodesics, \f$\theta\f$ instead of \f$\sigma\f$, where \f$
+\tan\theta = \sqrt{1 + k^2} \tan\sigma \f$.  The corresponding
+expressions for \f$ s \f$ and \f$ \lambda \f$ are given here for
+completeness:
+\f[
+\begin{aligned}
+\frac sb &= \sqrt{1-k'^2} \Pi(\theta, k'^2, k'), \\
+\lambda &= (1-f) \sqrt{1-k'^2} \sin\alpha_0 \Pi(\theta, k'^2/e^2, k'),
+\end{aligned}
+\f]
+where \f$ k' = k/\sqrt{1 + k^2} \f$.  The expression for \f$ s \f$
+can be written in terms of elliptic integrals of the second kind and
+Cayley's technique can be used to subtract out the leading order
+behavior of \f$ \lambda \f$ to give
+\f[
+\begin{aligned}
+\frac sb &=\frac1{\sqrt{1-k'^2}}
+  \biggl( E(\theta, k') -
+    \frac{k'^2 \sin\theta \cos\theta}{\sqrt{1-k'^2\sin^2\theta}} \biggr), \\
+\lambda &= \psi + (1-f) \sqrt{1-k'^2} \sin\alpha_0
+\bigl( F(\theta, k') - \Pi(\theta, e^2, k') \bigr),
+\end{aligned}
+\f]
+where
+\f[
+\begin{aligned}
+\tan\psi &= \sqrt{\frac{1+k^2\sin^2\sigma}{1+e'^2}}\tan\omega \\
+         &= \sqrt{\frac{1-e^2}{1+k^2\cos^2\theta}}\sin\alpha_0\tan\theta.
+\end{aligned}
+\f]
+The tangents of the three "longitude-like" angles are in geometric
+progression, \f$ \tan\chi/\tan\omega = \tan\omega/\tan\psi \f$.
+
+\section meridian Parameters for the meridian
+
+The formulas for \f$ s \f$ given in the previous section are the same as
+those for the distance along a meridian for an ellipsoid with equatorial
+radius \f$ a \sqrt{1 - e^2 \sin^2\alpha_0} \f$ and polar semi-axis \f$ b
+\f$.  Here is a list of possible ways of expressing the meridian
+distance in terms of elliptic integrals using the notation:
+- \f$ a \f$, equatorial axis,
+- \f$ b \f$, polar axis,
+- \f$ e = \sqrt{(a^2 - b^2)/a^2} \f$, eccentricity,
+- \f$ e' = \sqrt{(a^2 - b^2)/b^2} \f$, second eccentricity,
+- \f$ \phi = \mathrm{am}(u, e) \f$, the geographic latitude,
+- \f$ \phi' = \mathrm{am}(v', ie') = \pi/2 - \phi \f$,
+  the geographic colatitude,
+- \f$ \beta = \mathrm{am}(v, ie') \f$, the parametric latitude
+  (\f$ \tan^2\beta = (1 - e^2) \tan^2\phi \f$),
+- \f$ \beta' = \mathrm{am}(u', e) = \pi/2 - \beta \f$,
+  the parametric colatitude,
+- \f$ M \f$, the length of a quarter meridian (equator to pole),
+- \f$ y \f$, the distance along the meridian (measured from the equator).
+- \f$ y' = M -y \f$, the distance along the meridian (measured from the pole).
+.
+The eccentricities \f$ (e, e') \f$ are real (resp. imaginary) for
+oblate (resp. prolate) ellipsoids.  The elliptic variables \f$(u,
+u')\f$ and \f$(v, v')\f$ are defined by
+- \f$ u = F(\phi, e) ,\quad u' = F(\beta', e) \f$
+- \f$ v = F(\beta, ie') ,\quad v' = F(\phi', ie') \f$,
+.
+and are linearly related by
+- \f$ u + u' = K(e) ,\quad v + v' = K(ie') \f$
+- \f$ v = \sqrt{1-e^2} u ,\quad u = \sqrt{1+e'^2} v \f$.
+.
+The cartesian coordinates for the meridian \f$ (x, y) \f$ are given by
+\f[
+\begin{aligned}
+  x &= a \cos\beta = a \cos\phi / \sqrt{1 - e^2 \sin^2\phi} \\
+    &= a \sin\beta' = (a^2/b) \sin\phi' / \sqrt{1 + e'^2 \sin^2\phi'} \\
+    &= a \,\mathrm{cn}(v, ie) = a \,\mathrm{cd}(u, e) \\
+    &= a \,\mathrm{sn}(u', e) = (a^2/b) \,\mathrm{sd}(v', ie'),
+\end{aligned}
+\f]
+\f[
+\begin{aligned}
+  z &= b \sin\beta = (b^2/a) \sin\phi / \sqrt{1 - e^2 \sin^2\phi} \\
+    &= b \cos\beta' = b \cos\phi' / \sqrt{1 + e'^2 \sin^2\phi'} \\
+    &= b \,\mathrm{sn}(v, ie) = (b^2/a) \,\mathrm{sd}(u, e)  \\
+    &= b \,\mathrm{cn}(u', e) = b \,\mathrm{cd}(v', ie').
+\end{aligned}
+\f]
+The distance along the meridian can be expressed variously as
+\f[
+\begin{aligned}
+  y  &=   b   \int \sqrt{1 + e'^2  \sin^2\beta}\, d\beta
+     =   b E(\beta, ie') \\
+     &= \frac{b^2}a \int \frac1{(1 - e^2 \sin^2\phi)^{3/2}}\, d\phi
+      = \frac{b^2}a \Pi(\phi, e^2, e) \\
+     &=   a \biggl(E(\phi, e) -
+        \frac{e^2\sin\phi \cos\phi}{\sqrt{1 - e^2\sin^2\phi}}\biggr) \\
+     &=  b \int \mathrm{dn}^2(v, ie')\, dv
+      = \frac{b^2}a \int \mathrm{nd}^2(u, e)\, du
+      = \cal E(v, ie'),
+\end{aligned}
+\f]
+\f[
+\begin{aligned}
+  y' &=   a   \int \sqrt{1 - e^2  \sin^2\beta'}\, d\beta'
+     =   a E(\beta', e) \\
+     &= \frac{a^2}b \int \frac1{(1 + e'^2 \sin^2\phi')^{3/2}}\, d\phi'
+      = \frac{a^2}b \Pi(\phi', -e'^2, ie') \\
+     &=  b \biggl(E(\phi', ie') +
+        \frac{e'^2\sin\phi' \cos\phi'}{\sqrt{1 + e'^2\sin^2\phi'}}\biggr) \\
+     &=  a \int \mathrm{dn}^2(u', e)\, du'
+      = \frac{a^2}b \int \mathrm{nd}^2(v', ie')\, dv'
+      = \cal E(u', e),
+\end{aligned}
+\f]
+with the quarter meridian distance given by
+\f[
+  M  = aE(e) = bE(ie') = (b^2/a)\Pi(e^2,e) = (a^2/b)\Pi(-e'^2,ie').
+\f]
+(Here \f$ E, F, \Pi \f$ are elliptic integrals defined in
+http://dlmf.nist.gov/19.2.ii.  \f$ \cal E, \mathrm{am}, \mathrm{sn},
+\mathrm{cn}, \mathrm{sd}, \mathrm{cd}, \mathrm{dn}, \mathrm{nd} \f$ are
+Jacobi elliptic functions defined in http://dlmf.nist.gov/22.2 and
+http://dlmf.nist.gov/22.16.)
+
+There are several considerations in the choice of independent variable
+for evaluate the meridian distance
+- The use of an imaginary modulus (namely, \f$ ie' \f$, above) is of no
+  practical concern.  The integrals are real in this case and modern
+  methods (%GeographicLib uses the method given in
+  http://dlmf.nist.gov/19.36.i) for computing integrals handles this
+  case using just real arithmetic.
+- If the "natural" origin is the equator, choose one of \f$ \phi, \beta,
+  u, v \f$ (this might be preferred in geodesy).  If it's the pole,
+  choose one of the complementary quantities \f$ \phi', \beta', u', v'
+  \f$ (this might be preferred by mathematicians).
+- Applying these formulas to the geodesic problems, \f$ \beta \f$
+  becomes the arc length, \f$ \sigma \f$, on the auxiliary sphere.  This
+  is the traditional method of solution used by Legendre (1806), Oriani
+  (1806), Bessel (1825), Helmert (1880), Rainsford (1955), Thomas
+  (1970), Vincenty (1975), Rapp (1993), and so on.  Many of the
+  solutions in terms of elliptic functions use one of the elliptic
+  variables (\f$ u \f$ or \f$ v \f$), see, for example, Jacobi (1855),
+  Halphen (1888), Forsyth (1896).  In the context of geodesics \f$
+  \phi \f$ becomes Thomas' variable \f$ \theta \f$; this is used by
+  Thomas (1952) and Rollins (2010) in their formulation of the
+  geodesic problem (see the previous section).
+- For highly eccentric ellipsoids the variation of the meridian with
+  respect to \f$ \beta \f$ is considerably "better behaved" than other
+  choices (see the figure below).  The choice of \f$ \phi \f$ is
+  probably a poor one in this case.
+.
+%GeographicLib uses the geodesic generalization of
+\f$ y = b E(\beta, ie') \f$, namely \f$ s = b E(\sigma, ik) \f$.  See
+\ref geodellip.
+
+\image html meridian-measures.png "Comparison of meridian measures"
+
+\section geodshort Short geodesics
+
+Here we describe Bowring's method for solving the inverse geodesic
+problem in the limit of short geodesics and contrast it with the great
+circle solution using Bessel's auxiliary sphere.  References:
+ - B. R. Bowring, The Direct and Inverse Problems for Short Geodesic
+   Lines on the Ellipsoid, Surveying and Mapping 41(2), 135--141 (1981).
+ - R. H. Rapp,
+   <a href="http://hdl.handle.net/1811/24333">
+   Geometric Geodesy, Part I</a>, Ohio State Univ. (1991), Sec. 6.5.
+
+Bowring considers the conformal mapping of the ellipsoid to a sphere of
+radius \f$ R \f$ such that circles of latitude and meridians are
+preserved (and hence the azimuth of a line is preserved).  Let \f$
+(\phi, \lambda) \f$ and \f$ (\phi', \lambda') \f$ be the latitude and
+longitude on the ellipsoid and sphere respectively.  Define isometric
+latitudes for the sphere and the ellipsoid as
+\f[
+\begin{aligned}
+  \psi' &= \sinh^{-1} \tan \phi', \\
+  \psi &= \sinh^{-1} \tan \phi - e \tanh^{-1}(e \sin\phi).
+\end{aligned}
+\f]
+The most general conformal mapping satisfying Bowring's conditions is
+\f[
+\psi' = A \psi + K, \quad \lambda' = A \lambda,
+\f]
+where \f$ A \f$ and \f$ K \f$ are constants.  (In fact a constant can be
+added to the equation for \f$ \lambda' \f$, but this does affect the
+analysis.)  The scale of this mapping is
+\f[
+m(\phi) = \frac{AR}{\nu}\frac{\cos\phi'}{\cos\phi},
+\f]
+where \f$ \nu = a/\sqrt{1 - e^2\sin^2\phi} \f$ is the transverse radius
+of curvature.  (Note that in Bowring's Eq. (10), \f$ \phi \f$ should be
+replaced by \f$ \phi' \f$.)  The mapping from the ellipsoid to the sphere
+depends on three parameters \f$ R, A, K \f$.  These will be selected to
+satisfy certain conditions at some representative latitude \f$ \phi_0
+\f$.  Two possible choices are given below.
+
+\subsection bowring Bowring's method
+
+Bowring (1981) requires that
+\f[
+m(\phi_0) = 1,\quad
+\left.\frac{dm(\phi)}{d\phi}\right|_{\phi=\phi_0} = 0,\quad
+\left.\frac{d^2m(\phi)}{d\phi^2}\right|_{\phi=\phi_0} = 0,
+\f]
+i.e, \f$m\approx 1\f$ in the vicinity of \f$\phi = \phi_0\f$.
+This gives
+\f[
+\begin{aligned}
+R &= \frac{\sqrt{1 + e'^2}}{B^2} a, \\
+A &= \sqrt{1 + e'^2 \cos^4\phi_0}, \\
+\tan\phi'_0 &= \frac1B \tan\phi_0,
+\end{aligned}
+\f]
+where \f$ e' = e/\sqrt{1-e^2} \f$ is the second eccentricity, \f$ B =
+\sqrt{1+e'^2\cos^2\phi_0} \f$, and \f$ K \f$ is defined implicitly by
+the equation for \f$\phi'_0\f$.  The radius \f$ R \f$ is the (Gaussian)
+mean radius of curvature of the ellipsoid at \f$\phi_0\f$ (so near
+\f$\phi_0\f$ the ellipsoid can be deformed to fit the sphere snugly).
+The third derivative of \f$ m \f$ is given by
+\f[
+\left.\frac{d^3m(\phi)}{d\phi^3}\right|_{\phi=\phi_0} =
+\frac{-2e'^2\sin2\phi_0}{B^4}.
+\f]
+
+The method for solving the inverse problem between two nearby points \f$
+(\phi_1, \lambda_1) \f$ and \f$ (\phi_2, \lambda_2) \f$ is as follows:
+Set \f$\phi_0 = (\phi_1 + \phi_2)/2\f$.  Compute \f$ R, A, \phi'_0 \f$,
+and hence find \f$ (\phi'_1, \lambda'_1) \f$ and \f$ (\phi'_2,
+\lambda'_2) \f$.  Finally, solve for the great circle on a sphere of
+radius \f$ R \f$; the resulting distance and azimuths are good
+approximations for the corresponding quantities for the ellipsoidal
+geodesic.
+
+Consistent with the accuracy of this method, we can compute
+\f$\phi'_1\f$ and \f$\phi'_2\f$ using a Taylor expansion about
+\f$\phi_0\f$.  This also avoids numerical errors that arise from
+subtracting nearly equal quantities when using the equation for
+\f$\phi'\f$ directly.  Write \f$\Delta \phi = \phi - \phi_0\f$ and
+\f$\Delta \phi' = \phi' - \phi'_0\f$; then we have
+\f[
+\Delta\phi' \approx
+\frac{\Delta\phi}B \biggl[1 +
+\frac{\Delta\phi}{B^2}\frac{e'^2}2
+  \biggl(3\sin\phi_0\cos\phi_0 +
+   \frac{\Delta\phi}{B^2}
+   \bigl(B^2 - \sin^2\phi_0(2 - 3 e'^2 \cos^2\phi_0)\bigr)\biggr)\biggr],
+\f]
+where the error is \f$O(f\Delta\phi^4)\f$.
+This is essentially Bowring's method.  Significant differences between
+this result, "Bowring (improved)", compared to Bowring's paper, "Bowring
+(original)", are:
+ - Bowring elects to use \f$\phi_0 = \phi_1\f$.  This simplifies the
+   calculations somewhat but increases the error by about a factor of
+   4.
+ - Bowring's expression for \f$ \Delta\phi' \f$ is only accurate in the
+   limit \f$ e' \rightarrow 0 \f$.
+ .
+In fact, arguably, the highest order \f$O(f\Delta\phi^3)\f$ terms should
+be dropped altogether.  Their inclusion does result in a better estimate
+for the distance.  However, if your goal is to generate both accurate
+distances \e and accurate azimuths, then \f$\Delta\phi\f$ needs to be
+restricted sufficiently to allow these terms to be dropped to give the
+"Bowring (truncated)" method.
+
+With highly eccentric ellipsoids, the parametric latitude \f$ \beta \f$
+is a better behaved independent variable to use.  In this case, \f$
+\phi_0 \f$ is naturally defined using \f$\beta_0 = (\beta_1 +
+\beta_2)/2\f$ and in terms of \f$\Delta\beta = \beta - \beta_0\f$, we
+have
+\f[
+\Delta\phi' \approx
+\frac{\Delta\beta}{B'} \biggl[1 +
+\frac{\Delta\beta}{B'^2}\frac{e'^2}2
+  \biggl(\sin\beta_0\cos\beta_0 +
+   \frac{\Delta\beta}{3B'^2}
+    \bigl( \cos^2\beta_0 - \sin^2\beta_0 B'^2\bigr)
+\biggr)\biggr],
+\f]
+where \f$B' = \sqrt{1+e'^2\sin^2\beta_0} = \sqrt{1+e'^2}/B\f$, and the
+error once again is \f$O(f\Delta\phi^4)\f$.  This is the "Bowring
+(using \f$\beta\f$)" method.
+
+\subsection auxsphere Bessel's auxiliary sphere
+
+%GeographicLib's uses the auxiliary sphere method of Legendre, Bessel,
+and Helmert.  For short geodesics, this is equivalent to picking
+\f$ R, A, K \f$ so that
+\f[
+m(\phi_0) = 1,\quad
+\left.\frac{dm(\phi)}{d\phi}\right|_{\phi=\phi_0} = 0,\quad
+\tan\phi'_0 = (1 - f) \tan\phi_0.
+\f]
+Bowring's requirement that the second derivative of \f$m\f$ vanish has
+been replaced by the last relation which states that \f$\phi'_0 =
+\beta_0\f$, the parametric latitude corresponding to \f$\phi_0\f$.  This
+gives
+\f[
+\begin{aligned}
+R &= B'(1-f)a, \\
+A &= \frac1{B'(1-f)}, \\
+\left.\frac{d^2m(\phi)}{d\phi^2}\right|_{\phi=\phi_0} &=
+-e^2B'^2\sin^2\phi_0.
+\end{aligned}
+\f]
+
+Similar to Bowring's method, we can compute \f$\phi'_1\f$ and
+\f$\phi'_2\f$ using a Taylor expansion about \f$\beta_0\f$.  This results
+in the simple expression
+\f[
+\Delta\phi' \approx \Delta\beta,
+\f]
+where the error is \f$O(f\Delta\beta^2)\f$.
+
+\subsection shorterr Estimating the accuracy
+
+In assessing the accuracy of these methods we use two metrics:
+ - The absolute error in the distance.
+ - The consistency of the predicted azimuths.  Imagine starting
+   ellipsoidal geodesics at \f$ (\phi_1, \lambda_1) \f$ and \f$ (\phi_2,
+   \lambda_2) \f$ with the predicted azimuths.  What is the distance
+   between them when they are extended a distance \f$ a \f$ beyond the
+   second point?
+ .
+(The second metric is much more stringent.)  We may now compare the
+methods by asking for a bound to the length of a geodesic which ensures
+that the one or other of the errors fall below 1 mm (an "engineering"
+definition of accurate) or 1 nm (1 nanometer, about the round-off
+limit).
+
+<center>
+<table>
+<caption>Maximum distance that can be used in various methods for
+computing short geodesics while keeping the errors within prescribed
+bounds</caption>
+<tr>
+ <th rowspan="2">method
+ <th colspan="2"><center>distance metric</center></th>
+ <th colspan="2"><center>azimuth metric</center></th>
+<tr>
+ <th>1 mm error</th>
+ <th>1 nm error</th>
+ <th>1 mm error</th>
+ <th>1 nm error</th>
+<tr>
+ <td>Bowring (original)
+ <td><center>87 km</center>
+ <td><center>870 m</center>
+ <td><center>35 km</center>
+ <td><center>350 m</center>
+<tr>
+ <td>Bowring (improved)
+ <td><center>180 km</center>
+ <td><center>1.8 km</center>
+ <td><center>58 km</center>
+ <td><center>580 m</center>
+<tr>
+ <td>Bowring (truncated)
+ <td><center>52 km</center>
+ <td><center>520 m</center>
+ <td><center>52 km</center>
+ <td><center>520 m</center>
+<tr>
+ <td>Bowring (using \f$\beta\f$)
+ <td><center>380 km</center>
+ <td><center>24 km</center>
+ <td><center>60 km</center>
+ <td><center>600 m</center>
+<tr>
+ <td>Bessel's aux. sphere
+ <td><center>42 km</center>
+ <td><center>420 m</center>
+ <td><center>1.7 km</center>
+ <td><center>1.7 m</center>
+</table>
+</center>
+
+For example, if you're only interested in measuring distances and an
+accuracy of 1 mm is sufficient, then Bowring's improved method can be
+used for distances up to 180 km.  On the other hand, %GeographicLib uses
+Bessel's auxiliary sphere and we require both the distance and the
+azimuth to be accurate, so the great circle approximation can only be
+used for distances less than 1.7 m.  The reason that %GeographicLib does
+not use Bowring's method is that the information necessary for auxiliary
+sphere method is already available as part of the general solution and,
+as much as possible, we allow all geodesics to be computed by the
+general method.
+
+<center>
+Back to \ref magnetic.  Forward to \ref triaxial.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page triaxial Geodesics on a triaxial ellipsoid
+
+<center>
+Back to \ref geodesic.  Forward to \ref transversemercator.  Up to
+\ref contents.
+</center>
+
+Jacobi (1839) showed that the problem of geodesics on a triaxial
+ellipsoid (with 3 unequal axes) can be reduced to quadrature.  Despite
+this, the detailed behavior of the geodesics is not very well known.  In
+this section, I briefly give Jacobi's solution and illustrate the
+behavior of the geodesics and outline an algorithm for the solution of
+the inverse problem.
+
+See also
+ - The wikipedia page,
+   <a href="http://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid#Geodesics_on_a_triaxial_ellipsoid">
+   Geodesics on  a triaxial ellipsoid</a>.
+
+Go to
+ - \ref triaxial-coords
+ - \ref triaxial-jacobi
+ - \ref triaxial-survey
+ - \ref triaxial-stab
+ - \ref triaxial-inverse
+
+<b>NOTES</b>
+ -# A triaxial ellipsoid approximates the earth only slightly better
+    than an ellipsoid of revolution.  If you are really considering
+    measuring distances on the earth using a triaxial ellipsoid, you
+    should also be worrying about the shape of the geoid, which
+    essentially makes the geodesic problem a hopeless mess; see, for
+    example, <a href="http://arxiv.org/abs/1112.3231"> Waters
+    (2011)</a>.
+ -# There is nothing new in this section.  It is just an exercise in
+    exploring Jacobi's solution.  My interest here is in generating long
+    geodesics with the correct long-time behavior.  Arnold gives a
+    nice qualitative description of the solution in <i>Mathematical
+    Methods of Classical Mechanics</i> (2nd edition, Springer, 1989),
+    pp. 264--266.
+ -# Possible reasons this problem might, nevertheless, be of interest
+    are:
+    - It is the first example of a dynamical system which has a
+      non-trivial constant of motion.  As such, Jacobi's paper generated
+      a lot of excitement and was followed by many papers elaborating
+      his solution.  In particular, the unstable behavior of one of the
+      closed geodesics of the ellipsoid, is an early example of a system
+      with a positive Lyapunov exponent (one of the essential
+      ingredients for chaotic behavior in dynamical systems).
+    - Knowledge of ellipsoidal coordinates (used by Jacobi) might be
+      useful in other areas of geodesy.
+    - Geodesics which pass through the pole on an ellipsoid of revolution
+      represent a degenerate class (they are all closed and all pass
+      through the opposite pole).  It is of interest to see how this
+      degeneracy is broken with a surface with a more general shape.
+ -# My interest in this problem was piqued by Jean-Marc Baillard.  I put
+    him onto Jacobi's solution without having looked at it in detail
+    myself; and he quickly implemented the solution for an HP-41
+    calculator(!) which is posted
+    <a href="http://hp41programs.yolasite.com/geod3axial.php"> here</a>.
+ -# I do not give full citations of the papers here.  You can find these
+    in the
+    <a href="http://geographiclib.sourceforge.net/geodesic-papers/biblio.html">
+    Online Geodesic Bibliography</a>; this includes links to online
+    versions of the papers.
+ -# An alternative to exploring geodesics using Jacobi's solution is to
+    integrate the equations for the geodesics directly.  This is the
+    approach taken by
+    <a href="http://www.math.harvard.edu/~knill/caustic/">
+    Oliver Knill and Michael Teodorescu</a>.  However it is difficult to
+    ensure that the long time behavior is correctly modeled with such an
+    approach.
+ -# At this point, I have no plans to add the solution of triaxial
+    geodesic problem to %GeographicLib.
+ -# If you only want to learn about geodesics on a biaxial ellipsoid (an
+    ellipsoid of revolution), then see \ref geodesic or the paper
+    - C. F. F. Karney,
+      <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+      Algorithms for geodesics</a>,
+      J. Geodesy 87(1), 43--55 (Jan. 2013);
+      DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+      10.1007/s00190-012-0578-z</a>;
+      addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+      geod-addenda.html</a>.
+
+\section triaxial-coords Triaxial coordinate systems
+
+Consider the ellipsoid defined by
+\f[
+  f = \frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2} = 1,
+\f]
+where, without loss of generality, \f$ a \ge b \ge c \gt 0\f$.  A
+point on the surface is specified by a latitude and longitude.  The \e
+geographical latitude and longitude \f$(\phi, \lambda)\f$ are defined by
+\f[
+ \frac{\nabla f}{\left| \nabla f\right|} = \left(
+\begin{array}{c} \cos\phi \cos\lambda \\ \cos\phi \sin\lambda \\ \sin\phi
+\end{array}\right).
+\f]
+The \e parametric latitude and longitude \f$(\phi', \lambda')\f$ are
+defined by
+\f[
+\begin{aligned}
+ x &= a \cos\phi' \cos\lambda', \\
+ y &= b \cos\phi' \sin\lambda', \\
+ z &= c \sin\phi'.
+\end{aligned}
+\f]
+Jacobi employed the \e ellipsoidal latitude and longitude \f$(\beta,
+\omega)\f$ defined by
+\f[
+\begin{aligned}
+  x &= a \cos\omega
+      \frac{\sqrt{a^2 - b^2\sin^2\beta - c^2\cos^2\beta}}
+           {\sqrt{a^2 - c^2}}, \\
+  y &= b \cos\beta \sin\omega, \\
+  z &= c \sin\beta
+      \frac{\sqrt{a^2\sin^2\omega + b^2\cos^2\omega - c^2}}
+           {\sqrt{a^2 - c^2}}.
+\end{aligned}
+\f]
+Grid lines of constant \f$\beta\f$ and \f$\omega\f$ are given in Fig. 1.
+
+<center>
+<img src="https://upload.wikimedia.org/wikipedia/commons/b/bd/Triaxial_ellipsoid_coordinate_system.svg"
+width=419 height=397 alt="Geodesic grid on a triaxial ellipsoid">
+Fig. 1
+</center>\n
+Fig. 1:
+The ellipsoidal grid.  The blue (resp. green) lines are lines of constant
+\f$\beta\f$ (resp. \f$\omega\f$); the grid spacing is 10°.  Also
+shown in red are two of the principal sections of the ellipsoid, defined
+by \f$x = 0\f$ and \f$z = 0\f$.  The third principal section, \f$y =
+0\f$, is covered by the lines \f$\beta = \pm 90^\circ\f$ and \f$\omega =
+90^\circ \pm 90^\circ\f$.  These lines meet at four umbilical points (two
+of which are visible in this figure) where the principal radii of
+curvature are equal.  The parameters of the ellipsoid are \f$a =
+1.01\f$, \f$b = 1\f$, \f$c = 0.8\f$, and it is viewed in an orthographic
+projection from a point above \f$\phi = 40^\circ\f$, \f$\lambda =
+30^\circ\f$.  These parameters were chosen to accentuate the ellipsoidal
+effects on geodesics (relative to those on the earth) while still
+allowing the connection to an ellipsoid of revolution to be made.
+
+The grid lines of the ellipsoid coordinates are "lines of curvature" on
+the ellipsoid, i.e., they are parallel to the direction of principal
+curvature (Monge, 1796).  They are also intersections of the ellipsoid
+with confocal systems of hyperboloids of one and two sheets (Dupin,
+1813).  Finally they are geodesic ellipses and hyperbolas defined using
+two adjacent umbilical points.  For example, the lines of constant
+\f$\beta\f$ in Fig. 1 can be generated with the familiar string
+construction for ellipses with the ends of the string pinned to the two
+umbilical points.
+
+Inter-conversions between these three latitudes and longitudes and the
+cartesian coordinates are simple algebraic exercises.
+
+\section triaxial-jacobi Jacobi's solution
+
+Solving the geodesic problem for an ellipsoid of revolution is, from the
+mathematical point of view, trivial; because of symmetry, geodesics have
+a constant of the motion (analogous to the angular momentum) which was
+found by Clairaut (1733).  By 1806 (with the work of Legendre, Oriani,
+et al.), there was a complete understanding of the qualitative behavior
+of geodesics on an ellipsoid of revolution.
+
+On the other hand, geodesics on a triaxial ellipsoid have no obvious
+constant of the motion and thus represented a challenging "unsolved"
+problem in the first half of the nineteenth century.  Jacobi discovered
+that the geodesic equations are separable if they are expressed in
+ellipsoidal coordinates.  You can get an idea of the importance Jacobi
+attached to his discovery from the
+<a href="http://books.google.com/books?id=_09tAAAAMAAJ&pg=PA385">
+letter</a> he wrote to his friend and neighbor Bessel:
+<blockquote> The day before yesterday, I reduced to quadrature the
+problem of geodesic lines on an <i>ellipsoid with three unequal
+axes</i>.  They are the simplest formulas in the world, Abelian
+integrals, which become the well known elliptic integrals if 2 axes are
+set equal.\n
+Königsberg, 28th Dec. '38.
+</blockquote>
+
+On the same day he wrote a similar letter to the editor of Compte Rendus
+and his result was published in J. Crelle in (1839) with a French
+translation (from German) appearing in J. Liouville in (1841).
+
+Here is the solution, exactly as given by Jacobi
+<a href="http://books.google.com/books?id=Rh8GAAAAYAAJ&pg=PA268"> here</a>
+(with minor changes in notation):
+\f[
+\begin{aligned}
+\delta &= \int \frac
+{\sqrt{b^2\sin^2\beta + c^2\cos^2\beta}\,d\beta}
+{\sqrt{a^2 - b^2\sin^2\beta - c^2\cos^2\beta}
+ \sqrt{(b^2-c^2)\cos^2\beta - \gamma}}\\
+&\quad -
+\int \frac
+{\sqrt{a^2\sin^2\omega + b^2\cos^2\omega}\,d\omega}
+{\sqrt{a^2\sin^2\omega + b^2\cos^2\omega - c^2}
+ \sqrt{(a^2-b^2)\sin^2\omega + \gamma}}
+\end{aligned}
+\f]
+As Jacobi notes "a function of the angle \f$\beta\f$ equals a
+function of the angle \f$\omega\f$.  These two functions are just
+Abelian integrals..." Two constants \f$\delta\f$ and \f$\gamma\f$
+appear in the solution.  Typically \f$\delta\f$ is zero if the lower
+limits of the integrals are taken to be the starting point of the geodesic
+and the direction of the geodesics is determined by \f$\gamma\f$.
+However for geodesics that start at an umbilical points, we have \f$\gamma
+= 0\f$ and \f$\delta\f$ determines the direction at the umbilical point.
+Incidentally the constant \f$\gamma\f$ may be expressed as
+\f[
+\gamma = (b^2-c^2)\cos^2\beta\sin^2\alpha-(a^2-b^2)\sin^2\omega\cos^2\alpha
+\f]
+where \f$\alpha\f$ is the angle the geodesic makes with lines of
+constant \f$\omega\f$. In the limit \f$a\rightarrow b\f$, this reduces
+to \f$\cos\beta\sin\alpha = \text{const.}\f$, the familiar Clairaut
+relation.  A nice derivation of Jacobi's result is given by Darboux
+(1894) <a href="http://books.google.com/books?id=hGMSAAAAIAAJ&pg=PA9">
+§§583--584</a> where he gives the solution found by Liouville
+(1846) for general quadratic surfaces.  In this formulation, the
+distance along the geodesic, \f$s\f$, is also found using
+\f[
+\begin{aligned}
+\frac{ds}{(b^2-c^2)\cos^2\beta + (a^2-b^2)\sin^2\omega}
+&= \frac
+{\sqrt{b^2\sin^2\beta + c^2\cos^2\beta}\,d\beta}
+{\sqrt{a^2 - b^2\sin^2\beta - c^2\cos^2\beta}
+ \sqrt{(b^2-c^2)\cos^2\beta - \gamma}}\\
+&= \frac
+{\sqrt{a^2\sin^2\omega + b^2\cos^2\omega}\,d\omega}
+{\sqrt{a^2\sin^2\omega + b^2\cos^2\omega - c^2}
+ \sqrt{(a^2-b^2)\sin^2\omega + \gamma}}
+\end{aligned}
+\f]
+An alternative expression for the distance is
+\f[
+\begin{aligned}
+ds
+&= \frac
+{\sqrt{b^2\sin^2\beta + c^2\cos^2\beta}
+ \sqrt{(b^2-c^2)\cos^2\beta - \gamma}\,d\beta}
+{\sqrt{a^2 - b^2\sin^2\beta - c^2\cos^2\beta}}\\
+&\quad {}+ \frac
+{\sqrt{a^2\sin^2\omega + b^2\cos^2\omega}
+ \sqrt{(a^2-b^2)\sin^2\omega + \gamma}\,d\omega}
+{\sqrt{a^2\sin^2\omega + b^2\cos^2\omega - c^2}}
+\end{aligned}
+\f]
+
+Jacobi's solution is a convenient way to compute geodesics on an
+ellipsoid.  Care must be taken with the signs of the square roots (which
+are determined by the initial azimuth of the geodesic).  Also if
+\f$\gamma \gt 0\f$ (resp. \f$\gamma \lt 0\f$), then the \f$\beta\f$
+(resp. \f$\omega\f$) integrand diverges.  The integrand can be
+transformed into a finite one by a change of variable, e.g.,
+\f$\sin\beta = \sin\sigma \sqrt{1 - \gamma/(b^2-c^2)}\f$.  The resulting
+integrals are periodic, so the behavior of an arbitrarily long geodesic
+is entirely captured by tabulating the integrals over a single period.
+
+The situation is more complicated if \f$\gamma = 0\f$ (corresponding to
+umbilical geodesics).  Both integrands have simple poles at the umbilical
+points.  However, this behavior may be subtracted from the integrands to
+yield (for example) the sum of a term involving
+\f$\tanh^{-1}\sin\beta\f$ and a finite integral.  Since both integrals
+contain similar logarithmic singularities they can be equated (thus
+fixing the ratio \f$\cos\beta/\sin\omega\f$ at the umbilical point) and
+connection formulas can be found which allow the geodesic to be followed
+through the umbilical point.  The study of umbilical geodesics was of
+special interest to a group of Irish mathematicians in the 1840's and
+1850's, including Michael and William Roberts (twins!), Hart, Graves,
+and Salmon.
+
+\section triaxial-survey Survey of triaxial geodesics
+
+Before delving into the nature of geodesics on a triaxial geodesic, it
+is worth reviewing geodesics on an ellipsoid of revolution.  There are
+two classes of simple closed geodesics (i.e., geodesics which close on
+themselves without intersection): the equator and all the meridians.
+All other geodesics oscillate between two equal and opposite circles of
+latitude; but after completing a full oscillation in latitude these fall
+slightly short (for an oblate ellipsoid) of completing a full circuit in
+longitude.
+
+Turning to the triaxial case, we find that there are only 3 simple
+closed geodesics, the three principal sections of the ellipsoid given by
+\f$x = 0\f$, \f$y = 0\f$, and \f$z = 0\f$.  To survey the other
+geodesics, it is convenient to consider geodesics which intersect the
+middle principal section, \f$y = 0\f$, at right angles.  Such geodesics
+are shown in Figs. 2--6, where I use the same ellipsoid parameters as in
+Fig. 1 and the same viewing direction.  In addition, the three principal
+ellipses are shown in red in each of these figures.
+
+If the starting point is \f$\beta_1 \in (-90^\circ, 90^\circ)\f$,
+\f$\omega_1 = 0\f$, and \f$\alpha_1 = 90^\circ\f$, then the geodesic
+encircles the ellipsoid in a "circumpolar" sense.  The geodesic
+oscillates north and south of the equator; on each oscillation it
+completes slightly less that a full circuit around the ellipsoid
+resulting in the geodesic filling the area bounded by the two latitude
+lines \f$\beta = \pm \beta_1\f$.  Two examples are given in
+Figs. 2 and 3.  Figure 2 shows practically the same behavior as for an
+oblate ellipsoid of revolution (because \f$a \approx b\f$).  However, if
+the starting point is at a higher latitude (Fig. 3) the distortions
+resulting from \f$a \ne b\f$ are evident.
+
+<center>
+<img src="https://upload.wikimedia.org/wikipedia/commons/a/a9/Circumpolar_geodesic_on_a_triaxial_ellipsoid_case_A.svg"
+width=419 height=397 alt="Example of a circumpolar geodesic on a
+triaxial ellipsoid">
+Fig. 2
+</center>\n
+Fig. 2:
+Example of a circumpolar geodesic on a triaxial ellipsoid.  The starting
+point of this geodesic is \f$\beta_1 = 45.1^\circ\f$, \f$\omega_1 =
+0^\circ\f$, and \f$\alpha_1 = 90^\circ\f$.
+
+<center>
+<img src="https://upload.wikimedia.org/wikipedia/commons/f/f3/Circumpolar_geodesic_on_a_triaxial_ellipsoid_case_B.svg"
+width=419 height=397 alt="Another example of a circumpolar geodesic on a
+triaxial ellipsoid">
+Fig. 3
+</center>\n
+Fig. 3:
+Another example of a circumpolar geodesic on a triaxial ellipsoid.  The
+starting point of this geodesic is \f$\beta_1 = 87.48^\circ\f$, \f$\omega_1 =
+0^\circ\f$, and \f$\alpha_1 = 90^\circ\f$.
+
+If the starting point is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 \in
+(0^\circ, 180^\circ)\f$, and \f$\alpha_1 = 0^\circ\f$, then the geodesic
+encircles the ellipsoid in a "transpolar" sense.  The geodesic
+oscillates east and west of the ellipse \f$x = 0\f$; on each oscillation
+it completes slightly more that a full circuit around the ellipsoid
+resulting in the geodesic filling the area bounded by the two longitude
+lines \f$\omega = \omega_1\f$ and \f$\omega = 180^\circ - \omega_1\f$.
+If \f$a = b\f$, all meridians are geodesics; the effect of \f$a \ne b\f$
+causes such geodesics to oscillate east and west.  Two examples are
+given in Figs. 4 and 5.
+
+<center>
+<img src="https://upload.wikimedia.org/wikipedia/commons/8/83/Transpolar_geodesic_on_a_triaxial_ellipsoid_case_A.svg"
+width=419 height=397 alt="Example of a transpolar geodesic on a
+triaxial ellipsoid">
+Fig. 4
+</center>\n
+Fig. 4:
+Example of a transpolar geodesic on a triaxial ellipsoid.  The
+starting point of this geodesic is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 =
+39.9^\circ\f$, and \f$\alpha_1 = 0^\circ\f$.
+
+<center>
+<img src="https://upload.wikimedia.org/wikipedia/commons/9/9c/Transpolar_geodesic_on_a_triaxial_ellipsoid_case_B.svg"
+width=419 height=397 alt="Another example of a transpolar geodesic on a
+triaxial ellipsoid">
+Fig. 5
+</center>\n
+Fig. 5:
+Another example of a transpolar geodesic on a triaxial ellipsoid.  The
+starting point of this geodesic is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 =
+9.966^\circ\f$, and \f$\alpha_1 = 0^\circ\f$.
+
+If the starting point is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 =
+0^\circ\f$ (an umbilical point), and \f$\alpha_1 = 45^\circ\f$ (the
+geodesic leaves the ellipse \f$y = 0\f$ at right angles), then the
+geodesic repeatedly intersects the opposite umbilical point and returns to
+its starting point.  However on each circuit the angle at which it
+intersects \f$y = 0\f$ becomes closer to \f$0^\circ\f$ or
+\f$180^\circ\f$ so that asymptotically the geodesic lies on the ellipse
+\f$y = 0\f$.  This is shown in Fig. 6.  Note that a single geodesic does
+not fill an area on the ellipsoid.
+
+<center>
+<img src="https://upload.wikimedia.org/wikipedia/commons/e/e5/Unstable_umbilical_geodesic_on_a_triaxial_ellipsoid.svg"
+width=419 height=397 alt="Example of an umbilical geodesic on a
+triaxial ellipsoid">
+Fig. 6
+</center>\n
+Fig. 6:
+Example of an umbilical geodesic on a triaxial ellipsoid.  The
+starting point of this geodesic is \f$\beta_1 = 90^\circ\f$, \f$\omega_1 =
+0^\circ\f$, and \f$\alpha_1 = 45^\circ\f$ and the geodesics is followed
+forwards and backwards until it lies close to the plane \f$y = 0\f$ in
+both directions.
+
+Umbilical geodesic enjoy several interesting properties.
+ - Through any point on the ellipsoid, there are two umbilical geodesics.
+ - The geodesic distance between opposite umbilical points is the same
+   regardless of the initial direction of the geodesic.
+ - Whereas the closed geodesics on the ellipses \f$x = 0\f$ and \f$z =
+   0\f$ are stable (an geodesic initially close to and nearly parallel to
+   the ellipse remains close to the ellipse), the closed geodesic on the
+   ellipse \f$y = 0\f$, which goes through all 4 umbilical points, is \e
+   unstable.  If it is perturbed, it will swing out of the plane \f$y =
+   0\f$ and flip around before returning to close to the plane.  (This
+   behavior may repeat depending on the nature of the initial
+   perturbation.).
+
+\section triaxial-stab The stability of closed geodesics
+
+The stability of the three simple closed geodesics can be determined by
+examining the properties of Jacobi's solution.  In particular the
+unstable behavior of umbilical geodesics was shown by Hart (1849).
+However an alternative approach is to use the equations that Gauss
+(1828) gives for a perturbed geodesic
+\f[
+\frac {d^2m}{ds^2} + Km = 0
+\f]
+where \f$m\f$ is the distance of perturbed geodesic from a reference
+geodesic and \f$K\f$ is the Gaussian curvature of the surface.  If the
+reference geodesic is closed, then this is a linear homogeneous
+differential equation with periodic coefficients.  In fact it's a
+special case of Hill's equation which can be treated using Floquet
+theory, see <a href="http://dlmf.nist.gov/28.29">DLMF, §28.29</a>.
+Using the notation of §3 of
+<a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> Algorithms for
+geodesics</a>, the stability is determined by computing the reduced
+length \f$m_{12}\f$ and the geodesic scales \f$M_{12}, M_{21}\f$ over
+half the perimeter of the ellipse and determining the eigenvalues
+\f$\lambda_{1,2}\f$ of
+\f[
+{\cal M} = \left(\begin{array}{cc}
+M_{12} & m_{12}\\
+-\frac{1 - M_{12}M_{21}}{m_{12}} & M_{21}
+\end{array}\right).
+\f]
+Because \f$\mathrm{det}\,{\cal M} = 1\f$, the eigenvalues are determined
+by \f$\mathrm{tr}\,{\cal M}\f$.  In particular if
+\f$\left|\mathrm{tr}\,{\cal M}\right| < 2\f$, we have
+\f$\left|\lambda_{1,2}\right| = 1\f$ and the solution is stable; if
+\f$\left|\mathrm{tr}\,{\cal M}\right| > 2\f$, one of
+\f$\left|\lambda_{1,2}\right|\f$ is larger than unity and the solution
+is (exponentially) unstable.  In the transition case,
+\f$\left|\mathrm{tr}\,{\cal M}\right| = 2\f$, the solution is stable
+provided that the off-diagonal elements of \f${\cal M}\f$ are zero;
+otherwise the solution is linearly unstable.
+
+The exponential instability of the geodesic on the ellipse \f$y = 0\f$
+is confirmed by this analysis and results from the resonance between the
+natural frequency of the equation for \f$m\f$ and the driving frequency
+when \f$b\f$ lies in \f$(c, a)\f$.  If \f$b\f$ is equal to either of the
+other axes (and the triaxial ellipsoid degenerates to an ellipsoid of
+revolution), then the solution is linearly unstable.  (For example, a
+geodesic is which is close to a meridian on an oblate ellipsoid, slowly
+moves away from that meridian.)
+
+\section triaxial-inverse The inverse problem
+
+In order to solve the inverse geodesic problem, it helps to have an
+understanding of the properties of all the geodesics emanating from a
+single point \f$(\beta_1, \omega_1)\f$.
+ - If the point is an umbilical point, all the lines meet at the
+   opposite umbilical point.
+ - Otherwise, the first envelope of the geodesics is a 4-pointed
+   astroid.  The cusps of the astroid lie on either \f$\beta = -
+   \beta_1\f$ or \f$\omega = \omega_1 + \pi\f$; see
+   <a href="http://dx.doi.org/10.1080/10586458.2003.10504515"> Sinclair
+   (2003)</a>.
+ - All geodesics intersect (or, in the case of \f$\alpha_1 = 0\f$ or
+   \f$\pi\f$, touch) the line \f$\omega = \omega_1 + \pi\f$.
+ - All geodesics intersect (or, in the case of \f$\alpha_1 =
+   \pm\pi/2\f$, touch) the line \f$\beta = -\beta_1\f$.
+ - Two geodesics with azimuths \f$\pm\alpha_1\f$ first intersect on
+   \f$\omega = \omega_1 + \pi\f$ and their lengths to the point of
+   intersection are equal.
+ - Two geodesics with azimuths \f$\alpha_1\f$ and \f$\pi-\alpha_1\f$
+   first intersect on \f$\beta = -\beta_1\f$ and their lengths to the
+   point of intersection are equal.
+ .
+(These assertions follow directly from the equations for the geodesics;
+some of them are somewhat surprising given the asymmetries of the
+ellipsoid.)  Consider now terminating the geodesics from \f$(\beta_1,
+\omega_1)\f$ at the point where they first intersect (or touch) the line
+\f$\beta = -\beta_1\f$.  To focus the discussion, take \f$\beta_1 \le
+0\f$.
+ - The geodesics completely fill the portion of the ellipsoid satisfying
+   \f$\beta \le -\beta_1\f$.
+ - None of geodesics intersect any other geodesics.
+ - Any initial portion of these geodesics is a shortest path.
+ - Each geodesic intersects the line \f$\beta = \beta_2\f$, where
+   \f$\beta_1 < \beta_2 < -\beta_1\f$, exactly once.
+ - For a given \f$\beta_2\f$, this defines a continuous monotonic
+   mapping of the circle of azimuths \f$\alpha_1\f$ to the circle of
+   longitudes \f$\omega_2\f$.
+ - If \f$\beta_2 = \pm \beta_1\f$, then the previous two assertions need
+   to be modified similarly to the case for an ellipsoid of revolution.
+
+These properties show that the inverse problem can be solved using
+techniques similar to those employed for an ellipsoid of revolution (see
+§4 of
+<a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> Algorithms for
+geodesics</a>).
+ - If the points are opposite umbilical points, an arbitrary
+   \f$\alpha_1\f$ may be chosen.
+ - If the points are neighboring umbilical points, the shortest path
+   lies on the ellipse \f$y = 0\f$.
+ - If only one point is an umbilicial point, the azimuth at the
+   non-umbilical point is found using the generalization of Clairaut's
+   equation (given above) with \f$\gamma = 0\f$.
+ - If both points lie on the equator \f$\beta = 0\f$, then determine the
+   reduced length \f$m_{12}\f$ for the geodesic which is the shorter
+   path along the ellipse \f$z = 0\f$.  If \f$m_{12} \ge 0\f$, then this
+   is the shortest path on the ellipsoid; otherwise proceed to the
+   general case (next).
+ - Swap the points, if necessary, so that the first point is the one
+   closest to a pole.  Estimate \f$\alpha_1\f$ (by some means) and solve
+   the \e hybrid problem, i.e., determine the longitude \f$\omega_2\f$
+   corresponding to the first intersection of the geodesic with \f$\beta
+   = \beta_2\f$.  Adjust \f$\alpha_1\f$ so that the value of
+   \f$\omega_2\f$ matches the given \f$\omega_2\f$ (there is a single
+   root).  If a sufficiently close solution can be found, Newton's
+   method can be employed since the necessary derivative can be
+   expressed in terms of the reduced length \f$m_{12}\f$.
+
+The shortest path found by this method is unique unless:
+ - The length of the geodesic vanishes \f$s_{12}=0\f$, in which case any
+   constant can be added to the azimuths.
+ - The points are opposite umbilical points.  In this case,
+   \f$\alpha_1\f$ can take on any value and \f$\alpha_2\f$ needs to be
+   adjusted to maintain the value of \f$\tan\alpha_1 / \tan\alpha_2\f$.
+ - \f$\beta_1 + \beta_2 = 0\f$ and \f$\cos\alpha_1\f$ and
+   \f$\cos\alpha_2\f$ have opposite signs.  In this case, there another
+   shortest geodesic with azimuths \f$\pi - \alpha_1\f$ and
+   \f$\pi - \alpha_2\f$.
+
+<center>
+Back to \ref geodesic.  Forward to \ref transversemercator.  Up to
+\ref contents.
+</center>
+**********************************************************************/
+/**
+\page transversemercator Transverse Mercator projection
+
+<center>
+Back to \ref triaxial.  Forward to \ref geocentric.  Up to \ref contents.
+</center>
+
+GeographicLib::TransverseMercator and
+GeographicLib::TransverseMercatorExact provide accurate implementations
+of the transverse Mercator projection.  The
+ <a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a>
+utility provides an interface to these classes.
+
+Go to
+ - \ref testmerc
+ - \ref tmseries
+ - \ref tmfigures
+
+References
+ - L. Krüger,
+   <a href="http://dx.doi.org/10.2312/GFZ.b103-krueger28"> Konforme
+   Abbildung des Erdellipsoids in der Ebene</a> (Conformal mapping of
+   the ellipsoidal earth to the plane), Royal Prussian Geodetic Institute,
+   New Series 52, 172 pp. (1912).
+ - L. P. Lee,
+   Conformal Projections Based on Elliptic Functions,
+   (B. V. Gutsell, Toronto, 1976), 128pp.,
+   ISBN: 0919870163
+   (Also appeared as:
+   Monograph 16, Suppl. No. 1 to Canadian Cartographer, Vol 13).
+   Part V, pp. 67--101,
+   <a href="http://dx.doi.org/10.3138/X687-1574-4325-WM62">Conformal
+   Projections Based On Jacobian Elliptic Functions</a>.
+ - C. F. F. Karney,
+   <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
+   Transverse Mercator with an accuracy of a few nanometers,</a>
+   J. Geodesy 85(8), 475--485 (Aug. 2011);
+   preprint:
+   <a href="http://arxiv.org/abs/1002.1417"> arXiv:1002.1417</a>;
+   resource page:
+   <a href="http://geographiclib.sf.net/tm.html"> tm.html</a>.
+ .
+The algorithm for GeographicLib::TransverseMercator is based on
+Krüger (1912); that for GeographicLib::TransverseMercatorExact is
+based on Lee (1976).
+
+See <a href="http://geographiclib.sourceforge.net/tm-grid.kmz"
+type="application/vnd.google-earth.kmz"> tm-grid.kmz</a>, for an
+illustration of the exact transverse Mercator grid in Google Earth.
+
+\section testmerc Test data for the transverse Mercator projection
+
+A test set for the transverse Mercator projection is available at
+ - <a href="http://sf.net/projects/geographiclib/files/testdata/TMcoords.dat.gz">
+   TMcoords.dat.gz</a>
+ .
+This is about 17 MB (compressed).  This test set consists of a set of
+geographic coordinates together with the corresponding transverse
+Mercator coordinates.  The WGS84 ellipsoid is used, with central
+meridian 0°, central scale factor 0.9996 (the UTM value),
+false easting = false northing = 0 m.
+
+Each line of the test set gives 6 space delimited numbers
+ - latitude (degrees, exact)
+ - longitude (degrees, exact — see below)
+ - easting (meters, accurate to 0.1 pm)
+ - northing (meters, accurate to 0.1 pm)
+ - meridian convergence (degrees, accurate to 10<sup>−18</sup> deg)
+ - scale (accurate to 10<sup>−20</sup>)
+ .
+The latitude and longitude are all multiples of 10<sup>−12</sup>
+deg and should be regarded as exact, except that longitude =
+82.63627282416406551 should be interpreted as exactly 90 (1 - \e e)
+degrees.  These results are computed using Lee's formulas with
+<a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a>'s
+bfloats and fpprec set to 80 (so the errors in the data are probably 1/2
+of the values quoted above).  The Maxima code,
+<a href="tm.mac">tm.mac</a> and <a href="ellint.mac">ellint.mac</a>,
+was used to prepare this data set is included in the distribution; you
+will need to have Maxima installed to use this code.  The comments at
+the top of <a href="tm.mac">tm.mac</a> illustrate how to run it.
+
+The contents of the file are as follows:
+ - 250000 entries randomly distributed in lat in [0°, 90°], lon
+   in [0°, 90°];
+ - 1000 entries randomly distributed on lat in [0°, 90°], lon =
+   0°;
+ - 1000 entries randomly distributed on lat = 0°, lon in [0°,
+   90°];
+ - 1000 entries randomly distributed on lat in [0°, 90°], lon =
+   90°;
+ - 1000 entries close to lat = 90° with lon in [0°, 90°];
+ - 1000 entries close to lat = 0°, lon = 0° with lat ≥
+   0°, lon ≥ 0°;
+ - 1000 entries close to lat = 0°, lon = 90° with lat ≥
+   0°, lon ≤ 90°;
+ - 2000 entries close to lat = 0°, lon = 90° (1 − \e e)
+   with lat ≥ 0°;
+ - 25000 entries randomly distributed in lat in [−89°,
+   0°], lon in [90° (1 − \e e), 90°];
+ - 1000 entries randomly distributed on lat in [−89°, 0°],
+   lon = 90°;
+ - 1000 entries randomly distributed on lat in [−89°, 0°],
+   lon = 90° (1 − \e e);
+ - 1000 entries close to lat = 0°, lon = 90° (lat < 0°, lon
+   ≤ 90°);
+ - 1000 entries close to lat = 0°, lon = 90° (1 − \e e)
+   (lat < 0°, lon ≤ 90° (1 − \e e));
+ .
+(a total of 287000 entries).  The entries for lat < 0° and
+lon in [90° (1 − \e e), 90°] use the "extended"
+domain for the transverse Mercator projection explained in Sec. 5 of
+<a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.  The first
+258000 entries have lat ≥ 0° and are suitable for testing
+implementations following the standard convention.
+
+\section tmseries Series approximation for transverse Mercator
+
+Krüger (1912) gives a 4th-order approximation to the transverse
+Mercator projection.  This is accurate to about 200 nm (200
+nanometers) within the UTM domain.  Here we present the series
+extended to 10th order.  By default, GeographicLib::TransverseMercator
+uses the 6th-order approximation. The preprocessor macro
+GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER can be used to select an order
+from 4 thru 8.  The series expanded to order <i>n</i><sup>30</sup> are
+given in <a href="tmseries30.html"> tmseries30.html</a>.
+
+In the formulas below ^ indicates exponentiation (\e n^3 = \e n*\e n*\e
+n) and / indicates real division (3/5 = 0.6).  The equations need to be
+converted to Horner form, but are here left in expanded form so that
+they can be easily truncated to lower order in \e n.  Some of the
+integers here are not representable as 32-bit integers and will need to
+be included as double literals.
+
+\e A in Krüger, p. 12, eq. (5)
+\verbatim
+  A = a/(n + 1) * (1 + 1/4 * n^2
+                     + 1/64 * n^4
+                     + 1/256 * n^6
+                     + 25/16384 * n^8
+                     + 49/65536 * n^10);
+\endverbatim
+
+γ in Krüger, p. 21, eq. (41)
+\verbatim
+alpha[1] =   1/2 * n
+           - 2/3 * n^2
+           + 5/16 * n^3
+           + 41/180 * n^4
+           - 127/288 * n^5
+           + 7891/37800 * n^6
+           + 72161/387072 * n^7
+           - 18975107/50803200 * n^8
+           + 60193001/290304000 * n^9
+           + 134592031/1026432000 * n^10;
+alpha[2] =   13/48 * n^2
+           - 3/5 * n^3
+           + 557/1440 * n^4
+           + 281/630 * n^5
+           - 1983433/1935360 * n^6
+           + 13769/28800 * n^7
+           + 148003883/174182400 * n^8
+           - 705286231/465696000 * n^9
+           + 1703267974087/3218890752000 * n^10;
+alpha[3] =   61/240 * n^3
+           - 103/140 * n^4
+           + 15061/26880 * n^5
+           + 167603/181440 * n^6
+           - 67102379/29030400 * n^7
+           + 79682431/79833600 * n^8
+           + 6304945039/2128896000 * n^9
+           - 6601904925257/1307674368000 * n^10;
+alpha[4] =   49561/161280 * n^4
+           - 179/168 * n^5
+           + 6601661/7257600 * n^6
+           + 97445/49896 * n^7
+           - 40176129013/7664025600 * n^8
+           + 138471097/66528000 * n^9
+           + 48087451385201/5230697472000 * n^10;
+alpha[5] =   34729/80640 * n^5
+           - 3418889/1995840 * n^6
+           + 14644087/9123840 * n^7
+           + 2605413599/622702080 * n^8
+           - 31015475399/2583060480 * n^9
+           + 5820486440369/1307674368000 * n^10;
+alpha[6] =   212378941/319334400 * n^6
+           - 30705481/10378368 * n^7
+           + 175214326799/58118860800 * n^8
+           + 870492877/96096000 * n^9
+           - 1328004581729009/47823519744000 * n^10;
+alpha[7] =   1522256789/1383782400 * n^7
+           - 16759934899/3113510400 * n^8
+           + 1315149374443/221405184000 * n^9
+           + 71809987837451/3629463552000 * n^10;
+alpha[8] =   1424729850961/743921418240 * n^8
+           - 256783708069/25204608000 * n^9
+           + 2468749292989891/203249958912000 * n^10;
+alpha[9] =   21091646195357/6080126976000 * n^9
+           - 67196182138355857/3379030566912000 * n^10;
+alpha[10]=   77911515623232821/12014330904576000 * n^10;
+\endverbatim
+
+β in Krüger, p. 18, eq. (26*)
+\verbatim
+ beta[1] =   1/2 * n
+           - 2/3 * n^2
+           + 37/96 * n^3
+           - 1/360 * n^4
+           - 81/512 * n^5
+           + 96199/604800 * n^6
+           - 5406467/38707200 * n^7
+           + 7944359/67737600 * n^8
+           - 7378753979/97542144000 * n^9
+           + 25123531261/804722688000 * n^10;
+ beta[2] =   1/48 * n^2
+           + 1/15 * n^3
+           - 437/1440 * n^4
+           + 46/105 * n^5
+           - 1118711/3870720 * n^6
+           + 51841/1209600 * n^7
+           + 24749483/348364800 * n^8
+           - 115295683/1397088000 * n^9
+           + 5487737251099/51502252032000 * n^10;
+ beta[3] =   17/480 * n^3
+           - 37/840 * n^4
+           - 209/4480 * n^5
+           + 5569/90720 * n^6
+           + 9261899/58060800 * n^7
+           - 6457463/17740800 * n^8
+           + 2473691167/9289728000 * n^9
+           - 852549456029/20922789888000 * n^10;
+ beta[4] =   4397/161280 * n^4
+           - 11/504 * n^5
+           - 830251/7257600 * n^6
+           + 466511/2494800 * n^7
+           + 324154477/7664025600 * n^8
+           - 937932223/3891888000 * n^9
+           - 89112264211/5230697472000 * n^10;
+ beta[5] =   4583/161280 * n^5
+           - 108847/3991680 * n^6
+           - 8005831/63866880 * n^7
+           + 22894433/124540416 * n^8
+           + 112731569449/557941063680 * n^9
+           - 5391039814733/10461394944000 * n^10;
+ beta[6] =   20648693/638668800 * n^6
+           - 16363163/518918400 * n^7
+           - 2204645983/12915302400 * n^8
+           + 4543317553/18162144000 * n^9
+           + 54894890298749/167382319104000 * n^10;
+ beta[7] =   219941297/5535129600 * n^7
+           - 497323811/12454041600 * n^8
+           - 79431132943/332107776000 * n^9
+           + 4346429528407/12703122432000 * n^10;
+ beta[8] =   191773887257/3719607091200 * n^8
+           - 17822319343/336825216000 * n^9
+           - 497155444501631/1422749712384000 * n^10;
+ beta[9] =   11025641854267/158083301376000 * n^9
+           - 492293158444691/6758061133824000 * n^10;
+ beta[10]=   7028504530429621/72085985427456000 * n^10;
+\endverbatim
+
+The high-order expansions for α and β were produced by the
+Maxima program <a href="tmseries.mac"> tmseries.mac</a> (included in the
+distribution).  To run, start Maxima and enter
+\verbatim
+  load("tmseries.mac")$
+\endverbatim
+Further instructions are included at the top of the file.
+
+\section tmfigures Figures from paper on transverse Mercator projection
+
+This section gives color versions of the figures in
+ - C. F. F. Karney,
+   <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
+   Transverse Mercator with an accuracy of a few nanometers,</a>
+   J. Geodesy 85(8), 475--485 (Aug. 2011);
+   preprint:
+   <a href="http://arxiv.org/abs/1002.1417"> arXiv:1002.1417</a>;
+   resource page:
+   <a href="http://geographiclib.sf.net/tm.html"> tm.html</a>.
+
+\b NOTE:
+The numbering of the figures matches that in the paper cited above.  The
+figures in this section are relatively small in order to allow them to
+be displayed quickly.  Vector versions of these figures are available in
+<a href="http://geographiclib.sourceforge.net/tm-figs.pdf"
+type="application/pdf"> tm-figs.pdf</a>.  This allows you to magnify the
+figures to show the details more clearly.
+
+\image html gauss-schreiber-graticule-a.png "Fig. 1(a)"
+Fig. 1(a):
+The graticule for the spherical transverse Mercator projection.
+The equator lies on \e y = 0.
+Compare this with Lee, Fig. 1 (right), which shows the graticule for
+half a sphere, but note that in his notation \e x and \e y have switched
+meanings.  The graticule for the ellipsoid differs from that for a
+sphere only in that the latitude lines have shifted slightly.  (The
+conformal transformation from an ellipsoid to a sphere merely relabels
+the lines of latitude.)  This projection places the point latitude =
+0°, longitude = 90° at infinity.
+
+\image html gauss-krueger-graticule-a.png "Fig. 1(b)"
+Fig. 1(b):
+The graticule for the Gauss-Krüger transverse Mercator projection.
+The equator lies on \e y = 0 for longitude < 81°; beyond
+this, it arcs up to meet \e y = 1.  Compare this with Lee, Fig. 45
+(upper), which shows the graticule for the International Ellipsoid.  Lee,
+Fig. 46, shows the graticule for the entire ellipsoid.  This projection
+(like the Thompson projection) projects the ellipsoid to a finite area.
+
+\image html thompson-tm-graticule-a.png "Fig. 1(c)"
+Fig. 1(c):
+The graticule for the Thompson transverse Mercator projection.  The
+equator lies on \e y = 0 for longitude < 81°; at longitude =
+81°, it turns by 120° and heads for \e y = 1.
+Compare this with Lee, Fig. 43, which shows the graticule for the
+International Ellipsoid.  Lee, Fig. 44, shows the graticule for the
+entire ellipsoid.  This projection (like the Gauss-Krüger
+projection) projects the ellipsoid to a finite area.
+
+\image html gauss-krueger-error.png "Fig. 2"
+Fig. 2:
+The truncation error for the series for the Gauss-Krüger transverse
+Mercator projection.  The blue curves show the truncation error for the
+order of the series \e J = 2 (top) thru \e J = 12 (bottom).  The red
+curves show the combined truncation and round-off errors for
+ - float and \e J = 4 (top)
+ - double and \e J = 6 (middle)
+ - long double and \e J = 8 (bottom)
+
+\image html gauss-krueger-graticule.png "Fig. 3(a)"
+Fig. 3(a):
+The graticule for the extended domain.  The blue lines show
+latitude and longitude at multiples of 10°.  The green lines
+show 1° intervals for longitude in [80°, 90°] and latitude in
+[−5°, 10°].
+
+\image html gauss-krueger-convergence-scale.png "Fig. 3(b)"
+Fig. 3(b):
+The convergence and scale for the Gauss-Krüger
+transverse Mercator projection in the extended domain.  The blue lines
+emanating from the top left corner (the north pole) are lines of
+constant convergence.  Convergence = 0° is given by the
+dog-legged line joining the points (0,1), (0,0), (1.71,0),
+(1.71,−∞).
+Convergence = 90° is given by the line y = 1.  The other
+lines show multiples of 10° between 0° and
+90°.  The other blue, the green and the black lines show
+scale = 1 thru 2 at intervals of 0.1, 2 thru 15 at intervals of 1, and
+15 thru 35 at intervals of 5.  Multiples of 5 are shown in black,
+multiples of 1 are shown in blue, and the rest are shown in green.
+Scale = 1 is given by the line segment (0,0) to (0,1).  The red line
+shows the equator between lon = 81° and 90°.  The
+scale and convergence at the branch point are 1/\e e = 10 and
+0°, respectively.
+
+\image html thompson-tm-graticule.png "Fig. 3(c)"
+Fig. 3(c):
+The graticule for the Thompson transverse Mercator
+projection for the extended domain.  The range of the projection is the
+rectangular region shown
+ - 0 ≤ \e u ≤ K(<i>e</i><sup>2</sup>),
+   0 ≤ \e v ≤ K(1 − <i>e</i><sup>2</sup>)
+ .
+The coloring of the lines is the same as Fig. 3(a), except that latitude
+lines extended down to −10° and a red line has been added
+showing the line \e y = 0 for \e x > 1.71 in the Gauss-Krüger
+projection (Fig. 3(a)).  The extended Thompson projection figure has
+reflection symmetry on all the four sides of Fig. 3(c).
+
+<center>
+Back to \ref triaxial.  Forward to \ref geocentric.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page geocentric Geocentric coordinates
+
+<center>
+Back to \ref transversemercator.  Forward to \ref old.  Up to \ref contents.
+</center>
+
+The implementation of GeographicLib::Geocentric::Reverse is adapted from
+ - H. Vermeille,
+   <a href="http://dx.doi.org/10.1007/s00190-002-0273-6">
+   Direct transformation from geocentric coordinates to geodetic
+   coordinates</a>, J. Geodesy 76, 451--454 (2002).
+
+This provides a closed-form solution but can't directly be applied close to
+the center of the earth.  Several changes have been made to remove this
+restriction and to improve the numerical accuracy.  Now the method is
+accurate for all inputs (even if \e h is infinite).  The changes are
+described in Appendix B of
+ - C. F. F. Karney,
+   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
+   on an ellipsoid of revolution</a>,
+   Feb. 2011; preprint
+   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.
+
+The problems encountered near the center of the ellipsoid are:
+ - There's a potential division by zero in the definition of \e s. The
+   equations are easily reformulated to avoid this problem.
+ - <i>t</i><sup>3</sup> may be negative.  This is OK; we just take the
+   real root.
+ - The solution for \e t may be complex.  However this leads to 3 real roots
+   for <i>u</i>/\e r.  It's then just a matter of picking the one that computes
+   the geodetic result which minimizes |\e h| and which avoids large
+   round-off errors.
+ - Some of the equations result in a large loss of accuracy due to
+   subtracting nearly equal quantities.  E.g., \e k= sqrt(\e u + \e v +
+   <i>w</i><sup>2</sup>) − \e w is inaccurate if \e u + \e v is small;
+   we can fix this by writing \e k = (\e u + \e v)/(sqrt(\e u + \e v +
+   <i>w</i><sup>2</sup>) + \e w).
+
+The error is computed as follows.  Write a version of
+Geocentric::WGS84.Forward which uses long doubles (including using long
+doubles for the WGS84 parameters).  Generate random (long double)
+geodetic coordinates (\e lat0, \e lon0, \e h0) and use the "long double"
+WGS84.Forward to obtain the corresponding (long double) geocentric
+coordinates (\e x0, \e y0, \e z0).  [We restrict \e h0 so that
+\e h0 ≥ − \e a (1 − <i>e</i><sup>2</sup>) / sqrt(1 −
+<i>e</i><sup>2</sup> sin<sup>2</sup>\e lat0), which ensures that (\e
+lat0, \e lon0, \e h0) is the principal geodetic inverse of (\e x0, \e
+y0, \e z0).]  Because the forward calculation is numerically stable and
+because long doubles (on Linux systems using g++) provide 11 bits
+additional accuracy (about 3.3 decimal digits), we regard this set of
+test data as exact.
+
+Apply the double version of WGS84.Reverse to (\e x0, \e y0, \e z0) to
+compute the approximate geodetic coordinates (\e lat1, \e lon1, \e h1).
+Convert (\e lat1 − \e lat0, \e lon1 − \e lon0) to a
+distance, \e ds, on the surface of the ellipsoid and define \e err =
+hypot(\e ds, \e h1 − \e h0).  For |\e h0| < 5000 km, we have \e
+err < 7 nm (7 nanometers).
+
+This methodology is not very useful very far from the globe, because the
+absolute errors in the approximate geodetic height become large, or
+within 50 km of the center of the earth, because of errors in computing
+the approximate geodetic latitude.  To illustrate the second issue, the
+maximum value of \e err for \e h0 < 0 is about 80 mm.  The error is
+maximum close to the circle given by geocentric coordinates satisfying
+hypot(\e x, \e y) = \e a <i>e</i><sup>2</sup> (= 42.7 km), \e z = 0.
+(This is the center of meridional curvature for \e lat = 0.)  The
+geodetic latitude for these points is \e lat = 0.  However, if we move 1
+nm towards the center of the earth, the geodetic latitude becomes 0.04",
+a distance of 1.4 m from the equator.  If, instead, we move 1 nm up, the
+geodetic latitude becomes 7.45", a distance of 229 m from the equator.
+In light of this, Reverse does quite well in this vicinity.
+
+To obtain a practical measure of the error for the general case we define
+- <i>err</i><sub>h</sub> = |\e h1 − \e h0| / max(1, \e h0 / \e a)
+- for \e h0 > 0, <i>err</i><sub>out</sub> = \e ds
+- for \e h0 < 0, apply the long double version of WGS84.Forward to (\e
+  lat1, \e lon1, \e h1) to give (\e x1, \e y1, \e z1) and compute
+  <i>err</i><sub>in</sub> = hypot(\e x1 − \e x0, \e y1 − \e
+  y0, \e z1 − \e z0).
+.
+We then find <i>err</i><sub>h</sub> < 8 nm, <i>err</i><sub>out</sub> < 4 nm,
+and <i>err</i><sub>in</sub> < 7 nm.  (1 nm = 1 nanometer.)
+
+The testing has been confined to the WGS84 ellipsoid.  The method will work
+for all ellipsoids used in terrestrial geodesy.  However, the central region,
+which leads to multiple real roots for the cubic equation in Reverse, pokes
+outside the ellipsoid (at the poles) for ellipsoids with \e e > 1/sqrt(2).
+Reverse has not been analyzed for this case.  Similarly ellipsoids which are
+very nearly spherical near yield inaccurate results due to underflow; in the
+other hand, the case of the sphere, \e f = 0, is treated specially and gives
+accurate results.
+
+Other comparable methods are K. M. Borkowski,
+<a href="http://dx.doi.org/10.1007/BF00643807"> Transformation
+of geocentric to geodetic coordinates without approximations</a>,
+Astrophys. Space Sci. 139, 1--4 (1987)
+(<a href="http://dx.doi.org/10.1007/BF00656995"> erratum</a>)
+and T. Fukushima,
+<a href="http://dx.doi.org/10.1007/s001900050271"> Fast transform from
+geocentric to geodetic coordinates</a>, J. Geodesy 73, 603--610 (1999).
+However the choice of independent variables in these methods leads
+to a loss of accuracy for points near the equatorial plane.
+
+<center>
+Back to \ref transversemercator.  Forward to \ref old.  Up to \ref contents.
+
+</center>
+**********************************************************************/
+/**
+\page old Old versions
+
+<center>
+Back to \ref geocentric.  Up to \ref contents.
+</center>
+
+List of versions in reverse chronological order together with a brief
+list of changes.  (Note: Old versions of the library use a year-month
+style of numbering.  Now, the library uses a major and minor version
+number.)  Recent versions of %GeographicLib are available at
+<a href="http://sf.net/projects/geographiclib/files/distrib/">
+http://sourceforge.net/projects/geographiclib/files/distrib/</a>.
+Older versions are in
+<a href="http://sf.net/projects/geographiclib/files/distrib/archive/">
+http://sourceforge.net/projects/geographiclib/files/distrib/archive/</a>.
+
+The corresponding documentation for these versions is obtained by
+clicking on the “Version <i>m.nn</i>” links below.  Some of
+the links in the documentaion of older versions may be out of date (in
+particular the links for the source code will not work if the code has
+been migrated to the archive subdirectory).  All the releases are
+available as tags “r<i>m.nn</i>” in the the "release" branch
+of the git repository for %GeographicLib.
+
+ - <a href="http://geographiclib.sf.net/1.34">Version 1.34</a>
+   (released 2013-12-11)
+   - Many changes in cmake support:
+     - minimum version of cmake needed increased to 2.8.4 (which was
+       released in 2011-02);
+     - allow building both shared and static librarys with <code>-D
+       GEOGRAPHICLIB_LIB_TYPE=BOTH</code>;
+     - both shared and static libraries (Release plus Debug) included in
+       binary installer;
+     - find_package uses COMPONENTS and GeographicLib_USE_STATIC_LIBS to
+       select the library to use;
+     - find_package version checking allows nmake and Visual Studio
+       generators to interoperate on Windows;
+     - find_package (%GeographicLib ...) requires that %GeographicLib be
+       capitalized correctly;
+     - on Unix/Linux, don't include the version number in directory for
+       the cmake configuration files;
+     - defaults for GEOGRAPHICLIB_DOCUMENTATION and
+       BUILD_NETGEOGRAPHICLIB are now OFF;
+     - the GEOGRAPHICLIB_EXAMPLES configuration parameter is no longer
+       used; cmake always configures to build the examples, but they are
+       not built by default (instead build targets: exampleprograms and
+       netexamples);
+     - matlab-all target renamed to matlabinterface;
+     - the configuration parameters PACKAGE_PATH and INSTALL_PATH are
+       now deprecated (use CMAKE_INSTALL_PREFIX instead);
+     - on Linux, the installed package is relocatable;
+     - on MacOSX, the installed utilities can find the shared library.
+   - Use a more precise value for GeographicLib::OSGB::CentralScale().
+   - Add Arc routines to python interface.
+   - The Geod utility has been removed; the same functionality lives on
+     with <a href="GeodSolve.1.html">GeodSolve</a> (introduced in
+     version 1.30).
+
+ - <a href="http://geographiclib.sf.net/1.33">Version 1.33</a>
+   (released 2013-10-08)
+   - Add <a href="NET/index.html">NETGeographic .NET wrapper library</a>
+     (courtesy of Scott Heiman).
+   - Make inspector functions in GeographicLib::Ellipsoid const.
+   - Add Accumulator.cpp to instantiate GeographicLib::Accumulator.
+   - Defer some of the initialization of GeographicLib::OSGB to when it
+     is first called.
+   - Fix bug in autoconf builds under MacOS.
+
+ - <a href="http://geographiclib.sf.net/1.32">Version 1.32</a>
+   (released 2013-07-12)
+   - Generalize C interface for polygon areas to allow vertices to be
+     specified incrementally.
+   - Fix way flags for C++11 support are determined.
+
+ - <a href="http://geographiclib.sf.net/1.31">Version 1.31</a>
+   (released 2013-07-01)
+   - Changes breaking binary compatibility (source compatibility is
+     maintained):
+     - overloaded versions of GeographicLib::DMS::Encode,
+       GeographicLib::EllipticFunction::EllipticFunction, and
+       GeographicLib::GeoCoords::DMSRepresentation, have been eliminated
+       by the use of optional arguments;
+     - correct the declaration of first arg to
+       GeographicLib::UTMUPS::DecodeEPSG.
+   - FIX BUG in GeographicLib::GravityCircle constructor (found by
+     Mathieu Peyréga) which caused bogus results for the gravity
+     disturbance and gravity anomaly vectors.  (This only affected
+     calculations using GravityCircle.  GravityModel calculations did
+     not suffer from this bug.)
+   - Improvements to the build:
+     - add macros GEOGRAPHICLIB_VERSION_{MAJOR,MINOR,PATCH} to Config.h;
+     - fix documentation for new version of perlpod;
+     - improving setting of runtime path for Unix-like systems with cmake;
+     - install PDB files when compiling with Visual Studio to aid
+       debugging;
+     - Windows binary release now uses Matlab R2013a (64-bit) and
+       uses the -largeArrayDims option.
+     - fixes to the way the Matlab interface routines are built (thanks
+       to Phil Miller and Chris F.).
+   - Changes to the geodesic routines:
+     - add \ref java of the geodesic routines (thanks to Skip Breidbach
+       for the maven support);
+     - FIX BUG: avoid altering input args in Fortran implementation;
+     - more systematic treatment of very short geodesic;
+     - fixes to python port so that they work with version 3.x, in
+       addition to 2.x (courtesy of Amato);
+     - accumulate the perimeter and area of polygons via a double-wide
+       accumulator in Fortran, C, and Matlab implementations (this is
+       already included in the other implementations);
+     - port GeographicLib::PolygonArea::AddEdge and
+       GeographicLib::PolygonArea::TestEdge to JavaScript and python
+       interfaces;
+     - include documentation on \ref geodshort.
+   - Unix scripts for downloading datasets,
+     geographiclib-get-{geoids,gravity,magnetic}, skip already download
+     models by default, unless the -f flag is given.
+   - FIX BUGS: meridian convergence and scale returned by
+     GeographicLib::TransverseMercatorExact was wrong at a pole.
+   - Improve efficiency of GeographicLib::MGRS::Forward by avoiding the
+     calculation of the latitude if possible (adapting an idea of Craig
+     Rollins).
+   - Fixes to the way the Matlab interface routines are built (thanks to
+     Phil Miller and Chris F.).
+
+ - <a href="http://geographiclib.sf.net/1.30">Version 1.30</a>
+   (released 2013-02-27)
+   - Changes to geodesic routines:
+     - FIX BUG in fail-safe mechanisms in GeographicLib::Geodesic::Inverse;
+     - the command line utility Geod is now called
+       <a href="GeodSolve.1.html">GeodSolve</a>;
+     - allow addition of polygon edges in GeographicLib::PolygonArea;
+     - add full Maxima implementation of geodesic algorithms.
+
+ - <a href="http://geographiclib.sf.net/1.29">Version 1.29</a>
+   (released 2013-01-16)
+   - Changes to allow compilation with libc++ (courtesy of Kal Conley).
+   - Add description of \ref triaxial to documentation.
+   - Update journal reference for "Algorithms for geodesics".
+
+ - <a href="http://geographiclib.sf.net/1.28">Version 1.28</a>
+   (released 2012-12-11)
+   - Changes to geodesic routines:
+     - compute longitude difference exactly;
+     - hence FIX BUG in area calculations for polygons with vertices very
+       close to the prime meridian;
+     - FIX BUG is geoddistance.m where the value of m12 was wrong for
+       meridional geodesics;
+     - add Matlab implementations of the geodesic projections;
+     - remove unneeded special code for geodesics which start at a pole;
+     - include polygon area routine in C and Fortran implementations;
+     - add doxygen documentation for C and Fortran libraries.
+
+ - <a href="http://geographiclib.sf.net/1.27">Version 1.27</a>
+   (released 2012-11-29)
+   - Changes to geodesic routines:
+     - add native Matlab implementations: geoddistance.m, geodreckon.m,
+       geodarea.m;
+     - add C and Fortran implementations;
+     - improve the solution of the direct problem so that the series
+       solution is accurate to round off for |<i>f</i>| < 1/50;
+     - tighten up the convergence criteria for solution of the inverse
+       problem;
+     - no longer signal failures of convergence with NaNs (a slightly
+       less accurate answer is returned instead).
+   - Fix GeographicLib::DMS::Decode double rounding BUG.
+   - On MacOSX platforms with the cmake configuration, universal
+     binaries are built.
+
+ - <a href="http://geographiclib.sf.net/1.26">Version 1.26</a>
+   (released 2012-10-22)
+   - Replace the series used for geodesic areas by one with better
+     convergence (this only makes an appreciable difference if
+     |<i>f</i>| > 1/150).
+
+ - <a href="http://geographiclib.sf.net/1.25">Version 1.25</a>
+   (released 2012-10-16)
+   - Changes to geodesic calculations:
+     - restart Newton's method in Geodesic::Inverse when it goes awry;
+     - back up Newton's method with the bisection method;
+     - GeographicLib::Geodesic::Inverse now converges for any value of \e f;
+     - add GeographicLib::GeodesicExact and
+       GeographicLib::GeodesicLineExact which are formulated in terms
+       of elliptic integrals and thus yield accurate results even for
+       very eccentric ellipsoids.
+     - the -E option to <a href="GeodSolve.1.html">Geod</a> invokes these
+       exact classes.
+   - Add functionality to GeographicLib::EllipticFunction:
+     - add all the traditional elliptic integrals;
+     - remove restrictions on argument range for incomplete elliptic integrals;
+     - allow imaginary modulus for elliptic integrals and elliptic functions;
+     - make interface to the symmetric elliptic integrals public.
+   - Allow GeographicLib::Ellipsoid to be copied.
+   - Changes to the build tools:
+     - cmake uses folders in Visual Studio to reduce clutter;
+     - allow precision of reals to be set in cmake;
+     - fail gracefully in the absence of pod documentation tools;
+     - remove support for maintainer tasks in Makefile.mk.
+
+ - <a href="http://geographiclib.sf.net/1.24">Version 1.24</a>
+   (released 2012-09-22)
+   - Allow the specification of the hemisphere in UTM coordinates in
+     order to provide continuity across the equator:
+     - add GeographicLib::UTMUPS::Transfer;
+     - add GeographicLib::GeoCoords::UTMUPSRepresentation(bool, int) and
+       GeographicLib::GeoCoords::AltUTMUPSRepresentation(bool, int);
+     - use the hemisphere letter in, e.g.,
+       <a href="GeoConvert.1.html">GeoConvert</a> -u -z 31N.
+   - Add GeographicLib::UTMUPS::DecodeEPSG and
+     GeographicLib::UTMUPS::EncodeEPSG.
+   - cmake changes:
+     - restore support for cmake 2.4.x;
+     - explicitly check version of doxygen.
+   - Fix building under cygwin.
+   - Document restrictions on \e f in \ref intro.
+   - Fix python interface to work with version 2.6.x.
+
+ - <a href="http://geographiclib.sf.net/1.23">Version 1.23</a>
+   (released 2012-07-17)
+  - Documentation changes:
+    - remove html documentation from distribution and use web links if
+      doxygen is not available;
+    - use doxygen tags to document exceptions;
+    - begin migrating the documentation to using Greek letters where
+      appropriate (requires doxygen 1.8.1.2 or later).
+  - Add GeographicLib::Math::AngNormalize and
+    GeographicLib::Math::AngNormalize2; the allowed range for longitudes
+    and azimuths widened to [−540°, 540°).
+  - GeographicLib::DMS::Decode understands more unicode symbols.
+  - GeographicLib::Geohash uses geohash code "nan" to stand for not a
+    number.
+  - Add GeographicLib::Ellipsoid::NormalCurvatureRadius.
+  - Various fixes in GeographicLib::LambertConformalConic,
+    GeographicLib::TransverseMercator,
+    GeographicLib::PolarStereographic, and GeographicLib::Ellipsoid to
+    handle reverse projections of points near infinity.
+  - Fix programming blunder in GeographicLib::LambertConformalConic::Forward
+    (incorrect results were returned if the tangent latitude was
+    negative).
+
+ - <a href="http://geographiclib.sf.net/1.22">Version 1.22</a>
+   (released 2012-05-27)
+  - Add GeographicLib::Geohash and GeographicLib::Ellipsoid classes.
+  - FIX BUG in GeographicLib::AlbersEqualArea for very prolate
+    ellipsoids (<i>b</i><sup>2</sup> > 2 <i>a</i><sup>2</sup>).
+  - cmake changes:
+    - optionally use PACKAGE_PATH and INSTALL_PATH to determine
+      CMAKE_INSTALL_PREFIX;
+    - use COMMON_INSTALL_PATH to determine layout of installation
+      directories;
+    - as a consequence, the installation paths for the documentation,
+      and python and matlab interfaces are shortened for Windows;
+    - zip source distribution now uses DOS line endings;
+    - the tests work in debug mode for Windows;
+    - default setting of GEOGRAPHICLIB_DATA does not depend on
+      CMAKE_INSTALL_PREFIX;
+    - add a cmake configuration for build tree.
+
+ - <a href="http://geographiclib.sf.net/1.21">Version 1.21</a>
+   (released 2012-04-25)
+  - Support colon-separated DMS output:
+    - GeographicLib::DMS::Encode and
+      GeographicLib::GeoCoords::DMSRepresentation generalized;
+    - <a href="GeoConvert.1.html">GeoConvert</a> and
+      <a href="GeodSolve.1.html">Geod</a> now accept a -: option.
+  - <a href="GeoidEval.1.html">GeoidEval</a> does not print the gradient
+    of the geoid height by default (because it's subject to large
+    errors); give the -g option to get the gradient printed.
+  - Work around optimization BUG in GeographicLib::Geodesic::Inverse
+    with tdm mingw g++ version 4.6.1.
+  - autoconf fixed to ensure that that out-of-sources builds work;
+    document this as the preferred method of using autoconf.
+  - cmake tweaks:
+    - simplify the configuration of doxygen;
+    - allow the Matlab compiler to be specified with the
+      MATLAB_COMPILER option.
+
+ - <a href="http://geographiclib.sf.net/1.20">Version 1.20</a>
+   (released 2012-03-23)
+  - cmake tweaks:
+    - improve find_package's matching of compiler versions;
+    - CMAKE_INSTALL_PREFIX set from CMAKE_PREFIX_PATH if available;
+    - add "x64" to the package name for the 64-bit binary installer;
+    - fix cmake warning with Visual Studio Express.
+  - Fix GeographicLib::SphericalEngine to deal with aggessive iterator
+    checking by Visual Studio.
+  - Fix transcription BUG is Geodesic.js.
+
+ - <a href="http://geographiclib.sf.net/1.19">Version 1.19</a>
+   (released 2012-03-13)
+  - Slight improvement in GeographicLib::Geodesic::Inverse for very
+    short lines.
+  - Fix argument checking tests in GeographicLib::MGRS::Forward.
+  - Add --comment-delimiter and --line-separator options to the \ref
+    utilities.
+  - Add installer for 64-bit Windows; the compiled Matlab interface is
+    supplied with the Windows 64-bit installer only.
+
+ - <a href="http://geographiclib.sf.net/1.18">Version 1.18</a>
+   (released 2012-02-18)
+  - Improve documentation on configuration with cmake.
+  - cmake's find_package ensures that the compiler versions match on Windows.
+  - Improve documentation on compiling Matlab interface.
+  - Binary installer for Windows installs under C:/pkg-vc10 by default.
+
+ - <a href="http://geographiclib.sf.net/1.17">Version 1.17</a>
+   (released 2012-01-21)
+  - Work around optimization BUG in GeographicLib::Geodesic::Inverse
+    with g++ version 4.4.0 (mingw).
+  - Fix BUG in argument checking with GeographicLib::OSGB::GridReference.
+  - Fix missing include file in GeographicLib::SphericalHarmonic2.
+  - Add simple examples of usage for each class.
+  - Add internal documentation to the cmake configuration files.
+
+ - <a href="http://geographiclib.sf.net/1.16">Version 1.16</a>
+   (released 2011-12-07)
+  - Add calculation of the earth's gravitational field:
+    - add GeographicLib::NormalGravity GeographicLib::GravityModel and
+      GeographicLib::GravityCircle classes;
+    - add command line utility
+      <a href="Gravity.1.html">Gravity</a>;
+    - add \ref gravity;
+    - add GeographicLib::Constants::WGS84_GM(),
+      GeographicLib::Constants::WGS84_omega(), and similarly for GRS80.
+  - Build uses GEOGRAPHICLIB_DATA to specify a common parent directory
+     for geoid, gravity, and magnetic data (instead of
+     GEOGRAPHICLIB_GEOID_PATH, etc.); similarly,
+     <a href="GeoidEval.1.html">GeoidEval</a>,
+     <a href="Gravity.1.html">Gravity</a>, and
+     <a href="MagneticField.1.html">MagneticField</a>, look at the
+     environment variable GEOGRAPHICLIB_DATA to locate the data.
+  - Spherical harmonic software changes:
+    - capitalize enums GeographicLib::SphericalHarmonic::FULL and
+      GeographicLib::SphericalHarmonic::SCHMIDT (the lower case names
+      are retained but deprecated);
+    - optimize the sum by using a static table of square roots which is
+      updated by GeographicLib::SphericalEngine::RootTable;
+    - avoid overflow for high degree models.
+  - Magnetic software fixes:
+    - fix documentation BUG in GeographicLib::MagneticModel::Circle;
+    - make GeographicLib::MagneticModel constructor explicit;
+    - provide default GeographicLib::MagneticCircle constructor;
+    - add additional inspector functions to
+      GeographicLib::MagneticCircle;
+    - add -c option to <a href="MagneticField.1.html">MagneticField</a>;
+    - default height to zero in
+      <a href="MagneticField.1.html">MagneticField</a>.
+
+ - <a href="http://geographiclib.sf.net/1.15">Version 1.15</a>
+   (released 2011-11-08)
+  - Add calculation of the earth's magnetic field:
+    - add GeographicLib::MagneticModel and GeographicLib::MagneticCircle
+      classes;
+    - add command line utility
+      <a href="MagneticField.1.html">MagneticField</a>;
+    - add \ref magnetic;
+    - add \ref magneticinst;
+    - add \ref magneticformat;
+    - add classes GeographicLib::SphericalEngine,
+      GeographicLib::CircularEngine, GeographicLib::SphericalHarmonic,
+      GeographicLib::SphericalHarmonic1, and
+      GeographicLib::SphericalHarmonic2. which sum spherical harmonic
+      series.
+  - Add GeographicLib::Utility class to support I/O and date
+    manipulation.
+  - Cmake configuration includes a _d suffix on the library built in
+    debug mode.
+  - For the Python package, include manifest and readme files; don't
+    install setup.py for non-Windows systems.
+  - Include Doxygen tag file in distribution as doc/html/Geographic.tag.
+
+ - <a href="http://geographiclib.sf.net/1.14">Version 1.14</a>
+   (released 2011-09-30)
+  - Ensure that geographiclib-config.cmake is relocatable.
+  - Allow more unicode symbols to be used in GeographicLib::DMS::Decode.
+  - Modify <a href="GeoidEval.1.html">GeoidEval</a> so that it can be
+    used to convert the height datum for LIDAR data.
+  - Modest speed-up of Geodesic::Inverse.
+  - Changes in python interface:
+    - FIX BUG in transcription of Geodesic::Inverse;
+    - include setup.py for easy installation;
+    - python only distribution is available at
+      http://pypi.python.org/pypi/geographiclib
+  - Supply a minimal Qt qmake project file for library
+    src/Geographic.pro.
+
+ - <a href="http://geographiclib.sf.net/1.13">Version 1.13</a>
+   (released 2011-08-13)
+  - Changes to I/O:
+    - allow : (colon) to be used as a DMS separator in
+      GeographicLib::DMS::Decode(const std::string&, flag&);
+    - also accept Unicode symbols for degrees, minutes, and seconds
+      (coded as UTF-8);
+    - provide optional \e swaplatlong argument to various
+      GeographicLib::DMS and GeographicLib::GeoCoords functions to make
+      longitude precede latitude;
+    - <a href="GeoConvert.1.html">GeoConvert</a> now has a -w option to
+      make longitude precede latitude on input and output;
+    - include a JavaScript version of GeographicLib::DMS.
+  - Slight improvement in starting guess for solution of geographic
+    latitude in terms of conformal latitude in TransverseMercator,
+    TransverseMercatorExact, and LambertConformalConic.
+  - For most classes, get rid of const member variables so that the
+    default copy assignment works.
+  - Put GeographicLib::Math and GeographicLib::Accumulator in their own
+    header files.
+  - Remove unused "fast" GeographicLib::Accumulator method.
+  - Reorganize the \ref python.
+  - Withdraw some deprecated routines.
+  - cmake changes:
+    - include FindGeographic.cmake in distribution;
+    - building with cmake creates and installs
+      geographiclib-config.cmake;
+    - better support for building a shared library under Windows.
+
+ - <a href="http://geographiclib.sf.net/1.12">Version 1.12</a>
+   (released 2011-07-21)
+  - Change license to MIT/X11.
+  - Add GeographicLib::PolygonArea class and equivalent Matlab function.
+  - Provide JavaScript and Python implementations of geodesic routines.
+  - Fix Windows installer to include runtime dlls for Matlab.
+  - Fix (innocuous) unassigned variable in Geodesic::GenInverse.
+  - Geodesic routines in Matlab return a12 as first column of aux return
+    value (incompatible change).
+  - A couple of code changes to enable compilation with Visual
+    Studio 2003.
+
+ - <a href="http://geographiclib.sf.net/1.11">Version 1.11</a>
+   (released 2011-06-27)
+  - Changes to <a href="Planimeter.1.html">Planimeter</a>:
+    - add -l flag to <a href="Planimeter.1.html">Planimeter</a> for polyline
+      calculations;
+    - trim precision of area to 3 decimal places;
+    - FIX BUG with pole crossing edges (due to compiler optimization).
+  - <a href="GeodSolve.1.html">Geod</a> no longer reports the reduced
+    length by default; however the -f flag still reports this and in
+    addition gives the geodesic scales and the geodesic area.
+  - FIX BUGS (compiler-specific) in inverse geodesic calculations.
+  - FIX BUG: accommodate tellg() returning −1 at end of string.
+  - Change way flattening of the ellipsoid is specified:
+    - constructors take \e f argument which is taken to be the
+      flattening if \e f < 1 and the inverse flattening otherwise
+      (this is a compatible change for spheres and oblate ellipsoids, but it
+      is an INCOMPATIBLE change for prolate ellipsoids);
+    - the -e arguments to the \ref utilities are handled similarly; in
+      addition, simple fractions, e.g., 1/297, can be used for the
+      flattening;
+    - introduce GeographicLib::Constants::WGS84_f() for the WGS84
+      flattening (and deprecate Constants::WGS84_r() for the inverse
+      flattening);
+    - most classes have a Flattening() member function;
+    - InverseFlattening() has been deprecated (and now returns inf for a
+      sphere, instead of 0).
+
+ - <a href="http://geographiclib.sf.net/1.10">Version 1.10</a>
+   (released 2011-06-11)
+  - Improvements to Matlab/Octave interface:
+    - add {geocentric,localcartesian}{forward,reverse};
+    - make geographiclibinterface more general;
+    - install the source for the interface;
+    - cmake compiles the interface if ENABLE_MATLAB=ON;
+    - include compiled interface with Windows binary installer.
+  - Fix various configuration issues
+    - autoconf did not install Config.h;
+    - cmake installed in man/man1 instead of share/man/man1;
+    - cmake did not set the rpath on the tools.
+
+ - <a href="http://geographiclib.sf.net/1.9">Version 1.9</a>
+   (released 2011-05-28)
+  - FIX BUG in area returned by
+    <a href="Planimeter.1.html">Planimeter</a> for pole encircling polygons.
+  - FIX BUG in error message reported when DMS::Decode reads the string
+    "5d.".
+  - FIX BUG in AlbersEqualArea::Reverse (lon0 not being used).
+  - Ensure that all exceptions thrown in the \ref utilities are caught.
+  - Avoid using catch within GeographicLib::DMS.
+  - Move GeographicLib::Accumulator class from Planimeter.cpp to
+    Constants.hpp.
+  - Add GeographicLib::Math::sq<T>.
+  - Simplify \ref geoidinst
+    - add geographiclib-get-geoids for Unix-like systems;
+    - add installers for Windows.
+  - Provide cmake support:
+    - build binary installer for Windows;
+    - include regression tests;
+    - add --input-string, --input-file, --output-file options to the
+      \ref utilities to support tests.
+  - Rename utility EquidistantTest as <a href="GeodesicProj.1.html">
+    GeodesicProj</a> and TransverseMercatorTest as
+    <a href="TransverseMercatorProj.1.html"> TransverseMercatorProj</a>.
+  - Add <a href="ConicProj.1.html"> ConicProj</a>.
+  - Reverse the initial sense of the -s option for
+    <a href="Planimeter.1.html"> Planimeter</a>.
+  - Migrate source from subversion to
+    <a href="http://geographiclib.git.sf.net/git/gitweb-index.cgi">
+    git</a>.
+
+ - <a href="http://geographiclib.sf.net/1.8">Version 1.8</a>
+   (released 2011-02-22)
+  - Optionally return rotation matrix from GeographicLib::Geocentric and
+    GeographicLib::LocalCartesian.
+  - For the \ref utilities, supply man pages, -h prints the synopsis,
+    --help prints the man page, --version prints the version.
+  - Use accurate summation in <a href="Planimeter.1.html">Planimeter</a>.
+  - Add 64-bit targets for Visual Studio 2010.
+  - Use templates for defining math functions and some constants.
+  - GeographicLib::Geoid updates
+    - Add GeographicLib::Geoid::DefaultGeoidPath and
+      GeographicLib::Geoid::DefaultGeoidName;
+    - <a href="GeoidEval.1.html">GeoidEval</a> uses environment variable
+      GEOID_NAME as the default geoid;
+    - Add --msltohae and --haetomsl as
+      <a href="GeoidEval.1.html">GeoidEval</a> options (and don't
+      document the single hyphen versions).
+  - Remove documentation that duplicates papers on transverse Mercator
+    and geodesics.
+
+ - <a href="http://geographiclib.sf.net/1.7">Version 1.7</a>
+   (released 2010-12-21)
+  - FIX BUG in scale returned by GeographicLib::LambertConformalConic::Reverse.
+  - Add GeographicLib::AlbersEqualArea projection.
+  - Library created by Visual Studio is Geographic.lib instead of
+    GeographicLib.lib (compatible with makefiles).
+  - Make classes NaN aware.
+  - Use cell arrays for MGRS strings in Matlab.
+  - Add solution/project files for Visual Studio 2010 (32-bit only).
+  - Use C++11 static_assert and math functions, if available.
+
+ - <a href="http://geographiclib.sf.net/1.6">Version 1.6</a>
+   (released 2010-11-23)
+  - FIX BUG introduced in GeographicLib::Geoid in version 1.5 (found by
+    Dave Edwards).
+
+ - <a href="http://geographiclib.sf.net/1.5">Version 1.5</a>
+   (released 2010-11-19)
+  - Improve area calculations for small polygons.
+  - Add -s and -r flags to <a href="Planimeter.1.html">Planimeter</a>.
+  - Improve the accuracy of GeographicLib::LambertConformalConic using
+    divided differences.
+  - FIX BUG in meridian convergence returned by
+    LambertConformalConic::Forward.
+  - Add optional threadsafe parameter to GeographicLib::Geoid
+    constructor.  WARNING: This changes may break binary compatibility
+    with previous versions of %GeographicLib.  However, the library is
+    source compatible.
+  - Add GeographicLib::OSGB.
+  - Matlab and Octave interfaces to GeographicLib::UTMUPS,
+    GeographicLib::MGRS, GeographicLib::Geoid, GeographicLib::Geodesic
+    provided.
+  - Minor changes
+    - explicitly turn on optimization in Visual Studio 2008 projects;
+    - add missing dependencies in some Makefiles;
+    - move pi() and degree() from GeographicLib::Constants to
+      GeographicLib::Math;
+    - introduce GeographicLib::Math::extended type to aid testing;
+    - add GeographicLib::Math::epi() and GeographicLib::Math::edegree().
+    - fixes to compile under cygwin;
+    - tweak expression used to find latitude from conformal latitude.
+
+ - <a href="http://geographiclib.sf.net/1.4">Version 1.4</a>
+   (released 2010-09-12)
+  - Changes to GeographicLib::Geodesic and GeographicLib::GeodesicLine:
+    - FIX BUG in Geodesic::Inverse with prolate ellipsoids;
+    - add area computations to Geodesic::Direct and Geodesic::Inverse;
+    - add geodesic areas to geodesic test set;
+    - make GeodesicLine constructor public;
+    - change longitude series in Geodesic into Helmert-like form;
+    - ensure that equatorial geodesics have cos(alpha0) = 0 identically;
+    - generalize interface for Geodesic and GeodesicLine;
+    - split GeodesicLine and Geodesic into different files;
+    - signal convergence failure in Geodesic::Inverse with NaNs;
+    - deprecate one function in Geodesic and two functions in
+      GeodesicLine;
+    - deprecate -n option for <a href="GeodSolve.1.html">Geod</a>.
+    .
+    WARNING: These changes may break binary compatibility with previous
+    versions of %GeographicLib.  However, the library is source
+    compatible (with the proviso that GeographicLib/GeodesicLine.hpp may
+    now need to be included).
+  - Add the <a href="Planimeter.1.html">Planimeter</a> utility for
+    computing the areas of geodesic polygons.
+  - Improve iterative solution of GeographicLib::Gnomonic::Reverse.
+  - Add GeographicLib::Geoid::ConvertHeight.
+  - Add -msltohae, -haetomsl, and -z options to
+    <a href="GeoidEval.1.html">GeoidEval</a>.
+  - Constructors check that minor radius is positive.
+  - Add overloaded Forward and Reverse functions to the projection
+    classes which don't return the convergence (or azimuth) and scale.
+  - Document function parameters and return values consistently.
+
+ - <a href="http://geographiclib.sf.net/1.3">Version 1.3</a>
+   (released 2010-07-21)
+  - Add GeographicLib::Gnomonic, the ellipsoid generalization of the
+    gnomonic projection.
+  - Add -g and -e options to
+    <a href="GeodesicProj.1.html">EquidistantTest</a>.
+  - Use fixed-point notation for output from
+    <a href="CartConvert.1.html">CartConvert</a>,
+    <a href="GeodesicProj.1.html">EquidistantTest</a>,
+    <a href="TransverseMercatorProj.1.html">TransverseMercatorTest</a>.
+  - PolarStereographic:
+    - Improved conversion to conformal coordinates;
+    - Fix bug with scale at opposite pole;
+    - Complain if latitude out of range in SetScale.
+  - Add GeographicLib::Math::NaN().
+  - Add long double version of hypot for Windows.
+  - Add EllipticFunction::E(real).
+  - Update references to Geotrans in MGRS documentation.
+  - Speed up tmseries.mac.
+
+ - <a href="http://geographiclib.sf.net/1.2">Version 1.2</a>
+   (released 2010-05-21)
+  - FIX BUGS in GeographicLib::Geodesic,
+    - wrong azimuth returned by Direct if point 2 is on a pole;
+    - Inverse sometimes fails with very close points.
+  - Improve calculation of scale in GeographicLib::CassiniSoldner,
+    - add GeographicLib::GeodesicLine::Scale,
+      GeographicLib::GeodesicLine::EquatorialAzimuth, and
+      GeographicLib::GeodesicLine::EquatorialArc;
+    - break friend connection between CassiniSoldner and Geodesic.
+  - Add GeographicLib::DMS::DecodeAngle and
+    GeographicLib::DMS::DecodeAzimuth.  Extend
+    GeographicLib::DMS::Decode and GeographicLib::DMS::Encode to deal
+    with distances.
+  - Code and documentation changes in GeographicLib::Geodesic and
+    GeographicLib::Geocentric for consistency with
+    the forthcoming paper on geodesics.
+  - Increase order of series using in GeographicLib::Geodesic to 6 (full
+    accuracy maintained for ellipsoid flattening < 0.01).
+  - Macro __NO_LONG_DOUBLE_MATH to disable use of long double.
+  - Correct declaration of GeographicLib::Math::isfinite to return a bool.
+  - Changes in the \ref utilities,
+    - improve error reporting when parsing command line arguments;
+    - accept latitudes and longitudes in decimal degrees or degrees,
+      minutes, and seconds, with optional hemisphere designators;
+    - <a href="GeoConvert.1.html">GeoConvert</a> -z accepts zone or
+      zone+hemisphere;
+    - <a href="GeoidEval.1.html">GeoidEval</a> accepts any of the input
+      formats used by <a href="GeoConvert.1.html">GeoConvert</a>;
+    - <a href="CartConvert.1.html">CartConvert</a> allows the ellipsoid
+      to be specified with -e.
+
+ - <a href="http://geographiclib.sf.net/1.1">Version 1.1</a>
+   (released 2010-02-09)
+  - FIX BUG (introduced in 2009-03) in EllipticFunction::E(sn,cn,dn).
+  - Increase accuracy of scale calculation in TransverseMercator and
+    TransverseMercatorExact.
+  - Code and documentation changes for consistency with
+    <a  href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>
+
+ - <a href="http://geographiclib.sf.net/1.0">Version 1.0</a>
+   (released 2010-01-07)
+  - Add autoconf configuration files.
+  - BUG FIX: Improve initial guess for Newton's method in
+    PolarStereographic::Reverse.  (Previously this failed to converge
+    when the co-latitude exceeded about 130 deg.)
+  - Constructors for TransverseMercator, TransverseMercatorExact,
+    PolarStereographic, Geocentric, and Geodesic now check for obvious
+    problems with their arguments and throw an exception if necessary.
+  - Most classes now include inspector functions such as MajorRadius()
+    so that you can determine how instances were constructed.
+  - Add GeographicLib::LambertConformalConic class.
+  - Add GeographicLib::PolarStereographic::SetScale to allow the
+    latitude of true scale to be specified.
+  - Add solution and project files for Visual Studio 2008.
+  - Add GeographicLib::GeographicErr for exceptions.
+  - GeographicLib::Geoid changes:
+    - BUG FIX: fix typo in GeographicLib::Geoid::Cache which could cause
+      a segmentation fault in some cases when the cached area spanned
+      the prime meridian.
+    - Include sufficient edge data to allow heights to be returned for
+      cached area without disk reads;
+    - Add inspector functions to query the extent of the cache.
+
+ - <a href="http://geographiclib.sf.net/2009-11">Version 2009-11</a>
+   (released 2009-11-03)
+  - Allow specification of "closest UTM zone" in GeographicLib::UTMUPS
+    and <a href="GeoConvert.1.html">GeoConvert</a> (via -t option).
+  - Utilities now complain is there are too many tokens on input lines.
+  - Include real-to-real versions of GeographicLib::DMS::Decode and
+    GeographicLib::DMS::Encode.
+  - More house-cleaning changes:
+    - Ensure that functions which return results through reference
+      arguments do not alter the arguments when an exception is thrown.
+    - Improve accuracy of GeographicLib::MGRS::Forward.
+    - Include more information in some error messages.
+    - Improve accuracy of inverse hyperbolic functions.
+    - Fix the way GeographicLib::Math functions handle different precisions.
+
+ - <a href="http://geographiclib.sf.net/2009-10">Version 2009-10</a>
+   (released 2009-10-18)
+  - Change web site to http://geographiclib.sourceforge.net
+  - Several house-cleaning changes:
+    - Change from the a flat directory structure to a more easily
+      maintained one.
+    - Introduce Math class for common mathematical functions (in
+      Constants.hpp).
+    - Use Math::real as the type for all real quantities.  By default this
+      is typedef'ed to double; and the library should be installed this
+      way.
+    - Eliminate const reference members of AzimuthalEquidistant,
+      CassiniSoldner and LocalCartesian so that they may be copied.
+    - Make several constructors explicit.  Disallow some constructors.
+      Disallow copy constructor/assignment for Geoid.
+    - Document least squares formulas in Geoid.cpp.
+    - Use unsigned long long for files positions of geoid files in Geoid.
+    - Introduce optional mgrslimits argument in UTMUPS::Forward and
+      UTMUPS::Reverse to enforce stricter MGRS limits on eastings and
+      northings.
+    - Add 64-bit targets in Visual Studio project files.
+
+ - <a href="http://geographiclib.sf.net/2009-09">Version 2009-09</a>
+   (released 2009-09-01)
+  - Add GeographicLib::Geoid and
+    <a href="GeoidEval.1.html">GeoidEval</a> utility.
+
+ - <a href="http://geographiclib.sf.net/2009-08">Version 2009-08</a>
+   (released 2009-08-14)
+  - Add GeographicLib::CassiniSoldner class and
+    <a href="GeodesicProj.1.html">EquidistantTest</a> utility.
+  - Fix bug in GeographicLib::Geodesic::Inverse where NaNs were
+    sometimes returned.
+  - INCOMPATIBLE CHANGE: AzimuthalEquidistant now returns the reciprocal
+    of the azimuthal scale instead of the reduced length.
+  - Add -n option to <a href="GeoConvert.1.html">GeoConvert</a>.
+
+ - <a href="http://geographiclib.sf.net/2009-07">Version 2009-07</a>
+   (released 2009-07-16)
+  - Speed up the series inversion code in tmseries.mac and geod.mac.
+  - Reference Borkowski in section on \ref geocentric.
+
+ - <a href="http://geographiclib.sf.net/2009-06">Version 2009-06</a>
+   (released 2009-06-01)
+  - Add routines to decode and encode zone+hemisphere to GeographicLib::UTMUPS.
+  - Clean up code in GeographicLib::Geodesic.
+
+ - <a href="http://geographiclib.sf.net/2009-05">Version 2009-05</a>
+   (released 2009-05-01)
+  - Improvements to GeographicLib::Geodesic:
+    - more economical series expansions,
+    - return reduced length (as does the
+      <a href="GeodSolve.1.html">Geod</a> utility),
+    - improved calculation of starting point for inverse method,
+    - use reduced length to give derivative for Newton's method.
+  - Add GeographicLib::AzimuthalEquidistant class.
+  - Make GeographicLib::Geocentric, GeographicLib::TransverseMercator,
+    and GeographicLib::PolarStereographic classes work with prolate
+    ellipsoids.
+  - <a href="CartConvert.1.html">CartConvert</a> checks its inputs more
+    carefully.
+  - Remove reference to defunct Constants.cpp from GeographicLib.vcproj.
+
+ - <a href="http://geographiclib.sf.net/2009-04">Version 2009-04</a>
+   (released 2009-04-01)
+  - Use compile-time constants to select the order of series in
+    GeographicLib::TransverseMercator.
+  - 2x unroll of Clenshaw summation to avoid data shuffling.
+  - Simplification of GeographicLib::EllipticFunction::E.
+  - Use STATIC_ASSERT for compile-time checking of constants.
+  - Improvements to GeographicLib::Geodesic:
+    - compile-time option to change order of series used,
+    - post Maxima code for generating the series,
+    - tune the order of series for double,
+    - improvements in the selection of starting points for Newton's
+      method,
+    - accept and return spherical arc lengths,
+    - works with both oblate and prolate ellipsoids,
+    - add -a, -e, -b options to the <a href="GeodSolve.1.html">Geod</a>
+      utility.
+
+ - <a href="http://geographiclib.sf.net/2009-03">Version 2009-03</a>
+   (released 2009-03-01)
+  - Add GeographicLib::Geodesic and the
+    <a href="GeodSolve.1.html">Geod</a> utility.
+  - Declare when no exceptions are thrown by functions.
+  - Minor changes to GeographicLib::DMS class.
+  - Use invf = 0 to mean a sphere in constructors to some classes.
+  - The makefile creates a library and includes an install target.
+  - Rename GeographicLib::ECEF to GeographicLib::Geocentric, ECEFConvert
+    to <a href="CartConvert.1.html">CartConvert</a>.
+  - Use inline functions to define constant doubles in Constants.hpp.
+
+ - <a href="http://geographiclib.sf.net/2009-02">Version 2009-02</a>
+   (released 2009-01-30)
+  - Fix documentation of constructors (flattening -> inverse
+    flattening).
+  - Use std versions of math functions.
+  - Add GeographicLib::ECEF and GeographicLib::LocalCartesian classes
+    and the ECEFConvert utility.
+  - Gather the documentation on the \ref utilities onto one page.
+
+ - <a href="http://geographiclib.sf.net/2009-01">Version 2009-01</a>
+   (released 2009-01-12)
+  - First proper release of library.
+  - More robust GeographicLib::TransverseMercatorExact:
+    - Introduce \e extendp version of constructor,
+    - Test against extended test data,
+    - Optimize starting positions for Newton's method,
+    - Fix behavior near all singularities,
+    - Fix order dependence in C++ start-up code,
+    - Improved method of computing scale and convergence.
+  - Documentation on transverse Mercator projection.
+  - Add GeographicLib::MGRS, GeographicLib::UTMUPS, etc.
+
+ - Version 2008-09
+  - Ad hoc posting of information on the transverse Mercator projection.
+
+<center>
+Back to \ref geocentric.  Up to \ref contents.
+</center>
+**********************************************************************/
diff --git a/doc/Makefile.am b/doc/Makefile.am
index c5702db..84c8ccc 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,105 +1,159 @@
-#  $Id: a22d824c2a60646aff275d080be5c805c2c924eb $
-
 EXTRAFILES = $(srcdir)/tmseries30.html $(srcdir)/geodseries30.html
 
+FIGURES = $(srcdir)/gauss-krueger-graticule.png \
+	$(srcdir)/thompson-tm-graticule.png \
+	$(srcdir)/gauss-krueger-convergence-scale.png \
+	$(srcdir)/gauss-schreiber-graticule-a.png \
+	$(srcdir)/gauss-krueger-graticule-a.png \
+	$(srcdir)/thompson-tm-graticule-a.png \
+	$(srcdir)/gauss-krueger-error.png \
+	$(srcdir)/meridian-measures.png
+
 SCRIPTDRIVERS = \
-$(srcdir)/scripts/geod-calc.html \
-$(srcdir)/scripts/geod-google.html \
-$(srcdir)/scripts/geod-google-instructions.html
+	$(srcdir)/scripts/geod-calc.html \
+	$(srcdir)/scripts/geod-google.html \
+	$(srcdir)/scripts/geod-google-instructions.html
 
 JSSCRIPTS = \
-$(srcdir)/scripts/GeographicLib/Math.js \
-$(srcdir)/scripts/GeographicLib/Geodesic.js \
-$(srcdir)/scripts/GeographicLib/GeodesicLine.js \
-$(srcdir)/scripts/GeographicLib/PolygonArea.js \
-$(srcdir)/scripts/GeographicLib/DMS.js \
-$(srcdir)/scripts/GeographicLib/Interface.js
+	$(srcdir)/scripts/GeographicLib/Math.js \
+	$(srcdir)/scripts/GeographicLib/Geodesic.js \
+	$(srcdir)/scripts/GeographicLib/GeodesicLine.js \
+	$(srcdir)/scripts/GeographicLib/PolygonArea.js \
+	$(srcdir)/scripts/GeographicLib/DMS.js \
+	$(srcdir)/scripts/GeographicLib/Interface.js
 
 HPPFILES = \
-$(top_srcdir)/include/GeographicLib/Accumulator.hpp \
-$(top_srcdir)/include/GeographicLib/AlbersEqualArea.hpp \
-$(top_srcdir)/include/GeographicLib/AzimuthalEquidistant.hpp \
-$(top_srcdir)/include/GeographicLib/CassiniSoldner.hpp \
-$(top_srcdir)/include/GeographicLib/Constants.hpp \
-$(top_srcdir)/include/GeographicLib/DMS.hpp \
-$(top_srcdir)/include/GeographicLib/EllipticFunction.hpp \
-$(top_srcdir)/include/GeographicLib/Geocentric.hpp \
-$(top_srcdir)/include/GeographicLib/GeoCoords.hpp \
-$(top_srcdir)/include/GeographicLib/Geodesic.hpp \
-$(top_srcdir)/include/GeographicLib/GeodesicLine.hpp \
-$(top_srcdir)/include/GeographicLib/Geoid.hpp \
-$(top_srcdir)/include/GeographicLib/Gnomonic.hpp \
-$(top_srcdir)/include/GeographicLib/LambertConformalConic.hpp \
-$(top_srcdir)/include/GeographicLib/LocalCartesian.hpp \
-$(top_srcdir)/include/GeographicLib/Math.hpp \
-$(top_srcdir)/include/GeographicLib/MGRS.hpp \
-$(top_srcdir)/include/GeographicLib/OSGB.hpp \
-$(top_srcdir)/include/GeographicLib/PolarStereographic.hpp \
-$(top_srcdir)/include/GeographicLib/PolygonArea.hpp \
-$(top_srcdir)/include/GeographicLib/TransverseMercatorExact.hpp \
-$(top_srcdir)/include/GeographicLib/TransverseMercator.hpp \
-$(top_srcdir)/include/GeographicLib/UTMUPS.hpp
+	$(top_srcdir)/include/GeographicLib/Accumulator.hpp \
+	$(top_srcdir)/include/GeographicLib/AlbersEqualArea.hpp \
+	$(top_srcdir)/include/GeographicLib/AzimuthalEquidistant.hpp \
+	$(top_srcdir)/include/GeographicLib/CassiniSoldner.hpp \
+	$(top_srcdir)/include/GeographicLib/Constants.hpp \
+	$(top_srcdir)/include/GeographicLib/DMS.hpp \
+	$(top_srcdir)/include/GeographicLib/Ellipsoid.hpp \
+	$(top_srcdir)/include/GeographicLib/EllipticFunction.hpp \
+	$(top_srcdir)/include/GeographicLib/Geocentric.hpp \
+	$(top_srcdir)/include/GeographicLib/GeoCoords.hpp \
+	$(top_srcdir)/include/GeographicLib/Geodesic.hpp \
+	$(top_srcdir)/include/GeographicLib/GeodesicExact.hpp \
+	$(top_srcdir)/include/GeographicLib/GeodesicLine.hpp \
+	$(top_srcdir)/include/GeographicLib/GeodesicLineExact.hpp \
+	$(top_srcdir)/include/GeographicLib/Geohash.hpp \
+	$(top_srcdir)/include/GeographicLib/Geoid.hpp \
+	$(top_srcdir)/include/GeographicLib/Gnomonic.hpp \
+	$(top_srcdir)/include/GeographicLib/LambertConformalConic.hpp \
+	$(top_srcdir)/include/GeographicLib/LocalCartesian.hpp \
+	$(top_srcdir)/include/GeographicLib/Math.hpp \
+	$(top_srcdir)/include/GeographicLib/MGRS.hpp \
+	$(top_srcdir)/include/GeographicLib/OSGB.hpp \
+	$(top_srcdir)/include/GeographicLib/PolarStereographic.hpp \
+	$(top_srcdir)/include/GeographicLib/PolygonArea.hpp \
+	$(top_srcdir)/include/GeographicLib/TransverseMercatorExact.hpp \
+	$(top_srcdir)/include/GeographicLib/TransverseMercator.hpp \
+	$(top_srcdir)/include/GeographicLib/UTMUPS.hpp
 
 ALLSOURCES = \
-$(top_srcdir)/src/AlbersEqualArea.cpp \
-$(top_srcdir)/src/AzimuthalEquidistant.cpp \
-$(top_srcdir)/src/CassiniSoldner.cpp \
-$(top_srcdir)/src/DMS.cpp \
-$(top_srcdir)/src/EllipticFunction.cpp \
-$(top_srcdir)/src/Geocentric.cpp \
-$(top_srcdir)/src/GeoCoords.cpp \
-$(top_srcdir)/src/Geodesic.cpp \
-$(top_srcdir)/src/GeodesicLine.cpp \
-$(top_srcdir)/src/Geoid.cpp \
-$(top_srcdir)/src/Gnomonic.cpp \
-$(top_srcdir)/src/LambertConformalConic.cpp \
-$(top_srcdir)/src/LocalCartesian.cpp \
-$(top_srcdir)/src/MGRS.cpp \
-$(top_srcdir)/src/OSGB.cpp \
-$(top_srcdir)/src/PolarStereographic.cpp \
-$(top_srcdir)/src/PolygonArea.cpp \
-$(top_srcdir)/src/TransverseMercator.cpp \
-$(top_srcdir)/src/TransverseMercatorExact.cpp \
-$(top_srcdir)/src/UTMUPS.cpp \
-$(top_srcdir)/tools/CartConvert.cpp \
-$(top_srcdir)/tools/ConicProj.cpp \
-$(top_srcdir)/tools/GeodesicProj.cpp \
-$(top_srcdir)/tools/GeoConvert.cpp \
-$(top_srcdir)/tools/Geod.cpp \
-$(top_srcdir)/tools/GeoidEval.cpp \
-$(top_srcdir)/tools/Gravity.cpp \
-$(top_srcdir)/tools/Planimeter.cpp \
-$(top_srcdir)/tools/TransverseMercatorProj.cpp
+	$(top_srcdir)/src/AlbersEqualArea.cpp \
+	$(top_srcdir)/src/AzimuthalEquidistant.cpp \
+	$(top_srcdir)/src/CassiniSoldner.cpp \
+	$(top_srcdir)/src/DMS.cpp \
+	$(top_srcdir)/src/Ellipsoid.cpp \
+	$(top_srcdir)/src/EllipticFunction.cpp \
+	$(top_srcdir)/src/Geocentric.cpp \
+	$(top_srcdir)/src/GeoCoords.cpp \
+	$(top_srcdir)/src/Geodesic.cpp \
+	$(top_srcdir)/src/GeodesicLine.cpp \
+	$(top_srcdir)/src/Geohash.cpp \
+	$(top_srcdir)/src/Geoid.cpp \
+	$(top_srcdir)/src/Gnomonic.cpp \
+	$(top_srcdir)/src/LambertConformalConic.cpp \
+	$(top_srcdir)/src/LocalCartesian.cpp \
+	$(top_srcdir)/src/MGRS.cpp \
+	$(top_srcdir)/src/OSGB.cpp \
+	$(top_srcdir)/src/PolarStereographic.cpp \
+	$(top_srcdir)/src/PolygonArea.cpp \
+	$(top_srcdir)/src/TransverseMercator.cpp \
+	$(top_srcdir)/src/TransverseMercatorExact.cpp \
+	$(top_srcdir)/src/UTMUPS.cpp \
+	$(top_srcdir)/tools/CartConvert.cpp \
+	$(top_srcdir)/tools/ConicProj.cpp \
+	$(top_srcdir)/tools/GeodesicProj.cpp \
+	$(top_srcdir)/tools/GeoConvert.cpp \
+	$(top_srcdir)/tools/GeodSolve.cpp \
+	$(top_srcdir)/tools/GeoidEval.cpp \
+	$(top_srcdir)/tools/Gravity.cpp \
+	$(top_srcdir)/tools/Planimeter.cpp \
+	$(top_srcdir)/tools/TransverseMercatorProj.cpp
 
 MANPAGES = \
-../man/CartConvert.1.html \
-../man/ConicProj.1.html \
-../man/GeodesicProj.1.html \
-../man/GeoConvert.1.html \
-../man/Geod.1.html \
-../man/GeoidEval.1.html \
-../man/Gravity.1.html \
-../man/MagneticField.1.html \
-../man/Planimeter.1.html \
-../man/TransverseMercatorProj.1.html
+	../man/CartConvert.1.html \
+	../man/ConicProj.1.html \
+	../man/GeodesicProj.1.html \
+	../man/GeoConvert.1.html \
+	../man/GeodSolve.1.html \
+	../man/GeoidEval.1.html \
+	../man/Gravity.1.html \
+	../man/MagneticField.1.html \
+	../man/Planimeter.1.html \
+	../man/TransverseMercatorProj.1.html
+
+LEGACYFILES = \
+	$(top_srcdir)/legacy/C/geodesic.c \
+	$(top_srcdir)/legacy/C/geodesic.h \
+	$(top_srcdir)/legacy/C/direct.c \
+	$(top_srcdir)/legacy/C/inverse.c \
+	$(top_srcdir)/legacy/C/planimeter.c \
+	$(top_srcdir)/legacy/Fortran/geodesic.for \
+	$(top_srcdir)/legacy/Fortran/geodesic.inc \
+	$(top_srcdir)/legacy/Fortran/geoddirect.for \
+	$(top_srcdir)/legacy/Fortran/geodinverse.for \
+	$(top_srcdir)/legacy/Fortran/planimeter.for
 
 doc: html/index.html
 
-html/index.html: doxyfile.in Geographic.doc \
-	$(HPPFILES) $(ALLSOURCES) $(EXTRAFILES) $(MANPAGES)
+if HAVE_DOXYGEN
+manpages: $(MANPAGES)
 	if test -d html; then rm -rf html/*; else mkdir html; fi
-	cp -p $(EXTRAFILES) $(MANPAGES) $(top_srcdir)/maxima/*.mac \
+	cp $^ html/
+	touch $@
+
+html/index.html: manpages doxyfile.in GeographicLib.dox \
+	$(HPPFILES) $(ALLSOURCES) $(EXTRAFILES) $(FIGURES) \
+	doxyfile-c.in geodesic-c.dox doxyfile-for.in geodesic-for.dox \
+	$(LEGACYFILES)
+	cp -p $(EXTRAFILES) $(top_srcdir)/maxima/*.mac \
 	$(top_srcdir)/LICENSE.txt html/
 	sed -e "s%@PROJECT_SOURCE_DIR@%$(top_srcdir)%g" \
-	-e "s%@GeographicLib_VERSION@%$(VERSION)%g" \
-	$(srcdir)/doxyfile.in | doxygen -
+	-e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+	$(srcdir)/doxyfile.in | $(DOXYGEN) -
+	sed -e "s%@PROJECT_SOURCE_DIR@%$(top_srcdir)%g" \
+	-e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+	$(srcdir)/doxyfile-c.in | $(DOXYGEN) -
+	sed -e "s%@PROJECT_SOURCE_DIR@%$(top_srcdir)%g" \
+	-e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+	$(srcdir)/doxyfile-for.in | $(DOXYGEN) -
+else
+html/index.html: index.html.in utilities.html.in
+	if test -d html; then rm -rf html/*; else mkdir html; fi
+	cp $(top_srcdir)/LICENSE.txt html/
+	sed -e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+	$(srcdir)/utilities.html.in > html/utilities.html
+	sed -e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+	$(srcdir)/index.html.in > html/index.html
+endif
 
 maintainer-clean-local:
-	rm -rf html
+	rm -rf html manpages
 
 install-doc: html/index.html
 	$(INSTALL) -d $(DESTDIR)$(docdir)/html
-	$(INSTALL) -m 644 `dirname $<`/* $(DESTDIR)$(docdir)/html
+	$(INSTALL) -m 644 `dirname $<`/*.* $(DESTDIR)$(docdir)/html
+	-test -f `dirname $<`/C/index.html && \
+	$(INSTALL) -d $(DESTDIR)$(docdir)/html/C && \
+	$(INSTALL) -m 644 `dirname $<`/C/*.* $(DESTDIR)$(docdir)/html/C
+	-test -f `dirname $<`/Fortran/index.html && \
+	$(INSTALL) -d $(DESTDIR)$(docdir)/html/Fortran && \
+	$(INSTALL) -m 644 `dirname $<`/Fortran/*.* \
+	$(DESTDIR)$(docdir)/html/Fortran
 	$(INSTALL) -d $(DESTDIR)$(docdir)/scripts
 	$(INSTALL) -m 644 $(SCRIPTDRIVERS) $(DESTDIR)$(docdir)/scripts
 	$(INSTALL) -d $(DESTDIR)$(docdir)/scripts/GeographicLib
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 12d6a3e..8596626 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,9 +13,24 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-
-#  $Id: a22d824c2a60646aff275d080be5c805c2c924eb $
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -51,6 +65,11 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -62,6 +81,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -72,6 +92,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -80,6 +101,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -115,6 +139,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -180,86 +206,113 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 EXTRAFILES = $(srcdir)/tmseries30.html $(srcdir)/geodseries30.html
+FIGURES = $(srcdir)/gauss-krueger-graticule.png \
+	$(srcdir)/thompson-tm-graticule.png \
+	$(srcdir)/gauss-krueger-convergence-scale.png \
+	$(srcdir)/gauss-schreiber-graticule-a.png \
+	$(srcdir)/gauss-krueger-graticule-a.png \
+	$(srcdir)/thompson-tm-graticule-a.png \
+	$(srcdir)/gauss-krueger-error.png \
+	$(srcdir)/meridian-measures.png
+
 SCRIPTDRIVERS = \
-$(srcdir)/scripts/geod-calc.html \
-$(srcdir)/scripts/geod-google.html \
-$(srcdir)/scripts/geod-google-instructions.html
+	$(srcdir)/scripts/geod-calc.html \
+	$(srcdir)/scripts/geod-google.html \
+	$(srcdir)/scripts/geod-google-instructions.html
 
 JSSCRIPTS = \
-$(srcdir)/scripts/GeographicLib/Math.js \
-$(srcdir)/scripts/GeographicLib/Geodesic.js \
-$(srcdir)/scripts/GeographicLib/GeodesicLine.js \
-$(srcdir)/scripts/GeographicLib/PolygonArea.js \
-$(srcdir)/scripts/GeographicLib/DMS.js \
-$(srcdir)/scripts/GeographicLib/Interface.js
+	$(srcdir)/scripts/GeographicLib/Math.js \
+	$(srcdir)/scripts/GeographicLib/Geodesic.js \
+	$(srcdir)/scripts/GeographicLib/GeodesicLine.js \
+	$(srcdir)/scripts/GeographicLib/PolygonArea.js \
+	$(srcdir)/scripts/GeographicLib/DMS.js \
+	$(srcdir)/scripts/GeographicLib/Interface.js
 
 HPPFILES = \
-$(top_srcdir)/include/GeographicLib/Accumulator.hpp \
-$(top_srcdir)/include/GeographicLib/AlbersEqualArea.hpp \
-$(top_srcdir)/include/GeographicLib/AzimuthalEquidistant.hpp \
-$(top_srcdir)/include/GeographicLib/CassiniSoldner.hpp \
-$(top_srcdir)/include/GeographicLib/Constants.hpp \
-$(top_srcdir)/include/GeographicLib/DMS.hpp \
-$(top_srcdir)/include/GeographicLib/EllipticFunction.hpp \
-$(top_srcdir)/include/GeographicLib/Geocentric.hpp \
-$(top_srcdir)/include/GeographicLib/GeoCoords.hpp \
-$(top_srcdir)/include/GeographicLib/Geodesic.hpp \
-$(top_srcdir)/include/GeographicLib/GeodesicLine.hpp \
-$(top_srcdir)/include/GeographicLib/Geoid.hpp \
-$(top_srcdir)/include/GeographicLib/Gnomonic.hpp \
-$(top_srcdir)/include/GeographicLib/LambertConformalConic.hpp \
-$(top_srcdir)/include/GeographicLib/LocalCartesian.hpp \
-$(top_srcdir)/include/GeographicLib/Math.hpp \
-$(top_srcdir)/include/GeographicLib/MGRS.hpp \
-$(top_srcdir)/include/GeographicLib/OSGB.hpp \
-$(top_srcdir)/include/GeographicLib/PolarStereographic.hpp \
-$(top_srcdir)/include/GeographicLib/PolygonArea.hpp \
-$(top_srcdir)/include/GeographicLib/TransverseMercatorExact.hpp \
-$(top_srcdir)/include/GeographicLib/TransverseMercator.hpp \
-$(top_srcdir)/include/GeographicLib/UTMUPS.hpp
+	$(top_srcdir)/include/GeographicLib/Accumulator.hpp \
+	$(top_srcdir)/include/GeographicLib/AlbersEqualArea.hpp \
+	$(top_srcdir)/include/GeographicLib/AzimuthalEquidistant.hpp \
+	$(top_srcdir)/include/GeographicLib/CassiniSoldner.hpp \
+	$(top_srcdir)/include/GeographicLib/Constants.hpp \
+	$(top_srcdir)/include/GeographicLib/DMS.hpp \
+	$(top_srcdir)/include/GeographicLib/Ellipsoid.hpp \
+	$(top_srcdir)/include/GeographicLib/EllipticFunction.hpp \
+	$(top_srcdir)/include/GeographicLib/Geocentric.hpp \
+	$(top_srcdir)/include/GeographicLib/GeoCoords.hpp \
+	$(top_srcdir)/include/GeographicLib/Geodesic.hpp \
+	$(top_srcdir)/include/GeographicLib/GeodesicExact.hpp \
+	$(top_srcdir)/include/GeographicLib/GeodesicLine.hpp \
+	$(top_srcdir)/include/GeographicLib/GeodesicLineExact.hpp \
+	$(top_srcdir)/include/GeographicLib/Geohash.hpp \
+	$(top_srcdir)/include/GeographicLib/Geoid.hpp \
+	$(top_srcdir)/include/GeographicLib/Gnomonic.hpp \
+	$(top_srcdir)/include/GeographicLib/LambertConformalConic.hpp \
+	$(top_srcdir)/include/GeographicLib/LocalCartesian.hpp \
+	$(top_srcdir)/include/GeographicLib/Math.hpp \
+	$(top_srcdir)/include/GeographicLib/MGRS.hpp \
+	$(top_srcdir)/include/GeographicLib/OSGB.hpp \
+	$(top_srcdir)/include/GeographicLib/PolarStereographic.hpp \
+	$(top_srcdir)/include/GeographicLib/PolygonArea.hpp \
+	$(top_srcdir)/include/GeographicLib/TransverseMercatorExact.hpp \
+	$(top_srcdir)/include/GeographicLib/TransverseMercator.hpp \
+	$(top_srcdir)/include/GeographicLib/UTMUPS.hpp
 
 ALLSOURCES = \
-$(top_srcdir)/src/AlbersEqualArea.cpp \
-$(top_srcdir)/src/AzimuthalEquidistant.cpp \
-$(top_srcdir)/src/CassiniSoldner.cpp \
-$(top_srcdir)/src/DMS.cpp \
-$(top_srcdir)/src/EllipticFunction.cpp \
-$(top_srcdir)/src/Geocentric.cpp \
-$(top_srcdir)/src/GeoCoords.cpp \
-$(top_srcdir)/src/Geodesic.cpp \
-$(top_srcdir)/src/GeodesicLine.cpp \
-$(top_srcdir)/src/Geoid.cpp \
-$(top_srcdir)/src/Gnomonic.cpp \
-$(top_srcdir)/src/LambertConformalConic.cpp \
-$(top_srcdir)/src/LocalCartesian.cpp \
-$(top_srcdir)/src/MGRS.cpp \
-$(top_srcdir)/src/OSGB.cpp \
-$(top_srcdir)/src/PolarStereographic.cpp \
-$(top_srcdir)/src/PolygonArea.cpp \
-$(top_srcdir)/src/TransverseMercator.cpp \
-$(top_srcdir)/src/TransverseMercatorExact.cpp \
-$(top_srcdir)/src/UTMUPS.cpp \
-$(top_srcdir)/tools/CartConvert.cpp \
-$(top_srcdir)/tools/ConicProj.cpp \
-$(top_srcdir)/tools/GeodesicProj.cpp \
-$(top_srcdir)/tools/GeoConvert.cpp \
-$(top_srcdir)/tools/Geod.cpp \
-$(top_srcdir)/tools/GeoidEval.cpp \
-$(top_srcdir)/tools/Gravity.cpp \
-$(top_srcdir)/tools/Planimeter.cpp \
-$(top_srcdir)/tools/TransverseMercatorProj.cpp
+	$(top_srcdir)/src/AlbersEqualArea.cpp \
+	$(top_srcdir)/src/AzimuthalEquidistant.cpp \
+	$(top_srcdir)/src/CassiniSoldner.cpp \
+	$(top_srcdir)/src/DMS.cpp \
+	$(top_srcdir)/src/Ellipsoid.cpp \
+	$(top_srcdir)/src/EllipticFunction.cpp \
+	$(top_srcdir)/src/Geocentric.cpp \
+	$(top_srcdir)/src/GeoCoords.cpp \
+	$(top_srcdir)/src/Geodesic.cpp \
+	$(top_srcdir)/src/GeodesicLine.cpp \
+	$(top_srcdir)/src/Geohash.cpp \
+	$(top_srcdir)/src/Geoid.cpp \
+	$(top_srcdir)/src/Gnomonic.cpp \
+	$(top_srcdir)/src/LambertConformalConic.cpp \
+	$(top_srcdir)/src/LocalCartesian.cpp \
+	$(top_srcdir)/src/MGRS.cpp \
+	$(top_srcdir)/src/OSGB.cpp \
+	$(top_srcdir)/src/PolarStereographic.cpp \
+	$(top_srcdir)/src/PolygonArea.cpp \
+	$(top_srcdir)/src/TransverseMercator.cpp \
+	$(top_srcdir)/src/TransverseMercatorExact.cpp \
+	$(top_srcdir)/src/UTMUPS.cpp \
+	$(top_srcdir)/tools/CartConvert.cpp \
+	$(top_srcdir)/tools/ConicProj.cpp \
+	$(top_srcdir)/tools/GeodesicProj.cpp \
+	$(top_srcdir)/tools/GeoConvert.cpp \
+	$(top_srcdir)/tools/GeodSolve.cpp \
+	$(top_srcdir)/tools/GeoidEval.cpp \
+	$(top_srcdir)/tools/Gravity.cpp \
+	$(top_srcdir)/tools/Planimeter.cpp \
+	$(top_srcdir)/tools/TransverseMercatorProj.cpp
 
 MANPAGES = \
-../man/CartConvert.1.html \
-../man/ConicProj.1.html \
-../man/GeodesicProj.1.html \
-../man/GeoConvert.1.html \
-../man/Geod.1.html \
-../man/GeoidEval.1.html \
-../man/Gravity.1.html \
-../man/MagneticField.1.html \
-../man/Planimeter.1.html \
-../man/TransverseMercatorProj.1.html
+	../man/CartConvert.1.html \
+	../man/ConicProj.1.html \
+	../man/GeodesicProj.1.html \
+	../man/GeoConvert.1.html \
+	../man/GeodSolve.1.html \
+	../man/GeoidEval.1.html \
+	../man/Gravity.1.html \
+	../man/MagneticField.1.html \
+	../man/Planimeter.1.html \
+	../man/TransverseMercatorProj.1.html
+
+LEGACYFILES = \
+	$(top_srcdir)/legacy/C/geodesic.c \
+	$(top_srcdir)/legacy/C/geodesic.h \
+	$(top_srcdir)/legacy/C/direct.c \
+	$(top_srcdir)/legacy/C/inverse.c \
+	$(top_srcdir)/legacy/C/planimeter.c \
+	$(top_srcdir)/legacy/Fortran/geodesic.for \
+	$(top_srcdir)/legacy/Fortran/geodesic.inc \
+	$(top_srcdir)/legacy/Fortran/geoddirect.for \
+	$(top_srcdir)/legacy/Fortran/geodinverse.for \
+	$(top_srcdir)/legacy/Fortran/planimeter.for
 
 all: all-am
 
@@ -306,6 +359,8 @@ TAGS:
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -351,10 +406,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -450,21 +510,47 @@ uninstall-am:
 
 doc: html/index.html
 
-html/index.html: doxyfile.in Geographic.doc \
-	$(HPPFILES) $(ALLSOURCES) $(EXTRAFILES) $(MANPAGES)
-	if test -d html; then rm -rf html/*; else mkdir html; fi
-	cp -p $(EXTRAFILES) $(MANPAGES) $(top_srcdir)/maxima/*.mac \
-	$(top_srcdir)/LICENSE.txt html/
-	sed -e "s%@PROJECT_SOURCE_DIR@%$(top_srcdir)%g" \
-	-e "s%@GeographicLib_VERSION@%$(VERSION)%g" \
-	$(srcdir)/doxyfile.in | doxygen -
+ at HAVE_DOXYGEN_TRUE@manpages: $(MANPAGES)
+ at HAVE_DOXYGEN_TRUE@	if test -d html; then rm -rf html/*; else mkdir html; fi
+ at HAVE_DOXYGEN_TRUE@	cp $^ html/
+ at HAVE_DOXYGEN_TRUE@	touch $@
+
+ at HAVE_DOXYGEN_TRUE@html/index.html: manpages doxyfile.in GeographicLib.dox \
+ at HAVE_DOXYGEN_TRUE@	$(HPPFILES) $(ALLSOURCES) $(EXTRAFILES) $(FIGURES) \
+ at HAVE_DOXYGEN_TRUE@	doxyfile-c.in geodesic-c.dox doxyfile-for.in geodesic-for.dox \
+ at HAVE_DOXYGEN_TRUE@	$(LEGACYFILES)
+ at HAVE_DOXYGEN_TRUE@	cp -p $(EXTRAFILES) $(top_srcdir)/maxima/*.mac \
+ at HAVE_DOXYGEN_TRUE@	$(top_srcdir)/LICENSE.txt html/
+ at HAVE_DOXYGEN_TRUE@	sed -e "s%@PROJECT_SOURCE_DIR@%$(top_srcdir)%g" \
+ at HAVE_DOXYGEN_TRUE@	-e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+ at HAVE_DOXYGEN_TRUE@	$(srcdir)/doxyfile.in | $(DOXYGEN) -
+ at HAVE_DOXYGEN_TRUE@	sed -e "s%@PROJECT_SOURCE_DIR@%$(top_srcdir)%g" \
+ at HAVE_DOXYGEN_TRUE@	-e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+ at HAVE_DOXYGEN_TRUE@	$(srcdir)/doxyfile-c.in | $(DOXYGEN) -
+ at HAVE_DOXYGEN_TRUE@	sed -e "s%@PROJECT_SOURCE_DIR@%$(top_srcdir)%g" \
+ at HAVE_DOXYGEN_TRUE@	-e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+ at HAVE_DOXYGEN_TRUE@	$(srcdir)/doxyfile-for.in | $(DOXYGEN) -
+ at HAVE_DOXYGEN_FALSE@html/index.html: index.html.in utilities.html.in
+ at HAVE_DOXYGEN_FALSE@	if test -d html; then rm -rf html/*; else mkdir html; fi
+ at HAVE_DOXYGEN_FALSE@	cp $(top_srcdir)/LICENSE.txt html/
+ at HAVE_DOXYGEN_FALSE@	sed -e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+ at HAVE_DOXYGEN_FALSE@	$(srcdir)/utilities.html.in > html/utilities.html
+ at HAVE_DOXYGEN_FALSE@	sed -e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+ at HAVE_DOXYGEN_FALSE@	$(srcdir)/index.html.in > html/index.html
 
 maintainer-clean-local:
-	rm -rf html
+	rm -rf html manpages
 
 install-doc: html/index.html
 	$(INSTALL) -d $(DESTDIR)$(docdir)/html
-	$(INSTALL) -m 644 `dirname $<`/* $(DESTDIR)$(docdir)/html
+	$(INSTALL) -m 644 `dirname $<`/*.* $(DESTDIR)$(docdir)/html
+	-test -f `dirname $<`/C/index.html && \
+	$(INSTALL) -d $(DESTDIR)$(docdir)/html/C && \
+	$(INSTALL) -m 644 `dirname $<`/C/*.* $(DESTDIR)$(docdir)/html/C
+	-test -f `dirname $<`/Fortran/index.html && \
+	$(INSTALL) -d $(DESTDIR)$(docdir)/html/Fortran && \
+	$(INSTALL) -m 644 `dirname $<`/Fortran/*.* \
+	$(DESTDIR)$(docdir)/html/Fortran
 	$(INSTALL) -d $(DESTDIR)$(docdir)/scripts
 	$(INSTALL) -m 644 $(SCRIPTDRIVERS) $(DESTDIR)$(docdir)/scripts
 	$(INSTALL) -d $(DESTDIR)$(docdir)/scripts/GeographicLib
diff --git a/doc/Makefile.mk b/doc/Makefile.mk
index 71460ba..ca852d9 100644
--- a/doc/Makefile.mk
+++ b/doc/Makefile.mk
@@ -1,36 +1,17 @@
-# $Id: 0decae99c6f1f56173f01e0cfadc59032805d104 $
+SCRIPTDRIVERS = $(wildcard scripts/[A-Za-z]*.html)
+JSSCRIPTS = $(wildcard scripts/GeographicLib/[A-Za-z]*.js)
 
-MODULES = DMS EllipticFunction GeoCoords MGRS PolarStereographic \
-	TransverseMercator TransverseMercatorExact UTMUPS Geocentric \
-	LocalCartesian Geodesic GeodesicLine PolygonArea \
-	AzimuthalEquidistant CassiniSoldner \
-	Geoid Gnomonic OSGB AlbersEqualArea
-PROGRAMS = GeoConvert TransverseMercatorProj CartConvert Geod GeodesicProj \
-	GeoidEval Gravity MagneticField Planimeter ConicProj
-
-HEADERS = $(patsubst %,../include/GeographicLib/%.hpp,Constants $(MODULES))
-SOURCES = $(patsubst %,../src/%.cpp,$(MODULES)) \
-	$(patsubst %,../tools/%.cpp,$(PROGRAMS))
-
-EXTRAFILES = tmseries30.html geodseries30.html
-HTMLMANPAGES = 	$(patsubst %,../man/%.1.html,$(PROGRAMS))
-SCRIPTDRIVERS = $(wildcard scripts/*.html)
-JSSCRIPTS = $(wildcard scripts/GeographicLib/*.js)
-
-MAXIMA = tm ellint tmseries geod
-MAXIMASOURCES = $(patsubst %,../maxima/%.mac,$(MAXIMA))
+VERSION:=$(shell grep '\bVERSION=' ../configure | cut -f2 -d\' | head -1)
 
 doc: html/index.html
 
-html/index.html: doxyfile.in Geographic.doc \
-	$(HEADERS) $(ALLSOURCES) $(MAXIMASOURCES) $(EXTRAFILES) \
-	$(HTMLMANPAGES)
+html/index.html: index.html.in utilities.html.in
 	if test -d html; then rm -rf html/*; else mkdir html; fi
-	cp -p $(MAXIMASOURCES) $(EXTRAFILES) $(HTMLMANPAGES) \
-	../LICENSE.txt html/
-	sed -e "s%@PROJECT_SOURCE_DIR@%..%g" \
-	-e "s%@GeographicLib_VERSION@%$(VERSION)%g" \
-	$(srcdir)/doxyfile.in | doxygen -
+	cp ../LICENSE.txt html/
+	sed -e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+	utilities.html.in > html/utilities.html
+	sed -e "s%@PROJECT_VERSION@%$(VERSION)%g" \
+	index.html.in > html/index.html
 
 PREFIX = /usr/local
 DEST = $(PREFIX)/share/doc/GeographicLib
@@ -46,7 +27,4 @@ install: html/index.html
 	$(INSTALL) -m 644 $(SCRIPTDRIVERS) $(SCRIPTDEST)/
 	$(INSTALL) -m 644 $(JSSCRIPTS) $(SCRIPTDEST)/GeographicLib/
 
-maintainer-clean:
-	rm -rf html
-
 .PHONY: doc install clean
diff --git a/doc/NETGeographicLib.dox b/doc/NETGeographicLib.dox
new file mode 100644
index 0000000..89b934a
--- /dev/null
+++ b/doc/NETGeographicLib.dox
@@ -0,0 +1,241 @@
+// -*- text -*-
+/**
+ * \file NETGeographicLib.dox
+ * \brief Documentation for NETGeographicLib
+ *
+ * Written by Scott Heiman <mrmtdew2 at outlook.com> and licensed under the
+ * MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+/**
+\mainpage NETGeographicLib library
+\author Scott Heiman (mrmtdew2 at outlook.com)
+\version 1.34
+\date 2013-12-11
+
+\section abstract Abstract
+
+%NETGeographicLib is a .NET wrapper for GeographicLib.  It allows
+.NET developers to access GeographicLib classes within C#, Visual
+Basic, Managed C++, and other Microsoft .NET languages.
+
+NETGeographicLib is written in Managed C++.  It IS NOT a reimplementation
+of the GeographicLib software.  It is a container that provides interfaces
+to the GeographicLib classes.  GeographicLib and NETGeographicLib is an
+integrated product.
+
+The NETGeographic project in the GeographicLib-vc10.sln file located in
+\<install folder\>/GeographicLib-1.34/windows will create the NETGeographicLib
+DLL.  The source code for NETGeographicLib is located in
+\<install folder\>/GeographicLib-1.34/dotnet/NETGeographicLib.  NETGeographicLib
+is not available for older versions of Microsoft Visual Studio.
+
+NETGeographicLib has been tested with C#, Managed C++, and Visual Basic.
+Sample code snippets can be found in
+\<install folder\>/GeographicLib-1.34/dotnet/examples.
+
+\section differences Differences between NETGeographicLib and GeographicLib
+
+The NETGeographicLib class names are identical to the GeographicLib class names.
+All NETGeographicLib classes are in the NETGeographicLib namespace.
+
+NETGeographicLib exposes most of the GeographicLib classes.  The exceptions
+are SphericalEngine, GeographicLib::Math, and GeographicLib::Utility.  The
+SphericalEngine class is a template class which (according to the comments in
+the SphericalEngine.h file) is not usually accessible to developers.  The
+GeographicLib::Math class contains several specialized functions required by
+GeographicLib classes.  They have limited use outside GeographicLib.  This class
+may be exposed in a future release if there is demand for it.  The functions
+provided by GeographicLib::Utility duplicate functions provided by existing .NET
+controls (DateTime).
+
+The SphericalCoefficients class replaces the SphericalEngine::coeff class.
+
+The NETGeographicLib class function interfaces are similar, and in many cases,
+identical to the GeographicLib interfaces.  There are differences because of
+limitations in .NET and other differences that are discretionary.  The comments
+in the header files contain a section labeled "INTERFACE DIFFERENCES" that detail
+the differences between the NETGeographicLib interfaces and the GeographicLib
+interfaces.  The differences are summarized in the text that follows.
+
+Default values for function parameters are not supported in .NET.
+
+Several GeographicLib class functions accept or return a "capabilities mask" as
+an unsigned integer.  The NETGeographicLib classes accept and return the capabilities
+mask as an enumeration.
+
+The Geocentric and LocalCartesian classes have functions that return a rotation matrix.
+The NETGeographicLib versions return a two-dimensional, 3 × 3 array rather than a vector.
+
+A lot of GeographicLib classes have inspector functions (MajorRadius,
+Flattening, etc.).  These inspector functions are implemented as
+properties in NETGeographicLib.
+
+NETGeographicLib classes do not implement constructors that create "uninitialized" objects.
+
+Many NETGeographicLib classes implement a default constructor that assumes WGS84 parameters.
+
+Several GeographicLib classes implement the () operator.  NETGeographicLib classes
+replace the () operator with a specific function.  Managed C++ allows developers to
+overload the () operator; however, the () operator is not 'elegantly' supported in
+other .NET languages.  For example, if the () operator was implemented in the
+NETGeographicLib::Geoid class, then C# code would look like
+\code
+Geoid geoid = new Geoid();
+double h = geoid.op_FuncCall(latitude,longitude);  // if () operator was implemented.
+h = geoid.Height(latitude,longitude); // with () operator replaced with Height
+\endcode
+The author felt that the op_FuncCall syntax did not appropriately define the purpose
+of the function call.
+
+.NET does not allow developers to overload the assignment operators (=,+=,-=,*=).
+These operators have been replaced with functions in the NETGeographicLib::Accumulator class.
+
+\section library Using NETGeographicLib in a .NET Application
+
+If you have access to the NETGeographicLib and GeographicLib projects then
+-# Create a new solution.
+-# Create a new project using any .NET language.  For this example, call it MyApp.
+-# Add the NETGeographic and Geographic projects to the solution.  Verify that NETGeographicLib depends upon GeographicLib.
+-# Right-Click MyApp in the Solution View and select "Add Reference..." (C#/VB) or "References..." (Managed C++) in the pop-up menu.
+-# (Managed C++) Click the "Add New Reference..." button in the Properties dialog.
+\image html NETGeographicLib3.png
+-# Click the Projects Tab and select NETGeographic.
+   \image html NETGeographicLib1.png
+-# Click OK.
+
+If you only have access to the NETGeographic.dll then
+-# Create a new solution.
+-# Create a new project using any .NET language.  For this example, call it MyApp.
+-# Right-Click MyApp in the Solution View and select "Add Reference..." in the popup menu.
+-# Right-Click MyApp in the Solution View and select "Add Reference..." (C#/VB) or "References..." (Managed C++) in the pop-up menu.
+-# (Managed C++) Click the "Add New Reference..." button in the Properties dialog.
+\image html NETGeographicLib3.png
+-# Click the Browse Tab and navigate to the folder containing NETGeographic.dll.
+\image html NETGeographicLib2.png
+-# Select NETGeographic.dll and click OK.
+
+The MyApp project will have access to all public NETGeographicLib classes after the
+NETGeographic reference is added to MyApp.
+
+C# developers should add
+\code using NETGeographicLib; \endcode
+to any C# source file that uses NETGeographicLib.
+
+Managed C++ developers should add
+\code using namespace NETGeographicLib; \endcode
+to any C++ source that uses NETGeographicLib classes.
+
+Visual Basic developers should add
+\code Imports NETGeographicLib \endcode
+to any Visual Basic source that uses NETGeographicLib classes.
+
+\section sample C# Sample Application
+
+A C# sample application is provided that demonstrates NETGeographicLib classes.
+The source code for the sample application is located in
+\<install folder\>/GeographicLib-1.34/dotnet/Projections.  The sample
+application creates a tabbed dialog.  Each tab provides data entry fields that
+allow the user to exercise one or more NETGeographicLib classes.
+
+The following table lists the source code that demonstrates specific classes.
+<center>
+<TABLE>
+<TR><TH>Source File</TH><TH>Classes</TH></TR>
+<TR><TD>AccumPanel.cs</TD><TD>Accumulator</TD></TR>
+<TR><TD>AlbersPanel.cs</TD><TD>AlbersEqualArea, LambertConformalConic, TransverseMercator, TransverseMercatorExact</TD></TR>
+<TR><TD>EllipsoidPanel.cs</TD><TD>Ellipsoid</TD></TR>
+<TR><TD>EllipticPanel.cs</TD><TD>EllipticFunction</TD></TR>
+<TR><TD>GeocentricPanel.cs</TD><TD>Geocentric</TD></TR>
+<TR><TD>GeodesicPanel.cs</TD><TD>Geodesic, GeodesicLine, GeodesicExact, GeodesicLineExact</TD></TR>
+<TR><TD>GeoidPanel.cs</TD><TD>Geoid</TD></TR>
+<TR><TD>GravityPanel.cs</TD><TD>NormalGravity, GravityModel, GravityCircle</TD></TR>
+<TR><TD>LocalCartesianPanel.cs</TD><TD>LocalCartesian</TD></TR>
+<TR><TD>MagneticPanel.cs</TD><TD>MagneticModel, MagneticCircle</TD></TR>
+<TR><TD>MiscPanel.cs</TD><TD>DMS, Geohash</TD></TR>
+<TR><TD>PolarStereoPanel.cs</TD><TD>PolarStereographic</TD></TR>
+<TR><TD>PolyPanel.cs</TD><TD>PolygonArea</TD></TR>
+<TR><TD>ProjectionsPanel.cs</TD><TD>AzimuthalEquidistant, CassiniSoldner, Gnomonic</TD></TR>
+<TR><TD>SphericalHarmonicsPanel.cs</TD><TD>SphericalHarmonic, SphericalHarmonic1, SphericalHarmonic2, CircularEngine, SphericalCoefficients</TD></TR>
+<TR><TD>TypeIIIProjPanel.cs</TD><TD>UTMUPS, MGRS, OSGB</TD></TR>
+</TABLE>
+</center>
+
+\section netcmake Using cmake to build a Managed C++ Application
+
+The following assumes that you have installed %GeographicLib in one of
+two ways:
+- you have built and installed %GeographicLib using cmake with
+  <code>-D BUILD_NETGEOGRAPHICLIB=ON</code> (see
+  \ref cmake "Installation with cmake" in the %GeographicLib
+  documentation).  You can use any version of Visual Studio to build
+  %GeographicLib and should use the same version to build your
+  application.  You can build %GeographicLib as a shared library using
+  <code>-D GEOGRAPHICLIB_LIB_TYPE=SHARED</code> or <code>BOTH</code>.
+- you have installed %GeographicLib using one of the binary installers (see
+  \ref windowsbin "Using a binary installer for Windows" in the
+  %GeographicLib documentation).  In this case, you are restricted to using
+  Visual Studio 10.
+
+The minimum recommended version of cmake for use with NETGeographicLib
+is 2.8.7.  In order to build an application that uses NETGeographicLib
+with cmake, ask for the NETGeographicLib "component" of %GeographicLib
+using \verbatim
+find_package(GeographicLib COMPONENTS NETGeographicLib) \endverbatim
+If NETGeographicLib is found, then
+<code>GeographicLib_NETGeographicLib_FOUND</code> will be set to true and
+<code>GeographicLib_NETGeographicLib_LIBRARIES</code> will be set to the
+NETGeographic shared library.  This is the name of the cmake target from
+which the pathname of the dll can be obtained.
+
+Here is a very simple test code, which uses the
+NETGeographicLib::Geodesic class:
+\include example-Geodesic-small.cpp
+This example is
+<code>dotnet/examples/ManagedCPP/example-Geodesic-small.cpp</code>.
+
+Here is a complete CMakeList.txt files you can use to build this test
+code using the installed library: \verbatim
+project (geodesictest)
+cmake_minimum_required (VERSION 2.8.7) # required for VS_DOTNET_REFERENCES
+
+find_package (GeographicLib 1.34 REQUIRED COMPONENTS NETGeographicLib)
+
+add_executable (${PROJECT_NAME} example-Geodesic-small.cpp)
+set_target_properties (${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/clr")
+string (REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+string (REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+
+# This is set up for Release builds only.  Change RELEASE to DEBUG for
+# Debug builds.
+get_target_property (_LOC "${GeographicLib_NETGeographicLib_LIBRARIES}"
+  IMPORTED_LOCATION_RELEASE)
+set_target_properties (${PROJECT_NAME} PROPERTIES VS_DOTNET_REFERENCES ${_LOC})
+
+get_target_property (_LIB "${GeographicLib_NETGeographicLib_LIBRARIES}"
+  IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE)
+get_target_property (_LIBTYPE ${_LIB} TYPE)
+if (_LIBTYPE STREQUAL "SHARED_LIBRARY")
+  # On Windows systems, copy the shared library to build directory
+  add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E
+    copy $<TARGET_FILE:${_LIB}> ${CMAKE_CFG_INTDIR}
+    COMMENT "Copying shared library for GeographicLib")
+endif () \endverbatim
+The typical invocation of cmake is \verbatim
+mkdir BUILD
+cd BUILD
+cmake -G "Visual Studio 10" -D CMAKE_PREFIX_PATH=C:/pkg-vc10 ..
+cmake --build . --config Release \endverbatim
+The version of Visual Studio should match that used to build
+NETGeographicLib.  <b>NOTE:</b> With Visual Studio 10, this results in
+warnings such as \verbatim
+warning C4945: 'ExtensionAttribute' : cannot import symbol from ... \endverbatim
+which can be safely(?) ignored.
+
+Running the example with \verbatim
+Release\geodesictest.exe  \endverbatim
+should give \verbatim
+  5551.75940031868 km \endverbatim
+**********************************************************************/
diff --git a/doc/NETGeographicLib1.png b/doc/NETGeographicLib1.png
new file mode 100644
index 0000000..22049cd
Binary files /dev/null and b/doc/NETGeographicLib1.png differ
diff --git a/doc/NETGeographicLib2.png b/doc/NETGeographicLib2.png
new file mode 100644
index 0000000..57e34a6
Binary files /dev/null and b/doc/NETGeographicLib2.png differ
diff --git a/doc/NETGeographicLib3.png b/doc/NETGeographicLib3.png
new file mode 100644
index 0000000..6d4870b
Binary files /dev/null and b/doc/NETGeographicLib3.png differ
diff --git a/doc/doxyfile-c.in b/doc/doxyfile-c.in
new file mode 100644
index 0000000..f77a0b3
--- /dev/null
+++ b/doc/doxyfile-c.in
@@ -0,0 +1,1810 @@
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = "C library for Geodesics"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = @PROJECT_VERSION@
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH        = @PROJECT_SOURCE_DIR@/legacy/C/
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = @PROJECT_SOURCE_DIR@/legacy/C/
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 0
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = @PROJECT_SOURCE_DIR@/legacy/C \
+                         @PROJECT_SOURCE_DIR@/doc/geodesic-c.dox
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c \
+                         *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           = @PROJECT_SOURCE_DIR@/legacy/C
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html/C
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = DOXYGEN
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = html/GeographicLib.tag=..
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = html/C/GeographicLib-C.tag
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/doc/doxyfile-for.in b/doc/doxyfile-for.in
new file mode 100644
index 0000000..47ef530
--- /dev/null
+++ b/doc/doxyfile-for.in
@@ -0,0 +1,1810 @@
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = "Fortran library for Geodesics"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = @PROJECT_VERSION@
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH        = @PROJECT_SOURCE_DIR@/legacy/Fortran/
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = @PROJECT_SOURCE_DIR@/legacy/Fortran/
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = YES
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      = inc=Fortran
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = @PROJECT_SOURCE_DIR@/legacy/Fortran \
+                         @PROJECT_SOURCE_DIR@/doc/geodesic-for.dox
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.for \
+                         *.inc
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           = @PROJECT_SOURCE_DIR@/legacy/Fortran
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           = "sed -e /@cond/,/@endcond/g"
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html/Fortran
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = DOXYGEN
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = html/GeographicLib.tag=..
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = html/Fortran/GeographicLib-for.tag
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/doc/doxyfile-net.in b/doc/doxyfile-net.in
new file mode 100644
index 0000000..b9fedb5
--- /dev/null
+++ b/doc/doxyfile-net.in
@@ -0,0 +1,1811 @@
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = NETGeographicLib
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         = @PROJECT_VERSION@
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH        = @PROJECT_SOURCE_DIR@/dotnet/
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = @PROJECT_SOURCE_DIR@/dotnet/
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = YES
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = @PROJECT_SOURCE_DIR@/dotnet/NETGeographicLib \
+                         @PROJECT_SOURCE_DIR@/doc/NETGeographicLib.dox
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = [A-Za-z]*.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           = @PROJECT_SOURCE_DIR@/dotnet/examples/CS \
+                         @PROJECT_SOURCE_DIR@/dotnet/examples/ManagedCPP \
+                         @PROJECT_SOURCE_DIR@/dotnet/examples/VB
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             = @PROJECT_SOURCE_DIR@/doc
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html/NET
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = YES
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             = DOXYGEN
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = html/GeographicLib.tag=..
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = html/NET/NETGeographicLib.tag
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/doc/doxyfile.in b/doc/doxyfile.in
index 77d3728..448affa 100644
--- a/doc/doxyfile.in
+++ b/doc/doxyfile.in
@@ -1,30 +1,30 @@
-# Doxyfile 1.5.2
-# $Id: feb37f825ed10293802f164515d1004cf0c44b79 $
+# Doxyfile 1.8.2
 
 # This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
+# doxygen (www.doxygen.org) for a project.
 #
-# All text after a hash (#) is considered a comment and will be ignored
+# All text after a hash (#) is considered a comment and will be ignored.
 # The format is:
 #       TAG = value [value, ...]
 # For lists items can also be appended using:
 #       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
+# Values that contain spaces should be placed between quotes (" ").
 
 #---------------------------------------------------------------------------
 # Project related configuration options
 #---------------------------------------------------------------------------
 
-# This tag specifies the encoding used for all characters in the config file that
-# follow. The default is UTF-8 which is also the encoding used for all text before
-# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
-# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
-# possible encodings.
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
 
 DOXYFILE_ENCODING      = UTF-8
 
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
 
 PROJECT_NAME           = GeographicLib
 
@@ -32,7 +32,20 @@ PROJECT_NAME           = GeographicLib
 # This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
-PROJECT_NUMBER         = @GeographicLib_VERSION@
+PROJECT_NUMBER         = @PROJECT_VERSION@
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           =
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
 # base path where the generated documentation will be put.
@@ -55,10 +68,11 @@ CREATE_SUBDIRS         = NO
 # information to generate all constant output in the proper language.
 # The default language is English, other supported languages are:
 # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
 
 OUTPUT_LANGUAGE        = English
 
@@ -112,7 +126,9 @@ FULL_PATH_NAMES        = NO
 # only done if one of the specified strings matches the left-hand part of
 # the path. The tag can be used to show relative paths in the file list.
 # If left blank the directory from which doxygen is run is used as the
-# path to strip.
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
 
 STRIP_FROM_PATH        = @PROJECT_SOURCE_DIR@/
 
@@ -123,10 +139,10 @@ STRIP_FROM_PATH        = @PROJECT_SOURCE_DIR@/
 # definition is used. Otherwise one should specify the include paths that
 # are normally passed to the compiler using the -I flag.
 
-STRIP_FROM_INC_PATH    = @PROJECT_SOURCE_DIR@/include
+STRIP_FROM_INC_PATH    = @PROJECT_SOURCE_DIR@/include/
 
 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
+# (but less readable) file names. This can be useful if your file system
 # doesn't support long names like on DOS, Mac, or CD-ROM.
 
 SHORT_NAMES            = NO
@@ -134,11 +150,19 @@ SHORT_NAMES            = NO
 # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
 # will interpret the first line (until the first dot) of a JavaDoc-style
 # comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
 
 JAVADOC_AUTOBRIEF      = NO
 
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
 # comments) as a brief description. This used to be the default behaviour.
@@ -173,6 +197,13 @@ TAB_SIZE               = 8
 
 ALIASES                =
 
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
 # sources only. Doxygen will then generate output that is more tailored for C.
 # For instance, some of the names that are used will be different. The list
@@ -181,17 +212,58 @@ ALIASES                =
 OPTIMIZE_OUTPUT_FOR_C  = NO
 
 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
 
 OPTIMIZE_OUTPUT_JAVA   = NO
 
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
-# include (a tag file for) the STL sources as input, then you should
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
 # set this tag to YES in order to let doxygen match functions declarations and
 # definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
+# func(std::string) {}). This also makes the inheritance and collaboration
 # diagrams that involve STL classes more complete and accurate.
 
 BUILTIN_STL_SUPPORT    = NO
@@ -201,6 +273,16 @@ BUILTIN_STL_SUPPORT    = NO
 
 CPP_CLI_SUPPORT        = NO
 
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
 # tag is set to YES, then doxygen will reuse the documentation of the first
 # member in the group (if any) for the other members of the group. By default
@@ -216,6 +298,59 @@ DISTRIBUTE_GROUP_DOC   = NO
 
 SUBGROUPING            = YES
 
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 0
+
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
@@ -232,6 +367,11 @@ EXTRACT_ALL            = YES
 
 EXTRACT_PRIVATE        = NO
 
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
 # If the EXTRACT_STATIC tag is set to YES all static members of a file
 # will be included in the documentation.
 
@@ -241,7 +381,7 @@ EXTRACT_STATIC         = YES
 # defined locally in source files will be included in the documentation.
 # If set to NO only classes defined in header files are included.
 
-EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_CLASSES  = NO
 
 # This flag is only useful for Objective-C code. When set to YES local
 # methods, which are defined in the implementation section but not in
@@ -250,6 +390,14 @@ EXTRACT_LOCAL_CLASSES  = YES
 
 EXTRACT_LOCAL_METHODS  = NO
 
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
 # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
 # undocumented members of documented classes, files or namespaces.
 # If set to NO (the default) these members will be included in the
@@ -306,6 +454,12 @@ HIDE_SCOPE_NAMES       = NO
 
 SHOW_INCLUDE_FILES     = YES
 
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
 # is inserted in the documentation for inline members.
 
@@ -325,6 +479,22 @@ SORT_MEMBER_DOCS       = NO
 
 SORT_BRIEF_DOCS        = NO
 
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
 # sorted by fully-qualified names, including namespaces. If set to
 # NO (the default), the class list will be sorted only by class name,
@@ -335,6 +505,15 @@ SORT_BRIEF_DOCS        = NO
 
 SORT_BY_SCOPE_NAME     = NO
 
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
 # The GENERATE_TODOLIST tag can be used to enable (YES) or
 # disable (NO) the todo list. This list is created by putting \todo
 # commands in the documentation.
@@ -365,10 +544,10 @@ GENERATE_DEPRECATEDLIST= YES
 ENABLED_SECTIONS       =
 
 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
+# the initial value of a variable or macro consists of for it to appear in
 # the documentation. If the initializer consists of more lines than specified
 # here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
+# The appearance of the initializer of individual variables and macros in the
 # documentation can be controlled using \showinitializer or \hideinitializer
 # command in the documentation regardless of this setting.
 
@@ -380,15 +559,22 @@ MAX_INITIALIZER_LINES  = 30
 
 SHOW_USED_FILES        = YES
 
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
 
-SHOW_DIRECTORIES       = YES
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
 
 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from the
-# version control system). Doxygen will invoke the program by executing (via
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
 # popen()) the command <command> <input-file>, where <command> is the value of
 # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
 # provided by doxygen. Whatever the program writes to standard output
@@ -396,6 +582,25 @@ SHOW_DIRECTORIES       = YES
 
 FILE_VERSION_FILTER    =
 
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         =
+
 #---------------------------------------------------------------------------
 # configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
@@ -424,7 +629,7 @@ WARN_IF_UNDOCUMENTED   = YES
 
 WARN_IF_DOC_ERROR      = YES
 
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
 # functions that are documented, but have no documentation for their parameters
 # or return value. If set to NO (the default) doxygen will only warn about
 # wrong or incomplete parameter documentation, but not about the absence of
@@ -456,12 +661,16 @@ WARN_LOGFILE           =
 # directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
-INPUT = @PROJECT_SOURCE_DIR@/src @PROJECT_SOURCE_DIR@/include/GeographicLib @PROJECT_SOURCE_DIR@/tools @PROJECT_SOURCE_DIR@/doc/Geographic.doc
+INPUT                  = @PROJECT_SOURCE_DIR@/src \
+                         @PROJECT_SOURCE_DIR@/include/GeographicLib \
+                         @PROJECT_SOURCE_DIR@/tools \
+                         @PROJECT_SOURCE_DIR@/doc/GeographicLib.dox
 
-# This tag can be used to specify the character encoding of the source files that
-# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
-# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
-# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
 
 INPUT_ENCODING         = UTF-8
 
@@ -469,10 +678,12 @@ INPUT_ENCODING         = UTF-8
 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
 # and *.h) to filter out the source-files in the directories. If left
 # blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
 
-FILE_PATTERNS          = *.cpp *.hpp
+FILE_PATTERNS          = [A-Za-z]*.cpp \
+                         [A-Za-z]*.hpp
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories
 # should be searched for input files as well. Possible values are YES and NO.
@@ -480,14 +691,16 @@ FILE_PATTERNS          = *.cpp *.hpp
 
 RECURSIVE              = NO
 
-# The EXCLUDE tag can be used to specify files and/or directories that should
+# The EXCLUDE tag can be used to specify files and/or directories that should be
 # excluded from the INPUT source files. This way you can easily exclude a
 # subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
 
 EXCLUDE                =
 
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
 # from the input.
 
 EXCLUDE_SYMLINKS       = NO
@@ -501,9 +714,10 @@ EXCLUDE_SYMLINKS       = NO
 EXCLUDE_PATTERNS       =
 
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the output.
-# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
-# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
 
 EXCLUDE_SYMBOLS        =
 
@@ -531,24 +745,27 @@ EXAMPLE_RECURSIVE      = NO
 # directories that contain image that are included in the documentation (see
 # the \image command).
 
-IMAGE_PATH             =
+IMAGE_PATH             = @PROJECT_SOURCE_DIR@/doc
 
 # The INPUT_FILTER tag can be used to specify a program that doxygen should
 # invoke to filter for each input file. Doxygen will invoke the filter program
 # by executing (via popen()) the command <filter> <input-file>, where <filter>
 # is the value of the INPUT_FILTER tag, and <input-file> is the name of an
 # input file. Doxygen will then use the output that the filter program writes
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
 # ignored.
 
 INPUT_FILTER           =
 
 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.  Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.  The filters are a list of the form:
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
 # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
 
 FILTER_PATTERNS        =
 
@@ -558,6 +775,14 @@ FILTER_PATTERNS        =
 
 FILTER_SOURCE_FILES    = NO
 
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
 #---------------------------------------------------------------------------
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
@@ -576,17 +801,17 @@ INLINE_SOURCES         = NO
 
 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
 # doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
 
 STRIP_CODE_COMMENTS    = NO
 
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# If the REFERENCED_BY_RELATION tag is set to YES
 # then for each documented function all documented
 # functions referencing it will be listed.
 
 REFERENCED_BY_RELATION = YES
 
-# If the REFERENCES_RELATION tag is set to YES (the default)
+# If the REFERENCES_RELATION tag is set to YES
 # then for each documented function all documented entities
 # called/used by that function will be listed.
 
@@ -595,7 +820,8 @@ REFERENCES_RELATION    = YES
 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
+# link to the source code.
+# Otherwise they will link to the documentation.
 
 REFERENCES_LINK_SOURCE = YES
 
@@ -659,7 +885,14 @@ HTML_FILE_EXTENSION    = .html
 
 # The HTML_HEADER tag can be used to specify a personal HTML header for
 # each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
 
 HTML_HEADER            =
 
@@ -671,22 +904,120 @@ HTML_FOOTER            =
 
 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
 # style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
 
 HTML_STYLESHEET        =
 
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
 
-HTML_ALIGN_MEMBERS     = YES
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
 
 # If the GENERATE_HTMLHELP tag is set to YES, additional index files
 # will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
 # of the generated HTML documentation.
 
 GENERATE_HTMLHELP      = NO
@@ -711,6 +1042,12 @@ HHC_LOCATION           =
 
 GENERATE_CHI           = NO
 
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
 # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
 # controls whether a binary table of contents is generated (YES) or a
 # normal table of contents (NO) in the .chm file.
@@ -722,32 +1059,176 @@ BINARY_TOC             = NO
 
 TOC_EXPAND             = NO
 
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
 
-DISABLE_INDEX          = NO
+GENERATE_QHP           = NO
 
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
 
-ENUM_VALUES_PER_LINE   = 4
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
 
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
 # is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
 
 GENERATE_TREEVIEW      = NO
 
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
 # used to set the initial width (in pixels) of the frame in which the tree
 # is shown.
 
 TREEVIEW_WIDTH         = 250
 
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = YES
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
 #---------------------------------------------------------------------------
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
@@ -765,6 +1246,9 @@ LATEX_OUTPUT           = latex
 
 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
 # invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
 
 LATEX_CMD_NAME         = latex
 
@@ -781,7 +1265,7 @@ MAKEINDEX_CMD_NAME     = makeindex
 COMPACT_LATEX          = NO
 
 # The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
+# by the printer. Possible values are: a4, letter, legal and
 # executive. If left blank a4wide will be used.
 
 PAPER_TYPE             = a4wide
@@ -798,6 +1282,13 @@ EXTRA_PACKAGES         =
 
 LATEX_HEADER           =
 
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
 # is prepared for conversion to pdf (using ps2pdf). The pdf file will
 # contain links (just like the HTML output) instead of page references
@@ -824,6 +1315,19 @@ LATEX_BATCHMODE        = NO
 
 LATEX_HIDE_INDICES     = NO
 
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
 #---------------------------------------------------------------------------
 # configuration options related to the RTF output
 #---------------------------------------------------------------------------
@@ -855,7 +1359,7 @@ COMPACT_RTF            = NO
 
 RTF_HYPERLINKS         = NO
 
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# Load style sheet definitions from file. Syntax is similar to doxygen's
 # config file, i.e. a series of assignments. You only have to provide
 # replacements, missing definitions are set to their default value.
 
@@ -960,8 +1464,10 @@ GENERATE_PERLMOD       = NO
 PERLMOD_LATEX          = NO
 
 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.  This is useful
-# if you want to understand what is going on.  On the other hand, if this
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
 # tag is set to NO the size of the Perl module output will be much smaller
 # and Perl will parse it just the same.
 
@@ -998,7 +1504,7 @@ MACRO_EXPANSION        = NO
 EXPAND_ONLY_PREDEF     = NO
 
 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
 
 SEARCH_INCLUDES        = YES
 
@@ -1028,15 +1534,15 @@ PREDEFINED             = DOXYGEN
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
 # this tag can be used to specify a list of macro names that should be expanded.
 # The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
 
 EXPAND_AS_DEFINED      =
 
 # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
 
 SKIP_FUNCTION_MACROS   = YES
 
@@ -1044,27 +1550,25 @@ SKIP_FUNCTION_MACROS   = YES
 # Configuration::additions related to external references
 #---------------------------------------------------------------------------
 
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-#   TAGFILES = file1 file2 ...
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
 # Adding location for the tag files is done as follows:
-#   TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
 
 TAGFILES               =
 
 # When a file name is specified after GENERATE_TAGFILE, doxygen will create
 # a tag file that is based on the input files it reads.
 
-GENERATE_TAGFILE       = html/Geographic.tag
+GENERATE_TAGFILE       = html/GeographicLib.tag
 
 # If the ALLEXTERNALS tag is set to YES all external classes will be listed
 # in the class index. If set to NO only the inherited external classes
@@ -1090,17 +1594,17 @@ PERL_PATH              = /usr/bin/perl
 # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
 # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
 # or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
 
 CLASS_DIAGRAMS         = YES
 
 # You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
-# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
-# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
-# be found in the default search path.
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
 
 MSCGEN_PATH            =
 
@@ -1117,10 +1621,38 @@ HIDE_UNDOC_RELATIONS   = YES
 
 HAVE_DOT               = NO
 
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
 # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
 # will generate a graph for each documented class showing the direct and
 # indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
+# CLASS_DIAGRAMS tag to NO.
 
 CLASS_GRAPH            = YES
 
@@ -1142,6 +1674,15 @@ GROUP_GRAPHS           = YES
 
 UML_LOOK               = NO
 
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
 # If set to YES, the inheritance and collaboration graphs will show the
 # relations between templates and their instances.
 
@@ -1161,28 +1702,28 @@ INCLUDE_GRAPH          = YES
 
 INCLUDED_BY_GRAPH      = YES
 
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
 
 CALL_GRAPH             = NO
 
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a caller dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
 
 CALLER_GRAPH           = NO
 
 # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
+# will generate a graphical hierarchy of all classes instead of a textual one.
 
 GRAPHICAL_HIERARCHY    = YES
 
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
 # then doxygen will show the dependencies a directory has on other directories
 # in a graphical way. The dependency relations are determined by the #include
 # relations between the files in the directories.
@@ -1190,11 +1731,22 @@ GRAPHICAL_HIERARCHY    = YES
 DIRECTORY_GRAPH        = YES
 
 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
 
 DOT_IMAGE_FORMAT       = png
 
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
 # The tag DOT_PATH can be used to specify the path where the dot tool can be
 # found. If left blank, it is assumed the dot tool can be found in the path.
 
@@ -1206,19 +1758,37 @@ DOT_PATH               =
 
 DOTFILE_DIRS           =
 
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
 # nodes that will be shown in the graph. If the number of nodes in a graph
 # becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen will always
-# show the root nodes and its direct children regardless of this setting.
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
 
 DOT_GRAPH_MAX_NODES    = 50
 
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
 
 DOT_TRANSPARENT        = NO
 
@@ -1240,12 +1810,3 @@ GENERATE_LEGEND        = YES
 # the various graphs.
 
 DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
diff --git a/doc/gauss-krueger-convergence-scale.png b/doc/gauss-krueger-convergence-scale.png
new file mode 100644
index 0000000..1a3172b
Binary files /dev/null and b/doc/gauss-krueger-convergence-scale.png differ
diff --git a/doc/gauss-krueger-error.png b/doc/gauss-krueger-error.png
new file mode 100644
index 0000000..cd397e6
Binary files /dev/null and b/doc/gauss-krueger-error.png differ
diff --git a/doc/gauss-krueger-graticule-a.png b/doc/gauss-krueger-graticule-a.png
new file mode 100644
index 0000000..bffd832
Binary files /dev/null and b/doc/gauss-krueger-graticule-a.png differ
diff --git a/doc/gauss-krueger-graticule.png b/doc/gauss-krueger-graticule.png
new file mode 100644
index 0000000..af793ea
Binary files /dev/null and b/doc/gauss-krueger-graticule.png differ
diff --git a/doc/gauss-schreiber-graticule-a.png b/doc/gauss-schreiber-graticule-a.png
new file mode 100644
index 0000000..51a5e9d
Binary files /dev/null and b/doc/gauss-schreiber-graticule-a.png differ
diff --git a/doc/geodesic-c.dox b/doc/geodesic-c.dox
new file mode 100644
index 0000000..d07fb61
--- /dev/null
+++ b/doc/geodesic-c.dox
@@ -0,0 +1,118 @@
+// -*- text -*-
+/**
+ * \file geodesic-c.dox
+ * \brief Documentation for geodesic routines implemented in C
+ *
+ * Written by Charles Karney <charles at karney.com> and licensed under the
+ * MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+/**
+\mainpage Geodesic routines implemented in C
+\author Charles F. F. Karney (charles at karney.com)
+\version 1.32
+
+\section abstract Abstract
+
+This is a C implementation of the geodesic algorithms from <a
+href="http://geographiclib.sf.net">GeographicLib</a>.  This is a
+self-contained library (requiring only the standard C math library)
+which makes it easy to do geodesic computations for an ellipsoid of
+revolution in a C program.  It uses ANSI C as described in
+B. W. Kernigan and D. M. Ritchie, The C Programming Language, 2nd
+Ed. (Prentice Hall, 1988), and so should compile correctly with just
+about any C compiler.
+
+\section download Downloading the source
+
+The C library is part of %GeographicLib which available for download at
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.32.tar.gz">
+  GeographicLib-1.32.tar.gz</a>
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.32.zip">
+  GeographicLib-1.32.zip</a>
+.
+as either a compressed tar file (tar.gz) or a zip file.  After unpacking
+the source, the C library can be found in GeographicLib-1.32/legacy/C.
+The library consists of two files geodesic.c and geodesic.h.
+
+The library is also included as part of
+<a href="http://trac.osgeo.org/proj/">proj.4</a> starting with version
+4.9.0, where is used as the computational backend for
+<a href="http://trac.osgeo.org/proj/wiki/man_geod">geod(1)</a>.
+Instructions for how to use the library via proj.4 are given below.
+
+\section doc Library documentation
+
+The interface to the library is documented via doxygen in the header
+file.  To access this, see geodesic.h.
+
+\section samples Sample programs
+
+Also included are 3 small test programs:
+ - direct.c is a simple command line utility for solving the
+   direct geodesic problem;
+ - inverse.c is a simple command line utility for solving the
+   inverse geodesic problem;
+ - planimeter.c is a simple command line utility for computing the
+   area of a geodesic polygon given its vertices.
+ .
+Here, for example, is inverse.c
+\include inverse.c
+To compile, link, and run this, you would typically use \verbatim
+cc -o inverse inverse.c geodesic.c -lm
+echo 30 0 29.5 179.5 | ./inverse \endverbatim
+These sample programs can also be built with the supplied cmake file,
+CMakeLists.txt, as follows \verbatim
+mkdir BUILD
+cd BUILD
+cmake ..
+make
+echo 30 0 29.5 179.5 | ./inverse \endverbatim
+
+Alternatively, if you have proj.4 installed, you can compile and link
+with \verbatim
+cc -c inverse.c
+cc -o inverse inverse.o -lproj
+echo 30 0 29.5 179.5 | ./inverse \endverbatim
+If proj.4 is installed, e.g., in /usr/local, you might have to use
+\verbatim
+cc -c -I/usr/local/include inverse.c
+cc -o inverse inverse.o -lproj -L/usr/local/lib -Wl,-rpath=/usr/local/lib
+echo 30 0 29.5 179.5 | ./inverse \endverbatim
+
+\section library Using the library
+
+- Put @verbatim
+  #include "geodesic.h" @endverbatim
+  in your source code.  If you are using the library via proj.4, change
+  this to @verbatim
+  #include <geodesic.h> @endverbatim
+- make calls to the geodesic routines from your code.  The interface to
+  the library is documented in geodesic.h.
+- Compile and link as described above.
+
+\section external External links
+
+- These algorithms are derived in C. F. F. Karney,
+  <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+  Algorithms for geodesics</a>,
+  J. Geodesy <b>87</b>, 43--55 (2013)
+  (<a href="http://geographiclib.sf.net/geod-addenda.html"> addenda</a>).
+- A longer paper on geodesics: C. F. F. Karney,
+   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
+   on an ellipsoid of revolution</a>,
+   Feb. 2011
+   (<a href="http://geographiclib.sf.net/geod-addenda.html#geod-errata">
+   errata</a>).
+- <a href="http://geographiclib.sf.net">The GeographicLib web site</a>.
+- <a href="../index.html">The C++ library</a>.
+- <a href="../java/index.html">The Java library</a>.
+- <a href="../Fortran/index.html">The Fortran library</a>.
+- Documentation on the C++ classes: GeographicLib::Geodesic,
+  GeographicLib::GeodesicLine, GeographicLib::PolygonArea.
+- The section in the %GeographicLib documentation on geodesics: \ref
+  geodesic.
+- <a href="http://geographiclib.sf.net/geodesic-papers/biblio.html">
+  An online geodesic bibliography</a>.
+**********************************************************************/
diff --git a/doc/geodesic-for.dox b/doc/geodesic-for.dox
new file mode 100644
index 0000000..1ebc598
--- /dev/null
+++ b/doc/geodesic-for.dox
@@ -0,0 +1,100 @@
+// -*- text -*-
+/**
+ * \file geodesic-for.dox
+ * \brief Documentation for geodesic routines implemented in Fortran
+ *
+ * Written by Charles Karney <charles at karney.com> and licensed under the
+ * MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+/**
+\mainpage Geodesic routines implemented in Fortran
+\author Charles F. F. Karney (charles at karney.com)
+\version 1.31
+
+\section abstract Abstract
+
+This is a Fortran implementation of the geodesic algorithms from <a
+href="http://geographiclib.sf.net">GeographicLib</a>.  This is a
+self-contained library which makes it easy to do geodesic computations
+for an ellipsoid of revolution in a Fortran program.  It is written in
+Fortran 77 (avoiding features which are now deprecated) and should
+compile correctly with just about any Fortran compiler.
+
+\section download Downloading the source
+
+The Fortran library is part of %GeographicLib which available for download at
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.31.tar.gz">
+  GeographicLib-1.31.tar.gz</a>
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.31.zip">
+  GeographicLib-1.31.zip</a>
+.
+as either a compressed tar file (tar.gz) or a zip file.  After unpacking
+the source, the Fortran library can be found in
+GeographicLib-1.31/legacy/Fortran.  The library consists of the file
+geodesic.for.
+
+\section doc Library documentation
+
+The interface to the library is documented via doxygen in the source
+file.  To access this, see geodesic.for.
+
+\section samples Sample programs
+
+Also included are 3 small test programs:
+ - geoddirect.for is a simple command line utility for solving the
+   direct geodesic problem;
+ - geodinverse.for is a simple command line utility for solving the
+   inverse geodesic problem;
+ - planimeter.for is a simple command line utility for computing the
+   area of a geodesic polygon given its vertices.
+ .
+Here, for example, is geodinverse.for
+\include geodinverse.for
+To compile, link, and run this, you would typically use \verbatim
+f95 -o geodinverse geodinverse.for geodesic.for
+echo 30 0 29.5 179.5 | ./geodinverse \endverbatim
+These sample programs can also be built with the supplied cmake file,
+CMakeLists.txt, as follows \verbatim
+mkdir BUILD
+cd BUILD
+cmake ..
+make
+echo 30 0 29.5 179.5 | ./geodinverse \endverbatim
+
+\section library Using the library
+
+- Optionall put @verbatim
+  include "geodesic.inc" @endverbatim
+  in declaration section of your subroutines.
+- make calls to the geodesic routines from your code.  The interface to
+  the library is documented in geodesic.for.
+- Compile and link as described above.
+
+\section external External links
+
+- These algorithms are derived in C. F. F. Karney,
+  <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+  Algorithms for geodesics</a>,
+  J. Geodesy <b>87</b>, 43--55 (2013)
+  (<a href="http://geographiclib.sf.net/geod-addenda.html"> addenda</a>).
+- A longer paper on geodesics: C. F. F. Karney,
+   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
+   on an ellipsoid of revolution</a>,
+   Feb. 2011
+   (<a href="http://geographiclib.sf.net/geod-addenda.html#geod-errata">
+   errata</a>).
+- <a href="http://geographiclib.sf.net">The GeographicLib web site</a>.
+- <a href="../index.html">The C++ library</a>.
+- <a href="../C/index.html">The C library</a>.
+- <a href="../java/index.html">The Java library</a>.
+- Documentation on the C++ classes: GeographicLib::Geodesic,
+  GeographicLib::GeodesicLine, GeographicLib::PolygonArea.
+- The section in the %GeographicLib documentation on geodesics: \ref
+  geodesic.
+- <a href="http://geographiclib.sf.net/geodesic-papers/biblio.html">
+  An online geodesic bibliography</a>.
+**********************************************************************/
+
+**********************************************************************/
diff --git a/doc/geodseries30.html b/doc/geodseries30.html
index 82f5f82..9305117 100644
--- a/doc/geodseries30.html
+++ b/doc/geodseries30.html
@@ -1,6 +1,5 @@
 <html>
   <head>
-    <!-- $Id: 257134e59663a19309d7799554235047d1b3381f $ -->
     <title>
       Series for geodesic calculations
     </title>
@@ -12,17 +11,20 @@ This extends the series given
 <a href="geodesic.html#geodseries">here</a> to 30th order in the
 flattening.  See
     <blockquote>
-      Charles F. F. Karney,
-      <a href="http://arxiv.org/abs/1102.1215">Geodesics
-        on an ellipsoid of revolution</a>,
-      Feb. 2011; preprint
-      <a href="http://arxiv.org/abs/1102.1215">arxiv:1102.1215</a>;
-      resource page
-      <a href="http://geographiclib.sf.net/geod.html">geod.html</a>.
+      Charles F. F. Karney,<br>
+      <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+	<i>Algorithms for geodesics</i></a>,<br>
+      J. Geodesy <b>87</b>(1), 43–55 (Jan. 2013);<br>
+      DOI:
+      <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+	10.1007/s00190-012-0578-z</a>
+      (<a href="http://dx.doi.org/10.1007/s00190-012-0578-z">pdf</a>);
+      addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+	geod-addenda.html</a>.
     </blockquote>
 
     <pre>
-// Generated by Maxima on 2010-05-01 06:36:46-04:00
+// Generated by Maxima on 2012-10-19 10:41:58-04:00
 
 A1 = (1 + 1/4 * eps^2
         + 1/64 * eps^4
@@ -1245,471 +1247,471 @@ C3[28] = + (4709784852685/36028797018963968 - 6593698793759/18014398509481984*n)
         + 6593698793759/36028797018963968 * eps^29;
 C3[29] = + 125280277081421/1044835113549955072 * eps^29;
 
-C4[0] = + (2/3 - 1/15*ep2 + 4/105*ep2^2 - 8/315*ep2^3 + 64/3465*ep2^4 - 128/9009*ep2^5 + 512/45045*ep2^6 - 1024/109395*ep2^7 + 16384/2078505*ep2^8 - 32768/4849845*ep2^9 + 131072/22309287*ep2^10 - 262144/50702925*ep2^11 + 2097152/456326325*ep2^12 - 4194304/1017958725*ep2^13 + 16777216/4508102925*ep2^14 - 33554432/9917826435*ep2^15 + 1073741824/347123925225*ep2^16 - 2147483648/755505013725*ep2^17 + 8589934592/3273855059475*ep2^18 - 17179869184/7064634602025*ep2^19 + 137438953472/6075585757 [...]
-        - (1/20 - 1/35*ep2 + 2/105*ep2^2 - 16/1155*ep2^3 + 32/3003*ep2^4 - 128/15015*ep2^5 + 256/36465*ep2^6 - 4096/692835*ep2^7 + 8192/1616615*ep2^8 - 32768/7436429*ep2^9 + 65536/16900975*ep2^10 - 524288/152108775*ep2^11 + 1048576/339319575*ep2^12 - 4194304/1502700975*ep2^13 + 8388608/3305942145*ep2^14 - 268435456/115707975075*ep2^15 + 536870912/251835004575*ep2^16 - 2147483648/1091285019825*ep2^17 + 4294967296/2354878200675*ep2^18 - 34359738368/20251952525805*ep2^19 + 68719476736/43397 [...]
-        + (1/42 - 1/63*ep2 + 8/693*ep2^2 - 80/9009*ep2^3 + 64/9009*ep2^4 - 128/21879*ep2^5 + 2048/415701*ep2^6 - 4096/969969*ep2^7 + 81920/22309287*ep2^8 - 32768/10140585*ep2^9 + 262144/91265265*ep2^10 - 524288/203591745*ep2^11 + 2097152/901620585*ep2^12 - 4194304/1983565287*ep2^13 + 134217728/69424785045*ep2^14 - 268435456/151101002745*ep2^15 + 1073741824/654771011895*ep2^16 - 2147483648/1412926920405*ep2^17 + 17179869184/12151171515483*ep2^18 - 34359738368/26038224676035*ep2^19 + 13743 [...]
-        - (1/72 - 1/99*ep2 + 10/1287*ep2^2 - 8/1287*ep2^3 + 112/21879*ep2^4 - 1792/415701*ep2^5 + 512/138567*ep2^6 - 10240/3187041*ep2^7 + 4096/1448655*ep2^8 - 32768/13037895*ep2^9 + 65536/29084535*ep2^10 - 1835008/901620585*ep2^11 + 3670016/1983565287*ep2^12 - 16777216/9917826435*ep2^13 + 33554432/21585857535*ep2^14 - 134217728/93538715985*ep2^15 + 268435456/201846702915*ep2^16 - 2147483648/1735881645069*ep2^17 + 30064771072/26038224676035*ep2^18 - 120259084288/111254232706695*ep2^19 +  [...]
-        + (1/110 - 1/143*ep2 + 4/715*ep2^2 - 56/12155*ep2^3 + 896/230945*ep2^4 - 768/230945*ep2^5 + 3072/1062347*ep2^6 - 6144/2414425*ep2^7 + 16384/7243275*ep2^8 - 32768/16158075*ep2^9 + 917504/500900325*ep2^10 - 1835008/1101980715*ep2^11 + 8388608/5509903575*ep2^12 - 16777216/11992143075*ep2^13 + 67108864/51965953325*ep2^14 - 134217728/112137057175*ep2^15 + 1073741824/964378691705*ep2^16 - 15032385536/14465680375575*ep2^17 + 60129542144/61807907059275*ep2^18 - 17179869184/18811102148475 [...]
-        - (1/156 - 1/195*ep2 + 14/3315*ep2^2 - 224/62985*ep2^3 + 64/20995*ep2^4 - 256/96577*ep2^5 + 5632/2414425*ep2^6 - 45056/21729825*ep2^7 + 90112/48474225*ep2^8 - 2523136/1502700975*ep2^9 + 458752/300540195*ep2^10 - 2097152/1502700975*ep2^11 + 4194304/3270584475*ep2^12 - 16777216/14172532725*ep2^13 + 33554432/30582833775*ep2^14 - 268435456/263012370465*ep2^15 + 3758096384/3945185556975*ep2^16 - 165356240896/185423721177825*ep2^17 + 47244640256/56433306445425*ep2^18 - 755914244096/959 [...]
-        + (1/210 - 1/255*ep2 + 16/4845*ep2^2 - 32/11305*ep2^3 + 128/52003*ep2^4 - 2816/1300075*ep2^5 + 22528/11700675*ep2^6 - 585728/339319575*ep2^7 + 2342912/1502700975*ep2^8 - 425984/300540195*ep2^9 + 13631488/10518906825*ep2^10 - 27262976/22894091325*ep2^11 + 8388608/7631363775*ep2^12 - 16777216/16467679725*ep2^13 + 134217728/141622045635*ep2^14 - 268435456/303475812075*ep2^15 + 11811160064/14263363167525*ep2^16 - 23622320128/30387165009075*ep2^17 + 377957122048/516581805154275*ep2^18 [...]
-        - (1/272 - 1/323*ep2 + 6/2261*ep2^2 - 120/52003*ep2^3 + 528/260015*ep2^4 - 1408/780045*ep2^5 + 36608/22621305*ep2^6 - 146432/100180065*ep2^7 + 26624/20036013*ep2^8 - 851968/701260455*ep2^9 + 1703936/1526272755*ep2^10 - 524288/508757585*ep2^11 + 1048576/1097845315*ep2^12 - 8388608/9441469709*ep2^13 + 16777216/20231720805*ep2^14 - 738197504/950890877835*ep2^15 + 1476395008/2025811000605*ep2^16 - 23622320128/34438787010285*ep2^17 + 236223201280/365051142309021*ep2^18 - 223338299392/ [...]
-        + (1/342 - 1/399*ep2 + 20/9177*ep2^2 - 88/45885*ep2^3 + 704/412965*ep2^4 - 18304/11975985*ep2^5 + 73216/53036505*ep2^6 - 13312/10607301*ep2^7 + 425984/371255535*ep2^8 - 14483456/13736454795*ep2^9 + 4456448/4578818265*ep2^10 - 8912896/9880607835*ep2^11 + 71303168/84973227381*ep2^12 - 142606336/182085487245*ep2^13 + 6274678784/8558017900515*ep2^14 - 12549357568/18232299005445*ep2^15 + 11811160064/18232299005445*ep2^16 - 118111600640/193262369457717*ep2^17 + 111669149696/19326236945 [...]
-        - (1/420 - 1/483*ep2 + 22/12075*ep2^2 - 176/108675*ep2^3 + 4576/3151575*ep2^4 - 18304/13956975*ep2^5 + 3328/2791395*ep2^6 - 106496/97698825*ep2^7 + 3620864/3614856525*ep2^8 - 1114112/1204952175*ep2^9 + 42336256/49403039175*ep2^10 - 338690048/424866136905*ep2^11 + 677380096/910427436225*ep2^12 - 29804724224/42790089502575*ep2^13 + 59609448448/91161495027225*ep2^14 - 56103010304/91161495027225*ep2^15 + 112206020608/193262369457717*ep2^16 - 530428461056/966311847288585*ep2^17 + 5583 [...]
-        + (1/506 - 1/575*ep2 + 8/5175*ep2^2 - 208/150075*ep2^3 + 5824/4652325*ep2^4 - 11648/10235115*ep2^5 + 53248/51175575*ep2^6 - 1810432/1893496275*ep2^7 + 557056/631165425*ep2^8 - 21168128/25877782425*ep2^9 + 169345024/222548928855*ep2^10 - 2370830336/3338233932825*ep2^11 + 9483321344/14263363167525*ep2^12 - 2709520384/4341023572725*ep2^13 + 2550136832/4341023572725*ep2^14 - 5100273664/9202969974177*ep2^15 + 265214230528/506163348579735*ep2^16 - 27917287424/56240372064415*ep2^17 + 22 [...]
-        - (1/600 - 1/675*ep2 + 26/19575*ep2^2 - 728/606825*ep2^3 + 1456/1335015*ep2^4 - 6656/6675075*ep2^5 + 226304/246977775*ep2^6 - 69632/82325925*ep2^7 + 2646016/3375362925*ep2^8 - 21168128/29028121155*ep2^9 + 296353792/435421817325*ep2^10 - 1185415168/1860438674025*ep2^11 + 7789871104/13023070718175*ep2^12 - 7331643392/13023070718175*ep2^13 + 14663286784/27608909922531*ep2^14 - 762490912768/1518490045739205*ep2^15 + 80262201344/168721116193245*ep2^16 - 642097610752/1422077979343065*e [...]
-        + (1/702 - 1/783*ep2 + 28/24273*ep2^2 - 280/267003*ep2^3 + 256/267003*ep2^4 - 8704/9879111*ep2^5 + 34816/42809481*ep2^6 - 1323008/1755188721*ep2^7 + 52920320/75473115003*ep2^8 - 148176896/226419345009*ep2^9 + 592707584/967428110493*ep2^10 - 3894935552/6771996773451*ep2^11 + 3665821696/6771996773451*ep2^12 - 183291084800/358915828992903*ep2^13 + 146632867840/303698009147841*ep2^14 - 15435038720/33744223238649*ep2^15 + 123480309760/284415595868613*ep2^16 - 246960619520/598253494758 [...]
-        - (1/812 - 1/899*ep2 + 10/9889*ep2^2 - 64/69223*ep2^3 + 2176/2561251*ep2^4 - 26112/33296263*ep2^5 + 992256/1365146783*ep2^6 - 39690240/58701311669*ep2^7 + 5292032/8385901667*ep2^8 - 21168128/35830670759*ep2^9 + 973733888/1755702867191*ep2^10 - 916455424/1755702867191*ep2^11 + 45822771200/93052251961123*ep2^12 - 36658216960/78736520890181*ep2^13 + 34728837120/78736520890181*ep2^14 - 277830696960/663636390360097*ep2^15 + 555661393920/1395924821102273*ep2^16) * k2^13
-        + (1/930 - 1/1023*ep2 + 32/35805*ep2^2 - 1088/1324785*ep2^3 + 4352/5740735*ep2^4 - 165376/235370135*ep2^5 + 1323008/2024183161*ep2^6 - 2646016/4337535345*ep2^7 + 10584064/18533105565*ep2^8 - 486866944/908122172685*ep2^9 + 458227712/908122172685*ep2^10 - 4582277120/9626095030461*ep2^11 + 3665821696/8145157333467*ep2^12 - 1157627904/2715052444489*ep2^13 + 9261023232/22884013460693*ep2^14 - 537139347456/1395924821102273*ep2^15) * k2^14
-        - (1/1056 - 1/1155*ep2 + 34/42735*ep2^2 - 136/185185*ep2^3 + 5168/7592585*ep2^4 - 41344/65296231*ep2^5 + 82688/139920495*ep2^6 - 330752/597842115*ep2^7 + 15214592/29294263635*ep2^8 - 14319616/29294263635*ep2^9 + 143196160/310519194531*ep2^10 - 114556928/262747010757*ep2^11 + 36175872/87582336919*ep2^12 - 289406976/738193982603*ep2^13 + 16785604608/45029832938783*ep2^14) * k2^15
-        + (1/1190 - 1/1295*ep2 + 12/16835*ep2^2 - 456/690235*ep2^3 + 3648/5936021*ep2^4 - 2432/4240015*ep2^5 + 107008/199280705*ep2^6 - 4922368/9764754545*ep2^7 + 78757888/166000827265*ep2^8 - 787578880/1759608769009*ep2^9 + 57278464/135354520693*ep2^10 - 54263808/135354520693*ep2^11 + 434110464/1140845245841*ep2^12 - 25178406912/69591559996301*ep2^13) * k2^16
-        - (1/1332 - 1/1443*ep2 + 38/59163*ep2^2 - 1520/2544009*ep2^3 + 4256/7632027*ep2^4 - 187264/358705269*ep2^5 + 1230592/2510936883*ep2^6 - 19689472/42685927011*ep2^7 + 984473600/2262354131583*ep2^8 - 71598080/174027240891*ep2^9 + 7536640/19336360099*ep2^10 - 60293120/162977892263*ep2^11 + 3497000960/9941651428043*ep2^12) * k2^17
-        + (1/1482 - 1/1599*ep2 + 40/68757*ep2^2 - 112/206271*ep2^3 + 4928/9694737*ep2^4 - 32384/67863159*ep2^5 + 518144/1153673703*ep2^6 - 25907200/61144706259*ep2^7 + 1884160/4703438943*ep2^8 - 3768320/9929482213*ep2^9 + 30146560/83691350081*ep2^10 - 1748500480/5105172354941*ep2^11) * k2^18
-        - (1/1640 - 1/1763*ep2 + 14/26445*ep2^2 - 616/1242915*ep2^3 + 4048/8700405*ep2^4 - 64768/147906885*ep2^5 + 647680/1567812981*ep2^6 - 612352/1567812981*ep2^7 + 3674112/9929482213*ep2^8 - 29392896/83691350081*ep2^9 + 1704787968/5105172354941*ep2^10) * k2^19
-        + (1/1806 - 1/1935*ep2 + 44/90945*ep2^2 - 2024/4456305*ep2^3 + 32384/75757185*ep2^4 - 323840/803026161*ep2^5 + 306176/803026161*ep2^6 - 612352/1695277451*ep2^7 + 4898816/14288767087*ep2^8 - 284131328/871614792307*ep2^9) * k2^20
-        - (1/1980 - 1/2115*ep2 + 46/103635*ep2^2 - 736/1761795*ep2^3 + 7360/18675027*ep2^4 - 76544/205425297*ep2^5 + 153088/433675627*ep2^6 - 1224704/3655265999*ep2^7 + 71032832/222971225939*ep2^8) * k2^21
-        + (1/2162 - 1/2303*ep2 + 16/39151*ep2^2 - 800/2075003*ep2^3 + 8320/22825033*ep2^4 - 149760/433675627*ep2^5 + 1198080/3655265999*ep2^6 - 69488640/222971225939*ep2^7) * k2^22
-        - (1/2352 - 1/2499*ep2 + 50/132447*ep2^2 - 520/1456917*ep2^3 + 3120/9227141*ep2^4 - 24960/77771617*ep2^5 + 1447680/4744068637*ep2^6) * k2^23
-        + (1/2550 - 1/2703*ep2 + 52/148665*ep2^2 - 312/941545*ep2^3 + 17472/55551155*ep2^4 - 1013376/3388620455*ep2^5) * k2^24
-        - (1/2756 - 1/2915*ep2 + 18/55385*ep2^2 - 1008/3267715*ep2^3 + 58464/199330615*ep2^4) * k2^25
-        + (1/2970 - 1/3135*ep2 + 56/184965*ep2^2 - 3248/11282865*ep2^3) * k2^26
-        - (1/3192 - 1/3363*ep2 + 58/205143*ep2^2) * k2^27
-        + (1/3422 - 1/3599*ep2) * k2^28
-        - 1/3660 * k2^29;
-C4[1] = + (1/180 - 1/315*ep2 + 2/945*ep2^2 - 16/10395*ep2^3 + 32/27027*ep2^4 - 128/135135*ep2^5 + 256/328185*ep2^6 - 4096/6235515*ep2^7 + 8192/14549535*ep2^8 - 32768/66927861*ep2^9 + 65536/152108775*ep2^10 - 524288/1368978975*ep2^11 + 1048576/3053876175*ep2^12 - 4194304/13524308775*ep2^13 + 8388608/29753479305*ep2^14 - 268435456/1041371775675*ep2^15 + 536870912/2266515041175*ep2^16 - 2147483648/9821565178425*ep2^17 + 4294967296/21193903806075*ep2^18 - 34359738368/182267572732245*ep2^19 + [...]
-        - (1/252 - 1/378*ep2 + 4/2079*ep2^2 - 40/27027*ep2^3 + 32/27027*ep2^4 - 64/65637*ep2^5 + 1024/1247103*ep2^6 - 2048/2909907*ep2^7 + 40960/66927861*ep2^8 - 16384/30421755*ep2^9 + 131072/273795795*ep2^10 - 262144/610775235*ep2^11 + 1048576/2704861755*ep2^12 - 2097152/5950695861*ep2^13 + 67108864/208274355135*ep2^14 - 134217728/453303008235*ep2^15 + 536870912/1964313035685*ep2^16 - 1073741824/4238780761215*ep2^17 + 8589934592/36453514546449*ep2^18 - 17179869184/78114674028105*ep2^19  [...]
-        + (1/360 - 1/495*ep2 + 2/1287*ep2^2 - 8/6435*ep2^3 + 112/109395*ep2^4 - 1792/2078505*ep2^5 + 512/692835*ep2^6 - 2048/3187041*ep2^7 + 4096/7243275*ep2^8 - 32768/65189475*ep2^9 + 65536/145422675*ep2^10 - 1835008/4508102925*ep2^11 + 3670016/9917826435*ep2^12 - 16777216/49589132175*ep2^13 + 33554432/107929287675*ep2^14 - 134217728/467693579925*ep2^15 + 268435456/1009233514575*ep2^16 - 2147483648/8679408225345*ep2^17 + 30064771072/130191123380175*ep2^18 - 120259084288/556271163533475* [...]
-        - (1/495 - 2/1287*ep2 + 8/6435*ep2^2 - 112/109395*ep2^3 + 1792/2078505*ep2^4 - 512/692835*ep2^5 + 2048/3187041*ep2^6 - 4096/7243275*ep2^7 + 32768/65189475*ep2^8 - 65536/145422675*ep2^9 + 1835008/4508102925*ep2^10 - 3670016/9917826435*ep2^11 + 16777216/49589132175*ep2^12 - 33554432/107929287675*ep2^13 + 134217728/467693579925*ep2^14 - 268435456/1009233514575*ep2^15 + 2147483648/8679408225345*ep2^16 - 30064771072/130191123380175*ep2^17 + 120259084288/556271163533475*ep2^18 - 343597 [...]
-        + (5/3276 - 1/819*ep2 + 2/1989*ep2^2 - 32/37791*ep2^3 + 64/88179*ep2^4 - 1280/2028117*ep2^5 + 5632/10140585*ep2^6 - 45056/91265265*ep2^7 + 90112/203591745*ep2^8 - 360448/901620585*ep2^9 + 65536/180324117*ep2^10 - 2097152/6311344095*ep2^11 + 4194304/13736454795*ep2^12 - 16777216/59524637445*ep2^13 + 33554432/128447901855*ep2^14 - 268435456/1104651955953*ep2^15 + 536870912/2367111334185*ep2^16 - 23622320128/111254232706695*ep2^17 + 47244640256/237019887070785*ep2^18 - 755914244096/ [...]
-        - (1/840 - 1/1020*ep2 + 4/4845*ep2^2 - 8/11305*ep2^3 + 32/52003*ep2^4 - 704/1300075*ep2^5 + 5632/11700675*ep2^6 - 146432/339319575*ep2^7 + 585728/1502700975*ep2^8 - 106496/300540195*ep2^9 + 3407872/10518906825*ep2^10 - 6815744/22894091325*ep2^11 + 2097152/7631363775*ep2^12 - 4194304/16467679725*ep2^13 + 33554432/141622045635*ep2^14 - 67108864/303475812075*ep2^15 + 2952790016/14263363167525*ep2^16 - 5905580032/30387165009075*ep2^17 + 94489280512/516581805154275*ep2^18 - 1889785610 [...]
-        + (7/7344 - 7/8721*ep2 + 2/2907*ep2^2 - 40/66861*ep2^3 + 176/334305*ep2^4 - 1408/3008745*ep2^5 + 36608/87253605*ep2^6 - 1025024/2704861755*ep2^7 + 186368/540972351*ep2^8 - 851968/2704861755*ep2^9 + 1703936/5887052055*ep2^10 - 524288/1962350685*ep2^11 + 1048576/4234546215*ep2^12 - 8388608/36417097449*ep2^13 + 117440512/546256461735*ep2^14 - 5167382528/25674053701545*ep2^15 + 1476395008/7813842430905*ep2^16 - 23622320128/132835321325385*ep2^17 + 236223201280/1408054406049081*ep2^18 [...]
-        - (2/2565 - 4/5985*ep2 + 16/27531*ep2^2 - 352/688275*ep2^3 + 2816/6194475*ep2^4 - 73216/179639775*ep2^5 + 292864/795547575*ep2^6 - 53248/159109515*ep2^7 + 1703936/5568833025*ep2^8 - 57933824/206046821925*ep2^9 + 17825792/68682273975*ep2^10 - 35651584/148209117525*ep2^11 + 285212672/1274598410715*ep2^12 - 570425344/2731282308675*ep2^13 + 25098715136/128370268507725*ep2^14 - 50197430272/273484485081675*ep2^15 + 47244640256/273484485081675*ep2^16 - 94489280512/579787108373151*ep2^17 [...]
-        + (1/1540 - 1/1771*ep2 + 2/4025*ep2^2 - 16/36225*ep2^3 + 416/1050525*ep2^4 - 1664/4652325*ep2^5 + 3328/10235115*ep2^6 - 106496/358229025*ep2^7 + 3620864/13254473925*ep2^8 - 1114112/4418157975*ep2^9 + 42336256/181144476975*ep2^10 - 338690048/1557842501985*ep2^11 + 677380096/3338233932825*ep2^12 - 2709520384/14263363167525*ep2^13 + 5419040768/30387165009075*ep2^14 - 5100273664/30387165009075*ep2^15 + 10200547328/64420789819239*ep2^16 - 530428461056/3543143440058145*ep2^17 + 5583457 [...]
-        - (5/9108 - 1/2070*ep2 + 4/9315*ep2^2 - 104/270135*ep2^3 + 2912/8374185*ep2^4 - 5824/18423207*ep2^5 + 26624/92116035*ep2^6 - 905216/3408293295*ep2^7 + 278528/1136097765*ep2^8 - 10584064/46580008365*ep2^9 + 84672512/400588071939*ep2^10 - 1185415168/6008821079085*ep2^11 + 4741660672/25674053701545*ep2^12 - 1354760192/7813842430905*ep2^13 + 1275068416/7813842430905*ep2^14 - 12750684160/82826729767593*ep2^15 + 132607115264/911094027443523*ep2^16 - 13958643712/101232669715947*ep2^17 + [...]
-        + (11/23400 - 11/26325*ep2 + 22/58725*ep2^2 - 616/1820475*ep2^3 + 112/364095*ep2^4 - 512/1820475*ep2^5 + 17408/67357575*ep2^6 - 69632/291882825*ep2^7 + 2646016/11967195825*ep2^8 - 21168128/102917884095*ep2^9 + 296353792/1543768261425*ep2^10 - 13039566848/72557108286975*ep2^11 + 85688582144/507899758008825*ep2^12 - 80648077312/507899758008825*ep2^13 + 161296154624/1076747486978709*ep2^14 - 58653147136/414133648837965*ep2^15 + 6174015488/46014849870885*ep2^16 - 49392123904/38783944 [...]
-        - (1/2457 - 2/5481*ep2 + 8/24273*ep2^2 - 80/267003*ep2^3 + 512/1869021*ep2^4 - 17408/69153777*ep2^5 + 69632/299666367*ep2^6 - 2646016/12286321047*ep2^7 + 105840640/528311805021*ep2^8 - 42336256/226419345009*ep2^9 + 169345024/967428110493*ep2^10 - 7789871104/47403977414157*ep2^11 + 7331643392/47403977414157*ep2^12 - 366582169600/2512410802950321*ep2^13 + 293265735680/2125886064034887*ep2^14 - 30870077440/236209562670543*ep2^15 + 246960619520/1990909171080291*ep2^16 - 493921239040/ [...]
-        + (13/36540 - 13/40455*ep2 + 26/89001*ep2^2 - 832/3115035*ep2^3 + 28288/115256295*ep2^4 - 8704/38418765*ep2^5 + 330752/1575169365*ep2^6 - 2646016/13546456539*ep2^7 + 5292032/29028121155*ep2^8 - 21168128/124029244935*ep2^9 + 973733888/6077433001815*ep2^10 - 916455424/6077433001815*ep2^11 + 9164554240/64420789819239*ep2^12 - 95311364096/708628688011629*ep2^13 + 10032775168/78736520890181*ep2^14 - 80262201344/663636390360097*ep2^15 + 160524402688/1395924821102273*ep2^16) * k2^13
-        - (7/22320 - 7/24552*ep2 + 4/15345*ep2^2 - 136/567765*ep2^3 + 544/2460315*ep2^4 - 20672/100872915*ep2^5 + 165376/867507069*ep2^6 - 2315264/13012606035*ep2^7 + 9261056/55599316695*ep2^8 - 60858368/389195216865*ep2^9 + 57278464/389195216865*ep2^10 - 572784640/4125469298769*ep2^11 + 458227712/3490781714343*ep2^12 - 48234496/387864634927*ep2^13 + 385875968/3269144780099*ep2^14 - 22380806144/199417831586039*ep2^15) * k2^14
-        + (5/17952 - 1/3927*ep2 + 2/8547*ep2^2 - 8/37037*ep2^3 + 304/1518517*ep2^4 - 12160/65296231*ep2^5 + 4864/27984099*ep2^6 - 19456/119568423*ep2^7 + 894976/5858852727*ep2^8 - 14319616/99600496359*ep2^9 + 715980800/5278826307027*ep2^10 - 572784640/4466699182869*ep2^11 + 180879360/1488899727623*ep2^12 - 1447034880/12549297704251*ep2^13 + 83928023040/765507159959311*ep2^14) * k2^15
-        - (4/16065 - 8/34965*ep2 + 32/151515*ep2^2 - 1216/6212115*ep2^3 + 9728/53424189*ep2^4 - 19456/114480405*ep2^5 + 856064/5380579035*ep2^6 - 39378944/263648372715*ep2^7 + 630063104/4482022336155*ep2^8 - 6300631040/47509436763243*ep2^9 + 458227712/3654572058711*ep2^10 - 48234496/406063562079*ep2^11 + 385875968/3422535737523*ep2^12 - 22380806144/208774679988903*ep2^13) * k2^16
-        + (17/75924 - 17/82251*ep2 + 34/177489*ep2^2 - 1360/7632027*ep2^3 + 3808/22896081*ep2^4 - 167552/1076115807*ep2^5 + 1101056/7532810649*ep2^6 - 1036288/7532810649*ep2^7 + 51814400/399238964397*ep2^8 - 3768320/30710689569*ep2^9 + 7536640/64833677979*ep2^10 - 60293120/546455285823*ep2^11 + 3497000960/33333772435203*ep2^12) * k2^17
-        - (1/4940 - 1/5330*ep2 + 4/22919*ep2^2 - 56/343785*ep2^3 + 2464/16157895*ep2^4 - 16192/113105265*ep2^5 + 259072/1922789505*ep2^6 - 2590720/20381568753*ep2^7 + 188416/1567812981*ep2^8 - 1130496/9929482213*ep2^9 + 9043968/83691350081*ep2^10 - 524550144/5105172354941*ep2^11) * k2^18
-        + (19/103320 - 19/111069*ep2 + 38/238005*ep2^2 - 1672/11186235*ep2^3 + 76912/548125515*ep2^4 - 1230592/9318133755*ep2^5 + 12305920/98772217803*ep2^6 - 11634688/98772217803*ep2^7 + 1224704/10974690867*ep2^8 - 9797632/92500965879*ep2^9 + 568262656/5642558918619*ep2^10) * k2^19
-        - (5/29799 - 2/12771*ep2 + 8/54567*ep2^2 - 368/2673783*ep2^3 + 5888/45454311*ep2^4 - 294400/2409078483*ep2^5 + 3061760/26499863313*ep2^6 - 6123520/55944155883*ep2^7 + 48988160/471529313871*ep2^8 - 2841313280/28763288146131*ep2^9) * k2^20
-        + (7/45540 - 7/48645*ep2 + 2/14805*ep2^2 - 32/251685*ep2^3 + 320/2667861*ep2^4 - 3328/29346471*ep2^5 + 6656/61953661*ep2^6 - 53248/522180857*ep2^7 + 3088384/31853032277*ep2^8) * k2^21
-        - (11/77832 - 11/82908*ep2 + 44/352359*ep2^2 - 2200/18675027*ep2^3 + 2080/18675027*ep2^4 - 4160/39425057*ep2^5 + 33280/332296909*ep2^6 - 1930240/20270111449*ep2^7) * k2^22
-        + (23/176400 - 23/187425*ep2 + 46/397341*ep2^2 - 2392/21853755*ep2^3 + 4784/46135705*ep2^4 - 38272/388858085*ep2^5 + 2219776/23720343185*ep2^6) * k2^23
-        - (2/16575 - 4/35139*ep2 + 16/148665*ep2^2 - 96/941545*ep2^3 + 5376/55551155*ep2^4 - 311808/3388620455*ep2^5) * k2^24
-        + (25/223236 - 5/47223*ep2 + 10/99693*ep2^2 - 560/5881887*ep2^3 + 32480/358795107*ep2^4) * k2^25
-        - (13/124740 - 13/131670*ep2 + 52/554895*ep2^2 - 3016/33848595*ep2^3) * k2^26
-        + (3/30856 - 3/32509*ep2 + 6/68381*ep2^2) * k2^27
-        - (7/76995 - 14/161955*ep2) * k2^28
-        + 29/340380 * k2^29;
-C4[2] = + (1/2100 - 1/3150*ep2 + 4/17325*ep2^2 - 8/45045*ep2^3 + 32/225225*ep2^4 - 64/546975*ep2^5 + 1024/10392525*ep2^6 - 2048/24249225*ep2^7 + 8192/111546435*ep2^8 - 16384/253514625*ep2^9 + 131072/2281631625*ep2^10 - 262144/5089793625*ep2^11 + 1048576/22540514625*ep2^12 - 2097152/49589132175*ep2^13 + 67108864/1735619626125*ep2^14 - 134217728/3777525068625*ep2^15 + 536870912/16369275297375*ep2^16 - 1073741824/35323173010125*ep2^17 + 8589934592/303779287887075*ep2^18 - 17179869184/650955 [...]
-        - (1/1800 - 1/2475*ep2 + 2/6435*ep2^2 - 8/32175*ep2^3 + 112/546975*ep2^4 - 1792/10392525*ep2^5 + 512/3464175*ep2^6 - 2048/15935205*ep2^7 + 4096/36216375*ep2^8 - 32768/325947375*ep2^9 + 65536/727113375*ep2^10 - 1835008/22540514625*ep2^11 + 3670016/49589132175*ep2^12 - 16777216/247945660875*ep2^13 + 33554432/539646438375*ep2^14 - 134217728/2338467899625*ep2^15 + 268435456/5046167572875*ep2^16 - 2147483648/43397041126725*ep2^17 + 30064771072/650955616900875*ep2^18 - 120259084288/278 [...]
-        + (1/1925 - 2/5005*ep2 + 8/25025*ep2^2 - 16/60775*ep2^3 + 256/1154725*ep2^4 - 1536/8083075*ep2^5 + 6144/37182145*ep2^6 - 12288/84504875*ep2^7 + 32768/253514625*ep2^8 - 65536/565532625*ep2^9 + 262144/2504501625*ep2^10 - 524288/5509903575*ep2^11 + 16777216/192846625125*ep2^12 - 33554432/419725007625*ep2^13 + 134217728/1818808366375*ep2^14 - 268435456/3924797001125*ep2^15 + 2147483648/33753254209675*ep2^16 - 4294967296/72328401877875*ep2^17 + 17179869184/309039535296375*ep2^18 - 343 [...]
-        - (1/2184 - 1/2730*ep2 + 1/3315*ep2^2 - 16/62985*ep2^3 + 32/146965*ep2^4 - 128/676039*ep2^5 + 2816/16900975*ep2^6 - 22528/152108775*ep2^7 + 45056/339319575*ep2^8 - 180224/1502700975*ep2^9 + 32768/300540195*ep2^10 - 1048576/10518906825*ep2^11 + 2097152/22894091325*ep2^12 - 8388608/99207729075*ep2^13 + 16777216/214079836425*ep2^14 - 134217728/1841086593255*ep2^15 + 268435456/3945185556975*ep2^16 - 11811160064/185423721177825*ep2^17 + 23622320128/395033145117975*ep2^18 - 37795712204 [...]
-        + (1/2520 - 1/3060*ep2 + 4/14535*ep2^2 - 8/33915*ep2^3 + 32/156009*ep2^4 - 704/3900225*ep2^5 + 5632/35102025*ep2^6 - 146432/1017958725*ep2^7 + 585728/4508102925*ep2^8 - 106496/901620585*ep2^9 + 3407872/31556720475*ep2^10 - 6815744/68682273975*ep2^11 + 2097152/22894091325*ep2^12 - 4194304/49403039175*ep2^13 + 33554432/424866136905*ep2^14 - 67108864/910427436225*ep2^15 + 2952790016/42790089502575*ep2^16 - 5905580032/91161495027225*ep2^17 + 94489280512/1549745415462825*ep2^18 - 1889 [...]
-        - (7/20400 - 7/24225*ep2 + 2/8075*ep2^2 - 8/37145*ep2^3 + 176/928625*ep2^4 - 1408/8357625*ep2^5 + 36608/242371125*ep2^6 - 1025024/7513504875*ep2^7 + 186368/1502700975*ep2^8 - 851968/7513504875*ep2^9 + 1703936/16352922375*ep2^10 - 524288/5450974125*ep2^11 + 1048576/11762628375*ep2^12 - 8388608/101158604025*ep2^13 + 117440512/1517379060375*ep2^14 - 5167382528/71316815837625*ep2^15 + 1476395008/21705117863625*ep2^16 - 23622320128/368987003681625*ep2^17 + 47244640256/782252447805045* [...]
-        + (14/47025 - 4/15675*ep2 + 16/72105*ep2^2 - 32/163875*ep2^3 + 256/1474875*ep2^4 - 6656/42771375*ep2^5 + 186368/1325912625*ep2^6 - 372736/2917007775*ep2^7 + 1703936/14585038875*ep2^8 - 57933824/539646438375*ep2^9 + 17825792/179882146125*ep2^10 - 35651584/388166736375*ep2^11 + 285212672/3338233932825*ep2^12 - 3992977408/50073508992375*ep2^13 + 15971909632/213950447512875*ep2^14 - 4563402752/65115353590875*ep2^15 + 4294967296/65115353590875*ep2^16 - 8589934592/138044549612655*ep2^1 [...]
-        - (1/3850 - 2/8855*ep2 + 4/20125*ep2^2 - 32/181125*ep2^3 + 832/5252625*ep2^4 - 3328/23261625*ep2^5 + 6656/51175575*ep2^6 - 212992/1791145125*ep2^7 + 7241728/66272369625*ep2^8 - 2228224/22090789875*ep2^9 + 84672512/905722384875*ep2^10 - 677380096/7789212509925*ep2^11 + 1354760192/16691169664125*ep2^12 - 5419040768/71316815837625*ep2^13 + 10838081536/151935825045375*ep2^14 - 10200547328/151935825045375*ep2^15 + 20401094656/322103949096195*ep2^16 - 1060856922112/17715717200290725*ep [...]
-        + (3/13156 - 3/14950*ep2 + 4/22425*ep2^2 - 8/50025*ep2^3 + 224/1550775*ep2^4 - 448/3411705*ep2^5 + 2048/17058525*ep2^6 - 69632/631165425*ep2^7 + 278528/2735050175*ep2^8 - 10584064/112137057175*ep2^9 + 84672512/964378691705*ep2^10 - 1185415168/14465680375575*ep2^11 + 4741660672/61807907059275*ep2^12 - 1354760192/18811102148475*ep2^13 + 1275068416/18811102148475*ep2^14 - 2550136832/39879536554767*ep2^15 + 10200547328/168721116193245*ep2^16 - 3221225472/56240372064415*ep2^17 + 25769 [...]
-        - (11/54600 - 11/61425*ep2 + 22/137025*ep2^2 - 88/606825*ep2^3 + 16/121365*ep2^4 - 512/4247775*ep2^5 + 17408/157167675*ep2^6 - 69632/681059925*ep2^7 + 2646016/27923456925*ep2^8 - 21168128/240141729555*ep2^9 + 42336256/514589420475*ep2^10 - 1862795264/24185702762325*ep2^11 + 85688582144/1185099435353925*ep2^12 - 80648077312/1185099435353925*ep2^13 + 161296154624/2512410802950321*ep2^14 - 58653147136/966311847288585*ep2^15 + 6174015488/107367983032065*ep2^16 - 49392123904/904958714 [...]
-        + (11/61425 - 22/137025*ep2 + 88/606825*ep2^2 - 16/121365*ep2^3 + 512/4247775*ep2^4 - 17408/157167675*ep2^5 + 69632/681059925*ep2^6 - 2646016/27923456925*ep2^7 + 21168128/240141729555*ep2^8 - 42336256/514589420475*ep2^9 + 1862795264/24185702762325*ep2^10 - 85688582144/1185099435353925*ep2^11 + 80648077312/1185099435353925*ep2^12 - 161296154624/2512410802950321*ep2^13 + 58653147136/966311847288585*ep2^14 - 6174015488/107367983032065*ep2^15 + 49392123904/904958714127405*ep2^16 - 98 [...]
-        - (13/81200 - 13/89900*ep2 + 13/98890*ep2^2 - 208/1730575*ep2^3 + 7072/64031275*ep2^4 - 6528/64031275*ep2^5 + 248064/2625282275*ep2^6 - 1984512/22577427565*ep2^7 + 1323008/16126733975*ep2^8 - 5292032/68905136075*ep2^9 + 243433472/3376351667675*ep2^10 - 229113856/3376351667675*ep2^11 + 458227712/7157865535471*ep2^12 - 23827841024/393682604450905*ep2^13 + 22573744128/393682604450905*ep2^14 - 180589953024/3318181951800485*ep2^15 + 361179906048/6979624105511365*ep2^16) * k2^13
-        + (91/632400 - 91/695640*ep2 + 52/434775*ep2^2 - 104/946275*ep2^3 + 32/315425*ep2^4 - 1216/12932425*ep2^5 + 9728/111218855*ep2^6 - 136192/1668282825*ep2^7 + 544768/7128117525*ep2^8 - 3579904/49896822675*ep2^9 + 57278464/848245985475*ep2^10 - 114556928/1798281489207*ep2^11 + 5956960256/98905481906385*ep2^12 - 1881145344/32968493968795*ep2^13 + 15049162752/277877306308415*ep2^14 - 872851439616/16950515684813315*ep2^15) * k2^14
-        - (7/53856 - 1/8415*ep2 + 2/18315*ep2^2 - 8/79365*ep2^3 + 304/3253965*ep2^4 - 2432/27984099*ep2^5 + 34048/419761485*ep2^6 - 136192/1793526345*ep2^7 + 894976/12554684415*ep2^8 - 14319616/213429635055*ep2^9 + 143196160/2262354131583*ep2^10 - 114556928/1914299649801*ep2^11 + 12058624/212699961089*ep2^12 - 96468992/1792756814893*ep2^13 + 5595201536/109358165708473*ep2^14) * k2^15
-        + (4/33915 - 8/73815*ep2 + 32/319865*ep2^2 - 64/690235*ep2^3 + 512/5936021*ep2^4 - 1024/12720045*ep2^5 + 45056/597842115*ep2^6 - 2072576/29294263635*ep2^7 + 33161216/498002481795*ep2^8 - 331612160/5278826307027*ep2^9 + 24117248/406063562079*ep2^10 - 144703488/2571735893167*ep2^11 + 1157627904/21676059670979*ep2^12 - 67142418432/1322239639929719*ep2^13) * k2^16
-        - (17/158175 - 68/685425*ep2 + 136/1479075*ep2^2 - 1088/12720045*ep2^3 + 15232/190800675*ep2^4 - 670208/8967631725*ep2^5 + 4404224/62773422075*ep2^6 - 4145152/62773422075*ep2^7 + 8290304/133079654799*ep2^8 - 3014656/51184482615*ep2^9 + 6029312/108056129965*ep2^10 - 48234496/910758809705*ep2^11 + 2797600768/55556287392005*ep2^12) * k2^17
-        + (17/172900 - 17/186550*ep2 + 68/802165*ep2^2 - 136/1718925*ep2^3 + 5984/80789475*ep2^4 - 275264/3958684275*ep2^5 + 259072/3958684275*ep2^6 - 518144/8392410663*ep2^7 + 188416/3227850255*ep2^8 - 1130496/20443051615*ep2^9 + 9043968/172305720755*ep2^10 - 524550144/10510648966055*ep2^11) * k2^18
-        - (57/631400 - 57/678755*ep2 + 38/484825*ep2^2 - 152/2071525*ep2^3 + 6992/101504725*ep2^4 - 111872/1725580325*ep2^5 + 223744/3658230289*ep2^6 - 11634688/201202665895*ep2^7 + 11022336/201202665895*ep2^8 - 88178688/1695851041115*ep2^9 + 5114363904/103446913508015*ep2^10) * k2^19
-        + (19/228459 - 38/489555*ep2 + 152/2091735*ep2^2 - 304/4456305*ep2^3 + 4864/75757185*ep2^4 - 48640/803026161*ep2^5 + 505856/8833287771*ep2^6 - 53248/981476419*ep2^7 + 425984/8272444103*ep2^8 - 24707072/504619090283*ep2^9) * k2^20
-        - (7/91080 - 7/97290*ep2 + 1/14805*ep2^2 - 16/251685*ep2^3 + 160/2667861*ep2^4 - 1664/29346471*ep2^5 + 3328/61953661*ep2^6 - 26624/522180857*ep2^7 + 1544192/31853032277*ep2^8) * k2^21
-        + (77/1081000 - 11/164500*ep2 + 44/699125*ep2^2 - 88/1482145*ep2^3 + 416/7410725*ep2^4 - 7488/140803775*ep2^5 + 59904/1186774675*ep2^6 - 3474432/72393255175*ep2^7) * k2^22
-        - (253/3822000 - 253/4060875*ep2 + 506/8609055*ep2^2 - 184/3311175*ep2^3 + 1104/20970775*ep2^4 - 8832/176753675*ep2^5 + 512256/10781974175*ep2^6) * k2^23
-        + (46/745875 - 92/1581255*ep2 + 368/6689925*ep2^2 - 736/14123175*ep2^3 + 41216/833267325*ep2^4 - 2390528/50829306825*ep2^5) * k2^24
-        - (5/86814 - 2/36729*ep2 + 4/77539*ep2^2 - 32/653543*ep2^3 + 1856/39866123*ep2^4) * k2^25
-        + (13/241164 - 13/254562*ep2 + 52/1072797*ep2^2 - 104/2256573*ep2^3) * k2^26
-        - (39/771400 - 39/812725*ep2 + 78/1709525*ep2^2) * k2^27
-        + (63/1326025 - 126/2789225*ep2) * k2^28
-        - 203/4538400 * k2^29;
-C4[3] = + (1/17640 - 1/24255*ep2 + 2/63063*ep2^2 - 8/315315*ep2^3 + 16/765765*ep2^4 - 256/14549535*ep2^5 + 512/33948915*ep2^6 - 2048/156165009*ep2^7 + 4096/354920475*ep2^8 - 32768/3194284275*ep2^9 + 65536/7125711075*ep2^10 - 262144/31556720475*ep2^11 + 524288/69424785045*ep2^12 - 16777216/2429867476575*ep2^13 + 33554432/5288535096075*ep2^14 - 134217728/22916985416325*ep2^15 + 268435456/49452442214175*ep2^16 - 2147483648/425291003041905*ep2^17 + 4294967296/911337863661225*ep2^18 - 1717986 [...]
-        - (1/10780 - 1/14014*ep2 + 2/35035*ep2^2 - 4/85085*ep2^3 + 64/1616615*ep2^4 - 384/11316305*ep2^5 + 1536/52055003*ep2^6 - 3072/118306825*ep2^7 + 8192/354920475*ep2^8 - 16384/791745675*ep2^9 + 65536/3506302275*ep2^10 - 131072/7713865005*ep2^11 + 4194304/269985275175*ep2^12 - 8388608/587615010675*ep2^13 + 33554432/2546331712925*ep2^14 - 67108864/5494715801575*ep2^15 + 536870912/47254555893545*ep2^16 - 1073741824/101259762629025*ep2^17 + 4294967296/432655349414925*ep2^18 - 8589934592 [...]
-        + (5/45864 - 1/11466*ep2 + 1/13923*ep2^2 - 16/264537*ep2^3 + 32/617253*ep2^4 - 640/14196819*ep2^5 + 2816/70984095*ep2^6 - 22528/638856855*ep2^7 + 45056/1425142215*ep2^8 - 180224/6311344095*ep2^9 + 32768/1262268819*ep2^10 - 1048576/44179408665*ep2^11 + 2097152/96155183565*ep2^12 - 8388608/416672462115*ep2^13 + 16777216/899135312985*ep2^14 - 134217728/7732563691671*ep2^15 + 268435456/16569779339295*ep2^16 - 11811160064/778779628946865*ep2^17 + 23622320128/1659139209495495*ep2^18 -  [...]
-        - (1/8820 - 1/10710*ep2 + 8/101745*ep2^2 - 16/237405*ep2^3 + 64/1092063*ep2^4 - 1408/27301575*ep2^5 + 11264/245714175*ep2^6 - 292864/7125711075*ep2^7 + 1171456/31556720475*ep2^8 - 212992/6311344095*ep2^9 + 6815744/220897043325*ep2^10 - 13631488/480775917825*ep2^11 + 4194304/160258639275*ep2^12 - 8388608/345821274225*ep2^13 + 67108864/2974062958335*ep2^14 - 134217728/6372992053575*ep2^15 + 5905580032/299530626518025*ep2^16 - 11811160064/638130465190575*ep2^17 + 188978561024/108482 [...]
-        + (1/8976 - 1/10659*ep2 + 2/24871*ep2^2 - 40/572033*ep2^3 + 16/260015*ep2^4 - 128/2340135*ep2^5 + 3328/67863915*ep2^6 - 13312/300540195*ep2^7 + 26624/661188429*ep2^8 - 851968/23141595015*ep2^9 + 1703936/50367000915*ep2^10 - 524288/16789000305*ep2^11 + 1048576/36228895395*ep2^12 - 8388608/311568500397*ep2^13 + 16777216/667646786565*ep2^14 - 67108864/2852672633505*ep2^15 + 134217728/6077433001815*ep2^16 - 2147483648/103316361030855*ep2^17 + 21474836480/1095153426927063*ep2^18 - 223 [...]
-        - (1/9405 - 2/21945*ep2 + 8/100947*ep2^2 - 16/229425*ep2^3 + 128/2064825*ep2^4 - 3328/59879925*ep2^5 + 13312/265182525*ep2^6 - 26624/583401555*ep2^7 + 851968/20419054425*ep2^8 - 28966912/755505013725*ep2^9 + 8912896/251835004575*ep2^10 - 17825792/543433430925*ep2^11 + 142606336/4673527505955*ep2^12 - 285212672/10014701798475*ep2^13 + 1140850688/42790089502575*ep2^14 - 2281701376/91161495027225*ep2^15 + 2147483648/91161495027225*ep2^16 - 4294967296/193262369457717*ep2^17 + 2233382 [...]
-        + (1/10010 - 2/23023*ep2 + 4/52325*ep2^2 - 32/470925*ep2^3 + 64/1050525*ep2^4 - 256/4652325*ep2^5 + 512/10235115*ep2^6 - 16384/358229025*ep2^7 + 557056/13254473925*ep2^8 - 2228224/57436053675*ep2^9 + 84672512/2354878200675*ep2^10 - 677380096/20251952525805*ep2^11 + 1354760192/43397041126725*ep2^12 - 5419040768/185423721177825*ep2^13 + 10838081536/395033145117975*ep2^14 - 10200547328/395033145117975*ep2^15 + 20401094656/837470267650107*ep2^16 - 81604378624/3543143440058145*ep2^17  [...]
-        - (15/161161 - 6/73255*ep2 + 16/219765*ep2^2 - 32/490245*ep2^3 + 128/2171085*ep2^4 - 256/4776387*ep2^5 + 8192/167173545*ep2^6 - 278528/6185421165*ep2^7 + 1114112/26803491715*ep2^8 - 42336256/1098943160315*ep2^9 + 338690048/9450911178709*ep2^10 - 677380096/20251952525805*ep2^11 + 2709520384/86531069882985*ep2^12 - 5419040768/184348801055055*ep2^13 + 5100273664/184348801055055*ep2^14 - 51002736640/1954097291183583*ep2^15 + 40802189312/1653466938693801*ep2^16 - 12884901888/551155646 [...]
-        + (11/127400 - 11/143325*ep2 + 22/319725*ep2^2 - 88/1415925*ep2^3 + 16/283185*ep2^4 - 512/9911475*ep2^5 + 17408/366724575*ep2^6 - 69632/1589139825*ep2^7 + 2646016/65154732825*ep2^8 - 21168128/560330702295*ep2^9 + 42336256/1200708647775*ep2^10 - 1862795264/56433306445425*ep2^11 + 85688582144/2765232015825825*ep2^12 - 80648077312/2765232015825825*ep2^13 + 161296154624/5862291873550749*ep2^14 - 58653147136/2254727643673365*ep2^15 + 6174015488/250525293741485*ep2^16 - 49392123904/211 [...]
-        - (11/137592 - 11/153468*ep2 + 11/169911*ep2^2 - 10/169911*ep2^3 + 64/1189377*ep2^4 - 2176/44006949*ep2^5 + 8704/190696779*ep2^6 - 330752/7818567939*ep2^7 + 13230080/336198421377*ep2^8 - 5292032/144085037733*ep2^9 + 232849408/6771996773451*ep2^10 - 10711072768/331827841899099*ep2^11 + 10081009664/331827841899099*ep2^12 - 504050483200/17586875620652247*ep2^13 + 36658216960/1352836586204019*ep2^14 - 3858759680/150315176244891*ep2^15 + 30870077440/1266942199778367*ep2^16 - 617401548 [...]
-        + (143/1932560 - 143/2139620*ep2 + 13/213962*ep2^2 - 208/3744335*ep2^3 + 416/8149435*ep2^4 - 384/8149435*ep2^5 + 14592/334126835*ep2^6 - 116736/2873490781*ep2^7 + 77824/2052493415*ep2^8 - 3424256/96467190505*ep2^9 + 157515776/4726892334745*ep2^10 - 2520252416/80357169690665*ep2^11 + 25202524160/851785998721049*ep2^12 - 23827841024/851785998721049*ep2^13 + 22573744128/851785998721049*ep2^14 - 180589953024/7179339132077413*ep2^15 + 361179906048/15101368519197317*ep2^16) * k2^13
-        - (13/189720 - 13/208692*ep2 + 104/1826055*ep2^2 - 208/3974355*ep2^3 + 64/1324785*ep2^4 - 2432/54316185*ep2^5 + 19456/467119191*ep2^6 - 38912/1000969695*ep2^7 + 155648/4276870515*ep2^8 - 7159808/209566655235*ep2^9 + 114556928/3562633138995*ep2^10 - 1145569280/37763911273347*ep2^11 + 11913920512/415403024006817*ep2^12 - 1254096896/46155891556313*ep2^13 + 10032775168/389028228831781*ep2^14 - 581900959744/23730721958738641*ep2^15) * k2^14
-        + (65/1023264 - 13/223839*ep2 + 26/487179*ep2^2 - 8/162393*ep2^3 + 16/350427*ep2^4 - 640/15068361*ep2^5 + 256/6457869*ep2^6 - 1024/27592713*ep2^7 + 47104/1352042937*ep2^8 - 753664/22984729929*ep2^9 + 37683200/1218190686237*ep2^10 - 391905280/13400097548607*ep2^11 + 783810560/28289094824837*ep2^12 - 6270484480/238436656380769*ep2^13 + 363688099840/14544636039226909*ep2^14) * k2^15
-        - (2/33915 - 4/73815*ep2 + 16/319865*ep2^2 - 32/690235*ep2^3 + 256/5936021*ep2^4 - 512/12720045*ep2^5 + 22528/597842115*ep2^6 - 1036288/29294263635*ep2^7 + 16580608/498002481795*ep2^8 - 165806080/5278826307027*ep2^9 + 12058624/406063562079*ep2^10 - 72351744/2571735893167*ep2^11 + 578813952/21676059670979*ep2^12 - 33571209216/1322239639929719*ep2^13) * k2^16
-        + (17/310023 - 68/1343433*ep2 + 136/2898987*ep2^2 - 5440/124656441*ep2^3 + 2176/53424189*ep2^4 - 95744/2510936883*ep2^5 + 4404224/123035907267*ep2^6 - 4145152/123035907267*ep2^7 + 207257600/6520903085151*ep2^8 - 15073280/501607929627*ep2^9 + 30146560/1058950073657*ep2^10 - 241172480/8925436335109*ep2^11 + 13988003840/544451616441649*ep2^12) * k2^17
-        - (34/665665 - 68/1436435*ep2 + 544/12353341*ep2^2 - 1088/26471445*ep2^3 + 4352/113105265*ep2^4 - 200192/5542157985*ep2^5 + 188416/5542157985*ep2^6 - 1884160/58746874641*ep2^7 + 1507328/49708893927*ep2^8 - 9043968/314822994871*ep2^9 + 72351744/2653508099627*ep2^10 - 4196401152/161863994077247*ep2^11) * k2^18
-        + (969/20331080 - 969/21855911*ep2 + 646/15611365*ep2^2 - 2584/66703105*ep2^3 + 5168/142106615*ep2^4 - 4864/142106615*ep2^5 + 48640/1506330119*ep2^6 - 505856/16569631309*ep2^7 + 479232/16569631309*ep2^8 - 3833856/139658321033*ep2^9 + 222363648/8519157583013*ep2^10) * k2^19
-        - (95/2132284 - 19/456918*ep2 + 38/976143*ep2^2 - 76/2079609*ep2^3 + 1216/35353353*ep2^4 - 60800/1873727709*ep2^5 + 632320/20611004799*ep2^6 - 199680/6870334933*ep2^7 + 1597440/57907108721*ep2^8 - 92651520/3532333631981*ep2^9) * k2^20
-        + (19/455400 - 19/486450*ep2 + 19/518175*ep2^2 - 304/8808975*ep2^3 + 608/18675027*ep2^4 - 31616/1027126485*ep2^5 + 3328/114125165*ep2^6 - 26624/961912105*ep2^7 + 1544192/58676638405*ep2^8) * k2^21
-        - (11/281060 - 11/299390*ep2 + 88/2544815*ep2^2 - 880/26975039*ep2^3 + 64/2075003*ep2^4 - 1152/39425057*ep2^5 + 9216/332296909*ep2^6 - 534528/20270111449*ep2^7) * k2^22
-        + (253/6879600 - 253/7309575*ep2 + 506/15496299*ep2^2 - 184/5960115*ep2^3 + 368/12582465*ep2^4 - 2944/106052205*ep2^5 + 170752/6469184505*ep2^6) * k2^23
-        - (253/7309575 - 506/15496299*ep2 + 184/5960115*ep2^2 - 368/12582465*ep2^3 + 2944/106052205*ep2^4 - 170752/6469184505*ep2^5) * k2^24
-        + (575/17623242 - 230/7455987*ep2 + 460/15740417*ep2^2 - 3680/132669229*ep2^3 + 7360/279062861*ep2^4) * k2^25
-        - (13/422037 - 26/890967*ep2 + 208/7509579*ep2^2 - 416/15796011*ep2^3) * k2^26
-        + (195/6695752 - 195/7054453*ep2 + 390/14838677*ep2^2) * k2^27
-        - (117/4243280 - 117/4462760*ep2) * k2^28
-        + 87/3328160 * k2^29;
-C4[4] = + (1/124740 - 1/162162*ep2 + 2/405405*ep2^2 - 4/984555*ep2^3 + 64/18706545*ep2^4 - 128/43648605*ep2^5 + 512/200783583*ep2^6 - 1024/456326325*ep2^7 + 8192/4106936925*ep2^8 - 16384/9161628525*ep2^9 + 65536/40572926325*ep2^10 - 131072/89260437915*ep2^11 + 4194304/3124115327025*ep2^12 - 8388608/6799545123525*ep2^13 + 33554432/29464695535275*ep2^14 - 67108864/63581711418225*ep2^15 + 536870912/546802718196735*ep2^16 - 1073741824/1171720110421575*ep2^17 + 4294967296/5006440471801275*ep2 [...]
-        - (1/58968 - 1/73710*ep2 + 1/89505*ep2^2 - 16/1700595*ep2^3 + 32/3968055*ep2^4 - 128/18253053*ep2^5 + 2816/456326325*ep2^6 - 22528/4106936925*ep2^7 + 45056/9161628525*ep2^8 - 180224/40572926325*ep2^9 + 32768/8114585265*ep2^10 - 1048576/284010484275*ep2^11 + 2097152/618140465775*ep2^12 - 8388608/2678608685025*ep2^13 + 16777216/5780155583475*ep2^14 - 134217728/49709338017885*ep2^15 + 268435456/106520010038325*ep2^16 - 11811160064/5006440471801275*ep2^17 + 23622320128/10665894918185 [...]
-        + (1/41580 - 1/50490*ep2 + 8/479655*ep2^2 - 16/1119195*ep2^3 + 64/5148297*ep2^4 - 128/11700675*ep2^5 + 1024/105306075*ep2^6 - 26624/3053876175*ep2^7 + 106496/13524308775*ep2^8 - 212992/29753479305*ep2^9 + 6815744/1041371775675*ep2^10 - 13631488/2266515041175*ep2^11 + 4194304/755505013725*ep2^12 - 8388608/1630300292775*ep2^13 + 67108864/14020582517865*ep2^14 - 134217728/30044105395425*ep2^15 + 536870912/128370268507725*ep2^16 - 1073741824/273484485081675*ep2^17 + 17179869184/46492 [...]
-        - (7/242352 - 7/287793*ep2 + 2/95931*ep2^2 - 40/2206413*ep2^3 + 16/1002915*ep2^4 - 128/9026235*ep2^5 + 3328/261760815*ep2^6 - 93184/8114585265*ep2^7 + 186368/17852087583*ep2^8 - 851968/89260437915*ep2^9 + 1703936/194272717815*ep2^10 - 524288/64757572605*ep2^11 + 1048576/139740025095*ep2^12 - 8388608/1201764215817*ep2^13 + 117440512/18026463237255*ep2^14 - 469762048/77022161104635*ep2^15 + 134217728/23441527292715*ep2^16 - 2147483648/398505963976155*ep2^17 + 21474836480/4224163218 [...]
-        + (7/220077 - 2/73359*ep2 + 40/1687257*ep2^2 - 16/766935*ep2^3 + 128/6902415*ep2^4 - 256/15397695*ep2^5 + 7168/477328545*ep2^6 - 14336/1050122799*ep2^7 + 65536/5250613995*ep2^8 - 2228224/194272717815*ep2^9 + 8912896/841848443865*ep2^10 - 17825792/1816620326235*ep2^11 + 142606336/15622934805621*ep2^12 - 1996488704/234344022084315*ep2^13 + 7985954816/1001288094360255*ep2^14 - 2281701376/304739854805295*ep2^15 + 2147483648/304739854805295*ep2^16 - 21474836480/3230242460936127*ep2^17 [...]
-        - (1/30030 - 2/69069*ep2 + 4/156975*ep2^2 - 32/1412775*ep2^3 + 64/3151575*ep2^4 - 256/13956975*ep2^5 + 512/30705345*ep2^6 - 16384/1074687075*ep2^7 + 557056/39763421775*ep2^8 - 2228224/172308161025*ep2^9 + 84672512/7064634602025*ep2^10 - 677380096/60755857577415*ep2^11 + 1354760192/130191123380175*ep2^12 - 5419040768/556271163533475*ep2^13 + 10838081536/1185099435353925*ep2^14 - 10200547328/1185099435353925*ep2^15 + 20401094656/2512410802950321*ep2^16 - 81604378624/106294303201744 [...]
-        + (1/29601 - 2/67275*ep2 + 16/605475*ep2^2 - 32/1350675*ep2^3 + 896/41870925*ep2^4 - 1792/92116035*ep2^5 + 8192/460580175*ep2^6 - 278528/17041466475*ep2^7 + 1114112/73846354725*ep2^8 - 42336256/3027700543725*ep2^9 + 338690048/26038224676035*ep2^10 - 4741660672/390573370140525*ep2^11 + 18966642688/1668813490600425*ep2^12 - 5419040768/507899758008825*ep2^13 + 5100273664/507899758008825*ep2^14 - 10200547328/1076747486978709*ep2^15 + 40802189312/4555470137217615*ep2^16 - 4294967296/5 [...]
-        - (11/327600 - 11/368550*ep2 + 11/411075*ep2^2 - 44/1820475*ep2^3 + 8/364095*ep2^4 - 256/12743325*ep2^5 + 8704/471503025*ep2^6 - 34816/2043179775*ep2^7 + 1323008/83770370775*ep2^8 - 10584064/720425188665*ep2^9 + 21168128/1543768261425*ep2^10 - 931397632/72557108286975*ep2^11 + 42844291072/3555298306061775*ep2^12 - 40324038656/3555298306061775*ep2^13 + 80648077312/7537232408850963*ep2^14 - 29326573568/2898935541865755*ep2^15 + 3087007744/322103949096195*ep2^16 - 24696061952/271487 [...]
-        + (11/334152 - 11/372708*ep2 + 11/412641*ep2^2 - 10/412641*ep2^3 + 64/2888487*ep2^4 - 128/6286707*ep2^5 + 512/27242397*ep2^6 - 19456/1116938277*ep2^7 + 778240/48028345911*ep2^8 - 311296/20583576819*ep2^9 + 13697024/967428110493*ep2^10 - 630063104/47403977414157*ep2^11 + 10081009664/805867616040669*ep2^12 - 504050483200/42710983650155457*ep2^13 + 36658216960/3285460280781189*ep2^14 - 3858759680/365051142309021*ep2^15 + 30870077440/3076859628033177*ep2^16 - 61740154880/647201507965 [...]
-        - (143/4472496 - 143/4951692*ep2 + 65/2475846*ep2^2 - 208/8665461*ep2^3 + 416/18860121*ep2^4 - 128/6286707*ep2^5 + 4864/257754987*ep2^6 - 194560/11083464441*ep2^7 + 77824/4750056189*ep2^8 - 3424256/223252640883*ep2^9 + 157515776/10939379403267*ep2^10 - 2520252416/185969449855539*ep2^11 + 126012620800/9856380842343567*ep2^12 - 119139205120/9856380842343567*ep2^13 + 12540968960/1095153426927063*ep2^14 - 100327751680/9230578884099531*ep2^15 + 200655503360/19416045238967979*ep2^16) * k2^13
-        + (1001/32442120 - 91/3244212*ep2 + 104/4055265*ep2^2 - 208/8826165*ep2^3 + 64/2942055*ep2^4 - 128/6348645*ep2^5 + 1024/54598347*ep2^6 - 14336/818975205*ep2^7 + 630784/38491834635*ep2^8 - 4145152/269442842445*ep2^9 + 66322432/4580528321565*ep2^10 - 663224320/48553600208589*ep2^11 + 627048448/48553600208589*ep2^12 - 1254096896/102502044884799*ep2^13 + 10032775168/863945806886163*ep2^14 - 581900959744/52700694220055943*ep2^15) * k2^14
-        - (91/3069792 - 13/479655*ep2 + 26/1043955*ep2^2 - 8/347985*ep2^3 + 16/750915*ep2^4 - 128/6457869*ep2^5 + 1792/96868035*ep2^6 - 7168/413890695*ep2^7 + 47104/2897234865*ep2^8 - 753664/49252992705*ep2^9 + 7536640/522081722673*ep2^10 - 78381056/5742898949403*ep2^11 + 156762112/12123897782073*ep2^12 - 1254096896/102187138448901*ep2^13 + 72737619968/6233415445382961*ep2^14) * k2^15
-        + (26/915705 - 52/1993005*ep2 + 16/664335*ep2^2 - 32/1433565*ep2^3 + 256/12328659*ep2^4 - 512/26418555*ep2^5 + 22528/1241672085*ep2^6 - 1036288/60841932165*ep2^7 + 16580608/1034312846805*ep2^8 - 165806080/10963716176133*ep2^9 + 156762112/10963716176133*ep2^10 - 313524224/23145623038503*ep2^11 + 2508193792/195084537038811*ep2^12 - 145475239936/11900156759367471*ep2^13) * k2^16
-        - (17/626373 - 68/2714283*ep2 + 136/5857137*ep2^2 - 5440/251856891*ep2^3 + 15232/755570673*ep2^4 - 60928/3228347421*ep2^5 + 400384/22598431947*ep2^6 - 376832/22598431947*ep2^7 + 18841600/1197716893191*ep2^8 - 15073280/1013452755777*ep2^9 + 30146560/2139511373307*ep2^10 - 241172480/18033024432159*ep2^11 + 13988003840/1100014490361699*ep2^12) * k2^17
-        + (34/1312311 - 68/2831829*ep2 + 2720/121768647*ep2^2 - 1088/52186563*ep2^3 + 4352/222978951*ep2^4 - 8704/475042113*ep2^5 + 8192/475042113*ep2^6 - 409600/25177231989*ep2^7 + 327680/21303811683*ep2^8 - 655360/44974713553*ep2^9 + 5242880/379072585661*ep2^10 - 304087040/23123427725321*ep2^11) * k2^18
-        - (323/13069980 - 646/28100457*ep2 + 1292/60215265*ep2^2 - 5168/257283405*ep2^3 + 10336/548125515*ep2^4 - 9728/548125515*ep2^5 + 97280/5810130459*ep2^6 - 1011712/63911435049*ep2^7 + 106496/7101270561*ep2^8 - 851968/59853566157*ep2^9 + 49414144/3651067535577*ep2^10) * k2^19
-        + (323/13707540 - 323/14686650*ep2 + 646/31376025*ep2^2 - 1292/66844575*ep2^3 + 1216/66844575*ep2^4 - 2432/141710499*ep2^5 + 126464/7794077445*ep2^6 - 13312/866008605*ep2^7 + 106496/7299215385*ep2^8 - 6176768/445252138485*ep2^9) * k2^20
-        - (133/5920200 - 133/6323850*ep2 + 19/962325*ep2^2 - 304/16359525*ep2^3 + 608/34682193*ep2^4 - 2432/146732355*ep2^5 + 256/16303595*ep2^6 - 2048/137416015*ep2^7 + 118784/8382376915*ep2^8) * k2^21
-        + (1463/68297580 - 209/10393110*ep2 + 1672/88341435*ep2^2 - 16720/936419211*ep2^3 + 1216/72032247*ep2^4 - 128/8003583*ep2^5 + 1024/67458771*ep2^6 - 59392/4114985031*ep2^7) * k2^22
-        - (253/12383280 - 253/13157235*ep2 + 2530/139466691*ep2^2 - 184/10728207*ep2^3 + 368/22648437*ep2^4 - 2944/190893969*ep2^5 + 170752/11644532109*ep2^6) * k2^23
-        + (253/12978225 - 506/27513837*ep2 + 184/10582245*ep2^2 - 368/22340295*ep2^3 + 20608/1318077405*ep2^4 - 41216/2772507645*ep2^5) * k2^24
-        - (1265/67975362 - 46/2614437*ep2 + 92/5519367*ep2^2 - 736/46520379*ep2^3 + 1472/97853211*ep2^4) * k2^25
-        + (299/16821189 - 598/35511399*ep2 + 4784/299310363*ep2^2 - 9568/629583867*ep2^3) * k2^26
-        - (65/3826144 - 65/4031116*ep2 + 65/4239622*ep2^2) * k2^27
-        + (455/28005648 - 455/29454216*ep2) * k2^28
-        - 2639/169736160 * k2^29;
-C4[5] = + (1/792792 - 1/990990*ep2 + 1/1203345*ep2^2 - 16/22863555*ep2^3 + 32/53348295*ep2^4 - 128/245402157*ep2^5 + 256/557732175*ep2^6 - 2048/5019589575*ep2^7 + 4096/11197545975*ep2^8 - 16384/49589132175*ep2^9 + 32768/109096090785*ep2^10 - 1048576/3818363177475*ep2^11 + 2097152/8310555150975*ep2^12 - 8388608/36012405654225*ep2^13 + 16777216/77710980622275*ep2^14 - 134217728/668314433351565*ep2^15 + 268435456/1432102357181925*ep2^16 - 1073741824/6118982798868225*ep2^17 + 2147483648/1303 [...]
-        - (1/304920 - 1/370260*ep2 + 4/1758735*ep2^2 - 8/4103715*ep2^3 + 32/18877089*ep2^4 - 64/42902475*ep2^5 + 512/386122275*ep2^6 - 13312/11197545975*ep2^7 + 53248/49589132175*ep2^8 - 106496/109096090785*ep2^9 + 3407872/3818363177475*ep2^10 - 6815744/8310555150975*ep2^11 + 2097152/2770185050325*ep2^12 - 4194304/5977767740175*ep2^13 + 33554432/51408802565505*ep2^14 - 67108864/110161719783225*ep2^15 + 268435456/470690984528325*ep2^16 - 536870912/1002776445299475*ep2^17 + 8589934592/1704 [...]
-        + (7/1283568 - 7/1524237*ep2 + 2/508079*ep2^2 - 40/11685817*ep2^3 + 16/5311735*ep2^4 - 128/47805615*ep2^5 + 256/106643295*ep2^6 - 7168/3305942145*ep2^7 + 14336/7273072719*ep2^8 - 65536/36365363595*ep2^9 + 131072/79148144295*ep2^10 - 524288/342975291945*ep2^11 + 1048576/740104577355*ep2^12 - 8388608/6364899365253*ep2^13 + 117440512/95473490478795*ep2^14 - 469762048/407932186591215*ep2^15 + 134217728/124153274179935*ep2^16 - 2147483648/2110605661058895*ep2^17 + 21474836480/22372420 [...]
-        - (2/268983 - 4/627627*ep2 + 80/14435421*ep2^2 - 32/6561555*ep2^3 + 256/59053995*ep2^4 - 512/131735835*ep2^5 + 2048/583401555*ep2^6 - 4096/1283483421*ep2^7 + 131072/44921919735*ep2^8 - 4456448/1662111030195*ep2^9 + 17825792/7202481130845*ep2^10 - 35651584/15542196124455*ep2^11 + 285212672/133662886670313*ep2^12 - 570425344/286420471436385*ep2^13 + 2281701376/1223796559773645*ep2^14 - 4563402752/2607218757778635*ep2^15 + 4294967296/2607218757778635*ep2^16 - 42949672960/27636518832 [...]
-        + (1/110110 - 2/253253*ep2 + 4/575575*ep2^2 - 32/5180175*ep2^3 + 64/11555775*ep2^4 - 256/51175575*ep2^5 + 512/112586265*ep2^6 - 16384/3940519275*ep2^7 + 557056/145799213175*ep2^8 - 2228224/631796590425*ep2^9 + 84672512/25903660207425*ep2^10 - 677380096/222771477783855*ep2^11 + 1354760192/477367452393975*ep2^12 - 5419040768/2039660932956075*ep2^13 + 10838081536/4345364596297725*ep2^14 - 10200547328/4345364596297725*ep2^15 + 20401094656/9212172944151177*ep2^16 - 81604378624/3897457 [...]
-        - (3/289432 - 3/328900*ep2 + 2/246675*ep2^2 - 4/550275*ep2^3 + 112/17058525*ep2^4 - 224/37528755*ep2^5 + 1024/187643775*ep2^6 - 34816/6942819675*ep2^7 + 139264/30085551925*ep2^8 - 5292032/1233507628925*ep2^9 + 42336256/10608165608755*ep2^10 - 592707584/159122484131325*ep2^11 + 2370830336/679886977652025*ep2^12 - 677380096/206922123633225*ep2^13 + 637534208/206922123633225*ep2^14 - 1275068416/438674902102437*ep2^15 + 5100273664/1855932278125695*ep2^16 - 1610612736/618644092708565* [...]
-        + (1/88400 - 1/99450*ep2 + 1/110925*ep2^2 - 28/3438675*ep2^3 + 56/7565085*ep2^4 - 256/37825425*ep2^5 + 512/82325925*ep2^6 - 2048/356745675*ep2^7 + 77824/14626572675*ep2^8 - 622592/125788525005*ep2^9 + 8716288/1886827875075*ep2^10 - 34865152/8061900920775*ep2^11 + 229113856/56433306445425*ep2^12 - 3665821696/959366209572225*ep2^13 + 7331643392/2033856364293117*ep2^14 - 29326573568/8604776925855495*ep2^15 + 3087007744/956086325095055*ep2^16 - 24696061952/8058441882944035*ep2^17 + 4 [...]
-        - (1/83538 - 1/93177*ep2 + 4/412641*ep2^2 - 40/4539051*ep2^3 + 256/31773357*ep2^4 - 512/69153777*ep2^5 + 2048/299666367*ep2^6 - 77824/12286321047*ep2^7 + 3112960/528311805021*ep2^8 - 1245184/226419345009*ep2^9 + 4980736/967428110493*ep2^10 - 229113856/47403977414157*ep2^11 + 3665821696/805867616040669*ep2^12 - 183291084800/42710983650155457*ep2^13 + 146632867840/36140063088593079*ep2^14 - 15435038720/4015562565399231*ep2^15 + 123480309760/33845455908364947*ep2^16 - 246960619520/7 [...]
-        + (13/1049104 - 13/1161508*ep2 + 65/6388294*ep2^2 - 208/22359029*ep2^3 + 416/48663769*ep2^4 - 384/48663769*ep2^5 + 768/105011291*ep2^6 - 30720/4515485513*ep2^7 + 4096/645069359*ep2^8 - 16384/2756205443*ep2^9 + 753664/135054066707*ep2^10 - 12058624/2295919134019*ep2^11 + 602931200/121683714103007*ep2^12 - 6270484480/1338520855133077*ep2^13 + 112868720640/25431896247528463*ep2^14 - 902949765120/214354554086311331*ep2^15 + 1805899530240/450883717216034179*ep2^16) * k2^13
-        - (91/7209360 - 91/7930296*ep2 + 52/4956435*ep2^2 - 104/10787535*ep2^3 + 32/3595845*ep2^4 - 64/7759455*ep2^5 + 512/66731313*ep2^6 - 7168/1000969695*ep2^7 + 28672/4276870515*ep2^8 - 188416/29938093605*ep2^9 + 3014656/508947591285*ep2^10 - 30146560/5394844467621*ep2^11 + 313524224/59343289143831*ep2^12 - 627048448/125280277081421*ep2^13 + 5016387584/1055933763971977*ep2^14 - 290950479872/64411959602290597*ep2^15) * k2^14
-        + (13/1023264 - 13/1119195*ep2 + 26/2435895*ep2^2 - 8/811965*ep2^3 + 16/1752135*ep2^4 - 128/15068361*ep2^5 + 256/32289345*ep2^6 - 1024/137963565*ep2^7 + 47104/6760214685*ep2^8 - 753664/114923649645*ep2^9 + 7536640/1218190686237*ep2^10 - 78381056/13400097548607*ep2^11 + 156762112/28289094824837*ep2^12 - 1254096896/238436656380769*ep2^13 + 72737619968/14544636039226909*ep2^14) * k2^15
-        - (52/4103715 - 104/8931615*ep2 + 32/2977205*ep2^2 - 64/6424495*ep2^3 + 512/55250657*ep2^4 - 1024/118394265*ep2^5 + 4096/505866405*ep2^6 - 188416/24787453845*ep2^7 + 3014656/421386715365*ep2^8 - 30146560/4466699182869*ep2^9 + 313524224/49133691011559*ep2^10 - 1881145344/311180043073207*ep2^11 + 15049162752/2622803220188459*ep2^12 - 872851439616/159990996431495999*ep2^13) * k2^16
-        + (221/17608041 - 68/5869347*ep2 + 136/12665433*ep2^2 - 5440/544613619*ep2^3 + 15232/1633840857*ep2^4 - 60928/6980956389*ep2^5 + 17408/2124638901*ep2^6 - 16384/2124638901*ep2^7 + 819200/112605861753*ep2^8 - 8519680/1238664479283*ep2^9 + 17039360/2614958345153*ep2^10 - 136314880/22040363194861*ep2^11 + 7906263040/1344462154886521*ep2^12) * k2^17
-        - (17/1374802 - 17/1483339*ep2 + 680/63783577*ep2^2 - 1904/191350731*ep2^3 + 7616/817589487*ep2^4 - 2176/248831583*ep2^5 + 2048/248831583*ep2^6 - 102400/13188073899*ep2^7 + 81920/11159139453*ep2^8 - 491520/70674549869*ep2^9 + 3932160/595685491753*ep2^10 - 228065280/36336814996933*ep2^11) * k2^18
-        + (969/79872100 - 1938/171725015*ep2 + 1292/122660725*ep2^2 - 5168/524095825*ep2^3 + 10336/1116551975*ep2^4 - 9728/1116551975*ep2^5 + 19456/2367090187*ep2^6 - 1011712/130189960285*ep2^7 + 958464/130189960285*ep2^8 - 7667712/1097315379545*ep2^9 + 444727296/66936238152245*ep2^10) * k2^19
-        - (646/54449395 - 1292/116677275*ep2 + 5168/498530175*ep2^2 - 10336/1062086025*ep2^3 + 9728/1062086025*ep2^4 - 19456/2251622373*ep2^5 + 77824/9526094655*ep2^6 - 24576/3175364885*ep2^7 + 196608/26763789745*ep2^8 - 11403264/1632591174445*ep2^9) * k2^20
-        + (2261/195366600 - 2261/208687050*ep2 + 323/31756725*ep2^2 - 304/31756725*ep2^3 + 608/67324257*ep2^4 - 2432/284833395*ep2^5 + 256/31648155*ep2^6 - 2048/266748735*ep2^7 + 118784/16271672835*ep2^8) * k2^21
-        - (19/1686360 - 19/1796340*ep2 + 76/7634445*ep2^2 - 760/80925117*ep2^3 + 608/68475099*ep2^4 - 192/22825033*ep2^5 + 1536/192382421*ep2^6 - 89088/11735327681*ep2^7) * k2^22
-        + (437/39901680 - 437/42395535*ep2 + 4370/449392671*ep2^2 - 3496/380255337*ep2^3 + 368/42250593*ep2^4 - 2944/356112141*ep2^5 + 5888/749063469*ep2^6) * k2^23
-        - (46/4326075 - 92/9171279*ep2 + 368/38801565*ep2^2 - 736/81914415*ep2^3 + 41216/4832950485*ep2^4 - 82432/10165861365*ep2^5) * k2^24
-        + (115/11149398 - 46/4717053*ep2 + 92/9958223*ep2^2 - 5152/587535157*ep2^3 + 10304/1235849813*ep2^4) * k2^25
-        - (299/29904336 - 299/31565688*ep2 + 299/33256707*ep2^2 - 598/69953763*ep2^3) * k2^26
-        + (4485/462963424 - 4485/487765036*ep2 + 4485/512994262*ep2^2) * k2^27
-        - (4095/436421348 - 4095/458994866*ep2) * k2^28
-        + 1131/124473184 * k2^29;
-C4[6] = + (1/4684680 - 1/5688540*ep2 + 4/27020565*ep2^2 - 8/63047985*ep2^3 + 32/290020731*ep2^4 - 64/659138025*ep2^5 + 512/5932242225*ep2^6 - 1024/13233463425*ep2^7 + 4096/58605338025*ep2^8 - 8192/128931743655*ep2^9 + 262144/4512611027925*ep2^10 - 524288/9821565178425*ep2^11 + 2097152/42560115773175*ep2^12 - 4194304/91840249826325*ep2^13 + 33554432/789826148506395*ep2^14 - 67108864/1692484603942275*ep2^15 + 268435456/7231525125935175*ep2^16 - 536870912/15406292659601025*ep2^17 + 85899345 [...]
-        - (1/1516944 - 1/1801371*ep2 + 2/4203199*ep2^2 - 40/96673577*ep2^3 + 16/43942535*ep2^4 - 128/395482815*ep2^5 + 256/882230895*ep2^6 - 1024/3907022535*ep2^7 + 2048/8595449577*ep2^8 - 65536/300840735195*ep2^9 + 131072/654771011895*ep2^10 - 524288/2837341051545*ep2^11 + 1048576/6122683321755*ep2^12 - 8388608/52655076567093*ep2^13 + 16777216/112832306929485*ep2^14 - 67108864/482101675062345*ep2^15 + 134217728/1027086177306735*ep2^16 - 2147483648/17460465014214495*ep2^17 + 21474836480/ [...]
-        + (2/1589445 - 4/3708705*ep2 + 16/17060043*ep2^2 - 32/38772825*ep2^3 + 256/348955425*ep2^4 - 512/778439025*ep2^5 + 2048/3447372825*ep2^6 - 4096/7584220215*ep2^7 + 131072/265447707525*ep2^8 - 4456448/9821565178425*ep2^9 + 17825792/42560115773175*ep2^10 - 35651584/91840249826325*ep2^11 + 285212672/789826148506395*ep2^12 - 570425344/1692484603942275*ep2^13 + 2281701376/7231525125935175*ep2^14 - 4563402752/15406292659601025*ep2^15 + 4294967296/15406292659601025*ep2^16 - 8589934592/32 [...]
-        - (1/520520 - 1/598598*ep2 + 1/680225*ep2^2 - 8/6122025*ep2^3 + 16/13656825*ep2^4 - 64/60480225*ep2^5 + 128/133056495*ep2^6 - 4096/4656977325*ep2^7 + 139264/172308161025*ep2^8 - 557056/746668697775*ep2^9 + 21168128/30613416608775*ep2^10 - 169345024/263275382835465*ep2^11 + 338690048/564161534647425*ep2^12 - 1354760192/2410508375311725*ep2^13 + 2709520384/5135430886533675*ep2^14 - 2550136832/5135430886533675*ep2^15 + 5100273664/10887113479451391*ep2^16 - 20401094656/46060864720755 [...]
-        + (15/5814952 - 3/1321580*ep2 + 2/991185*ep2^2 - 4/2211105*ep2^3 + 112/68544255*ep2^4 - 224/150797361*ep2^5 + 1024/753986805*ep2^6 - 2048/1641030105*ep2^7 + 8192/7111130455*ep2^8 - 311296/291556348655*ep2^9 + 2490368/2507384598433*ep2^10 - 34865152/37610768976495*ep2^11 + 139460608/160700558354115*ep2^12 - 39845888/48908865586035*ep2^13 + 637534208/831450714962595*ep2^14 - 6375342080/8813377578603507*ep2^15 + 5100273664/7457473335741429*ep2^16 - 1610612736/2485824445247143*ep2^17 [...]
-        - (11/3447600 - 11/3878550*ep2 + 11/4326075*ep2^2 - 308/134108325*ep2^3 + 56/26821665*ep2^4 - 256/134108325*ep2^5 + 512/291882825*ep2^6 - 2048/1264825575*ep2^7 + 77824/51857848575*ep2^8 - 622592/445977497745*ep2^9 + 8716288/6689662466175*ep2^10 - 383516672/314414135910225*ep2^11 + 2520252416/2200898951371575*ep2^12 - 40324038656/37415282173316775*ep2^13 + 80648077312/79320398207431563*ep2^14 - 29326573568/30507845464396755*ep2^15 + 3087007744/3389760607155195*ep2^16 - 24696061952 [...]
-        + (11/2947698 - 11/3287817*ep2 + 308/101922327*ep2^2 - 280/101922327*ep2^3 + 256/101922327*ep2^4 - 512/221830947*ep2^5 + 2048/961267437*ep2^6 - 4096/2074313943*ep2^7 + 163840/89195499549*ep2^8 - 458752/267586498647*ep2^9 + 20185088/12576565436409*ep2^10 - 132644864/88035958054863*ep2^11 + 2122317824/1496611286932671*ep2^12 - 106115891200/79320398207431563*ep2^13 + 7717519360/6101569092879351*ep2^14 - 15435038720/12881090307189741*ep2^15 + 123480309760/108569189732027817*ep2^16 -  [...]
-        - (11/2622760 - 11/2903770*ep2 + 1/290377*ep2^2 - 32/10163195*ep2^3 + 64/22119895*ep2^4 - 768/287558635*ep2^5 + 1536/620521265*ep2^6 - 12288/5336482879*ep2^7 + 8192/3811773485*ep2^8 - 360448/179153353795*ep2^9 + 16580608/8778514335955*ep2^10 - 265289728/149234743711235*ep2^11 + 2652897280/1581888283339091*ep2^12 - 192937984/121683714103007*ep2^13 + 3472883712/2311990567957133*ep2^14 - 27783069696/19486777644210121*ep2^15 + 55566139392/40989428837821289*ep2^16) * k2^13
-        + (11/2403120 - 1/240312*ep2 + 4/1051365*ep2^2 - 8/2288265*ep2^3 + 32/9915815*ep2^4 - 64/21397285*ep2^5 + 512/184016651*ep2^6 - 1024/394321395*ep2^7 + 45056/18533105565*ep2^8 - 2072576/908122172685*ep2^9 + 33161216/15438076935645*ep2^10 - 331612160/163643615517837*ep2^11 + 24117248/12587970424449*ep2^12 - 144703488/79723812688177*ep2^13 + 1157627904/671957849800349*ep2^14 - 67142418432/40989428837821289*ep2^15) * k2^14
-        - (5/1023264 - 1/223839*ep2 + 2/487179*ep2^2 - 8/2111109*ep2^3 + 16/4555551*ep2^4 - 640/195888693*ep2^5 + 256/83952297*ep2^6 - 1024/358705269*ep2^7 + 47104/17576558181*ep2^8 - 753664/298801489077*ep2^9 + 37683200/15836478921081*ep2^10 - 30146560/13400097548607*ep2^11 + 60293120/28289094824837*ep2^12 - 482344960/238436656380769*ep2^13 + 27976007680/14544636039226909*ep2^14) * k2^15
-        + (4/780045 - 8/1697745*ep2 + 32/7356895*ep2^2 - 64/15875405*ep2^3 + 512/136528483*ep2^4 - 1024/292561035*ep2^5 + 45056/13750368645*ep2^6 - 90112/29294263635*ep2^7 + 1441792/498002481795*ep2^8 - 14417920/5278826307027*ep2^9 + 1048576/406063562079*ep2^10 - 6291456/2571735893167*ep2^11 + 50331648/21676059670979*ep2^12 - 2919235584/1322239639929719*ep2^13) * k2^16
-        - (17/3201462 - 34/6936501*ep2 + 68/14968239*ep2^2 - 2720/643634277*ep2^3 + 7616/1930902831*ep2^4 - 30464/8250221187*ep2^5 + 8704/2510936883*ep2^6 - 8192/2510936883*ep2^7 + 409600/133079654799*ep2^8 - 327680/112605861753*ep2^9 + 655360/237723485923*ep2^10 - 5242880/2003669381351*ep2^11 + 304087040/122223832262411*ep2^12) * k2^17
-        + (17/3124550 - 17/3371225*ep2 + 136/28992535*ep2^2 - 1904/434888025*ep2^3 + 7616/1858157925*ep2^4 - 2176/565526325*ep2^5 + 2048/565526325*ep2^6 - 4096/1198915809*ep2^7 + 16384/5072336115*ep2^8 - 98304/32124795395*ep2^9 + 786432/270766132615*ep2^10 - 45613056/16516734089515*ep2^11) * k2^18
-        - (969/175303700 - 1938/376902955*ep2 + 9044/1884514775*ep2^2 - 36176/8052017675*ep2^3 + 10336/2450614075*ep2^4 - 9728/2450614075*ep2^5 + 19456/5195301839*ep2^6 - 77824/21980123165*ep2^7 + 73728/21980123165*ep2^8 - 589824/185261038105*ep2^9 + 34209792/11300923324405*ep2^10) * k2^19
-        + (646/115828713 - 1292/248204385*ep2 + 5168/1060509645*ep2^2 - 10336/2259346635*ep2^3 + 9728/2259346635*ep2^4 - 97280/23949074331*ep2^5 + 77824/20264601357*ep2^6 - 8192/2251622373*ep2^7 + 65536/18977960001*ep2^8 - 3801088/1157655560061*ep2^9) * k2^20
-        - (323/57721950 - 646/123315075*ep2 + 1292/262714725*ep2^2 - 1216/262714725*ep2^3 + 2432/556955217*ep2^4 - 9728/2356348995*ep2^5 + 1024/261816555*ep2^6 - 8192/2206739535*ep2^7 + 475136/134611111635*ep2^8) * k2^21
-        + (3553/635757720 - 3553/677220180*ep2 + 836/169305045*ep2^2 - 8360/1794633477*ep2^3 + 608/138048729*ep2^4 - 192/46016243*ep2^5 + 1536/387851191*ep2^6 - 3072/815824919*ep2^7) * k2^22
-        - (4807/864536400 - 4807/918569925*ep2 + 9614/1947368241*ep2^2 - 3496/748987785*ep2^3 + 368/83220865*ep2^4 - 2944/701433005*ep2^5 + 5888/1475428045*ep2^6) * k2^23
-        + (9614/1743408225 - 19228/3696025437*ep2 + 6992/1421548245*ep2^2 - 736/157949805*ep2^3 + 41216/9319038495*ep2^4 - 82432/19602115455*ep2^5) * k2^24
-        - (6325/1159537392 - 115/22298796*ep2 + 115/23537618*ep2^2 - 3220/694359731*ep2^3 + 6440/1460549779*ep2^4) * k2^25
-        + (23/4272048 - 23/4509384*ep2 + 161/33256707*ep2^2 - 322/69953763*ep2^3) * k2^26
-        - (345/65044448 - 345/68528972*ep2 + 345/72073574*ep2^2) * k2^27
-        + (207/39674668 - 207/41726806*ep2) * k2^28
-        - 29/5657872 * k2^29;
-C4[7] = + (1/26254800 - 1/31177575*ep2 + 2/72747675*ep2^2 - 8/334639305*ep2^3 + 16/760543875*ep2^4 - 128/6844894875*ep2^5 + 256/15269380875*ep2^6 - 1024/67621543875*ep2^7 + 2048/148767396525*ep2^8 - 65536/5206858878375*ep2^9 + 131072/11332575205875*ep2^10 - 524288/49107825892125*ep2^11 + 1048576/105969519030375*ep2^12 - 8388608/911337863661225*ep2^13 + 16777216/1952866850702625*ep2^14 - 67108864/8344067453002125*ep2^15 + 134217728/17776491530308875*ep2^16 - 2147483648/302200356015250875* [...]
-        - (1/7335900 - 1/8558550*ep2 + 2/19684665*ep2^2 - 4/44737875*ep2^3 + 32/402640875*ep2^4 - 64/898198875*ep2^5 + 256/3977737875*ep2^6 - 512/8751023325*ep2^7 + 16384/306285816375*ep2^8 - 557056/11332575205875*ep2^9 + 2228224/49107825892125*ep2^10 - 4456448/105969519030375*ep2^11 + 35651584/911337863661225*ep2^12 - 71303168/1952866850702625*ep2^13 + 285212672/8344067453002125*ep2^14 - 570425344/17776491530308875*ep2^15 + 536870912/17776491530308875*ep2^16 - 1073741824/376861620442548 [...]
-        + (1/3403400 - 1/3913910*ep2 + 1/4447625*ep2^2 - 8/40028625*ep2^3 + 16/89294625*ep2^4 - 64/395447625*ep2^5 + 128/869984775*ep2^6 - 4096/30449467125*ep2^7 + 8192/66272369625*ep2^8 - 32768/287180268375*ep2^9 + 1245184/11774391003375*ep2^10 - 9961472/101259762629025*ep2^11 + 19922944/216985205633625*ep2^12 - 79691776/927118605889125*ep2^13 + 159383552/1975165725589875*ep2^14 - 2550136832/33577817335027875*ep2^15 + 5100273664/71184972750259095*ep2^16 - 20401094656/301167192404942325* [...]
-        - (1/2012868 - 1/2287350*ep2 + 4/10293075*ep2^2 - 8/22961475*ep2^3 + 224/711805725*ep2^4 - 448/1565972595*ep2^5 + 2048/7829862975*ep2^6 - 4096/17041466475*ep2^7 + 16384/73846354725*ep2^8 - 622592/3027700543725*ep2^9 + 4980736/26038224676035*ep2^10 - 69730304/390573370140525*ep2^11 + 278921216/1668813490600425*ep2^12 - 79691776/507899758008825*ep2^13 + 1275068416/8634295886150025*ep2^14 - 2550136832/18304707278638053*ep2^15 + 10200547328/77442992332699455*ep2^16 - 1073741824/86047 [...]
-        + (11/15116400 - 11/17005950*ep2 + 11/18968175*ep2^2 - 308/588013425*ep2^3 + 56/117602685*ep2^4 - 256/588013425*ep2^5 + 512/1279793925*ep2^6 - 2048/5545773675*ep2^7 + 4096/11967195825*ep2^8 - 32768/102917884095*ep2^9 + 458752/1543768261425*ep2^10 - 20185088/72557108286975*ep2^11 + 132644864/507899758008825*ep2^12 - 2122317824/8634295886150025*ep2^13 + 4244635648/18304707278638053*ep2^14 - 1543503872/7040272030245405*ep2^15 + 3087007744/14862796508295855*ep2^16 - 24696061952/12527 [...]
-        - (11/11337300 - 11/12645450*ep2 + 154/196004475*ep2^2 - 28/39200895*ep2^3 + 128/196004475*ep2^4 - 256/426597975*ep2^5 + 1024/1848591225*ep2^6 - 2048/3989065275*ep2^7 + 16384/34305961365*ep2^8 - 229376/514589420475*ep2^9 + 10092544/24185702762325*ep2^10 - 66322432/169299919336275*ep2^11 + 1061158912/2878098628716675*ep2^12 - 2122317824/6101569092879351*ep2^13 + 771751936/2346757343415135*ep2^14 - 1543503872/4954265502765285*ep2^15 + 12348030976/41757380666164545*ep2^16 - 24696061 [...]
-        + (143/118024200 - 143/130669650*ep2 + 13/13066965*ep2^2 - 416/457343775*ep2^3 + 832/995395275*ep2^4 - 256/331798425*ep2^5 + 512/715986075*ep2^6 - 4096/6157480245*ep2^7 + 8192/13194600525*ep2^8 - 360448/620146224675*ep2^9 + 16580608/30387165009075*ep2^10 - 265289728/516581805154275*ep2^11 + 530579456/1095153426927063*ep2^12 - 2508193792/5475767134635315*ep2^13 + 5016387584/11559952839785665*ep2^14 - 40131100672/97433888221050605*ep2^15 + 80262201344/204947144189106445*ep2^16) * k2^13
-        - (13/9011700 - 13/9912870*ep2 + 208/173475225*ep2^2 - 416/377563725*ep2^3 + 128/125854575*ep2^4 - 256/271580925*ep2^5 + 2048/2335595955*ep2^6 - 4096/5004848475*ep2^7 + 16384/21384352575*ep2^8 - 753664/1047833276175*ep2^9 + 12058624/17813165694975*ep2^10 - 24117248/37763911273347*ep2^11 + 1254096896/2077015120034085*ep2^12 - 2508193792/4384809697849735*ep2^13 + 20065550336/36957681739019195*ep2^14 - 1163801919488/2254418586080170895*ep2^15) * k2^14
-        + (13/7845024 - 13/8580495*ep2 + 26/18675195*ep2^2 - 8/6225065*ep2^3 + 16/13433035*ep2^4 - 128/115524101*ep2^5 + 256/247551645*ep2^6 - 1024/1057720665*ep2^7 + 2048/2253404895*ep2^8 - 32768/38307883215*ep2^9 + 327680/406063562079*ep2^10 - 3407872/4466699182869*ep2^11 + 20447232/28289094824837*ep2^12 - 163577856/238436656380769*ep2^13 + 9487515648/14544636039226909*ep2^14) * k2^15
-        - (13/7020405 - 26/15279705*ep2 + 8/5093235*ep2^2 - 16/10990665*ep2^3 + 128/94519719*ep2^4 - 256/202542255*ep2^5 + 11264/9519485985*ep2^6 - 22528/20280644055*ep2^7 + 360448/344770948935*ep2^8 - 3604480/3654572058711*ep2^9 + 3407872/3654572058711*ep2^10 - 6815744/7715207679501*ep2^11 + 54525952/65028179012937*ep2^12 - 3162505216/3966718919789157*ep2^13) * k2^16
-        + (221/109140750 - 34/18190125*ep2 + 68/39252375*ep2^2 - 544/337570425*ep2^3 + 7616/5063556375*ep2^4 - 335104/237987149625*ep2^5 + 95744/72430871625*ep2^6 - 90112/72430871625*ep2^7 + 180224/153553447845*ep2^8 - 851968/767767239225*ep2^9 + 1703936/1620841949475*ep2^10 - 13631488/13661382145575*ep2^11 + 790626304/833344310880075*ep2^12) * k2^17
-        - (17/7811375 - 34/16856125*ep2 + 272/144962675*ep2^2 - 3808/2174440125*ep2^3 + 15232/9290789625*ep2^4 - 4352/2827631625*ep2^5 + 4096/2827631625*ep2^6 - 8192/5994579045*ep2^7 + 32768/25361680575*ep2^8 - 196608/160623976975*ep2^9 + 1572864/1353830663075*ep2^10 - 91226112/82583670447575*ep2^11) * k2^18
-        + (323/140035500 - 646/301076325*ep2 + 9044/4516144875*ep2^2 - 36176/19296255375*ep2^3 + 10336/5872773375*ep2^4 - 9728/5872773375*ep2^5 + 19456/12450279555*ep2^6 - 1011712/684765375525*ep2^7 + 106496/76085041725*ep2^8 - 851968/641288208825*ep2^9 + 49414144/39118580738325*ep2^10) * k2^19
-        - (323/133648515 - 646/286389675*ep2 + 2584/1223664975*ep2^2 - 5168/2606938425*ep2^3 + 4864/2606938425*ep2^4 - 9728/5526709461*ep2^5 + 38912/23382232335*ep2^6 - 4096/2598025815*ep2^7 + 32768/21897646155*ep2^8 - 1900544/1335756415455*ep2^9) * k2^20
-        + (323/128764350 - 646/275087475*ep2 + 1292/586055925*ep2^2 - 1216/586055925*ep2^3 + 2432/1242438561*ep2^4 - 9728/5256470835*ep2^5 + 1024/584052315*ep2^6 - 8192/4922726655*ep2^7 + 16384/10354700895*ep2^8) * k2^21
-        - (3553/1375437375 - 7106/2930279625*ep2 + 6688/2930279625*ep2^2 - 13376/6212192805*ep2^3 + 4864/2389304925*ep2^4 - 512/265478325*ep2^5 + 4096/2237603025*ep2^6 - 8192/4706682225*ep2^7) * k2^22
-        + (81719/30923802000 - 4807/1932737625*ep2 + 9614/4097403765*ep2^2 - 3496/1575924525*ep2^3 + 368/175102725*ep2^4 - 2944/1475865825*ep2^5 + 5888/3104407425*ep2^6) * k2^23
-        - (4807/1788111000 - 4807/1895397660*ep2 + 437/182249775*ep2^2 - 46/20249975*ep2^3 + 2576/1194748525*ep2^4 - 5152/2513091725*ep2^5) * k2^24
-        + (2185/802756656 - 437/169813908*ep2 + 23/9434106*ep2^2 - 644/278306127*ep2^3 + 1288/585402543*ep2^4) * k2^25
-        - (299/108937224 - 299/114989292*ep2 + 4186/1696092057*ep2^2 - 8372/3567641913*ep2^3) * k2^26
-        + (897/325222240 - 897/342644860*ep2 + 897/360367870*ep2^2) * k2^27
-        - (299/108203640 - 299/113800380*ep2) * k2^28
-        + 8671/3140118960 * k2^29;
-C4[8] = + (1/141338340 - 1/164894730*ep2 + 2/379257879*ep2^2 - 4/861949725*ep2^3 + 32/7757547525*ep2^4 - 64/17305298325*ep2^5 + 256/76637749725*ep2^6 - 512/168603049395*ep2^7 + 16384/5901106728825*ep2^8 - 32768/12843585233325*ep2^9 + 131072/55655536011075*ep2^10 - 262144/120098788234425*ep2^11 + 2097152/1032849578816055*ep2^12 - 4194304/2213249097462975*ep2^13 + 16777216/9456609780069075*ep2^14 - 33554432/20146690401016725*ep2^15 + 536870912/342493736817284325*ep2^16 - 1073741824/7260867 [...]
-        - (1/34714680 - 1/39921882*ep2 + 1/45365775*ep2^2 - 8/408291975*ep2^3 + 16/910805175*ep2^4 - 64/4033565775*ep2^5 + 128/8873844705*ep2^6 - 4096/310584564675*ep2^7 + 8192/675978170175*ep2^8 - 32768/2929238737425*ep2^9 + 1245184/120098788234425*ep2^10 - 9961472/1032849578816055*ep2^11 + 19922944/2213249097462975*ep2^12 - 79691776/9456609780069075*ep2^13 + 159383552/20146690401016725*ep2^14 - 2550136832/342493736817284325*ep2^15 + 5100273664/726086722052642769*ep2^16 - 20401094656/30 [...]
-        + (5/72239596 - 1/16418090*ep2 + 4/73881405*ep2^2 - 8/164812365*ep2^3 + 224/5109183315*ep2^4 - 448/11240203293*ep2^5 + 2048/56201016465*ep2^6 - 4096/122319859365*ep2^7 + 16384/530052723915*ep2^8 - 32768/1143797983185*ep2^9 + 262144/9836662655391*ep2^10 - 3670016/147549939830865*ep2^11 + 14680064/630440652004605*ep2^12 - 4194304/191873241914445*ep2^13 + 67108864/3261845112545565*ep2^14 - 671088640/34575558192982989*ep2^15 + 536870912/29256241547908683*ep2^16 - 1073741824/617631766 [...]
-        - (11/85659600 - 11/96367050*ep2 + 11/107486325*ep2^2 - 308/3332076075*ep2^3 + 56/666415215*ep2^4 - 256/3332076075*ep2^5 + 512/7252165575*ep2^6 - 2048/31426050825*ep2^7 + 4096/67814109675*ep2^8 - 32768/583201343205*ep2^9 + 458752/8748020148075*ep2^10 - 20185088/411156946959525*ep2^11 + 132644864/2878098628716675*ep2^12 - 2122317824/48927676688183475*ep2^13 + 4244635648/103726674578948967*ep2^14 - 1543503872/39894874838057295*ep2^15 + 3087007744/84222513547009845*ep2^16 - 24696061 [...]
-        + (11/53965548 - 11/60192342*ep2 + 22/133283043*ep2^2 - 20/133283043*ep2^3 + 128/932981301*ep2^4 - 256/2030606361*ep2^5 + 1024/8799294231*ep2^6 - 2048/18987950709*ep2^7 + 81920/816481880487*ep2^8 - 32768/349920805923*ep2^9 + 1441792/16446277878381*ep2^10 - 66322432/805867616040669*ep2^11 + 1061158912/13699749472691373*ep2^12 - 53057945600/726086722052642769*ep2^13 + 3858759680/55852824773280213*ep2^14 - 7717519360/117911518965813783*ep2^15 + 61740154880/993825659854716171*ep2^16  [...]
-        - (13/44586920 - 13/49364090*ep2 + 13/54300499*ep2^2 - 416/1900517465*ep2^3 + 832/4136420365*ep2^4 - 768/4136420365*ep2^5 + 1536/8925959735*ep2^6 - 12288/76763253721*ep2^7 + 8192/54830895515*ep2^8 - 32768/234277462655*ep2^9 + 1507328/11479595670095*ep2^10 - 24117248/195153126391615*ep2^11 + 241172480/2068623139751119*ep2^12 - 2508193792/22754854537262309*ep2^13 + 45147488256/432342236207983871*ep2^14 - 361179906048/3644027419467292627*ep2^15 + 722359812096/7665023192672581043*ep2 [...]
-        + (91/234904980 - 91/258395478*ep2 + 208/645988695*ep2^2 - 416/1405975395*ep2^3 + 128/468658465*ep2^4 - 256/1011315635*ep2^5 + 2048/8697314461*ep2^6 - 28672/130459716915*ep2^7 + 114688/557418790455*ep2^8 - 32768/169649197095*ep2^9 + 524288/2884036350615*ep2^10 - 5242880/30570785316519*ep2^11 + 54525952/336278638481709*ep2^12 - 327155712/2129764710384157*ep2^13 + 2617245696/17950873987523609*ep2^14 - 151800250368/1095003313238940149*ep2^15) * k2^14
-        - (65/133365408 - 13/29173683*ep2 + 26/63495663*ep2^2 - 8/21165221*ep2^3 + 16/45672319*ep2^4 - 640/1963909717*ep2^5 + 256/841675593*ep2^6 - 1024/3596250261*ep2^7 + 2048/7661576643*ep2^8 - 32768/130246802931*ep2^9 + 1638400/6903080555343*ep2^10 - 17039360/75933886108773*ep2^11 + 102236160/480914612022229*ep2^12 - 817889280/4053423158473073*ep2^13 + 47437578240/247258812666857453*ep2^14) * k2^15
-        + (13/22101275 - 26/48102775*ep2 + 24/48102775*ep2^2 - 48/103800725*ep2^3 + 384/892686235*ep2^4 - 256/637633025*ep2^5 + 11264/29968752175*ep2^6 - 22528/63846472025*ep2^7 + 360448/1085390024425*ep2^8 - 720896/2301026851781*ep2^9 + 3407872/11505134258905*ep2^10 - 61341696/218597550919195*ep2^11 + 490733568/1842465072033215*ep2^12 - 28462546944/112390369394026115*ep2^13) * k2^16
-        - (1/1455210 - 2/3152955*ep2 + 4/6803745*ep2^2 - 32/58512207*ep2^3 + 448/877683105*ep2^4 - 19712/41251105935*ep2^5 + 5632/12554684415*ep2^6 - 90112/213429635055*ep2^7 + 901120/2262354131583*ep2^8 - 65536/174027240891*ep2^9 + 131072/367390841881*ep2^10 - 1048576/3096579952997*ep2^11 + 60817408/188891377132817*ep2^12) * k2^17
-        + (1/1278225 - 2/2758275*ep2 + 16/23721165*ep2^2 - 224/355817475*ep2^3 + 9856/16723421325*ep2^4 - 2816/5089736925*ep2^5 + 45056/86525527725*ep2^6 - 90112/183434118777*ep2^7 + 32768/70551584145*ep2^8 - 65536/148942233195*ep2^9 + 524288/1255370251215*ep2^10 - 30408704/76577585324115*ep2^11) * k2^18
-        - (19/21783300 - 38/46834095*ep2 + 76/100358775*ep2^2 - 304/428805675*ep2^3 + 608/913542525*ep2^4 - 9728/15530222925*ep2^5 + 19456/32924072601*ep2^6 - 1011712/1810823993055*ep2^7 + 106496/201202665895*ep2^8 - 851968/1695851041115*ep2^9 + 49414144/103446913508015*ep2^10) * k2^19
-        + (19/19875933 - 38/42591285*ep2 + 152/181980945*ep2^2 - 304/387698535*ep2^3 + 4864/6590875095*ep2^4 - 48640/69863276007*ep2^5 + 505856/768496036077*ep2^6 - 53248/85388448453*ep2^7 + 425984/719702636961*ep2^8 - 851968/1513857270849*ep2^9) * k2^20
-        - (133/128764350 - 266/275087475*ep2 + 76/83722275*ep2^2 - 1216/1423278675*ep2^3 + 2432/3017350791*ep2^4 - 9728/12765714885*ep2^5 + 1024/1418412765*ep2^6 - 8192/11955193305*ep2^7 + 16384/25147130745*ep2^8) * k2^21
-        + (209/189504705 - 418/403727415*ep2 + 6688/6863366055*ep2^2 - 66880/72751680183*ep2^3 + 4864/5596283091*ep2^4 - 1536/1865427697*ep2^5 + 12288/15722890589*ep2^6 - 24576/33072287101*ep2^7) * k2^22
-        - (4807/4123173600 - 4807/4380871950*ep2 + 4807/4643724267*ep2^2 - 1748/1786047795*ep2^3 + 184/198449755*ep2^4 - 1472/1672647935*ep2^5 + 2944/3518328415*ep2^6) * k2^23
-        + (437/357622200 - 437/379079532*ep2 + 437/400949505*ep2^2 - 46/44549945*ep2^3 + 2576/2628446755*ep2^4 - 5152/5528801795*ep2^5) * k2^24
-        - (10925/8592469392 - 2185/1817637756*ep2 + 345/302939626*ep2^2 - 9660/8936718967*ep2^3 + 19320/18797926103*ep2^4) * k2^25
-        + (5681/4321176552 - 299/240065364*ep2 + 598/505852017*ep2^2 - 1196/1064033553*ep2^3) * k2^26
-        - (1495/1105755616 - 1495/1164992524*ep2 + 1495/1225250758*ep2^2) * k2^27
-        + (6279/4537339304 - 6279/4772029268*ep2) * k2^28
-        - 8671/6147020752 * k2^29;
-C4[9] = + (1/737176440 - 1/847752906*ep2 + 1/963355575*ep2^2 - 8/8670200175*ep2^3 + 16/19341215775*ep2^4 - 64/85653955575*ep2^5 + 128/188438702265*ep2^6 - 4096/6595354579275*ep2^7 + 8192/14354595260775*ep2^8 - 32768/62203246130025*ep2^9 + 65536/134228057438475*ep2^10 - 524288/1154361293970885*ep2^11 + 1048576/2473631344223325*ep2^12 - 4194304/10569152107136025*ep2^13 + 8388608/22516889271724575*ep2^14 - 134217728/382787117619317775*ep2^15 + 268435456/811508689352953683*ep2^16 - 107374182 [...]
-        - (1/161476744 - 1/183496300*ep2 + 2/412866675*ep2^2 - 4/921010275*ep2^3 + 112/28551318525*ep2^4 - 224/62812900755*ep2^5 + 1024/314064503775*ep2^6 - 2048/683552155275*ep2^7 + 8192/2962059339525*ep2^8 - 16384/6391812258975*ep2^9 + 131072/54969585427185*ep2^10 - 1835008/824543781407775*ep2^11 + 7340032/3523050702378675*ep2^12 - 2097152/1072232822463075*ep2^13 + 33554432/18227957981872275*ep2^14 - 67108864/38643270921569223*ep2^15 + 268435456/163490761591254405*ep2^16 - 536870912/34 [...]
-        + (11/670160400 - 11/753930450*ep2 + 11/840922425*ep2^2 - 44/3724085025*ep2^3 + 8/744817005*ep2^4 - 256/26068595175*ep2^5 + 512/56737530675*ep2^6 - 2048/245862632925*ep2^7 + 4096/530545681575*ep2^8 - 32768/4562692861545*ep2^9 + 65536/9777198989025*ep2^10 - 2883584/459528352484175*ep2^11 + 132644864/22516889271724575*ep2^12 - 2122317824/382787117619317775*ep2^13 + 4244635648/811508689352953683*ep2^14 - 1543503872/312118726674212955*ep2^15 + 3087007744/658917311867782905*ep2^16 - 2 [...]
-        - (1/30157218 - 1/33636897*ep2 + 4/148963401*ep2^2 - 40/1638597411*ep2^3 + 256/11470181877*ep2^4 - 512/24964513497*ep2^5 + 2048/108179558487*ep2^6 - 4096/233440099893*ep2^7 + 163840/10037924295399*ep2^8 - 65536/4301967555171*ep2^9 + 262144/18381134099367*ep2^10 - 12058624/900675570868983*ep2^11 + 192937984/15311484704772711*ep2^12 - 9646899200/811508689352953683*ep2^13 + 7717519360/686661198683268501*ep2^14 - 15435038720/1449618086109122391*ep2^15 + 123480309760/12218209582919745 [...]
-        + (13/229229224 - 13/253789498*ep2 + 65/1395842239*ep2^2 - 416/9770895673*ep2^3 + 832/21266067053*ep2^4 - 768/21266067053*ep2^5 + 1536/45889934167*ep2^6 - 61440/1973267169181*ep2^7 + 8192/281895309883*ep2^8 - 32768/1204461778591*ep2^9 + 65536/2566027267433*ep2^10 - 1048576/43622463546361*ep2^11 + 52428800/2311990567957133*ep2^12 - 545259520/25431896247528463*ep2^13 + 9814671360/483206028703040797*ep2^14 - 78517370880/4072736527639915289*ep2^15 + 157034741760/8566790627104649401*e [...]
-        - (91/1050163440 - 91/1155179784*ep2 + 52/721987365*ep2^2 - 104/1571384265*ep2^3 + 32/523794755*ep2^4 - 64/1130293945*ep2^5 + 512/9720527927*ep2^6 - 7168/145807918905*ep2^7 + 28672/622997471685*ep2^8 - 8192/189607926165*ep2^9 + 131072/3223334744805*ep2^10 - 1310720/34167348294933*ep2^11 + 13631488/375840831244263*ep2^12 - 81788928/2380325264546999*ep2^13 + 654311424/20062741515467563*ep2^14 - 37950062592/1223827232443521343*ep2^15) * k2^14
-        + (91/745277280 - 13/116449575*ep2 + 26/253449075*ep2^2 - 8/84483025*ep2^3 + 16/182305475*ep2^4 - 128/1567827085*ep2^5 + 1792/23517406275*ep2^6 - 7168/100483463175*ep2^7 + 2048/30581923575*ep2^8 - 32768/519892700775*ep2^9 + 65536/1102172525643*ep2^10 - 3407872/60619488910365*ep2^11 + 20447232/383923429765645*ep2^12 - 163577856/3235926050881865*ep2^13 + 9487515648/197391489103793765*ep2^14) * k2^15
-        - (4/24701425 - 8/53761925*ep2 + 96/698905025*ep2^2 - 192/1508163475*ep2^3 + 1536/12970205885*ep2^4 - 1024/9264432775*ep2^5 + 45056/435428340425*ep2^6 - 90112/927651681775*ep2^7 + 1441792/15770078590175*ep2^8 - 2883584/33432566611171*ep2^9 + 1048576/12858679465835*ep2^10 - 18874368/244314909850865*ep2^11 + 150994944/2059225668743005*ep2^12 - 8757706752/125612765793323305*ep2^13) * k2^16
-        + (17/82946970 - 34/179718435*ep2 + 68/387813465*ep2^2 - 544/3335195799*ep2^3 + 7616/50027936985*ep2^4 - 335104/2351313038295*ep2^5 + 95744/715617011655*ep2^6 - 90112/715617011655*ep2^7 + 901120/7585540323543*ep2^8 - 65536/583503101811*ep2^9 + 131072/1231839881601*ep2^10 - 1048576/10382650430637*ep2^11 + 60817408/633341676268857*ep2^12) * k2^17
-        - (17/68001570 - 17/73370115*ep2 + 136/630982989*ep2^2 - 272/1352106405*ep2^3 + 11968/63549001035*ep2^4 - 23936/135387002205*ep2^5 + 22528/135387002205*ep2^6 - 225280/1435102223373*ep2^7 + 16384/110392478721*ep2^8 - 32768/233050788411*ep2^9 + 262144/1964285216607*ep2^10 - 15204352/119821398213027*ep2^11) * k2^18
-        + (17/57428700 - 34/123471705*ep2 + 68/264582225*ep2^2 - 2992/12435364575*ep2^3 + 5984/26492733225*ep2^4 - 5632/26492733225*ep2^5 + 11264/56164594437*ep2^6 - 53248/280822972185*ep2^7 + 106496/592848496835*ep2^8 - 851968/4996865901895*ep2^9 + 1703936/10510648966055*ep2^10) * k2^19
-        - (34/99379665 - 68/212956425*ep2 + 272/909904725*ep2^2 - 544/1938492675*ep2^3 + 512/1938492675*ep2^4 - 1024/4109604471*ep2^5 + 53248/226028245905*ep2^6 - 106496/477170741355*ep2^7 + 851968/4021867677135*ep2^8 - 1703936/8459790631215*ep2^9) * k2^20
-        + (119/307053450 - 238/655977825*ep2 + 68/199645425*ep2^2 - 64/199645425*ep2^3 + 128/423248301*ep2^4 - 6656/23278656555*ep2^5 + 13312/49143830505*ep2^6 - 106496/414212285685*ep2^7 + 212992/871274118165*ep2^8) * k2^21
-        - (1309/3032075280 - 187/461402760*ep2 + 22/57675345*ep2^2 - 220/611358657*ep2^3 + 16/47027589*ep2^4 - 96/297841397*ep2^5 + 768/2510377489*ep2^6 - 1536/5280449201*ep2^7) * k2^22
-        + (391/824634720 - 23/51539670*ep2 + 115/273160251*ep2^2 - 92/231135597*ep2^3 + 184/487952927*ep2^4 - 1472/4112746099*ep2^5 + 2944/8650948691*ep2^6) * k2^23
-        - (23/44702775 - 46/94769883*ep2 + 184/400949505*ep2^2 - 368/846448955*ep2^3 + 20608/49940488345*ep2^4 - 41216/105047234105*ep2^5) * k2^24
-        + (115/208122096 - 23/44025828*ep2 + 69/139415122*ep2^2 - 276/587535157*ep2^3 + 552/1235849813*ep2^4) * k2^25
-        - (299/508373712 - 299/536616696*ep2 + 299/565364019*ep2^2 - 598/1189213971*ep2^3) * k2^26
-        + (1495/2406644576 - 1495/2535571964*ep2 + 1495/2666722238*ep2^2) * k2^27
-        - (31395/48175867316 - 31395/50667722522*ep2) * k2^28
-        + 4669/6870199664 * k2^29;
-C4[10] = + (1/3747960216 - 1/4259045700*ep2 + 2/9582852825*ep2^2 - 4/21377133225*ep2^3 + 16/94670161425*ep2^4 - 32/208274355135*ep2^5 + 1024/7289602429725*ep2^6 - 2048/15865605288225*ep2^7 + 8192/68750956248975*ep2^8 - 16384/148357326642525*ep2^9 + 131072/1275873009125715*ep2^10 - 262144/2734013590983675*ep2^11 + 1048576/11681694434202975*ep2^12 - 2097152/24887088142432425*ep2^13 + 33554432/423080498421351225*ep2^14 - 67108864/896930656653264597*ep2^15 + 268435456/3794706624302273295*ep2 [...]
-        - (1/740703600 - 1/833291550*ep2 + 1/929440575*ep2^2 - 4/4116093975*ep2^3 + 8/9055406745*ep2^4 - 256/316939236075*ep2^5 + 512/689808925575*ep2^6 - 2048/2989172010825*ep2^7 + 4096/6450318549675*ep2^8 - 32768/55472739527205*ep2^9 + 65536/118870156129725*ep2^10 - 262144/507899758008825*ep2^11 + 12058624/24887088142432425*ep2^12 - 192937984/423080498421351225*ep2^13 + 385875968/896930656653264597*ep2^14 - 1543503872/3794706624302273295*ep2^15 + 3087007744/8011047317971465845*ep2^16 - [...]
-        + (1/255542742 - 1/285028443*ep2 + 4/1262268819*ep2^2 - 40/13884957009*ep2^3 + 256/97194699063*ep2^4 - 512/211541403843*ep2^5 + 2048/916679416653*ep2^6 - 4096/1978097688567*ep2^7 + 163840/85058200608381*ep2^8 - 65536/36453514546449*ep2^9 + 262144/155755925789373*ep2^10 - 524288/331827841899099*ep2^11 + 8388608/5641073312284683*ep2^12 - 419430400/298976885551088199*ep2^13 + 335544320/252980441620151553*ep2^14 - 671088640/534069821198097723*ep2^15 + 5368709120/4501445635812537951*e [...]
-        - (13/1520151696 - 13/1683025092*ep2 + 65/9256638006*ep2^2 - 208/32398233021*ep2^3 + 416/70513801281*ep2^4 - 128/23504600427*ep2^5 + 256/50720453553*ep2^6 - 10240/2180979502779*ep2^7 + 4096/934705501191*ep2^8 - 16384/3993741686907*ep2^9 + 32768/8508406202541*ep2^10 - 524288/144642905443197*ep2^11 + 26214400/7666073988489441*ep2^12 - 272629760/84326813873383851*ep2^13 + 545259520/178023273732699241*ep2^14 - 4362076160/1500481878604179317*ep2^15 + 8724152320/3156186020512239253*ep2 [...]
-        + (13/829076400 - 13/911984040*ep2 + 52/3989930175*ep2^2 - 104/8683965675*ep2^3 + 32/2894655225*ep2^4 - 64/6246361275*ep2^5 + 512/53718706965*ep2^6 - 1024/115111514925*ep2^7 + 4096/491840109225*ep2^8 - 8192/1047833276175*ep2^9 + 131072/17813165694975*ep2^10 - 262144/37763911273347*ep2^11 + 13631488/2077015120034085*ep2^12 - 27262976/4384809697849735*ep2^13 + 218103808/36957681739019195*ep2^14 - 12650020864/2254418586080170895*ep2^15) * k2^14
-        - (1/39225120 - 1/42902475*ep2 + 2/93375975*ep2^2 - 8/404629225*ep2^3 + 16/873147275*ep2^4 - 128/7509066565*ep2^5 + 256/16090856925*ep2^6 - 1024/68751843225*ep2^7 + 2048/146471318175*ep2^8 - 32768/2490012408975*ep2^9 + 65536/5278826307027*ep2^10 - 262144/22333495914345*ep2^11 + 1572864/141445474124185*ep2^12 - 12582912/1192183281903845*ep2^13 + 729808896/72723180196134545*ep2^14) * k2^15
-        + (4/105306075 - 8/229195575*ep2 + 32/993180825*ep2^2 - 64/2143179675*ep2^3 + 512/18431345205*ep2^4 - 1024/39495739725*ep2^5 + 45056/1856299767075*ep2^6 - 90112/3954725590725*ep2^7 + 1441792/67230335042325*ep2^8 - 2883584/142528310289729*ep2^9 + 1048576/54818580880665*ep2^10 - 2097152/115728115192515*ep2^11 + 16777216/975422685194055*ep2^12 - 973078528/59500783796837355*ep2^13) * k2^16
-        - (17/320873805 - 68/1390453155*ep2 + 136/3000451545*ep2^2 - 1088/25803883287*ep2^3 + 2176/55294035615*ep2^4 - 95744/2598819673905*ep2^5 + 191488/5536615827015*ep2^6 - 180224/5536615827015*ep2^7 + 1802240/58688127766359*ep2^8 - 131072/4514471366643*ep2^9 + 262144/9530550662913*ep2^10 - 2097152/80328927015981*ep2^11 + 121634816/4900064547974841*ep2^12) * k2^17
-        + (17/242181030 - 17/261300585*ep2 + 136/2247185031*ep2^2 - 272/4815396495*ep2^3 + 11968/226323635265*ep2^4 - 23936/482167744695*ep2^5 + 22528/482167744695*ep2^6 - 225280/5110978093767*ep2^7 + 16384/393152161059*ep2^8 - 32768/829987895569*ep2^9 + 262144/6995612262653*ep2^10 - 524288/14714908552477*ep2^11) * k2^18
-        - (323/3618008100 - 646/7778717415*ep2 + 1292/16668680175*ep2^2 - 56848/783427968225*ep2^3 + 113696/1669042193175*ep2^4 - 107008/1669042193175*ep2^5 + 214016/3538369449531*ep2^6 - 1011712/17691847247655*ep2^7 + 106496/1965760805295*ep2^8 - 851968/16568555358915*ep2^9 + 1703936/34851099203235*ep2^10) * k2^19
-        + (646/5881469265 - 1292/12603148425*ep2 + 56848/592347975975*ep2^2 - 113696/1261958731425*ep2^3 + 107008/1261958731425*ep2^4 - 214016/2675352510621*ep2^5 + 1011712/13376762553105*ep2^6 - 106496/1486306950345*ep2^7 + 851968/12527444295765*ep2^8 - 1703936/26350831104885*ep2^9) * k2^20
-        - (323/2456427600 - 323/2623911300*ep2 + 323/2795035950*ep2^2 - 152/1397517975*ep2^3 + 304/2962738107*ep2^4 - 15808/162950595885*ep2^5 + 1664/18105621765*ep2^6 - 13312/152604526305*ep2^7 + 26624/320995727745*ep2^8) * k2^21
-        + (323/2099129040 - 323/2236028760*ep2 + 38/279503595*ep2^2 - 380/2962738107*ep2^3 + 3952/32590119177*ep2^4 - 416/3621124353*ep2^5 + 3328/30520905261*ep2^6 - 6656/64199145549*ep2^7) * k2^22
-        - (437/2473904160 - 437/2628523170*ep2 + 2185/13931172801*ep2^2 - 1748/11787915447*ep2^3 + 184/1309768383*ep2^4 - 1472/11039476371*ep2^5 + 2944/23220967539*ep2^6) * k2^23
-        + (437/2190435975 - 874/4643724267*ep2 + 3496/19646525745*ep2^2 - 368/2182947305*ep2^3 + 2944/18399127285*ep2^4 - 5888/38701612565*ep2^5) * k2^24
-        - (2185/9833769036 - 437/2080220373*ep2 + 46/231135597*ep2^2 - 368/1948142889*ep2^3 + 736/4097817801*ep2^4) * k2^25
-        + (5681/23235669072 - 299/1290870504*ep2 + 299/1360024281*ep2^2 - 598/2860740729*ep2^3) * k2^26
-        - (4485/16846512032 - 4485/17749003748*ep2 + 4485/18667055666*ep2^2) * k2^27
-        + (115/400353468 - 115/421061406*ep2) * k2^28
-        - 667/2169536736 * k2^29;
-C4[11] = + (1/18658676400 - 1/20991010950*ep2 + 1/23413050675*ep2^2 - 4/103686367275*ep2^3 + 8/228110008005*ep2^4 - 256/7983850280175*ep2^5 + 512/17376615315675*ep2^6 - 2048/75298666367925*ep2^7 + 4096/162486595846575*ep2^8 - 32768/1397384724280545*ep2^9 + 65536/2994395837744025*ep2^10 - 262144/12794236761269925*ep2^11 + 524288/27257287013140275*ep2^12 - 8388608/463373879223384675*ep2^13 + 16777216/982352623953575511*ep2^14 - 67108864/4156107255188204085*ep2^15 + 134217728/87740042053973 [...]
-        - (1/3358561752 - 1/3746088108*ep2 + 1/4147454691*ep2^2 - 10/45622001601*ep2^3 + 64/319354011207*ep2^4 - 128/695064612627*ep2^5 + 512/3011946654717*ep2^6 - 1024/6499463833863*ep2^7 + 40960/279476944856109*ep2^8 - 16384/119775833509761*ep2^9 + 65536/511769470450797*ep2^10 - 131072/1090291480525611*ep2^11 + 2097152/18534955168935387*ep2^12 - 104857600/982352623953575511*ep2^13 + 83886080/831221451037640817*ep2^14 - 167772160/1754800841079463947*ep2^15 + 1342177280/14790464231955481 [...]
-        + (13/13874400400 - 13/15360943300*ep2 + 13/16897037630*ep2^2 - 208/295698158525*ep2^3 + 416/643578345025*ep2^4 - 384/643578345025*ep2^5 + 768/1388774323475*ep2^6 - 6144/11943459181885*ep2^7 + 4096/8531042272775*ep2^8 - 16384/36450816983675*ep2^9 + 32768/77656088356525*ep2^10 - 524288/1320153502060925*ep2^11 + 1048576/2798725424369161*ep2^12 - 54525952/153929898340303855*ep2^13 + 981467136/2924668068465773245*ep2^14 - 7851737088/24650773719925803065*ep2^15 + 15703474176/518516274 [...]
-        - (7/3178126200 - 7/3495938820*ep2 + 8/4369923525*ep2^2 - 16/9511010025*ep2^3 + 64/41214376775*ep2^4 - 128/88936286725*ep2^5 + 1024/764852065835*ep2^6 - 14336/11472780987525*ep2^7 + 57344/49020064219425*ep2^8 - 16384/14919149979825*ep2^9 + 262144/253625549657025*ep2^10 - 524288/537686165272893*ep2^11 + 2097152/2274826083846855*ep2^12 - 12582912/14407231864363415*ep2^13 + 100663296/121432382856777355*ep2^14 - 5838471168/7407375354263418655*ep2^15) * k2^14
-        + (7/1623919968 - 1/253737495*ep2 + 2/552252195*ep2^2 - 8/2393092845*ep2^3 + 16/5164042455*ep2^4 - 128/44410765113*ep2^5 + 1792/666161476695*ep2^6 - 7168/2846326309515*ep2^7 + 2048/866273224635*ep2^8 - 32768/14726644818795*ep2^9 + 327680/156102435079227*ep2^10 - 262144/132086675836269*ep2^11 + 524288/278849648987679*ep2^12 - 4194304/2350304184324723*ep2^13 + 243269632/143368555243808103*ep2^14) * k2^15
-        - (2/269115525 - 4/585722025*ep2 + 16/2538128775*ep2^2 - 32/5477014725*ep2^3 + 256/47102326635*ep2^4 - 512/100933557075*ep2^5 + 22528/4743877182525*ep2^6 - 45056/10106520954075*ep2^7 + 720896/171810856219275*ep2^8 - 1441792/364239015184863*ep2^9 + 524288/140091928917255*ep2^10 - 1048576/295749627714205*ep2^11 + 8388608/2492746862162585*ep2^12 - 486539264/152057558591917685*ep2^13) * k2^16
-        + (17/1455937605 - 68/6309062955*ep2 + 136/13614293745*ep2^2 - 1088/117082926207*ep2^3 + 15232/1756243893105*ep2^4 - 670208/82543462975935*ep2^5 + 191488/25121923514415*ep2^6 - 180224/25121923514415*ep2^7 + 1802240/266292389252799*ep2^8 - 131072/20484029942523*ep2^9 + 262144/43244063211993*ep2^10 - 2097152/364485675643941*ep2^11 + 4194304/766676766009669*ep2^12) * k2^17
-        - (34/1989344175 - 68/4292795325*ep2 + 544/36918039795*ep2^2 - 1088/79110085275*ep2^3 + 47872/3718174007925*ep2^4 - 95744/7921327234275*ep2^5 + 90112/7921327234275*ep2^6 - 180224/16793213736663*ep2^7 + 65536/6458928360255*ep2^8 - 131072/13635515427205*ep2^9 + 1048576/114927915743585*ep2^10 - 2097152/241744926219265*ep2^11) * k2^18
-        + (323/13648887700 - 646/29345108555*ep2 + 1292/62882375475*ep2^2 - 56848/2955471647325*ep2^3 + 113696/6296439596475*ep2^4 - 107008/6296439596475*ep2^5 + 214016/13348451944527*ep2^6 - 1011712/66742259722635*ep2^7 + 319488/22247419907545*ep2^8 - 2555904/187513967792165*ep2^9 + 5111808/394425932252485*ep2^10) * k2^19
-        - (323/10306574712 - 323/11042758620*ep2 + 3553/129752413785*ep2^2 - 7106/276429055455*ep2^3 + 6688/276429055455*ep2^4 - 66880/2930147987823*ep2^5 + 63232/2930147987823*ep2^6 - 6656/325571998647*ep2^7 + 53248/2744106845739*ep2^8 - 106496/5772086813451*ep2^9) * k2^20
-        + (2261/56497834800 - 2261/60349959900*ep2 + 323/9183689550*ep2^2 - 152/4591844775*ep2^3 + 304/9734710923*ep2^4 - 15808/535409100765*ep2^5 + 1664/59489900085*ep2^6 - 13312/501414872145*ep2^7 + 26624/1054700248305*ep2^8) * k2^21
-        - (133/2682220440 - 19/408163980*ep2 + 76/1734696915*ep2^2 - 760/18387787299*ep2^3 + 7904/202265660289*ep2^4 - 2496/67421886763*ep2^5 + 19968/568270188431*ep2^6 - 39936/1195326948079*ep2^7) * k2^22
-        + (19/317167200 - 19/336990150*ep2 + 19/357209559*ep2^2 - 988/19646525745*ep2^3 + 104/2182947305*ep2^4 - 832/18399127285*ep2^5 + 1664/38701612565*ep2^6) * k2^23
-        - (19/268216650 - 19/284309649*ep2 + 76/1202848515*ep2^2 - 8/133649835*ep2^3 + 448/7885340265*ep2^4 - 896/16586405385*ep2^5) * k2^24
-        + (475/5775388164 - 95/1221716727*ep2 + 10/135746303*ep2^2 - 80/1144147411*ep2^3 + 160/2406654899*ep2^4) * k2^25
-        - (13/138307554 - 13/145991307*ep2 + 104/1230498159*ep2^2 - 208/2588289231*ep2^3) * k2^26
-        + (15/141567328 - 15/149151292*ep2 + 15/156866014*ep2^2) * k2^27
-        - (63/533804624 - 63/561415208*ep2) * k2^28
-        + 203/1560543968 * k2^29;
-C4[12] = + (1/91265265000 - 1/101795872500*ep2 + 1/112702573125*ep2^2 - 2/247945660875*ep2^3 + 64/8678098130625*ep2^4 - 128/18887625343125*ep2^5 + 512/81846376486875*ep2^6 - 1024/176615865050625*ep2^7 + 8192/1518896439435375*ep2^8 - 16384/3254778084504375*ep2^9 + 65536/13906779088336875*ep2^10 - 131072/29627485883848125*ep2^11 + 2097152/503667260025418125*ep2^12 - 4194304/1067774591253886425*ep2^13 + 16777216/4517507886074134875*ep2^14 - 33554432/9536961092823173625*ep2^15 + 268435456/80 [...]
-        - (1/15080870000 - 1/16696677500*ep2 + 1/18366345250*ep2^2 - 16/321411041875*ep2^3 + 32/699541679375*ep2^4 - 384/9094041831875*ep2^5 + 768/19623985005625*ep2^6 - 6144/168766271048375*ep2^7 + 4096/120547336463125*ep2^8 - 16384/515065892160625*ep2^9 + 32768/1097314291994375*ep2^10 - 524288/18654342963904375*ep2^11 + 1048576/39547207083477275*ep2^12 - 4194304/167315106891634625*ep2^13 + 75497472/3178987030941057875*ep2^14 - 603979776/26794319260788916375*ep2^15 + 1207959552/56360464 [...]
-        + (7/31090365000 - 7/34199401500*ep2 + 8/42749251875*ep2^2 - 16/93042489375*ep2^3 + 64/403184120625*ep2^4 - 128/870028891875*ep2^5 + 1024/7482248470125*ep2^6 - 14336/112233727051875*ep2^7 + 57344/479544106494375*ep2^8 - 16384/145948206324375*ep2^9 + 262144/2481119507514375*ep2^10 - 524288/5259973355930475*ep2^11 + 2097152/22253733428936625*ep2^12 - 4194304/46980103905532875*ep2^13 + 33554432/395975161489491375*ep2^14 - 1946157056/24154484850858973875*ep2^15) * k2^14
-        - (1/1765130400 - 1/1930611375*ep2 + 2/4201918875*ep2^2 - 8/18208315125*ep2^3 + 16/39291627375*ep2^4 - 128/337907995425*ep2^5 + 256/724088561625*ep2^6 - 1024/3093832945125*ep2^7 + 2048/6591209317875*ep2^8 - 32768/112050558403875*ep2^9 + 65536/237547183816215*ep2^10 - 262144/1005007316145525*ep2^11 + 524288/2121682111862775*ep2^12 - 4194304/17882749228557675*ep2^13 + 243269632/1090847702942018175*ep2^14) * k2^15
-        + (2/1696597875 - 4/3692595375*ep2 + 16/16001246625*ep2^2 - 32/34529005875*ep2^3 + 256/296949450525*ep2^4 - 512/636320251125*ep2^5 + 22528/29907051802875*ep2^6 - 45056/63715023406125*ep2^7 + 720896/1083155397904125*ep2^8 - 1441792/2296289443556745*ep2^9 + 524288/883188247521825*ep2^10 - 1048576/1864508522546075*ep2^11 + 8388608/15715143261459775*ep2^12 - 16777216/33055990998242975*ep2^13) * k2^16
-        - (17/7912704375 - 68/34288385625*ep2 + 136/73990726875*ep2^2 - 1088/636320251125*ep2^3 + 15232/9544803766875*ep2^4 - 670208/448605777043125*ep2^5 + 191488/136532193013125*ep2^6 - 180224/136532193013125*ep2^7 + 360448/289448249187825*ep2^8 - 131072/111326249687625*ep2^9 + 262144/235022082673875*ep2^10 - 2097152/1980900411108375*ep2^11 + 4194304/4166721554400375*ep2^12) * k2^17
-        + (34/9576035625 - 68/20664076875*ep2 + 544/177711061125*ep2^2 - 7616/2665665916875*ep2^3 + 335104/125286298093125*ep2^4 - 95744/38130612463125*ep2^5 + 90112/38130612463125*ep2^6 - 180224/80836898421825*ep2^7 + 65536/31091114777625*ep2^8 - 131072/65636797863875*ep2^9 + 1048576/553224439138375*ep2^10 - 2097152/1163678992670375*ep2^11) * k2^18
-        - (323/59342990000 - 323/63793714250*ep2 + 323/68350408125*ep2^2 - 14212/3212469181875*ep2^3 + 28424/6843956083125*ep2^4 - 26752/6843956083125*ep2^5 + 53504/14509186896225*ep2^6 - 252928/72545934481125*ep2^7 + 79872/24181978160375*ep2^8 - 638976/203819530208875*ep2^9 + 1277952/428723839404875*ep2^10) * k2^19
-        + (323/41076928200 - 323/44010994500*ep2 + 323/47011744125*ep2^2 - 646/100155454875*ep2^3 + 608/100155454875*ep2^4 - 1216/212329564335*ep2^5 + 63232/11678126038425*ep2^6 - 6656/1297569559825*ep2^7 + 53248/10936657718525*ep2^8 - 106496/23004693821725*ep2^9) * k2^20
-        - (133/12282138000 - 133/13119556500*ep2 + 19/1996454250*ep2^2 - 152/16969861125*ep2^3 + 304/35976105585*ep2^4 - 15808/1978685807175*ep2^5 + 1664/219853978575*ep2^6 - 13312/1853054962275*ep2^7 + 26624/3897805265475*ep2^8) * k2^21
-        + (209/14577285000 - 209/15527977500*ep2 + 836/65993904375*ep2^2 - 1672/139907077275*ep2^3 + 7904/699535386375*ep2^4 - 2496/233178462125*ep2^5 + 19968/1965361323625*ep2^6 - 39936/4134035887625*ep2^7) * k2^22
-        - (437/23787540000 - 437/25274261250*ep2 + 437/26790716925*ep2^2 - 22724/1473489430875*ep2^3 + 2392/163721047875*ep2^4 - 19136/1379934546375*ep2^5 + 38272/2902620942375*ep2^6) * k2^23
-        + (437/19084646250 - 437/20229725025*ep2 + 22724/1112634876375*ep2^2 - 2392/123626097375*ep2^3 + 133952/7293939745125*ep2^4 - 267904/15342424981125*ep2^5) * k2^24
-        - (23/825055452 - 23/872654805*ep2 + 46/1842271255*ep2^2 - 2576/108694004045*ep2^3 + 5152/228632215405*ep2^4) * k2^25
-        + (23/691537770 - 23/729956535*ep2 + 184/6152490795*ep2^2 - 368/12941446155*ep2^3) * k2^26
-        - (69/1769591600 - 69/1864391150*ep2 + 69/1960825175*ep2^2) * k2^27
-        + (1449/32185278800 - 1449/33850034600*ep2) * k2^28
-        - 2001/39013599200 * k2^29;
-C4[13] = + (1/439758169200 - 1/486875115900*ep2 + 1/535562627490*ep2^2 - 16/9372345981075*ep2^3 + 32/20398635370575*ep2^4 - 128/88394086605825*ep2^5 + 256/190745134254675*ep2^6 - 2048/1640408154590205*ep2^7 + 4096/3515160331264725*ep2^8 - 16384/15019321415403825*ep2^9 + 32768/31997684754555975*ep2^10 - 524288/543960640827451575*ep2^11 + 1048576/1153196558554197339*ep2^12 - 4194304/4878908516960065665*ep2^13 + 8388608/10299917980249027515*ep2^14 - 67108864/86813594404956089055*ep2^15 + 13 [...]
-        - (1/67155188400 - 1/73870707240*ep2 + 4/323184344175*ep2^2 - 8/703401219675*ep2^3 + 32/3048071951925*ep2^4 - 64/6577418422575*ep2^5 + 512/56565798434145*ep2^6 - 1024/121212425216025*ep2^7 + 4096/517907635013925*ep2^8 - 8192/1103368439812275*ep2^9 + 131072/18757263476808675*ep2^10 - 262144/39765398570834391*ep2^11 + 1048576/168238224722760885*ep2^12 - 2097152/355169585525828535*ep2^13 + 16777216/2993572220860554795*ep2^14 - 973078528/182607905472493842495*ep2^15) * k2^14
-        + (1/18427961376 - 1/20155582755*ep2 + 2/43868033055*ep2^2 - 8/190094809905*ep2^3 + 16/410204589795*ep2^4 - 128/3527759472237*ep2^5 + 256/7559484583365*ep2^6 - 1024/32299615947105*ep2^7 + 2048/68812225278615*ep2^8 - 32768/1169807829736455*ep2^9 + 327680/12399962995206423*ep2^10 - 262144/10492276380559281*ep2^11 + 524288/22150361247847371*ep2^12 - 4194304/186695901946142127*ep2^13 + 8388608/392705173059126543*ep2^14) * k2^15
-        - (4/27484885575 - 8/59820045075*ep2 + 32/259220195325*ep2^2 - 64/559369895175*ep2^3 + 512/4810581098505*ep2^4 - 1024/10308388068225*ep2^5 + 45056/484494239206575*ep2^6 - 90112/1032183379179225*ep2^7 + 1441792/17547117446046825*ep2^8 - 2883584/37199888985619269*ep2^9 + 1048576/14307649609853565*ep2^10 - 2097152/30205038065246415*ep2^11 + 16777216/254585320835648355*ep2^12 - 33554432/535507054171536195*ep2^13) * k2^16
-        + (17/52983468495 - 68/229595030145*ep2 + 136/495441907155*ep2^2 - 1088/4260800401533*ep2^3 + 15232/63912006022995*ep2^4 - 670208/3003864283080765*ep2^5 + 191488/914219564415885*ep2^6 - 180224/914219564415885*ep2^7 + 1802240/9690727382808381*ep2^8 - 131072/745440567908337*ep2^9 + 262144/1573707865584267*ep2^10 - 2097152/13264109152781679*ep2^11 + 4194304/27900367528264911*ep2^12) * k2^17
-        - (17/27578982600 - 17/29756270700*ep2 + 34/63975982005*ep2^2 - 476/959639730075*ep2^3 + 20944/45103067313525*ep2^4 - 5984/13727020486725*ep2^5 + 5632/13727020486725*ep2^6 - 11264/29101283431857*ep2^7 + 4096/11192801319945*ep2^8 - 8192/23629247230995*ep2^9 + 65536/199160798089815*ep2^10 - 131072/418924437361335*ep2^11) * k2^18
-        + (323/302140594800 - 323/324801139410*ep2 + 2261/2436008545575*ep2^2 - 9044/10408400149275*ep2^3 + 2584/3167773958475*ep2^4 - 2432/3167773958475*ep2^5 + 4864/6715680791967*ep2^6 - 252928/369362443558185*ep2^7 + 26624/41040271506465*ep2^8 - 212992/345910859840205*ep2^9 + 425984/727605601732845*ep2^10) * k2^19
-        - (19/11090770614 - 19/11882968515*ep2 + 76/50772683655*ep2^2 - 152/108167891265*ep2^3 + 2432/1838854151505*ep2^4 - 24320/19491854005953*ep2^5 + 252928/214410394065483*ep2^6 - 26624/23823377118387*ep2^7 + 212992/200797035712119*ep2^8 - 425984/422366178566871*ep2^9) * k2^20
-        + (19/7369282800 - 19/7871733900*ep2 + 19/8385107850*ep2^2 - 152/71273416725*ep2^3 + 304/151099643457*ep2^4 - 15808/8310480390135*ep2^5 + 1664/923386710015*ep2^6 - 13312/7782830841555*ep2^7 + 26624/16370782114995*ep2^8) * k2^21
-        - (209/56676484080 - 209/60372776520*ep2 + 418/128292150105*ep2^2 - 4180/1359896791113*ep2^3 + 3952/1359896791113*ep2^4 - 416/151099643457*ep2^5 + 3328/1273554137709*ep2^6 - 6656/2678855255181*ep2^7) * k2^22
-        + (4807/950550098400 - 4807/1009959479550*ep2 + 4807/1070557048323*ep2^2 - 22724/5352785241615*ep2^3 + 2392/594753915735*ep2^4 - 19136/5012925861195*ep2^5 + 38272/10544430259755*ep2^6) * k2^23
-        - (23/3435236325 - 46/7282701009*ep2 + 2392/400548555495*ep2^2 - 4784/845602506045*ep2^3 + 267904/49890547856655*ep2^4 - 535808/104942186870895*ep2^5) * k2^24
-        + (575/66829491612 - 115/14137007841*ep2 + 230/29844794331*ep2^2 - 12880/1760842865529*ep2^3 + 25760/3703841889561*ep2^4) * k2^25
-        - (23/2133887976 - 23/2252437308*ep2 + 322/33223450293*ep2^2 - 644/69883809237*ep2^3) * k2^26
-        + (115/8706390672 - 115/9172804458*ep2 + 115/9647259861*ep2^2) * k2^27
-        - (23/1448337546 - 23/1523251557*ep2) * k2^28
-        + 667/35525324448 * k2^29;
-C4[14] = + (1/2091759757200 - 1/2300935732920*ep2 + 4/10066593831525*ep2^2 - 8/21909645398025*ep2^3 + 32/94941796724775*ep2^4 - 64/204874403458725*ep2^5 + 512/1761919869745035*ep2^6 - 1024/3775542578025075*ep2^7 + 4096/16131863742470775*ep2^8 - 8192/34367883625263825*ep2^9 + 131072/584254021629485025*ep2^10 - 262144/1238618525854508253*ep2^11 + 1048576/5240309147845996455*ep2^12 - 2097152/11062874867674881405*ep2^13 + 16777216/93244231027545428985*ep2^14 - 33554432/196134416988974867865* [...]
-        - (1/296894933280 - 1/324728833275*ep2 + 2/706762754775*ep2^2 - 8/3062638604025*ep2^3 + 16/6608851724475*ep2^4 - 128/56836124830485*ep2^5 + 256/121791696065325*ep2^6 - 1024/520382701370025*ep2^7 + 2048/1108641407266575*ep2^8 - 32768/18846903923531775*ep2^9 + 65536/39955436317887363*ep2^10 - 262144/169042230575677305*ep2^11 + 524288/356866931215318755*ep2^12 - 4194304/3007878420243400935*ep2^13 + 8388608/6326916677063705415*ep2^14) * k2^15
-        + (4/305048297925 - 8/663928648425*ep2 + 32/2877024143175*ep2^2 - 64/6208315256325*ep2^3 + 512/53391511204395*ep2^4 - 1024/114410381152275*ep2^5 + 45056/5377287914156925*ep2^6 - 90112/11455961208421275*ep2^7 + 1441792/194751340543161675*ep2^8 - 2883584/412872841951502751*ep2^9 + 1048576/158797246904424135*ep2^10 - 2097152/335238632353784285*ep2^11 + 16777216/2825582758410467545*ep2^12 - 33554432/5943467181484086905*ep2^13) * k2^16
-        - (17/455265358920 - 17/493204138830*ep2 + 17/532141307685*ep2^2 - 136/4576415246091*ep2^3 + 1904/68646228691365*ep2^4 - 83776/3226372748494155*ep2^5 + 23936/981939532150395*ep2^6 - 22528/981939532150395*ep2^7 + 225280/10408559040794187*ep2^8 - 16384/800658387753399*ep2^9 + 32768/1690278818590509*ep2^10 - 262144/14246635756691433*ep2^11 + 524288/29967061419247497*ep2^12) * k2^17
-        + (17/195504343320 - 17/210938896740*ep2 + 34/453518627991*ep2^2 - 476/6802779419865*ep2^3 + 1904/29066421157605*ep2^4 - 544/8846302091445*ep2^5 + 512/8846302091445*ep2^6 - 5120/93770802169317*ep2^7 + 4096/79344524912499*ep2^8 - 8192/167505108148609*ep2^9 + 65536/1411828768681133*ep2^10 - 131072/2969708789294797*ep2^11) * k2^18
-        - (19/108173793200 - 19/116286827690*ep2 + 133/872151207675*ep2^2 - 532/3726464250975*ep2^3 + 152/1134141293775*ep2^4 - 2432/19280401994175*ep2^5 + 4864/40874452227651*ep2^6 - 252928/2248094872520805*ep2^7 + 79872/749364957506935*ep2^8 - 638976/6316076070415595*ep2^9 + 1277952/13285539320529355*ep2^10) * k2^19
-        + (19/59561545890 - 19/63815942025*ep2 + 76/272668115925*ep2^2 - 152/580901638275*ep2^3 + 2432/9875327850675*ep2^4 - 4864/20935695043431*ep2^5 + 252928/1151463227388705*ep2^6 - 26624/127940358598745*ep2^7 + 212992/1078354451046565*ep2^8 - 425984/2268262810822085*ep2^9) * k2^20
-        - (19/35618200200 - 19/38046713850*ep2 + 19/40528021275*ep2^2 - 304/688976361675*ep2^3 + 608/1460629886751*ep2^4 - 31616/80334643771305*ep2^5 + 3328/8926071530145*ep2^6 - 26624/75234031468365*ep2^7 + 53248/158250893778285*ep2^8) * k2^21
-        + (209/250262828880 - 209/266584317720*ep2 + 418/566491675155*ep2^2 - 4180/6004811756643*ep2^3 + 3952/6004811756643*ep2^4 - 1248/2001603918881*ep2^5 + 9984/16870661601997*ep2^6 - 19968/35486564059373*ep2^7) * k2^22
-        - (253/204192243360 - 253/216954258570*ep2 + 1265/1149857570421*ep2^2 - 1196/1149857570421*ep2^3 + 2392/2427477093111*ep2^4 - 19136/20460164070507*ep2^5 + 38272/43036896837963*ep2^6) * k2^23
-        + (253/143898232725 - 506/305064253377*ep2 + 184/117332405145*ep2^2 - 368/247701744195*ep2^3 + 20608/14614402907505*ep2^4 - 41216/30740640598545*ep2^5) * k2^24
-        - (115/47853216216 - 23/10122795738*ep2 + 23/10685173279*ep2^2 - 1288/630425223461*ep2^3 + 2576/1326066849349*ep2^4) * k2^25
-        + (299/93970103832 - 299/99190665156*ep2 + 4186/1463062311051*ep2^2 - 8372/3077475895659*ep2^3) * k2^26
-        - (345/84161776496 - 345/88670443094*ep2 + 345/93256845323*ep2^2) * k2^27
-        + (1035/200675213318 - 1035/211054965731*ep2) * k2^28
-        - 69/10854960248 * k2^29;
-C4[15] = + (1/9838483823520 - 1/10760841681975*ep2 + 2/23420655425475*ep2^2 - 8/101489506843725*ep2^3 + 16/219003672662775*ep2^4 - 128/1883431584899865*ep2^5 + 256/4035924824785425*ep2^6 - 1024/17244406069537725*ep2^7 + 2048/36738082495971675*ep2^8 - 32768/624547402431518475*ep2^9 + 65536/1324040493154819167*ep2^10 - 262144/5601709778731927245*ep2^11 + 524288/11825831755100735295*ep2^12 - 4194304/99674867650134768915*ep2^13 + 8388608/209660928505455893235*ep2^14) * k2^15
-        - (1/1304344446300 - 1/1419433662150*ep2 + 2/3075439601325*ep2^2 - 4/6636474929175*ep2^3 + 32/57073684390905*ep2^4 - 64/122300752266225*ep2^5 + 2816/5748135356512575*ep2^6 - 5632/12246027498657225*ep2^7 + 90112/208182467477172825*ep2^8 - 180224/441346831051606389*ep2^9 + 65536/169748781173694765*ep2^10 - 131072/358358538033355615*ep2^11 + 1048576/3020450534852568755*ep2^12 - 2097152/6353361469862299795*ep2^13) * k2^16
-        + (17/5353292668680 - 17/5799400391070*ep2 + 17/6257247790365*ep2^2 - 136/53812330997139*ep2^3 + 1904/807184964957085*ep2^4 - 7616/3448881213907545*ep2^5 + 2176/1049659499884905*ep2^6 - 2048/1049659499884905*ep2^7 + 20480/11126390698779993*ep2^8 - 16384/9414638283583071*ep2^9 + 32768/19875347487564261*ep2^10 - 262144/167520785966613057*ep2^11 + 524288/352371308412530913*ep2^12) * k2^17
-        - (1/104493700740 - 1/112743203430*ep2 + 4/484795774749*ep2^2 - 56/7271936621235*ep2^3 + 224/31071001927095*ep2^4 - 64/9456391890855*ep2^5 + 1024/160758662144535*ep2^6 - 10240/1704041818732071*ep2^7 + 8192/1441881538927137*ep2^8 - 16384/3043972137735067*ep2^9 + 131072/25656336589481279*ep2^10 - 262144/53966776964081311*ep2^11) * k2^18
-        + (19/809438383600 - 19/870146262370*ep2 + 19/932299566825*ep2^2 - 76/3983461785525*ep2^3 + 152/8486505543075*ep2^4 - 2432/144270594232275*ep2^5 + 4864/305853659772423*ep2^6 - 252928/16821951287483265*ep2^7 + 79872/5607317095827755*ep2^8 - 638976/47261672664833935*ep2^9 + 1277952/99412483881202415*ep2^10) * k2^19
-        - (19/382015432260 - 19/409302248850*ep2 + 38/874418440725*ep2^2 - 76/1862891460675*ep2^3 + 1216/31669154831475*ep2^4 - 2432/67138608242727*ep2^5 + 126464/3692623453349985*ep2^6 - 13312/410291494816665*ep2^7 + 106496/3458171170597605*ep2^8 - 212992/7274084186429445*ep2^9) * k2^20
-        + (133/1408761228600 - 133/1504813130550*ep2 + 19/228993302475*ep2^2 - 304/3892886142075*ep2^3 + 608/8252918621199*ep2^4 - 31616/453910524165945*ep2^5 + 3328/50434502685105*ep2^6 - 26624/425090808345885*ep2^7 + 53248/894156527899965*ep2^8) * k2^21
-        - (11/66880583580 - 11/71242360770*ep2 + 88/605560066545*ep2^2 - 880/6418936705377*ep2^3 + 832/6418936705377*ep2^4 - 4992/40653265800721*ep2^5 + 39936/342648954606077*ep2^6 - 79872/720744352792093*ep2^7) * k2^22
-        + (253/945856023840 - 253/1004972025330*ep2 + 1265/5326351734249*ep2^2 - 92/409719364173*ep2^3 + 184/864963102143*ep2^4 - 1472/7290403289491*ep2^5 + 2944/15334986229619*ep2^6) * k2^23
-        - (253/615288995100 - 253/652206334806*ep2 + 46/125424295155*ep2^2 - 92/264784623105*ep2^3 + 5152/15622292763195*ep2^4 - 10304/32860684777755*ep2^5) * k2^24
-        + (1265/2097290958984 - 23/40332518442*ep2 + 23/42573213911*ep2^2 - 1288/2511819620749*ep2^3 + 2576/5283482650541*ep2^4) * k2^25
-        - (299/351577802268 - 299/371109902394*ep2 + 1196/1563963160089*ep2^2 - 2392/3289715612601*ep2^3) * k2^26
-        + (4485/3868539588592 - 4485/4075782780838*ep2 + 4485/4286599131571*ep2^2) * k2^27
-        - (7245/4719327430444 - 7245/4963430573398*ep2) * k2^28
-        + 667/336503767688 * k2^29;
-C4[16] = + (1/45820358129700 - 1/49863330905850*ep2 + 2/108037216962675*ep2^2 - 4/233132941866825*ep2^3 + 32/2004943300054695*ep2^4 - 64/4296307071545775*ep2^5 + 256/18356948396604675*ep2^6 - 512/39108281366679525*ep2^7 + 8192/664840783233551925*ep2^8 - 16384/1409462460455130081*ep2^9 + 65536/5963110409617858035*ep2^10 - 131072/12588788642526589185*ep2^11 + 1048576/106105504272724108845*ep2^12 - 2097152/223187440021936918605*ep2^13) * k2^16
-        - (1/5698666389240 - 1/6173555255010*ep2 + 1/6660941196195*ep2^2 - 8/57284094287277*ep2^3 + 112/859261414309155*ep2^4 - 448/3671389679320935*ep2^5 + 128/1117379467619415*ep2^6 - 2048/18995450949530055*ep2^7 + 20480/201351780065018583*ep2^8 - 16384/170374583131938801*ep2^9 + 32768/359679675500759691*ep2^10 - 262144/3031585836363545967*ep2^11 + 524288/6376784000626769103*ep2^12) * k2^17
-        + (1/1297744347900 - 1/1400197849050*ep2 + 4/6020850750915*ep2^2 - 8/12901823037675*ep2^3 + 32/55125971160975*ep2^4 - 64/117442286386425*ep2^5 + 1024/1996518868569225*ep2^6 - 2048/4232620001366757*ep2^7 + 8192/17907238467320895*ep2^8 - 16384/37804170097677445*ep2^9 + 131072/318635147966138465*ep2^10 - 262144/670232552618429185*ep2^11) * k2^18
-        - (19/7754941933200 - 19/8336562578190*ep2 + 19/8932031333775*ep2^2 - 76/38164133880675*ep2^3 + 152/81306198267525*ep2^4 - 2432/1382205370547925*ep2^5 + 4864/2930275385561601*ep2^6 - 252928/161165146205888055*ep2^7 + 26624/17907238467320895*ep2^8 - 212992/150932438510276115*ep2^9 + 425984/317478577556098035*ep2^10) * k2^19
-        + (19/3009295759932 - 19/3224245457070*ep2 + 38/6888160749195*ep2^2 - 76/14674777248285*ep2^3 + 1216/249471213220845*ep2^4 - 12160/2644394860140957*ep2^5 + 126464/29088343461550527*ep2^6 - 13312/3232038162394503*ep2^7 + 106496/27241464511610811*ep2^8 - 212992/57301011558905499*ep2^9) * k2^20
-        - (7/499883016600 - 7/533965949550*ep2 + 1/81255687975*ep2^2 - 16/1381346695575*ep2^3 + 32/2928454994619*ep2^4 - 1664/161065024704045*ep2^5 + 3328/340026163264095*ep2^6 - 26624/2865934804654515*ep2^7 + 53248/6028345623583635*ep2^8) * k2^21
-        + (7/252420267060 - 1/38411779770*ep2 + 8/326500128045*ep2^2 - 80/3460901357277*ep2^3 + 64/2928454994619*ep2^4 - 128/6182293877529*ep2^5 + 1024/52107905539173*ep2^6 - 2048/109606284065157*ep2^7) * k2^22
-        - (23/457672269600 - 23/486276786450*ep2 + 23/515453393637*ep2^2 - 92/2180764357695*ep2^3 + 184/4603835866245*ep2^4 - 1472/38803759444065*ep2^5 + 2944/81621700899585*ep2^6) * k2^23
-        + (23/271256438700 - 23/287531825022*ep2 + 46/608240399085*ep2^2 - 92/1284063064735*ep2^3 + 5152/75759720819365*ep2^4 - 10304/159356654137285*ep2^5) * k2^24
-        - (575/4262236465032 - 115/901626944526*ep2 + 115/951717330333*ep2^2 - 920/8021617498521*ep2^3 + 1840/16873057496889*ep2^4) * k2^25
-        + (299/1463017306212 - 299/1544296045446*ep2 + 1196/6508104762951*ep2^2 - 2392/13689461742759*ep2^3) * k2^26
-        - (4485/15099783555472 - 4485/15908700531658*ep2 + 4485/16731564352261*ep2^2) * k2^27
-        + (2093/5023800167892 - 2093/5283651900714*ep2) * k2^28
-        - 203/358213688184 * k2^29;
-C4[17] = + (1/211541403843000 - 1/229169854163250*ep2 + 1/247262211070875*ep2^2 - 8/2126455015209525*ep2^3 + 16/4556689318306125*ep2^4 - 64/19469490723671625*ep2^5 + 128/41478480237387375*ep2^6 - 2048/705134164035585375*ep2^7 + 4096/1494884427755440995*ep2^8 - 16384/6324511040503788825*ep2^9 + 32768/13351745529952443075*ep2^10 - 262144/112536140895313448775*ep2^11 + 524288/236713951538417943975*ep2^12) * k2^17
-        - (1/24775119369000 - 1/26731049845500*ep2 + 2/57471757167825*ep2^2 - 4/123153765359625*ep2^3 + 16/526202451991125*ep2^4 - 32/1121040006415875*ep2^5 + 512/19057680109069875*ep2^6 - 1024/40402281831228135*ep2^7 + 4096/170932730824426725*ep2^8 - 8192/360857987296011975*ep2^9 + 65536/3041517321494958075*ep2^10 - 131072/6397674365903187675*ep2^11) * k2^18
-        + (19/101440907106000 - 19/109048975138950*ep2 + 19/116838187648875*ep2^2 - 76/499217710863375*ep2^3 + 152/1063550775317625*ep2^4 - 2432/18080363180399625*ep2^5 + 4864/38330369942447205*ep2^6 - 252928/2108170346834596275*ep2^7 + 26624/234241149648288475*ep2^8 - 212992/1974318261321288575*ep2^9 + 425984/4152876342779262175*ep2^10) * k2^19
-        - (1/1595838660570 - 1/1709827136325*ep2 + 4/7305625037025*ep2^2 - 8/15564157687575*ep2^3 + 128/264590680688775*ep2^4 - 256/560932243060203*ep2^5 + 13312/30851273368311165*ep2^6 - 26624/65130465999768015*ep2^7 + 212992/548956784855187555*ep2^8 - 425984/1154702202626428995*ep2^9) * k2^20
-        + (1/590770837800 - 1/631050667650*ep2 + 1/672206145975*ep2^2 - 16/11427504481575*ep2^3 + 32/24226309500939*ep2^4 - 128/102495924811665*ep2^5 + 256/216380285713515*ep2^6 - 2048/1823776693871055*ep2^7 + 4096/3836219942280495*ep2^8) * k2^21
-        - (11/2804669634000 - 11/2987582871000*ep2 + 22/6348613600875*ep2^2 - 44/13459060833855*ep2^3 + 16/5176561859175*ep2^4 - 96/32784891774775*ep2^5 + 768/276329802101675*ep2^6 - 1536/581245445800075*ep2^7) * k2^22
-        + (253/31274271756000 - 253/33228913740750*ep2 + 253/35222648565195*ep2^2 - 92/13547172525075*ep2^3 + 184/28599586441825*ep2^4 - 1472/241053657152525*ep2^5 + 2944/507043899527725*ep2^6) * k2^23
-        - (253/16614456870375 - 506/35222648565195*ep2 + 184/13547172525075*ep2^2 - 368/28599586441825*ep2^3 + 2944/241053657152525*ep2^4 - 5888/507043899527725*ep2^5) * k2^24
-        + (1265/47516043554616 - 23/913770068358*ep2 + 69/2893605216467*ep2^2 - 552/24388958253079*ep2^3 + 1104/51300912187511*ep2^4) * k2^25
-        - (299/6827414095656 - 299/7206714878748*ep2 + 598/15185577780219*ep2^2 - 1196/31942077399771*ep2^3) * k2^26
-        + (299/4367705987120 - 299/4601690236430*ep2 + 299/4839708696935*ep2^2) * k2^27
-        - (39/380590921810 - 39/400276659145*ep2) * k2^28
-        + 377/2550915658280 * k2^29;
-C4[18] = + (1/969061097604600 - 1/1045565921099700*ep2 + 2/2247966730364355*ep2^2 - 4/4817071565066475*ep2^3 + 16/20582033050738575*ep2^4 - 32/43848679108095225*ep2^5 + 512/745427544837618825*ep2^6 - 1024/1580306395055751909*ep2^7 + 4096/6685911671389719615*ep2^8 - 8192/14114702417378296965*ep2^9 + 65536/118966777517902788705*ep2^10 - 131072/250240463054898969345*ep2^11) * k2^18
-        - (1/107237530369200 - 1/115280345146890*ep2 + 1/123514655514525*ep2^2 - 4/527744437198425*ep2^3 + 8/1124325105335775*ep2^4 - 128/19113526790708175*ep2^5 + 256/40520676796301331*ep2^6 - 13312/2228637223796573205*ep2^7 + 26624/4704900805792765655*ep2^8 - 212992/39655592505967596235*ep2^9 + 425984/83413487684966323115*ep2^10) * k2^19
-        + (1/21931382735262 - 1/23497910073495*ep2 + 4/100400161223115*ep2^2 - 8/213895995649245*ep2^3 + 128/3636231926037165*ep2^4 - 1280/38544058415993949*ep2^5 + 1024/32614203275071803*ep2^6 - 2048/68852206914040473*ep2^7 + 16384/580325743989769701*ep2^8 - 32768/1220685185633653509*ep2^9) * k2^20
-        - (7/43717041997200 - 7/46697749406100*ep2 + 1/7106179257450*ep2^2 - 8/60402523688325*ep2^3 + 16/128053350219249*ep2^4 - 64/541764174004515*ep2^5 + 128/1143724367342865*ep2^6 - 1024/9639962524747005*ep2^7 + 2048/20277162552054045*ep2^8) * k2^21
-        + (77/170187353391120 - 11/25898075516040*ep2 + 22/55033410471585*ep2^2 - 220/583354150998801*ep2^3 + 16/44873396230677*ep2^4 - 96/284198176127621*ep2^5 + 768/2395384627361377*ep2^6 - 1536/5038567664449793*ep2^7) * k2^22
-        - (253/231429610994400 - 253/245893961681550*ep2 + 253/260647599382443*ep2^2 - 92/100249076685555*ep2^3 + 184/211636939669505*ep2^4 - 1472/1783797062928685*ep2^5 + 2944/3752124856505165*ep2^6) * k2^23
-        + (253/107892248492925 - 506/228731566805001*ep2 + 184/87973679540385*ep2^2 - 368/185722212363035*ep2^3 + 20608/10957610529419065*ep2^4 - 41216/23048766975674585*ep2^5) * k2^24
-        - (575/125578115108628 - 115/26564601272979*ep2 + 690/168242474728867*ep2^2 - 5520/1418043715571879*ep2^3 + 11040/2982781608616711*ep2^4) * k2^25
-        + (299/36087760219896 - 299/38092635787668*ep2 + 598/80266625409729*ep2^2 - 1196/168836694827361*ep2^3) * k2^26
-        - (65/4617289186384 - 65/4864643964226*ep2 + 65/5116263479617*ep2^2) * k2^27
-        + (273/12033592964138 - 273/12656020186421*ep2) * k2^28
-        - 2639/75507103485088 * k2^29;
-C4[19] = + (1/4408331991663600 - 1/4738956891038370*ep2 + 1/5077453811826825*ep2^2 - 4/21694575377805525*ep2^3 + 8/46218877978803075*ep2^4 - 128/785720925639652275*ep2^5 + 256/1665728362356062823*ep2^6 - 1024/7047312302275650405*ep2^7 + 2048/14877659304804150855*ep2^8 - 16384/125397414140492128635*ep2^9 + 32768/263766974571379994715*ep2^10) * k2^19
-        - (1/462337257662280 - 1/495361347495300*ep2 + 1/529135984824525*ep2^2 - 2/1127289706800075*ep2^3 + 32/19163925015601275*ep2^4 - 64/40627521033074703*ep2^5 + 256/171885665909162205*ep2^6 - 512/362869739141564655*ep2^7 + 4096/3058473515621759235*ep2^8 - 8192/6433340843204390115*ep2^9) * k2^20
-        + (7/629761713094800 - 7/672700011714900*ep2 + 1/102367393087050*ep2^2 - 8/870122841239925*ep2^3 + 16/1844660423428641*ep2^4 - 64/7804332560659635*ep2^5 + 128/16475813183614785*ep2^6 - 1024/138867568261896045*ep2^7 + 2048/292100747033643405*ep2^8) * k2^21
-        - (11/269080004685960 - 11/286628700643740*ep2 + 44/1218171977735895*ep2^2 - 440/12912622964000487*ep2^3 + 32/993278689538499*ep2^4 - 64/2096921677914609*ep2^5 + 512/17674054142423133*ep2^6 - 1024/37176458713372797*ep2^7) * k2^22
-        + (253/2097878149392480 - 253/2228995533729510*ep2 + 1265/11813676328766403*ep2^2 - 92/908744332982031*ep2^3 + 184/1918460258517621*ep2^4 - 1472/16169879321791377*ep2^5 + 2944/34012504780319793*ep2^6) * k2^23
-        - (23/75816174616650 - 23/80365145093649*ep2 + 92/340006383088515*ep2^2 - 184/717791253186865*ep2^3 + 10304/42349683938025035*ep2^4 - 20608/89080369662742315*ep2^5) * k2^24
-        + (115/170185013139492 - 23/36000675856431*ep2 + 46/76001426808021*ep2^2 - 2576/4484084181673239*ep2^3 + 5152/9432039140760951*ep2^4) * k2^25
-        - (1/731508653106 - 1/772148022723*ep2 + 8/6508104762951*ep2^2 - 16/13689461742759*ep2^3) * k2^26
-        + (15/5865205182704 - 15/6179412603206*ep2 + 15/6499037393027*ep2^2) * k2^27
-        - (35/7805573814576 - 35/8209310391192*ep2) * k2^28
-        + 29/3895943914464 * k2^29;
-C4[20] = + (1/19927921285392120 - 1/21351344234348700*ep2 + 1/22807117704872475*ep2^2 - 2/48589076849510925*ep2^3 + 32/826014306441685725*ep2^4 - 64/1751150329656373737*ep2^5 + 256/7408712933161581195*ep2^6 - 512/15640616192230004745*ep2^7 + 4096/131828050763081468565*ep2^8 - 8192/277293486087861020085*ep2^9) * k2^20
-        - (1/1986171556683600 - 1/2121592344639300*ep2 + 1/2259957062767950*ep2^2 - 8/19209635033527575*ep2^3 + 16/40724426271078459*ep2^4 - 64/172295649608408865*ep2^5 + 128/363735260284418715*ep2^6 - 1024/3065768622397243455*ep2^7 + 2048/6448685722973512095*ep2^8) * k2^21
-        + (11/4054598703088440 - 11/4319029053289860*ep2 + 44/18355873476481905*ep2^2 - 440/194572258850708193*ep2^3 + 32/14967096834669861*ep2^4 - 192/94791613286242453*ep2^5 + 1536/798957883412614961*ep2^6 - 3072/1680566582350672849*ep2^7) * k2^22
-        - (23/2205461644233120 - 23/2343302996997690*ep2 + 115/12419505884087757*ep2^2 - 92/10508812671151179*ep2^3 + 184/22185271194652489*ep2^4 - 1472/186990142926356693*ep2^5 + 2944/393324093741646837*ep2^6) * k2^23
-        + (23/717337652142150 - 23/760377911270679*ep2 + 92/3216983470760565*ep2^2 - 184/6791409549383415*ep2^3 + 10304/400693163413621485*ep2^4 - 20608/842837343732100365*ep2^5) * k2^24
-        - (5/59637483236916 - 1/12615621453963*ep2 + 2/26632978625033*ep2^2 - 112/1571345738876947*ep2^3 + 224/3305244485223923*ep2^4) * k2^25
-        + (13/67124627358822 - 13/70853773323201*ep2 + 728/4180372626068859*ep2^2 - 1456/8793197592765531*ep2^3) * k2^26
-        - (195/480946824981728 - 195/506711833462892*ep2 + 195/532921066228214*ep2^2) * k2^27
-        + (585/746733228261104 - 585/785357360757368*ep2) * k2^28
-        - 377/266222834155040 * k2^29;
-C4[21] = + (1/89571492885560400 - 1/95678640127757700*ep2 + 1/101918551440437550*ep2^2 - 8/866307687243719175*ep2^3 + 16/1836572296956684651*ep2^4 - 64/7770113564047511985*ep2^5 + 128/16403573079655858635*ep2^6 - 1024/138258687385670808495*ep2^7 + 2048/290819997604342045455*ep2^8) * k2^21
-        - (1/8504768011356240 - 1/9059426794705560*ep2 + 2/19251281938749315*ep2^2 - 20/204063588550742739*ep2^3 + 16/172669190312166933*ep2^4 - 96/1093571538643723909*ep2^5 + 768/9217245825711387233*ep2^6 - 1536/19387999840289469697*ep2^7) * k2^22
-        + (23/34695677086106400 - 23/36864156903988050*ep2 + 23/39076006318227333*ep2^2 - 92/165321565192500255*ep2^3 + 184/349012193184167205*ep2^4 - 1472/2941674199695123585*ep2^5 + 2944/6187659523496639265*ep2^6) * k2^23
-        - (1/376164866367225 - 2/797469516698517*ep2 + 8/3373909493724495*ep2^2 - 16/7122697820085045*ep2^3 + 896/420239171385017655*ep2^4 - 1792/883951360499519895*ep2^5) * k2^24
-        + (25/2939691551751396 - 5/621857828255103*ep2 + 10/1312810970760773*ep2^2 - 560/77455847274885607*ep2^3 + 1120/162924368405793863*ep2^4) * k2^25
-        - (13/563191995400848 - 13/594480439589784*ep2 + 91/4384293241974657*ep2^2 - 182/9222134060705313*ep2^3) * k2^26
-        + (195/3530853519987808 - 195/3720006387130012*ep2 + 195/3912420510602254*ep2^2) * k2^27
-        - (117/978949049244740 - 117/1029584344895330*ep2) * k2^28
-        + 1131/4746558335788640 * k2^29;
-C4[22] = + (1/400515237744102000 - 1/426635796727413000*ep2 + 2/906601068045752625*ep2^2 - 4/1921994264256995565*ep2^3 + 16/8131514194933442775*ep2^4 - 32/17166529967081712525*ep2^5 + 256/144689324008260148425*ep2^6 - 512/304346509120823070825*ep2^7) * k2^22
-        - (1/36309429508716000 - 1/38578768853010750*ep2 + 1/40893494984191395*ep2^2 - 4/173010940317732825*ep2^3 + 8/365245318448547075*ep2^4 - 64/3078496255494896775*ep2^5 + 128/6475457640868575975*ep2^6) * k2^23
-        + (1/6167354204392875 - 2/13074790913312895*ep2 + 8/55316423094785325*ep2^2 - 16/116779115422324575*ep2^3 + 896/6889967809917149925*ep2^4 - 1792/14492690910515384325*ep2^5) * k2^24
-        - (5/7383411339282576 - 1/1561875475617468*ep2 + 1/1648646335373994*ep2^2 - 28/48635066893532823*ep2^3 + 56/102301347603638007*ep2^4) * k2^25
-        + (13/5775992324924976 - 13/6096880787420808*ep2 + 13/6423499401032637*ep2^2 - 26/13511498740103133*ep2^3) * k2^26
-        - (13/2052821813946400 - 13/2162794411122100*ep2 + 13/2274663087559450*ep2^2) * k2^27
-        + (13/829342217798700 - 13/872239229064150*ep2) * k2^28
-        - 29/827888081823600 * k2^29;
-C4[23] = + (1/1782389550772303200 - 1/1893788897695572150*ep2 + 1/2007416231557306479*ep2^2 - 4/8492914825819373565*ep2^3 + 8/17929486854507566415*ep2^4 - 64/151119960630849488355*ep2^5 + 128/317873020637304096195*ep2^6) * k2^23
-        - (1/154595012056781400 - 1/163870712780188284*ep2 + 1/173324792363660685*ep2^2 - 2/365907894989950335*ep2^3 + 112/21588565804407069765*ep2^4 - 224/45410431519614870885*ep2^5) * k2^24
-        + (25/629777641272880464 - 5/133222193346186252*ep2 + 5/140623426309863266*ep2^2 - 20/592627296591566621*ep2^3 + 40/1246560865244329789*ep2^4) * k2^25
-        - (13/75408788686520520 - 13/79598165835771660*ep2 + 26/167724706582518855*ep2^2 - 52/352800244880470695*ep2^3) * k2^26
-        + (39/65608185173726944 - 39/69122909379462316*ep2 + 39/72698232278400022*ep2^2) * k2^27
-        - (9/5197211231538520 - 9/5466032502135340*ep2) * k2^28
-        + 87/19640659160215120 * k2^29;
-C4[24] = + (1/7897502637198556200 - 1/8371352795430469572*ep2 + 1/8854315456705304355*ep2^2 - 2/18692443741933420305*ep2^3 + 16/157550597253438828285*ep2^4 - 32/331399532153785121565*ep2^5) * k2^24
-        - (1/656576689837683888 - 1/694456114251396420*ep2 + 1/733037009487585110*ep2^2 - 4/3089227397126251535*ep2^3 + 8/6498030042231080815*ep2^4) * k2^25
-        + (13/1336500446295140280 - 13/1410750471089314740*ep2 + 26/2972652778366770345*ep2^2 - 52/6252821361392172105*ep2^3) * k2^26
-        - (3/68400022840694048 - 3/72064309778588372*ep2 + 3/75791774077480874*ep2^2) * k2^27
-        + (9/57434713056619304 - 9/60405474076789268*ep2) * k2^28
-        - 29/61429295671311120 * k2^29;
-C4[25] = + (1/34852162658526852912 - 1/36862864350364940580*ep2 + 1/38910801258718548390*ep2^2 - 4/163981233876028168215*ep2^3 + 8/344926043670266146935*ep2^4) * k2^25
-        - (1/2782102969838863440 - 1/2936664245941022520*ep2 + 1/3093985544830720155*ep2^2 - 2/6508038559816342395*ep2^3) * k2^26
-        + (3/1257722868968680352 - 3/1325100879806288228*ep2 + 3/1393640580485923826*ep2^2) * k2^27
-        - (1/89668480588395444 - 1/94306505446415898*ep2) * k2^28
-        + 29/703302752481745680 * k2^29;
-C4[26] = + (1/153233867495634654960 - 1/161746860134281024680*ep2 + 1/170411870498617508145*ep2^2 - 2/358452555186747172305*ep2^3) * k2^26
-        - (1/11763408009765892704 - 1/12393590581717636956*ep2 + 1/13034638370427169902*ep2^2) * k2^27
-        + (1/1708389679184135420 - 1/1796754662590211390*ep2) * k2^28
-        - 29/10232365536106966560 * k2^29;
-C4[27] = + (1/671402060934751423200 - 1/707370028484827392300*ep2 + 1/743958133406456395350*ep2^2) * k2^27
-        - (1/49640001998935255600 - 1/52207588309225010200*ep2) * k2^28
-        + 29/201751358211920378400 * k2^29;
-C4[28] = + (1/2932370299900739008080 - 1/3084044625757673784360*ep2) * k2^28
-        - 1/209087771237808392160 * k2^29;
-C4[29] = + 1/12769026871558087949280 * k2^29;
+C4[0] = + (2/3 - 4/15*n + 8/105*n^2 + 4/315*n^3 + 16/3465*n^4 + 20/9009*n^5 + 8/6435*n^6 + 28/36465*n^7 + 32/62985*n^8 + 4/11305*n^9 + 40/156009*n^10 + 44/229425*n^11 + 16/108675*n^12 + 52/450225*n^13 + 56/606825*n^14 + 20/267003*n^15 + 64/1038345*n^16 + 68/1324785*n^17 + 8/185185*n^18 + 76/2070705*n^19 + 80/2544009*n^20 + 28/1031355*n^21 + 88/3728745*n^22 + 92/4456305*n^23 + 32/1761795*n^24 + 100/6225009*n^25 + 104/7284585*n^26 + 12/941545*n^27 + 112/9803145*n^28 + 116/11282865*n^29)
+        - (1/5 - 16/35*n + 32/105*n^2 - 16/385*n^3 - 64/15015*n^4 - 16/15015*n^5 - 32/85085*n^6 - 112/692835*n^7 - 128/1616615*n^8 - 144/3380195*n^9 - 32/1300075*n^10 - 176/11700675*n^11 - 64/6653325*n^12 - 208/32566275*n^13 - 224/51175575*n^14 - 16/5191725*n^15 - 256/115256295*n^16 - 272/166481315*n^17 - 288/235370135*n^18 - 304/326481155*n^19 - 64/89040315*n^20 - 112/199280705*n^21 - 352/791736855*n^22 - 368/1035348195*n^23 - 128/446125645*n^24 - 16/68475099*n^25 - 416/2168378135*n^26  [...]
+        - (2/105 + 32/315*n - 1088/3465*n^2 + 1184/5005*n^3 - 128/3465*n^4 - 3232/765765*n^5 - 1856/1616615*n^6 - 6304/14549535*n^7 - 65792/334639305*n^8 - 288/2860165*n^9 - 25664/456326325*n^10 - 34144/1017958725*n^11 - 73856/3506302275*n^12 - 281632/20419054425*n^13 - 10048/1074687075*n^14 - 28832/4418157975*n^15 - 20992/4494995505*n^16 - 48416/14176524285*n^17 - 747072/293506558345*n^18 - 175712/91088242245*n^19 - 204928/138101528565*n^20 - 11296/9764754545*n^21 - 104896/114923649645* [...]
+        + (11/315 - 368/3465*n - 32/6435*n^2 + 976/4095*n^3 - 154048/765765*n^4 + 368/11115*n^5 + 5216/1322685*n^6 + 372208/334639305*n^7 + 13184/30421755*n^8 + 29008/143416845*n^9 + 15459424/145568097675*n^10 + 24876368/410237366175*n^11 + 107584/2917007775*n^12 + 8182096/347123925225*n^13 + 1076896/68682273975*n^14 + 5572816/516924483075*n^15 + 419584/55049100795*n^16 + 3975824/720425188665*n^17 + 32325856/7924677075315*n^18 + 4950032/1612380184155*n^19 + 10050752/4281147385515*n^20 +  [...]
+        + (4/1155 + 1088/45045*n - 128/1287*n^2 + 64/3927*n^3 + 2877184/14549535*n^4 - 370112/2078505*n^5 + 3369088/111546435*n^6 + 6158272/1673196525*n^7 + 1772032/1673196525*n^8 + 582592/1386362835*n^9 + 69229184/347123925225*n^10 + 479862464/4512611027925*n^11 + 13232896/214886239425*n^12 + 487333184/12843585233325*n^13 + 4097514368/166966608033225*n^14 + 2215403584/134228057438475*n^15 + 22961152/2002940359695*n^16 + 7455695168/911337863661225*n^17 + 3709076864/620766370899675*n^18 + [...]
+        + (97/15015 - 464/45045*n + 4192/153153*n^2 - 88240/969969*n^3 + 31168/1322685*n^4 + 11513072/66927861*n^5 - 90038048/557732175*n^6 + 56656/2028117*n^7 + 11176576/3234846615*n^8 + 1514798224/1504203675975*n^9 + 364902368/902522205585*n^10 + 875443216/4512611027925*n^11 + 1163297728/11131107202215*n^12 + 65826704/1077203922795*n^13 + 260103719072/6845630929362225*n^14 + 44215340656/1784012908864095*n^15 + 290929029376/17315419409563275*n^16 + 100721472976/8566575918415515*n^17 + 1 [...]
+        + (10/9009 + 4192/765765*n - 188096/14549535*n^2 + 23392/855855*n^3 - 2550656/30421755*n^4 + 44131552/1673196525*n^5 + 257683264/1673196525*n^6 - 31240736/210054975*n^7 + 451386112/17289697425*n^8 + 14726527328/4512611027925*n^9 + 4331513024/4512611027925*n^10 + 12975935008/33393321606645*n^11 + 31373075584/166966608033225*n^12 + 698039074144/6845630929362225*n^13 + 29703628096/494726268844665*n^14 + 1005634034464/26760193632961425*n^15 + 341277050932736/13835020108241056725*n^16 [...]
+        + (193/85085 - 6832/2078505*n + 106976/14549535*n^2 - 26672/1956955*n^3 + 521792/19684665*n^4 - 130524976/1673196525*n^5 + 3724256/135917925*n^6 + 3355734064/23876248825*n^7 - 9928194688/71628746475*n^8 + 649052336/26389538175*n^9 + 27235216864/8787716212275*n^10 + 1802925232/1964313035685*n^11 + 56875960256/152125131763605*n^12 + 89961920528/494726268844665*n^13 + 834516960736/8410346570359305*n^14 + 12897954159632/219603493781604075*n^15 + 188320698409216/5097112671457231425*n^ [...]
+        + (632/1322685 + 3456/1616615*n - 517376/111546435*n^2 + 27264/3380195*n^3 - 13728256/1003917915*n^4 + 337485952/13233463425*n^5 - 3335807744/45581929575*n^6 + 5933931904/214886239425*n^7 + 773057536/5945469075*n^8 - 2417337857408/18551845337025*n^9 + 35074718464/1504203675975*n^10 + 122682333568/41488672299165*n^11 + 5759356066304/6541380665835015*n^12 + 21217115597696/58872425992515135*n^13 + 6327384910592/35935117164262485*n^14 + 45144358136704/467850921534721725*n^15 + 168307 [...]
+        + (107/101745 - 4976/3380195*n + 582496/185910725*n^2 - 88112/16787925*n^3 + 241875008/29113619535*n^4 - 60768482384/4512611027925*n^5 + 110550963232/4512611027925*n^6 - 103976595664/1504203675975*n^7 + 80357441408/2929238737425*n^8 + 6763222232848/55655536011075*n^9 - 67861105568/550247643225*n^10 + 2212522672/99570961035*n^11 + 3295501210304/1163486679693975*n^12 + 901465527762928/1064232316018542825*n^13 + 6742139143828448/19369028151537479415*n^14 + 16530402013984624/96845140 [...]
+        + (1270/5148297 + 1376/1300075*n - 9664/4345965*n^2 + 2352160/646969323*n^3 - 1466054528/265447707525*n^4 + 1074734176/128931743655*n^5 - 129362368/9831396575*n^6 + 262162305568/11131107202215*n^7 - 38465435392/585847747485*n^8 + 267247345312/9878255309325*n^9 + 204209273106368/1784012908864095*n^10 - 3241185114016/27616298898825*n^11 + 6531220421504/307137753540705*n^12 + 3098495334496/1138216380768495*n^13 + 6086870028208448/7449626212129799775*n^14 + 38423353322878112/11406205 [...]
+        + (481/841225 - 27632/35102025*n + 238304/145422675*n^2 - 2354704/893763325*n^3 + 1351995712/347123925225*n^4 - 3628654736/644658718275*n^5 + 30646053728/3710369067405*n^6 - 2139721666448/166966608033225*n^7 + 14114295321472/622330084487475*n^8 - 409450644752/6534845820015*n^9 + 10307920635808/387828893231325*n^10 + 3499011467373232/32249464121774025*n^11 - 1206016607114944/10749821373924675*n^12 + 9545159677072/467383537996725*n^13 + 15013719882592/5721927876221025*n^14 + 346566 [...]
+        + (2228/15540525 + 36032/59879925*n - 39261056/31556720475*n^2 + 1244864/629988975*n^3 - 12932462848/4512611027925*n^4 + 671728862912/166966608033225*n^5 - 37698002816/6678664321329*n^6 + 11134144068416/1369126185872445*n^7 - 733991428969984/58872425992515135*n^8 + 1232714276672/56337249753603*n^9 - 4429833678464/73797400736325*n^10 + 840415474013504/32249464121774025*n^11 + 3333478527060224/32249464121774025*n^12 - 2666448379438912/24771327513826425*n^13 + 16284062335255936/8277 [...]
+        + (673/1950975 - 45968/97698825*n + 19761248/20419054425*n^2 - 5684848/3732515325*n^3 + 27973845952/12843585233325*n^4 - 500069826512/166966608033225*n^5 + 372104734816/91275079058163*n^6 - 1627062252976/290011950702045*n^7 + 12698466842752/1591146648446355*n^8 - 172098932532272/14189764213580571*n^9 + 4774693008614176/225746248852418175*n^10 - 13025415886952528/225746248852418175*n^11 + 4848026099408192/189913510939335925*n^12 + 619763904190141936/6267145860998085525*n^13 - 6493 [...]
+        + (238/2629575 + 57568/153526725*n - 825536/1074687075*n^2 + 1194848/995395275*n^3 - 283558943872/166966608033225*n^4 + 2715755872/1180892000925*n^5 - 780655005376/254858986980585*n^6 + 171825550350112/42051732851796525*n^7 - 996847690701056/179675585821312425*n^8 + 1628471419526944/208269119909005155*n^9 - 29311863367971392/2483208737376599925*n^10 + 10654809266315936/520197877790354925*n^11 - 2080206830396032/37399847422835975*n^12 + 156667139836595552/6267145860998085525*n^13  [...]
+        + (299/1335015 - 14192/46725525*n + 4932448/7952684355*n^2 - 19928240/20676979323*n^3 + 41885845312/30975705562725*n^4 - 106538926231952/58872425992515135*n^5 + 698069390155552/294362129962575675*n^6 - 1222675417496752/395286288806887335*n^7 + 3426171103075456/842131658762499105*n^8 - 1101372339312272/201341248976481075*n^9 + 53459494241119136/6983391102255009585*n^10 - 30879408909358352/2685919654713465225*n^11 + 522986071597155776/26322012616191959205*n^12 - 1636740144692612656 [...]
+        + (1072/17651865 + 86272/345768885*n - 11421184/22474977525*n^2 + 16677632/21215118925*n^3 - 18154021888/16569779339295*n^4 + 25154349615872/17315419409563275*n^5 - 70485959553536/37493279426127525*n^6 + 17021847805184/7060227510219975*n^7 - 300116388621985792/96845140757687397075*n^8 + 53507403275733248/13263029612809901925*n^9 - 4780406888960512/887872765984679475*n^10 + 2564172609357098752/342186164010495469665*n^11 - 1706337226816984064/152254778858365254225*n^12 + 1792877832 [...]
+        + (1153/7507115 - 34544/166481315*n + 3700832/8775943605*n^2 - 1518032/2335595955*n^3 + 14928483904/16569779339295*n^4 - 5708509424/4814305899975*n^5 + 45794146362208/30141656009239775*n^6 - 5643458496441232/2934701235081436275*n^7 + 4156028415620301184/1710930820052477348325*n^8 - 1159757261134928/375451134529839225*n^9 + 525138269596488544/131610063080959796025*n^10 - 6287452560651272656/1187587275095248982955*n^11 + 25307469319858098112/3449658275276675617155*n^12) * eps^17
+        + (2554/59814755 + 41056/235370135*n - 14837824/41929508335*n^2 + 3390304/6234993765*n^3 - 279486378368/372459822539805*n^4 + 42044271006688/42832879592077575*n^5 - 908499403281088/728158953065318775*n^6 + 2673843470669421536/1710930820052477348325*n^7 - 3332038388900879104/1710930820052477348325*n^8 + 594639889428168928/244418688578925335475*n^9 - 309769385066082483008/100944918383096163551175*n^10 + 4852059199993865385248/1231528004273773195324335*n^11) * eps^18
+        + (1441/13114465 - 48336/326481155*n + 9106016/30362747415*n^2 - 13405488/29164499455*n^3 + 235380121664/372459822539805*n^4 - 2367311016464/2878098628716675*n^5 + 404878095158752/389822469822847425*n^6 - 116162066506295792/90048990529077755175*n^7 + 247341466765626752/155539165459316122575*n^8 - 65920898026272999856/33648306127698721183725*n^9 + 14943489055072437854816/6157640021368865976621675*n^10) * eps^19
+        + (10540/338353197 + 33856/267120945*n - 7082368/27620305713*n^2 + 261152960/665956259969*n^3 - 7940593572608/14774239627412265*n^4 + 916716116672/1316024706307311*n^5 - 163090405515904/186436833393535725*n^6 + 10548437608477504/9776747543157013419*n^7 - 26616602067570450944/20188983676619232710235*n^8 + 173518074547495685824/108028772304716946958275*n^9) * eps^20
+        + (587/7219485 - 196112/1793526345*n + 3884000/17576558181*n^2 - 637552/1890061173*n^3 + 12449720852672/27001196560443105*n^4 - 466255241229968/783034700252850045*n^5 + 527323603107424/708459966895435755*n^6 - 572248526956172944/626987070702460643175*n^7 + 973916019063553575808/879662860195552282374525*n^8) * eps^21
+        + (1562/66703105 + 225632/2375210565*n - 286544192/1494007445385*n^2 + 84782368/290045401485*n^3 - 49602255488/124429477237065*n^4 + 263298573036064/513022734648418995*n^5 - 186977038393815616/292593966327814966815*n^6 + 5964364063236744416/7649242262570019846735*n^7) * eps^22
+        + (2113/34165005 - 257968/3106044585*n + 358566688/2140064719065*n^2 - 106220624/416550139005*n^3 + 5743685513024/16549120472529645*n^4 - 435137683275536/976398107879249055*n^5 + 340361707744440224/615456273999886654335*n^6) * eps^23
+        + (3656/202606425 + 293248/4015130805*n - 38087936/258689141865*n^2 + 43924864/196258677615*n^3 - 1343496883712/4418090985878955*n^4 + 80846540749696/207527123974335165*n^5) * eps^24
+        + (2497/51875075 - 13264/205425297*n + 3118880/23976066807*n^2 - 810041200/4100876153969*n^3 + 86272944083264/321947484219644283*n^4) * eps^25
+        + (4654/327806325 + 124384/2168378135*n - 44329792/383802929895*n^2 + 65844896/375780173615*n^3) * eps^26
+        + (971/25421715 - 139344/2722006595*n + 804004512/7803992907865*n^2) * eps^27
+        + (29092/2558620845 + 155456/3388620455*n) * eps^28
+        + 3361/109067695 * eps^29;
+C4[1] = + (1/45 - 16/315*n + 32/945*n^2 - 16/3465*n^3 - 64/135135*n^4 - 16/135135*n^5 - 32/765765*n^6 - 112/6235515*n^7 - 128/14549535*n^8 - 16/3380195*n^9 - 32/11700675*n^10 - 176/105306075*n^11 - 64/59879925*n^12 - 208/293096475*n^13 - 224/460580175*n^14 - 16/46725525*n^15 - 256/1037306655*n^16 - 272/1498331835*n^17 - 32/235370135*n^18 - 304/2938330395*n^19 - 64/801362835*n^20 - 112/1793526345*n^21 - 352/7125631695*n^22 - 368/9318133755*n^23 - 128/4015130805*n^24 - 16/616275891*n^25 -  [...]
+        - (2/105 - 64/945*n + 128/1485*n^2 - 1984/45045*n^3 + 256/45045*n^4 + 64/109395*n^5 + 128/855855*n^6 + 2368/43648605*n^7 + 24064/1003917915*n^8 + 64/5311735*n^9 + 9088/1368978975*n^10 + 704/179639775*n^11 + 11008/4508102925*n^12 + 10816/6806351475*n^13 + 128/119409675*n^14 + 29632/39763421775*n^15 + 1024/1926426645*n^16 + 214336/552884447115*n^17 + 84608/293506558345*n^18 + 8512/39037818105*n^19 + 69376/414304585695*n^20 + 11456/87882790905*n^21 + 153472/1494007445385*n^22 + 1472 [...]
+        - (1/105 - 16/2079*n - 5792/135135*n^2 + 3568/45045*n^3 - 103744/2297295*n^4 + 264464/43648605*n^5 + 544/855855*n^6 + 165328/1003917915*n^7 + 303488/5019589575*n^8 + 135664/5019589575*n^9 + 6000928/436704293025*n^10 + 554224/72394829325*n^11 + 63424/13884957009*n^12 + 598832/208274355135*n^13 + 4282016/2266515041175*n^14 + 664784/516924483075*n^15 + 57332992/63581711418225*n^16 + 77073104/118870156129725*n^17 + 3775712/7924677075315*n^18 + 132893296/372459822539805*n^19 + 3489344 [...]
+        + (4/1155 - 2944/135135*n + 256/9009*n^2 + 17536/765765*n^3 - 3053056/43648605*n^4 + 1923968/43648605*n^5 - 2061568/334639305*n^6 - 1104256/1673196525*n^7 - 289792/1673196525*n^8 - 3114112/48522699225*n^9 - 391369984/13537833083775*n^10 - 98944/6685349671*n^11 - 7490048/902522205585*n^12 - 7679360/1541230227999*n^13 - 316086016/100179964819935*n^14 - 839709568/402684172315425*n^15 - 433629184/303779287887075*n^16 - 2751201664/2734013590983675*n^17 - 451501312/620766370899675*n^18 [...]
+        + (1/9009 + 16/19305*n - 2656/153153*n^2 + 65072/2078505*n^3 + 526912/43648605*n^4 - 658160/10567557*n^5 + 14198752/334639305*n^6 - 1812592/295269975*n^7 - 97587328/145568097675*n^8 - 267846032/1504203675975*n^9 - 2119456/31853724903*n^10 - 45372848/1504203675975*n^11 - 2592068672/166966608033225*n^12 - 4380850576/500899824099675*n^13 - 5700161696/1080889094109825*n^14 - 39480194224/11774485198503027*n^15 - 12840471296/5771806469854425*n^16 - 196425584176/128498638776232725*n^17  [...]
+        + (10/9009 - 1472/459459*n + 106112/43648605*n^2 - 204352/14549535*n^3 + 4359424/143416845*n^4 + 29558336/5019589575*n^5 - 4479616/79676025*n^6 + 282120896/6931814175*n^7 - 3037689344/501401225325*n^8 - 159800512/237505843575*n^9 - 128742272/712517530725*n^10 - 34081066304/500899824099675*n^11 - 739998464/23852372576175*n^12 - 329429443264/20536892788086675*n^13 - 1144477661056/126155198555389575*n^14 - 1615718080576/294362129962575675*n^15 - 145301040063488/41505060324723170175* [...]
+        + (349/2297295 + 28144/43648605*n - 32288/8729721*n^2 + 375344/111546435*n^3 - 12041408/1003917915*n^4 + 432232496/15058768725*n^5 + 310326496/145568097675*n^6 - 99405970096/1933976154825*n^7 + 17050659712/436704293025*n^8 - 1790101232/300840735195*n^9 - 4867489888/7259417740575*n^10 - 30362471408/166966608033225*n^11 - 472100207296/6845630929362225*n^12 - 1213812473968/38395060429901175*n^13 - 2070794882336/126155198555389575*n^14 - 128880963219824/13835020108241056725*n^15 - 52 [...]
+        + (632/1322685 - 44288/43648605*n + 52736/47805615*n^2 - 2034944/557732175*n^3 + 3396608/885809925*n^4 - 4651476224/436704293025*n^5 + 376863232/13970931975*n^6 - 521047808/1933976154825*n^7 - 33839405056/712517530725*n^8 + 71989123328/1919156414175*n^9 - 2920335016448/500899824099675*n^10 - 167196416/251311112325*n^11 - 332813237248/1828336210947675*n^12 - 189963362048/2734013590983675*n^13 - 189790575759872/5929294332103310025*n^14 - 1615852457389312/96845140757687397075*n^15 - [...]
+        + (43/479655 + 122576/334639305*n - 2304352/1673196525*n^2 + 2336816/1673196525*n^3 - 12805184/3669783975*n^4 + 54763949168/13537833083775*n^5 - 122726048/12640367025*n^6 + 114617716208/4512611027925*n^7 - 34612052864/18551845337025*n^8 - 2463842008976/55655536011075*n^9 + 247179941367712/6845630929362225*n^10 - 2994094055984/524709679077675*n^11 - 64595765995328/98120709987525225*n^12 - 3099595834864/17073245711527425*n^13 - 20252388370301728/290535422273062191225*n^14 - 9467392 [...]
+        + (1270/5148297 - 34624/77224455*n + 8999296/15058768725*n^2 - 219421376/145568097675*n^3 + 245188352/155607276825*n^4 - 8995427648/2707566616755*n^5 + 62537856/15193976525*n^6 - 300772218944/33393321606645*n^7 + 12025681693184/500899824099675*n^8 - 6752231485504/2281876976454075*n^9 - 7341173985537152/176617277977545405*n^10 + 2796003983106368/80280580898884275*n^11 - 5941399696481024/1064232316018542825*n^12 - 692086460430784/1064232316018542825*n^13 - 1345434958946432/74496262 [...]
+        + (15881/295269975 + 3275312/15058768725*n - 290237344/436704293025*n^2 + 3374142608/4512611027925*n^3 - 2324047552/1504203675975*n^4 + 22749713104/13537833083775*n^5 - 9287415008/2929238737425*n^6 + 2059124453296/500899824099675*n^7 - 1828414788736/216177818821965*n^8 + 2236007478391408/98120709987525225*n^9 - 3289422168026144/883086389887727025*n^10 - 1559442395410064/39717761076290115*n^11 + 93137685335849536/2767004021648211345*n^12 - 36715264470352/6721467259064481*n^13 - 39 [...]
+        + (2228/15540525 - 6120832/25688487825*n + 691211008/1933976154825*n^2 - 3492371072/4512611027925*n^3 + 208152064/246142419705*n^4 - 773080659584/500899824099675*n^5 + 290139660544/166966608033225*n^6 - 3669101648768/1208052516946275*n^7 + 3589606756281344/883086389887727025*n^8 - 181420012122752/22643240766351975*n^9 + 411019605061888/18926156098824975*n^10 - 37593628401801344/8804103705244308825*n^11 - 48134971208650240/1291268543435831961*n^12 + 857893200414386816/263220126161 [...]
+        + (733/21460725 + 5764688/41912795925*n - 3194656/8562829275*n^2 + 185012432/410237366175*n^3 - 2374742464/2862284709141*n^4 + 65055690512/71557117728525*n^5 - 10435905969184/6845630929362225*n^6 + 74203317689008/42051732851796525*n^7 - 83189743940224/28486657738313775*n^8 + 970218654799696/242719651021772925*n^9 - 12979601134119328/1699037557152410475*n^10 + 182872846566647344/8804103705244308825*n^11 - 106352279311029184/22812410934033031311*n^12 - 311872072090752592/8774004205 [...]
+        + (238/2629575 - 851648/5987542275*n + 458368/1995847425*n^2 - 4444753088/9821565178425*n^3 + 257876621056/500899824099675*n^4 - 926189860672/1080889094109825*n^5 + 16440112590464/17315419409563275*n^6 - 62997095167168/42051732851796525*n^7 + 14708637300203008/8301012064944634035*n^8 - 12992021530058176/4611673369413685575*n^9 + 126514656768577664/32281713585895799025*n^10 - 934589810873408/127665525684801195*n^11 + 2273402066071352576/114062054670165156555*n^12 - 867813026471468 [...]
+        + (1349/59007663 + 569168/6195804615*n - 6094472992/26363148636825*n^2 + 2579500208/8787716212275*n^3 - 10278771378368/20536892788086675*n^4 + 5804486242864/10389251645737965*n^5 - 986666922848/1136533320318825*n^6 + 1154950393173904/1185858866420662005*n^7 - 25102872528546944/17090318957238952425*n^8 + 171093766520283664/96845140757687397075*n^9 - 90252717369684512/33114790065531819645*n^10 + 856168540797233296/223164889572062262825*n^11 - 523921065908336192/74388296524020754275 [...]
+        + (1072/17651865 - 1621504/17634213135*n + 25527296/163746264825*n^2 - 103998194176/360296364703275*n^3 + 5248424757248/15492743682240825*n^4 - 467691403586048/883086389887727025*n^5 + 301694693856256/512408152157076175*n^6 - 252813007696723456/290535422273062191225*n^7 + 286904030108225536/290535422273062191225*n^8 - 351698678463165952/244418688578925335475*n^9 + 37866741710291968/21596602216651186725*n^10 - 3343357802501632/1264961585514852225*n^11 + 87427882477068703744/232949 [...]
+        + (4105/256743333 + 839312/13080031965*n - 27420423136/178581676418145*n^2 + 69811484144/345901445314425*n^3 - 96146193098048/294362129962575675*n^4 + 15405921597572848/41505060324723170175*n^5 - 2522567523013984/4611673369413685575*n^6 + 58989773513135888/96845140757687397075*n^7 - 13345966126725050752/15398377380472296134925*n^8 + 1699738669400076688/1710930820052477348325*n^9 - 21702598557454157792/15398377380472296134925*n^10 + 1576193121961143720976/908504265447865471960575* [...]
+        + (2554/59814755 - 14367296/228073660815*n + 1013644928/9174446936655*n^2 - 167156355008/853223565108915*n^3 + 84963738158848/360913568041071045*n^4 - 14611840804674368/41505060324723170175*n^5 + 1819399468775296/4611673369413685575*n^6 - 2858231484366780352/5132792460157432044975*n^7 + 837914285761024/1346129677460643075*n^8 - 7953299207910592/9248274702986364045*n^9 + 301043012700456113536/302834755149288490653525*n^10 - 8502565529331757967296/6157640021368865976621675*n^11) * eps^18
+        + (23263/2006513145 + 44125168/949080717585*n - 1895498144/17652901347081*n^2 + 5803380481936/40101507560119005*n^3 - 19655652872896/87117068147844735*n^4 + 3287964577171024/12631974881437486575*n^5 - 46210682062489376/125190060003839805975*n^6 + 372537686814738512/905786904733664478525*n^7 - 8650226115503323264/15398377380472296134925*n^8 + 101222691712671952/160484766904763376075*n^9 - 47176442350469959824736/55418760192319793789595075*n^10) * eps^19
+        + (10540/338353197 - 3712/82302129*n + 14840576/183064816935*n^2 - 2144136832/15388989250635*n^3 + 5316349300224/31190061435648115*n^4 - 6607647772488064/26779786748647471539*n^5 + 66555255361792/238679026280280495*n^6 - 44052878135978368/115777273537385685225*n^7 + 384486668476460567552/908504265447865471960575*n^8 - 3468834561318140695424/6157640021368865976621675*n^9) * eps^20
+        + (27329/3154914945 + 13289392/382771889955*n - 1286021216/16459191268065*n^2 + 770506950736/7181693789965695*n^3 - 1152005167333952/7079713738148182131*n^4 + 195075922055654512/1026558492031486408995*n^5 - 8145969897756512/31107833091863224515*n^6 + 12664143027275104208/43262107878469784379075*n^7 - 651402398229792722048/1679356369464236175442275*n^8) * eps^21
+        + (1562/66703105 - 127424/3811384395*n + 2102950784/34362171243855*n^2 - 37430848576/364239015184863*n^3 + 696434041088/5463585227772945*n^4 - 6373599267875264/35398568690740910655*n^5 + 545772421678208/2661698573054612091*n^6 - 8466792971121000512/31046924477490080554395*n^7) * eps^22
+        + (3401/512475075 + 28492208/1071585381825*n - 5331168/90848077775*n^2 + 8186753917904/100165729175837325*n^3 - 99012798127808/815635223288961075*n^4 + 1929159053254544/13474293888733636959*n^5 - 5854490607967819616/30333202075708699392225*n^6) * eps^23
+        + (3656/202606425 - 35305216/1385220127725*n + 29556996608/624734277603975*n^2 - 4014261183232/51436455522727275*n^3 + 32964315529286656/336857347218340923975*n^4 - 29338515257596672/216297875582303119605*n^5) * eps^24
+        + (100381/19328652945 + 22113584/1063075911975*n - 39278656544/868533020083575*n^2 + 44603405612432/700327125194055975*n^3 - 9121454090180288/98004601813921127325*n^4) * eps^25
+        + (4654/327806325 - 17462848/878193144675*n + 276219008/7401913647975*n^2 - 2750176959296/45302178830156325*n^3) * eps^26
+        + (45767/11058446025 + 176617072/10656655819425*n - 1087907102432/30552632234291475*n^2) * eps^27
+        + (29092/2558620845 - 125915776/7959869448795*n) * eps^28
+        + 917561/273868982145 * eps^29;
+C4[2] = + (4/525 - 32/1575*n + 64/3465*n^2 - 32/5005*n^3 + 128/225225*n^4 + 32/765765*n^5 + 64/8083075*n^6 + 32/14549535*n^7 + 256/334639305*n^8 + 288/929553625*n^9 + 64/456326325*n^10 + 352/5089793625*n^11 + 128/3506302275*n^12 + 416/20419054425*n^13 + 64/5373435375*n^14 + 32/4418157975*n^15 + 512/112374887625*n^16 + 544/184294815705*n^17 + 576/293506558345*n^18 + 608/455441211225*n^19 + 128/138101528565*n^20 + 32/48823772725*n^21 + 704/1494007445385*n^22 + 736/2140064719065*n^23 + 256/ [...]
+        - (8/1575 - 128/5775*n + 256/6825*n^2 - 6784/225225*n^3 + 4608/425425*n^4 - 128/124355*n^5 - 5888/72747675*n^6 - 9088/557732175*n^7 - 1024/214512375*n^8 - 3968/2281631625*n^9 - 35584/48522699225*n^10 - 235136/683728943625*n^11 - 303616/1735619626125*n^12 - 1664/17531511375*n^13 - 22784/419725007625*n^14 - 16768/516924483075*n^15 - 710656/35323173010125*n^16 - 850816/66038975627625*n^17 - 25856/3047952721275*n^18 - 1184384/206922123633225*n^19 - 512/129731738955*n^20 - 17536/63208 [...]
+        - (8/1925 - 1856/225225*n - 128/17325*n^2 + 42176/1276275*n^3 - 2434816/72747675*n^4 + 195136/14549535*n^5 - 761984/557732175*n^6 - 947392/8365982625*n^7 - 199168/8365982625*n^8 - 250816/34659070875*n^9 - 12285568/4512611027925*n^10 - 2049728/1735619626125*n^11 - 854272/1504203675975*n^12 - 3794752/12843585233325*n^13 - 136569728/834833040166125*n^14 - 983872/10325235187575*n^15 - 263816192/4556689318306125*n^16 - 166125632/4556689318306125*n^17 - 73477504/3103831854498375*n^18 - [...]
+        + (8/10725 - 128/17325*n + 64256/3828825*n^2 - 128/25935*n^3 - 266752/10392525*n^4 + 11222912/334639305*n^5 - 8292608/557732175*n^6 + 4484992/2788660875*n^7 + 340992/2450641375*n^8 + 11977088/395843072625*n^9 + 2246912/237505843575*n^10 + 82282624/22563055139625*n^11 + 4942336/3057996484125*n^12 + 661387648/834833040166125*n^13 + 5904128/14079866164875*n^14 + 23140740736/98120709987525225*n^15 + 12064565248/86577097047816375*n^16 + 18372231296/214164397960387875*n^17 + 2732210099 [...]
+        - (4/25025 + 928/3828825*n + 292288/72747675*n^2 - 106528/6613425*n^3 + 6139264/557732175*n^4 + 10832608/557732175*n^5 - 162679232/5019589575*n^6 + 85724192/5472484875*n^7 - 3655690496/2051186830875*n^8 - 3604983136/22563055139625*n^9 - 7007552/196200479475*n^10 - 9537699488/834833040166125*n^11 - 13154432/2929238737425*n^12 - 200866912/99212042454525*n^13 - 6420816704/6371474674514625*n^14 - 17688656864/32706903329175075*n^15 - 21307711227392/69175100541205283625*n^16 - 52444261 [...]
+        + (464/1276275 - 17152/10392525*n + 83456/72747675*n^2 - 181504/79676025*n^3 + 115303424/8365982625*n^4 - 4580096/334639305*n^5 - 508046848/34659070875*n^6 + 2213207296/71628746475*n^7 - 17261467648/1074431197125*n^8 + 4782020864/2507006126625*n^9 + 1014518272/5757469242525*n^10 + 33657011968/834833040166125*n^11 + 149965386752/11409384882270375*n^12 + 1104106298624/210258664258982625*n^13 + 16287375872/6782537556741375*n^14 + 18546580736/15321173984763075*n^15 + 45457260285952/6 [...]
+        + (1168/72747675 + 128/1865325*n - 12032/7436429*n^2 + 5669504/2788660875*n^3 - 42320384/25097947875*n^4 + 1690753408/145568097675*n^5 - 3812261632/259345461375*n^6 - 1083259264/97675563375*n^7 + 220583066624/7521018379875*n^8 - 1505036615552/92759226685125*n^9 + 1611235072/806601971175*n^10 + 6334750336/33458606692875*n^11 + 1667637018112/37738734610586625*n^12 + 937077639296/63991767383168625*n^13 + 4509356511488/760165940013244875*n^14 + 294484214656/107248217893341525*n^15 +  [...]
+        + (208/1119195 - 192256/334639305*n + 34304/91933875*n^2 - 164096/121246125*n^3 + 1760402432/727840488375*n^4 - 7092326144/4512611027925*n^5 + 223317267968/22563055139625*n^6 - 17696559872/1187529217875*n^7 - 7016842532864/834833040166125*n^8 + 860408727296/30919742228375*n^9 - 22226861374976/1369126185872445*n^10 + 21222698179328/10292382166523625*n^11 + 88454767616/442649819492595*n^12 + 50501718260992/1064232316018542825*n^13 + 7723646961783296/484225703788436985375*n^14 + 314 [...]
+        + (236/9561123 + 50272/557732175*n - 180416/253514625*n^2 + 4019104/6220858875*n^3 - 25917758848/22563055139625*n^4 + 494758496/196200479475*n^5 - 12204703424/7521018379875*n^6 + 4056672544/472457860875*n^7 - 22131315968/1504203675975*n^8 - 314109390176/49391276546625*n^9 + 288234585666624/10902301109725025*n^10 - 31315082826784/1939144466156625*n^11 + 111197020252288/52765141526472375*n^12 + 14390751017248/69105994546658625*n^13 + 24312743742913856/484225703788436985375*n^14 + 6 [...]
+        + (3464/32807775 - 1302656/5019589575*n + 153380608/727840488375*n^2 - 45513088/64282208375*n^3 + 18741801472/22563055139625*n^4 - 925614464/902522205585*n^5 + 692308704512/278277680055375*n^6 - 1431548425856/834833040166125*n^7 + 37095814581248/4889736378115875*n^8 - 57202079464576/3988646747460375*n^9 - 156331212808448/32706903329175075*n^10 + 2294120744984192/91139789909361375*n^11 - 22462403210597888/1403552764604165175*n^12 + 1062101785588352/496641747475319985*n^13 + 183908 [...]
+        + (296/15540525 + 1728/24395525*n - 49758848/136745788725*n^2 + 427124032/1327238537625*n^3 - 5044327168/7521018379875*n^4 + 298545088/318031634349*n^5 - 801131699072/834833040166125*n^6 + 6305965926464/2632934972831625*n^7 - 378931864297984/210258664258982625*n^8 + 911863359318208/133800968164807125*n^9 - 192205122085248128/13835020108241056725*n^10 - 6780515998533184/1913935588096588875*n^11 + 38905530524711168/1619483959158652125*n^12 - 946513267068414656/59822755945890816375* [...]
+        + (56/858429 - 55168/399169485*n + 5211904/37921101075*n^2 - 3002446208/7521018379875*n^3 + 48699457024/119261862880875*n^4 - 919739008/1451883548115*n^5 + 365596999424/368044673621625*n^6 - 10263813181312/11066245487314875*n^7 + 3358672820415488/1471810649812878375*n^8 - 43146790366966912/23058366847068427875*n^9 + 200474306313855232/32281713585895799025*n^10 - 1223232504628096/91139789909361375*n^11 - 5571695531272704/2175096389591250125*n^12 + 117245774985483904/51011652356961 [...]
+        + (6748/491730525 + 2464/47453715*n - 35434816/169647031125*n^2 + 2367228064/12099029567625*n^3 - 338914889344/834833040166125*n^4 + 643139268064/1369126185872445*n^5 - 42372035912768/70086221419660875*n^6 + 528871923808/521733658210875*n^7 - 9028483998408448/9882157220172183375*n^8 + 375698992716832/173371179301266375*n^9 - 3261967803906496/1699037557152410475*n^10 + 4454132788010992864/777695827296580612875*n^11 - 324957881336448/25082916539157575*n^12 - 51719952215776/29149515 [...]
+        + (63392/1475191575 - 40448/491730525*n + 22100992/232479264875*n^2 - 10707459584/43938581061375*n^3 + 395889698816/1629912126038625*n^4 - 1272720851456/3165184193145975*n^5 + 57785079583744/113216203831759875*n^6 - 5771910533522944/9882157220172183375*n^7 + 400461014478848/395286288806887335*n^8 - 8980497036868096/9882157220172183375*n^9 + 861739038708736/418695852855651525*n^10 - 7151522689996655104/3666280328683880032125*n^11 + 136923421975731791872/25663962300787160224875*n^1 [...]
+        + (216352/21800053275 + 276003584/7259417740575*n - 364665344/2792083746375*n^2 + 45336414464/345738935826375*n^3 - 54656669920256/210258664258982625*n^4 + 2651168079104/9495552579437925*n^5 - 9112145249388032/23058366847068427875*n^6 + 259248276999003392/484225703788436985375*n^7 - 25094568739469312/44020518526221544125*n^8 + 2852336745721263872/2851551366754128913875*n^9 - 215254033283584/237135248794522155*n^10 + 16753729491723017984/8554654100262386741625*n^11 - 3970659378054 [...]
+        + (1248/41951525 - 14245376/268867323725*n + 10222592/149641089675*n^2 - 1801381376/11340026117875*n^3 + 236349194786816/1471810649812878375*n^4 - 3691013040948736/13835020108241056725*n^5 + 371324256164864/1213598255108864625*n^6 - 2021022934670848/5206727997725128875*n^7 + 427036746482839552/777695827296580612875*n^8 - 1598379187657077248/2851551366754128913875*n^9 + 1279883225050112/1305057833754750075*n^10 - 35243011544058408448/38824968608883139827375*n^11 + 5752870409563414 [...]
+        + (2188/299073775 + 118112/4177173275*n - 1651234880/18960523669087*n^2 + 396968969632/4266117825544575*n^3 - 527133283672192/3007613067008925375*n^4 + 712898585518304/3873805630307495883*n^5 - 102467165232448/380980097394521625*n^6 + 1667960274927658784/5132792460157432044975*n^7 - 9803797102758335744/25663962300787160224875*n^8 + 1582433972899100512/2851551366754128913875*n^9 - 167731799286812796352/302834755149288490653525*n^10 + 2057307675985255174816/214801396094262766626337 [...]
+        + (4776/222945905 - 545152/15064773295*n + 75166464/1485934456825*n^2 - 2430966148992/22278615311177225*n^3 + 25097198606848/221613594411183975*n^4 - 777828977914496/4210658293812495525*n^5 + 346053142459467008/1710930820052477348325*n^6 - 2300283426585485696/8554654100262386741625*n^7 + 2890306701807143936/8554654100262386741625*n^8 - 63408372990350273152/168241530638493605918625*n^9 + 379976274656827151616/684182224596540664069075*n^10) * eps^19
+        + (729128/132296100027 + 1037632/48401012205*n - 312986836352/5129781278546925*n^2 + 8491740695488/123684726382742525*n^3 - 569171041087744/4611673369413685575*n^4 + 14781690121669568/114062054670165156555*n^5 - 325240456165524608/1710930820052477348325*n^6 + 264121805570445376/1222093442894626677375*n^7 - 15019589271866087936/56080510212831201972875*n^8 + 322915232383134423488/932975760813464541912375*n^9) * eps^20
+        + (50248/3154914945 - 4224/163387745*n + 351214336/9143995148925*n^2 - 13428756608/171810856219275*n^3 + 149145346743808/1787806499532369225*n^4 - 15142621991500672/114062054670165156555*n^5 + 3607505909629184/25284691921957793325*n^6 - 1346982356013579136/6977759335237061996625*n^7 + 426802317284889955328/1884991843276183462231125*n^8) * eps^21
+        + (402908/95051924625 + 61416608/3707025060375*n - 1594343872/35872596353475*n^2 + 176968781792/3392422200251175*n^3 - 11134005164416/123581094437721375*n^4 + 5634047312627936/58997614484568184425*n^5 - 23365464365584673216/168241530638493605918625*n^6 + 7084481509357518688/46298045273450120124975*n^7) * eps^22
+        + (10384/854125125 - 34177792/1785975636375*n + 36665846272/1230537213462375*n^2 - 878996127488/15176625632702625*n^3 + 54887110257664/865067661064049625*n^4 - 850509595404544/8637367877393357025*n^5 + 909150023994065408/8631398964632556737625*n^6) * eps^23
+        + (10096/3039096375 + 90261376/6926100638625*n - 104352359168/3123671388019875*n^2 + 31307137302656/771546832840909125*n^3 - 38042941521183232/561428912030568206625*n^4 + 498270120528775552/6849432726772932120825*n^5) * eps^24
+        + (509392/53690702625 - 8609536/590597728875*n + 1032951296/43865304044625*n^2 - 971880602368/22022865572140125*n^3 + 391353414474752/7911102710525447125*n^4) * eps^25
+        + (2894476/1093234093875 + 3389629984/325419348610125*n - 164895679936/6399913855999125*n^2 + 1620742521773024/50360922132857114625*n^3) * eps^26
+        + (139048/18430743375 - 86549632/7611897013875*n + 412763643136/21823308738779625*n^2) * eps^27
+        + (4247096/1982931154875 + 5788830656/685433202535125*n) * eps^28
+        + 185528/30429886905 * eps^29;
+C4[3] = + (8/2205 - 256/24255*n + 512/45045*n^2 - 256/45045*n^3 + 1024/765765*n^4 - 256/2909907*n^5 - 512/101846745*n^6 - 256/334639305*n^7 - 2048/11712375675*n^8 - 256/5019589575*n^9 - 512/29113619535*n^10 - 2816/410237366175*n^11 - 1024/347123925225*n^12 - 3328/2429867476575*n^13 - 512/755505013725*n^14 - 256/723694276305*n^15 - 4096/21193903806075*n^16 - 4352/39623385376575*n^17 - 512/7924677075315*n^18 - 4864/124153274179935*n^19 - 1024/41955244378047*n^20 - 256/16434081899235*n^21 - [...]
+        - (16/8085 - 1024/105105*n + 2048/105105*n^2 - 1024/51051*n^3 + 4096/373065*n^4 - 1024/357357*n^5 + 161792/780825045*n^6 + 1024/79676025*n^7 + 8192/3904125225*n^8 + 13312/26127607275*n^9 + 2048/13080031965*n^10 + 84992/1504203675975*n^11 + 241664/10529425731825*n^12 + 13312/1302972414975*n^13 + 2048/418462676775*n^14 + 467968/187919280413865*n^15 + 2834432/2126455015209525*n^16 + 17408/23367637529775*n^17 + 268288/620766370899675*n^18 + 175104/675945603868535*n^19 + 1101824/68946 [...]
+        - (136/63063 - 256/45045*n + 512/1072071*n^2 + 494336/33948915*n^3 - 44032/1996995*n^4 + 204032/14196819*n^5 - 42496/10140585*n^6 + 1651456/5019589575*n^7 + 3172352/145568097675*n^8 + 39570176/10529425731825*n^9 + 6040064/6317655439095*n^10 + 9663232/31588277195475*n^11 + 44557312/389588752077525*n^12 + 156928/3273855059475*n^13 + 50066944/2281876976454075*n^14 + 211489024/19624141997505045*n^15 + 61804544/11018903260631175*n^16 + 83527936/27257287013140275*n^17 + 1220781568/6996 [...]
+        + (64/315315 - 16384/5360355*n + 966656/101846745*n^2 - 868352/101846745*n^3 - 3506176/468495027*n^4 + 966656/46293975*n^5 - 2736128/168120225*n^6 + 254590976/48522699225*n^7 - 930414592/2105885146365*n^8 - 975978496/31588277195475*n^9 - 175947776/31588277195475*n^10 - 1719713792/1168766256232575*n^11 - 189497344/389588752077525*n^12 - 471973888/2522074552922925*n^13 - 23683022848/294362129962575675*n^14 - 2875506688/76316107768075175*n^15 - 166335741952/8804103705244308825*n^16  [...]
+        - (16/97461 + 14848/101846745*n + 74752/101846745*n^2 - 1180160/156165009*n^3 + 1804288/156165009*n^4 + 21661184/11712375675*n^5 - 6329863168/339658894575*n^6 + 77686373888/4512611027925*n^7 - 191476584448/31588277195475*n^8 + 1902050816/3509808577275*n^9 + 602135552/15178782548475*n^10 + 1734961664/233753251246515*n^11 + 32315783168/15973138835178525*n^12 + 4767689216/6937827978915925*n^13 + 354268160/1308276133167003*n^14 + 3839243089408/32281713585895799025*n^15 + 549854526668 [...]
+        + (5024/33948915 - 96256/101846745*n + 2363392/2342475135*n^2 - 223232/3904125225*n^3 + 179101696/35137127025*n^4 - 12169295872/1018976683725*n^5 + 21649608704/10529425731825*n^6 + 73147930624/4512611027925*n^7 - 110974713856/6317655439095*n^8 + 45664495616/6834890387325*n^9 - 38688231424/61514013485925*n^10 - 6727825408/140526148110075*n^11 - 204859727872/22156289352021825*n^12 - 5333835708416/2060534909738029725*n^13 - 12449383788544/13835020108241056725*n^14 - 11682410842112/3 [...]
+        - (1744/101846745 + 512/15935205*n + 2819072/3904125225*n^2 - 574976/354920475*n^3 + 293840896/1018976683725*n^4 - 104608193024/31588277195475*n^5 + 50770254848/4512611027925*n^6 - 2319237632/501401225325*n^7 - 70544060416/5059594182825*n^8 + 152043321856/8657527823945*n^9 - 12686255881216/1774793203908725*n^10 + 1910603827712/2714802252619275*n^11 + 4965264541696/89588474336436075*n^12 + 11708566053376/1064232316018542825*n^13 + 27753253723136/8804103705244308825*n^14 + 83288476 [...]
+        + (13760/156165009 - 868352/2342475135*n + 2834432/11712375675*n^2 - 7192576/16174233075*n^3 + 7776468992/4512611027925*n^4 - 4603068416/6317655439095*n^5 + 23153426432/10529425731825*n^6 - 68229349376/6678664321329*n^7 + 7325440344064/1168766256232575*n^8 + 63577941262336/5324379611726175*n^9 - 44408364941312/2559670695326745*n^10 + 28661243789312/3822884804708775*n^11 - 24786086817923072/32281713585895799025*n^12 - 3817219702784/61277771427624675*n^13 - 1226804449460224/9684514 [...]
+        + (2824/688963275 + 169216/11712375675*n - 776704/1940907969*n^2 + 22551296/45581929575*n^3 - 485960704/1504203675975*n^4 + 304217344/191444104215*n^5 - 2695489024/2419805913525*n^6 + 8952644864/5757469242525*n^7 - 5695372408832/622330084487475*n^8 + 17565250440448/2409982350570795*n^9 + 22610939298304/2213249097462975*n^10 - 21402530278491392/1257729100749186975*n^11 + 1752626126402468864/225971995101270593175*n^12 - 14296223366555392/17382461161636199475*n^13 - 288001255055872/ [...]
+        + (848/15540525 - 1506304/8562829275*n + 494897152/4512611027925*n^2 - 1525812224/4512611027925*n^3 + 1189474304/1858133952675*n^4 - 74582428672/233753251246515*n^5 + 1436219392/1037059677225*n^6 - 9475007491072/6845630929362225*n^7 + 70856261853184/58872425992515135*n^8 - 16848457551905792/2060534909738029725*n^9 + 254950781338028032/32281713585895799025*n^10 + 19961192018277376/2282545405063339325*n^11 - 11266641625872879616/677915985303811779525*n^12 + 20501971947705344/258058 [...]
+        + (2456/364832325 + 1801984/79168614525*n - 339889664/1504203675975*n^2 + 205509376/957220521075*n^3 - 109868782592/389588752077525*n^4 + 54139545344/77917750415505*n^5 - 312640051712/840691517640975*n^6 + 349164957867776/294362129962575675*n^7 - 58011733055488/37464271086145995*n^8 + 33115510536049408/32281713585895799025*n^9 - 215925931198897664/29474608056687468675*n^10 + 507489742441723648/61628725936710161775*n^11 + 9972967174487194624/1330723971151926826475*n^12 - 341339569 [...]
+        + (17536/491730525 - 32768/342721275*n + 32768/479809785*n^2 - 87051763712/389588752077525*n^3 + 115073417216/389588752077525*n^4 - 809341124608/3194627767035705*n^5 + 476140039995392/686844969912676575*n^6 - 7648126664704/17315419409563275*n^7 + 2295366957006848/2252212575760172025*n^8 - 1505996592152576/922334673882737115*n^9 + 642554502878101504/677915985303811779525*n^10 - 937147600273702912/142014020636766894525*n^11 + 44138249302114304/5259778542102477575*n^12 + 31679339599 [...]
+        + (6752/1121145597 + 828416/39240095895*n - 22733400064/166966608033225*n^2 + 12663202816/106251477839325*n^3 - 9940302737408/47919416505535575*n^4 + 142477291621376/412106981947605945*n^5 - 511499016656896/2060534909738029725*n^6 + 1833727522382848/2767004021648211345*n^7 - 49222696013062144/96845140757687397075*n^8 + 1755522210632704/1976431444034436675*n^9 - 3980569541165627392/2395303148073468287655*n^10 + 3693492679339365376/3992171913455780479425*n^11 - 21498364033572601446 [...]
+        + (7104/290667377 - 5550080/96792236541*n + 116482048/2419805913525*n^2 - 37516668928/253541886272675*n^3 + 112198220398592/686844969912676575*n^4 - 12087336398848/62440451810243325*n^5 + 9147933925376/24661354916650725*n^6 - 24968440568492032/96845140757687397075*n^7 + 60100118709960704/96845140757687397075*n^8 - 12851567387414528/22812410934033031311*n^9 + 578870590466711552/733256065736776006425*n^10 - 94517652107104256/57121696694915777925*n^11 + 658362218889165488128/7066144 [...]
+        + (63136/12979801835 + 6603776/376414253215*n - 115496960/1322827232727*n^2 + 887622656/11561294920175*n^3 - 43488723791872/294362129962575675*n^4 + 75193702847488/382787117619317775*n^5 - 3822735799883776/20542908645570053925*n^6 + 36656101850983424/96845140757687397075*n^7 - 1972951098707156992/7185909444220404862965*n^8 + 328771821253526528/570310273350825782775*n^9 - 3105328344576980992/5132792460157432044975*n^10 + 217025910651311236096/302834755149288490653525*n^11 - 700454 [...]
+        + (384/22037015 - 19693568/532171875235*n + 23750672384/663618328418045*n^2 - 906788864/8981300685357*n^3 + 2473671458816/24060904536071403*n^4 - 97688010118627328/677915985303811779525*n^5 + 458602279763968/2098811100011801175*n^6 - 3630274708209664/19665871494856061475*n^7 + 4490469276862251008/11976515740367341438275*n^8 - 1171359654445416448/3992171913455780479425*n^9 + 18008930028582633472/33648306127698721183725*n^10 - 1241396166426066944/1957914156238113188115*n^11) * eps^18
+        + (7256/1889173195 + 4900096/346489785785*n - 31059853824/526317984607415*n^2 + 38700561003264/717371413019906645*n^3 - 2876286797818880/27116639412152471181*n^4 + 84142172780774656/677915985303811779525*n^5 - 5603644391945728/39789088838429705775*n^6 + 107992837810298624/466617496377948367725*n^7 - 192399843750455296/1026558492031486408995*n^8 + 1829483213954652416/5011449848806192516725*n^9 - 92159294855156056576/295904898052050767755275*n^10) * eps^19
+        + (208560/16246889477 - 23395328/926072700189*n + 5966964736/217627084544415*n^2 - 59040218112/828510128879615*n^3 + 96692817891328/1369527243038003595*n^4 - 203186292622336/1893520275156891927*n^5 + 17678406396274688/126068586740708857245*n^6 - 714429587557256192/5132792460157432044975*n^7 + 45769716805203484672/192713026004092675870425*n^8 - 2770267341515812025344/14367826716527353945450575*n^9) * eps^20
+        + (5695096/1877174392275 + 37023086848/3264406268166225*n - 135977211392/3264406268166225*n^2 + 19436995328/486188167599225*n^3 - 2916383737510912/37543936490179753725*n^4 + 1016222889010513664/11976515740367341438275*n^5 - 3851462753392374272/35929547221102024314825*n^6 + 67996526692104448/448644081702649615783*n^7 - 6002521005978183563264/43103480149582061836351725*n^8) * eps^21
+        + (1293248/133072694475 - 31178752/1729945028175*n + 23344955392/1088135422722075*n^2 - 20955891089408/403698241829889825*n^3 + 31312543744/608896292352775*n^4 - 3711165786734592/45887033487997476775*n^5 + 22699071565427326976/235538142893891048286075*n^6 - 1975768440081947803648/18472920064106597929865025*n^7) * eps^22
+        + (70576/29211079275 + 7439872/814404890187*n - 61061929984/2004017747638725*n^2 + 1769998572032/57671177404269975*n^3 - 70447795996672/1211094725489669475*n^4 + 48276040517729792/786000476842795489275*n^5 - 307128224790756352/3725130079472998170975*n^6) * eps^23
+        + (4576/607819275 - 292864/21987621075*n + 323268608/18931341745575*n^2 - 204679168/5263836485355*n^3 + 30640655949824/785215261581214275*n^4 - 20770366119528448/335286916695178495425*n^5) * eps^24
+        + (363376/186843645135 + 76231168/10276400482425*n - 192745499648/8395819194141225*n^2 + 163618760840704/6769828876875874425*n^3 - 6126423998867456/137653187163142779975*n^4) * eps^25
+        + (433472/72882272925 - 1978056704/195251609166075*n + 158870945792/11519844940798425*n^2 - 1279016321024/42860359262006055*n^3) * eps^26
+        + (4160936/2628224005275 + 3079920896/506546373283335*n - 128748399563264/7261342261016607225*n^2) * eps^27
+        + (631696/132195410325 - 3245452288/411259921521075*n) * eps^28
+        + 594728/456448303575 * eps^29;
+C4[4] = + (64/31185 - 512/81081*n + 1024/135135*n^2 - 512/109395*n^3 + 2048/1247103*n^4 - 2560/8729721*n^5 + 1024/66927861*n^6 + 512/717084225*n^7 + 4096/45176306175*n^8 + 512/29113619535*n^9 + 1024/232077138579*n^10 + 512/386795230965*n^11 + 2048/4512611027925*n^12 + 6656/38530755699975*n^13 + 1024/14311423545705*n^14 + 512/16107366892617*n^15 + 8192/546802718196735*n^16 + 8704/1171720110421575*n^17 + 1024/266042730385575*n^18 + 9728/4692993764001543*n^19 + 10240/8864543776447359*n^20 + [...]
+        - (128/135135 - 2048/405405*n + 77824/6891885*n^2 - 198656/14549535*n^3 + 8192/855855*n^4 - 256000/66927861*n^5 + 1282048/1673196525*n^6 - 284672/6453758025*n^7 - 2932736/1310112879075*n^8 - 1378304/4512611027925*n^9 - 102400/1624539970053*n^10 - 677888/40613499251325*n^11 - 876544/166966608033225*n^12 - 2048/1091285019825*n^13 - 241664/325982425207725*n^14 - 3737600/11774485198503027*n^15 - 22642688/155838774686069475*n^16 - 661504/9402339422651175*n^17 - 10719232/29983015714454 [...]
+        - (512/405405 - 2048/530145*n + 299008/130945815*n^2 + 280576/43648605*n^3 - 14114816/1003917915*n^4 + 63039488/5019589575*n^5 - 87683072/15058768725*n^6 + 243132416/187158982725*n^7 - 3305586688/40613499251325*n^8 - 1816576/410237366175*n^9 - 26021888/40613499251325*n^10 - 208984064/1502699472299025*n^11 - 1482752/38530755699975*n^12 - 258390016/20536892788086675*n^13 - 1101824/236688927871275*n^14 - 1674704896/883086389887727025*n^15 - 103952580608/124515180974169510525*n^16 -  [...]
+        + (128/2297295 - 2048/1438965*n + 241664/43648605*n^2 - 1071104/143416845*n^3 - 598016/3011753745*n^4 + 27613184/2377700325*n^5 - 863424512/62386327575*n^6 + 14341695488/1933976154825*n^7 - 10573889536/5801928464475*n^8 + 554350592/4512611027925*n^9 + 10652495872/1502699472299025*n^10 + 19990528/18551845337025*n^11 + 385441792/1579760983698975*n^12 + 26510989312/378465595666168725*n^13 + 36253696/1532249375166675*n^14 + 53436065792/5929294332103310025*n^15 + 52137918464/138350201 [...]
+        - (17536/130945815 + 1024/43648605*n - 333824/3011753745*n^2 - 3402752/1003917915*n^3 + 76509184/9035261235*n^4 - 506510336/119101170825*n^5 - 544454656/64774320975*n^6 + 81273324544/5801928464475*n^7 - 116438441984/13537833083775*n^8 + 384681841664/166966608033225*n^9 - 9210947584/55655536011075*n^10 - 56273062912/5600970760387275*n^11 - 1406799613952/883086389887727025*n^12 - 17382315008/46478231046722475*n^13 - 7065012224/63755853033368925*n^14 - 1597517556736/4150506032472317 [...]
+        + (2944/43648605 - 1722368/3011753745*n + 13266944/15058768725*n^2 + 108544/717084225*n^3 + 19259392/13790661885*n^4 - 304229926912/40613499251325*n^5 + 13166350336/1933976154825*n^6 + 217784215552/40613499251325*n^7 - 1070803042304/79089445910475*n^8 + 1576695216128/166966608033225*n^9 - 7317091151872/2678725146272175*n^10 + 71083022336/342591383636775*n^11 + 332174286848/25231039711077915*n^12 + 180362430464/83287746471016395*n^13 + 457253050314752/871606266819186573675*n^14 +  [...]
+        - (14848/602350749 + 63488/1673196525*n + 413696/1368978975*n^2 - 58701824/48522699225*n^3 + 71114752/164427122475*n^4 - 241801216/738427259115*n^5 + 890097664/148767396525*n^6 - 185319725056/23118453419985*n^7 - 14710882304/5272629727365*n^8 + 87149336576/6838792137225*n^9 - 1769065070153728/176617277977545405*n^10 + 39343512737792/12675881194560675*n^11 - 10281234043641856/41505060324723170175*n^12 - 1581078206464/96748392365322075*n^13 - 806631639658496/290535422273062191225*n [...]
+        + (13696/295269975 - 1263616/5019589575*n + 93507584/436704293025*n^2 - 143448064/1504203675975*n^3 + 14614028288/13537833083775*n^4 - 609875968/624823065405*n^5 - 1237520384/26363148636825*n^6 - 253546190848/55655536011075*n^7 + 5681519509504/677040421585275*n^8 + 214664647481344/294362129962575675*n^9 - 31278745921441792/2649259169663181075*n^10 + 290271896455168/27949535572204155*n^11 - 994793732507705344/290535422273062191225*n^12 + 1007756234246144/3528770311008852525*n^13 + [...]
+        - (2752/792566775 + 3126784/436704293025*n + 278027264/1230712098525*n^2 - 1906406912/4512611027925*n^3 + 13318144/148767396525*n^4 - 385723904/479329975215*n^5 + 651327491072/500899824099675*n^6 + 2585190754816/61610678364260025*n^7 + 1285145378811904/378465595666168725*n^8 - 1896715047424/228719603700525*n^9 + 108991838453582848/124515180974169510525*n^10 + 34341601112433152/3169477333887951177*n^11 - 616093273555376128/58107084454612438245*n^12 + 79626751390577152/215361921405 [...]
+        + (34048/1094496975 - 4296704/33929406225*n + 9199616/113763303225*n^2 - 666202112/4512611027925*n^3 + 11972722688/23852372576175*n^4 - 19444084736/100179964819935*n^5 + 97002643456/175528998188775*n^6 - 539677367382016/378465595666168725*n^7 + 37863377108992/294362129962575675*n^8 - 849685773930496/337439514835147725*n^9 + 2307997411351846912/290535422273062191225*n^10 - 952506302124032/452782476269707311*n^11 - 10149533533759029248/1026558492031486408995*n^12 + 2536635024778391 [...]
+        + (7168/4946230575 + 8974336/1933976154825*n - 93282304/644658718275*n^2 + 1573646336/8787716212275*n^3 - 1366114304/12843585233325*n^4 + 202461184/415348221015*n^5 - 411651006464/1274294934902925*n^6 + 3839857856512/10228799882869425*n^7 - 494905525829632/348782019535488825*n^8 + 3102394617856/8943128706038175*n^9 - 23750499115491328/12631974881437486575*n^10 + 6281828177286582272/839911493480307061905*n^11 - 362043035983265792/119367266515289117325*n^12 - 66153523158142976/7357 [...]
+        + (120064/5605727985 - 192512/2712449025*n + 3118014464/71557117728525*n^2 - 661172224/5386019613975*n^3 + 716483084288/2933841826869525*n^4 - 51287781376/468480843441765*n^5 + 378645470961664/883086389887727025*n^6 - 307621081034752/711515319852397203*n^7 + 14911080071168/54731947680953631*n^8 - 881401908588544/658810481344812225*n^9 + 5137439471148163072/9239026428283377680955*n^10 - 1347004173866315776/942757798804426293975*n^11 + 107407504440093753344/15398377380472296134925* [...]
+        + (6400/2616006393 + 1107968/140504859495*n - 2029686784/21778253221725*n^2 + 1198225408/12989812010175*n^3 - 1367443873792/13585944459811185*n^4 + 719433310676992/2649259169663181075*n^5 - 63814622162944/456099564007946925*n^6 + 157784678176768/438213306595870575*n^7 - 442694333281845248/871606266819186573675*n^8 + 4703020945135616/20780536275941020425*n^9 - 174940641115230208/143018984957947022925*n^10 + 179184835005863936/244418688578925335475*n^11 - 3826143738499702784/342831 [...]
+        + (84736/5562772215 - 1101824/25471641195*n + 5169913856/178581676418145*n^2 - 233627242496/2559670695326745*n^3 + 70218421682176/529851833932636215*n^4 - 367435176251392/4016618741102242275*n^5 + 11260909794107392/41505060324723170175*n^6 - 157314981962559488/871606266819186573675*n^7 + 4600932081707548672/15398377380472296134925*n^8 - 2826045097184792576/5132792460157432044975*n^9 + 3358887872888479744/15398377380472296134925*n^10 - 2997036152580109078528/2725512796343596415881 [...]
+        + (29696/12381654285 + 126963712/15737082596235*n - 174095884288/2803448856786435*n^2 + 192265793536/3463083881912655*n^3 - 2065111023763456/24903036194833902105*n^4 + 137907822072991744/871606266819186573675*n^5 - 1454755457867776/15291338014371694275*n^6 + 16143676059275264/63194435213976591525*n^7 - 923844554893459456/4199557467401535309525*n^8 + 1290691679389454336/5132792460157432044975*n^9 - 90880238263941996544/160324282137858612698925*n^10 + 38669172193378346979328/166256 [...]
+        + (171776/15383267445 - 4296704/152649346185*n + 786882560/36910611907533*n^2 - 1117064032256/16769721343322493*n^3 + 1268559669477376/15847386669439755885*n^4 - 6079247310737408/79236933347198779425*n^5 + 238252404104617984/1399852489133845103175*n^6 - 4954857180036468736/46195132141416888404775*n^7 + 3590745911011278848/15398377380472296134925*n^8 - 10935270658690822144/43262107878469784379075*n^9 + 4039796192998858153984/18472920064106597929865025*n^10) * eps^19
+        + (244288/116731852965 + 16665088/2289740192775*n - 60094358528/1399031257785525*n^2 + 3775697939968/101196594313152975*n^3 - 11699335030784/179675585821312425*n^4 + 16586730946151936/167982298696061412381*n^5 - 60983345813341184/810440914761699796575*n^6 + 378264738379902464/2199768197210328019275*n^7 - 19768926062753615872/160324282137858612698925*n^8 + 9935173508449188352/47245319857050122582775*n^9) * eps^20
+        + (2254208/268167770325 - 202909696/10519032013425*n + 1358934016/82295956340325*n^2 - 160058079232/3264406268166225*n^3 + 850193500332032/16090258495791323025*n^4 - 321074139364931584/5132792460157432044975*n^5 + 243713411755012096/2199768197210328019275*n^6 - 707822781060487168/9054859788516931614225*n^7 + 3972497411381290090496/23750897225279911624112175*n^8) * eps^21
+        + (46064128/26177300041725 + 2135226368/340304900542425*n - 129082421248/4197093773356575*n^2 + 14011652593664/519040596638429775*n^3 - 11242059096064/222445969987898475*n^4 + 34969938420373504/530978530361113659825*n^5 - 31791272768638976/519442118609414220675*n^6 + 64623481105209387008/552346447099532828467725*n^7) * eps^22
+        + (567424/87633237825 - 2525366272/183241100292075*n + 127744077824/9711778315479975*n^2 - 1465656547328/39926199741417675*n^3 + 64825892864/1735921727887725*n^4 - 434460028991488/8637367877393357025*n^5 + 3702905819309092864/48999787968452514402825*n^6) * eps^23
+        + (4411264/3014175784725 + 36530244608/6869306613388275*n - 6393343404032/281641571148919275*n^2 + 1926123498496/93880523716306425*n^3 - 8066704574943232/204941183272696925775*n^4 + 83042824808834048/1785916025662073210325*n^5) * eps^24
+        + (14258816/2802654677025 - 85649408/8407964031075*n + 24432791552/2289768871129425*n^2 - 155146314299392/5538950899262079075*n^3 + 28150215791353856/1013628014564960470725*n^4) * eps^25
+        + (74207744/61002462438225 + 81445824512/18158399652444975*n - 55287432851456/3214036738482760575*n^2 + 45322371937982464/2810139455013426996075*n^3) * eps^26
+        + (32066944/7884672015825 - 75653347328/9769108627607175*n + 245769011032064/28008034435349770725*n^2) * eps^27
+        + (83335616/82093349811825 + 9767500288/2579721325904925*n) * eps^28
+        + 4519424/1369344910725 * eps^29;
+C4[5] = + (128/99099 - 2048/495495*n + 4096/765765*n^2 - 6144/1616615*n^3 + 8192/4849845*n^4 - 10240/22309287*n^5 + 12288/185910725*n^6 - 2048/717084225*n^7 - 16384/145568097675*n^8 - 2048/167133741775*n^9 - 4096/1985548852287*n^10 - 2048/4512611027925*n^11 - 8192/68023432902425*n^12 - 2048/55655536011075*n^13 - 4096/325982425207725*n^14 - 2048/436092044389001*n^15 - 32768/17315419409563275*n^16 - 34816/42832879592077575*n^17 - 4096/11104820634983075*n^18 - 38912/221613594411183975*n^19  [...]
+        - (256/495495 - 8192/2807805*n + 376832/53348295*n^2 - 8192/855855*n^3 + 294912/37182145*n^4 - 761856/185910725*n^5 + 6373376/5019589575*n^6 - 1417216/6931814175*n^7 + 14614528/1504203675975*n^8 + 6873088/16546240435725*n^9 + 114688/2363748633675*n^10 + 483328/55655536011075*n^11 + 3702784/1836632688365475*n^12 + 1564672/2788960748999425*n^13 + 16384/91615975711975*n^14 + 434176/6845630929362225*n^15 + 113115136/4611673369413685575*n^16 + 19357696/1898924328582105825*n^17 + 76513 [...]
+        - (6784/8423415 - 432128/160044885*n + 397312/160044885*n^2 + 3233792/1227010785*n^3 - 90112/10140585*n^4 + 16893952/1673196525*n^5 - 304615424/48522699225*n^6 + 129972224/58605338025*n^7 - 19623657472/49638721307175*n^8 + 112556032/5515413478575*n^9 + 1717645312/1836632688365475*n^10 + 1488896/12843585233325*n^11 + 548397056/25100646740994825*n^12 + 1909467136/359775936620925825*n^13 + 26341376/17132187458139325*n^14 + 212998144/419243033583062325*n^15 + 2574811136/1383502010824 [...]
+        + (512/53348295 - 16384/22863555*n + 950272/283156335*n^2 - 7094272/1227010785*n^3 + 27459584/11043097065*n^4 + 44056576/7661478825*n^5 - 15664185344/1504203675975*n^6 + 55903043584/7091245901025*n^7 - 156559081472/49638721307175*n^8 + 125727391744/204070298707275*n^9 - 62808752128/1836632688365475*n^10 - 11392663552/6845630929362225*n^11 - 33476509696/154189687123253925*n^12 - 138500489216/3237983429588332425*n^13 - 950960128/88019214106796775*n^14 - 1150632968192/35509884944485 [...]
+        - (16768/160044885 - 18432/409003595*n - 1716224/6135053925*n^2 - 784384/557732175*n^3 + 358162432/64049962977*n^4 - 21357307904/3818363177475*n^5 - 8616275968/3818363177475*n^6 + 393340928/41057668575*n^7 - 4234428416/475688341975*n^8 + 84470368256/21110720555925*n^9 - 102917165056/121259162999975*n^10 + 4928882046976/98120709987525225*n^11 + 8343515193344/3237983429588332425*n^12 + 178912274432/508980672878433525*n^13 + 633749204992/8804103705244308825*n^14 + 20039994431488/106 [...]
+        + (40192/1227010785 - 6627328/18405161775*n + 13451264/18405161775*n^2 - 1220608/177916563825*n^3 + 625639424/49638721307175*n^4 - 40023105536/9927744261435*n^5 + 8635301888/1272787725825*n^6 - 3905085440/5651177502663*n^7 - 601491439616/73465307534619*n^8 + 78960137363456/8366882246998275*n^9 - 3063088825974784/647596685917666485*n^10 + 318151765925888/294362129962575675*n^11 - 3436000146980864/50728407063550541325*n^12 - 141582966784/38892210884398575*n^13 - 18976575045632/3673 [...]
+        - (451456/18405161775 + 468992/18405161775*n + 2215936/21349987659*n^2 - 186566656/220616539143*n^3 + 10790330368/16546240435725*n^4 + 69511168/174170951955*n^5 + 1481088978944/612210896121825*n^6 - 336223479808/49638721307175*n^7 + 216393505521664/75301940222984475*n^8 + 2378698436777984/359775936620925825*n^9 - 31129006450757632/3237983429588332425*n^10 + 14764481067108352/2767004021648211345*n^11 - 6488450473984/4973860874943675*n^12 + 335812940167168/3902185158734657025*n^13  [...]
+        + (75776/2906078175 - 21692416/123173005725*n + 1413349376/7091245901025*n^2 + 807206912/49638721307175*n^3 + 29159063552/49638721307175*n^4 - 392668971008/367326537673095*n^5 - 141528793088/612210896121825*n^6 - 91066548813824/75301940222984475*n^7 + 19940018063147008/3237983429588332425*n^8 - 14101050299973632/3237983429588332425*n^9 - 20817214190780416/4113114086233827675*n^10 + 36951885405552640/3873805630307495883*n^11 - 95511505657397248/16389177666685559505*n^12 + 13162296 [...]
+        - (157952/25416651975 + 63254528/5515413478575*n + 684187648/5515413478575*n^2 - 531623936/1504203675975*n^3 + 4810227712/68023432902425*n^4 - 384561152/1316582572305*n^5 + 4242336096256/3585806677284975*n^6 - 3859307081728/27209944786456575*n^7 + 7701409398784/17315419409563275*n^8 - 546830624075776/102897377410853025*n^9 + 330876058407968768/62664502843209492225*n^10 + 14091916227989504/3873805630307495883*n^11 - 34993139294239965184/3764047804115450166315*n^12 + 18006086377857 [...]
+        + (1938944/102771679725 - 17088512/181826817975*n + 34045952/472749726735*n^2 - 6395052032/122442179224365*n^3 + 25022234624/68023432902425*n^4 - 35317563392/152125131763605*n^5 + 591038611456/5771806469854425*n^6 - 506800255483904/462569061369761775*n^7 + 124425632874496/241947887425519275*n^8 - 98713540640768/2984023944914737725*n^9 + 205916220474097664/46317241231937450775*n^10 - 349988448862552064/60385793648910965235*n^11 - 3447444843814387712/1447710693890557756275*n^12 + 5 [...]
+        - (12032/12332601567 + 4599808/2158205274225*n + 170288193536/1836632688365475*n^2 - 290734034944/1836632688365475*n^3 + 267831984128/6845630929362225*n^4 - 1040046419968/3463083881912655*n^5 + 12144070811648/32706903329175075*n^6 - 12323923677184/395286288806887335*n^7 + 10271238256623616/11213647877205909135*n^8 - 45081806458482688/56068239386029545675*n^9 - 81270905450586112/594323337491913184155*n^10 - 26646047229472768/7301269502357655825*n^11 + 20005720522276225024/33212186 [...]
+        + (218112/15986705735 - 290357248/5323573009755*n + 131006464/3802552149825*n^2 - 842694656/13344309803825*n^3 + 790763536384/3924828399501009*n^4 - 7426755887104/98120709987525225*n^5 + 75745991262208/354744105339514275*n^6 - 3377930257793024/7449626212129799775*n^7 + 4306377448357888/96845140757687397075*n^8 - 27137013481472/37825596510476775*n^9 + 2956012676751097856/2971616687459565920775*n^10 + 801788666804862976/5132792460157432044975*n^11 + 3289715296102045057024/111039410 [...]
+        + (294656/469127123465 + 25858048/13604686580485*n - 9844842496/152125131763605*n^2 + 175265755136/2180460221945005*n^3 - 2666742562816/58872425992515135*n^4 + 215614078521344/1064232316018542825*n^5 - 46888924340224/354744105339514275*n^6 + 28689645211648/201341248976481075*n^7 - 11152793875152896/23225305249581140475*n^8 + 650630500139831296/6273413006859083610525*n^9 - 30411772176709967872/56460717061731752494725*n^10 + 332517313573568196608/302834755149288490653525*n^11 + 614 [...]
+        + (13824/1375739365 - 59359232/1748564732915*n + 45142409216/2180460221945005*n^2 - 1079315316736/19624141997505045*n^3 + 13677762117632/120304522680357015*n^4 - 21487658647552/446290971233582475*n^5 + 107709256466432/601522613401785075*n^6 - 317939842858467328/1710930820052477348325*n^7 + 32625224557920256/330179631939951768975*n^8 - 8782461881349357568/18820239020577250831575*n^9 + 66561309202129190912/370131367404685933020975*n^10 - 9846754133827698688/24929716685703910836525* [...]
+        + (27392/25638779075 + 8081408/2425428500495*n - 739467264/16345279025075*n^2 + 23711257718784/512408152157076175*n^3 - 4197953748992/94483064153841363*n^4 + 66534864318464/517888453249665225*n^5 - 113093248480108544/1710930820052477348325*n^6 + 8321651132554350592/56460717061731752494725*n^7 - 12728279499474894848/56460717061731752494725*n^8 + 30034408600463986688/370131367404685933020975*n^9 - 3791666672669202522112/8834874813268372922978925*n^10) * eps^19
+        + (362496/47933369575 - 73990144/3307402500675*n + 24686231552/1709927092848975*n^2 - 5424909975552/123684726382742525*n^3 + 737167248982016/10760571195298599675*n^4 - 2806535039418368/68437232802099093933*n^5 + 141729549396082688/1107072883563367695975*n^6 - 2818897757929472/31142149510056123825*n^7 + 110767543318740992/937568901390986039175*n^8 - 1624194242334359552/6542455349662660653225*n^9) * eps^20
+        + (179072/160900662195 + 5079242752/1399031257785525*n - 45133008896/1399031257785525*n^2 + 3194148988928/107725406849485425*n^3 - 300531459629056/7695341019726284925*n^4 + 4673381031931672576/56460717061731752494725*n^5 - 2564296548162482176/56460717061731752494725*n^6 + 3314224376139778048/27993128627245154598225*n^7 - 1369582736990797021184/11953065923833681013442075*n^8) * eps^21
+        + (5634304/969529631175 - 104833024/6786707418225*n + 2751414272/251108174474325*n^2 - 23908622336/700459644586275*n^3 + 158037016576/3570635749232475*n^4 - 1796889271328768/49921058410019232975*n^5 + 7584413032870494208/85414930939542907620225*n^6 - 568203943290363904/10290278052624326592825*n^7) * eps^22
+        + (14777984/14401062082575 + 2047571968/590443545385575*n - 105351344128/4470501129347925*n^2 + 87661905668096/4245485905837412775*n^3 - 15411476668416/471720656204156975*n^4 + 16965096326715392/306146705876497876775*n^5 - 189726703450447433728/5210310787312117364833725*n^6) * eps^23
+        + (1524224/334908420525 - 8459829248/763256290376475*n + 2999519051776/344228586959790225*n^2 - 9129476276224/344228586959790225*n^3 + 22885325392510976/751451005333222061175*n^4 - 1421006686098669568/45838511325326545731675*n^5) * eps^24
+        + (99522176/110050906984515 + 655403008/208717237384425*n - 4588589584384/260270395018377975*n^2 + 3208194018019328/209864695183152107175*n^3 - 4971722761576448/185532556611192442575*n^4) * eps^25
+        + (356096/98232628725 - 49703919616/6052799884148325*n + 51891453952/7288065166627575*n^2 - 6483388995346432/312237717223714110675*n^3) * eps^26
+        + (22625408/28910464058025 + 25774721024/9286683510194475*n - 4256878292992/315710533087678575*n^2) * eps^27
+        + (98029568/33445438812225 - 650254352384/104048760144831975*n) * eps^28
+        + 3108352/4619256832179 * eps^29;
+C4[6] = + (512/585585 - 4096/1422135*n + 8192/2078505*n^2 - 4096/1322685*n^3 + 16384/10140585*n^4 - 4096/7243275*n^5 + 8192/65189475*n^6 - 28672/1890494775*n^7 + 32768/58605338025*n^8 + 4096/214886239425*n^9 + 8192/4512611027925*n^10 + 4096/15178782548475*n^11 + 16384/310080843490275*n^12 + 4096/325982425207725*n^13 + 57344/16565834153738025*n^14 + 4096/3822884804708775*n^15 + 65536/179675585821312425*n^16 + 69632/517888453249665225*n^17 + 8192/154457959741128225*n^18 + 77824/35084022284 [...]
+        - (1024/3318315 - 16384/9006855*n + 98304/21015995*n^2 - 770048/111546435*n^3 + 65536/10140585*n^4 - 606208/152108775*n^5 + 1015808/630164925*n^6 - 114688/283117575*n^7 + 11665408/214886239425*n^8 - 1097728/501401225325*n^9 - 4489216/55655536011075*n^10 - 180224/21924908125575*n^11 - 38469632/29664400693902975*n^12 - 3751936/14017244283932175*n^13 - 12156928/182224175691118275*n^14 - 14925824/778594205225687175*n^15 - 262144/42531901957701975*n^16 - 6373376/2934701235081436275*n^ [...]
+        - (103424/189143955 - 8192/4203199*n + 3260416/1450103655*n^2 + 253952/315239925*n^3 - 28082176/5019589575*n^4 + 103325696/13233463425*n^5 - 822099968/136745788725*n^6 + 1433600/505614681*n^7 - 401801216/501401225325*n^8 + 2190548992/18551845337025*n^9 - 73121792/14186705257725*n^10 - 547889152/2696763699445725*n^11 - 28002254848/1275569229837827925*n^12 - 1073225728/294362129962575675*n^13 - 20235665408/25693608772447676775*n^14 - 85799051264/419662276616645387325*n^15 - 2324824 [...]
+        - (1024/189143955 + 1654784/4350310965*n - 45842432/21751554825*n^2 + 31342592/7250518275*n^3 - 6135283712/1892385269775*n^4 - 10298703872/4512611027925*n^5 + 6553174016/902522205585*n^6 - 1929592832/265447707525*n^7 + 668086697984/166966608033225*n^8 - 913531224064/723521968143975*n^9 + 1061266948096/5234894240100525*n^10 - 3303047708672/347882517228498525*n^11 - 1519936274432/3826707689513483775*n^12 - 625052991488/13835020108241056725*n^13 - 340739325952/43413338960342626275*n [...]
+        - (71168/870062193 - 36864/483367885*n - 8192/31387525*n^2 - 99487744/210265029975*n^3 + 206400176128/58663943363025*n^4 - 157536256/30474775773*n^5 + 1459478528/1504203675975*n^6 + 314377302016/55655536011075*n^7 - 124925476864/16078265958755*n^8 + 640587280384/128417319021225*n^9 - 9891103023104/5669196577057013*n^10 + 35120897650688/115960839076166175*n^11 - 129391717695488/8564536257482558925*n^12 - 838089404416/1257729100749186975*n^13 - 5874723561472/74058048814702127175*n^ [...]
+        + (118784/7250518275 - 15269888/65254664475*n + 158990336/270340752825*n^2 - 1072234496/6518215929225*n^3 - 71041024/180504441117*n^4 - 3131899904/1676112667515*n^5 + 767602327552/144704393628795*n^6 - 7247836020736/2170565904431925*n^7 - 326399017091072/88993202081708925*n^8 + 35920955899904/4672414761310725*n^9 - 22026456501714944/3826707689513483775*n^10 + 36243071515820032/16350478309739430675*n^11 - 24770945246560256/59951753802377912475*n^12 + 17755041759232/813824712249473 [...]
+        - (1445888/65254664475 + 7897088/630795089925*n + 2424832/197521694825*n^2 - 6604095488/11732788672605*n^3 + 14287765504/19554647787675*n^4 + 906395648/2630988975069*n^5 + 22769893376/42560115773175*n^6 - 4711849558016/1046978848020105*n^7 + 1066871483531264/225100452324322575*n^8 + 35504692166656/20463677484029325*n^9 - 76345812706066432/10579721259243161025*n^10 + 6068059858960384/961792841749378275*n^11 - 478285812169048064/179855261407133737425*n^12 + 11756726194307072/222198 [...]
+        + (1380352/90113584275 - 7386628096/58663943363025*n + 368705536/2022894598725*n^2 + 6750208/205838397765*n^3 + 18468306944/70018254981675*n^4 - 82814894080/86822636177277*n^5 + 2978608709632/29664400693902975*n^6 + 9194635264/44354768930901*n^7 + 764169233629184/225100452324322575*n^8 - 18918718461771776/3526573753081053675*n^9 - 3627328171802624/74058048814702127175*n^10 + 745621946343817216/114453348168176014725*n^11 - 21203780625144479744/3177442951526029361175*n^12 + 3207893 [...]
+        - (846848/121457439675 + 2760704/270340752825*n + 3755098112/58663943363025*n^2 - 10839138304/38080103586525*n^3 + 47457796096/434113180886385*n^4 - 38041296896/1618058219667435*n^5 + 574179688448/662633366149521*n^6 - 16095472541696/28772238267018675*n^7 - 852568899584/1849925032215975*n^8 - 3031959594082304/1299264014293019775*n^9 + 199399103086592/36548518879726425*n^10 - 60421317679783936/45609228969273148725*n^11 - 6672117285593513984/1170636876878010817275*n^12 + 5045150093 [...]
+        + (10240/857346633 - 1343488/18893379505*n + 49142628352/723521968143975*n^2 - 800620544/94372430627475*n^3 + 29913645056/120098788234425*n^4 - 14168250155008/51022769193513117*n^5 - 24690420416512/425189743279275975*n^6 - 16306272150519808/25693608772447676775*n^7 + 1053863745683456/1204772085980800155*n^8 + 2085142575153152/5097112671457231425*n^9 + 205141644672696320/140476425225361298073*n^10 - 18323705530956218368/3511910630634032451825*n^11 + 159481393476014047232/667263019 [...]
+        - (2717696/1303643185845 + 1836138496/434113180886385*n + 4381376512/74847100152825*n^2 - 1375220350976/9888133564634325*n^3 + 90641821007872/3826707689513483775*n^4 - 593210015105024/3826707689513483775*n^5 + 350306565259264/922334673882737115*n^6 + 159804932096/11168854890749325*n^7 + 488092323692281856/1258986829849936161975*n^8 - 23509815515070464/22953664252510016025*n^9 - 723446958058078208/3511910630634032451825*n^10 - 53863391092240203776/66726301982046616584675*n^11 + 62 [...]
+        + (264192/29180156005 - 22183936/518653740605*n + 459997184/14869373781405*n^2 - 4054633644032/141729914426425325*n^3 + 35892774436864/225100452324322575*n^4 - 165276001992704/1976431444034436675*n^5 + 330119439908864/4611673369413685575*n^6 - 2591369816276992/6456342717179159805*n^7 + 3979077460688896/43870021026986598675*n^8 - 202257437979738112/1059147650508676453725*n^9 + 7722684046167310336/7414033553560735176075*n^10 - 60600652525666336768/1312283938980250126165275*n^11 + 4 [...]
+        - (29696/89423058725 + 86007808/113656707639475*n + 909564624896/20247130632346475*n^2 - 4874605256704/67135222623043575*n^3 + 8913665490944/446290971233582475*n^4 - 147497164496896/1064232316018542825*n^5 + 411105742077952/2767004021648211345*n^6 - 140225607434297344/5132792460157432044975*n^7 + 1872239470911094784/5132792460157432044975*n^8 - 18411038875648/89301676499424675*n^9 + 10877741177165627392/171167470301771755586775*n^10 - 10158457386319702188032/104412156884080770907 [...]
+        + (135168/19606125175 - 390529024/14332077502925*n + 303955968/17771776103627*n^2 - 77308821504/2451713646684575*n^3 + 121867688738816/1257729100749186975*n^4 - 2378965909504/66196268460483525*n^5 + 173125825593344/1709221598454023325*n^6 - 14482771405635584/74388296524020754275*n^7 + 4249471492292608/190103424450275260925*n^8 - 529596339336839168/1770963480405195851775*n^9 + 27063289888053788672/89241159729983564878575*n^10) * eps^19
+        + (8065024/25797739505265 + 352878592/386966092578975*n - 46464827392/1399031257785525*n^2 + 14703099904/355075769519835*n^3 - 198597506367488/8804103705244308825*n^4 + 1332322775498752/13331928467941381935*n^5 - 2265423354462208/34916955511275047925*n^6 + 49038258159517696/733256065736776006425*n^7 - 81549844466630656/379017215455930526475*n^8 + 1082408332765528064/24147607926936729320085*n^9) * eps^20
+        + (45056/8468455905 - 242941952/13324107217005*n + 1904607232/171810856219275*n^2 - 12027756544/425792121934725*n^3 + 107565505839104/1787806499532369225*n^4 - 4677584484237312/190103424450275260925*n^5 + 64934853946507264/733256065736776006425*n^6 - 48138266780041216/508965975040820992695*n^7 + 6948561124651958272/155234622387450402771975*n^8) * eps^21
+        + (14907904/28116359304075 + 12387831808/7675766090012475*n - 1394830041088/56800669066092315*n^2 + 129385368375296/5017392434171487825*n^3 - 339203576086528/15052177302514463475*n^4 + 352973598659203072/5132792460157432044975*n^5 - 19296744227725312/539812397770567719525*n^6 + 11106387256285720576/155234622387450402771975*n^7) * eps^22
+        + (20016128/4800354027525 - 7508672512/590443545385575*n + 3266801139712/406815602770661175*n^2 - 4080124248064/173013532212809925*n^3 + 30916335173632/792219858027077025*n^4 - 206717405857660928/9768863069331886795275*n^5 + 420161316872027275264/6157640021368865976621675*n^6) * eps^23
+        + (664576/1153573448475 + 43416952832/23660945001670725*n - 509581410304/27717107001957135*n^2 + 11525019836416/663751772941605075*n^3 - 189239766700490752/9176810762099651231925*n^4 + 3799119443637886976/79969350926868389306775*n^5) * eps^24
+        + (24341504/7336727132301 - 1010843648/110050906984515*n + 21086830592/3380135000238675*n^2 - 15924466597888/829504724044079475*n^3 + 1205956028389326848/45388009985519896633575*n^4) * eps^25
+        + (71266816/128782976258475 + 21557248/11798830183525*n - 333133422592/23807679544316745*n^2 + 125585723838464/10072184426571422925*n^3) * eps^26
+        + (7036928/2628224005275 - 51925090304/7598195599250025*n + 110139925594112/21784026783049821675*n^2) * eps^27
+        + (4612096/9121483312425 + 601554944/350332525740175*n) * eps^28
+        + 139264/63626127165 * eps^29;
+C4[7] = + (1024/1640925 - 65536/31177575*n + 131072/43648605*n^2 - 65536/25741485*n^3 + 262144/175510125*n^4 - 65536/105306075*n^5 + 131072/727113375*n^6 - 458752/13524308775*n^7 + 524288/148767396525*n^8 - 65536/578539875375*n^9 - 131072/38530755699975*n^10 - 65536/227681738227125*n^11 - 262144/6845630929362225*n^12 - 65536/9704246042722275*n^13 - 917504/630775992776947875*n^14 - 65536/179675585821312425*n^15 - 1048576/10158581198358817875*n^16 - 65536/2031716239671763575*n^17 - 131072/ [...]
+        - (2048/10392525 - 262144/218243025*n + 16252928/5019589575*n^2 - 42729472/8365982625*n^3 + 30408704/5791834125*n^4 - 11272192/3053876175*n^5 + 283639808/157783602375*n^6 - 442236928/743836982625*n^7 + 652214272/5206858878375*n^8 - 306970624/21405975388875*n^9 + 251133952/500899824099675*n^10 + 151257088/9334951267312125*n^11 + 2152726528/1471810649812878375*n^12 + 23330816/113216203831759875*n^13 + 378011648/9882157220172183375*n^14 + 835452928/96845140757687397075*n^15 + 297795 [...]
+        - (84992/218243025 - 2424832/1673196525*n + 5373952/2788660875*n^2 - 65536/760543875*n^3 - 7635992576/2183521465125*n^4 + 6166740992/1041371775675*n^5 - 347209728/64282208375*n^6 + 1813970944/578539875375*n^7 - 6911688704/5837993287875*n^8 + 25729630208/92759226685125*n^9 - 237436534784/6845630929362225*n^10 + 19432800256/14866774240534125*n^11 + 4423155712/98120709987525225*n^12 + 13752664064/3192696948055628475*n^13 + 84292272128/132061555578664632375*n^14 + 97583104/7873588679 [...]
+        - (16384/1673196525 + 1048576/5019589575*n - 14680064/10756263375*n^2 + 137363456/42814146375*n^3 - 217512411136/67689165418875*n^4 - 208666624/644658718275*n^5 + 266338304/55987729875*n^6 - 237490929664/38530755699975*n^7 + 10820641619968/2504499120498375*n^8 - 3027063799808/1629912126038625*n^9 + 424329152036864/883086389887727025*n^10 - 235471372288/3616242382832625*n^11 + 8647887290368/3294052406724061125*n^12 + 1531605680128/15963484740278142375*n^13 + 14010378354688/1452677 [...]
+        - (323584/5019589575 - 262144/3011753745*n - 3670016/18348919875*n^2 - 92536832/2051186830875*n^3 + 48279584768/22563055139625*n^4 - 43778048/10342118475*n^5 + 118776922112/49107825892125*n^6 + 133187239936/49107825892125*n^7 - 369268621312/61012753381125*n^8 + 21431886020608/4122718907038875*n^9 - 131710776246272/51946258228689825*n^10 + 18575217393664/25808394680215875*n^11 - 3164393701376/30141656009239775*n^12 + 14365663428608/3192696948055628475*n^13 + 1212658841288704/69992 [...]
+        + (8192/1003917915 - 1048576/6718527585*n + 6314524672/13537833083775*n^2 - 189792256/727840488375*n^3 - 28491907072/67689165418875*n^4 - 326575849472/500899824099675*n^5 + 180915011584/49107825892125*n^6 - 24383142756352/6040262584731375*n^7 - 145899963547648/259731291143449125*n^8 + 461865768452096/86577097047816375*n^9 - 14004622345633792/2441474136748421775*n^10 + 3512761381289984/1109760971249282625*n^11 - 5214964780367872/5321161580092714125*n^12 + 129418252933660672/846064 [...]
+        - (937984/48522699225 + 35913728/13537833083775*n - 122159104/4512611027925*n^2 - 736362496/2051186830875*n^3 + 1751018110976/2504499120498375*n^4 + 52370341888/500899824099675*n^5 - 495914057728/1801481823516375*n^6 - 1636748754944/650955616900875*n^7 + 5727152242688/1242733450447125*n^8 - 91166448287744/71388132653462625*n^9 - 3851787754274816/899490471433629075*n^10 + 13822108124315648/2316869396116923375*n^11 - 717165187245801472/192962122562309475375*n^12 + 1293029046747136/ [...]
+        + (606208/65400159825 - 13631488/148767396525*n + 216006656/1327238537625*n^2 + 13716422656/834833040166125*n^3 + 182775185408/2504499120498375*n^4 - 15302162120704/20536892788086675*n^5 + 86374671712256/210258664258982625*n^6 + 553624010752/1006022317028625*n^7 + 123755061837824/91784741983023375*n^8 - 54365938253824/12188217770103375*n^9 + 40612998252855296/15291338014371694275*n^10 + 380996869807931392/122794077994196938875*n^11 - 123568266508500992/20780536275941020425*n^12 + [...]
+        - (1243136/180504441117 + 101318656/13537833083775*n + 72173748224/2504499120498375*n^2 - 26437353472/119261862880875*n^3 + 2168374951936/14669209134347625*n^4 + 72842321199104/883086389887727025*n^5 + 774414801829888/1471810649812878375*n^6 - 4627044041621504/5929294332103310025*n^7 - 992466414075904/2466344841027692625*n^8 - 11629158270631936/25485563357286157125*n^9 + 3172029662252761088/810440914761699796575*n^10 - 14495633009888854016/4052204573808498982875*n^11 - 4962258840 [...]
+        + (782336/100280245065 - 5467799552/100179964819935*n + 160890355712/2504499120498375*n^2 + 273797349376/34228154646811125*n^3 + 75710926422016/490603549937626125*n^4 - 23330738929664/80280580898884275*n^5 - 29193338355712/483741961826610375*n^6 - 9256022006300672/37248131060648998875*n^7 + 14381676595511296/15620183993175386625*n^8 + 769074433359872/10470812852218343625*n^9 - 87967869218848768/810440914761699796575*n^10 - 246744717810779815936/76991886902361480674625*n^11 + 4148 [...]
+        - (24430592/9595782070875 + 1219100672/278277680055375*n + 105279913984/2933841826869525*n^2 - 175938815000576/1471810649812878375*n^3 + 5660664659968/191975302149505875*n^4 - 4267311104/74709183293685*n^5 + 162669271973888/483741961826610375*n^6 - 6997871323119616/111744393181946996625*n^7 + 9176096709804032/257497949506225687875*n^8 - 2742583007248384/3125558677479863625*n^9 + 184000164420386816/669494668716186788475*n^10 + 25825509353978724352/65833642423758367533375*n^11 + 47 [...]
+        + (16384/2645652625 - 4459593728/131142354968625*n + 683694620672/23362073806553625*n^2 - 4708587536384/490603549937626125*n^3 + 4981810735874048/41505060324723170175*n^4 - 4141263468101632/41505060324723170175*n^5 - 128620429312/61488978258849141*n^6 - 846813328864968704/2851551366754128913875*n^7 + 1788171473911808/8804103705244308825*n^8 + 1326028891881472/17711499172385893875*n^9 + 9596814579755646976/13166728484751673506675*n^10 - 750111204931779166208/1338617395949753473178 [...]
+        - (2904064/3461235175125 + 2958819328/1637164237834125*n + 4705547190272/152256274118573625*n^2 - 146247378010112/2231454856167912375*n^3 + 262034852675584/23058366847068427875*n^4 - 3520094671732736/41505060324723170175*n^5 + 192477728515555328/1222093442894626677375*n^6 + 197600147073138688/25663962300787160224875*n^7 + 16561239183333523456/76991886902361480674625*n^8 - 60789556653064192/195251292810630877275*n^9 - 4137720727496818688/43809296594719204576755*n^10) * eps^19
+        + (34512896/7087291072875 - 9907994624/446499337591125*n + 3823108096/246887869020975*n^2 - 25192398061568/1517948914697294625*n^3 + 3534351694299136/44020518526221544125*n^4 - 204278900719616/5404835865381641325*n^5 + 18176218480246784/407364480964875559125*n^6 - 49000957506224128/268264414293942441375*n^7 + 632282024639463424/24291557899675547378625*n^8 - 46549976629564669952/362214118904050939801275*n^9) * eps^20
+        - (2117632/16664711441625 + 26093551616/86939799590957625*n + 103808499187712/4260050179956923625*n^2 - 53918297227264/1420016726652307875*n^3 + 78919969518125056/6999262445669225515875*n^4 - 224942358339518464/3079675476094459226985*n^5 + 368415416516608/5142048146821711125*n^6 - 17484436828061696/931035320196623767125*n^7 + 410932027851051892736/2328519335811756041579625*n^8) * eps^21
+        + (25772032/6694371262875 - 133717557248/8856653180783625*n + 1545601024/163766200744125*n^2 - 101307837841408/5789298962505562875*n^3 + 911117337493504/17367896887516688625*n^4 - 4578636945424384/236898113545727632845*n^5 + 373748610906456064/6851465048626436440125*n^6 - 5893247183635873792/59705623995173231835375*n^7) * eps^22
+        + (383798272/2232164622799125 + 134230114304/274556248604292375*n - 1587412992/84540195648671*n^2 + 4215981839024128/179468267837672449125*n^3 - 6728033666596864/538404803513017347375*n^4 + 45351317263679488/822175805835172372815*n^5 - 14952491409948934144/417939367966212622847625*n^6) * eps^23
+        + (31922176/10382161036275 - 756217020416/70982835005012175*n + 83513311232/12911695808365125*n^2 - 77487943712768/4850493725342498625*n^3 + 35707127975641088/1024705916363484628875*n^4 - 154170794895474688/11072679359104853904015*n^5) * eps^24
+        + (95460352/330152720953545 + 15683878912/18158399652444975*n - 1152264568832/79674610719911625*n^2 + 16279305360441344/1049323475915760535875*n^3 - 7264491379390939136/576078588277752534195375*n^4) * eps^25
+        + (319913984/128782976258475 - 140867796992/18158399652444975*n + 8628023066624/1785575965823755875*n^2 - 21496495314305024/1561188586118570553375*n^3) * eps^26
+        + (89350144/275963520553875 + 38433980416/37990977996250125*n - 5437096198144/484089484067773815*n^2) * eps^27
+        + (648134656/319251915934875 - 48446308352/8346157230868875*n) * eps^28
+        + 13087612928/40785938165944125 * eps^29;
+C4[8] = + (16384/35334585 - 131072/82447365*n + 262144/111546435*n^2 - 393216/185910725*n^3 + 524288/386122275*n^4 - 131072/203591745*n^5 + 262144/1168767425*n^6 - 917504/16529710725*n^7 + 1048576/115707975075*n^8 - 393216/475688341975*n^9 + 262144/11131107202215*n^10 + 131072/207443361495825*n^11 + 524288/10902301109725025*n^12 + 131072/22643240766351975*n^13 + 1835008/1976431444034436675*n^14 + 131072/717371413019906645*n^15 + 2097152/49889920996384416675*n^16 + 131072/1196455118917816 [...]
+        - (32768/247342095 - 524288/632096465*n + 1048576/451497475*n^2 - 19398656/5019589575*n^3 + 2097152/490128275*n^4 - 3670016/1101980715*n^5 + 646971392/347123925225*n^6 - 524288/701260455*n^7 + 297795584/1427065025925*n^8 - 100139008/2650263619575*n^9 + 573571072/152125131763605*n^10 - 345505792/2973354848106825*n^11 - 140509184/42051732851796525*n^12 - 31981568/118248035113171425*n^13 - 370147328/10760571195298599675*n^14 - 173539328/29933952597830650005*n^15 - 1652555776/1385039 [...]
+        - (327680/1137773637 - 2097152/1896289395*n + 4194304/2585849175*n^2 - 140509184/274961962275*n^3 - 746586112/347123925225*n^4 + 4011851776/902522205585*n^5 - 180355072/38569325025*n^6 + 593494016/186138916425*n^7 - 16492003328/11131107202215*n^8 + 824180736/1773020183725*n^9 - 1819459715072/19624141997505045*n^10 + 1029701632/102529477520925*n^11 - 510757175296/1537224456471228525*n^12 - 140509184/13821198909331725*n^13 - 1431352377344/1646367392880685750275*n^14 - 225198473216/ [...]
+        - (32768/3160482325 + 524288/4491211725*n - 2245001216/2474657660475*n^2 + 1357381632/568254722035*n^3 - 222103076864/76714387474725*n^4 + 252182528/347123925225*n^5 + 3595567104/1236789689135*n^6 - 825139658752/166966608033225*n^7 + 2229746532352/526586994566325*n^8 - 24933922504704/10902301109725025*n^9 + 236428469469184/294362129962575675*n^10 - 220538009550848/1257729100749186975*n^11 + 1499084095488/73201164593868025*n^12 - 13072994926592/18091949372315228025*n^13 - 20404749 [...]
+        - (4390912/85333022775 - 30932992/353522522925*n - 974127104/6974035224975*n^2 + 1518862336/10959198210675*n^3 + 7400849408/5901106728825*n^4 - 488389476352/149391175608675*n^5 + 25309478912/8787716212275*n^6 + 52781645824/72059272940655*n^7 - 66496793411584/15492743682240825*n^8 + 523779964928/108340864910775*n^9 - 2218114952462336/728158953065318775*n^10 + 110526137368576/92674775844676935*n^11 - 24551725073432576/86650915414772934225*n^12 + 1139122395152384/3211537424463612247 [...]
+        + (3178496/824885886825 - 8159494144/76714387474725*n + 28228714496/76714387474725*n^2 - 7773618176/25571462491575*n^3 - 918323986432/2838432336564825*n^4 - 73427058688/2838432336564825*n^5 + 368816685056/157052261537325*n^6 - 72769601536/19245644325765*n^7 + 676461543424/534232540766925*n^8 + 9767632764928/3152203260023025*n^9 - 25415227305623552/5097112671457231425*n^10 + 135017417670656/36638864868825765*n^11 - 66304019129171968/41373860513360049675*n^12 + 145615781360041984/3 [...]
+        - (425787392/25571462491575 - 312475648/76714387474725*n - 3149922304/76714387474725*n^2 - 266338304/1220831112501*n^3 + 133689245696/218340948966525*n^4 - 706671017984/6125038199955675*n^5 - 169910302932992/333610413957585765*n^6 - 42284273893376/37625234656870575*n^7 + 2678029734117376/728158953065318775*n^8 - 50720495632384/18670742386290225*n^9 - 147754295071080448/86650915414772934225*n^10 + 1991354095820079104/417499865180269592175*n^11 - 6383204028028813312/153083283899432 [...]
+        + (17530880/3068575498989 - 148373504/2191839642135*n + 404992557056/2838432336564825*n^2 - 20048248832/2838432336564825*n^3 - 3228475326464/116375725799157825*n^4 - 5795679305728/10998145515085245*n^5 + 170148181835776/294362129962575675*n^6 + 465493530509312/1083849501567271725*n^7 + 208517906563072/1333091006381122065*n^8 - 260996618389028864/86650915414772934225*n^9 + 3267061749675720704/918499703396593102785*n^10 + 94463949577650176/270146971587233265525*n^11 - 3744149145574 [...]
+        - (2392064/370600905675 + 13398966272/2838432336564825*n + 969408512/113537293462593*n^2 - 65784774656/391837460603225*n^3 + 65613878788096/384935093027983575*n^4 + 491445762654208/5004156209363786475*n^5 + 167957703950336/670072198974638075*n^6 - 27991057629184/35524164265415595*n^7 - 274682871808/4774307409778725*n^8 + 31849951526912/81267337633079675*n^9 + 85896645649629184/39934769712895352295*n^10 - 14718170769933991936/3793803122725058468025*n^11 + 6913119271458439168/82901 [...]
+        + (18907136/3625073226775 - 4455923712/105127123576475*n + 2328359862272/38791908599719275*n^2 + 17735090176/1630549432832775*n^3 + 10321999691776/122052590472287475*n^4 - 1564119174479872/5736471752197511325*n^5 - 12271672623104/26132815760010884925*n^6 - 1687898088275968/548789130960228583425*n^7 + 85790295270096896/114963730991668438425*n^8 - 48612562263605248/140511226767594758075*n^9 - 144303099260960768/252920208181670564535*n^10 - 32925506590743199744/248704871378642721792 [...]
+        - (2818048/1052440614225 + 2097152/556196266395*n + 34830175698944/1668052069787928825*n^2 - 817174151168/8136839364819165*n^3 + 9693923228254208/235195341840097964325*n^4 + 1509699878912/12378702202110419175*n^5 + 20629029027577856/78398447280032654775*n^6 - 1502359475323928576/9695274646964038307175*n^7 - 77656474062422016/646351643130935887145*n^8 - 15703217037901824/28102245353518951615*n^9 + 3216346923887755264/4974097427572854435855*n^10 + 151253870568701689856/303419943081 [...]
+        + (5668864/1307577732825 - 35127296/1285830078225*n + 1102053376/39315814688475*n^2 - 557695107072/8710938586670294975*n^3 + 137507511468032/1606212090615303171*n^4 - 182280443123990528/1646367392880685750275*n^5 - 5069564455944192/190103424450275260925*n^6 - 1757120135666597888/9695274646964038307175*n^7 + 8143172317497786368/29085823940892114921525*n^8 + 4608940312331026432/38134746944725217341555*n^9 + 27362078865048469504/82750893567802941978315*n^10) * eps^19
+        - (30605312/27952275991419 + 2339897344/1128841915038075*n + 158625682161664/7586946510970902075*n^2 - 2136205134659584/36585942064015238895*n^3 + 18482688723779584/1646367392880685750275*n^4 - 8057707396857856/183699940679318620557*n^5 + 1468225245085171712/9695274646964038307175*n^6 - 45659846177456128/12465353117525192109225*n^7 + 3630426979762700288/43262107878469784379075*n^8 - 46360400310384984064/136836444919308132813815*n^9) * eps^20
+        + (199327744/56660018901525 - 1799016153088/98531772869751975*n + 10114609184768/689722410088263825*n^2 - 35751973093376/4828056870617846775*n^3 + 509942296483987456/7932497438425122251325*n^4 - 3839901122350809088/87257471822676344764575*n^5 + 820897336077058048/87257471822676344764575*n^6 - 6551724376476614656/43262107878469784379075*n^7 + 1594219615901188096/25479889743595307489469*n^8) * eps^21
+        - (3604480/9407823081427 + 3482423656448/4045128729436574325*n + 2660096597295104/149669762989153250025*n^2 - 92190363168538624/2644165812808374083775*n^3 + 179628626935808/27639363896951645475*n^4 - 616136831697682432/12465353117525192109225*n^5 + 7747397749250719744/100944918383096163551175*n^6 + 3997177385754558464/2638988580586656847123575*n^7) * eps^22
+        + (248348672/87234019741575 - 3932568420352/311163748418198025*n + 20285863493632/2355954095166356475*n^2 - 50564857069568/4960911468683628675*n^3 + 943092251230208/21041107263727114725*n^4 - 19962886927941632/1012825268057821038975*n^5 + 13369059142137806848/473664617028374305893975*n^6) * eps^23
+        - (9158656/176496737616675 + 51089113088/402236065028402325*n + 2603006914985984/181408465327809448575*n^2 - 790244020584448/36281693065561889715*n^3 + 3890695479230464/568170272325119119425*n^4 - 77002004121387008/1824125611149066646575*n^5) * eps^24
+        + (96272384/41574787083039 - 185838075904/20579519606104305*n + 2264108367872/402236065028402325*n^2 - 733824970391552/69954898394384035725*n^3 + 40925748722139136/1324318593741959848725*n^4) * eps^25
+        + (223215616/2189310596394075 + 9760145408/34299199343507175*n - 64667779072/5668495129599225*n^2 + 297990161956864/20815847814914274045*n^3) * eps^26
+        + (34930688/18397568036925 - 1867513856/281414651824075*n + 9746486657024/2420447420338869075*n^2) * eps^27
+        + (80084992/472492835583615 + 407322492928/816625117500347925*n) * eps^28
+        + 474546176/302118060488475 * eps^29;
+C4[9] = + (32768/92147055 - 524288/423876453*n + 1048576/557732175*n^2 - 524288/295269975*n^3 + 2097152/1712565855*n^4 - 524288/816762177*n^5 + 1048576/4083810885*n^6 - 524288/6806351475*n^7 + 4194304/251835004575*n^8 - 524288/218257003965*n^9 + 1048576/5369122297539*n^10 - 524288/104941935815535*n^11 - 2097152/17315419409563275*n^12 - 524288/62601900942267225*n^13 - 1048576/1139354597149263495*n^14 - 524288/3873805630307495883*n^15 - 8388608/342186164010495469665*n^16 - 524288/100642989 [...]
+        - (65536/706460755 - 2097152/3532303775*n + 4194304/2445441075*n^2 - 2097152/703227525*n^3 + 310378496/88482569175*n^4 - 10485760/3539302767*n^5 + 4194304/2268783825*n^6 - 216006656/251835004575*n^7 + 16777216/57436053675*n^8 - 1050673152/14914228604275*n^9 + 20971520/1877010234099*n^10 - 2097152/2124330684525*n^11 + 2457862144/90424968027719325*n^12 + 2097152/2981042902012725*n^13 + 1665138688/32281713585895799025*n^14 + 10485760/1754800841079463947*n^15 + 33554432/3640278340537 [...]
+        - (2326528/10596911325 - 82313216/95372201925*n + 221249536/162693756225*n^2 - 2214068224/3175541093725*n^3 - 5773459456/4512611027925*n^4 + 38273024/11541204675*n^5 - 1439694848/363761673275*n^6 + 30220484608/9821565178425*n^7 - 675505242112/402684172315425*n^8 + 416099598336/641311829983825*n^9 - 3008871006208/17315419409563275*n^10 + 2228015857664/73984064749952175*n^11 - 606058053632/210991592064678425*n^12 + 629970305024/7449626212129799775*n^13 + 11919585968128/513279246015 [...]
+        - (131072/13624600275 + 180355072/2765793855825*n - 52856619008/85739609530575*n^2 + 153607995392/85739609530575*n^3 - 214295379968/85739609530575*n^4 + 9030336512/7259417740575*n^5 + 15695085568/9821565178425*n^6 - 1529423593472/402684172315425*n^7 + 6129622974464/1574129037233025*n^8 - 6244047781888/2473631344223325*n^9 + 901962769891328/813824712249473925*n^10 - 169940577419264/517888453249665225*n^11 + 5983846365396992/96845140757687397075*n^12 - 2497185367195648/394830189242 [...]
+        - (38371328/921931285275 - 7124549632/85739609530575*n - 7777288192/85739609530575*n^2 + 5844238336/28579869843525*n^3 + 2206377967616/3172365552631275*n^4 - 7741853138944/3172365552631275*n^5 + 588422053888/207443361495825*n^6 - 1226503094272/2473631344223325*n^7 - 47695532130304/17315419409563275*n^8 + 1124341091139584/271274904083157975*n^9 - 18477597873668096/5696772985746317475*n^10 + 2032671912361984/1257729100749186975*n^11 - 901293789562273792/1710930820052477348325*n^12  [...]
+        + (3997696/2598169985775 - 903872512/12248515647225*n + 1463812096/5043506442975*n^2 - 330303537152/1057455184210425*n^3 - 644840685568/3172365552631275*n^4 + 33686114271232/130066987657882275*n^5 + 364877893861376/266327641394711325*n^6 - 3230396317696/1025652020775525*n^7 + 250926233288704/116260673178496275*n^8 + 8017412096/6166319734575*n^9 - 375725184457375744/96845140757687397075*n^10 + 1749781404081717248/466617496377948367725*n^11 - 3629731902618861568/1710930820052477348 [...]
+        - (245137408/17147921906115 - 716701696/85739609530575*n - 136481603584/3172365552631275*n^2 - 391995981824/3172365552631275*n^3 + 66031785607168/130066987657882275*n^4 - 59127928193024/223715218771557513*n^5 - 115604364197888/243168716056040775*n^6 - 446272603947008/1632704236376273775*n^7 + 1557731995549696/601522613401785075*n^8 - 64333349912576/20742159082820175*n^9 + 1510914246311936/8926595582882490513*n^10 + 103393420971081728/31880698510294608975*n^11 - 170397623987008962 [...]
+        + (11272192/3175541093725 - 160750895104/3172365552631275*n + 391966097408/3172365552631275*n^2 - 1484783616/52937316914075*n^3 - 1645274464256/22643240766351975*n^4 - 271039707742208/798982924184133975*n^5 + 1203213663469568/1947150978196889465*n^6 + 14046369685700608/80002507582437414975*n^7 - 2400351256838144/6154039044802878075*n^8 - 555325673439232/330614651217870019*n^9 + 150633156104421376/44632977914412452565*n^10 - 1199924118397386752/848026580373836598735*n^11 - 2218022 [...]
+        - (645431296/109391915607975 + 2509766656/1057455184210425*n - 119882645504/43355662552627425*n^2 - 77087334989824/621431163254326425*n^3 + 989579437932544/5592880469288937825*n^4 + 18971230665703424/262865382056580077775*n^5 + 361546193567744/5841452934590668395*n^6 - 4303816224145408/6456342717179159805*n^7 + 24826556685746176/94225175597092955415*n^8 + 1074863049015296/1847552462688097165*n^9 + 74487682881814528/94225175597092955415*n^10 - 10560014891117707264/3335571216137090 [...]
+        + (12517376/3528771471225 - 16569597952/498340948880775*n + 34373491490816/621431163254326425*n^2 + 14185784147968/1864293489762979275*n^3 + 9593926155501568/262865382056580077775*n^4 - 433933481381199872/1840057674396060544425*n^5 + 8370378225221632/122670511626404036295*n^6 + 745576811380867072/6501537116199413923635*n^7 + 3198014784708542464/6501537116199413923635*n^8 - 18857274447495168/31408391865697651805*n^9 - 7451675099423309824/16677856080685453108455*n^10 - 217399330066 [...]
+        - (1007255552/381428116298775 + 175928508416/60138499669773525*n + 2279485734912/207143721084775475*n^2 - 804978403311616/9735754890984447325*n^3 + 95773494987456512/1840057674396060544425*n^4 + 50744948926447616/1840057674396060544425*n^5 + 26469016886312960/144478602582209198303*n^6 - 307334446787854336/1413377633956394331225*n^7 - 1485100810906894336/10835895193665689872725*n^8 - 251158947597647872/1039541164920773499985*n^9 + 12178767189407432704/16148400332092264120885*n^10) [...]
+        + (804651008/260339825410275 - 10372513792/468611685738495*n + 1906369888256/71256541625529975*n^2 + 788413234020352/204450852710673393825*n^3 + 602924036128768/10514615282263203111*n^4 - 2206517246069571584/19504611348598241770905*n^5 - 240955790435811328/10835895193665689872725*n^6 - 1142671088526819328/13931865248998744122075*n^7 + 194173652701282304/654666099423880000275*n^8 + 789891485725097984/16269664915311980747575*n^9) * eps^20
+        - (2371059712/1963103007823425 + 6706906529792/3413836130604936075*n + 329029822447616/23896852914234552525*n^2 - 94227876046962688/1840057674396060544425*n^3 + 1433188842334060544/97523056742991208854525*n^4 - 137127157376221184/8865732431181018986775*n^5 + 1854149531196719104/13931865248998744122075*n^6 - 7709842757648384/231348170473100451225*n^7 - 12929216601344966656/2949457825361557652667525*n^8) * eps^21
+        + (6121127936/2365790804300025 - 9780355661824/645860889573906825*n + 337309337649152/23896852914234552525*n^2 - 6056167547600896/2955244143727006328925*n^3 + 254426069598208/5127664795362069975*n^4 - 4848317375375736832/97523056742991208854525*n^5 - 29396030701174784/3639380359162859786475*n^6 - 326650603128022368256/2949457825361557652667525*n^7) * eps^22
+        - (1494646784/2827408522212225 + 371029704704/347771248232103675*n + 180777085042688/14094964119524672475*n^2 - 1032434305585381376/32507685580997069618175*n^3 + 533652355533504512/97523056742991208854525*n^4 - 1457447658973560832/48351767628877994306025*n^5 + 528841186136871141376/6882068259176967856224225*n^6) * eps^23
+        + (13631488/6363259989975 - 165322686464/15501998449370475*n + 1654857408708608/202750637719316442525*n^2 - 1083196489859072/202750637719316442525*n^3 + 16533872472953454592/442604642141267794032075*n^4 - 11374232737209647104/509412890011647838414275*n^5) * eps^24
+        - (133758976/696989077568595 + 3012558848/6764893988165775*n + 10799600893952/989027501069836305*n^2 - 5380229842337792/265828613898659335755*n^3 + 2984159999753715712/729699545151819876647475*n^4) * eps^25
+        + (482213888/271875172101225 - 32879149056/4259377696252525*n + 11694399029248/2261729556710090775*n^2 - 13001758565466112/1977505542416856034275*n^3) * eps^26
+        - (92864512/4311163443319425 + 13999538176/254358643155846075*n + 6558828537577472/729246229927810697025*n^2) * eps^27
+        + (7357595648/4987424375604825 - 82988498944/14487280329137825*n) * eps^28
+        + 1104084992/17220729447843075 * eps^29;
+C4[10] = + (131072/468495027 - 1048576/1064761425*n + 2097152/1368978975*n^2 - 1048576/696498075*n^3 + 4194304/3810254175*n^4 - 1048576/1676511837*n^5 + 2097152/7522809525*n^6 - 1048576/10844569575*n^7 + 8388608/328951943775*n^8 - 1048576/214079836425*n^9 + 2097152/3313955867859*n^10 - 11534336/248546690089425*n^11 + 4194304/3893898144734325*n^12 + 1048576/44031002098149675*n^13 + 2097152/1390121637670154025*n^14 + 1048576/6876468367675028577*n^15 + 16777216/810440914761699796575*n^16 +  [...]
+        - (262144/3904125225 - 4194304/9582852825*n + 360710144/277902731925*n^2 - 960495616/410237366175*n^3 + 687865856/237505843575*n^4 - 255852544/97796523825*n^5 + 6450839552/3618471381525*n^6 - 205520896/221539064175*n^7 + 14864613376/40461089084325*n^8 - 7000293376/64438030763925*n^9 + 5729419264/248546690089425*n^10 - 37971034112/11681694434202975*n^11 + 1694498816/6579345141102825*n^12 - 532676608/83169670629838275*n^13 - 8388608/55688924260406775*n^14 - 19079888896/189102880111 [...]
+        - (262144/1527701175 - 2097152/3053876175*n + 9844031488/8614984689675*n^2 - 24006098944/31588277195475*n^3 - 67436019712/94764831586425*n^4 + 41307602944/16776549132525*n^5 - 4194304/1270084725*n^6 + 14032044032/4890900878325*n^7 - 4864671219712/2734013590983675*n^8 + 15122563072/18707815383075*n^9 - 21874415239168/81771861039420825*n^10 + 35727997927424/572403027275945775*n^11 - 55423533056/5802535160221275*n^12 + 148618870784/182819967237017775*n^13 - 1342592516096/62341608827 [...]
+        - (262144/30878081325 + 306184192/8614984689675*n - 13480493056/31588277195475*n^2 + 42828038144/31588277195475*n^3 - 255500222464/120906854093025*n^4 + 5103004155904/3506298768697725*n^5 + 1764870848512/2522074552922925*n^6 - 2563134980096/911337863661225*n^7 + 65528014045184/19138095136885725*n^8 - 258819959554048/99943385714847675*n^9 + 775812835966976/572403027275945775*n^10 - 180518863765504/360401906062632525*n^11 + 21996665896435712/171911709191875714425*n^12 - 92259910502 [...]
+        - (10878976/319073507025 - 558891008/7289602429725*n - 1700790272/31588277195475*n^2 + 22818062336/106251477839325*n^3 + 174269136896/500899824099675*n^4 - 53224669184/29906022366675*n^5 + 20868585488384/8144406757857825*n^6 - 61644734464/51815196261675*n^7 - 5434802962432/3555298306061775*n^8 + 14461527130112/4345364596297725*n^9 - 476807490961408/150125338149511725*n^10 + 4796701484253184/2491474046259068325*n^11 - 5015812205182976/6324511040503788825*n^12 + 1694502243794944/76 [...]
+        + (524288/1858133952675 - 4924112896/94764831586425*n + 804786274304/3506298768697725*n^2 - 351306514432/1168766256232575*n^3 - 13920760758272/143758249516606725*n^4 + 88386392031232/247264189168563567*n^5 + 62856661827584/89588474336436075*n^6 - 4404285865459712/1804567840205355225*n^7 + 1625213007560704/664840783233551925*n^8 + 4974444544/549909663551325*n^9 - 650529587855360/240639932272827087*n^10 + 852519184033120256/246655930579647764175*n^11 - 3820296696273829888/156215422 [...]
+        - (1164443648/94764831586425 - 5465178112/500899824099675*n - 138923737088/3506298768697725*n^2 - 981144174592/15973138835178525*n^3 + 7859572047872/19378071251454825*n^4 - 711065948127232/2060534909738029725*n^5 - 944472426807296/2767004021648211345*n^6 + 8403040600064/45934454114318133*n^7 + 823118570455040/505278995257499463*n^8 - 68153245696/23584672156045*n^9 + 9360719917088768/7047312302275650405*n^10 + 330730366828544000/187458507240532300773*n^11 - 63248384131625648128/18 [...]
+        + (6815744/3100175745975 - 134544883712/3506298768697725*n + 391362117632/3686108961964275*n^2 - 1431121690624/32706903329175075*n^3 - 403223609344/4722387111699075*n^4 - 18764645921718272/96845140757687397075*n^5 + 78114179466133504/135583197060762355905*n^6 - 8136706490368/128840542027965495*n^7 - 56016360077000704/104143615133629055985*n^8 - 1141393774870528/1653073256089350095*n^9 + 1292681288351744/479924493703359705*n^10 - 276681095183859712/121539032166938524677*n^11 - 161 [...]
+        - (602537984/113106411893475 + 649068544/1228702987321425*n - 111067267072/12798353476633725*n^2 - 8775330168832/98120709987525225*n^3 + 7115549582557184/41505060324723170175*n^4 + 3469524564180992/107039366100601859925*n^5 - 2252269552664576/45194399020254118635*n^6 - 56513104184344576/114062054670165156555*n^7 + 1109330446304411648/2395303148073468287655*n^8 + 22222807760896/49805650470410835*n^9 - 36414339734831104/877781898983444900445*n^10 - 22778537759673942016/107089391675 [...]
+        + (2883584/1180892000925 - 749643759616/28486657738313775*n + 2341788975104/46478231046722475*n^2 + 2676389576704/1257729100749186975*n^3 + 3670594293858304/677915985303811779525*n^4 - 35364246288072704/184886177810130485325*n^5 + 11426772662878208/93323499275589673545*n^6 + 315463962248347648/2199768197210328019275*n^7 + 117185833223585792/466617496377948367725*n^8 - 1011849117514596352/1519600921896071279265*n^9 - 142458605834042605568/1124438612597792917470045*n^10) * eps^19
+        - (5780537344/2293730882825265 + 11108614144/5352038726592285*n + 21118836539392/4611673369413685575*n^2 - 45338866405605376/677915985303811779525*n^3 + 24220595910606848/406749591182287067715*n^4 + 13456242259263488/378205760222126571735*n^5 + 3987380822507257856/35929547221102024314825*n^6 - 3711602295908073472/15398377380472296134925*n^7 - 1052474648635113472/12899654884655290676925*n^8 - 291969534449942528/29143664739406397455275*n^9) * eps^20
+        + (230948864/103321210938075 - 749090111488/41463596727995175*n + 14228899495936/561964066292189925*n^2 + 3116570150699008/677915985303811779525*n^3 + 3800113671217086464/107788641663306072944475*n^4 - 11642532714023747584/107788641663306072944475*n^5 - 4973179734851584/1159017652293613687575*n^6 - 23012225673330688/2137657095171448169319*n^7 + 241570468447970656256/912779579638208368299213*n^8) * eps^21
+        - (462553088/373545916468425 + 52551483392/31036793320485225*n + 5880600854528/677238746557254525*n^2 - 144514017752252416/3266322474645638574075*n^3 + 2057594272357548032/107788641663306072944475*n^4 + 22438675829751808/9798967423936915722225*n^5 + 1223011637475147776/11336060353181922110025*n^6 - 69134393521856315392/1086642356712152819403825*n^7) * eps^22
+        + (287309824/148810974853275 - 40835743744/3230073512991675*n + 171677157687296/12611283685890496425*n^2 + 4062868639055872/5132792460157432044975*n^3 + 3966011997937467392/107788641663306072944475*n^4 - 25918257887241568256/489194604471927561824925*n^5 - 239035500430102626304/18472920064106597929865025*n^6) * eps^23
+        - (2097152/3460720345425 + 3338665984/3086210217609225*n + 291547312553984/32013258587260490925*n^2 - 3969582603698176/138724120544795460675*n^3 + 5811037897687564288/908504265447865471960575*n^4 - 314980684348453289984/20417437965591502975113975*n^5) * eps^24
+        + (299892736/183418178307525 - 5670699008/626151712153275*n + 1229233061888/156162237011026785*n^2 - 25599716360192/11447165191808296755*n^3 + 388102326440689664/12801746406172278537675*n^4) * eps^25
+        - (1325662208/4764970121563575 + 131707437056/223953595713488025*n + 6957566001152/843399711516752775*n^2 - 648601731057319936/34658386611832266284925*n^3) * eps^26
+        + (729284608/529441124618175 - 622359216128/93711079057416975*n + 1318364018376704/268669663657614467325*n^2) * eps^27
+        - (1705508864/16537249245426525 + 4212251426816/17149127467507306425*n) * eps^28
+        + 7370964992/6344479270257975 * eps^29;
+C4[11] = + (262144/1166167275 - 8388608/10495505475*n + 16777216/13233463425*n^2 - 8388608/6511704225*n^3 + 33554432/33929406225*n^4 - 8388608/13970931975*n^5 + 16777216/57436053675*n^6 - 8388608/73846354725*n^7 + 67108864/1926718527825*n^8 - 25165824/3068477655425*n^9 + 16777216/11835556670925*n^10 - 92274688/556271163533475*n^11 + 33554432/3028587445904475*n^12 - 8388608/35644144555644975*n^13 - 16777216/3508402228405626825*n^14 - 8388608/30016330176359251725*n^15 - 134217728/513279246 [...]
+        - (524288/10495505475 - 33554432/101456552925*n + 3154116608/3145153140675*n^2 - 8422162432/4512611027925*n^3 + 402653184/167133741775*n^4 - 2248146944/976412912475*n^5 + 67108864/39763421775*n^6 - 33554432/34801155675*n^7 + 130728067072/303779287887075*n^8 - 12314476544/82848896696475*n^9 + 50398756864/1297966048244775*n^10 - 66806874112/9085762337713425*n^11 + 432315301888/463373879223384675*n^12 - 14059307008/209904406827687075*n^13 + 6509559808/4288047168051321675*n^14 + 1678 [...]
+        - (13893632/101456552925 - 209715200/377418376881*n + 100143202304/103790053642275*n^2 - 847249408/1116022082175*n^3 - 56807653376/166966608033225*n^4 + 303692775424/166966608033225*n^5 - 327877132288/120098788234425*n^6 + 340233551872/130191123380175*n^7 - 1644771147776/911337863661225*n^8 + 13324355895296/14277626530692525*n^9 - 9906258182144/27257287013140275*n^10 + 6952620916736/66196268460483525*n^11 - 177590824337408/8186271866279795925*n^12 + 61708773097472/207805362759410 [...]
+        - (23068672/3145153140675 + 268435456/14827150520325*n - 1073741824/3578967366975*n^2 + 120527519744/116370666204975*n^3 - 6792490778624/3840231984764175*n^4 + 930665725952/622330084487475*n^5 + 7516192768/74958525582525*n^6 - 268435456/133949591325*n^7 + 4294967296/1475520327675*n^8 - 36025917243392/14277626530692525*n^9 + 7782640727883776/5097112671457231425*n^10 - 969285803442176/1444636211696434575*n^11 + 19262771556253696/90048990529077755175*n^12 - 2707075742302208/56404312 [...]
+        - (195559424/6919336909485 - 7230980096/103790053642275*n - 3590324224/132421792578075*n^2 + 768782368768/3840231984764175*n^3 + 15233712128/112867033243965*n^4 - 751199846400/590006883585119*n^5 + 129850383794176/58872425992515135*n^6 - 40231411646464/26352419253792489*n^7 - 341315682304/557976209245455*n^8 + 8519923269632/3386785828210785*n^9 - 10523692446515200/3601959621163110207*n^10 + 599531481726976/285869811203421445*n^11 - 62880043025563648/60385793648910965235*n^12 + 18 [...]
+        - (1048576/2661283426725 + 10938744832/295402460366475*n - 19998441472/109720913850405*n^2 + 14616780341248/52483170458443725*n^3 + 278904438784/19854337211552025*n^4 - 2439370095198208/6770328989139240525*n^5 - 1901239885365248/7071232499767651215*n^6 + 13414323716096/7492854217229199*n^7 - 46041636559388672/19369028151537479415*n^8 + 1655979603132416/2001088678423950115*n^9 + 88115990755278848/54029394317446653105*n^10 - 3016160029834215424/1026558492031486408995*n^11 + 4406010 [...]
+        - (447217664/42200351480925 - 15720251392/1280077328254725*n - 1793585053696/52483170458443725*n^2 - 48544689946624/2256776329713080175*n^3 + 193959179583488/615484453558112775*n^4 - 17041511862501376/45457923212792043525*n^5 - 1340168745254912/7071232499767651215*n^6 + 1915907735552/5005422944521545*n^7 + 1984009542303744/2236510875885591305*n^8 - 91383922335678464/38020684890055052185*n^9 + 217388623232761856/114062054670165156555*n^10 + 1205183727169175552/22432204085132480789 [...]
+        + (165675008/123878451121425 - 4622190116864/157449511375331175*n + 614939458797568/6770328989139240525*n^2 - 11825387143168/218397709327072275*n^3 - 5151446051848192/63641092497908860935*n^4 - 4826842355728384/54327761888458783725*n^5 + 121985894142967808/247493137491867792525*n^6 - 9299663088083009536/39351408861206979011475*n^7 - 3754773200299360256/7870281772241395802295*n^8 - 315887059992576/5431526412865007455*n^9 + 38068651355990392832/20188983676619232710235*n^10 - 305185 [...]
+        - (68442914816/14313591943211925 - 84196458496/98120709987525225*n - 25683753435136/2256776329713080175*n^2 - 604695332651008/9642589772410433475*n^3 + 353014314325508096/2227438237426810132725*n^4 - 80709003771904/11911434424742300175*n^5 - 124062850418212864/1192466935188090273075*n^6 - 1194565469995008/3677358084403978975*n^7 + 7413082615709696/13706516496414830725*n^8 + 360655275281088512/1779105841234645028105*n^9 - 6125829954174189568/14155494301997393049705*n^10) * eps^19
+        + (1985478656/1172351340110691 - 369199415296/17585270101660365*n + 2067731675348992/45457923212792043525*n^2 - 2675726071365632/742479412475603377575*n^3 - 135473603280896/10264692338372396925*n^4 - 3462210456242880512/23610845316724187406885*n^5 + 40055605280374784/257198750726843000075*n^6 + 2039759270643236864/16864889511945848147775*n^7 + 935494308843225088/14128193445098651693775*n^8 - 72049578521657344/120450007009226799905*n^9) * eps^20
+        - (61731504128/26140266367332975 + 5430390554624/4132538473890185775*n + 2777619103744/5785553863446260085*n^2 - 39529633695137792/742479412475603377575*n^3 + 85969920990380032/1356945133145068241775*n^4 + 1267388178910674944/39351408861206979011475*n^5 + 178954570188193792/3372977902389169629555*n^6 - 4539444203519737856/19510362376564804719975*n^7 - 13768334851964928/4265706469428147268525*n^8) * eps^21
+        + (51497664512/31502372288837175 - 11603927891968/781831603168413525*n + 687018673700864/28927769317231300425*n^2 + 451808010960896/123358648467733476525*n^3 + 315883222439297024/16864889511945848147775*n^4 - 11534590875170504704/118054226583620937034425*n^5 + 39818830423294738432/2321733122811211761677025*n^6 + 9511520652935299072/296081645626795646262645*n^7) * eps^22
+        - (15328083968/12549725545959525 + 575324291072/420986247859914975*n + 1473387591368704/290059524775481417775*n^2 - 1484013735931543552/39351408861206979011475*n^3 + 2722552774796509184/118054226583620937034425*n^4 + 2014794043929657344/169882911425210616708075*n^5 + 1634232174940323315712/20232245784497702494614075*n^6) * eps^23
+        + (348127232/238789703834325 - 213943058432/20155619816238025*n + 213938226593792/16362332166822028695*n^2 + 6461637905088512/3190654772530295595525*n^3 + 60410836325136072704/2321733122811211761677025*n^4 - 7569155107689462759424/141625720491483917462298525*n^5) * eps^24
+        - (20004732928/31217773947940755 + 5140337655808/5150932701410224575*n + 1398502957514752/221490106160639656725*n^2 - 137966723012755456/5411965321238255854725*n^3 + 692499587030337978368/84975432294890350477379115*n^4) * eps^25
+        + (5125439488/4059048622072675 - 4424890056704/572325855712247175*n + 51535312584704/6753445097404516665*n^2 - 10447444596752384/29523810817486745353825*n^3) * eps^26
+        - (573046784/1739592266602575 + 2801795072/4462432336067475*n + 1814487552229376/294257250672625368975*n^2) * eps^27
+        + (70254592/64918370480425 - 5136982212608/894398938214666775*n) * eps^28
+        - 133782044672/854691993121895775 * eps^29;
+C4[12] = + (2097152/11408158125 - 16777216/25448968125*n + 33554432/31556720475*n^2 - 16777216/15092344575*n^3 + 67108864/75461722875*n^4 - 16777216/29390355225*n^5 + 33554432/112374887625*n^6 - 16777216/131639154075*n^7 + 134217728/3047952721275*n^8 - 16777216/1385433055125*n^9 + 33554432/13023070718175*n^10 - 184549376/455807475136125*n^11 + 67108864/1549745415462825*n^12 - 218103808/82136507019529725*n^13 + 33554432/645358269439162125*n^14 + 16777216/17166529967081712525*n^15 + 268435 [...]
+        - (4194304/110278861875 - 67108864/262972670625*n + 134217728/170158786875*n^2 - 872415232/578539875375*n^3 + 268435456/132956368875*n^4 - 4898947072/2419805913525*n^5 + 41204842496/26108432224875*n^6 - 9193914368/9434139375375*n^7 + 31675383808/66038975627625*n^8 - 1543503872/8232975741375*n^9 + 1744830464/30387165009075*n^10 - 738197504/54955511186625*n^11 + 314337918976/136894178365882875*n^12 - 398693761024/1505835962024711625*n^13 + 71001178112/4087269039781360125*n^14 - 718 [...]
+        - (67108864/603290244375 - 3959422976/8678098130625*n + 7113539584/8678098130625*n^2 - 4093640704/5633151418125*n^3 - 27111981056/278277680055375*n^4 + 132405788672/99212042454525*n^5 - 47840969621504/21330589127722875*n^6 + 12952010752/5530357564875*n^7 - 5504537460736/3103831854498375*n^8 + 3169350320128/3103831854498375*n^9 - 858590806016/1894133285565675*n^10 + 2349682655232/15210464262875875*n^11 - 322390982656/8139653848782225*n^12 + 41969279565824/5722176655693904175*n^13  [...]
+        - (54525952/8678098130625 + 67108864/8678098130625*n - 9797894144/45869947261875*n^2 + 3333095948288/4174165200830625*n^3 - 204279382016/138575524885875*n^4 + 424884404486144/294362129962575675*n^5 - 18405142822912/63991767383168625*n^6 - 20177018159104/14815827916300125*n^7 + 533664182042624/221613594411183975*n^8 - 201738439098368/85235997850455375*n^9 + 2721633399734272/1677931500541821525*n^10 - 3710043685912576/4517507886074134875*n^11 + 621105152786432/1996108135707175875*n [...]
+        - (29360128/1239728304375 - 20166213632/321089630833125*n - 34158411776/4174165200830625*n^2 + 20367540224/115713842619375*n^3 + 145894670336/19624141997505045*n^4 - 48704828473344/54511505548625125*n^5 + 14158386065047552/7686122282356142625*n^6 - 675825217175552/412809636648283875*n^7 + 270735679422464/7017763823020825875*n^8 + 19077338759168/10714760539858375*n^9 - 117763506962432/46060864720755885*n^10 + 795676952773001216/371941482620103771375*n^11 - 3778958784987136/3041517 [...]
+        - (4194304/5633151418125 + 111199387648/4174165200830625*n - 1310099243008/9007409117581875*n^2 + 9516238241792/37738734610586625*n^3 - 335643372683264/7359053249064391875*n^4 - 22046090417143808/69175100541205283625*n^5 - 136217706364928/38430611411780713125*n^6 + 201471972012457984/161408567929478995125*n^7 - 791337814187835392/371941482620103771375*n^8 + 53952165240111104/41326831402233752375*n^9 + 4257445253742592/5722176655693904175*n^10 - 1374618086908362752/593095877691516 [...]
+        - (38319161344/4174165200830625 - 733969645568/57046924411351875*n - 201192374272/7110196375907625*n^2 + 77779173376/22783446591530625*n^3 + 1923744574472192/8043616342000614375*n^4 - 5134140219326464/13835020108241056725*n^5 - 73618021154816/1325193496957955625*n^6 + 12436689368645632/28920399257141266875*n^7 + 11914712262377472/32776452491426769125*n^8 - 2836087701504/1540608812758015*n^9 + 6146994640781312/2967484445515364775*n^10 - 1130662023437221888/3077281369999433271675*n [...]
+        + (809500672/1037216807479125 - 33355856871424/1471810649812878375*n + 65364033536/843057996226875*n^2 - 364693793275904/6067991275544323125*n^3 - 165619962893828096/2421128518942184926875*n^4 - 449830111412224/25485563357286157125*n^5 + 5641720934655066112/14257756833770644569375*n^6 - 499918004516028416/1474940362114204610625*n^7 - 486984838402801664/1474940362114204610625*n^8 + 786107394424832/2750797577516613625*n^9 + 10606783160177917952/9231844109998299815025*n^10) * eps^19
+        - (10592714752/2473631344223325 - 2744769314816/1471810649812878375*n - 145531712045056/11926741472621600625*n^2 - 62140576694272/1464687549269319375*n^3 + 12704342603726848/89671426627488330625*n^4 - 7144092454617088/182013917026859292375*n^5 - 1709258891583291392/14257756833770644569375*n^6 - 35423917799636992/197111845628165593125*n^7 + 87349623902961664/165126150597225943125*n^8 - 7274724790894592/223837670809572945125*n^9) * eps^20
+        + (117440512/99695905291125 - 166726067027968/9882157220172183375*n + 43686796722176/1070821989801939375*n^2 - 163178960912384/18768438131334766875*n^3 - 174335826732253184/7548224206113870654375*n^4 - 2725675759334064128/25663962300787160224875*n^5 + 750779530699866112/4424821086342613831875*n^6 + 81652953558166798336/1081552696961744609476875*n^7 - 18791673242996178944/346453864668165752623125*n^8) * eps^21
+        - (224948912128/102725127028816875 + 1906697043968/2845039387711145625*n - 994752543588352/484225703788436985375*n^2 - 3193548971180032/76517478535441741875*n^3 + 2736885148577431552/42773270501311933708125*n^4 + 39548874636918784/1710930820052477348325*n^5 + 2478501459553943552/229420269052491280798125*n^6 - 4479132491550602297344/21991571504888807059363125*n^7) * eps^22
+        + (2902458368/2407236357920625 - 663840882688/54123991660344375*n + 3649770329473024/165147762553327929375*n^2 + 16748683190075392/8554654100262386741625*n^3 + 5156555989188608/750408254408981293125*n^4 - 14223212158493130752/168241530638493605918625*n^5 + 5623976056189811163136/153941000534221649415541875*n^6) * eps^23
+        - (124436611072/105638488544098125 + 10877407330304/10467396321391288125*n + 584845428260864/229552435606325225625*n^2 - 214471771993145344/6753674289680831638125*n^3 + 3034186506932584448/116474905826649419482125*n^4 + 1440843898823037157376/92364600320532989649325125*n^5) * eps^24
+        + (20954742784/18851312770495625 - 16716281151488/1866279964279066875*n + 1001681399578624/80250038463999875625*n^2 + 48918012396306432/21569427004935077681875*n^3 + 233305107083558912/13509521766934765196625*n^4) * eps^25
+        - (8589934592/13236028115454375 + 539823702016/622093321426355625*n + 22135724572672/5243357994879283125*n^2 - 721163988242530304/32091098714659505819375*n^3) * eps^26
+        + (16777216/17034785219375 - 5177851510784/780925658811808125*n + 570623449366528/77203926338394961875*n^2) * eps^27
+        - (96162807808/269058420262891875 + 169771903483904/279013581812618874375*n) * eps^28
+        + 17725128704/20644734133379125 * eps^29;
+C4[13] = + (4194304/27484885575 - 67108864/121718778975*n + 134217728/148767396525*n^2 - 67108864/69424785045*n^3 + 268435456/335050049565*n^4 - 67108864/124447161267*n^5 + 134217728/447573123855*n^6 - 469762048/3396290175135*n^7 + 536870912/10188870525405*n^8 - 67108864/4092965082855*n^9 + 134217728/32818138209801*n^10 - 738197504/929847249277695*n^11 + 268435456/2346757343415135*n^12 - 872415232/77442992332699455*n^13 + 134217728/210202407760184235*n^14 - 67108864/5787572960330405937*n [...]
+        - (8388608/284010484275 - 268435456/1338906568725*n + 536870912/852031452825*n^2 - 15837691904/12843585233325*n^3 + 56908316672/33393321606645*n^4 - 21206401024/11905445094543*n^5 + 535260299264/365667242189535*n^6 - 167235289088/173210798931885*n^7 + 49392123904/95775382938807*n^8 - 52881784832/237019887070785*n^9 + 476204498944/6136991845232787*n^10 - 3156532527104/147845712635153505*n^11 + 817117528064/180700315442965395*n^12 - 3489660928/4954265502765285*n^13 + 102542344192/1 [...]
+        - (171966464/1874469196215 - 3556769792/9372345981075*n + 243068305408/346776801299775*n^2 - 32950452224/48474176525775*n^3 + 19058917376/315952196739795*n^4 + 34250552246272/35323455595509081*n^5 - 14085747900416/7679012085980235*n^6 + 64179360759808/30935448689234661*n^7 - 679288269438976/398904469940131155*n^8 + 3663003123712/3409439914018215*n^9 - 2248062789484544/4228387381365390243*n^10 + 336487132430336/1626302838986688555*n^11 - 645641764077568/10299917980249027515*n^12 + [...]
+        - (16777216/3124115327025 + 536870912/346776801299775*n - 46170898432/300539894459805*n^2 + 5905580032/9509288217975*n^3 - 9754744755060736/7947777508989543225*n^4 + 3564488385101824/2649259169663181075*n^5 - 257937482186752/488294827349684355*n^6 - 2181820300918784/2526394976287497315*n^7 + 1340283199422464/689016811714771995*n^8 - 1013098496393216/469820820151710027*n^9 + 34875738960166912/21141936906826951215*n^10 - 274679801577472/291718809898120605*n^11 + 249518931822247936/ [...]
+        - (6949961728/346776801299775 - 28252831744/500899824099675*n + 131130720256/26404576441825725*n^2 + 2771797409792/18526287899742525*n^3 - 525786406715392/7947777508989543225*n^4 - 1127691377967104/1840125827204475525*n^5 + 431369469558784/286241795342918415*n^6 - 9685634637627392/6011077702201286715*n^7 + 39917962919936/83949174760650381*n^8 + 253937189912576/219866886277893855*n^9 - 761094108872704/355169585525828535*n^10 + 339072536111218688/163449043258986291807*n^11 - 327987 [...]
+        - (1367343104/1502699472299025 + 3567238774784/184832035092780075*n - 132465918214144/1135396786998506175*n^2 + 16112301375488/71601599180085975*n^3 - 6424649378299904/74709108584501706315*n^4 - 97291441461526528/373545542922508531575*n^5 + 12455942029312/84188763336152475*n^6 + 27848647672594432/33892246618794488925*n^7 - 30246214112903168/16767743064035168205*n^8 + 66986725867520/43973377255578771*n^9 + 52142753567473664/817245216294931459035*n^10 - 260303992792285184/154340427 [...]
+        - (1476978016256/184832035092780075 - 34286388379648/2649259169663181075*n - 180670617878528/7947777508989543225*n^2 + 61736732327936/3365275161464040825*n^3 + 66288410624524288/373545542922508531575*n^4 - 129772872452276224/373545542922508531575*n^5 + 385471838420992/7884473825126623725*n^6 + 882496258441216/2234131263791502075*n^7 + 35024921427968/1557121789915289325*n^8 - 88175242312155136/67371469443668184795*n^9 + 353258965091483648/178680853741902577065*n^10) * eps^19
+        + (6308233216/15138623826646749 - 28033251540992/1589555501797908645*n + 2745111167369216/41505060324723170175*n^2 - 1883871440273408/30055388511006433575*n^3 - 138534565269471232/2614818800457559721025*n^4 + 36477384878194688/1319860918326196811565*n^5 + 20047764876427264/66659642339706909675*n^6 - 81615489704394752/212880793278418840575*n^7 - 806526138712064/4835272926579056325*n^8 + 40776148925284352/95573479908459517965*n^9) * eps^20
+        - (117658615808/30686399648608275 - 137275476279296/53363648988929790225*n - 113666846359552/9508432001663853531*n^2 - 23743407872540672/871606266819186573675*n^3 + 5706074921671589888/46195132141416888404775*n^4 - 94257108270186496/1490165552948931884025*n^5 - 49559085925793792/439953639442065603855*n^6 - 26648109036760727552/389358970906228059411675*n^7 + 355114185834643849216/766157975009029407229425*n^8) * eps^21
+        + (1778384896/2175355631198475 - 56733296754688/4157104611220285725*n + 95240944885956608/2614818800457559721025*n^2 - 27553288945664/2149710649235277975*n^3 - 24604832551665664/905786904733664478525*n^4 - 3321420989153148928/46195132141416888404775*n^5 + 153260985824307052544/908504265447865471960575*n^6 + 39586202742075424768/1583393148351994108274145*n^7) * eps^22
+        - (582454607872/288579494587524525 + 29103503704064/201139907727504593925*n - 512589851262976/144812326462121907225*n^2 - 495843902356455424/15398377380472296134925*n^3 + 2873676414538743808/46195132141416888404775*n^4 + 3616386677989179392/302834755149288490653525*n^5 - 954646975949855260672/55418760192319793789595075*n^6) * eps^23
+        + (11341398016/12676618625291775 - 28490665558016/2795807791649027925*n + 2074293110308864/101527762948168985505*n^2 + 487478788096/45156531907543390425*n^3 - 263322391923392512/209654830487968955067825*n^4 - 21704426226697895936/308453210717920930183275*n^5) * eps^24
+        - (1957280350208/1746838046565206595 + 1484716507136/2015582361421392225*n + 9798431014912/12381434505874266525*n^2 - 168009336415584256/6353176681453604699025*n^3 + 928284064644245487616/33251256115391876273757045*n^4) * eps^25
+        + (2785017856/3260242714754025 - 5101347405824/671860787140464075*n + 281627448049664/23783871864772428255*n^2 + 200888040405598208/103975159835496798854775*n^3) * eps^26
+        - (24041750528/37532941992020475 + 24928795492352/34579388172186863775*n + 9096895888621568/3418589858264128911825*n^2) * eps^27
+        + (75027709952/96861031294641075 - 245770913579008/43047809765375483475*n) * eps^28
+        - 5320214577152/14381121797311898475 * eps^29;
+C4[14] = + (16777216/130734984825 - 134217728/287616966615*n + 268435456/347123925225*n^2 - 402653184/475688341975*n^3 + 536870912/742073813481*n^4 - 671088640/1322827232727*n^5 + 805306368/2708646238441*n^6 - 939524096/6415214775255*n^7 + 1073741824/17736182025705*n^8 - 402653184/19312731539101*n^9 + 1342177280/227295994267881*n^10 - 1476395008/1095153426927063*n^11 + 1610612736/6692604275665385*n^12 - 1744830464/54496920530418135*n^13 + 268435456/91866237465561999*n^14 - 2013265920/130 [...]
+        - (33554432/1438084833075 - 536870912/3355531277175*n + 63350767616/124154657255475*n^2 - 170188079104/166966608033225*n^3 + 19327352832/13344309803825*n^4 - 40265318400/25652473199353*n^5 + 1073741824/795175736355*n^6 - 1800128167936/1909595598100905*n^7 + 2658584756224/4924746542470755*n^8 - 1252519837696/4924746542470755*n^9 + 5127117209600/52202313350190003*n^10 - 617938419712/20077812826996155*n^11 + 517543559168/67319725361104755*n^12 - 272193552384/182985594951729185*n^13  [...]
+        - (33554432/437677992675 - 118916907008/372463971766425*n + 2921114632192/4842031632963525*n^2 - 41529917833216/66174432317168175*n^3 + 15828028227584/98120709987525225*n^4 + 688000073728/991118282702275*n^5 - 41783052468224/27949535572204155*n^6 + 511575970545664/280710552920833035*n^7 - 451179871993856/280710552920833035*n^8 + 3293434609664/3000132951160345*n^9 - 466469418696704/783034700252850045*n^10 + 3850775604232192/14877659304804150855*n^11 - 2019084526944256/225072281790 [...]
+        - (33554432/7303215132675 - 536870912/254843770155975*n - 185757335552/1668262999592475*n^2 + 1385680466870272/2845500589638231525*n^3 - 8731481681690624/8536501768914694575*n^4 + 220686693957632/179675585821312425*n^5 - 18664854126592/27949535572204155*n^6 - 3126150465323008/6456342717179159805*n^7 + 22847709891264512/14877659304804150855*n^8 - 8552890499072/4455723062235445*n^9 + 24140837571002368/14877659304804150855*n^10 - 902189565035413504/877781898983444900445*n^11 + 12861 [...]
+        - (7532969984/440184693905775 - 3347792789504/66174432317168175*n + 628407402496/45166676026003675*n^2 + 1061963278843904/8536501768914694575*n^3 - 42469753851215872/401215583138990645025*n^4 - 5274287887876096/12942438165773891775*n^5 + 211258703872/173992581377615*n^6 - 1850811063730176/1226473706130808135*n^7 + 2759545478709248/3679421118392424405*n^8 + 14770795184128/22853547319207605*n^9 - 561234382422016/325466035959749685*n^10 + 370678562706948096/191916472537599064255*n^1 [...]
+        - (64156073984/66174432317168175 + 119902602002432/8536501768914694575*n - 803081574940672/8536501768914694575*n^2 + 26611905128824832/133738527712996881675*n^3 - 1091076312006656/9785745930219284025*n^4 - 80232536004886528/401215583138990645025*n^5 + 40295383171072/179333130140134971*n^6 + 27565954804219904/55191316775886366075*n^7 - 7369373605953536/5017392434171487825*n^8 + 113261581835436032/72361948661717679965*n^9 - 730314374996033536/1727248252838391578295*n^10) * eps^19
+        - (11934908809216/1707300353782938915 - 21674552459264/1707300353782938915*n - 7136169766682624/401215583138990645025*n^2 + 2271120724066304/85106335817361651975*n^3 + 2672234162290688/20803770977577292705*n^4 - 444331359809306624/1417628393757766945755*n^5 + 15332470606004224/124353367873488328575*n^6 + 1711864442519552/5317435835550513675*n^7 - 53216998439518208/296026153616117781675*n^8 - 18886946599852834816/22070394341823892389325*n^9) * eps^20
+        + (268435456/1507949438070075 - 2452426326016/177450501167178525*n + 9324812086280192/165206416586643206775*n^2 - 8403666155339776/133738527712996881675*n^3 - 797421959095779328/21264425906366504186325*n^4 + 8042800387494772736/148850981344565529304275*n^5 + 4598266951456784384/21264425906366504186325*n^6 - 19374719994788052992/50184045139024949879727*n^7 - 2122206253634551808/98749250112274901376237*n^8) * eps^21
+        - (201259483136/58563068623411275 - 503944082096128/165206416586643206775*n - 31263441683480576/2808509081972934515175*n^2 - 4250309836668928/265331517548245150275*n^3 + 127802792763981824/1210170580037118124425*n^4 - 3927713021463363584/49616993781521843101425*n^5 - 7376736415775719424/79118990084048344404975*n^6 + 247806897622756622336/25510222945671016188861225*n^7) * eps^22
+        + (58116276224/103318584481953225 - 799750827802624/72013053383921397825*n + 1608466708345913344/49616993781521843101425*n^2 - 790392194996371456/49616993781521843101425*n^3 - 454932135812268032/16538997927173947700475*n^4 - 624347071410864128/14142041705844390062725*n^5 + 28145849041027147497472/178571560619697113322028575*n^6) * eps^23
+        - (2953729540096/1593028407244999725 - 993263800549376/3630511740111354373275*n - 92005258259070976/21264425906366504186325*n^2 - 330227400669396992/13531907394960502664025*n^3 + 516170577441955250176/8782207899329366228952225*n^4 + 64371065618968870912/76530668837013048566583675*n^5) * eps^24
+        + (109655883776/164581882229990225 - 12603581530112/1481236940069912025*n + 129935645605888/6915260457354960711*n^2 - 11155084482183168/5913944713353108571685*n^3 - 1162207852366183530496/178571560619697113322028575*n^4) * eps^25
+        - (455065206784/430714287538059525 + 180582436831232/384627858771487155825*n - 9176950320922624/22693043667517742193675*n^2 - 432325319462741868544/19841284513299679258003175*n^3) * eps^26
+        + (36775657472/55670554171585925 - 3120779071848448/482830716330164727525*n + 15460645461047640064/1384275663718582273814175*n^2) * eps^27
+        - (15502416019456/24924034576467086775 + 14832869272715264/25846223855796368985675*n) * eps^28
+        + 11005853696/17940058163291825 * eps^29;
+C4[15] = + (33554432/307452619485 - 4294967296/10760841681975*n + 8589934592/12843585233325*n^2 - 4294967296/5757469242525*n^3 + 17179869184/26228470993725*n^4 - 21474836480/45112970109207*n^5 + 8589934592/29421502245135*n^6 - 30064771072/197544372217335*n^7 + 34359738368/509456538876285*n^8 - 4294967296/169818846292095*n^9 + 42949672960/5400239312088621*n^10 - 4294967296/2077015120034085*n^11 + 17179869184/39463287280647615*n^12 - 55834574848/776111316519403095*n^13 + 8589934592/9661793 [...]
+        - (67108864/3586947227325 - 17179869184/132717047411025*n + 34359738368/82158172206825*n^2 - 1941325217792/2281876976454075*n^3 + 4191888080896/3383472758190525*n^4 - 17179869184/12393673106925*n^5 + 13159779794944/10601547975663645*n^6 - 51539607552/56606282097365*n^7 + 137438953472/248196775349985*n^8 - 17179869184/61227203084905*n^9 + 34359738368/290335446886485*n^10 - 2353642078208/57002526072046555*n^11 + 68719476736/5835423432476715*n^12 - 127526168952832/473427903076835887 [...]
+        - (25803358208/398151142233075 - 468151435264/1725321616343325*n + 2843268349952/5441398943852025*n^2 - 1749413194104832/3041742009613281975*n^3 + 2869038153728/12798353476633725*n^4 + 7477538062336/15389343835640775*n^5 - 12876311953408/10601547975663645*n^6 + 3191160700928/2005698265666095*n^7 - 256083130056704/171007578216139665*n^8 + 62521838927872/57002526072046555*n^9 - 2688649527296/4170916541857065*n^10 + 238675627606016/776111316519403095*n^11 - 73356546767060992/6154562 [...]
+        - (1073741824/272419202580525 - 68719476736/16324196831556075*n - 740383642353664/9125226028839845925*n^2 + 184786672943104/480275054149465575*n^3 - 366345454624964608/428885623355472758475*n^4 + 15312142525792256/13835020108241056725*n^5 - 137438953472/185992069748485*n^6 - 2361269940125696/11799522896913636885*n^7 + 13962148405313536/11799522896913636885*n^8 - 6665789243392/3976920423631155*n^9 + 47061983886835712/30268341344256720705*n^10 - 1994417129603989504/1846368821999659 [...]
+        - (164550934528/11169187305801525 - 481036337152/10598404214680425*n + 60335700574208/3041742009613281975*n^2 + 2078970329694208/20423124921689178975*n^3 - 8688615760592896/69818589848565332775*n^4 - 70574146693627904/272927214862573573575*n^5 + 10019162269155328/10369277697287741505*n^6 - 26920099097083904/19665871494856061475*n^7 + 17804941544390656/19665871494856061475*n^8 + 19171565778239488/77352427879767175135*n^9 - 43066633509404672/32392435473678244965*n^10) * eps^19
+        - (9126805504/9417157924499325 + 1099511627776/107355600339292305*n - 1923595592794112/25228566079733691675*n^2 + 18691697672192/106836033005526825*n^3 - 75660693642149888/600439872697661861865*n^4 - 4587735356639543296/31823313252976078678845*n^5 + 4633891755261952/18245220303277192225*n^6 + 5232575836585984/19817731506399351525*n^7 - 12071927388468936704/10442577763768568643225*n^8 + 35301152318329716736/23592490503328988416175*n^9) * eps^20
+        - (3298803318784/536778001696461525 - 23776938950656/1940658929210283975*n - 31061203484672/2293506007248517425*n^2 + 30755676691103744/1000733121162769769775*n^3 + 4781985526162915328/53038855421626797798075*n^4 - 14610072603059027968/53038855421626797798075*n^5 + 1187972560910811136/6918111576733930147575*n^6 + 105931591945715449856/447041781410854438583775*n^7 - 581521673484192710656/2052546673789621992207225*n^8) * eps^21
+        + (13958643712/646886309736761325 - 46935402610688/4307316159954532725*n + 484197433081856/10040800546783643175*n^2 - 112187225831112704/1828926049021613717175*n^3 - 3719479336609251328/159116566264880393394225*n^4 + 10694315528765308928/159116566264880393394225*n^5 + 64983725589372338176/447041781410854438583775*n^6 - 1741649722614854189056/4812273294010962485931225*n^7) * eps^22
+        - (1476797661184/478590684439392525 - 10072883720093696/3002199363488309309325*n - 714923076222976/71256859052790144825*n^2 - 31964572545974272/4079911955509753676775*n^3 + 14137901009686495232/159116566264880393394225*n^4 - 828273098770840813568/9387877409627943210259275*n^5 - 13142314124239393783808/190886840662434845275271925*n^6) * eps^23
+        + (34091302912/89625917648992725 - 206227149684736/22695274035783824475*n + 3494935147839488/121370378539191756975*n^2 - 221792729640730624/12239735866529261030325*n^3 - 1863430041644302336/72774243485487931862475*n^4 - 4307536620664800673792/190886840662434845275271925*n^5) * eps^24
+        - (22080561086464/12983807936750746095 - 8985071583232/14981316850097014725*n - 148111053849362432/31823313252976078678845*n^2 - 3775266271680004096/208619497991732071339095*n^3 + 31015178546408587264/570947678950453176296925*n^4) * eps^25
+        + (76235669504/153472907053791325 - 2934527815057408/411153917997106959675*n + 1924007909654528/111788392450826316225*n^2 - 76026719619927506944/21209648962492760586141325*n^3) * eps^26
+        - (262261440512/264716463890811075 + 410392715067392/1707197201241669978225*n - 2623596372082819072/2194101616809595922704275*n^2) * eps^27
+        + (4558570913792/8880977837591720575 - 152607815888797696/27628722052747842708825*n) * eps^28
+        - 54965112406016/91993525147884048975 * eps^29;
+C4[16] = + (1073741824/11455089532425 - 8589934592/24931665452925*n + 17179869184/29464695535275*n^2 - 8589934592/12989812010175*n^3 + 34359738368/57782267217675*n^4 - 8589934592/19260755739225*n^5 + 17179869184/60350367982905*n^6 - 8589934592/55102509897435*n^7 + 68719476736/936742668256395*n^8 - 8589934592/290335446886485*n^9 + 17179869184/1690777014221295*n^10 - 8589934592/2920433024564055*n^11 + 34359738368/48599000844668505*n^12 - 111669149696/808510650415848765*n^13) * eps^16
+        - (2147483648/141279437566575 - 34359738368/324111650888025*n + 4604204941312/13288577686409025*n^2 - 652835028992/911337863661225*n^3 + 137438953472/128898903793275*n^4 - 3332894621696/2715766559230725*n^5 + 68719476736/60350367982905*n^6 - 18794776887296/21545081369897085*n^7 + 27762668601344/49647361417588935*n^8 - 34359738368/113846357221905*n^9 + 74972949118976/546120975593478285*n^10 - 9036611190784/172305548449279245*n^11 + 643351741202432/38539007669822124465*n^12) * eps^17
+        - (304942678016/5509898065096425 - 68719476736/295301726364645*n + 86723979640832/190469613505196025*n^2 - 6665789243392/12697974233679735*n^3 + 57999238365184/221952194249856525*n^4 + 180938382245888/551300611523837175*n^5 - 35321811042304/35908468949828475*n^6 + 239212498518016/173013532212809925*n^7 - 91809220919296/66459166342063495*n^8 + 21784074125312/20226702799758455*n^9 - 2430333014245376/3580126395557246535*n^10 + 20911817807101952/59560284580634192355*n^11) * eps^18
+        - (2147483648/632789413638525 - 3058016714752/571408840515588075*n - 1168231104512/19703753121227175*n^2 + 2740292214063104/8952071834744213175*n^3 - 471827927269376/659626345717994655*n^4 + 287384886069690368/290535422273062191225*n^5 - 126580520233467904/165573950327659098225*n^6 + 73426760892416/8191814633902174275*n^7 + 7949743946727424/8971987456178571825*n^8 - 118514262413934592/82342907097816670305*n^9 + 2867242032764551168/1965489391160928347715*n^10) * eps^19
+        - (292057776128/22856353620623523 - 7765300871168/190469613505196025*n + 7284264534016/308692132232559075*n^2 + 68719476736/835916799082365*n^3 - 59394793498738688/456555663571954871925*n^4 - 20119482240335872/132848746027604123517*n^5 + 42939215642347175936/56460717061731752494725*n^6 - 948135883385602048/780562908687535748775*n^7 + 986509869987135488/1010572041655022771925*n^8 - 270217970507055104/5022917332966816888605*n^9) * eps^20
+        - (178241142784/190469613505196025 + 28621662060544/3836602214890377075*n - 238250425843712/3836602214890377075*n^2 + 373730874228736/2437749538523023725*n^3 - 22471975741209706496/169382151185195257484175*n^4 - 16232352634898481152/169382151185195257484175*n^5 + 70734537952329728/278131611141535726575*n^6 + 139064563512243126272/1427649559989502884509475*n^7 - 26056261464529829888/29571009561752012208855*n^8) * eps^21
+        - (313532612608/57755302159640085 - 44873818308608/3836602214890377075*n - 217016107532288/21740745884378803425*n^2 + 1808506343460438016/56460717061731752494725*n^3 + 209591930143637504/3456778595616229744575*n^4 - 40204026742784917504/169382151185195257484175*n^5 + 17961121261241237504/90031954233572253978075*n^6 + 121171809712218308608/784564172606843927523225*n^7) * eps^22
+        - (2147483648/26814079094227425 + 1452764097937408/168204718158088637025*n - 122625576908357632/2971616687459565920775*n^2 + 10274283326537728/174800981615268583575*n^3 + 270955536650862592/24197450169313608212025*n^4 - 714492347456237338624/9993546919926520191566325*n^5 - 17971202853986776383488/203202120705172577228515275*n^6) * eps^23
+        - (1206885810176/434637514620384075 - 31478708665581568/8914850062378697762325*n - 1921327850061824/217435367375090189325*n^2 - 2008361067347968/1026558492031486408995*n^3 + 43335953522509217792/587855701172148246562725*n^4 - 56042554411652231462912/609606362115517731685545825*n^5) * eps^24
+        + (229780750336/921431530995214239 - 309821760864256/41464418894784640755*n + 4327713982090575872/169382151185195257484175*n^2 - 2828328495191425024/144834013332268408573425*n^3 - 1522125277009729814528/67734040235057525742838425*n^4) * eps^25
+        - (98573794410496/63225886967224806825 - 47942074225393664/56460717061731752494725*n - 46815176099431972864/9993546919926520191566325*n^2 - 530028984910848458752/40640424141034515445703055*n^3) * eps^26
+        + (1007169830912/2724017805844152675 - 20291933767204864/3375058061440905164325*n + 5244397854327308288/333665222832795693314475*n^2) * eps^27
+        - (15753940041728/17017099469449942005 + 4223018003857408/88233660749097949295925*n) * eps^28
+        + 1187558457344/2967533069286582225 * eps^29;
+C4[17] = + (2147483648/26442675480375 - 34359738368/114584927081625*n + 68719476736/134228057438475*n^2 - 34359738368/58301075453075*n^3 + 137438953472/253891780198875*n^4 - 34359738368/82295956340325*n^5 + 206158430208/746759603828875*n^6 - 34359738368/217627084544415*n^7 + 274877906944/3510419494172955*n^8 - 309237645312/9193955818072025*n^9 + 68719476736/5516373490843215*n^10 - 34359738368/8702300426731275*n^11 + 412316860416/389282905755779035*n^12) * eps^17
+        - (4294967296/343754781244875 - 137438953472/1565994003448875*n + 19516331393024/67337742148301625*n^2 - 52639119179776/86577097047816375*n^3 + 549755813888/595684901368375*n^4 - 14156212207616/12993617106622425*n^5 + 357616156934144/342762658157453625*n^6 - 11407433138176/13731232715302375*n^7 + 825733232459776/1480226886709596025*n^8 - 20478404067328/64357690726504175*n^9 + 16767552323584/108488678653249895*n^10 - 192002218000384/3008095180840110725*n^11) * eps^18
+        - (672162381824/14093946031039875 - 446676598784/2219925565328625*n + 1168231104512/2927727919491375*n^2 - 504504038457344/1054957960323392125*n^3 + 56045268763672576/199387054501121111625*n^4 + 299170241970176/1433226184574654925*n^5 - 2212698431422464/2787440241206382125*n^6 + 277867204182016/232091323700110875*n^7 - 4011293296033792/3171914757234848625*n^8 + 91101719546560512/87333386315866165475*n^9 - 97236616472428544/138973997354813115495*n^10) * eps^19
+        - (8589934592/2927727919491375 - 274877906944/46618436871901125*n - 246840360435712/5696772985746317475*n^2 + 5429663295864832/22154117166791234625*n^3 - 2036694657362034688/3389579926519058897625*n^4 + 1858884660575076352/2113502777711883783225*n^5 - 15175708525948043264/19960859567278902397125*n^6 + 132330897327259648/827869751638295491125*n^7 + 7537479862869557248/11790007152641932339125*n^8 - 6483944038931103744/5327336565267836093975*n^9) * eps^20
+        - (6762426007552/606039679334714625 - 1044982722985984/28483864928731587375*n + 9552007266304/369920323749760875*n^2 + 222305823613779968/3389579926519058897625*n^3 - 34475324527869952/269336935690419972375*n^4 - 470625336426496/6264960282668182095*n^5 + 3519193123127296/5942893780988789625*n^6 - 43409782051822370816/40923615560714660899125*n^7 + 557434867142939901952/563689801433069683997625*n^8) * eps^21
+        - (442381631488/499716928574238375 + 8108898254848/1499150785722715125*n - 184992831373312/3640794765326593875*n^2 + 14573614309310464/108679816155783497625*n^3 - 34212953565691904/255544432582517953875*n^4 - 399858431600623616/7185909444220404862965*n^5 + 528521220698669056/2220661309496144389875*n^6 - 1001307509790605312/60886354858624251581625*n^7) * eps^22
+        - (2407329169408/499716928574238375 - 282471409123328/25485563357286157125*n - 34565896798208/4911763119767877555*n^2 + 119606249259008/3783571030633519125*n^3 + 14237438629117952/373488016851372394125*n^4 - 322117427598983168/1599881725316995799679*n^5 + 501588313596791619584/2368323085141871529469875*n^6) * eps^23
+        - (17179869184/118537503987377475 + 59923383713792/8714418438297847275*n - 975266813837312/27566017508901353625*n^2 + 46008514308472832/827869751638295491125*n^3 + 98201781523185664/89069045632143673721625*n^4 - 170579883200610304/2434995583254800593335*n^5) * eps^24
+        - (6444598427648/2572828300830793005 - 139397458558976/38592424512461895075*n - 196192800411222016/25663962300787160224875*n^2 + 367602162055774208/168241530638493605918625*n^3 + 18650877066060234752/308911706757635416887375*n^4) * eps^25
+        + (4294967296/27767187952228725 - 1173316345790464/190103424450275260925*n + 11436993233410850816/504724591915480817755875*n^2 - 5081081138781356032/250310569974344145391125*n^3) * eps^26
+        - (5310727061504/3714569735242026375 - 11122006791553024/10738821104584698250125*n - 22042390638362624/4867699621635467175195*n^2) * eps^27
+        + (1176821039104/4297247340770187375 - 175646982537216/34544538700609955875*n) * eps^28
+        - 602006238527488/697370271282346822875 * eps^29;
+C4[18] = + (8589934592/121132637200575 - 68719476736/261391480274925*n + 137438953472/303779287887075*n^2 - 68719476736/130191123380175*n^3 + 274877906944/556271163533475*n^4 - 68719476736/175853464600905*n^5 + 137438953472/515432568657825*n^6 - 68719476736/433617875220075*n^7 + 549755813888/6677715278389155*n^8 - 68719476736/1838791163614405*n^9 + 137438953472/9299029598849991*n^10 - 68719476736/13570354199278695*n^11) * eps^18
+        - (17179869184/1655479375074525 - 274877906944/3746611217273925*n + 549755813888/2247966730364355*n^2 - 824633720832/1586402947854725*n^3 + 80264348827648/99943385714847675*n^4 - 29961691856896/30891591948225645*n^5 + 1649267441664/1725969189601475*n^6 - 274877906944/349009509323475*n^7 + 2199023255552/3989829883314275*n^8 - 22265110462464/67438908352020205*n^9 + 224850127880192/1323561879569648719*n^10) * eps^19
+        - (1769526525952/42711367876922745 - 137438953472/784174440824775*n + 557177517375488/1584816544906870275*n^2 - 9758165696512/22411547099693115*n^3 + 210556476719104/728158953065318775*n^4 + 6389949263773696/54029394317446653105*n^5 - 1126174784749568/1765666480962308925*n^6 + 24452176529063936/23653421475379871175*n^7 - 35240447181848576/30623395201667356725*n^8 + 6613974757933056/6617809397848243595*n^9) * eps^20
+        - (17179869184/6743900191093065 - 274877906944/45280472711624865*n - 549755813888/17415566427548025*n^2 + 37220942501380096/188593168843917562725*n^3 - 5061923935373754368/9995437948727630824425*n^4 + 210619973515608064/270146971587233265525*n^5 - 540556749854212096/733256065736776006425*n^6 + 62215590579798016/233849231775512347995*n^7 + 37208280525474627584/85128663889892156358825*n^8) * eps^21
+        - (575525617664/58696909070624825 - 7490422964224/226402363558124325*n + 20753281974272/769768036097622705*n^2 + 15646943816450048/302892059052352449225*n^3 - 173465276589801472/1427919706961090117775*n^4 - 312763435504893952/14608717001986537358775*n^5 + 95646928817094656/209864695183152107175*n^6 - 266525260705169408/291246946317918204075*n^7) * eps^22
+        - (3058016714752/3697905271449363975 + 549755813888/141480246694611825*n - 11279889789353984/270146971587233265525*n^2 + 390507497523249152/3331812649575876941475*n^3 - 1085215777591656448/8257100914166303724525*n^4 - 259937076091977465856/11204885940523674154180425*n^5 + 3732761141304157536256/17525590830049849318077075*n^6) * eps^23
+        - (809755954118656/188593168843917562725 - 104456628295696384/9995437948727630824425*n - 9252940103548928/1999087589745526164885*n^2 + 520739427153084416/17264847365984089605825*n^3 + 236963197894260686848/11204885940523674154180425*n^4 - 2173497279199697698816/12896189478715926856698225*n^5) * eps^24
+        - (8211977469952/44424168661011692553 + 549755813888/100049426442396585*n - 5772652649614671872/189913321025824985664075*n^2 + 64786503302480134144/1244987326724852683797825*n^3 - 281804537728895811584/40205767198349654317941525*n^4) * eps^25
+        - (481783661461504/212668892526119804775 - 20856155030945792/5754949121994696535275*n - 324453099534024704/49799493068994107351913*n^2 + 20093572867302621184/3997064575274527037456175*n^3) * eps^26
+        + (7095285972992/82463448122372985525 - 496704377847808/97029641238005820575*n + 218039311403828903936/10849175275745144815952475*n^2) * eps^27
+        - (410444254674944/312819619211135826075 - 102777261723222016/87729180127319230317675*n) * eps^28
+        + 601295421440/2991617395646009559 * eps^29;
+C4[19] = + (17179869184/275520749478975 - 549755813888/2369478445519185*n + 1099511627776/2734013590983675*n^2 - 549755813888/1157645394380475*n^3 + 2199023255552/4862110656397995*n^4 - 549755813888/1502834202886653*n^5 + 1099511627776/4282269502849065*n^6 - 549755813888/3480662403793575*n^7 + 4398046511104/51436455522727275*n^8 - 549755813888/13487781670404041*n^9 + 5497558138880/321947484219644283*n^10) * eps^19
+        - (34359738368/3949130742531975 - 2199023255552/35542176682787775*n + 347445674377216/1670482304091025425*n^2 - 134140418588672/299830157144543025*n^3 + 8796093022208/12523618357388775*n^4 - 10995116277760/12697860004100271*n^5 + 6390361580634112/7301269502357655825*n^6 - 129742372077568/174349544044569075*n^7 + 14759844091265024/27312757882568183025*n^8 - 6955510557310976/20568867047366162525*n^9) * eps^20
+        - (17179869184/473895689103837 - 256735965085696/1670482304091025425*n + 1099511627776/3531675061503225*n^2 - 26276678636404736/66262464728944008525*n^3 + 234554417506942976/810440914761699796575*n^4 + 1092364802195456/21903808507072967475*n^5 - 70701896200880128/138724120544795460675*n^6 + 3123725178895335424/3507738476632685219925*n^7 - 50355798566745669632/48316268694263115771225*n^8) * eps^21
+        - (137438953472/61869714966334275 - 70368744177664/11693376128637177975*n - 35184372088832/1540987551835907175*n^2 + 4714705859903488/29511854038941449175*n^3 - 121949033659891712/284749510591948577175*n^4 + 10624202627199533056/15398377380472296134925*n^5 - 5751835595965988864/8184723112142932179825*n^6 + 455215406085308416/1345736145123231436575*n^7) * eps^22
+        - (33775622815744/3897792042879059325 - 5945059371384832/198787394186832025575*n + 6597069766656/241318671795096025*n^2 + 140795762471600128/3511910630634032451825*n^3 - 609362538252992512/5410240701247022966325*n^4 + 4538644361482600448/288062328068835393548475*n^5 + 155909009391241658368/450559025953819461704025*n^6) * eps^23
+        - (50783693307904/66262464728944008525 + 998356558020608/363301099720761977775*n - 362953186375368704/10535731891902097355475*n^2 + 6835782537139191808/66726301982046616584675*n^3 - 8847585350760005632/69884943495989651689275*n^4 + 1707339911901640392704/720443882500157319264735975*n^5) * eps^24
+        - (8097250303541248/2107146378380419471095 - 103462944662093824/10535731891902097355475*n - 535446769564123136/200178905946139849754025*n^2 + 12306584060557262848/437427979660083375388425*n^3 + 557162471658373513216/65494898409105210842248725*n^4) * eps^25
+        - (15530601742336/74721502779447498975 + 881509258313596928/200178905946139849754025*n - 14719628353967489024/562407402420107196927975*n^2 + 203822997141859598336/4213122119883960931372725*n^3) * eps^26
+        - (8392074038607872/4085283794819180607225 - 14119724364492439552/3936851816940750378495825*n - 438401893076171751424/80049320277795257696081775*n^2) * eps^27
+        + (240518168576/6628488955650844425 - 2724235770884784128/639258103371923087191425*n) * eps^28
+        - 1197385342517248/993297829878681822495 * eps^29;
+C4[20] = + (137438953472/2490990160674015 - 1099511627776/5337836058587175*n + 2199023255552/6118982798868225*n^2 - 1099511627776/2562650915765325*n^3 + 4398046511104/10596907840867425*n^4 - 1099511627776/3209349231805563*n^5 + 2199023255552/8914858977237675*n^6 - 1099511627776/7025073203261025*n^7 + 8796093022208/100046732170579425*n^8 - 9895604649984/226031506015012775*n^9) * eps^20
+        - (274877906944/37364852410110225 - 4398046511104/83626098251199075*n + 730075720843264/4097678814308754675*n^2 - 1974722883485696/5097112671457231425*n^3 + 474989023199232/769649491701519275*n^4 - 4398046511104/5673092076423975*n^5 + 1222656930086912/1524440885107642425*n^6 - 3003865767084032/4282952962921471575*n^7 + 31067800554438656/58994223069918334275*n^8) * eps^21
+        - (18691697672192/585382687758393525 - 1666859627708416/12293036442926264025*n + 57887088179150848/208981619529746488425*n^2 - 1334644388399153152/3692008611692187962175*n^3 + 4521191813414912/15890998328660780325*n^4 - 655308930154496/394830189242879388075*n^5 - 7714173580476416/19078608653013827925*n^6 + 600012291370385408/783780392214629298225*n^7) * eps^22
+        - (274877906944/141299269458922575 - 1218258883575808/208981619529746488425*n - 180610178024996864/11076025835076563886525*n^2 + 479664146640535552/3692008611692187962175*n^3 - 2637051095871913984/7256706581601886684275*n^4 + 184775141265151885312/302834755149288490653525*n^5 - 11443717021892608/17286398928081978975*n^6) * eps^23
+        - (536286796447744/69660539843248829475 - 300168873406103552/11076025835076563886525*n + 43017292925108224/1582289405010937698075*n^2 + 6426889555932086272/210444490866454713843975*n^3 - 425316984525521158144/4138741653706942705598175*n^4 + 30568622275428352/748214369811373640175*n^5) * eps^24
+        - (237219633692672/335637146517471632925 + 1614083069575168/852001987313581837425*n - 857627865758302208/30063498695207816263425*n^2 + 370804592201131098112/4138741653706942705598175*n^3 - 3142647162680895340544/26116886987185190176705725*n^4) * eps^25
+        - (38242113925677056/11076025835076563886525 - 215297570858074112/23382721207383857093775*n - 4560536737503248384/4138741653706942705598175*n^2 + 6519761472431813820416/252463240876123505041488675*n^3) * eps^26
+        - (40956808134656/186729805560296995425 + 146855171052273664/41525835990370662597975*n - 743768959490749104128/32929987940363935440194175*n^2) * eps^27
+        - (8472149408874496/4536435864494274065325 - 1836887006316068864/522698221275618022860225*n) * eps^28
+        + 549755813888/1740393633548117723175 * eps^29;
+C4[21] = + (274877906944/5598218305347525 - 4398046511104/23919660031939425*n + 8796093022208/27257287013140275*n^2 - 4398046511104/11301801932277675*n^3 + 17592186044416/46076577108516675*n^4 - 4398046511104/13698441843072525*n^5 + 8796093022208/37181485002625425*n^6 - 4398046511104/28489709287725975*n^7 + 35184372088832/392422769866419075*n^8) * eps^21
+        - (549755813888/87705420117111225 - 17592186044416/390687780521677275*n + 35184372088832/229023871340293575*n^2 - 2761973208973312/8186271866279795925*n^3 + 70368744177664/129195108363095775*n^4 - 2234207627640832/3210001538559995025*n^5 + 3764727813505024/5118651102028100175*n^6 - 4204532464615424/6372198310688043075*n^7) * eps^22
+        - (364762982514688/12892696757215350075 - 479387069710336/3985015361321108205*n + 261411088526999552/1056029070750093674325*n^2 - 1277645705615245312/3872106592750343472525*n^3 + 228698418577408/827736245792199975*n^4 - 3003865767084032/74608217578045944975*n^5 - 333714973169549312/1050254139752492917725*n^6) * eps^23
+        - (1099511627776/642744413116307775 - 5875790138834944/1056029070750093674325*n - 18929192183791616/1659474254035861488225*n^2 + 4683145478139805696/44142015157353915586785*n^3 - 4028567116287362203648/13021894471419405098101575*n^4 + 109531870615417389056/202999121583588988240275*n^5) * eps^24
+        - (1451630226571264/211205814150018734865 - 285991770477559808/11616319778251030417575*n + 841091210876551168/31530010826681368276275*n^2 + 8952412789352169472/394602862770285002972775*n^3 - 629287817602805006336/6789192844073365051146975*n^4) * eps^25
+        - (109401406963712/168352460554362759675 + 12015463068336128/9596090251598677301475*n - 13419213961564258304/566169324844321960787025*n^2 + 180572689076536213504/2302421921033575973867235*n^3) * eps^26
+        - (29879503362719744/9596090251598677301475 - 36156340367785984/4193846850698681191015*n + 1788694312159019008/11512109605167879869336175*n^2) * eps^27
+        - (2476100185751552/11101359310672979623275 + 14029979476654292992/4933761259357662801144075*n) * eps^28
+        - 1109241755926003712/651628845575540369962425 * eps^29;
+C4[22] = + (1099511627776/25032202359006375 - 8796093022208/53329474590926625*n + 17592186044416/60440071203050175*n^2 - 8796093022208/24831967238462475*n^3 + 35184372088832/99933526691373375*n^4 - 8796093022208/29211338571324525*n^5 + 17592186044416/77633737644511125*n^6 - 8796093022208/57987648934471575*n^7) * eps^22
+        - (2199023255552/408859305197104125 - 35184372088832/906601068045752625*n + 70368744177664/528020402268405375*n^2 - 35184372088832/119122926001954875*n^3 + 12525636463624192/25949405764193286375*n^4 - 35184372088832/56153124521819325*n^5 + 118289858962653184/175219345863661609125*n^6) * eps^23
+        - (525566558076928/20851824565052310375 - 5154510511013888/48049856606424889125*n + 2498090418307072/11245711120652633625*n^2 - 1009738702391345152/3347473343580933942375*n^3 + 52541456158950424576/197500927271275102600125*n^4 - 3862311669493399552/56035146807198982598175*n^5) * eps^24
+        - (24189255811072/16016618868808296375 - 2779565395017728/528548422670673780375*n - 25825329113202688/3347473343580933942375*n^2 + 1561165773953564672/17954629751934100236375*n^3 - 9549604208874704863232/36142669690643343775822875*n^4) * eps^25
+        - (3257852953100288/528548422670673780375 - 202310139510784/9022839201026776125*n + 15361127418077118464/592502781813825307800375*n^2 + 27973484562807259136/1721079509078254465515375*n^3) * eps^26
+        - (1996713116041216/3347473343580933942375 + 8584986789675008/11179297770072175618875*n - 713879932158309564416/36142669690643343775822875*n^2) * eps^27
+        - (1669577620452278272/592502781813825307800375 - 97178602390656385024/12047556563547781258607625*n) * eps^28
+        - 2014305302085632/9092495519658702836685 * eps^29;
+C4[23] = + (2199023255552/55699673461634475 - 140737488355328/946894448847786075*n + 281474976710656/1067774591253886425*n^2 - 140737488355328/435019277918250025*n^3 + 562949953421312/1729960384279552425*n^4 - 140737488355328/497891037426798015*n^5 + 281474976710656/1297921080471567475*n^6) * eps^23
+        - (4398046511104/946894448847786075 - 562949953421312/16728468596310887325*n + 21392098230009856/184013154559419760575*n^2 - 57983845202395136/223164889572062262825*n^3 + 6755399441055744/15730858404721234775*n^4 - 78250043525562368/138358387178269092835*n^5) * eps^24
+        - (226499395321856/10037081157786532395 - 140737488355328/1464295659624029925*n + 2098958901331361792/10488749809886926352775*n^2 - 56978557323073028096/206278746261109551604575*n^3 + 22721223070037573632/89241159729983564878575*n^4) * eps^25
+        - (35184372088832/26287593508488537225 - 51791395714760704/10488749809886926352775*n - 3048936947729825792/618836238783328654813725*n^2 + 21939285584735371264/306902524925065430436075*n^3) * eps^26
+        - (58221339713994752/10488749809886926352775 - 324822123124097024/15867595866239196277275*n + 314868042047701385216/12583003521927682647879075*n^2) * eps^27
+        - (22570774694985728/41255749252221910320915 + 434597364041252864/1078543159022372798389635*n) * eps^28
+        - 19316123519745523712/7549802113156609588727445 * eps^29;
+C4[24] = + (35184372088832/987187829649819525 - 281474976710656/2092838198857617393*n + 562949953421312/2349104100758550135*n^2 - 281474976710656/949637827966222395*n^3 + 1125899906842624/3735242123333808087*n^4 - 1407374883553280/5298831849380518449*n^5) * eps^24
+        - (70368744177664/17440318323813478275 - 1125899906842624/38368700312389652205*n + 2251799813685248/22091069876830405815*n^2 - 201536083324829696/877781898983444900445*n^3 + 436849163854938112/1139248847616811466535*n^4) * eps^25
+        - (11681211533492224/575530504685844783075 - 9007199254740992/104143615133629055985*n + 864691128455135232/4779034783354311124645*n^2 - 21446141425538301952/84635164389081187336455*n^3) * eps^26
+        - (70368744177664/59108538319086761505 - 595601050719748096/129033939150566400365415*n - 22195990763495489536/7871070288184550422290315*n^2) * eps^27
+        - (15058911254020096/3000789282571311636405 - 49153412233028435968/2623690096061516807430105*n) * eps^28
+        - 101260622871658496/201822315081655139033085 * eps^29;
+C4[25] = + (70368744177664/2178260166157928307 - 1125899906842624/9215716087591235145*n + 2251799813685248/10299917980249027515*n^2 - 1125899906842624/4133980685950289955*n^3 + 4503599627370496/16096137564444745995*n^4) * eps^25
+        - (140737488355328/39934769712895352295 - 4503599627370496/175098605664233467755*n + 927741523238322176/10330817734189774597545*n^2 - 58546795155816448/287359727216405038965*n^3) * eps^26
+        - (41728665297354752/2276281873635035080815 - 269090077735387136/3443605911396591532515*n + 34481810546962202624/210059960595192083483415*n^2) * eps^27
+        - (3659174697238528/3443605911396591532515 - 9007199254740992/2093620869719522426745*n) * eps^28
+        - 260856934666600448/57289080162325113677295 * eps^29;
+C4[26] = + (281474976710656/9577116718477165935 - 2251799813685248/20218357516785128085*n + 4503599627370496/22507228179062689755*n^2 - 6755399441055744/26920410174957334805*n^3) * eps^26
+        - (562949953421312/181965217651066152765 - 9007199254740992/397627697830107519005*n + 1927540640514572288/24255289567636558659305*n^2) * eps^27
+        - (178455135234555904/10735947841412903013135 - 1031324314667843584/14553173740581935195583*n) * eps^28
+        - 562949953421312/591592428478940455105 * eps^29;
+C4[27] = + (562949953421312/20981314404210981975 - 18014398509481984/176842507121206848075*n + 36028797018963968/196134416988974867865*n^2) * eps^27
+        - (1125899906842624/412632516616149312175 - 72057594037927936/3595797644797872577525*n) * eps^28
+        - 1142225455491842048/75511750540755324128025 * eps^29;
+C4[28] = + (4503599627370496/183273143743796188005 - 36028797018963968/385505578219709223045*n) * eps^28
+        - 9007199254740992/3726553922790522489435 * eps^29;
+C4[29] = + 9007199254740992/399032089736190248415 * eps^29;
     </pre>
   </body>
 </html>
diff --git a/doc/html/Accumulator_8hpp.html b/doc/html/Accumulator_8hpp.html
deleted file mode 100644
index c2471d8..0000000
--- a/doc/html/Accumulator_8hpp.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Accumulator.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Accumulator.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">GeographicLib::Accumulator</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="Accumulator_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An accumulator for sums.  <a href="classGeographicLib_1_1Accumulator.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Accumulator_8hpp.html#af2ea0de968b20eb37534fa6baedcba54">GEOGRAPHICLIB_ACCUMULATOR_HPP</a>   "$Id: 03b7f4fdb9974c822f98d5f5aab1094b5a9ac8f2 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">GeographicLib::Accumulator</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="af2ea0de968b20eb37534fa6baedcba54"></a><!-- doxytag: member="Accumulator.hpp::GEOGRAPHICLIB_ACCUMULATOR_HPP" ref="af2ea0de968b20eb37534fa6baedcba54" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_ACCUMULATOR_HPP   "$Id: 03b7f4fdb9974c822f98d5f5aab1094b5a9ac8f2 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00011">11</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Accumulator_8hpp_source.html b/doc/html/Accumulator_8hpp_source.html
deleted file mode 100644
index bfa4c47..0000000
--- a/doc/html/Accumulator_8hpp_source.html
+++ /dev/null
@@ -1,264 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Accumulator.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Accumulator.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Accumulator_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Accumulator.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::Accumulator class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_ACCUMULATOR_HPP)</span>
-<a name="l00011"></a><a class="code" href="Accumulator_8hpp.html#af2ea0de968b20eb37534fa6baedcba54">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_ACCUMULATOR_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 03b7f4fdb9974c822f98d5f5aab1094b5a9ac8f2 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 
-<a name="l00016"></a>00016 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00017"></a>00017 <span class="comment"></span>
-<a name="l00018"></a>00018 <span class="comment">  /**</span>
-<a name="l00019"></a>00019 <span class="comment">   * \brief An accumulator for sums.</span>
-<a name="l00020"></a>00020 <span class="comment">   *</span>
-<a name="l00021"></a>00021 <span class="comment">   * This allow many numbers of floating point type \e T to be added together</span>
-<a name="l00022"></a>00022 <span class="comment">   * with twice the normal precision.  Thus if \e T is double, the effective</span>
-<a name="l00023"></a>00023 <span class="comment">   * precision of the sum is 106 bits or about 32 decimal places.  The core</span>
-<a name="l00024"></a>00024 <span class="comment">   * idea is the error free transformation of a sum, D. E. Knuth, TAOCP, Vol 2,</span>
-<a name="l00025"></a>00025 <span class="comment">   * 4.2.2, Theorem B.</span>
-<a name="l00026"></a>00026 <span class="comment">   *</span>
-<a name="l00027"></a>00027 <span class="comment">   * The implementation follows J. R. Shewchuk,</span>
-<a name="l00028"></a>00028 <span class="comment">   * <a href="http://dx.doi.org/10.1007/PL00009321"> Adaptive Precision</span>
-<a name="l00029"></a>00029 <span class="comment">   * Floating-Point Arithmetic and Fast Robust Geometric Predicates</a>,</span>
-<a name="l00030"></a>00030 <span class="comment">   * Discrete & Computational Geometry 18(3) 305-363 (1997).</span>
-<a name="l00031"></a>00031 <span class="comment">   *</span>
-<a name="l00032"></a>00032 <span class="comment">   * Approximate timings (summing a vector<double>)</span>
-<a name="l00033"></a>00033 <span class="comment">   * - double:               2ns</span>
-<a name="l00034"></a>00034 <span class="comment">   * - Accumulator<double>: 23ns</span>
-<a name="l00035"></a>00035 <span class="comment">   *</span>
-<a name="l00036"></a>00036 <span class="comment">   * In the documentation of the member functions, \e sum stands for the value</span>
-<a name="l00037"></a>00037 <span class="comment">   * currently held in the accumulator.</span>
-<a name="l00038"></a>00038 <span class="comment">   *</span>
-<a name="l00039"></a>00039 <span class="comment">   * Example of use:</span>
-<a name="l00040"></a>00040 <span class="comment">   * \include example-Accumulator.cpp</span>
-<a name="l00041"></a>00041 <span class="comment">   **********************************************************************/</span>
-<a name="l00042"></a>00042   <span class="keyword">template</span><<span class="keyword">typename</span> T = Math::real>
-<a name="l00043"></a>00043   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> Accumulator {
-<a name="l00044"></a>00044   <span class="keyword">private</span>:
-<a name="l00045"></a>00045     <span class="comment">// _s + _t accumulates for the sum.</span>
-<a name="l00046"></a>00046     T _s, _t;
-<a name="l00047"></a>00047     <span class="comment">// Error free transformation of a sum.  Note that t can be the same as one</span>
-<a name="l00048"></a>00048     <span class="comment">// of the first two arguments.</span>
-<a name="l00049"></a>00049     <span class="keyword">static</span> <span class="keyword">inline</span> T sum(T u, T v, T& t) {
-<a name="l00050"></a>00050       <span class="keyword">volatile</span> T s = u + v;
-<a name="l00051"></a>00051       <span class="keyword">volatile</span> T up = s - v;
-<a name="l00052"></a>00052       <span class="keyword">volatile</span> T vpp = s - up;
-<a name="l00053"></a>00053       up -= u;
-<a name="l00054"></a>00054       vpp -= v;
-<a name="l00055"></a>00055       t = -(up + vpp);
-<a name="l00056"></a>00056       <span class="comment">// u + v =       s      + t</span>
-<a name="l00057"></a>00057       <span class="comment">//       = round(u + v) + t</span>
-<a name="l00058"></a>00058       <span class="keywordflow">return</span> s;
-<a name="l00059"></a>00059     }
-<a name="l00060"></a>00060     <span class="comment">// Same as sum, but requires abs(u) >= abs(v).  This isn't currently used.</span>
-<a name="l00061"></a>00061     <span class="keyword">static</span> <span class="keyword">inline</span> T fastsum(T u, T v, T& t) {
-<a name="l00062"></a>00062       <span class="keyword">volatile</span> T s = u + v;
-<a name="l00063"></a>00063       <span class="keyword">volatile</span> T vp = s - u;
-<a name="l00064"></a>00064       t = v - vp;
-<a name="l00065"></a>00065       <span class="keywordflow">return</span> s;
-<a name="l00066"></a>00066     }
-<a name="l00067"></a>00067     <span class="keywordtype">void</span> Add(T y) <span class="keywordflow">throw</span>() {
-<a name="l00068"></a>00068       <span class="comment">// Here's Shewchuk's solution...</span>
-<a name="l00069"></a>00069       T u;                      <span class="comment">// hold exact sum as [s, t, u]</span>
-<a name="l00070"></a>00070       y  = sum(y, _t,  u);      <span class="comment">// Accumulate starting at least significant end</span>
-<a name="l00071"></a>00071       _s = sum(y, _s, _t);
-<a name="l00072"></a>00072       <span class="comment">// Start is _s, _t decreasing and non-adjacent.  Sum is now (s + t + u)</span>
-<a name="l00073"></a>00073       <span class="comment">// exactly with s, t, u non-adjacent and in decreasing order (except for</span>
-<a name="l00074"></a>00074       <span class="comment">// possible zeros).  The following code tries to normalize the result.</span>
-<a name="l00075"></a>00075       <span class="comment">// Ideally, we want _s = round(s+t+u) and _u = round(s+t+u - _s).  The</span>
-<a name="l00076"></a>00076       <span class="comment">// following does an approximate job (and maintains the decreasing</span>
-<a name="l00077"></a>00077       <span class="comment">// non-adjacent property).  Here are two "failures" using 3-bit floats:</span>
-<a name="l00078"></a>00078       <span class="comment">//</span>
-<a name="l00079"></a>00079       <span class="comment">// Case 1: _s is not equal to round(s+t+u) -- off by 1 ulp</span>
-<a name="l00080"></a>00080       <span class="comment">// [12, -1] - 8 -> [4, 0, -1] -> [4, -1] = 3 should be [3, 0] = 3</span>
-<a name="l00081"></a>00081       <span class="comment">//</span>
-<a name="l00082"></a>00082       <span class="comment">// Case 2: _s+_t is not as close to s+t+u as it shold be</span>
-<a name="l00083"></a>00083       <span class="comment">// [64, 5] + 4 -> [64, 8, 1] -> [64,  8] = 72 (off by 1)</span>
-<a name="l00084"></a>00084       <span class="comment">//                    should be [80, -7] = 73 (exact)</span>
-<a name="l00085"></a>00085       <span class="comment">//</span>
-<a name="l00086"></a>00086       <span class="comment">// "Fixing" these problems is probably not worth the expense.  The</span>
-<a name="l00087"></a>00087       <span class="comment">// representation inevitably leads to small errors in the accumulated</span>
-<a name="l00088"></a>00088       <span class="comment">// values.  The additional errors illustrated here amount to 1 ulp of the</span>
-<a name="l00089"></a>00089       <span class="comment">// less significant word during each addition to the Accumulator and an</span>
-<a name="l00090"></a>00090       <span class="comment">// additional possible error of 1 ulp in the reported sum.</span>
-<a name="l00091"></a>00091       <span class="comment">//</span>
-<a name="l00092"></a>00092       <span class="comment">// Incidentally, the "ideal" representation described above is not</span>
-<a name="l00093"></a>00093       <span class="comment">// canonical, because _s = round(_s + _t) may not be true.  For example,</span>
-<a name="l00094"></a>00094       <span class="comment">// with 3-bit floats:</span>
-<a name="l00095"></a>00095       <span class="comment">//</span>
-<a name="l00096"></a>00096       <span class="comment">// [128, 16] + 1 -> [160, -16] -- 160 = round(145).</span>
-<a name="l00097"></a>00097       <span class="comment">// But [160, 0] - 16 -> [128, 16] -- 128 = round(144).</span>
-<a name="l00098"></a>00098       <span class="comment">//</span>
-<a name="l00099"></a>00099       <span class="keywordflow">if</span> (_s == 0)              <span class="comment">// This implies t == 0,</span>
-<a name="l00100"></a>00100         _s = u;                 <span class="comment">// so result is u</span>
-<a name="l00101"></a>00101       <span class="keywordflow">else</span>
-<a name="l00102"></a>00102         _t += u;                <span class="comment">// otherwise just accumulate u to t.</span>
-<a name="l00103"></a>00103     }
-<a name="l00104"></a>00104     T Sum(T y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00105"></a>00105       Accumulator a(*<span class="keyword">this</span>);
-<a name="l00106"></a>00106       a.Add(y);
-<a name="l00107"></a>00107       <span class="keywordflow">return</span> a._s;
-<a name="l00108"></a>00108     }
-<a name="l00109"></a>00109   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00110"></a>00110 <span class="comment">    /**</span>
-<a name="l00111"></a>00111 <span class="comment">     * Construct from a \e T.  This is not declared explicit, so that you can</span>
-<a name="l00112"></a>00112 <span class="comment">     * write <code>Accumulator<double> a = 5;</code>.</span>
-<a name="l00113"></a>00113 <span class="comment">     *</span>
-<a name="l00114"></a>00114 <span class="comment">     * @param[in] y set \e sum = \e y.</span>
-<a name="l00115"></a>00115 <span class="comment">     **********************************************************************/</span>
-<a name="l00116"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#a6d30e4a792644ffc78546dda4b5d0022">00116</a>     <a class="code" href="classGeographicLib_1_1Accumulator.html#a6d30e4a792644ffc78546dda4b5d0022">Accumulator</a>(T y = T(0)) throw() : _s(y), _t(0) {
-<a name="l00117"></a>00117       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(!std::numeric_limits<T>::is_integer,
-<a name="l00118"></a>00118                     <span class="stringliteral">"Accumulator type is not floating point"</span>);
-<a name="l00119"></a>00119     }<span class="comment"></span>
-<a name="l00120"></a>00120 <span class="comment">    /**</span>
-<a name="l00121"></a>00121 <span class="comment">     * Set the accumulator to a number.</span>
-<a name="l00122"></a>00122 <span class="comment">     *</span>
-<a name="l00123"></a>00123 <span class="comment">     * @param[in] y set \e sum = \e y.</span>
-<a name="l00124"></a>00124 <span class="comment">     **********************************************************************/</span>
-<a name="l00125"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#a9cd31c9155208a2de0fdd9810f2a9dd8">00125</a>     Accumulator& <a class="code" href="classGeographicLib_1_1Accumulator.html#a9cd31c9155208a2de0fdd9810f2a9dd8">operator=</a>(T y) <span class="keywordflow">throw</span>() { _s = y; _t = 0; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span>
-<a name="l00126"></a>00126 <span class="comment">    /**</span>
-<a name="l00127"></a>00127 <span class="comment">     * Return the value held in the accumulator.</span>
-<a name="l00128"></a>00128 <span class="comment">     *</span>
-<a name="l00129"></a>00129 <span class="comment">     * @return \e sum.</span>
-<a name="l00130"></a>00130 <span class="comment">     **********************************************************************/</span>
-<a name="l00131"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#af74ec2f9a77fcc82819111e6bb87b375">00131</a>     T <a class="code" href="classGeographicLib_1_1Accumulator.html#af74ec2f9a77fcc82819111e6bb87b375">operator()</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _s; }<span class="comment"></span>
-<a name="l00132"></a>00132 <span class="comment">    /**</span>
-<a name="l00133"></a>00133 <span class="comment">     * Return the result of adding a number to \e sum (but don't change \e sum).</span>
-<a name="l00134"></a>00134 <span class="comment">     *</span>
-<a name="l00135"></a>00135 <span class="comment">     * @param[in] y the number to be added to the sum.</span>
-<a name="l00136"></a>00136 <span class="comment">     * @return \e sum + \e y.</span>
-<a name="l00137"></a>00137 <span class="comment">     **********************************************************************/</span>
-<a name="l00138"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#a1a2b7ac3fd3b067a1c9930cb02a102b2">00138</a>     T <a class="code" href="classGeographicLib_1_1Accumulator.html#a1a2b7ac3fd3b067a1c9930cb02a102b2">operator()</a>(T y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> Sum(y); }<span class="comment"></span>
-<a name="l00139"></a>00139 <span class="comment">    /**</span>
-<a name="l00140"></a>00140 <span class="comment">     * Add a number to the accumulator.</span>
-<a name="l00141"></a>00141 <span class="comment">     *</span>
-<a name="l00142"></a>00142 <span class="comment">     * @param[in] y set \e sum += \e y.</span>
-<a name="l00143"></a>00143 <span class="comment">     **********************************************************************/</span>
-<a name="l00144"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#adc56d12f08b8a61b19dd78ce532285d4">00144</a>     Accumulator& <a class="code" href="classGeographicLib_1_1Accumulator.html#adc56d12f08b8a61b19dd78ce532285d4">operator+=</a>(T y) <span class="keywordflow">throw</span>() { Add(y); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span>
-<a name="l00145"></a>00145 <span class="comment">    /**</span>
-<a name="l00146"></a>00146 <span class="comment">     * Subtract a number from the accumulator.</span>
-<a name="l00147"></a>00147 <span class="comment">     *</span>
-<a name="l00148"></a>00148 <span class="comment">     * @param[in] y set \e sum -= \e y.</span>
-<a name="l00149"></a>00149 <span class="comment">     **********************************************************************/</span>
-<a name="l00150"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#abf3e43f38791c48d1fa09e4fb569827b">00150</a>     Accumulator& <a class="code" href="classGeographicLib_1_1Accumulator.html#abf3e43f38791c48d1fa09e4fb569827b">operator-=</a>(T y) <span class="keywordflow">throw</span>() { Add(-y); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span>
-<a name="l00151"></a>00151 <span class="comment">    /**</span>
-<a name="l00152"></a>00152 <span class="comment">     * Multiply accumulator by an integer.  To avoid loss of accuracy, use only</span>
-<a name="l00153"></a>00153 <span class="comment">     * integers such that \e n * \e T is exactly representable as a \e T (i.e.,</span>
-<a name="l00154"></a>00154 <span class="comment">     * +/- powers of two).  Use \e n = -1 to negate \e sum.</span>
-<a name="l00155"></a>00155 <span class="comment">     *</span>
-<a name="l00156"></a>00156 <span class="comment">     * @param[in] n set \e sum *= \e n.</span>
-<a name="l00157"></a>00157 <span class="comment">     **********************************************************************/</span>
-<a name="l00158"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#a2b0bc40e9722e1ffac89ecfeb601fb23">00158</a>     Accumulator& <a class="code" href="classGeographicLib_1_1Accumulator.html#a2b0bc40e9722e1ffac89ecfeb601fb23">operator*=</a>(<span class="keywordtype">int</span> n) <span class="keywordflow">throw</span>() { _s *= n; _t *= n; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span>
-<a name="l00159"></a>00159 <span class="comment">    /**</span>
-<a name="l00160"></a>00160 <span class="comment">     * Test equality of an Accumulator with a number.</span>
-<a name="l00161"></a>00161 <span class="comment">     **********************************************************************/</span>
-<a name="l00162"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#a6ea5d769a36e01327f3633b39cd38290">00162</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Accumulator.html#a6ea5d769a36e01327f3633b39cd38290">operator==</a>(T y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> _s == y; }<span class="comment"></span>
-<a name="l00163"></a>00163 <span class="comment">    /**</span>
-<a name="l00164"></a>00164 <span class="comment">     * Test inequality of an Accumulator with a number.</span>
-<a name="l00165"></a>00165 <span class="comment">     **********************************************************************/</span>
-<a name="l00166"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#a4102ce7aac36753c2b0390c4fc951a42">00166</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Accumulator.html#a4102ce7aac36753c2b0390c4fc951a42">operator!=</a>(T y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> _s != y; }<span class="comment"></span>
-<a name="l00167"></a>00167 <span class="comment">    /**</span>
-<a name="l00168"></a>00168 <span class="comment">     * Less operator on an Accumulator and a number.</span>
-<a name="l00169"></a>00169 <span class="comment">     **********************************************************************/</span>
-<a name="l00170"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#a9a7299c02ec8805d951309fdae60e57f">00170</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Accumulator.html#a9a7299c02ec8805d951309fdae60e57f">operator<</a>(T y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> _s < y; }<span class="comment"></span>
-<a name="l00171"></a>00171 <span class="comment">    /**</span>
-<a name="l00172"></a>00172 <span class="comment">     * Less or equal operator on an Accumulator and a number.</span>
-<a name="l00173"></a>00173 <span class="comment">     **********************************************************************/</span>
-<a name="l00174"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#afb83bdb43b78e20f76e2a7e5e2440386">00174</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Accumulator.html#afb83bdb43b78e20f76e2a7e5e2440386">operator<=</a>(T y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> _s <= y; }<span class="comment"></span>
-<a name="l00175"></a>00175 <span class="comment">    /**</span>
-<a name="l00176"></a>00176 <span class="comment">     * Greater operator on an Accumulator and a number.</span>
-<a name="l00177"></a>00177 <span class="comment">     **********************************************************************/</span>
-<a name="l00178"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#af0e4a35c09b0b179ebf1e2f6912ddeb3">00178</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Accumulator.html#af0e4a35c09b0b179ebf1e2f6912ddeb3">operator></a>(T y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> _s > y; }<span class="comment"></span>
-<a name="l00179"></a>00179 <span class="comment">    /**</span>
-<a name="l00180"></a>00180 <span class="comment">     * Greater or equal operator on an Accumulator and a number.</span>
-<a name="l00181"></a>00181 <span class="comment">     **********************************************************************/</span>
-<a name="l00182"></a><a class="code" href="classGeographicLib_1_1Accumulator.html#aeafc5d10683648d37fe18ec75725196b">00182</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Accumulator.html#aeafc5d10683648d37fe18ec75725196b">operator>=</a>(T y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> _s >= y; }
-<a name="l00183"></a>00183   };
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 <span class="preprocessor">#endif  // GEOGRAPHICLIB_ACCUMULATOR_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/AlbersEqualArea_8cpp.html b/doc/html/AlbersEqualArea_8cpp.html
deleted file mode 100644
index e6d5dd4..0000000
--- a/doc/html/AlbersEqualArea_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: AlbersEqualArea.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">AlbersEqualArea.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="AlbersEqualArea_8hpp_source.html">GeographicLib/AlbersEqualArea.hpp</a>></code><br/>
-</div>
-<p><a href="AlbersEqualArea_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="AlbersEqualArea_8cpp.html#a0cbf05d716ed87a0d1bc3cc16e6adb2a">GEOGRAPHICLIB_ALBERSEQUALAREA_CPP</a>   "$Id: a7aa5e2e232feec5c866f0d645f110fd0bb38dd2 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="AlbersEqualArea_8cpp_source.html">AlbersEqualArea.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a0cbf05d716ed87a0d1bc3cc16e6adb2a"></a><!-- doxytag: member="AlbersEqualArea.cpp::GEOGRAPHICLIB_ALBERSEQUALAREA_CPP" ref="a0cbf05d716ed87a0d1bc3cc16e6adb2a" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_ALBERSEQUALAREA_CPP   "$Id: a7aa5e2e232feec5c866f0d645f110fd0bb38dd2 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8cpp_source.html#l00012">12</a> of file <a class="el" href="AlbersEqualArea_8cpp_source.html">AlbersEqualArea.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/AlbersEqualArea_8cpp_source.html b/doc/html/AlbersEqualArea_8cpp_source.html
deleted file mode 100644
index 5fbfbf5..0000000
--- a/doc/html/AlbersEqualArea_8cpp_source.html
+++ /dev/null
@@ -1,527 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: AlbersEqualArea.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">AlbersEqualArea.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="AlbersEqualArea_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file AlbersEqualArea.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::AlbersEqualArea class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="AlbersEqualArea_8hpp.html" title="Header for GeographicLib::AlbersEqualArea class.">GeographicLib/AlbersEqualArea.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="AlbersEqualArea_8cpp.html#a0cbf05d716ed87a0d1bc3cc16e6adb2a">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_ALBERSEQUALAREA_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: a7aa5e2e232feec5c866f0d645f110fd0bb38dd2 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="AlbersEqualArea_8cpp.html#a0cbf05d716ed87a0d1bc3cc16e6adb2a">GEOGRAPHICLIB_ALBERSEQUALAREA_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="AlbersEqualArea_8hpp.html#aa9494d369d907d2b285fcb2f45b4689c">GEOGRAPHICLIB_ALBERSEQUALAREA_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a><a class="code" href="namespaceGeographicLib.html">00018</a> namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a>::eps_ = numeric_limits<real>::epsilon();
-<a name="l00023"></a>00023   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a>::epsx_ = Math::sq(eps_);
-<a name="l00024"></a>00024   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a>::epsx2_ = Math::sq(epsx_);
-<a name="l00025"></a>00025   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a>::tol_ = sqrt(eps_);
-<a name="l00026"></a>00026   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a>::tol0_ = tol_ * sqrt(sqrt(eps_));
-<a name="l00027"></a>00027   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a>::ahypover_ =
-<a name="l00028"></a>00028     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(numeric_limits<real>::digits) * log(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(numeric_limits<real>::radix))
-<a name="l00029"></a>00029     + 2;
-<a name="l00030"></a>00030 
-<a name="l00031"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a08edd228ba175a5ae71d783c4a712e50">00031</a>   AlbersEqualArea::AlbersEqualArea(real a, real f, real stdlat, real k0)
-<a name="l00032"></a>00032     : _a(a)
-<a name="l00033"></a>00033     , _f(f <= 1 ? f : 1/f)
-<a name="l00034"></a>00034     , _fm(1 - _f)
-<a name="l00035"></a>00035     , _e2(_f * (2 - _f))
-<a name="l00036"></a>00036     , _e(sqrt(abs(_e2)))
-<a name="l00037"></a>00037     , _e2m(1 - _e2)
-<a name="l00038"></a>00038     , _qZ(1 + _e2m * atanhee(real(1)))
-<a name="l00039"></a>00039     , _qx(_qZ / ( 2 * _e2m ))
-<a name="l00040"></a>00040   {
-<a name="l00041"></a>00041     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00042"></a>00042       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00043"></a>00043     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f) && _f < 1))
-<a name="l00044"></a>00044       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00045"></a>00045     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(k0) && k0 > 0))
-<a name="l00046"></a>00046       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00047"></a>00047     <span class="keywordflow">if</span> (!(abs(stdlat) <= 90))
-<a name="l00048"></a>00048       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude not in [-90, 90]"</span>);
-<a name="l00049"></a>00049     real
-<a name="l00050"></a>00050       phi = stdlat * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00051"></a>00051       sphi = sin(phi),
-<a name="l00052"></a>00052       cphi = abs(stdlat) != 90 ? cos(phi) : 0;
-<a name="l00053"></a>00053     Init(sphi, cphi, sphi, cphi, k0);
-<a name="l00054"></a>00054   }
-<a name="l00055"></a>00055 
-<a name="l00056"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a3851897cd1944503f81b46b7ce372d2a">00056</a>   <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a08edd228ba175a5ae71d783c4a712e50">AlbersEqualArea::AlbersEqualArea</a>(real a, real f, real stdlat1, real stdlat2,
-<a name="l00057"></a>00057                                    real k1)
-<a name="l00058"></a>00058     : _a(a)
-<a name="l00059"></a>00059     , _f(f <= 1 ? f : 1/f)
-<a name="l00060"></a>00060     , _fm(1 - _f)
-<a name="l00061"></a>00061     , _e2(_f * (2 - _f))
-<a name="l00062"></a>00062     , _e(sqrt(abs(_e2)))
-<a name="l00063"></a>00063     , _e2m(1 - _e2)
-<a name="l00064"></a>00064     , _qZ(1 + _e2m * atanhee(real(1)))
-<a name="l00065"></a>00065     , _qx(_qZ / ( 2 * _e2m ))
-<a name="l00066"></a>00066   {
-<a name="l00067"></a>00067     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00068"></a>00068       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00069"></a>00069     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f) && _f < 1))
-<a name="l00070"></a>00070       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00071"></a>00071     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(k1) && k1 > 0))
-<a name="l00072"></a>00072       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00073"></a>00073     <span class="keywordflow">if</span> (!(abs(stdlat1) <= 90))
-<a name="l00074"></a>00074       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude 1 not in [-90, 90]"</span>);
-<a name="l00075"></a>00075     <span class="keywordflow">if</span> (!(abs(stdlat2) <= 90))
-<a name="l00076"></a>00076       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude 2 not in [-90, 90]"</span>);
-<a name="l00077"></a>00077     real
-<a name="l00078"></a>00078       phi1 = stdlat1 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00079"></a>00079       phi2 = stdlat2 * Math::degree<real>();
-<a name="l00080"></a>00080     Init(sin(phi1), abs(stdlat1) != 90 ? cos(phi1) : 0,
-<a name="l00081"></a>00081          sin(phi2), abs(stdlat2) != 90 ? cos(phi2) : 0, k1);
-<a name="l00082"></a>00082   }
-<a name="l00083"></a>00083 
-<a name="l00084"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a58535d87e148d0cc474f3139c5188371">00084</a>   <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a08edd228ba175a5ae71d783c4a712e50">AlbersEqualArea::AlbersEqualArea</a>(real a, real f,
-<a name="l00085"></a>00085                                    real sinlat1, real coslat1,
-<a name="l00086"></a>00086                                    real sinlat2, real coslat2,
-<a name="l00087"></a>00087                                    real k1)
-<a name="l00088"></a>00088     : _a(a)
-<a name="l00089"></a>00089     , _f(f <= 1 ? f : 1/f)
-<a name="l00090"></a>00090     , _fm(1 - _f)
-<a name="l00091"></a>00091     , _e2(_f * (2 - _f))
-<a name="l00092"></a>00092     , _e(sqrt(abs(_e2)))
-<a name="l00093"></a>00093     , _e2m(1 - _e2)
-<a name="l00094"></a>00094     , _qZ(1 + _e2m * atanhee(real(1)))
-<a name="l00095"></a>00095     , _qx(_qZ / ( 2 * _e2m ))
-<a name="l00096"></a>00096   {
-<a name="l00097"></a>00097     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00098"></a>00098       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00099"></a>00099     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f) && _f < 1))
-<a name="l00100"></a>00100       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00101"></a>00101     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(k1) && k1 > 0))
-<a name="l00102"></a>00102       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00103"></a>00103     <span class="keywordflow">if</span> (!(coslat1 >= 0))
-<a name="l00104"></a>00104       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude 1 not in [-90, 90]"</span>);
-<a name="l00105"></a>00105     <span class="keywordflow">if</span> (!(coslat2 >= 0))
-<a name="l00106"></a>00106       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude 2 not in [-90, 90]"</span>);
-<a name="l00107"></a>00107     <span class="keywordflow">if</span> (!(abs(sinlat1) <= 1 && coslat1 <= 1) || (coslat1 == 0 && sinlat1 == 0))
-<a name="l00108"></a>00108       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad sine/cosine of standard latitude 1"</span>);
-<a name="l00109"></a>00109     <span class="keywordflow">if</span> (!(abs(sinlat2) <= 1 && coslat2 <= 1) || (coslat2 == 0 && sinlat2 == 0))
-<a name="l00110"></a>00110       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad sine/cosine of standard latitude 2"</span>);
-<a name="l00111"></a>00111     <span class="keywordflow">if</span> (coslat1 == 0 && coslat2 == 0 && sinlat1 * sinlat2 <= 0)
-<a name="l00112"></a>00112       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>
-<a name="l00113"></a>00113         (<span class="stringliteral">"Standard latitudes cannot be opposite poles"</span>);
-<a name="l00114"></a>00114     Init(sinlat1, coslat1, sinlat2, coslat2, k1);
-<a name="l00115"></a>00115   }
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117   <span class="keywordtype">void</span> AlbersEqualArea::Init(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi1,
-<a name="l00118"></a>00118                              <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k1) <span class="keywordflow">throw</span>() {
-<a name="l00119"></a>00119     {
-<a name="l00120"></a>00120       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> r;
-<a name="l00121"></a>00121       r = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(sphi1, cphi1);
-<a name="l00122"></a>00122       sphi1 /= r; cphi1 /= r;
-<a name="l00123"></a>00123       r = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(sphi2, cphi2);
-<a name="l00124"></a>00124       sphi2 /= r; cphi2 /= r;
-<a name="l00125"></a>00125     }
-<a name="l00126"></a>00126     <span class="keywordtype">bool</span> polar = (cphi1 == 0);
-<a name="l00127"></a>00127     cphi1 = max(epsx_, cphi1);   <span class="comment">// Avoid singularities at poles</span>
-<a name="l00128"></a>00128     cphi2 = max(epsx_, cphi2);
-<a name="l00129"></a>00129     <span class="comment">// Determine hemisphere of tangent latitude</span>
-<a name="l00130"></a>00130     _sign = sphi1 + sphi2 >= 0 ? 1 : -1;
-<a name="l00131"></a>00131     <span class="comment">// Internally work with tangent latitude positive</span>
-<a name="l00132"></a>00132     sphi1 *= _sign; sphi2 *= _sign;
-<a name="l00133"></a>00133     <span class="keywordflow">if</span> (sphi1 > sphi2) {
-<a name="l00134"></a>00134       swap(sphi1, sphi2); swap(cphi1, cphi2); <span class="comment">// Make phi1 < phi2</span>
-<a name="l00135"></a>00135     }
-<a name="l00136"></a>00136     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00137"></a>00137       tphi1 = sphi1/cphi1, tphi2 = sphi2/cphi2;
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139     <span class="comment">// q = (1-e^2)*(sphi/(1-e^2*sphi^2) - atanhee(sphi))</span>
-<a name="l00140"></a>00140     <span class="comment">// qZ = q(pi/2) = (1 + (1-e^2)*atanhee(1))</span>
-<a name="l00141"></a>00141     <span class="comment">// atanhee(x) = atanh(e*x)/e</span>
-<a name="l00142"></a>00142     <span class="comment">// q = sxi * qZ</span>
-<a name="l00143"></a>00143     <span class="comment">// dq/dphi = 2*(1-e^2)*cphi/(1-e^2*sphi^2)^2</span>
-<a name="l00144"></a>00144     <span class="comment">//</span>
-<a name="l00145"></a>00145     <span class="comment">// n = (m1^2-m2^2)/(q2-q1) -> sin(phi0) for phi1, phi2 -> phi0</span>
-<a name="l00146"></a>00146     <span class="comment">// C = m1^2 + n*q1 = (m1^2*q2-m2^2*q1)/(q2-q1)</span>
-<a name="l00147"></a>00147     <span class="comment">// let</span>
-<a name="l00148"></a>00148     <span class="comment">//   rho(pi/2)/rho(-pi/2) = (1-s)/(1+s)</span>
-<a name="l00149"></a>00149     <span class="comment">//   s = n*qZ/C</span>
-<a name="l00150"></a>00150     <span class="comment">//     = qZ * (m1^2-m2^2)/(m1^2*q2-m2^2*q1)</span>
-<a name="l00151"></a>00151     <span class="comment">//     = qZ * (scbet2^2 - scbet1^2)/(scbet2^2*q2 - scbet1^2*q1)</span>
-<a name="l00152"></a>00152     <span class="comment">//     = (scbet2^2 - scbet1^2)/(scbet2^2*sxi2 - scbet1^2*sxi1)</span>
-<a name="l00153"></a>00153     <span class="comment">//     = (tbet2^2 - tbet1^2)/(scbet2^2*sxi2 - scbet1^2*sxi1)</span>
-<a name="l00154"></a>00154     <span class="comment">// 1-s = -((1-sxi2)*scbet2^2 - (1-sxi1)*scbet1^2)/</span>
-<a name="l00155"></a>00155     <span class="comment">//         (scbet2^2*sxi2 - scbet1^2*sxi1)</span>
-<a name="l00156"></a>00156     <span class="comment">//</span>
-<a name="l00157"></a>00157     <span class="comment">// Define phi0 to give same value of s, i.e.,</span>
-<a name="l00158"></a>00158     <span class="comment">//  s = sphi0 * qZ / (m0^2 + sphi0*q0)</span>
-<a name="l00159"></a>00159     <span class="comment">//    = sphi0 * scbet0^2 / (1/qZ + sphi0 * scbet0^2 * sxi0)</span>
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tphi0, C;
-<a name="l00162"></a>00162     <span class="keywordflow">if</span> (polar || tphi1 == tphi2) {
-<a name="l00163"></a>00163       tphi0 = tphi2;
-<a name="l00164"></a>00164       C = 1;                    <span class="comment">// ignored</span>
-<a name="l00165"></a>00165     } <span class="keywordflow">else</span> {
-<a name="l00166"></a>00166       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00167"></a>00167         tbet1 = _fm * tphi1, scbet12 = 1 + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tbet1),
-<a name="l00168"></a>00168         tbet2 = _fm * tphi2, scbet22 = 1 + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tbet2),
-<a name="l00169"></a>00169         txi1 = txif(tphi1), cxi1 = 1/hyp(txi1), sxi1 = txi1 * cxi1,
-<a name="l00170"></a>00170         txi2 = txif(tphi2), cxi2 = 1/hyp(txi2), sxi2 = txi2 * cxi2,
-<a name="l00171"></a>00171         dtbet2 = _fm * (tbet1 + tbet2),
-<a name="l00172"></a>00172         es1 = 1 - _e2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sphi1), es2 = 1 - _e2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sphi2),
-<a name="l00173"></a>00173         <span class="comment">/*</span>
-<a name="l00174"></a>00174 <span class="comment">        dsxi = ( (_e2 * sq(sphi2 + sphi1) + es2 + es1) / (2 * es2 * es1) +</span>
-<a name="l00175"></a>00175 <span class="comment">                 Datanhee(sphi2, sphi1) ) * Dsn(tphi2, tphi1, sphi2, sphi1) /</span>
-<a name="l00176"></a>00176 <span class="comment">        ( 2 * _qx ),</span>
-<a name="l00177"></a>00177 <span class="comment">        */</span>
-<a name="l00178"></a>00178         dsxi = ( (1 + _e2 * sphi1 * sphi2) / (es2 * es1) +
-<a name="l00179"></a>00179                  Datanhee(sphi2, sphi1) ) * Dsn(tphi2, tphi1, sphi2, sphi1) /
-<a name="l00180"></a>00180         ( 2 * _qx ),
-<a name="l00181"></a>00181         den = (sxi2 + sxi1) * dtbet2 + (scbet22 + scbet12) * dsxi,
-<a name="l00182"></a>00182         <span class="comment">// s = (sq(tbet2) - sq(tbet1)) / (scbet22*sxi2 - scbet12*sxi1)</span>
-<a name="l00183"></a>00183         s = 2 * dtbet2 / den,
-<a name="l00184"></a>00184         <span class="comment">// 1-s = -(sq(scbet2)*(1-sxi2) - sq(scbet1)*(1-sxi1)) /</span>
-<a name="l00185"></a>00185         <span class="comment">//        (scbet22*sxi2 - scbet12*sxi1)</span>
-<a name="l00186"></a>00186         <span class="comment">// Write</span>
-<a name="l00187"></a>00187         <span class="comment">//   sq(scbet)*(1-sxi) = sq(scbet)*(1-sphi) * (1-sxi)/(1-sphi)</span>
-<a name="l00188"></a>00188         sm1 = -Dsn(tphi2, tphi1, sphi2, sphi1) *
-<a name="l00189"></a>00189         ( -( ((sphi2 <= 0 ? (1 - sxi2) / (1 - sphi2) :
-<a name="l00190"></a>00190                <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cxi2/cphi2) * (1 + sphi2) / (1 + sxi2)) +
-<a name="l00191"></a>00191               (sphi1 <= 0 ? (1 - sxi1) / (1 - sphi1) :
-<a name="l00192"></a>00192                <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cxi1/cphi1) * (1 + sphi1) / (1 + sxi1))) ) *
-<a name="l00193"></a>00193           (1 + _e2 * (sphi1 + sphi2 + sphi1 * sphi2)) /
-<a name="l00194"></a>00194           (1 +       (sphi1 + sphi2 + sphi1 * sphi2)) +
-<a name="l00195"></a>00195           (scbet22 * (sphi2 <= 0 ? 1 - sphi2 : <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cphi2) / ( 1 + sphi2)) +
-<a name="l00196"></a>00196            scbet12 * (sphi1 <= 0 ? 1 - sphi1 : <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cphi1) / ( 1 + sphi1)))
-<a name="l00197"></a>00197           * (_e2 * (1 + sphi1 + sphi2 + _e2 * sphi1 * sphi2)/(es1 * es2)
-<a name="l00198"></a>00198           +_e2m * DDatanhee(sphi1, sphi2) ) / _qZ ) / den;
-<a name="l00199"></a>00199       <span class="comment">// C = (scbet22*sxi2 - scbet12*sxi1) / (scbet22 * scbet12 * (sx2 - sx1))</span>
-<a name="l00200"></a>00200       C = den / (2 * scbet12 * scbet22 * dsxi);
-<a name="l00201"></a>00201       tphi0 = (tphi2 + tphi1)/2;
-<a name="l00202"></a>00202       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> stol = tol0_ * max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), abs(tphi0));
-<a name="l00203"></a>00203       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < 2*numit0_; ++i) {
-<a name="l00204"></a>00204         <span class="comment">// Solve (scbet0^2 * sphi0) / (1/qZ + scbet0^2 * sphi0 * sxi0) = s</span>
-<a name="l00205"></a>00205         <span class="comment">// for tphi0 by Newton's method on</span>
-<a name="l00206"></a>00206         <span class="comment">// v(tphi0) = (scbet0^2 * sphi0) - s * (1/qZ + scbet0^2 * sphi0 * sxi0)</span>
-<a name="l00207"></a>00207         <span class="comment">//          = 0</span>
-<a name="l00208"></a>00208         <span class="comment">// Alt:</span>
-<a name="l00209"></a>00209         <span class="comment">// (scbet0^2 * sphi0) / (1/qZ - scbet0^2 * sphi0 * (1-sxi0)) = s / (1-s)</span>
-<a name="l00210"></a>00210         <span class="comment">// w(tphi0) = (1-s) * (scbet0^2 * sphi0)</span>
-<a name="l00211"></a>00211         <span class="comment">//             - s  * (1/qZ - scbet0^2 * sphi0 * (1-sxi0))</span>
-<a name="l00212"></a>00212         <span class="comment">//          = (1-s) * (scbet0^2 * sphi0)</span>
-<a name="l00213"></a>00213         <span class="comment">//             - S/qZ  * (1 - scbet0^2 * sphi0 * (qZ-q0))</span>
-<a name="l00214"></a>00214         <span class="comment">// Now</span>
-<a name="l00215"></a>00215         <span class="comment">// qZ-q0 = (1+e2*sphi0)*(1-sphi0)/(1-e2*sphi0^2) +</span>
-<a name="l00216"></a>00216         <span class="comment">//         (1-e2)*atanhee((1-sphi0)/(1-e2*sphi0))</span>
-<a name="l00217"></a>00217         <span class="comment">// In limit sphi0 -> 1, qZ-q0 -> 2*(1-sphi0)/(1-e2), so wrte</span>
-<a name="l00218"></a>00218         <span class="comment">// qZ-q0 = 2*(1-sphi0)/(1-e2) + A + B</span>
-<a name="l00219"></a>00219         <span class="comment">// A = (1-sphi0)*( (1+e2*sphi0)/(1-e2*sphi0^2) - (1+e2)/(1-e2) )</span>
-<a name="l00220"></a>00220         <span class="comment">//   = -e2 *(1-sphi0)^2 * (2+(1+e2)*sphi0) / ((1-e2)*(1-e2*sphi0^2))</span>
-<a name="l00221"></a>00221         <span class="comment">// B = (1-e2)*atanhee((1-sphi0)/(1-e2*sphi0)) - (1-sphi0)</span>
-<a name="l00222"></a>00222         <span class="comment">//   = (1-sphi0)*(1-e2)/(1-e2*sphi0)*</span>
-<a name="l00223"></a>00223         <span class="comment">//     ((atanhee(x)/x-1) - e2*(1-sphi0)/(1-e2))</span>
-<a name="l00224"></a>00224         <span class="comment">// x = (1-sphi0)/(1-e2*sphi0), atanhee(x)/x = atanh(e*x)/(e*x)</span>
-<a name="l00225"></a>00225         <span class="comment">//</span>
-<a name="l00226"></a>00226         <span class="comment">// 1 - scbet0^2 * sphi0 * (qZ-q0)</span>
-<a name="l00227"></a>00227         <span class="comment">//   = 1 - scbet0^2 * sphi0 * (2*(1-sphi0)/(1-e2) + A + B)</span>
-<a name="l00228"></a>00228         <span class="comment">//   = D - scbet0^2 * sphi0 * (A + B)</span>
-<a name="l00229"></a>00229         <span class="comment">// D = 1 - scbet0^2 * sphi0 * 2*(1-sphi0)/(1-e2)</span>
-<a name="l00230"></a>00230         <span class="comment">//   = (1-sphi0)*(1-e2*(1+2*sphi0*(1+sphi0)))/((1-e2)*(1+sphi0))</span>
-<a name="l00231"></a>00231         <span class="comment">// dD/dsphi0 = -2*(1-e2*sphi0^2*(2*sphi0+3))/((1-e2)*(1+sphi0)^2)</span>
-<a name="l00232"></a>00232         <span class="comment">// d(A+B)/dsphi0 = 2*(1-sphi0^2)*e2*(2-e2*(1+sphi0^2))/</span>
-<a name="l00233"></a>00233         <span class="comment">//                 ((1-e2)*(1-e2*sphi0^2)^2)</span>
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00236"></a>00236           scphi02 = 1 + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tphi0), scphi0 = sqrt(scphi02),
-<a name="l00237"></a>00237           <span class="comment">// sphi0m = 1-sin(phi0) = 1/( sec(phi0) * (tan(phi0) + sec(phi0)) )</span>
-<a name="l00238"></a>00238           sphi0 = tphi0 / scphi0, sphi0m = 1/(scphi0 * (tphi0 + scphi0)),
-<a name="l00239"></a>00239           <span class="comment">// scbet0^2 * sphi0</span>
-<a name="l00240"></a>00240           g = (1 + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>( _fm * tphi0 )) * sphi0,
-<a name="l00241"></a>00241           <span class="comment">// dg/dsphi0 = dg/dtphi0 * scphi0^3</span>
-<a name="l00242"></a>00242           dg = _e2m * scphi02 * (1 + 2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tphi0)) + _e2,
-<a name="l00243"></a>00243           D = sphi0m * (1 - _e2*(1 + 2*sphi0*(1+sphi0))) / (_e2m * (1+sphi0)),
-<a name="l00244"></a>00244           <span class="comment">// dD/dsphi0</span>
-<a name="l00245"></a>00245           dD = -2 * (1 - _e2*<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sphi0) * (2*sphi0+3)) /
-<a name="l00246"></a>00246                (_e2m * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(1+sphi0)),
-<a name="l00247"></a>00247           A = -_e2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sphi0m) * (2+(1+_e2)*sphi0) /
-<a name="l00248"></a>00248               (_e2m*(1-_e2*<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sphi0))),
-<a name="l00249"></a>00249           B = (sphi0m * _e2m / (1 - _e2*sphi0) *
-<a name="l00250"></a>00250                (atanhxm1(_e2 *
-<a name="l00251"></a>00251                          <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sphi0m / (1-_e2*sphi0))) - _e2*sphi0m/_e2m)),
-<a name="l00252"></a>00252           <span class="comment">// d(A+B)/dsphi0</span>
-<a name="l00253"></a>00253           dAB = (2 * _e2 * (2 - _e2 * (1 + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sphi0))) /
-<a name="l00254"></a>00254                  (_e2m * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(1 - _e2*<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sphi0)) * scphi02)),
-<a name="l00255"></a>00255           u = sm1 * g - s/_qZ * ( D - g * (A + B) ),
-<a name="l00256"></a>00256           <span class="comment">// du/dsphi0</span>
-<a name="l00257"></a>00257           du = sm1 * dg - s/_qZ * (dD - dg * (A + B) - g * dAB),
-<a name="l00258"></a>00258           dtu = -u/du * (scphi0 * scphi02);
-<a name="l00259"></a>00259         tphi0 += dtu;
-<a name="l00260"></a>00260         <span class="keywordflow">if</span> (!(abs(dtu) >= stol))
-<a name="l00261"></a>00261           <span class="keywordflow">break</span>;
-<a name="l00262"></a>00262       }
-<a name="l00263"></a>00263     }
-<a name="l00264"></a>00264     _txi0 = txif(tphi0); _scxi0 = hyp(_txi0); _sxi0 = _txi0 / _scxi0;
-<a name="l00265"></a>00265     _n0 = tphi0/hyp(tphi0);
-<a name="l00266"></a>00266     _m02 = 1 / (1 + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_fm * tphi0));
-<a name="l00267"></a>00267     _nrho0 = polar ? 0 : _a * sqrt(_m02);
-<a name="l00268"></a>00268     _k0 = sqrt(tphi1 == tphi2 ? 1 : C / (_m02 + _n0 * _qZ * _sxi0)) * k1;
-<a name="l00269"></a>00269     _k2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_k0);
-<a name="l00270"></a>00270     _lat0 = _sign * atan(tphi0)/Math::degree<real>();
-<a name="l00271"></a>00271   }
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273   <span class="keyword">const</span> AlbersEqualArea
-<a name="l00274"></a>00274   <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#ae643f7f82f5864f95da4cb14571ccf55">AlbersEqualArea::CylindricalEqualArea</a>(Constants::WGS84_a<real>(),
-<a name="l00275"></a>00275                                         Constants::WGS84_f<real>(),
-<a name="l00276"></a>00276                                         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1),
-<a name="l00277"></a>00277                                         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279   <span class="keyword">const</span> AlbersEqualArea
-<a name="l00280"></a>00280   <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#ae65fcb68843b36d206751527ebd08f44">AlbersEqualArea::AzimuthalEqualAreaNorth</a>(Constants::WGS84_a<real>(),
-<a name="l00281"></a>00281                                            Constants::WGS84_f<real>(),
-<a name="l00282"></a>00282                                            <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0),
-<a name="l00283"></a>00283                                            <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285   <span class="keyword">const</span> AlbersEqualArea
-<a name="l00286"></a>00286   <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#aff0ff4e2f162107bd136310b44444cc1">AlbersEqualArea::AzimuthalEqualAreaSouth</a>(Constants::WGS84_a<real>(),
-<a name="l00287"></a>00287                                            Constants::WGS84_f<real>(),
-<a name="l00288"></a>00288                                            <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(-1), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(-1), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0),
-<a name="l00289"></a>00289                                            <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> AlbersEqualArea::txif(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tphi) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00292"></a>00292     <span class="comment">// sxi = ( sphi/(1-e2*sphi^2) + atanhee(sphi) ) /</span>
-<a name="l00293"></a>00293     <span class="comment">//       ( 1/(1-e2) + atanhee(1) )</span>
-<a name="l00294"></a>00294     <span class="comment">//</span>
-<a name="l00295"></a>00295     <span class="comment">// txi = ( sphi/(1-e2*sphi^2) + atanhee(sphi) ) /</span>
-<a name="l00296"></a>00296     <span class="comment">//       sqrt( ( (1+e2*sphi)*(1-sphi)/( (1-e2*sphi^2) * (1-e2) ) +</span>
-<a name="l00297"></a>00297     <span class="comment">//               atanhee((1-sphi)/(1-e2*sphi)) ) *</span>
-<a name="l00298"></a>00298     <span class="comment">//             ( (1-e2*sphi)*(1+sphi)/( (1-e2*sphi^2) * (1-e2) ) +</span>
-<a name="l00299"></a>00299     <span class="comment">//               atanhee((1+sphi)/(1+e2*sphi)) ) )</span>
-<a name="l00300"></a>00300     <span class="comment">//</span>
-<a name="l00301"></a>00301     <span class="comment">// subst 1-sphi = cphi^2/(1+sphi)</span>
-<a name="l00302"></a>00302     <span class="keywordtype">int</span> s = tphi < 0 ? -1 : 1;  <span class="comment">// Enforce odd parity</span>
-<a name="l00303"></a>00303     tphi *= s;
-<a name="l00304"></a>00304     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00305"></a>00305       cphi2 = 1 / (1 + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tphi)),
-<a name="l00306"></a>00306       sphi = tphi * sqrt(cphi2),
-<a name="l00307"></a>00307       es1 = _e2 * sphi,
-<a name="l00308"></a>00308       es2m1 = 1 - es1 * sphi,
-<a name="l00309"></a>00309       sp1 = 1 + sphi,
-<a name="l00310"></a>00310       es1m1 = (1 - es1) * sp1,
-<a name="l00311"></a>00311       es2m1a = _e2m * es2m1,
-<a name="l00312"></a>00312       es1p1 = sp1 / (1 + es1);
-<a name="l00313"></a>00313     <span class="keywordflow">return</span> s * ( sphi / es2m1 + atanhee(sphi) ) /
-<a name="l00314"></a>00314       sqrt( ( cphi2 / (es1p1 * es2m1a) + atanhee(cphi2 / es1m1) ) *
-<a name="l00315"></a>00315             ( es1m1 / es2m1a + atanhee(es1p1) ) );
-<a name="l00316"></a>00316   }
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> AlbersEqualArea::tphif(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> txi) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00319"></a>00319     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00320"></a>00320       tphi = txi,
-<a name="l00321"></a>00321       stol = tol_ * max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), abs(txi));
-<a name="l00322"></a>00322     <span class="comment">// CHECK: min iterations = 1, max iterations = 2; mean = 1.99</span>
-<a name="l00323"></a>00323     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < numit_; ++i) {
-<a name="l00324"></a>00324       <span class="comment">// dtxi/dtphi = (scxi/scphi)^3 * 2*(1-e^2)/(qZ*(1-e^2*sphi^2)^2)</span>
-<a name="l00325"></a>00325       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00326"></a>00326         txia = txif(tphi),
-<a name="l00327"></a>00327         tphi2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tphi),
-<a name="l00328"></a>00328         scphi2 = 1 + tphi2,
-<a name="l00329"></a>00329         scterm = scphi2/(1 + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(txia)),
-<a name="l00330"></a>00330         dtphi = (txi - txia) * scterm * sqrt(scterm) *
-<a name="l00331"></a>00331         _qx * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(1 - _e2 * tphi2 / scphi2);
-<a name="l00332"></a>00332       tphi += dtphi;
-<a name="l00333"></a>00333       <span class="keywordflow">if</span> (!(abs(dtphi) >= stol))
-<a name="l00334"></a>00334         <span class="keywordflow">break</span>;
-<a name="l00335"></a>00335     }
-<a name="l00336"></a>00336     <span class="keywordflow">return</span> tphi;
-<a name="l00337"></a>00337   }
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339   <span class="comment">// return atanh(sqrt(x))/sqrt(x) - 1 = y/3 + y^2/5 + y^3/7 + ...</span>
-<a name="l00340"></a>00340   <span class="comment">// typical x < e^2 = 2*f</span>
-<a name="l00341"></a>00341   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> AlbersEqualArea::atanhxm1(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() {
-<a name="l00342"></a>00342     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> s = 0;
-<a name="l00343"></a>00343     <span class="keywordflow">if</span> (abs(x) < <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5)) {
-<a name="l00344"></a>00344       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> os = -1, y = 1, k = 1;
-<a name="l00345"></a>00345       <span class="keywordflow">while</span> (os != s) {
-<a name="l00346"></a>00346         os = s;
-<a name="l00347"></a>00347         y *= x;                 <span class="comment">// y = x^n</span>
-<a name="l00348"></a>00348         k += 2;                 <span class="comment">// k = 2*n + 1</span>
-<a name="l00349"></a>00349         s += y/k;               <span class="comment">// sum( x^n/(2*n + 1) )</span>
-<a name="l00350"></a>00350       }
-<a name="l00351"></a>00351     } <span class="keywordflow">else</span> {
-<a name="l00352"></a>00352       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xs = sqrt(abs(x));
-<a name="l00353"></a>00353       s = (x > 0 ? <a class="code" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">Math::atanh</a>(xs) : atan(xs)) / xs - 1;
-<a name="l00354"></a>00354     }
-<a name="l00355"></a>00355     <span class="keywordflow">return</span> s;
-<a name="l00356"></a>00356   }
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358   <span class="comment">// return (Datanhee(1,y) - Datanhee(1,x))/(y-x)</span>
-<a name="l00359"></a>00359   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> AlbersEqualArea::DDatanhee(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00360"></a>00360     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> s = 0;
-<a name="l00361"></a>00361     <span class="keywordflow">if</span> (_e2 * (abs(x) + abs(y)) < <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5)) {
-<a name="l00362"></a>00362       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> os = -1, z = 1, k = 1, t = 0, c = 0, en = 1;
-<a name="l00363"></a>00363       <span class="keywordflow">while</span> (os != s) {
-<a name="l00364"></a>00364         os = s;
-<a name="l00365"></a>00365         t = y * t + z; c += t; z *= x;
-<a name="l00366"></a>00366         t = y * t + z; c += t; z *= x;
-<a name="l00367"></a>00367         k += 2; en *= _e2;
-<a name="l00368"></a>00368         <span class="comment">// Here en[l] = e2^l, k[l] = 2*l + 1,</span>
-<a name="l00369"></a>00369         <span class="comment">// c[l] = sum( x^i * y^j; i >= 0, j >= 0, i+j < 2*l)</span>
-<a name="l00370"></a>00370         s += en * c / k;
-<a name="l00371"></a>00371       }
-<a name="l00372"></a>00372       <span class="comment">// Taylor expansion is</span>
-<a name="l00373"></a>00373       <span class="comment">// s = sum( c[l] * e2^l / (2*l + 1), l, 1, N)</span>
-<a name="l00374"></a>00374     } <span class="keywordflow">else</span>
-<a name="l00375"></a>00375       s = (Datanhee(1, y) - Datanhee(x, y))/(1 - x);
-<a name="l00376"></a>00376     <span class="keywordflow">return</span> s;
-<a name="l00377"></a>00377   }
-<a name="l00378"></a>00378 
-<a name="l00379"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#aac57f3a9c0c08fb897a1e37034d127c1">00379</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#aac57f3a9c0c08fb897a1e37034d127c1">AlbersEqualArea::Forward</a>(real lon0, real lat, real lon,
-<a name="l00380"></a>00380                                 real& x, real& y, real& gamma, real& k)
-<a name="l00381"></a>00381     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00382"></a>00382     <span class="keywordflow">if</span> (lon - lon0 >= 180)
-<a name="l00383"></a>00383       lon -= lon0 + 360;
-<a name="l00384"></a>00384     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lon - lon0 < -180)
-<a name="l00385"></a>00385       lon -= lon0 - 360;
-<a name="l00386"></a>00386     <span class="keywordflow">else</span>
-<a name="l00387"></a>00387       lon -= lon0;
-<a name="l00388"></a>00388     lat *= _sign;
-<a name="l00389"></a>00389     real
-<a name="l00390"></a>00390       lam = lon * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00391"></a>00391       phi = lat * Math::degree<real>(),
-<a name="l00392"></a>00392       sphi = sin(phi), cphi = abs(lat) != 90 ? cos(phi) : epsx_,
-<a name="l00393"></a>00393       tphi = sphi/cphi, txi = txif(tphi), sxi = txi/hyp(txi),
-<a name="l00394"></a>00394       dq = _qZ * Dsn(txi, _txi0, sxi, _sxi0) * (txi - _txi0),
-<a name="l00395"></a>00395       drho = - _a * dq / (sqrt(_m02 - _n0 * dq) + _nrho0 / _a),
-<a name="l00396"></a>00396       theta = _k2 * _n0 * lam, stheta = sin(theta), ctheta = cos(theta),
-<a name="l00397"></a>00397       t = _nrho0 + _n0 * drho;
-<a name="l00398"></a>00398     x = t * (_n0 != 0 ? stheta / _n0 : _k2 * lam) / _k0;
-<a name="l00399"></a>00399     y = (_nrho0 *
-<a name="l00400"></a>00400          (_n0 != 0 ?
-<a name="l00401"></a>00401           (ctheta < 0 ? 1 - ctheta : <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(stheta)/(1 + ctheta)) / _n0 :
-<a name="l00402"></a>00402           0)
-<a name="l00403"></a>00403          - drho * ctheta) / _k0;
-<a name="l00404"></a>00404     k = _k0 * (t != 0 ? t * hyp(_fm * tphi) / _a : 1);
-<a name="l00405"></a>00405     y *= _sign;
-<a name="l00406"></a>00406     gamma = _sign * theta / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00407"></a>00407   }
-<a name="l00408"></a>00408 
-<a name="l00409"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a577a9f43be8c1e238a4d56158acf8625">00409</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a577a9f43be8c1e238a4d56158acf8625">AlbersEqualArea::Reverse</a>(real lon0, real x, real y,
-<a name="l00410"></a>00410                                 real& lat, real& lon,
-<a name="l00411"></a>00411                                 real& gamma, real& k)
-<a name="l00412"></a>00412     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00413"></a>00413     y *= _sign;
-<a name="l00414"></a>00414     real
-<a name="l00415"></a>00415       nx = _k0 * _n0 * x, ny = _k0 * _n0 * y, y1 =  _nrho0 - ny,
-<a name="l00416"></a>00416       den = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(nx, y1) + _nrho0, <span class="comment">// 0 implies origin with polar aspect</span>
-<a name="l00417"></a>00417       drho = den != 0 ? (_k0*x*nx - 2*_k0*y*_nrho0 + _k0*y*ny) / den : 0,
-<a name="l00418"></a>00418       <span class="comment">// dsxia = scxi0 * dsxi</span>
-<a name="l00419"></a>00419       dsxia = - _scxi0 * (2 * _nrho0 + _n0 * drho) * drho /
-<a name="l00420"></a>00420               (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_a) * _qZ),
-<a name="l00421"></a>00421       txi = (_txi0 + dsxia) / sqrt(max(1 - dsxia * (2*_txi0 + dsxia), epsx2_)),
-<a name="l00422"></a>00422       tphi = tphif(txi),
-<a name="l00423"></a>00423       phi = _sign * atan(tphi),
-<a name="l00424"></a>00424       theta = atan2(nx, y1),
-<a name="l00425"></a>00425       lam = _n0 != 0 ? theta / (_k2 * _n0) : x / (y1 * _k0);
-<a name="l00426"></a>00426     gamma = _sign * theta / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00427"></a>00427     lat = phi / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00428"></a>00428     lon = lam / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00429"></a>00429     <span class="comment">// Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)</span>
-<a name="l00430"></a>00430     <span class="keywordflow">if</span> (lon + lon0 >= 180)
-<a name="l00431"></a>00431       lon += lon0 - 360;
-<a name="l00432"></a>00432     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lon + lon0 < -180)
-<a name="l00433"></a>00433       lon += lon0 + 360;
-<a name="l00434"></a>00434     <span class="keywordflow">else</span>
-<a name="l00435"></a>00435       lon += lon0;
-<a name="l00436"></a>00436     k = _k0 * (den != 0 ? (_nrho0 + _n0 * drho) * hyp(_fm * tphi) / _a : 1);
-<a name="l00437"></a>00437   }
-<a name="l00438"></a>00438 
-<a name="l00439"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a0c00022edeb6b67dcd4e00f087b412c4">00439</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a0c00022edeb6b67dcd4e00f087b412c4">AlbersEqualArea::SetScale</a>(real lat, real k) {
-<a name="l00440"></a>00440     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(k) && k > 0))
-<a name="l00441"></a>00441       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00442"></a>00442     <span class="keywordflow">if</span> (!(abs(lat) < 90))
-<a name="l00443"></a>00443       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude for SetScale not in (-90, 90)"</span>);
-<a name="l00444"></a>00444     real x, y, gamma, kold;
-<a name="l00445"></a>00445     <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#aac57f3a9c0c08fb897a1e37034d127c1">Forward</a>(0, lat, 0, x, y, gamma, kold);
-<a name="l00446"></a>00446     k /= kold;
-<a name="l00447"></a>00447     _k0 *= k;
-<a name="l00448"></a>00448     _k2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_k0);
-<a name="l00449"></a>00449   }
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/AlbersEqualArea_8hpp.html b/doc/html/AlbersEqualArea_8hpp.html
deleted file mode 100644
index f21285a..0000000
--- a/doc/html/AlbersEqualArea_8hpp.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: AlbersEqualArea.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">AlbersEqualArea.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <algorithm></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="AlbersEqualArea_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Albers Equal Area Conic Projection.  <a href="classGeographicLib_1_1AlbersEqualArea.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="AlbersEqualArea_8hpp.html#aa9494d369d907d2b285fcb2f45b4689c">GEOGRAPHICLIB_ALBERSEQUALAREA_HPP</a>   "$Id: d17f37d1bec84543dc3753e882d8e95f1c1d5a1b $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="aa9494d369d907d2b285fcb2f45b4689c"></a><!-- doxytag: member="AlbersEqualArea.hpp::GEOGRAPHICLIB_ALBERSEQUALAREA_HPP" ref="aa9494d369d907d2b285fcb2f45b4689c" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_ALBERSEQUALAREA_HPP   "$Id: d17f37d1bec84543dc3753e882d8e95f1c1d5a1b $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00011">11</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/AlbersEqualArea_8hpp_source.html b/doc/html/AlbersEqualArea_8hpp_source.html
deleted file mode 100644
index b4d684f..0000000
--- a/doc/html/AlbersEqualArea_8hpp_source.html
+++ /dev/null
@@ -1,389 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: AlbersEqualArea.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">AlbersEqualArea.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="AlbersEqualArea_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file AlbersEqualArea.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::AlbersEqualArea class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_ALBERSEQUALAREA_HPP)</span>
-<a name="l00011"></a><a class="code" href="AlbersEqualArea_8hpp.html#aa9494d369d907d2b285fcb2f45b4689c">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_ALBERSEQUALAREA_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: d17f37d1bec84543dc3753e882d8e95f1c1d5a1b $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <algorithm></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00018"></a>00018 <span class="comment"></span>
-<a name="l00019"></a>00019 <span class="comment">  /**</span>
-<a name="l00020"></a>00020 <span class="comment">   * \brief Albers Equal Area Conic Projection</span>
-<a name="l00021"></a>00021 <span class="comment">   *</span>
-<a name="l00022"></a>00022 <span class="comment">   * Implementation taken from the report,</span>
-<a name="l00023"></a>00023 <span class="comment">   * - J. P. Snyder,</span>
-<a name="l00024"></a>00024 <span class="comment">   *   <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"> Map Projections: A</span>
-<a name="l00025"></a>00025 <span class="comment">   *   Working Manual</a>, USGS Professional Paper 1395 (1987),</span>
-<a name="l00026"></a>00026 <span class="comment">   *   pp. 101&ndash;102.</span>
-<a name="l00027"></a>00027 <span class="comment">   *</span>
-<a name="l00028"></a>00028 <span class="comment">   * This is a implementation of the equations in Snyder except that divided</span>
-<a name="l00029"></a>00029 <span class="comment">   * differences will be [have been] used to transform the expressions into</span>
-<a name="l00030"></a>00030 <span class="comment">   * ones which may be evaluated accurately.  [In this implementation, the</span>
-<a name="l00031"></a>00031 <span class="comment">   * projection correctly becomes the cylindrical equal area or the azimuthal</span>
-<a name="l00032"></a>00032 <span class="comment">   * equal area projection when the standard latitude is the equator or a</span>
-<a name="l00033"></a>00033 <span class="comment">   * pole.]</span>
-<a name="l00034"></a>00034 <span class="comment">   *</span>
-<a name="l00035"></a>00035 <span class="comment">   * The ellipsoid parameters, the standard parallels, and the scale on the</span>
-<a name="l00036"></a>00036 <span class="comment">   * standard parallels are set in the constructor.  Internally, the case with</span>
-<a name="l00037"></a>00037 <span class="comment">   * two standard parallels is converted into a single standard parallel, the</span>
-<a name="l00038"></a>00038 <span class="comment">   * latitude of minimum azimuthal scale, with an azimuthal scale specified on</span>
-<a name="l00039"></a>00039 <span class="comment">   * this parallel.  This latitude is also used as the latitude of origin which</span>
-<a name="l00040"></a>00040 <span class="comment">   * is returned by AlbersEqualArea::OriginLatitude.  The azimuthal scale on</span>
-<a name="l00041"></a>00041 <span class="comment">   * the latitude of origin is given by AlbersEqualArea::CentralScale.  The</span>
-<a name="l00042"></a>00042 <span class="comment">   * case with two standard parallels at opposite poles is singular and is</span>
-<a name="l00043"></a>00043 <span class="comment">   * disallowed.  The central meridian (which is a trivial shift of the</span>
-<a name="l00044"></a>00044 <span class="comment">   * longitude) is specified as the \e lon0 argument of the</span>
-<a name="l00045"></a>00045 <span class="comment">   * AlbersEqualArea::Forward and AlbersEqualArea::Reverse functions.</span>
-<a name="l00046"></a>00046 <span class="comment">   * AlbersEqualArea::Forward and AlbersEqualArea::Reverse also return the</span>
-<a name="l00047"></a>00047 <span class="comment">   * meridian convergence, \e gamma, and azimuthal scale, \e k.  A small square</span>
-<a name="l00048"></a>00048 <span class="comment">   * aligned with the cardinal directions is projected to a rectangle with</span>
-<a name="l00049"></a>00049 <span class="comment">   * dimensions \e k (in the E-W direction) and 1/\e k (in the N-S direction).</span>
-<a name="l00050"></a>00050 <span class="comment">   * The E-W sides of the rectangle are oriented \e gamma degrees</span>
-<a name="l00051"></a>00051 <span class="comment">   * counter-clockwise from the \e x axis.  There is no provision in this class</span>
-<a name="l00052"></a>00052 <span class="comment">   * for specifying a false easting or false northing or a different latitude</span>
-<a name="l00053"></a>00053 <span class="comment">   * of origin.</span>
-<a name="l00054"></a>00054 <span class="comment">   *</span>
-<a name="l00055"></a>00055 <span class="comment">   * Example of use:</span>
-<a name="l00056"></a>00056 <span class="comment">   * \include example-AlbersEqualArea.cpp</span>
-<a name="l00057"></a>00057 <span class="comment">   *</span>
-<a name="l00058"></a>00058 <span class="comment">   * <a href="ConicProj.1.html">ConicProj</a> is a command-line utility</span>
-<a name="l00059"></a>00059 <span class="comment">   * providing access to the functionality of LambertConformalConic and</span>
-<a name="l00060"></a>00060 <span class="comment">   * AlbersEqualArea.</span>
-<a name="l00061"></a>00061 <span class="comment">   **********************************************************************/</span>
-<a name="l00062"></a>00062   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> AlbersEqualArea {
-<a name="l00063"></a>00063   <span class="keyword">private</span>:
-<a name="l00064"></a>00064     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00065"></a>00065     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _f, _fm, _e2, _e, _e2m, _qZ, _qx;
-<a name="l00066"></a>00066     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _sign, _lat0, _k0;
-<a name="l00067"></a>00067     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _n0, _m02, _nrho0, _k2, _txi0, _scxi0, _sxi0;
-<a name="l00068"></a>00068     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps_;
-<a name="l00069"></a>00069     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> epsx_;
-<a name="l00070"></a>00070     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> epsx2_;
-<a name="l00071"></a>00071     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tol_;
-<a name="l00072"></a>00072     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tol0_;
-<a name="l00073"></a>00073     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ahypover_;
-<a name="l00074"></a>00074     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numit_ = 5;   <span class="comment">// Newton iterations in Reverse</span>
-<a name="l00075"></a>00075     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numit0_ = 20; <span class="comment">// Newton iterations in Init</span>
-<a name="l00076"></a>00076     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> hyp(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp. [...]
-<a name="l00077"></a>00077     <span class="comment">// atanh(      e   * x)/      e   if f > 0</span>
-<a name="l00078"></a>00078     <span class="comment">// atan (sqrt(-e2) * x)/sqrt(-e2) if f < 0</span>
-<a name="l00079"></a>00079     <span class="comment">// x                              if f = 0</span>
-<a name="l00080"></a>00080     <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> atanhee(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00081"></a>00081       <span class="keywordflow">return</span> _f > 0 ? <a class="code" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">Math::atanh</a>(_e * x)/_e :
-<a name="l00082"></a>00082         (_f < 0 ? std::atan(_e * x)/_e : x);
-<a name="l00083"></a>00083     }
-<a name="l00084"></a>00084     <span class="comment">// return atanh(sqrt(x))/sqrt(x) - 1, accurate for small x</span>
-<a name="l00085"></a>00085     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> atanhxm1(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>();
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087     <span class="comment">// Divided differences</span>
-<a name="l00088"></a>00088     <span class="comment">// Definition: Df(x,y) = (f(x)-f(y))/(x-y)</span>
-<a name="l00089"></a>00089     <span class="comment">// See: W. M. Kahan and R. J. Fateman,</span>
-<a name="l00090"></a>00090     <span class="comment">// Symbolic computation of divided differences,</span>
-<a name="l00091"></a>00091     <span class="comment">// SIGSAM Bull. 33(3), 7-28 (1999)</span>
-<a name="l00092"></a>00092     <span class="comment">// http://doi.acm.org/10.1145/334714.334716</span>
-<a name="l00093"></a>00093     <span class="comment">// http://www.cs.berkeley.edu/~fateman/papers/divdiff.pdf</span>
-<a name="l00094"></a>00094     <span class="comment">//</span>
-<a name="l00095"></a>00095     <span class="comment">// General rules</span>
-<a name="l00096"></a>00096     <span class="comment">// h(x) = f(g(x)): Dh(x,y) = Df(g(x),g(y))*Dg(x,y)</span>
-<a name="l00097"></a>00097     <span class="comment">// h(x) = f(x)*g(x):</span>
-<a name="l00098"></a>00098     <span class="comment">//        Dh(x,y) = Df(x,y)*(g(x)+g(y))/2 + Dg(x,y)*(f(x)+f(y))/2</span>
-<a name="l00099"></a>00099     <span class="comment">//</span>
-<a name="l00100"></a>00100     <span class="comment">// sn(x) = x/sqrt(1+x^2): Dsn(x,y) = (x+y)/((sn(x)+sn(y))*(1+x^2)*(1+y^2))</span>
-<a name="l00101"></a>00101     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Dsn(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184 [...]
-<a name="l00102"></a>00102       <span class="comment">// sx = x/hyp(x)</span>
-<a name="l00103"></a>00103       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = x * y;
-<a name="l00104"></a>00104       <span class="keywordflow">return</span> t > 0 ? (x + y) * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>( (sx * sy)/t ) / (sx + sy) :
-<a name="l00105"></a>00105         (x - y != 0 ? (sx - sy) / (x - y) : 1);
-<a name="l00106"></a>00106     }
-<a name="l00107"></a>00107     <span class="comment">// Datanhee(x,y) = atanhee((x-y)/(1-e^2*x*y))/(x-y)</span>
-<a name="l00108"></a>00108     <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Datanhee(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00109"></a>00109       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = x - y, d = 1 - _e2 * x * y;
-<a name="l00110"></a>00110       <span class="keywordflow">return</span> t != 0 ? atanhee(t / d) / t : 1 / d;
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112     <span class="comment">// DDatanhee(x,y) = (Datanhee(1,y) - Datanhee(1,x))/(y-x)</span>
-<a name="l00113"></a>00113     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> DDatanhee(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00114"></a>00114     <span class="keywordtype">void</span> Init(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781 [...]
-<a name="l00115"></a>00115     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> txif(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tphi) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00116"></a>00116     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tphif(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> txi) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00117"></a>00117   <span class="keyword">public</span>:
-<a name="l00118"></a>00118 <span class="comment"></span>
-<a name="l00119"></a>00119 <span class="comment">    /**</span>
-<a name="l00120"></a>00120 <span class="comment">     * Constructor with a single standard parallel.</span>
-<a name="l00121"></a>00121 <span class="comment">     *</span>
-<a name="l00122"></a>00122 <span class="comment">     * @param[in] a equatorial radius of ellipsoid (meters).</span>
-<a name="l00123"></a>00123 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00124"></a>00124 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00125"></a>00125 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00126"></a>00126 <span class="comment">     * @param[in] stdlat standard parallel (degrees), the circle of tangency.</span>
-<a name="l00127"></a>00127 <span class="comment">     * @param[in] k0 azimuthal scale on the standard parallel.</span>
-<a name="l00128"></a>00128 <span class="comment">     *</span>
-<a name="l00129"></a>00129 <span class="comment">     * An exception is thrown if \e a or \e k0 is not positive or if \e stdlat</span>
-<a name="l00130"></a>00130 <span class="comment">     * is not in the range [-90, 90].</span>
-<a name="l00131"></a>00131 <span class="comment">     **********************************************************************/</span>
-<a name="l00132"></a>00132     AlbersEqualArea(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> stdlat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k0);
-<a name="l00133"></a>00133 <span class="comment"></span>
-<a name="l00134"></a>00134 <span class="comment">    /**</span>
-<a name="l00135"></a>00135 <span class="comment">     * Constructor with two standard parallels.</span>
-<a name="l00136"></a>00136 <span class="comment">     *</span>
-<a name="l00137"></a>00137 <span class="comment">     * @param[in] a equatorial radius of ellipsoid (meters).</span>
-<a name="l00138"></a>00138 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00139"></a>00139 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00140"></a>00140 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00141"></a>00141 <span class="comment">     * @param[in] stdlat1 first standard parallel (degrees).</span>
-<a name="l00142"></a>00142 <span class="comment">     * @param[in] stdlat2 second standard parallel (degrees).</span>
-<a name="l00143"></a>00143 <span class="comment">     * @param[in] k1 azimuthal scale on the standard parallels.</span>
-<a name="l00144"></a>00144 <span class="comment">     *</span>
-<a name="l00145"></a>00145 <span class="comment">     * An exception is thrown if \e a or \e k0 is not positive or if \e stdlat1</span>
-<a name="l00146"></a>00146 <span class="comment">     * or \e stdlat2 is not in the range [-90, 90].  In addition, an exception</span>
-<a name="l00147"></a>00147 <span class="comment">     * is thrown if \e stdlat1 and \e stdlat2 are opposite poles.</span>
-<a name="l00148"></a>00148 <span class="comment">     **********************************************************************/</span>
-<a name="l00149"></a>00149     AlbersEqualArea(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> stdlat1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> stdlat2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k1);
-<a name="l00150"></a>00150 <span class="comment"></span>
-<a name="l00151"></a>00151 <span class="comment">    /**</span>
-<a name="l00152"></a>00152 <span class="comment">     * Constructor with two standard parallels specified by sines and cosines.</span>
-<a name="l00153"></a>00153 <span class="comment">     *</span>
-<a name="l00154"></a>00154 <span class="comment">     * @param[in] a equatorial radius of ellipsoid (meters).</span>
-<a name="l00155"></a>00155 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00156"></a>00156 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00157"></a>00157 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00158"></a>00158 <span class="comment">     * @param[in] sinlat1 sine of first standard parallel.</span>
-<a name="l00159"></a>00159 <span class="comment">     * @param[in] coslat1 cosine of first standard parallel.</span>
-<a name="l00160"></a>00160 <span class="comment">     * @param[in] sinlat2 sine of second standard parallel.</span>
-<a name="l00161"></a>00161 <span class="comment">     * @param[in] coslat2 cosine of second standard parallel.</span>
-<a name="l00162"></a>00162 <span class="comment">     * @param[in] k1 azimuthal scale on the standard parallels.</span>
-<a name="l00163"></a>00163 <span class="comment">     *</span>
-<a name="l00164"></a>00164 <span class="comment">     * This allows parallels close to the poles to be specified accurately.</span>
-<a name="l00165"></a>00165 <span class="comment">     * This routine computes the latitude of origin and the azimuthal scale at</span>
-<a name="l00166"></a>00166 <span class="comment">     * this latitude.  If \e dlat = abs(\e lat2 - \e lat1) <= 160<sup>o</sup>,</span>
-<a name="l00167"></a>00167 <span class="comment">     * then the error in the latitude of origin is less than</span>
-<a name="l00168"></a>00168 <span class="comment">     * 4.5e-14<sup>o</sup>.</span>
-<a name="l00169"></a>00169 <span class="comment">     **********************************************************************/</span>
-<a name="l00170"></a>00170     AlbersEqualArea(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f,
-<a name="l00171"></a>00171                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sinlat1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> coslat1,
-<a name="l00172"></a>00172                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sinlat2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> coslat2,
-<a name="l00173"></a>00173                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k1);
-<a name="l00174"></a>00174 <span class="comment"></span>
-<a name="l00175"></a>00175 <span class="comment">    /**</span>
-<a name="l00176"></a>00176 <span class="comment">     * Set the azimuthal scale for the projection.</span>
-<a name="l00177"></a>00177 <span class="comment">     *</span>
-<a name="l00178"></a>00178 <span class="comment">     * @param[in] lat (degrees).</span>
-<a name="l00179"></a>00179 <span class="comment">     * @param[in] k azimuthal scale at latitude \e lat (default 1).</span>
-<a name="l00180"></a>00180 <span class="comment">     *</span>
-<a name="l00181"></a>00181 <span class="comment">     * This allows a "latitude of conformality" to be specified.  An exception</span>
-<a name="l00182"></a>00182 <span class="comment">     * is thrown if \e k is not positive or if \e lat is not in the range (-90,</span>
-<a name="l00183"></a>00183 <span class="comment">     * 90).</span>
-<a name="l00184"></a>00184 <span class="comment">     **********************************************************************/</span>
-<a name="l00185"></a>00185     <span class="keywordtype">void</span> SetScale(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00186"></a>00186 <span class="comment"></span>
-<a name="l00187"></a>00187 <span class="comment">    /**</span>
-<a name="l00188"></a>00188 <span class="comment">     * Forward projection, from geographic to Lambert conformal conic.</span>
-<a name="l00189"></a>00189 <span class="comment">     *</span>
-<a name="l00190"></a>00190 <span class="comment">     * @param[in] lon0 central meridian longitude (degrees).</span>
-<a name="l00191"></a>00191 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00192"></a>00192 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00193"></a>00193 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00194"></a>00194 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00195"></a>00195 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00196"></a>00196 <span class="comment">     * @param[out] k azimuthal scale of projection at point; the radial</span>
-<a name="l00197"></a>00197 <span class="comment">     *   scale is the 1/\e k.</span>
-<a name="l00198"></a>00198 <span class="comment">     *</span>
-<a name="l00199"></a>00199 <span class="comment">     * The latitude origin is given by AlbersEqualArea::LatitudeOrigin().  No</span>
-<a name="l00200"></a>00200 <span class="comment">     * false easting or northing is added and \e lat should be in the range</span>
-<a name="l00201"></a>00201 <span class="comment">     * [-90, 90]; \e lon and \e lon0 should be in the range [-180, 360].  The</span>
-<a name="l00202"></a>00202 <span class="comment">     * values of \e x and \e y returned for points which project to infinity</span>
-<a name="l00203"></a>00203 <span class="comment">     * (i.e., one or both of the poles) will be large but finite.</span>
-<a name="l00204"></a>00204 <span class="comment">     **********************************************************************/</span>
-<a name="l00205"></a>00205     <span class="keywordtype">void</span> Forward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon,
-<a name="l00206"></a>00206                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00207"></a>00207 <span class="comment"></span>
-<a name="l00208"></a>00208 <span class="comment">    /**</span>
-<a name="l00209"></a>00209 <span class="comment">     * Reverse projection, from Lambert conformal conic to geographic.</span>
-<a name="l00210"></a>00210 <span class="comment">     *</span>
-<a name="l00211"></a>00211 <span class="comment">     * @param[in] lon0 central meridian longitude (degrees).</span>
-<a name="l00212"></a>00212 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00213"></a>00213 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00214"></a>00214 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00215"></a>00215 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00216"></a>00216 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00217"></a>00217 <span class="comment">     * @param[out] k azimuthal scale of projection at point; the radial</span>
-<a name="l00218"></a>00218 <span class="comment">     *   scale is the 1/\e k.</span>
-<a name="l00219"></a>00219 <span class="comment">     *</span>
-<a name="l00220"></a>00220 <span class="comment">     * The latitude origin is given by AlbersEqualArea::LatitudeOrigin().  No</span>
-<a name="l00221"></a>00221 <span class="comment">     * false easting or northing is added.  \e lon0 should be in the range</span>
-<a name="l00222"></a>00222 <span class="comment">     * [-180, 360].  The value of \e lon returned is in the range [-180, 180).</span>
-<a name="l00223"></a>00223 <span class="comment">     * The value of \e lat returned is in the range [-90,90].  If the input</span>
-<a name="l00224"></a>00224 <span class="comment">     * point is outside the legal projected space the nearest pole is returned.</span>
-<a name="l00225"></a>00225 <span class="comment">     **********************************************************************/</span>
-<a name="l00226"></a>00226     <span class="keywordtype">void</span> Reverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00227"></a>00227                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00228"></a>00228 <span class="comment"></span>
-<a name="l00229"></a>00229 <span class="comment">    /**</span>
-<a name="l00230"></a>00230 <span class="comment">     * AlbersEqualArea::Forward without returning the convergence and</span>
-<a name="l00231"></a>00231 <span class="comment">     * scale.</span>
-<a name="l00232"></a>00232 <span class="comment">     **********************************************************************/</span>
-<a name="l00233"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a68a13780a73bcf9c8e50a3ce4eae3086">00233</a>     <span class="keywordtype">void</span> Forward(real lon0, real lat, real lon,
-<a name="l00234"></a>00234                  real& x, real& y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00235"></a>00235       real gamma, k;
-<a name="l00236"></a>00236       Forward(lon0, lat, lon, x, y, gamma, k);
-<a name="l00237"></a>00237     }
-<a name="l00238"></a>00238 <span class="comment"></span>
-<a name="l00239"></a>00239 <span class="comment">    /**</span>
-<a name="l00240"></a>00240 <span class="comment">     * AlbersEqualArea::Reverse without returning the convergence and</span>
-<a name="l00241"></a>00241 <span class="comment">     * scale.</span>
-<a name="l00242"></a>00242 <span class="comment">     **********************************************************************/</span>
-<a name="l00243"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a871246cba03145512f3f12ceb3e3e3a8">00243</a>     <span class="keywordtype">void</span> Reverse(real lon0, real x, real y,
-<a name="l00244"></a>00244                  real& lat, real& lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00245"></a>00245       real gamma, k;
-<a name="l00246"></a>00246       Reverse(lon0, x, y, lat, lon, gamma, k);
-<a name="l00247"></a>00247     }
-<a name="l00248"></a>00248 <span class="comment"></span>
-<a name="l00249"></a>00249 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00250"></a>00250 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00251"></a>00251 <span class="comment">    ///@{</span>
-<a name="l00252"></a>00252 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00253"></a>00253 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00254"></a>00254 <span class="comment">     *   the value used in the constructor.</span>
-<a name="l00255"></a>00255 <span class="comment">     **********************************************************************/</span>
-<a name="l00256"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a55d5ca45e7c80a96b3faf0094714ac59">00256</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a55d5ca45e7c80a96b3faf0094714ac59">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a; }
-<a name="l00257"></a>00257 <span class="comment"></span>
-<a name="l00258"></a>00258 <span class="comment">    /**</span>
-<a name="l00259"></a>00259 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value used in</span>
-<a name="l00260"></a>00260 <span class="comment">     *   the constructor.</span>
-<a name="l00261"></a>00261 <span class="comment">     **********************************************************************/</span>
-<a name="l00262"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a565c63954715204781ae458db0d6b1f7">00262</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#a565c63954715204781ae458db0d6b1f7">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _f; }
-<a name="l00263"></a>00263 <span class="comment"></span>
-<a name="l00264"></a>00264 <span class="comment">    /// \cond SKIP</span>
-<a name="l00265"></a>00265 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00266"></a>00266 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00267"></a>00267 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00268"></a>00268 <span class="comment">     **********************************************************************/</span>
-<a name="l00269"></a>00269     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> 1/_f; }<span class="comment"></span>
-<a name="l00270"></a>00270 <span class="comment">    /// \endcond</span>
-<a name="l00271"></a>00271 <span class="comment"></span><span class="comment"></span>
-<a name="l00272"></a>00272 <span class="comment">    /**</span>
-<a name="l00273"></a>00273 <span class="comment">     * @return latitude of the origin for the projection (degrees).</span>
-<a name="l00274"></a>00274 <span class="comment">     *</span>
-<a name="l00275"></a>00275 <span class="comment">     * This is the latitude of minimum azimuthal scale and equals the \e stdlat</span>
-<a name="l00276"></a>00276 <span class="comment">     * in the 1-parallel constructor and lies between \e stdlat1 and \e stdlat2</span>
-<a name="l00277"></a>00277 <span class="comment">     * in the 2-parallel constructors.</span>
-<a name="l00278"></a>00278 <span class="comment">     **********************************************************************/</span>
-<a name="l00279"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#ad780e943e9a9ba168b350d809d0bfe08">00279</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#ad780e943e9a9ba168b350d809d0bfe08">OriginLatitude</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _lat0; }
-<a name="l00280"></a>00280 <span class="comment"></span>
-<a name="l00281"></a>00281 <span class="comment">    /**</span>
-<a name="l00282"></a>00282 <span class="comment">     * @return central scale for the projection.  This is the azimuthal scale</span>
-<a name="l00283"></a>00283 <span class="comment">     *   on the latitude of origin.</span>
-<a name="l00284"></a>00284 <span class="comment">     **********************************************************************/</span>
-<a name="l00285"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#af407e835eaf76895ee25ec9e7a9c090c">00285</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#af407e835eaf76895ee25ec9e7a9c090c">CentralScale</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _k0; }<span class="comment" [...]
-<a name="l00286"></a>00286 <span class="comment">    ///@}</span>
-<a name="l00287"></a>00287 <span class="comment"></span><span class="comment"></span>
-<a name="l00288"></a>00288 <span class="comment">    /**</span>
-<a name="l00289"></a>00289 <span class="comment">     * A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, \e</span>
-<a name="l00290"></a>00290 <span class="comment">     * stdlat = 0, and \e k0 = 1.  This degenerates to the cylindrical equal</span>
-<a name="l00291"></a>00291 <span class="comment">     * area projection.</span>
-<a name="l00292"></a>00292 <span class="comment">     **********************************************************************/</span>
-<a name="l00293"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#ae643f7f82f5864f95da4cb14571ccf55">00293</a>     <span class="keyword">static</span> <span class="keyword">const</span> AlbersEqualArea <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#ae643f7f82f5864f95da4cb14571ccf55">CylindricalEqualArea</a>;
-<a name="l00294"></a>00294 <span class="comment"></span>
-<a name="l00295"></a>00295 <span class="comment">    /**</span>
-<a name="l00296"></a>00296 <span class="comment">     * A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, \e</span>
-<a name="l00297"></a>00297 <span class="comment">     * stdlat = 90<sup>o</sup>, and \e k0 = 1.  This degenerates to the</span>
-<a name="l00298"></a>00298 <span class="comment">     * Lambert azimuthal equal area projection.</span>
-<a name="l00299"></a>00299 <span class="comment">     **********************************************************************/</span>
-<a name="l00300"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#ae65fcb68843b36d206751527ebd08f44">00300</a>     <span class="keyword">static</span> <span class="keyword">const</span> AlbersEqualArea <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#ae65fcb68843b36d206751527ebd08f44">AzimuthalEqualAreaNorth</a>;
-<a name="l00301"></a>00301 <span class="comment"></span>
-<a name="l00302"></a>00302 <span class="comment">    /**</span>
-<a name="l00303"></a>00303 <span class="comment">     * A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, \e</span>
-<a name="l00304"></a>00304 <span class="comment">     * stdlat = -90<sup>o</sup>, and \e k0 = 1.  This degenerates to the</span>
-<a name="l00305"></a>00305 <span class="comment">     * Lambert azimuthal equal area projection.</span>
-<a name="l00306"></a>00306 <span class="comment">     **********************************************************************/</span>
-<a name="l00307"></a><a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#aff0ff4e2f162107bd136310b44444cc1">00307</a>     <span class="keyword">static</span> <span class="keyword">const</span> AlbersEqualArea <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html#aff0ff4e2f162107bd136310b44444cc1">AzimuthalEqualAreaSouth</a>;
-<a name="l00308"></a>00308   };
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312 <span class="preprocessor">#endif  // GEOGRAPHICLIB_ALBERSEQUALAREA_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/AzimuthalEquidistant_8cpp.html b/doc/html/AzimuthalEquidistant_8cpp.html
deleted file mode 100644
index 94cb17b..0000000
--- a/doc/html/AzimuthalEquidistant_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: AzimuthalEquidistant.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">AzimuthalEquidistant.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="AzimuthalEquidistant_8hpp_source.html">GeographicLib/AzimuthalEquidistant.hpp</a>></code><br/>
-</div>
-<p><a href="AzimuthalEquidistant_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="AzimuthalEquidistant_8cpp.html#a66c8226c0b34ef5b0138d44829f5c394">GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP</a>   "$Id: 324fc318b35a411f024cfd5046ba58b8ef819df7 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="AzimuthalEquidistant_8cpp_source.html">AzimuthalEquidistant.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a66c8226c0b34ef5b0138d44829f5c394"></a><!-- doxytag: member="AzimuthalEquidistant.cpp::GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP" ref="a66c8226c0b34ef5b0138d44829f5c394" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP   "$Id: 324fc318b35a411f024cfd5046ba58b8ef819df7 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="AzimuthalEquidistant_8cpp_source.html#l00012">12</a> of file <a class="el" href="AzimuthalEquidistant_8cpp_source.html">AzimuthalEquidistant.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/AzimuthalEquidistant_8cpp_source.html b/doc/html/AzimuthalEquidistant_8cpp_source.html
deleted file mode 100644
index 5008193..0000000
--- a/doc/html/AzimuthalEquidistant_8cpp_source.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: AzimuthalEquidistant.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">AzimuthalEquidistant.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="AzimuthalEquidistant_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file AzimuthalEquidistant.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::AzimuthalEquidistant class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="AzimuthalEquidistant_8hpp.html" title="Header for GeographicLib::AzimuthalEquidistant class.">GeographicLib/AzimuthalEquidistant.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="AzimuthalEquidistant_8cpp.html#a66c8226c0b34ef5b0138d44829f5c394">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: 324fc318b35a411f024cfd5046ba58b8ef819df7 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="AzimuthalEquidistant_8cpp.html#a66c8226c0b34ef5b0138d44829f5c394">GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="AzimuthalEquidistant_8hpp.html#a70d20e83eaef9177a9dbc4503fae17b7">GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> AzimuthalEquidistant::eps_ =
-<a name="l00023"></a>00023     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.01) * sqrt(numeric_limits<real>::min());
-<a name="l00024"></a>00024 
-<a name="l00025"></a><a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a8b4951b7c732f97aedeb8e869c9349d2">00025</a>   <span class="keywordtype">void</span> AzimuthalEquidistant::Forward(real lat0, real lon0, real lat, real lon,
-<a name="l00026"></a>00026                                      real& x, real& y, real& azi, real& rk)
-<a name="l00027"></a>00027     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00028"></a>00028     real sig, s, azi0, m;
-<a name="l00029"></a>00029     sig = _earth.Inverse(lat0, lon0, lat, lon, s, azi0, azi, m);
-<a name="l00030"></a>00030     azi0 *= <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00031"></a>00031     x = s * sin(azi0);
-<a name="l00032"></a>00032     y = s * cos(azi0);
-<a name="l00033"></a>00033     rk = !(sig <= eps_) ? m / s : 1;
-<a name="l00034"></a>00034   }
-<a name="l00035"></a>00035 
-<a name="l00036"></a><a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a26d1b6fe3af8750babaeb60efdfec062">00036</a>   <span class="keywordtype">void</span> AzimuthalEquidistant::Reverse(real lat0, real lon0, real x, real y,
-<a name="l00037"></a>00037                                      real& lat, real& lon, real& azi, real& rk)
-<a name="l00038"></a>00038     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00039"></a>00039     real
-<a name="l00040"></a>00040       azi0 = atan2(x, y) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00041"></a>00041       s = Math::hypot(x, y);
-<a name="l00042"></a>00042     real sig, m;
-<a name="l00043"></a>00043     sig = _earth.Direct(lat0, lon0, azi0, s, lat, lon, azi, m);
-<a name="l00044"></a>00044     rk = !(sig <= eps_) ? m / s : 1;
-<a name="l00045"></a>00045   }
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/AzimuthalEquidistant_8hpp.html b/doc/html/AzimuthalEquidistant_8hpp.html
deleted file mode 100644
index f7aba82..0000000
--- a/doc/html/AzimuthalEquidistant_8hpp.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: AzimuthalEquidistant.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">AzimuthalEquidistant.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Geodesic_8hpp_source.html">GeographicLib/Geodesic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="AzimuthalEquidistant_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Azimuthal Equidistant Projection.  <a href="classGeographicLib_1_1AzimuthalEquidistant.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="AzimuthalEquidistant_8hpp.html#a70d20e83eaef9177a9dbc4503fae17b7">GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP</a>   "$Id: 95a1d6e7a8c4613be25ec32550231601202da1e5 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="AzimuthalEquidistant_8hpp_source.html">AzimuthalEquidistant.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a70d20e83eaef9177a9dbc4503fae17b7"></a><!-- doxytag: member="AzimuthalEquidistant.hpp::GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP" ref="a70d20e83eaef9177a9dbc4503fae17b7" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP   "$Id: 95a1d6e7a8c4613be25ec32550231601202da1e5 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="AzimuthalEquidistant_8hpp_source.html#l00011">11</a> of file <a class="el" href="AzimuthalEquidistant_8hpp_source.html">AzimuthalEquidistant.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/AzimuthalEquidistant_8hpp_source.html b/doc/html/AzimuthalEquidistant_8hpp_source.html
deleted file mode 100644
index 16b6fc8..0000000
--- a/doc/html/AzimuthalEquidistant_8hpp_source.html
+++ /dev/null
@@ -1,227 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: AzimuthalEquidistant.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">AzimuthalEquidistant.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="AzimuthalEquidistant_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file AzimuthalEquidistant.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::AzimuthalEquidistant class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP)</span>
-<a name="l00011"></a><a class="code" href="AzimuthalEquidistant_8hpp.html#a70d20e83eaef9177a9dbc4503fae17b7">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 95a1d6e7a8c4613be25ec32550231601202da1e5 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00018"></a>00018 <span class="comment"></span>
-<a name="l00019"></a>00019 <span class="comment">  /**</span>
-<a name="l00020"></a>00020 <span class="comment">   * \brief Azimuthal Equidistant Projection.</span>
-<a name="l00021"></a>00021 <span class="comment">   *</span>
-<a name="l00022"></a>00022 <span class="comment">   * Azimuthal equidistant projection centered at an arbitrary position on the</span>
-<a name="l00023"></a>00023 <span class="comment">   * ellipsoid.  For a point in projected space (\e x, \e y), the geodesic</span>
-<a name="l00024"></a>00024 <span class="comment">   * distance from the center position is hypot(\e x, \e y) and the azimuth of</span>
-<a name="l00025"></a>00025 <span class="comment">   * the geodesic from the center point is atan2(\e x, \e y).  The Forward and</span>
-<a name="l00026"></a>00026 <span class="comment">   * Reverse methods also return the azimuth \e azi of the geodesic at (\e x,</span>
-<a name="l00027"></a>00027 <span class="comment">   * \e y) and reciprocal scale \e rk in the azimuthal direction which,</span>
-<a name="l00028"></a>00028 <span class="comment">   * together with the basic properties of the projection, serve to specify</span>
-<a name="l00029"></a>00029 <span class="comment">   * completely the local affine transformation between geographic and</span>
-<a name="l00030"></a>00030 <span class="comment">   * projected coordinates.</span>
-<a name="l00031"></a>00031 <span class="comment">   *</span>
-<a name="l00032"></a>00032 <span class="comment">   * The conversions all take place using a Geodesic object (by default</span>
-<a name="l00033"></a>00033 <span class="comment">   * Geodesic::WGS84).  For more information on geodesics see \ref geodesic.</span>
-<a name="l00034"></a>00034 <span class="comment">   *</span>
-<a name="l00035"></a>00035 <span class="comment">   * Example of use:</span>
-<a name="l00036"></a>00036 <span class="comment">   * \include example-AzimuthalEquidistant.cpp</span>
-<a name="l00037"></a>00037 <span class="comment">   *</span>
-<a name="l00038"></a>00038 <span class="comment">   * <a href="GeodesicProj.1.html">GeodesicProj</a> is a command-line utility</span>
-<a name="l00039"></a>00039 <span class="comment">   * providing access to the functionality of AzimuthalEquidistant, Gnomonic,</span>
-<a name="l00040"></a>00040 <span class="comment">   * and CassiniSoldner.</span>
-<a name="l00041"></a>00041 <span class="comment">   **********************************************************************/</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> AzimuthalEquidistant {
-<a name="l00044"></a>00044   <span class="keyword">private</span>:
-<a name="l00045"></a>00045     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00046"></a>00046     Geodesic _earth;
-<a name="l00047"></a>00047     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps_;
-<a name="l00048"></a>00048   <span class="keyword">public</span>:
-<a name="l00049"></a>00049 <span class="comment"></span>
-<a name="l00050"></a>00050 <span class="comment">    /**</span>
-<a name="l00051"></a>00051 <span class="comment">     * Constructor for AzimuthalEquidistant.</span>
-<a name="l00052"></a>00052 <span class="comment">     *</span>
-<a name="l00053"></a>00053 <span class="comment">     * @param[in] earth the Geodesic object to use for geodesic calculations.</span>
-<a name="l00054"></a>00054 <span class="comment">     *   By default this uses the WGS84 ellipsoid.</span>
-<a name="l00055"></a>00055 <span class="comment">     **********************************************************************/</span>
-<a name="l00056"></a><a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a125571cdeed68d10192611cc12e221ce">00056</a>     <span class="keyword">explicit</span> AzimuthalEquidistant(<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>& earth = <a class="code" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>)
-<a name="l00057"></a>00057       throw() : _earth(earth) {}
-<a name="l00058"></a>00058 <span class="comment"></span>
-<a name="l00059"></a>00059 <span class="comment">    /**</span>
-<a name="l00060"></a>00060 <span class="comment">     * Forward projection, from geographic to azimuthal equidistant.</span>
-<a name="l00061"></a>00061 <span class="comment">     *</span>
-<a name="l00062"></a>00062 <span class="comment">     * @param[in] lat0 latitude of center point of projection (degrees).</span>
-<a name="l00063"></a>00063 <span class="comment">     * @param[in] lon0 longitude of center point of projection (degrees).</span>
-<a name="l00064"></a>00064 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00065"></a>00065 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00066"></a>00066 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00067"></a>00067 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00068"></a>00068 <span class="comment">     * @param[out] azi azimuth of geodesic at point (degrees).</span>
-<a name="l00069"></a>00069 <span class="comment">     * @param[out] rk reciprocal of azimuthal scale at point.</span>
-<a name="l00070"></a>00070 <span class="comment">     *</span>
-<a name="l00071"></a>00071 <span class="comment">     * \e lat0 and \e lat should be in the range [-90, 90] and \e lon0 and \e</span>
-<a name="l00072"></a>00072 <span class="comment">     * lon should be in the range [-180, 360].  The scale of the projection is</span>
-<a name="l00073"></a>00073 <span class="comment">     * 1 in the "radial" direction, \e azi clockwise from true north, and is</span>
-<a name="l00074"></a>00074 <span class="comment">     * 1/\e rk in the direction perpendicular to this.  A call to Forward</span>
-<a name="l00075"></a>00075 <span class="comment">     * followed by a call to Reverse will return the original (\e lat, \e lon)</span>
-<a name="l00076"></a>00076 <span class="comment">     * (to within roundoff).</span>
-<a name="l00077"></a>00077 <span class="comment">     **********************************************************************/</span>
-<a name="l00078"></a>00078     <span class="keywordtype">void</span> Forward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon,
-<a name="l00079"></a>00079                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& rk) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00080"></a>00080 <span class="comment"></span>
-<a name="l00081"></a>00081 <span class="comment">    /**</span>
-<a name="l00082"></a>00082 <span class="comment">     * Reverse projection, from azimuthal equidistant to geographic.</span>
-<a name="l00083"></a>00083 <span class="comment">     *</span>
-<a name="l00084"></a>00084 <span class="comment">     * @param[in] lat0 latitude of center point of projection (degrees).</span>
-<a name="l00085"></a>00085 <span class="comment">     * @param[in] lon0 longitude of center point of projection (degrees).</span>
-<a name="l00086"></a>00086 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00087"></a>00087 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00088"></a>00088 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00089"></a>00089 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00090"></a>00090 <span class="comment">     * @param[out] azi azimuth of geodesic at point (degrees).</span>
-<a name="l00091"></a>00091 <span class="comment">     * @param[out] rk reciprocal of azimuthal scale at point.</span>
-<a name="l00092"></a>00092 <span class="comment">     *</span>
-<a name="l00093"></a>00093 <span class="comment">     * \e lat0 should be in the range [-90, 90] and \e lon0 should be in the</span>
-<a name="l00094"></a>00094 <span class="comment">     * range [-180, 360].  \e lat will be in the range [-90, 90] and \e lon</span>
-<a name="l00095"></a>00095 <span class="comment">     * will be in the range [-180, 180).  The scale of the projection is 1 in</span>
-<a name="l00096"></a>00096 <span class="comment">     * the "radial" direction, \e azi clockwise from true north, and is 1/\e rk</span>
-<a name="l00097"></a>00097 <span class="comment">     * in the direction perpendicular to this.  A call to Reverse followed by a</span>
-<a name="l00098"></a>00098 <span class="comment">     * call to Forward will return the original (\e x, \e y) (to roundoff) only</span>
-<a name="l00099"></a>00099 <span class="comment">     * if the geodesic to (\e x, \e y) is a shortest path.</span>
-<a name="l00100"></a>00100 <span class="comment">     **********************************************************************/</span>
-<a name="l00101"></a>00101     <span class="keywordtype">void</span> Reverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00102"></a>00102                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& rk) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00103"></a>00103 <span class="comment"></span>
-<a name="l00104"></a>00104 <span class="comment">    /**</span>
-<a name="l00105"></a>00105 <span class="comment">     * AzimuthalEquidistant::Forward without returning the azimuth and scale.</span>
-<a name="l00106"></a>00106 <span class="comment">     **********************************************************************/</span>
-<a name="l00107"></a><a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a950431c3d269fb82e9410f332c401786">00107</a>     <span class="keywordtype">void</span> Forward(real lat0, real lon0, real lat, real lon,
-<a name="l00108"></a>00108                  real& x, real& y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00109"></a>00109       real azi, rk;
-<a name="l00110"></a>00110       Forward(lat0, lon0, lat, lon, x, y, azi, rk);
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112 <span class="comment"></span>
-<a name="l00113"></a>00113 <span class="comment">    /**</span>
-<a name="l00114"></a>00114 <span class="comment">     * AzimuthalEquidistant::Reverse without returning the azimuth and scale.</span>
-<a name="l00115"></a>00115 <span class="comment">     **********************************************************************/</span>
-<a name="l00116"></a><a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a6b86b19f2e1c773e028e386a0f5e00e0">00116</a>     <span class="keywordtype">void</span> Reverse(real lat0, real lon0, real x, real y,
-<a name="l00117"></a>00117                  real& lat, real& lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00118"></a>00118       real azi, rk;
-<a name="l00119"></a>00119       Reverse(lat0, lon0, x, y, lat, lon, azi, rk);
-<a name="l00120"></a>00120     }
-<a name="l00121"></a>00121 <span class="comment"></span>
-<a name="l00122"></a>00122 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00123"></a>00123 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00124"></a>00124 <span class="comment">    ///@{</span>
-<a name="l00125"></a>00125 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00126"></a>00126 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00127"></a>00127 <span class="comment">     *   the value inherited from the Geodesic object used in the constructor.</span>
-<a name="l00128"></a>00128 <span class="comment">     **********************************************************************/</span>
-<a name="l00129"></a><a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a42c4103265af804395b8b5260a4c25e0">00129</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a42c4103265af804395b8b5260a4c25e0">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.MajorRadius(); }
-<a name="l00130"></a>00130 <span class="comment"></span>
-<a name="l00131"></a>00131 <span class="comment">    /**</span>
-<a name="l00132"></a>00132 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value</span>
-<a name="l00133"></a>00133 <span class="comment">     *   inherited from the Geodesic object used in the constructor.</span>
-<a name="l00134"></a>00134 <span class="comment">     **********************************************************************/</span>
-<a name="l00135"></a><a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a3f300fcc10aeee9dc88ff93fb991f191">00135</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a3f300fcc10aeee9dc88ff93fb991f191">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.Flattening() [...]
-<a name="l00136"></a>00136 <span class="comment">    ///@}</span>
-<a name="l00137"></a>00137 <span class="comment"></span><span class="comment"></span>
-<a name="l00138"></a>00138 <span class="comment">    /// \cond SKIP</span>
-<a name="l00139"></a>00139 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00140"></a>00140 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00141"></a>00141 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00142"></a>00142 <span class="comment">     **********************************************************************/</span>
-<a name="l00143"></a>00143     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw()
-<a name="l00144"></a>00144     { <span class="keywordflow">return</span> _earth.InverseFlattening(); }<span class="comment"></span>
-<a name="l00145"></a>00145 <span class="comment">    /// \endcond</span>
-<a name="l00146"></a>00146 <span class="comment"></span>  };
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 <span class="preprocessor">#endif  // GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CartConvert.1.html b/doc/html/CartConvert.1.html
deleted file mode 100644
index a10e55c..0000000
--- a/doc/html/CartConvert.1.html
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>CartConvert -- convert geodetic coordinates to geocentric or local cartesian</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>CartConvert -- convert geodetic coordinates to geocentric or local cartesian</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>CartConvert</strong> [ <strong>-r</strong> ] [ <strong>-l</strong> <em>lat0</em> <em>lon0</em> <em>h0</em> ] [ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Convert geodetic coordinates to either geocentric or local cartesian
-coordinates.  Geocentric coordinates have the origin at the center of
-the earth, with the <em>z</em> axis going thru the north pole, and the <em>x</em>
-axis thru <em>latitude</em> = 0, <em>longitude</em> = 0.  By default, the
-conversion is to geocentric coordinates.  Specifying <strong>-l</strong> <em>lat0</em>
-<em>lon0</em> <em>h0</em> causes a local coordinate system to be used with the
-origin at <em>latitude</em> = <em>lat0</em>, <em>longitude</em> = <em>lon0</em>, <em>height</em> =
-<em>h0</em>, <em>z</em> normal to the ellipsoid and <em>y</em> due north.</p>
-<p>Geodetic coordinates are provided on standard input as a set of lines
-containing (blank separated) <em>latitude</em>, <em>longitude</em> (decimal degrees
-or degrees, minutes and seconds), and <em>height</em> above the ellipsoid
-(meters).  For each set of geodetic coordinates, the corresponding
-cartesian coordinates <em>x</em>, <em>y</em>, <em>z</em> (meters) are printed on standard
-output.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
-
-<dd>
-<p>perform the reverse projection.  <em>x</em>, <em>y</em>, <em>z</em> are given on standard
-input and each line of standard output gives <em>latitude</em>, <em>longitude</em>,
-<em>height</em>.</p>
-</dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
-
-<dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 33.3 44.4 6000 | CartConvert
-   => 3816209.60 3737108.55 3485109.57
-   echo 33.3 44.4 6000 | CartConvert -l 33 44 20
-   => 37288.97 33374.29 5783.64
-   echo 30000 30000 0 | CartConvert -r
-   => 6.483 45 -6335709.73</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>CartConvert</strong> to return an exit
-code of 1.  However, an error does not cause <strong>CartConvert</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The algorithm for converting geocentric to geodetic coordinates is given
-in Appendix B of C. F. F. Karney, <em>Geodesics on an ellipsoid of
-revolution</em>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215">http://arxiv.org/abs/1102.1215</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>CartConvert</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>CartConvert</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-02.  Prior to 2009-03 it was
-called ECEFConvert.</p>
-
-</body>
-
-</html>
diff --git a/doc/html/CartConvert_8cpp.html b/doc/html/CartConvert_8cpp.html
deleted file mode 100644
index e258d5e..0000000
--- a/doc/html/CartConvert_8cpp.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CartConvert.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">CartConvert.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for geodetic to cartesian coordinate conversions.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="Geocentric_8hpp_source.html">GeographicLib/Geocentric.hpp</a>></code><br/>
-<code>#include <<a class="el" href="LocalCartesian_8hpp_source.html">GeographicLib/LocalCartesian.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include "CartConvert.usage"</code><br/>
-</div>
-<p><a href="CartConvert_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for geodetic to cartesian coordinate conversions. </p>
-<p>Copyright (c) Charles Karney (2009-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o CartConvert \ <a class="el" href="CartConvert_8cpp.html" title="Command line utility for geodetic to cartesian coordinate conversions.">CartConvert.cpp</a> \ ../src/DMS.cpp \ ../src/Geocentric.cpp \ ../src/LocalCartesian.cpp</p>
-<p>See the <a href="CartConvert.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="CartConvert_8cpp_source.html">CartConvert.cpp</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="CartConvert.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="CartConvert_8cpp_source.html#l00032">32</a> of file <a class="el" href="CartConvert_8cpp_source.html">CartConvert.cpp</a>.</p>
-
-<p>References <a class="el" href="DMS_8cpp_source.html#l00207">GeographicLib::DMS::DecodeLatLon()</a>, <a class="el" href="LocalCartesian_8hpp_source.html#l00156">GeographicLib::LocalCartesian::Reverse()</a>, <a class="el" href="Geocentric_8hpp_source.html#l00195">GeographicLib::Geocentric::Reverse()</a>, <a class="el" href="LocalCartesian_8hpp_source.html#l00104">GeographicLib::LocalCartesian::Forward()</a>, and <a class="el" href="Geocentric_8hpp_source.html#l00134">GeographicLib::Geoc [...]
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CartConvert_8cpp_source.html b/doc/html/CartConvert_8cpp_source.html
deleted file mode 100644
index 9669dd3..0000000
--- a/doc/html/CartConvert_8cpp_source.html
+++ /dev/null
@@ -1,278 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CartConvert.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">CartConvert.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="CartConvert_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file CartConvert.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for geodetic to cartesian coordinate conversions</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o CartConvert \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       CartConvert.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/Geocentric.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/LocalCartesian.cpp</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * See the <a href="CartConvert.1.html">man page</a> for usage</span>
-<a name="l00017"></a>00017 <span class="comment"> * information.</span>
-<a name="l00018"></a>00018 <span class="comment"> **********************************************************************/</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="preprocessor">#include <iostream></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#include <sstream></span>
-<a name="l00022"></a>00022 <span class="preprocessor">#include <string></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include <sstream></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <fstream></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <<a class="code" href="LocalCartesian_8hpp.html" title="Header for GeographicLib::LocalCartesian class.">GeographicLib/LocalCartesian.hpp</a>></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#include "CartConvert.usage"</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a><a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00032</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00033"></a>00033   <span class="keywordflow">try</span> {
-<a name="l00034"></a>00034     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00035"></a>00035     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00036"></a>00036     <span class="keywordtype">bool</span> localcartesian = <span class="keyword">false</span>, reverse = <span class="keyword">false</span>;
-<a name="l00037"></a>00037     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00038"></a>00038       a = <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<real>(),
-<a name="l00039"></a>00039       f = Constants::WGS84_f<real>();
-<a name="l00040"></a>00040     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat0 = 0, lon0 = 0, h0 = 0;
-<a name="l00041"></a>00041     std::string istring, ifile, ofile, cdelim;
-<a name="l00042"></a>00042     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>;
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00045"></a>00045       std::string arg(argv[m]);
-<a name="l00046"></a>00046       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-r"</span>)
-<a name="l00047"></a>00047         reverse = <span class="keyword">true</span>;
-<a name="l00048"></a>00048       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-l"</span>) {
-<a name="l00049"></a>00049         localcartesian = <span class="keyword">true</span>;
-<a name="l00050"></a>00050         <span class="keywordflow">if</span> (m + 3 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00051"></a>00051         <span class="keywordflow">try</span> {
-<a name="l00052"></a>00052           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(std::string(argv[m + 1]), std::string(argv[m + 2]),
-<a name="l00053"></a>00053                             lat0, lon0);
-<a name="l00054"></a>00054           h0 = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m + 3]));
-<a name="l00055"></a>00055         }
-<a name="l00056"></a>00056         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00057"></a>00057           std::cerr << <span class="stringliteral">"Error decoding arguments of -l: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00058"></a>00058           <span class="keywordflow">return</span> 1;
-<a name="l00059"></a>00059         }
-<a name="l00060"></a>00060         m += 3;
-<a name="l00061"></a>00061       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-e"</span>) {
-<a name="l00062"></a>00062         <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00063"></a>00063         <span class="keywordflow">try</span> {
-<a name="l00064"></a>00064           a = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m + 1]));
-<a name="l00065"></a>00065           f = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(std::string(argv[m + 2]));
-<a name="l00066"></a>00066         }
-<a name="l00067"></a>00067         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00068"></a>00068           std::cerr << <span class="stringliteral">"Error decoding arguments of -e: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00069"></a>00069           <span class="keywordflow">return</span> 1;
-<a name="l00070"></a>00070         }
-<a name="l00071"></a>00071         m += 2;
-<a name="l00072"></a>00072       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00073"></a>00073         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00074"></a>00074         istring = argv[m];
-<a name="l00075"></a>00075       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00076"></a>00076         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00077"></a>00077         ifile = argv[m];
-<a name="l00078"></a>00078       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00079"></a>00079         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00080"></a>00080         ofile = argv[m];
-<a name="l00081"></a>00081       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00082"></a>00082         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00083"></a>00083         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00084"></a>00084           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00085"></a>00085           <span class="keywordflow">return</span> 1;
-<a name="l00086"></a>00086         }
-<a name="l00087"></a>00087         lsep = argv[m][0];
-<a name="l00088"></a>00088       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00089"></a>00089         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00090"></a>00090         cdelim = argv[m];
-<a name="l00091"></a>00091      } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00092"></a>00092         std::cout
-<a name="l00093"></a>00093           << argv[0]
-<a name="l00094"></a>00094           << <span class="stringliteral">": $Id: b9e53a72ea7d026978678f3ab9d726a2d8485079 $\n"</span>
-<a name="l00095"></a>00095           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00096"></a>00096         <span class="keywordflow">return</span> 0;
-<a name="l00097"></a>00097       } <span class="keywordflow">else</span>
-<a name="l00098"></a>00098         <span class="keywordflow">return</span> usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00099"></a>00099     }
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00102"></a>00102       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00103"></a>00103       <span class="keywordflow">return</span> 1;
-<a name="l00104"></a>00104     }
-<a name="l00105"></a>00105     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00106"></a>00106     std::ifstream infile;
-<a name="l00107"></a>00107     std::istringstream instring;
-<a name="l00108"></a>00108     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00109"></a>00109       infile.open(ifile.c_str());
-<a name="l00110"></a>00110       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00111"></a>00111         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00112"></a>00112         <span class="keywordflow">return</span> 1;
-<a name="l00113"></a>00113       }
-<a name="l00114"></a>00114     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00115"></a>00115       std::string::size_type m = 0;
-<a name="l00116"></a>00116       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00117"></a>00117         m = istring.find(lsep, m);
-<a name="l00118"></a>00118         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00119"></a>00119           <span class="keywordflow">break</span>;
-<a name="l00120"></a>00120         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00121"></a>00121       }
-<a name="l00122"></a>00122       instring.str(istring);
-<a name="l00123"></a>00123     }
-<a name="l00124"></a>00124     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00125"></a>00125       (!istring.empty() ? &instring : &std::cin);
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127     std::ofstream outfile;
-<a name="l00128"></a>00128     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00129"></a>00129     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00130"></a>00130       outfile.open(ofile.c_str());
-<a name="l00131"></a>00131       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00132"></a>00132         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00133"></a>00133         <span class="keywordflow">return</span> 1;
-<a name="l00134"></a>00134       }
-<a name="l00135"></a>00135     }
-<a name="l00136"></a>00136     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> ec(a, f);
-<a name="l00139"></a>00139     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">LocalCartesian</a> lc(lat0, lon0, h0, ec);
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     std::string s;
-<a name="l00142"></a>00142     <span class="keywordtype">int</span> retval = 0;
-<a name="l00143"></a>00143     <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00144"></a>00144       <span class="keywordflow">try</span> {
-<a name="l00145"></a>00145         std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00146"></a>00146         <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00147"></a>00147           std::string::size_type m = s.find(cdelim);
-<a name="l00148"></a>00148           <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00149"></a>00149             eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00150"></a>00150             s = s.substr(0, m);
-<a name="l00151"></a>00151           }
-<a name="l00152"></a>00152         }
-<a name="l00153"></a>00153         std::istringstream str(s);
-<a name="l00154"></a>00154         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, lon, h, x, y, z;
-<a name="l00155"></a>00155         std::string stra, strb, strc;
-<a name="l00156"></a>00156         <span class="keywordflow">if</span> (!(str >> stra >> strb >> strc))
-<a name="l00157"></a>00157           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00158"></a>00158         <span class="keywordflow">if</span> (reverse) {
-<a name="l00159"></a>00159           x = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(stra);
-<a name="l00160"></a>00160           y = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(strb);
-<a name="l00161"></a>00161           z = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(strc);
-<a name="l00162"></a>00162         } <span class="keywordflow">else</span> {
-<a name="l00163"></a>00163           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(stra, strb, lat, lon);
-<a name="l00164"></a>00164           h = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(strc);
-<a name="l00165"></a>00165         }
-<a name="l00166"></a>00166         std::string strd;
-<a name="l00167"></a>00167         <span class="keywordflow">if</span> (str >> strd)
-<a name="l00168"></a>00168           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extraneous input: "</span> + strd);
-<a name="l00169"></a>00169         <span class="keywordflow">if</span> (reverse) {
-<a name="l00170"></a>00170           <span class="keywordflow">if</span> (localcartesian)
-<a name="l00171"></a>00171             lc.<a class="code" href="classGeographicLib_1_1LocalCartesian.html#ac34878de3ae995e7d54f0347a1f34118">Reverse</a>(x, y, z, lat, lon, h);
-<a name="l00172"></a>00172           <span class="keywordflow">else</span>
-<a name="l00173"></a>00173             ec.<a class="code" href="classGeographicLib_1_1Geocentric.html#a1907735ce8f5f915a14a5f7a8b3adfea">Reverse</a>(x, y, z, lat, lon, h);
-<a name="l00174"></a>00174           *output << Utility::str<real>(lat, 15) << <span class="stringliteral">" "</span>
-<a name="l00175"></a>00175                   << Utility::str<real>(lon, 15) << <span class="stringliteral">" "</span>
-<a name="l00176"></a>00176                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(h, 12) << eol;
-<a name="l00177"></a>00177         } <span class="keywordflow">else</span> {
-<a name="l00178"></a>00178           <span class="keywordflow">if</span> (localcartesian)
-<a name="l00179"></a>00179             lc.<a class="code" href="classGeographicLib_1_1LocalCartesian.html#a6426e95f904f224eabedb8fcd17fe537">Forward</a>(lat, lon, h, x, y, z);
-<a name="l00180"></a>00180           <span class="keywordflow">else</span>
-<a name="l00181"></a>00181             ec.<a class="code" href="classGeographicLib_1_1Geocentric.html#a65320594cad8c03d28beaa409f3d6fae">Forward</a>(lat, lon, h, x, y, z);
-<a name="l00182"></a>00182           *output << Utility::str<real>(x, 10) << <span class="stringliteral">" "</span>
-<a name="l00183"></a>00183                   << Utility::str<real>(y, 10) << <span class="stringliteral">" "</span>
-<a name="l00184"></a>00184                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(z, 10) << eol;
-<a name="l00185"></a>00185         }
-<a name="l00186"></a>00186       }
-<a name="l00187"></a>00187       <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00188"></a>00188         *output << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00189"></a>00189         retval = 1;
-<a name="l00190"></a>00190       }
-<a name="l00191"></a>00191     }
-<a name="l00192"></a>00192     <span class="keywordflow">return</span> retval;
-<a name="l00193"></a>00193   }
-<a name="l00194"></a>00194   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00195"></a>00195     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00196"></a>00196     <span class="keywordflow">return</span> 1;
-<a name="l00197"></a>00197   }
-<a name="l00198"></a>00198   <span class="keywordflow">catch</span> (...) {
-<a name="l00199"></a>00199     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00200"></a>00200     <span class="keywordflow">return</span> 1;
-<a name="l00201"></a>00201   }
-<a name="l00202"></a>00202 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CassiniSoldner_8cpp.html b/doc/html/CassiniSoldner_8cpp.html
deleted file mode 100644
index a9e0538..0000000
--- a/doc/html/CassiniSoldner_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CassiniSoldner.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">CassiniSoldner.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="CassiniSoldner_8hpp_source.html">GeographicLib/CassiniSoldner.hpp</a>></code><br/>
-</div>
-<p><a href="CassiniSoldner_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="CassiniSoldner_8cpp.html#a91edbe2e2eaf2776b80aecf2107909d4">GEOGRAPHICLIB_CASSINISOLDNER_CPP</a>   "$Id: 2823df38f3e31fd8b882e2f55ad72d6419b03246 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="CassiniSoldner_8cpp_source.html">CassiniSoldner.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a91edbe2e2eaf2776b80aecf2107909d4"></a><!-- doxytag: member="CassiniSoldner.cpp::GEOGRAPHICLIB_CASSINISOLDNER_CPP" ref="a91edbe2e2eaf2776b80aecf2107909d4" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_CASSINISOLDNER_CPP   "$Id: 2823df38f3e31fd8b882e2f55ad72d6419b03246 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8cpp_source.html#l00012">12</a> of file <a class="el" href="CassiniSoldner_8cpp_source.html">CassiniSoldner.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CassiniSoldner_8cpp_source.html b/doc/html/CassiniSoldner_8cpp_source.html
deleted file mode 100644
index 21b1ab8..0000000
--- a/doc/html/CassiniSoldner_8cpp_source.html
+++ /dev/null
@@ -1,173 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CassiniSoldner.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">CassiniSoldner.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="CassiniSoldner_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file CassiniSoldner.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::CassiniSoldner class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="CassiniSoldner_8hpp.html" title="Header for GeographicLib::CassiniSoldner class.">GeographicLib/CassiniSoldner.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="CassiniSoldner_8cpp.html#a91edbe2e2eaf2776b80aecf2107909d4">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_CASSINISOLDNER_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: 2823df38f3e31fd8b882e2f55ad72d6419b03246 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="CassiniSoldner_8cpp.html#a91edbe2e2eaf2776b80aecf2107909d4">GEOGRAPHICLIB_CASSINISOLDNER_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="CassiniSoldner_8hpp.html#ab674f10f5e4e3b25dc68c65fa408e315">GEOGRAPHICLIB_CASSINISOLDNER_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> CassiniSoldner::eps1_ =
-<a name="l00023"></a>00023     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.01) * sqrt(numeric_limits<real>::epsilon());
-<a name="l00024"></a>00024   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> CassiniSoldner::tiny_ = sqrt(numeric_limits<real>::min());
-<a name="l00025"></a>00025 
-<a name="l00026"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#af9bdc7088bca547dcc191691b2737759">00026</a>   <span class="keywordtype">void</span> CassiniSoldner::Reset(real lat0, real lon0) <span class="keywordflow">throw</span>() {
-<a name="l00027"></a>00027     _meridian = _earth.Line(lat0, lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0),
-<a name="l00028"></a>00028                             Geodesic::LATITUDE | Geodesic::LONGITUDE |
-<a name="l00029"></a>00029                             Geodesic::DISTANCE | Geodesic::DISTANCE_IN |
-<a name="l00030"></a>00030                             Geodesic::AZIMUTH);
-<a name="l00031"></a>00031     real
-<a name="l00032"></a>00032       phi = LatitudeOrigin() * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00033"></a>00033       f = _earth.Flattening();
-<a name="l00034"></a>00034     _sbet0 = (1 - f) * sin(phi);
-<a name="l00035"></a>00035     _cbet0 = abs(LatitudeOrigin()) == 90 ? 0 : cos(phi);
-<a name="l00036"></a>00036     SinCosNorm(_sbet0, _cbet0);
-<a name="l00037"></a>00037   }
-<a name="l00038"></a>00038 
-<a name="l00039"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a37656c7551b10ad75a40758d0bba570d">00039</a>   <span class="keywordtype">void</span> CassiniSoldner::Forward(real lat, real lon, real& x, real& y,
-<a name="l00040"></a>00040                                real& azi, real& rk) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00041"></a>00041     <span class="keywordflow">if</span> (!Init())
-<a name="l00042"></a>00042       <span class="keywordflow">return</span>;
-<a name="l00043"></a>00043     real dlon = AngNormalize(lon - LongitudeOrigin());
-<a name="l00044"></a>00044     real sig12, s12, azi1, azi2;
-<a name="l00045"></a>00045     lat = AngRound(lat);
-<a name="l00046"></a>00046     sig12 = _earth.Inverse(lat, -abs(dlon), lat, abs(dlon), s12, azi1, azi2);
-<a name="l00047"></a>00047     <span class="keywordflow">if</span> (sig12 < 100 * tiny_)
-<a name="l00048"></a>00048       sig12 = s12 = 0;
-<a name="l00049"></a>00049     sig12 *= <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5);
-<a name="l00050"></a>00050     s12 *= <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5);
-<a name="l00051"></a>00051     <span class="keywordflow">if</span> (s12 == 0) {
-<a name="l00052"></a>00052       real da = (azi2 - azi1)/2;
-<a name="l00053"></a>00053       <span class="keywordflow">if</span> (abs(dlon) <= 90) {
-<a name="l00054"></a>00054         azi1 = 90 - da;
-<a name="l00055"></a>00055         azi2 = 90 + da;
-<a name="l00056"></a>00056       } <span class="keywordflow">else</span> {
-<a name="l00057"></a>00057         azi1 = -90 - da;
-<a name="l00058"></a>00058         azi2 = -90 + da;
-<a name="l00059"></a>00059       }
-<a name="l00060"></a>00060     }
-<a name="l00061"></a>00061     <span class="keywordflow">if</span> (dlon < 0) {
-<a name="l00062"></a>00062       azi2 = azi1;
-<a name="l00063"></a>00063       s12 = -s12;
-<a name="l00064"></a>00064       sig12 = -sig12;
-<a name="l00065"></a>00065     }
-<a name="l00066"></a>00066     x = s12;
-<a name="l00067"></a>00067     azi = AngNormalize(azi2);
-<a name="l00068"></a>00068     <a class="code" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> perp(_earth.Line(lat, dlon, azi2, Geodesic::GEODESICSCALE));
-<a name="l00069"></a>00069     real t;
-<a name="l00070"></a>00070     perp.<a class="code" href="classGeographicLib_1_1GeodesicLine.html#ad9522110fe6a5a0c7f912a6b1a23094d">GenPosition</a>(<span class="keyword">true</span>, -sig12,
-<a name="l00071"></a>00071                      Geodesic::GEODESICSCALE,
-<a name="l00072"></a>00072                      t, t, t, t, t, t, rk, t);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074     real
-<a name="l00075"></a>00075       alp0 = perp.EquatorialAzimuth() * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00076"></a>00076       calp0 = cos(alp0), salp0 = sin(alp0),
-<a name="l00077"></a>00077       sbet1 = lat >=0 ? calp0 : -calp0,
-<a name="l00078"></a>00078       cbet1 = abs(dlon) <= 90 ? abs(salp0) : -abs(salp0),
-<a name="l00079"></a>00079       sbet01 = sbet1 * _cbet0 - cbet1 * _sbet0,
-<a name="l00080"></a>00080       cbet01 = cbet1 * _cbet0 + sbet1 * _sbet0,
-<a name="l00081"></a>00081       sig01 = atan2(sbet01, cbet01) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00082"></a>00082     _meridian.GenPosition(<span class="keyword">true</span>, sig01,
-<a name="l00083"></a>00083                           Geodesic::DISTANCE,
-<a name="l00084"></a>00084                           t, t, t, y, t, t, t, t);
-<a name="l00085"></a>00085   }
-<a name="l00086"></a>00086 
-<a name="l00087"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#aea917b790f577026184a0bb262102db4">00087</a>   <span class="keywordtype">void</span> CassiniSoldner::Reverse(real x, real y, real& lat, real& lon,
-<a name="l00088"></a>00088                                real& azi, real& rk) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00089"></a>00089     <span class="keywordflow">if</span> (!Init())
-<a name="l00090"></a>00090       <span class="keywordflow">return</span>;
-<a name="l00091"></a>00091     real lat1, lon1;
-<a name="l00092"></a>00092     real azi0, t;
-<a name="l00093"></a>00093     _meridian.Position(y, lat1, lon1, azi0);
-<a name="l00094"></a>00094     _earth.Direct(lat1, lon1, azi0 + 90, x, lat, lon, azi, rk, t);
-<a name="l00095"></a>00095   }
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CassiniSoldner_8hpp.html b/doc/html/CassiniSoldner_8hpp.html
deleted file mode 100644
index 4abd88a..0000000
--- a/doc/html/CassiniSoldner_8hpp.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CassiniSoldner.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">CassiniSoldner.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Geodesic_8hpp_source.html">GeographicLib/Geodesic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="GeodesicLine_8hpp_source.html">GeographicLib/GeodesicLine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="CassiniSoldner_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Cassini-Soldner Projection.  <a href="classGeographicLib_1_1CassiniSoldner.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="CassiniSoldner_8hpp.html#ab674f10f5e4e3b25dc68c65fa408e315">GEOGRAPHICLIB_CASSINISOLDNER_HPP</a>   "$Id: d794ea8a1e64fd9cbb8dcee34755b6dc4fee623a $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ab674f10f5e4e3b25dc68c65fa408e315"></a><!-- doxytag: member="CassiniSoldner.hpp::GEOGRAPHICLIB_CASSINISOLDNER_HPP" ref="ab674f10f5e4e3b25dc68c65fa408e315" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_CASSINISOLDNER_HPP   "$Id: d794ea8a1e64fd9cbb8dcee34755b6dc4fee623a $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00011">11</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CassiniSoldner_8hpp_source.html b/doc/html/CassiniSoldner_8hpp_source.html
deleted file mode 100644
index 09ef314..0000000
--- a/doc/html/CassiniSoldner_8hpp_source.html
+++ /dev/null
@@ -1,320 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CassiniSoldner.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">CassiniSoldner.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="CassiniSoldner_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file CassiniSoldner.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::CassiniSoldner class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_CASSINISOLDNER_HPP)</span>
-<a name="l00011"></a><a class="code" href="CassiniSoldner_8hpp.html#ab674f10f5e4e3b25dc68c65fa408e315">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_CASSINISOLDNER_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: d794ea8a1e64fd9cbb8dcee34755b6dc4fee623a $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="GeodesicLine_8hpp.html" title="Header for GeographicLib::GeodesicLine class.">GeographicLib/GeodesicLine.hpp</a>></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00019"></a>00019 <span class="comment"></span>
-<a name="l00020"></a>00020 <span class="comment">  /**</span>
-<a name="l00021"></a>00021 <span class="comment">   * \brief Cassini-Soldner Projection.</span>
-<a name="l00022"></a>00022 <span class="comment">   *</span>
-<a name="l00023"></a>00023 <span class="comment">   * Cassini-Soldner projection centered at an arbitrary position, \e lat0, \e</span>
-<a name="l00024"></a>00024 <span class="comment">   * lon0, on the ellipsoid.  This projection is a transverse cylindrical</span>
-<a name="l00025"></a>00025 <span class="comment">   * equidistant projection.  The projection from (\e lat, \e lon) to easting</span>
-<a name="l00026"></a>00026 <span class="comment">   * and northing (\e x, \e y) is defined by geodesics as follows.  Go north</span>
-<a name="l00027"></a>00027 <span class="comment">   * along a geodesic a distance \e y from the central point; then turn</span>
-<a name="l00028"></a>00028 <span class="comment">   * clockwise 90<sup>o</sup> and go a distance \e x along a geodesic.</span>
-<a name="l00029"></a>00029 <span class="comment">   * (Although the initial heading is north, this changes to south if the pole</span>
-<a name="l00030"></a>00030 <span class="comment">   * is crossed.)  This procedure uniquely defines the reverse projection.  The</span>
-<a name="l00031"></a>00031 <span class="comment">   * forward projection is constructed as follows.  Find the point (\e lat1, \e</span>
-<a name="l00032"></a>00032 <span class="comment">   * lon1) on the meridian closest to (\e lat, \e lon).  Here we consider the</span>
-<a name="l00033"></a>00033 <span class="comment">   * full meridian so that \e lon1 may be either \e lon0 or \e lon0 +</span>
-<a name="l00034"></a>00034 <span class="comment">   * 180<sup>o</sup>.  \e x is the geodesic distance from (\e lat1, \e lon1) to</span>
-<a name="l00035"></a>00035 <span class="comment">   * (\e lat, \e lon), appropriately signed according to which side of the</span>
-<a name="l00036"></a>00036 <span class="comment">   * central meridian (\e lat, \e lon) lies.  \e y is the shortest distance</span>
-<a name="l00037"></a>00037 <span class="comment">   * along the meridian from (\e lat0, \e lon0) to (\e lat1, \e lon1), again,</span>
-<a name="l00038"></a>00038 <span class="comment">   * appropriately signed according to the initial heading.  [Note that, in the</span>
-<a name="l00039"></a>00039 <span class="comment">   * case of prolate ellipsoids, the shortest meridional path from (\e lat0, \e</span>
-<a name="l00040"></a>00040 <span class="comment">   * lon0) to (\e lat1, \e lon1) may not be the shortest path.]  This procedure</span>
-<a name="l00041"></a>00041 <span class="comment">   * uniquely defines the forward projection except for a small class of points</span>
-<a name="l00042"></a>00042 <span class="comment">   * for which there may be two equally short routes for either leg of the</span>
-<a name="l00043"></a>00043 <span class="comment">   * path.</span>
-<a name="l00044"></a>00044 <span class="comment">   *</span>
-<a name="l00045"></a>00045 <span class="comment">   * Because of the properties of geodesics, the (\e x, \e y) grid is</span>
-<a name="l00046"></a>00046 <span class="comment">   * orthogonal.  The scale in the easting direction is unity.  The scale, \e</span>
-<a name="l00047"></a>00047 <span class="comment">   * k, in the northing direction is unity on the central meridian and</span>
-<a name="l00048"></a>00048 <span class="comment">   * increases away from the central meridian.  The projection routines return</span>
-<a name="l00049"></a>00049 <span class="comment">   * \e azi, the true bearing of the easting direction, and \e rk = 1/\e k, the</span>
-<a name="l00050"></a>00050 <span class="comment">   * reciprocal of the scale in the northing direction.</span>
-<a name="l00051"></a>00051 <span class="comment">   *</span>
-<a name="l00052"></a>00052 <span class="comment">   * The conversions all take place using a Geodesic object (by default</span>
-<a name="l00053"></a>00053 <span class="comment">   * Geodesic::WGS84).  For more information on geodesics see \ref geodesic.</span>
-<a name="l00054"></a>00054 <span class="comment">   * The determination of (\e lat1, \e lon1) in the forward projection is by</span>
-<a name="l00055"></a>00055 <span class="comment">   * solving the inverse geodesic problem for (\e lat, \e lon) and its twin</span>
-<a name="l00056"></a>00056 <span class="comment">   * obtained by reflection in the meridional plane.  The scale is found by</span>
-<a name="l00057"></a>00057 <span class="comment">   * determining where two neighboring geodesics intersecting the central</span>
-<a name="l00058"></a>00058 <span class="comment">   * meridian at \e lat1 and \e lat1 + \e dlat1 intersect and taking the ratio</span>
-<a name="l00059"></a>00059 <span class="comment">   * of the reduced lengths for the two geodesics between that point and,</span>
-<a name="l00060"></a>00060 <span class="comment">   * respectively, (\e lat1, \e lon1) and (\e lat, \e lon).</span>
-<a name="l00061"></a>00061 <span class="comment">   *</span>
-<a name="l00062"></a>00062 <span class="comment">   * Example of use:</span>
-<a name="l00063"></a>00063 <span class="comment">   * \include example-CassiniSoldner.cpp</span>
-<a name="l00064"></a>00064 <span class="comment">   *</span>
-<a name="l00065"></a>00065 <span class="comment">   * <a href="GeodesicProj.1.html">GeodesicProj</a> is a command-line utility</span>
-<a name="l00066"></a>00066 <span class="comment">   * providing access to the functionality of AzimuthalEquidistant, Gnomonic,</span>
-<a name="l00067"></a>00067 <span class="comment">   * and CassiniSoldner.</span>
-<a name="l00068"></a>00068 <span class="comment">   **********************************************************************/</span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> CassiniSoldner {
-<a name="l00071"></a>00071   <span class="keyword">private</span>:
-<a name="l00072"></a>00072     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00073"></a>00073     Geodesic _earth;
-<a name="l00074"></a>00074     GeodesicLine _meridian;
-<a name="l00075"></a>00075     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _sbet0, _cbet0;
-<a name="l00076"></a>00076     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps1_;
-<a name="l00077"></a>00077     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tiny_;
-<a name="l00078"></a>00078     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> maxit_ = 10;
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080     <span class="comment">// The following private helper functions are copied from Geodesic.</span>
-<a name="l00081"></a>00081     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> AngNormalize(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() {
-<a name="l00082"></a>00082       <span class="comment">// Place angle in [-180, 180).  Assumes x is in [-540, 540).</span>
-<a name="l00083"></a>00083       <span class="keywordflow">return</span> x >= 180 ? x - 360 : (x < -180 ? x + 360 : x);
-<a name="l00084"></a>00084     }
-<a name="l00085"></a>00085     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> AngRound(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() {
-<a name="l00086"></a>00086       <span class="comment">// The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57</span>
-<a name="l00087"></a>00087       <span class="comment">// for reals = 0.7 pm on the earth if x is an angle in degrees.  (This</span>
-<a name="l00088"></a>00088       <span class="comment">// is about 1000 times more resolution than we get with angles around 90</span>
-<a name="l00089"></a>00089       <span class="comment">// degrees.)  We use this to avoid having to deal with near singular</span>
-<a name="l00090"></a>00090       <span class="comment">// cases when x is non-zero but tiny (e.g., 1.0e-200).</span>
-<a name="l00091"></a>00091       <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.0625); <span class="comment">// 1/16</span>
-<a name="l00092"></a>00092       <span class="keyword">volatile</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y = std::abs(x);
-<a name="l00093"></a>00093       <span class="comment">// The compiler mustn't "simplify" z - (z - y) to y</span>
-<a name="l00094"></a>00094       y = y < z ? z - (z - y) : y;
-<a name="l00095"></a>00095       <span class="keywordflow">return</span> x < 0 ? -y : y;
-<a name="l00096"></a>00096     }
-<a name="l00097"></a>00097     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SinCosNorm(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& sinx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& cosx) <span class="keywordflow">throw</span>() {
-<a name="l00098"></a>00098       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> r = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(sinx, cosx);
-<a name="l00099"></a>00099       sinx /= r;
-<a name="l00100"></a>00100       cosx /= r;
-<a name="l00101"></a>00101     }
-<a name="l00102"></a>00102   <span class="keyword">public</span>:
-<a name="l00103"></a>00103 <span class="comment"></span>
-<a name="l00104"></a>00104 <span class="comment">    /**</span>
-<a name="l00105"></a>00105 <span class="comment">     * Constructor for CassiniSoldner.</span>
-<a name="l00106"></a>00106 <span class="comment">     *</span>
-<a name="l00107"></a>00107 <span class="comment">     * @param[in] earth the Geodesic object to use for geodesic calculations.</span>
-<a name="l00108"></a>00108 <span class="comment">     *   By default this uses the WGS84 ellipsoid.</span>
-<a name="l00109"></a>00109 <span class="comment">     *</span>
-<a name="l00110"></a>00110 <span class="comment">     * This constructor makes an "uninitialized" object.  Call Reset to set the</span>
-<a name="l00111"></a>00111 <span class="comment">     * central latitude and longitude, prior to calling Forward and Reverse.</span>
-<a name="l00112"></a>00112 <span class="comment">     **********************************************************************/</span>
-<a name="l00113"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a948f9d934615c4120eb23740635200bc">00113</a>     <span class="keyword">explicit</span> CassiniSoldner(<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>& earth = <a class="code" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>) throw()
-<a name="l00114"></a>00114       : _earth(earth) {}
-<a name="l00115"></a>00115 <span class="comment"></span>
-<a name="l00116"></a>00116 <span class="comment">    /**</span>
-<a name="l00117"></a>00117 <span class="comment">     * Constructor for CassiniSoldner specifying a center point.</span>
-<a name="l00118"></a>00118 <span class="comment">     *</span>
-<a name="l00119"></a>00119 <span class="comment">     * @param[in] lat0 latitude of center point of projection (degrees).</span>
-<a name="l00120"></a>00120 <span class="comment">     * @param[in] lon0 longitude of center point of projection (degrees).</span>
-<a name="l00121"></a>00121 <span class="comment">     * @param[in] earth the Geodesic object to use for geodesic calculations.</span>
-<a name="l00122"></a>00122 <span class="comment">     *   By default this uses the WGS84 ellipsoid.</span>
-<a name="l00123"></a>00123 <span class="comment">     *</span>
-<a name="l00124"></a>00124 <span class="comment">     * \e lat0 should be in the range [-90, 90] and \e lon0 should be in the</span>
-<a name="l00125"></a>00125 <span class="comment">     * range [-180, 360].</span>
-<a name="l00126"></a>00126 <span class="comment">     **********************************************************************/</span>
-<a name="l00127"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a1b19cedb287ec9bbe59ec18a0ad2a5e4">00127</a>     CassiniSoldner(real lat0, real lon0,
-<a name="l00128"></a>00128                    <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>& earth = <a class="code" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>) throw()
-<a name="l00129"></a>00129       : _earth(earth) {
-<a name="l00130"></a>00130       Reset(lat0, lon0);
-<a name="l00131"></a>00131     }
-<a name="l00132"></a>00132 <span class="comment"></span>
-<a name="l00133"></a>00133 <span class="comment">    /**</span>
-<a name="l00134"></a>00134 <span class="comment">     * Set the central point of the projection</span>
-<a name="l00135"></a>00135 <span class="comment">     *</span>
-<a name="l00136"></a>00136 <span class="comment">     * @param[in] lat0 latitude of center point of projection (degrees).</span>
-<a name="l00137"></a>00137 <span class="comment">     * @param[in] lon0 longitude of center point of projection (degrees).</span>
-<a name="l00138"></a>00138 <span class="comment">     *</span>
-<a name="l00139"></a>00139 <span class="comment">     * \e lat0 should be in the range [-90, 90] and \e lon0 should be in the</span>
-<a name="l00140"></a>00140 <span class="comment">     * range [-180, 360].</span>
-<a name="l00141"></a>00141 <span class="comment">     **********************************************************************/</span>
-<a name="l00142"></a>00142     <span class="keywordtype">void</span> Reset(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0) <span class="keywordflow">throw</span>();
-<a name="l00143"></a>00143 <span class="comment"></span>
-<a name="l00144"></a>00144 <span class="comment">    /**</span>
-<a name="l00145"></a>00145 <span class="comment">     * Forward projection, from geographic to Cassini-Soldner.</span>
-<a name="l00146"></a>00146 <span class="comment">     *</span>
-<a name="l00147"></a>00147 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00148"></a>00148 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00149"></a>00149 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00150"></a>00150 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00151"></a>00151 <span class="comment">     * @param[out] azi azimuth of easting direction at point (degrees).</span>
-<a name="l00152"></a>00152 <span class="comment">     * @param[out] rk reciprocal of azimuthal northing scale at point.</span>
-<a name="l00153"></a>00153 <span class="comment">     *</span>
-<a name="l00154"></a>00154 <span class="comment">     * \e lat should be in the range [-90, 90] and \e lon should be in the</span>
-<a name="l00155"></a>00155 <span class="comment">     * range [-180, 360].  A call to Forward followed by a call to Reverse will</span>
-<a name="l00156"></a>00156 <span class="comment">     * return the original (\e lat, \e lon) (to within roundoff).  The routine</span>
-<a name="l00157"></a>00157 <span class="comment">     * does nothing if the origin has not been set.</span>
-<a name="l00158"></a>00158 <span class="comment">     **********************************************************************/</span>
-<a name="l00159"></a>00159     <span class="keywordtype">void</span> Forward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon,
-<a name="l00160"></a>00160                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& rk) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00161"></a>00161 <span class="comment"></span>
-<a name="l00162"></a>00162 <span class="comment">    /**</span>
-<a name="l00163"></a>00163 <span class="comment">     * Reverse projection, from Cassini-Soldner to geographic.</span>
-<a name="l00164"></a>00164 <span class="comment">     *</span>
-<a name="l00165"></a>00165 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00166"></a>00166 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00167"></a>00167 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00168"></a>00168 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00169"></a>00169 <span class="comment">     * @param[out] azi azimuth of easting direction at point (degrees).</span>
-<a name="l00170"></a>00170 <span class="comment">     * @param[out] rk reciprocal of azimuthal northing scale at point.</span>
-<a name="l00171"></a>00171 <span class="comment">     *</span>
-<a name="l00172"></a>00172 <span class="comment">     * A call to Reverse followed by a call to Forward will return the original</span>
-<a name="l00173"></a>00173 <span class="comment">     * (\e x, \e y) (to within roundoff), provided that \e x and \e y are</span>
-<a name="l00174"></a>00174 <span class="comment">     * sufficiently small not to "wrap around" the earth.  The routine does</span>
-<a name="l00175"></a>00175 <span class="comment">     * nothing if the origin has not been set.</span>
-<a name="l00176"></a>00176 <span class="comment">     **********************************************************************/</span>
-<a name="l00177"></a>00177     <span class="keywordtype">void</span> Reverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00178"></a>00178                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& rk) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00179"></a>00179 <span class="comment"></span>
-<a name="l00180"></a>00180 <span class="comment">    /**</span>
-<a name="l00181"></a>00181 <span class="comment">     * CassiniSoldner::Forward without returning the azimuth and scale.</span>
-<a name="l00182"></a>00182 <span class="comment">     **********************************************************************/</span>
-<a name="l00183"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a87bf8d3b416bbfd8b7a2c5269245e693">00183</a>     <span class="keywordtype">void</span> Forward(real lat, real lon,
-<a name="l00184"></a>00184                  real& x, real& y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00185"></a>00185       real azi, rk;
-<a name="l00186"></a>00186       Forward(lat, lon, x, y, azi, rk);
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188 <span class="comment"></span>
-<a name="l00189"></a>00189 <span class="comment">    /**</span>
-<a name="l00190"></a>00190 <span class="comment">     * CassiniSoldner::Reverse without returning the azimuth and scale.</span>
-<a name="l00191"></a>00191 <span class="comment">     **********************************************************************/</span>
-<a name="l00192"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a27a675e995d2c1fdd0ab4c0ab397e065">00192</a>     <span class="keywordtype">void</span> Reverse(real x, real y,
-<a name="l00193"></a>00193                  real& lat, real& lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00194"></a>00194       real azi, rk;
-<a name="l00195"></a>00195       Reverse(x, y, lat, lon, azi, rk);
-<a name="l00196"></a>00196     }
-<a name="l00197"></a>00197 <span class="comment"></span>
-<a name="l00198"></a>00198 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00199"></a>00199 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00200"></a>00200 <span class="comment">    ///@{</span>
-<a name="l00201"></a>00201 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00202"></a>00202 <span class="comment">     * @return true if the object has been initialized.</span>
-<a name="l00203"></a>00203 <span class="comment">     **********************************************************************/</span>
-<a name="l00204"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a3f71bb8b662438a7954be174315ce974">00204</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a3f71bb8b662438a7954be174315ce974">Init</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _meridian.Init(); }
-<a name="l00205"></a>00205 <span class="comment"></span>
-<a name="l00206"></a>00206 <span class="comment">    /**</span>
-<a name="l00207"></a>00207 <span class="comment">     * @return \e lat0 the latitude of origin (degrees).</span>
-<a name="l00208"></a>00208 <span class="comment">     **********************************************************************/</span>
-<a name="l00209"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a2aa51120af199603f57d54b8c9a0bdde">00209</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real LatitudeOrigin() <span class="keyword">const</span> throw()
-<a name="l00210"></a>00210     { <span class="keywordflow">return</span> _meridian.Latitude(); }
-<a name="l00211"></a>00211 <span class="comment"></span>
-<a name="l00212"></a>00212 <span class="comment">    /**</span>
-<a name="l00213"></a>00213 <span class="comment">     * @return \e lon0 the longitude of origin (degrees).</span>
-<a name="l00214"></a>00214 <span class="comment">     **********************************************************************/</span>
-<a name="l00215"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#aeb5c42b5cb6202a2371ba84bf76e0161">00215</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real LongitudeOrigin() <span class="keyword">const</span> throw()
-<a name="l00216"></a>00216     { <span class="keywordflow">return</span> _meridian.Longitude(); }
-<a name="l00217"></a>00217 <span class="comment"></span>
-<a name="l00218"></a>00218 <span class="comment">    /**</span>
-<a name="l00219"></a>00219 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00220"></a>00220 <span class="comment">     *   the value inherited from the Geodesic object used in the constructor.</span>
-<a name="l00221"></a>00221 <span class="comment">     **********************************************************************/</span>
-<a name="l00222"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a0019eeb70b5493de687c5cc36ae7f43c">00222</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a0019eeb70b5493de687c5cc36ae7f43c">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.MajorRadius(); }
-<a name="l00223"></a>00223 <span class="comment"></span>
-<a name="l00224"></a>00224 <span class="comment">    /**</span>
-<a name="l00225"></a>00225 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value</span>
-<a name="l00226"></a>00226 <span class="comment">     *   inherited from the Geodesic object used in the constructor.</span>
-<a name="l00227"></a>00227 <span class="comment">     **********************************************************************/</span>
-<a name="l00228"></a><a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a8d618d5abe71a49fc5ec4f2801d22555">00228</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1CassiniSoldner.html#a8d618d5abe71a49fc5ec4f2801d22555">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.Flattening(); }<span cla [...]
-<a name="l00229"></a>00229 <span class="comment">    ///@}</span>
-<a name="l00230"></a>00230 <span class="comment"></span><span class="comment"></span>
-<a name="l00231"></a>00231 <span class="comment">    /// \cond SKIP</span>
-<a name="l00232"></a>00232 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00233"></a>00233 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00234"></a>00234 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00235"></a>00235 <span class="comment">     **********************************************************************/</span>
-<a name="l00236"></a>00236     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw()
-<a name="l00237"></a>00237     { <span class="keywordflow">return</span> _earth.InverseFlattening(); }<span class="comment"></span>
-<a name="l00238"></a>00238 <span class="comment">    /// \endcond</span>
-<a name="l00239"></a>00239 <span class="comment"></span>  };
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243 <span class="preprocessor">#endif  // GEOGRAPHICLIB_CASSINISOLDNER_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CircularEngine_8cpp.html b/doc/html/CircularEngine_8cpp.html
deleted file mode 100644
index 1606779..0000000
--- a/doc/html/CircularEngine_8cpp.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CircularEngine.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">CircularEngine.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">GeographicLib::CircularEngine</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="CircularEngine_8hpp_source.html">GeographicLib/CircularEngine.hpp</a>></code><br/>
-<code>#include <limits></code><br/>
-</div>
-<p><a href="CircularEngine_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="CircularEngine_8cpp.html#af686808d87a6f2cd0b1305f1aeac536d">GEOGRAPHICLIB_CIRCULARENGINE_CPP</a>   "$Id: bdd0d21aa34063706e4042410f06bb0f7844fea9 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">GeographicLib::CircularEngine</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="CircularEngine_8cpp_source.html">CircularEngine.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="af686808d87a6f2cd0b1305f1aeac536d"></a><!-- doxytag: member="CircularEngine.cpp::GEOGRAPHICLIB_CIRCULARENGINE_CPP" ref="af686808d87a6f2cd0b1305f1aeac536d" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_CIRCULARENGINE_CPP   "$Id: bdd0d21aa34063706e4042410f06bb0f7844fea9 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="CircularEngine_8cpp_source.html#l00013">13</a> of file <a class="el" href="CircularEngine_8cpp_source.html">CircularEngine.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CircularEngine_8cpp_source.html b/doc/html/CircularEngine_8cpp_source.html
deleted file mode 100644
index 927052b..0000000
--- a/doc/html/CircularEngine_8cpp_source.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CircularEngine.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">CircularEngine.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="CircularEngine_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file CircularEngine.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::CircularEngine class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="CircularEngine_8hpp.html" title="Header for GeographicLib::CircularEngine class.">GeographicLib/CircularEngine.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <limits></span>
-<a name="l00012"></a>00012 
-<a name="l00013"></a><a class="code" href="CircularEngine_8cpp.html#af686808d87a6f2cd0b1305f1aeac536d">00013</a> <span class="preprocessor">#define GEOGRAPHICLIB_CIRCULARENGINE_CPP \</span>
-<a name="l00014"></a>00014 <span class="preprocessor">  "$Id: bdd0d21aa34063706e4042410f06bb0f7844fea9 $"</span>
-<a name="l00015"></a>00015 <span class="preprocessor"></span>
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="CircularEngine_8cpp.html#af686808d87a6f2cd0b1305f1aeac536d">GEOGRAPHICLIB_CIRCULARENGINE_CPP</a>)
-<a name="l00017"></a>00017 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="CircularEngine_8hpp.html#abfcea264d0e3f7a45c8ff8de7f2e539f">GEOGRAPHICLIB_CIRCULARENGINE_HPP</a>)
-<a name="l00018"></a>00018 
-<a name="l00019"></a>00019 namespace GeographicLib {
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021   <span class="keyword">using namespace </span>std;
-<a name="l00022"></a>00022 
-<a name="l00023"></a>00023   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> CircularEngine::Value(<span class="keywordtype">bool</span> gradp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cl, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sl,
-<a name="l00024"></a>00024                                    <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gradx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& grady, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gradz)
-<a name="l00025"></a>00025     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00026"></a>00026     gradp = _gradp && gradp;
-<a name="l00027"></a>00027     <span class="keyword">const</span> vector<real>& root_( SphericalEngine::root_ );
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029     <span class="comment">// Initialize outer sum</span>
-<a name="l00030"></a>00030     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> vc  = 0, vc2  = 0, vs  = 0, vs2  = 0;   <span class="comment">// v [N + 1], v [N + 2]</span>
-<a name="l00031"></a>00031     <span class="comment">// vr, vt, vl and similar w variable accumulate the sums for the</span>
-<a name="l00032"></a>00032     <span class="comment">// derivatives wrt r, theta, and lambda, respectively.</span>
-<a name="l00033"></a>00033     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> vrc = 0, vrc2 = 0, vrs = 0, vrs2 = 0;   <span class="comment">// vr[N + 1], vr[N + 2]</span>
-<a name="l00034"></a>00034     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> vtc = 0, vtc2 = 0, vts = 0, vts2 = 0;   <span class="comment">// vt[N + 1], vt[N + 2]</span>
-<a name="l00035"></a>00035     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> vlc = 0, vlc2 = 0, vls = 0, vls2 = 0;   <span class="comment">// vl[N + 1], vl[N + 2]</span>
-<a name="l00036"></a>00036     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = _M; m >= 0; --m) {   <span class="comment">// m = M .. 0</span>
-<a name="l00037"></a>00037       <span class="comment">// Now Sc[m] = wc, Ss[m] = ws</span>
-<a name="l00038"></a>00038       <span class="comment">// Sc'[m] = wtc, Ss'[m] = wtc</span>
-<a name="l00039"></a>00039       <span class="keywordflow">if</span> (m) {
-<a name="l00040"></a>00040         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> v, A, B;           <span class="comment">// alpha[m], beta[m + 1]</span>
-<a name="l00041"></a>00041         <span class="keywordflow">switch</span> (_norm) {
-<a name="l00042"></a>00042         <span class="keywordflow">case</span> FULL:
-<a name="l00043"></a>00043           v = root_[2] * root_[2 * m + 3] / root_[m + 1];
-<a name="l00044"></a>00044           A = cl * v * _uq;
-<a name="l00045"></a>00045           B = - v * root_[2 * m + 5] / (root_[8] * root_[m + 2]) * _uq2;
-<a name="l00046"></a>00046           <span class="keywordflow">break</span>;
-<a name="l00047"></a>00047         <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00048"></a>00048           v = root_[2] * root_[2 * m + 1] / root_[m + 1];
-<a name="l00049"></a>00049           A = cl * v * _uq;
-<a name="l00050"></a>00050           B = - v * root_[2 * m + 3] / (root_[8] * root_[m + 2]) * _uq2;
-<a name="l00051"></a>00051           <span class="keywordflow">break</span>;
-<a name="l00052"></a>00052         <span class="keywordflow">default</span>:
-<a name="l00053"></a>00053           A = B = 0;
-<a name="l00054"></a>00054         }
-<a name="l00055"></a>00055         v = A * vc  + B * vc2  +  _wc[m] ; vc2  = vc ; vc  = v;
-<a name="l00056"></a>00056         v = A * vs  + B * vs2  +  _ws[m] ; vs2  = vs ; vs  = v;
-<a name="l00057"></a>00057         <span class="keywordflow">if</span> (gradp) {
-<a name="l00058"></a>00058           v = A * vrc + B * vrc2 +  _wrc[m]; vrc2 = vrc; vrc = v;
-<a name="l00059"></a>00059           v = A * vrs + B * vrs2 +  _wrs[m]; vrs2 = vrs; vrs = v;
-<a name="l00060"></a>00060           v = A * vtc + B * vtc2 +  _wtc[m]; vtc2 = vtc; vtc = v;
-<a name="l00061"></a>00061           v = A * vts + B * vts2 +  _wts[m]; vts2 = vts; vts = v;
-<a name="l00062"></a>00062           v = A * vlc + B * vlc2 + m*_ws[m]; vlc2 = vlc; vlc = v;
-<a name="l00063"></a>00063           v = A * vls + B * vls2 - m*_wc[m]; vls2 = vls; vls = v;
-<a name="l00064"></a>00064         }
-<a name="l00065"></a>00065       } <span class="keywordflow">else</span> {
-<a name="l00066"></a>00066         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> A, B, qs;
-<a name="l00067"></a>00067         <span class="keywordflow">switch</span> (_norm) {
-<a name="l00068"></a>00068         <span class="keywordflow">case</span> FULL:
-<a name="l00069"></a>00069           A = root_[3] * _uq;       <span class="comment">// F[1]/(q*cl) or F[1]/(q*sl)</span>
-<a name="l00070"></a>00070           B = - root_[15]/2 * _uq2; <span class="comment">// beta[1]/q</span>
-<a name="l00071"></a>00071           <span class="keywordflow">break</span>;
-<a name="l00072"></a>00072         <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00073"></a>00073           A = _uq;
-<a name="l00074"></a>00074           B = - root_[3]/2 * _uq2;
-<a name="l00075"></a>00075           <span class="keywordflow">break</span>;
-<a name="l00076"></a>00076         <span class="keywordflow">default</span>:
-<a name="l00077"></a>00077           A = B = 0;
-<a name="l00078"></a>00078         }
-<a name="l00079"></a>00079         qs = _q / SphericalEngine::scale_;
-<a name="l00080"></a>00080         vc = qs * (_wc[m] + A * (cl * vc + sl * vs ) + B * vc2);
-<a name="l00081"></a>00081         <span class="keywordflow">if</span> (gradp) {
-<a name="l00082"></a>00082           qs /= _r;
-<a name="l00083"></a>00083           <span class="comment">// The components of the gradient in circular coordinates are</span>
-<a name="l00084"></a>00084           <span class="comment">// r: dV/dr</span>
-<a name="l00085"></a>00085           <span class="comment">// theta: 1/r * dV/dtheta</span>
-<a name="l00086"></a>00086           <span class="comment">// lambda: 1/(r*u) * dV/dlambda</span>
-<a name="l00087"></a>00087           vrc =    - qs * (_wrc[m] + A * (cl * vrc + sl * vrs) + B * vrc2);
-<a name="l00088"></a>00088           vtc =      qs * (_wtc[m] + A * (cl * vtc + sl * vts) + B * vtc2);
-<a name="l00089"></a>00089           vlc = qs / _u * (          A * (cl * vlc + sl * vls) + B * vlc2);
-<a name="l00090"></a>00090         }
-<a name="l00091"></a>00091       }
-<a name="l00092"></a>00092     }
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094     <span class="keywordflow">if</span> (gradp) {
-<a name="l00095"></a>00095       <span class="comment">// Rotate into cartesian (geocentric) coordinates</span>
-<a name="l00096"></a>00096       gradx = cl * (_u * vrc + _t * vtc) - sl * vlc;
-<a name="l00097"></a>00097       grady = sl * (_u * vrc + _t * vtc) + cl * vlc;
-<a name="l00098"></a>00098       gradz =           _t * vrc - _u * vtc                ;
-<a name="l00099"></a>00099     }
-<a name="l00100"></a>00100     <span class="keywordflow">return</span> vc;
-<a name="l00101"></a>00101   }
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CircularEngine_8hpp.html b/doc/html/CircularEngine_8hpp.html
deleted file mode 100644
index c520ece..0000000
--- a/doc/html/CircularEngine_8hpp.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CircularEngine.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">CircularEngine.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">GeographicLib::CircularEngine</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <vector></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="SphericalEngine_8hpp_source.html">GeographicLib/SphericalEngine.hpp</a>></code><br/>
-</div>
-<p><a href="CircularEngine_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spherical Harmonic sums for a circle.  <a href="classGeographicLib_1_1CircularEngine.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="CircularEngine_8hpp.html#abfcea264d0e3f7a45c8ff8de7f2e539f">GEOGRAPHICLIB_CIRCULARENGINE_HPP</a>   "$Id: d0528f468369dbc1b7af11e02278ad7a361d398b $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">GeographicLib::CircularEngine</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="abfcea264d0e3f7a45c8ff8de7f2e539f"></a><!-- doxytag: member="CircularEngine.hpp::GEOGRAPHICLIB_CIRCULARENGINE_HPP" ref="abfcea264d0e3f7a45c8ff8de7f2e539f" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_CIRCULARENGINE_HPP   "$Id: d0528f468369dbc1b7af11e02278ad7a361d398b $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="CircularEngine_8hpp_source.html#l00011">11</a> of file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/CircularEngine_8hpp_source.html b/doc/html/CircularEngine_8hpp_source.html
deleted file mode 100644
index fbf5550..0000000
--- a/doc/html/CircularEngine_8hpp_source.html
+++ /dev/null
@@ -1,282 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: CircularEngine.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">CircularEngine.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="CircularEngine_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file CircularEngine.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::CircularEngine class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_CIRCULARENGINE_HPP)</span>
-<a name="l00011"></a><a class="code" href="CircularEngine_8hpp.html#abfcea264d0e3f7a45c8ff8de7f2e539f">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_CIRCULARENGINE_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: d0528f468369dbc1b7af11e02278ad7a361d398b $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <vector></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="SphericalEngine_8hpp.html" title="Header for GeographicLib::SphericalEngine class.">GeographicLib/SphericalEngine.hpp</a>></span>
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="comment">// Squelch warnings about dll vs vector</span>
-<a name="l00020"></a>00020 <span class="preprocessor">#pragma warning (push)</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4251)</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment">  /**</span>
-<a name="l00027"></a>00027 <span class="comment">   * \brief Spherical Harmonic sums for a circle.</span>
-<a name="l00028"></a>00028 <span class="comment">   *</span>
-<a name="l00029"></a>00029 <span class="comment">   * The class is a companion to SphericalEngine.  If the results of a</span>
-<a name="l00030"></a>00030 <span class="comment">   * spherical harmonic sum are needed for several points on a circle of</span>
-<a name="l00031"></a>00031 <span class="comment">   * constant latitude \e lat and height \e h, then SphericalEngine::Circle can</span>
-<a name="l00032"></a>00032 <span class="comment">   * compute the inner sum, which is independent of longitude \e lon, and</span>
-<a name="l00033"></a>00033 <span class="comment">   * produce a CircularEngine object.  CircularEngine::operator()() can</span>
-<a name="l00034"></a>00034 <span class="comment">   * then be used to perform the outer sum for particular vales of \e lon.</span>
-<a name="l00035"></a>00035 <span class="comment">   * This can lead to substantial improvements in computational speed for high</span>
-<a name="l00036"></a>00036 <span class="comment">   * degree sum (approximately by a factor of \e N / 2 where \e N is the</span>
-<a name="l00037"></a>00037 <span class="comment">   * maximum degree).</span>
-<a name="l00038"></a>00038 <span class="comment">   *</span>
-<a name="l00039"></a>00039 <span class="comment">   * CircularEngine is tightly linked to the internals of SphericalEngine.  For</span>
-<a name="l00040"></a>00040 <span class="comment">   * that reason, the constructor for this class is private.  Use</span>
-<a name="l00041"></a>00041 <span class="comment">   * SphericalHarmonic::Circle, SphericalHarmonic1::Circle, and</span>
-<a name="l00042"></a>00042 <span class="comment">   * SphericalHarmonic2::Circle to create instances of this class.</span>
-<a name="l00043"></a>00043 <span class="comment">   *</span>
-<a name="l00044"></a>00044 <span class="comment">   * CircularEngine stores the coefficients needed to allow the summation over</span>
-<a name="l00045"></a>00045 <span class="comment">   * order to be performed in 2 or 6 vectors of length \e M + 1 (depending on</span>
-<a name="l00046"></a>00046 <span class="comment">   * whether gradients are to be calculated).  For this reason the constructor</span>
-<a name="l00047"></a>00047 <span class="comment">   * may throw a bad_alloc exception.</span>
-<a name="l00048"></a>00048 <span class="comment">   *</span>
-<a name="l00049"></a>00049 <span class="comment">   * Example of use:</span>
-<a name="l00050"></a>00050 <span class="comment">   * \include example-CircularEngine.cpp</span>
-<a name="l00051"></a>00051 <span class="comment">   **********************************************************************/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> CircularEngine {
-<a name="l00054"></a>00054   <span class="keyword">private</span>:
-<a name="l00055"></a>00055     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00056"></a>00056     <span class="keyword">enum</span> normalization {
-<a name="l00057"></a>00057       FULL = SphericalEngine::FULL,
-<a name="l00058"></a>00058       SCHMIDT = SphericalEngine::SCHMIDT,
-<a name="l00059"></a>00059     };
-<a name="l00060"></a>00060     <span class="keywordtype">int</span> _M;
-<a name="l00061"></a>00061     <span class="keywordtype">bool</span> _gradp;
-<a name="l00062"></a>00062     <span class="keywordtype">unsigned</span> _norm;
-<a name="l00063"></a>00063     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _r, _u, _t;
-<a name="l00064"></a>00064     std::vector<real> _wc, _ws, _wrc, _wrs, _wtc, _wts;
-<a name="l00065"></a>00065     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _q, _uq, _uq2;
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067     Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Value(<span class="keywordtype">bool</span> gradp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cl, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sl,
-<a name="l00068"></a>00068                      <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gradx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& grady, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gradz) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> cossin(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& cosx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& sinx) {
-<a name="l00071"></a>00071       x = x >= 180 ? x - 360 : (x < -180 ? x + 360 : x);
-<a name="l00072"></a>00072       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xi = x * Math::degree<real>();
-<a name="l00073"></a>00073       cosx = std::abs(x) ==   90 ? 0 : cos(xi);
-<a name="l00074"></a>00074       sinx =          x  == -180 ? 0 : sin(xi);
-<a name="l00075"></a>00075     }
-<a name="l00076"></a>00076 
-<a name="l00077"></a><a class="code" href="classGeographicLib_1_1CircularEngine.html#ab89064f7f3c32a745c72d8c3188f7485">00077</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>;
-<a name="l00078"></a><a class="code" href="classGeographicLib_1_1CircularEngine.html#a243c90a7f9bf3f7aa96877a4b0667a89">00078</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a>;  <span class="comment">// Access to cossin</span>
-<a name="l00079"></a><a class="code" href="classGeographicLib_1_1CircularEngine.html#a7294f6a1cc932f8fd1562a15602e9e86">00079</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a>; <span class="comment">// Access to cossin</span>
-<a name="l00080"></a>00080     CircularEngine(<span class="keywordtype">int</span> M, <span class="keywordtype">bool</span> gradp, <span class="keywordtype">unsigned</span> norm,
-<a name="l00081"></a>00081                    real a, real r, real u, real t)
-<a name="l00082"></a>00082       : _M(M)
-<a name="l00083"></a>00083       , _gradp(gradp)
-<a name="l00084"></a>00084       , _norm(norm)
-<a name="l00085"></a>00085       , _a(a)
-<a name="l00086"></a>00086       , _r(r)
-<a name="l00087"></a>00087       , _u(u)
-<a name="l00088"></a>00088       , _t(t)
-<a name="l00089"></a>00089       , _wc(std::vector<real>(_M + 1, 0))
-<a name="l00090"></a>00090       , _ws(std::vector<real>(_M + 1, 0))
-<a name="l00091"></a>00091       , _wrc(std::vector<real>(_gradp ? _M + 1 : 0, 0))
-<a name="l00092"></a>00092       , _wrs(std::vector<real>(_gradp ? _M + 1 : 0, 0))
-<a name="l00093"></a>00093       , _wtc(std::vector<real>(_gradp ? _M + 1 : 0, 0))
-<a name="l00094"></a>00094       , _wts(std::vector<real>(_gradp ? _M + 1 : 0, 0))
-<a name="l00095"></a>00095       {
-<a name="l00096"></a>00096         _q = _a / _r;
-<a name="l00097"></a>00097         _uq = _u * _q;
-<a name="l00098"></a>00098         _uq2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_uq);
-<a name="l00099"></a>00099       }
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101     <span class="keywordtype">void</span> SetCoeff(<span class="keywordtype">int</span> m, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> wc, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ws)
-<a name="l00102"></a>00102     { _wc[m] = wc; _ws[m] = ws; }
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104     <span class="keywordtype">void</span> SetCoeff(<span class="keywordtype">int</span> m, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> wc, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ws,
-<a name="l00105"></a>00105                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> wrc, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> wrs, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> wtc, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> wts) {
-<a name="l00106"></a>00106       _wc[m] = wc; _ws[m] = ws;
-<a name="l00107"></a>00107       <span class="keywordflow">if</span> (_gradp) {
-<a name="l00108"></a>00108         _wrc[m] = wrc; _wrs[m] = wrs;
-<a name="l00109"></a>00109         _wtc[m] = wtc; _wts[m] = wts;
-<a name="l00110"></a>00110       }
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113   <span class="keyword">public</span>:
-<a name="l00114"></a>00114 <span class="comment"></span>
-<a name="l00115"></a>00115 <span class="comment">    /**</span>
-<a name="l00116"></a>00116 <span class="comment">     * A default constructor.  CircularEngine::operator()() on the resulting</span>
-<a name="l00117"></a>00117 <span class="comment">     * object returns zero.  The resulting object can be assigned to the result</span>
-<a name="l00118"></a>00118 <span class="comment">     * of SphericalHarmonic::Circle.</span>
-<a name="l00119"></a>00119 <span class="comment">     **********************************************************************/</span>
-<a name="l00120"></a><a class="code" href="classGeographicLib_1_1CircularEngine.html#a91dd2b9cc408e35f8cb6482cdf3aadbf">00120</a>     CircularEngine()
-<a name="l00121"></a>00121       : _M(-1)
-<a name="l00122"></a>00122       , _gradp(true)
-<a name="l00123"></a>00123       , _u(0)
-<a name="l00124"></a>00124       , _t(1)
-<a name="l00125"></a>00125       {}
-<a name="l00126"></a>00126 <span class="comment"></span>
-<a name="l00127"></a>00127 <span class="comment">    /**</span>
-<a name="l00128"></a>00128 <span class="comment">     * Evaluate the sum for a particular longitude given in terms of its</span>
-<a name="l00129"></a>00129 <span class="comment">     * cosine and sine.</span>
-<a name="l00130"></a>00130 <span class="comment">     *</span>
-<a name="l00131"></a>00131 <span class="comment">     * @param[in] coslon the cosine of the longitude.</span>
-<a name="l00132"></a>00132 <span class="comment">     * @param[in] sinlon the sine of the longitude.</span>
-<a name="l00133"></a>00133 <span class="comment">     * @return \e V the value of the sum.</span>
-<a name="l00134"></a>00134 <span class="comment">     *</span>
-<a name="l00135"></a>00135 <span class="comment">     * The arguments must satisfy <i>coslon</i><sup>2</sup> +</span>
-<a name="l00136"></a>00136 <span class="comment">     * <i>sinlon</i><sup>2</sup> = 1.</span>
-<a name="l00137"></a>00137 <span class="comment">     **********************************************************************/</span>
-<a name="l00138"></a><a class="code" href="classGeographicLib_1_1CircularEngine.html#a8e39d83fcbed23df36ef4fefe2a86420">00138</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1CircularEngine.html#a8e39d83fcbed23df36ef4fefe2a86420">operator()</a>(real coslon, real sinlon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00139"></a>00139       real dummy;
-<a name="l00140"></a>00140       <span class="keywordflow">return</span> Value(<span class="keyword">false</span>, coslon, sinlon, dummy, dummy, dummy);
-<a name="l00141"></a>00141     }
-<a name="l00142"></a>00142 <span class="comment"></span>
-<a name="l00143"></a>00143 <span class="comment">    /**</span>
-<a name="l00144"></a>00144 <span class="comment">     * Evaluate the sum for a particular longitude.</span>
-<a name="l00145"></a>00145 <span class="comment">     *</span>
-<a name="l00146"></a>00146 <span class="comment">     * @param[in] lon the longitude (degrees).</span>
-<a name="l00147"></a>00147 <span class="comment">     * @return \e V the value of the sum.</span>
-<a name="l00148"></a>00148 <span class="comment">     **********************************************************************/</span>
-<a name="l00149"></a><a class="code" href="classGeographicLib_1_1CircularEngine.html#a48d2327412e0c674285ff6bb85440054">00149</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1CircularEngine.html#a48d2327412e0c674285ff6bb85440054">operator()</a>(real lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00150"></a>00150       real coslon, sinlon;
-<a name="l00151"></a>00151       cossin(lon, coslon, sinlon);
-<a name="l00152"></a>00152       <span class="keywordflow">return</span> (*<span class="keyword">this</span>)(coslon, sinlon);
-<a name="l00153"></a>00153     }
-<a name="l00154"></a>00154 <span class="comment"></span>
-<a name="l00155"></a>00155 <span class="comment">    /**</span>
-<a name="l00156"></a>00156 <span class="comment">     * Evaluate the sum and its gradient for a particular longitude given in</span>
-<a name="l00157"></a>00157 <span class="comment">     * terms of its cosine and sine.</span>
-<a name="l00158"></a>00158 <span class="comment">     *</span>
-<a name="l00159"></a>00159 <span class="comment">     * @param[in] coslon the cosine of the longitude.</span>
-<a name="l00160"></a>00160 <span class="comment">     * @param[in] sinlon the sine of the longitude.</span>
-<a name="l00161"></a>00161 <span class="comment">     * @param[out] gradx \e x component of the gradient.</span>
-<a name="l00162"></a>00162 <span class="comment">     * @param[out] grady \e y component of the gradient.</span>
-<a name="l00163"></a>00163 <span class="comment">     * @param[out] gradz \e z component of the gradient.</span>
-<a name="l00164"></a>00164 <span class="comment">     * @return \e V the value of the sum.</span>
-<a name="l00165"></a>00165 <span class="comment">     *</span>
-<a name="l00166"></a>00166 <span class="comment">     * The gradients will only be computed if the CircularEngine object was</span>
-<a name="l00167"></a>00167 <span class="comment">     * created with this capability (e.g., via \e gradp = true in</span>
-<a name="l00168"></a>00168 <span class="comment">     * SphericalHarmonic::Circle).  If not, \e gradx, etc., will not be</span>
-<a name="l00169"></a>00169 <span class="comment">     * touched.  The arguments must satisfy <i>coslon</i><sup>2</sup> +</span>
-<a name="l00170"></a>00170 <span class="comment">     * <i>sinlon</i><sup>2</sup> = 1.</span>
-<a name="l00171"></a>00171 <span class="comment">     **********************************************************************/</span>
-<a name="l00172"></a><a class="code" href="classGeographicLib_1_1CircularEngine.html#aa15c408a0ff4cf17575e62edfeae77a6">00172</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real operator()(real coslon, real sinlon,
-<a name="l00173"></a>00173                           real& gradx, real& grady, real& gradz) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00174"></a>00174       <span class="keywordflow">return</span> Value(<span class="keyword">true</span>, coslon, sinlon, gradx, grady, gradz);
-<a name="l00175"></a>00175     }
-<a name="l00176"></a>00176 <span class="comment"></span>
-<a name="l00177"></a>00177 <span class="comment">    /**</span>
-<a name="l00178"></a>00178 <span class="comment">     * Evaluate the sum and its gradient for a particular longitude.</span>
-<a name="l00179"></a>00179 <span class="comment">     *</span>
-<a name="l00180"></a>00180 <span class="comment">     * @param[in] lon the longitude (degrees).</span>
-<a name="l00181"></a>00181 <span class="comment">     * @param[out] gradx \e x component of the gradient.</span>
-<a name="l00182"></a>00182 <span class="comment">     * @param[out] grady \e y component of the gradient.</span>
-<a name="l00183"></a>00183 <span class="comment">     * @param[out] gradz \e z component of the gradient.</span>
-<a name="l00184"></a>00184 <span class="comment">     * @return \e V the value of the sum.</span>
-<a name="l00185"></a>00185 <span class="comment">     *</span>
-<a name="l00186"></a>00186 <span class="comment">     * The gradients will only be computed if the CircularEngine object was</span>
-<a name="l00187"></a>00187 <span class="comment">     * created with this capability (e.g., via \e gradp = true in</span>
-<a name="l00188"></a>00188 <span class="comment">     * SphericalHarmonic::Circle).  If not, \e gradx, etc., will not be</span>
-<a name="l00189"></a>00189 <span class="comment">     * touched.</span>
-<a name="l00190"></a>00190 <span class="comment">     **********************************************************************/</span>
-<a name="l00191"></a><a class="code" href="classGeographicLib_1_1CircularEngine.html#a88a0726718baa7b457c77b5681fabb0a">00191</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real operator()(real lon,
-<a name="l00192"></a>00192                           real& gradx, real& grady, real& gradz) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00193"></a>00193       real coslon, sinlon;
-<a name="l00194"></a>00194       cossin(lon, coslon, sinlon);
-<a name="l00195"></a>00195       <span class="keywordflow">return</span> (*<span class="keyword">this</span>)(coslon, sinlon, gradx, grady, gradz);
-<a name="l00196"></a>00196     }
-<a name="l00197"></a>00197   };
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00202"></a>00202 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
-<a name="l00203"></a>00203 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00204"></a>00204 <span class="preprocessor"></span>
-<a name="l00205"></a>00205 <span class="preprocessor">#endif  // GEOGRAPHICLIB_CIRCULARENGINE_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/ConicProj.1.html b/doc/html/ConicProj.1.html
deleted file mode 100644
index 056a59f..0000000
--- a/doc/html/ConicProj.1.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>ConicProj -- perform conic projections</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>ConicProj -- perform conic projections</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>ConicProj</strong> ( <strong>-c</strong> | <strong>-a</strong> ) <em>lat1</em> <em>lat2</em>
-[ <strong>-l</strong> <em>lon0</em> ] [ <strong>-k</strong> <em>k1</em> ] [ <strong>-r</strong> ]
-[ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Perform one of two conic projections geodesics.  Convert geodetic
-coordinates to either Lambert conformal conic or Albers equal area
-coordinates.  The standard latitudes <em>lat1</em> and <em>lat2</em> are specified
-by that the <strong>-c</strong> option (for Lambert conformal conic) or the <strong>-a</strong>
-option (for Albers equal area).  At least one of these options must be
-given (the last one given is used).  Specify <em>lat1</em> = <em>lat2</em>, to
-obtain the case with a single standard parallel.  The central meridian
-is given by <em>lon0</em>.  The longitude of origin is given by the latitude
-of minimum (azimuthal) scale for Lambert conformal conic (Albers equal
-area).  The (azimuthal) scale on the standard parallels is <em>k1</em>.</p>
-<p>Geodetic coordinates are provided on standard input as a set of lines
-containing (blank separated) <em>latitude</em> and <em>longitude</em> (decimal
-degrees or degrees, minutes, seconds).  For each set of geodetic
-coordinates, the corresponding projected easting, <em>x</em>, and northing,
-<em>y</em>, (meters) are printed on standard output together with the meridian
-convergence <em>gamma</em> (degrees) and (azimuthal) scale <em>k</em>.  For Albers
-equal area, the radial scale is 1/<em>k</em>.  The meridian convergence is the
-bearing of the <em>y</em> axis measured clockwise from true north.</p>
-<p>Special cases of the Lambert conformal projection are the Mercator
-projection (the standard latitudes equal and opposite) and the polar
-stereographic projection (both standard latitudes correspond to the same
-pole).  Special cases of the Albers equal area projection are the
-cylindrical equal area projection (the standard latitudes equal and
-opposite), the Lambert azimuthal equal area projection (both standard
-latitude corresponds to the same pole), and the Lambert equal area conic
-projection (one standard parallel is at a pole).</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
-
-<dd>
-<p>use the Lambert conformal conic projection with standard parallels
-<em>lat1</em> and <em>lat2</em>.</p>
-</dd>
-<dt><strong><a name="a" class="item"><strong>-a</strong></a></strong></dt>
-
-<dd>
-<p>use the Albers equal area projection with standard parallels <em>lat1</em> and
-<em>lat2</em>.</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
-
-<dd>
-<p>specify the longitude of origin <em>lon0</em> (degrees, default 0).</p>
-</dd>
-<dt><strong><a name="k" class="item"><strong>-k</strong></a></strong></dt>
-
-<dd>
-<p>specify the (azimuthal) scale <em>k1</em> on the standard parallels (default
-1).</p>
-</dd>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
-
-<dd>
-<p>perform the reverse projection.  <em>x</em> and <em>y</em> are given on standard
-input and each line of standard output gives <em>latitude</em>, <em>longitude</em>,
-<em>gamma</em>, and <em>k</em>.</p>
-</dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
-
-<dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 39.95N 75.17W | ConicProj -c 40d58 39d56 -l 77d45W
-   => 220445 -52372 1.67 1.0
-   echo 220445 -52372 | ConicProj -c 40d58 39d56 -l 77d45W -r
-   => 39.95 -75.17 1.67 1.0</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>ConicProj</strong> to return an exit
-code of 1.  However, an error does not cause <strong>ConicProj</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>ConicProj</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>ConicProj</strong> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>,
-in version 1.9.</p>
-
-</body>
-
-</html>
diff --git a/doc/html/ConicProj_8cpp.html b/doc/html/ConicProj_8cpp.html
deleted file mode 100644
index ddbb0d9..0000000
--- a/doc/html/ConicProj_8cpp.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: ConicProj.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">ConicProj.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for conical projections.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="LambertConformalConic_8hpp_source.html">GeographicLib/LambertConformalConic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="AlbersEqualArea_8hpp_source.html">GeographicLib/AlbersEqualArea.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include "ConicProj.usage"</code><br/>
-</div>
-<p><a href="ConicProj_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ConicProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for conical projections. </p>
-<p>Copyright (c) Charles Karney (2009-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o ConicProj \ <a class="el" href="ConicProj_8cpp.html" title="Command line utility for conical projections.">ConicProj.cpp</a> \ ../src/AlbersEqualArea.cpp \ ../src/DMS.cpp \ ../src/LambertConformalConic.cpp</p>
-<p>See the <a href="ConicProj.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="ConicProj_8cpp_source.html">ConicProj.cpp</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="ConicProj.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="ConicProj_8cpp_source.html#l00032">32</a> of file <a class="el" href="ConicProj_8cpp_source.html">ConicProj.cpp</a>.</p>
-
-<p>References <a class="el" href="DMS_8cpp_source.html#l00031">GeographicLib::DMS::Decode()</a>, <a class="el" href="DMS_8hpp_source.html#l00078">GeographicLib::DMS::LONGITUDE</a>, <a class="el" href="DMS_8hpp_source.html#l00073">GeographicLib::DMS::LATITUDE</a>, and <a class="el" href="DMS_8cpp_source.html#l00207">GeographicLib::DMS::DecodeLatLon()</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/ConicProj_8cpp_source.html b/doc/html/ConicProj_8cpp_source.html
deleted file mode 100644
index 1f1c636..0000000
--- a/doc/html/ConicProj_8cpp_source.html
+++ /dev/null
@@ -1,318 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: ConicProj.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">ConicProj.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="ConicProj_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file ConicProj.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for conical projections</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o ConicProj \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       ConicProj.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/AlbersEqualArea.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/LambertConformalConic.cpp</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * See the <a href="ConicProj.1.html">man page</a> for usage</span>
-<a name="l00017"></a>00017 <span class="comment"> * information.</span>
-<a name="l00018"></a>00018 <span class="comment"> **********************************************************************/</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="preprocessor">#include <iostream></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#include <sstream></span>
-<a name="l00022"></a>00022 <span class="preprocessor">#include <string></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include <sstream></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <fstream></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <<a class="code" href="LambertConformalConic_8hpp.html" title="Header for GeographicLib::LambertConformalConic class.">GeographicLib/LambertConformalConic.hpp</a>></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <<a class="code" href="AlbersEqualArea_8hpp.html" title="Header for GeographicLib::AlbersEqualArea class.">GeographicLib/AlbersEqualArea.hpp</a>></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#include "ConicProj.usage"</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a><a class="code" href="ConicProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00032</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00033"></a>00033   <span class="keywordflow">try</span> {
-<a name="l00034"></a>00034     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00035"></a>00035     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00036"></a>00036     <span class="keywordtype">bool</span> lcc = <span class="keyword">false</span>, albers = <span class="keyword">false</span>, reverse = <span class="keyword">false</span>;
-<a name="l00037"></a>00037     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat1 = 0, lat2 = 0, lon0 = 0, k1 = 1;
-<a name="l00038"></a>00038     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00039"></a>00039       a = <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<real>(),
-<a name="l00040"></a>00040       f = Constants::WGS84_f<real>();
-<a name="l00041"></a>00041     std::string istring, ifile, ofile, cdelim;
-<a name="l00042"></a>00042     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>;
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00045"></a>00045       std::string arg(argv[m]);
-<a name="l00046"></a>00046       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-r"</span>)
-<a name="l00047"></a>00047         reverse = <span class="keyword">true</span>;
-<a name="l00048"></a>00048       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-c"</span> || arg == <span class="stringliteral">"-a"</span>) {
-<a name="l00049"></a>00049         lcc = arg == <span class="stringliteral">"-c"</span>;
-<a name="l00050"></a>00050         albers = arg == <span class="stringliteral">"-a"</span>;
-<a name="l00051"></a>00051         <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00052"></a>00052         <span class="keywordflow">try</span> {
-<a name="l00053"></a>00053           <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < 2; ++i) {
-<a name="l00054"></a>00054             <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>::flag ind;
-<a name="l00055"></a>00055             (i ? lat2 : lat1) = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(std::string(argv[++m]), ind);
-<a name="l00056"></a>00056             <span class="keywordflow">if</span> (ind == <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">DMS::LONGITUDE</a>)
-<a name="l00057"></a>00057               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad hemisphere"</span>);
-<a name="l00058"></a>00058           }
-<a name="l00059"></a>00059         }
-<a name="l00060"></a>00060         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00061"></a>00061           std::cerr << <span class="stringliteral">"Error decoding arguments of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00062"></a>00062                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00063"></a>00063           <span class="keywordflow">return</span> 1;
-<a name="l00064"></a>00064         }
-<a name="l00065"></a>00065       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-l"</span>) {
-<a name="l00066"></a>00066         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00067"></a>00067         <span class="keywordflow">try</span> {
-<a name="l00068"></a>00068           <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>::flag ind;
-<a name="l00069"></a>00069           lon0 = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(std::string(argv[m]), ind);
-<a name="l00070"></a>00070           <span class="keywordflow">if</span> (ind == <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">DMS::LATITUDE</a>)
-<a name="l00071"></a>00071             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad hemisphere"</span>);
-<a name="l00072"></a>00072           <span class="keywordflow">if</span> (!(lon0 >= -180 && lon0 <= 360))
-<a name="l00073"></a>00073             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad longitude"</span>);
-<a name="l00074"></a>00074           <span class="keywordflow">if</span> (lon0 >= 180) lon0 -= 360;
-<a name="l00075"></a>00075         }
-<a name="l00076"></a>00076         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00077"></a>00077           std::cerr << <span class="stringliteral">"Error decoding argument of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00078"></a>00078                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00079"></a>00079           <span class="keywordflow">return</span> 1;
-<a name="l00080"></a>00080         }
-<a name="l00081"></a>00081       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-k"</span>) {
-<a name="l00082"></a>00082         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00083"></a>00083         <span class="keywordflow">try</span> {
-<a name="l00084"></a>00084           k1 = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m]));
-<a name="l00085"></a>00085         }
-<a name="l00086"></a>00086         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00087"></a>00087           std::cerr << <span class="stringliteral">"Error decoding argument of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00088"></a>00088                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00089"></a>00089           <span class="keywordflow">return</span> 1;
-<a name="l00090"></a>00090         }
-<a name="l00091"></a>00091       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-e"</span>) {
-<a name="l00092"></a>00092         <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00093"></a>00093         <span class="keywordflow">try</span> {
-<a name="l00094"></a>00094           a = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m + 1]));
-<a name="l00095"></a>00095           f = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(std::string(argv[m + 2]));
-<a name="l00096"></a>00096         }
-<a name="l00097"></a>00097         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00098"></a>00098           std::cerr << <span class="stringliteral">"Error decoding arguments of -e: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00099"></a>00099           <span class="keywordflow">return</span> 1;
-<a name="l00100"></a>00100         }
-<a name="l00101"></a>00101         m += 2;
-<a name="l00102"></a>00102       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00103"></a>00103         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00104"></a>00104         istring = argv[m];
-<a name="l00105"></a>00105       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00106"></a>00106         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00107"></a>00107         ifile = argv[m];
-<a name="l00108"></a>00108       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00109"></a>00109         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00110"></a>00110         ofile = argv[m];
-<a name="l00111"></a>00111       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00112"></a>00112         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00113"></a>00113         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00114"></a>00114           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00115"></a>00115           <span class="keywordflow">return</span> 1;
-<a name="l00116"></a>00116         }
-<a name="l00117"></a>00117         lsep = argv[m][0];
-<a name="l00118"></a>00118       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00119"></a>00119         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00120"></a>00120         cdelim = argv[m];
-<a name="l00121"></a>00121       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00122"></a>00122         std::cout
-<a name="l00123"></a>00123           << argv[0]
-<a name="l00124"></a>00124           << <span class="stringliteral">": $Id: 8efb8dcae1b8e8f1abac4d5d6f60e8730ecaa81c $\n"</span>
-<a name="l00125"></a>00125           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00126"></a>00126         <span class="keywordflow">return</span> 0;
-<a name="l00127"></a>00127       } <span class="keywordflow">else</span>
-<a name="l00128"></a>00128         <span class="keywordflow">return</span> usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00129"></a>00129     }
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00132"></a>00132       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00133"></a>00133       <span class="keywordflow">return</span> 1;
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00136"></a>00136     std::ifstream infile;
-<a name="l00137"></a>00137     std::istringstream instring;
-<a name="l00138"></a>00138     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00139"></a>00139       infile.open(ifile.c_str());
-<a name="l00140"></a>00140       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00141"></a>00141         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00142"></a>00142         <span class="keywordflow">return</span> 1;
-<a name="l00143"></a>00143       }
-<a name="l00144"></a>00144     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00145"></a>00145       std::string::size_type m = 0;
-<a name="l00146"></a>00146       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00147"></a>00147         m = istring.find(lsep, m);
-<a name="l00148"></a>00148         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00149"></a>00149           <span class="keywordflow">break</span>;
-<a name="l00150"></a>00150         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00151"></a>00151       }
-<a name="l00152"></a>00152       instring.str(istring);
-<a name="l00153"></a>00153     }
-<a name="l00154"></a>00154     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00155"></a>00155       (!istring.empty() ? &instring : &std::cin);
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     std::ofstream outfile;
-<a name="l00158"></a>00158     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00159"></a>00159     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00160"></a>00160       outfile.open(ofile.c_str());
-<a name="l00161"></a>00161       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00162"></a>00162         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00163"></a>00163         <span class="keywordflow">return</span> 1;
-<a name="l00164"></a>00164       }
-<a name="l00165"></a>00165     }
-<a name="l00166"></a>00166     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168     <span class="keywordflow">if</span> (!(lcc || albers)) {
-<a name="l00169"></a>00169       std::cerr << <span class="stringliteral">"Must specify \"-c lat1 lat2\" or "</span>
-<a name="l00170"></a>00170                 << <span class="stringliteral">"\"-a lat1 lat2\"\n"</span>;
-<a name="l00171"></a>00171       <span class="keywordflow">return</span> 1;
-<a name="l00172"></a>00172     }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">LambertConformalConic</a> lproj =
-<a name="l00175"></a>00175       lcc ? <a class="code" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">LambertConformalConic</a>(a, f, lat1, lat2, k1)
-<a name="l00176"></a>00176       : LambertConformalConic(1, 0, 0, 0, 1);
-<a name="l00177"></a>00177     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a> aproj =
-<a name="l00178"></a>00178       albers ? <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a>(a, f, lat1, lat2, k1)
-<a name="l00179"></a>00179       : AlbersEqualArea(1, 0, 0, 0, 1);
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     std::string s;
-<a name="l00182"></a>00182     <span class="keywordtype">int</span> retval = 0;
-<a name="l00183"></a>00183     std::cout << std::fixed;
-<a name="l00184"></a>00184     <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00185"></a>00185       <span class="keywordflow">try</span> {
-<a name="l00186"></a>00186         std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00187"></a>00187         <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00188"></a>00188           std::string::size_type m = s.find(cdelim);
-<a name="l00189"></a>00189           <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00190"></a>00190             eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00191"></a>00191             s = s.substr(0, m);
-<a name="l00192"></a>00192           }
-<a name="l00193"></a>00193         }
-<a name="l00194"></a>00194         std::istringstream str(s);
-<a name="l00195"></a>00195         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, lon, x, y, gamma, k;
-<a name="l00196"></a>00196         std::string stra, strb;
-<a name="l00197"></a>00197         <span class="keywordflow">if</span> (!(str >> stra >> strb))
-<a name="l00198"></a>00198           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00199"></a>00199         <span class="keywordflow">if</span> (reverse) {
-<a name="l00200"></a>00200           x = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(stra);
-<a name="l00201"></a>00201           y = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(strb);
-<a name="l00202"></a>00202         } <span class="keywordflow">else</span>
-<a name="l00203"></a>00203           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(stra, strb, lat, lon);
-<a name="l00204"></a>00204         std::string strc;
-<a name="l00205"></a>00205         <span class="keywordflow">if</span> (str >> strc)
-<a name="l00206"></a>00206           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extraneous input: "</span> + strc);
-<a name="l00207"></a>00207         <span class="keywordflow">if</span> (reverse) {
-<a name="l00208"></a>00208           <span class="keywordflow">if</span> (lcc)
-<a name="l00209"></a>00209             lproj.Reverse(lon0, x, y, lat, lon, gamma, k);
-<a name="l00210"></a>00210           <span class="keywordflow">else</span>
-<a name="l00211"></a>00211             aproj.Reverse(lon0, x, y, lat, lon, gamma, k);
-<a name="l00212"></a>00212           *output << Utility::str<real>(lat, 15) << <span class="stringliteral">" "</span>
-<a name="l00213"></a>00213                   << Utility::str<real>(lon, 15) << <span class="stringliteral">" "</span>
-<a name="l00214"></a>00214                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(gamma, 16) << <span class="stringliteral">" "</span>
-<a name="l00215"></a>00215                   << Utility::str<real>(k, 16) << eol;
-<a name="l00216"></a>00216         } <span class="keywordflow">else</span> {
-<a name="l00217"></a>00217           <span class="keywordflow">if</span> (lcc)
-<a name="l00218"></a>00218             lproj.Forward(lon0, lat, lon, x, y, gamma, k);
-<a name="l00219"></a>00219           <span class="keywordflow">else</span>
-<a name="l00220"></a>00220             aproj.Forward(lon0, lat, lon, x, y, gamma, k);
-<a name="l00221"></a>00221           *output << Utility::str<real>(x, 10) << <span class="stringliteral">" "</span>
-<a name="l00222"></a>00222                   << Utility::str<real>(y, 10) << <span class="stringliteral">" "</span>
-<a name="l00223"></a>00223                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(gamma, 16) << <span class="stringliteral">" "</span>
-<a name="l00224"></a>00224                   << Utility::str<real>(k, 16) << eol;
-<a name="l00225"></a>00225         }
-<a name="l00226"></a>00226       }
-<a name="l00227"></a>00227       <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00228"></a>00228         *output << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00229"></a>00229         retval = 1;
-<a name="l00230"></a>00230       }
-<a name="l00231"></a>00231     }
-<a name="l00232"></a>00232     <span class="keywordflow">return</span> retval;
-<a name="l00233"></a>00233   }
-<a name="l00234"></a>00234   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00235"></a>00235     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00236"></a>00236     <span class="keywordflow">return</span> 1;
-<a name="l00237"></a>00237   }
-<a name="l00238"></a>00238   <span class="keywordflow">catch</span> (...) {
-<a name="l00239"></a>00239     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00240"></a>00240     <span class="keywordflow">return</span> 1;
-<a name="l00241"></a>00241   }
-<a name="l00242"></a>00242 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Constants_8hpp.html b/doc/html/Constants_8hpp.html
deleted file mode 100644
index b5b105f..0000000
--- a/doc/html/Constants_8hpp.html
+++ /dev/null
@@ -1,195 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Constants.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Constants.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">GeographicLib::Constants</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <GeographicLib/Config.h></code><br/>
-<code>#include <stdexcept></code><br/>
-<code>#include <<a class="el" href="Math_8hpp_source.html">GeographicLib/Math.hpp</a>></code><br/>
-</div>
-<p><a href="Constants_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constants needed by GeographicLib  <a href="classGeographicLib_1_1Constants.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeographicErr.html">GeographicLib::GeographicErr</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception handling for GeographicLib.  <a href="classGeographicLib_1_1GeographicErr.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Constants_8hpp.html#a16d93570265d8037f7dc7d5d026b2aa4">GEOGRAPHICLIB_CONSTANTS_HPP</a>   "$Id: 895e4bd91979aae347436bbf6be37964f05f5b6f $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(cond, reason)   { enum{ STATIC_ASSERT_ENUM = 1/int(cond) }; }</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(x)   namespace { char VAR_ ## x [] = x; }</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">GeographicLib::Constants</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a16d93570265d8037f7dc7d5d026b2aa4"></a><!-- doxytag: member="Constants.hpp::GEOGRAPHICLIB_CONSTANTS_HPP" ref="a16d93570265d8037f7dc7d5d026b2aa4" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_CONSTANTS_HPP   "$Id: 895e4bd91979aae347436bbf6be37964f05f5b6f $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00011">11</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8f24445c1bccd69b63e365aa5d5bb129"></a><!-- doxytag: member="Constants.hpp::STATIC_ASSERT" ref="a8f24445c1bccd69b63e365aa5d5bb129" args="(cond, reason)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define STATIC_ASSERT</td>
-          <td>(</td>
-          <td class="paramtype"> </td>
-          <td class="paramname">cond, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"> </td>
-          <td class="paramname">reason </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>   { enum{ STATIC_ASSERT_ENUM = 1/int(cond) }; }</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A compile-time assert. Use C++11 static_assert, if available. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00025">25</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Accumulator_8hpp_source.html#l00116">GeographicLib::Accumulator< real >::Accumulator()</a>, <a class="el" href="Geoid_8cpp_source.html#l00208">GeographicLib::Geoid::Geoid()</a>, <a class="el" href="SphericalEngine_8cpp_source.html#l00159">GeographicLib::SphericalEngine::Value()</a>, <a class="el" href="SphericalEngine_8cpp_source.html#l00298">GeographicLib::SphericalEngine::Circle()</a>, and <a class="el" href="TransverseMercator_8cpp_source.htm [...]
-
-</div>
-</div>
-<a class="anchor" id="af90fa899707a2ac513d5e4c76853bbf5"></a><!-- doxytag: member="Constants.hpp::RCSID_DECL" ref="af90fa899707a2ac513d5e4c76853bbf5" args="(x)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define RCSID_DECL</td>
-          <td>(</td>
-          <td class="paramtype"> </td>
-          <td class="paramname">x</td><td>)</td>
-          <td>   namespace { char VAR_ ## x [] = x; }</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Insertion of RCS Id strings into the object file. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00038">38</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a59a204dcc2942f86d7b24b4233aad719"></a><!-- doxytag: member="Constants.hpp::GEOGRAPHIC_EXPORT" ref="a59a204dcc2942f86d7b24b4233aad719" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHIC_EXPORT</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00048">48</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Constants_8hpp_source.html b/doc/html/Constants_8hpp_source.html
deleted file mode 100644
index 79d7163..0000000
--- a/doc/html/Constants_8hpp_source.html
+++ /dev/null
@@ -1,405 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Constants.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Constants.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Constants_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Constants.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::Constants class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_CONSTANTS_HPP)</span>
-<a name="l00011"></a><a class="code" href="Constants_8hpp.html#a16d93570265d8037f7dc7d5d026b2aa4">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_CONSTANTS_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 895e4bd91979aae347436bbf6be37964f05f5b6f $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <GeographicLib/Config.h></span>
-<a name="l00015"></a>00015 <span class="comment"></span>
-<a name="l00016"></a>00016 <span class="comment">/**</span>
-<a name="l00017"></a>00017 <span class="comment"> * A compile-time assert.  Use C++11 static_assert, if available.</span>
-<a name="l00018"></a>00018 <span class="comment"> **********************************************************************/</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#if !defined(STATIC_ASSERT)</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  if defined(__GXX_EXPERIMENTAL_CXX0X__)</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#    define STATIC_ASSERT static_assert</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#  elif defined(_MSC_VER) && _MSC_VER >= 1600</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#    define STATIC_ASSERT static_assert</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#  else</span>
-<a name="l00025"></a><a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">00025</a> <span class="preprocessor"></span><span class="preprocessor">#    define STATIC_ASSERT(cond,reason) \</span>
-<a name="l00026"></a>00026 <span class="preprocessor">            { enum{ STATIC_ASSERT_ENUM = 1/int(cond) }; }</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  endif</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#if defined(__GNUC__)</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="comment">// Suppress "defined but not used" warnings</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#  define RCSID_DECL(x) namespace \</span>
-<a name="l00033"></a>00033 <span class="preprocessor">          { char VAR_ ## x [] __attribute__((used)) = x; }</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="comment">/**</span>
-<a name="l00036"></a>00036 <span class="comment"> * Insertion of RCS Id strings into the object file.</span>
-<a name="l00037"></a>00037 <span class="comment"> **********************************************************************/</span>
-<a name="l00038"></a><a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">00038</a> <span class="preprocessor">#  define RCSID_DECL(x) namespace { char VAR_ ## x [] = x; }</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#if defined(_WIN32) && defined(GEOGRAPHIC_SHARED_LIB)</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#  if defined(Geographic_EXPORTS)</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHIC_EXPORT __declspec(dllexport)</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#  else</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHIC_EXPORT __declspec(dllimport)</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#  endif</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00048"></a><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">00048</a> <span class="preprocessor"></span><span class="preprocessor">#  define GEOGRAPHIC_EXPORT</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <stdexcept></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <<a class="code" href="Math_8hpp.html" title="Header for GeographicLib::Math class.">GeographicLib/Math.hpp</a>></span>
-<a name="l00053"></a>00053 <span class="comment"></span>
-<a name="l00054"></a>00054 <span class="comment">/**</span>
-<a name="l00055"></a>00055 <span class="comment"> * \brief Namespace for %GeographicLib</span>
-<a name="l00056"></a>00056 <span class="comment"> *</span>
-<a name="l00057"></a>00057 <span class="comment"> * All of %GeographicLib is defined within the GeographicLib namespace.  In</span>
-<a name="l00058"></a>00058 <span class="comment"> * addition all the header files are included via %GeographicLib/filename.</span>
-<a name="l00059"></a>00059 <span class="comment"> * This minimizes the likelihood of conflicts with other packages.</span>
-<a name="l00060"></a>00060 <span class="comment"> **********************************************************************/</span>
-<a name="l00061"></a>00061 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00062"></a>00062 <span class="comment"></span>
-<a name="l00063"></a>00063 <span class="comment">  /**</span>
-<a name="l00064"></a>00064 <span class="comment">   * \brief %Constants needed by %GeographicLib</span>
-<a name="l00065"></a>00065 <span class="comment">   *</span>
-<a name="l00066"></a>00066 <span class="comment">   * Define constants specifying the WGS84 ellipsoid, the UTM and UPS</span>
-<a name="l00067"></a>00067 <span class="comment">   * projections, and various unit conversions.</span>
-<a name="l00068"></a>00068 <span class="comment">   *</span>
-<a name="l00069"></a>00069 <span class="comment">   * Example of use:</span>
-<a name="l00070"></a>00070 <span class="comment">   * \include example-Constants.cpp</span>
-<a name="l00071"></a>00071 <span class="comment">   **********************************************************************/</span>
-<a name="l00072"></a>00072   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> Constants {
-<a name="l00073"></a>00073   <span class="keyword">private</span>:
-<a name="l00074"></a>00074     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00075"></a>00075     Constants();                <span class="comment">// Disable constructor</span>
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00078"></a>00078 <span class="comment">    /**</span>
-<a name="l00079"></a>00079 <span class="comment">     * A synonym for Math::degree<real>().</span>
-<a name="l00080"></a>00080 <span class="comment">     **********************************************************************/</span>
-<a name="l00081"></a><a class="code" href="classGeographicLib_1_1Constants.html#a26ff02acd8141a815428cddf0ff3ff66">00081</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#a26ff02acd8141a815428cddf0ff3ff66">degree</a>() throw() { <span class="keywordflow">return</span> <a class [...]
-<a name="l00082"></a>00082 <span class="comment">    /**</span>
-<a name="l00083"></a>00083 <span class="comment">     * @return the number of radians in an arcminute.</span>
-<a name="l00084"></a>00084 <span class="comment">     **********************************************************************/</span>
-<a name="l00085"></a><a class="code" href="classGeographicLib_1_1Constants.html#a8f8e6d3bd08abb72b686a0f4398b587b">00085</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real arcminute() throw()
-<a name="l00086"></a>00086     { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>() / 60; }<span class="comment"></span>
-<a name="l00087"></a>00087 <span class="comment">    /**</span>
-<a name="l00088"></a>00088 <span class="comment">     * @return the number of radians in an arcsecond.</span>
-<a name="l00089"></a>00089 <span class="comment">     **********************************************************************/</span>
-<a name="l00090"></a><a class="code" href="classGeographicLib_1_1Constants.html#a04858f922295d2a04bb021eecac07179">00090</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real arcsecond() throw()
-<a name="l00091"></a>00091     { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>() / 3600; }
-<a name="l00092"></a>00092 <span class="comment"></span>
-<a name="l00093"></a>00093 <span class="comment">    /** \name Ellipsoid parameters</span>
-<a name="l00094"></a>00094 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00095"></a>00095 <span class="comment">    ///@{</span>
-<a name="l00096"></a>00096 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00097"></a>00097 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00098"></a>00098 <span class="comment">     * @return the equatorial radius of WGS84 ellipsoid (6378137 m).</span>
-<a name="l00099"></a>00099 <span class="comment">     **********************************************************************/</span>
-<a name="l00100"></a><a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">00100</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T WGS84_a() throw()
-<a name="l00101"></a>00101     { <span class="keywordflow">return</span> T(6378137) * meter<T>(); }<span class="comment"></span>
-<a name="l00102"></a>00102 <span class="comment">    /**</span>
-<a name="l00103"></a>00103 <span class="comment">     * A synonym for WGS84_a<real>().</span>
-<a name="l00104"></a>00104 <span class="comment">     **********************************************************************/</span>
-<a name="l00105"></a><a class="code" href="classGeographicLib_1_1Constants.html#a53f39f52837f47490fbdf7332a37dd8b">00105</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#a53f39f52837f47490fbdf7332a37dd8b">WGS84_a</a>() throw() { <span class="keywordflow">return</span> WGS84_a [...]
-<a name="l00106"></a>00106 <span class="comment">    /**</span>
-<a name="l00107"></a>00107 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00108"></a>00108 <span class="comment">     * @return the flattening of WGS84 ellipsoid (1/298.257223563).</span>
-<a name="l00109"></a>00109 <span class="comment">     **********************************************************************/</span>
-<a name="l00110"></a><a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">00110</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T WGS84_f() throw()
-<a name="l00111"></a>00111     { <span class="keywordflow">return</span> T(1) / ( T(298) + T(257223563) / T(1000000000) ); }<span class="comment"></span>
-<a name="l00112"></a>00112 <span class="comment">    /**</span>
-<a name="l00113"></a>00113 <span class="comment">     * A synonym for WGS84_f<real>().</span>
-<a name="l00114"></a>00114 <span class="comment">     **********************************************************************/</span>
-<a name="l00115"></a><a class="code" href="classGeographicLib_1_1Constants.html#acd335c7f28440e0774666cedffed84f0">00115</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#acd335c7f28440e0774666cedffed84f0">WGS84_f</a>() throw() { <span class="keywordflow">return</span> WGS84_f [...]
-<a name="l00116"></a>00116 <span class="comment">    /**</span>
-<a name="l00117"></a>00117 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00118"></a>00118 <span class="comment">     * @return the gravitational constant of the WGS84 ellipsoid, \e GM, in</span>
-<a name="l00119"></a>00119 <span class="comment">     *   m<sup>3</sup> s<sup>-2</sup>.</span>
-<a name="l00120"></a>00120 <span class="comment">     **********************************************************************/</span>
-<a name="l00121"></a><a class="code" href="classGeographicLib_1_1Constants.html#af7806106d7bd289bb63d5290e79c87a6">00121</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T WGS84_GM() throw()
-<a name="l00122"></a>00122     { <span class="keywordflow">return</span> T(3986004) * T(100000000) + T(41800000); }<span class="comment"></span>
-<a name="l00123"></a>00123 <span class="comment">    /**</span>
-<a name="l00124"></a>00124 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00125"></a>00125 <span class="comment">     * @return the angular velocity of the the WGS84 ellipsoid, \e omega, in</span>
-<a name="l00126"></a>00126 <span class="comment">     *   rad s<sup>-1</sup>.</span>
-<a name="l00127"></a>00127 <span class="comment">     **********************************************************************/</span>
-<a name="l00128"></a><a class="code" href="classGeographicLib_1_1Constants.html#a98c114d5a6ca42d3e4ece8595a0c2180">00128</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T WGS84_omega() throw()
-<a name="l00129"></a>00129     { <span class="keywordflow">return</span> T(7292115) / (T(1000000) * T(100000)); }<span class="comment"></span>
-<a name="l00130"></a>00130 <span class="comment">    /// \cond SKIP</span>
-<a name="l00131"></a>00131 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00132"></a>00132 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00133"></a>00133 <span class="comment">     * @return the reciprocal flattening of WGS84 ellipsoid.</span>
-<a name="l00134"></a>00134 <span class="comment">     **********************************************************************/</span>
-<a name="l00135"></a>00135     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T WGS84_r() throw()
-<a name="l00136"></a>00136     { <span class="keywordflow">return</span> 1/WGS84_f<T>(); }<span class="comment"></span>
-<a name="l00137"></a>00137 <span class="comment">    /**</span>
-<a name="l00138"></a>00138 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00139"></a>00139 <span class="comment">     * A synonym for WGS84_r<real>().</span>
-<a name="l00140"></a>00140 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00141"></a>00141 <span class="comment">    /// \endcond</span>
-<a name="l00142"></a><a class="code" href="classGeographicLib_1_1Constants.html#a199810de7ff3351be6473d20ef045789">00142</a> <span class="comment"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#a199810de7ff3351be6473d20ef045789">WGS84_r</a>() throw() { <span class="keywo [...]
-<a name="l00143"></a>00143 <span class="comment">    /**</span>
-<a name="l00144"></a>00144 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00145"></a>00145 <span class="comment">     * @return the equatorial radius of GRS80 ellipsoid, \e a, in m.</span>
-<a name="l00146"></a>00146 <span class="comment">     **********************************************************************/</span>
-<a name="l00147"></a><a class="code" href="classGeographicLib_1_1Constants.html#a9b955c3556dcfcebce6a2926bfeaf464">00147</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T GRS80_a() throw()
-<a name="l00148"></a>00148     { <span class="keywordflow">return</span> T(6378137); }<span class="comment"></span>
-<a name="l00149"></a>00149 <span class="comment">    /**</span>
-<a name="l00150"></a>00150 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00151"></a>00151 <span class="comment">     * @return the gravitational constant of the GRS80 ellipsoid, \e GM, in</span>
-<a name="l00152"></a>00152 <span class="comment">     *   m<sup>3</sup> s<sup>-2</sup>.</span>
-<a name="l00153"></a>00153 <span class="comment">     **********************************************************************/</span>
-<a name="l00154"></a><a class="code" href="classGeographicLib_1_1Constants.html#a7541474ca70cbec7fccb08d3e3fbfe31">00154</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T GRS80_GM() throw()
-<a name="l00155"></a>00155     { <span class="keywordflow">return</span> T(3986005) * T(100000000); }<span class="comment"></span>
-<a name="l00156"></a>00156 <span class="comment">    /**</span>
-<a name="l00157"></a>00157 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00158"></a>00158 <span class="comment">     * @return the angular velocity of the the GRS80 ellipsoid, \e omega, in</span>
-<a name="l00159"></a>00159 <span class="comment">     *   rad s<sup>-1</sup>.</span>
-<a name="l00160"></a>00160 <span class="comment">     *</span>
-<a name="l00161"></a>00161 <span class="comment">     * This is about 2*pi*366.25 / (365.25*24*3600) rad s<sup>-1</sup>.  365.25</span>
-<a name="l00162"></a>00162 <span class="comment">     * is the number of days in a Julian year and 365.35/366.25 converts from</span>
-<a name="l00163"></a>00163 <span class="comment">     * solar days to sidereal days.  Using the number of days in a Gregorian</span>
-<a name="l00164"></a>00164 <span class="comment">     * year (365.2425) results in a worse approximation (because the Gregorian</span>
-<a name="l00165"></a>00165 <span class="comment">     * year includes the precession of the earth's axis).</span>
-<a name="l00166"></a>00166 <span class="comment">     **********************************************************************/</span>
-<a name="l00167"></a><a class="code" href="classGeographicLib_1_1Constants.html#a9caea97ab2be0959c7972155141bfd1b">00167</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T GRS80_omega() throw()
-<a name="l00168"></a>00168     { <span class="keywordflow">return</span> T(7292115) / (T(1000000) * T(100000)); }<span class="comment"></span>
-<a name="l00169"></a>00169 <span class="comment">    /**</span>
-<a name="l00170"></a>00170 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00171"></a>00171 <span class="comment">     * @return the dynamical form factor of the GRS80 ellipsoid,</span>
-<a name="l00172"></a>00172 <span class="comment">     *   <i>J</i><sub>2</sub>.</span>
-<a name="l00173"></a>00173 <span class="comment">     **********************************************************************/</span>
-<a name="l00174"></a><a class="code" href="classGeographicLib_1_1Constants.html#a59c7a1d298eb72256119894b67470974">00174</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T GRS80_J2() throw()
-<a name="l00175"></a>00175     { <span class="keywordflow">return</span> T(108263) / T(100000000); }<span class="comment"></span>
-<a name="l00176"></a>00176 <span class="comment">    /**</span>
-<a name="l00177"></a>00177 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00178"></a>00178 <span class="comment">     * @return the central scale factor for UTM (0.9996).</span>
-<a name="l00179"></a>00179 <span class="comment">     **********************************************************************/</span>
-<a name="l00180"></a><a class="code" href="classGeographicLib_1_1Constants.html#ab5cc487ab160c0a213fdf8e12cde198a">00180</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T UTM_k0() throw()
-<a name="l00181"></a>00181     {<span class="keywordflow">return</span> T(9996) / T(10000); }<span class="comment"></span>
-<a name="l00182"></a>00182 <span class="comment">    /**</span>
-<a name="l00183"></a>00183 <span class="comment">     * A synonym for UTM_k0<real>().</span>
-<a name="l00184"></a>00184 <span class="comment">     **********************************************************************/</span>
-<a name="l00185"></a><a class="code" href="classGeographicLib_1_1Constants.html#aebbe37ebfb407a851f72caa95e5dc94f">00185</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#aebbe37ebfb407a851f72caa95e5dc94f">UTM_k0</a>() throw() { <span class="keywordflow">return</span> UTM_k0&l [...]
-<a name="l00186"></a>00186 <span class="comment">    /**</span>
-<a name="l00187"></a>00187 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00188"></a>00188 <span class="comment">     * @return the central scale factor for UPS (0.994).</span>
-<a name="l00189"></a>00189 <span class="comment">     **********************************************************************/</span>
-<a name="l00190"></a><a class="code" href="classGeographicLib_1_1Constants.html#a3fe287ab1a0847f5392c1aaf9c5e635a">00190</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T UPS_k0() throw()
-<a name="l00191"></a>00191     { <span class="keywordflow">return</span> T(994) / T(1000); }<span class="comment"></span>
-<a name="l00192"></a>00192 <span class="comment">    /**</span>
-<a name="l00193"></a>00193 <span class="comment">     * A synonym for UPS_k0<real>().</span>
-<a name="l00194"></a>00194 <span class="comment">     **********************************************************************/</span>
-<a name="l00195"></a><a class="code" href="classGeographicLib_1_1Constants.html#a49d415263ee320d1a63a857f784439a3">00195</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#a49d415263ee320d1a63a857f784439a3">UPS_k0</a>() throw() { <span class="keywordflow">return</span> UPS_k0&l [...]
-<a name="l00196"></a>00196 <span class="comment">    ///@}</span>
-<a name="l00197"></a>00197 <span class="comment"></span><span class="comment"></span>
-<a name="l00198"></a>00198 <span class="comment">    /** \name SI units</span>
-<a name="l00199"></a>00199 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00200"></a>00200 <span class="comment">    ///@{</span>
-<a name="l00201"></a>00201 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00202"></a>00202 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00203"></a>00203 <span class="comment">     * @return the number of meters in a meter.</span>
-<a name="l00204"></a>00204 <span class="comment">     *</span>
-<a name="l00205"></a>00205 <span class="comment">     * This is unity, but this lets the internal system of units be changed if</span>
-<a name="l00206"></a>00206 <span class="comment">     * necessary.</span>
-<a name="l00207"></a>00207 <span class="comment">     **********************************************************************/</span>
-<a name="l00208"></a><a class="code" href="classGeographicLib_1_1Constants.html#ac1b17e7cf67ef42b9b91f3677c2eaa75">00208</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Constants.html#ac1b17e7cf67ef42b9b91f3677c2eaa75">meter</a>() throw() { <span class="keywordflow">return</span> T(1); }<span class="comment"></span>
-<a name="l00209"></a>00209 <span class="comment">    /**</span>
-<a name="l00210"></a>00210 <span class="comment">     * A synonym for meter<real>().</span>
-<a name="l00211"></a>00211 <span class="comment">     **********************************************************************/</span>
-<a name="l00212"></a><a class="code" href="classGeographicLib_1_1Constants.html#afeffc10d6b8171b39a50949cac149063">00212</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#afeffc10d6b8171b39a50949cac149063">meter</a>() throw() { <span class="keywordflow">return</span> meter< [...]
-<a name="l00213"></a>00213 <span class="comment">    /**</span>
-<a name="l00214"></a>00214 <span class="comment">     * @return the number of meters in a kilometer.</span>
-<a name="l00215"></a>00215 <span class="comment">     **********************************************************************/</span>
-<a name="l00216"></a><a class="code" href="classGeographicLib_1_1Constants.html#a4ec5a9d91ab0ccbd3bd921cda4bfc836">00216</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real kilometer() throw()
-<a name="l00217"></a>00217     { <span class="keywordflow">return</span> 1000 * meter<real>(); }<span class="comment"></span>
-<a name="l00218"></a>00218 <span class="comment">    /**</span>
-<a name="l00219"></a>00219 <span class="comment">     * @return the number of meters in a nautical mile (approximately 1 arc</span>
-<a name="l00220"></a>00220 <span class="comment">     *   minute)</span>
-<a name="l00221"></a>00221 <span class="comment">     **********************************************************************/</span>
-<a name="l00222"></a><a class="code" href="classGeographicLib_1_1Constants.html#afedc242aa3ee9b3bf9c72d6d81fc6740">00222</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real nauticalmile() throw()
-<a name="l00223"></a>00223     { <span class="keywordflow">return</span> 1852 * meter<real>(); }
-<a name="l00224"></a>00224 <span class="comment"></span>
-<a name="l00225"></a>00225 <span class="comment">    /**</span>
-<a name="l00226"></a>00226 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00227"></a>00227 <span class="comment">     * @return the number of square meters in a square meter.</span>
-<a name="l00228"></a>00228 <span class="comment">     *</span>
-<a name="l00229"></a>00229 <span class="comment">     * This is unity, but this lets the internal system of units be changed if</span>
-<a name="l00230"></a>00230 <span class="comment">     * necessary.</span>
-<a name="l00231"></a>00231 <span class="comment">     **********************************************************************/</span>
-<a name="l00232"></a><a class="code" href="classGeographicLib_1_1Constants.html#ab92200b36f9d306a2710738c6d9bc705">00232</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T square_meter() throw()
-<a name="l00233"></a>00233     { <span class="keywordflow">return</span> meter<real>() * meter<real>(); }<span class="comment"></span>
-<a name="l00234"></a>00234 <span class="comment">    /**</span>
-<a name="l00235"></a>00235 <span class="comment">     * A synonym for square_meter<real>().</span>
-<a name="l00236"></a>00236 <span class="comment">     **********************************************************************/</span>
-<a name="l00237"></a><a class="code" href="classGeographicLib_1_1Constants.html#a702b928c9a29dbcc7324b9d835b38d94">00237</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real square_meter() throw()
-<a name="l00238"></a>00238     { <span class="keywordflow">return</span> square_meter<real>(); }<span class="comment"></span>
-<a name="l00239"></a>00239 <span class="comment">    /**</span>
-<a name="l00240"></a>00240 <span class="comment">     * @return the number of square meters in a hectare.</span>
-<a name="l00241"></a>00241 <span class="comment">     **********************************************************************/</span>
-<a name="l00242"></a><a class="code" href="classGeographicLib_1_1Constants.html#a4cc4ae77e3136d7784cd7c69d6927adc">00242</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real hectare() throw()
-<a name="l00243"></a>00243     { <span class="keywordflow">return</span> 10000 * square_meter<real>(); }<span class="comment"></span>
-<a name="l00244"></a>00244 <span class="comment">    /**</span>
-<a name="l00245"></a>00245 <span class="comment">     * @return the number of square meters in a square kilometer.</span>
-<a name="l00246"></a>00246 <span class="comment">     **********************************************************************/</span>
-<a name="l00247"></a><a class="code" href="classGeographicLib_1_1Constants.html#a1956824e4f2b22705d57566229a7c311">00247</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real square_kilometer() throw()
-<a name="l00248"></a>00248     { <span class="keywordflow">return</span> kilometer() * kilometer(); }<span class="comment"></span>
-<a name="l00249"></a>00249 <span class="comment">    /**</span>
-<a name="l00250"></a>00250 <span class="comment">     * @return the number of square meters in a square nautical mile.</span>
-<a name="l00251"></a>00251 <span class="comment">     **********************************************************************/</span>
-<a name="l00252"></a><a class="code" href="classGeographicLib_1_1Constants.html#a5acf6b2c23d1c9ddf140a6b4e588e88a">00252</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real square_nauticalmile() throw()
-<a name="l00253"></a>00253     { <span class="keywordflow">return</span> nauticalmile() * nauticalmile(); }<span class="comment"></span>
-<a name="l00254"></a>00254 <span class="comment">    ///@}</span>
-<a name="l00255"></a>00255 <span class="comment"></span><span class="comment"></span>
-<a name="l00256"></a>00256 <span class="comment">    /** \name Anachronistic British units</span>
-<a name="l00257"></a>00257 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00258"></a>00258 <span class="comment">    ///@{</span>
-<a name="l00259"></a>00259 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00260"></a>00260 <span class="comment">     * @return the number of meters in an international foot.</span>
-<a name="l00261"></a>00261 <span class="comment">     **********************************************************************/</span>
-<a name="l00262"></a><a class="code" href="classGeographicLib_1_1Constants.html#ac69f40e7e56c71bc72011c7591f7bef9">00262</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real foot() throw()
-<a name="l00263"></a>00263     { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.0254L) * 12 * meter<real>(); }<span class="comment"></span>
-<a name="l00264"></a>00264 <span class="comment">    /**</span>
-<a name="l00265"></a>00265 <span class="comment">     * @return the number of meters in a yard.</span>
-<a name="l00266"></a>00266 <span class="comment">     **********************************************************************/</span>
-<a name="l00267"></a><a class="code" href="classGeographicLib_1_1Constants.html#a00057328caa45bc216d18243786920c2">00267</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#a00057328caa45bc216d18243786920c2">yard</a>() throw() { <span class="keywordflow">return</span> 3 * foot() [...]
-<a name="l00268"></a>00268 <span class="comment">    /**</span>
-<a name="l00269"></a>00269 <span class="comment">     * @return the number of meters in a fathom.</span>
-<a name="l00270"></a>00270 <span class="comment">     **********************************************************************/</span>
-<a name="l00271"></a><a class="code" href="classGeographicLib_1_1Constants.html#a51cf3e97984ac301b1f27b667b360be0">00271</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#a51cf3e97984ac301b1f27b667b360be0">fathom</a>() throw() { <span class="keywordflow">return</span> 2 * yard [...]
-<a name="l00272"></a>00272 <span class="comment">    /**</span>
-<a name="l00273"></a>00273 <span class="comment">     * @return the number of meters in a chain.</span>
-<a name="l00274"></a>00274 <span class="comment">     **********************************************************************/</span>
-<a name="l00275"></a><a class="code" href="classGeographicLib_1_1Constants.html#ac4f3792bce075999b0c9b9485e4079d0">00275</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#ac4f3792bce075999b0c9b9485e4079d0">chain</a>() throw() { <span class="keywordflow">return</span> 22 * yard [...]
-<a name="l00276"></a>00276 <span class="comment">    /**</span>
-<a name="l00277"></a>00277 <span class="comment">     * @return the number of meters in a furlong.</span>
-<a name="l00278"></a>00278 <span class="comment">     **********************************************************************/</span>
-<a name="l00279"></a><a class="code" href="classGeographicLib_1_1Constants.html#a824d39311cf43f916d4ac19e46da3713">00279</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#a824d39311cf43f916d4ac19e46da3713">furlong</a>() throw() { <span class="keywordflow">return</span> 10 * ch [...]
-<a name="l00280"></a>00280 <span class="comment">    /**</span>
-<a name="l00281"></a>00281 <span class="comment">     * @return the number of meters in a statute mile.</span>
-<a name="l00282"></a>00282 <span class="comment">     **********************************************************************/</span>
-<a name="l00283"></a><a class="code" href="classGeographicLib_1_1Constants.html#a49cb7b828f7c85c36761d47b8db6518c">00283</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#a49cb7b828f7c85c36761d47b8db6518c">mile</a>() throw() { <span class="keywordflow">return</span> 8 * furlon [...]
-<a name="l00284"></a>00284 <span class="comment">    /**</span>
-<a name="l00285"></a>00285 <span class="comment">     * @return the number of square meters in an acre.</span>
-<a name="l00286"></a>00286 <span class="comment">     **********************************************************************/</span>
-<a name="l00287"></a><a class="code" href="classGeographicLib_1_1Constants.html#ae5aa419ea6c6ce121c912c8afea0a0b7">00287</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#ae5aa419ea6c6ce121c912c8afea0a0b7">acre</a>() throw() { <span class="keywordflow">return</span> chain() *  [...]
-<a name="l00288"></a>00288 <span class="comment">    /**</span>
-<a name="l00289"></a>00289 <span class="comment">     * @return the number of square meters in a square statute mile.</span>
-<a name="l00290"></a>00290 <span class="comment">     **********************************************************************/</span>
-<a name="l00291"></a><a class="code" href="classGeographicLib_1_1Constants.html#ab7f473c27ad50da450b4192155cc92f9">00291</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Constants.html#ab7f473c27ad50da450b4192155cc92f9">square_mile</a>() throw() { <span class="keywordflow">return</span> mil [...]
-<a name="l00292"></a>00292 <span class="comment">    ///@}</span>
-<a name="l00293"></a>00293 <span class="comment"></span><span class="comment"></span>
-<a name="l00294"></a>00294 <span class="comment">    /** \name Anachronistic US units</span>
-<a name="l00295"></a>00295 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00296"></a>00296 <span class="comment">    ///@{</span>
-<a name="l00297"></a>00297 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00298"></a>00298 <span class="comment">     * @return the number of meters in a US survey foot.</span>
-<a name="l00299"></a>00299 <span class="comment">     **********************************************************************/</span>
-<a name="l00300"></a><a class="code" href="classGeographicLib_1_1Constants.html#a7faf6e7435791c0a8061296a79c0be08">00300</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real surveyfoot() throw()
-<a name="l00301"></a>00301     { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1200) / <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(3937) * meter<real>(); }<span class="comment"></span>
-<a name="l00302"></a>00302 <span class="comment">    ///@}</span>
-<a name="l00303"></a>00303 <span class="comment"></span>  };
-<a name="l00304"></a>00304 <span class="comment"></span>
-<a name="l00305"></a>00305 <span class="comment">  /**</span>
-<a name="l00306"></a>00306 <span class="comment">   * \brief Exception handling for %GeographicLib</span>
-<a name="l00307"></a>00307 <span class="comment">   *</span>
-<a name="l00308"></a>00308 <span class="comment">   * A class to handle exceptions.  It's derived from std::runtime_error so it</span>
-<a name="l00309"></a>00309 <span class="comment">   * can be caught by the usual catch clauses.</span>
-<a name="l00310"></a>00310 <span class="comment">   *</span>
-<a name="l00311"></a>00311 <span class="comment">   * Example of use:</span>
-<a name="l00312"></a>00312 <span class="comment">   * \include example-GeographicErr.cpp</span>
-<a name="l00313"></a>00313 <span class="comment">   **********************************************************************/</span>
-<a name="l00314"></a>00314   <span class="keyword">class </span>GeographicErr : <span class="keyword">public</span> std::runtime_error {
-<a name="l00315"></a>00315   <span class="keyword">public</span>:
-<a name="l00316"></a>00316 <span class="comment"></span>
-<a name="l00317"></a>00317 <span class="comment">    /**</span>
-<a name="l00318"></a>00318 <span class="comment">     * Constructor</span>
-<a name="l00319"></a>00319 <span class="comment">     *</span>
-<a name="l00320"></a>00320 <span class="comment">     * @param[in] msg a string message, which is accessible in the catch</span>
-<a name="l00321"></a>00321 <span class="comment">     *   clause, via what().</span>
-<a name="l00322"></a>00322 <span class="comment">     **********************************************************************/</span>
-<a name="l00323"></a><a class="code" href="classGeographicLib_1_1GeographicErr.html#ae0f338af58f073657b012c8a9a64b006">00323</a>     <a class="code" href="classGeographicLib_1_1GeographicErr.html#ae0f338af58f073657b012c8a9a64b006">GeographicErr</a>(<span class="keyword">const</span> std::string& msg) : std::runtime_error(msg) {}
-<a name="l00324"></a>00324   };
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 <span class="preprocessor">#endif  // GEOGRAPHICLIB_CONSTANTS_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/DMS_8cpp.html b/doc/html/DMS_8cpp.html
deleted file mode 100644
index cccc9e6..0000000
--- a/doc/html/DMS_8cpp.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: DMS.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">DMS.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <algorithm></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="DMS_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="DMS_8cpp.html#a6ef96ce6d2929e11dc6ec87433f4d7d1">GEOGRAPHICLIB_DMS_CPP</a>   "$Id: db38ddc05f7c27732da3aa820191a51200ce92ac $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="DMS_8cpp_source.html">DMS.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a6ef96ce6d2929e11dc6ec87433f4d7d1"></a><!-- doxytag: member="DMS.cpp::GEOGRAPHICLIB_DMS_CPP" ref="a6ef96ce6d2929e11dc6ec87433f4d7d1" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_DMS_CPP   "$Id: db38ddc05f7c27732da3aa820191a51200ce92ac $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="DMS_8cpp_source.html#l00014">14</a> of file <a class="el" href="DMS_8cpp_source.html">DMS.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/DMS_8cpp_source.html b/doc/html/DMS_8cpp_source.html
deleted file mode 100644
index e638cfd..0000000
--- a/doc/html/DMS_8cpp_source.html
+++ /dev/null
@@ -1,417 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: DMS.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">DMS.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="DMS_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file DMS.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::DMS class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <algorithm></span>
-<a name="l00012"></a>00012 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00013"></a>00013 
-<a name="l00014"></a><a class="code" href="DMS_8cpp.html#a6ef96ce6d2929e11dc6ec87433f4d7d1">00014</a> <span class="preprocessor">#define GEOGRAPHICLIB_DMS_CPP "$Id: db38ddc05f7c27732da3aa820191a51200ce92ac $"</span>
-<a name="l00015"></a>00015 <span class="preprocessor"></span>
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="DMS_8cpp.html#a6ef96ce6d2929e11dc6ec87433f4d7d1">GEOGRAPHICLIB_DMS_CPP</a>)
-<a name="l00017"></a>00017 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="DMS_8hpp.html#a844e4c8afc70c59c842f4553ce40b9c6">GEOGRAPHICLIB_DMS_HPP</a>)
-<a name="l00018"></a>00018 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Constants_8hpp.html#a16d93570265d8037f7dc7d5d026b2aa4">GEOGRAPHICLIB_CONSTANTS_HPP</a>)
-<a name="l00019"></a>00019 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Math_8hpp.html#afb2818ef5e2f2bed96dcaa151b3edca4">GEOGRAPHICLIB_MATH_HPP</a>)
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 namespace GeographicLib {
-<a name="l00022"></a>00022 
-<a name="l00023"></a>00023   <span class="keyword">using namespace </span>std;
-<a name="l00024"></a>00024 
-<a name="l00025"></a>00025   <span class="keyword">const</span> <span class="keywordtype">string</span> DMS::hemispheres_ = <span class="stringliteral">"SNWE"</span>;
-<a name="l00026"></a>00026   <span class="keyword">const</span> <span class="keywordtype">string</span> DMS::signs_ = <span class="stringliteral">"-+"</span>;
-<a name="l00027"></a>00027   <span class="keyword">const</span> <span class="keywordtype">string</span> DMS::digits_ = <span class="stringliteral">"0123456789"</span>;
-<a name="l00028"></a>00028   <span class="keyword">const</span> <span class="keywordtype">string</span> DMS::dmsindicators_ = <span class="stringliteral">"D'\":"</span>;
-<a name="l00029"></a>00029   <span class="keyword">const</span> <span class="keywordtype">string</span> DMS::components_[] = {<span class="stringliteral">"degrees"</span>, <span class="stringliteral">"minutes"</span>, <span class="stringliteral">"seconds"</span>};
-<a name="l00030"></a>00030 
-<a name="l00031"></a><a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">00031</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real DMS::Decode(<span class="keyword">const</span> std::string& dms, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a>& ind) {
-<a name="l00032"></a>00032     <span class="keywordtype">string</span> errormsg;
-<a name="l00033"></a>00033     <span class="keywordtype">string</span> dmsa = dms;
-<a name="l00034"></a>00034     replace(dmsa, <span class="stringliteral">"\xc2\xb0"</span>, <span class="charliteral">'d'</span>); <span class="comment">// degree symbol (U+00b0 = UTF-8 c2 b0)</span>
-<a name="l00035"></a>00035     replace(dmsa, <span class="stringliteral">"\xc2\xba"</span>, <span class="charliteral">'d'</span>); <span class="comment">// alt symbol (U+00ba = UTF-8 c2 ba)</span>
-<a name="l00036"></a>00036     replace(dmsa, <span class="stringliteral">"\xe2\x81\xb0"</span>, <span class="charliteral">'d'</span>);  <span class="comment">// sup zero (U+2070 = UTF-8 e2 81 b0)</span>
-<a name="l00037"></a>00037     replace(dmsa, <span class="stringliteral">"\xe2\x80\xb2"</span>, <span class="charliteral">'\''</span>); <span class="comment">// prime (U+2032 = UTF-8 e2 80 b2)</span>
-<a name="l00038"></a>00038     replace(dmsa, <span class="stringliteral">"\xc2\xb4"</span>, <span class="charliteral">'\''</span>);     <span class="comment">// acute accent (U+00b4 = UTF-8 c2 b4)</span>
-<a name="l00039"></a>00039     replace(dmsa, <span class="stringliteral">"\xe2\x80\xb3"</span>, <span class="charliteral">'"'</span>);  <span class="comment">// dbl prime (U+2033 = UTF-8 e2 80 b3)</span>
-<a name="l00040"></a>00040     replace(dmsa, <span class="stringliteral">"\xb0"</span>, <span class="charliteral">'d'</span>);          <span class="comment">// bare degree symbol (b0)</span>
-<a name="l00041"></a>00041     replace(dmsa, <span class="stringliteral">"\xba"</span>, <span class="charliteral">'d'</span>);          <span class="comment">// bare alt symbol (ba)</span>
-<a name="l00042"></a>00042     replace(dmsa, <span class="stringliteral">"\xb4"</span>, <span class="charliteral">'d'</span>);          <span class="comment">// bare acute accent (b4)</span>
-<a name="l00043"></a>00043     replace(dmsa, <span class="stringliteral">"''"</span>, <span class="charliteral">'"'</span>);            <span class="comment">// '' -> "</span>
-<a name="l00044"></a>00044     <span class="keywordflow">do</span> {                       <span class="comment">// Executed once (provides the ability to break)</span>
-<a name="l00045"></a>00045       <span class="keywordtype">int</span> sign = 1;
-<a name="l00046"></a>00046       <span class="keywordtype">unsigned</span>
-<a name="l00047"></a>00047         beg = 0,
-<a name="l00048"></a>00048         end = unsigned(dmsa.size());
-<a name="l00049"></a>00049       <span class="keywordflow">while</span> (beg < end && isspace(dmsa[beg]))
-<a name="l00050"></a>00050         ++beg;
-<a name="l00051"></a>00051       <span class="keywordflow">while</span> (beg < end && isspace(dmsa[end - 1]))
-<a name="l00052"></a>00052         --end;
-<a name="l00053"></a>00053       <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ind1 = NONE;
-<a name="l00054"></a>00054       <span class="keywordtype">int</span> k = -1;
-<a name="l00055"></a>00055       <span class="keywordflow">if</span> (end > beg && (k = Utility::lookup(hemispheres_, dmsa[beg])) >= 0) {
-<a name="l00056"></a>00056         ind1 = (k / 2) ? LONGITUDE : LATITUDE;
-<a name="l00057"></a>00057         sign = k % 2 ? 1 : -1;
-<a name="l00058"></a>00058         ++beg;
-<a name="l00059"></a>00059       }
-<a name="l00060"></a>00060       <span class="keywordflow">if</span> (end > beg && (k = Utility::lookup(hemispheres_, dmsa[end-1])) >= 0) {
-<a name="l00061"></a>00061         <span class="keywordflow">if</span> (k >= 0) {
-<a name="l00062"></a>00062           <span class="keywordflow">if</span> (ind1 != NONE) {
-<a name="l00063"></a>00063             <span class="keywordflow">if</span> (toupper(dmsa[beg - 1]) == toupper(dmsa[end - 1]))
-<a name="l00064"></a>00064               errormsg = <span class="stringliteral">"Repeated hemisphere indicators "</span>
-<a name="l00065"></a>00065                 + Utility::str(dmsa[beg - 1])
-<a name="l00066"></a>00066                 + <span class="stringliteral">" in "</span> + dmsa.substr(beg - 1, end - beg + 1);
-<a name="l00067"></a>00067             <span class="keywordflow">else</span>
-<a name="l00068"></a>00068               errormsg = <span class="stringliteral">"Contradictory hemisphere indicators "</span>
-<a name="l00069"></a>00069                 + Utility::str(dmsa[beg - 1]) + <span class="stringliteral">" and "</span>
-<a name="l00070"></a>00070                 + Utility::str(dmsa[end - 1]) + <span class="stringliteral">" in "</span>
-<a name="l00071"></a>00071                 + dmsa.substr(beg - 1, end - beg + 1);
-<a name="l00072"></a>00072             <span class="keywordflow">break</span>;
-<a name="l00073"></a>00073           }
-<a name="l00074"></a>00074           ind1 = (k / 2) ? LONGITUDE : LATITUDE;
-<a name="l00075"></a>00075           sign = k % 2 ? 1 : -1;
-<a name="l00076"></a>00076           --end;
-<a name="l00077"></a>00077         }
-<a name="l00078"></a>00078       }
-<a name="l00079"></a>00079       <span class="keywordflow">if</span> (end > beg && (k = Utility::lookup(signs_, dmsa[beg])) >= 0) {
-<a name="l00080"></a>00080         <span class="keywordflow">if</span> (k >= 0) {
-<a name="l00081"></a>00081           sign *= k ? 1 : -1;
-<a name="l00082"></a>00082           ++beg;
-<a name="l00083"></a>00083         }
-<a name="l00084"></a>00084       }
-<a name="l00085"></a>00085       <span class="keywordflow">if</span> (end == beg) {
-<a name="l00086"></a>00086         errormsg = <span class="stringliteral">"Empty or incomplete DMS string "</span> + dmsa;
-<a name="l00087"></a>00087         <span class="keywordflow">break</span>;
-<a name="l00088"></a>00088       }
-<a name="l00089"></a>00089       real ipieces[] = {0, 0, 0};
-<a name="l00090"></a>00090       real fpieces[] = {0, 0, 0};
-<a name="l00091"></a>00091       <span class="keywordtype">unsigned</span> npiece = 0;
-<a name="l00092"></a>00092       real icurrent = 0;
-<a name="l00093"></a>00093       real fcurrent = 0;
-<a name="l00094"></a>00094       <span class="keywordtype">unsigned</span> ncurrent = 0, p = beg;
-<a name="l00095"></a>00095       <span class="keywordtype">bool</span> pointseen = <span class="keyword">false</span>;
-<a name="l00096"></a>00096       <span class="keywordtype">unsigned</span> digcount = 0;
-<a name="l00097"></a>00097       <span class="keywordflow">while</span> (p < end) {
-<a name="l00098"></a>00098         <span class="keywordtype">char</span> x = dmsa[p++];
-<a name="l00099"></a>00099         <span class="keywordflow">if</span> ((k = Utility::lookup(digits_, x)) >= 0) {
-<a name="l00100"></a>00100           ++ncurrent;
-<a name="l00101"></a>00101           <span class="keywordflow">if</span> (digcount > 0)
-<a name="l00102"></a>00102             ++digcount;         <span class="comment">// Count of decimal digits</span>
-<a name="l00103"></a>00103           <span class="keywordflow">else</span>
-<a name="l00104"></a>00104             icurrent = 10 * icurrent + k;
-<a name="l00105"></a>00105         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (x == <span class="charliteral">'.'</span>) {
-<a name="l00106"></a>00106           <span class="keywordflow">if</span> (pointseen) {
-<a name="l00107"></a>00107             errormsg = <span class="stringliteral">"Multiple decimal points in "</span>
-<a name="l00108"></a>00108               + dmsa.substr(beg, end - beg);
-<a name="l00109"></a>00109             <span class="keywordflow">break</span>;
-<a name="l00110"></a>00110           }
-<a name="l00111"></a>00111           pointseen = <span class="keyword">true</span>;
-<a name="l00112"></a>00112           digcount = 1;
-<a name="l00113"></a>00113         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k = Utility::lookup(dmsindicators_, x)) >= 0) {
-<a name="l00114"></a>00114           <span class="keywordflow">if</span> (k >= 3) {
-<a name="l00115"></a>00115             <span class="keywordflow">if</span> (p == end) {
-<a name="l00116"></a>00116               errormsg = <span class="stringliteral">"Illegal for : to appear at the end of "</span> +
-<a name="l00117"></a>00117                 dmsa.substr(beg, end - beg);
-<a name="l00118"></a>00118               <span class="keywordflow">break</span>;
-<a name="l00119"></a>00119             }
-<a name="l00120"></a>00120             k = npiece;
-<a name="l00121"></a>00121           }
-<a name="l00122"></a>00122           <span class="keywordflow">if</span> (<span class="keywordtype">unsigned</span>(k) == npiece - 1) {
-<a name="l00123"></a>00123             errormsg = <span class="stringliteral">"Repeated "</span> + components_[k] +
-<a name="l00124"></a>00124               <span class="stringliteral">" component in "</span> + dmsa.substr(beg, end - beg);
-<a name="l00125"></a>00125             <span class="keywordflow">break</span>;
-<a name="l00126"></a>00126           } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keywordtype">unsigned</span>(k) < npiece) {
-<a name="l00127"></a>00127             errormsg = components_[k] + <span class="stringliteral">" component follows "</span>
-<a name="l00128"></a>00128               + components_[npiece - 1] + <span class="stringliteral">" component in "</span>
-<a name="l00129"></a>00129               + dmsa.substr(beg, end - beg);
-<a name="l00130"></a>00130             <span class="keywordflow">break</span>;
-<a name="l00131"></a>00131           }
-<a name="l00132"></a>00132           <span class="keywordflow">if</span> (ncurrent == 0) {
-<a name="l00133"></a>00133             errormsg = <span class="stringliteral">"Missing numbers in "</span> + components_[k] +
-<a name="l00134"></a>00134               <span class="stringliteral">" component of "</span> + dmsa.substr(beg, end - beg);
-<a name="l00135"></a>00135             <span class="keywordflow">break</span>;
-<a name="l00136"></a>00136           }
-<a name="l00137"></a>00137           <span class="keywordflow">if</span> (digcount > 1) {
-<a name="l00138"></a>00138             istringstream s(dmsa.substr(p - digcount - 1, digcount));
-<a name="l00139"></a>00139             s >> fcurrent;
-<a name="l00140"></a>00140           }
-<a name="l00141"></a>00141           ipieces[k] = icurrent;
-<a name="l00142"></a>00142           fpieces[k] = icurrent + fcurrent;
-<a name="l00143"></a>00143           <span class="keywordflow">if</span> (p < end) {
-<a name="l00144"></a>00144             npiece = k + 1;
-<a name="l00145"></a>00145             icurrent = fcurrent = 0;
-<a name="l00146"></a>00146             ncurrent = digcount = 0;
-<a name="l00147"></a>00147           }
-<a name="l00148"></a>00148         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Utility::lookup(signs_, x) >= 0) {
-<a name="l00149"></a>00149           errormsg = <span class="stringliteral">"Internal sign in DMS string "</span>
-<a name="l00150"></a>00150             + dmsa.substr(beg, end - beg);
-<a name="l00151"></a>00151           <span class="keywordflow">break</span>;
-<a name="l00152"></a>00152         } <span class="keywordflow">else</span> {
-<a name="l00153"></a>00153           errormsg = <span class="stringliteral">"Illegal character "</span> + Utility::str(x) + <span class="stringliteral">" in DMS string "</span>
-<a name="l00154"></a>00154             + dmsa.substr(beg, end - beg);
-<a name="l00155"></a>00155           <span class="keywordflow">break</span>;
-<a name="l00156"></a>00156         }
-<a name="l00157"></a>00157       }
-<a name="l00158"></a>00158       <span class="keywordflow">if</span> (!errormsg.empty())
-<a name="l00159"></a>00159         <span class="keywordflow">break</span>;
-<a name="l00160"></a>00160       <span class="keywordflow">if</span> (Utility::lookup(dmsindicators_, dmsa[p - 1]) < 0) {
-<a name="l00161"></a>00161         <span class="keywordflow">if</span> (npiece >= 3) {
-<a name="l00162"></a>00162           errormsg = <span class="stringliteral">"Extra text following seconds in DMS string "</span>
-<a name="l00163"></a>00163             + dmsa.substr(beg, end - beg);
-<a name="l00164"></a>00164           <span class="keywordflow">break</span>;
-<a name="l00165"></a>00165         }
-<a name="l00166"></a>00166         <span class="keywordflow">if</span> (ncurrent == 0) {
-<a name="l00167"></a>00167           errormsg = <span class="stringliteral">"Missing numbers in trailing component of "</span>
-<a name="l00168"></a>00168             + dmsa.substr(beg, end - beg);
-<a name="l00169"></a>00169           <span class="keywordflow">break</span>;
-<a name="l00170"></a>00170         }
-<a name="l00171"></a>00171         <span class="keywordflow">if</span> (digcount > 1) {
-<a name="l00172"></a>00172           istringstream s(dmsa.substr(p - digcount, digcount));
-<a name="l00173"></a>00173           s >> fcurrent;
-<a name="l00174"></a>00174         }
-<a name="l00175"></a>00175         ipieces[npiece] = icurrent;
-<a name="l00176"></a>00176         fpieces[npiece] = icurrent + fcurrent;
-<a name="l00177"></a>00177       }
-<a name="l00178"></a>00178       <span class="keywordflow">if</span> (pointseen && digcount == 0) {
-<a name="l00179"></a>00179         errormsg = <span class="stringliteral">"Decimal point in non-terminal component of "</span>
-<a name="l00180"></a>00180           + dmsa.substr(beg, end - beg);
-<a name="l00181"></a>00181         <span class="keywordflow">break</span>;
-<a name="l00182"></a>00182       }
-<a name="l00183"></a>00183       <span class="comment">// Note that we accept 59.999999... even though it rounds to 60.</span>
-<a name="l00184"></a>00184       <span class="keywordflow">if</span> (ipieces[1] >= 60) {
-<a name="l00185"></a>00185         errormsg = <span class="stringliteral">"Minutes "</span> + Utility::str(fpieces[1])
-<a name="l00186"></a>00186           + <span class="stringliteral">" not in range [0, 60)"</span>;
-<a name="l00187"></a>00187         <span class="keywordflow">break</span>;
-<a name="l00188"></a>00188       }
-<a name="l00189"></a>00189       <span class="keywordflow">if</span> (ipieces[2] >= 60) {
-<a name="l00190"></a>00190         errormsg = <span class="stringliteral">"Seconds "</span> + Utility::str(fpieces[2])
-<a name="l00191"></a>00191           + <span class="stringliteral">" not in range [0, 60)"</span>;
-<a name="l00192"></a>00192         <span class="keywordflow">break</span>;
-<a name="l00193"></a>00193       }
-<a name="l00194"></a>00194       ind = ind1;
-<a name="l00195"></a>00195       <span class="comment">// Assume check on range of result is made by calling routine (which</span>
-<a name="l00196"></a>00196       <span class="comment">// might be able to offer a better diagnostic).</span>
-<a name="l00197"></a>00197       <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(sign) * (fpieces[0] + (fpieces[1] + fpieces[2] / 60) / 60);
-<a name="l00198"></a>00198     } <span class="keywordflow">while</span> (<span class="keyword">false</span>);
-<a name="l00199"></a>00199     real val = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::nummatch<real>(dmsa);
-<a name="l00200"></a>00200     <span class="keywordflow">if</span> (val == 0)
-<a name="l00201"></a>00201       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(errormsg);
-<a name="l00202"></a>00202     <span class="keywordflow">else</span>
-<a name="l00203"></a>00203       ind = NONE;
-<a name="l00204"></a>00204     <span class="keywordflow">return</span> val;
-<a name="l00205"></a>00205   }
-<a name="l00206"></a>00206 
-<a name="l00207"></a><a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">00207</a>   <span class="keywordtype">void</span> DMS::DecodeLatLon(<span class="keyword">const</span> std::string& stra, <span class="keyword">const</span> std::string& strb,
-<a name="l00208"></a>00208                          real& lat, real& lon, <span class="keywordtype">bool</span> swaplatlong) {
-<a name="l00209"></a>00209     real a, b;
-<a name="l00210"></a>00210     <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ia, ib;
-<a name="l00211"></a>00211     a = Decode(stra, ia);
-<a name="l00212"></a>00212     b = Decode(strb, ib);
-<a name="l00213"></a>00213     <span class="keywordflow">if</span> (ia == NONE && ib == NONE) {
-<a name="l00214"></a>00214       <span class="comment">// Default to lat, long unless swaplatlong</span>
-<a name="l00215"></a>00215       ia = swaplatlong ? LONGITUDE : LATITUDE;
-<a name="l00216"></a>00216       ib = swaplatlong ? LATITUDE : LONGITUDE;
-<a name="l00217"></a>00217     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ia == NONE)
-<a name="l00218"></a>00218       ia = <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a>(LATITUDE + LONGITUDE - ib);
-<a name="l00219"></a>00219     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ib == NONE)
-<a name="l00220"></a>00220       ib = <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a>(LATITUDE + LONGITUDE - ia);
-<a name="l00221"></a>00221     <span class="keywordflow">if</span> (ia == ib)
-<a name="l00222"></a>00222       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Both "</span> + stra + <span class="stringliteral">" and "</span>
-<a name="l00223"></a>00223                           + strb + <span class="stringliteral">" interpreted as "</span>
-<a name="l00224"></a>00224                           + (ia == LATITUDE ? <span class="stringliteral">"latitudes"</span> : <span class="stringliteral">"longitudes"</span>));
-<a name="l00225"></a>00225     real
-<a name="l00226"></a>00226       lat1 = ia == LATITUDE ? a : b,
-<a name="l00227"></a>00227       lon1 = ia == LATITUDE ? b : a;
-<a name="l00228"></a>00228     <span class="keywordflow">if</span> (lat1 < -90 || lat1 > 90)
-<a name="l00229"></a>00229       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude "</span> + Utility::str(lat1)
-<a name="l00230"></a>00230                           + <span class="stringliteral">"d not in [-90d, 90d]"</span>);
-<a name="l00231"></a>00231     <span class="keywordflow">if</span> (lon1 < -180 || lon1 > 360)
-<a name="l00232"></a>00232       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Longitude "</span> + Utility::str(lon1)
-<a name="l00233"></a>00233                           + <span class="stringliteral">"d not in [-180d, 360d]"</span>);
-<a name="l00234"></a>00234     <span class="keywordflow">if</span> (lon1 >= 180)
-<a name="l00235"></a>00235       lon1 -= 360;
-<a name="l00236"></a>00236     lat = lat1;
-<a name="l00237"></a>00237     lon = lon1;
-<a name="l00238"></a>00238   }
-<a name="l00239"></a>00239 
-<a name="l00240"></a><a class="code" href="classGeographicLib_1_1DMS.html#a868248d72f6b0bf2dae18a15d741ac43">00240</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real DMS::DecodeAngle(<span class="keyword">const</span> std::string& angstr) {
-<a name="l00241"></a>00241     <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ind;
-<a name="l00242"></a>00242     real ang = Decode(angstr, ind);
-<a name="l00243"></a>00243     <span class="keywordflow">if</span> (ind != NONE)
-<a name="l00244"></a>00244       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Arc angle "</span> + angstr
-<a name="l00245"></a>00245                           + <span class="stringliteral">" includes a hemisphere, N/E/W/S"</span>);
-<a name="l00246"></a>00246     <span class="keywordflow">return</span> ang;
-<a name="l00247"></a>00247   }
-<a name="l00248"></a>00248 
-<a name="l00249"></a><a class="code" href="classGeographicLib_1_1DMS.html#a0512cc1275e089138e1550efbee421d9">00249</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real DMS::DecodeAzimuth(<span class="keyword">const</span> std::string& azistr) {
-<a name="l00250"></a>00250     <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ind;
-<a name="l00251"></a>00251     real azi = Decode(azistr, ind);
-<a name="l00252"></a>00252     <span class="keywordflow">if</span> (ind == LATITUDE)
-<a name="l00253"></a>00253       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Azimuth "</span> + azistr
-<a name="l00254"></a>00254                           + <span class="stringliteral">" has a latitude hemisphere, N/S"</span>);
-<a name="l00255"></a>00255     <span class="keywordflow">if</span> (azi < -180 || azi > 360)
-<a name="l00256"></a>00256       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Azimuth "</span> + azistr + <span class="stringliteral">" not in range [-180d, 360d]"</span>);
-<a name="l00257"></a>00257     <span class="keywordflow">if</span> (azi >= 180) azi -= 360;
-<a name="l00258"></a>00258     <span class="keywordflow">return</span> azi;
-<a name="l00259"></a>00259   }
-<a name="l00260"></a>00260 
-<a name="l00261"></a><a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">00261</a>   <span class="keywordtype">string</span> DMS::Encode(real angle, <a class="code" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">component</a> trailing, <span class="keywordtype">unsigned</span> prec, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ind,
-<a name="l00262"></a>00262                      <span class="keywordtype">char</span> dmssep) {
-<a name="l00263"></a>00263     <span class="comment">// Assume check on range of input angle has been made by calling</span>
-<a name="l00264"></a>00264     <span class="comment">// routine (which might be able to offer a better diagnostic).</span>
-<a name="l00265"></a>00265     <span class="keywordflow">if</span> (!Math::isfinite(angle))
-<a name="l00266"></a>00266       <span class="keywordflow">return</span> angle < 0 ? string(<span class="stringliteral">"-inf"</span>) :
-<a name="l00267"></a>00267         (angle > 0 ? string(<span class="stringliteral">"inf"</span>) : string(<span class="stringliteral">"nan"</span>));
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269     <span class="comment">// 15 - 2 * trailing = ceiling(log10(2^53/90/60^trailing)).</span>
-<a name="l00270"></a>00270     <span class="comment">// This suffices to give full real precision for numbers in [-90,90]</span>
-<a name="l00271"></a>00271     prec = min(15 - 2 * <span class="keywordtype">unsigned</span>(trailing), prec);
-<a name="l00272"></a>00272     real scale = 1;
-<a name="l00273"></a>00273     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < unsigned(trailing); ++i)
-<a name="l00274"></a>00274       scale *= 60;
-<a name="l00275"></a>00275     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < prec; ++i)
-<a name="l00276"></a>00276       scale *= 10;
-<a name="l00277"></a>00277     <span class="keywordflow">if</span> (ind == AZIMUTH)
-<a name="l00278"></a>00278       angle -= floor(angle/360) * 360;
-<a name="l00279"></a>00279     <span class="keywordtype">int</span> sign = angle < 0 ? -1 : 1;
-<a name="l00280"></a>00280     angle *= sign;
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282     <span class="comment">// Break off integer part to preserve precision in manipulation of</span>
-<a name="l00283"></a>00283     <span class="comment">// fractional part.</span>
-<a name="l00284"></a>00284     real
-<a name="l00285"></a>00285       idegree = floor(angle),
-<a name="l00286"></a>00286       fdegree = floor((angle - idegree) * scale + <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5)) / scale;
-<a name="l00287"></a>00287     <span class="keywordflow">if</span> (fdegree >= 1) {
-<a name="l00288"></a>00288       idegree += 1;
-<a name="l00289"></a>00289       fdegree -= 1;
-<a name="l00290"></a>00290     }
-<a name="l00291"></a>00291     real pieces[3] = {fdegree, 0, 0};
-<a name="l00292"></a>00292     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i <= unsigned(trailing); ++i) {
-<a name="l00293"></a>00293       real
-<a name="l00294"></a>00294         ip = floor(pieces[i - 1]),
-<a name="l00295"></a>00295         fp = pieces[i - 1] - ip;
-<a name="l00296"></a>00296       pieces[i] = fp * 60;
-<a name="l00297"></a>00297       pieces[i - 1] = ip;
-<a name="l00298"></a>00298     }
-<a name="l00299"></a>00299     pieces[0] += idegree;
-<a name="l00300"></a>00300     ostringstream s;
-<a name="l00301"></a>00301     s << fixed << setfill(<span class="charliteral">'0'</span>);
-<a name="l00302"></a>00302     <span class="keywordflow">if</span> (ind == NONE && sign < 0)
-<a name="l00303"></a>00303       s << <span class="charliteral">'-'</span>;
-<a name="l00304"></a>00304     <span class="keywordflow">switch</span> (trailing) {
-<a name="l00305"></a>00305     <span class="keywordflow">case</span> DEGREE:
-<a name="l00306"></a>00306       <span class="keywordflow">if</span> (ind != NONE)
-<a name="l00307"></a>00307         s << setw(1 + min(<span class="keywordtype">int</span>(ind), 2) + prec + (prec ? 1 : 0));
-<a name="l00308"></a>00308       s << setprecision(prec) << pieces[0];
-<a name="l00309"></a>00309       <span class="comment">// Don't include degree designator (d) if it is the trailing component.</span>
-<a name="l00310"></a>00310       <span class="keywordflow">break</span>;
-<a name="l00311"></a>00311     <span class="keywordflow">default</span>:
-<a name="l00312"></a>00312       <span class="keywordflow">if</span> (ind != NONE)
-<a name="l00313"></a>00313         s << setw(1 + min(<span class="keywordtype">int</span>(ind), 2));
-<a name="l00314"></a>00314       s << setprecision(0) << pieces[0]
-<a name="l00315"></a>00315         << (dmssep ? dmssep : char(tolower(dmsindicators_[0])));
-<a name="l00316"></a>00316       <span class="keywordflow">switch</span> (trailing) {
-<a name="l00317"></a>00317       <span class="keywordflow">case</span> MINUTE:
-<a name="l00318"></a>00318         s << setw(2 + prec + (prec ? 1 : 0)) << setprecision(prec) << pieces[1];
-<a name="l00319"></a>00319         <span class="keywordflow">if</span> (!dmssep)
-<a name="l00320"></a>00320           s << char(tolower(dmsindicators_[1]));
-<a name="l00321"></a>00321         <span class="keywordflow">break</span>;
-<a name="l00322"></a>00322       <span class="keywordflow">case</span> SECOND:
-<a name="l00323"></a>00323         s << setw(2)
-<a name="l00324"></a>00324           << pieces[1] << (dmssep ? dmssep : char(tolower(dmsindicators_[1])))
-<a name="l00325"></a>00325           << setw(2 + prec + (prec ? 1 : 0)) << setprecision(prec) << pieces[2];
-<a name="l00326"></a>00326         <span class="keywordflow">if</span> (!dmssep)
-<a name="l00327"></a>00327           s << char(tolower(dmsindicators_[2]));
-<a name="l00328"></a>00328         <span class="keywordflow">break</span>;
-<a name="l00329"></a>00329       <span class="keywordflow">default</span>:
-<a name="l00330"></a>00330         <span class="keywordflow">break</span>;
-<a name="l00331"></a>00331       }
-<a name="l00332"></a>00332     }
-<a name="l00333"></a>00333     <span class="keywordflow">if</span> (ind != NONE && ind != AZIMUTH)
-<a name="l00334"></a>00334       s << hemispheres_[(ind == LATITUDE ? 0 : 2) + (sign < 0 ? 0 : 1)];
-<a name="l00335"></a>00335     <span class="keywordflow">return</span> s.str();
-<a name="l00336"></a>00336   }
-<a name="l00337"></a>00337 
-<a name="l00338"></a><a class="code" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">00338</a>   <span class="keywordtype">string</span> DMS::Encode(real angle, <a class="code" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">component</a> trailing, <span class="keywordtype">unsigned</span> prec, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ind)
-<a name="l00339"></a>00339   { <span class="keywordflow">return</span> Encode(angle, trailing, prec, ind, <span class="keywordtype">char</span>(0)); }
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/DMS_8hpp.html b/doc/html/DMS_8hpp.html
deleted file mode 100644
index 02659b2..0000000
--- a/doc/html/DMS_8hpp.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: DMS.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">DMS.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <sstream></code><br/>
-<code>#include <iomanip></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="DMS_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert between degrees and DMS representation.  <a href="classGeographicLib_1_1DMS.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="DMS_8hpp.html#a844e4c8afc70c59c842f4553ce40b9c6">GEOGRAPHICLIB_DMS_HPP</a>   "$Id: 67770a78c105495a31a9d3755c811e938729c85a $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="DMS_8hpp_source.html">DMS.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a844e4c8afc70c59c842f4553ce40b9c6"></a><!-- doxytag: member="DMS.hpp::GEOGRAPHICLIB_DMS_HPP" ref="a844e4c8afc70c59c842f4553ce40b9c6" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_DMS_HPP   "$Id: 67770a78c105495a31a9d3755c811e938729c85a $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="DMS_8hpp_source.html#l00011">11</a> of file <a class="el" href="DMS_8hpp_source.html">DMS.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/DMS_8hpp_source.html b/doc/html/DMS_8hpp_source.html
deleted file mode 100644
index 0cec90f..0000000
--- a/doc/html/DMS_8hpp_source.html
+++ /dev/null
@@ -1,450 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: DMS.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">DMS.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="DMS_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file DMS.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::DMS class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_DMS_HPP)</span>
-<a name="l00011"></a><a class="code" href="DMS_8hpp.html#a844e4c8afc70c59c842f4553ce40b9c6">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_DMS_HPP "$Id: 67770a78c105495a31a9d3755c811e938729c85a $"</span>
-<a name="l00012"></a>00012 <span class="preprocessor"></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <sstream></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <iomanip></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="comment">// Squelch warnings about dll vs string</span>
-<a name="l00020"></a>00020 <span class="preprocessor">#pragma warning (push)</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4251)</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment">  /**</span>
-<a name="l00027"></a>00027 <span class="comment">   * \brief Convert between degrees and %DMS representation.</span>
-<a name="l00028"></a>00028 <span class="comment">   *</span>
-<a name="l00029"></a>00029 <span class="comment">   * Parse a string representing degree, minutes, and seconds and return the</span>
-<a name="l00030"></a>00030 <span class="comment">   * angle in degrees and format an angle in degrees as degree, minutes, and</span>
-<a name="l00031"></a>00031 <span class="comment">   * seconds.  In addition, handle NANs and infinities on input and output.</span>
-<a name="l00032"></a>00032 <span class="comment">   *</span>
-<a name="l00033"></a>00033 <span class="comment">   * Example of use:</span>
-<a name="l00034"></a>00034 <span class="comment">   * \include example-DMS.cpp</span>
-<a name="l00035"></a>00035 <span class="comment">   **********************************************************************/</span>
-<a name="l00036"></a>00036   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> DMS {
-<a name="l00037"></a>00037   <span class="keyword">private</span>:
-<a name="l00038"></a>00038     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00039"></a>00039     <span class="comment">// Replace all occurrences of pat by c</span>
-<a name="l00040"></a>00040     <span class="keyword">static</span> <span class="keywordtype">void</span> replace(std::string& s, <span class="keyword">const</span> std::string& pat, <span class="keywordtype">char</span> c) {
-<a name="l00041"></a>00041       std::string::size_type p = 0;
-<a name="l00042"></a>00042       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00043"></a>00043         p = s.find(pat, p);
-<a name="l00044"></a>00044         <span class="keywordflow">if</span> (p == std::string::npos)
-<a name="l00045"></a>00045           <span class="keywordflow">break</span>;
-<a name="l00046"></a>00046         s.replace(p, pat.length(), 1, c);
-<a name="l00047"></a>00047       }
-<a name="l00048"></a>00048     }
-<a name="l00049"></a>00049     <span class="keyword">static</span> <span class="keyword">const</span> std::string hemispheres_;
-<a name="l00050"></a>00050     <span class="keyword">static</span> <span class="keyword">const</span> std::string signs_;
-<a name="l00051"></a>00051     <span class="keyword">static</span> <span class="keyword">const</span> std::string digits_;
-<a name="l00052"></a>00052     <span class="keyword">static</span> <span class="keyword">const</span> std::string dmsindicators_;
-<a name="l00053"></a>00053     <span class="keyword">static</span> <span class="keyword">const</span> std::string components_[3];
-<a name="l00054"></a>00054     <span class="keyword">static</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> NumMatch(<span class="keyword">const</span> std::string& s);
-<a name="l00055"></a>00055     DMS();                      <span class="comment">// Disable constructor</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057   <span class="keyword">public</span>:
-<a name="l00058"></a>00058 <span class="comment"></span>
-<a name="l00059"></a>00059 <span class="comment">    /**</span>
-<a name="l00060"></a>00060 <span class="comment">     * Indicator for presence of hemisphere indicator (N/S/E/W) on latitudes</span>
-<a name="l00061"></a>00061 <span class="comment">     * and longitudes.</span>
-<a name="l00062"></a>00062 <span class="comment">     **********************************************************************/</span>
-<a name="l00063"></a><a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">00063</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> {<span class="comment"></span>
-<a name="l00064"></a>00064 <span class="comment">      /**</span>
-<a name="l00065"></a>00065 <span class="comment">       * No indicator present.</span>
-<a name="l00066"></a>00066 <span class="comment">       * @hideinitializer</span>
-<a name="l00067"></a>00067 <span class="comment">       **********************************************************************/</span>
-<a name="l00068"></a><a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1">00068</a>       NONE = 0,<span class="comment"></span>
-<a name="l00069"></a>00069 <span class="comment">      /**</span>
-<a name="l00070"></a>00070 <span class="comment">       * Latitude indicator (N/S) present.</span>
-<a name="l00071"></a>00071 <span class="comment">       * @hideinitializer</span>
-<a name="l00072"></a>00072 <span class="comment">       **********************************************************************/</span>
-<a name="l00073"></a><a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">00073</a>       LATITUDE = 1,<span class="comment"></span>
-<a name="l00074"></a>00074 <span class="comment">      /**</span>
-<a name="l00075"></a>00075 <span class="comment">       * Longitude indicator (E/W) present.</span>
-<a name="l00076"></a>00076 <span class="comment">       * @hideinitializer</span>
-<a name="l00077"></a>00077 <span class="comment">       **********************************************************************/</span>
-<a name="l00078"></a><a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">00078</a>       LONGITUDE = 2,<span class="comment"></span>
-<a name="l00079"></a>00079 <span class="comment">      /**</span>
-<a name="l00080"></a>00080 <span class="comment">       * Used in Encode to indicate output of an azimuth in [000, 360) with no</span>
-<a name="l00081"></a>00081 <span class="comment">       * letter indicator.</span>
-<a name="l00082"></a>00082 <span class="comment">       * @hideinitializer</span>
-<a name="l00083"></a>00083 <span class="comment">       **********************************************************************/</span>
-<a name="l00084"></a><a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24">00084</a>       AZIMUTH = 3,<span class="comment"></span>
-<a name="l00085"></a>00085 <span class="comment">      /**</span>
-<a name="l00086"></a>00086 <span class="comment">       * Used in Encode to indicate output of a plain number.</span>
-<a name="l00087"></a>00087 <span class="comment">       * @hideinitializer</span>
-<a name="l00088"></a>00088 <span class="comment">       **********************************************************************/</span>
-<a name="l00089"></a><a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">00089</a>       NUMBER = 4,
-<a name="l00090"></a>00090     };
-<a name="l00091"></a>00091 <span class="comment"></span>
-<a name="l00092"></a>00092 <span class="comment">    /**</span>
-<a name="l00093"></a>00093 <span class="comment">     * Indicator for trailing units on an angle.</span>
-<a name="l00094"></a>00094 <span class="comment">     **********************************************************************/</span>
-<a name="l00095"></a><a class="code" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">00095</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">component</a> {<span class="comment"></span>
-<a name="l00096"></a>00096 <span class="comment">      /**</span>
-<a name="l00097"></a>00097 <span class="comment">       * Trailing unit is degrees.</span>
-<a name="l00098"></a>00098 <span class="comment">       * @hideinitializer</span>
-<a name="l00099"></a>00099 <span class="comment">       **********************************************************************/</span>
-<a name="l00100"></a><a class="code" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a8ee59944227e74901b71f27410d70781">00100</a>       DEGREE = 0,<span class="comment"></span>
-<a name="l00101"></a>00101 <span class="comment">      /**</span>
-<a name="l00102"></a>00102 <span class="comment">       * Trailing unit is arc minutes.</span>
-<a name="l00103"></a>00103 <span class="comment">       * @hideinitializer</span>
-<a name="l00104"></a>00104 <span class="comment">       **********************************************************************/</span>
-<a name="l00105"></a><a class="code" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a9884bea675fd214061e534e76a1c15d6">00105</a>       MINUTE = 1,<span class="comment"></span>
-<a name="l00106"></a>00106 <span class="comment">      /**</span>
-<a name="l00107"></a>00107 <span class="comment">       * Trailing unit is arc seconds.</span>
-<a name="l00108"></a>00108 <span class="comment">       * @hideinitializer</span>
-<a name="l00109"></a>00109 <span class="comment">       **********************************************************************/</span>
-<a name="l00110"></a><a class="code" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a10c28c85ddfa71db5f1d46d362333075">00110</a>       SECOND = 2,
-<a name="l00111"></a>00111     };
-<a name="l00112"></a>00112 <span class="comment"></span>
-<a name="l00113"></a>00113 <span class="comment">    /**</span>
-<a name="l00114"></a>00114 <span class="comment">     * Convert a string in DMS to an angle.</span>
-<a name="l00115"></a>00115 <span class="comment">     *</span>
-<a name="l00116"></a>00116 <span class="comment">     * @param[in] dms string input.</span>
-<a name="l00117"></a>00117 <span class="comment">     * @param[out] ind a DMS::flag value signaling the presence of a</span>
-<a name="l00118"></a>00118 <span class="comment">     *   hemisphere indicator.</span>
-<a name="l00119"></a>00119 <span class="comment">     * @return angle (degrees).</span>
-<a name="l00120"></a>00120 <span class="comment">     *</span>
-<a name="l00121"></a>00121 <span class="comment">     * Degrees, minutes, and seconds are indicated by the characters d, '</span>
-<a name="l00122"></a>00122 <span class="comment">     * (single quote), &quot; (double quote), and these components may only be</span>
-<a name="l00123"></a>00123 <span class="comment">     * given in this order.  Any (but not all) components may be omitted and</span>
-<a name="l00124"></a>00124 <span class="comment">     * other symbols (e.g., the <sup>o</sup> symbol for degrees and the unicode</span>
-<a name="l00125"></a>00125 <span class="comment">     * prime and double prime symbols for minutes and seconds) may be</span>
-<a name="l00126"></a>00126 <span class="comment">     * substituted.  The last component indicator may be omitted and is assumed</span>
-<a name="l00127"></a>00127 <span class="comment">     * to be the next smallest unit (thus 33d10 is interpreted as 33d10').  The</span>
-<a name="l00128"></a>00128 <span class="comment">     * final component may be a decimal fraction but the non-final components</span>
-<a name="l00129"></a>00129 <span class="comment">     * must be integers.  Instead of using d, ', and &quot; to indicate</span>
-<a name="l00130"></a>00130 <span class="comment">     * degrees, minutes, and seconds, : (colon) may be used to <i>separate</i></span>
-<a name="l00131"></a>00131 <span class="comment">     * these components (numbers must appear before and after each colon); thus</span>
-<a name="l00132"></a>00132 <span class="comment">     * 50d30'10.3&quot; may be written as 50:30:10.3, 5.5' may be written</span>
-<a name="l00133"></a>00133 <span class="comment">     * 0:5.5, and so on.  The integer parts of the minutes and seconds</span>
-<a name="l00134"></a>00134 <span class="comment">     * components must be less than 60.  A single leading sign is permitted.  A</span>
-<a name="l00135"></a>00135 <span class="comment">     * hemisphere designator (N, E, W, S) may be added to the beginning or end</span>
-<a name="l00136"></a>00136 <span class="comment">     * of the string.  The result is multiplied by the implied sign of the</span>
-<a name="l00137"></a>00137 <span class="comment">     * hemisphere designator (negative for S and W).  In addition \e ind is set</span>
-<a name="l00138"></a>00138 <span class="comment">     * to DMS::LATITUDE if N or S is present, to DMS::LONGITUDE if E or W is</span>
-<a name="l00139"></a>00139 <span class="comment">     * present, and to DMS::NONE otherwise.  Throws an error on a malformed</span>
-<a name="l00140"></a>00140 <span class="comment">     * string.  No check is performed on the range of the result.  Examples of</span>
-<a name="l00141"></a>00141 <span class="comment">     * legal and illegal strings are</span>
-<a name="l00142"></a>00142 <span class="comment">     * - <i>LEGAL</i> (all the entries on each line are equivalent)</span>
-<a name="l00143"></a>00143 <span class="comment">     *   - -20.51125, 20d30'40.5&quot;S, -20d30'40.5, -20d30.675,</span>
-<a name="l00144"></a>00144 <span class="comment">     *     N-20d30'40.5&quot;, -20:30:40.5</span>
-<a name="l00145"></a>00145 <span class="comment">     *   - 4d0'9, 4d9&quot;, 4d9'', 4:0:9, 004:00:09, 4.0025, 4.0025d, 4d0.15,</span>
-<a name="l00146"></a>00146 <span class="comment">     *     04:.15</span>
-<a name="l00147"></a>00147 <span class="comment">     * - <i>ILLEGAL</i> (the exception thrown explains the problem)</span>
-<a name="l00148"></a>00148 <span class="comment">     *   - 4d5&quot;4', 4::5, 4:5:, :4:5, 4d4.5'4&quot;, -N20.5, 1.8e2d, 4:60,</span>
-<a name="l00149"></a>00149 <span class="comment">     *     4d-5'</span>
-<a name="l00150"></a>00150 <span class="comment">     *</span>
-<a name="l00151"></a>00151 <span class="comment">     * <b>NOTE:</b> At present, all the string handling in the C++</span>
-<a name="l00152"></a>00152 <span class="comment">     * implementation %GeographicLib is with 8-bit characters.  The support for</span>
-<a name="l00153"></a>00153 <span class="comment">     * unicode symbols for degrees, minutes, and seconds is therefore via the</span>
-<a name="l00154"></a>00154 <span class="comment">     * <a href="http://en.wikipedia.org/wiki/UTF-8">UTF-8</a> encoding.  (The</span>
-<a name="l00155"></a>00155 <span class="comment">     * Javascript implementation of this class uses unicode natively, of</span>
-<a name="l00156"></a>00156 <span class="comment">     * course.)</span>
-<a name="l00157"></a>00157 <span class="comment">     *</span>
-<a name="l00158"></a>00158 <span class="comment">     * Here is the list of Unicode symbols supported for degrees, minutes,</span>
-<a name="l00159"></a>00159 <span class="comment">     * seconds:</span>
-<a name="l00160"></a>00160 <span class="comment">     * - degrees:</span>
-<a name="l00161"></a>00161 <span class="comment">     *   - d, D lower and upper case letters</span>
-<a name="l00162"></a>00162 <span class="comment">     *   - U+00b0 degree symbol</span>
-<a name="l00163"></a>00163 <span class="comment">     *   - U+00ba masculine ordinal indicator</span>
-<a name="l00164"></a>00164 <span class="comment">     *   - U+2070 superscript zero</span>
-<a name="l00165"></a>00165 <span class="comment">     * - minutes:</span>
-<a name="l00166"></a>00166 <span class="comment">     *   - ' apostrophe</span>
-<a name="l00167"></a>00167 <span class="comment">     *   - U+2032 prime</span>
-<a name="l00168"></a>00168 <span class="comment">     *   - U+00b4 acute accent</span>
-<a name="l00169"></a>00169 <span class="comment">     * - seconds:</span>
-<a name="l00170"></a>00170 <span class="comment">     *   - &quot; quotation mark</span>
-<a name="l00171"></a>00171 <span class="comment">     *   - U+2033 double prime</span>
-<a name="l00172"></a>00172 <span class="comment">     *   - '&nbsp;' any two consecutive symbols for minutes</span>
-<a name="l00173"></a>00173 <span class="comment">     * .</span>
-<a name="l00174"></a>00174 <span class="comment">     * The codes with a leading zero byte, e.g., U+00b0, are accepted in their</span>
-<a name="l00175"></a>00175 <span class="comment">     * UTF-8 coded form 0xc2 0xb0 and as a single byte 0xb0.</span>
-<a name="l00176"></a>00176 <span class="comment">     **********************************************************************/</span>
-<a name="l00177"></a>00177     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Decode(<span class="keyword">const</span> std::string& dms, flag& ind);
-<a name="l00178"></a>00178 <span class="comment"></span>
-<a name="l00179"></a>00179 <span class="comment">    /**</span>
-<a name="l00180"></a>00180 <span class="comment">     * Convert DMS to an angle.</span>
-<a name="l00181"></a>00181 <span class="comment">     *</span>
-<a name="l00182"></a>00182 <span class="comment">     * @param[in] d degrees.</span>
-<a name="l00183"></a>00183 <span class="comment">     * @param[in] m arc minutes.</span>
-<a name="l00184"></a>00184 <span class="comment">     * @param[in] s arc seconds.</span>
-<a name="l00185"></a>00185 <span class="comment">     * @return angle (degrees)</span>
-<a name="l00186"></a>00186 <span class="comment">     *</span>
-<a name="l00187"></a>00187 <span class="comment">     * This does not propagate the sign on \e d to the other components, so</span>
-<a name="l00188"></a>00188 <span class="comment">     * -3d20' would need to be represented as - DMS::Decode(3.0, 20.0) or</span>
-<a name="l00189"></a>00189 <span class="comment">     * DMS::Decode(-3.0, -20.0).</span>
-<a name="l00190"></a>00190 <span class="comment">     **********************************************************************/</span>
-<a name="l00191"></a><a class="code" href="classGeographicLib_1_1DMS.html#a4987f8eb6c1ba5402eb25d6225ab58e1">00191</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Decode(real d, real m = 0, real s = 0) throw()
-<a name="l00192"></a>00192     { <span class="keywordflow">return</span> d + (m + s/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(60))/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(60); }
-<a name="l00193"></a>00193 <span class="comment"></span>
-<a name="l00194"></a>00194 <span class="comment">    /// \cond SKIP</span>
-<a name="l00195"></a>00195 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00196"></a>00196 <span class="comment">     * <b>DEPRECATED</b> (use Utility::num, instead).</span>
-<a name="l00197"></a>00197 <span class="comment">     * Convert a string to a real number.</span>
-<a name="l00198"></a>00198 <span class="comment">     *</span>
-<a name="l00199"></a>00199 <span class="comment">     * @param[in] str string input.</span>
-<a name="l00200"></a>00200 <span class="comment">     * @return decoded number.</span>
-<a name="l00201"></a>00201 <span class="comment">     **********************************************************************/</span>
-<a name="l00202"></a>00202     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Decode(<span class="keyword">const</span> std::string& str)
-<a name="l00203"></a>00203     { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(str); }
-<a name="l00204"></a>00204 <span class="comment"></span>
-<a name="l00205"></a>00205 <span class="comment">    /**</span>
-<a name="l00206"></a>00206 <span class="comment">     * <b>DEPRECATED</b> (use Utility::fract, instead).</span>
-<a name="l00207"></a>00207 <span class="comment">     * Convert a string to a real number treating the case where the string is</span>
-<a name="l00208"></a>00208 <span class="comment">     * a simple fraction.</span>
-<a name="l00209"></a>00209 <span class="comment">     *</span>
-<a name="l00210"></a>00210 <span class="comment">     * @param[in] str string input.</span>
-<a name="l00211"></a>00211 <span class="comment">     * @return decoded number.</span>
-<a name="l00212"></a>00212 <span class="comment">     **********************************************************************/</span>
-<a name="l00213"></a>00213     <span class="keyword">static</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> DecodeFraction(<span class="keyword">const</span> std::string& str)
-<a name="l00214"></a>00214     { <span class="keywordflow">return</span> Utility::fract<real>(str); }<span class="comment"></span>
-<a name="l00215"></a>00215 <span class="comment">    /// \endcond</span>
-<a name="l00216"></a>00216 <span class="comment"></span><span class="comment"></span>
-<a name="l00217"></a>00217 <span class="comment">    /**</span>
-<a name="l00218"></a>00218 <span class="comment">     * Convert a pair of strings to latitude and longitude.</span>
-<a name="l00219"></a>00219 <span class="comment">     *</span>
-<a name="l00220"></a>00220 <span class="comment">     * @param[in] dmsa first string.</span>
-<a name="l00221"></a>00221 <span class="comment">     * @param[in] dmsb second string.</span>
-<a name="l00222"></a>00222 <span class="comment">     * @param[out] lat latitude.</span>
-<a name="l00223"></a>00223 <span class="comment">     * @param[out] lon longitude.</span>
-<a name="l00224"></a>00224 <span class="comment">     * @param[in] swaplatlong if true assume longitude is given before latitude</span>
-<a name="l00225"></a>00225 <span class="comment">     *   in the absence of hemisphere designators (default false).</span>
-<a name="l00226"></a>00226 <span class="comment">     *</span>
-<a name="l00227"></a>00227 <span class="comment">     * By default, the \e lat (resp., \e lon) is assigned to the results of</span>
-<a name="l00228"></a>00228 <span class="comment">     * decoding \e dmsa (resp., \e dmsb).  However this is overridden if either</span>
-<a name="l00229"></a>00229 <span class="comment">     * \e dmsa or \e dmsb contain a latitude or longitude hemisphere designator</span>
-<a name="l00230"></a>00230 <span class="comment">     * (N, S, E, W).  Throws an error if the decoded numbers are out of the</span>
-<a name="l00231"></a>00231 <span class="comment">     * ranges [-90<sup>o</sup>, 90<sup>o</sup>] for latitude and</span>
-<a name="l00232"></a>00232 <span class="comment">     * [-180<sup>o</sup>, 360<sup>o</sup>] for longitude and, in which case \e</span>
-<a name="l00233"></a>00233 <span class="comment">     * lat and \e lon are unchanged.  Finally the longitude is reduced to the</span>
-<a name="l00234"></a>00234 <span class="comment">     * range [-180<sup>o</sup>, 180<sup>o</sup>).</span>
-<a name="l00235"></a>00235 <span class="comment">     **********************************************************************/</span>
-<a name="l00236"></a>00236     <span class="keyword">static</span> <span class="keywordtype">void</span> DecodeLatLon(<span class="keyword">const</span> std::string& dmsa, <span class="keyword">const</span> std::string& dmsb,
-<a name="l00237"></a>00237                              <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <span class="keywordtype">bool</span> swaplatlong = <span class="keyword">false</span>);
-<a name="l00238"></a>00238 <span class="comment"></span>
-<a name="l00239"></a>00239 <span class="comment">    /**</span>
-<a name="l00240"></a>00240 <span class="comment">     * Convert a string to an angle in degrees.</span>
-<a name="l00241"></a>00241 <span class="comment">     *</span>
-<a name="l00242"></a>00242 <span class="comment">     * @param[in] angstr input string.</span>
-<a name="l00243"></a>00243 <span class="comment">     * @return angle (degrees)</span>
-<a name="l00244"></a>00244 <span class="comment">     *</span>
-<a name="l00245"></a>00245 <span class="comment">     * No hemisphere designator is allowed and no check is done on the range of</span>
-<a name="l00246"></a>00246 <span class="comment">     * the result.</span>
-<a name="l00247"></a>00247 <span class="comment">     **********************************************************************/</span>
-<a name="l00248"></a>00248     <span class="keyword">static</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> DecodeAngle(<span class="keyword">const</span> std::string& angstr);
-<a name="l00249"></a>00249 <span class="comment"></span>
-<a name="l00250"></a>00250 <span class="comment">    /**</span>
-<a name="l00251"></a>00251 <span class="comment">     * Convert a string to an azimuth in degrees.</span>
-<a name="l00252"></a>00252 <span class="comment">     *</span>
-<a name="l00253"></a>00253 <span class="comment">     * @param[in] azistr input string.</span>
-<a name="l00254"></a>00254 <span class="comment">     * @return azimuth (degrees)</span>
-<a name="l00255"></a>00255 <span class="comment">     *</span>
-<a name="l00256"></a>00256 <span class="comment">     * A hemisphere designator E/W can be used; the result is multiplied by -1</span>
-<a name="l00257"></a>00257 <span class="comment">     * if W is present.  Throws an error if the result is out of the range</span>
-<a name="l00258"></a>00258 <span class="comment">     * [-180<sup>o</sup>, 360<sup>o</sup>].  Finally the azimuth is reduced to</span>
-<a name="l00259"></a>00259 <span class="comment">     * the range [-180<sup>o</sup>, 180<sup>o</sup>).</span>
-<a name="l00260"></a>00260 <span class="comment">     **********************************************************************/</span>
-<a name="l00261"></a>00261     <span class="keyword">static</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> DecodeAzimuth(<span class="keyword">const</span> std::string& azistr);
-<a name="l00262"></a>00262 <span class="comment"></span>
-<a name="l00263"></a>00263 <span class="comment">    /**</span>
-<a name="l00264"></a>00264 <span class="comment">     * Convert angle (in degrees) into a DMS string (using d, ', and &quot;).</span>
-<a name="l00265"></a>00265 <span class="comment">     *</span>
-<a name="l00266"></a>00266 <span class="comment">     * @param[in] angle input angle (degrees)</span>
-<a name="l00267"></a>00267 <span class="comment">     * @param[in] trailing DMS::component value indicating the trailing units</span>
-<a name="l00268"></a>00268 <span class="comment">     *   on the string and this is given as a decimal number if necessary.</span>
-<a name="l00269"></a>00269 <span class="comment">     * @param[in] prec the number of digits after the decimal point for the</span>
-<a name="l00270"></a>00270 <span class="comment">     *   trailing component.</span>
-<a name="l00271"></a>00271 <span class="comment">     * @param[in] ind DMS::flag value indicated additional formatting.</span>
-<a name="l00272"></a>00272 <span class="comment">     * @param[in] dmssep if non-null, use as the DMS separator character</span>
-<a name="l00273"></a>00273 <span class="comment">     *   (instead of d, ', &quot; delimiters).</span>
-<a name="l00274"></a>00274 <span class="comment">     * @return formatted string</span>
-<a name="l00275"></a>00275 <span class="comment">     *</span>
-<a name="l00276"></a>00276 <span class="comment">     * The interpretation of \e ind is as follows:</span>
-<a name="l00277"></a>00277 <span class="comment">     * - ind == DMS::NONE, signed result no leading zeros on degrees except in</span>
-<a name="l00278"></a>00278 <span class="comment">     *   the units place, e.g., -8d03'.</span>
-<a name="l00279"></a>00279 <span class="comment">     * - ind == DMS::LATITUDE, trailing N or S hemisphere designator, no sign,</span>
-<a name="l00280"></a>00280 <span class="comment">     *   pad degrees to 2 digits, e.g., 08d03'S.</span>
-<a name="l00281"></a>00281 <span class="comment">     * - ind == DMS::LONGITUDE, trailing E or W hemisphere designator, no</span>
-<a name="l00282"></a>00282 <span class="comment">     *   sign, pad degrees to 3 digits, e.g., 008d03'W.</span>
-<a name="l00283"></a>00283 <span class="comment">     * - ind == DMS::AZIMUTH, convert to the range [0, 360<sup>o</sup>), no</span>
-<a name="l00284"></a>00284 <span class="comment">     *   sign, pad degrees to 3 digits, , e.g., 351d57'.</span>
-<a name="l00285"></a>00285 <span class="comment">     * .</span>
-<a name="l00286"></a>00286 <span class="comment">     * The integer parts of the minutes and seconds components are always given</span>
-<a name="l00287"></a>00287 <span class="comment">     * with 2 digits.</span>
-<a name="l00288"></a>00288 <span class="comment">     **********************************************************************/</span>
-<a name="l00289"></a>00289     <span class="keyword">static</span> std::string Encode(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> angle, component trailing, <span class="keywordtype">unsigned</span> prec,
-<a name="l00290"></a>00290                               flag ind, <span class="keywordtype">char</span> dmssep);
-<a name="l00291"></a>00291 <span class="comment"></span>
-<a name="l00292"></a>00292 <span class="comment">    /**</span>
-<a name="l00293"></a>00293 <span class="comment">     * Convert angle (in degrees) into a DMS string (using d, ', and &quot;).</span>
-<a name="l00294"></a>00294 <span class="comment">     *</span>
-<a name="l00295"></a>00295 <span class="comment">     * @param[in] angle input angle (degrees)</span>
-<a name="l00296"></a>00296 <span class="comment">     * @param[in] trailing DMS::component value indicating the trailing units</span>
-<a name="l00297"></a>00297 <span class="comment">     *   on the string and this is given as a decimal number if necessary.</span>
-<a name="l00298"></a>00298 <span class="comment">     * @param[in] prec the number of digits after the decimal point for the</span>
-<a name="l00299"></a>00299 <span class="comment">     *   trailing component.</span>
-<a name="l00300"></a>00300 <span class="comment">     * @param[in] ind DMS::flag value indicated additional formatting.</span>
-<a name="l00301"></a>00301 <span class="comment">     * @return formatted string</span>
-<a name="l00302"></a>00302 <span class="comment">     *</span>
-<a name="l00303"></a>00303 <span class="comment">     * <b>COMPATIBILITY NOTE:</b> This function calls</span>
-<a name="l00304"></a>00304 <span class="comment">     * Encode(real, component, unsigned, flag, char) with a 5th</span>
-<a name="l00305"></a>00305 <span class="comment">     * argument of char(0).  At some point,</span>
-<a name="l00306"></a>00306 <span class="comment">     * Encode(real, component, unsigned, flag) and will be withdrawn</span>
-<a name="l00307"></a>00307 <span class="comment">     * and the interface to</span>
-<a name="l00308"></a>00308 <span class="comment">     * Encode(real, component, unsigned, flag, char) changed so that</span>
-<a name="l00309"></a>00309 <span class="comment">     * its 4th and 5th arguments have default values.  This will</span>
-<a name="l00310"></a>00310 <span class="comment">     * preserve source-level compatibility.</span>
-<a name="l00311"></a>00311 <span class="comment">     **********************************************************************/</span>
-<a name="l00312"></a>00312     <span class="keyword">static</span> std::string Encode(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> angle, component trailing, <span class="keywordtype">unsigned</span> prec,
-<a name="l00313"></a>00313                               flag ind = NONE);
-<a name="l00314"></a>00314 <span class="comment"></span>
-<a name="l00315"></a>00315 <span class="comment">    /**</span>
-<a name="l00316"></a>00316 <span class="comment">     * Convert angle into a DMS string (using d, ', and &quot;) selecting the</span>
-<a name="l00317"></a>00317 <span class="comment">     * trailing component based on the precision.</span>
-<a name="l00318"></a>00318 <span class="comment">     *</span>
-<a name="l00319"></a>00319 <span class="comment">     * @param[in] angle input angle (degrees)</span>
-<a name="l00320"></a>00320 <span class="comment">     * @param[in] prec the precision relative to 1 degree.</span>
-<a name="l00321"></a>00321 <span class="comment">     * @param[in] ind DMS::flag value indicated additional formatting.</span>
-<a name="l00322"></a>00322 <span class="comment">     * @param[in] dmssep if non-null, use as the DMS separator character</span>
-<a name="l00323"></a>00323 <span class="comment">     *   (instead of d, ', &quot; delimiters).</span>
-<a name="l00324"></a>00324 <span class="comment">     * @return formatted string</span>
-<a name="l00325"></a>00325 <span class="comment">     *</span>
-<a name="l00326"></a>00326 <span class="comment">     * \e prec indicates the precision relative to 1 degree, e.g., \e prec = 3</span>
-<a name="l00327"></a>00327 <span class="comment">     * gives a result accurate to 0.1' and \e prec = 4 gives a result accurate</span>
-<a name="l00328"></a>00328 <span class="comment">     * to 1&quot;.  \e ind is interpreted as in DMS::Encode with the additional</span>
-<a name="l00329"></a>00329 <span class="comment">     * facility that DMS::NUMBER represents \e angle as a number in fixed</span>
-<a name="l00330"></a>00330 <span class="comment">     * format with precision \e prec.</span>
-<a name="l00331"></a>00331 <span class="comment">     **********************************************************************/</span>
-<a name="l00332"></a><a class="code" href="classGeographicLib_1_1DMS.html#aeb9d338b12e885092a611bda7e52f9f4">00332</a>     <span class="keyword">static</span> std::string Encode(real angle, <span class="keywordtype">unsigned</span> prec, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ind = NONE,
-<a name="l00333"></a>00333                               <span class="keywordtype">char</span> dmssep = <span class="keywordtype">char</span>(0)) {
-<a name="l00334"></a>00334       <span class="keywordflow">return</span> ind == NUMBER ? <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(angle, int(prec)) :
-<a name="l00335"></a>00335         Encode(angle,
-<a name="l00336"></a>00336                prec < 2 ? DEGREE : (prec < 4 ? MINUTE : SECOND),
-<a name="l00337"></a>00337                prec < 2 ? prec : (prec < 4 ? prec - 2 : prec - 4),
-<a name="l00338"></a>00338                ind, dmssep);
-<a name="l00339"></a>00339     }
-<a name="l00340"></a>00340 <span class="comment"></span>
-<a name="l00341"></a>00341 <span class="comment">    /**</span>
-<a name="l00342"></a>00342 <span class="comment">     * Split angle into degrees and minutes</span>
-<a name="l00343"></a>00343 <span class="comment">     *</span>
-<a name="l00344"></a>00344 <span class="comment">     * @param[in] ang angle (degrees)</span>
-<a name="l00345"></a>00345 <span class="comment">     * @param[out] d degrees (an integer returned as a real)</span>
-<a name="l00346"></a>00346 <span class="comment">     * @param[out] m arc minutes.</span>
-<a name="l00347"></a>00347 <span class="comment">     **********************************************************************/</span>
-<a name="l00348"></a><a class="code" href="classGeographicLib_1_1DMS.html#a1ae785976e5d7c6346cfb68863884b55">00348</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1DMS.html#a1ae785976e5d7c6346cfb68863884b55">Encode</a>(real ang, real& d, real& m) <span class="keywordflow">throw</span>() {
-<a name="l00349"></a>00349       d = int(ang); m = 60 * (ang - d);
-<a name="l00350"></a>00350     }
-<a name="l00351"></a>00351 <span class="comment"></span>
-<a name="l00352"></a>00352 <span class="comment">    /**</span>
-<a name="l00353"></a>00353 <span class="comment">     * Split angle into degrees and minutes and seconds.</span>
-<a name="l00354"></a>00354 <span class="comment">     *</span>
-<a name="l00355"></a>00355 <span class="comment">     * @param[in] ang angle (degrees)</span>
-<a name="l00356"></a>00356 <span class="comment">     * @param[out] d degrees (an integer returned as a real)</span>
-<a name="l00357"></a>00357 <span class="comment">     * @param[out] m arc minutes (an integer returned as a real)</span>
-<a name="l00358"></a>00358 <span class="comment">     * @param[out] s arc seconds.</span>
-<a name="l00359"></a>00359 <span class="comment">     **********************************************************************/</span>
-<a name="l00360"></a><a class="code" href="classGeographicLib_1_1DMS.html#af27df7ef6ac42bf0e6341749b4b96eec">00360</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1DMS.html#af27df7ef6ac42bf0e6341749b4b96eec">Encode</a>(real ang, real& d, real& m, real& s) <span class="keywordflow">throw</span>() {
-<a name="l00361"></a>00361       d = int(ang); ang = 60 * (ang - d);
-<a name="l00362"></a>00362       m = int(ang); s = 60 * (ang - m);
-<a name="l00363"></a>00363     }
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365   };
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00370"></a>00370 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
-<a name="l00371"></a>00371 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00372"></a>00372 <span class="preprocessor"></span>
-<a name="l00373"></a>00373 <span class="preprocessor">#endif  // GEOGRAPHICLIB_DMS_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/EllipticFunction_8cpp.html b/doc/html/EllipticFunction_8cpp.html
deleted file mode 100644
index dc3a8eb..0000000
--- a/doc/html/EllipticFunction_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: EllipticFunction.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">EllipticFunction.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">GeographicLib::EllipticFunction</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="EllipticFunction_8hpp_source.html">GeographicLib/EllipticFunction.hpp</a>></code><br/>
-</div>
-<p><a href="EllipticFunction_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="EllipticFunction_8cpp.html#a7843c8be162380a81bdd1c48d00a475b">GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP</a>   "$Id: 00b30b3d051fce1da7eb0c7e74c1c03854de6ea3 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">GeographicLib::EllipticFunction</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="EllipticFunction_8cpp_source.html">EllipticFunction.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a7843c8be162380a81bdd1c48d00a475b"></a><!-- doxytag: member="EllipticFunction.cpp::GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP" ref="a7843c8be162380a81bdd1c48d00a475b" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP   "$Id: 00b30b3d051fce1da7eb0c7e74c1c03854de6ea3 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="EllipticFunction_8cpp_source.html#l00012">12</a> of file <a class="el" href="EllipticFunction_8cpp_source.html">EllipticFunction.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/EllipticFunction_8cpp_source.html b/doc/html/EllipticFunction_8cpp_source.html
deleted file mode 100644
index 1df701a..0000000
--- a/doc/html/EllipticFunction_8cpp_source.html
+++ /dev/null
@@ -1,294 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: EllipticFunction.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">EllipticFunction.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="EllipticFunction_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file EllipticFunction.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::EllipticFunction class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="EllipticFunction_8hpp.html" title="Header for GeographicLib::EllipticFunction class.">GeographicLib/EllipticFunction.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="EllipticFunction_8cpp.html#a7843c8be162380a81bdd1c48d00a475b">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: 00b30b3d051fce1da7eb0c7e74c1c03854de6ea3 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="EllipticFunction_8cpp.html#a7843c8be162380a81bdd1c48d00a475b">GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="EllipticFunction_8hpp.html#a94cb49e5d48fa1a0399e4303f1ad162a">GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> EllipticFunction::tol_ =
-<a name="l00023"></a>00023     numeric_limits<real>::epsilon() * <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.01);
-<a name="l00024"></a>00024   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> EllipticFunction::tolRF_ = pow(3 * tol_, 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(6));
-<a name="l00025"></a>00025   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> EllipticFunction::tolRD_ =
-<a name="l00026"></a>00026     pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.25) * tol_, 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(6));
-<a name="l00027"></a>00027   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> EllipticFunction::tolRG0_ = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(2.7) * sqrt(tol_);
-<a name="l00028"></a>00028   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> EllipticFunction::tolJAC_ = sqrt(tol_);
-<a name="l00029"></a>00029   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> EllipticFunction::tolJAC1_ = sqrt(6 * tol_);
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031   <span class="comment">/*</span>
-<a name="l00032"></a>00032 <span class="comment">   * Implementation of methods given in</span>
-<a name="l00033"></a>00033 <span class="comment">   *</span>
-<a name="l00034"></a>00034 <span class="comment">   *   B. C. Carlson</span>
-<a name="l00035"></a>00035 <span class="comment">   *   Computation of elliptic integrals</span>
-<a name="l00036"></a>00036 <span class="comment">   *   Numerical Algorithms 10, 13-26 (1995)</span>
-<a name="l00037"></a>00037 <span class="comment">   */</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> EllipticFunction::RF(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z) <span class="keywordflow">throw</span>() {
-<a name="l00040"></a>00040     <span class="comment">// Carlson, eqs 2.2 - 2.7</span>
-<a name="l00041"></a>00041     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00042"></a>00042       a0 = (x + y + z)/3,
-<a name="l00043"></a>00043       an = a0,
-<a name="l00044"></a>00044       q = max(max(abs(a0-x), abs(a0-y)), abs(a0-z)) / tolRF_,
-<a name="l00045"></a>00045       x0 = x,
-<a name="l00046"></a>00046       y0 = y,
-<a name="l00047"></a>00047       z0 = z,
-<a name="l00048"></a>00048       mul = 1;
-<a name="l00049"></a>00049     <span class="keywordflow">while</span> (q >= mul * abs(an)) {
-<a name="l00050"></a>00050       <span class="comment">// Max 6 trips</span>
-<a name="l00051"></a>00051       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ln = sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0);
-<a name="l00052"></a>00052       an = (an + ln)/4;
-<a name="l00053"></a>00053       x0 = (x0 + ln)/4;
-<a name="l00054"></a>00054       y0 = (y0 + ln)/4;
-<a name="l00055"></a>00055       z0 = (z0 + ln)/4;
-<a name="l00056"></a>00056       mul *= 4;
-<a name="l00057"></a>00057     }
-<a name="l00058"></a>00058     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00059"></a>00059       xx = (a0 - x) / (mul * an),
-<a name="l00060"></a>00060       yy = (a0 - y) / (mul * an),
-<a name="l00061"></a>00061       zz = - xx - yy,
-<a name="l00062"></a>00062       e2 = xx * yy - zz * zz,
-<a name="l00063"></a>00063       e3 = xx * yy * zz;
-<a name="l00064"></a>00064     <span class="keywordflow">return</span> (1 - e2 / 10 + e3 / 14 + e2 * e2 / 24 - 3 * e2 * e3 / 44) / sqrt(an);
-<a name="l00065"></a>00065   }
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> EllipticFunction::RD(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z) <span class="keywordflow">throw</span>() {
-<a name="l00068"></a>00068     <span class="comment">// Carlson, eqs 2.28 - 2.34</span>
-<a name="l00069"></a>00069     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00070"></a>00070       a0 = (x + y + 3 * z)/5,
-<a name="l00071"></a>00071       an = a0,
-<a name="l00072"></a>00072       q = max(max(abs(a0-x), abs(a0-y)), abs(a0-z)) / tolRD_,
-<a name="l00073"></a>00073       x0 = x,
-<a name="l00074"></a>00074       y0 = y,
-<a name="l00075"></a>00075       z0 = z,
-<a name="l00076"></a>00076       mul = 1,
-<a name="l00077"></a>00077       s = 0;
-<a name="l00078"></a>00078     <span class="keywordflow">while</span> (q >= mul * abs(an)) {
-<a name="l00079"></a>00079       <span class="comment">// Max 7 trips</span>
-<a name="l00080"></a>00080       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ln = sqrt(x0)*sqrt(y0) +
-<a name="l00081"></a>00081         sqrt(y0)*sqrt(z0) +
-<a name="l00082"></a>00082         sqrt(z0)*sqrt(x0);
-<a name="l00083"></a>00083       s += 1/(mul * sqrt(z0) * (z0 + ln ));
-<a name="l00084"></a>00084       an = (an + ln)/4;
-<a name="l00085"></a>00085       x0 = (x0 + ln)/4;
-<a name="l00086"></a>00086       y0 = (y0 + ln)/4;
-<a name="l00087"></a>00087       z0 = (z0 + ln)/4;
-<a name="l00088"></a>00088       mul *= 4;
-<a name="l00089"></a>00089     }
-<a name="l00090"></a>00090     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00091"></a>00091       xx = (a0 - x) / (mul * an),
-<a name="l00092"></a>00092       yy = (a0 - y) / (mul * an),
-<a name="l00093"></a>00093       zz = -(xx + yy) / 3,
-<a name="l00094"></a>00094       e2 = xx * yy - 6 * zz * zz,
-<a name="l00095"></a>00095       e3 = (3 * xx * yy - 8 * zz * zz)*zz,
-<a name="l00096"></a>00096       e4 = 3 * (xx * yy - zz * zz) * zz * zz,
-<a name="l00097"></a>00097       e5 = xx * yy * zz * zz * zz;
-<a name="l00098"></a>00098     <span class="keywordflow">return</span> (1 - 3 * e2 / 14 + e3 / 6 + 9 * e2 * e2 / 88 - 3 * e4 / 22
-<a name="l00099"></a>00099             - 9 * e2 * e3 / 52 + 3 * e5 / 26) / (mul * an * sqrt(an))
-<a name="l00100"></a>00100       + 3 * s;
-<a name="l00101"></a>00101   }
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> EllipticFunction::RG0(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keywordflow">throw</span>() {
-<a name="l00104"></a>00104     <span class="comment">// Carlson, eqs 2.36 - 2.39</span>
-<a name="l00105"></a>00105     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00106"></a>00106       x0 = sqrt(x),
-<a name="l00107"></a>00107       y0 = sqrt(y),
-<a name="l00108"></a>00108       xn = x0,
-<a name="l00109"></a>00109       yn = y0,
-<a name="l00110"></a>00110       s = 0,
-<a name="l00111"></a>00111       mul = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.25);
-<a name="l00112"></a>00112     <span class="keywordflow">while</span> (abs(xn-yn) >= tolRG0_ * abs(xn)) {
-<a name="l00113"></a>00113       <span class="comment">// Max 4 trips</span>
-<a name="l00114"></a>00114       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = (xn + yn) /2;
-<a name="l00115"></a>00115       yn = sqrt(xn * yn);
-<a name="l00116"></a>00116       xn = t;
-<a name="l00117"></a>00117       mul *= 2;
-<a name="l00118"></a>00118       t = xn - yn;
-<a name="l00119"></a>00119       s += mul * t * t;
-<a name="l00120"></a>00120     }
-<a name="l00121"></a>00121     x0 = (x0 + y0)/2;
-<a name="l00122"></a>00122     <span class="keywordflow">return</span> (x0 * x0 - s) * Math::pi<real>() / (2 * (xn + yn));
-<a name="l00123"></a>00123   }
-<a name="l00124"></a>00124 
-<a name="l00125"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#ada122111b55eb0ab9c7b9fafb0a4b1e6">00125</a>   EllipticFunction::EllipticFunction(real m) <span class="keywordflow">throw</span>()
-<a name="l00126"></a>00126     : _m(m)
-<a name="l00127"></a>00127     , _m1(1 - m)
-<a name="l00128"></a>00128       <span class="comment">// Don't initialize _kc, _ec, _kec since this constructor might be called</span>
-<a name="l00129"></a>00129       <span class="comment">// before the static real constants tolRF_, etc., are initialized.</span>
-<a name="l00130"></a>00130     , _init(<span class="keyword">false</span>)
-<a name="l00131"></a>00131   {}
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133   <span class="keywordtype">bool</span> EllipticFunction::Init() <span class="keyword">const</span> throw() {
-<a name="l00134"></a>00134     <span class="comment">// Complete elliptic integral K(m), Carlson eq. 4.1</span>
-<a name="l00135"></a>00135     _kc = RF(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), _m1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00136"></a>00136     <span class="comment">// Complete elliptic integral E(m), Carlson eq. 4.2</span>
-<a name="l00137"></a>00137     _ec = 2 * RG0(_m1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00138"></a>00138     <span class="comment">// K - E, Carlson eq.4.3</span>
-<a name="l00139"></a>00139     _kec = _m / 3 * RD(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), _m1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00140"></a>00140     <span class="keywordflow">return</span> _init = <span class="keyword">true</span>;
-<a name="l00141"></a>00141   }
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143   <span class="comment">/*</span>
-<a name="l00144"></a>00144 <span class="comment">   * Implementation of methods given in</span>
-<a name="l00145"></a>00145 <span class="comment">   *</span>
-<a name="l00146"></a>00146 <span class="comment">   *   R. Bulirsch</span>
-<a name="l00147"></a>00147 <span class="comment">   *   Numerical Calculation of Elliptic Integrals and Elliptic Functions</span>
-<a name="l00148"></a>00148 <span class="comment">   *   Numericshe Mathematik 7, 78-90 (1965)</span>
-<a name="l00149"></a>00149 <span class="comment">   */</span>
-<a name="l00150"></a>00150 
-<a name="l00151"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#a0b8d63970c4276503d03d4133ee6c321">00151</a>   <span class="keywordtype">void</span> EllipticFunction::sncndn(real x, real& sn, real& cn, real& dn)
-<a name="l00152"></a>00152     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00153"></a>00153     <span class="comment">// Bulirsch's sncndn routine, p 89.</span>
-<a name="l00154"></a>00154     <span class="comment">//</span>
-<a name="l00155"></a>00155     <span class="comment">// Assume _m1 is in [0, 1].  See Bulirsch article for code to treat</span>
-<a name="l00156"></a>00156     <span class="comment">// negative _m1.</span>
-<a name="l00157"></a>00157     <span class="keywordflow">if</span> (_m1 != 0) {
-<a name="l00158"></a>00158       real mc = _m1;
-<a name="l00159"></a>00159       real c;
-<a name="l00160"></a>00160       real m[num_], n[num_];
-<a name="l00161"></a>00161       <span class="keywordtype">unsigned</span> l = 0;
-<a name="l00162"></a>00162       <span class="keywordflow">for</span> (real a = 1; l < num_; ++l) {
-<a name="l00163"></a>00163         <span class="comment">// Max 5 trips</span>
-<a name="l00164"></a>00164         m[l] = a;
-<a name="l00165"></a>00165         n[l] = mc = sqrt(mc);
-<a name="l00166"></a>00166         c = (a + mc) / 2;
-<a name="l00167"></a>00167         <span class="keywordflow">if</span> (!(abs(a - mc) > tolJAC_ * a)) {
-<a name="l00168"></a>00168           ++l;
-<a name="l00169"></a>00169           <span class="keywordflow">break</span>;
-<a name="l00170"></a>00170         }
-<a name="l00171"></a>00171         mc = a * mc;
-<a name="l00172"></a>00172         a = c;
-<a name="l00173"></a>00173       }
-<a name="l00174"></a>00174       x = c * x;
-<a name="l00175"></a>00175       sn = sin(x);
-<a name="l00176"></a>00176       cn = cos(x);
-<a name="l00177"></a>00177       dn = 1;
-<a name="l00178"></a>00178       <span class="keywordflow">if</span> (sn != 0) {
-<a name="l00179"></a>00179         real a = cn / sn;
-<a name="l00180"></a>00180         c = a * c;
-<a name="l00181"></a>00181         <span class="keywordflow">while</span> (l--) {
-<a name="l00182"></a>00182           real b = m[l];
-<a name="l00183"></a>00183           a = c * a;
-<a name="l00184"></a>00184           c = dn * c;
-<a name="l00185"></a>00185           dn = (n[l] + a) / (b + a);
-<a name="l00186"></a>00186           a = c / b;
-<a name="l00187"></a>00187         }
-<a name="l00188"></a>00188         a = 1 / sqrt(c * c + 1);
-<a name="l00189"></a>00189         sn = sn < 0 ? -a : a;
-<a name="l00190"></a>00190         cn = c * sn;
-<a name="l00191"></a>00191       }
-<a name="l00192"></a>00192     } <span class="keywordflow">else</span> {
-<a name="l00193"></a>00193       sn = tanh(x);
-<a name="l00194"></a>00194       dn = cn = 1 / cosh(x);
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196   }
-<a name="l00197"></a>00197 
-<a name="l00198"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#af1b3b2265bca5d2b52c17ca44dabffa8">00198</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real EllipticFunction::E(real sn, real cn, real dn) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00199"></a>00199     real
-<a name="l00200"></a>00200       cn2 = cn * cn, dn2 = dn * dn, sn2 = sn * sn,
-<a name="l00201"></a>00201       <span class="comment">// Carlson, eq. 4.6</span>
-<a name="l00202"></a>00202       ei = abs(sn) * (RF(cn2, dn2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1)) -
-<a name="l00203"></a>00203                       (_m / 3) * sn2 * RD(cn2, dn2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1)));
-<a name="l00204"></a>00204     <span class="comment">// Enforce usual trig-like symmetries</span>
-<a name="l00205"></a>00205     <span class="keywordflow">if</span> (cn < 0) {
-<a name="l00206"></a>00206       ei = 2 * E() - ei;
-<a name="l00207"></a>00207     }
-<a name="l00208"></a>00208     <span class="keywordflow">if</span> (sn < 0)
-<a name="l00209"></a>00209       ei = -ei;
-<a name="l00210"></a>00210     <span class="keywordflow">return</span> ei;
-<a name="l00211"></a>00211   }
-<a name="l00212"></a>00212 
-<a name="l00213"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#a8be312b5da54b01f2976416aa82e7d08">00213</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real EllipticFunction::E(real phi) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00214"></a>00214     real sn = sin(phi);
-<a name="l00215"></a>00215     <span class="keywordflow">return</span> E(sn, cos(phi), sqrt(1 - _m * sn * sn));
-<a name="l00216"></a>00216   }
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/EllipticFunction_8hpp.html b/doc/html/EllipticFunction_8hpp.html
deleted file mode 100644
index 2001ad3..0000000
--- a/doc/html/EllipticFunction_8hpp.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: EllipticFunction.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">EllipticFunction.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">GeographicLib::EllipticFunction</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="EllipticFunction_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Elliptic functions needed for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>.  <a href="classGeographicLib_1_1EllipticFunction.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="EllipticFunction_8hpp.html#a94cb49e5d48fa1a0399e4303f1ad162a">GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP</a>   "$Id: 30ac447643e48afcaf5ab4671fbf2b235008dabe $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">GeographicLib::EllipticFunction</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="EllipticFunction_8hpp_source.html">EllipticFunction.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a94cb49e5d48fa1a0399e4303f1ad162a"></a><!-- doxytag: member="EllipticFunction.hpp::GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP" ref="a94cb49e5d48fa1a0399e4303f1ad162a" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP   "$Id: 30ac447643e48afcaf5ab4671fbf2b235008dabe $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="EllipticFunction_8hpp_source.html#l00011">11</a> of file <a class="el" href="EllipticFunction_8hpp_source.html">EllipticFunction.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/EllipticFunction_8hpp_source.html b/doc/html/EllipticFunction_8hpp_source.html
deleted file mode 100644
index 50b7287..0000000
--- a/doc/html/EllipticFunction_8hpp_source.html
+++ /dev/null
@@ -1,213 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: EllipticFunction.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">EllipticFunction.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="EllipticFunction_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file EllipticFunction.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::EllipticFunction class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP)</span>
-<a name="l00011"></a><a class="code" href="EllipticFunction_8hpp.html#a94cb49e5d48fa1a0399e4303f1ad162a">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 30ac447643e48afcaf5ab4671fbf2b235008dabe $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 
-<a name="l00016"></a>00016 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00017"></a>00017 <span class="comment"></span>
-<a name="l00018"></a>00018 <span class="comment">  /**</span>
-<a name="l00019"></a>00019 <span class="comment">   * \brief Elliptic functions needed for TransverseMercatorExact</span>
-<a name="l00020"></a>00020 <span class="comment">   *</span>
-<a name="l00021"></a>00021 <span class="comment">   * This provides the subset of elliptic functions needed for</span>
-<a name="l00022"></a>00022 <span class="comment">   * TransverseMercatorExact.  For a given ellipsoid, only parameters</span>
-<a name="l00023"></a>00023 <span class="comment">   * <i>e</i><sup>2</sup> and 1 - <i>e</i><sup>2</sup> are needed.  This class</span>
-<a name="l00024"></a>00024 <span class="comment">   * taken the parameter as a constructor parameters and caches the values of</span>
-<a name="l00025"></a>00025 <span class="comment">   * the required complete integrals.  A method is provided for Jacobi elliptic</span>
-<a name="l00026"></a>00026 <span class="comment">   * functions and for the incomplete elliptic integral of the second kind in</span>
-<a name="l00027"></a>00027 <span class="comment">   * terms of the amplitude.</span>
-<a name="l00028"></a>00028 <span class="comment">   *</span>
-<a name="l00029"></a>00029 <span class="comment">   * The computation of the elliptic integrals uses the algorithms given in</span>
-<a name="l00030"></a>00030 <span class="comment">   * - B. C. Carlson,</span>
-<a name="l00031"></a>00031 <span class="comment">   *   <a href="http://dx.doi.org/10.1007/BF02198293"> Computation of elliptic</span>
-<a name="l00032"></a>00032 <span class="comment">   *   integrals</a>, Numerical Algorithms 10, 13&ndash;26 (1995).</span>
-<a name="l00033"></a>00033 <span class="comment">   * .</span>
-<a name="l00034"></a>00034 <span class="comment">   * The computation of the Jacobi elliptic functions uses the algorithm given</span>
-<a name="l00035"></a>00035 <span class="comment">   * in</span>
-<a name="l00036"></a>00036 <span class="comment">   * - R. Bulirsch,</span>
-<a name="l00037"></a>00037 <span class="comment">   *   <a href="http://dx.doi.org/10.1007/BF01397975"> Numerical Calculation of</span>
-<a name="l00038"></a>00038 <span class="comment">   *   Elliptic Integrals and Elliptic Functions</a>, Numericshe Mathematik 7,</span>
-<a name="l00039"></a>00039 <span class="comment">   *   78&ndash;90 (1965).</span>
-<a name="l00040"></a>00040 <span class="comment">   * .</span>
-<a name="l00041"></a>00041 <span class="comment">   * The notation follows Abramowitz and Stegun, Chapters 16 and 17.</span>
-<a name="l00042"></a>00042 <span class="comment">   *</span>
-<a name="l00043"></a>00043 <span class="comment">   * Example of use:</span>
-<a name="l00044"></a>00044 <span class="comment">   * \include example-EllipticFunction.cpp</span>
-<a name="l00045"></a>00045 <span class="comment">   **********************************************************************/</span>
-<a name="l00046"></a>00046   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> EllipticFunction {
-<a name="l00047"></a>00047   <span class="keyword">private</span>:
-<a name="l00048"></a>00048     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00049"></a>00049     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tol_;
-<a name="l00050"></a>00050     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tolRF_;
-<a name="l00051"></a>00051     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tolRD_;
-<a name="l00052"></a>00052     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tolRG0_;
-<a name="l00053"></a>00053     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tolJAC_;
-<a name="l00054"></a>00054     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tolJAC1_;
-<a name="l00055"></a>00055     <span class="keyword">enum</span> { num_ = 10 }; <span class="comment">// Max depth required for sncndn.  Probably 5 is enough.</span>
-<a name="l00056"></a>00056     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> RF(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z) <span class="keywordflow">throw</span>();
-<a name="l00057"></a>00057     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> RD(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z) <span class="keywordflow">throw</span>();
-<a name="l00058"></a>00058     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> RG0(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keywordflow">throw</span>();
-<a name="l00059"></a>00059     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _m, _m1;
-<a name="l00060"></a>00060     <span class="keyword">mutable</span> <span class="keywordtype">bool</span> _init;
-<a name="l00061"></a>00061     <span class="keyword">mutable</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _kc, _ec, _kec;
-<a name="l00062"></a>00062     <span class="keywordtype">bool</span> Init() <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00063"></a>00063   <span class="keyword">public</span>:
-<a name="l00064"></a>00064 <span class="comment"></span>
-<a name="l00065"></a>00065 <span class="comment">    /**</span>
-<a name="l00066"></a>00066 <span class="comment">     * Constructor.</span>
-<a name="l00067"></a>00067 <span class="comment">     *</span>
-<a name="l00068"></a>00068 <span class="comment">     * @param[in] m the parameter which must lie in [0, 1].  (No checking</span>
-<a name="l00069"></a>00069 <span class="comment">     *   is done.)</span>
-<a name="l00070"></a>00070 <span class="comment">     **********************************************************************/</span>
-<a name="l00071"></a>00071     <span class="keyword">explicit</span> EllipticFunction(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> m) <span class="keywordflow">throw</span>();
-<a name="l00072"></a>00072 <span class="comment"></span>
-<a name="l00073"></a>00073 <span class="comment">    /**</span>
-<a name="l00074"></a>00074 <span class="comment">     * @return the parameter \e m.</span>
-<a name="l00075"></a>00075 <span class="comment">     **********************************************************************/</span>
-<a name="l00076"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#aba29c348874db7880ab7b1065f03ff7c">00076</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1EllipticFunction.html#aba29c348874db7880ab7b1065f03ff7c">m</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _m; }
-<a name="l00077"></a>00077 <span class="comment"></span>
-<a name="l00078"></a>00078 <span class="comment">    /**</span>
-<a name="l00079"></a>00079 <span class="comment">     * @return the complementary parameter \e m' = (1 - \e m).</span>
-<a name="l00080"></a>00080 <span class="comment">     **********************************************************************/</span>
-<a name="l00081"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#ad1fbe801f6731285462d35d874a149ba">00081</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1EllipticFunction.html#ad1fbe801f6731285462d35d874a149ba">m1</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _m1; }
-<a name="l00082"></a>00082 <span class="comment"></span>
-<a name="l00083"></a>00083 <span class="comment">    /**</span>
-<a name="l00084"></a>00084 <span class="comment">     * @return the complete integral of first kind, \e K(\e m).</span>
-<a name="l00085"></a>00085 <span class="comment">     **********************************************************************/</span>
-<a name="l00086"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#a6c6c8029d93946b32184ee964525938c">00086</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1EllipticFunction.html#a6c6c8029d93946b32184ee964525938c">K</a>() <span class="keyword">const</span> throw() { _init || Init(); <span class="keywordflow">return</span> _kc; }
-<a name="l00087"></a>00087 <span class="comment"></span>
-<a name="l00088"></a>00088 <span class="comment">    /**</span>
-<a name="l00089"></a>00089 <span class="comment">     * @return the complete integral of second kind, \e E(\e m).</span>
-<a name="l00090"></a>00090 <span class="comment">     **********************************************************************/</span>
-<a name="l00091"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">00091</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">E</a>() <span class="keyword">const</span> throw() { _init || Init(); <span class="keywordflow">return</span> _ec; }
-<a name="l00092"></a>00092 <span class="comment"></span>
-<a name="l00093"></a>00093 <span class="comment">    /**</span>
-<a name="l00094"></a>00094 <span class="comment">     * @return the difference \e K(\e m) - \e E(\e m) (which can be computed</span>
-<a name="l00095"></a>00095 <span class="comment">     *   directly).</span>
-<a name="l00096"></a>00096 <span class="comment">     **********************************************************************/</span>
-<a name="l00097"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#a12bcdf2c3fc7bcb165318822171328f7">00097</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1EllipticFunction.html#a12bcdf2c3fc7bcb165318822171328f7">KE</a>() <span class="keyword">const</span> throw() { _init || Init(); <span class="keywordflow">return</span> _kec; }
-<a name="l00098"></a>00098 <span class="comment"></span>
-<a name="l00099"></a>00099 <span class="comment">    /**</span>
-<a name="l00100"></a>00100 <span class="comment">     * The Jacobi elliptic functions.</span>
-<a name="l00101"></a>00101 <span class="comment">     *</span>
-<a name="l00102"></a>00102 <span class="comment">     * @param[in] x the argument.</span>
-<a name="l00103"></a>00103 <span class="comment">     * @param[out] sn sn(<i>x</i>|<i>m</i>).</span>
-<a name="l00104"></a>00104 <span class="comment">     * @param[out] cn cn(<i>x</i>|<i>m</i>).</span>
-<a name="l00105"></a>00105 <span class="comment">     * @param[out] dn dn(<i>x</i>|<i>m</i>).</span>
-<a name="l00106"></a>00106 <span class="comment">     **********************************************************************/</span>
-<a name="l00107"></a>00107     <span class="keywordtype">void</span> sncndn(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& sn, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& cn, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& dn) <span class="keyword">const</span> <span class="keywordflow">t [...]
-<a name="l00108"></a>00108 <span class="comment"></span>
-<a name="l00109"></a>00109 <span class="comment">    /**</span>
-<a name="l00110"></a>00110 <span class="comment">     * The incomplete integral of the second kind.</span>
-<a name="l00111"></a>00111 <span class="comment">     *</span>
-<a name="l00112"></a>00112 <span class="comment">     * @param[in] phi</span>
-<a name="l00113"></a>00113 <span class="comment">     * @return int sqrt(1 -  \e m sin<sup>2</sup>(\e phi)) \e dphi.</span>
-<a name="l00114"></a>00114 <span class="comment">     **********************************************************************/</span>
-<a name="l00115"></a>00115     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> E(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> phi) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00116"></a>00116 <span class="comment"></span>
-<a name="l00117"></a>00117 <span class="comment">    /**</span>
-<a name="l00118"></a>00118 <span class="comment">     * The incomplete integral of the second kind in terms of Jacobi elliptic</span>
-<a name="l00119"></a>00119 <span class="comment">     * functions</span>
-<a name="l00120"></a>00120 <span class="comment">     *</span>
-<a name="l00121"></a>00121 <span class="comment">     * @param[in] sn</span>
-<a name="l00122"></a>00122 <span class="comment">     * @param[in] cn</span>
-<a name="l00123"></a>00123 <span class="comment">     * @param[in] dn</span>
-<a name="l00124"></a>00124 <span class="comment">     * @return int dn(\e w)<sup>2</sup> \e dw (A+S 17.2.10).</span>
-<a name="l00125"></a>00125 <span class="comment">     *</span>
-<a name="l00126"></a>00126 <span class="comment">     * Instead of specifying the amplitude \e phi, we provide \e sn = sin(\e</span>
-<a name="l00127"></a>00127 <span class="comment">     * phi), \e cn = cos(\e phi), \e dn = sqrt(1 - \e m sin<sup>2</sup>(\e</span>
-<a name="l00128"></a>00128 <span class="comment">     * phi)).</span>
-<a name="l00129"></a>00129 <span class="comment">     **********************************************************************/</span>
-<a name="l00130"></a>00130     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> E(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sn, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cn, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dn) <s [...]
-<a name="l00131"></a>00131   };
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136 <span class="preprocessor">#endif  // GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeoConvert.1.html b/doc/html/GeoConvert.1.html
deleted file mode 100644
index ad7f237..0000000
--- a/doc/html/GeoConvert.1.html
+++ /dev/null
@@ -1,405 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>GeoConvert -- convert geographic coordinates</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#precision">PRECISION</a></li>
-	<li><a href="#mgrs">MGRS</a></li>
-	<li><a href="#zone">ZONE</a></li>
-	<li><a href="#quoting">QUOTING</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#abbreviations">ABBREVIATIONS</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>GeoConvert -- convert geographic coordinates</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>GeoConvert</strong> [ <strong>-g</strong> | <strong>-d</strong> | <strong>-:</strong> | <strong>-u</strong> | <strong>-m</strong> | <strong>-c</strong> ]
-[ <strong>-p</strong> <em>prec</em> ] [ <strong>-z</strong> <em>zone</em> | <strong>-s</strong> | <strong>-t</strong> ] [ <strong>-n</strong> ] [ <strong>-w</strong> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p><strong>GeoConvert</strong> reads from standard input interpreting each line as a
-geographic coordinate and prints the coordinate in the format specified
-by the options on standard output.  The input is interpreted in one of
-three different ways depending on how many space or comma delimited
-tokens there are on the line.  The options <strong>-g</strong>, <strong>-d</strong>, <strong>-u</strong>, and <strong>-m</strong>
-govern the format of output.  In all cases, the WGS84 model of the earth
-is used (<em>a</em> = 6378137 m, <em>f</em> = 1/298.257223563).</p>
-<dl>
-<dt><strong><a name="geographic" class="item"><strong>geographic</strong></a></strong></dt>
-
-<dd>
-<p>2 tokens (output options <strong>-g</strong>, <strong>-d</strong>, or <strong>-:</strong>) given as <em>latitude</em>
-<em>longitude</em> using decimal degrees or degrees minutes seconds.  d, ',
-and " are used to denote degrees, minutes, and seconds, with the least
-significant designator optional.  (See <a href="#quoting">QUOTING</a> for how to
-quote the characters ' and " when entering coordinates on the command
-line.)  Various unicode characters (encoded with UTF-8) may also be used
-to denote degrees, minutes, and seconds, e.g., the degree, prime, and
-double prime symbols.  Alternatively, : (colon) may be used to separate
-the various components.  Latitude is given first (unless the <strong>-w</strong>
-option is given); however, on input, either may be given first by
-appending or prepending <em>N</em> or <em>S</em> to the latitude and <em>E</em> or <em>W</em> to
-the longitude.  For example, the following are all equivalent</p>
-<pre>
-    33.3 44.4
-    E44.4 N33.3
-    33d18'N 44d24'E
-    44d24 33d18N
-    33:18 44:24</pre>
-</dd>
-<dt><strong><a name="utm_ups" class="item"><strong>UTM/UPS</strong></a></strong></dt>
-
-<dd>
-<p>3 tokens (output option <strong>-u</strong>) given as <em>zone</em>+<em>hemisphere</em> <em>easting</em>
-<em>northing</em> or <em>easting</em> <em>northing</em> <em>zone</em>+<em>hemisphere</em>, where
-<em>hemisphere</em> is either <em>N</em> or <em>S</em>.  The <em>zone</em> is absent for a UPS
-specification.  For example,</p>
-<pre>
-    38N 444140.54 3684706.36
-    444140.54 3684706.36 38N
-    S 2173854.98 2985980.58
-    2173854.98 2985980.58 S</pre>
-</dd>
-<dt><strong><a name="mrgs" class="item"><strong>MRGS</strong></a></strong></dt>
-
-<dd>
-<p>1 token (output option <strong>-m</strong>) is used to specify the center of an MGRS
-grid square.  For example,</p>
-<pre>
-    38SMB4484
-    38SMB44140847064</pre>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="g" class="item"><strong>-g</strong></a></strong></dt>
-
-<dd>
-<p>output latitude and longitude using decimal degrees.  Default output mode.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
-
-<dd>
-<p>output latitude and longitude using degrees, minutes, and seconds (DMS).</p>
-</dd>
-<dt><strong><a name="__" class="item"><strong>-:</strong></a></strong></dt>
-
-<dd>
-<p>like <strong>-d</strong>, except use : as a separator instead of the d, ', and "
-delimiters.</p>
-</dd>
-<dt><strong><a name="u" class="item"><strong>-u</strong></a></strong></dt>
-
-<dd>
-<p>output UTM or UPS.</p>
-</dd>
-<dt><strong><a name="m" class="item"><strong>-m</strong></a></strong></dt>
-
-<dd>
-<p>output MGRS.</p>
-</dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
-
-<dd>
-<p>output meridian convergence and scale for the corresponding UTM or
-UPS projection.  Convergence is the bearing of grid north given as
-degrees clockwise from true north.</p>
-</dd>
-<dt><strong><a name="p" class="item"><strong>-p</strong></a></strong></dt>
-
-<dd>
-<p>set the output precision to <em>prec</em> (default 0); <em>prec</em> is the
-precision relative to 1 m.  See <a href="#precision">PRECISION</a>.</p>
-</dd>
-<dt><strong><a name="z" class="item"><strong>-z</strong></a></strong></dt>
-
-<dd>
-<p>set the zone to <em>zone</em> for output.  Use either 0 < <em>zone</em> <= 60
-for a UTM zone or <em>zone</em> = 0 for UPS.  Alternatively use a
-<em>zone</em>+<em>hemisphere</em> designation (<em>hemisphere</em> is ignored), e.g., 38N.
-See <a href="#zone">ZONE</a>.</p>
-</dd>
-<dt><strong><a name="s" class="item"><strong>-s</strong></a></strong></dt>
-
-<dd>
-<p>use the standard UPS and UTM zones.</p>
-</dd>
-<dt><strong><a name="t" class="item"><strong>-t</strong></a></strong></dt>
-
-<dd>
-<p>similar to <strong>-s</strong> but forces UPS regions to the closest UTM zone.</p>
-</dd>
-<dt><strong><a name="n" class="item"><strong>-n</strong></a></strong></dt>
-
-<dd>
-<p>on input, MGRS coordinates refer to the south-west corner of the MGRS
-square instead of the center; see <a href="#mgrs">MGRS</a>.</p>
-</dd>
-<dt><strong><a name="w" class="item"><strong>-w</strong></a></strong></dt>
-
-<dd>
-<p>on input and output, longitude precedes latitude (except that on input
-this can be overridden by a hemisphere designator, <em>N</em>, <em>S</em>,<em>E</em>,
-<em>W</em>).</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="precision">PRECISION</a></h1>
-<p><em>prec</em> gives precision of the output with <em>prec</em> = 0 giving 1 m
-precision, <em>prec</em> = 3 giving 1 mm precision, etc.  <em>prec</em> is the number
-of digits after the decimal point for UTM/UPS.  The number of digits per
-coordinate for MGRS is 5 + <em>prec</em>.  For decimal degrees, the number of
-digits after the decimal point is 5 + <em>prec</em>.  For DMS (degree, minute,
-seconds) output, the number of digits after the decimal point in the
-seconds components is 1 + <em>prec</em>; if this is negative then use minutes
-(<em>prec</em> = -2 or -3) or degrees (<em>prec</em> <= -4) as the least significant
-component.  Print convergence, resp. scale, with 5 + <em>prec</em>, resp. 7 +
-<em>prec</em>, digits after the decimal point.  The minimum value of <em>prec</em> is
--5 and the maximum is 9 for UTM/UPS, 9 for decimal degrees, 10 for DMS,
-6 for MGRS, and 8 for convergence and scale.</p>
-<p>
-</p>
-<hr />
-<h1><a name="mgrs">MGRS</a></h1>
-<p>MGRS coordinates represent a square patch of the earth, thus <code>38SMB4488</code>
-is in zone <code>38N</code> with 444km <= <em>easting</em> < 445km and 3688km <=
-<em>northing</em> < 3689km.  Consistent with this representation,
-coordinates are <em>truncated</em> (instead of <em>rounded</em>) to the requested
-precision.  Similarly, on input an MGRS coordinate represents the
-<em>center</em> of the square (<code>38N 444500 3688500</code> in the example above).
-However, if the <strong>-n</strong> option is given then the south-west corner of the
-square is returned instead (<code>38N 444000 3688000</code> in the example above).</p>
-<p>
-</p>
-<hr />
-<h1><a name="zone">ZONE</a></h1>
-<p>If the input is <strong>geographic</strong>, <strong>GeoConvert</strong> uses the standard rules of
-selecting UTM vs UPS and for assigning the UTM zone (with the Norway and
-Svalbard exceptions).  If the input is <strong>UTM/UPS</strong>, or <strong>MGRS</strong>, then the
-choice between UTM and UPS and the UTM zone mirrors the input.  The <strong>-z</strong>
-<em>zone</em>, <strong>-s</strong>, <strong>-t</strong> options allow these rules to be overridden with
-<em>zone</em> = 0 being used to indicate UPS.  For example, the point</p>
-<pre>
-   79.9S 6.1E</pre>
-<p>corresponds to possible MGRS coordinates</p>
-<pre>
-   32CMS4324728161 (standard UTM zone = 32)
-   31CEM6066227959 (neighboring UTM zone = 31)
-     BBZ1945517770 (neighboring UPS zone)</pre>
-<p>then</p>
-<pre>
-   echo 79.9S 6.1E      | GeoConvert -p -3 -m       => 32CMS4328
-   echo 31CEM6066227959 | GeoConvert -p -3 -m       => 31CEM6027
-   echo 31CEM6066227959 | GeoConvert -p -3 -m -s    => 32CMS4328
-   echo 31CEM6066227959 | GeoConvert -p -3 -m -z 0  =>   BBZ1917</pre>
-<p><strong>NOTE</strong>: the letter in the zone specification for UTM is a hemisphere
-designator <em>N</em> or <em>S</em> and <em>not</em> an MGRS latitude band letter.
-Convert the MGRS latitude band letter to a hemisphere as follows:
-replace <em>C</em> thru <em>M</em> by <em>S</em>; replace <em>N</em> thru <em>X</em> by <em>N</em>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="quoting">QUOTING</a></h1>
-<p>Unfortunately the characters ' and " have special meanings in many
-shells and have to be entered with care.</p>
-<dl>
-<dt><strong><a name="shells" class="item">Unix shells (sh, bash, tsch)</a></strong></dt>
-
-<dd>
-<p>The special characters can be quoted by preceding them with a \
-(backslash).  Alternatively you can quote a ' with a pair of "s.  The
-two alternatives are illustrated by</p>
-<pre>
-   echo 30d30\'30\" "30d30'30" | GeoConvert -d -p -1
-   => 30d30'30"N 030d30'30"E</pre>
-<p>Alternatively use colon separators, e.g., 30:30:30, which need no
-quoting.</p>
-</dd>
-<dt><strong><a name="shell" class="item">Windows command shell (cmd)</a></strong></dt>
-
-<dd>
-<p>The ' character needs no quoting and the " character can be quoted by a
-^.  However this quoting is usually unnecessary because the trailing
-designator can be omitted.  Thus</p>
-<pre>
-   echo 30d30'30^" 30d30'30 | GeoConvert -d -p -1
-   => 30d30'30"N 030d30'30"E</pre>
-<p>Alternatively use colon separators, e.g., 30:30:30, which need no
-quoting.</p>
-</dd>
-<dt><strong><a name="input_from_a_file" class="item">Input from a file</a></strong></dt>
-
-<dd>
-<p>No quoting need be done if the input from a file.  Thus each line of the
-file <code>input.txt</code> should just contain the plain coordinates.</p>
-<pre>
-  GeoConvert -d -p -1 < input.txt</pre>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 38SMB4488 | GeoConvert         => 33.33424 44.40363
-   echo 38SMB4488 | GeoConvert -: -p 1 => 33:20:03.25N 044:2413.06E
-   echo 38SMB4488 | GeoConvert -u      => 38N 444500 3688500
-   echo E44d24 N33d20 | GeoConvert -m -p -3 => 38SMB4488</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>GeoConvert</strong> to return an exit code
-of 1.  However, an error does not cause <strong>GeoConvert</strong> to terminate;
-following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="abbreviations">ABBREVIATIONS</a></h1>
-<dl>
-<dt><strong><a name="utm" class="item"><strong>UTM</strong></a></strong></dt>
-
-<dd>
-<p>Universal Transverse Mercator,
-<a href="http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system">http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system</a>.</p>
-</dd>
-<dt><strong><a name="ups" class="item"><strong>UPS</strong></a></strong></dt>
-
-<dd>
-<p>Universal Polar Stereographic,
-<a href="http://en.wikipedia.org/wiki/Universal_Polar_Stereographic">http://en.wikipedia.org/wiki/Universal_Polar_Stereographic</a>.</p>
-</dd>
-<dt><strong><a name="mgrs" class="item"><strong>MGRS</strong></a></strong></dt>
-
-<dd>
-<p>Military Grid Reference System,
-<a href="http://en.wikipedia.org/wiki/Military_grid_reference_system">http://en.wikipedia.org/wiki/Military_grid_reference_system</a>.</p>
-</dd>
-<dt><strong><a name="wgs84" class="item"><strong>WGS84</strong></a></strong></dt>
-
-<dd>
-<p>World Geodetic System 1984,
-<a href="http://en.wikipedia.org/wiki/WGS84">http://en.wikipedia.org/wiki/WGS84</a>.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The algorithms for the transverse Mercator projection are described in
-C. F. F. Karney, <em>Transverse Mercator with an accuracy of a few
-nanometers</em>, J. Geod <strong>85</strong>(8), 475-485 (Aug. 2011); DOI
-<a href="http://dx.doi.org/10.1007/s00190-011-0445-3">http://dx.doi.org/10.1007/s00190-011-0445-3</a>; preprint
-<a href="http://arxiv.org/abs/1002.1417">http://arxiv.org/abs/1002.1417</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>GeoConvert</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>GeoConvert</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-01.</p>
-
-</body>
-
-</html>
diff --git a/doc/html/GeoConvert_8cpp.html b/doc/html/GeoConvert_8cpp.html
deleted file mode 100644
index e54c2f9..0000000
--- a/doc/html/GeoConvert_8cpp.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeoConvert.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeoConvert.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for geographic coordinate conversions.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="GeoCoords_8hpp_source.html">GeographicLib/GeoCoords.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include "GeoConvert.usage"</code><br/>
-</div>
-<p><a href="GeoConvert_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="GeoConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for geographic coordinate conversions. </p>
-<p>Copyright (c) Charles Karney (2008-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o GeoConvert \ <a class="el" href="GeoConvert_8cpp.html" title="Command line utility for geographic coordinate conversions.">GeoConvert.cpp</a> \ ../src/DMS.cpp \ ../src/GeoCoords.cpp \ ../src/MGRS.cpp \ ../src/PolarStereographic.cpp \ ../src/TransverseMercator.cpp \ ../src/UTMUPS.cpp</p>
-<p>See the <a href="GeoConvert.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="GeoConvert_8cpp_source.html">GeoConvert.cpp</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="GeoConvert.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GeoConvert_8cpp_source.html#l00034">34</a> of file <a class="el" href="GeoConvert_8cpp_source.html">GeoConvert.cpp</a>.</p>
-
-<p>References <a class="el" href="UTMUPS_8cpp_source.html#l00186">GeographicLib::UTMUPS::DecodeZone()</a>, <a class="el" href="UTMUPS_8hpp_source.html#l00128">GeographicLib::UTMUPS::MINZONE</a>, and <a class="el" href="UTMUPS_8hpp_source.html#l00144">GeographicLib::UTMUPS::MAXZONE</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeoConvert_8cpp_source.html b/doc/html/GeoConvert_8cpp_source.html
deleted file mode 100644
index 0d3aaab..0000000
--- a/doc/html/GeoConvert_8cpp_source.html
+++ /dev/null
@@ -1,300 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeoConvert.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeoConvert.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GeoConvert_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GeoConvert.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for geographic coordinate conversions</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o GeoConvert \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       GeoConvert.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/GeoCoords.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/MGRS.cpp \</span>
-<a name="l00015"></a>00015 <span class="comment"> *       ../src/PolarStereographic.cpp \</span>
-<a name="l00016"></a>00016 <span class="comment"> *       ../src/TransverseMercator.cpp \</span>
-<a name="l00017"></a>00017 <span class="comment"> *       ../src/UTMUPS.cpp</span>
-<a name="l00018"></a>00018 <span class="comment"> *</span>
-<a name="l00019"></a>00019 <span class="comment"> * See the <a href="GeoConvert.1.html">man page</a> for usage</span>
-<a name="l00020"></a>00020 <span class="comment"> * information.</span>
-<a name="l00021"></a>00021 <span class="comment"> **********************************************************************/</span>
-<a name="l00022"></a>00022 
-<a name="l00023"></a>00023 <span class="preprocessor">#include <iostream></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <sstream></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <string></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <sstream></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <fstream></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <<a class="code" href="GeoCoords_8hpp.html" title="Header for GeographicLib::GeoCoords class.">GeographicLib/GeoCoords.hpp</a>></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#include "GeoConvert.usage"</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a><a class="code" href="GeoConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00034</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00035"></a>00035   <span class="keywordflow">try</span> {
-<a name="l00036"></a>00036     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00038"></a>00038     <span class="keyword">enum</span> { GEOGRAPHIC, <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>, <a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>, <a class="code" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a>, CONVERGENCE };
-<a name="l00039"></a>00039     <span class="keywordtype">int</span> outputmode = GEOGRAPHIC;
-<a name="l00040"></a>00040     <span class="keywordtype">int</span> prec = 0;
-<a name="l00041"></a>00041     <span class="keywordtype">int</span> zone = <a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>::MATCH;
-<a name="l00042"></a>00042     <span class="keywordtype">bool</span> centerp = <span class="keyword">true</span>, swaplatlong = <span class="keyword">false</span>;
-<a name="l00043"></a>00043     std::string istring, ifile, ofile, cdelim;
-<a name="l00044"></a>00044     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>, dmssep = char(0);
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00047"></a>00047       std::string arg(argv[m]);
-<a name="l00048"></a>00048       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-g"</span>)
-<a name="l00049"></a>00049         outputmode = GEOGRAPHIC;
-<a name="l00050"></a>00050       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-d"</span>) {
-<a name="l00051"></a>00051         outputmode = <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>;
-<a name="l00052"></a>00052         dmssep = <span class="charliteral">'\0'</span>;
-<a name="l00053"></a>00053       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-:"</span>) {
-<a name="l00054"></a>00054         outputmode = <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>;
-<a name="l00055"></a>00055         dmssep = <span class="charliteral">':'</span>;
-<a name="l00056"></a>00056       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-u"</span>)
-<a name="l00057"></a>00057         outputmode = <a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>;
-<a name="l00058"></a>00058       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-m"</span>)
-<a name="l00059"></a>00059         outputmode = <a class="code" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a>;
-<a name="l00060"></a>00060       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-c"</span>)
-<a name="l00061"></a>00061         outputmode = CONVERGENCE;
-<a name="l00062"></a>00062       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-n"</span>)
-<a name="l00063"></a>00063         centerp = <span class="keyword">false</span>;
-<a name="l00064"></a>00064       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-w"</span>)
-<a name="l00065"></a>00065         swaplatlong = <span class="keyword">true</span>;
-<a name="l00066"></a>00066       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-p"</span>) {
-<a name="l00067"></a>00067         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00068"></a>00068         <span class="keywordflow">try</span> {
-<a name="l00069"></a>00069           prec = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<int>(std::string(argv[m]));
-<a name="l00070"></a>00070         }
-<a name="l00071"></a>00071         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&) {
-<a name="l00072"></a>00072           std::cerr << <span class="stringliteral">"Precision "</span> << argv[m] << <span class="stringliteral">" is not a number\n"</span>;
-<a name="l00073"></a>00073           <span class="keywordflow">return</span> 1;
-<a name="l00074"></a>00074         }
-<a name="l00075"></a>00075       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-z"</span>) {
-<a name="l00076"></a>00076         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00077"></a>00077         std::string zonestr(argv[m]);
-<a name="l00078"></a>00078         <span class="keywordflow">try</span> {
-<a name="l00079"></a>00079           <span class="keywordtype">bool</span> northp;
-<a name="l00080"></a>00080           <a class="code" href="classGeographicLib_1_1UTMUPS.html#ad74d52d7ebeff195019745f791f30562">UTMUPS::DecodeZone</a>(zonestr, zone, northp);
-<a name="l00081"></a>00081         }
-<a name="l00082"></a>00082         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&) {
-<a name="l00083"></a>00083           std::istringstream str(zonestr);
-<a name="l00084"></a>00084           <span class="keywordtype">char</span> c;
-<a name="l00085"></a>00085           <span class="keywordflow">if</span> (!(str >> zone) || (str >> c)) {
-<a name="l00086"></a>00086             std::cerr << <span class="stringliteral">"Zone "</span> << zonestr
-<a name="l00087"></a>00087                       << <span class="stringliteral">" is not a number or zone+hemisphere\n"</span>;
-<a name="l00088"></a>00088             <span class="keywordflow">return</span> 1;
-<a name="l00089"></a>00089           }
-<a name="l00090"></a>00090           <span class="keywordflow">if</span> (!(zone >= <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1">UTMUPS::MINZONE</a> && zone <= <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a">UTMUPS::MAXZONE</a>)) {
-<a name="l00091"></a>00091             std::cerr << <span class="stringliteral">"Zone "</span> << zone << <span class="stringliteral">" not in [0, 60]\n"</span>;
-<a name="l00092"></a>00092             <span class="keywordflow">return</span> 1;
-<a name="l00093"></a>00093           }
-<a name="l00094"></a>00094         }
-<a name="l00095"></a>00095       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-s"</span>)
-<a name="l00096"></a>00096         zone = <a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>::STANDARD;
-<a name="l00097"></a>00097       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-t"</span>)
-<a name="l00098"></a>00098         zone = <a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>::UTM;
-<a name="l00099"></a>00099       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00100"></a>00100         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00101"></a>00101         istring = argv[m];
-<a name="l00102"></a>00102       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00103"></a>00103         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00104"></a>00104         ifile = argv[m];
-<a name="l00105"></a>00105       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00106"></a>00106         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00107"></a>00107         ofile = argv[m];
-<a name="l00108"></a>00108       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00109"></a>00109         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00110"></a>00110         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00111"></a>00111           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00112"></a>00112           <span class="keywordflow">return</span> 1;
-<a name="l00113"></a>00113         }
-<a name="l00114"></a>00114         lsep = argv[m][0];
-<a name="l00115"></a>00115       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00116"></a>00116         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00117"></a>00117         cdelim = argv[m];
-<a name="l00118"></a>00118       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00119"></a>00119         std::cout
-<a name="l00120"></a>00120           << argv[0]
-<a name="l00121"></a>00121           << <span class="stringliteral">": $Id: e39b9974b58d123fd979b1c3c086ae3ccccba72d $\n"</span>
-<a name="l00122"></a>00122           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00123"></a>00123         <span class="keywordflow">return</span> 0;
-<a name="l00124"></a>00124       } <span class="keywordflow">else</span>
-<a name="l00125"></a>00125         <span class="keywordflow">return</span> usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00126"></a>00126     }
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00129"></a>00129       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00130"></a>00130       <span class="keywordflow">return</span> 1;
-<a name="l00131"></a>00131     }
-<a name="l00132"></a>00132     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00133"></a>00133     std::ifstream infile;
-<a name="l00134"></a>00134     std::istringstream instring;
-<a name="l00135"></a>00135     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00136"></a>00136       infile.open(ifile.c_str());
-<a name="l00137"></a>00137       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00138"></a>00138         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00139"></a>00139         <span class="keywordflow">return</span> 1;
-<a name="l00140"></a>00140       }
-<a name="l00141"></a>00141     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00142"></a>00142       std::string::size_type m = 0;
-<a name="l00143"></a>00143       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00144"></a>00144         m = istring.find(lsep, m);
-<a name="l00145"></a>00145         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00146"></a>00146           <span class="keywordflow">break</span>;
-<a name="l00147"></a>00147         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00148"></a>00148       }
-<a name="l00149"></a>00149       instring.str(istring);
-<a name="l00150"></a>00150     }
-<a name="l00151"></a>00151     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00152"></a>00152       (!istring.empty() ? &instring : &std::cin);
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     std::ofstream outfile;
-<a name="l00155"></a>00155     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00156"></a>00156     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00157"></a>00157       outfile.open(ofile.c_str());
-<a name="l00158"></a>00158       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00159"></a>00159         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00160"></a>00160         <span class="keywordflow">return</span> 1;
-<a name="l00161"></a>00161       }
-<a name="l00162"></a>00162     }
-<a name="l00163"></a>00163     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     <a class="code" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeoCoords</a> p;
-<a name="l00166"></a>00166     std::string s;
-<a name="l00167"></a>00167     std::string os;
-<a name="l00168"></a>00168     <span class="keywordtype">int</span> retval = 0;
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170     <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00171"></a>00171       std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00172"></a>00172       <span class="keywordflow">try</span> {
-<a name="l00173"></a>00173         <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00174"></a>00174           std::string::size_type m = s.find(cdelim);
-<a name="l00175"></a>00175           <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00176"></a>00176             eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00177"></a>00177             s = s.substr(0, m);
-<a name="l00178"></a>00178           }
-<a name="l00179"></a>00179         }
-<a name="l00180"></a>00180         p.Reset(s, centerp, swaplatlong);
-<a name="l00181"></a>00181         p.SetAltZone(zone);
-<a name="l00182"></a>00182         <span class="keywordflow">switch</span> (outputmode) {
-<a name="l00183"></a>00183         <span class="keywordflow">case</span> GEOGRAPHIC:
-<a name="l00184"></a>00184           os = p.GeoRepresentation(prec, swaplatlong);
-<a name="l00185"></a>00185           <span class="keywordflow">break</span>;
-<a name="l00186"></a>00186         <span class="keywordflow">case</span> <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>:
-<a name="l00187"></a>00187           os = p.DMSRepresentation(prec, swaplatlong, dmssep);
-<a name="l00188"></a>00188           <span class="keywordflow">break</span>;
-<a name="l00189"></a>00189         <span class="keywordflow">case</span> <a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>:
-<a name="l00190"></a>00190           os = p.AltUTMUPSRepresentation(prec);
-<a name="l00191"></a>00191           <span class="keywordflow">break</span>;
-<a name="l00192"></a>00192         <span class="keywordflow">case</span> <a class="code" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a>:
-<a name="l00193"></a>00193           os = p.AltMGRSRepresentation(prec);
-<a name="l00194"></a>00194           <span class="keywordflow">break</span>;
-<a name="l00195"></a>00195         <span class="keywordflow">case</span> CONVERGENCE:
-<a name="l00196"></a>00196           {
-<a name="l00197"></a>00197             <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00198"></a>00198               gamma = p.AltConvergence(),
-<a name="l00199"></a>00199               k = p.AltScale();
-<a name="l00200"></a>00200             os =
-<a name="l00201"></a>00201               <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(gamma, std::max(-5,std::min(8,prec))+5)
-<a name="l00202"></a>00202               + <span class="stringliteral">" "</span> +
-<a name="l00203"></a>00203               Utility::str<real>(k, std::max(-5,std::min(8,prec))+7);
-<a name="l00204"></a>00204           }
-<a name="l00205"></a>00205         }
-<a name="l00206"></a>00206       }
-<a name="l00207"></a>00207       <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00208"></a>00208         <span class="comment">// Write error message to cout so output lines match input lines</span>
-<a name="l00209"></a>00209         os = std::string(<span class="stringliteral">"ERROR: "</span>) + e.what();
-<a name="l00210"></a>00210         retval = 1;
-<a name="l00211"></a>00211       }
-<a name="l00212"></a>00212       *output << os << eol;
-<a name="l00213"></a>00213     }
-<a name="l00214"></a>00214     <span class="keywordflow">return</span> retval;
-<a name="l00215"></a>00215   }
-<a name="l00216"></a>00216   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00217"></a>00217     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00218"></a>00218     <span class="keywordflow">return</span> 1;
-<a name="l00219"></a>00219   }
-<a name="l00220"></a>00220   <span class="keywordflow">catch</span> (...) {
-<a name="l00221"></a>00221     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00222"></a>00222     <span class="keywordflow">return</span> 1;
-<a name="l00223"></a>00223   }
-<a name="l00224"></a>00224 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeoCoords_8cpp.html b/doc/html/GeoCoords_8cpp.html
deleted file mode 100644
index 2288d78..0000000
--- a/doc/html/GeoCoords_8cpp.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeoCoords.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">GeoCoords.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="GeoCoords_8hpp_source.html">GeographicLib/GeoCoords.hpp</a>></code><br/>
-<code>#include <vector></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <iomanip></code><br/>
-<code>#include <<a class="el" href="MGRS_8hpp_source.html">GeographicLib/MGRS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-</div>
-<p><a href="GeoCoords_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GeoCoords_8cpp.html#a8ca6643c26cc3909b0935409c1dbc403">GEOGRAPHICLIB_GEOCOORDS_CPP</a>   "$Id: 084d4ec9163dc9d8989b54b12a04bf0f44a8c23f $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a8ca6643c26cc3909b0935409c1dbc403"></a><!-- doxytag: member="GeoCoords.cpp::GEOGRAPHICLIB_GEOCOORDS_CPP" ref="a8ca6643c26cc3909b0935409c1dbc403" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEOCOORDS_CPP   "$Id: 084d4ec9163dc9d8989b54b12a04bf0f44a8c23f $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GeoCoords_8cpp_source.html#l00017">17</a> of file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeoCoords_8cpp_source.html b/doc/html/GeoCoords_8cpp_source.html
deleted file mode 100644
index 3aa7831..0000000
--- a/doc/html/GeoCoords_8cpp_source.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeoCoords.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeoCoords.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GeoCoords_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GeoCoords.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::GeoCoords class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="GeoCoords_8hpp.html" title="Header for GeographicLib::GeoCoords class.">GeographicLib/GeoCoords.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <vector></span>
-<a name="l00012"></a>00012 <span class="preprocessor">#include <sstream></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <iomanip></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="MGRS_8hpp.html" title="Header for GeographicLib::MGRS class.">GeographicLib/MGRS.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a><a class="code" href="GeoCoords_8cpp.html#a8ca6643c26cc3909b0935409c1dbc403">00017</a> <span class="preprocessor">#define GEOGRAPHICLIB_GEOCOORDS_CPP \</span>
-<a name="l00018"></a>00018 <span class="preprocessor">  "$Id: 084d4ec9163dc9d8989b54b12a04bf0f44a8c23f $"</span>
-<a name="l00019"></a>00019 <span class="preprocessor"></span>
-<a name="l00020"></a>00020 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="GeoCoords_8cpp.html#a8ca6643c26cc3909b0935409c1dbc403">GEOGRAPHICLIB_GEOCOORDS_CPP</a>)
-<a name="l00021"></a>00021 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="GeoCoords_8hpp.html#a20841ff1ac217be34150ce32c5ad4bb8">GEOGRAPHICLIB_GEOCOORDS_HPP</a>)
-<a name="l00022"></a>00022 
-<a name="l00023"></a>00023 namespace GeographicLib {
-<a name="l00024"></a>00024 
-<a name="l00025"></a>00025   <span class="keyword">using namespace </span>std;
-<a name="l00026"></a>00026 
-<a name="l00027"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a4a1e0a65a8a344dfe519fcbf25078e37">00027</a>   <span class="keywordtype">void</span> GeoCoords::Reset(<span class="keyword">const</span> std::string& s, <span class="keywordtype">bool</span> centerp, <span class="keywordtype">bool</span> swaplatlong) {
-<a name="l00028"></a>00028     vector<string> sa;
-<a name="l00029"></a>00029     <span class="keyword">const</span> <span class="keywordtype">char</span>* spaces = <span class="stringliteral">" \t\n\v\f\r,"</span>; <span class="comment">// Include comma as a space</span>
-<a name="l00030"></a>00030     <span class="keywordflow">for</span> (string::size_type pos0 = 0, pos1; pos0 != <span class="keywordtype">string</span>::npos;) {
-<a name="l00031"></a>00031       pos1 = s.find_first_not_of(spaces, pos0);
-<a name="l00032"></a>00032       <span class="keywordflow">if</span> (pos1 == string::npos)
-<a name="l00033"></a>00033         <span class="keywordflow">break</span>;
-<a name="l00034"></a>00034       pos0 = s.find_first_of(spaces, pos1);
-<a name="l00035"></a>00035       sa.push_back(s.substr(pos1, pos0 == string::npos ? pos0 : pos0 - pos1));
-<a name="l00036"></a>00036     }
-<a name="l00037"></a>00037     <span class="keywordflow">if</span> (sa.size() == 1) {
-<a name="l00038"></a>00038       <span class="keywordtype">int</span> prec;
-<a name="l00039"></a>00039       MGRS::Reverse(sa[0], _zone, _northp, _easting, _northing, prec, centerp);
-<a name="l00040"></a>00040       UTMUPS::Reverse(_zone, _northp, _easting, _northing,
-<a name="l00041"></a>00041                       _lat, _long, _gamma, _k);
-<a name="l00042"></a>00042     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sa.size() == 2) {
-<a name="l00043"></a>00043       DMS::DecodeLatLon(sa[0], sa[1], _lat, _long, swaplatlong);
-<a name="l00044"></a>00044       UTMUPS::Forward( _lat, _long,
-<a name="l00045"></a>00045                        _zone, _northp, _easting, _northing, _gamma, _k);
-<a name="l00046"></a>00046     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sa.size() == 3) {
-<a name="l00047"></a>00047       <span class="keywordtype">unsigned</span> zoneind, coordind;
-<a name="l00048"></a>00048       <span class="keywordflow">if</span> (sa[0].size() > 0 && isalpha(sa[0][sa[0].size() - 1])) {
-<a name="l00049"></a>00049         zoneind = 0;
-<a name="l00050"></a>00050         coordind = 1;
-<a name="l00051"></a>00051       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sa[2].size() > 0 && isalpha(sa[2][sa[2].size() - 1])) {
-<a name="l00052"></a>00052         zoneind = 2;
-<a name="l00053"></a>00053         coordind = 0;
-<a name="l00054"></a>00054       } <span class="keywordflow">else</span>
-<a name="l00055"></a>00055         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Neither "</span> + sa[0] + <span class="stringliteral">" nor "</span> + sa[2]
-<a name="l00056"></a>00056                             + <span class="stringliteral">" of the form UTM/UPS Zone + Hemisphere"</span>
-<a name="l00057"></a>00057                             + <span class="stringliteral">" (ex: 38N, 09S, N)"</span>);
-<a name="l00058"></a>00058       UTMUPS::DecodeZone(sa[zoneind], _zone, _northp);
-<a name="l00059"></a>00059       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < 2; ++i)
-<a name="l00060"></a>00060         (i ? _northing : _easting) = DMS::Decode(sa[coordind + i]);
-<a name="l00061"></a>00061       UTMUPS::Reverse(_zone, _northp, _easting, _northing,
-<a name="l00062"></a>00062                       _lat, _long, _gamma, _k);
-<a name="l00063"></a>00063       FixHemisphere();
-<a name="l00064"></a>00064     } <span class="keywordflow">else</span>
-<a name="l00065"></a>00065       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Coordinate requires 1, 2, or 3 elements"</span>);
-<a name="l00066"></a>00066     CopyToAlt();
-<a name="l00067"></a>00067   }
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 
-<a name="l00070"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a79af2d72afdfeede78f2ba65b809d6b3">00070</a>   <span class="keywordtype">string</span> GeoCoords::GeoRepresentation(<span class="keywordtype">int</span> prec, <span class="keywordtype">bool</span> swaplatlong)<span class="keyword"> const </span>{
-<a name="l00071"></a>00071     prec = max(0, min(9, prec) + 5);
-<a name="l00072"></a>00072     ostringstream os;
-<a name="l00073"></a>00073     os << fixed << setprecision(prec);
-<a name="l00074"></a>00074     real a = swaplatlong ? _long : _lat;
-<a name="l00075"></a>00075     real b = swaplatlong ? _lat : _long;
-<a name="l00076"></a>00076     <span class="keywordflow">if</span> (!Math::isnan(a))
-<a name="l00077"></a>00077       os << a;
-<a name="l00078"></a>00078     <span class="keywordflow">else</span>
-<a name="l00079"></a>00079       os << <span class="stringliteral">"nan"</span>;
-<a name="l00080"></a>00080     os << <span class="stringliteral">" "</span>;
-<a name="l00081"></a>00081     <span class="keywordflow">if</span> (!Math::isnan(b))
-<a name="l00082"></a>00082       os << b;
-<a name="l00083"></a>00083     <span class="keywordflow">else</span>
-<a name="l00084"></a>00084       os << <span class="stringliteral">"nan"</span>;
-<a name="l00085"></a>00085     <span class="keywordflow">return</span> os.str();
-<a name="l00086"></a>00086   }
-<a name="l00087"></a>00087 
-<a name="l00088"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#af6e9f9087a407b01dc24401df8610257">00088</a>   <span class="keywordtype">string</span> GeoCoords::DMSRepresentation(<span class="keywordtype">int</span> prec, <span class="keywordtype">bool</span> swaplatlong,
-<a name="l00089"></a>00089                                       <span class="keywordtype">char</span> dmssep)<span class="keyword"> const </span>{
-<a name="l00090"></a>00090     prec = max(0, min(10, prec) + 5);
-<a name="l00091"></a>00091     <span class="keywordflow">return</span> DMS::Encode(swaplatlong ? _long : _lat, <span class="keywordtype">unsigned</span>(prec),
-<a name="l00092"></a>00092                        swaplatlong ? DMS::LONGITUDE : DMS::LATITUDE, dmssep) +
-<a name="l00093"></a>00093       <span class="stringliteral">" "</span> + DMS::Encode(swaplatlong ? _lat : _long, <span class="keywordtype">unsigned</span>(prec),
-<a name="l00094"></a>00094                         swaplatlong ? DMS::LATITUDE : DMS::LONGITUDE, dmssep);
-<a name="l00095"></a>00095   }
-<a name="l00096"></a>00096 
-<a name="l00097"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#ab37746606876eb77335268054589390a">00097</a>   <span class="keywordtype">string</span> GeoCoords::DMSRepresentation(<span class="keywordtype">int</span> prec, <span class="keywordtype">bool</span> swaplatlong)<span class="keyword"> const</span>
-<a name="l00098"></a>00098 <span class="keyword">  </span>{ <span class="keywordflow">return</span> DMSRepresentation(prec, swaplatlong, <span class="keywordtype">char</span>(0)); }
-<a name="l00099"></a>00099 
-<a name="l00100"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a36594aaa4f293b0ddf00b1c78bb04595">00100</a>   <span class="keywordtype">string</span> GeoCoords::MGRSRepresentation(<span class="keywordtype">int</span> prec)<span class="keyword"> const </span>{
-<a name="l00101"></a>00101     <span class="comment">// Max precision is um</span>
-<a name="l00102"></a>00102     prec = max(0, min(6, prec) + 5);
-<a name="l00103"></a>00103     <span class="keywordtype">string</span> mgrs;
-<a name="l00104"></a>00104     MGRS::Forward(_zone, _northp, _easting, _northing, _lat, prec, mgrs);
-<a name="l00105"></a>00105     <span class="keywordflow">return</span> mgrs;
-<a name="l00106"></a>00106   }
-<a name="l00107"></a>00107 
-<a name="l00108"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#ad602893cd4a81ccc511daff76b411413">00108</a>   <span class="keywordtype">string</span> GeoCoords::AltMGRSRepresentation(<span class="keywordtype">int</span> prec)<span class="keyword"> const </span>{
-<a name="l00109"></a>00109     <span class="comment">// Max precision is um</span>
-<a name="l00110"></a>00110     prec = max(0, min(6, prec) + 5);
-<a name="l00111"></a>00111     <span class="keywordtype">string</span> mgrs;
-<a name="l00112"></a>00112     MGRS::Forward(_alt_zone, _northp, _alt_easting, _alt_northing, _lat, prec,
-<a name="l00113"></a>00113                   mgrs);
-<a name="l00114"></a>00114     <span class="keywordflow">return</span> mgrs;
-<a name="l00115"></a>00115   }
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117   <span class="keywordtype">void</span> GeoCoords::UTMUPSString(<span class="keywordtype">int</span> zone, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> easting, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> northing, <span class="keywordtype">int</span> prec,
-<a name="l00118"></a>00118                                std::string& utm)<span class="keyword"> const </span>{
-<a name="l00119"></a>00119     ostringstream os;
-<a name="l00120"></a>00120     prec = max(-5, min(9, prec));
-<a name="l00121"></a>00121     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> scale = prec < 0 ? pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(10), -prec) : <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1);
-<a name="l00122"></a>00122     os << UTMUPS::EncodeZone(zone, _northp) << fixed << setfill(<span class="charliteral">'0'</span>);
-<a name="l00123"></a>00123     <span class="keywordflow">if</span> (Math::isfinite(easting)) {
-<a name="l00124"></a>00124       os << <span class="stringliteral">" "</span> << setprecision(max(0, prec)) << easting / scale;
-<a name="l00125"></a>00125       <span class="keywordflow">if</span> (prec < 0 && abs(easting / scale) > <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5))
-<a name="l00126"></a>00126         os << setw(-prec) << 0;
-<a name="l00127"></a>00127     } <span class="keywordflow">else</span>
-<a name="l00128"></a>00128       os << <span class="stringliteral">" nan"</span>;
-<a name="l00129"></a>00129     <span class="keywordflow">if</span> (Math::isfinite(northing)) {
-<a name="l00130"></a>00130       os << <span class="stringliteral">" "</span> << setprecision(max(0, prec)) << northing / scale;
-<a name="l00131"></a>00131       <span class="keywordflow">if</span> (prec < 0 && abs(northing / scale) > <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5))
-<a name="l00132"></a>00132         os << setw(-prec) << 0;
-<a name="l00133"></a>00133     } <span class="keywordflow">else</span>
-<a name="l00134"></a>00134       os << <span class="stringliteral">" nan"</span>;
-<a name="l00135"></a>00135     utm = os.str();
-<a name="l00136"></a>00136   }
-<a name="l00137"></a>00137 
-<a name="l00138"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a056efc42fe4c653aad40be5d5b865ea3">00138</a>   <span class="keywordtype">string</span> GeoCoords::UTMUPSRepresentation(<span class="keywordtype">int</span> prec)<span class="keyword"> const </span>{
-<a name="l00139"></a>00139     <span class="keywordtype">string</span> utm;
-<a name="l00140"></a>00140     UTMUPSString(_zone, _easting, _northing, prec, utm);
-<a name="l00141"></a>00141     <span class="keywordflow">return</span> utm;
-<a name="l00142"></a>00142   }
-<a name="l00143"></a>00143 
-<a name="l00144"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a020732ccba257d7f5248692afd318b93">00144</a>   <span class="keywordtype">string</span> GeoCoords::AltUTMUPSRepresentation(<span class="keywordtype">int</span> prec)<span class="keyword"> const </span>{
-<a name="l00145"></a>00145     <span class="keywordtype">string</span> utm;
-<a name="l00146"></a>00146     UTMUPSString(_alt_zone, _alt_easting, _alt_northing, prec, utm);
-<a name="l00147"></a>00147     <span class="keywordflow">return</span> utm;
-<a name="l00148"></a>00148   }
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   <span class="keywordtype">void</span> GeoCoords::FixHemisphere() {
-<a name="l00151"></a>00151     <span class="keywordflow">if</span> (_lat == 0 || (_northp && _lat >= 0) || (!_northp && _lat < 0) ||
-<a name="l00152"></a>00152         Math::isnan(_lat))
-<a name="l00153"></a>00153       <span class="comment">// Allow either hemisphere for equator</span>
-<a name="l00154"></a>00154       <span class="keywordflow">return</span>;
-<a name="l00155"></a>00155     <span class="keywordflow">if</span> (_zone != UTMUPS::UPS) {
-<a name="l00156"></a>00156       _northing += (_northp ? 1 : -1) * UTMUPS::UTMShift();
-<a name="l00157"></a>00157       _northp = !_northp;
-<a name="l00158"></a>00158     } <span class="keywordflow">else</span>
-<a name="l00159"></a>00159       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Hemisphere mixup"</span>);
-<a name="l00160"></a>00160   }
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeoCoords_8hpp.html b/doc/html/GeoCoords_8hpp.html
deleted file mode 100644
index bc49a28..0000000
--- a/doc/html/GeoCoords_8hpp.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeoCoords.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">GeoCoords.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="UTMUPS_8hpp_source.html">GeographicLib/UTMUPS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="GeoCoords_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Conversion between geographic coordinates.  <a href="classGeographicLib_1_1GeoCoords.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GeoCoords_8hpp.html#a20841ff1ac217be34150ce32c5ad4bb8">GEOGRAPHICLIB_GEOCOORDS_HPP</a>   "$Id: e706d3a35c3be0e2beaf39041cac29beb468a5aa $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a20841ff1ac217be34150ce32c5ad4bb8"></a><!-- doxytag: member="GeoCoords.hpp::GEOGRAPHICLIB_GEOCOORDS_HPP" ref="a20841ff1ac217be34150ce32c5ad4bb8" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEOCOORDS_HPP   "$Id: e706d3a35c3be0e2beaf39041cac29beb468a5aa $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00011">11</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeoCoords_8hpp_source.html b/doc/html/GeoCoords_8hpp_source.html
deleted file mode 100644
index f347473..0000000
--- a/doc/html/GeoCoords_8hpp_source.html
+++ /dev/null
@@ -1,559 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeoCoords.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeoCoords.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GeoCoords_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GeoCoords.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::GeoCoords class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#ifndef GEOGRAPHICLIB_GEOCOORDS_HPP</span>
-<a name="l00011"></a><a class="code" href="GeoCoords_8hpp.html#a20841ff1ac217be34150ce32c5ad4bb8">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_GEOCOORDS_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: e706d3a35c3be0e2beaf39041cac29beb468a5aa $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="UTMUPS_8hpp.html" title="Header for GeographicLib::UTMUPS class.">GeographicLib/UTMUPS.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00018"></a>00018 <span class="comment"></span>
-<a name="l00019"></a>00019 <span class="comment">  /**</span>
-<a name="l00020"></a>00020 <span class="comment">   * \brief Conversion between geographic coordinates</span>
-<a name="l00021"></a>00021 <span class="comment">   *</span>
-<a name="l00022"></a>00022 <span class="comment">   * This class stores a geographic position which may be set via the</span>
-<a name="l00023"></a>00023 <span class="comment">   * constructors or Reset via</span>
-<a name="l00024"></a>00024 <span class="comment">   * - latitude and longitude</span>
-<a name="l00025"></a>00025 <span class="comment">   * - UTM or UPS coordinates</span>
-<a name="l00026"></a>00026 <span class="comment">   * - a string representation of these or an MGRS coordinate string</span>
-<a name="l00027"></a>00027 <span class="comment">   *</span>
-<a name="l00028"></a>00028 <span class="comment">   * The state consists of the latitude and longitude and the supplied UTM or</span>
-<a name="l00029"></a>00029 <span class="comment">   * UPS coordinates (possibly derived from the MGRS coordinates).  If latitude</span>
-<a name="l00030"></a>00030 <span class="comment">   * and longitude were given then the UTM/UPS coordinates follows the standard</span>
-<a name="l00031"></a>00031 <span class="comment">   * conventions.</span>
-<a name="l00032"></a>00032 <span class="comment">   *</span>
-<a name="l00033"></a>00033 <span class="comment">   * The mutable state consists of the UTM or UPS coordinates for a alternate</span>
-<a name="l00034"></a>00034 <span class="comment">   * zone.  A method SetAltZone is provided to set the alternate UPS/UTM zone.</span>
-<a name="l00035"></a>00035 <span class="comment">   *</span>
-<a name="l00036"></a>00036 <span class="comment">   * Methods are provided to return the geographic coordinates, the input UTM</span>
-<a name="l00037"></a>00037 <span class="comment">   * or UPS coordinates (and associated meridian convergence and scale), or</span>
-<a name="l00038"></a>00038 <span class="comment">   * alternate UTM or UPS coordinates (and their associated meridian</span>
-<a name="l00039"></a>00039 <span class="comment">   * convergence and scale).</span>
-<a name="l00040"></a>00040 <span class="comment">   *</span>
-<a name="l00041"></a>00041 <span class="comment">   * Once the input string has been parsed, you can print the result out in any</span>
-<a name="l00042"></a>00042 <span class="comment">   * of the formats, decimal degrees, degrees minutes seconds, MGRS, UTM/UPS.</span>
-<a name="l00043"></a>00043 <span class="comment">   *</span>
-<a name="l00044"></a>00044 <span class="comment">   * Example of use:</span>
-<a name="l00045"></a>00045 <span class="comment">   * \include example-GeoCoords.cpp</span>
-<a name="l00046"></a>00046 <span class="comment">   *</span>
-<a name="l00047"></a>00047 <span class="comment">   * <a href="GeoConvert.1.html">GeoConvert</a> is a command-line utility</span>
-<a name="l00048"></a>00048 <span class="comment">   * providing access to the functionality of GeoCoords.</span>
-<a name="l00049"></a>00049 <span class="comment">   **********************************************************************/</span>
-<a name="l00050"></a>00050   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> GeoCoords {
-<a name="l00051"></a>00051   <span class="keyword">private</span>:
-<a name="l00052"></a>00052     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00053"></a>00053     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _lat, _long, _easting, _northing, _gamma, _k;
-<a name="l00054"></a>00054     <span class="keywordtype">bool</span> _northp;
-<a name="l00055"></a>00055     <span class="keywordtype">int</span> _zone;                  <span class="comment">// See UTMUPS::zonespec</span>
-<a name="l00056"></a>00056     <span class="keyword">mutable</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _alt_easting, _alt_northing, _alt_gamma, _alt_k;
-<a name="l00057"></a>00057     <span class="keyword">mutable</span> <span class="keywordtype">int</span> _alt_zone;
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059     <span class="keywordtype">void</span> CopyToAlt() <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00060"></a>00060       _alt_easting = _easting;
-<a name="l00061"></a>00061       _alt_northing = _northing;
-<a name="l00062"></a>00062       _alt_gamma = _gamma;
-<a name="l00063"></a>00063       _alt_k = _k;
-<a name="l00064"></a>00064       _alt_zone = _zone;
-<a name="l00065"></a>00065     }
-<a name="l00066"></a>00066     <span class="keywordtype">void</span> UTMUPSString(<span class="keywordtype">int</span> zone, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> easting, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> northing,
-<a name="l00067"></a>00067                       <span class="keywordtype">int</span> prec, std::string& utm) <span class="keyword">const</span>;
-<a name="l00068"></a>00068     <span class="keywordtype">void</span> FixHemisphere();
-<a name="l00069"></a>00069   <span class="keyword">public</span>:
-<a name="l00070"></a>00070 <span class="comment"></span>
-<a name="l00071"></a>00071 <span class="comment">    /** \name Initializing the GeoCoords object</span>
-<a name="l00072"></a>00072 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00073"></a>00073 <span class="comment">    ///@{</span>
-<a name="l00074"></a>00074 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00075"></a>00075 <span class="comment">     * The default constructor is equivalent to \e latitude = 90<sup>o</sup>,</span>
-<a name="l00076"></a>00076 <span class="comment">     * \e longitude = 0<sup>o</sup>.</span>
-<a name="l00077"></a>00077 <span class="comment">     **********************************************************************/</span>
-<a name="l00078"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a8b3f4a919ba4478c4fec0e7b01e84c57">00078</a>     GeoCoords() throw()
-<a name="l00079"></a>00079       <span class="comment">// This is the N pole</span>
-<a name="l00080"></a>00080       : _lat(90)
-<a name="l00081"></a>00081       , _long(0)
-<a name="l00082"></a>00082       , _easting(2000000)
-<a name="l00083"></a>00083       , _northing(2000000)
-<a name="l00084"></a>00084       , _northp(true)
-<a name="l00085"></a>00085       , _zone(0)
-<a name="l00086"></a>00086     { CopyToAlt(); }
-<a name="l00087"></a>00087 <span class="comment"></span>
-<a name="l00088"></a>00088 <span class="comment">    /**</span>
-<a name="l00089"></a>00089 <span class="comment">     * Construct from a string.</span>
-<a name="l00090"></a>00090 <span class="comment">     *</span>
-<a name="l00091"></a>00091 <span class="comment">     * @param[in] s 1-element, 2-element, or 3-element string representation of</span>
-<a name="l00092"></a>00092 <span class="comment">     *   the position.</span>
-<a name="l00093"></a>00093 <span class="comment">     * @param[in] centerp governs the interpretation of MGRS coordinates (see</span>
-<a name="l00094"></a>00094 <span class="comment">     *   below).</span>
-<a name="l00095"></a>00095 <span class="comment">     * @param[in] swaplatlong governs the interpretation of geographic</span>
-<a name="l00096"></a>00096 <span class="comment">     *   coordinates (see below).</span>
-<a name="l00097"></a>00097 <span class="comment">     *</span>
-<a name="l00098"></a>00098 <span class="comment">     * Parse as a string and interpret it as a geographic position.  The input</span>
-<a name="l00099"></a>00099 <span class="comment">     * string is broken into space (or comma) separated pieces and Basic</span>
-<a name="l00100"></a>00100 <span class="comment">     * decision on which format is based on number of components</span>
-<a name="l00101"></a>00101 <span class="comment">     * -# MGRS</span>
-<a name="l00102"></a>00102 <span class="comment">     * -# "Lat Long" or "Long Lat"</span>
-<a name="l00103"></a>00103 <span class="comment">     * -# "Zone Easting Northing" or "Easting Northing Zone"</span>
-<a name="l00104"></a>00104 <span class="comment">     *</span>
-<a name="l00105"></a>00105 <span class="comment">     * The following inputs are approximately the same (Ar Ramadi Bridge, Iraq)</span>
-<a name="l00106"></a>00106 <span class="comment">     * - Latitude and Longitude</span>
-<a name="l00107"></a>00107 <span class="comment">     *   -  33.44      43.27</span>
-<a name="l00108"></a>00108 <span class="comment">     *   -  N33d26.4'  E43d16.2'</span>
-<a name="l00109"></a>00109 <span class="comment">     *   -  43d16'12&quot;E 33d26'24&quot;N</span>
-<a name="l00110"></a>00110 <span class="comment">     *   -  43:16:12E  33:26:24</span>
-<a name="l00111"></a>00111 <span class="comment">     * - MGRS</span>
-<a name="l00112"></a>00112 <span class="comment">     *   -  38SLC301</span>
-<a name="l00113"></a>00113 <span class="comment">     *   -  38SLC391014</span>
-<a name="l00114"></a>00114 <span class="comment">     *   -  38SLC3918701405</span>
-<a name="l00115"></a>00115 <span class="comment">     *   -  37SHT9708</span>
-<a name="l00116"></a>00116 <span class="comment">     * - UTM</span>
-<a name="l00117"></a>00117 <span class="comment">     *   -  38N 339188 3701405</span>
-<a name="l00118"></a>00118 <span class="comment">     *   -  897039 3708229 37N</span>
-<a name="l00119"></a>00119 <span class="comment">     *</span>
-<a name="l00120"></a>00120 <span class="comment">     * Latitude and Longitude parsing.  Latitude precedes longitude, unless a</span>
-<a name="l00121"></a>00121 <span class="comment">     * N, S, E, W hemisphere designator is used on one or both coordinates.  If</span>
-<a name="l00122"></a>00122 <span class="comment">     * \e swaplatlong = true (default is false), then longitude precedes</span>
-<a name="l00123"></a>00123 <span class="comment">     * latitude in the absence of a hemisphere designator.  Thus (with \e</span>
-<a name="l00124"></a>00124 <span class="comment">     * swaplatlong = false)</span>
-<a name="l00125"></a>00125 <span class="comment">     * - 40 -75</span>
-<a name="l00126"></a>00126 <span class="comment">     * - N40 W75</span>
-<a name="l00127"></a>00127 <span class="comment">     * - -75 N40</span>
-<a name="l00128"></a>00128 <span class="comment">     * - 75W 40N</span>
-<a name="l00129"></a>00129 <span class="comment">     * - E-75 -40S</span>
-<a name="l00130"></a>00130 <span class="comment">     * .</span>
-<a name="l00131"></a>00131 <span class="comment">     * are all the same position.  The coordinates may be given in</span>
-<a name="l00132"></a>00132 <span class="comment">     * decimal degrees, degrees and decimal minutes, degrees, minutes,</span>
-<a name="l00133"></a>00133 <span class="comment">     * seconds, etc.  Use d, ', and &quot; to mark off the degrees,</span>
-<a name="l00134"></a>00134 <span class="comment">     * minutes and seconds.  Alternatively, use : to separate these</span>
-<a name="l00135"></a>00135 <span class="comment">     * components.  Thus</span>
-<a name="l00136"></a>00136 <span class="comment">     * - 40d30'30&quot;</span>
-<a name="l00137"></a>00137 <span class="comment">     * - 40d30'30</span>
-<a name="l00138"></a>00138 <span class="comment">     * - 40d30.5'</span>
-<a name="l00139"></a>00139 <span class="comment">     * - 40d30.5</span>
-<a name="l00140"></a>00140 <span class="comment">     * - 40:30:30</span>
-<a name="l00141"></a>00141 <span class="comment">     * - 40:30.5</span>
-<a name="l00142"></a>00142 <span class="comment">     * - 40.508333333</span>
-<a name="l00143"></a>00143 <span class="comment">     * .</span>
-<a name="l00144"></a>00144 <span class="comment">     * all specify the same angle.  The leading sign applies to all components</span>
-<a name="l00145"></a>00145 <span class="comment">     * so -1d30 is -(1+30/60) = -1.5.  Latitudes must be in the range [-90, 90]</span>
-<a name="l00146"></a>00146 <span class="comment">     * and longitudes in the range [-180, 360].  Internally longitudes are</span>
-<a name="l00147"></a>00147 <span class="comment">     * reduced to the range [-180, 180).</span>
-<a name="l00148"></a>00148 <span class="comment">     *</span>
-<a name="l00149"></a>00149 <span class="comment">     * UTM/UPS parsing.  For UTM zones (-80 <= Lat <= 84), the zone designator</span>
-<a name="l00150"></a>00150 <span class="comment">     * is made up of a zone number (for 1 to 60) and a hemisphere letter (N or</span>
-<a name="l00151"></a>00151 <span class="comment">     * S), e.g., 38N.  The latitude zone designer ([C&ndash;M] in the southern</span>
-<a name="l00152"></a>00152 <span class="comment">     * hemisphere and [N&ndash;X] in the northern) should NOT be used.  (This</span>
-<a name="l00153"></a>00153 <span class="comment">     * is part of the MGRS coordinate.)  The zone designator for the poles</span>
-<a name="l00154"></a>00154 <span class="comment">     * (where UPS is employed) is a hemisphere letter by itself, i.e., N or S.</span>
-<a name="l00155"></a>00155 <span class="comment">     *</span>
-<a name="l00156"></a>00156 <span class="comment">     * MGRS parsing interprets the grid references as square area at the</span>
-<a name="l00157"></a>00157 <span class="comment">     * specified precision (1m, 10m, 100m, etc.).  If \e centerp = true (the</span>
-<a name="l00158"></a>00158 <span class="comment">     * default), the center of this square is then taken to be the precise</span>
-<a name="l00159"></a>00159 <span class="comment">     * position; thus:</span>
-<a name="l00160"></a>00160 <span class="comment">     * - 38SMB           = 38N 450000 3650000</span>
-<a name="l00161"></a>00161 <span class="comment">     * - 38SMB4484       = 38N 444500 3684500</span>
-<a name="l00162"></a>00162 <span class="comment">     * - 38SMB44148470   = 38N 444145 3684705</span>
-<a name="l00163"></a>00163 <span class="comment">     * .</span>
-<a name="l00164"></a>00164 <span class="comment">     * Otherwise, the "south-west" corner of the square is used, i.e.,</span>
-<a name="l00165"></a>00165 <span class="comment">     * - 38SMB           = 38N 400000 3600000</span>
-<a name="l00166"></a>00166 <span class="comment">     * - 38SMB4484       = 38N 444000 3684000</span>
-<a name="l00167"></a>00167 <span class="comment">     * - 38SMB44148470   = 38N 444140 3684700</span>
-<a name="l00168"></a>00168 <span class="comment">     **********************************************************************/</span>
-<a name="l00169"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#acdfe641aaea6b68aee25cfee822f782a">00169</a>     <span class="keyword">explicit</span> GeoCoords(<span class="keyword">const</span> std::string& s,
-<a name="l00170"></a>00170                        <span class="keywordtype">bool</span> centerp = <span class="keyword">true</span>, <span class="keywordtype">bool</span> swaplatlong = <span class="keyword">false</span>)
-<a name="l00171"></a>00171     { Reset(s, centerp, swaplatlong); }
-<a name="l00172"></a>00172 <span class="comment"></span>
-<a name="l00173"></a>00173 <span class="comment">    /**</span>
-<a name="l00174"></a>00174 <span class="comment">     * Construct from geographic coordinates.</span>
-<a name="l00175"></a>00175 <span class="comment">     *</span>
-<a name="l00176"></a>00176 <span class="comment">     * @param[in] latitude (degrees).</span>
-<a name="l00177"></a>00177 <span class="comment">     * @param[in] longitude (degrees).</span>
-<a name="l00178"></a>00178 <span class="comment">     * @param[in] zone if specified, force the UTM/UPS representation to use a</span>
-<a name="l00179"></a>00179 <span class="comment">     *   specified zone using the rules given in UTMUPS::zonespec.</span>
-<a name="l00180"></a>00180 <span class="comment">     **********************************************************************/</span>
-<a name="l00181"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a7bde6a5cba74adf66d831788e6be8e65">00181</a>     <a class="code" href="classGeographicLib_1_1GeoCoords.html#a7bde6a5cba74adf66d831788e6be8e65">GeoCoords</a>(real latitude, real longitude, <span class="keywordtype">int</span> zone = <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">UTMUPS::STANDARD</a>) {
-<a name="l00182"></a>00182       Reset(latitude, longitude, zone);
-<a name="l00183"></a>00183     }
-<a name="l00184"></a>00184 <span class="comment"></span>
-<a name="l00185"></a>00185 <span class="comment">    /**</span>
-<a name="l00186"></a>00186 <span class="comment">     * Construct from UTM/UPS coordinates.</span>
-<a name="l00187"></a>00187 <span class="comment">     *</span>
-<a name="l00188"></a>00188 <span class="comment">     * @param[in] zone UTM zone (zero means UPS).</span>
-<a name="l00189"></a>00189 <span class="comment">     * @param[in] northp hemisphere (true means north, false means south).</span>
-<a name="l00190"></a>00190 <span class="comment">     * @param[in] easting (meters).</span>
-<a name="l00191"></a>00191 <span class="comment">     * @param[in] northing (meters).</span>
-<a name="l00192"></a>00192 <span class="comment">     **********************************************************************/</span>
-<a name="l00193"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#aaab765054416e1243f2d7b36edc8e0d4">00193</a>     <a class="code" href="classGeographicLib_1_1GeoCoords.html#aaab765054416e1243f2d7b36edc8e0d4">GeoCoords</a>(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp, real easting, real northing) {
-<a name="l00194"></a>00194       Reset(zone, northp, easting, northing);
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 <span class="comment"></span>
-<a name="l00197"></a>00197 <span class="comment">    /**</span>
-<a name="l00198"></a>00198 <span class="comment">     * Reset the location from a string.  See</span>
-<a name="l00199"></a>00199 <span class="comment">     * GeoCoords(const std::string& s, bool centerp, bool swaplatlong).</span>
-<a name="l00200"></a>00200 <span class="comment">     **********************************************************************/</span>
-<a name="l00201"></a>00201     <span class="keywordtype">void</span> Reset(<span class="keyword">const</span> std::string& s,
-<a name="l00202"></a>00202                <span class="keywordtype">bool</span> centerp = <span class="keyword">true</span>, <span class="keywordtype">bool</span> swaplatlong = <span class="keyword">false</span>);
-<a name="l00203"></a>00203 <span class="comment"></span>
-<a name="l00204"></a>00204 <span class="comment">    /**</span>
-<a name="l00205"></a>00205 <span class="comment">     * Reset the location in terms of geographic coordinates.  See</span>
-<a name="l00206"></a>00206 <span class="comment">     * GeoCoords(real latitude, real longitude, int zone).</span>
-<a name="l00207"></a>00207 <span class="comment">     **********************************************************************/</span>
-<a name="l00208"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a0cbbebaa7bb77f91f3f8dbbadfd6532a">00208</a>     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1GeoCoords.html#a0cbbebaa7bb77f91f3f8dbbadfd6532a">Reset</a>(real latitude, real longitude, <span class="keywordtype">int</span> zone = <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">UTMUPS::STANDARD</a>) {
-<a name="l00209"></a>00209       <a class="code" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">UTMUPS::Forward</a>(latitude, longitude,
-<a name="l00210"></a>00210                       _zone, _northp, _easting, _northing, _gamma, _k,
-<a name="l00211"></a>00211                       zone);
-<a name="l00212"></a>00212       _lat = latitude;
-<a name="l00213"></a>00213       _long = longitude;
-<a name="l00214"></a>00214       <span class="keywordflow">if</span> (_long >= 180)
-<a name="l00215"></a>00215         _long -= 360;
-<a name="l00216"></a>00216       CopyToAlt();
-<a name="l00217"></a>00217     }
-<a name="l00218"></a>00218 <span class="comment"></span>
-<a name="l00219"></a>00219 <span class="comment">    /**</span>
-<a name="l00220"></a>00220 <span class="comment">     * Reset the location in terms of UPS/UPS coordinates.  See</span>
-<a name="l00221"></a>00221 <span class="comment">     * GeoCoords(int zone, bool northp, real easting, real northing).</span>
-<a name="l00222"></a>00222 <span class="comment">     **********************************************************************/</span>
-<a name="l00223"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#ab072761684d992f508b5a3b9440653fb">00223</a>     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1GeoCoords.html#ab072761684d992f508b5a3b9440653fb">Reset</a>(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp, real easting, real northing) {
-<a name="l00224"></a>00224       <a class="code" href="classGeographicLib_1_1UTMUPS.html#aaf417ae6bed6da324aa03fc96ee0dda4">UTMUPS::Reverse</a>(zone, northp, easting, northing,
-<a name="l00225"></a>00225                       _lat, _long, _gamma, _k);
-<a name="l00226"></a>00226       _zone = zone;
-<a name="l00227"></a>00227       _northp = northp;
-<a name="l00228"></a>00228       _easting = easting;
-<a name="l00229"></a>00229       _northing = northing;
-<a name="l00230"></a>00230       FixHemisphere();
-<a name="l00231"></a>00231       CopyToAlt();
-<a name="l00232"></a>00232     }<span class="comment"></span>
-<a name="l00233"></a>00233 <span class="comment">    ///@}</span>
-<a name="l00234"></a>00234 <span class="comment"></span><span class="comment"></span>
-<a name="l00235"></a>00235 <span class="comment">    /** \name Querying the GeoCoords object</span>
-<a name="l00236"></a>00236 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00237"></a>00237 <span class="comment">    ///@{</span>
-<a name="l00238"></a>00238 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00239"></a>00239 <span class="comment">     * @return latitude (degrees)</span>
-<a name="l00240"></a>00240 <span class="comment">     **********************************************************************/</span>
-<a name="l00241"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a1bc1bb3a2377fa6b70be046dcf5d3e97">00241</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#a1bc1bb3a2377fa6b70be046dcf5d3e97">Latitude</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _lat; }
-<a name="l00242"></a>00242 <span class="comment"></span>
-<a name="l00243"></a>00243 <span class="comment">    /**</span>
-<a name="l00244"></a>00244 <span class="comment">     * @return longitude (degrees)</span>
-<a name="l00245"></a>00245 <span class="comment">     **********************************************************************/</span>
-<a name="l00246"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a7db5459efae411dfebec758a8244a95a">00246</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#a7db5459efae411dfebec758a8244a95a">Longitude</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _long; }
-<a name="l00247"></a>00247 <span class="comment"></span>
-<a name="l00248"></a>00248 <span class="comment">    /**</span>
-<a name="l00249"></a>00249 <span class="comment">     * @return easting (meters)</span>
-<a name="l00250"></a>00250 <span class="comment">     **********************************************************************/</span>
-<a name="l00251"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a9a84801f0b383860b24cc1344e4015fb">00251</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#a9a84801f0b383860b24cc1344e4015fb">Easting</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _easting; }
-<a name="l00252"></a>00252 <span class="comment"></span>
-<a name="l00253"></a>00253 <span class="comment">    /**</span>
-<a name="l00254"></a>00254 <span class="comment">     * @return northing (meters)</span>
-<a name="l00255"></a>00255 <span class="comment">     **********************************************************************/</span>
-<a name="l00256"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#ac0202def9c16ce856f62485b5c249083">00256</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#ac0202def9c16ce856f62485b5c249083">Northing</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _northing; }
-<a name="l00257"></a>00257 <span class="comment"></span>
-<a name="l00258"></a>00258 <span class="comment">    /**</span>
-<a name="l00259"></a>00259 <span class="comment">     * @return meridian convergence (degrees) for the UTM/UPS projection.</span>
-<a name="l00260"></a>00260 <span class="comment">     **********************************************************************/</span>
-<a name="l00261"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#ad92c8fa1b34bd11dbd908dfffbb836a8">00261</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#ad92c8fa1b34bd11dbd908dfffbb836a8">Convergence</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _gamma; }
-<a name="l00262"></a>00262 <span class="comment"></span>
-<a name="l00263"></a>00263 <span class="comment">    /**</span>
-<a name="l00264"></a>00264 <span class="comment">     * @return scale for the UTM/UPS projection.</span>
-<a name="l00265"></a>00265 <span class="comment">     **********************************************************************/</span>
-<a name="l00266"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#aafd68e75d223b821abcbf20179c7a9e0">00266</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#aafd68e75d223b821abcbf20179c7a9e0">Scale</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _k; }
-<a name="l00267"></a>00267 <span class="comment"></span>
-<a name="l00268"></a>00268 <span class="comment">    /**</span>
-<a name="l00269"></a>00269 <span class="comment">     * @return hemisphere (false means south, true means north).</span>
-<a name="l00270"></a>00270 <span class="comment">     **********************************************************************/</span>
-<a name="l00271"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a5bcf16f97750a6be77f72d50e304a007">00271</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1GeoCoords.html#a5bcf16f97750a6be77f72d50e304a007">Northp</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _northp; }
-<a name="l00272"></a>00272 <span class="comment"></span>
-<a name="l00273"></a>00273 <span class="comment">    /**</span>
-<a name="l00274"></a>00274 <span class="comment">     * @return hemisphere letter N or S.</span>
-<a name="l00275"></a>00275 <span class="comment">     **********************************************************************/</span>
-<a name="l00276"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a0764b9f389a6ce851f9c7c8317ecebb3">00276</a>     <span class="keywordtype">char</span> <a class="code" href="classGeographicLib_1_1GeoCoords.html#a0764b9f389a6ce851f9c7c8317ecebb3">Hemisphere</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _northp ? <span class="charliteral">'N'</span> : <span class="charliteral">'S'</span>; }
-<a name="l00277"></a>00277 <span class="comment"></span>
-<a name="l00278"></a>00278 <span class="comment">    /**</span>
-<a name="l00279"></a>00279 <span class="comment">     * @return the zone corresponding to the input (return 0 for UPS).</span>
-<a name="l00280"></a>00280 <span class="comment">     **********************************************************************/</span>
-<a name="l00281"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a3ce32259b53a9ea9a5346d9e418ad6a5">00281</a>     <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1GeoCoords.html#a3ce32259b53a9ea9a5346d9e418ad6a5">Zone</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _zone; }
-<a name="l00282"></a>00282 <span class="comment"></span>
-<a name="l00283"></a>00283 <span class="comment">    ///@}</span>
-<a name="l00284"></a>00284 <span class="comment"></span><span class="comment"></span>
-<a name="l00285"></a>00285 <span class="comment">    /** \name Setting and querying the alternate zone</span>
-<a name="l00286"></a>00286 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00287"></a>00287 <span class="comment">    ///@{</span>
-<a name="l00288"></a>00288 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00289"></a>00289 <span class="comment">     * Specify alternate zone number.</span>
-<a name="l00290"></a>00290 <span class="comment">     *</span>
-<a name="l00291"></a>00291 <span class="comment">     * @param[in] zone zone number for the alternate representation.</span>
-<a name="l00292"></a>00292 <span class="comment">     *</span>
-<a name="l00293"></a>00293 <span class="comment">     * See UTMUPS::zonespec for more information on the interpretation of \e</span>
-<a name="l00294"></a>00294 <span class="comment">     * zone.  Note that \e zone == UTMUPS::STANDARD (the default) use the</span>
-<a name="l00295"></a>00295 <span class="comment">     * standard UPS or UTM zone, UTMUPS::MATCH does nothing retaining the</span>
-<a name="l00296"></a>00296 <span class="comment">     * existing alternate representation.  Before this is called the alternate</span>
-<a name="l00297"></a>00297 <span class="comment">     * zone is the input zone.</span>
-<a name="l00298"></a>00298 <span class="comment">     **********************************************************************/</span>
-<a name="l00299"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a7782c2d78462bde2ba6277b2b60af8f6">00299</a>     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1GeoCoords.html#a7782c2d78462bde2ba6277b2b60af8f6">SetAltZone</a>(<span class="keywordtype">int</span> zone = <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">UTMUPS::STANDARD</a>)<span class="keyword"> cons [...]
-<a name="l00300"></a>00300       <span class="keywordflow">if</span> (zone == <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a9059a8e3b4721e27869e99ed1ae3d320">UTMUPS::MATCH</a>)
-<a name="l00301"></a>00301         <span class="keywordflow">return</span>;
-<a name="l00302"></a>00302       zone = <a class="code" href="classGeographicLib_1_1UTMUPS.html#a62623c295d1b43318a9fa762c3da94ea">UTMUPS::StandardZone</a>(_lat, _long, zone);
-<a name="l00303"></a>00303       <span class="keywordflow">if</span> (zone == _zone)
-<a name="l00304"></a>00304         CopyToAlt();
-<a name="l00305"></a>00305       <span class="keywordflow">else</span> {
-<a name="l00306"></a>00306         <span class="keywordtype">bool</span> northp;
-<a name="l00307"></a>00307         <a class="code" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">UTMUPS::Forward</a>(_lat, _long,
-<a name="l00308"></a>00308                         _alt_zone, northp,
-<a name="l00309"></a>00309                         _alt_easting, _alt_northing, _alt_gamma, _alt_k,
-<a name="l00310"></a>00310                         zone);
-<a name="l00311"></a>00311       }
-<a name="l00312"></a>00312     }
-<a name="l00313"></a>00313 <span class="comment"></span>
-<a name="l00314"></a>00314 <span class="comment">    /**</span>
-<a name="l00315"></a>00315 <span class="comment">     * @return current alternate zone (return 0 for UPS).</span>
-<a name="l00316"></a>00316 <span class="comment">     **********************************************************************/</span>
-<a name="l00317"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a590600b600395c7914e4854faee08f8e">00317</a>     <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1GeoCoords.html#a590600b600395c7914e4854faee08f8e">AltZone</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _alt_zone; }
-<a name="l00318"></a>00318 <span class="comment"></span>
-<a name="l00319"></a>00319 <span class="comment">    /**</span>
-<a name="l00320"></a>00320 <span class="comment">     * @return easting (meters) for alternate zone.</span>
-<a name="l00321"></a>00321 <span class="comment">     **********************************************************************/</span>
-<a name="l00322"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#af4a5b63a1931973338f71ef2ec4e27fa">00322</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#af4a5b63a1931973338f71ef2ec4e27fa">AltEasting</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _alt_easting; }
-<a name="l00323"></a>00323 <span class="comment"></span>
-<a name="l00324"></a>00324 <span class="comment">    /**</span>
-<a name="l00325"></a>00325 <span class="comment">     * @return northing (meters) for alternate zone.</span>
-<a name="l00326"></a>00326 <span class="comment">     **********************************************************************/</span>
-<a name="l00327"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a2f5a9665712214ad34b061d35ce89659">00327</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#a2f5a9665712214ad34b061d35ce89659">AltNorthing</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _alt_northing; }
-<a name="l00328"></a>00328 <span class="comment"></span>
-<a name="l00329"></a>00329 <span class="comment">    /**</span>
-<a name="l00330"></a>00330 <span class="comment">     * @return meridian convergence (degrees) for alternate zone.</span>
-<a name="l00331"></a>00331 <span class="comment">     **********************************************************************/</span>
-<a name="l00332"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a2b62e667ce462d8102fdfa6ece6ff50e">00332</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#a2b62e667ce462d8102fdfa6ece6ff50e">AltConvergence</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _alt_gamma; }
-<a name="l00333"></a>00333 <span class="comment"></span>
-<a name="l00334"></a>00334 <span class="comment">    /**</span>
-<a name="l00335"></a>00335 <span class="comment">     * @return scale for alternate zone.</span>
-<a name="l00336"></a>00336 <span class="comment">     **********************************************************************/</span>
-<a name="l00337"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a299131cd5383ad0adc5af92c84dc6afe">00337</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#a299131cd5383ad0adc5af92c84dc6afe">AltScale</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _alt_k; }<span class="comment"></span>
-<a name="l00338"></a>00338 <span class="comment">    ///@}</span>
-<a name="l00339"></a>00339 <span class="comment"></span><span class="comment"></span>
-<a name="l00340"></a>00340 <span class="comment">    /** \name String representations of the GeoCoords object</span>
-<a name="l00341"></a>00341 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00342"></a>00342 <span class="comment">    ///@{</span>
-<a name="l00343"></a>00343 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00344"></a>00344 <span class="comment">     * String representation with latitude and longitude as signed decimal</span>
-<a name="l00345"></a>00345 <span class="comment">     * degrees.</span>
-<a name="l00346"></a>00346 <span class="comment">     *</span>
-<a name="l00347"></a>00347 <span class="comment">     * @param[in] prec precision (relative to about 1m).</span>
-<a name="l00348"></a>00348 <span class="comment">     * @param[in] swaplatlong if true give longitude first (default = false)</span>
-<a name="l00349"></a>00349 <span class="comment">     * @return decimal latitude/longitude string representation.</span>
-<a name="l00350"></a>00350 <span class="comment">     *</span>
-<a name="l00351"></a>00351 <span class="comment">     * Precision specifies accuracy of representation as follows:</span>
-<a name="l00352"></a>00352 <span class="comment">     * - prec = -5 (min), 1d</span>
-<a name="l00353"></a>00353 <span class="comment">     * - prec = 0, 10<sup>-5</sup>d (about 1m)</span>
-<a name="l00354"></a>00354 <span class="comment">     * - prec = 3, 10<sup>-8</sup>d</span>
-<a name="l00355"></a>00355 <span class="comment">     * - prec = 9 (max), 10<sup>-14</sup>d</span>
-<a name="l00356"></a>00356 <span class="comment">     **********************************************************************/</span>
-<a name="l00357"></a>00357     std::string GeoRepresentation(<span class="keywordtype">int</span> prec = 0, <span class="keywordtype">bool</span> swaplatlong = <span class="keyword">false</span>) <span class="keyword">const</span>;
-<a name="l00358"></a>00358 <span class="comment"></span>
-<a name="l00359"></a>00359 <span class="comment">    /**</span>
-<a name="l00360"></a>00360 <span class="comment">     * String representation with latitude and longitude as degrees, minutes,</span>
-<a name="l00361"></a>00361 <span class="comment">     * seconds, and hemisphere.</span>
-<a name="l00362"></a>00362 <span class="comment">     *</span>
-<a name="l00363"></a>00363 <span class="comment">     * @param[in] prec precision (relative to about 1m)</span>
-<a name="l00364"></a>00364 <span class="comment">     * @param[in] swaplatlong if true give longitude first (default = false)</span>
-<a name="l00365"></a>00365 <span class="comment">     * @param[in] dmssep if non-null, use as the DMS separator character</span>
-<a name="l00366"></a>00366 <span class="comment">     *   (instead of d, ', &quot; delimiters).</span>
-<a name="l00367"></a>00367 <span class="comment">     * @return DMS latitude/longitude string representation.</span>
-<a name="l00368"></a>00368 <span class="comment">     *</span>
-<a name="l00369"></a>00369 <span class="comment">     * Precision specifies accuracy of representation as follows:</span>
-<a name="l00370"></a>00370 <span class="comment">     * - prec = -5 (min), 1d</span>
-<a name="l00371"></a>00371 <span class="comment">     * - prec = -4, 0.1d</span>
-<a name="l00372"></a>00372 <span class="comment">     * - prec = -3, 1'</span>
-<a name="l00373"></a>00373 <span class="comment">     * - prec = -2, 0.1'</span>
-<a name="l00374"></a>00374 <span class="comment">     * - prec = -1, 1&quot;</span>
-<a name="l00375"></a>00375 <span class="comment">     * - prec = 0, 0.1&quot; (about 3m)</span>
-<a name="l00376"></a>00376 <span class="comment">     * - prec = 1, 0.01&quot;</span>
-<a name="l00377"></a>00377 <span class="comment">     * - prec = 10 (max), 10<sup>-11</sup>&quot;</span>
-<a name="l00378"></a>00378 <span class="comment">     **********************************************************************/</span>
-<a name="l00379"></a>00379     std::string DMSRepresentation(<span class="keywordtype">int</span> prec, <span class="keywordtype">bool</span> swaplatlong, <span class="keywordtype">char</span> dmssep)
-<a name="l00380"></a>00380       <span class="keyword">const</span>;
-<a name="l00381"></a>00381 <span class="comment"></span>
-<a name="l00382"></a>00382 <span class="comment">    /**</span>
-<a name="l00383"></a>00383 <span class="comment">     * String representation with latitude and longitude as degrees, minutes,</span>
-<a name="l00384"></a>00384 <span class="comment">     * seconds, and hemisphere.</span>
-<a name="l00385"></a>00385 <span class="comment">     *</span>
-<a name="l00386"></a>00386 <span class="comment">     * @param[in] prec precision (relative to about 1m)</span>
-<a name="l00387"></a>00387 <span class="comment">     * @param[in] swaplatlong if true give longitude first (default = false)</span>
-<a name="l00388"></a>00388 <span class="comment">     * @return DMS latitude/longitude string representation.</span>
-<a name="l00389"></a>00389 <span class="comment">     *</span>
-<a name="l00390"></a>00390 <span class="comment">     * <b>COMPATIBILITY NOTE:</b> This function calls</span>
-<a name="l00391"></a>00391 <span class="comment">     * DMSRepresentation(int, bool, char) const with a 3rd argument of</span>
-<a name="l00392"></a>00392 <span class="comment">     * char(0).  At some point, DMSRepresentation(int, bool) const and</span>
-<a name="l00393"></a>00393 <span class="comment">     * will be withdrawn and the interface to</span>
-<a name="l00394"></a>00394 <span class="comment">     * DMSRepresentation(int, bool, char) const changed so that its</span>
-<a name="l00395"></a>00395 <span class="comment">     * arguments have default values.  This will preserve source-level</span>
-<a name="l00396"></a>00396 <span class="comment">     * compatibility.</span>
-<a name="l00397"></a>00397 <span class="comment">     **********************************************************************/</span>
-<a name="l00398"></a>00398     std::string DMSRepresentation(<span class="keywordtype">int</span> prec = 0, <span class="keywordtype">bool</span> swaplatlong = <span class="keyword">false</span>) <span class="keyword">const</span>;
-<a name="l00399"></a>00399 <span class="comment"></span>
-<a name="l00400"></a>00400 <span class="comment">    /**</span>
-<a name="l00401"></a>00401 <span class="comment">     * MGRS string.</span>
-<a name="l00402"></a>00402 <span class="comment">     *</span>
-<a name="l00403"></a>00403 <span class="comment">     * @param[in] prec precision (relative to about 1m).</span>
-<a name="l00404"></a>00404 <span class="comment">     * @return MGRS string.</span>
-<a name="l00405"></a>00405 <span class="comment">     *</span>
-<a name="l00406"></a>00406 <span class="comment">     * This gives the coordinates of the enclosing grid square with size given</span>
-<a name="l00407"></a>00407 <span class="comment">     * by the precision.  Thus 38N 444180 3684790 converted to a MGRS</span>
-<a name="l00408"></a>00408 <span class="comment">     * coordinate at precision -2 (100m) is 38SMB441847 and not 38SMB442848.</span>
-<a name="l00409"></a>00409 <span class="comment">     * \e prec specifies the precision of the MGRS string as follows:</span>
-<a name="l00410"></a>00410 <span class="comment">     * - prec = -5 (min), 100km</span>
-<a name="l00411"></a>00411 <span class="comment">     * - prec = -4, 10km</span>
-<a name="l00412"></a>00412 <span class="comment">     * - prec = -3, 1km</span>
-<a name="l00413"></a>00413 <span class="comment">     * - prec = -2, 100m</span>
-<a name="l00414"></a>00414 <span class="comment">     * - prec = -1, 10m</span>
-<a name="l00415"></a>00415 <span class="comment">     * - prec = 0, 1m</span>
-<a name="l00416"></a>00416 <span class="comment">     * - prec = 1, 0.1m</span>
-<a name="l00417"></a>00417 <span class="comment">     * - prec = 6 (max), 1um</span>
-<a name="l00418"></a>00418 <span class="comment">     **********************************************************************/</span>
-<a name="l00419"></a>00419     std::string MGRSRepresentation(<span class="keywordtype">int</span> prec = 0) <span class="keyword">const</span>;
-<a name="l00420"></a>00420 <span class="comment"></span>
-<a name="l00421"></a>00421 <span class="comment">    /**</span>
-<a name="l00422"></a>00422 <span class="comment">     * UTM/UPS string.</span>
-<a name="l00423"></a>00423 <span class="comment">     *</span>
-<a name="l00424"></a>00424 <span class="comment">     * @param[in] prec precision (relative to about 1m)</span>
-<a name="l00425"></a>00425 <span class="comment">     * @return UTM/UPS string representation: zone designator, easting, and</span>
-<a name="l00426"></a>00426 <span class="comment">     *   northing.</span>
-<a name="l00427"></a>00427 <span class="comment">     *</span>
-<a name="l00428"></a>00428 <span class="comment">     * Precision specifies accuracy of representation as follows:</span>
-<a name="l00429"></a>00429 <span class="comment">     * - prec = -5 (min), 100km</span>
-<a name="l00430"></a>00430 <span class="comment">     * - prec = -3, 1km</span>
-<a name="l00431"></a>00431 <span class="comment">     * - prec = 0, 1m</span>
-<a name="l00432"></a>00432 <span class="comment">     * - prec = 3, 1mm</span>
-<a name="l00433"></a>00433 <span class="comment">     * - prec = 6, 1um</span>
-<a name="l00434"></a>00434 <span class="comment">     * - prec = 9 (max), 1nm</span>
-<a name="l00435"></a>00435 <span class="comment">     **********************************************************************/</span>
-<a name="l00436"></a>00436     std::string UTMUPSRepresentation(<span class="keywordtype">int</span> prec = 0) <span class="keyword">const</span>;
-<a name="l00437"></a>00437 <span class="comment"></span>
-<a name="l00438"></a>00438 <span class="comment">    /**</span>
-<a name="l00439"></a>00439 <span class="comment">     * MGRS string for the alternate zone.  See GeoCoords::MGRSRepresentation.</span>
-<a name="l00440"></a>00440 <span class="comment">     **********************************************************************/</span>
-<a name="l00441"></a>00441     std::string AltMGRSRepresentation(<span class="keywordtype">int</span> prec = 0) <span class="keyword">const</span>;
-<a name="l00442"></a>00442 <span class="comment"></span>
-<a name="l00443"></a>00443 <span class="comment">    /**</span>
-<a name="l00444"></a>00444 <span class="comment">     * UTM/UPS string for the alternate zone.  See</span>
-<a name="l00445"></a>00445 <span class="comment">     * GeoCoords::UTMUPSRepresentation.</span>
-<a name="l00446"></a>00446 <span class="comment">     **********************************************************************/</span>
-<a name="l00447"></a>00447     std::string AltUTMUPSRepresentation(<span class="keywordtype">int</span> prec = 0) <span class="keyword">const</span>;<span class="comment"></span>
-<a name="l00448"></a>00448 <span class="comment">    ///@}</span>
-<a name="l00449"></a>00449 <span class="comment"></span><span class="comment"></span>
-<a name="l00450"></a>00450 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00451"></a>00451 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00452"></a>00452 <span class="comment">    ///@{</span>
-<a name="l00453"></a>00453 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00454"></a>00454 <span class="comment">     * @return \e a the equatorial radius of the WGS84 ellipsoid (meters).</span>
-<a name="l00455"></a>00455 <span class="comment">     *</span>
-<a name="l00456"></a>00456 <span class="comment">     * (The WGS84 value is returned because the UTM and UPS projections are</span>
-<a name="l00457"></a>00457 <span class="comment">     * based on this ellipsoid.)</span>
-<a name="l00458"></a>00458 <span class="comment">     **********************************************************************/</span>
-<a name="l00459"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a897e6bbfb71f78b0646045bf47e09696">00459</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#a897e6bbfb71f78b0646045bf47e09696">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib [...]
-<a name="l00460"></a>00460 <span class="comment"></span>
-<a name="l00461"></a>00461 <span class="comment">    /**</span>
-<a name="l00462"></a>00462 <span class="comment">     * @return \e f the flattening of the WGS84 ellipsoid.</span>
-<a name="l00463"></a>00463 <span class="comment">     *</span>
-<a name="l00464"></a>00464 <span class="comment">     * (The WGS84 value is returned because the UTM and UPS projections are</span>
-<a name="l00465"></a>00465 <span class="comment">     * based on this ellipsoid.)</span>
-<a name="l00466"></a>00466 <span class="comment">     **********************************************************************/</span>
-<a name="l00467"></a><a class="code" href="classGeographicLib_1_1GeoCoords.html#a4d892f5e55df8cbb597d1a693da4783c">00467</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeoCoords.html#a4d892f5e55df8cbb597d1a693da4783c">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_ [...]
-<a name="l00468"></a>00468 <span class="comment">    ///@}</span>
-<a name="l00469"></a>00469 <span class="comment"></span><span class="comment"></span>
-<a name="l00470"></a>00470 <span class="comment">    /// \cond SKIP</span>
-<a name="l00471"></a>00471 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00472"></a>00472 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00473"></a>00473 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00474"></a>00474 <span class="comment">     **********************************************************************/</span>
-<a name="l00475"></a>00475     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw()
-<a name="l00476"></a>00476     { <span class="keywordflow">return</span> UTMUPS::InverseFlattening(); }<span class="comment"></span>
-<a name="l00477"></a>00477 <span class="comment">    /// \endcond</span>
-<a name="l00478"></a>00478 <span class="comment"></span>  };
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00481"></a>00481 
-<a name="l00482"></a>00482 <span class="preprocessor">#endif  // GEOGRAPHICLIB_GEOCOORDS_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geocentric_8cpp.html b/doc/html/Geocentric_8cpp.html
deleted file mode 100644
index bc00bfa..0000000
--- a/doc/html/Geocentric_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geocentric.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Geocentric.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Geocentric_8hpp_source.html">GeographicLib/Geocentric.hpp</a>></code><br/>
-</div>
-<p><a href="Geocentric_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geocentric_8cpp.html#a290e33302d7c35b9465d73f33dcb0774">GEOGRAPHICLIB_GEOCENTRIC_CPP</a>   "$Id: b5135e8042dbbbcddfd5894c66b729bf5c43cab9 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Geocentric_8cpp_source.html">Geocentric.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a290e33302d7c35b9465d73f33dcb0774"></a><!-- doxytag: member="Geocentric.cpp::GEOGRAPHICLIB_GEOCENTRIC_CPP" ref="a290e33302d7c35b9465d73f33dcb0774" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEOCENTRIC_CPP   "$Id: b5135e8042dbbbcddfd5894c66b729bf5c43cab9 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8cpp_source.html#l00012">12</a> of file <a class="el" href="Geocentric_8cpp_source.html">Geocentric.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geocentric_8cpp_source.html b/doc/html/Geocentric_8cpp_source.html
deleted file mode 100644
index f82d8bf..0000000
--- a/doc/html/Geocentric_8cpp_source.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geocentric.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geocentric.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Geocentric_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Geocentric.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::Geocentric class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="Geocentric_8cpp.html#a290e33302d7c35b9465d73f33dcb0774">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_GEOCENTRIC_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: b5135e8042dbbbcddfd5894c66b729bf5c43cab9 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Geocentric_8cpp.html#a290e33302d7c35b9465d73f33dcb0774">GEOGRAPHICLIB_GEOCENTRIC_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Geocentric_8hpp.html#a29517663058dd79a39541248f58db55f">GEOGRAPHICLIB_GEOCENTRIC_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a6527d3ab1df78de8277122581dbcdaff">00022</a>   Geocentric::Geocentric(real a, real f)
-<a name="l00023"></a>00023     : _a(a)
-<a name="l00024"></a>00024     , _f(f <= 1 ? f : 1/f)
-<a name="l00025"></a>00025     , _e2(_f * (2 - _f))
-<a name="l00026"></a>00026     , _e2m(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::sq(1 - _f))          <span class="comment">// 1 - _e2</span>
-<a name="l00027"></a>00027     , _e2a(abs(_e2))
-<a name="l00028"></a>00028     , _e4a(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::sq(_e2))
-<a name="l00029"></a>00029     , _maxrad(2 * _a / numeric_limits<real>::epsilon())
-<a name="l00030"></a>00030   {
-<a name="l00031"></a>00031     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00032"></a>00032       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00033"></a>00033     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f) && _f < 1))
-<a name="l00034"></a>00034       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00035"></a>00035   }
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> <a class="code" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>(Constants::WGS84_a<real>(),
-<a name="l00038"></a>00038                                      Constants::WGS84_f<real>());
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040   <span class="keywordtype">void</span> Geocentric::IntForward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h,
-<a name="l00041"></a>00041                               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Z,
-<a name="l00042"></a>00042                               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00043"></a>00043     lon = lon >= 180 ? lon - 360 : (lon < -180 ? lon + 360 : lon);
-<a name="l00044"></a>00044     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00045"></a>00045       phi = lat * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00046"></a>00046       lam = lon * Math::degree<real>(),
-<a name="l00047"></a>00047       sphi = sin(phi),
-<a name="l00048"></a>00048       cphi = abs(lat) == 90 ? 0 : cos(phi),
-<a name="l00049"></a>00049       n = _a/sqrt(1 - _e2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sphi)),
-<a name="l00050"></a>00050       slam = lon == -180 ? 0 : sin(lam),
-<a name="l00051"></a>00051       clam = abs(lon) == 90 ? 0 : cos(lam);
-<a name="l00052"></a>00052     Z = ( _e2m * n + h) * sphi;
-<a name="l00053"></a>00053     X = (n + h) * cphi;
-<a name="l00054"></a>00054     Y = X * slam;
-<a name="l00055"></a>00055     X *= clam;
-<a name="l00056"></a>00056     <span class="keywordflow">if</span> (M)
-<a name="l00057"></a>00057       Rotation(sphi, cphi, slam, clam, M);
-<a name="l00058"></a>00058   }
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060   <span class="keywordtype">void</span> Geocentric::IntReverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Z,
-<a name="l00061"></a>00061                               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& h,
-<a name="l00062"></a>00062                               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00063"></a>00063     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00064"></a>00064       R = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(X, Y),
-<a name="l00065"></a>00065       slam = R ? Y / R : 0,
-<a name="l00066"></a>00066       clam = R ? X / R : 1;
-<a name="l00067"></a>00067     h = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(R, Z);      <span class="comment">// Distance to center of earth</span>
-<a name="l00068"></a>00068     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi, cphi;
-<a name="l00069"></a>00069     <span class="keywordflow">if</span> (h > _maxrad) {
-<a name="l00070"></a>00070       <span class="comment">// We really far away (> 12 million light years); treat the earth as a</span>
-<a name="l00071"></a>00071       <span class="comment">// point and h, above, is an acceptable approximation to the height.</span>
-<a name="l00072"></a>00072       <span class="comment">// This avoids overflow, e.g., in the computation of disc below.  It's</span>
-<a name="l00073"></a>00073       <span class="comment">// possible that h has overflowed to inf; but that's OK.</span>
-<a name="l00074"></a>00074       <span class="comment">//</span>
-<a name="l00075"></a>00075       <span class="comment">// Treat the case X, Y finite, but R overflows to +inf by scaling by 2.</span>
-<a name="l00076"></a>00076       R = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(X/2, Y/2);
-<a name="l00077"></a>00077       slam = R ? (Y/2) / R : 0;
-<a name="l00078"></a>00078       clam = R ? (X/2) / R : 1;
-<a name="l00079"></a>00079       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> H = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(Z/2, R);
-<a name="l00080"></a>00080       sphi = (Z/2) / H;
-<a name="l00081"></a>00081       cphi = R / H;
-<a name="l00082"></a>00082     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (_e4a == 0) {
-<a name="l00083"></a>00083       <span class="comment">// Treat the spherical case.  Dealing with underflow in the general case</span>
-<a name="l00084"></a>00084       <span class="comment">// with _e2 = 0 is difficult.  Origin maps to N pole same as with</span>
-<a name="l00085"></a>00085       <span class="comment">// ellipsoid.</span>
-<a name="l00086"></a>00086       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> H = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(h == 0 ? 1 : Z, R);
-<a name="l00087"></a>00087       sphi = (h == 0 ? 1 : Z) / H;
-<a name="l00088"></a>00088       cphi = R / H;
-<a name="l00089"></a>00089       h -= _a;
-<a name="l00090"></a>00090     } <span class="keywordflow">else</span> {
-<a name="l00091"></a>00091       <span class="comment">// Treat prolate spheroids by swapping R and Z here and by switching</span>
-<a name="l00092"></a>00092       <span class="comment">// the arguments to phi = atan2(...) at the end.</span>
-<a name="l00093"></a>00093       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00094"></a>00094         p = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(R / _a),
-<a name="l00095"></a>00095         q = _e2m * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(Z / _a),
-<a name="l00096"></a>00096         r = (p + q - _e4a) / 6;
-<a name="l00097"></a>00097       <span class="keywordflow">if</span> (_f < 0) swap(p, q);
-<a name="l00098"></a>00098       <span class="keywordflow">if</span> ( !(_e4a * q == 0 && r <= 0) ) {
-<a name="l00099"></a>00099         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00100"></a>00100           <span class="comment">// Avoid possible division by zero when r = 0 by multiplying</span>
-<a name="l00101"></a>00101           <span class="comment">// equations for s and t by r^3 and r, resp.</span>
-<a name="l00102"></a>00102           S = _e4a * p * q / 4, <span class="comment">// S = r^3 * s</span>
-<a name="l00103"></a>00103           r2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(r),
-<a name="l00104"></a>00104           r3 = r * r2,
-<a name="l00105"></a>00105           disc = S * (2 * r3 + S);
-<a name="l00106"></a>00106         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> u = r;
-<a name="l00107"></a>00107         <span class="keywordflow">if</span> (disc >= 0) {
-<a name="l00108"></a>00108           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> T3 = S + r3;
-<a name="l00109"></a>00109           <span class="comment">// Pick the sign on the sqrt to maximize abs(T3).  This minimizes</span>
-<a name="l00110"></a>00110           <span class="comment">// loss of precision due to cancellation.  The result is unchanged</span>
-<a name="l00111"></a>00111           <span class="comment">// because of the way the T is used in definition of u.</span>
-<a name="l00112"></a>00112           T3 += T3 < 0 ? -sqrt(disc) : sqrt(disc); <span class="comment">// T3 = (r * t)^3</span>
-<a name="l00113"></a>00113           <span class="comment">// N.B. cbrt always returns the real root.  cbrt(-8) = -2.</span>
-<a name="l00114"></a>00114           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> T = <a class="code" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">Math::cbrt</a>(T3); <span class="comment">// T = r * t</span>
-<a name="l00115"></a>00115           <span class="comment">// T can be zero; but then r2 / T -> 0.</span>
-<a name="l00116"></a>00116           u += T + (T != 0 ? r2 / T : 0);
-<a name="l00117"></a>00117         } <span class="keywordflow">else</span> {
-<a name="l00118"></a>00118           <span class="comment">// T is complex, but the way u is defined the result is real.</span>
-<a name="l00119"></a>00119           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ang = atan2(sqrt(-disc), -(S + r3));
-<a name="l00120"></a>00120           <span class="comment">// There are three possible cube roots.  We choose the root which</span>
-<a name="l00121"></a>00121           <span class="comment">// avoids cancellation.  Note that disc < 0 implies that r < 0.</span>
-<a name="l00122"></a>00122           u += 2 * r * cos(ang / 3);
-<a name="l00123"></a>00123         }
-<a name="l00124"></a>00124         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00125"></a>00125           v = sqrt(<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(u) + _e4a * q), <span class="comment">// guaranteed positive</span>
-<a name="l00126"></a>00126           <span class="comment">// Avoid loss of accuracy when u < 0.  Underflow doesn't occur in</span>
-<a name="l00127"></a>00127           <span class="comment">// e4 * q / (v - u) because u ~ e^4 when q is small and u < 0.</span>
-<a name="l00128"></a>00128           uv = u < 0 ? _e4a * q / (v - u) : u + v, <span class="comment">// u+v, guaranteed positive</span>
-<a name="l00129"></a>00129           <span class="comment">// Need to guard against w going negative due to roundoff in uv - q.</span>
-<a name="l00130"></a>00130           w = max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), _e2a * (uv - q) / (2 * v)),
-<a name="l00131"></a>00131           <span class="comment">// Rearrange expression for k to avoid loss of accuracy due to</span>
-<a name="l00132"></a>00132           <span class="comment">// subtraction.  Division by 0 not possible because uv > 0, w >= 0.</span>
-<a name="l00133"></a>00133           k = uv / (sqrt(uv + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(w)) + w),
-<a name="l00134"></a>00134           k1 = _f >= 0 ? k : k - _e2,
-<a name="l00135"></a>00135           k2 = _f >= 0 ? k + _e2 : k,
-<a name="l00136"></a>00136           d = k1 * R / k2,
-<a name="l00137"></a>00137           H = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(Z/k1, R/k2);
-<a name="l00138"></a>00138         sphi = (Z/k1) / H;
-<a name="l00139"></a>00139         cphi = (R/k2) / H;
-<a name="l00140"></a>00140         h = (1 - _e2m/k1) * <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(d, Z);
-<a name="l00141"></a>00141       } <span class="keywordflow">else</span> {                  <span class="comment">// e4 * q == 0 && r <= 0</span>
-<a name="l00142"></a>00142         <span class="comment">// This leads to k = 0 (oblate, equatorial plane) and k + e^2 = 0</span>
-<a name="l00143"></a>00143         <span class="comment">// (prolate, rotation axis) and the generation of 0/0 in the general</span>
-<a name="l00144"></a>00144         <span class="comment">// formulas for phi and h.  using the general formula and division by 0</span>
-<a name="l00145"></a>00145         <span class="comment">// in formula for h.  So handle this case by taking the limits:</span>
-<a name="l00146"></a>00146         <span class="comment">// f > 0: z -> 0, k      ->   e2 * sqrt(q)/sqrt(e4 - p)</span>
-<a name="l00147"></a>00147         <span class="comment">// f < 0: R -> 0, k + e2 -> - e2 * sqrt(q)/sqrt(e4 - p)</span>
-<a name="l00148"></a>00148         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00149"></a>00149           zz = sqrt((_f >= 0 ? _e4a - p : p) / _e2m),
-<a name="l00150"></a>00150           xx = sqrt( _f <  0 ? _e4a - p : p        ),
-<a name="l00151"></a>00151           H = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(zz, xx);
-<a name="l00152"></a>00152         sphi = zz / H;
-<a name="l00153"></a>00153         cphi = xx / H;
-<a name="l00154"></a>00154         <span class="keywordflow">if</span> (Z < 0) sphi = -sphi; <span class="comment">// for tiny negative Z (not for prolate)</span>
-<a name="l00155"></a>00155         h = - _a * (_f >= 0 ? _e2m : 1) * H / _e2a;
-<a name="l00156"></a>00156       }
-<a name="l00157"></a>00157     }
-<a name="l00158"></a>00158     lat = atan2(sphi, cphi) / Math::degree<real>();
-<a name="l00159"></a>00159     <span class="comment">// Negative signs return lon in [-180, 180).</span>
-<a name="l00160"></a>00160     lon = -atan2(-slam, clam) / Math::degree<real>();
-<a name="l00161"></a>00161     <span class="keywordflow">if</span> (M)
-<a name="l00162"></a>00162       Rotation(sphi, cphi, slam, clam, M);
-<a name="l00163"></a>00163   }
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165   <span class="keywordtype">void</span> Geocentric::Rotation(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> slam, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> clam,
-<a name="l00166"></a>00166                             <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keywordflow">throw</span>() {
-<a name="l00167"></a>00167     <span class="comment">// This rotation matrix is given by the following quaternion operations</span>
-<a name="l00168"></a>00168     <span class="comment">// qrot(lam, [0,0,1]) * qrot(phi, [0,-1,0]) * [1,1,1,1]/2</span>
-<a name="l00169"></a>00169     <span class="comment">// or</span>
-<a name="l00170"></a>00170     <span class="comment">// qrot(pi/2 + lam, [0,0,1]) * qrot(-pi/2 + phi , [-1,0,0])</span>
-<a name="l00171"></a>00171     <span class="comment">// where</span>
-<a name="l00172"></a>00172     <span class="comment">// qrot(t,v) = [cos(t/2), sin(t/2)*v[1], sin(t/2)*v[2], sin(t/2)*v[3]]</span>
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     <span class="comment">// Local X axis (east) in geocentric coords</span>
-<a name="l00175"></a>00175     M[0] = -slam;        M[3] =  clam;        M[6] = 0;
-<a name="l00176"></a>00176     <span class="comment">// Local Y axis (north) in geocentric coords</span>
-<a name="l00177"></a>00177     M[1] = -clam * sphi; M[4] = -slam * sphi; M[7] = cphi;
-<a name="l00178"></a>00178     <span class="comment">// Local Z axis (up) in geocentric coords</span>
-<a name="l00179"></a>00179     M[2] =  clam * cphi; M[5] =  slam * cphi; M[8] = sphi;
-<a name="l00180"></a>00180   }
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geocentric_8hpp.html b/doc/html/Geocentric_8hpp.html
deleted file mode 100644
index 58daa9f..0000000
--- a/doc/html/Geocentric_8hpp.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geocentric.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Geocentric.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <vector></code><br/>
-<code>#include <algorithm></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="Geocentric_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Geocentric coordinates  <a href="classGeographicLib_1_1Geocentric.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geocentric_8hpp.html#a29517663058dd79a39541248f58db55f">GEOGRAPHICLIB_GEOCENTRIC_HPP</a>   "$Id: e9f709c85e61f60509c492429061cba04350eea8 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a29517663058dd79a39541248f58db55f"></a><!-- doxytag: member="Geocentric.hpp::GEOGRAPHICLIB_GEOCENTRIC_HPP" ref="a29517663058dd79a39541248f58db55f" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEOCENTRIC_HPP   "$Id: e9f709c85e61f60509c492429061cba04350eea8 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00011">11</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geocentric_8hpp_source.html b/doc/html/Geocentric_8hpp_source.html
deleted file mode 100644
index d9f2bc0..0000000
--- a/doc/html/Geocentric_8hpp_source.html
+++ /dev/null
@@ -1,354 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geocentric.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geocentric.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Geocentric_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Geocentric.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::Geocentric class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_GEOCENTRIC_HPP)</span>
-<a name="l00011"></a><a class="code" href="Geocentric_8hpp.html#a29517663058dd79a39541248f58db55f">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_GEOCENTRIC_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: e9f709c85e61f60509c492429061cba04350eea8 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <vector></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <algorithm></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00019"></a>00019 <span class="comment"></span>
-<a name="l00020"></a>00020 <span class="comment">  /**</span>
-<a name="l00021"></a>00021 <span class="comment">   * \brief %Geocentric coordinates</span>
-<a name="l00022"></a>00022 <span class="comment">   *</span>
-<a name="l00023"></a>00023 <span class="comment">   * Convert between geodetic coordinates latitude = \e lat, longitude = \e</span>
-<a name="l00024"></a>00024 <span class="comment">   * lon, height = \e h (measured vertically from the surface of the ellipsoid)</span>
-<a name="l00025"></a>00025 <span class="comment">   * to geocentric coordinates (\e X, \e Y, \e Z).  The origin of geocentric</span>
-<a name="l00026"></a>00026 <span class="comment">   * coordinates is at the center of the earth.  The \e Z axis goes thru the</span>
-<a name="l00027"></a>00027 <span class="comment">   * north pole, \e lat = 90<sup>o</sup>.  The \e X axis goes thru \e lat = 0,</span>
-<a name="l00028"></a>00028 <span class="comment">   * \e lon = 0.  %Geocentric coordinates are also known as earth centered,</span>
-<a name="l00029"></a>00029 <span class="comment">   * earth fixed (ECEF) coordinates.</span>
-<a name="l00030"></a>00030 <span class="comment">   *</span>
-<a name="l00031"></a>00031 <span class="comment">   * The conversion from geographic to geocentric coordinates is</span>
-<a name="l00032"></a>00032 <span class="comment">   * straightforward.  For the reverse transformation we use</span>
-<a name="l00033"></a>00033 <span class="comment">   * - H. Vermeille,</span>
-<a name="l00034"></a>00034 <span class="comment">   *   <a href="http://dx.doi.org/10.1007/s00190-002-0273-6"> Direct</span>
-<a name="l00035"></a>00035 <span class="comment">   *   transformation from geocentric coordinates to geodetic coordinates</a>,</span>
-<a name="l00036"></a>00036 <span class="comment">   *   J. Geodesy 76, 451&ndash;454 (2002).</span>
-<a name="l00037"></a>00037 <span class="comment">   * .</span>
-<a name="l00038"></a>00038 <span class="comment">   * Several changes have been made to ensure that the method returns accurate</span>
-<a name="l00039"></a>00039 <span class="comment">   * results for all finite inputs (even if \e h is infinite).  The changes are</span>
-<a name="l00040"></a>00040 <span class="comment">   * described in Appendix B of</span>
-<a name="l00041"></a>00041 <span class="comment">   * - C. F. F. Karney,</span>
-<a name="l00042"></a>00042 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics</span>
-<a name="l00043"></a>00043 <span class="comment">   *   on an ellipsoid of revolution</a>,</span>
-<a name="l00044"></a>00044 <span class="comment">   *   Feb. 2011;</span>
-<a name="l00045"></a>00045 <span class="comment">   *   preprint</span>
-<a name="l00046"></a>00046 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.</span>
-<a name="l00047"></a>00047 <span class="comment">   * .</span>
-<a name="l00048"></a>00048 <span class="comment">   * See \ref geocentric for more information.</span>
-<a name="l00049"></a>00049 <span class="comment">   *</span>
-<a name="l00050"></a>00050 <span class="comment">   * The errors in these routines are close to round-off.  Specifically, for</span>
-<a name="l00051"></a>00051 <span class="comment">   * points within 5000 km of the surface of the ellipsoid (either inside or</span>
-<a name="l00052"></a>00052 <span class="comment">   * outside the ellipsoid), the error is bounded by 7 nm (7 nanometers) for</span>
-<a name="l00053"></a>00053 <span class="comment">   * the WGS84 ellipsoid.  See \ref geocentric for further information on the</span>
-<a name="l00054"></a>00054 <span class="comment">   * errors.</span>
-<a name="l00055"></a>00055 <span class="comment">   *</span>
-<a name="l00056"></a>00056 <span class="comment">   * Example of use:</span>
-<a name="l00057"></a>00057 <span class="comment">   * \include example-Geocentric.cpp</span>
-<a name="l00058"></a>00058 <span class="comment">   *</span>
-<a name="l00059"></a>00059 <span class="comment">   * <a href="CartConvert.1.html">CartConvert</a> is a command-line utility</span>
-<a name="l00060"></a>00060 <span class="comment">   * providing access to the functionality of Geocentric and LocalCartesian.</span>
-<a name="l00061"></a>00061 <span class="comment">   **********************************************************************/</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> Geocentric {
-<a name="l00064"></a>00064   <span class="keyword">private</span>:
-<a name="l00065"></a>00065     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00066"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a8904c4eadcf94e3803743e8cd9ffbc1c">00066</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">LocalCartesian</a>;
-<a name="l00067"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a7294f6a1cc932f8fd1562a15602e9e86">00067</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a>; <span class="comment">// MagneticCircle uses Rotation</span>
-<a name="l00068"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#af6619ebe4c078705fc49a0d9f950b431">00068</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a>;  <span class="comment">// MagneticModel uses IntForward</span>
-<a name="l00069"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a243c90a7f9bf3f7aa96877a4b0667a89">00069</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a>;  <span class="comment">// GravityCircle uses Rotation</span>
-<a name="l00070"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#ada1db1d9f480d8044753ed869c995519">00070</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a>;   <span class="comment">// GravityModel uses IntForward</span>
-<a name="l00071"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#ae7298549755c5982fe1be124d6631561">00071</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a>;  <span class="comment">// NormalGravity uses IntForward</span>
-<a name="l00072"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#ae0383f6b1ce413d48e258750c3177f21">00072</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>;
-<a name="l00073"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#accac7c5b7843a1e4fb2baf0c83cc24f0">00073</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html" title="Spherical Harmonic series with a correction to the coefficients.">SphericalHarmonic1</a>;
-<a name="l00074"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a3eabc426b6edd718324c791ef3536360">00074</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html" title="Spherical Harmonic series with two corrections to the coefficients.">SphericalHarmonic2</a>;
-<a name="l00075"></a>00075     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> dim_ = 3;
-<a name="l00076"></a>00076     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> dim2_ = dim_ * dim_;
-<a name="l00077"></a>00077     real _a, _f, _e2, _e2m, _e2a, _e4a, _maxrad;
-<a name="l00078"></a>00078     <span class="keyword">static</span> <span class="keywordtype">void</span> Rotation(real sphi, real cphi, real slam, real clam,
-<a name="l00079"></a>00079                          real M[dim2_]) <span class="keywordflow">throw</span>();
-<a name="l00080"></a>00080     <span class="keyword">static</span> <span class="keywordtype">void</span> Rotate(real M[dim2_], real x, real y, real z,
-<a name="l00081"></a>00081                        real& X, real& Y, real& Z) <span class="keywordflow">throw</span>() {
-<a name="l00082"></a>00082       <span class="comment">// Perform [X,Y,Z]^t = M.[x,y,z]^t</span>
-<a name="l00083"></a>00083       <span class="comment">// (typically local cartesian to geocentric)</span>
-<a name="l00084"></a>00084       X = M[0] * x + M[1] * y + M[2] * z;
-<a name="l00085"></a>00085       Y = M[3] * x + M[4] * y + M[5] * z;
-<a name="l00086"></a>00086       Z = M[6] * x + M[7] * y + M[8] * z;
-<a name="l00087"></a>00087     }
-<a name="l00088"></a>00088     <span class="keyword">static</span> <span class="keywordtype">void</span> Unrotate(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Z,
-<a name="l00089"></a>00089                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& z) <span class="keywordflow">throw</span>()  {
-<a name="l00090"></a>00090       <span class="comment">// Perform [x,y,z]^t = M^t.[X,Y,Z]^t</span>
-<a name="l00091"></a>00091       <span class="comment">// (typically geocentric to local cartesian)</span>
-<a name="l00092"></a>00092       x = M[0] * X + M[3] * Y + M[6] * Z;
-<a name="l00093"></a>00093       y = M[1] * X + M[4] * Y + M[7] * Z;
-<a name="l00094"></a>00094       z = M[2] * X + M[5] * Y + M[8] * Z;
-<a name="l00095"></a>00095     }
-<a name="l00096"></a>00096     <span class="keywordtype">void</span> IntForward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b [...]
-<a name="l00097"></a>00097                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00098"></a>00098     <span class="keywordtype">void</span> IntReverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Z, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c [...]
-<a name="l00099"></a>00099                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101   <span class="keyword">public</span>:
-<a name="l00102"></a>00102 <span class="comment"></span>
-<a name="l00103"></a>00103 <span class="comment">    /**</span>
-<a name="l00104"></a>00104 <span class="comment">     * Constructor for a ellipsoid with</span>
-<a name="l00105"></a>00105 <span class="comment">     *</span>
-<a name="l00106"></a>00106 <span class="comment">     * @param[in] a equatorial radius (meters).</span>
-<a name="l00107"></a>00107 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00108"></a>00108 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00109"></a>00109 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00110"></a>00110 <span class="comment">     *</span>
-<a name="l00111"></a>00111 <span class="comment">     * An exception is thrown if either of the axes of the ellipsoid is</span>
-<a name="l00112"></a>00112 <span class="comment">     * non-positive.</span>
-<a name="l00113"></a>00113 <span class="comment">     **********************************************************************/</span>
-<a name="l00114"></a>00114     Geocentric(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f);
-<a name="l00115"></a>00115 <span class="comment"></span>
-<a name="l00116"></a>00116 <span class="comment">    /**</span>
-<a name="l00117"></a>00117 <span class="comment">     * A default constructor (for use by NormalGravity).</span>
-<a name="l00118"></a>00118 <span class="comment">     **********************************************************************/</span>
-<a name="l00119"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#adc92d7214526b4cfcd0b9a0171fc8448">00119</a>     <a class="code" href="classGeographicLib_1_1Geocentric.html#adc92d7214526b4cfcd0b9a0171fc8448">Geocentric</a>() : _a(-1) {}
-<a name="l00120"></a>00120 <span class="comment"></span>
-<a name="l00121"></a>00121 <span class="comment">    /**</span>
-<a name="l00122"></a>00122 <span class="comment">     * Convert from geodetic to geocentric coordinates.</span>
-<a name="l00123"></a>00123 <span class="comment">     *</span>
-<a name="l00124"></a>00124 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00125"></a>00125 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00126"></a>00126 <span class="comment">     * @param[in] h height of point above the ellipsoid (meters).</span>
-<a name="l00127"></a>00127 <span class="comment">     * @param[out] X geocentric coordinate (meters).</span>
-<a name="l00128"></a>00128 <span class="comment">     * @param[out] Y geocentric coordinate (meters).</span>
-<a name="l00129"></a>00129 <span class="comment">     * @param[out] Z geocentric coordinate (meters).</span>
-<a name="l00130"></a>00130 <span class="comment">     *</span>
-<a name="l00131"></a>00131 <span class="comment">     * \e lat should be in the range [-90, 90]; \e lon and \e lon0 should be in</span>
-<a name="l00132"></a>00132 <span class="comment">     * the range [-180, 360].</span>
-<a name="l00133"></a>00133 <span class="comment">     **********************************************************************/</span>
-<a name="l00134"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a65320594cad8c03d28beaa409f3d6fae">00134</a>     <span class="keywordtype">void</span> Forward(real lat, real lon, real h, real& X, real& Y, real& Z)
-<a name="l00135"></a>00135       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00136"></a>00136       <span class="keywordflow">if</span> (Init())
-<a name="l00137"></a>00137         IntForward(lat, lon, h, X, Y, Z, NULL);
-<a name="l00138"></a>00138     }
-<a name="l00139"></a>00139 <span class="comment"></span>
-<a name="l00140"></a>00140 <span class="comment">    /**</span>
-<a name="l00141"></a>00141 <span class="comment">     * Convert from geodetic to geocentric coordinates and return rotation</span>
-<a name="l00142"></a>00142 <span class="comment">     * matrix.</span>
-<a name="l00143"></a>00143 <span class="comment">     *</span>
-<a name="l00144"></a>00144 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00145"></a>00145 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00146"></a>00146 <span class="comment">     * @param[in] h height of point above the ellipsoid (meters).</span>
-<a name="l00147"></a>00147 <span class="comment">     * @param[out] X geocentric coordinate (meters).</span>
-<a name="l00148"></a>00148 <span class="comment">     * @param[out] Y geocentric coordinate (meters).</span>
-<a name="l00149"></a>00149 <span class="comment">     * @param[out] Z geocentric coordinate (meters).</span>
-<a name="l00150"></a>00150 <span class="comment">     * @param[out] M if the length of the vector is 9, fill with the rotation</span>
-<a name="l00151"></a>00151 <span class="comment">     *   matrix in row-major order.</span>
-<a name="l00152"></a>00152 <span class="comment">     *</span>
-<a name="l00153"></a>00153 <span class="comment">     * Let \e v be a unit vector located at (\e lat, \e lon, \e h).  We can</span>
-<a name="l00154"></a>00154 <span class="comment">     * express \e v as \e column vectors in one of two ways</span>
-<a name="l00155"></a>00155 <span class="comment">     * - in east, north, up coordinates (where the components are relative to a</span>
-<a name="l00156"></a>00156 <span class="comment">     *   local coordinate system at (\e lat, \e lon, \e h)); call this</span>
-<a name="l00157"></a>00157 <span class="comment">     *   representation \e v1.</span>
-<a name="l00158"></a>00158 <span class="comment">     * - in geocentric \e X, \e Y, \e Z coordinates; call this representation</span>
-<a name="l00159"></a>00159 <span class="comment">     *   \e v0.</span>
-<a name="l00160"></a>00160 <span class="comment">     * .</span>
-<a name="l00161"></a>00161 <span class="comment">     * Then we have \e v0 = \e M . \e v1.</span>
-<a name="l00162"></a>00162 <span class="comment">     **********************************************************************/</span>
-<a name="l00163"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a54e09e4673ddbf99feeba81036c81345">00163</a>     <span class="keywordtype">void</span> Forward(real lat, real lon, real h, real& X, real& Y, real& Z,
-<a name="l00164"></a>00164                  std::vector<real>& M)
-<a name="l00165"></a>00165       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00166"></a>00166       <span class="keywordflow">if</span> (!Init())
-<a name="l00167"></a>00167         <span class="keywordflow">return</span>;
-<a name="l00168"></a>00168       <span class="keywordflow">if</span> (M.end() == M.begin() + dim2_) {
-<a name="l00169"></a>00169         real t[dim2_];
-<a name="l00170"></a>00170         IntForward(lat, lon, h, X, Y, Z, t);
-<a name="l00171"></a>00171         copy(t, t + dim2_, M.begin());
-<a name="l00172"></a>00172       } <span class="keywordflow">else</span>
-<a name="l00173"></a>00173         IntForward(lat, lon, h, X, Y, Z, NULL);
-<a name="l00174"></a>00174     }
-<a name="l00175"></a>00175 <span class="comment"></span>
-<a name="l00176"></a>00176 <span class="comment">    /**</span>
-<a name="l00177"></a>00177 <span class="comment">     * Convert from geocentric to geodetic to coordinates.</span>
-<a name="l00178"></a>00178 <span class="comment">     *</span>
-<a name="l00179"></a>00179 <span class="comment">     * @param[in] X geocentric coordinate (meters).</span>
-<a name="l00180"></a>00180 <span class="comment">     * @param[in] Y geocentric coordinate (meters).</span>
-<a name="l00181"></a>00181 <span class="comment">     * @param[in] Z geocentric coordinate (meters).</span>
-<a name="l00182"></a>00182 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00183"></a>00183 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00184"></a>00184 <span class="comment">     * @param[out] h height of point above the ellipsoid (meters).</span>
-<a name="l00185"></a>00185 <span class="comment">     *</span>
-<a name="l00186"></a>00186 <span class="comment">     * In general there are multiple solutions and the result which maximizes</span>
-<a name="l00187"></a>00187 <span class="comment">     * \e h is returned.  If there are still multiple solutions with different</span>
-<a name="l00188"></a>00188 <span class="comment">     * latitudes (applies only if \e Z = 0), then the solution with \e lat > 0</span>
-<a name="l00189"></a>00189 <span class="comment">     * is returned.  If there are still multiple solutions with different</span>
-<a name="l00190"></a>00190 <span class="comment">     * longitudes (applies only if \e X = \e Y = 0) then \e lon = 0 is</span>
-<a name="l00191"></a>00191 <span class="comment">     * returned.  The value of \e h returned satisfies \e h >= - \e a (1 -</span>
-<a name="l00192"></a>00192 <span class="comment">     * <i>e</i><sup>2</sup>) / sqrt(1 - <i>e</i><sup>2</sup> sin<sup>2</sup>\e</span>
-<a name="l00193"></a>00193 <span class="comment">     * lat).  The value of \e lon returned is in the range [-180, 180).</span>
-<a name="l00194"></a>00194 <span class="comment">     **********************************************************************/</span>
-<a name="l00195"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a1907735ce8f5f915a14a5f7a8b3adfea">00195</a>     <span class="keywordtype">void</span> Reverse(real X, real Y, real Z, real& lat, real& lon, real& h)
-<a name="l00196"></a>00196       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00197"></a>00197       <span class="keywordflow">if</span> (Init())
-<a name="l00198"></a>00198         IntReverse(X, Y, Z, lat, lon, h, NULL);
-<a name="l00199"></a>00199     }
-<a name="l00200"></a>00200 <span class="comment"></span>
-<a name="l00201"></a>00201 <span class="comment">    /**</span>
-<a name="l00202"></a>00202 <span class="comment">     * Convert from geocentric to geodetic to coordinates.</span>
-<a name="l00203"></a>00203 <span class="comment">     *</span>
-<a name="l00204"></a>00204 <span class="comment">     * @param[in] X geocentric coordinate (meters).</span>
-<a name="l00205"></a>00205 <span class="comment">     * @param[in] Y geocentric coordinate (meters).</span>
-<a name="l00206"></a>00206 <span class="comment">     * @param[in] Z geocentric coordinate (meters).</span>
-<a name="l00207"></a>00207 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00208"></a>00208 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00209"></a>00209 <span class="comment">     * @param[out] h height of point above the ellipsoid (meters).</span>
-<a name="l00210"></a>00210 <span class="comment">     * @param[out] M if the length of the vector is 9, fill with the rotation</span>
-<a name="l00211"></a>00211 <span class="comment">     *   matrix in row-major order.</span>
-<a name="l00212"></a>00212 <span class="comment">     *</span>
-<a name="l00213"></a>00213 <span class="comment">     * Let \e v be a unit vector located at (\e lat, \e lon, \e h).  We can</span>
-<a name="l00214"></a>00214 <span class="comment">     * express \e v as \e column vectors in one of two ways</span>
-<a name="l00215"></a>00215 <span class="comment">     * - in east, north, up coordinates (where the components are relative to a</span>
-<a name="l00216"></a>00216 <span class="comment">     *   local coordinate system at (\e lat, \e lon, \e h)); call this</span>
-<a name="l00217"></a>00217 <span class="comment">     *   representation \e v1.</span>
-<a name="l00218"></a>00218 <span class="comment">     * - in geocentric \e X, \e Y, \e Z coordinates; call this representation</span>
-<a name="l00219"></a>00219 <span class="comment">     *   \e v0.</span>
-<a name="l00220"></a>00220 <span class="comment">     * .</span>
-<a name="l00221"></a>00221 <span class="comment">     * Then we have \e v1 = \e M^T . \e v0, where \e M^T is the transpose of \e</span>
-<a name="l00222"></a>00222 <span class="comment">     * M.</span>
-<a name="l00223"></a>00223 <span class="comment">     **********************************************************************/</span>
-<a name="l00224"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#aeddd854d52064bcb1f068052057edf2c">00224</a>     <span class="keywordtype">void</span> Reverse(real X, real Y, real Z, real& lat, real& lon, real& h,
-<a name="l00225"></a>00225                  std::vector<real>& M)
-<a name="l00226"></a>00226       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00227"></a>00227       <span class="keywordflow">if</span> (!Init())
-<a name="l00228"></a>00228         <span class="keywordflow">return</span>;
-<a name="l00229"></a>00229       <span class="keywordflow">if</span> (M.end() == M.begin() + dim2_) {
-<a name="l00230"></a>00230         real t[dim2_];
-<a name="l00231"></a>00231         IntReverse(X, Y, Z, lat, lon, h, t);
-<a name="l00232"></a>00232         copy(t, t + dim2_, M.begin());
-<a name="l00233"></a>00233       } <span class="keywordflow">else</span>
-<a name="l00234"></a>00234         IntReverse(X, Y, Z, lat, lon, h, NULL);
-<a name="l00235"></a>00235     }
-<a name="l00236"></a>00236 <span class="comment"></span>
-<a name="l00237"></a>00237 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00238"></a>00238 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00239"></a>00239 <span class="comment">    ///@{</span>
-<a name="l00240"></a>00240 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00241"></a>00241 <span class="comment">     * @return true if the object has been initialized.</span>
-<a name="l00242"></a>00242 <span class="comment">     **********************************************************************/</span>
-<a name="l00243"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a7d2e34d1be6009caf4576c6cc884a589">00243</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Geocentric.html#a7d2e34d1be6009caf4576c6cc884a589">Init</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a > 0; }<span class="comment"></span>
-<a name="l00244"></a>00244 <span class="comment">    /**</span>
-<a name="l00245"></a>00245 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00246"></a>00246 <span class="comment">     *   the value used in the constructor.</span>
-<a name="l00247"></a>00247 <span class="comment">     **********************************************************************/</span>
-<a name="l00248"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#ae20c62c298f1724412fec581285cf269">00248</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MajorRadius() <span class="keyword">const</span> throw()
-<a name="l00249"></a>00249     { <span class="keywordflow">return</span> Init() ? _a : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00250"></a>00250 <span class="comment"></span>
-<a name="l00251"></a>00251 <span class="comment">    /**</span>
-<a name="l00252"></a>00252 <span class="comment">     * @return \e f the  flattening of the ellipsoid.  This is the</span>
-<a name="l00253"></a>00253 <span class="comment">     *   value used in the constructor.</span>
-<a name="l00254"></a>00254 <span class="comment">     **********************************************************************/</span>
-<a name="l00255"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a30ba434524b5836c9852d454e61d795f">00255</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Flattening() <span class="keyword">const</span> throw()
-<a name="l00256"></a>00256     { <span class="keywordflow">return</span> Init() ? _f : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }<span class="comment"></span>
-<a name="l00257"></a>00257 <span class="comment">    ///@}</span>
-<a name="l00258"></a>00258 <span class="comment"></span><span class="comment"></span>
-<a name="l00259"></a>00259 <span class="comment">    /// \cond SKIP</span>
-<a name="l00260"></a>00260 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00261"></a>00261 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00262"></a>00262 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00263"></a>00263 <span class="comment">     **********************************************************************/</span>
-<a name="l00264"></a>00264     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw()
-<a name="l00265"></a>00265     { <span class="keywordflow">return</span> Init() ? 1/_f : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }<span class="comment"></span>
-<a name="l00266"></a>00266 <span class="comment">    /// \endcond</span>
-<a name="l00267"></a>00267 <span class="comment"></span><span class="comment"></span>
-<a name="l00268"></a>00268 <span class="comment">    /**</span>
-<a name="l00269"></a>00269 <span class="comment">     * A global instantiation of Geocentric with the parameters for the WGS84</span>
-<a name="l00270"></a>00270 <span class="comment">     * ellipsoid.</span>
-<a name="l00271"></a>00271 <span class="comment">     **********************************************************************/</span>
-<a name="l00272"></a><a class="code" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">00272</a>     <span class="keyword">static</span> <span class="keyword">const</span> Geocentric <a class="code" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">WGS84</a>;
-<a name="l00273"></a>00273   };
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 <span class="preprocessor">#endif  // GEOGRAPHICLIB_GEOCENTRIC_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geod.1.html b/doc/html/Geod.1.html
deleted file mode 100644
index e19892e..0000000
--- a/doc/html/Geod.1.html
+++ /dev/null
@@ -1,316 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>Geod -- perform geodesic calculations</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#input">INPUT</a></li>
-	<li><a href="#auxiliary_sphere">AUXILIARY SPHERE</a></li>
-	<li><a href="#additional_quantities">ADDITIONAL QUANTITIES</a></li>
-	<li><a href="#precision">PRECISION</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>Geod -- perform geodesic calculations</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>Geod</strong> [ <strong>-i</strong> | <strong>-l</strong> <em>lat1</em> <em>lon1</em> <em>azi1</em> ] [ <strong>-a</strong> ] [ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>-d</strong> | <strong>-:</strong> ] [ <strong>-b</strong> ] [ <strong>-f</strong> ] [ <strong>-p</strong> <em>prec</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>The shortest path between two points on the ellipsoid at (<em>lat1</em>,
-<em>lon1</em>) and (<em>lat2</em>, <em>lon2</em>) is called the geodesic.  Its length is
-<em>s12</em> and the geodesic from point 1 to point 2 has azimuths <em>azi1</em> and
-<em>azi2</em> at the two end points.</p>
-<p><strong>Geod</strong> operates in one of three modes:</p>
-<ol>
-<li>
-<p>By default, <strong>Geod</strong> accepts lines on the standard input containing
-<em>lat1</em> <em>lon1</em> <em>azi1</em> <em>s12</em> and prints <em>lat2</em> <em>lon2</em> <em>azi2</em>
-on standard output.  This is the direct geodesic calculation.</p>
-</li>
-<li>
-<p>Command line arguments <strong>-l</strong> <em>lat1</em> <em>lon1</em> <em>azi1</em> specify a geodesic line.
-<strong>Geod</strong> then accepts a sequence of <em>s12</em> values (one per line) on
-standard input and prints <em>lat2</em> <em>lon2</em> <em>azi2</em> for each.  This
-generates a sequence of points on a single geodesic.</p>
-</li>
-<li>
-<p>With the <strong>-i</strong> command line argument, <strong>Geod</strong> performs the inverse
-geodesic calculation.  It reads lines containing <em>lat1</em> <em>lon1</em> <em>lat2</em>
-<em>lon2</em> and prints the corresponding values of <em>azi1</em> <em>azi2</em> <em>s12</em>.</p>
-</li>
-</ol>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="i" class="item"><strong>-i</strong></a></strong></dt>
-
-<dd>
-<p>perform an inverse geodesic calculation (see 3 above).</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
-
-<dd>
-<p>line mode (see 2 above); generate a sequence of points along the
-geodesic specified by <em>lat1</em> <em>lon1</em> <em>azi1</em>.</p>
-</dd>
-<dt><strong><a name="a" class="item"><strong>-a</strong></a></strong></dt>
-
-<dd>
-<p>arc mode; on input <em>and</em> output <em>s12</em> is replaced by <em>a12</em> the arc
-length (in degrees) on the auxiliary sphere.  See <a href="#auxiliary_sphere">AUXILIARY SPHERE</a>.</p>
-</dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
-
-<dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
-
-<dd>
-<p>output angles as degrees, minutes, seconds instead of decimal degrees.</p>
-</dd>
-<dt><strong><a name="__" class="item"><strong>-:</strong></a></strong></dt>
-
-<dd>
-<p>like <strong>-d</strong>, except use : as a separator instead of the d, ', and "
-delimiters.</p>
-</dd>
-<dt><strong><a name="b" class="item"><strong>-b</strong></a></strong></dt>
-
-<dd>
-<p>report the <em>back</em> azimuth at point 2 instead of the forward azimuth.</p>
-</dd>
-<dt><strong><a name="f" class="item"><strong>-f</strong></a></strong></dt>
-
-<dd>
-<p>full output; each line of output consists of 12 quantities: <em>lat1</em>
-<em>lon1</em> <em>azi1</em> <em>lat2</em> <em>lon2</em> <em>azi2</em> <em>s12</em> <em>a12</em> <em>m12</em> <em>M12</em>
-<em>M21</em> <em>S12</em>.  <em>a12</em> is described in <a href="#auxiliary_sphere">AUXILIARY SPHERE</a>.  The four
-quantities <em>m12</em>, <em>M12</em>, <em>M21</em>, and <em>S12</em> are described in
-<a href="#additional_quantities">ADDITIONAL QUANTITIES</a>.</p>
-</dd>
-<dt><strong><a name="p" class="item"><strong>-p</strong></a></strong></dt>
-
-<dd>
-<p>set the output precision to <em>prec</em> (default 3); <em>prec</em> is the
-precision relative to 1 m.  See <a href="#precision">PRECISION</a>.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="input">INPUT</a></h1>
-<p><strong>Geod</strong> measures all angles in degrees and all lengths (<em>s12</em>) in
-meters.  On input angles (latitude, longitude, azimuth, arc length) can
-be as decimal degrees or degrees (d), minutes ('), seconds (").  A
-decimal point can only appear in the least significant component and the
-designator (d, ', or ") for this component is optional; thus <code>40d30</code>,
-<code>40d30'</code>, <code>40.5d</code>, and <code>40.5</code> are all equivalent.  By default,
-latitude precedes longitude for each point; however on input either may
-be given first by appending (or prepending) <em>N</em> or <em>S</em> to the latitude
-and <em>E</em> or <em>W</em> to the longitude.  Azimuths are measured clockwise from
-north; however this may be overridden with <em>E</em> or <em>W</em>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="auxiliary_sphere">AUXILIARY SPHERE</a></h1>
-<p>Geodesics on the ellipsoid can be transferred to the <em>auxiliary sphere</em>
-on which the distance is measured in terms of the arc length <em>a12</em>
-(measured in degrees) instead of <em>s12</em>.  In terms of <em>a12</em>, 180
-degrees is the distance from one equator crossing to the next or from
-the minimum latitude to the maximum latitude.  Geodesics with <em>a12</em>
-> 180 degrees do not correspond to shortest paths.  With the <strong>-a</strong>
-flag, <em>s12</em> (on both input and output) is replaced by <em>a12</em>.  The
-<strong>-a</strong> flag does <em>not</em> affect the full output given by the <strong>-f</strong> flag
-(which always includes both <em>s12</em> and <em>a12</em>).</p>
-<p>
-</p>
-<hr />
-<h1><a name="additional_quantities">ADDITIONAL QUANTITIES</a></h1>
-<p>The <strong>-f</strong> flag reports four additional quantities.</p>
-<p>The reduced length of the geodesic, <em>m12</em>, is defined such that if the
-initial azimuth is perturbed by d<em>azi1</em> (radians) then the second point
-is displaced by <em>m12</em> d<em>azi1</em> in the direction perpendicular to the
-geodesic.  <em>m12</em> is given in meters.  On a curved surface the
-reduced length obeys a symmetry relation, <em>m12</em> + <em>m21</em> = 0.  On a
-flat surface, we have <em>m12</em> = <em>s12</em>.</p>
-<p><em>M12</em> and <em>M21</em> are geodesic scales.  If two geodesics are parallel at
-point 1 and separated by a small distance <em>dt</em>, then they are separated
-by a distance <em>M12</em> <em>dt</em> at point 2.  <em>M21</em> is defined similarly
-(with the geodesics being parallel to one another at point 2).  <em>M12</em>
-and <em>M21</em> are dimensionless quantities.  On a flat surface, we have
-<em>M12</em> = <em>M21</em> = 1.</p>
-<p>If points 1, 2, and 3 lie on a single geodesic, then the following
-addition rules hold,
-<em>m13</em> = <em>m12</em> <em>M23</em> + <em>m23</em> <em>M21</em>,
-<em>M13</em> = <em>M12</em> <em>M23</em> - (1 - <em>M12</em> <em>M21</em>) <em>m23</em> / <em>m12</em>, and
-<em>M31</em> = <em>M32</em> <em>M21</em> - (1 - <em>M23</em> <em>M32</em>) <em>m12</em> / <em>m23</em>.</p>
-<p>Finally, <em>S12</em> is the area between the geodesic from point 1 to point 2
-and the equator; i.e., it is the area, measured counter-clockwise, of
-the quadrilateral with corners (<em>lat1</em>,<em>lon1</em>), (0,<em>lon1</em>),
-(0,<em>lon2</em>), and (<em>lat2</em>,<em>lon2</em>).  It is given in meters^2.</p>
-<p>
-</p>
-<hr />
-<h1><a name="precision">PRECISION</a></h1>
-<p><em>prec</em> gives precision of the output with <em>prec</em> = 0 giving 1 m
-precision, <em>prec</em> = 3 giving 1 mm precision, etc.  <em>prec</em> is the
-number of digits after the decimal point for lengths.  For decimal
-degrees, the number of digits after the decimal point is 5 + <em>prec</em>.
-For DMS (degree, minute, seconds) output, the number of digits after the
-decimal point in the seconds component is 1 + <em>prec</em>.  The minimum
-value of <em>prec</em> is 0 and the maximum is 10.</p>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>Geod</strong> to return an exit code of 1.
-However, an error does not cause <strong>Geod</strong> to terminate; following lines
-will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<p>Route from JFK Airport to Singapore Changi Airport:</p>
-<pre>
-   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
-   Geod -i -: -p 0</pre>
-<pre>
-   003:18:29.9 177:29:09.2 15347628</pre>
-<p>Waypoints on the route at intervals of 2000km:</p>
-<pre>
-   for ((i = 0; i <= 16; i += 2)); do echo ${i}000000;done |
-   Geod -l 40:38:23N 073:46:44W 003:18:29.9 -: -p 0</pre>
-<pre>
-   40:38:23.0N 073:46:44.0W 003:18:29.9
-   58:34:45.1N 071:49:36.7W 004:48:48.8
-   76:22:28.4N 065:32:17.8W 010:41:38.4
-   84:50:28.0N 075:04:39.2E 150:55:00.9
-   67:26:20.3N 098:00:51.2E 173:27:20.3
-   49:33:03.2N 101:06:52.6E 176:07:54.3
-   31:34:16.5N 102:30:46.3E 177:03:08.4
-   13:31:56.0N 103:26:50.7E 177:24:55.0
-   04:32:05.7S 104:14:48.7E 177:28:43.6</pre>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The algorithms are described in C. F. F. Karney, <em>Geodesics on an
-ellipsoid of revolution</em>, Feb. 2011; preprint
-<a href="http://arxiv.org/abs/1102.1215">http://arxiv.org/abs/1102.1215</a>.  See also C. F. F. Karney,
-<em>Algorithms for geodesics</em>, Sept. 2011; preprint
-<a href="http://arxiv.org/abs/1109.4448">http://arxiv.org/abs/1109.4448</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>Geod</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>Geod</strong> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in
-2009-03.</p>
-
-</body>
-
-</html>
diff --git a/doc/html/Geod_8cpp.html b/doc/html/Geod_8cpp.html
deleted file mode 100644
index f9266e7..0000000
--- a/doc/html/Geod_8cpp.html
+++ /dev/null
@@ -1,345 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geod.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#typedef-members">Typedefs</a> |
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">Geod.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for geodesic calculations.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="Geodesic_8hpp_source.html">GeographicLib/Geodesic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="GeodesicLine_8hpp_source.html">GeographicLib/GeodesicLine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include "Geod.usage"</code><br/>
-</div>
-<p><a href="Geod_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">GeographicLib::Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a></td></tr>
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="Geod_8cpp.html#a8c3a2a4c039b4d0118416afd97a45fcf">LatLonString</a> (<a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, int prec, bool dms, char dmssep)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="Geod_8cpp.html#adeb84b4732b410c9fdccf799037ef245">AzimuthString</a> (<a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> azi, int prec, bool dms, char dmssep)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="Geod_8cpp.html#a600021136749afe8d757335563b5b544">DistanceStrings</a> (<a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> s12, <a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a12, bool full, bool arcmode, int prec, bool dms)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="Geod_8cpp.html#a01ac56deedd203bd66c8c7328654b7e9">ReadDistance</a> (const std::string &s, bool arcmode)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="Geod_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for geodesic calculations. </p>
-<p>Copyright (c) Charles Karney (2009-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o Geod \ <a class="el" href="Geod_8cpp.html" title="Command line utility for geodesic calculations.">Geod.cpp</a> \ ../src/DMS.cpp \ ../src/Geodesic.cpp \ ../src/GeodesicLine.cpp</p>
-<p>See the <a href="Geod.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="Geod_8cpp_source.html">Geod.cpp</a>.</p>
-</div><hr/><h2>Typedef Documentation</h2>
-<a class="anchor" id="a5caf95d46b184d9ca1d3764b3781b3c9"></a><!-- doxytag: member="Geod.cpp::real" ref="a5caf95d46b184d9ca1d3764b3781b3c9" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">GeographicLib::Math::real</a> <a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geod_8cpp_source.html#l00032">32</a> of file <a class="el" href="Geod_8cpp_source.html">Geod.cpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a8c3a2a4c039b4d0118416afd97a45fcf"></a><!-- doxytag: member="Geod.cpp::LatLonString" ref="a8c3a2a4c039b4d0118416afd97a45fcf" args="(real lat, real lon, int prec, bool dms, char dmssep)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string LatLonString </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>dms</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char </td>
-          <td class="paramname"><em>dmssep</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geod_8cpp_source.html#l00034">34</a> of file <a class="el" href="Geod_8cpp_source.html">Geod.cpp</a>.</p>
-
-<p>References <a class="el" href="DMS_8cpp_source.html#l00261">GeographicLib::DMS::Encode()</a>, <a class="el" href="DMS_8hpp_source.html#l00073">GeographicLib::DMS::LATITUDE</a>, <a class="el" href="DMS_8hpp_source.html#l00078">GeographicLib::DMS::LONGITUDE</a>, and <a class="el" href="DMS_8hpp_source.html#l00089">GeographicLib::DMS::NUMBER</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00067">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adeb84b4732b410c9fdccf799037ef245"></a><!-- doxytag: member="Geod.cpp::AzimuthString" ref="adeb84b4732b410c9fdccf799037ef245" args="(real azi, int prec, bool dms, char dmssep)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string AzimuthString </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> </td>
-          <td class="paramname"><em>azi</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>dms</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char </td>
-          <td class="paramname"><em>dmssep</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geod_8cpp_source.html#l00043">43</a> of file <a class="el" href="Geod_8cpp_source.html">Geod.cpp</a>.</p>
-
-<p>References <a class="el" href="DMS_8cpp_source.html#l00261">GeographicLib::DMS::Encode()</a>, <a class="el" href="DMS_8hpp_source.html#l00084">GeographicLib::DMS::AZIMUTH</a>, and <a class="el" href="DMS_8hpp_source.html#l00089">GeographicLib::DMS::NUMBER</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00067">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a600021136749afe8d757335563b5b544"></a><!-- doxytag: member="Geod.cpp::DistanceStrings" ref="a600021136749afe8d757335563b5b544" args="(real s12, real a12, bool full, bool arcmode, int prec, bool dms)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string DistanceStrings </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>full</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>arcmode</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>dms</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geod_8cpp_source.html#l00049">49</a> of file <a class="el" href="Geod_8cpp_source.html">Geod.cpp</a>.</p>
-
-<p>References <a class="el" href="DMS_8cpp_source.html#l00261">GeographicLib::DMS::Encode()</a>, <a class="el" href="DMS_8hpp_source.html#l00068">GeographicLib::DMS::NONE</a>, and <a class="el" href="DMS_8hpp_source.html#l00089">GeographicLib::DMS::NUMBER</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00067">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a01ac56deedd203bd66c8c7328654b7e9"></a><!-- doxytag: member="Geod.cpp::ReadDistance" ref="a01ac56deedd203bd66c8c7328654b7e9" args="(const std::string &s, bool arcmode)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ReadDistance </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>s</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>arcmode</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geod_8cpp_source.html#l00062">62</a> of file <a class="el" href="Geod_8cpp_source.html">Geod.cpp</a>.</p>
-
-<p>References <a class="el" href="DMS_8cpp_source.html#l00240">GeographicLib::DMS::DecodeAngle()</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00067">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="Geod.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geod_8cpp_source.html#l00067">67</a> of file <a class="el" href="Geod_8cpp_source.html">Geod.cpp</a>.</p>
-
-<p>References <a class="el" href="DMS_8cpp_source.html#l00207">GeographicLib::DMS::DecodeLatLon()</a>, <a class="el" href="DMS_8cpp_source.html#l00249">GeographicLib::DMS::DecodeAzimuth()</a>, <a class="el" href="Geodesic_8cpp_source.html#l00105">GeographicLib::Geodesic::Line()</a>, <a class="el" href="Geodesic_8hpp_source.html#l00635">GeographicLib::Geodesic::Inverse()</a>, <a class="el" href="Geod_8cpp_source.html#l00034">LatLonString()</a>, <a class="el" href="Geod_8cpp_source.html#l0 [...]
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geod_8cpp_source.html b/doc/html/Geod_8cpp_source.html
deleted file mode 100644
index 824c9fb..0000000
--- a/doc/html/Geod_8cpp_source.html
+++ /dev/null
@@ -1,383 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geod.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geod.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Geod_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Geod.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for geodesic calculations</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o Geod \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       Geod.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/Geodesic.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/GeodesicLine.cpp</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * See the <a href="Geod.1.html">man page</a> for usage</span>
-<a name="l00017"></a>00017 <span class="comment"> * information.</span>
-<a name="l00018"></a>00018 <span class="comment"> **********************************************************************/</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="preprocessor">#include <iostream></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#include <sstream></span>
-<a name="l00022"></a>00022 <span class="preprocessor">#include <string></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include <sstream></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <fstream></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <<a class="code" href="GeodesicLine_8hpp.html" title="Header for GeographicLib::GeodesicLine class.">GeographicLib/GeodesicLine.hpp</a>></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#include "Geod.usage"</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">00032</a> <span class="keyword">typedef</span> GeographicLib<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::Math::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00033"></a>00033 
-<a name="l00034"></a><a class="code" href="Geod_8cpp.html#a8c3a2a4c039b4d0118416afd97a45fcf">00034</a> std::string <a class="code" href="Geod_8cpp.html#a8c3a2a4c039b4d0118416afd97a45fcf">LatLonString</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <span class="keywordtype">int</span> prec, <span class="keywordtype">bool</span> dms, <span class="keywordtype">char [...]
-<a name="l00035"></a>00035   <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00036"></a>00036   <span class="keywordflow">return</span> dms ?
-<a name="l00037"></a>00037     <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(lat, prec + 5, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">DMS::LATITUDE</a>, dmssep) + <span class="stringliteral">" "</span> +
-<a name="l00038"></a>00038     <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(lon, prec + 5, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">DMS::LONGITUDE</a>, dmssep) :
-<a name="l00039"></a>00039     <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(lat, prec + 5, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) + <span class="stringliteral">" "</span> +
-<a name="l00040"></a>00040     <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(lon, prec + 5, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>);
-<a name="l00041"></a>00041 }
-<a name="l00042"></a>00042 
-<a name="l00043"></a><a class="code" href="Geod_8cpp.html#adeb84b4732b410c9fdccf799037ef245">00043</a> std::string <a class="code" href="Geod_8cpp.html#adeb84b4732b410c9fdccf799037ef245">AzimuthString</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> azi, <span class="keywordtype">int</span> prec, <span class="keywordtype">bool</span> dms, <span class="keywordtype">char</span> dmssep) {
-<a name="l00044"></a>00044   <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00045"></a>00045   <span class="keywordflow">return</span> dms ? <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(azi, prec + 5, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24">DMS::AZIMUTH</a>, dmssep) :
-<a name="l00046"></a>00046     <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(azi >= 180 ? azi - 360 : azi, prec + 5, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>);
-<a name="l00047"></a>00047 }
-<a name="l00048"></a>00048 
-<a name="l00049"></a><a class="code" href="Geod_8cpp.html#a600021136749afe8d757335563b5b544">00049</a> std::string <a class="code" href="Geod_8cpp.html#a600021136749afe8d757335563b5b544">DistanceStrings</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> s12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a12,
-<a name="l00050"></a>00050                             <span class="keywordtype">bool</span> full, <span class="keywordtype">bool</span> arcmode, <span class="keywordtype">int</span> prec, <span class="keywordtype">bool</span> dms) {
-<a name="l00051"></a>00051   <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00052"></a>00052   std::string s;
-<a name="l00053"></a>00053   <span class="keywordflow">if</span> (full || !arcmode)
-<a name="l00054"></a>00054     s += <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(s12, prec);
-<a name="l00055"></a>00055   <span class="keywordflow">if</span> (full)
-<a name="l00056"></a>00056     s += <span class="stringliteral">" "</span>;
-<a name="l00057"></a>00057   <span class="keywordflow">if</span> (full || arcmode)
-<a name="l00058"></a>00058     s += <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(a12, prec + 5, dms ? <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1">DMS::NONE</a> : <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>);
-<a name="l00059"></a>00059   <span class="keywordflow">return</span> s;
-<a name="l00060"></a>00060 }
-<a name="l00061"></a>00061 
-<a name="l00062"></a><a class="code" href="Geod_8cpp.html#a01ac56deedd203bd66c8c7328654b7e9">00062</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> <a class="code" href="Geod_8cpp.html#a01ac56deedd203bd66c8c7328654b7e9">ReadDistance</a>(<span class="keyword">const</span> std::string& s, <span class="keywordtype">bool</span> arcmode) {
-<a name="l00063"></a>00063   <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00064"></a>00064   <span class="keywordflow">return</span> arcmode ? <a class="code" href="classGeographicLib_1_1DMS.html#a868248d72f6b0bf2dae18a15d741ac43">DMS::DecodeAngle</a>(s) : <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(s);
-<a name="l00065"></a>00065 }
-<a name="l00066"></a>00066 
-<a name="l00067"></a><a class="code" href="Geod_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00067</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00068"></a>00068   <span class="keywordflow">try</span> {
-<a name="l00069"></a>00069     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00070"></a>00070     <span class="keywordtype">bool</span> linecalc = <span class="keyword">false</span>, inverse = <span class="keyword">false</span>, arcmode = <span class="keyword">false</span>,
-<a name="l00071"></a>00071       dms = <span class="keyword">false</span>, full = <span class="keyword">false</span>;
-<a name="l00072"></a>00072     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00073"></a>00073       a = <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<real>(),
-<a name="l00074"></a>00074       f = Constants::WGS84_f<real>();
-<a name="l00075"></a>00075     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat1, lon1, azi1, lat2, lon2, azi2, s12, m12, a12, M12, M21, S12;
-<a name="l00076"></a>00076     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> azi2sense = 0;
-<a name="l00077"></a>00077     <span class="keywordtype">int</span> prec = 3;
-<a name="l00078"></a>00078     std::string istring, ifile, ofile, cdelim;
-<a name="l00079"></a>00079     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>, dmssep = char(0);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00082"></a>00082       std::string arg(argv[m]);
-<a name="l00083"></a>00083       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-i"</span>) {
-<a name="l00084"></a>00084         inverse = <span class="keyword">true</span>;
-<a name="l00085"></a>00085         linecalc = <span class="keyword">false</span>;
-<a name="l00086"></a>00086       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-a"</span>)
-<a name="l00087"></a>00087         arcmode = <span class="keyword">true</span>;
-<a name="l00088"></a>00088       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-l"</span>) {
-<a name="l00089"></a>00089         inverse = <span class="keyword">false</span>;
-<a name="l00090"></a>00090         linecalc = <span class="keyword">true</span>;
-<a name="l00091"></a>00091         <span class="keywordflow">if</span> (m + 3 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00092"></a>00092         <span class="keywordflow">try</span> {
-<a name="l00093"></a>00093           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(std::string(argv[m + 1]), std::string(argv[m + 2]),
-<a name="l00094"></a>00094                             lat1, lon1);
-<a name="l00095"></a>00095           azi1 = <a class="code" href="classGeographicLib_1_1DMS.html#a0512cc1275e089138e1550efbee421d9">DMS::DecodeAzimuth</a>(std::string(argv[m + 3]));
-<a name="l00096"></a>00096         }
-<a name="l00097"></a>00097         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00098"></a>00098           std::cerr << <span class="stringliteral">"Error decoding arguments of -l: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00099"></a>00099           <span class="keywordflow">return</span> 1;
-<a name="l00100"></a>00100         }
-<a name="l00101"></a>00101         m += 3;
-<a name="l00102"></a>00102       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-e"</span>) {
-<a name="l00103"></a>00103         <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00104"></a>00104         <span class="keywordflow">try</span> {
-<a name="l00105"></a>00105           a = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m + 1]));
-<a name="l00106"></a>00106           f = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(std::string(argv[m + 2]));
-<a name="l00107"></a>00107         }
-<a name="l00108"></a>00108         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00109"></a>00109           std::cerr << <span class="stringliteral">"Error decoding arguments of -e: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00110"></a>00110           <span class="keywordflow">return</span> 1;
-<a name="l00111"></a>00111         }
-<a name="l00112"></a>00112         m += 2;
-<a name="l00113"></a>00113       }
-<a name="l00114"></a>00114       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-d"</span>) {
-<a name="l00115"></a>00115         dms = <span class="keyword">true</span>;
-<a name="l00116"></a>00116         dmssep = <span class="charliteral">'\0'</span>;
-<a name="l00117"></a>00117       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-:"</span>) {
-<a name="l00118"></a>00118         dms = <span class="keyword">true</span>;
-<a name="l00119"></a>00119         dmssep = <span class="charliteral">':'</span>;
-<a name="l00120"></a>00120       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-b"</span>)
-<a name="l00121"></a>00121         azi2sense = 180;
-<a name="l00122"></a>00122       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-f"</span>)
-<a name="l00123"></a>00123         full = <span class="keyword">true</span>;
-<a name="l00124"></a>00124       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-p"</span>) {
-<a name="l00125"></a>00125         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00126"></a>00126         <span class="keywordflow">try</span> {
-<a name="l00127"></a>00127           prec = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<int>(std::string(argv[m]));
-<a name="l00128"></a>00128         }
-<a name="l00129"></a>00129         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&) {
-<a name="l00130"></a>00130           std::cerr << <span class="stringliteral">"Precision "</span> << argv[m] << <span class="stringliteral">" is not a number\n"</span>;
-<a name="l00131"></a>00131           <span class="keywordflow">return</span> 1;
-<a name="l00132"></a>00132         }
-<a name="l00133"></a>00133       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00134"></a>00134         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00135"></a>00135         istring = argv[m];
-<a name="l00136"></a>00136       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00137"></a>00137         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00138"></a>00138         ifile = argv[m];
-<a name="l00139"></a>00139       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00140"></a>00140         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00141"></a>00141         ofile = argv[m];
-<a name="l00142"></a>00142       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00143"></a>00143         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00144"></a>00144         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00145"></a>00145           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00146"></a>00146           <span class="keywordflow">return</span> 1;
-<a name="l00147"></a>00147         }
-<a name="l00148"></a>00148         lsep = argv[m][0];
-<a name="l00149"></a>00149       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00150"></a>00150         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00151"></a>00151         cdelim = argv[m];
-<a name="l00152"></a>00152       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00153"></a>00153         std::cout
-<a name="l00154"></a>00154           << argv[0]
-<a name="l00155"></a>00155           << <span class="stringliteral">": $Id: 68e3a8ec4a5717094498179912279a756f6e3f8b $\n"</span>
-<a name="l00156"></a>00156           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00157"></a>00157         <span class="keywordflow">return</span> 0;
-<a name="l00158"></a>00158       } <span class="keywordflow">else</span>
-<a name="l00159"></a>00159         <span class="keywordflow">return</span> usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00160"></a>00160     }
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00163"></a>00163       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00164"></a>00164       <span class="keywordflow">return</span> 1;
-<a name="l00165"></a>00165     }
-<a name="l00166"></a>00166     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00167"></a>00167     std::ifstream infile;
-<a name="l00168"></a>00168     std::istringstream instring;
-<a name="l00169"></a>00169     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00170"></a>00170       infile.open(ifile.c_str());
-<a name="l00171"></a>00171       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00172"></a>00172         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00173"></a>00173         <span class="keywordflow">return</span> 1;
-<a name="l00174"></a>00174       }
-<a name="l00175"></a>00175     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00176"></a>00176       std::string::size_type m = 0;
-<a name="l00177"></a>00177       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00178"></a>00178         m = istring.find(lsep, m);
-<a name="l00179"></a>00179         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00180"></a>00180           <span class="keywordflow">break</span>;
-<a name="l00181"></a>00181         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00182"></a>00182       }
-<a name="l00183"></a>00183       instring.str(istring);
-<a name="l00184"></a>00184     }
-<a name="l00185"></a>00185     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00186"></a>00186       (!istring.empty() ? &instring : &std::cin);
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     std::ofstream outfile;
-<a name="l00189"></a>00189     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00190"></a>00190     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00191"></a>00191       outfile.open(ofile.c_str());
-<a name="l00192"></a>00192       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00193"></a>00193         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00194"></a>00194         <span class="keywordflow">return</span> 1;
-<a name="l00195"></a>00195       }
-<a name="l00196"></a>00196     }
-<a name="l00197"></a>00197     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> geod(a, f);
-<a name="l00200"></a>00200     <a class="code" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> l;
-<a name="l00201"></a>00201     <span class="keywordflow">if</span> (linecalc)
-<a name="l00202"></a>00202       l = geod.<a class="code" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">Line</a>(lat1, lon1, azi1);
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204     <span class="comment">// Max precision = 10: 0.1 nm in distance, 10^-15 deg (= 0.11 nm),</span>
-<a name="l00205"></a>00205     <span class="comment">// 10^-11 sec (= 0.3 nm).</span>
-<a name="l00206"></a>00206     prec = std::min(10, std::max(0, prec));
-<a name="l00207"></a>00207     std::string s;
-<a name="l00208"></a>00208     <span class="keywordtype">int</span> retval = 0;
-<a name="l00209"></a>00209     <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00210"></a>00210       <span class="keywordflow">try</span> {
-<a name="l00211"></a>00211         std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00212"></a>00212         <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00213"></a>00213           std::string::size_type m = s.find(cdelim);
-<a name="l00214"></a>00214           <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00215"></a>00215             eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00216"></a>00216             s = s.substr(0, m);
-<a name="l00217"></a>00217           }
-<a name="l00218"></a>00218         }
-<a name="l00219"></a>00219         std::istringstream str(s);
-<a name="l00220"></a>00220         <span class="keywordflow">if</span> (inverse) {
-<a name="l00221"></a>00221           std::string slat1, slon1, slat2, slon2;
-<a name="l00222"></a>00222           <span class="keywordflow">if</span> (!(str >> slat1 >> slon1 >> slat2 >> slon2))
-<a name="l00223"></a>00223             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00224"></a>00224           std::string strc;
-<a name="l00225"></a>00225           <span class="keywordflow">if</span> (str >> strc)
-<a name="l00226"></a>00226             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extraneous input: "</span> + strc);
-<a name="l00227"></a>00227           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(slat1, slon1, lat1, lon1);
-<a name="l00228"></a>00228           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(slat2, slon2, lat2, lon2);
-<a name="l00229"></a>00229           a12 = geod.<a class="code" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Inverse</a>(lat1, lon1, lat2, lon2, s12, azi1, azi2,
-<a name="l00230"></a>00230                              m12, M12, M21, S12);
-<a name="l00231"></a>00231           <span class="keywordflow">if</span> (full)
-<a name="l00232"></a>00232             *output << <a class="code" href="Geod_8cpp.html#a8c3a2a4c039b4d0118416afd97a45fcf">LatLonString</a>(lat1, lon1, prec, dms, dmssep) << <span class="stringliteral">" "</span>;
-<a name="l00233"></a>00233           *output << <a class="code" href="Geod_8cpp.html#adeb84b4732b410c9fdccf799037ef245">AzimuthString</a>(azi1, prec, dms, dmssep) << <span class="stringliteral">" "</span>;
-<a name="l00234"></a>00234           <span class="keywordflow">if</span> (full)
-<a name="l00235"></a>00235             *output << <a class="code" href="Geod_8cpp.html#a8c3a2a4c039b4d0118416afd97a45fcf">LatLonString</a>(lat2, lon2, prec, dms, dmssep) << <span class="stringliteral">" "</span>;
-<a name="l00236"></a>00236           *output << <a class="code" href="Geod_8cpp.html#adeb84b4732b410c9fdccf799037ef245">AzimuthString</a>(azi2 + azi2sense, prec, dms, dmssep) << <span class="stringliteral">" "</span>
-<a name="l00237"></a>00237                   << <a class="code" href="Geod_8cpp.html#a600021136749afe8d757335563b5b544">DistanceStrings</a>(s12, a12, full, arcmode, prec, dms);
-<a name="l00238"></a>00238           <span class="keywordflow">if</span> (full)
-<a name="l00239"></a>00239             *output << <span class="stringliteral">" "</span> << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(m12, prec)
-<a name="l00240"></a>00240                     << <span class="stringliteral">" "</span> << Utility::str<real>(M12, prec+7)
-<a name="l00241"></a>00241                     << <span class="stringliteral">" "</span> << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(M21, prec+7)
-<a name="l00242"></a>00242                     << <span class="stringliteral">" "</span> << Utility::str<real>(S12, std::max(prec-7, 0));
-<a name="l00243"></a>00243           *output << eol;
-<a name="l00244"></a>00244         } <span class="keywordflow">else</span> {
-<a name="l00245"></a>00245           <span class="keywordflow">if</span> (linecalc) {
-<a name="l00246"></a>00246             std::string ss12;
-<a name="l00247"></a>00247             <span class="keywordflow">if</span> (!(str >> ss12))
-<a name="l00248"></a>00248               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00249"></a>00249             std::string strc;
-<a name="l00250"></a>00250             <span class="keywordflow">if</span> (str >> strc)
-<a name="l00251"></a>00251               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extraneous input: "</span> + strc);
-<a name="l00252"></a>00252             s12 = <a class="code" href="Geod_8cpp.html#a01ac56deedd203bd66c8c7328654b7e9">ReadDistance</a>(ss12, arcmode);
-<a name="l00253"></a>00253             <span class="keywordflow">if</span> (arcmode)
-<a name="l00254"></a>00254               l.ArcPosition(s12, lat2, lon2, azi2, a12, m12, M12, M21, S12);
-<a name="l00255"></a>00255             <span class="keywordflow">else</span>
-<a name="l00256"></a>00256               a12 = l.Position(s12, lat2, lon2, azi2, m12, M12, M21, S12);
-<a name="l00257"></a>00257           } <span class="keywordflow">else</span> {
-<a name="l00258"></a>00258             std::string slat1, slon1, sazi1, ss12;
-<a name="l00259"></a>00259             <span class="keywordflow">if</span> (!(str >> slat1 >> slon1 >> sazi1 >> ss12))
-<a name="l00260"></a>00260               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00261"></a>00261             std::string strc;
-<a name="l00262"></a>00262             <span class="keywordflow">if</span> (str >> strc)
-<a name="l00263"></a>00263               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extraneous input: "</span> + strc);
-<a name="l00264"></a>00264             <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(slat1, slon1, lat1, lon1);
-<a name="l00265"></a>00265             azi1 = <a class="code" href="classGeographicLib_1_1DMS.html#a0512cc1275e089138e1550efbee421d9">DMS::DecodeAzimuth</a>(sazi1);
-<a name="l00266"></a>00266             s12 = <a class="code" href="Geod_8cpp.html#a01ac56deedd203bd66c8c7328654b7e9">ReadDistance</a>(ss12, arcmode);
-<a name="l00267"></a>00267             <span class="keywordflow">if</span> (arcmode)
-<a name="l00268"></a>00268               geod.<a class="code" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">ArcDirect</a>(lat1, lon1, azi1, s12, lat2, lon2, azi2, a12,
-<a name="l00269"></a>00269                              m12, M12, M21, S12);
-<a name="l00270"></a>00270             <span class="keywordflow">else</span>
-<a name="l00271"></a>00271               a12 = geod.<a class="code" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Direct</a>(lat1, lon1, azi1, s12, lat2, lon2, azi2,
-<a name="l00272"></a>00272                                 m12, M12, M21, S12);
-<a name="l00273"></a>00273           }
-<a name="l00274"></a>00274           <span class="keywordflow">if</span> (arcmode)
-<a name="l00275"></a>00275             std::swap(s12, a12);
-<a name="l00276"></a>00276           <span class="keywordflow">if</span> (full)
-<a name="l00277"></a>00277             *output << <a class="code" href="Geod_8cpp.html#a8c3a2a4c039b4d0118416afd97a45fcf">LatLonString</a>(lat1, lon1, prec, dms, dmssep) << <span class="stringliteral">" "</span>
-<a name="l00278"></a>00278                     << <a class="code" href="Geod_8cpp.html#adeb84b4732b410c9fdccf799037ef245">AzimuthString</a>(azi1, prec, dms, dmssep) << <span class="stringliteral">" "</span>;
-<a name="l00279"></a>00279           *output << <a class="code" href="Geod_8cpp.html#a8c3a2a4c039b4d0118416afd97a45fcf">LatLonString</a>(lat2, lon2, prec, dms, dmssep) << <span class="stringliteral">" "</span>
-<a name="l00280"></a>00280                   << <a class="code" href="Geod_8cpp.html#adeb84b4732b410c9fdccf799037ef245">AzimuthString</a>(azi2 + azi2sense, prec, dms, dmssep);
-<a name="l00281"></a>00281           <span class="keywordflow">if</span> (full)
-<a name="l00282"></a>00282             *output << <span class="stringliteral">" "</span>
-<a name="l00283"></a>00283                     << <a class="code" href="Geod_8cpp.html#a600021136749afe8d757335563b5b544">DistanceStrings</a>(s12, a12, full, arcmode, prec, dms)
-<a name="l00284"></a>00284                     << <span class="stringliteral">" "</span> << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(m12, prec)
-<a name="l00285"></a>00285                     << <span class="stringliteral">" "</span> << Utility::str<real>(M12, prec+7)
-<a name="l00286"></a>00286                     << <span class="stringliteral">" "</span> << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(M21, prec+7)
-<a name="l00287"></a>00287                     << <span class="stringliteral">" "</span> << Utility::str<real>(S12, std::max(prec-7, 0));
-<a name="l00288"></a>00288           *output << eol;
-<a name="l00289"></a>00289         }
-<a name="l00290"></a>00290       }
-<a name="l00291"></a>00291       <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00292"></a>00292         <span class="comment">// Write error message cout so output lines match input lines</span>
-<a name="l00293"></a>00293         *output << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00294"></a>00294         retval = 1;
-<a name="l00295"></a>00295       }
-<a name="l00296"></a>00296     }
-<a name="l00297"></a>00297     <span class="keywordflow">return</span> retval;
-<a name="l00298"></a>00298   }
-<a name="l00299"></a>00299   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00300"></a>00300     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00301"></a>00301     <span class="keywordflow">return</span> 1;
-<a name="l00302"></a>00302   }
-<a name="l00303"></a>00303   <span class="keywordflow">catch</span> (...) {
-<a name="l00304"></a>00304     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00305"></a>00305     <span class="keywordflow">return</span> 1;
-<a name="l00306"></a>00306   }
-<a name="l00307"></a>00307 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeodesicLine_8cpp.html b/doc/html/GeodesicLine_8cpp.html
deleted file mode 100644
index fca5f9e..0000000
--- a/doc/html/GeodesicLine_8cpp.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeodesicLine.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">GeodesicLine.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="GeodesicLine_8hpp_source.html">GeographicLib/GeodesicLine.hpp</a>></code><br/>
-</div>
-<p><a href="GeodesicLine_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GeodesicLine_8cpp.html#a8c325bf3ebfa8126888b62b16495d64e">GEOGRAPHICLIB_GEODESICLINE_CPP</a>   "$Id: d95fea8e73fd86fdc558e5b0397a97241cfe40c2 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>This is a reformulation of the geodesic problem. The notation is as follows:</p>
-<ul>
-<li>at a general point (no suffix or 1 or 2 as suffix)<ul>
-<li>phi = latitude</li>
-<li>beta = latitude on auxiliary sphere</li>
-<li>omega = longitude on auxiliary sphere</li>
-<li>lambda = longitude</li>
-<li>alpha = azimuth of great circle</li>
-<li>sigma = arc length along great circle</li>
-<li>s = distance</li>
-<li>tau = scaled distance (= sigma at multiples of pi/2)</li>
-</ul>
-</li>
-<li>at northwards equator crossing<ul>
-<li>beta = phi = 0</li>
-<li>omega = lambda = 0</li>
-<li>alpha = alpha0</li>
-<li>sigma = s = 0</li>
-</ul>
-</li>
-<li>a 12 suffix means a difference, e.g., s12 = s2 - s1.</li>
-<li>s and c prefixes mean sin and cos </li>
-</ul>
-
-<p>Definition in file <a class="el" href="GeodesicLine_8cpp_source.html">GeodesicLine.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a8c325bf3ebfa8126888b62b16495d64e"></a><!-- doxytag: member="GeodesicLine.cpp::GEOGRAPHICLIB_GEODESICLINE_CPP" ref="a8c325bf3ebfa8126888b62b16495d64e" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEODESICLINE_CPP   "$Id: d95fea8e73fd86fdc558e5b0397a97241cfe40c2 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GeodesicLine_8cpp_source.html#l00031">31</a> of file <a class="el" href="GeodesicLine_8cpp_source.html">GeodesicLine.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeodesicLine_8cpp_source.html b/doc/html/GeodesicLine_8cpp_source.html
deleted file mode 100644
index 9323564..0000000
--- a/doc/html/GeodesicLine_8cpp_source.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeodesicLine.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeodesicLine.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GeodesicLine_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GeodesicLine.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::GeodesicLine class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * This is a reformulation of the geodesic problem.  The notation is as</span>
-<a name="l00010"></a>00010 <span class="comment"> * follows:</span>
-<a name="l00011"></a>00011 <span class="comment"> * - at a general point (no suffix or 1 or 2 as suffix)</span>
-<a name="l00012"></a>00012 <span class="comment"> *   - phi = latitude</span>
-<a name="l00013"></a>00013 <span class="comment"> *   - beta = latitude on auxiliary sphere</span>
-<a name="l00014"></a>00014 <span class="comment"> *   - omega = longitude on auxiliary sphere</span>
-<a name="l00015"></a>00015 <span class="comment"> *   - lambda = longitude</span>
-<a name="l00016"></a>00016 <span class="comment"> *   - alpha = azimuth of great circle</span>
-<a name="l00017"></a>00017 <span class="comment"> *   - sigma = arc length along great circle</span>
-<a name="l00018"></a>00018 <span class="comment"> *   - s = distance</span>
-<a name="l00019"></a>00019 <span class="comment"> *   - tau = scaled distance (= sigma at multiples of pi/2)</span>
-<a name="l00020"></a>00020 <span class="comment"> * - at northwards equator crossing</span>
-<a name="l00021"></a>00021 <span class="comment"> *   - beta = phi = 0</span>
-<a name="l00022"></a>00022 <span class="comment"> *   - omega = lambda = 0</span>
-<a name="l00023"></a>00023 <span class="comment"> *   - alpha = alpha0</span>
-<a name="l00024"></a>00024 <span class="comment"> *   - sigma = s = 0</span>
-<a name="l00025"></a>00025 <span class="comment"> * - a 12 suffix means a difference, e.g., s12 = s2 - s1.</span>
-<a name="l00026"></a>00026 <span class="comment"> * - s and c prefixes mean sin and cos</span>
-<a name="l00027"></a>00027 <span class="comment"> **********************************************************************/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="GeodesicLine_8hpp.html" title="Header for GeographicLib::GeodesicLine class.">GeographicLib/GeodesicLine.hpp</a>></span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a><a class="code" href="GeodesicLine_8cpp.html#a8c325bf3ebfa8126888b62b16495d64e">00031</a> <span class="preprocessor">#define GEOGRAPHICLIB_GEODESICLINE_CPP \</span>
-<a name="l00032"></a>00032 <span class="preprocessor">  "$Id: d95fea8e73fd86fdc558e5b0397a97241cfe40c2 $"</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="GeodesicLine_8cpp.html#a8c325bf3ebfa8126888b62b16495d64e">GEOGRAPHICLIB_GEODESICLINE_CPP</a>)
-<a name="l00035"></a>00035 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="GeodesicLine_8hpp.html#a45305d595b59bfb061a5a0c6e1044485">GEOGRAPHICLIB_GEODESICLINE_HPP</a>)
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 namespace GeographicLib {
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039   <span class="keyword">using namespace </span>std;
-<a name="l00040"></a>00040 
-<a name="l00041"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a5669be85b4a574258f4a136f12d3f1bb">00041</a>   GeodesicLine::GeodesicLine(<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>& g,
-<a name="l00042"></a>00042                              real lat1, real lon1, real azi1,
-<a name="l00043"></a>00043                              <span class="keywordtype">unsigned</span> caps) <span class="keywordflow">throw</span>()
-<a name="l00044"></a>00044     : _a(g._a)
-<a name="l00045"></a>00045     , _f(g._f)
-<a name="l00046"></a>00046     , _b(g._b)
-<a name="l00047"></a>00047     , _c2(g._c2)
-<a name="l00048"></a>00048     , _f1(g._f1)
-<a name="l00049"></a>00049       <span class="comment">// Always allow latitude and azimuth</span>
-<a name="l00050"></a>00050     , _caps(caps | LATITUDE | AZIMUTH)
-<a name="l00051"></a>00051   {
-<a name="l00052"></a>00052     azi1 = Geodesic::AngNormalize(azi1);
-<a name="l00053"></a>00053     <span class="comment">// Guard against underflow in salp0</span>
-<a name="l00054"></a>00054     azi1 = Geodesic::AngRound(azi1);
-<a name="l00055"></a>00055     lon1 = Geodesic::AngNormalize(lon1);
-<a name="l00056"></a>00056     _lat1 = lat1;
-<a name="l00057"></a>00057     _lon1 = lon1;
-<a name="l00058"></a>00058     _azi1 = azi1;
-<a name="l00059"></a>00059     <span class="comment">// alp1 is in [0, pi]</span>
-<a name="l00060"></a>00060     real alp1 = azi1 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00061"></a>00061     <span class="comment">// Enforce sin(pi) == 0 and cos(pi/2) == 0.  Better to face the ensuing</span>
-<a name="l00062"></a>00062     <span class="comment">// problems directly than to skirt them.</span>
-<a name="l00063"></a>00063     _salp1 =     azi1  == -180 ? 0 : sin(alp1);
-<a name="l00064"></a>00064     _calp1 = abs(azi1) ==   90 ? 0 : cos(alp1);
-<a name="l00065"></a>00065     real cbet1, sbet1, phi;
-<a name="l00066"></a>00066     phi = lat1 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00067"></a>00067     <span class="comment">// Ensure cbet1 = +epsilon at poles</span>
-<a name="l00068"></a>00068     sbet1 = _f1 * sin(phi);
-<a name="l00069"></a>00069     cbet1 = abs(lat1) == 90 ? <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::tiny_ : cos(phi);
-<a name="l00070"></a>00070     Geodesic::SinCosNorm(sbet1, cbet1);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072     <span class="comment">// Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0),</span>
-<a name="l00073"></a>00073     _salp0 = _salp1 * cbet1; <span class="comment">// alp0 in [0, pi/2 - |bet1|]</span>
-<a name="l00074"></a>00074     <span class="comment">// Alt: calp0 = hypot(sbet1, calp1 * cbet1).  The following</span>
-<a name="l00075"></a>00075     <span class="comment">// is slightly better (consider the case salp1 = 0).</span>
-<a name="l00076"></a>00076     _calp0 = Math::hypot(_calp1, _salp1 * sbet1);
-<a name="l00077"></a>00077     <span class="comment">// Evaluate sig with tan(bet1) = tan(sig1) * cos(alp1).</span>
-<a name="l00078"></a>00078     <span class="comment">// sig = 0 is nearest northward crossing of equator.</span>
-<a name="l00079"></a>00079     <span class="comment">// With bet1 = 0, alp1 = pi/2, we have sig1 = 0 (equatorial line).</span>
-<a name="l00080"></a>00080     <span class="comment">// With bet1 =  pi/2, alp1 = -pi, sig1 =  pi/2</span>
-<a name="l00081"></a>00081     <span class="comment">// With bet1 = -pi/2, alp1 =  0 , sig1 = -pi/2</span>
-<a name="l00082"></a>00082     <span class="comment">// Evaluate omg1 with tan(omg1) = sin(alp0) * tan(sig1).</span>
-<a name="l00083"></a>00083     <span class="comment">// With alp0 in (0, pi/2], quadrants for sig and omg coincide.</span>
-<a name="l00084"></a>00084     <span class="comment">// No atan2(0,0) ambiguity at poles since cbet1 = +epsilon.</span>
-<a name="l00085"></a>00085     <span class="comment">// With alp0 = 0, omg1 = 0 for alp1 = 0, omg1 = pi for alp1 = pi.</span>
-<a name="l00086"></a>00086     _ssig1 = sbet1; _somg1 = _salp0 * sbet1;
-<a name="l00087"></a>00087     _csig1 = _comg1 = sbet1 != 0 || _calp1 != 0 ? cbet1 * _calp1 : 1;
-<a name="l00088"></a>00088     Geodesic::SinCosNorm(_ssig1, _csig1); <span class="comment">// sig1 in (-pi, pi]</span>
-<a name="l00089"></a>00089     Geodesic::SinCosNorm(_somg1, _comg1);
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091     _k2 = Math::sq(_calp0) * g._ep2;
-<a name="l00092"></a>00092     real eps = _k2 / (2 * (1 + sqrt(1 + _k2)) + _k2);
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094     <span class="keywordflow">if</span> (_caps & CAP_C1) {
-<a name="l00095"></a>00095       _A1m1 = Geodesic::A1m1f(eps);
-<a name="l00096"></a>00096       Geodesic::C1f(eps, _C1a);
-<a name="l00097"></a>00097       _B11 = Geodesic::SinCosSeries(<span class="keyword">true</span>, _ssig1, _csig1, _C1a, nC1_);
-<a name="l00098"></a>00098       real s = sin(_B11), c = cos(_B11);
-<a name="l00099"></a>00099       <span class="comment">// tau1 = sig1 + B11</span>
-<a name="l00100"></a>00100       _stau1 = _ssig1 * c + _csig1 * s;
-<a name="l00101"></a>00101       _ctau1 = _csig1 * c - _ssig1 * s;
-<a name="l00102"></a>00102       <span class="comment">// Not necessary because C1pa reverts C1a</span>
-<a name="l00103"></a>00103       <span class="comment">//    _B11 = -SinCosSeries(true, _stau1, _ctau1, _C1pa, nC1p_);</span>
-<a name="l00104"></a>00104     }
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <span class="keywordflow">if</span> (_caps & CAP_C1p)
-<a name="l00107"></a>00107       Geodesic::C1pf(eps, _C1pa);
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109     <span class="keywordflow">if</span> (_caps & CAP_C2) {
-<a name="l00110"></a>00110       _A2m1 = Geodesic::A2m1f(eps);
-<a name="l00111"></a>00111       Geodesic::C2f(eps, _C2a);
-<a name="l00112"></a>00112       _B21 = Geodesic::SinCosSeries(<span class="keyword">true</span>, _ssig1, _csig1, _C2a, nC2_);
-<a name="l00113"></a>00113     }
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115     <span class="keywordflow">if</span> (_caps & CAP_C3) {
-<a name="l00116"></a>00116       g.C3f(eps, _C3a);
-<a name="l00117"></a>00117       _A3c = -_f * _salp0 * g.A3f(eps);
-<a name="l00118"></a>00118       _B31 = Geodesic::SinCosSeries(<span class="keyword">true</span>, _ssig1, _csig1, _C3a, nC3_-1);
-<a name="l00119"></a>00119     }
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     <span class="keywordflow">if</span> (_caps & CAP_C4) {
-<a name="l00122"></a>00122       g.C4f(_k2, _C4a);
-<a name="l00123"></a>00123       <span class="comment">// Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0)</span>
-<a name="l00124"></a>00124       _A4 = Math::sq(_a) * _calp0 * _salp0 * g._e2;
-<a name="l00125"></a>00125       _B41 = Geodesic::SinCosSeries(<span class="keyword">false</span>, _ssig1, _csig1, _C4a, nC4_);
-<a name="l00126"></a>00126     }
-<a name="l00127"></a>00127   }
-<a name="l00128"></a>00128 
-<a name="l00129"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#ad9522110fe6a5a0c7f912a6b1a23094d">00129</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real GeodesicLine::GenPosition(<span class="keywordtype">bool</span> arcmode, real s12_a12,
-<a name="l00130"></a>00130                                        <span class="keywordtype">unsigned</span> outmask,
-<a name="l00131"></a>00131                                        real& lat2, real& lon2, real& azi2,
-<a name="l00132"></a>00132                                        real& s12, real& m12,
-<a name="l00133"></a>00133                                        real& M12, real& M21,
-<a name="l00134"></a>00134                                        real& S12)
-<a name="l00135"></a>00135   <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00136"></a>00136     outmask &= _caps & OUT_ALL;
-<a name="l00137"></a>00137     <span class="keywordflow">if</span> (!( Init() && (arcmode || (_caps & DISTANCE_IN & OUT_ALL)) ))
-<a name="l00138"></a>00138       <span class="comment">// Uninitialized or impossible distance calculation requested</span>
-<a name="l00139"></a>00139       <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     <span class="comment">// Avoid warning about uninitialized B12.</span>
-<a name="l00142"></a>00142     real sig12, ssig12, csig12, B12 = 0, AB1 = 0;
-<a name="l00143"></a>00143     <span class="keywordflow">if</span> (arcmode) {
-<a name="l00144"></a>00144       <span class="comment">// Interpret s12_a12 as spherical arc length</span>
-<a name="l00145"></a>00145       sig12 = s12_a12 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00146"></a>00146       real s12a = abs(s12_a12);
-<a name="l00147"></a>00147       s12a -= 180 * floor(s12a / 180);
-<a name="l00148"></a>00148       ssig12 = s12a ==  0 ? 0 : sin(sig12);
-<a name="l00149"></a>00149       csig12 = s12a == 90 ? 0 : cos(sig12);
-<a name="l00150"></a>00150     } <span class="keywordflow">else</span> {
-<a name="l00151"></a>00151       <span class="comment">// Interpret s12_a12 as distance</span>
-<a name="l00152"></a>00152       real
-<a name="l00153"></a>00153         tau12 = s12_a12 / (_b * (1 + _A1m1)),
-<a name="l00154"></a>00154         s = sin(tau12),
-<a name="l00155"></a>00155         c = cos(tau12);
-<a name="l00156"></a>00156       <span class="comment">// tau2 = tau1 + tau12</span>
-<a name="l00157"></a>00157       B12 = - Geodesic::SinCosSeries(<span class="keyword">true</span>, _stau1 * c + _ctau1 * s,
-<a name="l00158"></a>00158                                      _ctau1 * c - _stau1 * s,
-<a name="l00159"></a>00159                                      _C1pa, nC1p_);
-<a name="l00160"></a>00160       sig12 = tau12 - (B12 - _B11);
-<a name="l00161"></a>00161       ssig12 = sin(sig12);
-<a name="l00162"></a>00162       csig12 = cos(sig12);
-<a name="l00163"></a>00163     }
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     real omg12, lam12, lon12;
-<a name="l00166"></a>00166     real ssig2, csig2, sbet2, cbet2, somg2, comg2, salp2, calp2;
-<a name="l00167"></a>00167     <span class="comment">// sig2 = sig1 + sig12</span>
-<a name="l00168"></a>00168     ssig2 = _ssig1 * csig12 + _csig1 * ssig12;
-<a name="l00169"></a>00169     csig2 = _csig1 * csig12 - _ssig1 * ssig12;
-<a name="l00170"></a>00170     <span class="keywordflow">if</span> (outmask & (DISTANCE | REDUCEDLENGTH | GEODESICSCALE)) {
-<a name="l00171"></a>00171       <span class="keywordflow">if</span> (arcmode)
-<a name="l00172"></a>00172         B12 = Geodesic::SinCosSeries(<span class="keyword">true</span>, ssig2, csig2, _C1a, nC1_);
-<a name="l00173"></a>00173       AB1 = (1 + _A1m1) * (B12 - _B11);
-<a name="l00174"></a>00174     }
-<a name="l00175"></a>00175     <span class="comment">// sin(bet2) = cos(alp0) * sin(sig2)</span>
-<a name="l00176"></a>00176     sbet2 = _calp0 * ssig2;
-<a name="l00177"></a>00177     <span class="comment">// Alt: cbet2 = hypot(csig2, salp0 * ssig2);</span>
-<a name="l00178"></a>00178     cbet2 = Math::hypot(_salp0, _calp0 * csig2);
-<a name="l00179"></a>00179     <span class="keywordflow">if</span> (cbet2 == 0)
-<a name="l00180"></a>00180       <span class="comment">// I.e., salp0 = 0, csig2 = 0.  Break the degeneracy in this case</span>
-<a name="l00181"></a>00181       cbet2 = csig2 = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::tiny_;
-<a name="l00182"></a>00182     <span class="comment">// tan(omg2) = sin(alp0) * tan(sig2)</span>
-<a name="l00183"></a>00183     somg2 = _salp0 * ssig2; comg2 = csig2;  <span class="comment">// No need to normalize</span>
-<a name="l00184"></a>00184     <span class="comment">// tan(alp0) = cos(sig2)*tan(alp2)</span>
-<a name="l00185"></a>00185     salp2 = _salp0; calp2 = _calp0 * csig2; <span class="comment">// No need to normalize</span>
-<a name="l00186"></a>00186     <span class="comment">// omg12 = omg2 - omg1</span>
-<a name="l00187"></a>00187     omg12 = atan2(somg2 * _comg1 - comg2 * _somg1,
-<a name="l00188"></a>00188                   comg2 * _comg1 + somg2 * _somg1);
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     <span class="keywordflow">if</span> (outmask & DISTANCE)
-<a name="l00191"></a>00191       s12 = arcmode ? _b * ((1 + _A1m1) * sig12 + AB1) : s12_a12;
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="keywordflow">if</span> (outmask & LONGITUDE) {
-<a name="l00194"></a>00194       lam12 = omg12 + _A3c *
-<a name="l00195"></a>00195         ( sig12 + (Geodesic::SinCosSeries(<span class="keyword">true</span>, ssig2, csig2, _C3a, nC3_-1)
-<a name="l00196"></a>00196                    - _B31));
-<a name="l00197"></a>00197       lon12 = lam12 / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00198"></a>00198       <span class="comment">// Can't use AngNormalize because longitude might have wrapped multiple</span>
-<a name="l00199"></a>00199       <span class="comment">// times.</span>
-<a name="l00200"></a>00200       lon12 = lon12 - 360 * floor(lon12/360 + <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5));
-<a name="l00201"></a>00201       lon2 = Geodesic::AngNormalize(_lon1 + lon12);
-<a name="l00202"></a>00202     }
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204     <span class="keywordflow">if</span> (outmask & LATITUDE)
-<a name="l00205"></a>00205       lat2 = atan2(sbet2, _f1 * cbet2) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     <span class="keywordflow">if</span> (outmask & AZIMUTH)
-<a name="l00208"></a>00208       <span class="comment">// minus signs give range [-180, 180). 0- converts -0 to +0.</span>
-<a name="l00209"></a>00209       azi2 = 0 - atan2(-salp2, calp2) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211     <span class="keywordflow">if</span> (outmask & (REDUCEDLENGTH | GEODESICSCALE)) {
-<a name="l00212"></a>00212       real
-<a name="l00213"></a>00213         ssig1sq = Math::sq(_ssig1),
-<a name="l00214"></a>00214         ssig2sq = Math::sq( ssig2),
-<a name="l00215"></a>00215         w1 = sqrt(1 + _k2 * ssig1sq),
-<a name="l00216"></a>00216         w2 = sqrt(1 + _k2 * ssig2sq),
-<a name="l00217"></a>00217         B22 = Geodesic::SinCosSeries(<span class="keyword">true</span>, ssig2, csig2, _C2a, nC2_),
-<a name="l00218"></a>00218         AB2 = (1 + _A2m1) * (B22 - _B21),
-<a name="l00219"></a>00219         J12 = (_A1m1 - _A2m1) * sig12 + (AB1 - AB2);
-<a name="l00220"></a>00220       <span class="keywordflow">if</span> (outmask & REDUCEDLENGTH)
-<a name="l00221"></a>00221         <span class="comment">// Add parens around (_csig1 * ssig2) and (_ssig1 * csig2) to ensure</span>
-<a name="l00222"></a>00222         <span class="comment">// accurate cancellation in the case of coincident points.</span>
-<a name="l00223"></a>00223         m12 = _b * ((w2 * (_csig1 * ssig2) - w1 * (_ssig1 * csig2))
-<a name="l00224"></a>00224                   - _csig1 * csig2 * J12);
-<a name="l00225"></a>00225       <span class="keywordflow">if</span> (outmask & GEODESICSCALE) {
-<a name="l00226"></a>00226         M12 = csig12 + (_k2 * (ssig2sq - ssig1sq) *  ssig2 / (w1 + w2)
-<a name="l00227"></a>00227                         - csig2 * J12) * _ssig1 / w1;
-<a name="l00228"></a>00228         M21 = csig12 - (_k2 * (ssig2sq - ssig1sq) * _ssig1 / (w1 + w2)
-<a name="l00229"></a>00229                         - _csig1 * J12) * ssig2 / w2;
-<a name="l00230"></a>00230       }
-<a name="l00231"></a>00231     }
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     <span class="keywordflow">if</span> (outmask & AREA) {
-<a name="l00234"></a>00234       real
-<a name="l00235"></a>00235         B42 = Geodesic::SinCosSeries(<span class="keyword">false</span>, ssig2, csig2, _C4a, nC4_);
-<a name="l00236"></a>00236       real salp12, calp12;
-<a name="l00237"></a>00237       <span class="keywordflow">if</span> (_calp0 == 0 || _salp0 == 0) {
-<a name="l00238"></a>00238         <span class="comment">// alp12 = alp2 - alp1, used in atan2 so no need to normalized</span>
-<a name="l00239"></a>00239         salp12 = salp2 * _calp1 - calp2 * _salp1;
-<a name="l00240"></a>00240         calp12 = calp2 * _calp1 + salp2 * _salp1;
-<a name="l00241"></a>00241         <span class="comment">// The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz</span>
-<a name="l00242"></a>00242         <span class="comment">// salp12 = -0 and alp12 = -180.  However this depends on the sign being</span>
-<a name="l00243"></a>00243         <span class="comment">// attached to 0 correctly.  The following ensures the correct behavior.</span>
-<a name="l00244"></a>00244         <span class="keywordflow">if</span> (salp12 == 0 && calp12 < 0) {
-<a name="l00245"></a>00245           salp12 = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::tiny_ * _calp1;
-<a name="l00246"></a>00246           calp12 = -1;
-<a name="l00247"></a>00247         }
-<a name="l00248"></a>00248       } <span class="keywordflow">else</span> {
-<a name="l00249"></a>00249         <span class="comment">// tan(alp) = tan(alp0) * sec(sig)</span>
-<a name="l00250"></a>00250         <span class="comment">// tan(alp2-alp1) = (tan(alp2) -tan(alp1)) / (tan(alp2)*tan(alp1)+1)</span>
-<a name="l00251"></a>00251         <span class="comment">// = calp0 * salp0 * (csig1-csig2) / (salp0^2 + calp0^2 * csig1*csig2)</span>
-<a name="l00252"></a>00252         <span class="comment">// If csig12 > 0, write</span>
-<a name="l00253"></a>00253         <span class="comment">//   csig1 - csig2 = ssig12 * (csig1 * ssig12 / (1 + csig12) + ssig1)</span>
-<a name="l00254"></a>00254         <span class="comment">// else</span>
-<a name="l00255"></a>00255         <span class="comment">//   csig1 - csig2 = csig1 * (1 - csig12) + ssig12 * ssig1</span>
-<a name="l00256"></a>00256         <span class="comment">// No need to normalize</span>
-<a name="l00257"></a>00257         salp12 = _calp0 * _salp0 *
-<a name="l00258"></a>00258           (csig12 <= 0 ? _csig1 * (1 - csig12) + ssig12 * _ssig1 :
-<a name="l00259"></a>00259            ssig12 * (_csig1 * ssig12 / (1 + csig12) + _ssig1));
-<a name="l00260"></a>00260         calp12 = Math::sq(_salp0) + Math::sq(_calp0) * _csig1 * csig2;
-<a name="l00261"></a>00261       }
-<a name="l00262"></a>00262       S12 = _c2 * atan2(salp12, calp12) + _A4 * (B42 - _B41);
-<a name="l00263"></a>00263     }
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265     <span class="keywordflow">return</span> arcmode ? s12_a12 : sig12 / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00266"></a>00266   }
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeodesicLine_8hpp.html b/doc/html/GeodesicLine_8hpp.html
deleted file mode 100644
index 9d2e606..0000000
--- a/doc/html/GeodesicLine_8hpp.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeodesicLine.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">GeodesicLine.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Geodesic_8hpp_source.html">GeographicLib/Geodesic.hpp</a>></code><br/>
-</div>
-<p><a href="GeodesicLine_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A geodesic line.  <a href="classGeographicLib_1_1GeodesicLine.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GeodesicLine_8hpp.html#a45305d595b59bfb061a5a0c6e1044485">GEOGRAPHICLIB_GEODESICLINE_HPP</a>   "$Id: 4bbc611bc3837d78456bc227e17bea39cb443745 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a45305d595b59bfb061a5a0c6e1044485"></a><!-- doxytag: member="GeodesicLine.hpp::GEOGRAPHICLIB_GEODESICLINE_HPP" ref="a45305d595b59bfb061a5a0c6e1044485" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEODESICLINE_HPP   "$Id: 4bbc611bc3837d78456bc227e17bea39cb443745 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00011">11</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeodesicLine_8hpp_source.html b/doc/html/GeodesicLine_8hpp_source.html
deleted file mode 100644
index e73b7bd..0000000
--- a/doc/html/GeodesicLine_8hpp_source.html
+++ /dev/null
@@ -1,673 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeodesicLine.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeodesicLine.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GeodesicLine_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GeodesicLine.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::GeodesicLine class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_GEODESICLINE_HPP)</span>
-<a name="l00011"></a><a class="code" href="GeodesicLine_8hpp.html#a45305d595b59bfb061a5a0c6e1044485">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_GEODESICLINE_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 4bbc611bc3837d78456bc227e17bea39cb443745 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00018"></a>00018 <span class="comment"></span>
-<a name="l00019"></a>00019 <span class="comment">  /**</span>
-<a name="l00020"></a>00020 <span class="comment">   * \brief A geodesic line.</span>
-<a name="l00021"></a>00021 <span class="comment">   *</span>
-<a name="l00022"></a>00022 <span class="comment">   * GeodesicLine facilitates the determination of a series of points on a</span>
-<a name="l00023"></a>00023 <span class="comment">   * single geodesic.  The starting point (\e lat1, \e lon1) and the azimuth \e</span>
-<a name="l00024"></a>00024 <span class="comment">   * azi1 are specified in the constructor.  GeodesicLine.Position returns the</span>
-<a name="l00025"></a>00025 <span class="comment">   * location of point 2 a distance \e s12 along the geodesic.  Alternatively</span>
-<a name="l00026"></a>00026 <span class="comment">   * GeodesicLine.ArcPosition gives the position of point 2 an arc length \e</span>
-<a name="l00027"></a>00027 <span class="comment">   * a12 along the geodesic.</span>
-<a name="l00028"></a>00028 <span class="comment">   *</span>
-<a name="l00029"></a>00029 <span class="comment">   * The default copy constructor and assignment operators work with this</span>
-<a name="l00030"></a>00030 <span class="comment">   * class.  Similarly, a vector can be used to hold GeodesicLine objects.</span>
-<a name="l00031"></a>00031 <span class="comment">   *</span>
-<a name="l00032"></a>00032 <span class="comment">   * The calculations are accurate to better than 15 nm (15 nanometers).  See</span>
-<a name="l00033"></a>00033 <span class="comment">   * Sec. 9 of</span>
-<a name="l00034"></a>00034 <span class="comment">   * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for</span>
-<a name="l00035"></a>00035 <span class="comment">   * details.</span>
-<a name="l00036"></a>00036 <span class="comment">   *</span>
-<a name="l00037"></a>00037 <span class="comment">   * The algorithms are described in</span>
-<a name="l00038"></a>00038 <span class="comment">   * - C. F. F. Karney,</span>
-<a name="l00039"></a>00039 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics</span>
-<a name="l00040"></a>00040 <span class="comment">   *   on an ellipsoid of revolution</a>,</span>
-<a name="l00041"></a>00041 <span class="comment">   *   Feb. 2011;</span>
-<a name="l00042"></a>00042 <span class="comment">   *   preprint</span>
-<a name="l00043"></a>00043 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a>.</span>
-<a name="l00044"></a>00044 <span class="comment">   * - C. F. F. Karney,</span>
-<a name="l00045"></a>00045 <span class="comment">   *   <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>,</span>
-<a name="l00046"></a>00046 <span class="comment">   *   Sept. 2011;</span>
-<a name="l00047"></a>00047 <span class="comment">   *   preprint</span>
-<a name="l00048"></a>00048 <span class="comment">   *   <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.</span>
-<a name="l00049"></a>00049 <span class="comment">   * .</span>
-<a name="l00050"></a>00050 <span class="comment">   * For more information on geodesics see \ref geodesic.</span>
-<a name="l00051"></a>00051 <span class="comment">   *</span>
-<a name="l00052"></a>00052 <span class="comment">   * Example of use:</span>
-<a name="l00053"></a>00053 <span class="comment">   * \include example-GeodesicLine.cpp</span>
-<a name="l00054"></a>00054 <span class="comment">   *</span>
-<a name="l00055"></a>00055 <span class="comment">   * <a href="Geod.1.html">Geod</a> is a command-line utility providing access</span>
-<a name="l00056"></a>00056 <span class="comment">   * to the functionality of Geodesic and GeodesicLine.</span>
-<a name="l00057"></a>00057 <span class="comment">   **********************************************************************/</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> GeodesicLine {
-<a name="l00060"></a>00060   <span class="keyword">private</span>:
-<a name="l00061"></a>00061     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00062"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a088c26ef9558197029bbeb317f3104c0">00062</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>;
-<a name="l00063"></a>00063     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC1_ = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::nC1_;
-<a name="l00064"></a>00064     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC1p_ = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::nC1p_;
-<a name="l00065"></a>00065     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC2_ = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::nC2_;
-<a name="l00066"></a>00066     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC3_ = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::nC3_;
-<a name="l00067"></a>00067     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC4_ = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::nC4_;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     real _lat1, _lon1, _azi1;
-<a name="l00070"></a>00070     real _a, _f, _b, _c2, _f1, _salp0, _calp0, _k2,
-<a name="l00071"></a>00071       _salp1, _calp1, _ssig1, _csig1, _stau1, _ctau1, _somg1, _comg1,
-<a name="l00072"></a>00072       _A1m1, _A2m1, _A3c, _B11, _B21, _B31, _A4, _B41;
-<a name="l00073"></a>00073     <span class="comment">// index zero elements of _C1a, _C1pa, _C2a, _C3a are unused</span>
-<a name="l00074"></a>00074     real _C1a[nC1_ + 1], _C1pa[nC1p_ + 1], _C2a[nC2_ + 1], _C3a[nC3_],
-<a name="l00075"></a>00075       _C4a[nC4_];    <span class="comment">// all the elements of _C4a are used</span>
-<a name="l00076"></a>00076     <span class="keywordtype">unsigned</span> _caps;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078     <span class="keyword">enum</span> captype {
-<a name="l00079"></a>00079       CAP_NONE = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::CAP_NONE,
-<a name="l00080"></a>00080       CAP_C1   = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::CAP_C1,
-<a name="l00081"></a>00081       CAP_C1p  = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::CAP_C1p,
-<a name="l00082"></a>00082       CAP_C2   = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::CAP_C2,
-<a name="l00083"></a>00083       CAP_C3   = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::CAP_C3,
-<a name="l00084"></a>00084       CAP_C4   = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::CAP_C4,
-<a name="l00085"></a>00085       CAP_ALL  = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::CAP_ALL,
-<a name="l00086"></a>00086       OUT_ALL  = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::OUT_ALL,
-<a name="l00087"></a>00087     };
-<a name="l00088"></a>00088   <span class="keyword">public</span>:
-<a name="l00089"></a>00089 <span class="comment"></span>
-<a name="l00090"></a>00090 <span class="comment">    /**</span>
-<a name="l00091"></a>00091 <span class="comment">     * Bit masks for what calculations to do.  They signify to the</span>
-<a name="l00092"></a>00092 <span class="comment">     * GeodesicLine::GeodesicLine constructor and to Geodesic::Line what</span>
-<a name="l00093"></a>00093 <span class="comment">     * capabilities should be included in the GeodesicLine object.  This is</span>
-<a name="l00094"></a>00094 <span class="comment">     * merely a duplication of Geodesic::mask.</span>
-<a name="l00095"></a>00095 <span class="comment">     **********************************************************************/</span>
-<a name="l00096"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">00096</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">mask</a> {<span class="comment"></span>
-<a name="l00097"></a>00097 <span class="comment">      /**</span>
-<a name="l00098"></a>00098 <span class="comment">       * No capabilities, no output.</span>
-<a name="l00099"></a>00099 <span class="comment">       * @hideinitializer</span>
-<a name="l00100"></a>00100 <span class="comment">       **********************************************************************/</span>
-<a name="l00101"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca0f2ec05e56540d908a326a872b9aa68f">00101</a>       NONE          = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::NONE,<span class="comment"></span>
-<a name="l00102"></a>00102 <span class="comment">      /**</span>
-<a name="l00103"></a>00103 <span class="comment">       * Calculate latitude \e lat2.  (It's not necessary to include this as a</span>
-<a name="l00104"></a>00104 <span class="comment">       * capability to GeodesicLine because this is included by default.)</span>
-<a name="l00105"></a>00105 <span class="comment">       * @hideinitializer</span>
-<a name="l00106"></a>00106 <span class="comment">       **********************************************************************/</span>
-<a name="l00107"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23">00107</a>       LATITUDE      = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::LATITUDE,<span class="comment"></span>
-<a name="l00108"></a>00108 <span class="comment">      /**</span>
-<a name="l00109"></a>00109 <span class="comment">       * Calculate longitude \e lon2.</span>
-<a name="l00110"></a>00110 <span class="comment">       * @hideinitializer</span>
-<a name="l00111"></a>00111 <span class="comment">       **********************************************************************/</span>
-<a name="l00112"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">00112</a>       LONGITUDE     = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::LONGITUDE,<span class="comment"></span>
-<a name="l00113"></a>00113 <span class="comment">      /**</span>
-<a name="l00114"></a>00114 <span class="comment">       * Calculate azimuths \e azi1 and \e azi2.  (It's not necessary to</span>
-<a name="l00115"></a>00115 <span class="comment">       * include this as a capability to GeodesicLine because this is included</span>
-<a name="l00116"></a>00116 <span class="comment">       * by default.)</span>
-<a name="l00117"></a>00117 <span class="comment">       * @hideinitializer</span>
-<a name="l00118"></a>00118 <span class="comment">       **********************************************************************/</span>
-<a name="l00119"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e">00119</a>       AZIMUTH       = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::AZIMUTH,<span class="comment"></span>
-<a name="l00120"></a>00120 <span class="comment">      /**</span>
-<a name="l00121"></a>00121 <span class="comment">       * Calculate distance \e s12.</span>
-<a name="l00122"></a>00122 <span class="comment">       * @hideinitializer</span>
-<a name="l00123"></a>00123 <span class="comment">       **********************************************************************/</span>
-<a name="l00124"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184">00124</a>       DISTANCE      = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::DISTANCE,<span class="comment"></span>
-<a name="l00125"></a>00125 <span class="comment">      /**</span>
-<a name="l00126"></a>00126 <span class="comment">       * Allow distance \e s12 to be used as input in the direct geodesic</span>
-<a name="l00127"></a>00127 <span class="comment">       * problem.</span>
-<a name="l00128"></a>00128 <span class="comment">       * @hideinitializer</span>
-<a name="l00129"></a>00129 <span class="comment">       **********************************************************************/</span>
-<a name="l00130"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc">00130</a>       DISTANCE_IN   = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::DISTANCE_IN,<span class="comment"></span>
-<a name="l00131"></a>00131 <span class="comment">      /**</span>
-<a name="l00132"></a>00132 <span class="comment">       * Calculate reduced length \e m12.</span>
-<a name="l00133"></a>00133 <span class="comment">       * @hideinitializer</span>
-<a name="l00134"></a>00134 <span class="comment">       **********************************************************************/</span>
-<a name="l00135"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">00135</a>       REDUCEDLENGTH = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::REDUCEDLENGTH,<span class="comment"></span>
-<a name="l00136"></a>00136 <span class="comment">      /**</span>
-<a name="l00137"></a>00137 <span class="comment">       * Calculate geodesic scales \e M12 and \e M21.</span>
-<a name="l00138"></a>00138 <span class="comment">       * @hideinitializer</span>
-<a name="l00139"></a>00139 <span class="comment">       **********************************************************************/</span>
-<a name="l00140"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">00140</a>       GEODESICSCALE = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::GEODESICSCALE,<span class="comment"></span>
-<a name="l00141"></a>00141 <span class="comment">      /**</span>
-<a name="l00142"></a>00142 <span class="comment">       * Calculate area \e S12.</span>
-<a name="l00143"></a>00143 <span class="comment">       * @hideinitializer</span>
-<a name="l00144"></a>00144 <span class="comment">       **********************************************************************/</span>
-<a name="l00145"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">00145</a>       AREA          = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::AREA,<span class="comment"></span>
-<a name="l00146"></a>00146 <span class="comment">      /**</span>
-<a name="l00147"></a>00147 <span class="comment">       * All capabilities.  Calculate everything.</span>
-<a name="l00148"></a>00148 <span class="comment">       * @hideinitializer</span>
-<a name="l00149"></a>00149 <span class="comment">       **********************************************************************/</span>
-<a name="l00150"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccabf2df1a904dc1c546a122ac0ebe1acd6">00150</a>       ALL           = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::ALL,
-<a name="l00151"></a>00151     };
-<a name="l00152"></a>00152 <span class="comment"></span>
-<a name="l00153"></a>00153 <span class="comment">    /** \name Constructors</span>
-<a name="l00154"></a>00154 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00155"></a>00155 <span class="comment">    ///@{</span>
-<a name="l00156"></a>00156 <span class="comment"></span><span class="comment"></span>
-<a name="l00157"></a>00157 <span class="comment">    /**</span>
-<a name="l00158"></a>00158 <span class="comment">     * Constructor for a geodesic line staring at latitude \e lat1, longitude</span>
-<a name="l00159"></a>00159 <span class="comment">     * \e lon1, and azimuth \e azi1 (all in degrees).</span>
-<a name="l00160"></a>00160 <span class="comment">     *</span>
-<a name="l00161"></a>00161 <span class="comment">     * @param[in] g A Geodesic object used to compute the necessary information</span>
-<a name="l00162"></a>00162 <span class="comment">     *   about the GeodesicLine.</span>
-<a name="l00163"></a>00163 <span class="comment">     *</span>
-<a name="l00164"></a>00164 <span class="comment">     * @param[in] lat1 latitude of point 1 (degrees).</span>
-<a name="l00165"></a>00165 <span class="comment">     * @param[in] lon1 longitude of point 1 (degrees).</span>
-<a name="l00166"></a>00166 <span class="comment">     * @param[in] azi1 azimuth at point 1 (degrees).</span>
-<a name="l00167"></a>00167 <span class="comment">     * @param[in] caps bitor'ed combination of GeodesicLine::mask values</span>
-<a name="l00168"></a>00168 <span class="comment">     *   specifying the capabilities the GeodesicLine object should possess,</span>
-<a name="l00169"></a>00169 <span class="comment">     *   i.e., which quantities can be returned in calls to</span>
-<a name="l00170"></a>00170 <span class="comment">     *   GeodesicLib::Position.</span>
-<a name="l00171"></a>00171 <span class="comment">     *</span>
-<a name="l00172"></a>00172 <span class="comment">     * \e lat1 should be in the range [-90, 90]; \e lon1 and \e azi1 should be</span>
-<a name="l00173"></a>00173 <span class="comment">     * in the range [-180, 360].</span>
-<a name="l00174"></a>00174 <span class="comment">     *</span>
-<a name="l00175"></a>00175 <span class="comment">     * The GeodesicLine::mask values are</span>
-<a name="l00176"></a>00176 <span class="comment">     * - \e caps |= GeodesicLine::LATITUDE for the latitude \e lat2; this is</span>
-<a name="l00177"></a>00177 <span class="comment">     *   added automatically</span>
-<a name="l00178"></a>00178 <span class="comment">     * - \e caps |= GeodesicLine::LONGITUDE for the latitude \e lon2</span>
-<a name="l00179"></a>00179 <span class="comment">     * - \e caps |= GeodesicLine::AZIMUTH for the latitude \e azi2; this is</span>
-<a name="l00180"></a>00180 <span class="comment">     *   added automatically</span>
-<a name="l00181"></a>00181 <span class="comment">     * - \e caps |= GeodesicLine::DISTANCE for the distance \e s12</span>
-<a name="l00182"></a>00182 <span class="comment">     * - \e caps |= GeodesicLine::REDUCEDLENGTH for the reduced length \e m12</span>
-<a name="l00183"></a>00183 <span class="comment">     * - \e caps |= GeodesicLine::GEODESICSCALE for the geodesic scales \e M12</span>
-<a name="l00184"></a>00184 <span class="comment">     *   and \e M21</span>
-<a name="l00185"></a>00185 <span class="comment">     * - \e caps |= GeodesicLine::AREA for the area \e S12</span>
-<a name="l00186"></a>00186 <span class="comment">     * - \e caps |= GeodesicLine::DISTANCE_IN permits the length of the</span>
-<a name="l00187"></a>00187 <span class="comment">     *   geodesic to be given in terms of \e s12; without this capability the</span>
-<a name="l00188"></a>00188 <span class="comment">     *   length can only be specified in terms of arc length.</span>
-<a name="l00189"></a>00189 <span class="comment">     * .</span>
-<a name="l00190"></a>00190 <span class="comment">     * The default value of \e caps is GeodesicLine::ALL which turns on all the</span>
-<a name="l00191"></a>00191 <span class="comment">     * capabilities.</span>
-<a name="l00192"></a>00192 <span class="comment">     *</span>
-<a name="l00193"></a>00193 <span class="comment">     * If the point is at a pole, the azimuth is defined by keeping the \e lon1</span>
-<a name="l00194"></a>00194 <span class="comment">     * fixed and writing \e lat1 = 90 - \e eps or -90 + \e eps and taking the</span>
-<a name="l00195"></a>00195 <span class="comment">     * limit \e eps -> 0 from above.</span>
-<a name="l00196"></a>00196 <span class="comment">     **********************************************************************/</span>
-<a name="l00197"></a>00197     GeodesicLine(<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>& g, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> azi1,
-<a name="l00198"></a>00198                  <span class="keywordtype">unsigned</span> caps = ALL)
-<a name="l00199"></a>00199       throw();
-<a name="l00200"></a>00200 <span class="comment"></span>
-<a name="l00201"></a>00201 <span class="comment">    /**</span>
-<a name="l00202"></a>00202 <span class="comment">     * A default constructor.  If GeodesicLine::Position is called on the</span>
-<a name="l00203"></a>00203 <span class="comment">     * resulting object, it returns immediately (without doing any</span>
-<a name="l00204"></a>00204 <span class="comment">     * calculations).  The object can be set with a call to Geodesic::Line.</span>
-<a name="l00205"></a>00205 <span class="comment">     * Use Init() to test whether object is still in this uninitialized state.</span>
-<a name="l00206"></a>00206 <span class="comment">     **********************************************************************/</span>
-<a name="l00207"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#ae5ad84103d70f252c66bf61afbda3fa0">00207</a>     GeodesicLine() throw() : _caps(0U) {}<span class="comment"></span>
-<a name="l00208"></a>00208 <span class="comment">    ///@}</span>
-<a name="l00209"></a>00209 <span class="comment"></span><span class="comment"></span>
-<a name="l00210"></a>00210 <span class="comment">    /** \name Position in terms of distance</span>
-<a name="l00211"></a>00211 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00212"></a>00212 <span class="comment">    ///@{</span>
-<a name="l00213"></a>00213 <span class="comment"></span><span class="comment"></span>
-<a name="l00214"></a>00214 <span class="comment">    /**</span>
-<a name="l00215"></a>00215 <span class="comment">     * Compute the position of point 2 which is a distance \e s12 (meters)</span>
-<a name="l00216"></a>00216 <span class="comment">     * from point 1.</span>
-<a name="l00217"></a>00217 <span class="comment">     *</span>
-<a name="l00218"></a>00218 <span class="comment">     * @param[in] s12 distance between point 1 and point 2 (meters); it can be</span>
-<a name="l00219"></a>00219 <span class="comment">     *   signed.</span>
-<a name="l00220"></a>00220 <span class="comment">     * @param[out] lat2 latitude of point 2 (degrees).</span>
-<a name="l00221"></a>00221 <span class="comment">     * @param[out] lon2 longitude of point 2 (degrees); requires that the</span>
-<a name="l00222"></a>00222 <span class="comment">     *   GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00223"></a>00223 <span class="comment">     *   GeodesicLine::LONGITUDE.</span>
-<a name="l00224"></a>00224 <span class="comment">     * @param[out] azi2 (forward) azimuth at point 2 (degrees).</span>
-<a name="l00225"></a>00225 <span class="comment">     * @param[out] m12 reduced length of geodesic (meters); requires that the</span>
-<a name="l00226"></a>00226 <span class="comment">     *   GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00227"></a>00227 <span class="comment">     *   GeodesicLine::REDUCEDLENGTH.</span>
-<a name="l00228"></a>00228 <span class="comment">     * @param[out] M12 geodesic scale of point 2 relative to point 1</span>
-<a name="l00229"></a>00229 <span class="comment">     *   (dimensionless); requires that the GeodesicLine object was constructed</span>
-<a name="l00230"></a>00230 <span class="comment">     *   with \e caps |= GeodesicLine::GEODESICSCALE.</span>
-<a name="l00231"></a>00231 <span class="comment">     * @param[out] M21 geodesic scale of point 1 relative to point 2</span>
-<a name="l00232"></a>00232 <span class="comment">     *   (dimensionless); requires that the GeodesicLine object was constructed</span>
-<a name="l00233"></a>00233 <span class="comment">     *   with \e caps |= GeodesicLine::GEODESICSCALE.</span>
-<a name="l00234"></a>00234 <span class="comment">     * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires</span>
-<a name="l00235"></a>00235 <span class="comment">     *   that the GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00236"></a>00236 <span class="comment">     *   GeodesicLine::AREA.</span>
-<a name="l00237"></a>00237 <span class="comment">     * @return \e a12 arc length of between point 1 and point 2 (degrees).</span>
-<a name="l00238"></a>00238 <span class="comment">     *</span>
-<a name="l00239"></a>00239 <span class="comment">     * The values of \e lon2 and \e azi2 returned are in the range [-180, 180).</span>
-<a name="l00240"></a>00240 <span class="comment">     *</span>
-<a name="l00241"></a>00241 <span class="comment">     * The GeodesicLine object \e must have been constructed with \e caps |=</span>
-<a name="l00242"></a>00242 <span class="comment">     * GeodesicLine::DISTANCE_IN; otherwise Math::NaN() is returned and no</span>
-<a name="l00243"></a>00243 <span class="comment">     * parameters are set.  Requesting a value which the GeodesicLine object is</span>
-<a name="l00244"></a>00244 <span class="comment">     * not capable of computing is not an error; the corresponding argument</span>
-<a name="l00245"></a>00245 <span class="comment">     * will not be altered.</span>
-<a name="l00246"></a>00246 <span class="comment">     *</span>
-<a name="l00247"></a>00247 <span class="comment">     * The following functions are overloaded versions of</span>
-<a name="l00248"></a>00248 <span class="comment">     * GeodesicLine::Position which omit some of the output parameters.  Note,</span>
-<a name="l00249"></a>00249 <span class="comment">     * however, that the arc length is always computed and returned as the</span>
-<a name="l00250"></a>00250 <span class="comment">     * function value.</span>
-<a name="l00251"></a>00251 <span class="comment">     **********************************************************************/</span>
-<a name="l00252"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">00252</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Position(real s12,
-<a name="l00253"></a>00253                         real& lat2, real& lon2, real& azi2,
-<a name="l00254"></a>00254                         real& m12, real& M12, real& M21,
-<a name="l00255"></a>00255                         real& S12) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00256"></a>00256       real t;
-<a name="l00257"></a>00257       <span class="keywordflow">return</span> GenPosition(<span class="keyword">false</span>, s12,
-<a name="l00258"></a>00258                          LATITUDE | LONGITUDE | AZIMUTH |
-<a name="l00259"></a>00259                          REDUCEDLENGTH | GEODESICSCALE | AREA,
-<a name="l00260"></a>00260                          lat2, lon2, azi2, t, m12, M12, M21, S12);
-<a name="l00261"></a>00261     }
-<a name="l00262"></a>00262 <span class="comment"></span>
-<a name="l00263"></a>00263 <span class="comment">    /**</span>
-<a name="l00264"></a>00264 <span class="comment">     * See the documentation for GeodesicLine::Position.</span>
-<a name="l00265"></a>00265 <span class="comment">     **********************************************************************/</span>
-<a name="l00266"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a50feb9c64d66b6518c640584d25e9507">00266</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeodesicLine.html#a50feb9c64d66b6518c640584d25e9507">Position</a>(real s12, real& lat2, real& lon2) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00267"></a>00267       real t;
-<a name="l00268"></a>00268       <span class="keywordflow">return</span> GenPosition(<span class="keyword">false</span>, s12,
-<a name="l00269"></a>00269                          LATITUDE | LONGITUDE,
-<a name="l00270"></a>00270                          lat2, lon2, t, t, t, t, t, t);
-<a name="l00271"></a>00271     }
-<a name="l00272"></a>00272 <span class="comment"></span>
-<a name="l00273"></a>00273 <span class="comment">    /**</span>
-<a name="l00274"></a>00274 <span class="comment">     * See the documentation for GeodesicLine::Position.</span>
-<a name="l00275"></a>00275 <span class="comment">     **********************************************************************/</span>
-<a name="l00276"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#ac736a0cc3300e443d42bbd2dc901962c">00276</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Position(real s12, real& lat2, real& lon2,
-<a name="l00277"></a>00277                         real& azi2) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00278"></a>00278       real t;
-<a name="l00279"></a>00279       <span class="keywordflow">return</span> GenPosition(<span class="keyword">false</span>, s12,
-<a name="l00280"></a>00280                          LATITUDE | LONGITUDE | AZIMUTH,
-<a name="l00281"></a>00281                          lat2, lon2, azi2, t, t, t, t, t);
-<a name="l00282"></a>00282     }
-<a name="l00283"></a>00283 <span class="comment"></span>
-<a name="l00284"></a>00284 <span class="comment">    /**</span>
-<a name="l00285"></a>00285 <span class="comment">     * See the documentation for GeodesicLine::Position.</span>
-<a name="l00286"></a>00286 <span class="comment">     **********************************************************************/</span>
-<a name="l00287"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a10b743a14701f620c0f41f1c6e1cee76">00287</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Position(real s12, real& lat2, real& lon2,
-<a name="l00288"></a>00288                         real& azi2, real& m12) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00289"></a>00289       real t;
-<a name="l00290"></a>00290       <span class="keywordflow">return</span> GenPosition(<span class="keyword">false</span>, s12,
-<a name="l00291"></a>00291                          LATITUDE | LONGITUDE |
-<a name="l00292"></a>00292                          AZIMUTH | REDUCEDLENGTH,
-<a name="l00293"></a>00293                          lat2, lon2, azi2, t, m12, t, t, t);
-<a name="l00294"></a>00294     }
-<a name="l00295"></a>00295 <span class="comment"></span>
-<a name="l00296"></a>00296 <span class="comment">    /**</span>
-<a name="l00297"></a>00297 <span class="comment">     * See the documentation for GeodesicLine::Position.</span>
-<a name="l00298"></a>00298 <span class="comment">     **********************************************************************/</span>
-<a name="l00299"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#ada48245beb736fe9ff3d8c491e9a691f">00299</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Position(real s12, real& lat2, real& lon2,
-<a name="l00300"></a>00300                         real& azi2, real& M12, real& M21)
-<a name="l00301"></a>00301       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00302"></a>00302       real t;
-<a name="l00303"></a>00303       <span class="keywordflow">return</span> GenPosition(<span class="keyword">false</span>, s12,
-<a name="l00304"></a>00304                          LATITUDE | LONGITUDE |
-<a name="l00305"></a>00305                          AZIMUTH | GEODESICSCALE,
-<a name="l00306"></a>00306                          lat2, lon2, azi2, t, t, M12, M21, t);
-<a name="l00307"></a>00307     }
-<a name="l00308"></a>00308 <span class="comment"></span>
-<a name="l00309"></a>00309 <span class="comment">    /**</span>
-<a name="l00310"></a>00310 <span class="comment">     * See the documentation for GeodesicLine::Position.</span>
-<a name="l00311"></a>00311 <span class="comment">     **********************************************************************/</span>
-<a name="l00312"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#aa42e5028aa78ef3ce8fbcb01b25eb458">00312</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Position(real s12,
-<a name="l00313"></a>00313                         real& lat2, real& lon2, real& azi2,
-<a name="l00314"></a>00314                         real& m12, real& M12, real& M21)
-<a name="l00315"></a>00315       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00316"></a>00316       real t;
-<a name="l00317"></a>00317       <span class="keywordflow">return</span> GenPosition(<span class="keyword">false</span>, s12,
-<a name="l00318"></a>00318                          LATITUDE | LONGITUDE | AZIMUTH |
-<a name="l00319"></a>00319                          REDUCEDLENGTH | GEODESICSCALE,
-<a name="l00320"></a>00320                          lat2, lon2, azi2, t, m12, M12, M21, t);
-<a name="l00321"></a>00321     }
-<a name="l00322"></a>00322 <span class="comment"></span>
-<a name="l00323"></a>00323 <span class="comment">    ///@}</span>
-<a name="l00324"></a>00324 <span class="comment"></span><span class="comment"></span>
-<a name="l00325"></a>00325 <span class="comment">    /** \name Position in terms of arc length</span>
-<a name="l00326"></a>00326 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00327"></a>00327 <span class="comment">    ///@{</span>
-<a name="l00328"></a>00328 <span class="comment"></span><span class="comment"></span>
-<a name="l00329"></a>00329 <span class="comment">    /**</span>
-<a name="l00330"></a>00330 <span class="comment">     * Compute the position of point 2 which is an arc length \e a12 (degrees)</span>
-<a name="l00331"></a>00331 <span class="comment">     * from point 1.</span>
-<a name="l00332"></a>00332 <span class="comment">     *</span>
-<a name="l00333"></a>00333 <span class="comment">     * @param[in] a12 arc length between point 1 and point 2 (degrees); it can</span>
-<a name="l00334"></a>00334 <span class="comment">     *   be signed.</span>
-<a name="l00335"></a>00335 <span class="comment">     * @param[out] lat2 latitude of point 2 (degrees).</span>
-<a name="l00336"></a>00336 <span class="comment">     * @param[out] lon2 longitude of point 2 (degrees); requires that the</span>
-<a name="l00337"></a>00337 <span class="comment">     *   GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00338"></a>00338 <span class="comment">     *   GeodesicLine::LONGITUDE.</span>
-<a name="l00339"></a>00339 <span class="comment">     * @param[out] azi2 (forward) azimuth at point 2 (degrees).</span>
-<a name="l00340"></a>00340 <span class="comment">     * @param[out] s12 distance between point 1 and point 2 (meters); requires</span>
-<a name="l00341"></a>00341 <span class="comment">     *   that the GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00342"></a>00342 <span class="comment">     *   GeodesicLine::DISTANCE.</span>
-<a name="l00343"></a>00343 <span class="comment">     * @param[out] m12 reduced length of geodesic (meters); requires that the</span>
-<a name="l00344"></a>00344 <span class="comment">     *   GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00345"></a>00345 <span class="comment">     *   GeodesicLine::REDUCEDLENGTH.</span>
-<a name="l00346"></a>00346 <span class="comment">     * @param[out] M12 geodesic scale of point 2 relative to point 1</span>
-<a name="l00347"></a>00347 <span class="comment">     *   (dimensionless); requires that the GeodesicLine object was constructed</span>
-<a name="l00348"></a>00348 <span class="comment">     *   with \e caps |= GeodesicLine::GEODESICSCALE.</span>
-<a name="l00349"></a>00349 <span class="comment">     * @param[out] M21 geodesic scale of point 1 relative to point 2</span>
-<a name="l00350"></a>00350 <span class="comment">     *   (dimensionless); requires that the GeodesicLine object was constructed</span>
-<a name="l00351"></a>00351 <span class="comment">     *   with \e caps |= GeodesicLine::GEODESICSCALE.</span>
-<a name="l00352"></a>00352 <span class="comment">     * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires</span>
-<a name="l00353"></a>00353 <span class="comment">     *   that the GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00354"></a>00354 <span class="comment">     *   GeodesicLine::AREA.</span>
-<a name="l00355"></a>00355 <span class="comment">     *</span>
-<a name="l00356"></a>00356 <span class="comment">     * The values of \e lon2 and \e azi2 returned are in the range [-180, 180).</span>
-<a name="l00357"></a>00357 <span class="comment">     *</span>
-<a name="l00358"></a>00358 <span class="comment">     * Requesting a value which the GeodesicLine object is not capable of</span>
-<a name="l00359"></a>00359 <span class="comment">     * computing is not an error; the corresponding argument will not be</span>
-<a name="l00360"></a>00360 <span class="comment">     * altered.</span>
-<a name="l00361"></a>00361 <span class="comment">     *</span>
-<a name="l00362"></a>00362 <span class="comment">     * The following functions are overloaded versions of</span>
-<a name="l00363"></a>00363 <span class="comment">     * GeodesicLine::ArcPosition which omit some of the output parameters.</span>
-<a name="l00364"></a>00364 <span class="comment">     **********************************************************************/</span>
-<a name="l00365"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">00365</a>     <span class="keywordtype">void</span> ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
-<a name="l00366"></a>00366                      real& s12, real& m12, real& M12, real& M21,
-<a name="l00367"></a>00367                      real& S12) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00368"></a>00368       GenPosition(<span class="keyword">true</span>, a12,
-<a name="l00369"></a>00369                   LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
-<a name="l00370"></a>00370                   REDUCEDLENGTH | GEODESICSCALE | AREA,
-<a name="l00371"></a>00371                   lat2, lon2, azi2, s12, m12, M12, M21, S12);
-<a name="l00372"></a>00372     }
-<a name="l00373"></a>00373 <span class="comment"></span>
-<a name="l00374"></a>00374 <span class="comment">    /**</span>
-<a name="l00375"></a>00375 <span class="comment">     * See the documentation for GeodesicLine::ArcPosition.</span>
-<a name="l00376"></a>00376 <span class="comment">     **********************************************************************/</span>
-<a name="l00377"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#afa377ee7344df5759cb7ea1022ff8288">00377</a>     <span class="keywordtype">void</span> ArcPosition(real a12, real& lat2, real& lon2)
-<a name="l00378"></a>00378       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00379"></a>00379       real t;
-<a name="l00380"></a>00380       GenPosition(<span class="keyword">true</span>, a12,
-<a name="l00381"></a>00381                   LATITUDE | LONGITUDE,
-<a name="l00382"></a>00382                   lat2, lon2, t, t, t, t, t, t);
-<a name="l00383"></a>00383     }
-<a name="l00384"></a>00384 <span class="comment"></span>
-<a name="l00385"></a>00385 <span class="comment">    /**</span>
-<a name="l00386"></a>00386 <span class="comment">     * See the documentation for GeodesicLine::ArcPosition.</span>
-<a name="l00387"></a>00387 <span class="comment">     **********************************************************************/</span>
-<a name="l00388"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a2d147b25bcef6a7258fabc581a2d64a1">00388</a>     <span class="keywordtype">void</span> ArcPosition(real a12,
-<a name="l00389"></a>00389                      real& lat2, real& lon2, real& azi2)
-<a name="l00390"></a>00390       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00391"></a>00391       real t;
-<a name="l00392"></a>00392       GenPosition(<span class="keyword">true</span>, a12,
-<a name="l00393"></a>00393                   LATITUDE | LONGITUDE | AZIMUTH,
-<a name="l00394"></a>00394                   lat2, lon2, azi2, t, t, t, t, t);
-<a name="l00395"></a>00395     }
-<a name="l00396"></a>00396 <span class="comment"></span>
-<a name="l00397"></a>00397 <span class="comment">    /**</span>
-<a name="l00398"></a>00398 <span class="comment">     * See the documentation for GeodesicLine::ArcPosition.</span>
-<a name="l00399"></a>00399 <span class="comment">     **********************************************************************/</span>
-<a name="l00400"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#afdedfa0bc105dbe5de4c292115c7b7ae">00400</a>     <span class="keywordtype">void</span> ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
-<a name="l00401"></a>00401                      real& s12) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00402"></a>00402       real t;
-<a name="l00403"></a>00403       GenPosition(<span class="keyword">true</span>, a12,
-<a name="l00404"></a>00404                   LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
-<a name="l00405"></a>00405                   lat2, lon2, azi2, s12, t, t, t, t);
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407 <span class="comment"></span>
-<a name="l00408"></a>00408 <span class="comment">    /**</span>
-<a name="l00409"></a>00409 <span class="comment">     * See the documentation for GeodesicLine::ArcPosition.</span>
-<a name="l00410"></a>00410 <span class="comment">     **********************************************************************/</span>
-<a name="l00411"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#ad6b2013f9dcde3f4bf867632f6a2d1ff">00411</a>     <span class="keywordtype">void</span> ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
-<a name="l00412"></a>00412                      real& s12, real& m12) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00413"></a>00413       real t;
-<a name="l00414"></a>00414       GenPosition(<span class="keyword">true</span>, a12,
-<a name="l00415"></a>00415                   LATITUDE | LONGITUDE | AZIMUTH |
-<a name="l00416"></a>00416                   DISTANCE | REDUCEDLENGTH,
-<a name="l00417"></a>00417                   lat2, lon2, azi2, s12, m12, t, t, t);
-<a name="l00418"></a>00418     }
-<a name="l00419"></a>00419 <span class="comment"></span>
-<a name="l00420"></a>00420 <span class="comment">    /**</span>
-<a name="l00421"></a>00421 <span class="comment">     * See the documentation for GeodesicLine::ArcPosition.</span>
-<a name="l00422"></a>00422 <span class="comment">     **********************************************************************/</span>
-<a name="l00423"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a2e0249a548d2dd9c882cb4a8de17d8eb">00423</a>     <span class="keywordtype">void</span> ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
-<a name="l00424"></a>00424                      real& s12, real& M12, real& M21)
-<a name="l00425"></a>00425       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00426"></a>00426       real t;
-<a name="l00427"></a>00427       GenPosition(<span class="keyword">true</span>, a12,
-<a name="l00428"></a>00428                   LATITUDE | LONGITUDE | AZIMUTH |
-<a name="l00429"></a>00429                   DISTANCE | GEODESICSCALE,
-<a name="l00430"></a>00430                   lat2, lon2, azi2, s12, t, M12, M21, t);
-<a name="l00431"></a>00431     }
-<a name="l00432"></a>00432 <span class="comment"></span>
-<a name="l00433"></a>00433 <span class="comment">    /**</span>
-<a name="l00434"></a>00434 <span class="comment">     * See the documentation for GeodesicLine::ArcPosition.</span>
-<a name="l00435"></a>00435 <span class="comment">     **********************************************************************/</span>
-<a name="l00436"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#af286d2071bdc59e68046dd2557115f21">00436</a>     <span class="keywordtype">void</span> ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
-<a name="l00437"></a>00437                      real& s12, real& m12, real& M12, real& M21)
-<a name="l00438"></a>00438       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00439"></a>00439       real t;
-<a name="l00440"></a>00440       GenPosition(<span class="keyword">true</span>, a12,
-<a name="l00441"></a>00441                   LATITUDE | LONGITUDE | AZIMUTH |
-<a name="l00442"></a>00442                   DISTANCE | REDUCEDLENGTH | GEODESICSCALE,
-<a name="l00443"></a>00443                   lat2, lon2, azi2, s12, m12, M12, M21, t);
-<a name="l00444"></a>00444     }<span class="comment"></span>
-<a name="l00445"></a>00445 <span class="comment">    ///@}</span>
-<a name="l00446"></a>00446 <span class="comment"></span><span class="comment"></span>
-<a name="l00447"></a>00447 <span class="comment">    /** \name The general position function.</span>
-<a name="l00448"></a>00448 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00449"></a>00449 <span class="comment">    ///@{</span>
-<a name="l00450"></a>00450 <span class="comment"></span><span class="comment"></span>
-<a name="l00451"></a>00451 <span class="comment">    /**</span>
-<a name="l00452"></a>00452 <span class="comment">     * The general position function.  GeodesicLine::Position and</span>
-<a name="l00453"></a>00453 <span class="comment">     * GeodesicLine::ArcPosition are defined in terms of this function.</span>
-<a name="l00454"></a>00454 <span class="comment">     *</span>
-<a name="l00455"></a>00455 <span class="comment">     * @param[in] arcmode boolean flag determining the meaning of the second</span>
-<a name="l00456"></a>00456 <span class="comment">     *   parameter; if arcmode is false, then the GeodesicLine object must have</span>
-<a name="l00457"></a>00457 <span class="comment">     *   been constructed with \e caps |= GeodesicLine::DISTANCE_IN.</span>
-<a name="l00458"></a>00458 <span class="comment">     * @param[in] s12_a12 if \e arcmode is false, this is the distance between</span>
-<a name="l00459"></a>00459 <span class="comment">     *   point 1 and point 2 (meters); otherwise it is the arc length between</span>
-<a name="l00460"></a>00460 <span class="comment">     *   point 1 and point 2 (degrees); it can be signed.</span>
-<a name="l00461"></a>00461 <span class="comment">     * @param[in] outmask a bitor'ed combination of GeodesicLine::mask values</span>
-<a name="l00462"></a>00462 <span class="comment">     *   specifying which of the following parameters should be set.</span>
-<a name="l00463"></a>00463 <span class="comment">     * @param[out] lat2 latitude of point 2 (degrees).</span>
-<a name="l00464"></a>00464 <span class="comment">     * @param[out] lon2 longitude of point 2 (degrees); requires that the</span>
-<a name="l00465"></a>00465 <span class="comment">     *   GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00466"></a>00466 <span class="comment">     *   GeodesicLine::LONGITUDE.</span>
-<a name="l00467"></a>00467 <span class="comment">     * @param[out] azi2 (forward) azimuth at point 2 (degrees).</span>
-<a name="l00468"></a>00468 <span class="comment">     * @param[out] s12 distance between point 1 and point 2 (meters); requires</span>
-<a name="l00469"></a>00469 <span class="comment">     *   that the GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00470"></a>00470 <span class="comment">     *   GeodesicLine::DISTANCE.</span>
-<a name="l00471"></a>00471 <span class="comment">     * @param[out] m12 reduced length of geodesic (meters); requires that the</span>
-<a name="l00472"></a>00472 <span class="comment">     *   GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00473"></a>00473 <span class="comment">     *   GeodesicLine::REDUCEDLENGTH.</span>
-<a name="l00474"></a>00474 <span class="comment">     * @param[out] M12 geodesic scale of point 2 relative to point 1</span>
-<a name="l00475"></a>00475 <span class="comment">     *   (dimensionless); requires that the GeodesicLine object was constructed</span>
-<a name="l00476"></a>00476 <span class="comment">     *   with \e caps |= GeodesicLine::GEODESICSCALE.</span>
-<a name="l00477"></a>00477 <span class="comment">     * @param[out] M21 geodesic scale of point 1 relative to point 2</span>
-<a name="l00478"></a>00478 <span class="comment">     *   (dimensionless); requires that the GeodesicLine object was constructed</span>
-<a name="l00479"></a>00479 <span class="comment">     *   with \e caps |= GeodesicLine::GEODESICSCALE.</span>
-<a name="l00480"></a>00480 <span class="comment">     * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires</span>
-<a name="l00481"></a>00481 <span class="comment">     *   that the GeodesicLine object was constructed with \e caps |=</span>
-<a name="l00482"></a>00482 <span class="comment">     *   GeodesicLine::AREA.</span>
-<a name="l00483"></a>00483 <span class="comment">     * @return \e a12 arc length of between point 1 and point 2 (degrees).</span>
-<a name="l00484"></a>00484 <span class="comment">     *</span>
-<a name="l00485"></a>00485 <span class="comment">     * The GeodesicLine::mask values possible for \e outmask are</span>
-<a name="l00486"></a>00486 <span class="comment">     * - \e outmask |= GeodesicLine::LATITUDE for the latitude \e lat2.</span>
-<a name="l00487"></a>00487 <span class="comment">     * - \e outmask |= GeodesicLine::LONGITUDE for the latitude \e lon2.</span>
-<a name="l00488"></a>00488 <span class="comment">     * - \e outmask |= GeodesicLine::AZIMUTH for the latitude \e azi2.</span>
-<a name="l00489"></a>00489 <span class="comment">     * - \e outmask |= GeodesicLine::DISTANCE for the distance \e s12.</span>
-<a name="l00490"></a>00490 <span class="comment">     * - \e outmask |= GeodesicLine::REDUCEDLENGTH for the reduced length \e</span>
-<a name="l00491"></a>00491 <span class="comment">     *   m12.</span>
-<a name="l00492"></a>00492 <span class="comment">     * - \e outmask |= GeodesicLine::GEODESICSCALE for the geodesic scales \e</span>
-<a name="l00493"></a>00493 <span class="comment">     *   M12 and \e M21.</span>
-<a name="l00494"></a>00494 <span class="comment">     * - \e outmask |= GeodesicLine::AREA for the area \e S12.</span>
-<a name="l00495"></a>00495 <span class="comment">     * .</span>
-<a name="l00496"></a>00496 <span class="comment">     * Requesting a value which the GeodesicLine object is not capable of</span>
-<a name="l00497"></a>00497 <span class="comment">     * computing is not an error; the corresponding argument will not be</span>
-<a name="l00498"></a>00498 <span class="comment">     * altered.  Note, however, that the arc length is always computed and</span>
-<a name="l00499"></a>00499 <span class="comment">     * returned as the function value.</span>
-<a name="l00500"></a>00500 <span class="comment">     **********************************************************************/</span>
-<a name="l00501"></a>00501     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> GenPosition(<span class="keywordtype">bool</span> arcmode, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> s12_a12, <span class="keywordtype">unsigned</span> outmask,
-<a name="l00502"></a>00502                            <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi2,
-<a name="l00503"></a>00503                            <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& s12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& m12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M21,
-<a name="l00504"></a>00504                            <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& S12) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00505"></a>00505 <span class="comment"></span>
-<a name="l00506"></a>00506 <span class="comment">    ///@}</span>
-<a name="l00507"></a>00507 <span class="comment"></span><span class="comment"></span>
-<a name="l00508"></a>00508 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00509"></a>00509 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00510"></a>00510 <span class="comment">    ///@{</span>
-<a name="l00511"></a>00511 <span class="comment"></span><span class="comment"></span>
-<a name="l00512"></a>00512 <span class="comment">    /**</span>
-<a name="l00513"></a>00513 <span class="comment">     * @return true if the object has been initialized.</span>
-<a name="l00514"></a>00514 <span class="comment">     **********************************************************************/</span>
-<a name="l00515"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#af7e248d7632f56cf7abc6eac4927a587">00515</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1GeodesicLine.html#af7e248d7632f56cf7abc6eac4927a587">Init</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _caps != 0U; }
-<a name="l00516"></a>00516 <span class="comment"></span>
-<a name="l00517"></a>00517 <span class="comment">    /**</span>
-<a name="l00518"></a>00518 <span class="comment">     * @return \e lat1 the latitude of point 1 (degrees).</span>
-<a name="l00519"></a>00519 <span class="comment">     **********************************************************************/</span>
-<a name="l00520"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a00a291e94d0c688a168a58623a360659">00520</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Latitude() <span class="keyword">const</span> throw()
-<a name="l00521"></a>00521     { <span class="keywordflow">return</span> Init() ? _lat1 : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00522"></a>00522 <span class="comment"></span>
-<a name="l00523"></a>00523 <span class="comment">    /**</span>
-<a name="l00524"></a>00524 <span class="comment">     * @return \e lon1 the longitude of point 1 (degrees).</span>
-<a name="l00525"></a>00525 <span class="comment">     **********************************************************************/</span>
-<a name="l00526"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#ac567ccf20c683319370f4c747f23966a">00526</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Longitude() <span class="keyword">const</span> throw()
-<a name="l00527"></a>00527     { <span class="keywordflow">return</span> Init() ? _lon1 : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00528"></a>00528 <span class="comment"></span>
-<a name="l00529"></a>00529 <span class="comment">    /**</span>
-<a name="l00530"></a>00530 <span class="comment">     * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.</span>
-<a name="l00531"></a>00531 <span class="comment">     **********************************************************************/</span>
-<a name="l00532"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a40707b9e989c95418b2559b271cc2699">00532</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Azimuth() <span class="keyword">const</span> throw()
-<a name="l00533"></a>00533     { <span class="keywordflow">return</span> Init() ? _azi1 : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00534"></a>00534 <span class="comment"></span>
-<a name="l00535"></a>00535 <span class="comment">    /**</span>
-<a name="l00536"></a>00536 <span class="comment">     * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses</span>
-<a name="l00537"></a>00537 <span class="comment">     * the equator in a northward direction.</span>
-<a name="l00538"></a>00538 <span class="comment">     **********************************************************************/</span>
-<a name="l00539"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#ad117912c4fc4ef29bf4050c9be3267f2">00539</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeodesicLine.html#ad117912c4fc4ef29bf4050c9be3267f2">EquatorialAzimuth</a>() <span class="keyword">const</span> throw() {
-<a name="l00540"></a>00540       <span class="keywordflow">return</span> Init() ?
-<a name="l00541"></a>00541         atan2(_salp0, _calp0) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>() : Math::NaN<real>();
-<a name="l00542"></a>00542     }
-<a name="l00543"></a>00543 <span class="comment"></span>
-<a name="l00544"></a>00544 <span class="comment">    /**</span>
-<a name="l00545"></a>00545 <span class="comment">     * @return \e a1 the arc length (degrees) between the northward equatorial</span>
-<a name="l00546"></a>00546 <span class="comment">     * crossing and point 1.</span>
-<a name="l00547"></a>00547 <span class="comment">     **********************************************************************/</span>
-<a name="l00548"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a308c7fb4f7c562a8c604453bf2ee2ca2">00548</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GeodesicLine.html#a308c7fb4f7c562a8c604453bf2ee2ca2">EquatorialArc</a>() <span class="keyword">const</span> throw() {
-<a name="l00549"></a>00549       <span class="keywordflow">return</span> Init() ?
-<a name="l00550"></a>00550         atan2(_ssig1, _csig1) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>() : Math::NaN<real>();
-<a name="l00551"></a>00551     }
-<a name="l00552"></a>00552 <span class="comment"></span>
-<a name="l00553"></a>00553 <span class="comment">    /**</span>
-<a name="l00554"></a>00554 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00555"></a>00555 <span class="comment">     *   the value inherited from the Geodesic object used in the constructor.</span>
-<a name="l00556"></a>00556 <span class="comment">     **********************************************************************/</span>
-<a name="l00557"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#af8953029b9985a3929fe406f7530143b">00557</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MajorRadius() <span class="keyword">const</span> throw()
-<a name="l00558"></a>00558     { <span class="keywordflow">return</span> Init() ? _a : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00559"></a>00559 <span class="comment"></span>
-<a name="l00560"></a>00560 <span class="comment">    /**</span>
-<a name="l00561"></a>00561 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value</span>
-<a name="l00562"></a>00562 <span class="comment">     *   inherited from the Geodesic object used in the constructor.</span>
-<a name="l00563"></a>00563 <span class="comment">     **********************************************************************/</span>
-<a name="l00564"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a42e1f97e3ed564f98b305450b0d04590">00564</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Flattening() <span class="keyword">const</span> throw()
-<a name="l00565"></a>00565     { <span class="keywordflow">return</span> Init() ? _f : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00566"></a>00566 <span class="comment"></span>
-<a name="l00567"></a>00567 <span class="comment">    /// \cond SKIP</span>
-<a name="l00568"></a>00568 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00569"></a>00569 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00570"></a>00570 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00571"></a>00571 <span class="comment">     **********************************************************************/</span>
-<a name="l00572"></a>00572     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw()
-<a name="l00573"></a>00573     { <span class="keywordflow">return</span> Init() ? 1/_f : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }<span class="comment"></span>
-<a name="l00574"></a>00574 <span class="comment">    /// \endcond</span>
-<a name="l00575"></a>00575 <span class="comment"></span><span class="comment"></span>
-<a name="l00576"></a>00576 <span class="comment">    /**</span>
-<a name="l00577"></a>00577 <span class="comment">     * @return \e caps the computational capabilities that this object was</span>
-<a name="l00578"></a>00578 <span class="comment">     *   constructed with.  LATITUDE and AZIMUTH are always included.</span>
-<a name="l00579"></a>00579 <span class="comment">     **********************************************************************/</span>
-<a name="l00580"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a21d07549d1171ad05c7318533c4c8970">00580</a>     <span class="keywordtype">unsigned</span> <a class="code" href="classGeographicLib_1_1GeodesicLine.html#a21d07549d1171ad05c7318533c4c8970">Capabilities</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _caps; }
-<a name="l00581"></a>00581 <span class="comment"></span>
-<a name="l00582"></a>00582 <span class="comment">    /**</span>
-<a name="l00583"></a>00583 <span class="comment">     * @param[in] testcaps a set of bitor'ed GeodesicLine::mask values.</span>
-<a name="l00584"></a>00584 <span class="comment">     * @return true if the GeodesicLine object has all these capabilities.</span>
-<a name="l00585"></a>00585 <span class="comment">     **********************************************************************/</span>
-<a name="l00586"></a><a class="code" href="classGeographicLib_1_1GeodesicLine.html#a4e12366c2ce02e7a96ee778eedb55bf9">00586</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1GeodesicLine.html#a4e12366c2ce02e7a96ee778eedb55bf9">Capabilities</a>(<span class="keywordtype">unsigned</span> testcaps) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00587"></a>00587       testcaps &= OUT_ALL;
-<a name="l00588"></a>00588       <span class="keywordflow">return</span> (_caps & testcaps) == testcaps;
-<a name="l00589"></a>00589     }<span class="comment"></span>
-<a name="l00590"></a>00590 <span class="comment">    ///@}</span>
-<a name="l00591"></a>00591 <span class="comment"></span>
-<a name="l00592"></a>00592   };
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596 <span class="preprocessor">#endif  // GEOGRAPHICLIB_GEODESICLINE_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeodesicProj.1.html b/doc/html/GeodesicProj.1.html
deleted file mode 100644
index 2d3f493..0000000
--- a/doc/html/GeodesicProj.1.html
+++ /dev/null
@@ -1,206 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>GeodesicProj -- perform projections based on geodesics</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>GeodesicProj -- perform projections based on geodesics</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>GeodesicProj</strong> ( <strong>-z</strong> | <strong>-c</strong> | <strong>-g</strong> ) <em>lat0</em> <em>lon0</em> [ <strong>-r</strong> ]
-[ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Perform projections based on geodesics.  Convert geodetic coordinates to
-either azimuthal equidistant, Cassini-Soldner, or gnomonic coordinates.
-The center of the projection (<em>lat0</em>, <em>lon0</em>) is specified by either the <strong>-c</strong>
-option (for Cassini-Soldner), the <strong>-z</strong> option (for azimuthal equidistant),
-or the <strong>-g</strong> option (for gnomonic).  At least one of these options must be
-given (the last one given is used).</p>
-<p>Geodetic coordinates are provided on standard input as a set of lines
-containing (blank separated) <em>latitude</em> and <em>longitude</em> (decimal
-degrees or degrees, minutes, seconds).  For each set of geodetic
-coordinates, the corresponding projected coordinates <em>x</em>, <em>y</em> (meters)
-are printed on standard output together with the azimuth <em>azi</em>
-(degrees) and reciprocal scale <em>rk</em>.  For Cassini-Soldner, <em>azi</em> is
-the bearing of the easting direction and the scale in the easting
-direction is 1 and the scale in the northing direction is 1/<em>rk</em>.  For
-azimuthal equidistant and gnomonic, <em>azi</em> is the bearing of the radial
-direction and the scale in the azimuthal direction is 1/<em>rk</em>.  For
-azimuthal equidistant and gnomonic, the scales in the radial direction
-are 1 and 1/<em>rk</em>^2, respectively.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="z" class="item"><strong>-z</strong></a></strong></dt>
-
-<dd>
-<p>use the azimuthal equidistant projection centered at latitude = <em>lat0</em>,
-longitude = <em>lon0</em>.</p>
-</dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
-
-<dd>
-<p>use the Cassini-Soldner projection centered at latitude = <em>lat0</em>,
-longitude = <em>lon0</em>.</p>
-</dd>
-<dt><strong><a name="g" class="item"><strong>-g</strong></a></strong></dt>
-
-<dd>
-<p>use the ellipsoidal gnomonic projection centered at latitude = <em>lat0</em>,
-longitude = <em>lon0</em>.</p>
-</dd>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
-
-<dd>
-<p>perform the reverse projection.  <em>x</em> and <em>y</em> are given on standard
-input and each line of standard output gives <em>latitude</em>, <em>longitude</em>,
-<em>azi</em>, and <em>rk</em>.</p>
-</dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
-
-<dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 48.648 -2.007 | GeodesicProj -c 48.836 2.337
-   => -319919 -11791 86.7 0.999
-   echo -319919 -11791 | GeodesicProj -c 48.836 2.337 -r
-   => 48.648 -2.007 86.7 0.999</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>GeodesicProj</strong> to return an exit
-code of 1.  However, an error does not cause <strong>GeodesicProj</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The ellipsoidal gnomonic projection is derived in Section 13 of
-C. F. F. Karney, <em>Geodesics on an ellipsoid of revolution</em>, Feb. 2011;
-preprint <a href="http://arxiv.org/abs/1102.1215">http://arxiv.org/abs/1102.1215</a>.  See also Section 8 of
-C. F. F. Karney, <em>Algorithms for geodesics</em>, Sept. 2011; preprint
-<a href="http://arxiv.org/abs/1109.4448">http://arxiv.org/abs/1109.4448</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>GeodesicProj</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>GeodesicProj</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-08.  Prior to version 1.9 it was
-called EquidistantTest.</p>
-
-</body>
-
-</html>
diff --git a/doc/html/GeodesicProj_8cpp.html b/doc/html/GeodesicProj_8cpp.html
deleted file mode 100644
index 61fb37c..0000000
--- a/doc/html/GeodesicProj_8cpp.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeodesicProj.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeodesicProj.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for geodesic projections.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="Geodesic_8hpp_source.html">GeographicLib/Geodesic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="AzimuthalEquidistant_8hpp_source.html">GeographicLib/AzimuthalEquidistant.hpp</a>></code><br/>
-<code>#include <<a class="el" href="CassiniSoldner_8hpp_source.html">GeographicLib/CassiniSoldner.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Gnomonic_8hpp_source.html">GeographicLib/Gnomonic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include "GeodesicProj.usage"</code><br/>
-</div>
-<p><a href="GeodesicProj_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="GeodesicProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for geodesic projections. </p>
-<p>Copyright (c) Charles Karney (2009-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o GeodesicProj \ <a class="el" href="GeodesicProj_8cpp.html" title="Command line utility for geodesic projections.">GeodesicProj.cpp</a> \ ../src/AzimuthalEquidistant.cpp \ ../src/CassiniSoldner.cpp \ ../src/DMS.cpp \ ../src/Geodesic.cpp \ ../src/GeodesicLine.cpp \ ../src/Gnomonic.cpp</p>
-<p>See the <a href="GeodesicProj.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="GeodesicProj_8cpp_source.html">GeodesicProj.cpp</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="GeodesicProj.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GeodesicProj_8cpp_source.html#l00037">37</a> of file <a class="el" href="GeodesicProj_8cpp_source.html">GeodesicProj.cpp</a>.</p>
-
-<p>References <a class="el" href="DMS_8cpp_source.html#l00207">GeographicLib::DMS::DecodeLatLon()</a>, <a class="el" href="AzimuthalEquidistant_8cpp_source.html#l00036">GeographicLib::AzimuthalEquidistant::Reverse()</a>, <a class="el" href="Gnomonic_8cpp_source.html#l00044">GeographicLib::Gnomonic::Reverse()</a>, <a class="el" href="AzimuthalEquidistant_8cpp_source.html#l00025">GeographicLib::AzimuthalEquidistant::Forward()</a>, and <a class="el" href="Gnomonic_8cpp_source.html#l00025">G [...]
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeodesicProj_8cpp_source.html b/doc/html/GeodesicProj_8cpp_source.html
deleted file mode 100644
index 4a328a9..0000000
--- a/doc/html/GeodesicProj_8cpp_source.html
+++ /dev/null
@@ -1,298 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeodesicProj.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeodesicProj.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GeodesicProj_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GeodesicProj.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for geodesic projections</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o GeodesicProj \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       GeodesicProj.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/AzimuthalEquidistant.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/CassiniSoldner.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00015"></a>00015 <span class="comment"> *       ../src/Geodesic.cpp \</span>
-<a name="l00016"></a>00016 <span class="comment"> *       ../src/GeodesicLine.cpp \</span>
-<a name="l00017"></a>00017 <span class="comment"> *       ../src/Gnomonic.cpp</span>
-<a name="l00018"></a>00018 <span class="comment"> *</span>
-<a name="l00019"></a>00019 <span class="comment"> * See the <a href="GeodesicProj.1.html">man page</a> for usage</span>
-<a name="l00020"></a>00020 <span class="comment"> * information.</span>
-<a name="l00021"></a>00021 <span class="comment"> **********************************************************************/</span>
-<a name="l00022"></a>00022 
-<a name="l00023"></a>00023 <span class="preprocessor">#include <iostream></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <sstream></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <string></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <sstream></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <fstream></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="AzimuthalEquidistant_8hpp.html" title="Header for GeographicLib::AzimuthalEquidistant class.">GeographicLib/AzimuthalEquidistant.hpp</a>></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="CassiniSoldner_8hpp.html" title="Header for GeographicLib::CassiniSoldner class.">GeographicLib/CassiniSoldner.hpp</a>></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <<a class="code" href="Gnomonic_8hpp.html" title="Header for GeographicLib::Gnomonic class.">GeographicLib/Gnomonic.hpp</a>></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include "GeodesicProj.usage"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a><a class="code" href="GeodesicProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00037</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00038"></a>00038   <span class="keywordflow">try</span> {
-<a name="l00039"></a>00039     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00040"></a>00040     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00041"></a>00041     <span class="keywordtype">bool</span> azimuthal = <span class="keyword">false</span>, cassini = <span class="keyword">false</span>, gnomonic = <span class="keyword">false</span>, reverse = <span class="keyword">false</span>;
-<a name="l00042"></a>00042     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat0 = 0, lon0 = 0;
-<a name="l00043"></a>00043     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00044"></a>00044       a = <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<real>(),
-<a name="l00045"></a>00045       f = Constants::WGS84_f<real>();
-<a name="l00046"></a>00046     std::string istring, ifile, ofile, cdelim;
-<a name="l00047"></a>00047     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>;
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00050"></a>00050       std::string arg(argv[m]);
-<a name="l00051"></a>00051       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-r"</span>)
-<a name="l00052"></a>00052         reverse = <span class="keyword">true</span>;
-<a name="l00053"></a>00053       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-c"</span> || arg == <span class="stringliteral">"-z"</span> || arg == <span class="stringliteral">"-g"</span>) {
-<a name="l00054"></a>00054         cassini = arg == <span class="stringliteral">"-c"</span>;
-<a name="l00055"></a>00055         azimuthal = arg == <span class="stringliteral">"-z"</span>;
-<a name="l00056"></a>00056         gnomonic = arg == <span class="stringliteral">"-g"</span>;
-<a name="l00057"></a>00057         <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00058"></a>00058         <span class="keywordflow">try</span> {
-<a name="l00059"></a>00059           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(std::string(argv[m + 1]), std::string(argv[m + 2]),
-<a name="l00060"></a>00060                             lat0, lon0);
-<a name="l00061"></a>00061         }
-<a name="l00062"></a>00062         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00063"></a>00063           std::cerr << <span class="stringliteral">"Error decoding arguments of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00064"></a>00064                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00065"></a>00065           <span class="keywordflow">return</span> 1;
-<a name="l00066"></a>00066         }
-<a name="l00067"></a>00067         m += 2;
-<a name="l00068"></a>00068       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-e"</span>) {
-<a name="l00069"></a>00069         <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00070"></a>00070         <span class="keywordflow">try</span> {
-<a name="l00071"></a>00071           a = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m + 1]));
-<a name="l00072"></a>00072           f = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(std::string(argv[m + 2]));
-<a name="l00073"></a>00073         }
-<a name="l00074"></a>00074         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00075"></a>00075           std::cerr << <span class="stringliteral">"Error decoding arguments of -e: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00076"></a>00076           <span class="keywordflow">return</span> 1;
-<a name="l00077"></a>00077         }
-<a name="l00078"></a>00078         m += 2;
-<a name="l00079"></a>00079       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00080"></a>00080         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00081"></a>00081         istring = argv[m];
-<a name="l00082"></a>00082       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00083"></a>00083         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00084"></a>00084         ifile = argv[m];
-<a name="l00085"></a>00085       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00086"></a>00086         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00087"></a>00087         ofile = argv[m];
-<a name="l00088"></a>00088       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00089"></a>00089         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00090"></a>00090         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00091"></a>00091           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00092"></a>00092           <span class="keywordflow">return</span> 1;
-<a name="l00093"></a>00093         }
-<a name="l00094"></a>00094         lsep = argv[m][0];
-<a name="l00095"></a>00095       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00096"></a>00096         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00097"></a>00097         cdelim = argv[m];
-<a name="l00098"></a>00098       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00099"></a>00099         std::cout
-<a name="l00100"></a>00100           << argv[0]
-<a name="l00101"></a>00101           << <span class="stringliteral">": $Id: d6745c19af3da288a8f95b4c6a9003906409800c $\n"</span>
-<a name="l00102"></a>00102           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00103"></a>00103         <span class="keywordflow">return</span> 0;
-<a name="l00104"></a>00104       } <span class="keywordflow">else</span>
-<a name="l00105"></a>00105         <span class="keywordflow">return</span> usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00106"></a>00106     }
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00109"></a>00109       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00110"></a>00110       <span class="keywordflow">return</span> 1;
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00113"></a>00113     std::ifstream infile;
-<a name="l00114"></a>00114     std::istringstream instring;
-<a name="l00115"></a>00115     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00116"></a>00116       infile.open(ifile.c_str());
-<a name="l00117"></a>00117       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00118"></a>00118         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00119"></a>00119         <span class="keywordflow">return</span> 1;
-<a name="l00120"></a>00120       }
-<a name="l00121"></a>00121     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00122"></a>00122       std::string::size_type m = 0;
-<a name="l00123"></a>00123       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00124"></a>00124         m = istring.find(lsep, m);
-<a name="l00125"></a>00125         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00126"></a>00126           <span class="keywordflow">break</span>;
-<a name="l00127"></a>00127         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00128"></a>00128       }
-<a name="l00129"></a>00129       instring.str(istring);
-<a name="l00130"></a>00130     }
-<a name="l00131"></a>00131     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00132"></a>00132       (!istring.empty() ? &instring : &std::cin);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     std::ofstream outfile;
-<a name="l00135"></a>00135     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00136"></a>00136     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00137"></a>00137       outfile.open(ofile.c_str());
-<a name="l00138"></a>00138       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00139"></a>00139         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00140"></a>00140         <span class="keywordflow">return</span> 1;
-<a name="l00141"></a>00141       }
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145     <span class="keywordflow">if</span> (!(azimuthal || cassini || gnomonic)) {
-<a name="l00146"></a>00146       std::cerr << <span class="stringliteral">"Must specify \"-z lat0 lon0\" or "</span>
-<a name="l00147"></a>00147                 << <span class="stringliteral">"\"-c lat0 lon0\" or \"-g lat0 lon0\"\n"</span>;
-<a name="l00148"></a>00148       <span class="keywordflow">return</span> 1;
-<a name="l00149"></a>00149     }
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> geod(a, f);
-<a name="l00152"></a>00152     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">CassiniSoldner</a> cs = cassini ?
-<a name="l00153"></a>00153       <a class="code" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">CassiniSoldner</a>(lat0, lon0, geod) : CassiniSoldner(geod);
-<a name="l00154"></a>00154     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">AzimuthalEquidistant</a> az(geod);
-<a name="l00155"></a>00155     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">Gnomonic</a> gn(geod);
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     std::string s;
-<a name="l00158"></a>00158     <span class="keywordtype">int</span> retval = 0;
-<a name="l00159"></a>00159     std::cout << std::fixed;
-<a name="l00160"></a>00160     <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00161"></a>00161       <span class="keywordflow">try</span> {
-<a name="l00162"></a>00162         std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00163"></a>00163         <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00164"></a>00164           std::string::size_type m = s.find(cdelim);
-<a name="l00165"></a>00165           <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00166"></a>00166             eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00167"></a>00167             s = s.substr(0, m);
-<a name="l00168"></a>00168           }
-<a name="l00169"></a>00169         }
-<a name="l00170"></a>00170         std::istringstream str(s);
-<a name="l00171"></a>00171         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, lon, x, y, azi, rk;
-<a name="l00172"></a>00172         std::string stra, strb;
-<a name="l00173"></a>00173         <span class="keywordflow">if</span> (!(str >> stra >> strb))
-<a name="l00174"></a>00174           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00175"></a>00175         <span class="keywordflow">if</span> (reverse) {
-<a name="l00176"></a>00176           x = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(stra);
-<a name="l00177"></a>00177           y = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(strb);
-<a name="l00178"></a>00178         } <span class="keywordflow">else</span>
-<a name="l00179"></a>00179           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(stra, strb, lat, lon);
-<a name="l00180"></a>00180         std::string strc;
-<a name="l00181"></a>00181         <span class="keywordflow">if</span> (str >> strc)
-<a name="l00182"></a>00182           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extraneous input: "</span> + strc);
-<a name="l00183"></a>00183         <span class="keywordflow">if</span> (reverse) {
-<a name="l00184"></a>00184           <span class="keywordflow">if</span> (cassini)
-<a name="l00185"></a>00185             cs.Reverse(x, y, lat, lon, azi, rk);
-<a name="l00186"></a>00186           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (azimuthal)
-<a name="l00187"></a>00187             az.<a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a26d1b6fe3af8750babaeb60efdfec062">Reverse</a>(lat0, lon0, x, y, lat, lon, azi, rk);
-<a name="l00188"></a>00188           <span class="keywordflow">else</span>
-<a name="l00189"></a>00189             gn.<a class="code" href="classGeographicLib_1_1Gnomonic.html#afccbed660a482ef73d33ad16406ee626">Reverse</a>(lat0, lon0, x, y, lat, lon, azi, rk);
-<a name="l00190"></a>00190           *output << Utility::str<real>(lat, 15) << <span class="stringliteral">" "</span>
-<a name="l00191"></a>00191                   << Utility::str<real>(lon, 15) << <span class="stringliteral">" "</span>
-<a name="l00192"></a>00192                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(azi, 15) << <span class="stringliteral">" "</span>
-<a name="l00193"></a>00193                   << Utility::str<real>(rk, 16) << eol;
-<a name="l00194"></a>00194         } <span class="keywordflow">else</span> {
-<a name="l00195"></a>00195           <span class="keywordflow">if</span> (cassini)
-<a name="l00196"></a>00196             cs.Forward(lat, lon, x, y, azi, rk);
-<a name="l00197"></a>00197           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (azimuthal)
-<a name="l00198"></a>00198             az.<a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html#a8b4951b7c732f97aedeb8e869c9349d2">Forward</a>(lat0, lon0, lat, lon, x, y, azi, rk);
-<a name="l00199"></a>00199           <span class="keywordflow">else</span>
-<a name="l00200"></a>00200             gn.<a class="code" href="classGeographicLib_1_1Gnomonic.html#ab851ea19db5671f8d4a4151820bc6853">Forward</a>(lat0, lon0, lat, lon, x, y, azi, rk);
-<a name="l00201"></a>00201           *output << Utility::str<real>(x, 10) << <span class="stringliteral">" "</span>
-<a name="l00202"></a>00202                   << Utility::str<real>(y, 10) << <span class="stringliteral">" "</span>
-<a name="l00203"></a>00203                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(azi, 15) << <span class="stringliteral">" "</span>
-<a name="l00204"></a>00204                   << Utility::str<real>(rk, 16) << eol;
-<a name="l00205"></a>00205         }
-<a name="l00206"></a>00206       }
-<a name="l00207"></a>00207       <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00208"></a>00208         *output << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00209"></a>00209         retval = 1;
-<a name="l00210"></a>00210       }
-<a name="l00211"></a>00211     }
-<a name="l00212"></a>00212     <span class="keywordflow">return</span> retval;
-<a name="l00213"></a>00213   }
-<a name="l00214"></a>00214   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00215"></a>00215     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00216"></a>00216     <span class="keywordflow">return</span> 1;
-<a name="l00217"></a>00217   }
-<a name="l00218"></a>00218   <span class="keywordflow">catch</span> (...) {
-<a name="l00219"></a>00219     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00220"></a>00220     <span class="keywordflow">return</span> 1;
-<a name="l00221"></a>00221   }
-<a name="l00222"></a>00222 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geodesic_8cpp.html b/doc/html/Geodesic_8cpp.html
deleted file mode 100644
index e4089f4..0000000
--- a/doc/html/Geodesic_8cpp.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geodesic.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Geodesic.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Geodesic_8hpp_source.html">GeographicLib/Geodesic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="GeodesicLine_8hpp_source.html">GeographicLib/GeodesicLine.hpp</a>></code><br/>
-</div>
-<p><a href="Geodesic_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geodesic_8cpp.html#a61dcde881d6a80b561fc2b4c4b327883">GEOGRAPHICLIB_GEODESIC_CPP</a>   "$Id: dd137806b8a5ba58211a37eb87e163b8a9bd7aa7 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>This is a reformulation of the geodesic problem. The notation is as follows:</p>
-<ul>
-<li>at a general point (no suffix or 1 or 2 as suffix)<ul>
-<li>phi = latitude</li>
-<li>beta = latitude on auxiliary sphere</li>
-<li>omega = longitude on auxiliary sphere</li>
-<li>lambda = longitude</li>
-<li>alpha = azimuth of great circle</li>
-<li>sigma = arc length along great circle</li>
-<li>s = distance</li>
-<li>tau = scaled distance (= sigma at multiples of pi/2)</li>
-</ul>
-</li>
-<li>at northwards equator crossing<ul>
-<li>beta = phi = 0</li>
-<li>omega = lambda = 0</li>
-<li>alpha = alpha0</li>
-<li>sigma = s = 0</li>
-</ul>
-</li>
-<li>a 12 suffix means a difference, e.g., s12 = s2 - s1.</li>
-<li>s and c prefixes mean sin and cos </li>
-</ul>
-
-<p>Definition in file <a class="el" href="Geodesic_8cpp_source.html">Geodesic.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a61dcde881d6a80b561fc2b4c4b327883"></a><!-- doxytag: member="Geodesic.cpp::GEOGRAPHICLIB_GEODESIC_CPP" ref="a61dcde881d6a80b561fc2b4c4b327883" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEODESIC_CPP   "$Id: dd137806b8a5ba58211a37eb87e163b8a9bd7aa7 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geodesic_8cpp_source.html#l00032">32</a> of file <a class="el" href="Geodesic_8cpp_source.html">Geodesic.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geodesic_8cpp_source.html b/doc/html/Geodesic_8cpp_source.html
deleted file mode 100644
index c16f746..0000000
--- a/doc/html/Geodesic_8cpp_source.html
+++ /dev/null
@@ -1,1540 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geodesic.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geodesic.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Geodesic_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Geodesic.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::Geodesic class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * This is a reformulation of the geodesic problem.  The notation is as</span>
-<a name="l00010"></a>00010 <span class="comment"> * follows:</span>
-<a name="l00011"></a>00011 <span class="comment"> * - at a general point (no suffix or 1 or 2 as suffix)</span>
-<a name="l00012"></a>00012 <span class="comment"> *   - phi = latitude</span>
-<a name="l00013"></a>00013 <span class="comment"> *   - beta = latitude on auxiliary sphere</span>
-<a name="l00014"></a>00014 <span class="comment"> *   - omega = longitude on auxiliary sphere</span>
-<a name="l00015"></a>00015 <span class="comment"> *   - lambda = longitude</span>
-<a name="l00016"></a>00016 <span class="comment"> *   - alpha = azimuth of great circle</span>
-<a name="l00017"></a>00017 <span class="comment"> *   - sigma = arc length along great circle</span>
-<a name="l00018"></a>00018 <span class="comment"> *   - s = distance</span>
-<a name="l00019"></a>00019 <span class="comment"> *   - tau = scaled distance (= sigma at multiples of pi/2)</span>
-<a name="l00020"></a>00020 <span class="comment"> * - at northwards equator crossing</span>
-<a name="l00021"></a>00021 <span class="comment"> *   - beta = phi = 0</span>
-<a name="l00022"></a>00022 <span class="comment"> *   - omega = lambda = 0</span>
-<a name="l00023"></a>00023 <span class="comment"> *   - alpha = alpha0</span>
-<a name="l00024"></a>00024 <span class="comment"> *   - sigma = s = 0</span>
-<a name="l00025"></a>00025 <span class="comment"> * - a 12 suffix means a difference, e.g., s12 = s2 - s1.</span>
-<a name="l00026"></a>00026 <span class="comment"> * - s and c prefixes mean sin and cos</span>
-<a name="l00027"></a>00027 <span class="comment"> **********************************************************************/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="GeodesicLine_8hpp.html" title="Header for GeographicLib::GeodesicLine class.">GeographicLib/GeodesicLine.hpp</a>></span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a><a class="code" href="Geodesic_8cpp.html#a61dcde881d6a80b561fc2b4c4b327883">00032</a> <span class="preprocessor">#define GEOGRAPHICLIB_GEODESIC_CPP \</span>
-<a name="l00033"></a>00033 <span class="preprocessor">  "$Id: dd137806b8a5ba58211a37eb87e163b8a9bd7aa7 $"</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Geodesic_8cpp.html#a61dcde881d6a80b561fc2b4c4b327883">GEOGRAPHICLIB_GEODESIC_CPP</a>)
-<a name="l00036"></a>00036 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Geodesic_8hpp.html#ab538cb707d6ff36056dd372c7e9e6d7e">GEOGRAPHICLIB_GEODESIC_HPP</a>)
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 namespace GeographicLib {
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040   <span class="keyword">using namespace </span>std;
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042   <span class="comment">// Underflow guard.  We require</span>
-<a name="l00043"></a>00043   <span class="comment">//   tiny_ * epsilon() > 0</span>
-<a name="l00044"></a>00044   <span class="comment">//   tiny_ + epsilon() == epsilon()</span>
-<a name="l00045"></a>00045   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::tiny_ = sqrt(numeric_limits<real>::min());
-<a name="l00046"></a>00046   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::tol0_ = numeric_limits<real>::epsilon();
-<a name="l00047"></a>00047   <span class="comment">// Increase multiplier in defn of tol1_ from 100 to 200 to fix inverse case</span>
-<a name="l00048"></a>00048   <span class="comment">// 52.784459512564 0 -52.784459512563990912 179.634407464943777557</span>
-<a name="l00049"></a>00049   <span class="comment">// which otherwise failed for Visual Studio 10 (Release and Debug)</span>
-<a name="l00050"></a>00050   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::tol1_ = 200 * tol0_;
-<a name="l00051"></a>00051   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::tol2_ = sqrt(numeric_limits<real>::epsilon());
-<a name="l00052"></a>00052   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::xthresh_ = 1000 * tol2_;
-<a name="l00053"></a>00053 
-<a name="l00054"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a455300c36e6caa70968115416e1573a4">00054</a>   Geodesic::Geodesic(real a, real f)
-<a name="l00055"></a>00055     : _a(a)
-<a name="l00056"></a>00056     , _f(f <= 1 ? f : 1/f)
-<a name="l00057"></a>00057     , _f1(1 - _f)
-<a name="l00058"></a>00058     , _e2(_f * (2 - _f))
-<a name="l00059"></a>00059     , _ep2(_e2 / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::sq(_f1))       <span class="comment">// e2 / (1 - e2)</span>
-<a name="l00060"></a>00060     , _n(_f / ( 2 - _f))
-<a name="l00061"></a>00061     , _b(_a * _f1)
-<a name="l00062"></a>00062     , _c2((<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::sq(_a) + <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::sq(_b) *
-<a name="l00063"></a>00063            (_e2 == 0 ? 1 :
-<a name="l00064"></a>00064             (_e2 > 0 ? <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::atanh(sqrt(_e2)) : atan(sqrt(-_e2))) /
-<a name="l00065"></a>00065             sqrt(abs(_e2))))/2) <span class="comment">// authalic radius squared</span>
-<a name="l00066"></a>00066       <span class="comment">// The sig12 threshold for "really short"</span>
-<a name="l00067"></a>00067     , _etol2(10 * tol2_ / max(real(0.1), sqrt(abs(_e2))))
-<a name="l00068"></a>00068   {
-<a name="l00069"></a>00069     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00070"></a>00070       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00071"></a>00071     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_b) && _b > 0))
-<a name="l00072"></a>00072       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00073"></a>00073     A3coeff();
-<a name="l00074"></a>00074     C3coeff();
-<a name="l00075"></a>00075     C4coeff();
-<a name="l00076"></a>00076   }
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> <a class="code" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>(Constants::WGS84_a<real>(),
-<a name="l00079"></a>00079                                  Constants::WGS84_f<real>());
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::SinCosSeries(<span class="keywordtype">bool</span> sinp,
-<a name="l00082"></a>00082                                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sinx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cosx,
-<a name="l00083"></a>00083                                     <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[], <span class="keywordtype">int</span> n) <span class="keywordflow">throw</span>() {
-<a name="l00084"></a>00084     <span class="comment">// Evaluate</span>
-<a name="l00085"></a>00085     <span class="comment">// y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :</span>
-<a name="l00086"></a>00086     <span class="comment">//            sum(c[i] * cos((2*i+1) * x), i, 0, n-1) :</span>
-<a name="l00087"></a>00087     <span class="comment">// using Clenshaw summation.  N.B. c[0] is unused for sin series</span>
-<a name="l00088"></a>00088     <span class="comment">// Approx operation count = (n + 5) mult and (2 * n + 2) add</span>
-<a name="l00089"></a>00089     c += (n + sinp);            <span class="comment">// Point to one beyond last element</span>
-<a name="l00090"></a>00090     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00091"></a>00091       ar = 2 * (cosx - sinx) * (cosx + sinx), <span class="comment">// 2 * cos(2 * x)</span>
-<a name="l00092"></a>00092       y0 = n & 1 ? *--c : 0, y1 = 0;          <span class="comment">// accumulators for sum</span>
-<a name="l00093"></a>00093     <span class="comment">// Now n is even</span>
-<a name="l00094"></a>00094     n /= 2;
-<a name="l00095"></a>00095     <span class="keywordflow">while</span> (n--) {
-<a name="l00096"></a>00096       <span class="comment">// Unroll loop x 2, so accumulators return to their original role</span>
-<a name="l00097"></a>00097       y1 = ar * y0 - y1 + *--c;
-<a name="l00098"></a>00098       y0 = ar * y1 - y0 + *--c;
-<a name="l00099"></a>00099     }
-<a name="l00100"></a>00100     <span class="keywordflow">return</span> sinp
-<a name="l00101"></a>00101       ? 2 * sinx * cosx * y0    <span class="comment">// sin(2 * x) * y0</span>
-<a name="l00102"></a>00102       : cosx * (y0 - y1);       <span class="comment">// cos(x) * (y0 - y1)</span>
-<a name="l00103"></a>00103   }
-<a name="l00104"></a>00104 
-<a name="l00105"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">00105</a>   <a class="code" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> <a class="code" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">Geodesic::Line</a>(real lat1, real lon1, real azi1, <span class="keywordtype">unsigned</span> caps)
-<a name="l00106"></a>00106     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00107"></a>00107     <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a>(*<span class="keyword">this</span>, lat1, lon1, azi1, caps);
-<a name="l00108"></a>00108   }
-<a name="l00109"></a>00109 
-<a name="l00110"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#acaef3032846a71fc730e1ea26ea32d20">00110</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geodesic.html#acaef3032846a71fc730e1ea26ea32d20">Geodesic::GenDirect</a>(real lat1, real lon1, real azi1,
-<a name="l00111"></a>00111                                  <span class="keywordtype">bool</span> arcmode, real s12_a12, <span class="keywordtype">unsigned</span> outmask,
-<a name="l00112"></a>00112                                  real& lat2, real& lon2, real& azi2,
-<a name="l00113"></a>00113                                  real& s12, real& m12, real& M12, real& M21,
-<a name="l00114"></a>00114                                  real& S12) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00115"></a>00115     <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a>(*<span class="keyword">this</span>, lat1, lon1, azi1,
-<a name="l00116"></a>00116                         <span class="comment">// Automatically supply DISTANCE_IN if necessary</span>
-<a name="l00117"></a>00117                         outmask | (arcmode ? NONE : DISTANCE_IN))
-<a name="l00118"></a>00118       .                         <span class="comment">// Note the dot!</span>
-<a name="l00119"></a>00119       GenPosition(arcmode, s12_a12, outmask,
-<a name="l00120"></a>00120                   lat2, lon2, azi2, s12, m12, M12, M21, S12);
-<a name="l00121"></a>00121   }
-<a name="l00122"></a>00122 
-<a name="l00123"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a84a3b9b457dd87b1059045b9d50303fd">00123</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geodesic.html#a84a3b9b457dd87b1059045b9d50303fd">Geodesic::GenInverse</a>(real lat1, real lon1, real lat2, real lon2,
-<a name="l00124"></a>00124                                   <span class="keywordtype">unsigned</span> outmask,
-<a name="l00125"></a>00125                                   real& s12, real& azi1, real& azi2,
-<a name="l00126"></a>00126                                   real& m12, real& M12, real& M21, real& S12)
-<a name="l00127"></a>00127     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00128"></a>00128     outmask &= OUT_ALL;
-<a name="l00129"></a>00129     lon1 = AngNormalize(lon1);
-<a name="l00130"></a>00130     real lon12 = AngNormalize(AngNormalize(lon2) - lon1);
-<a name="l00131"></a>00131     <span class="comment">// If very close to being on the same meridian, then make it so.</span>
-<a name="l00132"></a>00132     <span class="comment">// Not sure this is necessary...</span>
-<a name="l00133"></a>00133     lon12 = AngRound(lon12);
-<a name="l00134"></a>00134     <span class="comment">// Make longitude difference positive.</span>
-<a name="l00135"></a>00135     <span class="keywordtype">int</span> lonsign = lon12 >= 0 ? 1 : -1;
-<a name="l00136"></a>00136     lon12 *= lonsign;
-<a name="l00137"></a>00137     <span class="keywordflow">if</span> (lon12 == 180)
-<a name="l00138"></a>00138       lonsign = 1;
-<a name="l00139"></a>00139     <span class="comment">// If really close to the equator, treat as on equator.</span>
-<a name="l00140"></a>00140     lat1 = AngRound(lat1);
-<a name="l00141"></a>00141     lat2 = AngRound(lat2);
-<a name="l00142"></a>00142     <span class="comment">// Swap points so that point with higher (abs) latitude is point 1</span>
-<a name="l00143"></a>00143     <span class="keywordtype">int</span> swapp = abs(lat1) >= abs(lat2) ? 1 : -1;
-<a name="l00144"></a>00144     <span class="keywordflow">if</span> (swapp < 0) {
-<a name="l00145"></a>00145       lonsign *= -1;
-<a name="l00146"></a>00146       swap(lat1, lat2);
-<a name="l00147"></a>00147     }
-<a name="l00148"></a>00148     <span class="comment">// Make lat1 <= 0</span>
-<a name="l00149"></a>00149     <span class="keywordtype">int</span> latsign = lat1 < 0 ? 1 : -1;
-<a name="l00150"></a>00150     lat1 *= latsign;
-<a name="l00151"></a>00151     lat2 *= latsign;
-<a name="l00152"></a>00152     <span class="comment">// Now we have</span>
-<a name="l00153"></a>00153     <span class="comment">//</span>
-<a name="l00154"></a>00154     <span class="comment">//     0 <= lon12 <= 180</span>
-<a name="l00155"></a>00155     <span class="comment">//     -90 <= lat1 <= 0</span>
-<a name="l00156"></a>00156     <span class="comment">//     lat1 <= lat2 <= -lat1</span>
-<a name="l00157"></a>00157     <span class="comment">//</span>
-<a name="l00158"></a>00158     <span class="comment">// longsign, swapp, latsign register the transformation to bring the</span>
-<a name="l00159"></a>00159     <span class="comment">// coordinates to this canonical form.  In all cases, 1 means no change was</span>
-<a name="l00160"></a>00160     <span class="comment">// made.  We make these transformations so that there are few cases to</span>
-<a name="l00161"></a>00161     <span class="comment">// check, e.g., on verifying quadrants in atan2.  In addition, this</span>
-<a name="l00162"></a>00162     <span class="comment">// enforces some symmetries in the results returned.</span>
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164     real phi, sbet1, cbet1, sbet2, cbet2, s12x, m12x;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     phi = lat1 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00167"></a>00167     <span class="comment">// Ensure cbet1 = +epsilon at poles</span>
-<a name="l00168"></a>00168     sbet1 = _f1 * sin(phi);
-<a name="l00169"></a>00169     cbet1 = lat1 == -90 ? tiny_ : cos(phi);
-<a name="l00170"></a>00170     SinCosNorm(sbet1, cbet1);
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     phi = lat2 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00173"></a>00173     <span class="comment">// Ensure cbet2 = +epsilon at poles</span>
-<a name="l00174"></a>00174     sbet2 = _f1 * sin(phi);
-<a name="l00175"></a>00175     cbet2 = abs(lat2) == 90 ? tiny_ : cos(phi);
-<a name="l00176"></a>00176     SinCosNorm(sbet2, cbet2);
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     <span class="comment">// If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of the</span>
-<a name="l00179"></a>00179     <span class="comment">// |bet1| - |bet2|.  Alternatively (cbet1 >= -sbet1), abs(sbet2) + sbet1 is</span>
-<a name="l00180"></a>00180     <span class="comment">// a better measure.  This logic is used in assigning calp2 in Lambda12.</span>
-<a name="l00181"></a>00181     <span class="comment">// Sometimes these quantities vanish and in that case we force bet2 = +/-</span>
-<a name="l00182"></a>00182     <span class="comment">// bet1 exactly.  An example where is is necessary is the inverse problem</span>
-<a name="l00183"></a>00183     <span class="comment">// 48.522876735459 0 -48.52287673545898293 179.599720456223079643</span>
-<a name="l00184"></a>00184     <span class="comment">// which failed with Visual Studio 10 (Release and Debug)</span>
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     <span class="keywordflow">if</span> (cbet1 < -sbet1) {
-<a name="l00187"></a>00187       <span class="keywordflow">if</span> (cbet2 == cbet1)
-<a name="l00188"></a>00188         sbet2 = sbet2 < 0 ? sbet1 : -sbet1;
-<a name="l00189"></a>00189     } <span class="keywordflow">else</span> {
-<a name="l00190"></a>00190       <span class="keywordflow">if</span> (abs(sbet2) == -sbet1)
-<a name="l00191"></a>00191         cbet2 = cbet1;
-<a name="l00192"></a>00192     }
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194     real
-<a name="l00195"></a>00195       lam12 = lon12 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00196"></a>00196       slam12 = lon12 == 180 ? 0 : sin(lam12),
-<a name="l00197"></a>00197       clam12 = cos(lam12);      <span class="comment">// lon12 == 90 isn't interesting</span>
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     real a12, sig12, calp1, salp1, calp2, salp2;
-<a name="l00200"></a>00200     <span class="comment">// index zero elements of these arrays are unused</span>
-<a name="l00201"></a>00201     real C1a[nC1_ + 1], C2a[nC2_ + 1], C3a[nC3_];
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203     <span class="keywordtype">bool</span> meridian = lat1 == -90 || slam12 == 0;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     <span class="keywordflow">if</span> (meridian) {
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207       <span class="comment">// Endpoints are on a single full meridian, so the geodesic might lie on</span>
-<a name="l00208"></a>00208       <span class="comment">// a meridian.</span>
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210       calp1 = clam12; salp1 = slam12; <span class="comment">// Head to the target longitude</span>
-<a name="l00211"></a>00211       calp2 = 1; salp2 = 0;           <span class="comment">// At the target we're heading north</span>
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213       real
-<a name="l00214"></a>00214         <span class="comment">// tan(bet) = tan(sig) * cos(alp)</span>
-<a name="l00215"></a>00215         ssig1 = sbet1, csig1 = calp1 * cbet1,
-<a name="l00216"></a>00216         ssig2 = sbet2, csig2 = calp2 * cbet2;
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218       <span class="comment">// sig12 = sig2 - sig1</span>
-<a name="l00219"></a>00219       sig12 = atan2(max(csig1 * ssig2 - ssig1 * csig2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0)),
-<a name="l00220"></a>00220                     csig1 * csig2 + ssig1 * ssig2);
-<a name="l00221"></a>00221       {
-<a name="l00222"></a>00222         real dummy;
-<a name="l00223"></a>00223         Lengths(_n, sig12, ssig1, csig1, ssig2, csig2,
-<a name="l00224"></a>00224                 cbet1, cbet2, s12x, m12x, dummy,
-<a name="l00225"></a>00225                 (outmask & GEODESICSCALE) != 0U, M12, M21, C1a, C2a);
-<a name="l00226"></a>00226       }
-<a name="l00227"></a>00227       <span class="comment">// Add the check for sig12 since zero length geodesics might yield m12 <</span>
-<a name="l00228"></a>00228       <span class="comment">// 0.  Test case was</span>
-<a name="l00229"></a>00229       <span class="comment">//</span>
-<a name="l00230"></a>00230       <span class="comment">//    echo 20.001 0 20.001 0 | Geod -i</span>
-<a name="l00231"></a>00231       <span class="comment">//</span>
-<a name="l00232"></a>00232       <span class="comment">// In fact, we will have sig12 > pi/2 for meridional geodesic which is</span>
-<a name="l00233"></a>00233       <span class="comment">// not a shortest path.</span>
-<a name="l00234"></a>00234       <span class="keywordflow">if</span> (sig12 < 1 || m12x >= 0) {
-<a name="l00235"></a>00235         m12x *= _a;
-<a name="l00236"></a>00236         s12x *= _b;
-<a name="l00237"></a>00237         a12 = sig12 / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00238"></a>00238       } <span class="keywordflow">else</span>
-<a name="l00239"></a>00239         <span class="comment">// m12 < 0, i.e., prolate and too close to anti-podal</span>
-<a name="l00240"></a>00240         meridian = <span class="keyword">false</span>;
-<a name="l00241"></a>00241     }
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243     real omg12;
-<a name="l00244"></a>00244     <span class="keywordflow">if</span> (!meridian &&
-<a name="l00245"></a>00245         sbet1 == 0 &&   <span class="comment">// and sbet2 == 0</span>
-<a name="l00246"></a>00246         <span class="comment">// Mimic the way Lambda12 works with calp1 = 0</span>
-<a name="l00247"></a>00247         (_f <= 0 || lam12 <= Math::pi<real>() - _f * Math::pi<real>())) {
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249       <span class="comment">// Geodesic runs along equator</span>
-<a name="l00250"></a>00250       calp1 = calp2 = 0; salp1 = salp2 = 1;
-<a name="l00251"></a>00251       s12x = _a * lam12;
-<a name="l00252"></a>00252       m12x = _b * sin(lam12 / _f1);
-<a name="l00253"></a>00253       <span class="keywordflow">if</span> (outmask & GEODESICSCALE)
-<a name="l00254"></a>00254         M12 = M21 = cos(lam12 / _f1);
-<a name="l00255"></a>00255       a12 = lon12 / _f1;
-<a name="l00256"></a>00256       sig12 = omg12 = lam12 / _f1;
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!meridian) {
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260       <span class="comment">// Now point1 and point2 belong within a hemisphere bounded by a</span>
-<a name="l00261"></a>00261       <span class="comment">// meridian and geodesic is neither meridional or equatorial.</span>
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263       <span class="comment">// Figure a starting point for Newton's method</span>
-<a name="l00264"></a>00264       sig12 = InverseStart(sbet1, cbet1, sbet2, cbet2,
-<a name="l00265"></a>00265                            lam12,
-<a name="l00266"></a>00266                            salp1, calp1, salp2, calp2,
-<a name="l00267"></a>00267                            C1a, C2a);
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269       <span class="keywordflow">if</span> (sig12 >= 0) {
-<a name="l00270"></a>00270         <span class="comment">// Short lines (InverseStart sets salp2, calp2)</span>
-<a name="l00271"></a>00271         real wm = sqrt(1 - _e2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>((cbet1 + cbet2) / 2));
-<a name="l00272"></a>00272         s12x = sig12 * _a * wm;
-<a name="l00273"></a>00273         m12x = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(wm) * _a / _f1 * sin(sig12 * _f1 / wm);
-<a name="l00274"></a>00274         <span class="keywordflow">if</span> (outmask & GEODESICSCALE)
-<a name="l00275"></a>00275           M12 = M21 = cos(sig12 * _f1 / wm);
-<a name="l00276"></a>00276         a12 = sig12 / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00277"></a>00277         omg12 = lam12 / wm;
-<a name="l00278"></a>00278       } <span class="keywordflow">else</span> {
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280         <span class="comment">// Newton's method</span>
-<a name="l00281"></a>00281         real ssig1, csig1, ssig2, csig2, eps;
-<a name="l00282"></a>00282         real ov = 0;
-<a name="l00283"></a>00283         <span class="keywordtype">unsigned</span> numit = 0;
-<a name="l00284"></a>00284         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> trip = 0; numit < maxit_; ++numit) {
-<a name="l00285"></a>00285           real dv;
-<a name="l00286"></a>00286           real v = Lambda12(sbet1, cbet1, sbet2, cbet2, salp1, calp1,
-<a name="l00287"></a>00287                             salp2, calp2, sig12, ssig1, csig1, ssig2, csig2,
-<a name="l00288"></a>00288                             eps, omg12, trip < 1, dv, C1a, C2a, C3a) - lam12;
-<a name="l00289"></a>00289           <span class="keywordflow">if</span> (!(abs(v) > tiny_) || !(trip < 1)) {
-<a name="l00290"></a>00290             <span class="keywordflow">if</span> (!(abs(v) <= max(tol1_, ov)))
-<a name="l00291"></a>00291               numit = maxit_;
-<a name="l00292"></a>00292             <span class="keywordflow">break</span>;
-<a name="l00293"></a>00293           }
-<a name="l00294"></a>00294           real
-<a name="l00295"></a>00295             dalp1 = -v/dv;
-<a name="l00296"></a>00296           real
-<a name="l00297"></a>00297             sdalp1 = sin(dalp1), cdalp1 = cos(dalp1),
-<a name="l00298"></a>00298             nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
-<a name="l00299"></a>00299           calp1 = calp1 * cdalp1 - salp1 * sdalp1;
-<a name="l00300"></a>00300           salp1 = max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), nsalp1);
-<a name="l00301"></a>00301           SinCosNorm(salp1, calp1);
-<a name="l00302"></a>00302           <span class="comment">// In some regimes we don't get quadratic convergence because slope</span>
-<a name="l00303"></a>00303           <span class="comment">// -> 0.  So use convergence conditions based on epsilon instead of</span>
-<a name="l00304"></a>00304           <span class="comment">// sqrt(epsilon).  The first criterion is a test on abs(v) against</span>
-<a name="l00305"></a>00305           <span class="comment">// 100 * epsilon.  The second takes credit for an anticipated</span>
-<a name="l00306"></a>00306           <span class="comment">// reduction in abs(v) by v/ov (due to the latest update in alp1) and</span>
-<a name="l00307"></a>00307           <span class="comment">// checks this against epsilon.</span>
-<a name="l00308"></a>00308           <span class="keywordflow">if</span> (!(abs(v) >= tol1_ && <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(v) >= ov * tol0_)) ++trip;
-<a name="l00309"></a>00309           ov = abs(v);
-<a name="l00310"></a>00310         }
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312         <span class="keywordflow">if</span> (numit >= maxit_) {
-<a name="l00313"></a>00313           <span class="comment">// Signal failure.</span>
-<a name="l00314"></a>00314           <span class="keywordflow">if</span> (outmask & DISTANCE)
-<a name="l00315"></a>00315             s12 = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00316"></a>00316           <span class="keywordflow">if</span> (outmask & AZIMUTH)
-<a name="l00317"></a>00317             azi1 = azi2 = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00318"></a>00318           <span class="keywordflow">if</span> (outmask & REDUCEDLENGTH)
-<a name="l00319"></a>00319             m12 = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00320"></a>00320           <span class="keywordflow">if</span> (outmask & GEODESICSCALE)
-<a name="l00321"></a>00321             M12 = M21 = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00322"></a>00322           <span class="keywordflow">if</span> (outmask & AREA)
-<a name="l00323"></a>00323             S12 = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00324"></a>00324           <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00325"></a>00325         }
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327         {
-<a name="l00328"></a>00328           real dummy;
-<a name="l00329"></a>00329           Lengths(eps, sig12, ssig1, csig1, ssig2, csig2,
-<a name="l00330"></a>00330                   cbet1, cbet2, s12x, m12x, dummy,
-<a name="l00331"></a>00331                   (outmask & GEODESICSCALE) != 0U, M12, M21, C1a, C2a);
-<a name="l00332"></a>00332         }
-<a name="l00333"></a>00333         m12x *= _a;
-<a name="l00334"></a>00334         s12x *= _b;
-<a name="l00335"></a>00335         a12 = sig12 / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00336"></a>00336         omg12 = lam12 - omg12;
-<a name="l00337"></a>00337       }
-<a name="l00338"></a>00338     }
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340     <span class="keywordflow">if</span> (outmask & DISTANCE)
-<a name="l00341"></a>00341       s12 = 0 + s12x;           <span class="comment">// Convert -0 to 0</span>
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343     <span class="keywordflow">if</span> (outmask & REDUCEDLENGTH)
-<a name="l00344"></a>00344       m12 = 0 + m12x;           <span class="comment">// Convert -0 to 0</span>
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346     <span class="keywordflow">if</span> (outmask & AREA) {
-<a name="l00347"></a>00347       real
-<a name="l00348"></a>00348         <span class="comment">// From Lambda12: sin(alp1) * cos(bet1) = sin(alp0)</span>
-<a name="l00349"></a>00349         salp0 = salp1 * cbet1,
-<a name="l00350"></a>00350         calp0 = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(calp1, salp1 * sbet1); <span class="comment">// calp0 > 0</span>
-<a name="l00351"></a>00351       real alp12;
-<a name="l00352"></a>00352       <span class="keywordflow">if</span> (calp0 != 0 && salp0 != 0) {
-<a name="l00353"></a>00353         real
-<a name="l00354"></a>00354           <span class="comment">// From Lambda12: tan(bet) = tan(sig) * cos(alp)</span>
-<a name="l00355"></a>00355           ssig1 = sbet1, csig1 = calp1 * cbet1,
-<a name="l00356"></a>00356           ssig2 = sbet2, csig2 = calp2 * cbet2,
-<a name="l00357"></a>00357           k2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(calp0) * _ep2,
-<a name="l00358"></a>00358           <span class="comment">// Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0).</span>
-<a name="l00359"></a>00359           A4 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_a) * calp0 * salp0 * _e2;
-<a name="l00360"></a>00360         SinCosNorm(ssig1, csig1);
-<a name="l00361"></a>00361         SinCosNorm(ssig2, csig2);
-<a name="l00362"></a>00362         real C4a[nC4_];
-<a name="l00363"></a>00363         C4f(k2, C4a);
-<a name="l00364"></a>00364         real
-<a name="l00365"></a>00365           B41 = SinCosSeries(<span class="keyword">false</span>, ssig1, csig1, C4a, nC4_),
-<a name="l00366"></a>00366           B42 = SinCosSeries(<span class="keyword">false</span>, ssig2, csig2, C4a, nC4_);
-<a name="l00367"></a>00367         S12 = A4 * (B42 - B41);
-<a name="l00368"></a>00368       } <span class="keywordflow">else</span>
-<a name="l00369"></a>00369         <span class="comment">// Avoid problems with indeterminate sig1, sig2 on equator</span>
-<a name="l00370"></a>00370         S12 = 0;
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372       <span class="keywordflow">if</span> (!meridian &&
-<a name="l00373"></a>00373           omg12 < <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.75) * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::pi<real>() && <span class="comment">// Long difference too big</span>
-<a name="l00374"></a>00374           sbet2 - sbet1 < <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1.75)) {            <span class="comment">// Lat difference too big</span>
-<a name="l00375"></a>00375         <span class="comment">// Use tan(Gamma/2) = tan(omg12/2)</span>
-<a name="l00376"></a>00376         <span class="comment">// * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2))</span>
-<a name="l00377"></a>00377         <span class="comment">// with tan(x/2) = sin(x)/(1+cos(x))</span>
-<a name="l00378"></a>00378         real
-<a name="l00379"></a>00379           somg12 = sin(omg12), domg12 = 1 + cos(omg12),
-<a name="l00380"></a>00380           dbet1 = 1 + cbet1, dbet2 = 1 + cbet2;
-<a name="l00381"></a>00381         alp12 = 2 * atan2( somg12 * ( sbet1 * dbet2 + sbet2 * dbet1 ),
-<a name="l00382"></a>00382                            domg12 * ( sbet1 * sbet2 + dbet1 * dbet2 ) );
-<a name="l00383"></a>00383       } <span class="keywordflow">else</span> {
-<a name="l00384"></a>00384         <span class="comment">// alp12 = alp2 - alp1, used in atan2 so no need to normalize</span>
-<a name="l00385"></a>00385         real
-<a name="l00386"></a>00386           salp12 = salp2 * calp1 - calp2 * salp1,
-<a name="l00387"></a>00387           calp12 = calp2 * calp1 + salp2 * salp1;
-<a name="l00388"></a>00388         <span class="comment">// The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz</span>
-<a name="l00389"></a>00389         <span class="comment">// salp12 = -0 and alp12 = -180.  However this depends on the sign</span>
-<a name="l00390"></a>00390         <span class="comment">// being attached to 0 correctly.  The following ensures the correct</span>
-<a name="l00391"></a>00391         <span class="comment">// behavior.</span>
-<a name="l00392"></a>00392         <span class="keywordflow">if</span> (salp12 == 0 && calp12 < 0) {
-<a name="l00393"></a>00393           salp12 = tiny_ * calp1;
-<a name="l00394"></a>00394           calp12 = -1;
-<a name="l00395"></a>00395         }
-<a name="l00396"></a>00396         alp12 = atan2(salp12, calp12);
-<a name="l00397"></a>00397       }
-<a name="l00398"></a>00398       S12 += _c2 * alp12;
-<a name="l00399"></a>00399       S12 *= swapp * lonsign * latsign;
-<a name="l00400"></a>00400       <span class="comment">// Convert -0 to 0</span>
-<a name="l00401"></a>00401       S12 += 0;
-<a name="l00402"></a>00402     }
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404     <span class="comment">// Convert calp, salp to azimuth accounting for lonsign, swapp, latsign.</span>
-<a name="l00405"></a>00405     <span class="keywordflow">if</span> (swapp < 0) {
-<a name="l00406"></a>00406       swap(salp1, salp2);
-<a name="l00407"></a>00407       swap(calp1, calp2);
-<a name="l00408"></a>00408       <span class="keywordflow">if</span> (outmask & GEODESICSCALE)
-<a name="l00409"></a>00409         swap(M12, M21);
-<a name="l00410"></a>00410     }
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412     salp1 *= swapp * lonsign; calp1 *= swapp * latsign;
-<a name="l00413"></a>00413     salp2 *= swapp * lonsign; calp2 *= swapp * latsign;
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415     <span class="keywordflow">if</span> (outmask & AZIMUTH) {
-<a name="l00416"></a>00416       <span class="comment">// minus signs give range [-180, 180). 0- converts -0 to +0.</span>
-<a name="l00417"></a>00417       azi1 = 0 - atan2(-salp1, calp1) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00418"></a>00418       azi2 = 0 - atan2(-salp2, calp2) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00419"></a>00419     }
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421     <span class="comment">// Returned value in [0, 180]</span>
-<a name="l00422"></a>00422     <span class="keywordflow">return</span> a12;
-<a name="l00423"></a>00423   }
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425   <span class="keywordtype">void</span> Geodesic::Lengths(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sig12,
-<a name="l00426"></a>00426                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ssig1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> csig1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ssig2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> csig2,
-<a name="l00427"></a>00427                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet2,
-<a name="l00428"></a>00428                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& s12b, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& m12a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& m0,
-<a name="l00429"></a>00429                          <span class="keywordtype">bool</span> scalep, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M21,
-<a name="l00430"></a>00430                          <span class="comment">// Scratch areas of the right size</span>
-<a name="l00431"></a>00431                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C1a[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C2a[]) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00432"></a>00432     <span class="comment">// Return m12a = (reduced length)/_a; also calculate s12b = distance/_b,</span>
-<a name="l00433"></a>00433     <span class="comment">// and m0 = coefficient of secular term in expression for reduced length.</span>
-<a name="l00434"></a>00434     C1f(eps, C1a);
-<a name="l00435"></a>00435     C2f(eps, C2a);
-<a name="l00436"></a>00436     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00437"></a>00437       A1m1 = A1m1f(eps),
-<a name="l00438"></a>00438       AB1 = (1 + A1m1) * (SinCosSeries(<span class="keyword">true</span>, ssig2, csig2, C1a, nC1_) -
-<a name="l00439"></a>00439                           SinCosSeries(<span class="keyword">true</span>, ssig1, csig1, C1a, nC1_)),
-<a name="l00440"></a>00440       A2m1 = A2m1f(eps),
-<a name="l00441"></a>00441       AB2 = (1 + A2m1) * (SinCosSeries(<span class="keyword">true</span>, ssig2, csig2, C2a, nC2_) -
-<a name="l00442"></a>00442                           SinCosSeries(<span class="keyword">true</span>, ssig1, csig1, C2a, nC2_)),
-<a name="l00443"></a>00443       cbet1sq = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cbet1),
-<a name="l00444"></a>00444       cbet2sq = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cbet2),
-<a name="l00445"></a>00445       w1 = sqrt(1 - _e2 * cbet1sq),
-<a name="l00446"></a>00446       w2 = sqrt(1 - _e2 * cbet2sq),
-<a name="l00447"></a>00447       <span class="comment">// Make sure it's OK to have repeated dummy arguments</span>
-<a name="l00448"></a>00448       m0x = A1m1 - A2m1,
-<a name="l00449"></a>00449       J12 = m0x * sig12 + (AB1 - AB2);
-<a name="l00450"></a>00450     m0 = m0x;
-<a name="l00451"></a>00451     <span class="comment">// Missing a factor of _a.</span>
-<a name="l00452"></a>00452     <span class="comment">// Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure accurate</span>
-<a name="l00453"></a>00453     <span class="comment">// cancellation in the case of coincident points.</span>
-<a name="l00454"></a>00454     m12a = (w2 * (csig1 * ssig2) - w1 * (ssig1 * csig2))
-<a name="l00455"></a>00455       - _f1 * csig1 * csig2 * J12;
-<a name="l00456"></a>00456     <span class="comment">// Missing a factor of _b</span>
-<a name="l00457"></a>00457     s12b = (1 + A1m1) * sig12 + AB1;
-<a name="l00458"></a>00458     <span class="keywordflow">if</span> (scalep) {
-<a name="l00459"></a>00459       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> csig12 = csig1 * csig2 + ssig1 * ssig2;
-<a name="l00460"></a>00460       J12 *= _f1;
-<a name="l00461"></a>00461       M12 = csig12 + (_e2 * (cbet1sq - cbet2sq) * ssig2 / (w1 + w2)
-<a name="l00462"></a>00462                       - csig2 * J12) * ssig1 / w1;
-<a name="l00463"></a>00463       M21 = csig12 - (_e2 * (cbet1sq - cbet2sq) * ssig1 / (w1 + w2)
-<a name="l00464"></a>00464                       - csig1 * J12) * ssig2 / w2;
-<a name="l00465"></a>00465     }
-<a name="l00466"></a>00466   }
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::Astroid(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keywordflow">throw</span>() {
-<a name="l00469"></a>00469     <span class="comment">// Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.</span>
-<a name="l00470"></a>00470     <span class="comment">// This solution is adapted from Geocentric::Reverse.</span>
-<a name="l00471"></a>00471     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k;
-<a name="l00472"></a>00472     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00473"></a>00473       p = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(x),
-<a name="l00474"></a>00474       q = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(y),
-<a name="l00475"></a>00475       r = (p + q - 1) / 6;
-<a name="l00476"></a>00476     <span class="keywordflow">if</span> ( !(q == 0 && r <= 0) ) {
-<a name="l00477"></a>00477       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00478"></a>00478         <span class="comment">// Avoid possible division by zero when r = 0 by multiplying equations</span>
-<a name="l00479"></a>00479         <span class="comment">// for s and t by r^3 and r, resp.</span>
-<a name="l00480"></a>00480         S = p * q / 4,            <span class="comment">// S = r^3 * s</span>
-<a name="l00481"></a>00481         r2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(r),
-<a name="l00482"></a>00482         r3 = r * r2,
-<a name="l00483"></a>00483         <span class="comment">// The discrimant of the quadratic equation for T3.  This is zero on</span>
-<a name="l00484"></a>00484         <span class="comment">// the evolute curve p^(1/3)+q^(1/3) = 1</span>
-<a name="l00485"></a>00485         disc = S * (S + 2 * r3);
-<a name="l00486"></a>00486       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> u = r;
-<a name="l00487"></a>00487       <span class="keywordflow">if</span> (disc >= 0) {
-<a name="l00488"></a>00488         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> T3 = S + r3;
-<a name="l00489"></a>00489         <span class="comment">// Pick the sign on the sqrt to maximize abs(T3).  This minimizes loss</span>
-<a name="l00490"></a>00490         <span class="comment">// of precision due to cancellation.  The result is unchanged because</span>
-<a name="l00491"></a>00491         <span class="comment">// of the way the T is used in definition of u.</span>
-<a name="l00492"></a>00492         T3 += T3 < 0 ? -sqrt(disc) : sqrt(disc); <span class="comment">// T3 = (r * t)^3</span>
-<a name="l00493"></a>00493         <span class="comment">// N.B. cbrt always returns the real root.  cbrt(-8) = -2.</span>
-<a name="l00494"></a>00494         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> T = <a class="code" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">Math::cbrt</a>(T3); <span class="comment">// T = r * t</span>
-<a name="l00495"></a>00495         <span class="comment">// T can be zero; but then r2 / T -> 0.</span>
-<a name="l00496"></a>00496         u += T + (T != 0 ? r2 / T : 0);
-<a name="l00497"></a>00497       } <span class="keywordflow">else</span> {
-<a name="l00498"></a>00498         <span class="comment">// T is complex, but the way u is defined the result is real.</span>
-<a name="l00499"></a>00499         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ang = atan2(sqrt(-disc), -(S + r3));
-<a name="l00500"></a>00500         <span class="comment">// There are three possible cube roots.  We choose the root which</span>
-<a name="l00501"></a>00501         <span class="comment">// avoids cancellation.  Note that disc < 0 implies that r < 0.</span>
-<a name="l00502"></a>00502         u += 2 * r * cos(ang / 3);
-<a name="l00503"></a>00503       }
-<a name="l00504"></a>00504       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00505"></a>00505         v = sqrt(<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(u) + q),    <span class="comment">// guaranteed positive</span>
-<a name="l00506"></a>00506         <span class="comment">// Avoid loss of accuracy when u < 0.</span>
-<a name="l00507"></a>00507         uv = u < 0 ? q / (v - u) : u + v, <span class="comment">// u+v, guaranteed positive</span>
-<a name="l00508"></a>00508         w = (uv - q) / (2 * v);           <span class="comment">// positive?</span>
-<a name="l00509"></a>00509       <span class="comment">// Rearrange expression for k to avoid loss of accuracy due to</span>
-<a name="l00510"></a>00510       <span class="comment">// subtraction.  Division by 0 not possible because uv > 0, w >= 0.</span>
-<a name="l00511"></a>00511       k = uv / (sqrt(uv + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(w)) + w);   <span class="comment">// guaranteed positive</span>
-<a name="l00512"></a>00512     } <span class="keywordflow">else</span> {               <span class="comment">// q == 0 && r <= 0</span>
-<a name="l00513"></a>00513       <span class="comment">// y = 0 with |x| <= 1.  Handle this case directly.</span>
-<a name="l00514"></a>00514       <span class="comment">// for y small, positive root is k = abs(y)/sqrt(1-x^2)</span>
-<a name="l00515"></a>00515       k = 0;
-<a name="l00516"></a>00516     }
-<a name="l00517"></a>00517     <span class="keywordflow">return</span> k;
-<a name="l00518"></a>00518   }
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::InverseStart(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet1,
-<a name="l00521"></a>00521                                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet2,
-<a name="l00522"></a>00522                                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lam12,
-<a name="l00523"></a>00523                                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& salp1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& calp1,
-<a name="l00524"></a>00524                                     <span class="comment">// Only updated if return val >= 0</span>
-<a name="l00525"></a>00525                                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& salp2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& calp2,
-<a name="l00526"></a>00526                                     <span class="comment">// Scratch areas of the right size</span>
-<a name="l00527"></a>00527                                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C1a[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C2a[]) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00528"></a>00528     <span class="comment">// Return a starting point for Newton's method in salp1 and calp1 (function</span>
-<a name="l00529"></a>00529     <span class="comment">// value is -1).  If Newton's method doesn't need to be used, return also</span>
-<a name="l00530"></a>00530     <span class="comment">// salp2 and calp2 and function value is sig12.</span>
-<a name="l00531"></a>00531     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00532"></a>00532       sig12 = -1,               <span class="comment">// Return value</span>
-<a name="l00533"></a>00533       <span class="comment">// bet12 = bet2 - bet1 in [0, pi); bet12a = bet2 + bet1 in (-pi, 0]</span>
-<a name="l00534"></a>00534       sbet12 = sbet2 * cbet1 - cbet2 * sbet1,
-<a name="l00535"></a>00535       cbet12 = cbet2 * cbet1 + sbet2 * sbet1;
-<a name="l00536"></a>00536 <span class="preprocessor">#if defined(__GNUC__) && __GNUC__ == 4 && \</span>
-<a name="l00537"></a>00537 <span class="preprocessor">  (__GNUC_MINOR__ < 6 || defined(__MINGW32__))</span>
-<a name="l00538"></a>00538 <span class="preprocessor"></span>    <span class="comment">// Volatile declaration needed to fix inverse cases</span>
-<a name="l00539"></a>00539     <span class="comment">// 88.202499451857 0 -88.202499451857 179.981022032992859592</span>
-<a name="l00540"></a>00540     <span class="comment">// 89.262080389218 0 -89.262080389218 179.992207982775375662</span>
-<a name="l00541"></a>00541     <span class="comment">// 89.333123580033 0 -89.333123580032997687 179.99295812360148422</span>
-<a name="l00542"></a>00542     <span class="comment">// which otherwise fail with g++ 4.4.4 x86 -O3 (Linux)</span>
-<a name="l00543"></a>00543     <span class="comment">// and g++ 4.4.0 (mingw) and g++ 4.6.1 (tdm mingw).</span>
-<a name="l00544"></a>00544     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet12a;
-<a name="l00545"></a>00545     {
-<a name="l00546"></a>00546       <span class="keyword">volatile</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xx1 = sbet2 * cbet1;
-<a name="l00547"></a>00547       <span class="keyword">volatile</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xx2 = cbet2 * sbet1;
-<a name="l00548"></a>00548       sbet12a = xx1 + xx2;
-<a name="l00549"></a>00549     }
-<a name="l00550"></a>00550 <span class="preprocessor">#else</span>
-<a name="l00551"></a>00551 <span class="preprocessor"></span>    <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet12a = sbet2 * cbet1 + cbet2 * sbet1;
-<a name="l00552"></a>00552 <span class="preprocessor">#endif</span>
-<a name="l00553"></a>00553 <span class="preprocessor"></span>    <span class="keywordtype">bool</span> shortline = cbet12 >= 0 && sbet12 < <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5) &&
-<a name="l00554"></a>00554       lam12 <= Math::pi<real>() / 6;
-<a name="l00555"></a>00555     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00556"></a>00556       omg12 = (!shortline ? lam12 :
-<a name="l00557"></a>00557                lam12 / sqrt(1 - _e2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>((cbet1 + cbet2) / 2))),
-<a name="l00558"></a>00558       somg12 = sin(omg12), comg12 = cos(omg12);
-<a name="l00559"></a>00559 
-<a name="l00560"></a>00560     salp1 = cbet2 * somg12;
-<a name="l00561"></a>00561     calp1 = comg12 >= 0 ?
-<a name="l00562"></a>00562       sbet12 + cbet2 * sbet1 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(somg12) / (1 + comg12) :
-<a name="l00563"></a>00563       sbet12a - cbet2 * sbet1 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(somg12) / (1 - comg12);
-<a name="l00564"></a>00564 
-<a name="l00565"></a>00565     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00566"></a>00566       ssig12 = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(salp1, calp1),
-<a name="l00567"></a>00567       csig12 = sbet1 * sbet2 + cbet1 * cbet2 * comg12;
-<a name="l00568"></a>00568 
-<a name="l00569"></a>00569     <span class="keywordflow">if</span> (shortline && ssig12 < _etol2) {
-<a name="l00570"></a>00570       <span class="comment">// really short lines</span>
-<a name="l00571"></a>00571       salp2 = cbet1 * somg12;
-<a name="l00572"></a>00572       calp2 = sbet12 - cbet1 * sbet2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(somg12) / (1 + comg12);
-<a name="l00573"></a>00573       SinCosNorm(salp2, calp2);
-<a name="l00574"></a>00574       <span class="comment">// Set return value</span>
-<a name="l00575"></a>00575       sig12 = atan2(ssig12, csig12);
-<a name="l00576"></a>00576     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (csig12 >= 0 ||
-<a name="l00577"></a>00577                ssig12 >= 3 * abs(_f) * Math::pi<real>() * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cbet1)) {
-<a name="l00578"></a>00578       <span class="comment">// Nothing to do, zeroth order spherical approximation is OK</span>
-<a name="l00579"></a>00579     } <span class="keywordflow">else</span> {
-<a name="l00580"></a>00580       <span class="comment">// Scale lam12 and bet2 to x, y coordinate system where antipodal point</span>
-<a name="l00581"></a>00581       <span class="comment">// is at origin and singular point is at y = 0, x = -1.</span>
-<a name="l00582"></a>00582       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, lamscale, betscale;
-<a name="l00583"></a>00583       <span class="comment">// Volatile declaration needed to fix inverse case</span>
-<a name="l00584"></a>00584       <span class="comment">// 56.320923501171 0 -56.320923501171 179.664747671772880215</span>
-<a name="l00585"></a>00585       <span class="comment">// which otherwise fails with g++ 4.4.4 x86 -O3</span>
-<a name="l00586"></a>00586       <span class="keyword">volatile</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x;
-<a name="l00587"></a>00587       <span class="keywordflow">if</span> (_f >= 0) {            <span class="comment">// In fact f == 0 does not get here</span>
-<a name="l00588"></a>00588         <span class="comment">// x = dlong, y = dlat</span>
-<a name="l00589"></a>00589         {
-<a name="l00590"></a>00590           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00591"></a>00591             k2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sbet1) * _ep2,
-<a name="l00592"></a>00592             eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2);
-<a name="l00593"></a>00593           lamscale = _f * cbet1 * A3f(eps) * Math::pi<real>();
-<a name="l00594"></a>00594         }
-<a name="l00595"></a>00595         betscale = lamscale * cbet1;
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597         x = (lam12 - Math::pi<real>()) / lamscale;
-<a name="l00598"></a>00598         y = sbet12a / betscale;
-<a name="l00599"></a>00599       } <span class="keywordflow">else</span> {                  <span class="comment">// _f < 0</span>
-<a name="l00600"></a>00600         <span class="comment">// x = dlat, y = dlong</span>
-<a name="l00601"></a>00601         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00602"></a>00602           cbet12a = cbet2 * cbet1 - sbet2 * sbet1,
-<a name="l00603"></a>00603           bet12a = atan2(sbet12a, cbet12a);
-<a name="l00604"></a>00604         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> m12a, m0, dummy;
-<a name="l00605"></a>00605         <span class="comment">// In the case of lon12 = 180, this repeats a calculation made in</span>
-<a name="l00606"></a>00606         <span class="comment">// Inverse.</span>
-<a name="l00607"></a>00607         Lengths(_n, Math::pi<real>() + bet12a, sbet1, -cbet1, sbet2, cbet2,
-<a name="l00608"></a>00608                 cbet1, cbet2, dummy, m12a, m0, <span class="keyword">false</span>,
-<a name="l00609"></a>00609                 dummy, dummy, C1a, C2a);
-<a name="l00610"></a>00610         x = -1 + m12a/(_f1 * cbet1 * cbet2 * m0 * Math::pi<real>());
-<a name="l00611"></a>00611         betscale = x < -<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.01) ? sbet12a / x :
-<a name="l00612"></a>00612           -_f * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cbet1) * Math::pi<real>();
-<a name="l00613"></a>00613         lamscale = betscale / cbet1;
-<a name="l00614"></a>00614         y = (lam12 - Math::pi<real>()) / lamscale;
-<a name="l00615"></a>00615       }
-<a name="l00616"></a>00616 
-<a name="l00617"></a>00617       <span class="keywordflow">if</span> (y > -tol1_ && x > -1 - xthresh_) {
-<a name="l00618"></a>00618         <span class="comment">// strip near cut</span>
-<a name="l00619"></a>00619         <span class="keywordflow">if</span> (_f >= 0) {
-<a name="l00620"></a>00620           salp1 = min(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), -<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(x)); calp1 = - sqrt(1 - <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(salp1));
-<a name="l00621"></a>00621         } <span class="keywordflow">else</span> {
-<a name="l00622"></a>00622           calp1 = max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(x > -tol1_ ? 0 : -1), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(x));
-<a name="l00623"></a>00623           salp1 = sqrt(1 - <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(calp1));
-<a name="l00624"></a>00624         }
-<a name="l00625"></a>00625       } <span class="keywordflow">else</span> {
-<a name="l00626"></a>00626         <span class="comment">// Estimate alp1, by solving the astroid problem.</span>
-<a name="l00627"></a>00627         <span class="comment">//</span>
-<a name="l00628"></a>00628         <span class="comment">// Could estimate alpha1 = theta + pi/2, directly, i.e.,</span>
-<a name="l00629"></a>00629         <span class="comment">//   calp1 = y/k; salp1 = -x/(1+k);  for _f >= 0</span>
-<a name="l00630"></a>00630         <span class="comment">//   calp1 = x/(1+k); salp1 = -y/k;  for _f < 0 (need to check)</span>
-<a name="l00631"></a>00631         <span class="comment">//</span>
-<a name="l00632"></a>00632         <span class="comment">// However, it's better to estimate omg12 from astroid and use</span>
-<a name="l00633"></a>00633         <span class="comment">// spherical formula to compute alp1.  This reduces the mean number of</span>
-<a name="l00634"></a>00634         <span class="comment">// Newton iterations for astroid cases from 2.24 (min 0, max 6) to 2.12</span>
-<a name="l00635"></a>00635         <span class="comment">// (min 0 max 5).  The changes in the number of iterations are as</span>
-<a name="l00636"></a>00636         <span class="comment">// follows:</span>
-<a name="l00637"></a>00637         <span class="comment">//</span>
-<a name="l00638"></a>00638         <span class="comment">// change percent</span>
-<a name="l00639"></a>00639         <span class="comment">//    1       5</span>
-<a name="l00640"></a>00640         <span class="comment">//    0      78</span>
-<a name="l00641"></a>00641         <span class="comment">//   -1      16</span>
-<a name="l00642"></a>00642         <span class="comment">//   -2       0.6</span>
-<a name="l00643"></a>00643         <span class="comment">//   -3       0.04</span>
-<a name="l00644"></a>00644         <span class="comment">//   -4       0.002</span>
-<a name="l00645"></a>00645         <span class="comment">//</span>
-<a name="l00646"></a>00646         <span class="comment">// The histogram of iterations is (m = number of iterations estimating</span>
-<a name="l00647"></a>00647         <span class="comment">// alp1 directly, n = number of iterations estimating via omg12, total</span>
-<a name="l00648"></a>00648         <span class="comment">// number of trials = 148605):</span>
-<a name="l00649"></a>00649         <span class="comment">//</span>
-<a name="l00650"></a>00650         <span class="comment">//  iter    m      n</span>
-<a name="l00651"></a>00651         <span class="comment">//    0   148    186</span>
-<a name="l00652"></a>00652         <span class="comment">//    1 13046  13845</span>
-<a name="l00653"></a>00653         <span class="comment">//    2 93315 102225</span>
-<a name="l00654"></a>00654         <span class="comment">//    3 36189  32341</span>
-<a name="l00655"></a>00655         <span class="comment">//    4  5396      7</span>
-<a name="l00656"></a>00656         <span class="comment">//    5   455      1</span>
-<a name="l00657"></a>00657         <span class="comment">//    6    56      0</span>
-<a name="l00658"></a>00658         <span class="comment">//</span>
-<a name="l00659"></a>00659         <span class="comment">// Because omg12 is near pi, estimate work with omg12a = pi - omg12</span>
-<a name="l00660"></a>00660         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k = Astroid(x, y);
-<a name="l00661"></a>00661         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00662"></a>00662           omg12a = lamscale * ( _f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k ),
-<a name="l00663"></a>00663           somg12 = sin(omg12a), comg12 = -cos(omg12a);
-<a name="l00664"></a>00664         <span class="comment">// Update spherical estimate of alp1 using omg12 instead of lam12</span>
-<a name="l00665"></a>00665         salp1 = cbet2 * somg12;
-<a name="l00666"></a>00666         calp1 = sbet12a - cbet2 * sbet1 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(somg12) / (1 - comg12);
-<a name="l00667"></a>00667       }
-<a name="l00668"></a>00668     }
-<a name="l00669"></a>00669     SinCosNorm(salp1, calp1);
-<a name="l00670"></a>00670     <span class="keywordflow">return</span> sig12;
-<a name="l00671"></a>00671   }
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::Lambda12(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet2,
-<a name="l00674"></a>00674                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> salp1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> calp1,
-<a name="l00675"></a>00675                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& salp2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& calp2,
-<a name="l00676"></a>00676                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& sig12,
-<a name="l00677"></a>00677                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& ssig1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& csig1,
-<a name="l00678"></a>00678                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& ssig2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& csig2,
-<a name="l00679"></a>00679                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& domg12,
-<a name="l00680"></a>00680                                 <span class="keywordtype">bool</span> diffp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& dlam12,
-<a name="l00681"></a>00681                                 <span class="comment">// Scratch areas of the right size</span>
-<a name="l00682"></a>00682                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C1a[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C2a[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C3a[]) <span class="keyword">const</span>
-<a name="l00683"></a>00683     <span class="keywordflow">throw</span>() {
-<a name="l00684"></a>00684 
-<a name="l00685"></a>00685     <span class="keywordflow">if</span> (sbet1 == 0 && calp1 == 0)
-<a name="l00686"></a>00686       <span class="comment">// Break degeneracy of equatorial line.  This case has already been</span>
-<a name="l00687"></a>00687       <span class="comment">// handled.</span>
-<a name="l00688"></a>00688       calp1 = -tiny_;
-<a name="l00689"></a>00689 
-<a name="l00690"></a>00690     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00691"></a>00691       <span class="comment">// sin(alp1) * cos(bet1) = sin(alp0)</span>
-<a name="l00692"></a>00692       salp0 = salp1 * cbet1,
-<a name="l00693"></a>00693       calp0 = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(calp1, salp1 * sbet1); <span class="comment">// calp0 > 0</span>
-<a name="l00694"></a>00694 
-<a name="l00695"></a>00695     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> somg1, comg1, somg2, comg2, omg12, lam12;
-<a name="l00696"></a>00696     <span class="comment">// tan(bet1) = tan(sig1) * cos(alp1)</span>
-<a name="l00697"></a>00697     <span class="comment">// tan(omg1) = sin(alp0) * tan(sig1) = tan(omg1)=tan(alp1)*sin(bet1)</span>
-<a name="l00698"></a>00698     ssig1 = sbet1; somg1 = salp0 * sbet1;
-<a name="l00699"></a>00699     csig1 = comg1 = calp1 * cbet1;
-<a name="l00700"></a>00700     SinCosNorm(ssig1, csig1);
-<a name="l00701"></a>00701     <span class="comment">// SinCosNorm(somg1, comg1); -- don't need to normalize!</span>
-<a name="l00702"></a>00702 
-<a name="l00703"></a>00703     <span class="comment">// Enforce symmetries in the case abs(bet2) = -bet1.  Need to be careful</span>
-<a name="l00704"></a>00704     <span class="comment">// about this case, since this can yield singularities in the Newton</span>
-<a name="l00705"></a>00705     <span class="comment">// iteration.</span>
-<a name="l00706"></a>00706     <span class="comment">// sin(alp2) * cos(bet2) = sin(alp0)</span>
-<a name="l00707"></a>00707     salp2 = cbet2 != cbet1 ? salp0 / cbet2 : salp1;
-<a name="l00708"></a>00708     <span class="comment">// calp2 = sqrt(1 - sq(salp2))</span>
-<a name="l00709"></a>00709     <span class="comment">//       = sqrt(sq(calp0) - sq(sbet2)) / cbet2</span>
-<a name="l00710"></a>00710     <span class="comment">// and subst for calp0 and rearrange to give (choose positive sqrt</span>
-<a name="l00711"></a>00711     <span class="comment">// to give alp2 in [0, pi/2]).</span>
-<a name="l00712"></a>00712     calp2 = cbet2 != cbet1 || abs(sbet2) != -sbet1 ?
-<a name="l00713"></a>00713       sqrt(<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(calp1 * cbet1) +
-<a name="l00714"></a>00714            (cbet1 < -sbet1 ?
-<a name="l00715"></a>00715             (cbet2 - cbet1) * (cbet1 + cbet2) :
-<a name="l00716"></a>00716             (sbet1 - sbet2) * (sbet1 + sbet2))) / cbet2 :
-<a name="l00717"></a>00717       abs(calp1);
-<a name="l00718"></a>00718     <span class="comment">// tan(bet2) = tan(sig2) * cos(alp2)</span>
-<a name="l00719"></a>00719     <span class="comment">// tan(omg2) = sin(alp0) * tan(sig2).</span>
-<a name="l00720"></a>00720     ssig2 = sbet2; somg2 = salp0 * sbet2;
-<a name="l00721"></a>00721     csig2 = comg2 = calp2 * cbet2;
-<a name="l00722"></a>00722     SinCosNorm(ssig2, csig2);
-<a name="l00723"></a>00723     <span class="comment">// SinCosNorm(somg2, comg2); -- don't need to normalize!</span>
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725     <span class="comment">// sig12 = sig2 - sig1, limit to [0, pi]</span>
-<a name="l00726"></a>00726     sig12 = atan2(max(csig1 * ssig2 - ssig1 * csig2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0)),
-<a name="l00727"></a>00727                   csig1 * csig2 + ssig1 * ssig2);
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729     <span class="comment">// omg12 = omg2 - omg1, limit to [0, pi]</span>
-<a name="l00730"></a>00730     omg12 = atan2(max(comg1 * somg2 - somg1 * comg2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0)),
-<a name="l00731"></a>00731                   comg1 * comg2 + somg1 * somg2);
-<a name="l00732"></a>00732     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> B312, h0;
-<a name="l00733"></a>00733     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(calp0) * _ep2;
-<a name="l00734"></a>00734     eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2);
-<a name="l00735"></a>00735     C3f(eps, C3a);
-<a name="l00736"></a>00736     B312 = (SinCosSeries(<span class="keyword">true</span>, ssig2, csig2, C3a, nC3_-1) -
-<a name="l00737"></a>00737             SinCosSeries(<span class="keyword">true</span>, ssig1, csig1, C3a, nC3_-1));
-<a name="l00738"></a>00738     h0 = -_f * A3f(eps);
-<a name="l00739"></a>00739     domg12 = salp0 * h0 * (sig12 + B312);
-<a name="l00740"></a>00740     lam12 = omg12 + domg12;
-<a name="l00741"></a>00741 
-<a name="l00742"></a>00742     <span class="keywordflow">if</span> (diffp) {
-<a name="l00743"></a>00743       <span class="keywordflow">if</span> (calp2 == 0)
-<a name="l00744"></a>00744         dlam12 = - 2 * sqrt(1 - _e2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cbet1)) / sbet1;
-<a name="l00745"></a>00745       <span class="keywordflow">else</span> {
-<a name="l00746"></a>00746         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dummy;
-<a name="l00747"></a>00747         Lengths(eps, sig12, ssig1, csig1, ssig2, csig2,
-<a name="l00748"></a>00748                 cbet1, cbet2, dummy, dlam12, dummy,
-<a name="l00749"></a>00749                 <span class="keyword">false</span>, dummy, dummy, C1a, C2a);
-<a name="l00750"></a>00750         dlam12 /= calp2 * cbet2;
-<a name="l00751"></a>00751       }
-<a name="l00752"></a>00752     }
-<a name="l00753"></a>00753 
-<a name="l00754"></a>00754     <span class="keywordflow">return</span> lam12;
-<a name="l00755"></a>00755   }
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::A3f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00758"></a>00758     <span class="comment">// Evaluation sum(_A3c[k] * eps^k, k, 0, nA3x_-1) by Horner's method</span>
-<a name="l00759"></a>00759     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> v = 0;
-<a name="l00760"></a>00760     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = nA3x_; i; )
-<a name="l00761"></a>00761       v = eps * v + _A3x[--i];
-<a name="l00762"></a>00762     <span class="keywordflow">return</span> v;
-<a name="l00763"></a>00763   }
-<a name="l00764"></a>00764 
-<a name="l00765"></a>00765   <span class="keywordtype">void</span> Geodesic::C3f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00766"></a>00766     <span class="comment">// Evaluation C3 coeffs by Horner's method</span>
-<a name="l00767"></a>00767     <span class="comment">// Elements c[1] thru c[nC3_ - 1] are set</span>
-<a name="l00768"></a>00768     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = nC3x_, k = nC3_ - 1; k; ) {
-<a name="l00769"></a>00769       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = 0;
-<a name="l00770"></a>00770       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = nC3_ - k; i; --i)
-<a name="l00771"></a>00771         t = eps * t + _C3x[--j];
-<a name="l00772"></a>00772       c[k--] = t;
-<a name="l00773"></a>00773     }
-<a name="l00774"></a>00774 
-<a name="l00775"></a>00775     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> mult = 1;
-<a name="l00776"></a>00776     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 1; k < nC3_; ) {
-<a name="l00777"></a>00777       mult *= eps;
-<a name="l00778"></a>00778       c[k++] *= mult;
-<a name="l00779"></a>00779     }
-<a name="l00780"></a>00780   }
-<a name="l00781"></a>00781 
-<a name="l00782"></a>00782   <span class="keywordtype">void</span> Geodesic::C4f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00783"></a>00783     <span class="comment">// Evaluation C4 coeffs by Horner's method</span>
-<a name="l00784"></a>00784     <span class="comment">// Elements c[0] thru c[nC4_ - 1] are set</span>
-<a name="l00785"></a>00785     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = nC4x_, k = nC4_; k; ) {
-<a name="l00786"></a>00786       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = 0;
-<a name="l00787"></a>00787       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = nC4_ - k + 1; i; --i)
-<a name="l00788"></a>00788         t = k2 * t + _C4x[--j];
-<a name="l00789"></a>00789       c[--k] = t;
-<a name="l00790"></a>00790     }
-<a name="l00791"></a>00791 
-<a name="l00792"></a>00792     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> mult = 1;
-<a name="l00793"></a>00793     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 1; k < nC4_; ) {
-<a name="l00794"></a>00794       mult *= k2;
-<a name="l00795"></a>00795       c[k++] *= mult;
-<a name="l00796"></a>00796     }
-<a name="l00797"></a>00797   }
-<a name="l00798"></a>00798 
-<a name="l00799"></a>00799   <span class="comment">// Generated by Maxima on 2010-09-04 10:26:17-04:00</span>
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801   <span class="comment">// The scale factor A1-1 = mean value of I1-1</span>
-<a name="l00802"></a>00802   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::A1m1f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps) <span class="keywordflow">throw</span>() {
-<a name="l00803"></a>00803     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00804"></a>00804       eps2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(eps),
-<a name="l00805"></a>00805       t;
-<a name="l00806"></a>00806     <span class="keywordflow">switch</span> (nA1_/2) {
-<a name="l00807"></a>00807     <span class="keywordflow">case</span> 0:
-<a name="l00808"></a>00808       t = 0;
-<a name="l00809"></a>00809       <span class="keywordflow">break</span>;
-<a name="l00810"></a>00810     <span class="keywordflow">case</span> 1:
-<a name="l00811"></a>00811       t = eps2/4;
-<a name="l00812"></a>00812       <span class="keywordflow">break</span>;
-<a name="l00813"></a>00813     <span class="keywordflow">case</span> 2:
-<a name="l00814"></a>00814       t = eps2*(eps2+16)/64;
-<a name="l00815"></a>00815       <span class="keywordflow">break</span>;
-<a name="l00816"></a>00816     <span class="keywordflow">case</span> 3:
-<a name="l00817"></a>00817       t = eps2*(eps2*(eps2+4)+64)/256;
-<a name="l00818"></a>00818       <span class="keywordflow">break</span>;
-<a name="l00819"></a>00819     <span class="keywordflow">case</span> 4:
-<a name="l00820"></a>00820       t = eps2*(eps2*(eps2*(25*eps2+64)+256)+4096)/16384;
-<a name="l00821"></a>00821       <span class="keywordflow">break</span>;
-<a name="l00822"></a>00822     <span class="keywordflow">default</span>:
-<a name="l00823"></a>00823       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(nA1_ >= 0 && nA1_ <= 8, <span class="stringliteral">"Bad value of nA1_"</span>);
-<a name="l00824"></a>00824       t = 0;
-<a name="l00825"></a>00825     }
-<a name="l00826"></a>00826     <span class="keywordflow">return</span> (t + eps) / (1 - eps);
-<a name="l00827"></a>00827   }
-<a name="l00828"></a>00828 
-<a name="l00829"></a>00829   <span class="comment">// The coefficients C1[l] in the Fourier expansion of B1</span>
-<a name="l00830"></a>00830   <span class="keywordtype">void</span> Geodesic::C1f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) <span class="keywordflow">throw</span>() {
-<a name="l00831"></a>00831     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00832"></a>00832       eps2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(eps),
-<a name="l00833"></a>00833       d = eps;
-<a name="l00834"></a>00834     <span class="keywordflow">switch</span> (nC1_) {
-<a name="l00835"></a>00835     <span class="keywordflow">case</span> 0:
-<a name="l00836"></a>00836       <span class="keywordflow">break</span>;
-<a name="l00837"></a>00837     <span class="keywordflow">case</span> 1:
-<a name="l00838"></a>00838       c[1] = -d/2;
-<a name="l00839"></a>00839       <span class="keywordflow">break</span>;
-<a name="l00840"></a>00840     <span class="keywordflow">case</span> 2:
-<a name="l00841"></a>00841       c[1] = -d/2;
-<a name="l00842"></a>00842       d *= eps;
-<a name="l00843"></a>00843       c[2] = -d/16;
-<a name="l00844"></a>00844       <span class="keywordflow">break</span>;
-<a name="l00845"></a>00845     <span class="keywordflow">case</span> 3:
-<a name="l00846"></a>00846       c[1] = d*(3*eps2-8)/16;
-<a name="l00847"></a>00847       d *= eps;
-<a name="l00848"></a>00848       c[2] = -d/16;
-<a name="l00849"></a>00849       d *= eps;
-<a name="l00850"></a>00850       c[3] = -d/48;
-<a name="l00851"></a>00851       <span class="keywordflow">break</span>;
-<a name="l00852"></a>00852     <span class="keywordflow">case</span> 4:
-<a name="l00853"></a>00853       c[1] = d*(3*eps2-8)/16;
-<a name="l00854"></a>00854       d *= eps;
-<a name="l00855"></a>00855       c[2] = d*(eps2-2)/32;
-<a name="l00856"></a>00856       d *= eps;
-<a name="l00857"></a>00857       c[3] = -d/48;
-<a name="l00858"></a>00858       d *= eps;
-<a name="l00859"></a>00859       c[4] = -5*d/512;
-<a name="l00860"></a>00860       <span class="keywordflow">break</span>;
-<a name="l00861"></a>00861     <span class="keywordflow">case</span> 5:
-<a name="l00862"></a>00862       c[1] = d*((6-eps2)*eps2-16)/32;
-<a name="l00863"></a>00863       d *= eps;
-<a name="l00864"></a>00864       c[2] = d*(eps2-2)/32;
-<a name="l00865"></a>00865       d *= eps;
-<a name="l00866"></a>00866       c[3] = d*(9*eps2-16)/768;
-<a name="l00867"></a>00867       d *= eps;
-<a name="l00868"></a>00868       c[4] = -5*d/512;
-<a name="l00869"></a>00869       d *= eps;
-<a name="l00870"></a>00870       c[5] = -7*d/1280;
-<a name="l00871"></a>00871       <span class="keywordflow">break</span>;
-<a name="l00872"></a>00872     <span class="keywordflow">case</span> 6:
-<a name="l00873"></a>00873       c[1] = d*((6-eps2)*eps2-16)/32;
-<a name="l00874"></a>00874       d *= eps;
-<a name="l00875"></a>00875       c[2] = d*((64-9*eps2)*eps2-128)/2048;
-<a name="l00876"></a>00876       d *= eps;
-<a name="l00877"></a>00877       c[3] = d*(9*eps2-16)/768;
-<a name="l00878"></a>00878       d *= eps;
-<a name="l00879"></a>00879       c[4] = d*(3*eps2-5)/512;
-<a name="l00880"></a>00880       d *= eps;
-<a name="l00881"></a>00881       c[5] = -7*d/1280;
-<a name="l00882"></a>00882       d *= eps;
-<a name="l00883"></a>00883       c[6] = -7*d/2048;
-<a name="l00884"></a>00884       <span class="keywordflow">break</span>;
-<a name="l00885"></a>00885     <span class="keywordflow">case</span> 7:
-<a name="l00886"></a>00886       c[1] = d*(eps2*(eps2*(19*eps2-64)+384)-1024)/2048;
-<a name="l00887"></a>00887       d *= eps;
-<a name="l00888"></a>00888       c[2] = d*((64-9*eps2)*eps2-128)/2048;
-<a name="l00889"></a>00889       d *= eps;
-<a name="l00890"></a>00890       c[3] = d*((72-9*eps2)*eps2-128)/6144;
-<a name="l00891"></a>00891       d *= eps;
-<a name="l00892"></a>00892       c[4] = d*(3*eps2-5)/512;
-<a name="l00893"></a>00893       d *= eps;
-<a name="l00894"></a>00894       c[5] = d*(35*eps2-56)/10240;
-<a name="l00895"></a>00895       d *= eps;
-<a name="l00896"></a>00896       c[6] = -7*d/2048;
-<a name="l00897"></a>00897       d *= eps;
-<a name="l00898"></a>00898       c[7] = -33*d/14336;
-<a name="l00899"></a>00899       <span class="keywordflow">break</span>;
-<a name="l00900"></a>00900     <span class="keywordflow">case</span> 8:
-<a name="l00901"></a>00901       c[1] = d*(eps2*(eps2*(19*eps2-64)+384)-1024)/2048;
-<a name="l00902"></a>00902       d *= eps;
-<a name="l00903"></a>00903       c[2] = d*(eps2*(eps2*(7*eps2-18)+128)-256)/4096;
-<a name="l00904"></a>00904       d *= eps;
-<a name="l00905"></a>00905       c[3] = d*((72-9*eps2)*eps2-128)/6144;
-<a name="l00906"></a>00906       d *= eps;
-<a name="l00907"></a>00907       c[4] = d*((96-11*eps2)*eps2-160)/16384;
-<a name="l00908"></a>00908       d *= eps;
-<a name="l00909"></a>00909       c[5] = d*(35*eps2-56)/10240;
-<a name="l00910"></a>00910       d *= eps;
-<a name="l00911"></a>00911       c[6] = d*(9*eps2-14)/4096;
-<a name="l00912"></a>00912       d *= eps;
-<a name="l00913"></a>00913       c[7] = -33*d/14336;
-<a name="l00914"></a>00914       d *= eps;
-<a name="l00915"></a>00915       c[8] = -429*d/262144;
-<a name="l00916"></a>00916       <span class="keywordflow">break</span>;
-<a name="l00917"></a>00917     <span class="keywordflow">default</span>:
-<a name="l00918"></a>00918       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(nC1_ >= 0 && nC1_ <= 8, <span class="stringliteral">"Bad value of nC1_"</span>);
-<a name="l00919"></a>00919     }
-<a name="l00920"></a>00920   }
-<a name="l00921"></a>00921 
-<a name="l00922"></a>00922   <span class="comment">// The coefficients C1p[l] in the Fourier expansion of B1p</span>
-<a name="l00923"></a>00923   <span class="keywordtype">void</span> Geodesic::C1pf(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) <span class="keywordflow">throw</span>() {
-<a name="l00924"></a>00924     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00925"></a>00925       eps2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(eps),
-<a name="l00926"></a>00926       d = eps;
-<a name="l00927"></a>00927     <span class="keywordflow">switch</span> (nC1p_) {
-<a name="l00928"></a>00928     <span class="keywordflow">case</span> 0:
-<a name="l00929"></a>00929       <span class="keywordflow">break</span>;
-<a name="l00930"></a>00930     <span class="keywordflow">case</span> 1:
-<a name="l00931"></a>00931       c[1] = d/2;
-<a name="l00932"></a>00932       <span class="keywordflow">break</span>;
-<a name="l00933"></a>00933     <span class="keywordflow">case</span> 2:
-<a name="l00934"></a>00934       c[1] = d/2;
-<a name="l00935"></a>00935       d *= eps;
-<a name="l00936"></a>00936       c[2] = 5*d/16;
-<a name="l00937"></a>00937       <span class="keywordflow">break</span>;
-<a name="l00938"></a>00938     <span class="keywordflow">case</span> 3:
-<a name="l00939"></a>00939       c[1] = d*(16-9*eps2)/32;
-<a name="l00940"></a>00940       d *= eps;
-<a name="l00941"></a>00941       c[2] = 5*d/16;
-<a name="l00942"></a>00942       d *= eps;
-<a name="l00943"></a>00943       c[3] = 29*d/96;
-<a name="l00944"></a>00944       <span class="keywordflow">break</span>;
-<a name="l00945"></a>00945     <span class="keywordflow">case</span> 4:
-<a name="l00946"></a>00946       c[1] = d*(16-9*eps2)/32;
-<a name="l00947"></a>00947       d *= eps;
-<a name="l00948"></a>00948       c[2] = d*(30-37*eps2)/96;
-<a name="l00949"></a>00949       d *= eps;
-<a name="l00950"></a>00950       c[3] = 29*d/96;
-<a name="l00951"></a>00951       d *= eps;
-<a name="l00952"></a>00952       c[4] = 539*d/1536;
-<a name="l00953"></a>00953       <span class="keywordflow">break</span>;
-<a name="l00954"></a>00954     <span class="keywordflow">case</span> 5:
-<a name="l00955"></a>00955       c[1] = d*(eps2*(205*eps2-432)+768)/1536;
-<a name="l00956"></a>00956       d *= eps;
-<a name="l00957"></a>00957       c[2] = d*(30-37*eps2)/96;
-<a name="l00958"></a>00958       d *= eps;
-<a name="l00959"></a>00959       c[3] = d*(116-225*eps2)/384;
-<a name="l00960"></a>00960       d *= eps;
-<a name="l00961"></a>00961       c[4] = 539*d/1536;
-<a name="l00962"></a>00962       d *= eps;
-<a name="l00963"></a>00963       c[5] = 3467*d/7680;
-<a name="l00964"></a>00964       <span class="keywordflow">break</span>;
-<a name="l00965"></a>00965     <span class="keywordflow">case</span> 6:
-<a name="l00966"></a>00966       c[1] = d*(eps2*(205*eps2-432)+768)/1536;
-<a name="l00967"></a>00967       d *= eps;
-<a name="l00968"></a>00968       c[2] = d*(eps2*(4005*eps2-4736)+3840)/12288;
-<a name="l00969"></a>00969       d *= eps;
-<a name="l00970"></a>00970       c[3] = d*(116-225*eps2)/384;
-<a name="l00971"></a>00971       d *= eps;
-<a name="l00972"></a>00972       c[4] = d*(2695-7173*eps2)/7680;
-<a name="l00973"></a>00973       d *= eps;
-<a name="l00974"></a>00974       c[5] = 3467*d/7680;
-<a name="l00975"></a>00975       d *= eps;
-<a name="l00976"></a>00976       c[6] = 38081*d/61440;
-<a name="l00977"></a>00977       <span class="keywordflow">break</span>;
-<a name="l00978"></a>00978     <span class="keywordflow">case</span> 7:
-<a name="l00979"></a>00979       c[1] = d*(eps2*((9840-4879*eps2)*eps2-20736)+36864)/73728;
-<a name="l00980"></a>00980       d *= eps;
-<a name="l00981"></a>00981       c[2] = d*(eps2*(4005*eps2-4736)+3840)/12288;
-<a name="l00982"></a>00982       d *= eps;
-<a name="l00983"></a>00983       c[3] = d*(eps2*(8703*eps2-7200)+3712)/12288;
-<a name="l00984"></a>00984       d *= eps;
-<a name="l00985"></a>00985       c[4] = d*(2695-7173*eps2)/7680;
-<a name="l00986"></a>00986       d *= eps;
-<a name="l00987"></a>00987       c[5] = d*(41604-141115*eps2)/92160;
-<a name="l00988"></a>00988       d *= eps;
-<a name="l00989"></a>00989       c[6] = 38081*d/61440;
-<a name="l00990"></a>00990       d *= eps;
-<a name="l00991"></a>00991       c[7] = 459485*d/516096;
-<a name="l00992"></a>00992       <span class="keywordflow">break</span>;
-<a name="l00993"></a>00993     <span class="keywordflow">case</span> 8:
-<a name="l00994"></a>00994       c[1] = d*(eps2*((9840-4879*eps2)*eps2-20736)+36864)/73728;
-<a name="l00995"></a>00995       d *= eps;
-<a name="l00996"></a>00996       c[2] = d*(eps2*((120150-86171*eps2)*eps2-142080)+115200)/368640;
-<a name="l00997"></a>00997       d *= eps;
-<a name="l00998"></a>00998       c[3] = d*(eps2*(8703*eps2-7200)+3712)/12288;
-<a name="l00999"></a>00999       d *= eps;
-<a name="l01000"></a>01000       c[4] = d*(eps2*(1082857*eps2-688608)+258720)/737280;
-<a name="l01001"></a>01001       d *= eps;
-<a name="l01002"></a>01002       c[5] = d*(41604-141115*eps2)/92160;
-<a name="l01003"></a>01003       d *= eps;
-<a name="l01004"></a>01004       c[6] = d*(533134-2200311*eps2)/860160;
-<a name="l01005"></a>01005       d *= eps;
-<a name="l01006"></a>01006       c[7] = 459485*d/516096;
-<a name="l01007"></a>01007       d *= eps;
-<a name="l01008"></a>01008       c[8] = 109167851*d/82575360;
-<a name="l01009"></a>01009       <span class="keywordflow">break</span>;
-<a name="l01010"></a>01010     <span class="keywordflow">default</span>:
-<a name="l01011"></a>01011       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(nC1p_ >= 0 && nC1p_ <= 8, <span class="stringliteral">"Bad value of nC1p_"</span>);
-<a name="l01012"></a>01012     }
-<a name="l01013"></a>01013   }
-<a name="l01014"></a>01014 
-<a name="l01015"></a>01015   <span class="comment">// The scale factor A2-1 = mean value of I2-1</span>
-<a name="l01016"></a>01016   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geodesic::A2m1f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps) <span class="keywordflow">throw</span>() {
-<a name="l01017"></a>01017     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l01018"></a>01018       eps2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(eps),
-<a name="l01019"></a>01019       t;
-<a name="l01020"></a>01020     <span class="keywordflow">switch</span> (nA2_/2) {
-<a name="l01021"></a>01021     <span class="keywordflow">case</span> 0:
-<a name="l01022"></a>01022       t = 0;
-<a name="l01023"></a>01023       <span class="keywordflow">break</span>;
-<a name="l01024"></a>01024     <span class="keywordflow">case</span> 1:
-<a name="l01025"></a>01025       t = eps2/4;
-<a name="l01026"></a>01026       <span class="keywordflow">break</span>;
-<a name="l01027"></a>01027     <span class="keywordflow">case</span> 2:
-<a name="l01028"></a>01028       t = eps2*(9*eps2+16)/64;
-<a name="l01029"></a>01029       <span class="keywordflow">break</span>;
-<a name="l01030"></a>01030     <span class="keywordflow">case</span> 3:
-<a name="l01031"></a>01031       t = eps2*(eps2*(25*eps2+36)+64)/256;
-<a name="l01032"></a>01032       <span class="keywordflow">break</span>;
-<a name="l01033"></a>01033     <span class="keywordflow">case</span> 4:
-<a name="l01034"></a>01034       t = eps2*(eps2*(eps2*(1225*eps2+1600)+2304)+4096)/16384;
-<a name="l01035"></a>01035       <span class="keywordflow">break</span>;
-<a name="l01036"></a>01036     <span class="keywordflow">default</span>:
-<a name="l01037"></a>01037       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(nA2_ >= 0 && nA2_ <= 8, <span class="stringliteral">"Bad value of nA2_"</span>);
-<a name="l01038"></a>01038       t = 0;
-<a name="l01039"></a>01039     }
-<a name="l01040"></a>01040     <span class="keywordflow">return</span> t * (1 - eps) - eps;
-<a name="l01041"></a>01041   }
-<a name="l01042"></a>01042 
-<a name="l01043"></a>01043   <span class="comment">// The coefficients C2[l] in the Fourier expansion of B2</span>
-<a name="l01044"></a>01044   <span class="keywordtype">void</span> Geodesic::C2f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) <span class="keywordflow">throw</span>() {
-<a name="l01045"></a>01045     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l01046"></a>01046       eps2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(eps),
-<a name="l01047"></a>01047       d = eps;
-<a name="l01048"></a>01048     <span class="keywordflow">switch</span> (nC2_) {
-<a name="l01049"></a>01049     <span class="keywordflow">case</span> 0:
-<a name="l01050"></a>01050       <span class="keywordflow">break</span>;
-<a name="l01051"></a>01051     <span class="keywordflow">case</span> 1:
-<a name="l01052"></a>01052       c[1] = d/2;
-<a name="l01053"></a>01053       <span class="keywordflow">break</span>;
-<a name="l01054"></a>01054     <span class="keywordflow">case</span> 2:
-<a name="l01055"></a>01055       c[1] = d/2;
-<a name="l01056"></a>01056       d *= eps;
-<a name="l01057"></a>01057       c[2] = 3*d/16;
-<a name="l01058"></a>01058       <span class="keywordflow">break</span>;
-<a name="l01059"></a>01059     <span class="keywordflow">case</span> 3:
-<a name="l01060"></a>01060       c[1] = d*(eps2+8)/16;
-<a name="l01061"></a>01061       d *= eps;
-<a name="l01062"></a>01062       c[2] = 3*d/16;
-<a name="l01063"></a>01063       d *= eps;
-<a name="l01064"></a>01064       c[3] = 5*d/48;
-<a name="l01065"></a>01065       <span class="keywordflow">break</span>;
-<a name="l01066"></a>01066     <span class="keywordflow">case</span> 4:
-<a name="l01067"></a>01067       c[1] = d*(eps2+8)/16;
-<a name="l01068"></a>01068       d *= eps;
-<a name="l01069"></a>01069       c[2] = d*(eps2+6)/32;
-<a name="l01070"></a>01070       d *= eps;
-<a name="l01071"></a>01071       c[3] = 5*d/48;
-<a name="l01072"></a>01072       d *= eps;
-<a name="l01073"></a>01073       c[4] = 35*d/512;
-<a name="l01074"></a>01074       <span class="keywordflow">break</span>;
-<a name="l01075"></a>01075     <span class="keywordflow">case</span> 5:
-<a name="l01076"></a>01076       c[1] = d*(eps2*(eps2+2)+16)/32;
-<a name="l01077"></a>01077       d *= eps;
-<a name="l01078"></a>01078       c[2] = d*(eps2+6)/32;
-<a name="l01079"></a>01079       d *= eps;
-<a name="l01080"></a>01080       c[3] = d*(15*eps2+80)/768;
-<a name="l01081"></a>01081       d *= eps;
-<a name="l01082"></a>01082       c[4] = 35*d/512;
-<a name="l01083"></a>01083       d *= eps;
-<a name="l01084"></a>01084       c[5] = 63*d/1280;
-<a name="l01085"></a>01085       <span class="keywordflow">break</span>;
-<a name="l01086"></a>01086     <span class="keywordflow">case</span> 6:
-<a name="l01087"></a>01087       c[1] = d*(eps2*(eps2+2)+16)/32;
-<a name="l01088"></a>01088       d *= eps;
-<a name="l01089"></a>01089       c[2] = d*(eps2*(35*eps2+64)+384)/2048;
-<a name="l01090"></a>01090       d *= eps;
-<a name="l01091"></a>01091       c[3] = d*(15*eps2+80)/768;
-<a name="l01092"></a>01092       d *= eps;
-<a name="l01093"></a>01093       c[4] = d*(7*eps2+35)/512;
-<a name="l01094"></a>01094       d *= eps;
-<a name="l01095"></a>01095       c[5] = 63*d/1280;
-<a name="l01096"></a>01096       d *= eps;
-<a name="l01097"></a>01097       c[6] = 77*d/2048;
-<a name="l01098"></a>01098       <span class="keywordflow">break</span>;
-<a name="l01099"></a>01099     <span class="keywordflow">case</span> 7:
-<a name="l01100"></a>01100       c[1] = d*(eps2*(eps2*(41*eps2+64)+128)+1024)/2048;
-<a name="l01101"></a>01101       d *= eps;
-<a name="l01102"></a>01102       c[2] = d*(eps2*(35*eps2+64)+384)/2048;
-<a name="l01103"></a>01103       d *= eps;
-<a name="l01104"></a>01104       c[3] = d*(eps2*(69*eps2+120)+640)/6144;
-<a name="l01105"></a>01105       d *= eps;
-<a name="l01106"></a>01106       c[4] = d*(7*eps2+35)/512;
-<a name="l01107"></a>01107       d *= eps;
-<a name="l01108"></a>01108       c[5] = d*(105*eps2+504)/10240;
-<a name="l01109"></a>01109       d *= eps;
-<a name="l01110"></a>01110       c[6] = 77*d/2048;
-<a name="l01111"></a>01111       d *= eps;
-<a name="l01112"></a>01112       c[7] = 429*d/14336;
-<a name="l01113"></a>01113       <span class="keywordflow">break</span>;
-<a name="l01114"></a>01114     <span class="keywordflow">case</span> 8:
-<a name="l01115"></a>01115       c[1] = d*(eps2*(eps2*(41*eps2+64)+128)+1024)/2048;
-<a name="l01116"></a>01116       d *= eps;
-<a name="l01117"></a>01117       c[2] = d*(eps2*(eps2*(47*eps2+70)+128)+768)/4096;
-<a name="l01118"></a>01118       d *= eps;
-<a name="l01119"></a>01119       c[3] = d*(eps2*(69*eps2+120)+640)/6144;
-<a name="l01120"></a>01120       d *= eps;
-<a name="l01121"></a>01121       c[4] = d*(eps2*(133*eps2+224)+1120)/16384;
-<a name="l01122"></a>01122       d *= eps;
-<a name="l01123"></a>01123       c[5] = d*(105*eps2+504)/10240;
-<a name="l01124"></a>01124       d *= eps;
-<a name="l01125"></a>01125       c[6] = d*(33*eps2+154)/4096;
-<a name="l01126"></a>01126       d *= eps;
-<a name="l01127"></a>01127       c[7] = 429*d/14336;
-<a name="l01128"></a>01128       d *= eps;
-<a name="l01129"></a>01129       c[8] = 6435*d/262144;
-<a name="l01130"></a>01130       <span class="keywordflow">break</span>;
-<a name="l01131"></a>01131     <span class="keywordflow">default</span>:
-<a name="l01132"></a>01132       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(nC2_ >= 0 && nC2_ <= 8, <span class="stringliteral">"Bad value of nC2_"</span>);
-<a name="l01133"></a>01133     }
-<a name="l01134"></a>01134   }
-<a name="l01135"></a>01135 
-<a name="l01136"></a>01136   <span class="comment">// The scale factor A3 = mean value of I3</span>
-<a name="l01137"></a>01137   <span class="keywordtype">void</span> Geodesic::A3coeff() throw() {
-<a name="l01138"></a>01138     <span class="keywordflow">switch</span> (nA3_) {
-<a name="l01139"></a>01139     <span class="keywordflow">case</span> 0:
-<a name="l01140"></a>01140       <span class="keywordflow">break</span>;
-<a name="l01141"></a>01141     <span class="keywordflow">case</span> 1:
-<a name="l01142"></a>01142       _A3x[0] = 1;
-<a name="l01143"></a>01143       <span class="keywordflow">break</span>;
-<a name="l01144"></a>01144     <span class="keywordflow">case</span> 2:
-<a name="l01145"></a>01145       _A3x[0] = 1;
-<a name="l01146"></a>01146       _A3x[1] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(2);
-<a name="l01147"></a>01147       <span class="keywordflow">break</span>;
-<a name="l01148"></a>01148     <span class="keywordflow">case</span> 3:
-<a name="l01149"></a>01149       _A3x[0] = 1;
-<a name="l01150"></a>01150       _A3x[1] = (_n-1)/2;
-<a name="l01151"></a>01151       _A3x[2] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(4);
-<a name="l01152"></a>01152       <span class="keywordflow">break</span>;
-<a name="l01153"></a>01153     <span class="keywordflow">case</span> 4:
-<a name="l01154"></a>01154       _A3x[0] = 1;
-<a name="l01155"></a>01155       _A3x[1] = (_n-1)/2;
-<a name="l01156"></a>01156       _A3x[2] = (-_n-2)/8;
-<a name="l01157"></a>01157       _A3x[3] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(16);
-<a name="l01158"></a>01158       <span class="keywordflow">break</span>;
-<a name="l01159"></a>01159     <span class="keywordflow">case</span> 5:
-<a name="l01160"></a>01160       _A3x[0] = 1;
-<a name="l01161"></a>01161       _A3x[1] = (_n-1)/2;
-<a name="l01162"></a>01162       _A3x[2] = (_n*(3*_n-1)-2)/8;
-<a name="l01163"></a>01163       _A3x[3] = (-3*_n-1)/16;
-<a name="l01164"></a>01164       _A3x[4] = -3/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(64);
-<a name="l01165"></a>01165       <span class="keywordflow">break</span>;
-<a name="l01166"></a>01166     <span class="keywordflow">case</span> 6:
-<a name="l01167"></a>01167       _A3x[0] = 1;
-<a name="l01168"></a>01168       _A3x[1] = (_n-1)/2;
-<a name="l01169"></a>01169       _A3x[2] = (_n*(3*_n-1)-2)/8;
-<a name="l01170"></a>01170       _A3x[3] = ((-_n-3)*_n-1)/16;
-<a name="l01171"></a>01171       _A3x[4] = (-2*_n-3)/64;
-<a name="l01172"></a>01172       _A3x[5] = -3/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(128);
-<a name="l01173"></a>01173       <span class="keywordflow">break</span>;
-<a name="l01174"></a>01174     <span class="keywordflow">case</span> 7:
-<a name="l01175"></a>01175       _A3x[0] = 1;
-<a name="l01176"></a>01176       _A3x[1] = (_n-1)/2;
-<a name="l01177"></a>01177       _A3x[2] = (_n*(3*_n-1)-2)/8;
-<a name="l01178"></a>01178       _A3x[3] = (_n*(_n*(5*_n-1)-3)-1)/16;
-<a name="l01179"></a>01179       _A3x[4] = ((-10*_n-2)*_n-3)/64;
-<a name="l01180"></a>01180       _A3x[5] = (-5*_n-3)/128;
-<a name="l01181"></a>01181       _A3x[6] = -5/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(256);
-<a name="l01182"></a>01182       <span class="keywordflow">break</span>;
-<a name="l01183"></a>01183     <span class="keywordflow">case</span> 8:
-<a name="l01184"></a>01184       _A3x[0] = 1;
-<a name="l01185"></a>01185       _A3x[1] = (_n-1)/2;
-<a name="l01186"></a>01186       _A3x[2] = (_n*(3*_n-1)-2)/8;
-<a name="l01187"></a>01187       _A3x[3] = (_n*(_n*(5*_n-1)-3)-1)/16;
-<a name="l01188"></a>01188       _A3x[4] = (_n*((-5*_n-20)*_n-4)-6)/128;
-<a name="l01189"></a>01189       _A3x[5] = ((-5*_n-10)*_n-6)/256;
-<a name="l01190"></a>01190       _A3x[6] = (-15*_n-20)/1024;
-<a name="l01191"></a>01191       _A3x[7] = -25/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(2048);
-<a name="l01192"></a>01192       <span class="keywordflow">break</span>;
-<a name="l01193"></a>01193     <span class="keywordflow">default</span>:
-<a name="l01194"></a>01194       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(nA3_ >= 0 && nA3_ <= 8, <span class="stringliteral">"Bad value of nA3_"</span>);
-<a name="l01195"></a>01195     }
-<a name="l01196"></a>01196   }
-<a name="l01197"></a>01197 
-<a name="l01198"></a>01198   <span class="comment">// The coefficients C3[l] in the Fourier expansion of B3</span>
-<a name="l01199"></a>01199   <span class="keywordtype">void</span> Geodesic::C3coeff() throw() {
-<a name="l01200"></a>01200     <span class="keywordflow">switch</span> (nC3_) {
-<a name="l01201"></a>01201     <span class="keywordflow">case</span> 0:
-<a name="l01202"></a>01202       <span class="keywordflow">break</span>;
-<a name="l01203"></a>01203     <span class="keywordflow">case</span> 1:
-<a name="l01204"></a>01204       <span class="keywordflow">break</span>;
-<a name="l01205"></a>01205     <span class="keywordflow">case</span> 2:
-<a name="l01206"></a>01206       _C3x[0] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(4);
-<a name="l01207"></a>01207       <span class="keywordflow">break</span>;
-<a name="l01208"></a>01208     <span class="keywordflow">case</span> 3:
-<a name="l01209"></a>01209       _C3x[0] = (1-_n)/4;
-<a name="l01210"></a>01210       _C3x[1] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(8);
-<a name="l01211"></a>01211       _C3x[2] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(16);
-<a name="l01212"></a>01212       <span class="keywordflow">break</span>;
-<a name="l01213"></a>01213     <span class="keywordflow">case</span> 4:
-<a name="l01214"></a>01214       _C3x[0] = (1-_n)/4;
-<a name="l01215"></a>01215       _C3x[1] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(8);
-<a name="l01216"></a>01216       _C3x[2] = 3/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(64);
-<a name="l01217"></a>01217       _C3x[3] = (2-3*_n)/32;
-<a name="l01218"></a>01218       _C3x[4] = 3/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(64);
-<a name="l01219"></a>01219       _C3x[5] = 5/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(192);
-<a name="l01220"></a>01220       <span class="keywordflow">break</span>;
-<a name="l01221"></a>01221     <span class="keywordflow">case</span> 5:
-<a name="l01222"></a>01222       _C3x[0] = (1-_n)/4;
-<a name="l01223"></a>01223       _C3x[1] = (1-_n*_n)/8;
-<a name="l01224"></a>01224       _C3x[2] = (3*_n+3)/64;
-<a name="l01225"></a>01225       _C3x[3] = 5/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(128);
-<a name="l01226"></a>01226       _C3x[4] = ((_n-3)*_n+2)/32;
-<a name="l01227"></a>01227       _C3x[5] = (3-2*_n)/64;
-<a name="l01228"></a>01228       _C3x[6] = 3/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(128);
-<a name="l01229"></a>01229       _C3x[7] = (5-9*_n)/192;
-<a name="l01230"></a>01230       _C3x[8] = 3/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(128);
-<a name="l01231"></a>01231       _C3x[9] = 7/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(512);
-<a name="l01232"></a>01232       <span class="keywordflow">break</span>;
-<a name="l01233"></a>01233     <span class="keywordflow">case</span> 6:
-<a name="l01234"></a>01234       _C3x[0] = (1-_n)/4;
-<a name="l01235"></a>01235       _C3x[1] = (1-_n*_n)/8;
-<a name="l01236"></a>01236       _C3x[2] = ((3-_n)*_n+3)/64;
-<a name="l01237"></a>01237       _C3x[3] = (2*_n+5)/128;
-<a name="l01238"></a>01238       _C3x[4] = 3/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(128);
-<a name="l01239"></a>01239       _C3x[5] = ((_n-3)*_n+2)/32;
-<a name="l01240"></a>01240       _C3x[6] = ((-3*_n-2)*_n+3)/64;
-<a name="l01241"></a>01241       _C3x[7] = (_n+3)/128;
-<a name="l01242"></a>01242       _C3x[8] = 5/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(256);
-<a name="l01243"></a>01243       _C3x[9] = (_n*(5*_n-9)+5)/192;
-<a name="l01244"></a>01244       _C3x[10] = (9-10*_n)/384;
-<a name="l01245"></a>01245       _C3x[11] = 7/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(512);
-<a name="l01246"></a>01246       _C3x[12] = (7-14*_n)/512;
-<a name="l01247"></a>01247       _C3x[13] = 7/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(512);
-<a name="l01248"></a>01248       _C3x[14] = 21/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(2560);
-<a name="l01249"></a>01249       <span class="keywordflow">break</span>;
-<a name="l01250"></a>01250     <span class="keywordflow">case</span> 7:
-<a name="l01251"></a>01251       _C3x[0] = (1-_n)/4;
-<a name="l01252"></a>01252       _C3x[1] = (1-_n*_n)/8;
-<a name="l01253"></a>01253       _C3x[2] = (_n*((-5*_n-1)*_n+3)+3)/64;
-<a name="l01254"></a>01254       _C3x[3] = (_n*(2*_n+2)+5)/128;
-<a name="l01255"></a>01255       _C3x[4] = (11*_n+12)/512;
-<a name="l01256"></a>01256       _C3x[5] = 21/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1024);
-<a name="l01257"></a>01257       _C3x[6] = ((_n-3)*_n+2)/32;
-<a name="l01258"></a>01258       _C3x[7] = (_n*(_n*(2*_n-3)-2)+3)/64;
-<a name="l01259"></a>01259       _C3x[8] = ((2-9*_n)*_n+6)/256;
-<a name="l01260"></a>01260       _C3x[9] = (_n+5)/256;
-<a name="l01261"></a>01261       _C3x[10] = 27/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(2048);
-<a name="l01262"></a>01262       _C3x[11] = (_n*((5-_n)*_n-9)+5)/192;
-<a name="l01263"></a>01263       _C3x[12] = ((-6*_n-10)*_n+9)/384;
-<a name="l01264"></a>01264       _C3x[13] = (21-4*_n)/1536;
-<a name="l01265"></a>01265       _C3x[14] = 3/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(256);
-<a name="l01266"></a>01266       _C3x[15] = (_n*(10*_n-14)+7)/512;
-<a name="l01267"></a>01267       _C3x[16] = (7-10*_n)/512;
-<a name="l01268"></a>01268       _C3x[17] = 9/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1024);
-<a name="l01269"></a>01269       _C3x[18] = (21-45*_n)/2560;
-<a name="l01270"></a>01270       _C3x[19] = 9/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1024);
-<a name="l01271"></a>01271       _C3x[20] = 11/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(2048);
-<a name="l01272"></a>01272       <span class="keywordflow">break</span>;
-<a name="l01273"></a>01273     <span class="keywordflow">case</span> 8:
-<a name="l01274"></a>01274       _C3x[0] = (1-_n)/4;
-<a name="l01275"></a>01275       _C3x[1] = (1-_n*_n)/8;
-<a name="l01276"></a>01276       _C3x[2] = (_n*((-5*_n-1)*_n+3)+3)/64;
-<a name="l01277"></a>01277       _C3x[3] = (_n*((2-2*_n)*_n+2)+5)/128;
-<a name="l01278"></a>01278       _C3x[4] = (_n*(3*_n+11)+12)/512;
-<a name="l01279"></a>01279       _C3x[5] = (10*_n+21)/1024;
-<a name="l01280"></a>01280       _C3x[6] = 243/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(16384);
-<a name="l01281"></a>01281       _C3x[7] = ((_n-3)*_n+2)/32;
-<a name="l01282"></a>01282       _C3x[8] = (_n*(_n*(2*_n-3)-2)+3)/64;
-<a name="l01283"></a>01283       _C3x[9] = (_n*((-6*_n-9)*_n+2)+6)/256;
-<a name="l01284"></a>01284       _C3x[10] = ((1-2*_n)*_n+5)/256;
-<a name="l01285"></a>01285       _C3x[11] = (69*_n+108)/8192;
-<a name="l01286"></a>01286       _C3x[12] = 187/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(16384);
-<a name="l01287"></a>01287       _C3x[13] = (_n*((5-_n)*_n-9)+5)/192;
-<a name="l01288"></a>01288       _C3x[14] = (_n*(_n*(10*_n-6)-10)+9)/384;
-<a name="l01289"></a>01289       _C3x[15] = ((-77*_n-8)*_n+42)/3072;
-<a name="l01290"></a>01290       _C3x[16] = (12-_n)/1024;
-<a name="l01291"></a>01291       _C3x[17] = 139/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(16384);
-<a name="l01292"></a>01292       _C3x[18] = (_n*((20-7*_n)*_n-28)+14)/1024;
-<a name="l01293"></a>01293       _C3x[19] = ((-7*_n-40)*_n+28)/2048;
-<a name="l01294"></a>01294       _C3x[20] = (72-43*_n)/8192;
-<a name="l01295"></a>01295       _C3x[21] = 127/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(16384);
-<a name="l01296"></a>01296       _C3x[22] = (_n*(75*_n-90)+42)/5120;
-<a name="l01297"></a>01297       _C3x[23] = (9-15*_n)/1024;
-<a name="l01298"></a>01298       _C3x[24] = 99/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(16384);
-<a name="l01299"></a>01299       _C3x[25] = (44-99*_n)/8192;
-<a name="l01300"></a>01300       _C3x[26] = 99/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(16384);
-<a name="l01301"></a>01301       _C3x[27] = 429/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(114688);
-<a name="l01302"></a>01302       <span class="keywordflow">break</span>;
-<a name="l01303"></a>01303     <span class="keywordflow">default</span>:
-<a name="l01304"></a>01304       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(nC3_ >= 0 && nC3_ <= 8, <span class="stringliteral">"Bad value of nC3_"</span>);
-<a name="l01305"></a>01305     }
-<a name="l01306"></a>01306   }
-<a name="l01307"></a>01307 
-<a name="l01308"></a>01308   <span class="comment">// The coefficients C4[l] in the Fourier expansion of I4</span>
-<a name="l01309"></a>01309   <span class="keywordtype">void</span> Geodesic::C4coeff() throw() {
-<a name="l01310"></a>01310     <span class="keywordflow">switch</span> (nC4_) {
-<a name="l01311"></a>01311     <span class="keywordflow">case</span> 0:
-<a name="l01312"></a>01312       <span class="keywordflow">break</span>;
-<a name="l01313"></a>01313     <span class="keywordflow">case</span> 1:
-<a name="l01314"></a>01314       _C4x[0] = 2/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(3);
-<a name="l01315"></a>01315       <span class="keywordflow">break</span>;
-<a name="l01316"></a>01316     <span class="keywordflow">case</span> 2:
-<a name="l01317"></a>01317       _C4x[0] = (10-_ep2)/15;
-<a name="l01318"></a>01318       _C4x[1] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(20);
-<a name="l01319"></a>01319       _C4x[2] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(180);
-<a name="l01320"></a>01320       <span class="keywordflow">break</span>;
-<a name="l01321"></a>01321     <span class="keywordflow">case</span> 3:
-<a name="l01322"></a>01322       _C4x[0] = (_ep2*(4*_ep2-7)+70)/105;
-<a name="l01323"></a>01323       _C4x[1] = (4*_ep2-7)/140;
-<a name="l01324"></a>01324       _C4x[2] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(42);
-<a name="l01325"></a>01325       _C4x[3] = (7-4*_ep2)/1260;
-<a name="l01326"></a>01326       _C4x[4] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(252);
-<a name="l01327"></a>01327       _C4x[5] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(2100);
-<a name="l01328"></a>01328       <span class="keywordflow">break</span>;
-<a name="l01329"></a>01329     <span class="keywordflow">case</span> 4:
-<a name="l01330"></a>01330       _C4x[0] = (_ep2*((12-8*_ep2)*_ep2-21)+210)/315;
-<a name="l01331"></a>01331       _C4x[1] = ((12-8*_ep2)*_ep2-21)/420;
-<a name="l01332"></a>01332       _C4x[2] = (3-2*_ep2)/126;
-<a name="l01333"></a>01333       _C4x[3] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(72);
-<a name="l01334"></a>01334       _C4x[4] = (_ep2*(8*_ep2-12)+21)/3780;
-<a name="l01335"></a>01335       _C4x[5] = (2*_ep2-3)/756;
-<a name="l01336"></a>01336       _C4x[6] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(360);
-<a name="l01337"></a>01337       _C4x[7] = (3-2*_ep2)/6300;
-<a name="l01338"></a>01338       _C4x[8] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1800);
-<a name="l01339"></a>01339       _C4x[9] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(17640);
-<a name="l01340"></a>01340       <span class="keywordflow">break</span>;
-<a name="l01341"></a>01341     <span class="keywordflow">case</span> 5:
-<a name="l01342"></a>01342       _C4x[0] = (_ep2*(_ep2*(_ep2*(64*_ep2-88)+132)-231)+2310)/3465;
-<a name="l01343"></a>01343       _C4x[1] = (_ep2*(_ep2*(64*_ep2-88)+132)-231)/4620;
-<a name="l01344"></a>01344       _C4x[2] = (_ep2*(16*_ep2-22)+33)/1386;
-<a name="l01345"></a>01345       _C4x[3] = (8*_ep2-11)/792;
-<a name="l01346"></a>01346       _C4x[4] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(110);
-<a name="l01347"></a>01347       _C4x[5] = (_ep2*((88-64*_ep2)*_ep2-132)+231)/41580;
-<a name="l01348"></a>01348       _C4x[6] = ((22-16*_ep2)*_ep2-33)/8316;
-<a name="l01349"></a>01349       _C4x[7] = (11-8*_ep2)/3960;
-<a name="l01350"></a>01350       _C4x[8] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(495);
-<a name="l01351"></a>01351       _C4x[9] = (_ep2*(16*_ep2-22)+33)/69300;
-<a name="l01352"></a>01352       _C4x[10] = (8*_ep2-11)/19800;
-<a name="l01353"></a>01353       _C4x[11] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1925);
-<a name="l01354"></a>01354       _C4x[12] = (11-8*_ep2)/194040;
-<a name="l01355"></a>01355       _C4x[13] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(10780);
-<a name="l01356"></a>01356       _C4x[14] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(124740);
-<a name="l01357"></a>01357       <span class="keywordflow">break</span>;
-<a name="l01358"></a>01358     <span class="keywordflow">case</span> 6:
-<a name="l01359"></a>01359       _C4x[0] = (_ep2*(_ep2*(_ep2*((832-640*_ep2)*_ep2-1144)+1716)-3003)+
-<a name="l01360"></a>01360                 30030)/45045;
-<a name="l01361"></a>01361       _C4x[1] = (_ep2*(_ep2*((832-640*_ep2)*_ep2-1144)+1716)-3003)/60060;
-<a name="l01362"></a>01362       _C4x[2] = (_ep2*((208-160*_ep2)*_ep2-286)+429)/18018;
-<a name="l01363"></a>01363       _C4x[3] = ((104-80*_ep2)*_ep2-143)/10296;
-<a name="l01364"></a>01364       _C4x[4] = (13-10*_ep2)/1430;
-<a name="l01365"></a>01365       _C4x[5] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(156);
-<a name="l01366"></a>01366       _C4x[6] = (_ep2*(_ep2*(_ep2*(640*_ep2-832)+1144)-1716)+3003)/540540;
-<a name="l01367"></a>01367       _C4x[7] = (_ep2*(_ep2*(160*_ep2-208)+286)-429)/108108;
-<a name="l01368"></a>01368       _C4x[8] = (_ep2*(80*_ep2-104)+143)/51480;
-<a name="l01369"></a>01369       _C4x[9] = (10*_ep2-13)/6435;
-<a name="l01370"></a>01370       _C4x[10] = 5/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(3276);
-<a name="l01371"></a>01371       _C4x[11] = (_ep2*((208-160*_ep2)*_ep2-286)+429)/900900;
-<a name="l01372"></a>01372       _C4x[12] = ((104-80*_ep2)*_ep2-143)/257400;
-<a name="l01373"></a>01373       _C4x[13] = (13-10*_ep2)/25025;
-<a name="l01374"></a>01374       _C4x[14] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(2184);
-<a name="l01375"></a>01375       _C4x[15] = (_ep2*(80*_ep2-104)+143)/2522520;
-<a name="l01376"></a>01376       _C4x[16] = (10*_ep2-13)/140140;
-<a name="l01377"></a>01377       _C4x[17] = 5/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(45864);
-<a name="l01378"></a>01378       _C4x[18] = (13-10*_ep2)/1621620;
-<a name="l01379"></a>01379       _C4x[19] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(58968);
-<a name="l01380"></a>01380       _C4x[20] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(792792);
-<a name="l01381"></a>01381       <span class="keywordflow">break</span>;
-<a name="l01382"></a>01382     <span class="keywordflow">case</span> 7:
-<a name="l01383"></a>01383       _C4x[0] = (_ep2*(_ep2*(_ep2*(_ep2*(_ep2*(512*_ep2-640)+832)-1144)+1716)-
-<a name="l01384"></a>01384                 3003)+30030)/45045;
-<a name="l01385"></a>01385       _C4x[1] = (_ep2*(_ep2*(_ep2*(_ep2*(512*_ep2-640)+832)-1144)+1716)-
-<a name="l01386"></a>01386                 3003)/60060;
-<a name="l01387"></a>01387       _C4x[2] = (_ep2*(_ep2*(_ep2*(128*_ep2-160)+208)-286)+429)/18018;
-<a name="l01388"></a>01388       _C4x[3] = (_ep2*(_ep2*(64*_ep2-80)+104)-143)/10296;
-<a name="l01389"></a>01389       _C4x[4] = (_ep2*(8*_ep2-10)+13)/1430;
-<a name="l01390"></a>01390       _C4x[5] = (4*_ep2-5)/780;
-<a name="l01391"></a>01391       _C4x[6] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(210);
-<a name="l01392"></a>01392       _C4x[7] = (_ep2*(_ep2*(_ep2*((640-512*_ep2)*_ep2-832)+1144)-1716)+
-<a name="l01393"></a>01393                 3003)/540540;
-<a name="l01394"></a>01394       _C4x[8] = (_ep2*(_ep2*((160-128*_ep2)*_ep2-208)+286)-429)/108108;
-<a name="l01395"></a>01395       _C4x[9] = (_ep2*((80-64*_ep2)*_ep2-104)+143)/51480;
-<a name="l01396"></a>01396       _C4x[10] = ((10-8*_ep2)*_ep2-13)/6435;
-<a name="l01397"></a>01397       _C4x[11] = (5-4*_ep2)/3276;
-<a name="l01398"></a>01398       _C4x[12] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(840);
-<a name="l01399"></a>01399       _C4x[13] = (_ep2*(_ep2*(_ep2*(128*_ep2-160)+208)-286)+429)/900900;
-<a name="l01400"></a>01400       _C4x[14] = (_ep2*(_ep2*(64*_ep2-80)+104)-143)/257400;
-<a name="l01401"></a>01401       _C4x[15] = (_ep2*(8*_ep2-10)+13)/25025;
-<a name="l01402"></a>01402       _C4x[16] = (4*_ep2-5)/10920;
-<a name="l01403"></a>01403       _C4x[17] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(2520);
-<a name="l01404"></a>01404       _C4x[18] = (_ep2*((80-64*_ep2)*_ep2-104)+143)/2522520;
-<a name="l01405"></a>01405       _C4x[19] = ((10-8*_ep2)*_ep2-13)/140140;
-<a name="l01406"></a>01406       _C4x[20] = (5-4*_ep2)/45864;
-<a name="l01407"></a>01407       _C4x[21] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(8820);
-<a name="l01408"></a>01408       _C4x[22] = (_ep2*(8*_ep2-10)+13)/1621620;
-<a name="l01409"></a>01409       _C4x[23] = (4*_ep2-5)/294840;
-<a name="l01410"></a>01410       _C4x[24] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(41580);
-<a name="l01411"></a>01411       _C4x[25] = (5-4*_ep2)/3963960;
-<a name="l01412"></a>01412       _C4x[26] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(304920);
-<a name="l01413"></a>01413       _C4x[27] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(4684680);
-<a name="l01414"></a>01414       <span class="keywordflow">break</span>;
-<a name="l01415"></a>01415     <span class="keywordflow">case</span> 8:
-<a name="l01416"></a>01416       _C4x[0] = (_ep2*(_ep2*(_ep2*(_ep2*(_ep2*((8704-7168*_ep2)*_ep2-10880)+
-<a name="l01417"></a>01417                 14144)-19448)+29172)-51051)+510510)/765765;
-<a name="l01418"></a>01418       _C4x[1] = (_ep2*(_ep2*(_ep2*(_ep2*((8704-7168*_ep2)*_ep2-10880)+14144)-
-<a name="l01419"></a>01419                 19448)+29172)-51051)/1021020;
-<a name="l01420"></a>01420       _C4x[2] = (_ep2*(_ep2*(_ep2*((2176-1792*_ep2)*_ep2-2720)+3536)-4862)+
-<a name="l01421"></a>01421                 7293)/306306;
-<a name="l01422"></a>01422       _C4x[3] = (_ep2*(_ep2*((1088-896*_ep2)*_ep2-1360)+1768)-2431)/175032;
-<a name="l01423"></a>01423       _C4x[4] = (_ep2*((136-112*_ep2)*_ep2-170)+221)/24310;
-<a name="l01424"></a>01424       _C4x[5] = ((68-56*_ep2)*_ep2-85)/13260;
-<a name="l01425"></a>01425       _C4x[6] = (17-14*_ep2)/3570;
-<a name="l01426"></a>01426       _C4x[7] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(272);
-<a name="l01427"></a>01427       _C4x[8] = (_ep2*(_ep2*(_ep2*(_ep2*(_ep2*(7168*_ep2-8704)+10880)-14144)+
-<a name="l01428"></a>01428                 19448)-29172)+51051)/9189180;
-<a name="l01429"></a>01429       _C4x[9] = (_ep2*(_ep2*(_ep2*(_ep2*(1792*_ep2-2176)+2720)-3536)+4862)-
-<a name="l01430"></a>01430                 7293)/1837836;
-<a name="l01431"></a>01431       _C4x[10] = (_ep2*(_ep2*(_ep2*(896*_ep2-1088)+1360)-1768)+2431)/875160;
-<a name="l01432"></a>01432       _C4x[11] = (_ep2*(_ep2*(112*_ep2-136)+170)-221)/109395;
-<a name="l01433"></a>01433       _C4x[12] = (_ep2*(56*_ep2-68)+85)/55692;
-<a name="l01434"></a>01434       _C4x[13] = (14*_ep2-17)/14280;
-<a name="l01435"></a>01435       _C4x[14] = 7/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(7344);
-<a name="l01436"></a>01436       _C4x[15] = (_ep2*(_ep2*(_ep2*((2176-1792*_ep2)*_ep2-2720)+3536)-4862)+
-<a name="l01437"></a>01437                 7293)/15315300;
-<a name="l01438"></a>01438       _C4x[16] = (_ep2*(_ep2*((1088-896*_ep2)*_ep2-1360)+1768)-2431)/4375800;
-<a name="l01439"></a>01439       _C4x[17] = (_ep2*((136-112*_ep2)*_ep2-170)+221)/425425;
-<a name="l01440"></a>01440       _C4x[18] = ((68-56*_ep2)*_ep2-85)/185640;
-<a name="l01441"></a>01441       _C4x[19] = (17-14*_ep2)/42840;
-<a name="l01442"></a>01442       _C4x[20] = -7/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(20400);
-<a name="l01443"></a>01443       _C4x[21] = (_ep2*(_ep2*(_ep2*(896*_ep2-1088)+1360)-1768)+2431)/42882840;
-<a name="l01444"></a>01444       _C4x[22] = (_ep2*(_ep2*(112*_ep2-136)+170)-221)/2382380;
-<a name="l01445"></a>01445       _C4x[23] = (_ep2*(56*_ep2-68)+85)/779688;
-<a name="l01446"></a>01446       _C4x[24] = (14*_ep2-17)/149940;
-<a name="l01447"></a>01447       _C4x[25] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(8976);
-<a name="l01448"></a>01448       _C4x[26] = (_ep2*((136-112*_ep2)*_ep2-170)+221)/27567540;
-<a name="l01449"></a>01449       _C4x[27] = ((68-56*_ep2)*_ep2-85)/5012280;
-<a name="l01450"></a>01450       _C4x[28] = (17-14*_ep2)/706860;
-<a name="l01451"></a>01451       _C4x[29] = -7/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(242352);
-<a name="l01452"></a>01452       _C4x[30] = (_ep2*(56*_ep2-68)+85)/67387320;
-<a name="l01453"></a>01453       _C4x[31] = (14*_ep2-17)/5183640;
-<a name="l01454"></a>01454       _C4x[32] = 7/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1283568);
-<a name="l01455"></a>01455       _C4x[33] = (17-14*_ep2)/79639560;
-<a name="l01456"></a>01456       _C4x[34] = -1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1516944);
-<a name="l01457"></a>01457       _C4x[35] = 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(26254800);
-<a name="l01458"></a>01458       <span class="keywordflow">break</span>;
-<a name="l01459"></a>01459     <span class="keywordflow">default</span>:
-<a name="l01460"></a>01460       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(nC3_ >= 0 && nC4_ <= 8, <span class="stringliteral">"Bad value of nC4_"</span>);
-<a name="l01461"></a>01461     }
-<a name="l01462"></a>01462   }
-<a name="l01463"></a>01463 
-<a name="l01464"></a>01464 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geodesic_8hpp.html b/doc/html/Geodesic_8hpp.html
deleted file mode 100644
index 812b9f7..0000000
--- a/doc/html/Geodesic_8hpp.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geodesic.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Geodesic.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="Geodesic_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Geodesic calculations  <a href="classGeographicLib_1_1Geodesic.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geodesic_8hpp.html#ab538cb707d6ff36056dd372c7e9e6d7e">GEOGRAPHICLIB_GEODESIC_HPP</a>   "$Id: c1b085aadd7b8eabe0f9518b29531a38c152d495 $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">GEOD_ORD</a>   (GEOGRAPHICLIB_PREC == 1 ? 6 : (GEOGRAPHICLIB_PREC == 0 ? 3 : 7))</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ab538cb707d6ff36056dd372c7e9e6d7e"></a><!-- doxytag: member="Geodesic.hpp::GEOGRAPHICLIB_GEODESIC_HPP" ref="ab538cb707d6ff36056dd372c7e9e6d7e" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEODESIC_HPP   "$Id: c1b085aadd7b8eabe0f9518b29531a38c152d495 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00011">11</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1927ca941a173c95631417cbd8cc8e0c"></a><!-- doxytag: member="Geodesic.hpp::GEOD_ORD" ref="a1927ca941a173c95631417cbd8cc8e0c" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOD_ORD   (GEOGRAPHICLIB_PREC == 1 ? 6 : (GEOGRAPHICLIB_PREC == 0 ? 3 : 7))</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The order of the expansions used by Geodesic. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00020">20</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geodesic_8hpp_source.html b/doc/html/Geodesic_8hpp_source.html
deleted file mode 100644
index 641cc7a..0000000
--- a/doc/html/Geodesic_8hpp_source.html
+++ /dev/null
@@ -1,924 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geodesic.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geodesic.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Geodesic_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Geodesic.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::Geodesic class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_GEODESIC_HPP)</span>
-<a name="l00011"></a><a class="code" href="Geodesic_8hpp.html#ab538cb707d6ff36056dd372c7e9e6d7e">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_GEODESIC_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: c1b085aadd7b8eabe0f9518b29531a38c152d495 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 
-<a name="l00016"></a>00016 <span class="preprocessor">#if !defined(GEOD_ORD)</span>
-<a name="l00017"></a>00017 <span class="preprocessor"></span><span class="comment">/**</span>
-<a name="l00018"></a>00018 <span class="comment"> * The order of the expansions used by Geodesic.</span>
-<a name="l00019"></a>00019 <span class="comment"> **********************************************************************/</span>
-<a name="l00020"></a><a class="code" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">00020</a> <span class="preprocessor">#define GEOD_ORD \</span>
-<a name="l00021"></a>00021 <span class="preprocessor">  (GEOGRAPHICLIB_PREC == 1 ? 6 : (GEOGRAPHICLIB_PREC == 0 ? 3 : 7))</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026   <span class="keyword">class </span>GeodesicLine;
-<a name="l00027"></a>00027 <span class="comment"></span>
-<a name="l00028"></a>00028 <span class="comment">  /**</span>
-<a name="l00029"></a>00029 <span class="comment">   * \brief %Geodesic calculations</span>
-<a name="l00030"></a>00030 <span class="comment">   *</span>
-<a name="l00031"></a>00031 <span class="comment"></span>
-<a name="l00032"></a>00032 <span class="comment">   * The shortest path between two points on a ellipsoid at (\e lat1, \e lon1)</span>
-<a name="l00033"></a>00033 <span class="comment">   * and (\e lat2, \e lon2) is called the geodesic.  Its length is \e s12 and</span>
-<a name="l00034"></a>00034 <span class="comment">   * the geodesic from point 1 to point 2 has azimuths \e azi1 and \e azi2 at</span>
-<a name="l00035"></a>00035 <span class="comment">   * the two end points.  (The azimuth is the heading measured clockwise from</span>
-<a name="l00036"></a>00036 <span class="comment">   * north.  \e azi2 is the "forward" azimuth, i.e., the heading that takes you</span>
-<a name="l00037"></a>00037 <span class="comment">   * beyond point 2 not back to point 1.)</span>
-<a name="l00038"></a>00038 <span class="comment">   *</span>
-<a name="l00039"></a>00039 <span class="comment">   * Given \e lat1, \e lon1, \e azi1, and \e s12, we can determine \e lat2, \e</span>
-<a name="l00040"></a>00040 <span class="comment">   * lon2, and \e azi2.  This is the \e direct geodesic problem and its</span>
-<a name="l00041"></a>00041 <span class="comment">   * solution is given by the function Geodesic::Direct.  (If \e s12 is</span>
-<a name="l00042"></a>00042 <span class="comment">   * sufficiently large that the geodesic wraps more than halfway around the</span>
-<a name="l00043"></a>00043 <span class="comment">   * earth, there will be another geodesic between the points with a smaller \e</span>
-<a name="l00044"></a>00044 <span class="comment">   * s12.)</span>
-<a name="l00045"></a>00045 <span class="comment">   *</span>
-<a name="l00046"></a>00046 <span class="comment">   * Given \e lat1, \e lon1, \e lat2, and \e lon2, we can determine \e azi1, \e</span>
-<a name="l00047"></a>00047 <span class="comment">   * azi2, and \e s12.  This is the \e inverse geodesic problem, whose solution</span>
-<a name="l00048"></a>00048 <span class="comment">   * is given by Geodesic::Inverse.  Usually, the solution to the inverse</span>
-<a name="l00049"></a>00049 <span class="comment">   * problem is unique.  In cases where there are multiple solutions (all with</span>
-<a name="l00050"></a>00050 <span class="comment">   * the same \e s12, of course), all the solutions can be easily generated</span>
-<a name="l00051"></a>00051 <span class="comment">   * once a particular solution is provided.</span>
-<a name="l00052"></a>00052 <span class="comment">   *</span>
-<a name="l00053"></a>00053 <span class="comment">   * The standard way of specifying the direct problem is the specify the</span>
-<a name="l00054"></a>00054 <span class="comment">   * distance \e s12 to the second point.  However it is sometimes useful</span>
-<a name="l00055"></a>00055 <span class="comment">   * instead to specify the the arc length \e a12 (in degrees) on the auxiliary</span>
-<a name="l00056"></a>00056 <span class="comment">   * sphere.  This is a mathematical construct used in solving the geodesic</span>
-<a name="l00057"></a>00057 <span class="comment">   * problems.  The solution of the direct problem in this form is provide by</span>
-<a name="l00058"></a>00058 <span class="comment">   * Geodesic::ArcDirect.  An arc length in excess of 180<sup>o</sup> indicates</span>
-<a name="l00059"></a>00059 <span class="comment">   * that the geodesic is not a shortest path.  In addition, the arc length</span>
-<a name="l00060"></a>00060 <span class="comment">   * between an equatorial crossing and the next extremum of latitude for a</span>
-<a name="l00061"></a>00061 <span class="comment">   * geodesic is 90<sup>o</sup>.</span>
-<a name="l00062"></a>00062 <span class="comment">   *</span>
-<a name="l00063"></a>00063 <span class="comment">   * This class can also calculate several other quantities related to</span>
-<a name="l00064"></a>00064 <span class="comment">   * geodesics.  These are:</span>
-<a name="l00065"></a>00065 <span class="comment">   * - <i>reduced length</i>.  If we fix the first point and increase \e azi1</span>
-<a name="l00066"></a>00066 <span class="comment">   *   by \e dazi1 (radians), the the second point is displaced \e m12 \e dazi1</span>
-<a name="l00067"></a>00067 <span class="comment">   *   in the direction \e azi2 + 90<sup>o</sup>.  The quantity \e m12 is</span>
-<a name="l00068"></a>00068 <span class="comment">   *   called the "reduced length" and is symmetric under interchange of the</span>
-<a name="l00069"></a>00069 <span class="comment">   *   two points.  On a curved surface the reduced length obeys a symmetry</span>
-<a name="l00070"></a>00070 <span class="comment">   *   relation, \e m12 + \e m21 = 0.  On a flat surface, we have \e m12 = \e</span>
-<a name="l00071"></a>00071 <span class="comment">   *   s12.  The ratio <i>s12</i>/\e m12 gives the azimuthal scale for an</span>
-<a name="l00072"></a>00072 <span class="comment">   *   azimuthal equidistant projection.</span>
-<a name="l00073"></a>00073 <span class="comment">   * - <i>geodesic scale</i>.  Consider a reference geodesic and a second</span>
-<a name="l00074"></a>00074 <span class="comment">   *   geodesic parallel to this one at point 1 and separated by a small</span>
-<a name="l00075"></a>00075 <span class="comment">   *   distance \e dt.  The separation of the two geodesics at point 2 is \e</span>
-<a name="l00076"></a>00076 <span class="comment">   *   M12 \e dt where \e M12 is called the "geodesic scale".  \e M21 is</span>
-<a name="l00077"></a>00077 <span class="comment">   *   defined similarly (with the geodesics being parallel at point 2).  On a</span>
-<a name="l00078"></a>00078 <span class="comment">   *   flat surface, we have \e M12 = \e M21 = 1.  The quantity 1/\e M12 gives</span>
-<a name="l00079"></a>00079 <span class="comment">   *   the scale of the Cassini-Soldner projection.</span>
-<a name="l00080"></a>00080 <span class="comment">   * - <i>area</i>.  Consider the quadrilateral bounded by the following lines:</span>
-<a name="l00081"></a>00081 <span class="comment">   *   the geodesic from point 1 to point 2, the meridian from point 2 to the</span>
-<a name="l00082"></a>00082 <span class="comment">   *   equator, the equator from \e lon2 to \e lon1, the meridian from the</span>
-<a name="l00083"></a>00083 <span class="comment">   *   equator to point 1.  The area of this quadrilateral is represented by \e</span>
-<a name="l00084"></a>00084 <span class="comment">   *   S12 with a clockwise traversal of the perimeter counting as a positive</span>
-<a name="l00085"></a>00085 <span class="comment">   *   area and it can be used to compute the area of any simple geodesic</span>
-<a name="l00086"></a>00086 <span class="comment">   *   polygon.</span>
-<a name="l00087"></a>00087 <span class="comment">   *</span>
-<a name="l00088"></a>00088 <span class="comment">   * Overloaded versions of Geodesic::Direct, Geodesic::ArcDirect, and</span>
-<a name="l00089"></a>00089 <span class="comment">   * Geodesic::Inverse allow these quantities to be returned.  In addition</span>
-<a name="l00090"></a>00090 <span class="comment">   * there are general functions Geodesic::GenDirect, and Geodesic::GenInverse</span>
-<a name="l00091"></a>00091 <span class="comment">   * which allow an arbitrary set of results to be computed.  The quantities \e</span>
-<a name="l00092"></a>00092 <span class="comment">   * m12, \e M12, \e M21 which all specify the behavior of nearby geodesics</span>
-<a name="l00093"></a>00093 <span class="comment">   * obey addition rules.  Let points 1, 2, and 3 all lie on a single geodesic,</span>
-<a name="l00094"></a>00094 <span class="comment">   * then</span>
-<a name="l00095"></a>00095 <span class="comment">   * - \e m13 = \e m12 \e M23 + \e m23 \e M21</span>
-<a name="l00096"></a>00096 <span class="comment">   * - \e M13 = \e M12 \e M23 - (1 - \e M12 \e M21) \e m23 / \e m12</span>
-<a name="l00097"></a>00097 <span class="comment">   * - \e M31 = \e M32 \e M21 - (1 - \e M23 \e M32) \e m12 / \e m23</span>
-<a name="l00098"></a>00098 <span class="comment">   *</span>
-<a name="l00099"></a>00099 <span class="comment">   * Additional functionality is provided by the GeodesicLine class, which</span>
-<a name="l00100"></a>00100 <span class="comment">   * allows a sequence of points along a geodesic to be computed.</span>
-<a name="l00101"></a>00101 <span class="comment">   *</span>
-<a name="l00102"></a>00102 <span class="comment">   * The calculations are accurate to better than 15 nm (15 nanometers).  See</span>
-<a name="l00103"></a>00103 <span class="comment">   * Sec. 9 of</span>
-<a name="l00104"></a>00104 <span class="comment">   * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a></span>
-<a name="l00105"></a>00105 <span class="comment">   * for details.</span>
-<a name="l00106"></a>00106 <span class="comment">   *</span>
-<a name="l00107"></a>00107 <span class="comment">   * The algorithms are described in</span>
-<a name="l00108"></a>00108 <span class="comment">   * - C. F. F. Karney,</span>
-<a name="l00109"></a>00109 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics</span>
-<a name="l00110"></a>00110 <span class="comment">   *   on an ellipsoid of revolution</a>,</span>
-<a name="l00111"></a>00111 <span class="comment">   *   Feb. 2011;</span>
-<a name="l00112"></a>00112 <span class="comment">   *   preprint</span>
-<a name="l00113"></a>00113 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a>.</span>
-<a name="l00114"></a>00114 <span class="comment">   * - C. F. F. Karney,</span>
-<a name="l00115"></a>00115 <span class="comment">   *   <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>,</span>
-<a name="l00116"></a>00116 <span class="comment">   *   Sept. 2011;</span>
-<a name="l00117"></a>00117 <span class="comment">   *   preprint</span>
-<a name="l00118"></a>00118 <span class="comment">   *   <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.</span>
-<a name="l00119"></a>00119 <span class="comment">   * .</span>
-<a name="l00120"></a>00120 <span class="comment">   * For more information on geodesics see \ref geodesic.</span>
-<a name="l00121"></a>00121 <span class="comment">   *</span>
-<a name="l00122"></a>00122 <span class="comment">   * Example of use:</span>
-<a name="l00123"></a>00123 <span class="comment">   * \include example-Geodesic.cpp</span>
-<a name="l00124"></a>00124 <span class="comment">   *</span>
-<a name="l00125"></a>00125 <span class="comment">   * <a href="Geod.1.html">Geod</a> is a command-line utility providing access</span>
-<a name="l00126"></a>00126 <span class="comment">   * to the functionality of Geodesic and GeodesicLine.</span>
-<a name="l00127"></a>00127 <span class="comment">   **********************************************************************/</span>
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> Geodesic {
-<a name="l00130"></a>00130   <span class="keyword">private</span>:
-<a name="l00131"></a>00131     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00132"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#ac4a8bd684285e00b12427c052697a106">00132</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a>;
-<a name="l00133"></a>00133     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nA1_ = <a class="code" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">GEOD_ORD</a>;
-<a name="l00134"></a>00134     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC1_ = <a class="code" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">GEOD_ORD</a>;
-<a name="l00135"></a>00135     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC1p_ = <a class="code" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">GEOD_ORD</a>;
-<a name="l00136"></a>00136     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nA2_ = <a class="code" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">GEOD_ORD</a>;
-<a name="l00137"></a>00137     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC2_ = <a class="code" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">GEOD_ORD</a>;
-<a name="l00138"></a>00138     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nA3_ = <a class="code" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">GEOD_ORD</a>;
-<a name="l00139"></a>00139     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nA3x_ = nA3_;
-<a name="l00140"></a>00140     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC3_ = <a class="code" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">GEOD_ORD</a>;
-<a name="l00141"></a>00141     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC3x_ = (nC3_ * (nC3_ - 1)) / 2;
-<a name="l00142"></a>00142     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC4_ = <a class="code" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">GEOD_ORD</a>;
-<a name="l00143"></a>00143     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
-<a name="l00144"></a>00144     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> maxit_ = 50;
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="keyword">static</span> <span class="keyword">const</span> real tiny_;
-<a name="l00147"></a>00147     <span class="keyword">static</span> <span class="keyword">const</span> real tol0_;
-<a name="l00148"></a>00148     <span class="keyword">static</span> <span class="keyword">const</span> real tol1_;
-<a name="l00149"></a>00149     <span class="keyword">static</span> <span class="keyword">const</span> real tol2_;
-<a name="l00150"></a>00150     <span class="keyword">static</span> <span class="keyword">const</span> real xthresh_;
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152     <span class="keyword">enum</span> captype {
-<a name="l00153"></a>00153       CAP_NONE = 0U,
-<a name="l00154"></a>00154       CAP_C1   = 1U<<0,
-<a name="l00155"></a>00155       CAP_C1p  = 1U<<1,
-<a name="l00156"></a>00156       CAP_C2   = 1U<<2,
-<a name="l00157"></a>00157       CAP_C3   = 1U<<3,
-<a name="l00158"></a>00158       CAP_C4   = 1U<<4,
-<a name="l00159"></a>00159       CAP_ALL  = 0x1FU,
-<a name="l00160"></a>00160       OUT_ALL  = 0x7F80U,
-<a name="l00161"></a>00161     };
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> SinCosSeries(<span class="keywordtype">bool</span> sinp,
-<a name="l00164"></a>00164                              <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sinx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cosx, <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[], <span class="keywordtype">int</span> n)
-<a name="l00165"></a>00165       <span class="keywordflow">throw</span>();
-<a name="l00166"></a>00166     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> AngNormalize(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() {
-<a name="l00167"></a>00167       <span class="comment">// Place angle in [-180, 180).  Assumes x is in [-540, 540).</span>
-<a name="l00168"></a>00168       <span class="keywordflow">return</span> x >= 180 ? x - 360 : (x < -180 ? x + 360 : x);
-<a name="l00169"></a>00169     }
-<a name="l00170"></a>00170     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> AngRound(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() {
-<a name="l00171"></a>00171       <span class="comment">// The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57</span>
-<a name="l00172"></a>00172       <span class="comment">// for reals = 0.7 pm on the earth if x is an angle in degrees.  (This</span>
-<a name="l00173"></a>00173       <span class="comment">// is about 1000 times more resolution than we get with angles around 90</span>
-<a name="l00174"></a>00174       <span class="comment">// degrees.)  We use this to avoid having to deal with near singular</span>
-<a name="l00175"></a>00175       <span class="comment">// cases when x is non-zero but tiny (e.g., 1.0e-200).</span>
-<a name="l00176"></a>00176       <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.0625); <span class="comment">// 1/16</span>
-<a name="l00177"></a>00177       <span class="keyword">volatile</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y = std::abs(x);
-<a name="l00178"></a>00178       <span class="comment">// The compiler mustn't "simplify" z - (z - y) to y</span>
-<a name="l00179"></a>00179       y = y < z ? z - (z - y) : y;
-<a name="l00180"></a>00180       <span class="keywordflow">return</span> x < 0 ? -y : y;
-<a name="l00181"></a>00181     }
-<a name="l00182"></a>00182     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SinCosNorm(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& sinx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& cosx) <span class="keywordflow">throw</span>() {
-<a name="l00183"></a>00183       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> r = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(sinx, cosx);
-<a name="l00184"></a>00184       sinx /= r;
-<a name="l00185"></a>00185       cosx /= r;
-<a name="l00186"></a>00186     }
-<a name="l00187"></a>00187     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Astroid(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keywordflow">throw</span>();
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
-<a name="l00190"></a>00190     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _A3x[nA3x_], _C3x[nC3x_], _C4x[nC4x_];
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192     <span class="keywordtype">void</span> Lengths(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sig12,
-<a name="l00193"></a>00193                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ssig1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> csig1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ssig2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> csig2,
-<a name="l00194"></a>00194                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet2,
-<a name="l00195"></a>00195                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& s12s, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& m12a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& m0,
-<a name="l00196"></a>00196                  <span class="keywordtype">bool</span> scalep, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M21,
-<a name="l00197"></a>00197                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C1a[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C2a[]) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00198"></a>00198     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> InverseStart(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet2,
-<a name="l00199"></a>00199                       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lam12,
-<a name="l00200"></a>00200                       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& salp1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& calp1,
-<a name="l00201"></a>00201                       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& salp2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& calp2,
-<a name="l00202"></a>00202                       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C1a[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C2a[]) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00203"></a>00203     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Lambda12(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sbet2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cbet2,
-<a name="l00204"></a>00204                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> salp1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> calp1,
-<a name="l00205"></a>00205                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& salp2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& calp2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& sig12,
-<a name="l00206"></a>00206                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& ssig1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& csig1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& ssig2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& csig2,
-<a name="l00207"></a>00207                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& domg12, <span class="keywordtype">bool</span> diffp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& dlam12,
-<a name="l00208"></a>00208                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C1a[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C2a[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> C3a[])
-<a name="l00209"></a>00209       <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211     <span class="comment">// These are Maxima generated functions to provide series approximations to</span>
-<a name="l00212"></a>00212     <span class="comment">// the integrals for the ellipsoidal geodesic.</span>
-<a name="l00213"></a>00213     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> A1m1f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps) <span class="keywordflow">throw</span>();
-<a name="l00214"></a>00214     <span class="keyword">static</span> <span class="keywordtype">void</span> C1f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) <span class="keywordflow">throw</span>();
-<a name="l00215"></a>00215     <span class="keyword">static</span> <span class="keywordtype">void</span> C1pf(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) <span class="keywordflow">throw</span>();
-<a name="l00216"></a>00216     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> A2m1f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps) <span class="keywordflow">throw</span>();
-<a name="l00217"></a>00217     <span class="keyword">static</span> <span class="keywordtype">void</span> C2f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) <span class="keywordflow">throw</span>();
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     <span class="keywordtype">void</span> A3coeff() throw();
-<a name="l00220"></a>00220     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> A3f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps) const throw();
-<a name="l00221"></a>00221     <span class="keywordtype">void</span> C3coeff() throw();
-<a name="l00222"></a>00222     <span class="keywordtype">void</span> C3f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) const throw();
-<a name="l00223"></a>00223     <span class="keywordtype">void</span> C4coeff() throw();
-<a name="l00224"></a>00224     <span class="keywordtype">void</span> C4f(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c[]) const throw();
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226   public:
-<a name="l00227"></a>00227 <span class="comment"></span>
-<a name="l00228"></a>00228 <span class="comment">    /**</span>
-<a name="l00229"></a>00229 <span class="comment">     * Bit masks for what calculations to do.  These masks do double duty.</span>
-<a name="l00230"></a>00230 <span class="comment">     * They signify to the GeodesicLine::GeodesicLine constructor and to</span>
-<a name="l00231"></a>00231 <span class="comment">     * Geodesic::Line what capabilities should be included in the GeodesicLine</span>
-<a name="l00232"></a>00232 <span class="comment">     * object.  They also specify which results to return in the general</span>
-<a name="l00233"></a>00233 <span class="comment">     * routines Geodesic::GenDirect and Geodesic::GenInverse routines.</span>
-<a name="l00234"></a>00234 <span class="comment">     * GeodesicLine::mask is a duplication of this enum.</span>
-<a name="l00235"></a>00235 <span class="comment">     **********************************************************************/</span>
-<a name="l00236"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">00236</a>     enum <a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">mask</a> {<span class="comment"></span>
-<a name="l00237"></a>00237 <span class="comment">      /**</span>
-<a name="l00238"></a>00238 <span class="comment">       * No capabilities, no output.</span>
-<a name="l00239"></a>00239 <span class="comment">       * @hideinitializer</span>
-<a name="l00240"></a>00240 <span class="comment">       **********************************************************************/</span>
-<a name="l00241"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ab10adfebcb73de5356c4787246f056af">00241</a>       NONE          = 0U,<span class="comment"></span>
-<a name="l00242"></a>00242 <span class="comment">      /**</span>
-<a name="l00243"></a>00243 <span class="comment">       * Calculate latitude \e lat2.  (It's not necessary to include this as a</span>
-<a name="l00244"></a>00244 <span class="comment">       * capability to GeodesicLine because this is included by default.)</span>
-<a name="l00245"></a>00245 <span class="comment">       * @hideinitializer</span>
-<a name="l00246"></a>00246 <span class="comment">       **********************************************************************/</span>
-<a name="l00247"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90">00247</a>       LATITUDE      = 1U<<7  | CAP_NONE,<span class="comment"></span>
-<a name="l00248"></a>00248 <span class="comment">      /**</span>
-<a name="l00249"></a>00249 <span class="comment">       * Calculate longitude \e lon2.</span>
-<a name="l00250"></a>00250 <span class="comment">       * @hideinitializer</span>
-<a name="l00251"></a>00251 <span class="comment">       **********************************************************************/</span>
-<a name="l00252"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b">00252</a>       LONGITUDE     = 1U<<8  | CAP_C3,<span class="comment"></span>
-<a name="l00253"></a>00253 <span class="comment">      /**</span>
-<a name="l00254"></a>00254 <span class="comment">       * Calculate azimuths \e azi1 and \e azi2.  (It's not necessary to</span>
-<a name="l00255"></a>00255 <span class="comment">       * include this as a capability to GeodesicLine because this is included</span>
-<a name="l00256"></a>00256 <span class="comment">       * by default.)</span>
-<a name="l00257"></a>00257 <span class="comment">       * @hideinitializer</span>
-<a name="l00258"></a>00258 <span class="comment">       **********************************************************************/</span>
-<a name="l00259"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08">00259</a>       AZIMUTH       = 1U<<9  | CAP_NONE,<span class="comment"></span>
-<a name="l00260"></a>00260 <span class="comment">      /**</span>
-<a name="l00261"></a>00261 <span class="comment">       * Calculate distance \e s12.</span>
-<a name="l00262"></a>00262 <span class="comment">       * @hideinitializer</span>
-<a name="l00263"></a>00263 <span class="comment">       **********************************************************************/</span>
-<a name="l00264"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d">00264</a>       DISTANCE      = 1U<<10 | CAP_C1,<span class="comment"></span>
-<a name="l00265"></a>00265 <span class="comment">      /**</span>
-<a name="l00266"></a>00266 <span class="comment">       * Allow distance \e s12 to be used as input in the direct geodesic</span>
-<a name="l00267"></a>00267 <span class="comment">       * problem.</span>
-<a name="l00268"></a>00268 <span class="comment">       * @hideinitializer</span>
-<a name="l00269"></a>00269 <span class="comment">       **********************************************************************/</span>
-<a name="l00270"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ae20140cdf788fa0497df59630d3211ef">00270</a>       DISTANCE_IN   = 1U<<11 | CAP_C1 | CAP_C1p,<span class="comment"></span>
-<a name="l00271"></a>00271 <span class="comment">      /**</span>
-<a name="l00272"></a>00272 <span class="comment">       * Calculate reduced length \e m12.</span>
-<a name="l00273"></a>00273 <span class="comment">       * @hideinitializer</span>
-<a name="l00274"></a>00274 <span class="comment">       **********************************************************************/</span>
-<a name="l00275"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c">00275</a>       REDUCEDLENGTH = 1U<<12 | CAP_C1 | CAP_C2,<span class="comment"></span>
-<a name="l00276"></a>00276 <span class="comment">      /**</span>
-<a name="l00277"></a>00277 <span class="comment">       * Calculate geodesic scales \e M12 and \e M21.</span>
-<a name="l00278"></a>00278 <span class="comment">       * @hideinitializer</span>
-<a name="l00279"></a>00279 <span class="comment">       **********************************************************************/</span>
-<a name="l00280"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e">00280</a>       GEODESICSCALE = 1U<<13 | CAP_C1 | CAP_C2,<span class="comment"></span>
-<a name="l00281"></a>00281 <span class="comment">      /**</span>
-<a name="l00282"></a>00282 <span class="comment">       * Calculate area \e S12.</span>
-<a name="l00283"></a>00283 <span class="comment">       * @hideinitializer</span>
-<a name="l00284"></a>00284 <span class="comment">       **********************************************************************/</span>
-<a name="l00285"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14">00285</a>       AREA          = 1U<<14 | CAP_C4,<span class="comment"></span>
-<a name="l00286"></a>00286 <span class="comment">      /**</span>
-<a name="l00287"></a>00287 <span class="comment">       * All capabilities.  Calculate everything.</span>
-<a name="l00288"></a>00288 <span class="comment">       * @hideinitializer</span>
-<a name="l00289"></a>00289 <span class="comment">       **********************************************************************/</span>
-<a name="l00290"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a30e0c9456c5df9e6ff23880014bd11e0">00290</a>       ALL           = OUT_ALL| CAP_ALL,
-<a name="l00291"></a>00291     };
-<a name="l00292"></a>00292 <span class="comment"></span>
-<a name="l00293"></a>00293 <span class="comment">    /** \name Constructor</span>
-<a name="l00294"></a>00294 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00295"></a>00295 <span class="comment">    ///@{</span>
-<a name="l00296"></a>00296 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00297"></a>00297 <span class="comment">     * Constructor for a ellipsoid with</span>
-<a name="l00298"></a>00298 <span class="comment">     *</span>
-<a name="l00299"></a>00299 <span class="comment">     * @param[in] a equatorial radius (meters).</span>
-<a name="l00300"></a>00300 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00301"></a>00301 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00302"></a>00302 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00303"></a>00303 <span class="comment">     *</span>
-<a name="l00304"></a>00304 <span class="comment">     * An exception is thrown if either of the axes of the ellipsoid is</span>
-<a name="l00305"></a>00305 <span class="comment">     * non-positive.</span>
-<a name="l00306"></a>00306 <span class="comment">     **********************************************************************/</span>
-<a name="l00307"></a>00307     Geodesic(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f);<span class="comment"></span>
-<a name="l00308"></a>00308 <span class="comment">    ///@}</span>
-<a name="l00309"></a>00309 <span class="comment"></span><span class="comment"></span>
-<a name="l00310"></a>00310 <span class="comment">    /** \name Direct geodesic problem specified in terms of distance.</span>
-<a name="l00311"></a>00311 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00312"></a>00312 <span class="comment">    ///@{</span>
-<a name="l00313"></a>00313 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00314"></a>00314 <span class="comment">     * Perform the direct geodesic calculation where the length of the geodesic</span>
-<a name="l00315"></a>00315 <span class="comment">     * is specify in terms of distance.</span>
-<a name="l00316"></a>00316 <span class="comment">     *</span>
-<a name="l00317"></a>00317 <span class="comment">     * @param[in] lat1 latitude of point 1 (degrees).</span>
-<a name="l00318"></a>00318 <span class="comment">     * @param[in] lon1 longitude of point 1 (degrees).</span>
-<a name="l00319"></a>00319 <span class="comment">     * @param[in] azi1 azimuth at point 1 (degrees).</span>
-<a name="l00320"></a>00320 <span class="comment">     * @param[in] s12 distance between point 1 and point 2 (meters); it can be</span>
-<a name="l00321"></a>00321 <span class="comment">     *   signed.</span>
-<a name="l00322"></a>00322 <span class="comment">     * @param[out] lat2 latitude of point 2 (degrees).</span>
-<a name="l00323"></a>00323 <span class="comment">     * @param[out] lon2 longitude of point 2 (degrees).</span>
-<a name="l00324"></a>00324 <span class="comment">     * @param[out] azi2 (forward) azimuth at point 2 (degrees).</span>
-<a name="l00325"></a>00325 <span class="comment">     * @param[out] m12 reduced length of geodesic (meters).</span>
-<a name="l00326"></a>00326 <span class="comment">     * @param[out] M12 geodesic scale of point 2 relative to point 1</span>
-<a name="l00327"></a>00327 <span class="comment">     *   (dimensionless).</span>
-<a name="l00328"></a>00328 <span class="comment">     * @param[out] M21 geodesic scale of point 1 relative to point 2</span>
-<a name="l00329"></a>00329 <span class="comment">     *   (dimensionless).</span>
-<a name="l00330"></a>00330 <span class="comment">     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).</span>
-<a name="l00331"></a>00331 <span class="comment">     * @return \e a12 arc length of between point 1 and point 2 (degrees).</span>
-<a name="l00332"></a>00332 <span class="comment">     *</span>
-<a name="l00333"></a>00333 <span class="comment">     * \e lat1 should be in the range [-90, 90]; \e lon1 and \e azi1 should be</span>
-<a name="l00334"></a>00334 <span class="comment">     * in the range [-180, 360].  The values of \e lon2 and \e azi2 returned</span>
-<a name="l00335"></a>00335 <span class="comment">     * are in the range [-180, 180).</span>
-<a name="l00336"></a>00336 <span class="comment">     *</span>
-<a name="l00337"></a>00337 <span class="comment">     * If either point is at a pole, the azimuth is defined by keeping the</span>
-<a name="l00338"></a>00338 <span class="comment">     * longitude fixed and writing \e lat = 90 - \e eps or -90 + \e eps and</span>
-<a name="l00339"></a>00339 <span class="comment">     * taking the limit \e eps -> 0 from above.  An arc length greater that 180</span>
-<a name="l00340"></a>00340 <span class="comment">     * degrees signifies a geodesic which is not a shortest path.  (For a</span>
-<a name="l00341"></a>00341 <span class="comment">     * prolate ellipsoid, an additional condition is necessary for a shortest</span>
-<a name="l00342"></a>00342 <span class="comment">     * path: the longitudinal extent must not exceed of 180 degrees.)</span>
-<a name="l00343"></a>00343 <span class="comment">     *</span>
-<a name="l00344"></a>00344 <span class="comment">     * The following functions are overloaded versions of Geodesic::Direct</span>
-<a name="l00345"></a>00345 <span class="comment">     * which omit some of the output parameters.  Note, however, that the arc</span>
-<a name="l00346"></a>00346 <span class="comment">     * length is always computed and returned as the function value.</span>
-<a name="l00347"></a>00347 <span class="comment">     **********************************************************************/</span>
-<a name="l00348"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">00348</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Direct(real lat1, real lon1, real azi1, real s12,
-<a name="l00349"></a>00349                       real& lat2, real& lon2, real& azi2,
-<a name="l00350"></a>00350                       real& m12, real& M12, real& M21, real& S12)
-<a name="l00351"></a>00351       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00352"></a>00352       real t;
-<a name="l00353"></a>00353       <span class="keywordflow">return</span> GenDirect(lat1, lon1, azi1, <span class="keyword">false</span>, s12,
-<a name="l00354"></a>00354                        LATITUDE | LONGITUDE | AZIMUTH |
-<a name="l00355"></a>00355                        REDUCEDLENGTH | GEODESICSCALE | AREA,
-<a name="l00356"></a>00356                        lat2, lon2, azi2, t, m12, M12, M21, S12);
-<a name="l00357"></a>00357     }
-<a name="l00358"></a>00358 <span class="comment"></span>
-<a name="l00359"></a>00359 <span class="comment">    /**</span>
-<a name="l00360"></a>00360 <span class="comment">     * See the documentation for Geodesic::Direct.</span>
-<a name="l00361"></a>00361 <span class="comment">     **********************************************************************/</span>
-<a name="l00362"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#ac8b9e451fc4093253cfe3f8051d72a14">00362</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Direct(real lat1, real lon1, real azi1, real s12,
-<a name="l00363"></a>00363                       real& lat2, real& lon2)
-<a name="l00364"></a>00364       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00365"></a>00365       real t;
-<a name="l00366"></a>00366       <span class="keywordflow">return</span> GenDirect(lat1, lon1, azi1, <span class="keyword">false</span>, s12,
-<a name="l00367"></a>00367                        LATITUDE | LONGITUDE,
-<a name="l00368"></a>00368                        lat2, lon2, t, t, t, t, t, t);
-<a name="l00369"></a>00369     }
-<a name="l00370"></a>00370 <span class="comment"></span>
-<a name="l00371"></a>00371 <span class="comment">    /**</span>
-<a name="l00372"></a>00372 <span class="comment">     * See the documentation for Geodesic::Direct.</span>
-<a name="l00373"></a>00373 <span class="comment">     **********************************************************************/</span>
-<a name="l00374"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#ac8f0b5f4db73c5d8d11797698f937402">00374</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Direct(real lat1, real lon1, real azi1, real s12,
-<a name="l00375"></a>00375                       real& lat2, real& lon2, real& azi2)
-<a name="l00376"></a>00376       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00377"></a>00377       real t;
-<a name="l00378"></a>00378       <span class="keywordflow">return</span> GenDirect(lat1, lon1, azi1, <span class="keyword">false</span>, s12,
-<a name="l00379"></a>00379                        LATITUDE | LONGITUDE | AZIMUTH,
-<a name="l00380"></a>00380                        lat2, lon2, azi2, t, t, t, t, t);
-<a name="l00381"></a>00381     }
-<a name="l00382"></a>00382 <span class="comment"></span>
-<a name="l00383"></a>00383 <span class="comment">    /**</span>
-<a name="l00384"></a>00384 <span class="comment">     * See the documentation for Geodesic::Direct.</span>
-<a name="l00385"></a>00385 <span class="comment">     **********************************************************************/</span>
-<a name="l00386"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a63f7681d1239902dc3f528ded0f90352">00386</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Direct(real lat1, real lon1, real azi1, real s12,
-<a name="l00387"></a>00387                       real& lat2, real& lon2, real& azi2, real& m12)
-<a name="l00388"></a>00388       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00389"></a>00389       real t;
-<a name="l00390"></a>00390       <span class="keywordflow">return</span> GenDirect(lat1, lon1, azi1, <span class="keyword">false</span>, s12,
-<a name="l00391"></a>00391                        LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
-<a name="l00392"></a>00392                        lat2, lon2, azi2, t, m12, t, t, t);
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394 <span class="comment"></span>
-<a name="l00395"></a>00395 <span class="comment">    /**</span>
-<a name="l00396"></a>00396 <span class="comment">     * See the documentation for Geodesic::Direct.</span>
-<a name="l00397"></a>00397 <span class="comment">     **********************************************************************/</span>
-<a name="l00398"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a7fb2003b8f1d68976fac43d158b4b8b4">00398</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Direct(real lat1, real lon1, real azi1, real s12,
-<a name="l00399"></a>00399                       real& lat2, real& lon2, real& azi2,
-<a name="l00400"></a>00400                       real& M12, real& M21)
-<a name="l00401"></a>00401       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00402"></a>00402       real t;
-<a name="l00403"></a>00403       <span class="keywordflow">return</span> GenDirect(lat1, lon1, azi1, <span class="keyword">false</span>, s12,
-<a name="l00404"></a>00404                        LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
-<a name="l00405"></a>00405                        lat2, lon2, azi2, t, t, M12, M21, t);
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407 <span class="comment"></span>
-<a name="l00408"></a>00408 <span class="comment">    /**</span>
-<a name="l00409"></a>00409 <span class="comment">     * See the documentation for Geodesic::Direct.</span>
-<a name="l00410"></a>00410 <span class="comment">     **********************************************************************/</span>
-<a name="l00411"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a65cf95dc7f5c0bfd427e963281e044f0">00411</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Direct(real lat1, real lon1, real azi1, real s12,
-<a name="l00412"></a>00412                       real& lat2, real& lon2, real& azi2,
-<a name="l00413"></a>00413                       real& m12, real& M12, real& M21)
-<a name="l00414"></a>00414       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00415"></a>00415       real t;
-<a name="l00416"></a>00416       <span class="keywordflow">return</span> GenDirect(lat1, lon1, azi1, <span class="keyword">false</span>, s12,
-<a name="l00417"></a>00417                        LATITUDE | LONGITUDE | AZIMUTH |
-<a name="l00418"></a>00418                        REDUCEDLENGTH | GEODESICSCALE,
-<a name="l00419"></a>00419                        lat2, lon2, azi2, t, m12, M12, M21, t);
-<a name="l00420"></a>00420     }<span class="comment"></span>
-<a name="l00421"></a>00421 <span class="comment">    ///@}</span>
-<a name="l00422"></a>00422 <span class="comment"></span><span class="comment"></span>
-<a name="l00423"></a>00423 <span class="comment">    /** \name Direct geodesic problem specified in terms of arc length.</span>
-<a name="l00424"></a>00424 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00425"></a>00425 <span class="comment">    ///@{</span>
-<a name="l00426"></a>00426 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00427"></a>00427 <span class="comment">     * Perform the direct geodesic calculation where the length of the geodesic</span>
-<a name="l00428"></a>00428 <span class="comment">     * is specify in terms of arc length.</span>
-<a name="l00429"></a>00429 <span class="comment">     *</span>
-<a name="l00430"></a>00430 <span class="comment">     * @param[in] lat1 latitude of point 1 (degrees).</span>
-<a name="l00431"></a>00431 <span class="comment">     * @param[in] lon1 longitude of point 1 (degrees).</span>
-<a name="l00432"></a>00432 <span class="comment">     * @param[in] azi1 azimuth at point 1 (degrees).</span>
-<a name="l00433"></a>00433 <span class="comment">     * @param[in] a12 arc length between point 1 and point 2 (degrees); it can</span>
-<a name="l00434"></a>00434 <span class="comment">     *   be signed.</span>
-<a name="l00435"></a>00435 <span class="comment">     * @param[out] lat2 latitude of point 2 (degrees).</span>
-<a name="l00436"></a>00436 <span class="comment">     * @param[out] lon2 longitude of point 2 (degrees).</span>
-<a name="l00437"></a>00437 <span class="comment">     * @param[out] azi2 (forward) azimuth at point 2 (degrees).</span>
-<a name="l00438"></a>00438 <span class="comment">     * @param[out] s12 distance between point 1 and point 2 (meters).</span>
-<a name="l00439"></a>00439 <span class="comment">     * @param[out] m12 reduced length of geodesic (meters).</span>
-<a name="l00440"></a>00440 <span class="comment">     * @param[out] M12 geodesic scale of point 2 relative to point 1</span>
-<a name="l00441"></a>00441 <span class="comment">     *   (dimensionless).</span>
-<a name="l00442"></a>00442 <span class="comment">     * @param[out] M21 geodesic scale of point 1 relative to point 2</span>
-<a name="l00443"></a>00443 <span class="comment">     *   (dimensionless).</span>
-<a name="l00444"></a>00444 <span class="comment">     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).</span>
-<a name="l00445"></a>00445 <span class="comment">     *</span>
-<a name="l00446"></a>00446 <span class="comment">     * \e lat1 should be in the range [-90, 90]; \e lon1 and \e azi1 should be</span>
-<a name="l00447"></a>00447 <span class="comment">     * in the range [-180, 360].  The values of \e lon2 and \e azi2 returned</span>
-<a name="l00448"></a>00448 <span class="comment">     * are in the range [-180, 180).</span>
-<a name="l00449"></a>00449 <span class="comment">     *</span>
-<a name="l00450"></a>00450 <span class="comment">     * If either point is at a pole, the azimuth is defined by keeping the</span>
-<a name="l00451"></a>00451 <span class="comment">     * longitude fixed and writing \e lat = 90 - \e eps or -90 + \e eps and</span>
-<a name="l00452"></a>00452 <span class="comment">     * taking the limit \e eps -> 0 from above.  An arc length greater that 180</span>
-<a name="l00453"></a>00453 <span class="comment">     * degrees signifies a geodesic which is not a shortest path.  (For a</span>
-<a name="l00454"></a>00454 <span class="comment">     * prolate ellipsoid, an additional condition is necessary for a shortest</span>
-<a name="l00455"></a>00455 <span class="comment">     * path: the longitudinal extent must not exceed of 180 degrees.)</span>
-<a name="l00456"></a>00456 <span class="comment">     *</span>
-<a name="l00457"></a>00457 <span class="comment">     * The following functions are overloaded versions of Geodesic::Direct</span>
-<a name="l00458"></a>00458 <span class="comment">     * which omit some of the output parameters.</span>
-<a name="l00459"></a>00459 <span class="comment">     **********************************************************************/</span>
-<a name="l00460"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">00460</a>     <span class="keywordtype">void</span> ArcDirect(real lat1, real lon1, real azi1, real a12,
-<a name="l00461"></a>00461                    real& lat2, real& lon2, real& azi2, real& s12,
-<a name="l00462"></a>00462                    real& m12, real& M12, real& M21, real& S12)
-<a name="l00463"></a>00463       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00464"></a>00464       GenDirect(lat1, lon1, azi1, <span class="keyword">true</span>, a12,
-<a name="l00465"></a>00465                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
-<a name="l00466"></a>00466                 REDUCEDLENGTH | GEODESICSCALE | AREA,
-<a name="l00467"></a>00467                 lat2, lon2, azi2, s12, m12, M12, M21, S12);
-<a name="l00468"></a>00468     }
-<a name="l00469"></a>00469 <span class="comment"></span>
-<a name="l00470"></a>00470 <span class="comment">    /**</span>
-<a name="l00471"></a>00471 <span class="comment">     * See the documentation for Geodesic::ArcDirect.</span>
-<a name="l00472"></a>00472 <span class="comment">     **********************************************************************/</span>
-<a name="l00473"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aa1bed6c11200c0323cffd0e7027e4df2">00473</a>     <span class="keywordtype">void</span> ArcDirect(real lat1, real lon1, real azi1, real a12,
-<a name="l00474"></a>00474                    real& lat2, real& lon2) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00475"></a>00475       real t;
-<a name="l00476"></a>00476       GenDirect(lat1, lon1, azi1, <span class="keyword">true</span>, a12,
-<a name="l00477"></a>00477                 LATITUDE | LONGITUDE,
-<a name="l00478"></a>00478                 lat2, lon2, t, t, t, t, t, t);
-<a name="l00479"></a>00479     }
-<a name="l00480"></a>00480 <span class="comment"></span>
-<a name="l00481"></a>00481 <span class="comment">    /**</span>
-<a name="l00482"></a>00482 <span class="comment">     * See the documentation for Geodesic::ArcDirect.</span>
-<a name="l00483"></a>00483 <span class="comment">     **********************************************************************/</span>
-<a name="l00484"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a6f8eabd951b2fe23ffacb6209b2d43bc">00484</a>     <span class="keywordtype">void</span> ArcDirect(real lat1, real lon1, real azi1, real a12,
-<a name="l00485"></a>00485                    real& lat2, real& lon2, real& azi2) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00486"></a>00486       real t;
-<a name="l00487"></a>00487       GenDirect(lat1, lon1, azi1, <span class="keyword">true</span>, a12,
-<a name="l00488"></a>00488                 LATITUDE | LONGITUDE | AZIMUTH,
-<a name="l00489"></a>00489                 lat2, lon2, azi2, t, t, t, t, t);
-<a name="l00490"></a>00490     }
-<a name="l00491"></a>00491 <span class="comment"></span>
-<a name="l00492"></a>00492 <span class="comment">    /**</span>
-<a name="l00493"></a>00493 <span class="comment">     * See the documentation for Geodesic::ArcDirect.</span>
-<a name="l00494"></a>00494 <span class="comment">     **********************************************************************/</span>
-<a name="l00495"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a223802b76bae1665f360b2e343d7afd7">00495</a>     <span class="keywordtype">void</span> ArcDirect(real lat1, real lon1, real azi1, real a12,
-<a name="l00496"></a>00496                    real& lat2, real& lon2, real& azi2, real& s12)
-<a name="l00497"></a>00497       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00498"></a>00498       real t;
-<a name="l00499"></a>00499       GenDirect(lat1, lon1, azi1, <span class="keyword">true</span>, a12,
-<a name="l00500"></a>00500                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
-<a name="l00501"></a>00501                 lat2, lon2, azi2, s12, t, t, t, t);
-<a name="l00502"></a>00502     }
-<a name="l00503"></a>00503 <span class="comment"></span>
-<a name="l00504"></a>00504 <span class="comment">    /**</span>
-<a name="l00505"></a>00505 <span class="comment">     * See the documentation for Geodesic::ArcDirect.</span>
-<a name="l00506"></a>00506 <span class="comment">     **********************************************************************/</span>
-<a name="l00507"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a63ffe80d449adad813dc98805adcca81">00507</a>     <span class="keywordtype">void</span> ArcDirect(real lat1, real lon1, real azi1, real a12,
-<a name="l00508"></a>00508                    real& lat2, real& lon2, real& azi2,
-<a name="l00509"></a>00509                    real& s12, real& m12) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00510"></a>00510       real t;
-<a name="l00511"></a>00511       GenDirect(lat1, lon1, azi1, <span class="keyword">true</span>, a12,
-<a name="l00512"></a>00512                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
-<a name="l00513"></a>00513                 REDUCEDLENGTH,
-<a name="l00514"></a>00514                 lat2, lon2, azi2, s12, m12, t, t, t);
-<a name="l00515"></a>00515     }
-<a name="l00516"></a>00516 <span class="comment"></span>
-<a name="l00517"></a>00517 <span class="comment">    /**</span>
-<a name="l00518"></a>00518 <span class="comment">     * See the documentation for Geodesic::ArcDirect.</span>
-<a name="l00519"></a>00519 <span class="comment">     **********************************************************************/</span>
-<a name="l00520"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a55c17605d76f6c46ac5b11f36e8e8641">00520</a>     <span class="keywordtype">void</span> ArcDirect(real lat1, real lon1, real azi1, real a12,
-<a name="l00521"></a>00521                    real& lat2, real& lon2, real& azi2, real& s12,
-<a name="l00522"></a>00522                    real& M12, real& M21) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00523"></a>00523       real t;
-<a name="l00524"></a>00524       GenDirect(lat1, lon1, azi1, <span class="keyword">true</span>, a12,
-<a name="l00525"></a>00525                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
-<a name="l00526"></a>00526                 GEODESICSCALE,
-<a name="l00527"></a>00527                 lat2, lon2, azi2, s12, t, M12, M21, t);
-<a name="l00528"></a>00528     }
-<a name="l00529"></a>00529 <span class="comment"></span>
-<a name="l00530"></a>00530 <span class="comment">    /**</span>
-<a name="l00531"></a>00531 <span class="comment">     * See the documentation for Geodesic::ArcDirect.</span>
-<a name="l00532"></a>00532 <span class="comment">     **********************************************************************/</span>
-<a name="l00533"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#adc8a4d02e631e8966d5842056a49be9c">00533</a>     <span class="keywordtype">void</span> ArcDirect(real lat1, real lon1, real azi1, real a12,
-<a name="l00534"></a>00534                    real& lat2, real& lon2, real& azi2, real& s12,
-<a name="l00535"></a>00535                    real& m12, real& M12, real& M21) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00536"></a>00536       real t;
-<a name="l00537"></a>00537       GenDirect(lat1, lon1, azi1, <span class="keyword">true</span>, a12,
-<a name="l00538"></a>00538                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
-<a name="l00539"></a>00539                 REDUCEDLENGTH | GEODESICSCALE,
-<a name="l00540"></a>00540                 lat2, lon2, azi2, s12, m12, M12, M21, t);
-<a name="l00541"></a>00541     }<span class="comment"></span>
-<a name="l00542"></a>00542 <span class="comment">    ///@}</span>
-<a name="l00543"></a>00543 <span class="comment"></span><span class="comment"></span>
-<a name="l00544"></a>00544 <span class="comment">    /** \name General version of the direct geodesic solution.</span>
-<a name="l00545"></a>00545 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00546"></a>00546 <span class="comment">    ///@{</span>
-<a name="l00547"></a>00547 <span class="comment"></span><span class="comment"></span>
-<a name="l00548"></a>00548 <span class="comment">    /**</span>
-<a name="l00549"></a>00549 <span class="comment">     * The general direct geodesic calculation.  Geodesic::Direct and</span>
-<a name="l00550"></a>00550 <span class="comment">     * Geodesic::ArcDirect are defined in terms of this function.</span>
-<a name="l00551"></a>00551 <span class="comment">     *</span>
-<a name="l00552"></a>00552 <span class="comment">     * @param[in] lat1 latitude of point 1 (degrees).</span>
-<a name="l00553"></a>00553 <span class="comment">     * @param[in] lon1 longitude of point 1 (degrees).</span>
-<a name="l00554"></a>00554 <span class="comment">     * @param[in] azi1 azimuth at point 1 (degrees).</span>
-<a name="l00555"></a>00555 <span class="comment">     * @param[in] arcmode boolean flag determining the meaning of the second</span>
-<a name="l00556"></a>00556 <span class="comment">     *   parameter.</span>
-<a name="l00557"></a>00557 <span class="comment">     * @param[in] s12_a12 if \e arcmode is false, this is the distance between</span>
-<a name="l00558"></a>00558 <span class="comment">     *   point 1 and point 2 (meters); otherwise it is the arc length between</span>
-<a name="l00559"></a>00559 <span class="comment">     *   point 1 and point 2 (degrees); it can be signed.</span>
-<a name="l00560"></a>00560 <span class="comment">     * @param[in] outmask a bitor'ed combination of Geodesic::mask values</span>
-<a name="l00561"></a>00561 <span class="comment">     *   specifying which of the following parameters should be set.</span>
-<a name="l00562"></a>00562 <span class="comment">     * @param[out] lat2 latitude of point 2 (degrees).</span>
-<a name="l00563"></a>00563 <span class="comment">     * @param[out] lon2 longitude of point 2 (degrees).</span>
-<a name="l00564"></a>00564 <span class="comment">     * @param[out] azi2 (forward) azimuth at point 2 (degrees).</span>
-<a name="l00565"></a>00565 <span class="comment">     * @param[out] s12 distance between point 1 and point 2 (meters).</span>
-<a name="l00566"></a>00566 <span class="comment">     * @param[out] m12 reduced length of geodesic (meters).</span>
-<a name="l00567"></a>00567 <span class="comment">     * @param[out] M12 geodesic scale of point 2 relative to point 1</span>
-<a name="l00568"></a>00568 <span class="comment">     *   (dimensionless).</span>
-<a name="l00569"></a>00569 <span class="comment">     * @param[out] M21 geodesic scale of point 1 relative to point 2</span>
-<a name="l00570"></a>00570 <span class="comment">     *   (dimensionless).</span>
-<a name="l00571"></a>00571 <span class="comment">     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).</span>
-<a name="l00572"></a>00572 <span class="comment">     * @return \e a12 arc length of between point 1 and point 2 (degrees).</span>
-<a name="l00573"></a>00573 <span class="comment">     *</span>
-<a name="l00574"></a>00574 <span class="comment">     * The Geodesic::mask values possible for \e outmask are</span>
-<a name="l00575"></a>00575 <span class="comment">     * - \e outmask |= Geodesic::LATITUDE for the latitude \e lat2.</span>
-<a name="l00576"></a>00576 <span class="comment">     * - \e outmask |= Geodesic::LONGITUDE for the latitude \e lon2.</span>
-<a name="l00577"></a>00577 <span class="comment">     * - \e outmask |= Geodesic::AZIMUTH for the latitude \e azi2.</span>
-<a name="l00578"></a>00578 <span class="comment">     * - \e outmask |= Geodesic::DISTANCE for the distance \e s12.</span>
-<a name="l00579"></a>00579 <span class="comment">     * - \e outmask |= Geodesic::REDUCEDLENGTH for the reduced length \e</span>
-<a name="l00580"></a>00580 <span class="comment">     *   m12.</span>
-<a name="l00581"></a>00581 <span class="comment">     * - \e outmask |= Geodesic::GEODESICSCALE for the geodesic scales \e</span>
-<a name="l00582"></a>00582 <span class="comment">     *   M12 and \e M21.</span>
-<a name="l00583"></a>00583 <span class="comment">     * - \e outmask |= Geodesic::AREA for the area \e S12.</span>
-<a name="l00584"></a>00584 <span class="comment">     * .</span>
-<a name="l00585"></a>00585 <span class="comment">     * The function value \e a12 is always computed and returned and this</span>
-<a name="l00586"></a>00586 <span class="comment">     * equals \e s12_a12 is \e arcmode is true.  If \e outmask includes</span>
-<a name="l00587"></a>00587 <span class="comment">     * Geodesic::DISTANCE and \e arcmode is false, then \e s12 = \e s12_a12.</span>
-<a name="l00588"></a>00588 <span class="comment">     * It is not necessary to include Geodesic::DISTANCE_IN in \e outmask; this</span>
-<a name="l00589"></a>00589 <span class="comment">     * is automatically included is \e arcmode is false.</span>
-<a name="l00590"></a>00590 <span class="comment">     **********************************************************************/</span>
-<a name="l00591"></a>00591     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> GenDirect(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">rea [...]
-<a name="l00592"></a>00592                          <span class="keywordtype">bool</span> arcmode, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> s12_a12, <span class="keywordtype">unsigned</span> outmask,
-<a name="l00593"></a>00593                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi2,
-<a name="l00594"></a>00594                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& s12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& m12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M21,
-<a name="l00595"></a>00595                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& S12) <span class="keyword">const</span> <span class="keywordflow">throw</span>();<span class="comment"></span>
-<a name="l00596"></a>00596 <span class="comment">    ///@}</span>
-<a name="l00597"></a>00597 <span class="comment"></span><span class="comment"></span>
-<a name="l00598"></a>00598 <span class="comment">    /** \name Inverse geodesic problem.</span>
-<a name="l00599"></a>00599 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00600"></a>00600 <span class="comment">    ///@{</span>
-<a name="l00601"></a>00601 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00602"></a>00602 <span class="comment">     * Perform the inverse geodesic calculation.</span>
-<a name="l00603"></a>00603 <span class="comment">     *</span>
-<a name="l00604"></a>00604 <span class="comment">     * @param[in] lat1 latitude of point 1 (degrees).</span>
-<a name="l00605"></a>00605 <span class="comment">     * @param[in] lon1 longitude of point 1 (degrees).</span>
-<a name="l00606"></a>00606 <span class="comment">     * @param[in] lat2 latitude of point 2 (degrees).</span>
-<a name="l00607"></a>00607 <span class="comment">     * @param[in] lon2 longitude of point 2 (degrees).</span>
-<a name="l00608"></a>00608 <span class="comment">     * @param[out] s12 distance between point 1 and point 2 (meters).</span>
-<a name="l00609"></a>00609 <span class="comment">     * @param[out] azi1 azimuth at point 1 (degrees).</span>
-<a name="l00610"></a>00610 <span class="comment">     * @param[out] azi2 (forward) azimuth at point 2 (degrees).</span>
-<a name="l00611"></a>00611 <span class="comment">     * @param[out] m12 reduced length of geodesic (meters).</span>
-<a name="l00612"></a>00612 <span class="comment">     * @param[out] M12 geodesic scale of point 2 relative to point 1</span>
-<a name="l00613"></a>00613 <span class="comment">     *   (dimensionless).</span>
-<a name="l00614"></a>00614 <span class="comment">     * @param[out] M21 geodesic scale of point 1 relative to point 2</span>
-<a name="l00615"></a>00615 <span class="comment">     *   (dimensionless).</span>
-<a name="l00616"></a>00616 <span class="comment">     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).</span>
-<a name="l00617"></a>00617 <span class="comment">     * @return \e a12 arc length of between point 1 and point 2 (degrees).</span>
-<a name="l00618"></a>00618 <span class="comment">     *</span>
-<a name="l00619"></a>00619 <span class="comment">     * \e lat1 and \e lat2 should be in the range [-90, 90]; \e lon1 and \e</span>
-<a name="l00620"></a>00620 <span class="comment">     * lon2 should be in the range [-180, 360].  The values of \e azi1 and \e</span>
-<a name="l00621"></a>00621 <span class="comment">     * azi2 returned are in the range [-180, 180).</span>
-<a name="l00622"></a>00622 <span class="comment">     *</span>
-<a name="l00623"></a>00623 <span class="comment">     * If either point is at a pole, the azimuth is defined by keeping the</span>
-<a name="l00624"></a>00624 <span class="comment">     * longitude fixed and writing \e lat = 90 - \e eps or -90 + \e eps and</span>
-<a name="l00625"></a>00625 <span class="comment">     * taking the limit \e eps -> 0 from above.  If the routine fails to</span>
-<a name="l00626"></a>00626 <span class="comment">     * converge, then all the requested outputs are set to Math::NaN().  (Test</span>
-<a name="l00627"></a>00627 <span class="comment">     * for such results with Math::isnan.)  This is not expected to happen with</span>
-<a name="l00628"></a>00628 <span class="comment">     * ellipsoidal models of the earth; please report all cases where this</span>
-<a name="l00629"></a>00629 <span class="comment">     * occurs.</span>
-<a name="l00630"></a>00630 <span class="comment">     *</span>
-<a name="l00631"></a>00631 <span class="comment">     * The following functions are overloaded versions of Geodesic::Inverse</span>
-<a name="l00632"></a>00632 <span class="comment">     * which omit some of the output parameters.  Note, however, that the arc</span>
-<a name="l00633"></a>00633 <span class="comment">     * length is always computed and returned as the function value.</span>
-<a name="l00634"></a>00634 <span class="comment">     **********************************************************************/</span>
-<a name="l00635"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">00635</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Inverse(real lat1, real lon1, real lat2, real lon2,
-<a name="l00636"></a>00636                        real& s12, real& azi1, real& azi2, real& m12,
-<a name="l00637"></a>00637                        real& M12, real& M21, real& S12) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00638"></a>00638       <span class="keywordflow">return</span> GenInverse(lat1, lon1, lat2, lon2,
-<a name="l00639"></a>00639                         DISTANCE | AZIMUTH |
-<a name="l00640"></a>00640                         REDUCEDLENGTH | GEODESICSCALE | AREA,
-<a name="l00641"></a>00641                         s12, azi1, azi2, m12, M12, M21, S12);
-<a name="l00642"></a>00642     }
-<a name="l00643"></a>00643 <span class="comment"></span>
-<a name="l00644"></a>00644 <span class="comment">    /**</span>
-<a name="l00645"></a>00645 <span class="comment">     * See the documentation for Geodesic::Inverse.</span>
-<a name="l00646"></a>00646 <span class="comment">     **********************************************************************/</span>
-<a name="l00647"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a7c35218473b1784b1a80b8631f2d345d">00647</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Inverse(real lat1, real lon1, real lat2, real lon2,
-<a name="l00648"></a>00648                        real& s12) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00649"></a>00649       real t;
-<a name="l00650"></a>00650       <span class="keywordflow">return</span> GenInverse(lat1, lon1, lat2, lon2,
-<a name="l00651"></a>00651                         DISTANCE,
-<a name="l00652"></a>00652                         s12, t, t, t, t, t, t);
-<a name="l00653"></a>00653     }
-<a name="l00654"></a>00654 <span class="comment"></span>
-<a name="l00655"></a>00655 <span class="comment">    /**</span>
-<a name="l00656"></a>00656 <span class="comment">     * See the documentation for Geodesic::Inverse.</span>
-<a name="l00657"></a>00657 <span class="comment">     **********************************************************************/</span>
-<a name="l00658"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a599e587407713f7019906881d6116873">00658</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Inverse(real lat1, real lon1, real lat2, real lon2,
-<a name="l00659"></a>00659                        real& azi1, real& azi2) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00660"></a>00660       real t;
-<a name="l00661"></a>00661       <span class="keywordflow">return</span> GenInverse(lat1, lon1, lat2, lon2,
-<a name="l00662"></a>00662                         AZIMUTH,
-<a name="l00663"></a>00663                         t, azi1, azi2, t, t, t, t);
-<a name="l00664"></a>00664     }
-<a name="l00665"></a>00665 <span class="comment"></span>
-<a name="l00666"></a>00666 <span class="comment">    /**</span>
-<a name="l00667"></a>00667 <span class="comment">     * See the documentation for Geodesic::Inverse.</span>
-<a name="l00668"></a>00668 <span class="comment">     **********************************************************************/</span>
-<a name="l00669"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a3e07eef498c82ac25b482cadf129d8ae">00669</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Inverse(real lat1, real lon1, real lat2, real lon2,
-<a name="l00670"></a>00670                        real& s12, real& azi1, real& azi2)
-<a name="l00671"></a>00671       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00672"></a>00672       real t;
-<a name="l00673"></a>00673       <span class="keywordflow">return</span> GenInverse(lat1, lon1, lat2, lon2,
-<a name="l00674"></a>00674                         DISTANCE | AZIMUTH,
-<a name="l00675"></a>00675                         s12, azi1, azi2, t, t, t, t);
-<a name="l00676"></a>00676     }
-<a name="l00677"></a>00677 <span class="comment"></span>
-<a name="l00678"></a>00678 <span class="comment">    /**</span>
-<a name="l00679"></a>00679 <span class="comment">     * See the documentation for Geodesic::Inverse.</span>
-<a name="l00680"></a>00680 <span class="comment">     **********************************************************************/</span>
-<a name="l00681"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#aa6da95e73bec6443a03bf3928f401d19">00681</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Inverse(real lat1, real lon1, real lat2, real lon2,
-<a name="l00682"></a>00682                        real& s12, real& azi1, real& azi2, real& m12)
-<a name="l00683"></a>00683       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00684"></a>00684       real t;
-<a name="l00685"></a>00685       <span class="keywordflow">return</span> GenInverse(lat1, lon1, lat2, lon2,
-<a name="l00686"></a>00686                         DISTANCE | AZIMUTH | REDUCEDLENGTH,
-<a name="l00687"></a>00687                         s12, azi1, azi2, m12, t, t, t);
-<a name="l00688"></a>00688     }
-<a name="l00689"></a>00689 <span class="comment"></span>
-<a name="l00690"></a>00690 <span class="comment">    /**</span>
-<a name="l00691"></a>00691 <span class="comment">     * See the documentation for Geodesic::Inverse.</span>
-<a name="l00692"></a>00692 <span class="comment">     **********************************************************************/</span>
-<a name="l00693"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#ac668b5d0f82b28440dac5a44719fd61a">00693</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Inverse(real lat1, real lon1, real lat2, real lon2,
-<a name="l00694"></a>00694                        real& s12, real& azi1, real& azi2,
-<a name="l00695"></a>00695                        real& M12, real& M21) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00696"></a>00696       real t;
-<a name="l00697"></a>00697       <span class="keywordflow">return</span> GenInverse(lat1, lon1, lat2, lon2,
-<a name="l00698"></a>00698                         DISTANCE | AZIMUTH | GEODESICSCALE,
-<a name="l00699"></a>00699                         s12, azi1, azi2, t, M12, M21, t);
-<a name="l00700"></a>00700     }
-<a name="l00701"></a>00701 <span class="comment"></span>
-<a name="l00702"></a>00702 <span class="comment">    /**</span>
-<a name="l00703"></a>00703 <span class="comment">     * See the documentation for Geodesic::Inverse.</span>
-<a name="l00704"></a>00704 <span class="comment">     **********************************************************************/</span>
-<a name="l00705"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#ad3f98a5f2adf39ff26cf3d6fe32258a8">00705</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Inverse(real lat1, real lon1, real lat2, real lon2,
-<a name="l00706"></a>00706                        real& s12, real& azi1, real& azi2, real& m12,
-<a name="l00707"></a>00707                        real& M12, real& M21) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00708"></a>00708       real t;
-<a name="l00709"></a>00709       <span class="keywordflow">return</span> GenInverse(lat1, lon1, lat2, lon2,
-<a name="l00710"></a>00710                         DISTANCE | AZIMUTH |
-<a name="l00711"></a>00711                         REDUCEDLENGTH | GEODESICSCALE,
-<a name="l00712"></a>00712                         s12, azi1, azi2, m12, M12, M21, t);
-<a name="l00713"></a>00713     }<span class="comment"></span>
-<a name="l00714"></a>00714 <span class="comment">    ///@}</span>
-<a name="l00715"></a>00715 <span class="comment"></span><span class="comment"></span>
-<a name="l00716"></a>00716 <span class="comment">    /** \name General version of inverse geodesic solution.</span>
-<a name="l00717"></a>00717 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00718"></a>00718 <span class="comment">    ///@{</span>
-<a name="l00719"></a>00719 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00720"></a>00720 <span class="comment">     * The general inverse geodesic calculation.  Geodesic::Inverse is defined</span>
-<a name="l00721"></a>00721 <span class="comment">     * in terms of this function.</span>
-<a name="l00722"></a>00722 <span class="comment">     *</span>
-<a name="l00723"></a>00723 <span class="comment">     * @param[in] lat1 latitude of point 1 (degrees).</span>
-<a name="l00724"></a>00724 <span class="comment">     * @param[in] lon1 longitude of point 1 (degrees).</span>
-<a name="l00725"></a>00725 <span class="comment">     * @param[in] lat2 latitude of point 2 (degrees).</span>
-<a name="l00726"></a>00726 <span class="comment">     * @param[in] lon2 longitude of point 2 (degrees).</span>
-<a name="l00727"></a>00727 <span class="comment">     * @param[in] outmask a bitor'ed combination of Geodesic::mask values</span>
-<a name="l00728"></a>00728 <span class="comment">     *   specifying which of the following parameters should be set.</span>
-<a name="l00729"></a>00729 <span class="comment">     * @param[out] s12 distance between point 1 and point 2 (meters).</span>
-<a name="l00730"></a>00730 <span class="comment">     * @param[out] azi1 azimuth at point 1 (degrees).</span>
-<a name="l00731"></a>00731 <span class="comment">     * @param[out] azi2 (forward) azimuth at point 2 (degrees).</span>
-<a name="l00732"></a>00732 <span class="comment">     * @param[out] m12 reduced length of geodesic (meters).</span>
-<a name="l00733"></a>00733 <span class="comment">     * @param[out] M12 geodesic scale of point 2 relative to point 1</span>
-<a name="l00734"></a>00734 <span class="comment">     *   (dimensionless).</span>
-<a name="l00735"></a>00735 <span class="comment">     * @param[out] M21 geodesic scale of point 1 relative to point 2</span>
-<a name="l00736"></a>00736 <span class="comment">     *   (dimensionless).</span>
-<a name="l00737"></a>00737 <span class="comment">     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).</span>
-<a name="l00738"></a>00738 <span class="comment">     * @return \e a12 arc length of between point 1 and point 2 (degrees).</span>
-<a name="l00739"></a>00739 <span class="comment">     *</span>
-<a name="l00740"></a>00740 <span class="comment">     * The Geodesic::mask values possible for \e outmask are</span>
-<a name="l00741"></a>00741 <span class="comment">     * - \e outmask |= Geodesic::DISTANCE for the distance \e s12.</span>
-<a name="l00742"></a>00742 <span class="comment">     * - \e outmask |= Geodesic::AZIMUTH for the latitude \e azi2.</span>
-<a name="l00743"></a>00743 <span class="comment">     * - \e outmask |= Geodesic::REDUCEDLENGTH for the reduced length \e</span>
-<a name="l00744"></a>00744 <span class="comment">     *   m12.</span>
-<a name="l00745"></a>00745 <span class="comment">     * - \e outmask |= Geodesic::GEODESICSCALE for the geodesic scales \e</span>
-<a name="l00746"></a>00746 <span class="comment">     *   M12 and \e M21.</span>
-<a name="l00747"></a>00747 <span class="comment">     * - \e outmask |= Geodesic::AREA for the area \e S12.</span>
-<a name="l00748"></a>00748 <span class="comment">     * .</span>
-<a name="l00749"></a>00749 <span class="comment">     * The arc length is always computed and returned as the function value.</span>
-<a name="l00750"></a>00750 <span class="comment">     **********************************************************************/</span>
-<a name="l00751"></a>00751     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> GenInverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">re [...]
-<a name="l00752"></a>00752                           <span class="keywordtype">unsigned</span> outmask,
-<a name="l00753"></a>00753                           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& s12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi2,
-<a name="l00754"></a>00754                           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& m12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M12, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& M21, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& S12)
-<a name="l00755"></a>00755       <span class="keyword">const</span> <span class="keywordflow">throw</span>();<span class="comment"></span>
-<a name="l00756"></a>00756 <span class="comment">    ///@}</span>
-<a name="l00757"></a>00757 <span class="comment"></span><span class="comment"></span>
-<a name="l00758"></a>00758 <span class="comment">    /** \name Interface to GeodesicLine.</span>
-<a name="l00759"></a>00759 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00760"></a>00760 <span class="comment">    ///@{</span>
-<a name="l00761"></a>00761 <span class="comment"></span><span class="comment"></span>
-<a name="l00762"></a>00762 <span class="comment">    /**</span>
-<a name="l00763"></a>00763 <span class="comment">     * Set up to compute several points on a singe geodesic.</span>
-<a name="l00764"></a>00764 <span class="comment">     *</span>
-<a name="l00765"></a>00765 <span class="comment">     * @param[in] lat1 latitude of point 1 (degrees).</span>
-<a name="l00766"></a>00766 <span class="comment">     * @param[in] lon1 longitude of point 1 (degrees).</span>
-<a name="l00767"></a>00767 <span class="comment">     * @param[in] azi1 azimuth at point 1 (degrees).</span>
-<a name="l00768"></a>00768 <span class="comment">     * @param[in] caps bitor'ed combination of Geodesic::mask values</span>
-<a name="l00769"></a>00769 <span class="comment">     *   specifying the capabilities the GeodesicLine object should possess,</span>
-<a name="l00770"></a>00770 <span class="comment">     *   i.e., which quantities can be returned in calls to</span>
-<a name="l00771"></a>00771 <span class="comment">     *   GeodesicLib::Position.</span>
-<a name="l00772"></a>00772 <span class="comment">     *</span>
-<a name="l00773"></a>00773 <span class="comment">     * \e lat1 should be in the range [-90, 90]; \e lon1 and \e azi1 should be</span>
-<a name="l00774"></a>00774 <span class="comment">     * in the range [-180, 360].</span>
-<a name="l00775"></a>00775 <span class="comment">     *</span>
-<a name="l00776"></a>00776 <span class="comment">     * The Geodesic::mask values are</span>
-<a name="l00777"></a>00777 <span class="comment">     * - \e caps |= Geodesic::LATITUDE for the latitude \e lat2; this is</span>
-<a name="l00778"></a>00778 <span class="comment">     *   added automatically</span>
-<a name="l00779"></a>00779 <span class="comment">     * - \e caps |= Geodesic::LONGITUDE for the latitude \e lon2</span>
-<a name="l00780"></a>00780 <span class="comment">     * - \e caps |= Geodesic::AZIMUTH for the latitude \e azi2; this is</span>
-<a name="l00781"></a>00781 <span class="comment">     *   added automatically</span>
-<a name="l00782"></a>00782 <span class="comment">     * - \e caps |= Geodesic::DISTANCE for the distance \e s12</span>
-<a name="l00783"></a>00783 <span class="comment">     * - \e caps |= Geodesic::REDUCEDLENGTH for the reduced length \e m12</span>
-<a name="l00784"></a>00784 <span class="comment">     * - \e caps |= Geodesic::GEODESICSCALE for the geodesic scales \e M12</span>
-<a name="l00785"></a>00785 <span class="comment">     *   and \e M21</span>
-<a name="l00786"></a>00786 <span class="comment">     * - \e caps |= Geodesic::AREA for the area \e S12</span>
-<a name="l00787"></a>00787 <span class="comment">     * - \e caps |= Geodesic::DISTANCE_IN permits the length of the</span>
-<a name="l00788"></a>00788 <span class="comment">     *   geodesic to be given in terms of \e s12; without this capability the</span>
-<a name="l00789"></a>00789 <span class="comment">     *   length can only be specified in terms of arc length.</span>
-<a name="l00790"></a>00790 <span class="comment">     * .</span>
-<a name="l00791"></a>00791 <span class="comment">     * The default value of \e caps is Geodesic::ALL which turns on all the</span>
-<a name="l00792"></a>00792 <span class="comment">     * capabilities.</span>
-<a name="l00793"></a>00793 <span class="comment">     *</span>
-<a name="l00794"></a>00794 <span class="comment">     * If the point is at a pole, the azimuth is defined by keeping the \e lon1</span>
-<a name="l00795"></a>00795 <span class="comment">     * fixed and writing \e lat1 = 90 - \e eps or -90 + \e eps and taking the</span>
-<a name="l00796"></a>00796 <span class="comment">     * limit \e eps -> 0 from above.</span>
-<a name="l00797"></a>00797 <span class="comment">     **********************************************************************/</span>
-<a name="l00798"></a>00798     <a class="code" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> Line(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> azi1, <span class="keywordtype">unsigned</span> caps = ALL)
-<a name="l00799"></a>00799       <span class="keyword">const</span> throw();
-<a name="l00800"></a>00800 <span class="comment"></span>
-<a name="l00801"></a>00801 <span class="comment">    ///@}</span>
-<a name="l00802"></a>00802 <span class="comment"></span><span class="comment"></span>
-<a name="l00803"></a>00803 <span class="comment">    /** \name Inspector functions.</span>
-<a name="l00804"></a>00804 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00805"></a>00805 <span class="comment">    ///@{</span>
-<a name="l00806"></a>00806 <span class="comment"></span><span class="comment"></span>
-<a name="l00807"></a>00807 <span class="comment">    /**</span>
-<a name="l00808"></a>00808 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00809"></a>00809 <span class="comment">     *   the value used in the constructor.</span>
-<a name="l00810"></a>00810 <span class="comment">     **********************************************************************/</span>
-<a name="l00811"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#acd276bb113cfdf3fe59aa43fb3d7289b">00811</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MajorRadius() const throw() { <span class="keywordflow">return</span> _a; }
-<a name="l00812"></a>00812 <span class="comment"></span>
-<a name="l00813"></a>00813 <span class="comment">    /**</span>
-<a name="l00814"></a>00814 <span class="comment">     * @return \e f the  flattening of the ellipsoid.  This is the</span>
-<a name="l00815"></a>00815 <span class="comment">     *   value used in the constructor.</span>
-<a name="l00816"></a>00816 <span class="comment">     **********************************************************************/</span>
-<a name="l00817"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a7abba09bec76f8f97f1e3bc81a7456e2">00817</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geodesic.html#a7abba09bec76f8f97f1e3bc81a7456e2">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _f; }
-<a name="l00818"></a>00818 <span class="comment"></span>
-<a name="l00819"></a>00819 <span class="comment">    /// \cond SKIP</span>
-<a name="l00820"></a>00820 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00821"></a>00821 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00822"></a>00822 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00823"></a>00823 <span class="comment">     **********************************************************************/</span>
-<a name="l00824"></a>00824     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> 1/_f; }<span class="comment"></span>
-<a name="l00825"></a>00825 <span class="comment">    /// \endcond</span>
-<a name="l00826"></a>00826 <span class="comment"></span><span class="comment"></span>
-<a name="l00827"></a>00827 <span class="comment">    /**</span>
-<a name="l00828"></a>00828 <span class="comment">     * @return total area of ellipsoid in meters<sup>2</sup>.  The area of a</span>
-<a name="l00829"></a>00829 <span class="comment">     *   polygon encircling a pole can be found by adding</span>
-<a name="l00830"></a>00830 <span class="comment">     *   Geodesic::EllipsoidArea()/2 to the sum of \e S12 for each side of the</span>
-<a name="l00831"></a>00831 <span class="comment">     *   polygon.</span>
-<a name="l00832"></a>00832 <span class="comment">     **********************************************************************/</span>
-<a name="l00833"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#a0dde7d12d4bafedef63d371c5fe40f50">00833</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real EllipsoidArea() <span class="keyword">const</span> throw()
-<a name="l00834"></a>00834     { <span class="keywordflow">return</span> 4 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::pi<real>() * _c2; }<span class="comment"></span>
-<a name="l00835"></a>00835 <span class="comment">    ///@}</span>
-<a name="l00836"></a>00836 <span class="comment"></span><span class="comment"></span>
-<a name="l00837"></a>00837 <span class="comment">    /**</span>
-<a name="l00838"></a>00838 <span class="comment">     * A global instantiation of Geodesic with the parameters for the WGS84</span>
-<a name="l00839"></a>00839 <span class="comment">     * ellipsoid.</span>
-<a name="l00840"></a>00840 <span class="comment">     **********************************************************************/</span>
-<a name="l00841"></a><a class="code" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">00841</a>     <span class="keyword">static</span> <span class="keyword">const</span> Geodesic <a class="code" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">WGS84</a>;
-<a name="l00842"></a>00842 
-<a name="l00843"></a>00843   };
-<a name="l00844"></a>00844 
-<a name="l00845"></a>00845 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00846"></a>00846 
-<a name="l00847"></a>00847 <span class="preprocessor">#endif  // GEOGRAPHICLIB_GEODESIC_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geographic.tag b/doc/html/Geographic.tag
deleted file mode 100644
index 5dffa3d..0000000
--- a/doc/html/Geographic.tag
+++ /dev/null
@@ -1,5663 +0,0 @@
-<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
-<tagfile>
-  <compound kind="page">
-    <name>index</name>
-    <title>Geographic library</title>
-    <filename>index</filename>
-    <docanchor file="index">contents</docanchor>
-    <docanchor file="index">download</docanchor>
-    <docanchor file="index">abstract</docanchor>
-  </compound>
-  <compound kind="file">
-    <name>Accumulator.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>Accumulator_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::Accumulator</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_ACCUMULATOR_HPP</name>
-      <anchorfile>Accumulator_8hpp.html</anchorfile>
-      <anchor>af2ea0de968b20eb37534fa6baedcba54</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>AlbersEqualArea.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>AlbersEqualArea_8cpp</filename>
-    <includes id="AlbersEqualArea_8hpp" name="AlbersEqualArea.hpp" local="no" imported="no">GeographicLib/AlbersEqualArea.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_ALBERSEQUALAREA_CPP</name>
-      <anchorfile>AlbersEqualArea_8cpp.html</anchorfile>
-      <anchor>a0cbf05d716ed87a0d1bc3cc16e6adb2a</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>AlbersEqualArea.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>AlbersEqualArea_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::AlbersEqualArea</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_ALBERSEQUALAREA_HPP</name>
-      <anchorfile>AlbersEqualArea_8hpp.html</anchorfile>
-      <anchor>aa9494d369d907d2b285fcb2f45b4689c</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>AzimuthalEquidistant.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>AzimuthalEquidistant_8cpp</filename>
-    <includes id="AzimuthalEquidistant_8hpp" name="AzimuthalEquidistant.hpp" local="no" imported="no">GeographicLib/AzimuthalEquidistant.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP</name>
-      <anchorfile>AzimuthalEquidistant_8cpp.html</anchorfile>
-      <anchor>a66c8226c0b34ef5b0138d44829f5c394</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>AzimuthalEquidistant.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>AzimuthalEquidistant_8hpp</filename>
-    <includes id="Geodesic_8hpp" name="Geodesic.hpp" local="no" imported="no">GeographicLib/Geodesic.hpp</includes>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::AzimuthalEquidistant</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP</name>
-      <anchorfile>AzimuthalEquidistant_8hpp.html</anchorfile>
-      <anchor>a70d20e83eaef9177a9dbc4503fae17b7</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>CartConvert.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>CartConvert_8cpp</filename>
-    <includes id="Geocentric_8hpp" name="Geocentric.hpp" local="no" imported="no">GeographicLib/Geocentric.hpp</includes>
-    <includes id="LocalCartesian_8hpp" name="LocalCartesian.hpp" local="no" imported="no">GeographicLib/LocalCartesian.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>CartConvert_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>CassiniSoldner.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>CassiniSoldner_8cpp</filename>
-    <includes id="CassiniSoldner_8hpp" name="CassiniSoldner.hpp" local="no" imported="no">GeographicLib/CassiniSoldner.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_CASSINISOLDNER_CPP</name>
-      <anchorfile>CassiniSoldner_8cpp.html</anchorfile>
-      <anchor>a91edbe2e2eaf2776b80aecf2107909d4</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>CassiniSoldner.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>CassiniSoldner_8hpp</filename>
-    <includes id="Geodesic_8hpp" name="Geodesic.hpp" local="no" imported="no">GeographicLib/Geodesic.hpp</includes>
-    <includes id="GeodesicLine_8hpp" name="GeodesicLine.hpp" local="no" imported="no">GeographicLib/GeodesicLine.hpp</includes>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::CassiniSoldner</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_CASSINISOLDNER_HPP</name>
-      <anchorfile>CassiniSoldner_8hpp.html</anchorfile>
-      <anchor>ab674f10f5e4e3b25dc68c65fa408e315</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>CircularEngine.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>CircularEngine_8cpp</filename>
-    <includes id="CircularEngine_8hpp" name="CircularEngine.hpp" local="no" imported="no">GeographicLib/CircularEngine.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_CIRCULARENGINE_CPP</name>
-      <anchorfile>CircularEngine_8cpp.html</anchorfile>
-      <anchor>af686808d87a6f2cd0b1305f1aeac536d</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>CircularEngine.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>CircularEngine_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="SphericalEngine_8hpp" name="SphericalEngine.hpp" local="no" imported="no">GeographicLib/SphericalEngine.hpp</includes>
-    <class kind="class">GeographicLib::CircularEngine</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_CIRCULARENGINE_HPP</name>
-      <anchorfile>CircularEngine_8hpp.html</anchorfile>
-      <anchor>abfcea264d0e3f7a45c8ff8de7f2e539f</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>ConicProj.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>ConicProj_8cpp</filename>
-    <includes id="LambertConformalConic_8hpp" name="LambertConformalConic.hpp" local="no" imported="no">GeographicLib/LambertConformalConic.hpp</includes>
-    <includes id="AlbersEqualArea_8hpp" name="AlbersEqualArea.hpp" local="no" imported="no">GeographicLib/AlbersEqualArea.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>ConicProj_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Constants.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>Constants_8hpp</filename>
-    <includes id="Math_8hpp" name="Math.hpp" local="no" imported="no">GeographicLib/Math.hpp</includes>
-    <class kind="class">GeographicLib::Constants</class>
-    <class kind="class">GeographicLib::GeographicErr</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_CONSTANTS_HPP</name>
-      <anchorfile>Constants_8hpp.html</anchorfile>
-      <anchor>a16d93570265d8037f7dc7d5d026b2aa4</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>STATIC_ASSERT</name>
-      <anchorfile>Constants_8hpp.html</anchorfile>
-      <anchor>a8f24445c1bccd69b63e365aa5d5bb129</anchor>
-      <arglist>(cond, reason)</arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>RCSID_DECL</name>
-      <anchorfile>Constants_8hpp.html</anchorfile>
-      <anchor>af90fa899707a2ac513d5e4c76853bbf5</anchor>
-      <arglist>(x)</arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHIC_EXPORT</name>
-      <anchorfile>Constants_8hpp.html</anchorfile>
-      <anchor>a59a204dcc2942f86d7b24b4233aad719</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>DMS.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>DMS_8cpp</filename>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_DMS_CPP</name>
-      <anchorfile>DMS_8cpp.html</anchorfile>
-      <anchor>a6ef96ce6d2929e11dc6ec87433f4d7d1</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>DMS.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>DMS_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <class kind="class">GeographicLib::DMS</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_DMS_HPP</name>
-      <anchorfile>DMS_8hpp.html</anchorfile>
-      <anchor>a844e4c8afc70c59c842f4553ce40b9c6</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>EllipticFunction.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>EllipticFunction_8cpp</filename>
-    <includes id="EllipticFunction_8hpp" name="EllipticFunction.hpp" local="no" imported="no">GeographicLib/EllipticFunction.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP</name>
-      <anchorfile>EllipticFunction_8cpp.html</anchorfile>
-      <anchor>a7843c8be162380a81bdd1c48d00a475b</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>EllipticFunction.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>EllipticFunction_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::EllipticFunction</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP</name>
-      <anchorfile>EllipticFunction_8hpp.html</anchorfile>
-      <anchor>a94cb49e5d48fa1a0399e4303f1ad162a</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Geocentric.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>Geocentric_8cpp</filename>
-    <includes id="Geocentric_8hpp" name="Geocentric.hpp" local="no" imported="no">GeographicLib/Geocentric.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEOCENTRIC_CPP</name>
-      <anchorfile>Geocentric_8cpp.html</anchorfile>
-      <anchor>a290e33302d7c35b9465d73f33dcb0774</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Geocentric.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>Geocentric_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::Geocentric</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEOCENTRIC_HPP</name>
-      <anchorfile>Geocentric_8hpp.html</anchorfile>
-      <anchor>a29517663058dd79a39541248f58db55f</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GeoConvert.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>GeoConvert_8cpp</filename>
-    <includes id="GeoCoords_8hpp" name="GeoCoords.hpp" local="no" imported="no">GeographicLib/GeoCoords.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>GeoConvert_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GeoCoords.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>GeoCoords_8cpp</filename>
-    <includes id="GeoCoords_8hpp" name="GeoCoords.hpp" local="no" imported="no">GeographicLib/GeoCoords.hpp</includes>
-    <includes id="MGRS_8hpp" name="MGRS.hpp" local="no" imported="no">GeographicLib/MGRS.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEOCOORDS_CPP</name>
-      <anchorfile>GeoCoords_8cpp.html</anchorfile>
-      <anchor>a8ca6643c26cc3909b0935409c1dbc403</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GeoCoords.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>GeoCoords_8hpp</filename>
-    <includes id="UTMUPS_8hpp" name="UTMUPS.hpp" local="no" imported="no">GeographicLib/UTMUPS.hpp</includes>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::GeoCoords</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEOCOORDS_HPP</name>
-      <anchorfile>GeoCoords_8hpp.html</anchorfile>
-      <anchor>a20841ff1ac217be34150ce32c5ad4bb8</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Geod.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>Geod_8cpp</filename>
-    <includes id="Geodesic_8hpp" name="Geodesic.hpp" local="no" imported="no">GeographicLib/Geodesic.hpp</includes>
-    <includes id="GeodesicLine_8hpp" name="GeodesicLine.hpp" local="no" imported="no">GeographicLib/GeodesicLine.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <member kind="typedef">
-      <type>GeographicLib::Math::real</type>
-      <name>real</name>
-      <anchorfile>Geod_8cpp.html</anchorfile>
-      <anchor>a5caf95d46b184d9ca1d3764b3781b3c9</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>LatLonString</name>
-      <anchorfile>Geod_8cpp.html</anchorfile>
-      <anchor>a8c3a2a4c039b4d0118416afd97a45fcf</anchor>
-      <arglist>(real lat, real lon, int prec, bool dms, char dmssep)</arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>AzimuthString</name>
-      <anchorfile>Geod_8cpp.html</anchorfile>
-      <anchor>adeb84b4732b410c9fdccf799037ef245</anchor>
-      <arglist>(real azi, int prec, bool dms, char dmssep)</arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>DistanceStrings</name>
-      <anchorfile>Geod_8cpp.html</anchorfile>
-      <anchor>a600021136749afe8d757335563b5b544</anchor>
-      <arglist>(real s12, real a12, bool full, bool arcmode, int prec, bool dms)</arglist>
-    </member>
-    <member kind="function">
-      <type>real</type>
-      <name>ReadDistance</name>
-      <anchorfile>Geod_8cpp.html</anchorfile>
-      <anchor>a01ac56deedd203bd66c8c7328654b7e9</anchor>
-      <arglist>(const std::string &s, bool arcmode)</arglist>
-    </member>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>Geod_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Geodesic.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>Geodesic_8cpp</filename>
-    <includes id="Geodesic_8hpp" name="Geodesic.hpp" local="no" imported="no">GeographicLib/Geodesic.hpp</includes>
-    <includes id="GeodesicLine_8hpp" name="GeodesicLine.hpp" local="no" imported="no">GeographicLib/GeodesicLine.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEODESIC_CPP</name>
-      <anchorfile>Geodesic_8cpp.html</anchorfile>
-      <anchor>a61dcde881d6a80b561fc2b4c4b327883</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Geodesic.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>Geodesic_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::Geodesic</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEODESIC_HPP</name>
-      <anchorfile>Geodesic_8hpp.html</anchorfile>
-      <anchor>ab538cb707d6ff36056dd372c7e9e6d7e</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOD_ORD</name>
-      <anchorfile>Geodesic_8hpp.html</anchorfile>
-      <anchor>a1927ca941a173c95631417cbd8cc8e0c</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GeodesicLine.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>GeodesicLine_8cpp</filename>
-    <includes id="GeodesicLine_8hpp" name="GeodesicLine.hpp" local="no" imported="no">GeographicLib/GeodesicLine.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEODESICLINE_CPP</name>
-      <anchorfile>GeodesicLine_8cpp.html</anchorfile>
-      <anchor>a8c325bf3ebfa8126888b62b16495d64e</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GeodesicLine.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>GeodesicLine_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="Geodesic_8hpp" name="Geodesic.hpp" local="no" imported="no">GeographicLib/Geodesic.hpp</includes>
-    <class kind="class">GeographicLib::GeodesicLine</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEODESICLINE_HPP</name>
-      <anchorfile>GeodesicLine_8hpp.html</anchorfile>
-      <anchor>a45305d595b59bfb061a5a0c6e1044485</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GeodesicProj.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>GeodesicProj_8cpp</filename>
-    <includes id="Geodesic_8hpp" name="Geodesic.hpp" local="no" imported="no">GeographicLib/Geodesic.hpp</includes>
-    <includes id="AzimuthalEquidistant_8hpp" name="AzimuthalEquidistant.hpp" local="no" imported="no">GeographicLib/AzimuthalEquidistant.hpp</includes>
-    <includes id="CassiniSoldner_8hpp" name="CassiniSoldner.hpp" local="no" imported="no">GeographicLib/CassiniSoldner.hpp</includes>
-    <includes id="Gnomonic_8hpp" name="Gnomonic.hpp" local="no" imported="no">GeographicLib/Gnomonic.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>GeodesicProj_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Geographic.doc</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/doc/</path>
-    <filename>Geographic_8doc</filename>
-  </compound>
-  <compound kind="file">
-    <name>Geoid.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>Geoid_8cpp</filename>
-    <includes id="Geoid_8hpp" name="Geoid.hpp" local="no" imported="no">GeographicLib/Geoid.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEOID_CPP</name>
-      <anchorfile>Geoid_8cpp.html</anchorfile>
-      <anchor>ad2cadd66a2a8fe0322579f4a1922a907</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_DATA</name>
-      <anchorfile>Geoid_8cpp.html</anchorfile>
-      <anchor>a45687ef771d809c1c369daea074cc109</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOID_DEFAULT_NAME</name>
-      <anchorfile>Geoid_8cpp.html</anchorfile>
-      <anchor>a2999d90c0556a04490ea239ddcb052b8</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Geoid.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>Geoid_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::Geoid</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GEOID_HPP</name>
-      <anchorfile>Geoid_8hpp.html</anchorfile>
-      <anchor>a81966978f2fe7fad1effabc667a99820</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>PGM_PIXEL_WIDTH</name>
-      <anchorfile>Geoid_8hpp.html</anchorfile>
-      <anchor>aa34d236045b829973cbc0d958d3ed139</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GeoidEval.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>GeoidEval_8cpp</filename>
-    <includes id="Geoid_8hpp" name="Geoid.hpp" local="no" imported="no">GeographicLib/Geoid.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <includes id="GeoCoords_8hpp" name="GeoCoords.hpp" local="no" imported="no">GeographicLib/GeoCoords.hpp</includes>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>GeoidEval_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Gnomonic.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>Gnomonic_8cpp</filename>
-    <includes id="Gnomonic_8hpp" name="Gnomonic.hpp" local="no" imported="no">GeographicLib/Gnomonic.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GNOMONIC_CPP</name>
-      <anchorfile>Gnomonic_8cpp.html</anchorfile>
-      <anchor>ad62c02d3264b4069476f2f1aa21f223e</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Gnomonic.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>Gnomonic_8hpp</filename>
-    <includes id="Geodesic_8hpp" name="Geodesic.hpp" local="no" imported="no">GeographicLib/Geodesic.hpp</includes>
-    <includes id="GeodesicLine_8hpp" name="GeodesicLine.hpp" local="no" imported="no">GeographicLib/GeodesicLine.hpp</includes>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::Gnomonic</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GNOMONIC_HPP</name>
-      <anchorfile>Gnomonic_8hpp.html</anchorfile>
-      <anchor>af85f3f443620d568666f526ee193308a</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Gravity.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>Gravity_8cpp</filename>
-    <includes id="GravityModel_8hpp" name="GravityModel.hpp" local="no" imported="no">GeographicLib/GravityModel.hpp</includes>
-    <includes id="GravityCircle_8hpp" name="GravityCircle.hpp" local="no" imported="no">GeographicLib/GravityCircle.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>Gravity_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GravityCircle.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>GravityCircle_8cpp</filename>
-    <includes id="GravityCircle_8hpp" name="GravityCircle.hpp" local="no" imported="no">GeographicLib/GravityCircle.hpp</includes>
-    <includes id="Geocentric_8hpp" name="Geocentric.hpp" local="no" imported="no">GeographicLib/Geocentric.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GRAVITYCIRCLE_CPP</name>
-      <anchorfile>GravityCircle_8cpp.html</anchorfile>
-      <anchor>a57d7b0412922810faed5fb35173f561c</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GRAVITY_DEFAULT_PATH</name>
-      <anchorfile>GravityCircle_8cpp.html</anchorfile>
-      <anchor>a21f239249a382b864294a231061d97d4</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GravityCircle.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>GravityCircle_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="CircularEngine_8hpp" name="CircularEngine.hpp" local="no" imported="no">GeographicLib/CircularEngine.hpp</includes>
-    <includes id="GravityModel_8hpp" name="GravityModel.hpp" local="no" imported="no">GeographicLib/GravityModel.hpp</includes>
-    <class kind="class">GeographicLib::GravityCircle</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GRAVITYCIRCLE_HPP</name>
-      <anchorfile>GravityCircle_8hpp.html</anchorfile>
-      <anchor>a07d4fadabf913f2115556a6de80f6115</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GravityModel.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>GravityModel_8cpp</filename>
-    <includes id="GravityModel_8hpp" name="GravityModel.hpp" local="no" imported="no">GeographicLib/GravityModel.hpp</includes>
-    <includes id="SphericalEngine_8hpp" name="SphericalEngine.hpp" local="no" imported="no">GeographicLib/SphericalEngine.hpp</includes>
-    <includes id="GravityCircle_8hpp" name="GravityCircle.hpp" local="no" imported="no">GeographicLib/GravityCircle.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GRAVITYMODEL_CPP</name>
-      <anchorfile>GravityModel_8cpp.html</anchorfile>
-      <anchor>a65e1bf85112eafa00622f95531afc180</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_DATA</name>
-      <anchorfile>GravityModel_8cpp.html</anchorfile>
-      <anchor>a45687ef771d809c1c369daea074cc109</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GRAVITY_DEFAULT_NAME</name>
-      <anchorfile>GravityModel_8cpp.html</anchorfile>
-      <anchor>a05d4f5b688275acf184933e85a0063bd</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>GravityModel.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>GravityModel_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="NormalGravity_8hpp" name="NormalGravity.hpp" local="no" imported="no">GeographicLib/NormalGravity.hpp</includes>
-    <includes id="SphericalHarmonic_8hpp" name="SphericalHarmonic.hpp" local="no" imported="no">GeographicLib/SphericalHarmonic.hpp</includes>
-    <includes id="SphericalHarmonic1_8hpp" name="SphericalHarmonic1.hpp" local="no" imported="no">GeographicLib/SphericalHarmonic1.hpp</includes>
-    <class kind="class">GeographicLib::GravityModel</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_GRAVITYMODEL_HPP</name>
-      <anchorfile>GravityModel_8hpp.html</anchorfile>
-      <anchor>ace85f3a4d35d4657064e289e2bf57dab</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>LambertConformalConic.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>LambertConformalConic_8cpp</filename>
-    <includes id="LambertConformalConic_8hpp" name="LambertConformalConic.hpp" local="no" imported="no">GeographicLib/LambertConformalConic.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP</name>
-      <anchorfile>LambertConformalConic_8cpp.html</anchorfile>
-      <anchor>adf8d4ab2a5f0e2571915d27d31758930</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>LambertConformalConic.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>LambertConformalConic_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::LambertConformalConic</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP</name>
-      <anchorfile>LambertConformalConic_8hpp.html</anchorfile>
-      <anchor>aac2fbd995d5b75016781c58b97093c67</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>LocalCartesian.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>LocalCartesian_8cpp</filename>
-    <includes id="LocalCartesian_8hpp" name="LocalCartesian.hpp" local="no" imported="no">GeographicLib/LocalCartesian.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_LOCALCARTESIAN_CPP</name>
-      <anchorfile>LocalCartesian_8cpp.html</anchorfile>
-      <anchor>a0917de4aed4abb985b1e2830077aea45</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>LocalCartesian.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>LocalCartesian_8hpp</filename>
-    <includes id="Geocentric_8hpp" name="Geocentric.hpp" local="no" imported="no">GeographicLib/Geocentric.hpp</includes>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::LocalCartesian</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_LOCALCARTESIAN_HPP</name>
-      <anchorfile>LocalCartesian_8hpp.html</anchorfile>
-      <anchor>a628d4dcde137e8249cb7fdbcaab30acd</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>MagneticCircle.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>MagneticCircle_8cpp</filename>
-    <includes id="MagneticCircle_8hpp" name="MagneticCircle.hpp" local="no" imported="no">GeographicLib/MagneticCircle.hpp</includes>
-    <includes id="Geocentric_8hpp" name="Geocentric.hpp" local="no" imported="no">GeographicLib/Geocentric.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_MAGNETICCIRCLE_CPP</name>
-      <anchorfile>MagneticCircle_8cpp.html</anchorfile>
-      <anchor>a0ca864788d9c9fdd4987afdc16db17ac</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>MAGNETIC_DEFAULT_PATH</name>
-      <anchorfile>MagneticCircle_8cpp.html</anchorfile>
-      <anchor>adda468b8dc758dd6d082ccf33c5e1b75</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>MagneticCircle.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>MagneticCircle_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="CircularEngine_8hpp" name="CircularEngine.hpp" local="no" imported="no">GeographicLib/CircularEngine.hpp</includes>
-    <class kind="class">GeographicLib::MagneticCircle</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_MAGNETICCIRCLE_HPP</name>
-      <anchorfile>MagneticCircle_8hpp.html</anchorfile>
-      <anchor>a5bc784ff412658d1c422828506b424da</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>MagneticField.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>MagneticField_8cpp</filename>
-    <includes id="MagneticModel_8hpp" name="MagneticModel.hpp" local="no" imported="no">GeographicLib/MagneticModel.hpp</includes>
-    <includes id="MagneticCircle_8hpp" name="MagneticCircle.hpp" local="no" imported="no">GeographicLib/MagneticCircle.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>MagneticField_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>MagneticModel.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>MagneticModel_8cpp</filename>
-    <includes id="MagneticModel_8hpp" name="MagneticModel.hpp" local="no" imported="no">GeographicLib/MagneticModel.hpp</includes>
-    <includes id="SphericalEngine_8hpp" name="SphericalEngine.hpp" local="no" imported="no">GeographicLib/SphericalEngine.hpp</includes>
-    <includes id="MagneticCircle_8hpp" name="MagneticCircle.hpp" local="no" imported="no">GeographicLib/MagneticCircle.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_MAGNETICMODEL_CPP</name>
-      <anchorfile>MagneticModel_8cpp.html</anchorfile>
-      <anchor>ac744ec56ccbc33cff2c75c204b4c7ae1</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_DATA</name>
-      <anchorfile>MagneticModel_8cpp.html</anchorfile>
-      <anchor>a45687ef771d809c1c369daea074cc109</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>MAGNETIC_DEFAULT_NAME</name>
-      <anchorfile>MagneticModel_8cpp.html</anchorfile>
-      <anchor>a302055ff69e445c8103c09913de840ff</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>MagneticModel.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>MagneticModel_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="Geocentric_8hpp" name="Geocentric.hpp" local="no" imported="no">GeographicLib/Geocentric.hpp</includes>
-    <includes id="SphericalHarmonic_8hpp" name="SphericalHarmonic.hpp" local="no" imported="no">GeographicLib/SphericalHarmonic.hpp</includes>
-    <class kind="class">GeographicLib::MagneticModel</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_MAGNETICMODEL_HPP</name>
-      <anchorfile>MagneticModel_8hpp.html</anchorfile>
-      <anchor>a8f9f091785b789fbe080c650bc0b8654</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Math.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>Math_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::Math</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_MATH_HPP</name>
-      <anchorfile>Math_8hpp.html</anchorfile>
-      <anchor>afb2818ef5e2f2bed96dcaa151b3edca4</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_CPLUSPLUS11_MATH</name>
-      <anchorfile>Math_8hpp.html</anchorfile>
-      <anchor>a2769cdfa2277e2728e4e157ec3f6318b</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>WORDS_BIGENDIAN</name>
-      <anchorfile>Math_8hpp.html</anchorfile>
-      <anchor>a82e69009d3cd108c8aad8afe44fb1132</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_PREC</name>
-      <anchorfile>Math_8hpp.html</anchorfile>
-      <anchor>a8df061fdb3d6e90d150d4fdd749f96b1</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>MGRS.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>MGRS_8cpp</filename>
-    <includes id="MGRS_8hpp" name="MGRS.hpp" local="no" imported="no">GeographicLib/MGRS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_MGRS_CPP</name>
-      <anchorfile>MGRS_8cpp.html</anchorfile>
-      <anchor>a7882927f72a62a7131868e387edd4dac</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>MGRS.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>MGRS_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="UTMUPS_8hpp" name="UTMUPS.hpp" local="no" imported="no">GeographicLib/UTMUPS.hpp</includes>
-    <class kind="class">GeographicLib::MGRS</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_MGRS_HPP</name>
-      <anchorfile>MGRS_8hpp.html</anchorfile>
-      <anchor>a1c5e778121820c6ec16b6180ffab51ac</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>NormalGravity.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>NormalGravity_8cpp</filename>
-    <includes id="NormalGravity_8hpp" name="NormalGravity.hpp" local="no" imported="no">GeographicLib/NormalGravity.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_NORMALGRAVITY_CPP</name>
-      <anchorfile>NormalGravity_8cpp.html</anchorfile>
-      <anchor>ae09694799ad8f72c9b216b9729848655</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>NormalGravity.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>NormalGravity_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="Geocentric_8hpp" name="Geocentric.hpp" local="no" imported="no">GeographicLib/Geocentric.hpp</includes>
-    <class kind="class">GeographicLib::NormalGravity</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_NORMALGRAVITY_HPP</name>
-      <anchorfile>NormalGravity_8hpp.html</anchorfile>
-      <anchor>a3f83059dc418514a79fa4e6c94869b58</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>OSGB.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>OSGB_8cpp</filename>
-    <includes id="OSGB_8hpp" name="OSGB.hpp" local="no" imported="no">GeographicLib/OSGB.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_OSGB_CPP</name>
-      <anchorfile>OSGB_8cpp.html</anchorfile>
-      <anchor>af7fa9aa83a3be95cccc572fc3b399b58</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>OSGB.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>OSGB_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="TransverseMercator_8hpp" name="TransverseMercator.hpp" local="no" imported="no">GeographicLib/TransverseMercator.hpp</includes>
-    <class kind="class">GeographicLib::OSGB</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_OSGB_HPP</name>
-      <anchorfile>OSGB_8hpp.html</anchorfile>
-      <anchor>a786c5942146679103feb716bea66a0a7</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Planimeter.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>Planimeter_8cpp</filename>
-    <includes id="PolygonArea_8hpp" name="PolygonArea.hpp" local="no" imported="no">GeographicLib/PolygonArea.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <includes id="GeoCoords_8hpp" name="GeoCoords.hpp" local="no" imported="no">GeographicLib/GeoCoords.hpp</includes>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>Planimeter_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>PolarStereographic.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>PolarStereographic_8cpp</filename>
-    <includes id="PolarStereographic_8hpp" name="PolarStereographic.hpp" local="no" imported="no">GeographicLib/PolarStereographic.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP</name>
-      <anchorfile>PolarStereographic_8cpp.html</anchorfile>
-      <anchor>a2887f1d8fd2633373698a2d1468befc2</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>PolarStereographic.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>PolarStereographic_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::PolarStereographic</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP</name>
-      <anchorfile>PolarStereographic_8hpp.html</anchorfile>
-      <anchor>a7450566a6ed1475dc10f7c0dc85f5dd9</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>PolygonArea.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>PolygonArea_8cpp</filename>
-    <includes id="PolygonArea_8hpp" name="PolygonArea.hpp" local="no" imported="no">GeographicLib/PolygonArea.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_POLYGONAREA_CPP</name>
-      <anchorfile>PolygonArea_8cpp.html</anchorfile>
-      <anchor>adda27aeacbbca888326b0f4cd9577254</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>PolygonArea.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>PolygonArea_8hpp</filename>
-    <includes id="Geodesic_8hpp" name="Geodesic.hpp" local="no" imported="no">GeographicLib/Geodesic.hpp</includes>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="Accumulator_8hpp" name="Accumulator.hpp" local="no" imported="no">GeographicLib/Accumulator.hpp</includes>
-    <class kind="class">GeographicLib::PolygonArea</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_POLYGONAREA_HPP</name>
-      <anchorfile>PolygonArea_8hpp.html</anchorfile>
-      <anchor>a284051319ec399ec9363ace180fc1203</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>SphericalEngine.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>SphericalEngine_8cpp</filename>
-    <includes id="SphericalEngine_8hpp" name="SphericalEngine.hpp" local="no" imported="no">GeographicLib/SphericalEngine.hpp</includes>
-    <includes id="CircularEngine_8hpp" name="CircularEngine.hpp" local="no" imported="no">GeographicLib/CircularEngine.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_SPHERICALENGINE_CPP</name>
-      <anchorfile>SphericalEngine_8cpp.html</anchorfile>
-      <anchor>acbb0476075cd231855709ab48c95fa7e</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>SphericalEngine.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>SphericalEngine_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::SphericalEngine</class>
-    <class kind="class">GeographicLib::SphericalEngine::coeff</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_SPHERICALENGINE_HPP</name>
-      <anchorfile>SphericalEngine_8hpp.html</anchorfile>
-      <anchor>a46e29e0e930e205c8f9a059ae458b44e</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>SphericalHarmonic.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>SphericalHarmonic_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="SphericalEngine_8hpp" name="SphericalEngine.hpp" local="no" imported="no">GeographicLib/SphericalEngine.hpp</includes>
-    <includes id="CircularEngine_8hpp" name="CircularEngine.hpp" local="no" imported="no">GeographicLib/CircularEngine.hpp</includes>
-    <includes id="Geocentric_8hpp" name="Geocentric.hpp" local="no" imported="no">GeographicLib/Geocentric.hpp</includes>
-    <class kind="class">GeographicLib::SphericalHarmonic</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_SPHERICALHARMONIC_HPP</name>
-      <anchorfile>SphericalHarmonic_8hpp.html</anchorfile>
-      <anchor>ab6742c760b0220c0a0d6423bed5b8bf8</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>SphericalHarmonic1.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>SphericalHarmonic1_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="SphericalEngine_8hpp" name="SphericalEngine.hpp" local="no" imported="no">GeographicLib/SphericalEngine.hpp</includes>
-    <includes id="CircularEngine_8hpp" name="CircularEngine.hpp" local="no" imported="no">GeographicLib/CircularEngine.hpp</includes>
-    <class kind="class">GeographicLib::SphericalHarmonic1</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP</name>
-      <anchorfile>SphericalHarmonic1_8hpp.html</anchorfile>
-      <anchor>a16f04a6cf043288bc2d78f51d9c42186</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>SphericalHarmonic2.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>SphericalHarmonic2_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="SphericalEngine_8hpp" name="SphericalEngine.hpp" local="no" imported="no">GeographicLib/SphericalEngine.hpp</includes>
-    <includes id="CircularEngine_8hpp" name="CircularEngine.hpp" local="no" imported="no">GeographicLib/CircularEngine.hpp</includes>
-    <class kind="class">GeographicLib::SphericalHarmonic2</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP</name>
-      <anchorfile>SphericalHarmonic2_8hpp.html</anchorfile>
-      <anchor>a15f930b306cf77dee059d32d2bb417ad</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>TransverseMercator.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>TransverseMercator_8cpp</filename>
-    <includes id="TransverseMercator_8hpp" name="TransverseMercator.hpp" local="no" imported="no">GeographicLib/TransverseMercator.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP</name>
-      <anchorfile>TransverseMercator_8cpp.html</anchorfile>
-      <anchor>ab09ba83d5531a4ca91dc8ce82ae98084</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>TransverseMercator.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>TransverseMercator_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::TransverseMercator</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP</name>
-      <anchorfile>TransverseMercator_8hpp.html</anchorfile>
-      <anchor>abbbe2faaff284db3183ddf3afcbf5623</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="define">
-      <type>#define</type>
-      <name>TM_TX_MAXPOW</name>
-      <anchorfile>TransverseMercator_8hpp.html</anchorfile>
-      <anchor>a823820984cba9dabe0517925bf18c77b</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>TransverseMercatorExact.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>TransverseMercatorExact_8cpp</filename>
-    <includes id="TransverseMercatorExact_8hpp" name="TransverseMercatorExact.hpp" local="no" imported="no">GeographicLib/TransverseMercatorExact.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP</name>
-      <anchorfile>TransverseMercatorExact_8cpp.html</anchorfile>
-      <anchor>a019dc2a5f6ac9aa9ba03ad8dd974e438</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>TransverseMercatorExact.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>TransverseMercatorExact_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <includes id="EllipticFunction_8hpp" name="EllipticFunction.hpp" local="no" imported="no">GeographicLib/EllipticFunction.hpp</includes>
-    <class kind="class">GeographicLib::TransverseMercatorExact</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP</name>
-      <anchorfile>TransverseMercatorExact_8hpp.html</anchorfile>
-      <anchor>a33c80ffd2f74ea9ed9dd4c11bf9e1198</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>TransverseMercatorProj.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>TransverseMercatorProj_8cpp</filename>
-    <includes id="EllipticFunction_8hpp" name="EllipticFunction.hpp" local="no" imported="no">GeographicLib/EllipticFunction.hpp</includes>
-    <includes id="TransverseMercatorExact_8hpp" name="TransverseMercatorExact.hpp" local="no" imported="no">GeographicLib/TransverseMercatorExact.hpp</includes>
-    <includes id="TransverseMercator_8hpp" name="TransverseMercator.hpp" local="no" imported="no">GeographicLib/TransverseMercator.hpp</includes>
-    <includes id="DMS_8hpp" name="DMS.hpp" local="no" imported="no">GeographicLib/DMS.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <member kind="function">
-      <type>int</type>
-      <name>main</name>
-      <anchorfile>TransverseMercatorProj_8cpp.html</anchorfile>
-      <anchor>a0ddf1224851353fc92bfbff6f499fa97</anchor>
-      <arglist>(int argc, char *argv[])</arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Utility.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>Utility_8cpp</filename>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_UTILITY_CPP</name>
-      <anchorfile>Utility_8cpp.html</anchorfile>
-      <anchor>a572751ca8465c95b9e157dc20175f6bc</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>Utility.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>Utility_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::Utility</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_UTILITY_HPP</name>
-      <anchorfile>Utility_8hpp.html</anchorfile>
-      <anchor>aba45651243cd7449a073dd2c8b11a88a</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>UTMUPS.cpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>UTMUPS_8cpp</filename>
-    <includes id="UTMUPS_8hpp" name="UTMUPS.hpp" local="no" imported="no">GeographicLib/UTMUPS.hpp</includes>
-    <includes id="MGRS_8hpp" name="MGRS.hpp" local="no" imported="no">GeographicLib/MGRS.hpp</includes>
-    <includes id="PolarStereographic_8hpp" name="PolarStereographic.hpp" local="no" imported="no">GeographicLib/PolarStereographic.hpp</includes>
-    <includes id="TransverseMercator_8hpp" name="TransverseMercator.hpp" local="no" imported="no">GeographicLib/TransverseMercator.hpp</includes>
-    <includes id="Utility_8hpp" name="Utility.hpp" local="no" imported="no">GeographicLib/Utility.hpp</includes>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_UTMUPS_CPP</name>
-      <anchorfile>UTMUPS_8cpp.html</anchorfile>
-      <anchor>af7026e1ac5bb37428765d957f2f14a6b</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="file">
-    <name>UTMUPS.hpp</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>UTMUPS_8hpp</filename>
-    <includes id="Constants_8hpp" name="Constants.hpp" local="no" imported="no">GeographicLib/Constants.hpp</includes>
-    <class kind="class">GeographicLib::UTMUPS</class>
-    <namespace>GeographicLib</namespace>
-    <member kind="define">
-      <type>#define</type>
-      <name>GEOGRAPHICLIB_UTMUPS_HPP</name>
-      <anchorfile>UTMUPS_8hpp.html</anchorfile>
-      <anchor>aab4dce5d203c0d98ae740800332ed9d9</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="page">
-    <name>intro</name>
-    <title>Introduction</title>
-    <filename>intro</filename>
-  </compound>
-  <compound kind="page">
-    <name>install</name>
-    <title>Installing %GeographicLib</title>
-    <filename>install</filename>
-    <docanchor file="install">maintainer</docanchor>
-    <docanchor file="install">windowsbin</docanchor>
-    <docanchor file="install">qt</docanchor>
-    <docanchor file="install">windows</docanchor>
-    <docanchor file="install">gnu</docanchor>
-    <docanchor file="install">autoconf</docanchor>
-    <docanchor file="install">cmake</docanchor>
-  </compound>
-  <compound kind="page">
-    <name>start</name>
-    <title>Getting started</title>
-    <filename>start</filename>
-  </compound>
-  <compound kind="page">
-    <name>utilities</name>
-    <title>Utility programs</title>
-    <filename>utilities</filename>
-  </compound>
-  <compound kind="page">
-    <name>organization</name>
-    <title>Code organization</title>
-    <filename>organization</filename>
-  </compound>
-  <compound kind="page">
-    <name>other</name>
-    <title>Other interfaces (Javascript, Python, Matlab, Octave)</title>
-    <filename>other</filename>
-    <docanchor file="other">javascript</docanchor>
-    <docanchor file="other">python</docanchor>
-    <docanchor file="other">matlab</docanchor>
-  </compound>
-  <compound kind="page">
-    <name>geoid</name>
-    <title>Geoid height</title>
-    <filename>geoid</filename>
-    <docanchor file="geoid">geoidinterp</docanchor>
-    <docanchor file="geoid">geoidformat</docanchor>
-    <docanchor file="geoid">geoidcache</docanchor>
-    <docanchor file="geoid">geoidinst</docanchor>
-    <docanchor file="geoid">testgeoid</docanchor>
-  </compound>
-  <compound kind="page">
-    <name>gravity</name>
-    <title>Gravity models</title>
-    <filename>gravity</filename>
-    <docanchor file="gravity">gravityatmos</docanchor>
-    <docanchor file="gravity">gravityformat</docanchor>
-    <docanchor file="gravity">gravityinst</docanchor>
-    <docanchor file="gravity">gravityparallel</docanchor>
-    <docanchor file="gravity">gravitygeoid</docanchor>
-    <docanchor file="gravity">gravitynga</docanchor>
-  </compound>
-  <compound kind="page">
-    <name>magnetic</name>
-    <title>Magnetic models</title>
-    <filename>magnetic</filename>
-    <docanchor file="magnetic">magneticformat</docanchor>
-    <docanchor file="magnetic">magneticinst</docanchor>
-  </compound>
-  <compound kind="page">
-    <name>geodesic</name>
-    <title>Geodesics on the ellipsoid</title>
-    <filename>geodesic</filename>
-    <docanchor file="geodesic">testgeod</docanchor>
-    <docanchor file="geodesic">geodseries</docanchor>
-  </compound>
-  <compound kind="page">
-    <name>transversemercator</name>
-    <title>Transverse Mercator projection</title>
-    <filename>transversemercator</filename>
-    <docanchor file="transversemercator">tmseries</docanchor>
-    <docanchor file="transversemercator">testmerc</docanchor>
-  </compound>
-  <compound kind="page">
-    <name>geocentric</name>
-    <title>Geocentric coordinates</title>
-    <filename>geocentric</filename>
-  </compound>
-  <compound kind="page">
-    <name>old</name>
-    <title>Old versions</title>
-    <filename>old</filename>
-  </compound>
-  <compound kind="namespace">
-    <name>GeographicLib</name>
-    <filename>namespaceGeographicLib.html</filename>
-    <class kind="class">GeographicLib::Accumulator</class>
-    <class kind="class">GeographicLib::AlbersEqualArea</class>
-    <class kind="class">GeographicLib::AzimuthalEquidistant</class>
-    <class kind="class">GeographicLib::CassiniSoldner</class>
-    <class kind="class">GeographicLib::CircularEngine</class>
-    <class kind="class">GeographicLib::Constants</class>
-    <class kind="class">GeographicLib::GeographicErr</class>
-    <class kind="class">GeographicLib::DMS</class>
-    <class kind="class">GeographicLib::EllipticFunction</class>
-    <class kind="class">GeographicLib::Geocentric</class>
-    <class kind="class">GeographicLib::GeoCoords</class>
-    <class kind="class">GeographicLib::Geodesic</class>
-    <class kind="class">GeographicLib::GeodesicLine</class>
-    <class kind="class">GeographicLib::Geoid</class>
-    <class kind="class">GeographicLib::Gnomonic</class>
-    <class kind="class">GeographicLib::GravityCircle</class>
-    <class kind="class">GeographicLib::GravityModel</class>
-    <class kind="class">GeographicLib::LambertConformalConic</class>
-    <class kind="class">GeographicLib::LocalCartesian</class>
-    <class kind="class">GeographicLib::MagneticCircle</class>
-    <class kind="class">GeographicLib::MagneticModel</class>
-    <class kind="class">GeographicLib::Math</class>
-    <class kind="class">GeographicLib::MGRS</class>
-    <class kind="class">GeographicLib::NormalGravity</class>
-    <class kind="class">GeographicLib::OSGB</class>
-    <class kind="class">GeographicLib::PolarStereographic</class>
-    <class kind="class">GeographicLib::PolygonArea</class>
-    <class kind="class">GeographicLib::SphericalEngine</class>
-    <class kind="class">GeographicLib::SphericalHarmonic</class>
-    <class kind="class">GeographicLib::SphericalHarmonic1</class>
-    <class kind="class">GeographicLib::SphericalHarmonic2</class>
-    <class kind="class">GeographicLib::TransverseMercator</class>
-    <class kind="class">GeographicLib::TransverseMercatorExact</class>
-    <class kind="class">GeographicLib::Utility</class>
-    <class kind="class">GeographicLib::UTMUPS</class>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::Accumulator</name>
-    <filename>classGeographicLib_1_1Accumulator.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>Accumulator</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>a6d30e4a792644ffc78546dda4b5d0022</anchor>
-      <arglist>(T y=T(0))</arglist>
-    </member>
-    <member kind="function">
-      <type>Accumulator &</type>
-      <name>operator=</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>a9cd31c9155208a2de0fdd9810f2a9dd8</anchor>
-      <arglist>(T y)</arglist>
-    </member>
-    <member kind="function">
-      <type>T</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>af74ec2f9a77fcc82819111e6bb87b375</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>T</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>a1a2b7ac3fd3b067a1c9930cb02a102b2</anchor>
-      <arglist>(T y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Accumulator &</type>
-      <name>operator+=</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>adc56d12f08b8a61b19dd78ce532285d4</anchor>
-      <arglist>(T y)</arglist>
-    </member>
-    <member kind="function">
-      <type>Accumulator &</type>
-      <name>operator-=</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>abf3e43f38791c48d1fa09e4fb569827b</anchor>
-      <arglist>(T y)</arglist>
-    </member>
-    <member kind="function">
-      <type>Accumulator &</type>
-      <name>operator*=</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>a2b0bc40e9722e1ffac89ecfeb601fb23</anchor>
-      <arglist>(int n)</arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>operator==</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>a6ea5d769a36e01327f3633b39cd38290</anchor>
-      <arglist>(T y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>operator!=</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>a4102ce7aac36753c2b0390c4fc951a42</anchor>
-      <arglist>(T y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>operator<</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>a9a7299c02ec8805d951309fdae60e57f</anchor>
-      <arglist>(T y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>operator<=</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>afb83bdb43b78e20f76e2a7e5e2440386</anchor>
-      <arglist>(T y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>operator></name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>af0e4a35c09b0b179ebf1e2f6912ddeb3</anchor>
-      <arglist>(T y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>operator>=</name>
-      <anchorfile>classGeographicLib_1_1Accumulator.html</anchorfile>
-      <anchor>aeafc5d10683648d37fe18ec75725196b</anchor>
-      <arglist>(T y) const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::AlbersEqualArea</name>
-    <filename>classGeographicLib_1_1AlbersEqualArea.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>AlbersEqualArea</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>a08edd228ba175a5ae71d783c4a712e50</anchor>
-      <arglist>(real a, real f, real stdlat, real k0)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>AlbersEqualArea</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>a3851897cd1944503f81b46b7ce372d2a</anchor>
-      <arglist>(real a, real f, real stdlat1, real stdlat2, real k1)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>AlbersEqualArea</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>a58535d87e148d0cc474f3139c5188371</anchor>
-      <arglist>(real a, real f, real sinlat1, real coslat1, real sinlat2, real coslat2, real k1)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>SetScale</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>a0c00022edeb6b67dcd4e00f087b412c4</anchor>
-      <arglist>(real lat, real k=real(1))</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>aac57f3a9c0c08fb897a1e37034d127c1</anchor>
-      <arglist>(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>a577a9f43be8c1e238a4d56158acf8625</anchor>
-      <arglist>(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>a68a13780a73bcf9c8e50a3ce4eae3086</anchor>
-      <arglist>(real lon0, real lat, real lon, real &x, real &y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>a871246cba03145512f3f12ceb3e3e3a8</anchor>
-      <arglist>(real lon0, real x, real y, real &lat, real &lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>a55d5ca45e7c80a96b3faf0094714ac59</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>a565c63954715204781ae458db0d6b1f7</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>OriginLatitude</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>ad780e943e9a9ba168b350d809d0bfe08</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>CentralScale</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>af407e835eaf76895ee25ec9e7a9c090c</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const AlbersEqualArea</type>
-      <name>CylindricalEqualArea</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>ae643f7f82f5864f95da4cb14571ccf55</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const AlbersEqualArea</type>
-      <name>AzimuthalEqualAreaNorth</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>ae65fcb68843b36d206751527ebd08f44</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const AlbersEqualArea</type>
-      <name>AzimuthalEqualAreaSouth</name>
-      <anchorfile>classGeographicLib_1_1AlbersEqualArea.html</anchorfile>
-      <anchor>aff0ff4e2f162107bd136310b44444cc1</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::AzimuthalEquidistant</name>
-    <filename>classGeographicLib_1_1AzimuthalEquidistant.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>AzimuthalEquidistant</name>
-      <anchorfile>classGeographicLib_1_1AzimuthalEquidistant.html</anchorfile>
-      <anchor>a125571cdeed68d10192611cc12e221ce</anchor>
-      <arglist>(const Geodesic &earth=Geodesic::WGS84)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1AzimuthalEquidistant.html</anchorfile>
-      <anchor>a8b4951b7c732f97aedeb8e869c9349d2</anchor>
-      <arglist>(real lat0, real lon0, real lat, real lon, real &x, real &y, real &azi, real &rk) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1AzimuthalEquidistant.html</anchorfile>
-      <anchor>a26d1b6fe3af8750babaeb60efdfec062</anchor>
-      <arglist>(real lat0, real lon0, real x, real y, real &lat, real &lon, real &azi, real &rk) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1AzimuthalEquidistant.html</anchorfile>
-      <anchor>a950431c3d269fb82e9410f332c401786</anchor>
-      <arglist>(real lat0, real lon0, real lat, real lon, real &x, real &y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1AzimuthalEquidistant.html</anchorfile>
-      <anchor>a6b86b19f2e1c773e028e386a0f5e00e0</anchor>
-      <arglist>(real lat0, real lon0, real x, real y, real &lat, real &lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1AzimuthalEquidistant.html</anchorfile>
-      <anchor>a42c4103265af804395b8b5260a4c25e0</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1AzimuthalEquidistant.html</anchorfile>
-      <anchor>a3f300fcc10aeee9dc88ff93fb991f191</anchor>
-      <arglist>() const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::CassiniSoldner</name>
-    <filename>classGeographicLib_1_1CassiniSoldner.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>CassiniSoldner</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>a948f9d934615c4120eb23740635200bc</anchor>
-      <arglist>(const Geodesic &earth=Geodesic::WGS84)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>CassiniSoldner</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>a1b19cedb287ec9bbe59ec18a0ad2a5e4</anchor>
-      <arglist>(real lat0, real lon0, const Geodesic &earth=Geodesic::WGS84)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reset</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>af9bdc7088bca547dcc191691b2737759</anchor>
-      <arglist>(real lat0, real lon0)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>a37656c7551b10ad75a40758d0bba570d</anchor>
-      <arglist>(real lat, real lon, real &x, real &y, real &azi, real &rk) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>aea917b790f577026184a0bb262102db4</anchor>
-      <arglist>(real x, real y, real &lat, real &lon, real &azi, real &rk) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>a87bf8d3b416bbfd8b7a2c5269245e693</anchor>
-      <arglist>(real lat, real lon, real &x, real &y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>a27a675e995d2c1fdd0ab4c0ab397e065</anchor>
-      <arglist>(real x, real y, real &lat, real &lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Init</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>a3f71bb8b662438a7954be174315ce974</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>LatitudeOrigin</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>a2aa51120af199603f57d54b8c9a0bdde</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>LongitudeOrigin</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>aeb5c42b5cb6202a2371ba84bf76e0161</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>a0019eeb70b5493de687c5cc36ae7f43c</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1CassiniSoldner.html</anchorfile>
-      <anchor>a8d618d5abe71a49fc5ec4f2801d22555</anchor>
-      <arglist>() const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::CircularEngine</name>
-    <filename>classGeographicLib_1_1CircularEngine.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>CircularEngine</name>
-      <anchorfile>classGeographicLib_1_1CircularEngine.html</anchorfile>
-      <anchor>a91dd2b9cc408e35f8cb6482cdf3aadbf</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1CircularEngine.html</anchorfile>
-      <anchor>a8e39d83fcbed23df36ef4fefe2a86420</anchor>
-      <arglist>(real coslon, real sinlon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1CircularEngine.html</anchorfile>
-      <anchor>a48d2327412e0c674285ff6bb85440054</anchor>
-      <arglist>(real lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1CircularEngine.html</anchorfile>
-      <anchor>aa15c408a0ff4cf17575e62edfeae77a6</anchor>
-      <arglist>(real coslon, real sinlon, real &gradx, real &grady, real &gradz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1CircularEngine.html</anchorfile>
-      <anchor>a88a0726718baa7b457c77b5681fabb0a</anchor>
-      <arglist>(real lon, real &gradx, real &grady, real &gradz) const </arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>SphericalEngine</name>
-      <anchorfile>classGeographicLib_1_1CircularEngine.html</anchorfile>
-      <anchor>ab89064f7f3c32a745c72d8c3188f7485</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>GravityCircle</name>
-      <anchorfile>classGeographicLib_1_1CircularEngine.html</anchorfile>
-      <anchor>a243c90a7f9bf3f7aa96877a4b0667a89</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>MagneticCircle</name>
-      <anchorfile>classGeographicLib_1_1CircularEngine.html</anchorfile>
-      <anchor>a7294f6a1cc932f8fd1562a15602e9e86</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::Constants</name>
-    <filename>classGeographicLib_1_1Constants.html</filename>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>degree</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a26ff02acd8141a815428cddf0ff3ff66</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>arcminute</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a8f8e6d3bd08abb72b686a0f4398b587b</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>arcsecond</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a04858f922295d2a04bb021eecac07179</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>WGS84_a</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>ae12127984ac6713823746d917b4abfa7</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>WGS84_a</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a53f39f52837f47490fbdf7332a37dd8b</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>WGS84_f</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>acc5244425bb484594be51b27d56cd335</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>WGS84_f</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>acd335c7f28440e0774666cedffed84f0</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>WGS84_GM</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>af7806106d7bd289bb63d5290e79c87a6</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>WGS84_omega</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a98c114d5a6ca42d3e4ece8595a0c2180</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>WGS84_r</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a199810de7ff3351be6473d20ef045789</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>GRS80_a</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a9b955c3556dcfcebce6a2926bfeaf464</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>GRS80_GM</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a7541474ca70cbec7fccb08d3e3fbfe31</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>GRS80_omega</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a9caea97ab2be0959c7972155141bfd1b</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>GRS80_J2</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a59c7a1d298eb72256119894b67470974</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>UTM_k0</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>ab5cc487ab160c0a213fdf8e12cde198a</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>UTM_k0</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>aebbe37ebfb407a851f72caa95e5dc94f</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>UPS_k0</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a3fe287ab1a0847f5392c1aaf9c5e635a</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>UPS_k0</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a49d415263ee320d1a63a857f784439a3</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>meter</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>ac1b17e7cf67ef42b9b91f3677c2eaa75</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>meter</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>afeffc10d6b8171b39a50949cac149063</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>kilometer</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a4ec5a9d91ab0ccbd3bd921cda4bfc836</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>nauticalmile</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>afedc242aa3ee9b3bf9c72d6d81fc6740</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>square_meter</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>ab92200b36f9d306a2710738c6d9bc705</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>square_meter</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a702b928c9a29dbcc7324b9d835b38d94</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>hectare</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a4cc4ae77e3136d7784cd7c69d6927adc</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>square_kilometer</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a1956824e4f2b22705d57566229a7c311</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>square_nauticalmile</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a5acf6b2c23d1c9ddf140a6b4e588e88a</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>foot</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>ac69f40e7e56c71bc72011c7591f7bef9</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>yard</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a00057328caa45bc216d18243786920c2</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>fathom</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a51cf3e97984ac301b1f27b667b360be0</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>chain</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>ac4f3792bce075999b0c9b9485e4079d0</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>furlong</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a824d39311cf43f916d4ac19e46da3713</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>mile</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a49cb7b828f7c85c36761d47b8db6518c</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>acre</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>ae5aa419ea6c6ce121c912c8afea0a0b7</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>square_mile</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>ab7f473c27ad50da450b4192155cc92f9</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>surveyfoot</name>
-      <anchorfile>classGeographicLib_1_1Constants.html</anchorfile>
-      <anchor>a7faf6e7435791c0a8061296a79c0be08</anchor>
-      <arglist>()</arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::GeographicErr</name>
-    <filename>classGeographicLib_1_1GeographicErr.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>GeographicErr</name>
-      <anchorfile>classGeographicLib_1_1GeographicErr.html</anchorfile>
-      <anchor>ae0f338af58f073657b012c8a9a64b006</anchor>
-      <arglist>(const std::string &msg)</arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::DMS</name>
-    <filename>classGeographicLib_1_1DMS.html</filename>
-    <member kind="enumeration">
-      <name>flag</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a7a1101fd2577636863753baae3e54869</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>NONE</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>LATITUDE</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>LONGITUDE</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>AZIMUTH</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>NUMBER</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumeration">
-      <name>component</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>ab9fa04b3a9156f36f18852eed9b7ce09</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>DEGREE</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>ab9fa04b3a9156f36f18852eed9b7ce09a8ee59944227e74901b71f27410d70781</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>MINUTE</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>ab9fa04b3a9156f36f18852eed9b7ce09a9884bea675fd214061e534e76a1c15d6</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>SECOND</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>ab9fa04b3a9156f36f18852eed9b7ce09a10c28c85ddfa71db5f1d46d362333075</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>Decode</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>ae802c666ad53884ce062281409bd78b4</anchor>
-      <arglist>(const std::string &dms, flag &ind)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>Decode</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a4987f8eb6c1ba5402eb25d6225ab58e1</anchor>
-      <arglist>(real d, real m=0, real s=0)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>DecodeLatLon</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a2d38adcfecb7a41865092e870e19730f</anchor>
-      <arglist>(const std::string &dmsa, const std::string &dmsb, real &lat, real &lon, bool swaplatlong=false)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>DecodeAngle</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a868248d72f6b0bf2dae18a15d741ac43</anchor>
-      <arglist>(const std::string &angstr)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>DecodeAzimuth</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a0512cc1275e089138e1550efbee421d9</anchor>
-      <arglist>(const std::string &azistr)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>Encode</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a0777e26ef4507f8123549723bf3cb56f</anchor>
-      <arglist>(real angle, component trailing, unsigned prec, flag ind, char dmssep)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>Encode</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a3e36baa6114d46f82a8900d002784369</anchor>
-      <arglist>(real angle, component trailing, unsigned prec, flag ind=NONE)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>Encode</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>aeb9d338b12e885092a611bda7e52f9f4</anchor>
-      <arglist>(real angle, unsigned prec, flag ind=NONE, char dmssep=char(0))</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Encode</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>a1ae785976e5d7c6346cfb68863884b55</anchor>
-      <arglist>(real ang, real &d, real &m)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Encode</name>
-      <anchorfile>classGeographicLib_1_1DMS.html</anchorfile>
-      <anchor>af27df7ef6ac42bf0e6341749b4b96eec</anchor>
-      <arglist>(real ang, real &d, real &m, real &s)</arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::EllipticFunction</name>
-    <filename>classGeographicLib_1_1EllipticFunction.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>EllipticFunction</name>
-      <anchorfile>classGeographicLib_1_1EllipticFunction.html</anchorfile>
-      <anchor>ada122111b55eb0ab9c7b9fafb0a4b1e6</anchor>
-      <arglist>(real m)</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>m</name>
-      <anchorfile>classGeographicLib_1_1EllipticFunction.html</anchorfile>
-      <anchor>aba29c348874db7880ab7b1065f03ff7c</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>m1</name>
-      <anchorfile>classGeographicLib_1_1EllipticFunction.html</anchorfile>
-      <anchor>ad1fbe801f6731285462d35d874a149ba</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>K</name>
-      <anchorfile>classGeographicLib_1_1EllipticFunction.html</anchorfile>
-      <anchor>a6c6c8029d93946b32184ee964525938c</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>E</name>
-      <anchorfile>classGeographicLib_1_1EllipticFunction.html</anchorfile>
-      <anchor>a184174d29953891896b41c597c34eb9a</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>KE</name>
-      <anchorfile>classGeographicLib_1_1EllipticFunction.html</anchorfile>
-      <anchor>a12bcdf2c3fc7bcb165318822171328f7</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>sncndn</name>
-      <anchorfile>classGeographicLib_1_1EllipticFunction.html</anchorfile>
-      <anchor>a0b8d63970c4276503d03d4133ee6c321</anchor>
-      <arglist>(real x, real &sn, real &cn, real &dn) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>E</name>
-      <anchorfile>classGeographicLib_1_1EllipticFunction.html</anchorfile>
-      <anchor>a8be312b5da54b01f2976416aa82e7d08</anchor>
-      <arglist>(real phi) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>E</name>
-      <anchorfile>classGeographicLib_1_1EllipticFunction.html</anchorfile>
-      <anchor>af1b3b2265bca5d2b52c17ca44dabffa8</anchor>
-      <arglist>(real sn, real cn, real dn) const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::Geocentric</name>
-    <filename>classGeographicLib_1_1Geocentric.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>Geocentric</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a6527d3ab1df78de8277122581dbcdaff</anchor>
-      <arglist>(real a, real f)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>Geocentric</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>adc92d7214526b4cfcd0b9a0171fc8448</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a65320594cad8c03d28beaa409f3d6fae</anchor>
-      <arglist>(real lat, real lon, real h, real &X, real &Y, real &Z) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a54e09e4673ddbf99feeba81036c81345</anchor>
-      <arglist>(real lat, real lon, real h, real &X, real &Y, real &Z, std::vector< real > &M) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a1907735ce8f5f915a14a5f7a8b3adfea</anchor>
-      <arglist>(real X, real Y, real Z, real &lat, real &lon, real &h) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>aeddd854d52064bcb1f068052057edf2c</anchor>
-      <arglist>(real X, real Y, real Z, real &lat, real &lon, real &h, std::vector< real > &M) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Init</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a7d2e34d1be6009caf4576c6cc884a589</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>ae20c62c298f1724412fec581285cf269</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a30ba434524b5836c9852d454e61d795f</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const Geocentric</type>
-      <name>WGS84</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a4762989f3d1d30bca597f644e8b2b52e</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>LocalCartesian</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a8904c4eadcf94e3803743e8cd9ffbc1c</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>MagneticCircle</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a7294f6a1cc932f8fd1562a15602e9e86</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>MagneticModel</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>af6619ebe4c078705fc49a0d9f950b431</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>GravityCircle</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a243c90a7f9bf3f7aa96877a4b0667a89</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>GravityModel</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>ada1db1d9f480d8044753ed869c995519</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>NormalGravity</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>ae7298549755c5982fe1be124d6631561</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>SphericalHarmonic</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>ae0383f6b1ce413d48e258750c3177f21</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>SphericalHarmonic1</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>accac7c5b7843a1e4fb2baf0c83cc24f0</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>SphericalHarmonic2</name>
-      <anchorfile>classGeographicLib_1_1Geocentric.html</anchorfile>
-      <anchor>a3eabc426b6edd718324c791ef3536360</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::GeoCoords</name>
-    <filename>classGeographicLib_1_1GeoCoords.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>GeoCoords</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a8b3f4a919ba4478c4fec0e7b01e84c57</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>GeoCoords</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>acdfe641aaea6b68aee25cfee822f782a</anchor>
-      <arglist>(const std::string &s, bool centerp=true, bool swaplatlong=false)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>GeoCoords</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a7bde6a5cba74adf66d831788e6be8e65</anchor>
-      <arglist>(real latitude, real longitude, int zone=UTMUPS::STANDARD)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>GeoCoords</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>aaab765054416e1243f2d7b36edc8e0d4</anchor>
-      <arglist>(int zone, bool northp, real easting, real northing)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reset</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a4a1e0a65a8a344dfe519fcbf25078e37</anchor>
-      <arglist>(const std::string &s, bool centerp=true, bool swaplatlong=false)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reset</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a0cbbebaa7bb77f91f3f8dbbadfd6532a</anchor>
-      <arglist>(real latitude, real longitude, int zone=UTMUPS::STANDARD)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reset</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>ab072761684d992f508b5a3b9440653fb</anchor>
-      <arglist>(int zone, bool northp, real easting, real northing)</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Latitude</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a1bc1bb3a2377fa6b70be046dcf5d3e97</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Longitude</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a7db5459efae411dfebec758a8244a95a</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Easting</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a9a84801f0b383860b24cc1344e4015fb</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Northing</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>ac0202def9c16ce856f62485b5c249083</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Convergence</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>ad92c8fa1b34bd11dbd908dfffbb836a8</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Scale</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>aafd68e75d223b821abcbf20179c7a9e0</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Northp</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a5bcf16f97750a6be77f72d50e304a007</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>char</type>
-      <name>Hemisphere</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a0764b9f389a6ce851f9c7c8317ecebb3</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>int</type>
-      <name>Zone</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a3ce32259b53a9ea9a5346d9e418ad6a5</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>SetAltZone</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a7782c2d78462bde2ba6277b2b60af8f6</anchor>
-      <arglist>(int zone=UTMUPS::STANDARD) const </arglist>
-    </member>
-    <member kind="function">
-      <type>int</type>
-      <name>AltZone</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a590600b600395c7914e4854faee08f8e</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>AltEasting</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>af4a5b63a1931973338f71ef2ec4e27fa</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>AltNorthing</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a2f5a9665712214ad34b061d35ce89659</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>AltConvergence</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a2b62e667ce462d8102fdfa6ece6ff50e</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>AltScale</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a299131cd5383ad0adc5af92c84dc6afe</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>GeoRepresentation</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a79af2d72afdfeede78f2ba65b809d6b3</anchor>
-      <arglist>(int prec=0, bool swaplatlong=false) const </arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>DMSRepresentation</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>af6e9f9087a407b01dc24401df8610257</anchor>
-      <arglist>(int prec, bool swaplatlong, char dmssep) const </arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>DMSRepresentation</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>ab37746606876eb77335268054589390a</anchor>
-      <arglist>(int prec=0, bool swaplatlong=false) const </arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>MGRSRepresentation</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a36594aaa4f293b0ddf00b1c78bb04595</anchor>
-      <arglist>(int prec=0) const </arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>UTMUPSRepresentation</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a056efc42fe4c653aad40be5d5b865ea3</anchor>
-      <arglist>(int prec=0) const </arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>AltMGRSRepresentation</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>ad602893cd4a81ccc511daff76b411413</anchor>
-      <arglist>(int prec=0) const </arglist>
-    </member>
-    <member kind="function">
-      <type>std::string</type>
-      <name>AltUTMUPSRepresentation</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a020732ccba257d7f5248692afd318b93</anchor>
-      <arglist>(int prec=0) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a897e6bbfb71f78b0646045bf47e09696</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1GeoCoords.html</anchorfile>
-      <anchor>a4d892f5e55df8cbb597d1a693da4783c</anchor>
-      <arglist>() const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::Geodesic</name>
-    <filename>classGeographicLib_1_1Geodesic.html</filename>
-    <member kind="enumeration">
-      <name>mask</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>NONE</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828ab10adfebcb73de5356c4787246f056af</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>LATITUDE</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>LONGITUDE</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>AZIMUTH</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>DISTANCE</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>DISTANCE_IN</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828ae20140cdf788fa0497df59630d3211ef</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>REDUCEDLENGTH</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>GEODESICSCALE</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>AREA</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>ALL</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aab966190e69651b86661fc2628d20828a30e0c9456c5df9e6ff23880014bd11e0</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>Geodesic</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a455300c36e6caa70968115416e1573a4</anchor>
-      <arglist>(real a, real f)</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Direct</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a6e31d7655895a61a49258de00fd14603</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Direct</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>ac8b9e451fc4093253cfe3f8051d72a14</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Direct</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>ac8f0b5f4db73c5d8d11797698f937402</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Direct</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a63f7681d1239902dc3f528ded0f90352</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Direct</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a7fb2003b8f1d68976fac43d158b4b8b4</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Direct</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a65cf95dc7f5c0bfd427e963281e044f0</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcDirect</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>abfb6553227e1534b451900240b39d058</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcDirect</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aa1bed6c11200c0323cffd0e7027e4df2</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcDirect</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a6f8eabd951b2fe23ffacb6209b2d43bc</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcDirect</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a223802b76bae1665f360b2e343d7afd7</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcDirect</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a63ffe80d449adad813dc98805adcca81</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcDirect</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a55c17605d76f6c46ac5b11f36e8e8641</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcDirect</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>adc8a4d02e631e8966d5842056a49be9c</anchor>
-      <arglist>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>GenDirect</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>acaef3032846a71fc730e1ea26ea32d20</anchor>
-      <arglist>(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Inverse</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>ad7e59a242125a35a95c96cdb20573081</anchor>
-      <arglist>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21, real &S12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Inverse</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a7c35218473b1784b1a80b8631f2d345d</anchor>
-      <arglist>(real lat1, real lon1, real lat2, real lon2, real &s12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Inverse</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a599e587407713f7019906881d6116873</anchor>
-      <arglist>(real lat1, real lon1, real lat2, real lon2, real &azi1, real &azi2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Inverse</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a3e07eef498c82ac25b482cadf129d8ae</anchor>
-      <arglist>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Inverse</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>aa6da95e73bec6443a03bf3928f401d19</anchor>
-      <arglist>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Inverse</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>ac668b5d0f82b28440dac5a44719fd61a</anchor>
-      <arglist>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Inverse</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>ad3f98a5f2adf39ff26cf3d6fe32258a8</anchor>
-      <arglist>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>GenInverse</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a84a3b9b457dd87b1059045b9d50303fd</anchor>
-      <arglist>(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21, real &S12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>GeodesicLine</type>
-      <name>Line</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a3ac241c18897bb9bec4b839d7e1a7c59</anchor>
-      <arglist>(real lat1, real lon1, real azi1, unsigned caps=ALL) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>acd276bb113cfdf3fe59aa43fb3d7289b</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a7abba09bec76f8f97f1e3bc81a7456e2</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>EllipsoidArea</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>a0dde7d12d4bafedef63d371c5fe40f50</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const Geodesic</type>
-      <name>WGS84</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>ae918bb7e1555fba38483449cbbac0ca1</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>GeodesicLine</name>
-      <anchorfile>classGeographicLib_1_1Geodesic.html</anchorfile>
-      <anchor>ac4a8bd684285e00b12427c052697a106</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::GeodesicLine</name>
-    <filename>classGeographicLib_1_1GeodesicLine.html</filename>
-    <member kind="enumeration">
-      <name>mask</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbcc</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>NONE</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbcca0f2ec05e56540d908a326a872b9aa68f</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>LATITUDE</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>LONGITUDE</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>AZIMUTH</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>DISTANCE</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>DISTANCE_IN</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>REDUCEDLENGTH</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>GEODESICSCALE</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>AREA</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>ALL</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>adeec76cf92a8c30770e1199bdadacbccabf2df1a904dc1c546a122ac0ebe1acd6</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>GeodesicLine</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a5669be85b4a574258f4a136f12d3f1bb</anchor>
-      <arglist>(const Geodesic &g, real lat1, real lon1, real azi1, unsigned caps=ALL)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>GeodesicLine</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>ae5ad84103d70f252c66bf61afbda3fa0</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Position</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>ac9843cbfff45e8163b78e184a3126d82</anchor>
-      <arglist>(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Position</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a50feb9c64d66b6518c640584d25e9507</anchor>
-      <arglist>(real s12, real &lat2, real &lon2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Position</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>ac736a0cc3300e443d42bbd2dc901962c</anchor>
-      <arglist>(real s12, real &lat2, real &lon2, real &azi2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Position</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a10b743a14701f620c0f41f1c6e1cee76</anchor>
-      <arglist>(real s12, real &lat2, real &lon2, real &azi2, real &m12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Position</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>ada48245beb736fe9ff3d8c491e9a691f</anchor>
-      <arglist>(real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Position</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>aa42e5028aa78ef3ce8fbcb01b25eb458</anchor>
-      <arglist>(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcPosition</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a9270eecb58eaac3115a5f08879990482</anchor>
-      <arglist>(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcPosition</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>afa377ee7344df5759cb7ea1022ff8288</anchor>
-      <arglist>(real a12, real &lat2, real &lon2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcPosition</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a2d147b25bcef6a7258fabc581a2d64a1</anchor>
-      <arglist>(real a12, real &lat2, real &lon2, real &azi2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcPosition</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>afdedfa0bc105dbe5de4c292115c7b7ae</anchor>
-      <arglist>(real a12, real &lat2, real &lon2, real &azi2, real &s12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcPosition</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>ad6b2013f9dcde3f4bf867632f6a2d1ff</anchor>
-      <arglist>(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcPosition</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a2e0249a548d2dd9c882cb4a8de17d8eb</anchor>
-      <arglist>(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>ArcPosition</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>af286d2071bdc59e68046dd2557115f21</anchor>
-      <arglist>(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>GenPosition</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>ad9522110fe6a5a0c7f912a6b1a23094d</anchor>
-      <arglist>(bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Init</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>af7e248d7632f56cf7abc6eac4927a587</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Latitude</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a00a291e94d0c688a168a58623a360659</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Longitude</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>ac567ccf20c683319370f4c747f23966a</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Azimuth</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a40707b9e989c95418b2559b271cc2699</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>EquatorialAzimuth</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>ad117912c4fc4ef29bf4050c9be3267f2</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>EquatorialArc</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a308c7fb4f7c562a8c604453bf2ee2ca2</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>af8953029b9985a3929fe406f7530143b</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a42e1f97e3ed564f98b305450b0d04590</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>unsigned</type>
-      <name>Capabilities</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a21d07549d1171ad05c7318533c4c8970</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Capabilities</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a4e12366c2ce02e7a96ee778eedb55bf9</anchor>
-      <arglist>(unsigned testcaps) const </arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>Geodesic</name>
-      <anchorfile>classGeographicLib_1_1GeodesicLine.html</anchorfile>
-      <anchor>a088c26ef9558197029bbeb317f3104c0</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::Geoid</name>
-    <filename>classGeographicLib_1_1Geoid.html</filename>
-    <member kind="enumeration">
-      <name>convertflag</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a58ddbd0fd48c25b361f45bdb70dadb96</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>ELLIPSOIDTOGEOID</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a58ddbd0fd48c25b361f45bdb70dadb96a4a1db06e9dcfa1ebb345c616151ab70d</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>NONE</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a58ddbd0fd48c25b361f45bdb70dadb96a677322ba74ea5494e67478c3dc1780d5</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>GEOIDTOELLIPSOID</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>Geoid</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>ac3556c755dad0d43c3be0913df08b395</anchor>
-      <arglist>(const std::string &name, const std::string &path="", bool cubic=true, bool threadsafe=false)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>CacheArea</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a52b5dc2d976796046aaeb8765e4a9c0f</anchor>
-      <arglist>(real south, real west, real north, real east) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>CacheAll</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a482c6482d5ab4c5d661210327848170e</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>CacheClear</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>ad948f48545c9c40f1705f2892887cdab</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>accb63bfbbadae10af79b3a3028a3045a</anchor>
-      <arglist>(real lat, real lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a3bb5740c3a38a77caeb5eabd54c77cbc</anchor>
-      <arglist>(real lat, real lon, real &gradn, real &grade) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>ConvertHeight</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>adf98d0f0d881893a4f5ff711a3be0e04</anchor>
-      <arglist>(real lat, real lon, real h, convertflag d) const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>Description</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a37d76bcfe0ddf9b84042d701c312e941</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>DateTime</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a9cd7304b5df37001f4ad3c91cdbc56f4</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>GeoidFile</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a07e5f704f2684ce5acf824b7e0b17d30</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>GeoidName</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>aa244668a189e35ce5ff248fb8fa2e57b</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>GeoidDirectory</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a83b17b17045c49984bcdd032e637155e</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string</type>
-      <name>Interpolation</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a0ddfefaef196023486fc7642af45cf96</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MaxError</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>aff538da14578a02c551b411a899e567a</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>RMSError</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a207f98316d20a5b9d47846e559c5e2a2</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Offset</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>ac798950a643e4286aa8d3bb8cd9b0815</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Scale</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>ab2346300c12ff7e70d35e08479ecede1</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>ThreadSafe</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a286e947c13592f21e45cbdd404b283c7</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Cache</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>ade5715c0d1428a409383b1acd2cbe9be</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>CacheWest</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>aa0d2e119f089ee4182987ddd3faaf62a</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>CacheEast</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>acb34cfbcfb8be2794b16a3d18209dbbe</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>CacheNorth</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a26742332938bb8f22be23c979ffb02a1</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>CacheSouth</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>aa3db8f9639eb231539376e4617a3d59e</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>aada99465d9ddfc1b34ccf2ef3d86dbd7</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>abd2076cab3455b816e9477cdb410b187</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>DefaultGeoidPath</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a2daf81f5c648cf190a83981f441ab08f</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>DefaultGeoidName</name>
-      <anchorfile>classGeographicLib_1_1Geoid.html</anchorfile>
-      <anchor>a048865342b2b12ed2272e547209381fd</anchor>
-      <arglist>()</arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::Gnomonic</name>
-    <filename>classGeographicLib_1_1Gnomonic.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>Gnomonic</name>
-      <anchorfile>classGeographicLib_1_1Gnomonic.html</anchorfile>
-      <anchor>a2ac973ebbd7aaf18c451b152cd92db99</anchor>
-      <arglist>(const Geodesic &earth=Geodesic::WGS84)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1Gnomonic.html</anchorfile>
-      <anchor>ab851ea19db5671f8d4a4151820bc6853</anchor>
-      <arglist>(real lat0, real lon0, real lat, real lon, real &x, real &y, real &azi, real &rk) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1Gnomonic.html</anchorfile>
-      <anchor>afccbed660a482ef73d33ad16406ee626</anchor>
-      <arglist>(real lat0, real lon0, real x, real y, real &lat, real &lon, real &azi, real &rk) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1Gnomonic.html</anchorfile>
-      <anchor>a2c08cf2bad190ee9ab88f7d877223208</anchor>
-      <arglist>(real lat0, real lon0, real lat, real lon, real &x, real &y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1Gnomonic.html</anchorfile>
-      <anchor>a8700d59a1e244f8dd211e344587dfed3</anchor>
-      <arglist>(real lat0, real lon0, real x, real y, real &lat, real &lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1Gnomonic.html</anchorfile>
-      <anchor>a8598fe6d8c3896fa3fd58d24023f78ee</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1Gnomonic.html</anchorfile>
-      <anchor>a06b559fa72aa1e51da966c43d22b983d</anchor>
-      <arglist>() const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::GravityCircle</name>
-    <filename>classGeographicLib_1_1GravityCircle.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>GravityCircle</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a4a000e07f0856a130ab11f1b26c933ed</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Gravity</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a5d8053ee66ae22217ae0b61e96194b64</anchor>
-      <arglist>(real lon, real &gx, real &gy, real &gz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Disturbance</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a2c3bde01c9d822b0cdd935314193a466</anchor>
-      <arglist>(real lon, real &deltax, real &deltay, real &deltaz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>GeoidHeight</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a5d5a577c99cf4649d9286f1b4afacab5</anchor>
-      <arglist>(real lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>SphericalAnomaly</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>ac94672db5e450f4394e6df69eda99e69</anchor>
-      <arglist>(real lon, real &Dg01, real &xi, real &eta) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>W</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a04ae0659ec2eb766ae360d3bcbe332c4</anchor>
-      <arglist>(real lon, real &gX, real &gY, real &gZ) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>V</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>aba5f3ec3cb7b620e13dafa6fa4e48ae0</anchor>
-      <arglist>(real lon, real &GX, real &GY, real &GZ) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>T</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>afae12e4bbf17809f1dd6c32b41dfde03</anchor>
-      <arglist>(real lon, real &deltaX, real &deltaY, real &deltaZ) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>T</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a408d52806d43fe61b53af3ffb306bec5</anchor>
-      <arglist>(real lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Init</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>aee7b6c92dc9264345048a8ad7c230e4c</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a19c5d003a9981cb3ece5b44ee836553a</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>ad9bfc60d802b662ffc1a41566882b743</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Latitude</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a9628e97c53a2532959c5c8af75e1c14b</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Height</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a026b2b79ff3ae70b4fee5d9c4d1ffb70</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>unsigned</type>
-      <name>Capabilities</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a08ecc2b31ca7d0ddc2d25950a6bc247f</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Capabilities</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>a2fa608c25be9b8caa087102c4c311768</anchor>
-      <arglist>(unsigned testcaps) const </arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>GravityModel</name>
-      <anchorfile>classGeographicLib_1_1GravityCircle.html</anchorfile>
-      <anchor>ada1db1d9f480d8044753ed869c995519</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::GravityModel</name>
-    <filename>classGeographicLib_1_1GravityModel.html</filename>
-    <member kind="enumeration">
-      <name>mask</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af8691d0f13d6d42278cd1e615903d365</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>NONE</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af8691d0f13d6d42278cd1e615903d365add4ee1aa94e38a8283826704105dc2e1</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>GRAVITY</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af8691d0f13d6d42278cd1e615903d365ae6a4573c13b932c98ab95e7f9dbd0952</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>DISTURBANCE</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af8691d0f13d6d42278cd1e615903d365a83daf366a2c7ab93495f0e6b4144d885</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>DISTURBING_POTENTIAL</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af8691d0f13d6d42278cd1e615903d365abe1f6d891a721a4f544cd8a341abcb28</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>SPHERICAL_ANOMALY</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af8691d0f13d6d42278cd1e615903d365ada02eebe918ebb3764a62b9323dceac9</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>GEOID_HEIGHT</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>ALL</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af8691d0f13d6d42278cd1e615903d365a8e0e6b9a6d629d05f22f41996fe98068</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>GravityModel</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>ac351170c1104f41754d5c0b8371d3e15</anchor>
-      <arglist>(const std::string &name, const std::string &path="")</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Gravity</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a2dc8bf4cfa3c1914f4c7e93a5a3b3eac</anchor>
-      <arglist>(real lat, real lon, real h, real &gx, real &gy, real &gz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Disturbance</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a75cf57146334d9ce0856222a6814ae6f</anchor>
-      <arglist>(real lat, real lon, real h, real &deltax, real &deltay, real &deltaz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>GeoidHeight</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a7e75bdba6b9c8e64cc64403335a6fba4</anchor>
-      <arglist>(real lat, real lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>SphericalAnomaly</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>aaf89eb4a9b7266f0aa2ef2c341fc264e</anchor>
-      <arglist>(real lat, real lon, real h, real &Dg01, real &xi, real &eta) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>W</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>ab6767f3833caa34095a7ef83c43a46f0</anchor>
-      <arglist>(real X, real Y, real Z, real &gX, real &gY, real &gZ) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>V</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a7aec9ecfa959b257dd0a965331598368</anchor>
-      <arglist>(real X, real Y, real Z, real &GX, real &GY, real &GZ) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>T</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a257022f1f125d88b0a6efdccfc5e7a41</anchor>
-      <arglist>(real X, real Y, real Z, real &deltaX, real &deltaY, real &deltaZ) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>T</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a690657dedac8ccea22052eda2829fea3</anchor>
-      <arglist>(real X, real Y, real Z) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>U</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af368d4f9015e076e5cc57ad87b8a185f</anchor>
-      <arglist>(real X, real Y, real Z, real &gammaX, real &gammaY, real &gammaZ) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Phi</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a80477ccafa1049964ee0cef40ae2eea6</anchor>
-      <arglist>(real X, real Y, real &fX, real &fY) const </arglist>
-    </member>
-    <member kind="function">
-      <type>GravityCircle</type>
-      <name>Circle</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>aadafafc09b9b707d47606da1e413d54f</anchor>
-      <arglist>(real lat, real h, unsigned caps=ALL) const </arglist>
-    </member>
-    <member kind="function">
-      <type>const NormalGravity &</type>
-      <name>ReferenceEllipsoid</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a0467e44598b65fb403109ba0d0fbf182</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>Description</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>af2c1c74254e3193adb155987f6dd0a59</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>DateTime</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>acbed448c2423cd45e800d03fab059500</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>GravityFile</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a26a87d363713ba3d1aa1b16da2fc2f27</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>GravityModelName</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a9ca1191e449bf7c04595ebd8a299af78</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>GravityModelDirectory</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a17f2da4cd5abbb5f38f1b90d75975898</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a07f361e231e1725a4f8e3c37a06cf304</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MassConstant</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>aa63d1c6e71abfa9455df695f4a3e6bdd</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>ReferenceMassConstant</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a4e6b9d48f26544a45c5509a87eb334e7</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>AngularVelocity</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>aeb3d751ba7719e57e0266b65ee7d63d8</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>aa2316f6d328435417627d49046c45308</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>DefaultGravityPath</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a0fdf62e41828ae7ae183d9e876f37954</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>DefaultGravityName</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>ad4a776d68b60e85275c0e580d3c7caba</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>GravityCircle</name>
-      <anchorfile>classGeographicLib_1_1GravityModel.html</anchorfile>
-      <anchor>a243c90a7f9bf3f7aa96877a4b0667a89</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::LambertConformalConic</name>
-    <filename>classGeographicLib_1_1LambertConformalConic.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>LambertConformalConic</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a21dc9fa160a5b96a1c11ab30af0eb129</anchor>
-      <arglist>(real a, real f, real stdlat, real k0)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>LambertConformalConic</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a6273d61ce32ad6016471a7bd0e155ca4</anchor>
-      <arglist>(real a, real f, real stdlat1, real stdlat2, real k1)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>LambertConformalConic</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a4d772372388f32029359b156dc43e4cd</anchor>
-      <arglist>(real a, real f, real sinlat1, real coslat1, real sinlat2, real coslat2, real k1)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>SetScale</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>aac6267f7f970b35043b17e12e4163ff2</anchor>
-      <arglist>(real lat, real k=real(1))</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a2bafb6c1a81d4b6cf04f172b9e96278c</anchor>
-      <arglist>(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a085d37693f5e95fd650b7f59f61ab744</anchor>
-      <arglist>(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a14a3757d85e81488afe476f7ceb8a720</anchor>
-      <arglist>(real lon0, real lat, real lon, real &x, real &y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a1bffe1259895569e6834a4b1df9b22ab</anchor>
-      <arglist>(real lon0, real x, real y, real &lat, real &lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a21f9bc21f3f40c56d2f5d12fb4b7f75a</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>abd47e48c75ed958f5aa91bcaa80ddc8c</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>OriginLatitude</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a7c589335b43b2274d3a68c0f68f29d77</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>CentralScale</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a2298a4e48e550cfd7346cf5f2dd175ad</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const LambertConformalConic</type>
-      <name>Mercator</name>
-      <anchorfile>classGeographicLib_1_1LambertConformalConic.html</anchorfile>
-      <anchor>a7fbb6973b77593245db52c9759740f9a</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::LocalCartesian</name>
-    <filename>classGeographicLib_1_1LocalCartesian.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>LocalCartesian</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>ad277a6798293d5d66168c3c1438d10a2</anchor>
-      <arglist>(real lat0, real lon0, real h0=0, const Geocentric &earth=Geocentric::WGS84)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>LocalCartesian</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>a3474a0434b2ff8b258111fe6d8468f0d</anchor>
-      <arglist>(const Geocentric &earth=Geocentric::WGS84)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reset</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>a85b9c15b843cf6a84be08e0cc4de9122</anchor>
-      <arglist>(real lat0, real lon0, real h0=0)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>a6426e95f904f224eabedb8fcd17fe537</anchor>
-      <arglist>(real lat, real lon, real h, real &x, real &y, real &z) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>a774332be14e894536f13b3cc7a8323c7</anchor>
-      <arglist>(real lat, real lon, real h, real &x, real &y, real &z, std::vector< real > &M) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>ac34878de3ae995e7d54f0347a1f34118</anchor>
-      <arglist>(real x, real y, real z, real &lat, real &lon, real &h) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>a7baa88b38b320d763f6cba3ece4f518d</anchor>
-      <arglist>(real x, real y, real z, real &lat, real &lon, real &h, std::vector< real > &M) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>LatitudeOrigin</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>af4905164de5157c7ae2678f7716cbad7</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>LongitudeOrigin</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>a45656227b4fff45249f1844bc6d233ad</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>HeightOrigin</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>ac8e00f262d70da122f45afa15b9381e2</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>a795356c736f1170fe5ef075ebbf34354</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1LocalCartesian.html</anchorfile>
-      <anchor>a99907eda4b863acbe8e7d159a6482abb</anchor>
-      <arglist>() const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::MagneticCircle</name>
-    <filename>classGeographicLib_1_1MagneticCircle.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>MagneticCircle</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>a49170460b1833722ad9bc45b92c86e5a</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>a8669d47d20b03e9185d358440d3da9b1</anchor>
-      <arglist>(real lon, real &Bx, real &By, real &Bz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>ac715ae0394bd7f8c23288f80c406e5bc</anchor>
-      <arglist>(real lon, real &Bx, real &By, real &Bz, real &Bxt, real &Byt, real &Bzt) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Init</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>a8ec84cd0b1d97b51464ec80d9e2dcf57</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>a78721d381d21f676152394dd576f2e77</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>a4c3fc40a49332ddcd042e5cb41c3cb2a</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Latitude</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>aaf14e89275bffd8253acdbe4840b65d0</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Height</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>aadd95eac0650f195e4d7acdc9819716b</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Time</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>a44783c9e44f16bbd48cc5061b30ce8e9</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>MagneticModel</name>
-      <anchorfile>classGeographicLib_1_1MagneticCircle.html</anchorfile>
-      <anchor>af6619ebe4c078705fc49a0d9f950b431</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::MagneticModel</name>
-    <filename>classGeographicLib_1_1MagneticModel.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>MagneticModel</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a84a020586d58c4da61ec6ffbc7b4fa37</anchor>
-      <arglist>(const std::string &name, const std::string &path="", const Geocentric &earth=Geocentric::WGS84)</arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>Description</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a204e8d3c4ebf6f8c13eb9e1817921ea2</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>DateTime</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a230648296f87ff6fc12a3e65ff01bc3b</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>MagneticFile</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>aa072d202531c0cacdd7bca128d670705</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>MagneticModelName</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>ad500f0d76997b4026b75805fad71dbee</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const std::string &</type>
-      <name>MagneticModelDirectory</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a2476aee96f07071de17c24dbbf80f521</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MinHeight</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a8a170290542bf8e694cda4b4d329c881</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MaxHeight</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a41e16617bc2cdd89ab7b7a02b4bd4dcf</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MinTime</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a1e8624990112edc3c6503c9c9acb9309</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MaxTime</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a5d538204401200c87b37cdc37509311a</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a0b55df676607204a2d44687ffafe8d9e</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a38ad95b421f5fbce40abff5733421370</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>DefaultMagneticPath</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a469db97d257876c1abafa3da3c5f0f7e</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>DefaultMagneticName</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>ab2ac8cc598c0d9a6b448c9a45e9642d9</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a550eb1739712fbbae1a167c2559d6dbc</anchor>
-      <arglist>(real t, real lat, real lon, real h, real &Bx, real &By, real &Bz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a11fed1ca7a45947f6f43f6ba7897250f</anchor>
-      <arglist>(real t, real lat, real lon, real h, real &Bx, real &By, real &Bz, real &Bxt, real &Byt, real &Bzt) const </arglist>
-    </member>
-    <member kind="function">
-      <type>MagneticCircle</type>
-      <name>Circle</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>ae4275d73128fc2c6c62f53677ce70bd5</anchor>
-      <arglist>(real t, real lat, real h) const </arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>FieldComponents</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>af553c42337b9a9a1d51b81fea7083ea2</anchor>
-      <arglist>(real Bx, real By, real Bz, real &H, real &F, real &D, real &I)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>FieldComponents</name>
-      <anchorfile>classGeographicLib_1_1MagneticModel.html</anchorfile>
-      <anchor>a54aa849393ab2a7e37aa1f086e64cffb</anchor>
-      <arglist>(real Bx, real By, real Bz, real Bxt, real Byt, real Bzt, real &H, real &F, real &D, real &I, real &Ht, real &Ft, real &Dt, real &It)</arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::Math</name>
-    <filename>classGeographicLib_1_1Math.html</filename>
-    <member kind="typedef">
-      <type>double</type>
-      <name>extended</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a436f350a6a9539e176dda19d0e4811f8</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="typedef">
-      <type>double</type>
-      <name>real</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>aeee4778d7cf2f9fb9648efe4911da59d</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>pi</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>aca1580c771e7019bfe826512fba9b2f1</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static real</type>
-      <name>pi</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>abb031de2a30d6fbac4c634b344e46df4</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>degree</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a0f3b4ea16cc2cb21557555fca3b1c201</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static real</type>
-      <name>degree</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a5bb8bea024e11eb402ecbcf9bae28bb5</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>sq</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a6a092f38e231c80a1f144814c90f1895</anchor>
-      <arglist>(T x)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>hypot</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a62b6fca06c571481aafba3f1716a8bb2</anchor>
-      <arglist>(T x, T y)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>expm1</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a2fd4e8930d9dd953352d25fc184d843e</anchor>
-      <arglist>(T x)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>log1p</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a90eddd5a6d0c9dcc4a9f18dd647ac520</anchor>
-      <arglist>(T x)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>asinh</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>aba75669f9d52fc672a8faaf69261bd8a</anchor>
-      <arglist>(T x)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>atanh</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a372ac604592d9de9cf608cfdfc463447</anchor>
-      <arglist>(T x)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>cbrt</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a04b87b033b845f4812a5700661c64a2a</anchor>
-      <arglist>(T x)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static bool</type>
-      <name>isfinite</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>af61f7360e67c35131d80083e7b53dda8</anchor>
-      <arglist>(T x)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>NaN</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>ad1dc13a367125d3f8d291eaa98339186</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static real</type>
-      <name>NaN</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a28304be9b5cb17eeb7413b059604a154</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static bool</type>
-      <name>isnan</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a554d35e9f54bf304447833a21ee2047c</anchor>
-      <arglist>(T x)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>infinity</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a82ccc01be301f14061c681ee93a5120b</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static real</type>
-      <name>infinity</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>a1606218c36b8d7c60a5ad5847a94ab9c</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>swab</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>aec7f95c2bb99422f1f047cb628a232f8</anchor>
-      <arglist>(T x)</arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const bool</type>
-      <name>bigendian</name>
-      <anchorfile>classGeographicLib_1_1Math.html</anchorfile>
-      <anchor>ab14e512a1867b98ecb38e9175426596c</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::MGRS</name>
-    <filename>classGeographicLib_1_1MGRS.html</filename>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1MGRS.html</anchorfile>
-      <anchor>a91de10ebde478dbb85b3c7d057ff97b9</anchor>
-      <arglist>(int zone, bool northp, real x, real y, int prec, std::string &mgrs)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1MGRS.html</anchorfile>
-      <anchor>a37f9dd9b12dbc74381116d842be47ccd</anchor>
-      <arglist>(int zone, bool northp, real x, real y, real lat, int prec, std::string &mgrs)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1MGRS.html</anchorfile>
-      <anchor>a066b79e78cd85bf4b50df50808bed7e3</anchor>
-      <arglist>(const std::string &mgrs, int &zone, bool &northp, real &x, real &y, int &prec, bool centerp=true)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1MGRS.html</anchorfile>
-      <anchor>a8942a1dfafa3ea845ccc5fafb6ca4dc2</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1MGRS.html</anchorfile>
-      <anchor>a8eee27799bda8238d6d0525dffdddd4e</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>UTMUPS</name>
-      <anchorfile>classGeographicLib_1_1MGRS.html</anchorfile>
-      <anchor>a6a0cfac496024eaf645c7a2f98a02a75</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::NormalGravity</name>
-    <filename>classGeographicLib_1_1NormalGravity.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>NormalGravity</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>af625bbc7df2d36ba5c43c8f20f61c134</anchor>
-      <arglist>(real a, real GM, real omega, real f, real J2)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>NormalGravity</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a55f749c3bb3e9d19626105041bf1b6fb</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>SurfaceGravity</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a019541fea3712f8ca73aec8a0b29c71c</anchor>
-      <arglist>(real lat) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Gravity</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>acfca8d6e44778501b54cd0b38dbbddde</anchor>
-      <arglist>(real lat, real h, real &gammay, real &gammaz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>U</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a258290ade5fd46c42fdc4199683cf563</anchor>
-      <arglist>(real X, real Y, real Z, real &gammaX, real &gammaY, real &gammaZ) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>V0</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>aa656e36306bc396ac6d32dcdfc2069a2</anchor>
-      <arglist>(real X, real Y, real Z, real &GammaX, real &GammaY, real &GammaZ) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Phi</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>af0f50fd88d8b647a1b7bb209a4cfae0f</anchor>
-      <arglist>(real X, real Y, real &fX, real &fY) const </arglist>
-    </member>
-    <member kind="function">
-      <type>bool</type>
-      <name>Init</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a1d96cafc362959215eaa553a712b6908</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a9155d22c5a64a7ef346ce7f590a6264f</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MassConstant</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a3c6693dc7efe04cdbed408b2510c69da</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>DynamicalFormFactor</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>aa52b03157eb0b199d331d6fca28a259a</anchor>
-      <arglist>(int n=2) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>AngularVelocity</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>aefd6dfb7e6f806b63d099316dcc97f55</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>aba396954f43e623e755bdff7db7d850b</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>EquatorialGravity</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a3610ec908c7b168b39f00946e2fc3fad</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>PolarGravity</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a3079310d3a7af97ccb50b91be01d5a50</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>GravityFlattening</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a7e9329f7b3120b7777a0c5be3ca424a7</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>SurfacePotential</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a5bc3756dd7dbc82c07ef4afd1a182372</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const Geocentric &</type>
-      <name>Earth</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>ab15ded1ab7ec9a30e8053fc330ed76ac</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const NormalGravity</type>
-      <name>WGS84</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a70c328a95e05964180106d89c2583b78</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const NormalGravity</type>
-      <name>GRS80</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>a78cf6878967ad52adadbe06b5f7c4146</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>GravityModel</name>
-      <anchorfile>classGeographicLib_1_1NormalGravity.html</anchorfile>
-      <anchor>ada1db1d9f480d8044753ed869c995519</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::OSGB</name>
-    <filename>classGeographicLib_1_1OSGB.html</filename>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>a92618eea9870908e11446875d80aab6b</anchor>
-      <arglist>(real lat, real lon, real &x, real &y, real &gamma, real &k)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>ae006380e574858a81011752dd1d4af60</anchor>
-      <arglist>(real x, real y, real &lat, real &lon, real &gamma, real &k)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>a0f705bee98c6669ca7a95394712fd758</anchor>
-      <arglist>(real lat, real lon, real &x, real &y)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>ab804929a4126ed390a40d35e837b4001</anchor>
-      <arglist>(real x, real y, real &lat, real &lon)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>GridReference</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>a0a79e8f2babae1eb0305a0e728fea8c8</anchor>
-      <arglist>(real x, real y, int prec, std::string &gridref)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>GridReference</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>a3693cfef49442747750e8393c81014aa</anchor>
-      <arglist>(const std::string &gridref, real &x, real &y, int &prec, bool centerp=true)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>a9bb3b0ff55a462ac2ebcd0cfd446d811</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>aae688ebd8c126f22517eaa0a01d659f8</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>CentralScale</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>a65210bfdcac362f393a8f81f28259ad0</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>OriginLatitude</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>ad6bcef7e2dcc2992831e101bf0b05fa8</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>OriginLongitude</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>a4eb3b20734af47c9661d40581555c345</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>FalseNorthing</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>a74072d4e62fcd4ca679b222716b6a6a1</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>FalseEasting</name>
-      <anchorfile>classGeographicLib_1_1OSGB.html</anchorfile>
-      <anchor>ab27e19f7688f6b472d217b31aeae079c</anchor>
-      <arglist>()</arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::PolarStereographic</name>
-    <filename>classGeographicLib_1_1PolarStereographic.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>PolarStereographic</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>a170d21f9c7a2e922c57fc83a44ea3dfa</anchor>
-      <arglist>(real a, real f, real k0)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>SetScale</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>a3f957214eb1d1248277a680e4c4ceed5</anchor>
-      <arglist>(real lat, real k=real(1))</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>a30ef1a1f906ee389e2a5f7e5fd7d8fa4</anchor>
-      <arglist>(bool northp, real lat, real lon, real &x, real &y, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>a01302b8dba43c57e3c3849f94123a157</anchor>
-      <arglist>(bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>ac2fe4c9524ec35f8d05336555f96e1b1</anchor>
-      <arglist>(bool northp, real lat, real lon, real &x, real &y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>a16572cc552eeb24ebf84319cdcd6652e</anchor>
-      <arglist>(bool northp, real x, real y, real &lat, real &lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>ab1746576356a2409f34d9527064adfdd</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>a3b08d03e475dae2c2a81c76420946942</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>CentralScale</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>ad6f7bd8a35208d91706ac8c258387e6f</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const PolarStereographic</type>
-      <name>UPS</name>
-      <anchorfile>classGeographicLib_1_1PolarStereographic.html</anchorfile>
-      <anchor>a2db6bcb1b59a6ddc6087ee04c64c9825</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::PolygonArea</name>
-    <filename>classGeographicLib_1_1PolygonArea.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>PolygonArea</name>
-      <anchorfile>classGeographicLib_1_1PolygonArea.html</anchorfile>
-      <anchor>a060a1dc499bd079c62f62ed5cad929e5</anchor>
-      <arglist>(const Geodesic &earth, bool polyline=false)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Clear</name>
-      <anchorfile>classGeographicLib_1_1PolygonArea.html</anchorfile>
-      <anchor>a66198bec67036ad09aa58ec43166fe60</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>AddPoint</name>
-      <anchorfile>classGeographicLib_1_1PolygonArea.html</anchorfile>
-      <anchor>acfec56f0e136a534192e1e71589299f1</anchor>
-      <arglist>(real lat, real lon)</arglist>
-    </member>
-    <member kind="function">
-      <type>unsigned</type>
-      <name>Compute</name>
-      <anchorfile>classGeographicLib_1_1PolygonArea.html</anchorfile>
-      <anchor>a60e1c288358818c849356c9921191215</anchor>
-      <arglist>(bool reverse, bool sign, real &perimeter, real &area) const </arglist>
-    </member>
-    <member kind="function">
-      <type>unsigned</type>
-      <name>TestCompute</name>
-      <anchorfile>classGeographicLib_1_1PolygonArea.html</anchorfile>
-      <anchor>ac46ac5567223b3db2ee11e6c4f72c257</anchor>
-      <arglist>(real lat, real lon, bool reverse, bool sign, real &perimeter, real &area) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1PolygonArea.html</anchorfile>
-      <anchor>afcdd74fcb4a0f57aa193e5fd08239369</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1PolygonArea.html</anchorfile>
-      <anchor>aba3543baed0f014b64890d174b8c62a0</anchor>
-      <arglist>() const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::SphericalEngine</name>
-    <filename>classGeographicLib_1_1SphericalEngine.html</filename>
-    <class kind="class">GeographicLib::SphericalEngine::coeff</class>
-    <member kind="enumeration">
-      <name>normalization</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine.html</anchorfile>
-      <anchor>a5332d09191e018cbddc568c1fc71949f</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>FULL</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine.html</anchorfile>
-      <anchor>a5332d09191e018cbddc568c1fc71949fac720ca87adfc478dbfc13a37f0cf8ba9</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>SCHMIDT</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine.html</anchorfile>
-      <anchor>a5332d09191e018cbddc568c1fc71949fa2e3db3efd68d118e3f357a97eb77a131</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>Value</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine.html</anchorfile>
-      <anchor>a1157f59596dd15bf0a21b6a7fb99630b</anchor>
-      <arglist>(const coeff c[], const real f[], real x, real y, real z, real a, real &gradx, real &grady, real &gradz)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static CircularEngine</type>
-      <name>Circle</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine.html</anchorfile>
-      <anchor>af6a5fa63535d47cf528b733bb6a97901</anchor>
-      <arglist>(const coeff c[], const real f[], real p, real z, real a)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>RootTable</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine.html</anchorfile>
-      <anchor>a7fac63262c0a8bb18aee8c962a08d429</anchor>
-      <arglist>(int N)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>ClearRootTable</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine.html</anchorfile>
-      <anchor>ab3fb8f933adb257df6b7537268d55a75</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="friend" protection="private">
-      <type>friend class</type>
-      <name>CircularEngine</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine.html</anchorfile>
-      <anchor>a0c689dbf7b6bf2fb4cffb109085b1d3b</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::SphericalEngine::coeff</name>
-    <filename>classGeographicLib_1_1SphericalEngine_1_1coeff.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>coeff</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a98ee0fd797434667a8cb5093d7644af4</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>coeff</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a45a4378903a4f3ee817c47b72d086183</anchor>
-      <arglist>(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>coeff</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a2f453e210345b33a364bf5a3bee84b7b</anchor>
-      <arglist>(const std::vector< real > &C, const std::vector< real > &S, int N)</arglist>
-    </member>
-    <member kind="function">
-      <type>int</type>
-      <name>N</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a38ab91101bb639963e094327a22fed59</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>int</type>
-      <name>nmx</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a96467118f9c16c16259d4fbbed3917ff</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>int</type>
-      <name>mmx</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a2a1ff83503433c64bd4399689a3e40f6</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>int</type>
-      <name>index</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a356d705a99ee15089d1faabd0c01084c</anchor>
-      <arglist>(int n, int m) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Cv</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>ab591ddf74f5653c16b58ed2f5bde5ffe</anchor>
-      <arglist>(int k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Sv</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>ac93aaebb09086ab14330aafc0f105a17</anchor>
-      <arglist>(int k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Cv</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>ad30081b2dfdee79652aacbc24bacb635</anchor>
-      <arglist>(int k, int n, int m, real f) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Sv</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a4fc7e6c7faf3f5940ee8f3ab28216897</anchor>
-      <arglist>(int k, int n, int m, real f) const </arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static int</type>
-      <name>Csize</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a8a126c9790a7a1609046fbae7934e587</anchor>
-      <arglist>(int N, int M)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static int</type>
-      <name>Ssize</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a98a75827d68247cf5ad1843d9d68b222</anchor>
-      <arglist>(int N, int M)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>readcoeffs</name>
-      <anchorfile>classGeographicLib_1_1SphericalEngine_1_1coeff.html</anchorfile>
-      <anchor>a2d545f589894683e7de297c42b7c995a</anchor>
-      <arglist>(std::istream &stream, int &N, int &M, std::vector< real > &C, std::vector< real > &S)</arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::SphericalHarmonic</name>
-    <filename>classGeographicLib_1_1SphericalHarmonic.html</filename>
-    <member kind="enumeration">
-      <name>normalization</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>a889791c67edc32865996842c600104eb</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>FULL</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>SCHMIDT</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>SphericalHarmonic</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>adb71d28aa60a813ca3384f9c58ef8fa1</anchor>
-      <arglist>(const std::vector< real > &C, const std::vector< real > &S, int N, real a, unsigned norm=FULL)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>SphericalHarmonic</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>a2ed62c0ad8fb1ab36d5a331a3f33c3d7</anchor>
-      <arglist>(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, real a, unsigned norm=FULL)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>SphericalHarmonic</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>a6d97388f273d1511a8191d812e9bde3e</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>a42480d85a81238f612a6178410bf97ff</anchor>
-      <arglist>(real x, real y, real z) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>a5046d787c241c5216cfeb0062673cbd7</anchor>
-      <arglist>(real x, real y, real z, real &gradx, real &grady, real &gradz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>CircularEngine</type>
-      <name>Circle</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>a2b2b2ad35bba090a4956693ba5ef0f32</anchor>
-      <arglist>(real p, real z, bool gradp) const </arglist>
-    </member>
-    <member kind="function">
-      <type>const SphericalEngine::coeff &</type>
-      <name>Coefficients</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic.html</anchorfile>
-      <anchor>ac8886de1d1400ecf6482f6441c76a8a0</anchor>
-      <arglist>() const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::SphericalHarmonic1</name>
-    <filename>classGeographicLib_1_1SphericalHarmonic1.html</filename>
-    <member kind="enumeration">
-      <name>normalization</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>ac4aaa81e0f753894ecef173c4d667916</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>FULL</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>SCHMIDT</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>SphericalHarmonic1</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>aeb3299ea40b0bedae55fd0a6f0c1fa40</anchor>
-      <arglist>(const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, real a, unsigned norm=FULL)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>SphericalHarmonic1</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>aca472a143f7e000e232f4c261550b626</anchor>
-      <arglist>(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, const std::vector< real > &C1, const std::vector< real > &S1, int N1, int nmx1, int mmx1, real a, unsigned norm=FULL)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>SphericalHarmonic1</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>aa976378e6eae1e85ce04976b631ccb5f</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>a43098674b6bb823ccbac8908a7831234</anchor>
-      <arglist>(real tau, real x, real y, real z) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>ac732f25af07eee71ad0ca288a2e86fbd</anchor>
-      <arglist>(real tau, real x, real y, real z, real &gradx, real &grady, real &gradz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>CircularEngine</type>
-      <name>Circle</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>a32dd4989c40181939d667298681625f6</anchor>
-      <arglist>(real tau, real p, real z, bool gradp) const </arglist>
-    </member>
-    <member kind="function">
-      <type>const SphericalEngine::coeff &</type>
-      <name>Coefficients</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>a67fe3c8ab08be94a300d07c98814aab0</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const SphericalEngine::coeff &</type>
-      <name>Coefficients1</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic1.html</anchorfile>
-      <anchor>ad200e309790cd6e41bb79529d9076274</anchor>
-      <arglist>() const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::SphericalHarmonic2</name>
-    <filename>classGeographicLib_1_1SphericalHarmonic2.html</filename>
-    <member kind="enumeration">
-      <name>normalization</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>adbdc59ce4e6f1e4ce0fc7169c760f8be</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>FULL</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>SCHMIDT</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>SphericalHarmonic2</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>a897f6b15b82812e874a2b0927cfc3912</anchor>
-      <arglist>(const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, const std::vector< real > &C2, const std::vector< real > &S2, int N2, real a, unsigned norm=FULL)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>SphericalHarmonic2</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>a19300de2d629c014883026bf0042b6f0</anchor>
-      <arglist>(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, const std::vector< real > &C1, const std::vector< real > &S1, int N1, int nmx1, int mmx1, const std::vector< real > &C2, const std::vector< real > &S2, int N2, int nmx2, int mmx2, real a, unsigned norm=FULL)</arglist>
-    </member>
-    <member kind="function">
-      <type></type>
-      <name>SphericalHarmonic2</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>a2fad42164df6175bc376e2f78e3e0c5a</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>a48f85ac41417815e6735ff5aa7d74155</anchor>
-      <arglist>(real tau1, real tau2, real x, real y, real z) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>operator()</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>a762d48fc2c3dc902859286de4df7672c</anchor>
-      <arglist>(real tau1, real tau2, real x, real y, real z, real &gradx, real &grady, real &gradz) const </arglist>
-    </member>
-    <member kind="function">
-      <type>CircularEngine</type>
-      <name>Circle</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>a3aa683a43a8e9232a16390b09c6be920</anchor>
-      <arglist>(real tau1, real tau2, real p, real z, bool gradp) const </arglist>
-    </member>
-    <member kind="function">
-      <type>const SphericalEngine::coeff &</type>
-      <name>Coefficients</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>a166338f0b4ccf89c48278bb9514046f0</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const SphericalEngine::coeff &</type>
-      <name>Coefficients1</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>a51751279dc4e0b6e19886723f8e8b493</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>const SphericalEngine::coeff &</type>
-      <name>Coefficients2</name>
-      <anchorfile>classGeographicLib_1_1SphericalHarmonic2.html</anchorfile>
-      <anchor>a676b4c36923744bf5057b24484d9cf60</anchor>
-      <arglist>() const </arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::TransverseMercator</name>
-    <filename>classGeographicLib_1_1TransverseMercator.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>TransverseMercator</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercator.html</anchorfile>
-      <anchor>a9a4074c9d0ea35f0ebfc9c9f73bd3183</anchor>
-      <arglist>(real a, real f, real k0)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercator.html</anchorfile>
-      <anchor>a07d73a6d94e2434cbb937978d61a5ae7</anchor>
-      <arglist>(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercator.html</anchorfile>
-      <anchor>a15611aee4e3707e155278bab02403a07</anchor>
-      <arglist>(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercator.html</anchorfile>
-      <anchor>af689c212234963734354347d56bf12f6</anchor>
-      <arglist>(real lon0, real lat, real lon, real &x, real &y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercator.html</anchorfile>
-      <anchor>ac3bd58646dd6c06731a9baadee11f7e5</anchor>
-      <arglist>(real lon0, real x, real y, real &lat, real &lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercator.html</anchorfile>
-      <anchor>a47e93a8cde548b6e8d7c4c076bac4be6</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercator.html</anchorfile>
-      <anchor>a6571ba8c59fd7e5e32c9994d37d4cdb5</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>CentralScale</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercator.html</anchorfile>
-      <anchor>a63876dc20e8765501ca62022f9a73432</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const TransverseMercator</type>
-      <name>UTM</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercator.html</anchorfile>
-      <anchor>aa25b52e35bc54c368e6c8b17e02b0542</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::TransverseMercatorExact</name>
-    <filename>classGeographicLib_1_1TransverseMercatorExact.html</filename>
-    <member kind="function">
-      <type></type>
-      <name>TransverseMercatorExact</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercatorExact.html</anchorfile>
-      <anchor>a72ffcc89eee6f30a6d1f4d061518a6f1</anchor>
-      <arglist>(real a, real f, real k0, bool extendp=false)</arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercatorExact.html</anchorfile>
-      <anchor>a0dab8d1a275df9e4796d2d858f42f7e3</anchor>
-      <arglist>(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercatorExact.html</anchorfile>
-      <anchor>a350070780708de5a622d4f4c4757104c</anchor>
-      <arglist>(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercatorExact.html</anchorfile>
-      <anchor>a39c294a3389af325c41a8de51fd9228a</anchor>
-      <arglist>(real lon0, real lat, real lon, real &x, real &y) const </arglist>
-    </member>
-    <member kind="function">
-      <type>void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercatorExact.html</anchorfile>
-      <anchor>a56ff2f371d59e2ca0da8644571706169</anchor>
-      <arglist>(real lon0, real x, real y, real &lat, real &lon) const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercatorExact.html</anchorfile>
-      <anchor>a19083f16ecfc51f9020d7242b3ded43e</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercatorExact.html</anchorfile>
-      <anchor>a4045ec4b01c99c4bb589b1b3e7e07ca4</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="function">
-      <type>Math::real</type>
-      <name>CentralScale</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercatorExact.html</anchorfile>
-      <anchor>a355a827f45c194d56a465e0d4f91c3a3</anchor>
-      <arglist>() const </arglist>
-    </member>
-    <member kind="variable" static="yes">
-      <type>static const TransverseMercatorExact</type>
-      <name>UTM</name>
-      <anchorfile>classGeographicLib_1_1TransverseMercatorExact.html</anchorfile>
-      <anchor>a68668637e754201897bddb82baaf634b</anchor>
-      <arglist></arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::Utility</name>
-    <filename>classGeographicLib_1_1Utility.html</filename>
-    <member kind="function" static="yes">
-      <type>static int</type>
-      <name>day</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a877a58000a56bc84c354cf42b4b1cd99</anchor>
-      <arglist>(int y, int m=1, int d=1)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static int</type>
-      <name>day</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a0590e044fe0352adc10a58c46fa1e529</anchor>
-      <arglist>(int y, int m, int d, bool check)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>date</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>aa6955e745deebb79795b12ab139798e0</anchor>
-      <arglist>(int s, int &y, int &m, int &d)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>date</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a3b62cb71f8b7cafd49c1bf3389298525</anchor>
-      <arglist>(const std::string &s, int &y, int &m, int &d)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static int</type>
-      <name>dow</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a42a6f8679c068dcb06f1da26aa21dfb1</anchor>
-      <arglist>(int y, int m, int d)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static int</type>
-      <name>dow</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a4687c34e55dc7ccc135e31a72402f008</anchor>
-      <arglist>(int s)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>fractionalyear</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a074607cb34326b7109532c8fdd07e38c</anchor>
-      <arglist>(const std::string &s)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>str</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>ae87a7ae2bee75f724907af9f753f03b7</anchor>
-      <arglist>(T x, int p=-1)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>num</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>aa35f1f83c0543558a79b3cf42ddf50c8</anchor>
-      <arglist>(const std::string &s)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>nummatch</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>ad0d89bfe63814bab5312306fe3ac2b43</anchor>
-      <arglist>(const std::string &s)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static T</type>
-      <name>fract</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a46b13d9ce2893f7e0fe6e7da093f528f</anchor>
-      <arglist>(const std::string &s)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static int</type>
-      <name>lookup</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a9a47fdaaa00a92e9a42035e62bd98faa</anchor>
-      <arglist>(const std::string &s, char c)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>readarray</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a23e88040ceb60bd3fe28efc04f9119f8</anchor>
-      <arglist>(std::istream &str, IntT array[], size_t num)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>readarray</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a044796b4fc14a952abec27da27fc20be</anchor>
-      <arglist>(std::istream &str, std::vector< IntT > &array)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>writearray</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a276eb20ace49c5260e1878c7d8aefd31</anchor>
-      <arglist>(std::ostream &str, const IntT array[], size_t num)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>writearray</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a0621066e4aa146a2c100802375e70389</anchor>
-      <arglist>(std::ostream &str, std::vector< IntT > &array)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static bool</type>
-      <name>ParseLine</name>
-      <anchorfile>classGeographicLib_1_1Utility.html</anchorfile>
-      <anchor>a96252f445a912b77517bff04d4d6ea74</anchor>
-      <arglist>(const std::string &line, std::string &key, std::string &val)</arglist>
-    </member>
-  </compound>
-  <compound kind="class">
-    <name>GeographicLib::UTMUPS</name>
-    <filename>classGeographicLib_1_1UTMUPS.html</filename>
-    <member kind="enumeration">
-      <name>zonespec</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>MINPSEUDOZONE</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7a058ac8a834bbc78ce73d9b37a1a5dfb9</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>INVALID</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>MATCH</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7a9059a8e3b4721e27869e99ed1ae3d320</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>UTM</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7aacc8f89ac6144b1e445ca21cbe9a2533</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>STANDARD</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>MAXPSEUDOZONE</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7ac22db7e136b6e06fba7c3c06b5888362</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>MINZONE</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>UPS</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>MINUTMZONE</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7a1413e6cc83d4bf1eb4ad1c0f1d745eb6</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>MAXUTMZONE</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7ae8e04ab8df50a062c1fe277a6880bc19</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="enumvalue">
-      <name>MAXZONE</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a</anchor>
-      <arglist></arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static int</type>
-      <name>StandardZone</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a62623c295d1b43318a9fa762c3da94ea</anchor>
-      <arglist>(real lat, real lon, int setzone=STANDARD)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a921d6c23e728e0b17651902d43fb56e8</anchor>
-      <arglist>(real lat, real lon, int &zone, bool &northp, real &x, real &y, real &gamma, real &k, int setzone=STANDARD, bool mgrslimits=false)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>aaf417ae6bed6da324aa03fc96ee0dda4</anchor>
-      <arglist>(int zone, bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k, bool mgrslimits=false)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Forward</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>aa21ec1bc26f691e0a6f2ccc44debe6f0</anchor>
-      <arglist>(real lat, real lon, int &zone, bool &northp, real &x, real &y, int setzone=STANDARD, bool mgrslimits=false)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>Reverse</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>ac8cbfd7b15c96b52b876b54ce68f7b4d</anchor>
-      <arglist>(int zone, bool northp, real x, real y, real &lat, real &lon, bool mgrslimits=false)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static void</type>
-      <name>DecodeZone</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>ad74d52d7ebeff195019745f791f30562</anchor>
-      <arglist>(const std::string &zonestr, int &zone, bool &northp)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static std::string</type>
-      <name>EncodeZone</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a3410e1e221158962f34147255653818f</anchor>
-      <arglist>(int zone, bool northp)</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>UTMShift</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>abd70d3f90f5c79a09bdd217b67e6729b</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>MajorRadius</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a293aa30508096d49db77a23917ea1092</anchor>
-      <arglist>()</arglist>
-    </member>
-    <member kind="function" static="yes">
-      <type>static Math::real</type>
-      <name>Flattening</name>
-      <anchorfile>classGeographicLib_1_1UTMUPS.html</anchorfile>
-      <anchor>a182de2e29f1181c55a266777039b8a9d</anchor>
-      <arglist>()</arglist>
-    </member>
-  </compound>
-  <compound kind="dir">
-    <name>include/GeographicLib/</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/GeographicLib/</path>
-    <filename>dir_b4d36717c8020107727c093197410e9d.html</filename>
-    <file>Accumulator.hpp</file>
-    <file>AlbersEqualArea.hpp</file>
-    <file>AzimuthalEquidistant.hpp</file>
-    <file>CassiniSoldner.hpp</file>
-    <file>CircularEngine.hpp</file>
-    <file>Constants.hpp</file>
-    <file>DMS.hpp</file>
-    <file>EllipticFunction.hpp</file>
-    <file>Geocentric.hpp</file>
-    <file>GeoCoords.hpp</file>
-    <file>Geodesic.hpp</file>
-    <file>GeodesicLine.hpp</file>
-    <file>Geoid.hpp</file>
-    <file>Gnomonic.hpp</file>
-    <file>GravityCircle.hpp</file>
-    <file>GravityModel.hpp</file>
-    <file>LambertConformalConic.hpp</file>
-    <file>LocalCartesian.hpp</file>
-    <file>MagneticCircle.hpp</file>
-    <file>MagneticModel.hpp</file>
-    <file>Math.hpp</file>
-    <file>MGRS.hpp</file>
-    <file>NormalGravity.hpp</file>
-    <file>OSGB.hpp</file>
-    <file>PolarStereographic.hpp</file>
-    <file>PolygonArea.hpp</file>
-    <file>SphericalEngine.hpp</file>
-    <file>SphericalHarmonic.hpp</file>
-    <file>SphericalHarmonic1.hpp</file>
-    <file>SphericalHarmonic2.hpp</file>
-    <file>TransverseMercator.hpp</file>
-    <file>TransverseMercatorExact.hpp</file>
-    <file>Utility.hpp</file>
-    <file>UTMUPS.hpp</file>
-  </compound>
-  <compound kind="dir">
-    <name>include/</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/include/</path>
-    <filename>dir_addd23a7fcb542c6c8ac894d486b21be.html</filename>
-    <dir>include/GeographicLib/</dir>
-  </compound>
-  <compound kind="dir">
-    <name>src/</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/src/</path>
-    <filename>dir_20dd3cf0f425f295158796088ceb05f4.html</filename>
-    <file>AlbersEqualArea.cpp</file>
-    <file>AzimuthalEquidistant.cpp</file>
-    <file>CassiniSoldner.cpp</file>
-    <file>CircularEngine.cpp</file>
-    <file>DMS.cpp</file>
-    <file>EllipticFunction.cpp</file>
-    <file>Geocentric.cpp</file>
-    <file>GeoCoords.cpp</file>
-    <file>Geodesic.cpp</file>
-    <file>GeodesicLine.cpp</file>
-    <file>Geoid.cpp</file>
-    <file>Gnomonic.cpp</file>
-    <file>GravityCircle.cpp</file>
-    <file>GravityModel.cpp</file>
-    <file>LambertConformalConic.cpp</file>
-    <file>LocalCartesian.cpp</file>
-    <file>MagneticCircle.cpp</file>
-    <file>MagneticModel.cpp</file>
-    <file>MGRS.cpp</file>
-    <file>NormalGravity.cpp</file>
-    <file>OSGB.cpp</file>
-    <file>PolarStereographic.cpp</file>
-    <file>PolygonArea.cpp</file>
-    <file>SphericalEngine.cpp</file>
-    <file>TransverseMercator.cpp</file>
-    <file>TransverseMercatorExact.cpp</file>
-    <file>Utility.cpp</file>
-    <file>UTMUPS.cpp</file>
-  </compound>
-  <compound kind="dir">
-    <name>tools/</name>
-    <path>/scratch/geographic-dist/gita/geographiclib/tools/</path>
-    <filename>dir_27ad12676aedce3065ab152db424ea04.html</filename>
-    <file>CartConvert.cpp</file>
-    <file>ConicProj.cpp</file>
-    <file>GeoConvert.cpp</file>
-    <file>Geod.cpp</file>
-    <file>GeodesicProj.cpp</file>
-    <file>GeoidEval.cpp</file>
-    <file>Gravity.cpp</file>
-    <file>MagneticField.cpp</file>
-    <file>Planimeter.cpp</file>
-    <file>TransverseMercatorProj.cpp</file>
-  </compound>
-</tagfile>
diff --git a/doc/html/Geographic_8doc.html b/doc/html/Geographic_8doc.html
deleted file mode 100644
index da5a7f8..0000000
--- a/doc/html/Geographic_8doc.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geographic.doc File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geographic.doc File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Documentation for <a class="el" href="namespaceGeographicLib.html" title="Namespace for GeographicLib.">GeographicLib</a>.  
-<a href="#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Documentation for <a class="el" href="namespaceGeographicLib.html" title="Namespace for GeographicLib.">GeographicLib</a>. </p>
-<p>Written by Charles Karney <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Geographic_8doc_source.html">Geographic.doc</a>.</p>
-</div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeoidEval.1.html b/doc/html/GeoidEval.1.html
deleted file mode 100644
index 13b32d2..0000000
--- a/doc/html/GeoidEval.1.html
+++ /dev/null
@@ -1,381 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>GeoidEval -- look up geoid heights</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#geoids">GEOIDS</a></li>
-	<li><a href="#interpolation">INTERPOLATION</a></li>
-	<li><a href="#cache">CACHE</a></li>
-	<li><a href="#environment">ENVIRONMENT</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#abbreviations">ABBREVIATIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>GeoidEval -- look up geoid heights</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>GeoidEval</strong> [ <strong>-n</strong> <em>name</em> ] [ <strong>-d</strong> <em>dir</em> ] [ <strong>-l</strong> ]
-[ <strong>-a</strong> | <strong>-c</strong> <em>south</em> <em>west</em> <em>north</em> <em>east</em> ] [ <strong>-g</strong> ]
-[ <strong>-z</strong> <em>zone</em> ] [ <strong>--msltohae</strong> ] [ <strong>--haetomsl</strong> ]
-[ <strong>-v</strong> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p><strong>GeoidEval</strong> reads in positions on standard input and prints out the
-corresponding geoid heights on standard output.  Optionally, it also
-prints the northerly and easterly gradients of the geoid height.</p>
-<p>Positions are given as latitude and longitude, UTM/UPS, or MGRS, in any
-of the formats accepted by <a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>.  (MGRS coordinates signify the
-<em>center</em> of the corresponding MGRS square.)  If the <strong>-z</strong> option is
-specified then the specified zone is prepended to each line of input
-(which must be in UTM/UPS coordinates).  This allows a file with UTM
-eastings and northings in a single zone to be used as standard input.</p>
-<p>More accurate results for the geoid height are provided by <a href="Gravity.1.html"><code>Gravity(1)</code></a>.
-This utility can also compute the direction of gravity accurately.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="n" class="item"><strong>-n</strong></a></strong></dt>
-
-<dd>
-<p>use geoid <em>name</em> instead of the default <code>egm96-5</code>.  See
-<a href="#geoids">GEOIDS</a>.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
-
-<dd>
-<p>read geoid data from <em>dir</em> instead of the default.  See
-<a href="#geoids">GEOIDS</a>.</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
-
-<dd>
-<p>use bilinear interpolation instead of cubic.  See
-<a href="#interpolation">INTERPOLATION</a>.</p>
-</dd>
-<dt><strong><a name="a" class="item"><strong>-a</strong></a></strong></dt>
-
-<dd>
-<p>cache the entire data set in memory.  See <a href="#cache">CACHE</a>.</p>
-</dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
-
-<dd>
-<p>cache the data bounded by <em>south</em> <em>west</em> <em>north</em> <em>east</em> in memory.
-See <a href="#cache">CACHE</a>.</p>
-</dd>
-<dt><strong><a name="g" class="item"><strong>-g</strong></a></strong></dt>
-
-<dd>
-<p>print the northerly and easterly gradients after the geoid height (i.e.,
-the rate at which the geoid height changes per unit distance along the
-WGS84 ellipsoid in the specified directions).  As a result of the way
-that the geoid data is stored, the calculation of gradients can result
-in large quantization errors.  This is particularly acute at high
-latitudes and for the easterly gradient.</p>
-</dd>
-<dt><strong><a name="z" class="item"><strong>-z</strong></a></strong></dt>
-
-<dd>
-<p>prefix each line of input by <em>zone</em>, e.g., <code>38N</code>.  This should be used
-when the input consists of UTM/UPS eastings and northings.</p>
-</dd>
-<dt><strong><a name="msltohae" class="item"><strong>--msltohae</strong></a></strong></dt>
-
-<dd>
-<p>standard input should include a final token on each line which is
-treated as a height (in meters) above the geoid and the output echoes
-the input line with the height converted to height above ellipsoid
-(HAE).  If <strong>-z</strong> <em>zone</em> is specified then the <em>third</em> token is treated
-as the height; this makes it possible to convert LIDAR data where each
-line consists of: easting northing height intensity.</p>
-</dd>
-<dt><strong><a name="haetomsl" class="item"><strong>--haetomsl</strong></a></strong></dt>
-
-<dd>
-<p>this is similar to <strong>--msltohae</strong> except that the height token is treated
-as a height (in meters) above the ellipsoid and the output echoes the
-input line with the height converted to height above the geoid (MSL).</p>
-</dd>
-<dt><strong><a name="v" class="item"><strong>-v</strong></a></strong></dt>
-
-<dd>
-<p>print information about the geoid on standard error before processing
-the input.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage, the default geoid path and name, and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="geoids">GEOIDS</a></h1>
-<p><strong>GeoidEval</strong> computes geoid heights by interpolating on the data in a
-regularly spaced table (see <a href="#interpolation">INTERPOLATION</a>).  The
-following geoid tables are available (however, some may not be
-installed):</p>
-<pre>
-                                  bilinear error    cubic error
-   name         geoid    grid     max      rms      max      rms
-   egm84-30     EGM84    30'      1.546 m  70 mm    0.274 m  14 mm
-   egm84-15     EGM84    15'      0.413 m  18 mm    0.021 m  1.2 mm
-   egm96-15     EGM96    15'      1.152 m  40 mm    0.169 m  7.0 mm
-   egm96-5      EGM96     5'      0.140 m  4.6 mm   .0032 m  0.7 mm
-   egm2008-5    EGM2008   5'      0.478 m  12 mm    0.294 m  4.5 mm
-   egm2008-2_5  EGM2008   2.5'    0.135 m  3.2 mm   0.031 m  0.8 mm
-   egm2008-1    EGM2008   1'      0.025 m  0.8 mm   .0022 m  0.7 mm</pre>
-<p>By default, the <code>egm96-5</code> geoid is used.  This may changed by setting
-the environment variable <a href="#geoid_name"><code>GEOID_NAME</code></a> or with the <strong>-n</strong> option.  The
-errors listed here are estimates of the quantization and interpolation
-errors in the reported heights compared to the specified geoid.</p>
-<p>The geoid data will be loaded from a directory specified at compile
-time.  This may changed by setting the environment variables
-<a href="#geoid_path"><code>GEOID_PATH</code></a> or <a href="#geographiclib_data"><code>GEOGRAPHICLIB_DATA</code></a>, or with the <strong>-d</strong> option.  The
-<strong>-h</strong> option prints the default geoid path and name.  Use the <strong>-v</strong>
-option to ascertain the full path name of the data file.</p>
-<p>Instructions for downloading and installing geoid data are available at
-<a href="http://geographiclib.sf.net/html/geoid.html#geoidinst">http://geographiclib.sf.net/html/geoid.html#geoidinst</a>.</p>
-<p><strong>NOTE</strong>: all the geoids above apply to the WGS84 ellipsoid (<em>a</em> =
-6378137 m, <em>f</em> = 1/298.257223563) only.</p>
-<p>
-</p>
-<hr />
-<h1><a name="interpolation">INTERPOLATION</a></h1>
-<p>Cubic interpolation is used to compute the geoid height unless <strong>-l</strong> is
-specified in which case bilinear interpolation is used.  The cubic
-interpolation is based on a least-squares fit of a cubic polynomial to a
-12-point stencil</p>
-<pre>
-   . 1 1 .
-   1 2 2 1
-   1 2 2 1
-   . 1 1 .</pre>
-<p>The cubic is constrained to be independent of longitude when evaluating
-the height at one of the poles.  Cubic interpolation is considerably
-more accurate than bilinear; however it results in small discontinuities
-in the returned height on cell boundaries.  The gradients are computed
-by differentiating the interpolated results.</p>
-<p>
-</p>
-<hr />
-<h1><a name="cache">CACHE</a></h1>
-<p>By default, the data file is randomly read to compute the geoid heights
-at the input positions.  Usually this is sufficient for interactive use.
-If many heights are to be computed, use <strong>-c</strong> <em>south</em> <em>west</em> <em>north</em>
-<em>east</em> to notify <strong>GeoidEval</strong> to read a rectangle of data into memory;
-heights within the this rectangle can then be computed without any disk
-access.  If <strong>-a</strong> is specified all the geoid data is read; in the case
-of <code>egm2008-1</code>, this requires about 0.5 GB of RAM.  The evaluation of
-heights outside the cached area causes the necessary data to be read
-from disk.  Use the <strong>-v</strong> option to verify the size of the cache.</p>
-<p>Regardless of whether any cache is requested (with the <strong>-a</strong> or <strong>-c</strong>
-options), the data for the last grid cell in cached.  This allows
-the geoid height along a continuous path to be returned with little
-disk overhead.</p>
-<p>
-</p>
-<hr />
-<h1><a name="environment">ENVIRONMENT</a></h1>
-<dl>
-<dt><strong><a name="geoid_name" class="item"><strong>GEOID_NAME</strong></a></strong></dt>
-
-<dd>
-<p>Override the compile-time default geoid name of <code>egm96-5</code>.  The <strong>-h</strong>
-option reports the value of <strong>GEOID_NAME</strong>, if defined, otherwise it
-reports the compile-time value.  If the <strong>-n</strong> <em>name</em> option is used,
-then <em>name</em> takes precedence.</p>
-</dd>
-<dt><strong><a name="geoid_path" class="item"><strong>GEOID_PATH</strong></a></strong></dt>
-
-<dd>
-<p>Override the compile-time default geoid path.  This is typically
-<code>/usr/local/share/GeographicLib/geoids</code> on Unix-like systems and
-<code>C:/Documents and Settings/All Users/Application
-Data/GeographicLib/geoids</code> on Windows systems.  The <strong>-h</strong> option reports
-the value of <strong>GEOID_PATH</strong>, if defined, otherwise it reports the
-compile-time value.  If the <strong>-d</strong> <em>dir</em> option is used, then <em>dir</em>
-takes precedence.</p>
-</dd>
-<dt><strong><a name="geographiclib_data" class="item"><strong>GEOGRAPHICLIB_DATA</strong></a></strong></dt>
-
-<dd>
-<p>Another way of overriding the compile-time default magnetic path.  If it
-is set (and if <strong>MAGNETIC_PATH</strong> is not set), then
-$<strong>GEOGRAPHICLIB_DATA</strong>/magnetic is used.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>GeoidEval</strong> to return an exit code
-of 1.  However, an error does not cause <strong>GeoidEval</strong> to terminate;
-following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="abbreviations">ABBREVIATIONS</a></h1>
-<p>The geoid is usually approximated by an "earth gravity model". The
-models published by the NGA are:</p>
-<dl>
-<dt><strong><a name="egm84" class="item"><strong>EGM84</strong></a></strong></dt>
-
-<dd>
-<p>An earth gravity model published by the NGA in 1984,
-<a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html</a>.</p>
-</dd>
-<dt><strong><a name="egm96" class="item"><strong>EGM96</strong></a></strong></dt>
-
-<dd>
-<p>An earth gravity model published by the NGA in 1996,
-<a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html</a>.</p>
-</dd>
-<dt><strong><a name="egm2008" class="item"><strong>EGM2008</strong></a></strong></dt>
-
-<dd>
-<p>An earth gravity model published by the NGA in 2008,
-<a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008</a>.</p>
-</dd>
-<dt><strong><a name="wgs84" class="item"><strong>WGS84</strong></a></strong></dt>
-
-<dd>
-<p>World Geodetic System 1984,
-<a href="http://en.wikipedia.org/wiki/WGS84">http://en.wikipedia.org/wiki/WGS84</a>.</p>
-</dd>
-<dt><strong><a name="hae" class="item"><strong>HAE</strong></a></strong></dt>
-
-<dd>
-<p>Height above the WGS84 ellipsoid.</p>
-</dd>
-<dt><strong><a name="msl" class="item"><strong>MSL</strong></a></strong></dt>
-
-<dd>
-<p>Mean sea level, used as a convenient short hand for the geoid.
-(However, typically, the geoid differs by a few meters from mean sea
-level.)</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<p>The height of the EGM96 geoid at Timbuktu</p>
-<pre>
-    echo 16:46:33N 3:00:34W | GeoidEval
-    => 28.7068 -0.02e-6 -1.73e-6</pre>
-<p>The first number returned is the height of the geoid and the 2nd and 3rd
-are its slopes in the northerly and easterly directions.</p>
-<p>Convert a point in UTM zone 18N from MSL to HAE</p>
-<pre>
-   echo 531595 4468135 23 | GeoidEval --msltohae -z 18N
-   => 531595 4468135 -10.842</pre>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p><a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>, <a href="Gravity.1.html"><code>Gravity(1)</code></a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>GeoidEval</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>GeoidEval</strong> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>,
-in 2009-09.</p>
-
-</body>
-
-</html>
diff --git a/doc/html/GeoidEval_8cpp.html b/doc/html/GeoidEval_8cpp.html
deleted file mode 100644
index ff2c1cc..0000000
--- a/doc/html/GeoidEval_8cpp.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeoidEval.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeoidEval.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for evaluating geoid heights.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="Geoid_8hpp_source.html">GeographicLib/Geoid.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include <<a class="el" href="GeoCoords_8hpp_source.html">GeographicLib/GeoCoords.hpp</a>></code><br/>
-<code>#include "GeoidEval.usage"</code><br/>
-</div>
-<p><a href="GeoidEval_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="GeoidEval_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for evaluating geoid heights. </p>
-<p>Copyright (c) Charles Karney (2009-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o GeoidEval \ <a class="el" href="GeoidEval_8cpp.html" title="Command line utility for evaluating geoid heights.">GeoidEval.cpp</a> \ ../src/DMS.cpp \ ../src/GeoCoords.cpp \ ../src/Geoid.cpp \ ../src/MGRS.cpp \ ../src/PolarStereographic.cpp \ ../src/TransverseMercator.cpp \ ../src/UTMUPS.cpp</p>
-<p>See the <a href="GeoidEval.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="GeoidEval_8cpp_source.html">GeoidEval.cpp</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="GeoidEval.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GeoidEval_8cpp_source.html#l00035">35</a> of file <a class="el" href="GeoidEval_8cpp_source.html">GeoidEval.cpp</a>.</p>
-
-<p>References <a class="el" href="Geoid_8cpp_source.html#l00542">GeographicLib::Geoid::DefaultGeoidName()</a>, <a class="el" href="DMS_8cpp_source.html#l00207">GeographicLib::DMS::DecodeLatLon()</a>, <a class="el" href="UTMUPS_8cpp_source.html#l00186">GeographicLib::UTMUPS::DecodeZone()</a>, <a class="el" href="UTMUPS_8hpp_source.html#l00128">GeographicLib::UTMUPS::MINZONE</a>, <a class="el" href="UTMUPS_8hpp_source.html#l00144">GeographicLib::UTMUPS::MAXZONE</a>, <a class="el" href="Geo [...]
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GeoidEval_8cpp_source.html b/doc/html/GeoidEval_8cpp_source.html
deleted file mode 100644
index 97419ca..0000000
--- a/doc/html/GeoidEval_8cpp_source.html
+++ /dev/null
@@ -1,372 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeoidEval.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeoidEval.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GeoidEval_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GeoidEval.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for evaluating geoid heights</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o GeoidEval \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       GeoidEval.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/GeoCoords.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/Geoid.cpp \</span>
-<a name="l00015"></a>00015 <span class="comment"> *       ../src/MGRS.cpp \</span>
-<a name="l00016"></a>00016 <span class="comment"> *       ../src/PolarStereographic.cpp \</span>
-<a name="l00017"></a>00017 <span class="comment"> *       ../src/TransverseMercator.cpp \</span>
-<a name="l00018"></a>00018 <span class="comment"> *       ../src/UTMUPS.cpp</span>
-<a name="l00019"></a>00019 <span class="comment"> *</span>
-<a name="l00020"></a>00020 <span class="comment"> * See the <a href="GeoidEval.1.html">man page</a> for usage</span>
-<a name="l00021"></a>00021 <span class="comment"> * information.</span>
-<a name="l00022"></a>00022 <span class="comment"> **********************************************************************/</span>
-<a name="l00023"></a>00023 
-<a name="l00024"></a>00024 <span class="preprocessor">#include <iostream></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <string></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <sstream></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <fstream></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <<a class="code" href="Geoid_8hpp.html" title="Header for GeographicLib::Geoid class.">GeographicLib/Geoid.hpp</a>></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <<a class="code" href="GeoCoords_8hpp.html" title="Header for GeographicLib::GeoCoords class.">GeographicLib/GeoCoords.hpp</a>></span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="preprocessor">#include "GeoidEval.usage"</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a><a class="code" href="GeoidEval_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00035</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00036"></a>00036   <span class="keywordflow">try</span> {
-<a name="l00037"></a>00037     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00038"></a>00038     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00039"></a>00039     <span class="keywordtype">bool</span> cacheall = <span class="keyword">false</span>, cachearea = <span class="keyword">false</span>, verbose = <span class="keyword">false</span>,
-<a name="l00040"></a>00040       cubic = <span class="keyword">true</span>, gradp = <span class="keyword">false</span>;
-<a name="l00041"></a>00041     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> caches, cachew, cachen, cachee;
-<a name="l00042"></a>00042     std::string dir;
-<a name="l00043"></a>00043     std::string geoid = <a class="code" href="classGeographicLib_1_1Geoid.html#a048865342b2b12ed2272e547209381fd">Geoid::DefaultGeoidName</a>();
-<a name="l00044"></a>00044     <a class="code" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a>::convertflag heightmult = <a class="code" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a>::NONE;
-<a name="l00045"></a>00045     std::string istring, ifile, ofile, cdelim;
-<a name="l00046"></a>00046     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>;
-<a name="l00047"></a>00047     <span class="keywordtype">bool</span> northp = <span class="keyword">false</span>;
-<a name="l00048"></a>00048     <span class="keywordtype">int</span> zonenum = <a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>::INVALID;
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00051"></a>00051       std::string arg(argv[m]);
-<a name="l00052"></a>00052       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-a"</span>) {
-<a name="l00053"></a>00053         cacheall = <span class="keyword">true</span>;
-<a name="l00054"></a>00054         cachearea = <span class="keyword">false</span>;
-<a name="l00055"></a>00055       }
-<a name="l00056"></a>00056       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-c"</span>) {
-<a name="l00057"></a>00057         <span class="keywordflow">if</span> (m + 4 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00058"></a>00058         cacheall = <span class="keyword">false</span>;
-<a name="l00059"></a>00059         cachearea = <span class="keyword">true</span>;
-<a name="l00060"></a>00060         <span class="keywordflow">try</span> {
-<a name="l00061"></a>00061           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(std::string(argv[m + 1]), std::string(argv[m + 2]),
-<a name="l00062"></a>00062                             caches, cachew);
-<a name="l00063"></a>00063           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(std::string(argv[m + 3]), std::string(argv[m + 4]),
-<a name="l00064"></a>00064                             cachen, cachee);
-<a name="l00065"></a>00065         }
-<a name="l00066"></a>00066         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00067"></a>00067           std::cerr << <span class="stringliteral">"Error decoding argument of -c: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00068"></a>00068           <span class="keywordflow">return</span> 1;
-<a name="l00069"></a>00069         }
-<a name="l00070"></a>00070         m += 4;
-<a name="l00071"></a>00071       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--msltohae"</span>)
-<a name="l00072"></a>00072         heightmult = <a class="code" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a>::GEOIDTOELLIPSOID;
-<a name="l00073"></a>00073       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--haetomsl"</span>)
-<a name="l00074"></a>00074         heightmult = <a class="code" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a>::ELLIPSOIDTOGEOID;
-<a name="l00075"></a>00075       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-z"</span>) {
-<a name="l00076"></a>00076         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00077"></a>00077         std::string zone = argv[m];
-<a name="l00078"></a>00078         <span class="keywordflow">try</span> {
-<a name="l00079"></a>00079           <a class="code" href="classGeographicLib_1_1UTMUPS.html#ad74d52d7ebeff195019745f791f30562">UTMUPS::DecodeZone</a>(zone, zonenum, northp);
-<a name="l00080"></a>00080         }
-<a name="l00081"></a>00081         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00082"></a>00082           std::cerr << <span class="stringliteral">"Error decoding zone: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00083"></a>00083           <span class="keywordflow">return</span> 1;
-<a name="l00084"></a>00084         }
-<a name="l00085"></a>00085         <span class="keywordflow">if</span> (!(zonenum >= <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1">UTMUPS::MINZONE</a> && zonenum <= <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a">UTMUPS::MAXZONE</a>)) {
-<a name="l00086"></a>00086           std::cerr << <span class="stringliteral">"Illegal zone "</span> << zone << <span class="stringliteral">"\n"</span>;
-<a name="l00087"></a>00087           <span class="keywordflow">return</span> 1;
-<a name="l00088"></a>00088         }
-<a name="l00089"></a>00089       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-n"</span>) {
-<a name="l00090"></a>00090         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00091"></a>00091         geoid = argv[m];
-<a name="l00092"></a>00092       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-d"</span>) {
-<a name="l00093"></a>00093         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00094"></a>00094         dir = argv[m];
-<a name="l00095"></a>00095       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-l"</span>)
-<a name="l00096"></a>00096         cubic = <span class="keyword">false</span>;
-<a name="l00097"></a>00097       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-g"</span>)
-<a name="l00098"></a>00098         gradp = <span class="keyword">true</span>;
-<a name="l00099"></a>00099       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-v"</span>)
-<a name="l00100"></a>00100         verbose = <span class="keyword">true</span>;
-<a name="l00101"></a>00101       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00102"></a>00102         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00103"></a>00103         istring = argv[m];
-<a name="l00104"></a>00104       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00105"></a>00105         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00106"></a>00106         ifile = argv[m];
-<a name="l00107"></a>00107       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00108"></a>00108         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00109"></a>00109         ofile = argv[m];
-<a name="l00110"></a>00110       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00111"></a>00111         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00112"></a>00112         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00113"></a>00113           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00114"></a>00114           <span class="keywordflow">return</span> 1;
-<a name="l00115"></a>00115         }
-<a name="l00116"></a>00116         lsep = argv[m][0];
-<a name="l00117"></a>00117       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00118"></a>00118         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00119"></a>00119         cdelim = argv[m];
-<a name="l00120"></a>00120       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00121"></a>00121         std::cout
-<a name="l00122"></a>00122           << argv[0]
-<a name="l00123"></a>00123           << <span class="stringliteral">": $Id: 6db1ff0b8309a39d0d9b0250dd73be964c5efb7c $\n"</span>
-<a name="l00124"></a>00124           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00125"></a>00125         <span class="keywordflow">return</span> 0;
-<a name="l00126"></a>00126       } <span class="keywordflow">else</span> {
-<a name="l00127"></a>00127         <span class="keywordtype">int</span> retval = usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00128"></a>00128         <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-h"</span>)
-<a name="l00129"></a>00129           std::cout<< <span class="stringliteral">"\nDefault geoid path = \""</span>   << <a class="code" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">Geoid::DefaultGeoidPath</a>()
-<a name="l00130"></a>00130                    << <span class="stringliteral">"\"\nDefault geoid name = \""</span> << <a class="code" href="classGeographicLib_1_1Geoid.html#a048865342b2b12ed2272e547209381fd">Geoid::DefaultGeoidName</a>()
-<a name="l00131"></a>00131                    << <span class="stringliteral">"\"\n"</span>;
-<a name="l00132"></a>00132         <span class="keywordflow">return</span> retval;
-<a name="l00133"></a>00133       }
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00137"></a>00137       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00138"></a>00138       <span class="keywordflow">return</span> 1;
-<a name="l00139"></a>00139     }
-<a name="l00140"></a>00140     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00141"></a>00141     std::ifstream infile;
-<a name="l00142"></a>00142     std::istringstream instring;
-<a name="l00143"></a>00143     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00144"></a>00144       infile.open(ifile.c_str());
-<a name="l00145"></a>00145       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00146"></a>00146         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00147"></a>00147         <span class="keywordflow">return</span> 1;
-<a name="l00148"></a>00148       }
-<a name="l00149"></a>00149     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00150"></a>00150       std::string::size_type m = 0;
-<a name="l00151"></a>00151       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00152"></a>00152         m = istring.find(lsep, m);
-<a name="l00153"></a>00153         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00154"></a>00154           <span class="keywordflow">break</span>;
-<a name="l00155"></a>00155         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00156"></a>00156       }
-<a name="l00157"></a>00157       instring.str(istring);
-<a name="l00158"></a>00158     }
-<a name="l00159"></a>00159     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00160"></a>00160       (!istring.empty() ? &instring : &std::cin);
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     std::ofstream outfile;
-<a name="l00163"></a>00163     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00164"></a>00164     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00165"></a>00165       outfile.open(ofile.c_str());
-<a name="l00166"></a>00166       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00167"></a>00167         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00168"></a>00168         <span class="keywordflow">return</span> 1;
-<a name="l00169"></a>00169       }
-<a name="l00170"></a>00170     }
-<a name="l00171"></a>00171     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     <span class="keywordtype">int</span> retval = 0;
-<a name="l00174"></a>00174     <span class="keywordflow">try</span> {
-<a name="l00175"></a>00175       <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a> g(geoid, dir, cubic);
-<a name="l00176"></a>00176       <span class="keywordflow">try</span> {
-<a name="l00177"></a>00177         <span class="keywordflow">if</span> (cacheall)
-<a name="l00178"></a>00178           g.<a class="code" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">CacheAll</a>();
-<a name="l00179"></a>00179         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cachearea)
-<a name="l00180"></a>00180           g.<a class="code" href="classGeographicLib_1_1Geoid.html#a52b5dc2d976796046aaeb8765e4a9c0f">CacheArea</a>(caches, cachew, cachen, cachee);
-<a name="l00181"></a>00181       }
-<a name="l00182"></a>00182       <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00183"></a>00183         std::cerr << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\nProceeding without a cache\n"</span>;
-<a name="l00184"></a>00184       }
-<a name="l00185"></a>00185       <span class="keywordflow">if</span> (verbose) {
-<a name="l00186"></a>00186         std::cerr << <span class="stringliteral">"Geoid file: "</span>    << g.<a class="code" href="classGeographicLib_1_1Geoid.html#a07e5f704f2684ce5acf824b7e0b17d30">GeoidFile</a>()     << <span class="stringliteral">"\n"</span>
-<a name="l00187"></a>00187                   << <span class="stringliteral">"Description: "</span>   << g.<a class="code" href="classGeographicLib_1_1Geoid.html#a37d76bcfe0ddf9b84042d701c312e941">Description</a>()   << <span class="stringliteral">"\n"</span>
-<a name="l00188"></a>00188                   << <span class="stringliteral">"Interpolation: "</span> << g.<a class="code" href="classGeographicLib_1_1Geoid.html#a0ddfefaef196023486fc7642af45cf96">Interpolation</a>() << <span class="stringliteral">"\n"</span>
-<a name="l00189"></a>00189                   << <span class="stringliteral">"Date & Time: "</span>   << g.<a class="code" href="classGeographicLib_1_1Geoid.html#a9cd7304b5df37001f4ad3c91cdbc56f4">DateTime</a>()      << <span class="stringliteral">"\n"</span>
-<a name="l00190"></a>00190                   << <span class="stringliteral">"Offset (m): "</span>    << g.<a class="code" href="classGeographicLib_1_1Geoid.html#ac798950a643e4286aa8d3bb8cd9b0815">Offset</a>()        << <span class="stringliteral">"\n"</span>
-<a name="l00191"></a>00191                   << <span class="stringliteral">"Scale (m): "</span>     << g.<a class="code" href="classGeographicLib_1_1Geoid.html#ab2346300c12ff7e70d35e08479ecede1">Scale</a>()         << <span class="stringliteral">"\n"</span>
-<a name="l00192"></a>00192                   << <span class="stringliteral">"Max error (m): "</span> << g.<a class="code" href="classGeographicLib_1_1Geoid.html#aff538da14578a02c551b411a899e567a">MaxError</a>()      << <span class="stringliteral">"\n"</span>
-<a name="l00193"></a>00193                   << <span class="stringliteral">"RMS error (m): "</span> << g.<a class="code" href="classGeographicLib_1_1Geoid.html#a207f98316d20a5b9d47846e559c5e2a2">RMSError</a>()      << <span class="stringliteral">"\n"</span>;
-<a name="l00194"></a>00194         <span class="keywordflow">if</span> (g.<a class="code" href="classGeographicLib_1_1Geoid.html#ade5715c0d1428a409383b1acd2cbe9be">Cache</a>())
-<a name="l00195"></a>00195           std::cerr<< <span class="stringliteral">"Caching:"</span>
-<a name="l00196"></a>00196                    << <span class="stringliteral">"\n SW Corner: "</span> << g.<a class="code" href="classGeographicLib_1_1Geoid.html#aa3db8f9639eb231539376e4617a3d59e">CacheSouth</a>() << <span class="stringliteral">" "</span> << g.<a class="code" href="classGeographicLib_1_1Geoid.html#aa0d2e119f089ee4182987ddd3faaf62a">CacheWest</a>()
-<a name="l00197"></a>00197                    << <span class="stringliteral">"\n NE Corner: "</span> << g.<a class="code" href="classGeographicLib_1_1Geoid.html#a26742332938bb8f22be23c979ffb02a1">CacheNorth</a>() << <span class="stringliteral">" "</span> << g.<a class="code" href="classGeographicLib_1_1Geoid.html#acb34cfbcfb8be2794b16a3d18209dbbe">CacheEast</a>()
-<a name="l00198"></a>00198                    << <span class="stringliteral">"\n"</span>;
-<a name="l00199"></a>00199       }
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201       <a class="code" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeoCoords</a> p;
-<a name="l00202"></a>00202       std::string s, suff;
-<a name="l00203"></a>00203       <span class="keyword">const</span> <span class="keywordtype">char</span>* spaces = <span class="stringliteral">" \t\n\v\f\r,"</span>; <span class="comment">// Include comma as space</span>
-<a name="l00204"></a>00204       <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00205"></a>00205         <span class="keywordflow">try</span> {
-<a name="l00206"></a>00206           std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00207"></a>00207           <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00208"></a>00208             std::string::size_type m = s.find(cdelim);
-<a name="l00209"></a>00209             <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00210"></a>00210               eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00211"></a>00211               std::string::size_type m1 =
-<a name="l00212"></a>00212                 m > 0 ? s.find_last_not_of(spaces, m - 1) : std::string::npos;
-<a name="l00213"></a>00213               s = s.substr(0, m1 != std::string::npos ? m1 + 1 : m);
-<a name="l00214"></a>00214             }
-<a name="l00215"></a>00215           }
-<a name="l00216"></a>00216           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> height = 0;
-<a name="l00217"></a>00217           <span class="keywordflow">if</span> (zonenum != <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0">UTMUPS::INVALID</a>) {
-<a name="l00218"></a>00218             <span class="comment">// Expect "easting northing" if heightmult == 0, or</span>
-<a name="l00219"></a>00219             <span class="comment">// "easting northing height" if heightmult != 0.</span>
-<a name="l00220"></a>00220             std::string::size_type pa = 0, pb = 0;
-<a name="l00221"></a>00221             <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> easting = 0, northing = 0;
-<a name="l00222"></a>00222             <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < (heightmult ? 3 : 2); ++i) {
-<a name="l00223"></a>00223               <span class="keywordflow">if</span> (pb == std::string::npos)
-<a name="l00224"></a>00224                 <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00225"></a>00225               <span class="comment">// Start of i'th token</span>
-<a name="l00226"></a>00226               pa = s.find_first_not_of(spaces, pb);
-<a name="l00227"></a>00227               <span class="keywordflow">if</span> (pa == std::string::npos)
-<a name="l00228"></a>00228                 <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00229"></a>00229               <span class="comment">// End of i'th token</span>
-<a name="l00230"></a>00230               pb = s.find_first_of(spaces, pa);
-<a name="l00231"></a>00231               (i == 2 ? height : (i == 0 ? easting : northing)) =
-<a name="l00232"></a>00232                 <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(s.substr(pa, (pb == std::string::npos ?
-<a name="l00233"></a>00233                                                  pb : pb - pa)));
-<a name="l00234"></a>00234             }
-<a name="l00235"></a>00235             p.<a class="code" href="classGeographicLib_1_1GeoCoords.html#a4a1e0a65a8a344dfe519fcbf25078e37">Reset</a>(zonenum, northp, easting, northing);
-<a name="l00236"></a>00236             <span class="keywordflow">if</span> (heightmult) {
-<a name="l00237"></a>00237               suff = pb == std::string::npos ? <span class="stringliteral">""</span> : s.substr(pb);
-<a name="l00238"></a>00238               s = s.substr(0, pa);
-<a name="l00239"></a>00239             }
-<a name="l00240"></a>00240           } <span class="keywordflow">else</span> {
-<a name="l00241"></a>00241             <span class="keywordflow">if</span> (heightmult) {
-<a name="l00242"></a>00242               <span class="comment">// Treat last token as height</span>
-<a name="l00243"></a>00243               <span class="comment">// pb = last char of last token</span>
-<a name="l00244"></a>00244               <span class="comment">// pa = last char preceding white space</span>
-<a name="l00245"></a>00245               <span class="comment">// px = last char of 2nd last token</span>
-<a name="l00246"></a>00246               std::string::size_type pb = s.find_last_not_of(spaces);
-<a name="l00247"></a>00247               std::string::size_type pa = s.find_last_of(spaces, pb);
-<a name="l00248"></a>00248               <span class="keywordflow">if</span> (pa == std::string::npos || pb == std::string::npos)
-<a name="l00249"></a>00249                 <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00250"></a>00250               height = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(s.substr(pa + 1, pb - pa));
-<a name="l00251"></a>00251               s = s.substr(0, pa + 1);
-<a name="l00252"></a>00252             }
-<a name="l00253"></a>00253             p.<a class="code" href="classGeographicLib_1_1GeoCoords.html#a4a1e0a65a8a344dfe519fcbf25078e37">Reset</a>(s);
-<a name="l00254"></a>00254           }
-<a name="l00255"></a>00255           <span class="keywordflow">if</span> (heightmult) {
-<a name="l00256"></a>00256             <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h = g(p.<a class="code" href="classGeographicLib_1_1GeoCoords.html#a1bc1bb3a2377fa6b70be046dcf5d3e97">Latitude</a>(), p.<a class="code" href="classGeographicLib_1_1GeoCoords.html#a7db5459efae411dfebec758a8244a95a">Longitude</a>());
-<a name="l00257"></a>00257             *output << s
-<a name="l00258"></a>00258                     << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(height + <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(heightmult) * h, 4)
-<a name="l00259"></a>00259                     << suff << eol;
-<a name="l00260"></a>00260           } <span class="keywordflow">else</span> {
-<a name="l00261"></a>00261             <span class="keywordflow">if</span> (gradp) {
-<a name="l00262"></a>00262             <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> gradn, grade;
-<a name="l00263"></a>00263             <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h = g(p.<a class="code" href="classGeographicLib_1_1GeoCoords.html#a1bc1bb3a2377fa6b70be046dcf5d3e97">Latitude</a>(), p.<a class="code" href="classGeographicLib_1_1GeoCoords.html#a7db5459efae411dfebec758a8244a95a">Longitude</a>(), gradn, grade);
-<a name="l00264"></a>00264             *output << Utility::str<real>(h, 4) << <span class="stringliteral">" "</span>
-<a name="l00265"></a>00265                     << Utility::str<real>(gradn * 1e6, 2)
-<a name="l00266"></a>00266                     << (<a class="code" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">Math::isnan</a>(gradn) ? <span class="stringliteral">" "</span> : <span class="stringliteral">"e-6 "</span>)
-<a name="l00267"></a>00267                     << Utility::str<real>(grade * 1e6, 2)
-<a name="l00268"></a>00268                     << (<a class="code" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">Math::isnan</a>(grade) ? <span class="stringliteral">""</span> : <span class="stringliteral">"e-6"</span>)
-<a name="l00269"></a>00269                     << eol;
-<a name="l00270"></a>00270             } <span class="keywordflow">else</span> {
-<a name="l00271"></a>00271             <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h = g(p.<a class="code" href="classGeographicLib_1_1GeoCoords.html#a1bc1bb3a2377fa6b70be046dcf5d3e97">Latitude</a>(), p.<a class="code" href="classGeographicLib_1_1GeoCoords.html#a7db5459efae411dfebec758a8244a95a">Longitude</a>());
-<a name="l00272"></a>00272             *output << Utility::str<real>(h, 4) << eol;
-<a name="l00273"></a>00273             }
-<a name="l00274"></a>00274           }
-<a name="l00275"></a>00275         }
-<a name="l00276"></a>00276         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00277"></a>00277           *output << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00278"></a>00278           retval = 1;
-<a name="l00279"></a>00279         }
-<a name="l00280"></a>00280       }
-<a name="l00281"></a>00281     }
-<a name="l00282"></a>00282     <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00283"></a>00283       std::cerr << <span class="stringliteral">"Error reading "</span> << geoid << <span class="stringliteral">": "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00284"></a>00284       retval = 1;
-<a name="l00285"></a>00285     }
-<a name="l00286"></a>00286     <span class="keywordflow">return</span> retval;
-<a name="l00287"></a>00287   }
-<a name="l00288"></a>00288   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00289"></a>00289     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00290"></a>00290     <span class="keywordflow">return</span> 1;
-<a name="l00291"></a>00291   }
-<a name="l00292"></a>00292   <span class="keywordflow">catch</span> (...) {
-<a name="l00293"></a>00293     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00294"></a>00294     <span class="keywordflow">return</span> 1;
-<a name="l00295"></a>00295   }
-<a name="l00296"></a>00296 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geoid_8cpp.html b/doc/html/Geoid_8cpp.html
deleted file mode 100644
index 239905b..0000000
--- a/doc/html/Geoid_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geoid.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Geoid.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Geoid_8hpp_source.html">GeographicLib/Geoid.hpp</a>></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <cstdlib></code><br/>
-<code>#include <algorithm></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="Geoid_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geoid_8cpp.html#ad2cadd66a2a8fe0322579f4a1922a907">GEOGRAPHICLIB_GEOID_CPP</a>   "$Id: 5c3c23dd877485af9c9e298ddb28c5aac12b5e6a $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geoid_8cpp.html#a45687ef771d809c1c369daea074cc109">GEOGRAPHICLIB_DATA</a>   "/usr/local/share/GeographicLib"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geoid_8cpp.html#a2999d90c0556a04490ea239ddcb052b8">GEOID_DEFAULT_NAME</a>   "egm96-5"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ad2cadd66a2a8fe0322579f4a1922a907"></a><!-- doxytag: member="Geoid.cpp::GEOGRAPHICLIB_GEOID_CPP" ref="ad2cadd66a2a8fe0322579f4a1922a907" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEOID_CPP   "$Id: 5c3c23dd877485af9c9e298ddb28c5aac12b5e6a $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geoid_8cpp_source.html#l00016">16</a> of file <a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a45687ef771d809c1c369daea074cc109"></a><!-- doxytag: member="Geoid.cpp::GEOGRAPHICLIB_DATA" ref="a45687ef771d809c1c369daea074cc109" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_DATA   "/usr/local/share/GeographicLib"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geoid_8cpp_source.html#l00027">27</a> of file <a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geoid_8cpp_source.html#l00529">GeographicLib::Geoid::DefaultGeoidPath()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2999d90c0556a04490ea239ddcb052b8"></a><!-- doxytag: member="Geoid.cpp::GEOID_DEFAULT_NAME" ref="a2999d90c0556a04490ea239ddcb052b8" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOID_DEFAULT_NAME   "egm96-5"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geoid_8cpp_source.html#l00032">32</a> of file <a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geoid_8cpp_source.html#l00542">GeographicLib::Geoid::DefaultGeoidName()</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geoid_8cpp_source.html b/doc/html/Geoid_8cpp_source.html
deleted file mode 100644
index 01a967b..0000000
--- a/doc/html/Geoid_8cpp_source.html
+++ /dev/null
@@ -1,626 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geoid.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geoid.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Geoid_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Geoid.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::Geoid class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="Geoid_8hpp.html" title="Header for GeographicLib::Geoid class.">GeographicLib/Geoid.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <sstream></span>
-<a name="l00012"></a>00012 <span class="preprocessor">#include <cstdlib></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <algorithm></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00015"></a>00015 
-<a name="l00016"></a><a class="code" href="Geoid_8cpp.html#ad2cadd66a2a8fe0322579f4a1922a907">00016</a> <span class="preprocessor">#define GEOGRAPHICLIB_GEOID_CPP \</span>
-<a name="l00017"></a>00017 <span class="preprocessor">  "$Id: 5c3c23dd877485af9c9e298ddb28c5aac12b5e6a $"</span>
-<a name="l00018"></a>00018 <span class="preprocessor"></span>
-<a name="l00019"></a>00019 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Geoid_8cpp.html#ad2cadd66a2a8fe0322579f4a1922a907">GEOGRAPHICLIB_GEOID_CPP</a>)
-<a name="l00020"></a>00020 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Geoid_8hpp.html#a81966978f2fe7fad1effabc667a99820">GEOGRAPHICLIB_GEOID_HPP</a>)
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_DATA)</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#  if defined(_MSC_VER)</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHICLIB_DATA \</span>
-<a name="l00025"></a>00025 <span class="preprocessor">  "C:/Documents and Settings/All Users/Application Data/GeographicLib"</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#  else</span>
-<a name="l00027"></a><a class="code" href="Geoid_8cpp.html#a45687ef771d809c1c369daea074cc109">00027</a> <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHICLIB_DATA "/usr/local/share/GeographicLib"</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#if !defined(GEOID_DEFAULT_NAME)</span>
-<a name="l00032"></a><a class="code" href="Geoid_8cpp.html#a2999d90c0556a04490ea239ddcb052b8">00032</a> <span class="preprocessor"></span><span class="preprocessor">#  define GEOID_DEFAULT_NAME "egm96-5"</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="comment">// Squelch warnings about unsafe use of getenv</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#pragma warning (disable: 4996)</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042   <span class="keyword">using namespace </span>std;
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044   <span class="comment">// This is the transfer matrix for a 3rd order fit with a 12-point stencil</span>
-<a name="l00045"></a>00045   <span class="comment">// with weights</span>
-<a name="l00046"></a>00046   <span class="comment">//</span>
-<a name="l00047"></a>00047   <span class="comment">//   \x -1  0  1  2</span>
-<a name="l00048"></a>00048   <span class="comment">//   y</span>
-<a name="l00049"></a>00049   <span class="comment">//  -1   .  1  1  .</span>
-<a name="l00050"></a>00050   <span class="comment">//   0   1  2  2  1</span>
-<a name="l00051"></a>00051   <span class="comment">//   1   1  2  2  1</span>
-<a name="l00052"></a>00052   <span class="comment">//   2   .  1  1  .</span>
-<a name="l00053"></a>00053   <span class="comment">//</span>
-<a name="l00054"></a>00054   <span class="comment">// A algorithm for n-dimensional polynomial fits is described in</span>
-<a name="l00055"></a>00055   <span class="comment">//   F. H. Lesh,</span>
-<a name="l00056"></a>00056   <span class="comment">//   Multi-dimensional least-squares polynomial curve fitting,</span>
-<a name="l00057"></a>00057   <span class="comment">//   CACM 2, 29-30 (1959).</span>
-<a name="l00058"></a>00058   <span class="comment">//</span>
-<a name="l00059"></a>00059   <span class="comment">// Here's the Maxima code to generate this matrix:</span>
-<a name="l00060"></a>00060   <span class="comment">//</span>
-<a name="l00061"></a>00061   <span class="comment">// /* The stencil and the weights */</span>
-<a name="l00062"></a>00062   <span class="comment">// xarr:[</span>
-<a name="l00063"></a>00063   <span class="comment">//     0, 1,</span>
-<a name="l00064"></a>00064   <span class="comment">// -1, 0, 1, 2,</span>
-<a name="l00065"></a>00065   <span class="comment">// -1, 0, 1, 2,</span>
-<a name="l00066"></a>00066   <span class="comment">//     0, 1]$</span>
-<a name="l00067"></a>00067   <span class="comment">// yarr:[</span>
-<a name="l00068"></a>00068   <span class="comment">//   -1,-1,</span>
-<a name="l00069"></a>00069   <span class="comment">// 0, 0, 0, 0,</span>
-<a name="l00070"></a>00070   <span class="comment">// 1, 1, 1, 1,</span>
-<a name="l00071"></a>00071   <span class="comment">//    2, 2]$</span>
-<a name="l00072"></a>00072   <span class="comment">// warr:[</span>
-<a name="l00073"></a>00073   <span class="comment">//    1, 1,</span>
-<a name="l00074"></a>00074   <span class="comment">// 1, 2, 2, 1,</span>
-<a name="l00075"></a>00075   <span class="comment">// 1, 2, 2, 1,</span>
-<a name="l00076"></a>00076   <span class="comment">//    1, 1]$</span>
-<a name="l00077"></a>00077   <span class="comment">//</span>
-<a name="l00078"></a>00078   <span class="comment">// /* [x exponent, y exponent] for cubic fit */</span>
-<a name="l00079"></a>00079   <span class="comment">// pows:[</span>
-<a name="l00080"></a>00080   <span class="comment">// [0,0],</span>
-<a name="l00081"></a>00081   <span class="comment">// [1,0],[0,1],</span>
-<a name="l00082"></a>00082   <span class="comment">// [2,0],[1,1],[0,2],</span>
-<a name="l00083"></a>00083   <span class="comment">// [3,0],[2,1],[1,2],[0,3]]$</span>
-<a name="l00084"></a>00084   <span class="comment">//</span>
-<a name="l00085"></a>00085   <span class="comment">// basisvec(x,y,pows):=map(lambda([ex],(if ex[1]=0 then 1 else x^ex[1])*</span>
-<a name="l00086"></a>00086   <span class="comment">//     (if ex[2]=0 then 1 else y^ex[2])),pows)$</span>
-<a name="l00087"></a>00087   <span class="comment">// addterm(x,y,f,w,pows):=block([a,b,bb:basisvec(x,y,pows)],</span>
-<a name="l00088"></a>00088   <span class="comment">//   a:w*(transpose(bb).bb),</span>
-<a name="l00089"></a>00089   <span class="comment">//   b:(w*f) * bb,</span>
-<a name="l00090"></a>00090   <span class="comment">//   [a,b])$</span>
-<a name="l00091"></a>00091   <span class="comment">//</span>
-<a name="l00092"></a>00092   <span class="comment">// c3row(k):=block([a,b,c,pows:pows,n],</span>
-<a name="l00093"></a>00093   <span class="comment">//   n:length(pows),</span>
-<a name="l00094"></a>00094   <span class="comment">//   a:zeromatrix(n,n),</span>
-<a name="l00095"></a>00095   <span class="comment">//   b:copylist(part(a,1)),</span>
-<a name="l00096"></a>00096   <span class="comment">//   c:[a,b],</span>
-<a name="l00097"></a>00097   <span class="comment">//   for i:1 thru length(xarr) do</span>
-<a name="l00098"></a>00098   <span class="comment">//   c:c+addterm(xarr[i],yarr[i],if i=k then 1 else 0,warr[i],pows),</span>
-<a name="l00099"></a>00099   <span class="comment">//   a:c[1],b:c[2],</span>
-<a name="l00100"></a>00100   <span class="comment">//   part(transpose( a^^-1 . transpose(b)),1))$</span>
-<a name="l00101"></a>00101   <span class="comment">// c3:[]$</span>
-<a name="l00102"></a>00102   <span class="comment">// for k:1 thru length(warr) do c3:endcons(c3row(k),c3)$</span>
-<a name="l00103"></a>00103   <span class="comment">// c3:apply(matrix,c3)$</span>
-<a name="l00104"></a>00104   <span class="comment">// c0:part(ratsimp(</span>
-<a name="l00105"></a>00105   <span class="comment">// genmatrix(yc,1,length(warr)).abs(c3).genmatrix(yd,length(pows),1)),2)$</span>
-<a name="l00106"></a>00106   <span class="comment">// c3:c0*c3$</span>
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geoid::c0_ = 240; <span class="comment">// Common denominator</span>
-<a name="l00109"></a>00109   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geoid::c3_[stencilsize_ * nterms_] = {
-<a name="l00110"></a>00110       9, -18, -88,    0,  96,   90,   0,   0, -60, -20,
-<a name="l00111"></a>00111      -9,  18,   8,    0, -96,   30,   0,   0,  60, -20,
-<a name="l00112"></a>00112       9, -88, -18,   90,  96,    0, -20, -60,   0,   0,
-<a name="l00113"></a>00113     186, -42, -42, -150, -96, -150,  60,  60,  60,  60,
-<a name="l00114"></a>00114      54, 162, -78,   30, -24,  -90, -60,  60, -60,  60,
-<a name="l00115"></a>00115      -9, -32,  18,   30,  24,    0,  20, -60,   0,   0,
-<a name="l00116"></a>00116      -9,   8,  18,   30, -96,    0, -20,  60,   0,   0,
-<a name="l00117"></a>00117      54, -78, 162,  -90, -24,   30,  60, -60,  60, -60,
-<a name="l00118"></a>00118     -54,  78,  78,   90, 144,   90, -60, -60, -60, -60,
-<a name="l00119"></a>00119       9,  -8, -18,  -30, -24,    0,  20,  60,   0,   0,
-<a name="l00120"></a>00120      -9,  18, -32,    0,  24,   30,   0,   0, -60,  20,
-<a name="l00121"></a>00121       9, -18,  -8,    0, -24,  -30,   0,   0,  60,  20,
-<a name="l00122"></a>00122   };
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124   <span class="comment">// Like c3, but with the coeffs of x, x^2, and x^3 constrained to be zero.</span>
-<a name="l00125"></a>00125   <span class="comment">// Use this at the N pole so that the height in independent of the longitude</span>
-<a name="l00126"></a>00126   <span class="comment">// there.</span>
-<a name="l00127"></a>00127   <span class="comment">//</span>
-<a name="l00128"></a>00128   <span class="comment">// Here's the Maxima code to generate this matrix (continued from above).</span>
-<a name="l00129"></a>00129   <span class="comment">//</span>
-<a name="l00130"></a>00130   <span class="comment">// /* figure which terms to exclude so that fit is indep of x at y=0 */</span>
-<a name="l00131"></a>00131   <span class="comment">// mask:part(zeromatrix(1,length(pows)),1)+1$</span>
-<a name="l00132"></a>00132   <span class="comment">// for i:1 thru length(pows) do</span>
-<a name="l00133"></a>00133   <span class="comment">// if pows[i][1]>0 and pows[i][2]=0 then mask[i]:0$</span>
-<a name="l00134"></a>00134   <span class="comment">//</span>
-<a name="l00135"></a>00135   <span class="comment">// /* Same as c3row but with masked pows. */</span>
-<a name="l00136"></a>00136   <span class="comment">// c3nrow(k):=block([a,b,c,powsa:[],n,d,e],</span>
-<a name="l00137"></a>00137   <span class="comment">//   for i:1 thru length(mask) do if mask[i]>0 then</span>
-<a name="l00138"></a>00138   <span class="comment">//   powsa:endcons(pows[i],powsa),</span>
-<a name="l00139"></a>00139   <span class="comment">//   n:length(powsa),</span>
-<a name="l00140"></a>00140   <span class="comment">//   a:zeromatrix(n,n),</span>
-<a name="l00141"></a>00141   <span class="comment">//   b:copylist(part(a,1)),</span>
-<a name="l00142"></a>00142   <span class="comment">//   c:[a,b],</span>
-<a name="l00143"></a>00143   <span class="comment">//   for i:1 thru length(xarr) do</span>
-<a name="l00144"></a>00144   <span class="comment">//   c:c+addterm(xarr[i],yarr[i],if i=k then 1 else 0,warr[i],powsa),</span>
-<a name="l00145"></a>00145   <span class="comment">//   a:c[1],b:c[2],</span>
-<a name="l00146"></a>00146   <span class="comment">//   d:part(transpose( a^^-1 . transpose(b)),1),</span>
-<a name="l00147"></a>00147   <span class="comment">//   e:[],</span>
-<a name="l00148"></a>00148   <span class="comment">//   for i:1 thru length(mask) do</span>
-<a name="l00149"></a>00149   <span class="comment">//   if mask[i]>0 then (e:endcons(first(d),e),d:rest(d)) else e:endcons(0,e),</span>
-<a name="l00150"></a>00150   <span class="comment">//   e)$</span>
-<a name="l00151"></a>00151   <span class="comment">// c3n:[]$</span>
-<a name="l00152"></a>00152   <span class="comment">// for k:1 thru length(warr) do c3n:endcons(c3nrow(k),c3n)$</span>
-<a name="l00153"></a>00153   <span class="comment">// c3n:apply(matrix,c3n)$</span>
-<a name="l00154"></a>00154   <span class="comment">// c0n:part(ratsimp(</span>
-<a name="l00155"></a>00155   <span class="comment">//     genmatrix(yc,1,length(warr)).abs(c3n).genmatrix(yd,length(pows),1)),2)$</span>
-<a name="l00156"></a>00156   <span class="comment">// c3n:c0n*c3n$</span>
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geoid::c0n_ = 372; <span class="comment">// Common denominator</span>
-<a name="l00159"></a>00159   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geoid::c3n_[stencilsize_ * nterms_] = {
-<a name="l00160"></a>00160       0, 0, -131, 0,  138,  144, 0,   0, -102, -31,
-<a name="l00161"></a>00161       0, 0,    7, 0, -138,   42, 0,   0,  102, -31,
-<a name="l00162"></a>00162      62, 0,  -31, 0,    0,  -62, 0,   0,    0,  31,
-<a name="l00163"></a>00163     124, 0,  -62, 0,    0, -124, 0,   0,    0,  62,
-<a name="l00164"></a>00164     124, 0,  -62, 0,    0, -124, 0,   0,    0,  62,
-<a name="l00165"></a>00165      62, 0,  -31, 0,    0,  -62, 0,   0,    0,  31,
-<a name="l00166"></a>00166       0, 0,   45, 0, -183,   -9, 0,  93,   18,   0,
-<a name="l00167"></a>00167       0, 0,  216, 0,   33,   87, 0, -93,   12, -93,
-<a name="l00168"></a>00168       0, 0,  156, 0,  153,   99, 0, -93,  -12, -93,
-<a name="l00169"></a>00169       0, 0,  -45, 0,   -3,    9, 0,  93,  -18,   0,
-<a name="l00170"></a>00170       0, 0,  -55, 0,   48,   42, 0,   0,  -84,  31,
-<a name="l00171"></a>00171       0, 0,   -7, 0,  -48,  -42, 0,   0,   84,  31,
-<a name="l00172"></a>00172   };
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   <span class="comment">// Like c3n, but y -> 1-y so that h is independent of x at y = 1.  Use this</span>
-<a name="l00175"></a>00175   <span class="comment">// at the S pole so that the height in independent of the longitude there.</span>
-<a name="l00176"></a>00176   <span class="comment">//</span>
-<a name="l00177"></a>00177   <span class="comment">// Here's the Maxima code to generate this matrix (continued from above).</span>
-<a name="l00178"></a>00178   <span class="comment">//</span>
-<a name="l00179"></a>00179   <span class="comment">// /* Transform c3n to c3s by transforming y -> 1-y */</span>
-<a name="l00180"></a>00180   <span class="comment">// vv:[</span>
-<a name="l00181"></a>00181   <span class="comment">//      v[11],v[12],</span>
-<a name="l00182"></a>00182   <span class="comment">// v[7],v[8],v[9],v[10],</span>
-<a name="l00183"></a>00183   <span class="comment">// v[3],v[4],v[5],v[6],</span>
-<a name="l00184"></a>00184   <span class="comment">//      v[1],v[2]]$</span>
-<a name="l00185"></a>00185   <span class="comment">// poly:expand(vv.(c3n/c0n).transpose(basisvec(x,1-y,pows)))$</span>
-<a name="l00186"></a>00186   <span class="comment">// c3sf[i,j]:=coeff(coeff(coeff(poly,v[i]),x,pows[j][1]),y,pows[j][2])$</span>
-<a name="l00187"></a>00187   <span class="comment">// c3s:genmatrix(c3sf,length(vv),length(pows))$</span>
-<a name="l00188"></a>00188   <span class="comment">// c0s:part(ratsimp(</span>
-<a name="l00189"></a>00189   <span class="comment">//     genmatrix(yc,1,length(warr)).abs(c3s).genmatrix(yd,length(pows),1)),2)$</span>
-<a name="l00190"></a>00190   <span class="comment">// c3s:c0s*c3s$</span>
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geoid::c0s_ = 372; <span class="comment">// Common denominator</span>
-<a name="l00193"></a>00193   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geoid::c3s_[stencilsize_ * nterms_] = {
-<a name="l00194"></a>00194      18,  -36, -122,   0,  120,  135, 0,   0,  -84, -31,
-<a name="l00195"></a>00195     -18,   36,   -2,   0, -120,   51, 0,   0,   84, -31,
-<a name="l00196"></a>00196      36, -165,  -27,  93,  147,   -9, 0, -93,   18,   0,
-<a name="l00197"></a>00197     210,   45, -111, -93,  -57, -192, 0,  93,   12,  93,
-<a name="l00198"></a>00198     162,  141,  -75, -93, -129, -180, 0,  93,  -12,  93,
-<a name="l00199"></a>00199     -36,  -21,   27,  93,   39,    9, 0, -93,  -18,   0,
-<a name="l00200"></a>00200       0,    0,   62,   0,    0,   31, 0,   0,    0, -31,
-<a name="l00201"></a>00201       0,    0,  124,   0,    0,   62, 0,   0,    0, -62,
-<a name="l00202"></a>00202       0,    0,  124,   0,    0,   62, 0,   0,    0, -62,
-<a name="l00203"></a>00203       0,    0,   62,   0,    0,   31, 0,   0,    0, -31,
-<a name="l00204"></a>00204     -18,   36,  -64,   0,   66,   51, 0,   0, -102,  31,
-<a name="l00205"></a>00205      18,  -36,    2,   0,  -66,  -51, 0,   0,  102,  31,
-<a name="l00206"></a>00206   };
-<a name="l00207"></a>00207 
-<a name="l00208"></a><a class="code" href="classGeographicLib_1_1Geoid.html#ac3556c755dad0d43c3be0913df08b395">00208</a>   Geoid::Geoid(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> std::string& path, <span class="keywordtype">bool</span> cubic,
-<a name="l00209"></a>00209                <span class="keywordtype">bool</span> threadsafe)
-<a name="l00210"></a>00210     : _name(name)
-<a name="l00211"></a>00211     , _dir(path)
-<a name="l00212"></a>00212     , _cubic(cubic)
-<a name="l00213"></a>00213     , _a( <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<real>() )
-<a name="l00214"></a>00214     , _e2( (2 - <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_f<real>()) * <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_f<real>() )
-<a name="l00215"></a>00215     , _degree( <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>() )
-<a name="l00216"></a>00216     , _eps( sqrt(numeric_limits<real>::epsilon()) )
-<a name="l00217"></a>00217     , _threadsafe(false)        <span class="comment">// Set after cache is read</span>
-<a name="l00218"></a>00218   {
-<a name="l00219"></a>00219     <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(pixel_t) == pixel_size_, <span class="stringliteral">"pixel_t has the wrong size"</span>);
-<a name="l00220"></a>00220     <span class="keywordflow">if</span> (_dir.empty())
-<a name="l00221"></a>00221       _dir = <a class="code" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">DefaultGeoidPath</a>();
-<a name="l00222"></a>00222     _filename = _dir + <span class="stringliteral">"/"</span> + _name + (pixel_size_ != 4 ? <span class="stringliteral">".pgm"</span> : <span class="stringliteral">".pgm4"</span>);
-<a name="l00223"></a>00223     _file.open(_filename.c_str(), ios::binary);
-<a name="l00224"></a>00224     <span class="keywordflow">if</span> (!(_file.good()))
-<a name="l00225"></a>00225       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"File not readable "</span> + _filename);
-<a name="l00226"></a>00226     <span class="keywordtype">string</span> s;
-<a name="l00227"></a>00227     <span class="keywordflow">if</span> (!(getline(_file, s) && s == <span class="stringliteral">"P5"</span>))
-<a name="l00228"></a>00228       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"File not in PGM format "</span> + _filename);
-<a name="l00229"></a>00229     _offset = numeric_limits<real>::max();
-<a name="l00230"></a>00230     _scale = 0;
-<a name="l00231"></a>00231     _maxerror = _rmserror = -1;
-<a name="l00232"></a>00232     _description = <span class="stringliteral">"NONE"</span>;
-<a name="l00233"></a>00233     _datetime = <span class="stringliteral">"UNKNOWN"</span>;
-<a name="l00234"></a>00234     <span class="keywordflow">while</span> (getline(_file, s)) {
-<a name="l00235"></a>00235       <span class="keywordflow">if</span> (s.empty())
-<a name="l00236"></a>00236         <span class="keywordflow">continue</span>;
-<a name="l00237"></a>00237       <span class="keywordflow">if</span> (s[0] == <span class="charliteral">'#'</span>) {
-<a name="l00238"></a>00238         istringstream is(s);
-<a name="l00239"></a>00239         <span class="keywordtype">string</span> commentid, key;
-<a name="l00240"></a>00240         <span class="keywordflow">if</span> (!(is >> commentid >> key) || commentid != <span class="stringliteral">"#"</span>)
-<a name="l00241"></a>00241           <span class="keywordflow">continue</span>;
-<a name="l00242"></a>00242         <span class="keywordflow">if</span> (key == <span class="stringliteral">"Description"</span> || key ==<span class="stringliteral">"DateTime"</span>) {
-<a name="l00243"></a>00243           <span class="keywordtype">string</span>::size_type p =
-<a name="l00244"></a>00244             s.find_first_not_of(<span class="stringliteral">" \t"</span>, <span class="keywordtype">unsigned</span>(is.tellg()));
-<a name="l00245"></a>00245           <span class="keywordflow">if</span> (p != string::npos)
-<a name="l00246"></a>00246             (key == <span class="stringliteral">"Description"</span> ? _description : _datetime) = s.substr(p);
-<a name="l00247"></a>00247         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Offset"</span>) {
-<a name="l00248"></a>00248           <span class="keywordflow">if</span> (!(is >> _offset))
-<a name="l00249"></a>00249             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Error reading offset "</span> + _filename);
-<a name="l00250"></a>00250         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Scale"</span>) {
-<a name="l00251"></a>00251           <span class="keywordflow">if</span> (!(is >> _scale))
-<a name="l00252"></a>00252             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Error reading scale "</span> + _filename);
-<a name="l00253"></a>00253         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == (_cubic ? <span class="stringliteral">"MaxCubicError"</span> : <span class="stringliteral">"MaxBilinearError"</span>)) {
-<a name="l00254"></a>00254           <span class="comment">// It's not an error if the error can't be read</span>
-<a name="l00255"></a>00255           is >> _maxerror;
-<a name="l00256"></a>00256         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == (_cubic ? <span class="stringliteral">"RMSCubicError"</span> : <span class="stringliteral">"RMSBilinearError"</span>)) {
-<a name="l00257"></a>00257           <span class="comment">// It's not an error if the error can't be read</span>
-<a name="l00258"></a>00258           is >> _rmserror;
-<a name="l00259"></a>00259         }
-<a name="l00260"></a>00260       } <span class="keywordflow">else</span> {
-<a name="l00261"></a>00261         istringstream is(s);
-<a name="l00262"></a>00262         <span class="keywordflow">if</span> (!(is >> _width >> _height))
-<a name="l00263"></a>00263           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Error reading raster size "</span> + _filename);
-<a name="l00264"></a>00264         <span class="keywordflow">break</span>;
-<a name="l00265"></a>00265       }
-<a name="l00266"></a>00266     }
-<a name="l00267"></a>00267     {
-<a name="l00268"></a>00268       <span class="keywordtype">unsigned</span> maxval;
-<a name="l00269"></a>00269       <span class="keywordflow">if</span> (!(_file >> maxval))
-<a name="l00270"></a>00270         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Error reading maxval "</span> + _filename);
-<a name="l00271"></a>00271       <span class="keywordflow">if</span> (maxval != pixel_max_)
-<a name="l00272"></a>00272         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incorrect value of maxval "</span> + _filename);
-<a name="l00273"></a>00273       <span class="comment">// Add 1 for whitespace after maxval</span>
-<a name="l00274"></a>00274       _datastart = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> long)(_file.tellg()) + 1ULL;
-<a name="l00275"></a>00275       _swidth = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> long)(_width);
-<a name="l00276"></a>00276     }
-<a name="l00277"></a>00277     <span class="keywordflow">if</span> (_offset == numeric_limits<real>::max())
-<a name="l00278"></a>00278       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Offset not set "</span> + _filename);
-<a name="l00279"></a>00279     <span class="keywordflow">if</span> (_scale == 0)
-<a name="l00280"></a>00280       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale not set "</span> + _filename);
-<a name="l00281"></a>00281     <span class="keywordflow">if</span> (_scale < 0)
-<a name="l00282"></a>00282       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale must be positive "</span> + _filename);
-<a name="l00283"></a>00283     <span class="keywordflow">if</span> (_height < 2 || _width < 2)
-<a name="l00284"></a>00284       <span class="comment">// Coarsest grid spacing is 180deg.</span>
-<a name="l00285"></a>00285       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Raster size too small "</span> + _filename);
-<a name="l00286"></a>00286     <span class="keywordflow">if</span> (_width & 1)
-<a name="l00287"></a>00287       <span class="comment">// This is so that longitude grids can be extended thru the poles.</span>
-<a name="l00288"></a>00288       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Raster width is odd "</span> + _filename);
-<a name="l00289"></a>00289     <span class="keywordflow">if</span> (!(_height & 1))
-<a name="l00290"></a>00290       <span class="comment">// This is so that latitude grid includes the equator.</span>
-<a name="l00291"></a>00291       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Raster height is even "</span> + _filename);
-<a name="l00292"></a>00292     _file.seekg(0, ios::end);
-<a name="l00293"></a>00293     <span class="keywordflow">if</span> (!_file.good() ||
-<a name="l00294"></a>00294         _datastart + pixel_size_ * _swidth * (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> long)(_height) !=
-<a name="l00295"></a>00295         (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> long)(_file.tellg()))
-<a name="l00296"></a>00296       <span class="comment">// Possibly this test should be "<" because the file contains, e.g., a</span>
-<a name="l00297"></a>00297       <span class="comment">// second image.  However, for now we are more strict.</span>
-<a name="l00298"></a>00298       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"File has the wrong length "</span> + _filename);
-<a name="l00299"></a>00299     _rlonres = _width / real(360);
-<a name="l00300"></a>00300     _rlatres = (_height - 1) / real(180);
-<a name="l00301"></a>00301     _cache = <span class="keyword">false</span>;
-<a name="l00302"></a>00302     _ix = _width;
-<a name="l00303"></a>00303     _iy = _height;
-<a name="l00304"></a>00304     <span class="comment">// Ensure that file errors throw exceptions</span>
-<a name="l00305"></a>00305     _file.exceptions(ifstream::eofbit | ifstream::failbit | ifstream::badbit);
-<a name="l00306"></a>00306     <span class="keywordflow">if</span> (threadsafe) {
-<a name="l00307"></a>00307       <a class="code" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">CacheAll</a>();
-<a name="l00308"></a>00308       _file.close();
-<a name="l00309"></a>00309       _threadsafe = <span class="keyword">true</span>;
-<a name="l00310"></a>00310     }
-<a name="l00311"></a>00311   }
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Geoid::height(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <span class="keywordtype">bool</span> gradp,
-<a name="l00314"></a>00314                            <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gradn, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& grade)<span class="keyword"> const </span>{
-<a name="l00315"></a>00315     <span class="keywordflow">if</span> (<a class="code" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">Math::isnan</a>(lat) || <a class="code" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">Math::isnan</a>(lon)) {
-<a name="l00316"></a>00316       <span class="keywordflow">if</span> (gradp) gradn = grade = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00317"></a>00317       <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00318"></a>00318     }
-<a name="l00319"></a>00319     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00320"></a>00320       fx =  lon * _rlonres,
-<a name="l00321"></a>00321       fy = -lat * _rlatres;
-<a name="l00322"></a>00322     <span class="keywordtype">int</span>
-<a name="l00323"></a>00323       ix = int(floor(fx)),
-<a name="l00324"></a>00324       iy = min((_height - 1)/2 - 1, <span class="keywordtype">int</span>(floor(fy)));
-<a name="l00325"></a>00325     fx -= ix;
-<a name="l00326"></a>00326     fy -= iy;
-<a name="l00327"></a>00327     iy += (_height - 1)/2;
-<a name="l00328"></a>00328     ix += ix < 0 ? _width : (ix >= _width ? -_width : 0);
-<a name="l00329"></a>00329     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> v00 = 0, v01 = 0, v10 = 0, v11 = 0;
-<a name="l00330"></a>00330     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t[nterms_];
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332     <span class="keywordflow">if</span> (_threadsafe || !(ix == _ix && iy == _iy)) {
-<a name="l00333"></a>00333       <span class="keywordflow">if</span> (!_cubic) {
-<a name="l00334"></a>00334         v00 = rawval(ix    , iy    );
-<a name="l00335"></a>00335         v01 = rawval(ix + 1, iy    );
-<a name="l00336"></a>00336         v10 = rawval(ix    , iy + 1);
-<a name="l00337"></a>00337         v11 = rawval(ix + 1, iy + 1);
-<a name="l00338"></a>00338       } <span class="keywordflow">else</span> {
-<a name="l00339"></a>00339         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> v[stencilsize_];
-<a name="l00340"></a>00340         <span class="keywordtype">int</span> k = 0;
-<a name="l00341"></a>00341         v[k++] = rawval(ix    , iy - 1);
-<a name="l00342"></a>00342         v[k++] = rawval(ix + 1, iy - 1);
-<a name="l00343"></a>00343         v[k++] = rawval(ix - 1, iy    );
-<a name="l00344"></a>00344         v[k++] = rawval(ix    , iy    );
-<a name="l00345"></a>00345         v[k++] = rawval(ix + 1, iy    );
-<a name="l00346"></a>00346         v[k++] = rawval(ix + 2, iy    );
-<a name="l00347"></a>00347         v[k++] = rawval(ix - 1, iy + 1);
-<a name="l00348"></a>00348         v[k++] = rawval(ix    , iy + 1);
-<a name="l00349"></a>00349         v[k++] = rawval(ix + 1, iy + 1);
-<a name="l00350"></a>00350         v[k++] = rawval(ix + 2, iy + 1);
-<a name="l00351"></a>00351         v[k++] = rawval(ix    , iy + 2);
-<a name="l00352"></a>00352         v[k++] = rawval(ix + 1, iy + 2);
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354         <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>* c3x = iy == 0 ? c3n_ : (iy == _height - 2 ? c3s_ : c3_);
-<a name="l00355"></a>00355         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c0x = iy == 0 ? c0n_ : (iy == _height - 2 ? c0s_ : c0_);
-<a name="l00356"></a>00356         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < nterms_; ++i) {
-<a name="l00357"></a>00357           t[i] = 0;
-<a name="l00358"></a>00358           <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = 0; j < stencilsize_; ++j)
-<a name="l00359"></a>00359             t[i] += v[j] * c3x[nterms_ * j + i];
-<a name="l00360"></a>00360           t[i] /= c0x;
-<a name="l00361"></a>00361         }
-<a name="l00362"></a>00362       }
-<a name="l00363"></a>00363     } <span class="keywordflow">else</span> { <span class="comment">// same cell; used cached coefficients</span>
-<a name="l00364"></a>00364       <span class="keywordflow">if</span> (!_cubic) {
-<a name="l00365"></a>00365         v00 = _v00;
-<a name="l00366"></a>00366         v01 = _v01;
-<a name="l00367"></a>00367         v10 = _v10;
-<a name="l00368"></a>00368         v11 = _v11;
-<a name="l00369"></a>00369       } <span class="keywordflow">else</span>
-<a name="l00370"></a>00370         copy(_t, _t + nterms_, t);
-<a name="l00371"></a>00371     }
-<a name="l00372"></a>00372     <span class="keywordflow">if</span> (!_cubic) {
-<a name="l00373"></a>00373       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00374"></a>00374         a = (1 - fx) * v00 + fx * v01,
-<a name="l00375"></a>00375         b = (1 - fx) * v10 + fx * v11,
-<a name="l00376"></a>00376         c = (1 - fy) * a + fy * b,
-<a name="l00377"></a>00377         h = _offset + _scale * c;
-<a name="l00378"></a>00378       <span class="keywordflow">if</span> (gradp) {
-<a name="l00379"></a>00379         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00380"></a>00380           phi = lat * _degree,
-<a name="l00381"></a>00381           cosphi = cos(phi),
-<a name="l00382"></a>00382           sinphi = sin(phi),
-<a name="l00383"></a>00383           n = 1/sqrt(1 - _e2 * sinphi * sinphi);
-<a name="l00384"></a>00384         gradn = ((1 - fx) * (v00 - v10) + fx * (v01 - v11)) *
-<a name="l00385"></a>00385           _rlatres / (_degree * _a * (1 - _e2) * n * n * n);
-<a name="l00386"></a>00386         grade = (cosphi > _eps ?
-<a name="l00387"></a>00387                  ((1 - fy) * (v01 - v00) + fy * (v11 - v10)) /   cosphi :
-<a name="l00388"></a>00388                  (sinphi > 0 ? v11 - v10 : v01 - v00) *
-<a name="l00389"></a>00389                  _rlatres / _degree ) *
-<a name="l00390"></a>00390           _rlonres / (_degree * _a * n);
-<a name="l00391"></a>00391         gradn *= _scale;
-<a name="l00392"></a>00392         grade *= _scale;
-<a name="l00393"></a>00393       }
-<a name="l00394"></a>00394       <span class="keywordflow">if</span> (!_threadsafe) {
-<a name="l00395"></a>00395         _ix = ix;
-<a name="l00396"></a>00396         _iy = iy;
-<a name="l00397"></a>00397         _v00 = v00;
-<a name="l00398"></a>00398         _v01 = v01;
-<a name="l00399"></a>00399         _v10 = v10;
-<a name="l00400"></a>00400         _v11 = v11;
-<a name="l00401"></a>00401       }
-<a name="l00402"></a>00402       <span class="keywordflow">return</span> h;
-<a name="l00403"></a>00403     } <span class="keywordflow">else</span> {
-<a name="l00404"></a>00404       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h = t[0] + fx * (t[1] + fx * (t[3] + fx * t[6])) +
-<a name="l00405"></a>00405         fy * (t[2] + fx * (t[4] + fx * t[7]) +
-<a name="l00406"></a>00406              fy * (t[5] + fx * t[8] + fy * t[9]));
-<a name="l00407"></a>00407       h = _offset + _scale * h;
-<a name="l00408"></a>00408       <span class="keywordflow">if</span> (gradp) {
-<a name="l00409"></a>00409         <span class="comment">// Avoid 0/0 at the poles by backing off 1/100 of a cell size</span>
-<a name="l00410"></a>00410         lat = min(lat,  90 - 1/(100 * _rlatres));
-<a name="l00411"></a>00411         lat = max(lat, -90 + 1/(100 * _rlatres));
-<a name="l00412"></a>00412         fy = (90 - lat) * _rlatres;
-<a name="l00413"></a>00413         fy -= int(fy);
-<a name="l00414"></a>00414         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00415"></a>00415           phi = lat * _degree,
-<a name="l00416"></a>00416           cosphi = cos(phi),
-<a name="l00417"></a>00417           sinphi = sin(phi),
-<a name="l00418"></a>00418           n = 1/sqrt(1 - _e2 * sinphi * sinphi);
-<a name="l00419"></a>00419         gradn = t[2] + fx * (t[4] + fx * t[7]) +
-<a name="l00420"></a>00420           fy * (2 * t[5] + fx * 2 * t[8] + 3 * fy * t[9]);
-<a name="l00421"></a>00421         grade = t[1] + fx * (2 * t[3] + fx * 3 * t[6]) +
-<a name="l00422"></a>00422           fy * (t[4] + fx * 2 * t[7] + fy * t[8]);
-<a name="l00423"></a>00423         gradn *= - _rlatres / (_degree * _a * (1 - _e2) * n * n * n) * _scale;
-<a name="l00424"></a>00424         grade *= _rlonres / (_degree * _a * n * cosphi) * _scale;
-<a name="l00425"></a>00425       }
-<a name="l00426"></a>00426       <span class="keywordflow">if</span> (!_threadsafe) {
-<a name="l00427"></a>00427         _ix = ix;
-<a name="l00428"></a>00428         _iy = iy;
-<a name="l00429"></a>00429         copy(t, t + nterms_, _t);
-<a name="l00430"></a>00430       }
-<a name="l00431"></a>00431       <span class="keywordflow">return</span> h;
-<a name="l00432"></a>00432     }
-<a name="l00433"></a>00433   }
-<a name="l00434"></a>00434 
-<a name="l00435"></a><a class="code" href="classGeographicLib_1_1Geoid.html#ad948f48545c9c40f1705f2892887cdab">00435</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1Geoid.html#ad948f48545c9c40f1705f2892887cdab">Geoid::CacheClear</a>() <span class="keyword">const</span> throw() {
-<a name="l00436"></a>00436     <span class="keywordflow">if</span> (!_threadsafe) {
-<a name="l00437"></a>00437       _cache = <span class="keyword">false</span>;
-<a name="l00438"></a>00438       <span class="keywordflow">try</span> {
-<a name="l00439"></a>00439         _data.clear();
-<a name="l00440"></a>00440         <span class="comment">// Use swap to release memory back to system</span>
-<a name="l00441"></a>00441         vector< vector<pixel_t> >().swap(_data);
-<a name="l00442"></a>00442       }
-<a name="l00443"></a>00443       <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception&) {
-<a name="l00444"></a>00444       }
-<a name="l00445"></a>00445     }
-<a name="l00446"></a>00446   }
-<a name="l00447"></a>00447 
-<a name="l00448"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a52b5dc2d976796046aaeb8765e4a9c0f">00448</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1Geoid.html#a52b5dc2d976796046aaeb8765e4a9c0f">Geoid::CacheArea</a>(real south, real west, real north, real east)<span class="keyword"> const </span>{
-<a name="l00449"></a>00449     <span class="keywordflow">if</span> (_threadsafe)
-<a name="l00450"></a>00450       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Attempt to change cache of threadsafe Geoid"</span>);
-<a name="l00451"></a>00451     <span class="keywordflow">if</span> (south > north) {
-<a name="l00452"></a>00452       <a class="code" href="classGeographicLib_1_1Geoid.html#ad948f48545c9c40f1705f2892887cdab">CacheClear</a>();
-<a name="l00453"></a>00453       <span class="keywordflow">return</span>;
-<a name="l00454"></a>00454     }
-<a name="l00455"></a>00455     <span class="keywordflow">if</span> (west >= 180)
-<a name="l00456"></a>00456       west -= 360;              <span class="comment">// west in [-180, 180)</span>
-<a name="l00457"></a>00457     <span class="keywordflow">if</span> (east >= 180)
-<a name="l00458"></a>00458       east -= 360;
-<a name="l00459"></a>00459     <span class="keywordflow">if</span> (east <= west)
-<a name="l00460"></a>00460       east += 360;              <span class="comment">// east - west in (0, 360]</span>
-<a name="l00461"></a>00461     <span class="keywordtype">int</span>
-<a name="l00462"></a>00462       iw = int(floor(west * _rlonres)),
-<a name="l00463"></a>00463       ie = int(floor(east * _rlonres)),
-<a name="l00464"></a>00464       in = int(floor(-north * _rlatres)) + (_height - 1)/2,
-<a name="l00465"></a>00465       is = <span class="keywordtype">int</span>(floor(-south * _rlatres)) + (_height - 1)/2;
-<a name="l00466"></a>00466     in = max(0, min(_height - 2, in));
-<a name="l00467"></a>00467     is = max(0, min(_height - 2, is));
-<a name="l00468"></a>00468     is += 1;
-<a name="l00469"></a>00469     ie += 1;
-<a name="l00470"></a>00470     <span class="keywordflow">if</span> (_cubic) {
-<a name="l00471"></a>00471       in -= 1;
-<a name="l00472"></a>00472       is += 1;
-<a name="l00473"></a>00473       iw -= 1;
-<a name="l00474"></a>00474       ie += 1;
-<a name="l00475"></a>00475     }
-<a name="l00476"></a>00476     <span class="keywordflow">if</span> (ie - iw >= _width - 1) {
-<a name="l00477"></a>00477       <span class="comment">// Include entire longitude range</span>
-<a name="l00478"></a>00478       iw = 0;
-<a name="l00479"></a>00479       ie = _width - 1;
-<a name="l00480"></a>00480     } <span class="keywordflow">else</span> {
-<a name="l00481"></a>00481       ie += iw < 0 ? _width : (iw >= _width ? -_width : 0);
-<a name="l00482"></a>00482       iw += iw < 0 ? _width : (iw >= _width ? -_width : 0);
-<a name="l00483"></a>00483     }
-<a name="l00484"></a>00484     <span class="keywordtype">int</span> oysize = int(_data.size());
-<a name="l00485"></a>00485     _xsize = ie - iw + 1;
-<a name="l00486"></a>00486     _ysize = is - in + 1;
-<a name="l00487"></a>00487     _xoffset = iw;
-<a name="l00488"></a>00488     _yoffset = in;
-<a name="l00489"></a>00489 
-<a name="l00490"></a>00490     <span class="keywordflow">try</span> {
-<a name="l00491"></a>00491       _data.resize(_ysize, vector<pixel_t>(_xsize));
-<a name="l00492"></a>00492       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> iy = min(oysize, _ysize); iy--;)
-<a name="l00493"></a>00493         _data[iy].resize(_xsize);
-<a name="l00494"></a>00494     }
-<a name="l00495"></a>00495     <span class="keywordflow">catch</span> (<span class="keyword">const</span> bad_alloc&) {
-<a name="l00496"></a>00496       <a class="code" href="classGeographicLib_1_1Geoid.html#ad948f48545c9c40f1705f2892887cdab">CacheClear</a>();
-<a name="l00497"></a>00497       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Insufficient memory for caching "</span> + _filename);
-<a name="l00498"></a>00498     }
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500     <span class="keywordflow">try</span> {
-<a name="l00501"></a>00501       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> iy = in; iy <= is; ++iy) {
-<a name="l00502"></a>00502         <span class="keywordtype">int</span> iy1 = iy, iw1 = iw;
-<a name="l00503"></a>00503         <span class="keywordflow">if</span> (iy < 0 || iy >= _height) {
-<a name="l00504"></a>00504           <span class="comment">// Allow points "beyond" the poles to support interpolation</span>
-<a name="l00505"></a>00505           iy1 = iy1 < 0 ? -iy1 : 2 * (_height - 1) - iy1;
-<a name="l00506"></a>00506           iw1 += _width/2;
-<a name="l00507"></a>00507           <span class="keywordflow">if</span> (iw1 >= _width)
-<a name="l00508"></a>00508             iw1 -= _width;
-<a name="l00509"></a>00509         }
-<a name="l00510"></a>00510         <span class="keywordtype">int</span> xs1 = min(_width - iw1, _xsize);
-<a name="l00511"></a>00511         filepos(iw1, iy1);
-<a name="l00512"></a>00512         <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::readarray<pixel_t, pixel_t, true>
-<a name="l00513"></a>00513           (_file, &(_data[iy - in][0]), xs1);
-<a name="l00514"></a>00514         <span class="keywordflow">if</span> (xs1 < _xsize) {
-<a name="l00515"></a>00515           <span class="comment">// Wrap around longitude = 0</span>
-<a name="l00516"></a>00516           filepos(0, iy1);
-<a name="l00517"></a>00517           <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::readarray<pixel_t, pixel_t, true>
-<a name="l00518"></a>00518             (_file, &(_data[iy - in][xs1]), _xsize - xs1);
-<a name="l00519"></a>00519         }
-<a name="l00520"></a>00520       }
-<a name="l00521"></a>00521       _cache = <span class="keyword">true</span>;
-<a name="l00522"></a>00522     }
-<a name="l00523"></a>00523     <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-<a name="l00524"></a>00524       <a class="code" href="classGeographicLib_1_1Geoid.html#ad948f48545c9c40f1705f2892887cdab">CacheClear</a>();
-<a name="l00525"></a>00525       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="keywordtype">string</span>(<span class="stringliteral">"Error filling cache "</span>) + e.what());
-<a name="l00526"></a>00526     }
-<a name="l00527"></a>00527   }
-<a name="l00528"></a>00528 
-<a name="l00529"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">00529</a>   std::string <a class="code" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">Geoid::DefaultGeoidPath</a>() {
-<a name="l00530"></a>00530     <span class="keywordtype">string</span> path;
-<a name="l00531"></a>00531     <span class="keywordtype">char</span>* geoidpath = getenv(<span class="stringliteral">"GEOID_PATH"</span>);
-<a name="l00532"></a>00532     <span class="keywordflow">if</span> (geoidpath)
-<a name="l00533"></a>00533       path = string(geoidpath);
-<a name="l00534"></a>00534     <span class="keywordflow">if</span> (path.length())
-<a name="l00535"></a>00535       <span class="keywordflow">return</span> path;
-<a name="l00536"></a>00536     <span class="keywordtype">char</span>* datapath = getenv(<span class="stringliteral">"GEOGRAPHICLIB_DATA"</span>);
-<a name="l00537"></a>00537     <span class="keywordflow">if</span> (datapath)
-<a name="l00538"></a>00538       path = string(datapath);
-<a name="l00539"></a>00539     <span class="keywordflow">return</span> (path.length() ? path : string(<a class="code" href="Geoid_8cpp.html#a45687ef771d809c1c369daea074cc109">GEOGRAPHICLIB_DATA</a>)) + <span class="stringliteral">"/geoids"</span>;
-<a name="l00540"></a>00540   }
-<a name="l00541"></a>00541 
-<a name="l00542"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a048865342b2b12ed2272e547209381fd">00542</a>   std::string <a class="code" href="classGeographicLib_1_1Geoid.html#a048865342b2b12ed2272e547209381fd">Geoid::DefaultGeoidName</a>() {
-<a name="l00543"></a>00543     <span class="keywordtype">string</span> name;
-<a name="l00544"></a>00544     <span class="keywordtype">char</span>* geoidname = getenv(<span class="stringliteral">"GEOID_NAME"</span>);
-<a name="l00545"></a>00545     <span class="keywordflow">if</span> (geoidname)
-<a name="l00546"></a>00546       name = string(geoidname);
-<a name="l00547"></a>00547     <span class="keywordflow">return</span> name.length() ? name : string(<a class="code" href="Geoid_8cpp.html#a2999d90c0556a04490ea239ddcb052b8">GEOID_DEFAULT_NAME</a>);
-<a name="l00548"></a>00548   }
-<a name="l00549"></a>00549 
-<a name="l00550"></a>00550 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geoid_8hpp.html b/doc/html/Geoid_8hpp.html
deleted file mode 100644
index 6d68216..0000000
--- a/doc/html/Geoid_8hpp.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geoid.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Geoid.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <string></code><br/>
-<code>#include <vector></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="Geoid_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Looking up the height of the geoid.  <a href="classGeographicLib_1_1Geoid.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geoid_8hpp.html#a81966978f2fe7fad1effabc667a99820">GEOGRAPHICLIB_GEOID_HPP</a>   "$Id: 4e4eb5941d16ad00416798703d246a6f7ef5fe46 $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Geoid_8hpp.html#aa34d236045b829973cbc0d958d3ed139">PGM_PIXEL_WIDTH</a>   2</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> class. </p>
-<p>Copyright (c) Charles Karney (2009-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a81966978f2fe7fad1effabc667a99820"></a><!-- doxytag: member="Geoid.hpp::GEOGRAPHICLIB_GEOID_HPP" ref="a81966978f2fe7fad1effabc667a99820" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GEOID_HPP   "$Id: 4e4eb5941d16ad00416798703d246a6f7ef5fe46 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00011">11</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa34d236045b829973cbc0d958d3ed139"></a><!-- doxytag: member="Geoid.hpp::PGM_PIXEL_WIDTH" ref="aa34d236045b829973cbc0d958d3ed139" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define PGM_PIXEL_WIDTH   2</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The size of the pixel data in the pgm data files for the geoids. 2 is the standard size corresponding to a maxval 2^16-1. Setting it to 4 uses a maxval of 2^32-1 and changes the extension for the data files from .pgm to .pgm4. Note that the format of these pgm4 files is a non-standard extension of the pgm format. </p>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00033">33</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Geoid_8hpp_source.html b/doc/html/Geoid_8hpp_source.html
deleted file mode 100644
index 879543d..0000000
--- a/doc/html/Geoid_8hpp_source.html
+++ /dev/null
@@ -1,581 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geoid.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geoid.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Geoid_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Geoid.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::Geoid class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_GEOID_HPP)</span>
-<a name="l00011"></a><a class="code" href="Geoid_8hpp.html#a81966978f2fe7fad1effabc667a99820">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_GEOID_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 4e4eb5941d16ad00416798703d246a6f7ef5fe46 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <string></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <vector></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <fstream></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00018"></a>00018 
-<a name="l00019"></a>00019 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="comment">// Squelch warnings about dll vs vector</span>
-<a name="l00021"></a>00021 <span class="preprocessor">#pragma warning (push)</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4251)</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#if !defined(PGM_PIXEL_WIDTH)</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="comment">/**</span>
-<a name="l00027"></a>00027 <span class="comment"> * The size of the pixel data in the pgm data files for the geoids.  2</span>
-<a name="l00028"></a>00028 <span class="comment"> * is the standard size corresponding to a maxval 2^16-1.  Setting it</span>
-<a name="l00029"></a>00029 <span class="comment"> * to 4 uses a maxval of 2^32-1 and changes the extension for the data</span>
-<a name="l00030"></a>00030 <span class="comment"> * files from .pgm to .pgm4.  Note that the format of these pgm4 files</span>
-<a name="l00031"></a>00031 <span class="comment"> * is a non-standard extension of the pgm format.</span>
-<a name="l00032"></a>00032 <span class="comment"> **********************************************************************/</span>
-<a name="l00033"></a><a class="code" href="Geoid_8hpp.html#aa34d236045b829973cbc0d958d3ed139">00033</a> <span class="preprocessor">#define PGM_PIXEL_WIDTH 2</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00037"></a>00037 <span class="comment"></span>
-<a name="l00038"></a>00038 <span class="comment">  /**</span>
-<a name="l00039"></a>00039 <span class="comment">   * \brief Looking up the height of the geoid</span>
-<a name="l00040"></a>00040 <span class="comment">   *</span>
-<a name="l00041"></a>00041 <span class="comment">   * This class evaluated the height of one of the standard geoids, EGM84,</span>
-<a name="l00042"></a>00042 <span class="comment">   * EGM96, or EGM2008 by bilinear or cubic interpolation into a rectangular</span>
-<a name="l00043"></a>00043 <span class="comment">   * grid of data.  These geoid models are documented in</span>
-<a name="l00044"></a>00044 <span class="comment">   * - EGM84:</span>
-<a name="l00045"></a>00045 <span class="comment">   *   http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html</span>
-<a name="l00046"></a>00046 <span class="comment">   * - EGM96:</span>
-<a name="l00047"></a>00047 <span class="comment">   *   http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html</span>
-<a name="l00048"></a>00048 <span class="comment">   * - EGM2008:</span>
-<a name="l00049"></a>00049 <span class="comment">   *   http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008</span>
-<a name="l00050"></a>00050 <span class="comment">   *</span>
-<a name="l00051"></a>00051 <span class="comment">   * The geoids are defined in terms of spherical harmonics.  However in order</span>
-<a name="l00052"></a>00052 <span class="comment">   * to provide a quick and flexible method of evaluating the geoid heights,</span>
-<a name="l00053"></a>00053 <span class="comment">   * this class evaluates the height by interpolation into a grid of</span>
-<a name="l00054"></a>00054 <span class="comment">   * precomputed values.</span>
-<a name="l00055"></a>00055 <span class="comment">   *</span>
-<a name="l00056"></a>00056 <span class="comment">   * See \ref geoid for details of how to install the data sets, the data</span>
-<a name="l00057"></a>00057 <span class="comment">   * format, estimates of the interpolation errors, and how to use caching.</span>
-<a name="l00058"></a>00058 <span class="comment">   *</span>
-<a name="l00059"></a>00059 <span class="comment">   * In addition to returning the geoid height, the gradient of the geoid can</span>
-<a name="l00060"></a>00060 <span class="comment">   * be calculated.  The gradient is defined as the rate of change of the geoid</span>
-<a name="l00061"></a>00061 <span class="comment">   * as a function of position on the ellipsoid.  This uses the parameters for</span>
-<a name="l00062"></a>00062 <span class="comment">   * the WGS84 ellipsoid.  The gradient defined in terms of the interpolated</span>
-<a name="l00063"></a>00063 <span class="comment">   * heights.  As a result of the way that the geoid data is stored, the</span>
-<a name="l00064"></a>00064 <span class="comment">   * calculation of gradients can result in large quantization errors.  This is</span>
-<a name="l00065"></a>00065 <span class="comment">   * particularly acute for fine grids, at high latitudes, and for the easterly</span>
-<a name="l00066"></a>00066 <span class="comment">   * gradient.</span>
-<a name="l00067"></a>00067 <span class="comment">   *</span>
-<a name="l00068"></a>00068 <span class="comment">   * This class is typically \e not thread safe in that a single instantiation</span>
-<a name="l00069"></a>00069 <span class="comment">   * cannot be safely used by multiple threads because of the way the object</span>
-<a name="l00070"></a>00070 <span class="comment">   * reads the data set and because it maintains a single-cell cache.  If</span>
-<a name="l00071"></a>00071 <span class="comment">   * multiple threads need to calculate geoid heights they should all construct</span>
-<a name="l00072"></a>00072 <span class="comment">   * thread-local instantiations.  Alternatively, set the optional \e</span>
-<a name="l00073"></a>00073 <span class="comment">   * threadsafe parameter to true in the constructor.  This causes the</span>
-<a name="l00074"></a>00074 <span class="comment">   * constructor to read all the data into memory and to turn off the</span>
-<a name="l00075"></a>00075 <span class="comment">   * single-cell caching which results in a Geoid object which \e is thread</span>
-<a name="l00076"></a>00076 <span class="comment">   * safe.</span>
-<a name="l00077"></a>00077 <span class="comment">   *</span>
-<a name="l00078"></a>00078 <span class="comment">   * Example of use:</span>
-<a name="l00079"></a>00079 <span class="comment">   * \include example-Geoid.cpp</span>
-<a name="l00080"></a>00080 <span class="comment">   *</span>
-<a name="l00081"></a>00081 <span class="comment">   * <a href="GeoidEval.1.html">GeoidEval</a> is a command-line utility</span>
-<a name="l00082"></a>00082 <span class="comment">   * providing access to the functionality of Geoid.</span>
-<a name="l00083"></a>00083 <span class="comment">   **********************************************************************/</span>
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> Geoid {
-<a name="l00086"></a>00086   <span class="keyword">private</span>:
-<a name="l00087"></a>00087     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00088"></a>00088 <span class="preprocessor">#if PGM_PIXEL_WIDTH != 4</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> pixel_t;
-<a name="l00090"></a>00090     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> pixel_size_ = 2;
-<a name="l00091"></a>00091     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> pixel_max_ = 0xffffu;
-<a name="l00092"></a>00092 <span class="preprocessor">#else</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> pixel_t;
-<a name="l00094"></a>00094     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> pixel_size_ = 4;
-<a name="l00095"></a>00095     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> pixel_max_ = 0xffffffffu;
-<a name="l00096"></a>00096 <span class="preprocessor">#endif</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> stencilsize_ = 12;
-<a name="l00098"></a>00098     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> nterms_ = ((3 + 1) * (3 + 2))/2; <span class="comment">// for a cubic fit</span>
-<a name="l00099"></a>00099     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c0_;
-<a name="l00100"></a>00100     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c0n_;
-<a name="l00101"></a>00101     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c0s_;
-<a name="l00102"></a>00102     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c3_[stencilsize_ * nterms_];
-<a name="l00103"></a>00103     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c3n_[stencilsize_ * nterms_];
-<a name="l00104"></a>00104     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c3s_[stencilsize_ * nterms_];
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     std::string _name, _dir, _filename;
-<a name="l00107"></a>00107     <span class="keyword">const</span> <span class="keywordtype">bool</span> _cubic;
-<a name="l00108"></a>00108     <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _e2, _degree, _eps;
-<a name="l00109"></a>00109     <span class="keyword">mutable</span> std::ifstream _file;
-<a name="l00110"></a>00110     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _rlonres, _rlatres;
-<a name="l00111"></a>00111     std::string _description, _datetime;
-<a name="l00112"></a>00112     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _offset, _scale, _maxerror, _rmserror;
-<a name="l00113"></a>00113     <span class="keywordtype">int</span> _width, _height;
-<a name="l00114"></a>00114     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> _datastart, _swidth;
-<a name="l00115"></a>00115     <span class="keywordtype">bool</span> _threadsafe;
-<a name="l00116"></a>00116     <span class="comment">// Area cache</span>
-<a name="l00117"></a>00117     <span class="keyword">mutable</span> std::vector< std::vector<pixel_t> > _data;
-<a name="l00118"></a>00118     <span class="keyword">mutable</span> <span class="keywordtype">bool</span> _cache;
-<a name="l00119"></a>00119     <span class="comment">// NE corner and extent of cache</span>
-<a name="l00120"></a>00120     <span class="keyword">mutable</span> <span class="keywordtype">int</span> _xoffset, _yoffset, _xsize, _ysize;
-<a name="l00121"></a>00121     <span class="comment">// Cell cache</span>
-<a name="l00122"></a>00122     <span class="keyword">mutable</span> <span class="keywordtype">int</span> _ix, _iy;
-<a name="l00123"></a>00123     <span class="keyword">mutable</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _v00, _v01, _v10, _v11;
-<a name="l00124"></a>00124     <span class="keyword">mutable</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _t[nterms_];
-<a name="l00125"></a>00125     <span class="keywordtype">void</span> filepos(<span class="keywordtype">int</span> ix, <span class="keywordtype">int</span> iy)<span class="keyword"> const </span>{
-<a name="l00126"></a>00126       _file.seekg(
-<a name="l00127"></a>00127 #<span class="keywordflow">if</span> !(defined(__GNUC__) && __GNUC__ < 4)
-<a name="l00128"></a>00128                   <span class="comment">// g++ 3.x doesn't know about the cast to streamoff.</span>
-<a name="l00129"></a>00129                   std::ios::streamoff
-<a name="l00130"></a>00130 #endif
-<a name="l00131"></a>00131                   (_datastart +
-<a name="l00132"></a>00132                    pixel_size_ * (<span class="keywordtype">unsigned</span>(iy)*_swidth + <span class="keywordtype">unsigned</span>(ix))));
-<a name="l00133"></a>00133     }
-<a name="l00134"></a>00134     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> rawval(<span class="keywordtype">int</span> ix, <span class="keywordtype">int</span> iy)<span class="keyword"> const </span>{
-<a name="l00135"></a>00135       <span class="keywordflow">if</span> (ix < 0)
-<a name="l00136"></a>00136         ix += _width;
-<a name="l00137"></a>00137       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ix >= _width)
-<a name="l00138"></a>00138         ix -= _width;
-<a name="l00139"></a>00139       <span class="keywordflow">if</span> (_cache && iy >= _yoffset && iy < _yoffset + _ysize &&
-<a name="l00140"></a>00140           ((ix >= _xoffset && ix < _xoffset + _xsize) ||
-<a name="l00141"></a>00141            (ix + _width >= _xoffset && ix + _width < _xoffset + _xsize))) {
-<a name="l00142"></a>00142         <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(_data[iy - _yoffset]
-<a name="l00143"></a>00143                     [ix >= _xoffset ? ix - _xoffset : ix + _width - _xoffset]);
-<a name="l00144"></a>00144       } <span class="keywordflow">else</span> {
-<a name="l00145"></a>00145         <span class="keywordflow">if</span> (iy < 0 || iy >= _height) {
-<a name="l00146"></a>00146           iy = iy < 0 ? -iy : 2 * (_height - 1) - iy;
-<a name="l00147"></a>00147           ix += (ix < _width/2 ? 1 : -1) * _width/2;
-<a name="l00148"></a>00148         }
-<a name="l00149"></a>00149         <span class="keywordflow">try</span> {
-<a name="l00150"></a>00150           filepos(ix, iy);
-<a name="l00151"></a>00151           <span class="keywordtype">char</span> a, b;
-<a name="l00152"></a>00152           _file.get(a);
-<a name="l00153"></a>00153           _file.get(b);
-<a name="l00154"></a>00154           <span class="keywordtype">unsigned</span> r = ((<span class="keywordtype">unsigned</span> char)(a) << 8) | (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)(b);
-<a name="l00155"></a>00155           <span class="keywordflow">if</span> (pixel_size_ == 4) {
-<a name="l00156"></a>00156             _file.get(a);
-<a name="l00157"></a>00157             _file.get(b);
-<a name="l00158"></a>00158             r = (r << 16) | ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)(a) << 8) | (<span class="keywordtype">unsigned</span> char)(b);
-<a name="l00159"></a>00159           }
-<a name="l00160"></a>00160           <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(r);
-<a name="l00161"></a>00161         }
-<a name="l00162"></a>00162         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00163"></a>00163           <span class="comment">// throw GeographicErr("Error reading " + _filename + ": "</span>
-<a name="l00164"></a>00164           <span class="comment">//                      + e.what());</span>
-<a name="l00165"></a>00165           <span class="comment">// triggers complaints about the "binary '+'" under Visual Studio.</span>
-<a name="l00166"></a>00166           <span class="comment">// So use '+=' instead.</span>
-<a name="l00167"></a>00167           std::string err(<span class="stringliteral">"Error reading "</span>);
-<a name="l00168"></a>00168           err += _filename;
-<a name="l00169"></a>00169           err += <span class="stringliteral">": "</span>;
-<a name="l00170"></a>00170           err += e.what();
-<a name="l00171"></a>00171           <span class="keywordflow">throw</span> GeographicErr(err);
-<a name="l00172"></a>00172         }
-<a name="l00173"></a>00173       }
-<a name="l00174"></a>00174     }
-<a name="l00175"></a>00175     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> height(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <span class="keywordtype">bool</span> gradp,
-<a name="l00176"></a>00176                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& grade, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gradn) <span class="keyword">const</span>;
-<a name="l00177"></a>00177     Geoid(<span class="keyword">const</span> Geoid&);            <span class="comment">// copy constructor not allowed</span>
-<a name="l00178"></a>00178     Geoid& operator=(<span class="keyword">const</span> Geoid&); <span class="comment">// copy assignment not allowed</span>
-<a name="l00179"></a>00179   <span class="keyword">public</span>:
-<a name="l00180"></a>00180 <span class="comment"></span>
-<a name="l00181"></a>00181 <span class="comment">    /**</span>
-<a name="l00182"></a>00182 <span class="comment">     * Flags indicating conversions between heights above the geoid and heights</span>
-<a name="l00183"></a>00183 <span class="comment">     * above the ellipsoid.</span>
-<a name="l00184"></a>00184 <span class="comment">     **********************************************************************/</span>
-<a name="l00185"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">00185</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">convertflag</a> {<span class="comment"></span>
-<a name="l00186"></a>00186 <span class="comment">      /**</span>
-<a name="l00187"></a>00187 <span class="comment">       * The multiplier for converting from heights above the geoid to heights</span>
-<a name="l00188"></a>00188 <span class="comment">       * above the ellipsoid.</span>
-<a name="l00189"></a>00189 <span class="comment">       **********************************************************************/</span>
-<a name="l00190"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a4a1db06e9dcfa1ebb345c616151ab70d">00190</a>       ELLIPSOIDTOGEOID = -1,<span class="comment"></span>
-<a name="l00191"></a>00191 <span class="comment">      /**</span>
-<a name="l00192"></a>00192 <span class="comment">       * No conversion.</span>
-<a name="l00193"></a>00193 <span class="comment">       **********************************************************************/</span>
-<a name="l00194"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a677322ba74ea5494e67478c3dc1780d5">00194</a>       NONE = 0,<span class="comment"></span>
-<a name="l00195"></a>00195 <span class="comment">      /**</span>
-<a name="l00196"></a>00196 <span class="comment">       * The multiplier for converting from heights above the ellipsoid to</span>
-<a name="l00197"></a>00197 <span class="comment">       * heights above the geoid.</span>
-<a name="l00198"></a>00198 <span class="comment">       **********************************************************************/</span>
-<a name="l00199"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473">00199</a>       GEOIDTOELLIPSOID = 1,
-<a name="l00200"></a>00200     };
-<a name="l00201"></a>00201 <span class="comment"></span>
-<a name="l00202"></a>00202 <span class="comment">    /** \name Setting up the geoid</span>
-<a name="l00203"></a>00203 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00204"></a>00204 <span class="comment">    ///@{</span>
-<a name="l00205"></a>00205 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00206"></a>00206 <span class="comment">     * Construct a geoid.</span>
-<a name="l00207"></a>00207 <span class="comment">     *</span>
-<a name="l00208"></a>00208 <span class="comment">     * @param[in] name the name of the geoid.</span>
-<a name="l00209"></a>00209 <span class="comment">     * @param[in] path (optional) directory for data file.</span>
-<a name="l00210"></a>00210 <span class="comment">     * @param[in] cubic (optional) interpolation method; false means bilinear,</span>
-<a name="l00211"></a>00211 <span class="comment">     *   true (the default) means cubic.</span>
-<a name="l00212"></a>00212 <span class="comment">     * @param[in] threadsafe (optional), if true, construct a thread safe</span>
-<a name="l00213"></a>00213 <span class="comment">     *   object.  The default is false</span>
-<a name="l00214"></a>00214 <span class="comment">     *</span>
-<a name="l00215"></a>00215 <span class="comment">     * The data file is formed by appending ".pgm" to the name.  If \e path is</span>
-<a name="l00216"></a>00216 <span class="comment">     * specified (and is non-empty), then the file is loaded from directory, \e</span>
-<a name="l00217"></a>00217 <span class="comment">     * path.  Otherwise the path is given by DefaultGeoidPath().  This may</span>
-<a name="l00218"></a>00218 <span class="comment">     * throw an exception because the file does not exist, is unreadable, or is</span>
-<a name="l00219"></a>00219 <span class="comment">     * corrupt.  If the \e threadsafe parameter is true, the data set is read</span>
-<a name="l00220"></a>00220 <span class="comment">     * into memory (which this may also cause an exception to be thrown), the</span>
-<a name="l00221"></a>00221 <span class="comment">     * data file is closed, and single-cell caching is turned off; this results</span>
-<a name="l00222"></a>00222 <span class="comment">     * in a Geoid object which \e is thread safe.</span>
-<a name="l00223"></a>00223 <span class="comment">     **********************************************************************/</span>
-<a name="l00224"></a>00224     <span class="keyword">explicit</span> Geoid(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> std::string& path = <span class="stringliteral">""</span>,
-<a name="l00225"></a>00225                    <span class="keywordtype">bool</span> cubic = <span class="keyword">true</span>, <span class="keywordtype">bool</span> threadsafe = <span class="keyword">false</span>);
-<a name="l00226"></a>00226 <span class="comment"></span>
-<a name="l00227"></a>00227 <span class="comment">    /**</span>
-<a name="l00228"></a>00228 <span class="comment">     * Set up a cache.</span>
-<a name="l00229"></a>00229 <span class="comment">     *</span>
-<a name="l00230"></a>00230 <span class="comment">     * @param[in] south latitude (degrees) of the south edge of the cached area.</span>
-<a name="l00231"></a>00231 <span class="comment">     * @param[in] west longitude (degrees) of the west edge of the cached area.</span>
-<a name="l00232"></a>00232 <span class="comment">     * @param[in] north latitude (degrees) of the north edge of the cached area.</span>
-<a name="l00233"></a>00233 <span class="comment">     * @param[in] east longitude (degrees) of the east edge of the cached area.</span>
-<a name="l00234"></a>00234 <span class="comment">     *</span>
-<a name="l00235"></a>00235 <span class="comment">     * Cache the data for the specified "rectangular" area bounded by the</span>
-<a name="l00236"></a>00236 <span class="comment">     * parallels \e south and \e north and the meridians \e west and \e east.</span>
-<a name="l00237"></a>00237 <span class="comment">     * \e east is always interpreted as being east of \e west, if necessary by</span>
-<a name="l00238"></a>00238 <span class="comment">     * adding 360<sup>o</sup> to its value.  This may throw an error because of</span>
-<a name="l00239"></a>00239 <span class="comment">     * insufficient memory or because of an error reading the data from the</span>
-<a name="l00240"></a>00240 <span class="comment">     * file.  In this case, you can catch the error and either do nothing (you</span>
-<a name="l00241"></a>00241 <span class="comment">     * will have no cache in this case) or try again with a smaller area.  \e</span>
-<a name="l00242"></a>00242 <span class="comment">     * south and \e north should be in the range [-90, 90]; \e west and \e east</span>
-<a name="l00243"></a>00243 <span class="comment">     * should be in the range [-180, 360].  An exception is thrown if this</span>
-<a name="l00244"></a>00244 <span class="comment">     * routine is called on a thread safe Geoid.</span>
-<a name="l00245"></a>00245 <span class="comment">     **********************************************************************/</span>
-<a name="l00246"></a>00246     <span class="keywordtype">void</span> CacheArea(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> south, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> west, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> north, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> east) <span class="keyword">const</span>;
-<a name="l00247"></a>00247 <span class="comment"></span>
-<a name="l00248"></a>00248 <span class="comment">    /**</span>
-<a name="l00249"></a>00249 <span class="comment">     * Cache all the data.  On most computers, this is fast for data sets with</span>
-<a name="l00250"></a>00250 <span class="comment">     * grid resolution of 5' or coarser.  For a 1' grid, the required RAM is</span>
-<a name="l00251"></a>00251 <span class="comment">     * 450MB; a 2.5' grid needs 72MB; and a 5' grid needs 18MB.  This may throw</span>
-<a name="l00252"></a>00252 <span class="comment">     * an error because of insufficient memory or because of an error reading</span>
-<a name="l00253"></a>00253 <span class="comment">     * the data from the file.  In this case, you can catch the error and</span>
-<a name="l00254"></a>00254 <span class="comment">     * either do nothing (you will have no cache in this case) or try using</span>
-<a name="l00255"></a>00255 <span class="comment">     * Geoid::CacheArea on a specific area.  An exception is thrown if this</span>
-<a name="l00256"></a>00256 <span class="comment">     * routine is called on a thread safe Geoid.</span>
-<a name="l00257"></a>00257 <span class="comment">     **********************************************************************/</span>
-<a name="l00258"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">00258</a>     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">CacheAll</a>()<span class="keyword"> const </span>{ CacheArea(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(-90), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0),
-<a name="l00259"></a>00259                                       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(90), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(360)); }
-<a name="l00260"></a>00260 <span class="comment"></span>
-<a name="l00261"></a>00261 <span class="comment">    /**</span>
-<a name="l00262"></a>00262 <span class="comment">     * Clear the cache.  This never throws an error.  (This does nothing with a</span>
-<a name="l00263"></a>00263 <span class="comment">     * thread safe Geoid.)</span>
-<a name="l00264"></a>00264 <span class="comment">     **********************************************************************/</span>
-<a name="l00265"></a>00265     <span class="keywordtype">void</span> CacheClear() <span class="keyword">const</span> throw();
-<a name="l00266"></a>00266 <span class="comment"></span>
-<a name="l00267"></a>00267 <span class="comment">    ///@}</span>
-<a name="l00268"></a>00268 <span class="comment"></span><span class="comment"></span>
-<a name="l00269"></a>00269 <span class="comment">    /** \name Compute geoid heights</span>
-<a name="l00270"></a>00270 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00271"></a>00271 <span class="comment">    ///@{</span>
-<a name="l00272"></a>00272 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00273"></a>00273 <span class="comment">     * Compute the geoid height at a point</span>
-<a name="l00274"></a>00274 <span class="comment">     *</span>
-<a name="l00275"></a>00275 <span class="comment">     * @param[in] lat latitude of the point (degrees).</span>
-<a name="l00276"></a>00276 <span class="comment">     * @param[in] lon longitude of the point (degrees).</span>
-<a name="l00277"></a>00277 <span class="comment">     * @return geoid height (meters).</span>
-<a name="l00278"></a>00278 <span class="comment">     *</span>
-<a name="l00279"></a>00279 <span class="comment">     * The latitude should be in [-90, 90] and longitude should be in</span>
-<a name="l00280"></a>00280 <span class="comment">     * [-180,360].  This may throw an error because of an error reading data</span>
-<a name="l00281"></a>00281 <span class="comment">     * from disk.  However, it will not throw if (\e lat, \e lon) is within a</span>
-<a name="l00282"></a>00282 <span class="comment">     * successfully cached area.</span>
-<a name="l00283"></a>00283 <span class="comment">     **********************************************************************/</span>
-<a name="l00284"></a><a class="code" href="classGeographicLib_1_1Geoid.html#accb63bfbbadae10af79b3a3028a3045a">00284</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real operator()(real lat, real lon)<span class="keyword"> const </span>{
-<a name="l00285"></a>00285       real gradn, grade;
-<a name="l00286"></a>00286       <span class="keywordflow">return</span> height(lat, lon, <span class="keyword">false</span>, gradn, grade);
-<a name="l00287"></a>00287     }
-<a name="l00288"></a>00288 <span class="comment"></span>
-<a name="l00289"></a>00289 <span class="comment">    /**</span>
-<a name="l00290"></a>00290 <span class="comment">     * Compute the geoid height and gradient at a point</span>
-<a name="l00291"></a>00291 <span class="comment">     *</span>
-<a name="l00292"></a>00292 <span class="comment">     * @param[in] lat latitude of the point (degrees).</span>
-<a name="l00293"></a>00293 <span class="comment">     * @param[in] lon longitude of the point (degrees).</span>
-<a name="l00294"></a>00294 <span class="comment">     * @param[out] gradn northerly gradient (dimensionless).</span>
-<a name="l00295"></a>00295 <span class="comment">     * @param[out] grade easterly gradient (dimensionless).</span>
-<a name="l00296"></a>00296 <span class="comment">     * @return geoid height (meters).</span>
-<a name="l00297"></a>00297 <span class="comment">     *</span>
-<a name="l00298"></a>00298 <span class="comment">     * The latitude should be in [-90, 90] and longitude should be in [-180,</span>
-<a name="l00299"></a>00299 <span class="comment">     * 360].  This may throw an error because of an error reading data from</span>
-<a name="l00300"></a>00300 <span class="comment">     * disk.  However, it will not throw if (\e lat, \e lon) is within a</span>
-<a name="l00301"></a>00301 <span class="comment">     * successfully cached area.  As a result of the way that the geoid data is</span>
-<a name="l00302"></a>00302 <span class="comment">     * stored, the calculation of gradients can result in large quantization</span>
-<a name="l00303"></a>00303 <span class="comment">     * errors.  This is particularly acute for fine grids, at high latitudes,</span>
-<a name="l00304"></a>00304 <span class="comment">     * and for the easterly gradient.  If you need to compute the direction of</span>
-<a name="l00305"></a>00305 <span class="comment">     * the acceleration due to gravity accurately, you should use</span>
-<a name="l00306"></a>00306 <span class="comment">     * GravityModel::Gravity.</span>
-<a name="l00307"></a>00307 <span class="comment">     **********************************************************************/</span>
-<a name="l00308"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a3bb5740c3a38a77caeb5eabd54c77cbc">00308</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#a3bb5740c3a38a77caeb5eabd54c77cbc">operator()</a>(real lat, real lon, real& gradn, real& grade)<span class="keyword"> const </span>{
-<a name="l00309"></a>00309       <span class="keywordflow">return</span> height(lat, lon, <span class="keyword">true</span>, gradn, grade);
-<a name="l00310"></a>00310     }
-<a name="l00311"></a>00311 <span class="comment"></span>
-<a name="l00312"></a>00312 <span class="comment">    /**</span>
-<a name="l00313"></a>00313 <span class="comment">     * Convert a height above the geoid to a height above the ellipsoid and</span>
-<a name="l00314"></a>00314 <span class="comment">     * vice versa.</span>
-<a name="l00315"></a>00315 <span class="comment">     *</span>
-<a name="l00316"></a>00316 <span class="comment">     * @param[in] lat latitude of the point (degrees).</span>
-<a name="l00317"></a>00317 <span class="comment">     * @param[in] lon longitude of the point (degrees).</span>
-<a name="l00318"></a>00318 <span class="comment">     * @param[in] h height of the point (degrees).</span>
-<a name="l00319"></a>00319 <span class="comment">     * @param[in] d a Geoid::convertflag specifying the direction of the</span>
-<a name="l00320"></a>00320 <span class="comment">     *   conversion; Geoid::GEOIDTOELLIPSOID means convert a height above the</span>
-<a name="l00321"></a>00321 <span class="comment">     *   geoid to a height above the ellipsoid; Geoid::ELLIPSOIDTOGEOID means</span>
-<a name="l00322"></a>00322 <span class="comment">     *   convert a height above the ellipsoid to a height above the geoid.</span>
-<a name="l00323"></a>00323 <span class="comment">     * @return converted height (meters).</span>
-<a name="l00324"></a>00324 <span class="comment">     **********************************************************************/</span>
-<a name="l00325"></a><a class="code" href="classGeographicLib_1_1Geoid.html#adf98d0f0d881893a4f5ff711a3be0e04">00325</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real ConvertHeight(real lat, real lon, real h,
-<a name="l00326"></a>00326                              <a class="code" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">convertflag</a> d)<span class="keyword"> const </span>{
-<a name="l00327"></a>00327       real gradn, grade;
-<a name="l00328"></a>00328       <span class="keywordflow">return</span> h + <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(d) * height(lat, lon, <span class="keyword">true</span>, gradn, grade);
-<a name="l00329"></a>00329     }
-<a name="l00330"></a>00330 <span class="comment"></span>
-<a name="l00331"></a>00331 <span class="comment">    ///@}</span>
-<a name="l00332"></a>00332 <span class="comment"></span><span class="comment"></span>
-<a name="l00333"></a>00333 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00334"></a>00334 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00335"></a>00335 <span class="comment">    ///@{</span>
-<a name="l00336"></a>00336 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00337"></a>00337 <span class="comment">     * @return geoid description, if available, in the data file; if</span>
-<a name="l00338"></a>00338 <span class="comment">     *   absent, return "NONE".</span>
-<a name="l00339"></a>00339 <span class="comment">     **********************************************************************/</span>
-<a name="l00340"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a37d76bcfe0ddf9b84042d701c312e941">00340</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1Geoid.html#a37d76bcfe0ddf9b84042d701c312e941">Description</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _description; }
-<a name="l00341"></a>00341 <span class="comment"></span>
-<a name="l00342"></a>00342 <span class="comment">    /**</span>
-<a name="l00343"></a>00343 <span class="comment">     * @return date of the data file; if absent, return "UNKNOWN".</span>
-<a name="l00344"></a>00344 <span class="comment">     **********************************************************************/</span>
-<a name="l00345"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a9cd7304b5df37001f4ad3c91cdbc56f4">00345</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1Geoid.html#a9cd7304b5df37001f4ad3c91cdbc56f4">DateTime</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _datetime; }
-<a name="l00346"></a>00346 <span class="comment"></span>
-<a name="l00347"></a>00347 <span class="comment">    /**</span>
-<a name="l00348"></a>00348 <span class="comment">     * @return full file name used to load the geoid data.</span>
-<a name="l00349"></a>00349 <span class="comment">     **********************************************************************/</span>
-<a name="l00350"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a07e5f704f2684ce5acf824b7e0b17d30">00350</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1Geoid.html#a07e5f704f2684ce5acf824b7e0b17d30">GeoidFile</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _filename; }
-<a name="l00351"></a>00351 <span class="comment"></span>
-<a name="l00352"></a>00352 <span class="comment">    /**</span>
-<a name="l00353"></a>00353 <span class="comment">     * @return "name" used to load the geoid data (from the first argument of</span>
-<a name="l00354"></a>00354 <span class="comment">     *   the constructor).</span>
-<a name="l00355"></a>00355 <span class="comment">     **********************************************************************/</span>
-<a name="l00356"></a><a class="code" href="classGeographicLib_1_1Geoid.html#aa244668a189e35ce5ff248fb8fa2e57b">00356</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1Geoid.html#aa244668a189e35ce5ff248fb8fa2e57b">GeoidName</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _name; }
-<a name="l00357"></a>00357 <span class="comment"></span>
-<a name="l00358"></a>00358 <span class="comment">    /**</span>
-<a name="l00359"></a>00359 <span class="comment">     * @return directory used to load the geoid data.</span>
-<a name="l00360"></a>00360 <span class="comment">     **********************************************************************/</span>
-<a name="l00361"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a83b17b17045c49984bcdd032e637155e">00361</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1Geoid.html#a83b17b17045c49984bcdd032e637155e">GeoidDirectory</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _dir; }
-<a name="l00362"></a>00362 <span class="comment"></span>
-<a name="l00363"></a>00363 <span class="comment">    /**</span>
-<a name="l00364"></a>00364 <span class="comment">     * @return interpolation method ("cubic" or "bilinear").</span>
-<a name="l00365"></a>00365 <span class="comment">     **********************************************************************/</span>
-<a name="l00366"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a0ddfefaef196023486fc7642af45cf96">00366</a>     <span class="keyword">const</span> std::string Interpolation()<span class="keyword"> const</span>
-<a name="l00367"></a>00367 <span class="keyword">    </span>{ <span class="keywordflow">return</span> std::string(_cubic ? <span class="stringliteral">"cubic"</span> : <span class="stringliteral">"bilinear"</span>); }
-<a name="l00368"></a>00368 <span class="comment"></span>
-<a name="l00369"></a>00369 <span class="comment">    /**</span>
-<a name="l00370"></a>00370 <span class="comment">     * @return estimate of the maximum interpolation and quantization error</span>
-<a name="l00371"></a>00371 <span class="comment">     *   (meters).</span>
-<a name="l00372"></a>00372 <span class="comment">     *</span>
-<a name="l00373"></a>00373 <span class="comment">     * This relies on the value being stored in the data file.  If the value is</span>
-<a name="l00374"></a>00374 <span class="comment">     * absent, return -1.</span>
-<a name="l00375"></a>00375 <span class="comment">     **********************************************************************/</span>
-<a name="l00376"></a><a class="code" href="classGeographicLib_1_1Geoid.html#aff538da14578a02c551b411a899e567a">00376</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#aff538da14578a02c551b411a899e567a">MaxError</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _maxerror; }
-<a name="l00377"></a>00377 <span class="comment"></span>
-<a name="l00378"></a>00378 <span class="comment">    /**</span>
-<a name="l00379"></a>00379 <span class="comment">     * @return estimate of the RMS interpolation and quantization error</span>
-<a name="l00380"></a>00380 <span class="comment">     *   (meters).</span>
-<a name="l00381"></a>00381 <span class="comment">     *</span>
-<a name="l00382"></a>00382 <span class="comment">     * This relies on the value being stored in the data file.  If the value is</span>
-<a name="l00383"></a>00383 <span class="comment">     * absent, return -1.</span>
-<a name="l00384"></a>00384 <span class="comment">     **********************************************************************/</span>
-<a name="l00385"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a207f98316d20a5b9d47846e559c5e2a2">00385</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#a207f98316d20a5b9d47846e559c5e2a2">RMSError</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _rmserror; }
-<a name="l00386"></a>00386 <span class="comment"></span>
-<a name="l00387"></a>00387 <span class="comment">    /**</span>
-<a name="l00388"></a>00388 <span class="comment">     * @return offset (meters).</span>
-<a name="l00389"></a>00389 <span class="comment">     *</span>
-<a name="l00390"></a>00390 <span class="comment">     * This in used in converting from the pixel values in the data file to</span>
-<a name="l00391"></a>00391 <span class="comment">     * geoid heights.</span>
-<a name="l00392"></a>00392 <span class="comment">     **********************************************************************/</span>
-<a name="l00393"></a><a class="code" href="classGeographicLib_1_1Geoid.html#ac798950a643e4286aa8d3bb8cd9b0815">00393</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#ac798950a643e4286aa8d3bb8cd9b0815">Offset</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _offset; }
-<a name="l00394"></a>00394 <span class="comment"></span>
-<a name="l00395"></a>00395 <span class="comment">    /**</span>
-<a name="l00396"></a>00396 <span class="comment">     * @return scale (meters).</span>
-<a name="l00397"></a>00397 <span class="comment">     *</span>
-<a name="l00398"></a>00398 <span class="comment">     * This in used in converting from the pixel values in the data file to</span>
-<a name="l00399"></a>00399 <span class="comment">     * geoid heights.</span>
-<a name="l00400"></a>00400 <span class="comment">     **********************************************************************/</span>
-<a name="l00401"></a><a class="code" href="classGeographicLib_1_1Geoid.html#ab2346300c12ff7e70d35e08479ecede1">00401</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#ab2346300c12ff7e70d35e08479ecede1">Scale</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _scale; }
-<a name="l00402"></a>00402 <span class="comment"></span>
-<a name="l00403"></a>00403 <span class="comment">    /**</span>
-<a name="l00404"></a>00404 <span class="comment">     * @return true if the object is constructed to be thread safe.</span>
-<a name="l00405"></a>00405 <span class="comment">     **********************************************************************/</span>
-<a name="l00406"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a286e947c13592f21e45cbdd404b283c7">00406</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Geoid.html#a286e947c13592f21e45cbdd404b283c7">ThreadSafe</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _threadsafe; }
-<a name="l00407"></a>00407 <span class="comment"></span>
-<a name="l00408"></a>00408 <span class="comment">    /**</span>
-<a name="l00409"></a>00409 <span class="comment">     * @return true if a data cache is active.</span>
-<a name="l00410"></a>00410 <span class="comment">     **********************************************************************/</span>
-<a name="l00411"></a><a class="code" href="classGeographicLib_1_1Geoid.html#ade5715c0d1428a409383b1acd2cbe9be">00411</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Geoid.html#ade5715c0d1428a409383b1acd2cbe9be">Cache</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _cache; }
-<a name="l00412"></a>00412 <span class="comment"></span>
-<a name="l00413"></a>00413 <span class="comment">    /**</span>
-<a name="l00414"></a>00414 <span class="comment">     * @return west edge of the cached area; the cache includes this edge.</span>
-<a name="l00415"></a>00415 <span class="comment">     **********************************************************************/</span>
-<a name="l00416"></a><a class="code" href="classGeographicLib_1_1Geoid.html#aa0d2e119f089ee4182987ddd3faaf62a">00416</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#aa0d2e119f089ee4182987ddd3faaf62a">CacheWest</a>() <span class="keyword">const</span> throw() {
-<a name="l00417"></a>00417       <span class="keywordflow">return</span> _cache ? ((_xoffset + (_xsize == _width ? 0 : _cubic)
-<a name="l00418"></a>00418                         + _width/2) % _width - _width/2) / _rlonres :
-<a name="l00419"></a>00419         0;
-<a name="l00420"></a>00420     }
-<a name="l00421"></a>00421 <span class="comment"></span>
-<a name="l00422"></a>00422 <span class="comment">    /**</span>
-<a name="l00423"></a>00423 <span class="comment">     * @return east edge of the cached area; the cache excludes this edge.</span>
-<a name="l00424"></a>00424 <span class="comment">     **********************************************************************/</span>
-<a name="l00425"></a><a class="code" href="classGeographicLib_1_1Geoid.html#acb34cfbcfb8be2794b16a3d18209dbbe">00425</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#acb34cfbcfb8be2794b16a3d18209dbbe">CacheEast</a>() <span class="keyword">const</span> throw() {
-<a name="l00426"></a>00426       <span class="keywordflow">return</span>  _cache ?
-<a name="l00427"></a>00427         CacheWest() +
-<a name="l00428"></a>00428         (_xsize - (_xsize == _width ? 0 : 1 + 2 * _cubic)) / _rlonres :
-<a name="l00429"></a>00429         0;
-<a name="l00430"></a>00430     }
-<a name="l00431"></a>00431 <span class="comment"></span>
-<a name="l00432"></a>00432 <span class="comment">    /**</span>
-<a name="l00433"></a>00433 <span class="comment">     * @return north edge of the cached area; the cache includes this edge.</span>
-<a name="l00434"></a>00434 <span class="comment">     **********************************************************************/</span>
-<a name="l00435"></a><a class="code" href="classGeographicLib_1_1Geoid.html#a26742332938bb8f22be23c979ffb02a1">00435</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#a26742332938bb8f22be23c979ffb02a1">CacheNorth</a>() <span class="keyword">const</span> throw() {
-<a name="l00436"></a>00436       <span class="keywordflow">return</span> _cache ? 90 - (_yoffset + _cubic) / _rlatres : 0;
-<a name="l00437"></a>00437     }
-<a name="l00438"></a>00438 <span class="comment"></span>
-<a name="l00439"></a>00439 <span class="comment">    /**</span>
-<a name="l00440"></a>00440 <span class="comment">     * @return south edge of the cached area; the cache excludes this edge</span>
-<a name="l00441"></a>00441 <span class="comment">     *   unless it's the south pole.</span>
-<a name="l00442"></a>00442 <span class="comment">     **********************************************************************/</span>
-<a name="l00443"></a><a class="code" href="classGeographicLib_1_1Geoid.html#aa3db8f9639eb231539376e4617a3d59e">00443</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#aa3db8f9639eb231539376e4617a3d59e">CacheSouth</a>() <span class="keyword">const</span> throw() {
-<a name="l00444"></a>00444       <span class="keywordflow">return</span> _cache ? 90 - ( _yoffset + _ysize - 1 - _cubic) / _rlatres : 0;
-<a name="l00445"></a>00445     }
-<a name="l00446"></a>00446 <span class="comment"></span>
-<a name="l00447"></a>00447 <span class="comment">    /**</span>
-<a name="l00448"></a>00448 <span class="comment">     * @return \e a the equatorial radius of the WGS84 ellipsoid (meters).</span>
-<a name="l00449"></a>00449 <span class="comment">     *</span>
-<a name="l00450"></a>00450 <span class="comment">     * (The WGS84 value is returned because the supported geoid models are all</span>
-<a name="l00451"></a>00451 <span class="comment">     * based on this ellipsoid.)</span>
-<a name="l00452"></a>00452 <span class="comment">     **********************************************************************/</span>
-<a name="l00453"></a><a class="code" href="classGeographicLib_1_1Geoid.html#aada99465d9ddfc1b34ccf2ef3d86dbd7">00453</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MajorRadius() <span class="keyword">const</span> throw()
-<a name="l00454"></a>00454     { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<real>(); }
-<a name="l00455"></a>00455 <span class="comment"></span>
-<a name="l00456"></a>00456 <span class="comment">    /**</span>
-<a name="l00457"></a>00457 <span class="comment">     * @return \e f the flattening of the WGS84 ellipsoid.</span>
-<a name="l00458"></a>00458 <span class="comment">     *</span>
-<a name="l00459"></a>00459 <span class="comment">     * (The WGS84 value is returned because the supported geoid models are all</span>
-<a name="l00460"></a>00460 <span class="comment">     * based on this ellipsoid.)</span>
-<a name="l00461"></a>00461 <span class="comment">     **********************************************************************/</span>
-<a name="l00462"></a><a class="code" href="classGeographicLib_1_1Geoid.html#abd2076cab3455b816e9477cdb410b187">00462</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Geoid.html#abd2076cab3455b816e9477cdb410b187">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Const [...]
-<a name="l00463"></a>00463 <span class="comment">    ///@}</span>
-<a name="l00464"></a>00464 <span class="comment"></span><span class="comment"></span>
-<a name="l00465"></a>00465 <span class="comment">    /// \cond SKIP</span>
-<a name="l00466"></a>00466 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00467"></a>00467 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00468"></a>00468 <span class="comment">     * @return \e r the inverse flattening of the WGS84 ellipsoid.</span>
-<a name="l00469"></a>00469 <span class="comment">     **********************************************************************/</span>
-<a name="l00470"></a>00470     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw()
-<a name="l00471"></a>00471     { <span class="keywordflow">return</span> 1/<a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_f<real>(); }<span class="comment"></span>
-<a name="l00472"></a>00472 <span class="comment">    /// \endcond</span>
-<a name="l00473"></a>00473 <span class="comment"></span><span class="comment"></span>
-<a name="l00474"></a>00474 <span class="comment">    /**</span>
-<a name="l00475"></a>00475 <span class="comment">     * @return the default path for geoid data files.</span>
-<a name="l00476"></a>00476 <span class="comment">     *</span>
-<a name="l00477"></a>00477 <span class="comment">     * This is the value of the environment variable GEOID_PATH, if set;</span>
-<a name="l00478"></a>00478 <span class="comment">     * otherwise, it is $GEOGRAPHICLIB_DATA/geoids if the environment variable</span>
-<a name="l00479"></a>00479 <span class="comment">     * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default</span>
-<a name="l00480"></a>00480 <span class="comment">     * (/usr/local/share/GeographicLib/geoids on non-Windows systems and</span>
-<a name="l00481"></a>00481 <span class="comment">     * C:/Documents and Settings/All Users/Application</span>
-<a name="l00482"></a>00482 <span class="comment">     * Data/GeographicLib/geoids on Windows systems).</span>
-<a name="l00483"></a>00483 <span class="comment">     **********************************************************************/</span>
-<a name="l00484"></a>00484     <span class="keyword">static</span> std::string DefaultGeoidPath();
-<a name="l00485"></a>00485 <span class="comment"></span>
-<a name="l00486"></a>00486 <span class="comment">    /**</span>
-<a name="l00487"></a>00487 <span class="comment">     * @return the default name for the geoid.</span>
-<a name="l00488"></a>00488 <span class="comment">     *</span>
-<a name="l00489"></a>00489 <span class="comment">     * This is the value of the environment variable GEOID_NAME, if set,</span>
-<a name="l00490"></a>00490 <span class="comment">     * otherwise, it is "egm96-5".  The Geoid class does not use this function;</span>
-<a name="l00491"></a>00491 <span class="comment">     * it is just provided as a convenience for a calling program when</span>
-<a name="l00492"></a>00492 <span class="comment">     * constructing a Geoid object.</span>
-<a name="l00493"></a>00493 <span class="comment">     **********************************************************************/</span>
-<a name="l00494"></a>00494     <span class="keyword">static</span> std::string DefaultGeoidName();
-<a name="l00495"></a>00495 
-<a name="l00496"></a>00496   };
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
-<a name="l00502"></a>00502 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00503"></a>00503 <span class="preprocessor"></span>
-<a name="l00504"></a>00504 <span class="preprocessor">#endif  // GEOGRAPHICLIB_GEOID_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Gnomonic_8cpp.html b/doc/html/Gnomonic_8cpp.html
deleted file mode 100644
index 097ca39..0000000
--- a/doc/html/Gnomonic_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Gnomonic.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Gnomonic.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Gnomonic_8hpp_source.html">GeographicLib/Gnomonic.hpp</a>></code><br/>
-</div>
-<p><a href="Gnomonic_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Gnomonic_8cpp.html#ad62c02d3264b4069476f2f1aa21f223e">GEOGRAPHICLIB_GNOMONIC_CPP</a>   "$Id: 1abf2f2ebdc8a805d0d205051120809f0c0e6071 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Gnomonic_8cpp_source.html">Gnomonic.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ad62c02d3264b4069476f2f1aa21f223e"></a><!-- doxytag: member="Gnomonic.cpp::GEOGRAPHICLIB_GNOMONIC_CPP" ref="ad62c02d3264b4069476f2f1aa21f223e" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GNOMONIC_CPP   "$Id: 1abf2f2ebdc8a805d0d205051120809f0c0e6071 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Gnomonic_8cpp_source.html#l00012">12</a> of file <a class="el" href="Gnomonic_8cpp_source.html">Gnomonic.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Gnomonic_8cpp_source.html b/doc/html/Gnomonic_8cpp_source.html
deleted file mode 100644
index 1e406ae..0000000
--- a/doc/html/Gnomonic_8cpp_source.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Gnomonic.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Gnomonic.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Gnomonic_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Gnomonic.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::Gnomonic class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="Gnomonic_8hpp.html" title="Header for GeographicLib::Gnomonic class.">GeographicLib/Gnomonic.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="Gnomonic_8cpp.html#ad62c02d3264b4069476f2f1aa21f223e">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_GNOMONIC_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: 1abf2f2ebdc8a805d0d205051120809f0c0e6071 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Gnomonic_8cpp.html#ad62c02d3264b4069476f2f1aa21f223e">GEOGRAPHICLIB_GNOMONIC_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Gnomonic_8hpp.html#af85f3f443620d568666f526ee193308a">GEOGRAPHICLIB_GNOMONIC_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Gnomonic::eps0_ = numeric_limits<real>::epsilon();
-<a name="l00023"></a>00023   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Gnomonic::eps_ = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.01) * sqrt(eps0_);
-<a name="l00024"></a>00024 
-<a name="l00025"></a><a class="code" href="classGeographicLib_1_1Gnomonic.html#ab851ea19db5671f8d4a4151820bc6853">00025</a>   <span class="keywordtype">void</span> Gnomonic::Forward(real lat0, real lon0, real lat, real lon,
-<a name="l00026"></a>00026                          real& x, real& y, real& azi, real& rk)
-<a name="l00027"></a>00027     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00028"></a>00028     real azi0, m, M, t;
-<a name="l00029"></a>00029     _earth.GenInverse(lat0, lon0, lat, lon,
-<a name="l00030"></a>00030                       Geodesic::AZIMUTH | Geodesic::REDUCEDLENGTH |
-<a name="l00031"></a>00031                       Geodesic::GEODESICSCALE,
-<a name="l00032"></a>00032                       t, azi0, azi, m, M, t, t);
-<a name="l00033"></a>00033     rk = M;
-<a name="l00034"></a>00034     <span class="keywordflow">if</span> (M <= 0)
-<a name="l00035"></a>00035       x = y = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00036"></a>00036     <span class="keywordflow">else</span> {
-<a name="l00037"></a>00037       real rho = m/M;
-<a name="l00038"></a>00038       azi0 *= <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00039"></a>00039       x = rho * sin(azi0);
-<a name="l00040"></a>00040       y = rho * cos(azi0);
-<a name="l00041"></a>00041     }
-<a name="l00042"></a>00042   }
-<a name="l00043"></a>00043 
-<a name="l00044"></a><a class="code" href="classGeographicLib_1_1Gnomonic.html#afccbed660a482ef73d33ad16406ee626">00044</a>   <span class="keywordtype">void</span> Gnomonic::Reverse(real lat0, real lon0, real x, real y,
-<a name="l00045"></a>00045                          real& lat, real& lon, real& azi, real& rk)
-<a name="l00046"></a>00046     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00047"></a>00047     real
-<a name="l00048"></a>00048       azi0 = atan2(x, y) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00049"></a>00049       rho = Math::hypot(x, y),
-<a name="l00050"></a>00050       s = _a * atan(rho/_a);
-<a name="l00051"></a>00051     <span class="keywordtype">bool</span> little = rho <= _a;
-<a name="l00052"></a>00052     <span class="keywordflow">if</span> (!little)
-<a name="l00053"></a>00053       rho = 1/rho;
-<a name="l00054"></a>00054     <a class="code" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> line(_earth.Line(lat0, lon0, azi0,
-<a name="l00055"></a>00055                                   Geodesic::LATITUDE | Geodesic::LONGITUDE |
-<a name="l00056"></a>00056                                   Geodesic::AZIMUTH | Geodesic::DISTANCE_IN |
-<a name="l00057"></a>00057                                   Geodesic::REDUCEDLENGTH |
-<a name="l00058"></a>00058                                   Geodesic::GEODESICSCALE));
-<a name="l00059"></a>00059     <span class="keywordtype">int</span> count = numit_, trip = 0;
-<a name="l00060"></a>00060     real lat1, lon1, azi1, M;
-<a name="l00061"></a>00061     <span class="keywordflow">while</span> (count--) {
-<a name="l00062"></a>00062       real m, t;
-<a name="l00063"></a>00063       line.<a class="code" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">Position</a>(s, lat1, lon1, azi1, m, M, t);
-<a name="l00064"></a>00064       <span class="keywordflow">if</span> (trip)
-<a name="l00065"></a>00065         <span class="keywordflow">break</span>;
-<a name="l00066"></a>00066       <span class="comment">// If little, solve rho(s) = rho with drho(s)/ds = 1/M^2</span>
-<a name="l00067"></a>00067       <span class="comment">// else solve 1/rho(s) = 1/rho with d(1/rho(s))/ds = -1/m^2</span>
-<a name="l00068"></a>00068       real ds = little ? (m/M - rho) * M * M : (rho - M/m) * m * m;
-<a name="l00069"></a>00069       s -= ds;
-<a name="l00070"></a>00070       <span class="keywordflow">if</span> (!(abs(ds) >= eps_ * _a))
-<a name="l00071"></a>00071         ++trip;
-<a name="l00072"></a>00072     }
-<a name="l00073"></a>00073     <span class="keywordflow">if</span> (trip) {
-<a name="l00074"></a>00074       lat = lat1; lon = lon1; azi = azi1; rk = M;
-<a name="l00075"></a>00075     } <span class="keywordflow">else</span>
-<a name="l00076"></a>00076       lat = lon = azi = rk = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00077"></a>00077     <span class="keywordflow">return</span>;
-<a name="l00078"></a>00078   }
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Gnomonic_8hpp.html b/doc/html/Gnomonic_8hpp.html
deleted file mode 100644
index 1625eda..0000000
--- a/doc/html/Gnomonic_8hpp.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Gnomonic.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Gnomonic.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Geodesic_8hpp_source.html">GeographicLib/Geodesic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="GeodesicLine_8hpp_source.html">GeographicLib/GeodesicLine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="Gnomonic_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Gnomonic Projection.  <a href="classGeographicLib_1_1Gnomonic.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Gnomonic_8hpp.html#af85f3f443620d568666f526ee193308a">GEOGRAPHICLIB_GNOMONIC_HPP</a>   "$Id: f2e7e429e56165c314a518fada607c225132b945 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Gnomonic_8hpp_source.html">Gnomonic.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="af85f3f443620d568666f526ee193308a"></a><!-- doxytag: member="Gnomonic.hpp::GEOGRAPHICLIB_GNOMONIC_HPP" ref="af85f3f443620d568666f526ee193308a" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GNOMONIC_HPP   "$Id: f2e7e429e56165c314a518fada607c225132b945 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Gnomonic_8hpp_source.html#l00011">11</a> of file <a class="el" href="Gnomonic_8hpp_source.html">Gnomonic.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Gnomonic_8hpp_source.html b/doc/html/Gnomonic_8hpp_source.html
deleted file mode 100644
index 7634c07..0000000
--- a/doc/html/Gnomonic_8hpp_source.html
+++ /dev/null
@@ -1,304 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Gnomonic.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Gnomonic.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Gnomonic_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Gnomonic.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::Gnomonic class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_GNOMONIC_HPP)</span>
-<a name="l00011"></a><a class="code" href="Gnomonic_8hpp.html#af85f3f443620d568666f526ee193308a">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_GNOMONIC_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: f2e7e429e56165c314a518fada607c225132b945 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="GeodesicLine_8hpp.html" title="Header for GeographicLib::GeodesicLine class.">GeographicLib/GeodesicLine.hpp</a>></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00019"></a>00019 <span class="comment"></span>
-<a name="l00020"></a>00020 <span class="comment">  /**</span>
-<a name="l00021"></a>00021 <span class="comment">   * \brief %Gnomonic Projection.</span>
-<a name="l00022"></a>00022 <span class="comment">   *</span>
-<a name="l00023"></a>00023 <span class="comment">   * %Gnomonic projection centered at an arbitrary position \e C on the</span>
-<a name="l00024"></a>00024 <span class="comment">   * ellipsoid.  This projection is derived in Section 13 of</span>
-<a name="l00025"></a>00025 <span class="comment">   * - C. F. F. Karney,</span>
-<a name="l00026"></a>00026 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics</span>
-<a name="l00027"></a>00027 <span class="comment">   *   on an ellipsoid of revolution</a>,</span>
-<a name="l00028"></a>00028 <span class="comment">   *   Feb. 2011;</span>
-<a name="l00029"></a>00029 <span class="comment">   *   preprint</span>
-<a name="l00030"></a>00030 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.</span>
-<a name="l00031"></a>00031 <span class="comment">   * .</span>
-<a name="l00032"></a>00032 <span class="comment">   * See also Section 8 of</span>
-<a name="l00033"></a>00033 <span class="comment">   * - C. F. F. Karney,</span>
-<a name="l00034"></a>00034 <span class="comment">   *   <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>,</span>
-<a name="l00035"></a>00035 <span class="comment">   *   Sept. 2011;</span>
-<a name="l00036"></a>00036 <span class="comment">   *   preprint</span>
-<a name="l00037"></a>00037 <span class="comment">   *   <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.</span>
-<a name="l00038"></a>00038 <span class="comment">   * .</span>
-<a name="l00039"></a>00039 <span class="comment">   * The projection of \e P is defined as follows: compute the</span>
-<a name="l00040"></a>00040 <span class="comment">   * geodesic line from \e C to \e P; compute the reduced length \e m12,</span>
-<a name="l00041"></a>00041 <span class="comment">   * geodesic scale \e M12, and \e rho = <i>m12</i>/\e M12; finally \e x = \e</span>
-<a name="l00042"></a>00042 <span class="comment">   * rho sin \e azi1; \e y = \e rho cos \e azi1, where \e azi1 is the azimuth</span>
-<a name="l00043"></a>00043 <span class="comment">   * of the geodesic at \e C.  The Gnomonic::Forward and Gnomonic::Reverse</span>
-<a name="l00044"></a>00044 <span class="comment">   * methods also return the azimuth \e azi of the geodesic at \e P and</span>
-<a name="l00045"></a>00045 <span class="comment">   * reciprocal scale \e rk in the azimuthal direction.  The scale in the</span>
-<a name="l00046"></a>00046 <span class="comment">   * radial direction if 1/<i>rk</i><sup>2</sup>.</span>
-<a name="l00047"></a>00047 <span class="comment">   *</span>
-<a name="l00048"></a>00048 <span class="comment">   * For a sphere, \e rho is reduces to \e a tan(<i>s12</i>/<i>a</i>), where \e</span>
-<a name="l00049"></a>00049 <span class="comment">   * s12 is the length of the geodesic from \e C to \e P, and the gnomonic</span>
-<a name="l00050"></a>00050 <span class="comment">   * projection has the property that all geodesics appear as straight lines.</span>
-<a name="l00051"></a>00051 <span class="comment">   * For an ellipsoid, this property holds only for geodesics interesting the</span>
-<a name="l00052"></a>00052 <span class="comment">   * centers.  However geodesic segments close to the center are approximately</span>
-<a name="l00053"></a>00053 <span class="comment">   * straight.</span>
-<a name="l00054"></a>00054 <span class="comment">   *</span>
-<a name="l00055"></a>00055 <span class="comment">   * Consider a geodesic segment of length \e l.  Let \e T be the point on the</span>
-<a name="l00056"></a>00056 <span class="comment">   * geodesic (extended if necessary) closest to \e C the center of the</span>
-<a name="l00057"></a>00057 <span class="comment">   * projection and \e t be the distance \e CT.  To lowest order, the maximum</span>
-<a name="l00058"></a>00058 <span class="comment">   * deviation (as a true distance) of the corresponding gnomonic line segment</span>
-<a name="l00059"></a>00059 <span class="comment">   * (i.e., with the same end points) from the geodesic is<br></span>
-<a name="l00060"></a>00060 <span class="comment">   * <br></span>
-<a name="l00061"></a>00061 <span class="comment">   * (<i>K</i>(<i>T</i>) - <i>K</i>(<i>C</i>))</span>
-<a name="l00062"></a>00062 <span class="comment">   * <i>l</i><sup>2</sup> \e t / 32.<br></span>
-<a name="l00063"></a>00063 <span class="comment">   * <br></span>
-<a name="l00064"></a>00064 <span class="comment">   * where \e K is the Gaussian curvature.</span>
-<a name="l00065"></a>00065 <span class="comment">   *</span>
-<a name="l00066"></a>00066 <span class="comment">   * This result applies for any surface.  For an ellipsoid of revolution,</span>
-<a name="l00067"></a>00067 <span class="comment">   * consider all geodesics whose end points are within a distance \e r of \e</span>
-<a name="l00068"></a>00068 <span class="comment">   * C.  For a given \e r, the deviation is maximum when the latitude of \e C</span>
-<a name="l00069"></a>00069 <span class="comment">   * is 45<sup>o</sup>, when endpoints are a distance \e r away, and when their</span>
-<a name="l00070"></a>00070 <span class="comment">   * azimuths from the center are +/- 45<sup>o</sup> or +/- 135<sup>o</sup>.</span>
-<a name="l00071"></a>00071 <span class="comment">   * To lowest order in \e r and the flattening \e f, the deviation is \e f</span>
-<a name="l00072"></a>00072 <span class="comment">   * (<i>r</i>/2<i>a</i>)<sup>3</sup> \e r.</span>
-<a name="l00073"></a>00073 <span class="comment">   *</span>
-<a name="l00074"></a>00074 <span class="comment">   * The conversions all take place using a Geodesic object (by default</span>
-<a name="l00075"></a>00075 <span class="comment">   * Geodesic::WGS84).  For more information on geodesics see \ref geodesic.</span>
-<a name="l00076"></a>00076 <span class="comment">   *</span>
-<a name="l00077"></a>00077 <span class="comment">   * <b>CAUTION:</b> The definition of this projection for a sphere is</span>
-<a name="l00078"></a>00078 <span class="comment">   * standard.  However, there is no standard for how it should be extended to</span>
-<a name="l00079"></a>00079 <span class="comment">   * an ellipsoid.  The choices are:</span>
-<a name="l00080"></a>00080 <span class="comment">   * - Declare that the projection is undefined for an ellipsoid.</span>
-<a name="l00081"></a>00081 <span class="comment">   * - Project to a tangent plane from the center of the ellipsoid.  This</span>
-<a name="l00082"></a>00082 <span class="comment">   *   causes great ellipses to appear as straight lines in the projection;</span>
-<a name="l00083"></a>00083 <span class="comment">   *   i.e., it generalizes the spherical great circle to a great ellipse.</span>
-<a name="l00084"></a>00084 <span class="comment">   *   This was proposed by independently by Bowring and Williams in 1997.</span>
-<a name="l00085"></a>00085 <span class="comment">   * - Project to the conformal sphere with the constant of integration chosen</span>
-<a name="l00086"></a>00086 <span class="comment">   *   so that the values of the latitude match for the center point and</span>
-<a name="l00087"></a>00087 <span class="comment">   *   perform a central projection onto the plane tangent to the conformal</span>
-<a name="l00088"></a>00088 <span class="comment">   *   sphere at the center point.  This causes normal sections through the</span>
-<a name="l00089"></a>00089 <span class="comment">   *   center point to appear as straight lines in the projection; i.e., it</span>
-<a name="l00090"></a>00090 <span class="comment">   *   generalizes the spherical great circle to a normal section.  This was</span>
-<a name="l00091"></a>00091 <span class="comment">   *   proposed by I. G. Letoval'tsev, Generalization of the %Gnomonic</span>
-<a name="l00092"></a>00092 <span class="comment">   *   Projection for a Spheroid and the Principal Geodetic Problems Involved</span>
-<a name="l00093"></a>00093 <span class="comment">   *   in the Alignment of Surface Routes, Geodesy and Aerophotography (5),</span>
-<a name="l00094"></a>00094 <span class="comment">   *   271-274 (1963).</span>
-<a name="l00095"></a>00095 <span class="comment">   * - The projection given here.  This causes geodesics close to the center</span>
-<a name="l00096"></a>00096 <span class="comment">   *   point to appear as straight lines in the projection; i.e., it</span>
-<a name="l00097"></a>00097 <span class="comment">   *   generalizes the spherical great circle to a geodesic.</span>
-<a name="l00098"></a>00098 <span class="comment">   *</span>
-<a name="l00099"></a>00099 <span class="comment">   * Example of use:</span>
-<a name="l00100"></a>00100 <span class="comment">   * \include example-Gnomonic.cpp</span>
-<a name="l00101"></a>00101 <span class="comment">   *</span>
-<a name="l00102"></a>00102 <span class="comment">   * <a href="GeodesicProj.1.html">GeodesicProj</a> is a command-line utility</span>
-<a name="l00103"></a>00103 <span class="comment">   * providing access to the functionality of AzimuthalEquidistant, Gnomonic,</span>
-<a name="l00104"></a>00104 <span class="comment">   * and CassiniSoldner.</span>
-<a name="l00105"></a>00105 <span class="comment">   **********************************************************************/</span>
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> Gnomonic {
-<a name="l00108"></a>00108   <span class="keyword">private</span>:
-<a name="l00109"></a>00109     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00110"></a>00110     Geodesic _earth;
-<a name="l00111"></a>00111     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _f;
-<a name="l00112"></a>00112     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps0_;
-<a name="l00113"></a>00113     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps_;
-<a name="l00114"></a>00114     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numit_ = 5;
-<a name="l00115"></a>00115   <span class="keyword">public</span>:
-<a name="l00116"></a>00116 <span class="comment"></span>
-<a name="l00117"></a>00117 <span class="comment">    /**</span>
-<a name="l00118"></a>00118 <span class="comment">     * Constructor for Gnomonic.</span>
-<a name="l00119"></a>00119 <span class="comment">     *</span>
-<a name="l00120"></a>00120 <span class="comment">     * @param[in] earth the Geodesic object to use for geodesic calculations.</span>
-<a name="l00121"></a>00121 <span class="comment">     *   By default this uses the WGS84 ellipsoid.</span>
-<a name="l00122"></a>00122 <span class="comment">     **********************************************************************/</span>
-<a name="l00123"></a><a class="code" href="classGeographicLib_1_1Gnomonic.html#a2ac973ebbd7aaf18c451b152cd92db99">00123</a>     <span class="keyword">explicit</span> Gnomonic(<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>& earth = <a class="code" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>)
-<a name="l00124"></a>00124       throw()
-<a name="l00125"></a>00125       : _earth(earth)
-<a name="l00126"></a>00126       , _a(_earth.MajorRadius())
-<a name="l00127"></a>00127       , _f(_earth.Flattening())
-<a name="l00128"></a>00128     {}
-<a name="l00129"></a>00129 <span class="comment"></span>
-<a name="l00130"></a>00130 <span class="comment">    /**</span>
-<a name="l00131"></a>00131 <span class="comment">     * Forward projection, from geographic to gnomonic.</span>
-<a name="l00132"></a>00132 <span class="comment">     *</span>
-<a name="l00133"></a>00133 <span class="comment">     * @param[in] lat0 latitude of center point of projection (degrees).</span>
-<a name="l00134"></a>00134 <span class="comment">     * @param[in] lon0 longitude of center point of projection (degrees).</span>
-<a name="l00135"></a>00135 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00136"></a>00136 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00137"></a>00137 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00138"></a>00138 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00139"></a>00139 <span class="comment">     * @param[out] azi azimuth of geodesic at point (degrees).</span>
-<a name="l00140"></a>00140 <span class="comment">     * @param[out] rk reciprocal of azimuthal scale at point.</span>
-<a name="l00141"></a>00141 <span class="comment">     *</span>
-<a name="l00142"></a>00142 <span class="comment">     * \e lat0 and \e lat should be in the range [-90, 90] and \e lon0 and \e</span>
-<a name="l00143"></a>00143 <span class="comment">     * lon should be in the range [-180, 360].  The scale of the projection is</span>
-<a name="l00144"></a>00144 <span class="comment">     * 1/<i>rk</i><sup>2</sup> in the "radial" direction, \e azi clockwise from</span>
-<a name="l00145"></a>00145 <span class="comment">     * true north, and is 1/\e rk in the direction perpendicular to this.  If</span>
-<a name="l00146"></a>00146 <span class="comment">     * the point lies "over the horizon", i.e., if \e rk <= 0, then NaNs are</span>
-<a name="l00147"></a>00147 <span class="comment">     * returned for \e x and \e y (the correct values are returned for \e azi</span>
-<a name="l00148"></a>00148 <span class="comment">     * and \e rk).  A call to Forward followed by a call to Reverse will return</span>
-<a name="l00149"></a>00149 <span class="comment">     * the original (\e lat, \e lon) (to within roundoff) provided the point in</span>
-<a name="l00150"></a>00150 <span class="comment">     * not over the horizon.</span>
-<a name="l00151"></a>00151 <span class="comment">     **********************************************************************/</span>
-<a name="l00152"></a>00152     <span class="keywordtype">void</span> Forward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon,
-<a name="l00153"></a>00153                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& rk) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00154"></a>00154 <span class="comment"></span>
-<a name="l00155"></a>00155 <span class="comment">    /**</span>
-<a name="l00156"></a>00156 <span class="comment">     * Reverse projection, from gnomonic to geographic.</span>
-<a name="l00157"></a>00157 <span class="comment">     *</span>
-<a name="l00158"></a>00158 <span class="comment">     * @param[in] lat0 latitude of center point of projection (degrees).</span>
-<a name="l00159"></a>00159 <span class="comment">     * @param[in] lon0 longitude of center point of projection (degrees).</span>
-<a name="l00160"></a>00160 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00161"></a>00161 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00162"></a>00162 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00163"></a>00163 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00164"></a>00164 <span class="comment">     * @param[out] azi azimuth of geodesic at point (degrees).</span>
-<a name="l00165"></a>00165 <span class="comment">     * @param[out] rk reciprocal of azimuthal scale at point.</span>
-<a name="l00166"></a>00166 <span class="comment">     *</span>
-<a name="l00167"></a>00167 <span class="comment">     * \e lat0 should be in the range [-90, 90] and \e lon0 should be in the</span>
-<a name="l00168"></a>00168 <span class="comment">     * range [-180, 360].  \e lat will be in the range [-90, 90] and \e lon</span>
-<a name="l00169"></a>00169 <span class="comment">     * will be in the range [-180, 180).  The scale of the projection is 1/\e</span>
-<a name="l00170"></a>00170 <span class="comment">     * rk<sup>2</sup> in the "radial" direction, \e azi clockwise from true</span>
-<a name="l00171"></a>00171 <span class="comment">     * north, and is 1/\e rk in the direction perpendicular to this.  Even</span>
-<a name="l00172"></a>00172 <span class="comment">     * though all inputs should return a valid \e lat and \e lon, it's possible</span>
-<a name="l00173"></a>00173 <span class="comment">     * that the procedure fails to converge for very large \e x or \e y; in</span>
-<a name="l00174"></a>00174 <span class="comment">     * this case NaNs are returned for all the output arguments.  A call to</span>
-<a name="l00175"></a>00175 <span class="comment">     * Reverse followed by a call to Forward will return the original (\e x, \e</span>
-<a name="l00176"></a>00176 <span class="comment">     * y) (to roundoff).</span>
-<a name="l00177"></a>00177 <span class="comment">     **********************************************************************/</span>
-<a name="l00178"></a>00178     <span class="keywordtype">void</span> Reverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00179"></a>00179                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& azi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& rk) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00180"></a>00180 <span class="comment"></span>
-<a name="l00181"></a>00181 <span class="comment">    /**</span>
-<a name="l00182"></a>00182 <span class="comment">     * Gnomonic::Forward without returning the azimuth and scale.</span>
-<a name="l00183"></a>00183 <span class="comment">     **********************************************************************/</span>
-<a name="l00184"></a><a class="code" href="classGeographicLib_1_1Gnomonic.html#a2c08cf2bad190ee9ab88f7d877223208">00184</a>     <span class="keywordtype">void</span> Forward(real lat0, real lon0, real lat, real lon,
-<a name="l00185"></a>00185                  real& x, real& y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00186"></a>00186       real azi, rk;
-<a name="l00187"></a>00187       Forward(lat0, lon0, lat, lon, x, y, azi, rk);
-<a name="l00188"></a>00188     }
-<a name="l00189"></a>00189 <span class="comment"></span>
-<a name="l00190"></a>00190 <span class="comment">    /**</span>
-<a name="l00191"></a>00191 <span class="comment">     * Gnomonic::Reverse without returning the azimuth and scale.</span>
-<a name="l00192"></a>00192 <span class="comment">     **********************************************************************/</span>
-<a name="l00193"></a><a class="code" href="classGeographicLib_1_1Gnomonic.html#a8700d59a1e244f8dd211e344587dfed3">00193</a>     <span class="keywordtype">void</span> Reverse(real lat0, real lon0, real x, real y,
-<a name="l00194"></a>00194                  real& lat, real& lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00195"></a>00195       real azi, rk;
-<a name="l00196"></a>00196       Reverse(lat0, lon0, x, y, lat, lon, azi, rk);
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198 <span class="comment"></span>
-<a name="l00199"></a>00199 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00200"></a>00200 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00201"></a>00201 <span class="comment">    ///@{</span>
-<a name="l00202"></a>00202 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00203"></a>00203 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00204"></a>00204 <span class="comment">     *   the value inherited from the Geodesic object used in the constructor.</span>
-<a name="l00205"></a>00205 <span class="comment">     **********************************************************************/</span>
-<a name="l00206"></a><a class="code" href="classGeographicLib_1_1Gnomonic.html#a8598fe6d8c3896fa3fd58d24023f78ee">00206</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Gnomonic.html#a8598fe6d8c3896fa3fd58d24023f78ee">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.MajorRadius(); }
-<a name="l00207"></a>00207 <span class="comment"></span>
-<a name="l00208"></a>00208 <span class="comment">    /**</span>
-<a name="l00209"></a>00209 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value</span>
-<a name="l00210"></a>00210 <span class="comment">     *   inherited from the Geodesic object used in the constructor.</span>
-<a name="l00211"></a>00211 <span class="comment">     **********************************************************************/</span>
-<a name="l00212"></a><a class="code" href="classGeographicLib_1_1Gnomonic.html#a06b559fa72aa1e51da966c43d22b983d">00212</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1Gnomonic.html#a06b559fa72aa1e51da966c43d22b983d">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.Flattening(); }<span class="comment" [...]
-<a name="l00213"></a>00213 <span class="comment">    ///@}</span>
-<a name="l00214"></a>00214 <span class="comment"></span><span class="comment"></span>
-<a name="l00215"></a>00215 <span class="comment">    /// \cond SKIP</span>
-<a name="l00216"></a>00216 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00217"></a>00217 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00218"></a>00218 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00219"></a>00219 <span class="comment">     **********************************************************************/</span>
-<a name="l00220"></a>00220     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw()
-<a name="l00221"></a>00221     { <span class="keywordflow">return</span> _earth.InverseFlattening(); }<span class="comment"></span>
-<a name="l00222"></a>00222 <span class="comment">    /// \endcond</span>
-<a name="l00223"></a>00223 <span class="comment"></span>  };
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 <span class="preprocessor">#endif  // GEOGRAPHICLIB_GNOMONIC_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Gravity.1.html b/doc/html/Gravity.1.html
deleted file mode 100644
index d929096..0000000
--- a/doc/html/Gravity.1.html
+++ /dev/null
@@ -1,299 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>Gravity -- compute the earth's gravity field</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#models">MODELS</a></li>
-	<li><a href="#environment">ENVIRONMENT</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>Gravity -- compute the earth's gravity field</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>Gravity</strong> [ <strong>-n</strong> <em>name</em> ] [ <strong>-d</strong> <em>dir</em> ]
-[ <strong>-G</strong> | <strong>-D</strong> | <strong>-A</strong> | <strong>-H</strong> ] [ <strong>-c</strong> <em>lat</em> <em>h</em> ]
-[ <strong>-p</strong> <em>prec</em> ]
-[ <strong>-v</strong> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p><strong>Gravity</strong> reads in positions on standard input and prints out the
-gravitational field on standard output.</p>
-<p>The input line is of the form <em>lat</em> <em>lon</em> <em>h</em>.  <em>lat</em> and <em>lon</em> are
-the latitude and longitude expressed as decimal degrees or degrees,
-minutes, and seconds; see <a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a> for details.  <em>h</em> is the height
-above the ellipsoid in meters; this quantity is optional and defaults to
-0.  Alternatively, the gravity field can be computed at various points
-on a circle of latitude (constant <em>lat</em> and <em>h</em>) via the <strong>-c</strong> option;
-in this case only the longitude should be given on the input lines.  The
-quantities printed out are governed by the <strong>-G</strong> (default), <strong>-D</strong>,
-<strong>-A</strong>, or <strong>-H</strong> options.</p>
-<p>All the supported gravity models use WGS84 as the reference ellipsoid
-<em>a</em> = 6378137 m, <em>f</em> = 1/298.257223563, <em>omega</em> = 7292115e-11 rad/s,
-and <em>GM</em> = 3986004.418e8 m^3/s^2.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="n" class="item"><strong>-n</strong></a></strong></dt>
-
-<dd>
-<p>use gravity field model <em>name</em> instead of the default <code>egm96</code>.  See
-<a href="#models">MODELS</a>.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
-
-<dd>
-<p>read gravity models from <em>dir</em> instead of the default.  See
-<a href="#models">MODELS</a>.</p>
-</dd>
-<dt><strong><a name="g" class="item"><strong>-G</strong></a></strong></dt>
-
-<dd>
-<p>compute the acceleration due to gravity (including the centrifugal
-acceleration due the the earth's rotation) <strong>g</strong>.  The output consists of
-<em>gx</em> <em>gy</em> <em>gz</em> (all in m/s^2), where the <em>x</em>, <em>y</em>, and <em>z</em>
-components are in easterly, northerly, and up directions, respectively.
-Usually <em>gz</em> is negative.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-D</strong></a></strong></dt>
-
-<dd>
-<p>compute the gravity disturbance <strong>delta</strong> = <strong>g</strong> - <strong>gamma</strong>, where
-<strong>gamma</strong> is the "normal" gravity due to the reference ellipsoid .  The
-output consists of <em>deltax</em> <em>deltay</em> <em>deltaz</em> (all in mGal, 1 mGal =
-10^-5 m/s^2), where the <em>x</em>, <em>y</em>, and <em>z</em> components are in easterly,
-northerly, and up directions, respectively.  Note that <em>deltax</em> =
-<em>gx</em>, because <em>gammax</em> = 0.</p>
-</dd>
-<dt><strong><a name="a" class="item"><strong>-A</strong></a></strong></dt>
-
-<dd>
-<p>computes the gravitational anomaly.  The output consists of 3 items
-<em>Dg01</em> <em>xi</em> <em>eta</em>, where <em>Dg01</em> is in mGal (1 mGal = 10^-5 m/s^2)
-and <em>xi</em> and <em>eta</em> are in arcseconds.  The gravitational anomaly
-compares the gravitational field <strong>g</strong> at <em>P</em> with the normal gravity
-<strong>gamma</strong> at <em>Q</em> where the <em>P</em> is vertically above <em>Q</em> and the
-gravitational potential at <em>P</em> equals the normal potential at <em>Q</em>.
-<em>Dg01</em> gives the difference in the magnitudes of these two vectors and
-<em>xi</em> and <em>eta</em> give the difference in their directions (as northerly
-and easterly components).  The calculation uses a spherical
-approximation to match the results of the NGA's synthesis programs.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-H</strong></a></strong></dt>
-
-<dd>
-<p>compute the height of the geoid above the reference ellipsoid (in
-meters).  In this case, <em>h</em> should be zero.  The results accurately
-match the results of the NGA's synthesis programs.  <a href="GeoidEval.1.html"><code>GeoidEval(1)</code></a> can
-compute geoid heights much more quickly by interpolating on a grid of
-precomputed results; however the results from <a href="GeoidEval.1.html"><code>GeoidEval(1)</code></a> are only
-accurate to a few millimeters.</p>
-</dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
-
-<dd>
-<p>evaluate the field on a circle of latitude given by <em>lat</em> and <em>h</em>
-instead of reading these quantities from the input lines.  In this case,
-<strong>Gravity</strong> can calculate the field considerably more quickly.  If geoid
-heights are being computed (the <strong>-H</strong> option), then <em>h</em> must be zero.</p>
-</dd>
-<dt><strong><a name="p" class="item"><strong>-p</strong></a></strong></dt>
-
-<dd>
-<p>set the output precision to <em>prec</em>.  By default <em>prec</em> is 5 for
-acceleration due to gravity, 3 for the gravity disturbance and anomaly,
-and 4 for the geoid height.</p>
-</dd>
-<dt><strong><a name="v" class="item"><strong>-v</strong></a></strong></dt>
-
-<dd>
-<p>print information about the gravity model on standard error before
-processing the input.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage, the default gravity path and name, and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="models">MODELS</a></h1>
-<p><strong>Gravity</strong> computes the gravity field using one of the following models</p>
-<pre>
-    egm84, earth gravity model 1984.  See
-      <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html</a>
-    egm96, earth gravity model 1996.  See
-      <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html</a>
-    egm2008, earth gravity model 2008.  See
-      <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008</a>
-    wgs84, world geodetic system 1984.  This returns the normal
-      gravity for the WGS84 ellipsoid.</pre>
-<p>These models approximate the gravitation field above the surface of the
-earth.  By default, the <code>egm96</code> gravity model is used.  This may
-changed by setting the environment variable <a href="#gravity_name"><code>GRAVITY_NAME</code></a> or with the
-<strong>-n</strong> option.</p>
-<p>The gravity models will be loaded from a directory specified at compile
-time.  This may changed by setting the environment variables
-<a href="#gravity_path"><code>GRAVITY_PATH</code></a> or <a href="#geographiclib_data"><code>GEOGRAPHICLIB_DATA</code></a>, or with the <strong>-d</strong> option.
-The <strong>-h</strong> option prints the default gravity path and name.  Use the
-<strong>-v</strong> option to ascertain the full path name of the data file.</p>
-<p>Instructions for downloading and installing gravity models are
-available at
-<a href="http://geographiclib.sf.net/html/gravity.html#gravityinst">http://geographiclib.sf.net/html/gravity.html#gravityinst</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="environment">ENVIRONMENT</a></h1>
-<dl>
-<dt><strong><a name="gravity_name" class="item"><strong>GRAVITY_NAME</strong></a></strong></dt>
-
-<dd>
-<p>Override the compile-time default gravity name of <code>egm96</code>.  The <strong>-h</strong>
-option reports the value of <strong>GRAVITY_NAME</strong>, if defined, otherwise it
-reports the compile-time value.  If the <strong>-n</strong> <em>name</em> option is used,
-then <em>name</em> takes precedence.</p>
-</dd>
-<dt><strong><a name="gravity_path" class="item"><strong>GRAVITY_PATH</strong></a></strong></dt>
-
-<dd>
-<p>Override the compile-time default gravity path.  This is typically
-<code>/usr/local/share/GeographicLib/gravity</code> on Unix-like systems and
-<code>C:/Documents and Settings/All Users/Application
-Data/GeographicLib/gravity</code> on Windows systems.  The <strong>-h</strong> option reports
-the value of <strong>GRAVITY_PATH</strong>, if defined, otherwise it reports the
-compile-time value.  If the <strong>-d</strong> <em>dir</em> option is used, then <em>dir</em>
-takes precedence.</p>
-</dd>
-<dt><strong><a name="geographiclib_data" class="item"><strong>GEOGRAPHICLIB_DATA</strong></a></strong></dt>
-
-<dd>
-<p>Another way of overriding the compile-time default gravity path.  If it
-is set (and if <strong>GRAVITY_PATH</strong> is not set), then
-$<strong>GEOGRAPHICLIB_DATA</strong>/gravity is used.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>Gravity</strong> to return an exit
-code of 1.  However, an error does not cause <strong>Gravity</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<p>The gravity field from EGM2008 at the top of Mount Everest</p>
-<pre>
-    echo 27:59:17N 86:55:32E 8820 | Gravity -n egm2008
-    => -0.00001 0.00103 -9.76782</pre>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p><a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>, <a href="GeoidEval.1.html"><code>GeoidEval(1)</code></a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>Gravity</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>Gravity</strong> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>,
-in version 1.16.</p>
-
-</body>
-
-</html>
diff --git a/doc/html/GravityCircle_8cpp.html b/doc/html/GravityCircle_8cpp.html
deleted file mode 100644
index a65abf6..0000000
--- a/doc/html/GravityCircle_8cpp.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GravityCircle.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">GravityCircle.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="GravityCircle_8hpp_source.html">GeographicLib/GravityCircle.hpp</a>></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <<a class="el" href="Geocentric_8hpp_source.html">GeographicLib/Geocentric.hpp</a>></code><br/>
-</div>
-<p><a href="GravityCircle_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityCircle_8cpp.html#a57d7b0412922810faed5fb35173f561c">GEOGRAPHICLIB_GRAVITYCIRCLE_CPP</a>   "$Id: 94c2bce8fa9f379b5e3d0e176c89b4989762ef3a $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityCircle_8cpp.html#a21f239249a382b864294a231061d97d4">GRAVITY_DEFAULT_PATH</a>   "/home/ckarney/geographiclib/gravity"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="GravityCircle_8cpp_source.html">GravityCircle.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a57d7b0412922810faed5fb35173f561c"></a><!-- doxytag: member="GravityCircle.cpp::GEOGRAPHICLIB_GRAVITYCIRCLE_CPP" ref="a57d7b0412922810faed5fb35173f561c" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GRAVITYCIRCLE_CPP   "$Id: 94c2bce8fa9f379b5e3d0e176c89b4989762ef3a $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GravityCircle_8cpp_source.html#l00015">15</a> of file <a class="el" href="GravityCircle_8cpp_source.html">GravityCircle.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a21f239249a382b864294a231061d97d4"></a><!-- doxytag: member="GravityCircle.cpp::GRAVITY_DEFAULT_PATH" ref="a21f239249a382b864294a231061d97d4" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GRAVITY_DEFAULT_PATH   "/home/ckarney/geographiclib/gravity"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GravityCircle_8cpp_source.html#l00021">21</a> of file <a class="el" href="GravityCircle_8cpp_source.html">GravityCircle.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GravityCircle_8cpp_source.html b/doc/html/GravityCircle_8cpp_source.html
deleted file mode 100644
index b80904b..0000000
--- a/doc/html/GravityCircle_8cpp_source.html
+++ /dev/null
@@ -1,213 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GravityCircle.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GravityCircle.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GravityCircle_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GravityCircle.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::GravityCircle class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="GravityCircle_8hpp.html" title="Header for GeographicLib::GravityCircle class.">GeographicLib/GravityCircle.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <fstream></span>
-<a name="l00012"></a>00012 <span class="preprocessor">#include <sstream></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-<a name="l00014"></a>00014 
-<a name="l00015"></a><a class="code" href="GravityCircle_8cpp.html#a57d7b0412922810faed5fb35173f561c">00015</a> <span class="preprocessor">#define GEOGRAPHICLIB_GRAVITYCIRCLE_CPP \</span>
-<a name="l00016"></a>00016 <span class="preprocessor">  "$Id: 94c2bce8fa9f379b5e3d0e176c89b4989762ef3a $"</span>
-<a name="l00017"></a>00017 <span class="preprocessor"></span>
-<a name="l00018"></a>00018 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="GravityCircle_8cpp.html#a57d7b0412922810faed5fb35173f561c">GEOGRAPHICLIB_GRAVITYCIRCLE_CPP</a>)
-<a name="l00019"></a>00019 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="GravityCircle_8hpp.html#a07d4fadabf913f2115556a6de80f6115">GEOGRAPHICLIB_GRAVITYCIRCLE_HPP</a>)
-<a name="l00020"></a>00020 
-<a name="l00021"></a><a class="code" href="GravityCircle_8cpp.html#a21f239249a382b864294a231061d97d4">00021</a> <span class="preprocessor">#define GRAVITY_DEFAULT_PATH "/home/ckarney/geographiclib/gravity"</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span>
-<a name="l00023"></a>00023 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00024"></a>00024 
-<a name="l00025"></a>00025   <span class="keyword">using namespace </span>std;
-<a name="l00026"></a>00026 
-<a name="l00027"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a5d8053ee66ae22217ae0b61e96194b64">00027</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityCircle.html#a5d8053ee66ae22217ae0b61e96194b64">GravityCircle::Gravity</a>(real lon, real& gx, real& gy, real& gz)
-<a name="l00028"></a>00028     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00029"></a>00029     real clam, slam, M[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00030"></a>00030     CircularEngine::cossin(lon, clam, slam);
-<a name="l00031"></a>00031     real Wres = W(clam, slam, gx, gy, gz);
-<a name="l00032"></a>00032     Geocentric::Rotation(_sphi, _cphi, slam, clam, M);
-<a name="l00033"></a>00033     Geocentric::Unrotate(M, gx, gy, gz, gx, gy, gz);
-<a name="l00034"></a>00034     <span class="keywordflow">return</span> Wres;
-<a name="l00035"></a>00035   }
-<a name="l00036"></a>00036 
-<a name="l00037"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a2c3bde01c9d822b0cdd935314193a466">00037</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityCircle.html#a2c3bde01c9d822b0cdd935314193a466">GravityCircle::Disturbance</a>(real lon, real& deltax, real& deltay,
-<a name="l00038"></a>00038                                         real& deltaz) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00039"></a>00039     real clam, slam, M[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00040"></a>00040     CircularEngine::cossin(lon, clam, slam);
-<a name="l00041"></a>00041     real Tres = InternalT(clam, slam, deltax, deltay, deltaz, <span class="keyword">true</span>, <span class="keyword">true</span>);
-<a name="l00042"></a>00042     Geocentric::Rotation(_sphi, _cphi, slam, clam, M);
-<a name="l00043"></a>00043     Geocentric::Unrotate(M, deltax, deltay, deltaz, deltax, deltay, deltaz);
-<a name="l00044"></a>00044     <span class="keywordflow">return</span> Tres;
-<a name="l00045"></a>00045   }
-<a name="l00046"></a>00046 
-<a name="l00047"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a5d5a577c99cf4649d9286f1b4afacab5">00047</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityCircle.html#a5d5a577c99cf4649d9286f1b4afacab5">GravityCircle::GeoidHeight</a>(real lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00048"></a>00048     <span class="keywordflow">if</span> ((_caps & GEOID_HEIGHT) != GEOID_HEIGHT)
-<a name="l00049"></a>00049       <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00050"></a>00050     real clam, slam, dummy;
-<a name="l00051"></a>00051     CircularEngine::cossin(lon, clam, slam);
-<a name="l00052"></a>00052     real T = InternalT(clam, slam, dummy, dummy, dummy, <span class="keyword">false</span>, <span class="keyword">false</span>);
-<a name="l00053"></a>00053     real correction = _corrmult * _correction(clam, slam);
-<a name="l00054"></a>00054     <span class="keywordflow">return</span> T/_gamma0 + correction;
-<a name="l00055"></a>00055   }
-<a name="l00056"></a>00056 
-<a name="l00057"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#ac94672db5e450f4394e6df69eda99e69">00057</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1GravityCircle.html#ac94672db5e450f4394e6df69eda99e69">GravityCircle::SphericalAnomaly</a>(real lon,
-<a name="l00058"></a>00058                                        real& Dg01, real& xi, real& eta)
-<a name="l00059"></a>00059     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00060"></a>00060     <span class="keywordflow">if</span> ((_caps & SPHERICAL_ANOMALY) != SPHERICAL_ANOMALY) {
-<a name="l00061"></a>00061       Dg01 = xi = eta = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00062"></a>00062       <span class="keywordflow">return</span>;
-<a name="l00063"></a>00063     }
-<a name="l00064"></a>00064     real clam, slam;
-<a name="l00065"></a>00065     CircularEngine::cossin(lon, clam, slam);
-<a name="l00066"></a>00066     real
-<a name="l00067"></a>00067       deltax, deltay, deltaz,
-<a name="l00068"></a>00068       T = InternalT(clam, slam, deltax, deltay, deltaz, <span class="keyword">true</span>, <span class="keyword">false</span>);
-<a name="l00069"></a>00069     <span class="comment">// Rotate cartesian into spherical coordinates</span>
-<a name="l00070"></a>00070     real MC[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00071"></a>00071     Geocentric::Rotation(_spsi, _cpsi, slam, clam, MC);
-<a name="l00072"></a>00072     Geocentric::Unrotate(MC, deltax, deltay, deltaz, deltax, deltay, deltaz);
-<a name="l00073"></a>00073     <span class="comment">// H+M, Eq 2-151c</span>
-<a name="l00074"></a>00074     Dg01 = - deltaz - 2 * T * _invR;
-<a name="l00075"></a>00075     xi  = -(deltay/_gamma) / Math::degree<real>();
-<a name="l00076"></a>00076     eta = -(deltax/_gamma) / Math::degree<real>();
-<a name="l00077"></a>00077   }
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> GravityCircle::W(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> clam, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> slam,
-<a name="l00080"></a>00080                               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gX, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gY, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00081"></a>00081     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Wres = V(clam, slam, gX, gY, gZ) + _frot * _P / 2;
-<a name="l00082"></a>00082     gX += _frot * clam;
-<a name="l00083"></a>00083     gY += _frot * slam;
-<a name="l00084"></a>00084     <span class="keywordflow">return</span> Wres;
-<a name="l00085"></a>00085   }
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> GravityCircle::V(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> clam, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> slam,
-<a name="l00088"></a>00088                               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& GX, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& GY, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& GZ)
-<a name="l00089"></a>00089     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00090"></a>00090     <span class="keywordflow">if</span> ((_caps & GRAVITY) != GRAVITY) {
-<a name="l00091"></a>00091       GX = GY = GZ = Math::NaN<real>();
-<a name="l00092"></a>00092       <span class="keywordflow">return</span> Math::NaN<real>();
-<a name="l00093"></a>00093     }
-<a name="l00094"></a>00094     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00095"></a>00095       Vres = _gravitational(clam, slam, GX, GY, GZ),
-<a name="l00096"></a>00096       f = _GMmodel / _amodel;
-<a name="l00097"></a>00097     Vres *= f;
-<a name="l00098"></a>00098     GX *= f;
-<a name="l00099"></a>00099     GY *= f;
-<a name="l00100"></a>00100     GZ *= f;
-<a name="l00101"></a>00101     <span class="keywordflow">return</span> Vres;
-<a name="l00102"></a>00102   }
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> GravityCircle::InternalT(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> clam, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> slam,
-<a name="l00105"></a>00105                                       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltaX, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltaY, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltaZ,
-<a name="l00106"></a>00106                                       <span class="keywordtype">bool</span> gradp, <span class="keywordtype">bool</span> correct) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00107"></a>00107     <span class="keywordflow">if</span> (gradp) {
-<a name="l00108"></a>00108       <span class="keywordflow">if</span> ((_caps & DISTURBANCE) != DISTURBANCE) {
-<a name="l00109"></a>00109         deltaX = deltaY = deltaZ = Math::NaN<real>();
-<a name="l00110"></a>00110         <span class="keywordflow">return</span> Math::NaN<real>();
-<a name="l00111"></a>00111       }
-<a name="l00112"></a>00112     } <span class="keywordflow">else</span> {
-<a name="l00113"></a>00113       <span class="keywordflow">if</span> ((_caps & DISTURBING_POTENTIAL) != DISTURBING_POTENTIAL)
-<a name="l00114"></a>00114         <span class="keywordflow">return</span> Math::NaN<real>();
-<a name="l00115"></a>00115     }
-<a name="l00116"></a>00116     <span class="keywordflow">if</span> (_dzonal0 == 0)
-<a name="l00117"></a>00117       correct = <span class="keyword">false</span>;
-<a name="l00118"></a>00118     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> T = (gradp
-<a name="l00119"></a>00119               ? _disturbing(clam, slam, deltaX, deltaY, deltaZ)
-<a name="l00120"></a>00120               : _disturbing(clam, slam));
-<a name="l00121"></a>00121     T = (T / _amodel - (correct ? _dzonal0 : 0) * _invR) * _GMmodel;
-<a name="l00122"></a>00122     <span class="keywordflow">if</span> (gradp) {
-<a name="l00123"></a>00123       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f = _GMmodel / _amodel;
-<a name="l00124"></a>00124       deltaX *= f;
-<a name="l00125"></a>00125       deltaY *= f;
-<a name="l00126"></a>00126       deltaZ *= f;
-<a name="l00127"></a>00127       <span class="keywordflow">if</span> (correct) {
-<a name="l00128"></a>00128         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> r3 = _GMmodel * _dzonal0 * _invR * _invR * _invR;
-<a name="l00129"></a>00129         deltaX += _P * clam * r3;
-<a name="l00130"></a>00130         deltaY += _P * slam * r3;
-<a name="l00131"></a>00131         deltaZ += _Z * r3;
-<a name="l00132"></a>00132       }
-<a name="l00133"></a>00133     }
-<a name="l00134"></a>00134     <span class="keywordflow">return</span> T;
-<a name="l00135"></a>00135   }
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GravityCircle_8hpp.html b/doc/html/GravityCircle_8hpp.html
deleted file mode 100644
index a25f4b4..0000000
--- a/doc/html/GravityCircle_8hpp.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GravityCircle.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">GravityCircle.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <string></code><br/>
-<code>#include <vector></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="CircularEngine_8hpp_source.html">GeographicLib/CircularEngine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="GravityModel_8hpp_source.html">GeographicLib/GravityModel.hpp</a>></code><br/>
-</div>
-<p><a href="GravityCircle_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Gravity on a circle of latitude.  <a href="classGeographicLib_1_1GravityCircle.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityCircle_8hpp.html#a07d4fadabf913f2115556a6de80f6115">GEOGRAPHICLIB_GRAVITYCIRCLE_HPP</a>   "$Id: 6ae0869411185a48c9f55016e6d1fb14e69aaac1 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a07d4fadabf913f2115556a6de80f6115"></a><!-- doxytag: member="GravityCircle.hpp::GEOGRAPHICLIB_GRAVITYCIRCLE_HPP" ref="a07d4fadabf913f2115556a6de80f6115" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GRAVITYCIRCLE_HPP   "$Id: 6ae0869411185a48c9f55016e6d1fb14e69aaac1 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00011">11</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GravityCircle_8hpp_source.html b/doc/html/GravityCircle_8hpp_source.html
deleted file mode 100644
index 1683687..0000000
--- a/doc/html/GravityCircle_8hpp_source.html
+++ /dev/null
@@ -1,381 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GravityCircle.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GravityCircle.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GravityCircle_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GravityCircle.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::GravityCircle class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_GRAVITYCIRCLE_HPP)</span>
-<a name="l00011"></a><a class="code" href="GravityCircle_8hpp.html#a07d4fadabf913f2115556a6de80f6115">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_GRAVITYCIRCLE_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 6ae0869411185a48c9f55016e6d1fb14e69aaac1 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <string></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <vector></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#include <<a class="code" href="CircularEngine_8hpp.html" title="Header for GeographicLib::CircularEngine class.">GeographicLib/CircularEngine.hpp</a>></span>
-<a name="l00018"></a>00018 <span class="preprocessor">#include <<a class="code" href="GravityModel_8hpp.html" title="Header for GeographicLib::GravityModel class.">GeographicLib/GravityModel.hpp</a>></span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00021"></a>00021 <span class="comment"></span>
-<a name="l00022"></a>00022 <span class="comment">  /**</span>
-<a name="l00023"></a>00023 <span class="comment">   * \brief Gravity on a circle of latitude</span>
-<a name="l00024"></a>00024 <span class="comment">   *</span>
-<a name="l00025"></a>00025 <span class="comment">   * Evaluate the earth's gravity field on a circle of constant height and</span>
-<a name="l00026"></a>00026 <span class="comment">   * latitude.  This uses a CircleEngine to pre-evaluate the inner sum of the</span>
-<a name="l00027"></a>00027 <span class="comment">   * spherical harmonic sum, allowing the values of the field at several</span>
-<a name="l00028"></a>00028 <span class="comment">   * different longitudes to be evaluated rapidly.</span>
-<a name="l00029"></a>00029 <span class="comment">   *</span>
-<a name="l00030"></a>00030 <span class="comment">   * Use GravityModel::Circle to create a GravityCircle object.  (The</span>
-<a name="l00031"></a>00031 <span class="comment">   * constructor for this class is private.)</span>
-<a name="l00032"></a>00032 <span class="comment">   *</span>
-<a name="l00033"></a>00033 <span class="comment">   * See \ref gravityparallel for an example of using GravityCircle (together</span>
-<a name="l00034"></a>00034 <span class="comment">   * with OpenMP) to speed up the computation of geoid heights.</span>
-<a name="l00035"></a>00035 <span class="comment">   *</span>
-<a name="l00036"></a>00036 <span class="comment">   * Example of use:</span>
-<a name="l00037"></a>00037 <span class="comment">   * \include example-GravityCircle.cpp</span>
-<a name="l00038"></a>00038 <span class="comment">   *</span>
-<a name="l00039"></a>00039 <span class="comment">   * <a href="Gravity.1.html">Gravity</a> is a command-line utility providing</span>
-<a name="l00040"></a>00040 <span class="comment">   * access to the functionality of GravityModel and GravityCircle.</span>
-<a name="l00041"></a>00041 <span class="comment">   **********************************************************************/</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> GravityCircle {
-<a name="l00044"></a>00044   <span class="keyword">private</span>:
-<a name="l00045"></a>00045     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00046"></a>00046     <span class="keyword">enum</span> mask {
-<a name="l00047"></a>00047       NONE                 = GravityModel::NONE,
-<a name="l00048"></a>00048       GRAVITY              = GravityModel::GRAVITY,
-<a name="l00049"></a>00049       DISTURBANCE          = GravityModel::DISTURBANCE,
-<a name="l00050"></a>00050       DISTURBING_POTENTIAL = GravityModel::DISTURBING_POTENTIAL,
-<a name="l00051"></a>00051       GEOID_HEIGHT         = GravityModel::GEOID_HEIGHT,
-<a name="l00052"></a>00052       SPHERICAL_ANOMALY    = GravityModel::SPHERICAL_ANOMALY,
-<a name="l00053"></a>00053       ALL                  = GravityModel::ALL,
-<a name="l00054"></a>00054     };
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056     <span class="keywordtype">unsigned</span> _caps;
-<a name="l00057"></a>00057     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _f, _lat, _h, _Z, _P, _invR, _cpsi, _spsi,
-<a name="l00058"></a>00058       _cphi, _sphi, _amodel, _GMmodel, _dzonal0,
-<a name="l00059"></a>00059       _corrmult, _gamma0, _gamma, _frot;
-<a name="l00060"></a>00060     CircularEngine _gravitational, _disturbing, _correction;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062     GravityCircle(mask caps, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h,
-<a name="l00063"></a>00063                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Z, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> P, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi,
-<a name="l00064"></a>00064                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> amodel, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> GMmodel, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dzonal0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> corrmult,
-<a name="l00065"></a>00065                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> gamma0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> frot,
-<a name="l00066"></a>00066                   <span class="keyword">const</span> CircularEngine& gravitational,
-<a name="l00067"></a>00067                   <span class="keyword">const</span> CircularEngine& disturbing,
-<a name="l00068"></a>00068                   <span class="keyword">const</span> CircularEngine& correction)
-<a name="l00069"></a>00069       : _caps(caps)
-<a name="l00070"></a>00070       , _a(a)
-<a name="l00071"></a>00071       , _f(f)
-<a name="l00072"></a>00072       , _lat(lat)
-<a name="l00073"></a>00073       , _h(h)
-<a name="l00074"></a>00074       , _Z(Z)
-<a name="l00075"></a>00075       , _P(P)
-<a name="l00076"></a>00076       , _invR(<a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(_P, _Z))
-<a name="l00077"></a>00077       , _cpsi(_P * _invR)
-<a name="l00078"></a>00078       , _spsi(_Z * _invR)
-<a name="l00079"></a>00079       , _cphi(cphi)
-<a name="l00080"></a>00080       , _sphi(sphi)
-<a name="l00081"></a>00081       , _amodel(amodel)
-<a name="l00082"></a>00082       , _GMmodel(GMmodel)
-<a name="l00083"></a>00083       , _dzonal0(dzonal0)
-<a name="l00084"></a>00084       , _corrmult(corrmult)
-<a name="l00085"></a>00085       , _gamma0(gamma0)
-<a name="l00086"></a>00086       , _gamma(gamma)
-<a name="l00087"></a>00087       , _frot(frot)
-<a name="l00088"></a>00088       , _gravitational(gravitational)
-<a name="l00089"></a>00089       , _disturbing(disturbing)
-<a name="l00090"></a>00090       , _correction(correction)
-<a name="l00091"></a>00091     {}
-<a name="l00092"></a>00092 
-<a name="l00093"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#ada1db1d9f480d8044753ed869c995519">00093</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a>; <span class="comment">// GravityModel calls the private constructor</span>
-<a name="l00094"></a>00094     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real W(real clam, real slam,
-<a name="l00095"></a>00095                  real& gX, real& gY, real& gZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00096"></a>00096     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real V(real clam, real slam,
-<a name="l00097"></a>00097                  real& gX, real& gY, real& gZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00098"></a>00098     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real InternalT(real clam, real slam,
-<a name="l00099"></a>00099                          real& deltaX, real& deltaY, real& deltaZ,
-<a name="l00100"></a>00100                          <span class="keywordtype">bool</span> gradp, <span class="keywordtype">bool</span> correct) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00101"></a>00101   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00102"></a>00102 <span class="comment">    /**</span>
-<a name="l00103"></a>00103 <span class="comment">     * A default constructor for the normal gravity.  This sets up an</span>
-<a name="l00104"></a>00104 <span class="comment">     * uninitialized object which can be later replaced by the</span>
-<a name="l00105"></a>00105 <span class="comment">     * GravityModel::Circle.</span>
-<a name="l00106"></a>00106 <span class="comment">     **********************************************************************/</span>
-<a name="l00107"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a4a000e07f0856a130ab11f1b26c933ed">00107</a>     <a class="code" href="classGeographicLib_1_1GravityCircle.html#a4a000e07f0856a130ab11f1b26c933ed">GravityCircle</a>() : _a(-1) {}
-<a name="l00108"></a>00108 <span class="comment"></span>
-<a name="l00109"></a>00109 <span class="comment">    /** \name Compute the gravitational field</span>
-<a name="l00110"></a>00110 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00111"></a>00111 <span class="comment">    ///@{</span>
-<a name="l00112"></a>00112 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00113"></a>00113 <span class="comment">     * Evaluate the gravity.</span>
-<a name="l00114"></a>00114 <span class="comment">     *</span>
-<a name="l00115"></a>00115 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00116"></a>00116 <span class="comment">     * @param[out] gx the easterly component of the acceleration</span>
-<a name="l00117"></a>00117 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00118"></a>00118 <span class="comment">     * @param[out] gy the northerly component of the acceleration</span>
-<a name="l00119"></a>00119 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00120"></a>00120 <span class="comment">     * @param[out] gz the upward component of the acceleration</span>
-<a name="l00121"></a>00121 <span class="comment">     *   (m s<sup>-2</sup>); this is usually negative.</span>
-<a name="l00122"></a>00122 <span class="comment">     * @return \e W the sum of the gravitational and centrifugal potentials.</span>
-<a name="l00123"></a>00123 <span class="comment">     *</span>
-<a name="l00124"></a>00124 <span class="comment">     * The function includes the effects of the earth's rotation.</span>
-<a name="l00125"></a>00125 <span class="comment">     **********************************************************************/</span>
-<a name="l00126"></a>00126     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Gravity(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">rea [...]
-<a name="l00127"></a>00127 <span class="comment"></span>
-<a name="l00128"></a>00128 <span class="comment">    /**</span>
-<a name="l00129"></a>00129 <span class="comment">     * Evaluate the gravity disturbance vector.</span>
-<a name="l00130"></a>00130 <span class="comment">     *</span>
-<a name="l00131"></a>00131 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00132"></a>00132 <span class="comment">     * @param[out] deltax the easterly component of the disturbance vector</span>
-<a name="l00133"></a>00133 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00134"></a>00134 <span class="comment">     * @param[out] deltay the northerly component of the disturbance vector</span>
-<a name="l00135"></a>00135 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00136"></a>00136 <span class="comment">     * @param[out] deltaz the upward component of the disturbance vector</span>
-<a name="l00137"></a>00137 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00138"></a>00138 <span class="comment">     * @return \e T the corresponding disturbing potential.</span>
-<a name="l00139"></a>00139 <span class="comment">     **********************************************************************/</span>
-<a name="l00140"></a>00140     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Disturbance(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltax, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b [...]
-<a name="l00141"></a>00141       <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00142"></a>00142 <span class="comment"></span>
-<a name="l00143"></a>00143 <span class="comment">    /**</span>
-<a name="l00144"></a>00144 <span class="comment">     * Evaluate the geoid height.</span>
-<a name="l00145"></a>00145 <span class="comment">     *</span>
-<a name="l00146"></a>00146 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00147"></a>00147 <span class="comment">     * @return \e N the height of the geoid above the reference ellipsoid</span>
-<a name="l00148"></a>00148 <span class="comment">     *   (meters).</span>
-<a name="l00149"></a>00149 <span class="comment">     *</span>
-<a name="l00150"></a>00150 <span class="comment">     * Some approximations are made in computing the geoid height so that the</span>
-<a name="l00151"></a>00151 <span class="comment">     * results of the NGA codes are reproduced accurately.  Details are given</span>
-<a name="l00152"></a>00152 <span class="comment">     * in \ref gravitygeoid.</span>
-<a name="l00153"></a>00153 <span class="comment">     **********************************************************************/</span>
-<a name="l00154"></a>00154     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> GeoidHeight(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00155"></a>00155 <span class="comment"></span>
-<a name="l00156"></a>00156 <span class="comment">    /**</span>
-<a name="l00157"></a>00157 <span class="comment">     * Evaluate the components of the gravity anomaly vector using the</span>
-<a name="l00158"></a>00158 <span class="comment">     * spherical approximation.</span>
-<a name="l00159"></a>00159 <span class="comment">     *</span>
-<a name="l00160"></a>00160 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00161"></a>00161 <span class="comment">     * @param[out] Dg01 the gravity anomaly (m s<sup>-2</sup>).</span>
-<a name="l00162"></a>00162 <span class="comment">     * @param[out] xi the northerly component of the deflection of the vertical</span>
-<a name="l00163"></a>00163 <span class="comment">     *  (degrees).</span>
-<a name="l00164"></a>00164 <span class="comment">     * @param[out] eta the easterly component of the deflection of the vertical</span>
-<a name="l00165"></a>00165 <span class="comment">     *  (degrees).</span>
-<a name="l00166"></a>00166 <span class="comment">     *</span>
-<a name="l00167"></a>00167 <span class="comment">     * The spherical approximation (see Heiskanen and Moritz, Sec 2-14) is used</span>
-<a name="l00168"></a>00168 <span class="comment">     * so that the results of the NGA codes are reproduced accurately.</span>
-<a name="l00169"></a>00169 <span class="comment">     * approximations used here.  Details are given in \ref gravitygeoid.</span>
-<a name="l00170"></a>00170 <span class="comment">     **********************************************************************/</span>
-<a name="l00171"></a>00171     <span class="keywordtype">void</span> SphericalAnomaly(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Dg01, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& xi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& eta)
-<a name="l00172"></a>00172       <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00173"></a>00173 <span class="comment"></span>
-<a name="l00174"></a>00174 <span class="comment">    /**</span>
-<a name="l00175"></a>00175 <span class="comment">     * Evaluate the components of the acceleration due to gravity and the</span>
-<a name="l00176"></a>00176 <span class="comment">     * centrifugal acceleration in geocentric coordinates.</span>
-<a name="l00177"></a>00177 <span class="comment">     *</span>
-<a name="l00178"></a>00178 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00179"></a>00179 <span class="comment">     * @param[out] gX the \e X component of the acceleration</span>
-<a name="l00180"></a>00180 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00181"></a>00181 <span class="comment">     * @param[out] gY the \e Y component of the acceleration</span>
-<a name="l00182"></a>00182 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00183"></a>00183 <span class="comment">     * @param[out] gZ the \e Z component of the acceleration</span>
-<a name="l00184"></a>00184 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00185"></a>00185 <span class="comment">     * @return \e W = \e V + \e Phi the sum of the gravitational and</span>
-<a name="l00186"></a>00186 <span class="comment">     *   centrifugal potentials (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00187"></a>00187 <span class="comment">     **********************************************************************/</span>
-<a name="l00188"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a04ae0659ec2eb766ae360d3bcbe332c4">00188</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityCircle.html#a04ae0659ec2eb766ae360d3bcbe332c4">W</a>(real lon, real& gX, real& gY, real& gZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00189"></a>00189       real clam, slam;
-<a name="l00190"></a>00190       CircularEngine::cossin(lon, clam, slam);
-<a name="l00191"></a>00191       <span class="keywordflow">return</span> W(clam, slam, gX, gY, gZ);
-<a name="l00192"></a>00192     }
-<a name="l00193"></a>00193 <span class="comment"></span>
-<a name="l00194"></a>00194 <span class="comment">    /**</span>
-<a name="l00195"></a>00195 <span class="comment">     * Evaluate the components of the acceleration due to gravity in geocentric</span>
-<a name="l00196"></a>00196 <span class="comment">     * coordinates.</span>
-<a name="l00197"></a>00197 <span class="comment">     *</span>
-<a name="l00198"></a>00198 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00199"></a>00199 <span class="comment">     * @param[out] GX the \e X component of the acceleration</span>
-<a name="l00200"></a>00200 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00201"></a>00201 <span class="comment">     * @param[out] GY the \e Y component of the acceleration</span>
-<a name="l00202"></a>00202 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00203"></a>00203 <span class="comment">     * @param[out] GZ the \e Z component of the acceleration</span>
-<a name="l00204"></a>00204 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00205"></a>00205 <span class="comment">     * @return \e V = \e W - \e Phi the gravitational potential</span>
-<a name="l00206"></a>00206 <span class="comment">     *   (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00207"></a>00207 <span class="comment">     **********************************************************************/</span>
-<a name="l00208"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#aba5f3ec3cb7b620e13dafa6fa4e48ae0">00208</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityCircle.html#aba5f3ec3cb7b620e13dafa6fa4e48ae0">V</a>(real lon, real& GX, real& GY, real& GZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00209"></a>00209       real clam, slam;
-<a name="l00210"></a>00210       CircularEngine::cossin(lon, clam, slam);
-<a name="l00211"></a>00211       <span class="keywordflow">return</span> V(clam, slam, GX, GY, GZ);
-<a name="l00212"></a>00212     }
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 <span class="comment"></span>
-<a name="l00215"></a>00215 <span class="comment">    /**</span>
-<a name="l00216"></a>00216 <span class="comment">     * Evaluate the components of the gravity disturbance in geocentric</span>
-<a name="l00217"></a>00217 <span class="comment">     * coordinates.</span>
-<a name="l00218"></a>00218 <span class="comment">     *</span>
-<a name="l00219"></a>00219 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00220"></a>00220 <span class="comment">     * @param[out] deltaX the \e X component of the gravity disturbance</span>
-<a name="l00221"></a>00221 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00222"></a>00222 <span class="comment">     * @param[out] deltaY the \e Y component of the gravity disturbance</span>
-<a name="l00223"></a>00223 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00224"></a>00224 <span class="comment">     * @param[out] deltaZ the \e Z component of the gravity disturbance</span>
-<a name="l00225"></a>00225 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00226"></a>00226 <span class="comment">     * @return \e T = \e W - \e U the disturbing potential (also called the</span>
-<a name="l00227"></a>00227 <span class="comment">     *   anomalous potential) (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00228"></a>00228 <span class="comment">     **********************************************************************/</span>
-<a name="l00229"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#afae12e4bbf17809f1dd6c32b41dfde03">00229</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real T(real lon, real& deltaX, real& deltaY, real& deltaZ)
-<a name="l00230"></a>00230       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00231"></a>00231       real clam, slam;
-<a name="l00232"></a>00232       CircularEngine::cossin(lon, clam, slam);
-<a name="l00233"></a>00233       <span class="keywordflow">return</span> InternalT(clam, slam, deltaX, deltaY, deltaZ, <span class="keyword">true</span>, <span class="keyword">true</span>);
-<a name="l00234"></a>00234     }
-<a name="l00235"></a>00235 <span class="comment"></span>
-<a name="l00236"></a>00236 <span class="comment">    /**</span>
-<a name="l00237"></a>00237 <span class="comment">     * Evaluate disturbing potential in geocentric coordinates.</span>
-<a name="l00238"></a>00238 <span class="comment">     *</span>
-<a name="l00239"></a>00239 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00240"></a>00240 <span class="comment">     * @return \e T = \e W - \e U the disturbing potential (also called the</span>
-<a name="l00241"></a>00241 <span class="comment">     *   anomalous potential) (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00242"></a>00242 <span class="comment">     **********************************************************************/</span>
-<a name="l00243"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a408d52806d43fe61b53af3ffb306bec5">00243</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityCircle.html#a408d52806d43fe61b53af3ffb306bec5">T</a>(real lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00244"></a>00244       real clam, slam, dummy;
-<a name="l00245"></a>00245       CircularEngine::cossin(lon, clam, slam);
-<a name="l00246"></a>00246       <span class="keywordflow">return</span> InternalT(clam, slam, dummy, dummy, dummy, <span class="keyword">false</span>, <span class="keyword">true</span>);
-<a name="l00247"></a>00247     }
-<a name="l00248"></a>00248 <span class="comment"></span>
-<a name="l00249"></a>00249 <span class="comment">    ///@}</span>
-<a name="l00250"></a>00250 <span class="comment"></span><span class="comment"></span>
-<a name="l00251"></a>00251 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00252"></a>00252 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00253"></a>00253 <span class="comment">    ///@{</span>
-<a name="l00254"></a>00254 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00255"></a>00255 <span class="comment">     * @return true if the object has been initialized.</span>
-<a name="l00256"></a>00256 <span class="comment">     **********************************************************************/</span>
-<a name="l00257"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#aee7b6c92dc9264345048a8ad7c230e4c">00257</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1GravityCircle.html#aee7b6c92dc9264345048a8ad7c230e4c">Init</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a > 0; }
-<a name="l00258"></a>00258 <span class="comment"></span>
-<a name="l00259"></a>00259 <span class="comment">    /**</span>
-<a name="l00260"></a>00260 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00261"></a>00261 <span class="comment">     *   the value inherited from the GravityModel object used in the</span>
-<a name="l00262"></a>00262 <span class="comment">     *   constructor.</span>
-<a name="l00263"></a>00263 <span class="comment">     **********************************************************************/</span>
-<a name="l00264"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a19c5d003a9981cb3ece5b44ee836553a">00264</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MajorRadius() <span class="keyword">const</span> throw()
-<a name="l00265"></a>00265     { <span class="keywordflow">return</span> Init() ? _a : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00266"></a>00266 <span class="comment"></span>
-<a name="l00267"></a>00267 <span class="comment">    /**</span>
-<a name="l00268"></a>00268 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value</span>
-<a name="l00269"></a>00269 <span class="comment">     *   inherited from the GravityModel object used in the constructor.</span>
-<a name="l00270"></a>00270 <span class="comment">     **********************************************************************/</span>
-<a name="l00271"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#ad9bfc60d802b662ffc1a41566882b743">00271</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Flattening() <span class="keyword">const</span> throw()
-<a name="l00272"></a>00272     { <span class="keywordflow">return</span> Init() ? _f : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00273"></a>00273 <span class="comment"></span>
-<a name="l00274"></a>00274 <span class="comment">    /**</span>
-<a name="l00275"></a>00275 <span class="comment">     * @return the latitude of the circle (degrees).</span>
-<a name="l00276"></a>00276 <span class="comment">     **********************************************************************/</span>
-<a name="l00277"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a9628e97c53a2532959c5c8af75e1c14b">00277</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Latitude() <span class="keyword">const</span> throw()
-<a name="l00278"></a>00278     { <span class="keywordflow">return</span> Init() ? _lat : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00279"></a>00279 <span class="comment"></span>
-<a name="l00280"></a>00280 <span class="comment">    /**</span>
-<a name="l00281"></a>00281 <span class="comment">     * @return the height of the circle (meters).</span>
-<a name="l00282"></a>00282 <span class="comment">     **********************************************************************/</span>
-<a name="l00283"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a026b2b79ff3ae70b4fee5d9c4d1ffb70">00283</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Height() <span class="keyword">const</span> throw()
-<a name="l00284"></a>00284     { <span class="keywordflow">return</span> Init() ? _h : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00285"></a>00285 <span class="comment"></span>
-<a name="l00286"></a>00286 <span class="comment">    /**</span>
-<a name="l00287"></a>00287 <span class="comment">     * @return \e caps the computational capabilities that this object was</span>
-<a name="l00288"></a>00288 <span class="comment">     *   constructed with.</span>
-<a name="l00289"></a>00289 <span class="comment">     **********************************************************************/</span>
-<a name="l00290"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a08ecc2b31ca7d0ddc2d25950a6bc247f">00290</a>     <span class="keywordtype">unsigned</span> <a class="code" href="classGeographicLib_1_1GravityCircle.html#a08ecc2b31ca7d0ddc2d25950a6bc247f">Capabilities</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _caps; }
-<a name="l00291"></a>00291 <span class="comment"></span>
-<a name="l00292"></a>00292 <span class="comment">    /**</span>
-<a name="l00293"></a>00293 <span class="comment">     * @param[in] testcaps a set of bitor'ed GeodesicLine::mask values.</span>
-<a name="l00294"></a>00294 <span class="comment">     * @return true if the GeodesicLine object has all these capabilities.</span>
-<a name="l00295"></a>00295 <span class="comment">     **********************************************************************/</span>
-<a name="l00296"></a><a class="code" href="classGeographicLib_1_1GravityCircle.html#a2fa608c25be9b8caa087102c4c311768">00296</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1GravityCircle.html#a2fa608c25be9b8caa087102c4c311768">Capabilities</a>(<span class="keywordtype">unsigned</span> testcaps) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00297"></a>00297       <span class="keywordflow">return</span> (_caps & testcaps) == testcaps;
-<a name="l00298"></a>00298     }<span class="comment"></span>
-<a name="l00299"></a>00299 <span class="comment">    ///@}</span>
-<a name="l00300"></a>00300 <span class="comment"></span>  };
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304 <span class="preprocessor">#endif  // GEOGRAPHICLIB_GRAVITYCIRCLE_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GravityModel_8cpp.html b/doc/html/GravityModel_8cpp.html
deleted file mode 100644
index 5a327b6..0000000
--- a/doc/html/GravityModel_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GravityModel.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">GravityModel.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="GravityModel_8hpp_source.html">GeographicLib/GravityModel.hpp</a>></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="SphericalEngine_8hpp_source.html">GeographicLib/SphericalEngine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="GravityCircle_8hpp_source.html">GeographicLib/GravityCircle.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="GravityModel_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityModel_8cpp.html#a65e1bf85112eafa00622f95531afc180">GEOGRAPHICLIB_GRAVITYMODEL_CPP</a>   "$Id: 1897d0d53c7339ecdf20b1348637340e9f687f30 $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityModel_8cpp.html#a45687ef771d809c1c369daea074cc109">GEOGRAPHICLIB_DATA</a>   "/usr/local/share/GeographicLib"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityModel_8cpp.html#a05d4f5b688275acf184933e85a0063bd">GRAVITY_DEFAULT_NAME</a>   "egm96"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> class. </p>
-<p>Copyright (c) Charles Karney (2011, 2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a65e1bf85112eafa00622f95531afc180"></a><!-- doxytag: member="GravityModel.cpp::GEOGRAPHICLIB_GRAVITYMODEL_CPP" ref="a65e1bf85112eafa00622f95531afc180" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GRAVITYMODEL_CPP   "$Id: 1897d0d53c7339ecdf20b1348637340e9f687f30 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00015">15</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a45687ef771d809c1c369daea074cc109"></a><!-- doxytag: member="GravityModel.cpp::GEOGRAPHICLIB_DATA" ref="a45687ef771d809c1c369daea074cc109" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_DATA   "/usr/local/share/GeographicLib"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00026">26</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00343">GeographicLib::GravityModel::DefaultGravityPath()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a05d4f5b688275acf184933e85a0063bd"></a><!-- doxytag: member="GravityModel.cpp::GRAVITY_DEFAULT_NAME" ref="a05d4f5b688275acf184933e85a0063bd" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GRAVITY_DEFAULT_NAME   "egm96"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00031">31</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00356">GeographicLib::GravityModel::DefaultGravityName()</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GravityModel_8cpp_source.html b/doc/html/GravityModel_8cpp_source.html
deleted file mode 100644
index 4f60780..0000000
--- a/doc/html/GravityModel_8cpp_source.html
+++ /dev/null
@@ -1,440 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GravityModel.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GravityModel.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GravityModel_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GravityModel.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::GravityModel class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="GravityModel_8hpp.html" title="Header for GeographicLib::GravityModel class.">GeographicLib/GravityModel.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <fstream></span>
-<a name="l00012"></a>00012 <span class="preprocessor">#include <<a class="code" href="SphericalEngine_8hpp.html" title="Header for GeographicLib::SphericalEngine class.">GeographicLib/SphericalEngine.hpp</a>></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <<a class="code" href="GravityCircle_8hpp.html" title="Header for GeographicLib::GravityCircle class.">GeographicLib/GravityCircle.hpp</a>></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00015"></a><a class="code" href="GravityModel_8cpp.html#a65e1bf85112eafa00622f95531afc180">00015</a> <span class="preprocessor">#define GEOGRAPHICLIB_GRAVITYMODEL_CPP \</span>
-<a name="l00016"></a>00016 <span class="preprocessor">  "$Id: 1897d0d53c7339ecdf20b1348637340e9f687f30 $"</span>
-<a name="l00017"></a>00017 <span class="preprocessor"></span>
-<a name="l00018"></a>00018 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="GravityModel_8cpp.html#a65e1bf85112eafa00622f95531afc180">GEOGRAPHICLIB_GRAVITYMODEL_CPP</a>)
-<a name="l00019"></a>00019 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="GravityModel_8hpp.html#ace85f3a4d35d4657064e289e2bf57dab">GEOGRAPHICLIB_GRAVITYMODEL_HPP</a>)
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_DATA)</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#  if defined(_MSC_VER)</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHICLIB_DATA \</span>
-<a name="l00024"></a>00024 <span class="preprocessor">  "C:/Documents and Settings/All Users/Application Data/GeographicLib"</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#  else</span>
-<a name="l00026"></a><a class="code" href="GravityModel_8cpp.html#a45687ef771d809c1c369daea074cc109">00026</a> <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHICLIB_DATA "/usr/local/share/GeographicLib"</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  endif</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#if !defined(GRAVITY_DEFAULT_NAME)</span>
-<a name="l00031"></a><a class="code" href="GravityModel_8cpp.html#a05d4f5b688275acf184933e85a0063bd">00031</a> <span class="preprocessor"></span><span class="preprocessor">#  define GRAVITY_DEFAULT_NAME "egm96"</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="comment">// Squelch warnings about unsafe use of getenv</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#pragma warning (disable: 4996)</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041   <span class="keyword">using namespace </span>std;
-<a name="l00042"></a>00042 
-<a name="l00043"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#ac351170c1104f41754d5c0b8371d3e15">00043</a>   <a class="code" href="classGeographicLib_1_1GravityModel.html#ac351170c1104f41754d5c0b8371d3e15">GravityModel::GravityModel</a>(<span class="keyword">const</span> std::string& name,<span class="keyword">const</span> std::string& path)
-<a name="l00044"></a>00044     : _name(name)
-<a name="l00045"></a>00045     , _dir(path)
-<a name="l00046"></a>00046     , _description(<span class="stringliteral">"NONE"</span>)
-<a name="l00047"></a>00047     , _date(<span class="stringliteral">"UNKNOWN"</span>)
-<a name="l00048"></a>00048     , _amodel(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>())
-<a name="l00049"></a>00049     , _GMmodel(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>())
-<a name="l00050"></a>00050     , _zeta0(0)
-<a name="l00051"></a>00051     , _corrmult(1)
-<a name="l00052"></a>00052     , _norm(<a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>::FULL)
-<a name="l00053"></a>00053   {
-<a name="l00054"></a>00054     <span class="keywordflow">if</span> (_dir.empty())
-<a name="l00055"></a>00055       _dir = <a class="code" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">DefaultGravityPath</a>();
-<a name="l00056"></a>00056     ReadMetadata(_name);
-<a name="l00057"></a>00057     {
-<a name="l00058"></a>00058       <span class="keywordtype">string</span> coeff = _filename + <span class="stringliteral">".cof"</span>;
-<a name="l00059"></a>00059       ifstream coeffstr(coeff.c_str(), ios::binary);
-<a name="l00060"></a>00060       <span class="keywordflow">if</span> (!coeffstr.good())
-<a name="l00061"></a>00061         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Error opening "</span> + coeff);
-<a name="l00062"></a>00062       <span class="keywordtype">char</span> <span class="keywordtype">id</span>[idlength_ + 1];
-<a name="l00063"></a>00063       coeffstr.read(<span class="keywordtype">id</span>, idlength_);
-<a name="l00064"></a>00064       <span class="keywordflow">if</span> (!coeffstr.good())
-<a name="l00065"></a>00065         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"No header in "</span> + coeff);
-<a name="l00066"></a>00066       <span class="keywordtype">id</span>[idlength_] = <span class="charliteral">'\0'</span>;
-<a name="l00067"></a>00067       <span class="keywordflow">if</span> (_id != <span class="keywordtype">string</span>(<span class="keywordtype">id</span>))
-<a name="l00068"></a>00068         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"ID mismatch: "</span> + _id + <span class="stringliteral">" vs "</span> + <span class="keywordtype">id</span>);
-<a name="l00069"></a>00069       <span class="keywordtype">int</span> N, M;
-<a name="l00070"></a>00070       <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2d545f589894683e7de297c42b7c995a">SphericalEngine::coeff::readcoeffs</a>(coeffstr, N, M, _C, _S);
-<a name="l00071"></a>00071       <span class="keywordflow">if</span> (!(M < 0 || _C[0] == 0))
-<a name="l00072"></a>00072         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"A degree 0 term should be zero"</span>);
-<a name="l00073"></a>00073       _C[0] = 1;                <span class="comment">// Include the 1/r term in the sum</span>
-<a name="l00074"></a>00074       _gravitational = <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>(_C, _S, N, N, M, _amodel, _norm);
-<a name="l00075"></a>00075       <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2d545f589894683e7de297c42b7c995a">SphericalEngine::coeff::readcoeffs</a>(coeffstr, N, M, _CC, _CS);
-<a name="l00076"></a>00076       <span class="keywordflow">if</span> (N < 0) {
-<a name="l00077"></a>00077         N = M = 0;
-<a name="l00078"></a>00078         _CC.resize(1, real(0));
-<a name="l00079"></a>00079       }
-<a name="l00080"></a>00080       _CC[0] += _zeta0 / _corrmult;
-<a name="l00081"></a>00081       _correction = <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>(_CC, _CS, N, N, M, real(1), _norm);
-<a name="l00082"></a>00082       <span class="keywordtype">int</span> pos = int(coeffstr.tellg());
-<a name="l00083"></a>00083       coeffstr.seekg(0, ios::end);
-<a name="l00084"></a>00084       <span class="keywordflow">if</span> (pos != coeffstr.tellg())
-<a name="l00085"></a>00085         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extra data in "</span> + coeff);
-<a name="l00086"></a>00086     }
-<a name="l00087"></a>00087     <span class="keywordtype">int</span> nmx = _gravitational.<a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#ac8886de1d1400ecf6482f6441c76a8a0">Coefficients</a>().<a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a96467118f9c16c16259d4fbbed3917ff">nmx</a>();
-<a name="l00088"></a>00088     <span class="comment">// Adjust the normalization of the normal potential to match the model.</span>
-<a name="l00089"></a>00089     real mult = _earth._GM / _GMmodel;
-<a name="l00090"></a>00090     real amult = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_earth._a / _amodel);
-<a name="l00091"></a>00091     <span class="comment">// The 0th term in _zonal should be is 1 + _dzonal0.  Instead set it to 1</span>
-<a name="l00092"></a>00092     <span class="comment">// to give exact cancellation with the (0,0) term in the model and account</span>
-<a name="l00093"></a>00093     <span class="comment">// for _dzonal0 separately.</span>
-<a name="l00094"></a>00094     _zonal.clear(); _zonal.push_back(1);
-<a name="l00095"></a>00095     _dzonal0 = (_earth.<a class="code" href="classGeographicLib_1_1NormalGravity.html#a3c6693dc7efe04cdbed408b2510c69da">MassConstant</a>() - _GMmodel) / _GMmodel;
-<a name="l00096"></a>00096     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 2; n <= nmx; n += 2) {
-<a name="l00097"></a>00097       <span class="comment">// Only include as many normal zonal terms as matter.  Figuring the limit</span>
-<a name="l00098"></a>00098       <span class="comment">// in this way works because the coefficients of the normal potential</span>
-<a name="l00099"></a>00099       <span class="comment">// (which is smooth) decay much more rapidly that the corresponding</span>
-<a name="l00100"></a>00100       <span class="comment">// coefficient of the model potential (which is bumpy).  Typically this</span>
-<a name="l00101"></a>00101       <span class="comment">// goes out to n = 18.</span>
-<a name="l00102"></a>00102       mult *= amult;
-<a name="l00103"></a>00103       real
-<a name="l00104"></a>00104         r = _C[n],                                         <span class="comment">// the model term</span>
-<a name="l00105"></a>00105         s = - mult * _earth.Jn(n) / sqrt(real(2 * n + 1)), <span class="comment">// the normal term</span>
-<a name="l00106"></a>00106         t = r - s;                                         <span class="comment">// the difference</span>
-<a name="l00107"></a>00107       <span class="keywordflow">if</span> (t == r)               <span class="comment">// the normal term is negligible</span>
-<a name="l00108"></a>00108         <span class="keywordflow">break</span>;
-<a name="l00109"></a>00109       _zonal.push_back(0);      <span class="comment">// index = n - 1; the odd terms are 0</span>
-<a name="l00110"></a>00110       _zonal.push_back(s);
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112     <span class="keywordtype">int</span> nmx1 = int(_zonal.size()) - 1;
-<a name="l00113"></a>00113     _disturbing = <a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html" title="Spherical Harmonic series with a correction to the coefficients.">SphericalHarmonic1</a>(_C, _S,
-<a name="l00114"></a>00114                                      _gravitational.<a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#ac8886de1d1400ecf6482f6441c76a8a0">Coefficients</a>().<a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a38ab91101bb639963e094327a22fed59">N</a>(),
-<a name="l00115"></a>00115                                      nmx, _gravitational.<a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#ac8886de1d1400ecf6482f6441c76a8a0">Coefficients</a>().<a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2a1ff83503433c64bd4399689a3e40f6">mmx</a>(),
-<a name="l00116"></a>00116                                      _zonal,
-<a name="l00117"></a>00117                                      _zonal, <span class="comment">// This is not accessed!</span>
-<a name="l00118"></a>00118                                      nmx1, nmx1, 0,
-<a name="l00119"></a>00119                                      _amodel,
-<a name="l00120"></a>00120                                      <a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916">SphericalHarmonic1::normalization</a>(_norm));
-<a name="l00121"></a>00121   }
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123   <span class="keywordtype">void</span> GravityModel::ReadMetadata(<span class="keyword">const</span> std::string& name) {
-<a name="l00124"></a>00124     <span class="keyword">const</span> <span class="keywordtype">char</span>* spaces = <span class="stringliteral">" \t\n\v\f\r"</span>;
-<a name="l00125"></a>00125     _filename = _dir + <span class="stringliteral">"/"</span> + name + <span class="stringliteral">".egm"</span>;
-<a name="l00126"></a>00126     ifstream metastr(_filename.c_str());
-<a name="l00127"></a>00127     <span class="keywordflow">if</span> (!metastr.good())
-<a name="l00128"></a>00128       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Cannot open "</span> + _filename);
-<a name="l00129"></a>00129     <span class="keywordtype">string</span> line;
-<a name="l00130"></a>00130     getline(metastr, line);
-<a name="l00131"></a>00131     <span class="keywordflow">if</span> (!(line.size() >= 6 && line.substr(0,5) == <span class="stringliteral">"EGMF-"</span>))
-<a name="l00132"></a>00132       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(_filename + <span class="stringliteral">" does not contain EGMF-n signature"</span>);
-<a name="l00133"></a>00133     <span class="keywordtype">string</span>::size_type n = line.find_first_of(spaces, 5);
-<a name="l00134"></a>00134     <span class="keywordflow">if</span> (n != string::npos)
-<a name="l00135"></a>00135       n -= 5;
-<a name="l00136"></a>00136     <span class="keywordtype">string</span> version = line.substr(5, n);
-<a name="l00137"></a>00137     <span class="keywordflow">if</span> (version != <span class="stringliteral">"1"</span>)
-<a name="l00138"></a>00138       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Unknown version in "</span> + _filename + <span class="stringliteral">": "</span> + version);
-<a name="l00139"></a>00139     <span class="keywordtype">string</span> key, val;
-<a name="l00140"></a>00140     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(), GM = a, omega = a, f = a, J2 = a;
-<a name="l00141"></a>00141     <span class="keywordflow">while</span> (getline(metastr, line)) {
-<a name="l00142"></a>00142       <span class="keywordflow">if</span> (!<a class="code" href="classGeographicLib_1_1Utility.html#a96252f445a912b77517bff04d4d6ea74">Utility::ParseLine</a>(line, key, val))
-<a name="l00143"></a>00143         <span class="keywordflow">continue</span>;
-<a name="l00144"></a>00144       <span class="comment">// Process key words</span>
-<a name="l00145"></a>00145       <span class="keywordflow">if</span> (key == <span class="stringliteral">"Name"</span>)
-<a name="l00146"></a>00146         _name = val;
-<a name="l00147"></a>00147       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Description"</span>)
-<a name="l00148"></a>00148         _description = val;
-<a name="l00149"></a>00149       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ReleaseDate"</span>)
-<a name="l00150"></a>00150         _date = val;
-<a name="l00151"></a>00151       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ModelRadius"</span>)
-<a name="l00152"></a>00152         _amodel = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(val);
-<a name="l00153"></a>00153       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ModelMass"</span>)
-<a name="l00154"></a>00154         _GMmodel = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(val);
-<a name="l00155"></a>00155       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"AngularVelocity"</span>)
-<a name="l00156"></a>00156         omega = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(val);
-<a name="l00157"></a>00157       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ReferenceRadius"</span>)
-<a name="l00158"></a>00158         a = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(val);
-<a name="l00159"></a>00159       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ReferenceMass"</span>)
-<a name="l00160"></a>00160         GM = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(val);
-<a name="l00161"></a>00161       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Flattening"</span>)
-<a name="l00162"></a>00162         f = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(val);
-<a name="l00163"></a>00163       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"DynamicalFormFactor"</span>)
-<a name="l00164"></a>00164         J2 = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(val);
-<a name="l00165"></a>00165       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"HeightOffset"</span>)
-<a name="l00166"></a>00166         _zeta0 = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(val);
-<a name="l00167"></a>00167       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"CorrectionMultiplier"</span>)
-<a name="l00168"></a>00168         _corrmult = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(val);
-<a name="l00169"></a>00169       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Normalization"</span>) {
-<a name="l00170"></a>00170         <span class="keywordflow">if</span> (val == <span class="stringliteral">"FULL"</span> || val == <span class="stringliteral">"Full"</span> || val == <span class="stringliteral">"full"</span>)
-<a name="l00171"></a>00171           _norm = <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>::FULL;
-<a name="l00172"></a>00172         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (val == <span class="stringliteral">"SCHMIDT"</span> || val == <span class="stringliteral">"Schmidt"</span> || val == <span class="stringliteral">"schmidt"</span>)
-<a name="l00173"></a>00173           _norm = <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>::SCHMIDT;
-<a name="l00174"></a>00174         <span class="keywordflow">else</span>
-<a name="l00175"></a>00175           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Unknown normalization "</span> + val);
-<a name="l00176"></a>00176       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ByteOrder"</span>) {
-<a name="l00177"></a>00177         <span class="keywordflow">if</span> (val == <span class="stringliteral">"Big"</span> || val == <span class="stringliteral">"big"</span>)
-<a name="l00178"></a>00178           <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Only little-endian ordering is supported"</span>);
-<a name="l00179"></a>00179         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!(val == <span class="stringliteral">"Little"</span> || val == <span class="stringliteral">"little"</span>))
-<a name="l00180"></a>00180           <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Unknown byte ordering "</span> + val);
-<a name="l00181"></a>00181       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ID"</span>)
-<a name="l00182"></a>00182         _id = val;
-<a name="l00183"></a>00183       <span class="comment">// else unrecognized keywords are skipped</span>
-<a name="l00184"></a>00184     }
-<a name="l00185"></a>00185     <span class="comment">// Check values</span>
-<a name="l00186"></a>00186     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_amodel) && _amodel > 0))
-<a name="l00187"></a>00187       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Model radius must be positive"</span>);
-<a name="l00188"></a>00188     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_GMmodel) && _GMmodel > 0))
-<a name="l00189"></a>00189       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Model mass constant must be positive"</span>);
-<a name="l00190"></a>00190     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_corrmult) && _corrmult > 0))
-<a name="l00191"></a>00191       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Correction multiplier must be positive"</span>);
-<a name="l00192"></a>00192     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_zeta0)))
-<a name="l00193"></a>00193       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Height offset must be finite"</span>);
-<a name="l00194"></a>00194     <span class="keywordflow">if</span> (<span class="keywordtype">int</span>(_id.size()) != idlength_)
-<a name="l00195"></a>00195       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Invalid ID"</span>);
-<a name="l00196"></a>00196     _earth = NormalGravity(a, GM, omega, f, J2);
-<a name="l00197"></a>00197   }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> GravityModel::InternalT(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Z,
-<a name="l00200"></a>00200                                      <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltaX, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltaY, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltaZ,
-<a name="l00201"></a>00201                                      <span class="keywordtype">bool</span> gradp, <span class="keywordtype">bool</span> correct) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00202"></a>00202     <span class="comment">// If correct, then produce the correct T = W - U.  Otherwise, neglect the</span>
-<a name="l00203"></a>00203     <span class="comment">// n = 0 term (which is proportial to the difference in the model and</span>
-<a name="l00204"></a>00204     <span class="comment">// reference values of GM).</span>
-<a name="l00205"></a>00205     <span class="keywordflow">if</span> (_dzonal0 == 0)
-<a name="l00206"></a>00206       <span class="comment">// No need to do the correction</span>
-<a name="l00207"></a>00207       correct = <span class="keyword">false</span>;
-<a name="l00208"></a>00208     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00209"></a>00209       invR = correct ? 1 / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(X, Y), Z) : 1,
-<a name="l00210"></a>00210       T = (gradp
-<a name="l00211"></a>00211            ? _disturbing(-1, X, Y, Z, deltaX, deltaY, deltaZ)
-<a name="l00212"></a>00212            : _disturbing(-1, X, Y, Z));
-<a name="l00213"></a>00213     T = (T / _amodel - (correct ? _dzonal0 : 0) * invR) * _GMmodel;
-<a name="l00214"></a>00214     <span class="keywordflow">if</span> (gradp) {
-<a name="l00215"></a>00215       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f = _GMmodel / _amodel;
-<a name="l00216"></a>00216       deltaX *= f;
-<a name="l00217"></a>00217       deltaY *= f;
-<a name="l00218"></a>00218       deltaZ *= f;
-<a name="l00219"></a>00219       <span class="keywordflow">if</span> (correct) {
-<a name="l00220"></a>00220         invR = _GMmodel * _dzonal0 * invR * invR * invR;
-<a name="l00221"></a>00221         deltaX += X * invR;
-<a name="l00222"></a>00222         deltaY += Y * invR;
-<a name="l00223"></a>00223         deltaZ += Z * invR;
-<a name="l00224"></a>00224       }
-<a name="l00225"></a>00225     }
-<a name="l00226"></a>00226     <span class="keywordflow">return</span> T;
-<a name="l00227"></a>00227   }
-<a name="l00228"></a>00228 
-<a name="l00229"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a7aec9ecfa959b257dd0a965331598368">00229</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityModel.html#a7aec9ecfa959b257dd0a965331598368">GravityModel::V</a>(real X, real Y, real Z,
-<a name="l00230"></a>00230                              real& GX, real& GY, real& GZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00231"></a>00231     real
-<a name="l00232"></a>00232       Vres = _gravitational(X, Y, Z, GX, GY, GZ),
-<a name="l00233"></a>00233       f = _GMmodel / _amodel;
-<a name="l00234"></a>00234     Vres *= f;
-<a name="l00235"></a>00235     GX *= f;
-<a name="l00236"></a>00236     GY *= f;
-<a name="l00237"></a>00237     GZ *= f;
-<a name="l00238"></a>00238     <span class="keywordflow">return</span> Vres;
-<a name="l00239"></a>00239   }
-<a name="l00240"></a>00240 
-<a name="l00241"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#ab6767f3833caa34095a7ef83c43a46f0">00241</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityModel.html#ab6767f3833caa34095a7ef83c43a46f0">GravityModel::W</a>(real X, real Y, real Z,
-<a name="l00242"></a>00242                              real& gX, real& gY, real& gZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00243"></a>00243     real fX, fY,
-<a name="l00244"></a>00244       Wres = V(X, Y, Z, gX, gY, gZ) + _earth.Phi(X, Y, fX, fY);
-<a name="l00245"></a>00245     gX += fX;
-<a name="l00246"></a>00246     gY += fY;
-<a name="l00247"></a>00247     <span class="keywordflow">return</span> Wres;
-<a name="l00248"></a>00248   }
-<a name="l00249"></a>00249 
-<a name="l00250"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#aaf89eb4a9b7266f0aa2ef2c341fc264e">00250</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1GravityModel.html#aaf89eb4a9b7266f0aa2ef2c341fc264e">GravityModel::SphericalAnomaly</a>(real lat, real lon, real h,
-<a name="l00251"></a>00251                                       real& Dg01, real& xi, real& eta)
-<a name="l00252"></a>00252     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00253"></a>00253     real X, Y, Z, M[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00254"></a>00254     _earth.Earth().IntForward(lat, lon, h, X, Y, Z, M);
-<a name="l00255"></a>00255     real
-<a name="l00256"></a>00256       deltax, deltay, deltaz,
-<a name="l00257"></a>00257       T = InternalT(X, Y, Z, deltax, deltay, deltaz, <span class="keyword">true</span>, <span class="keyword">false</span>),
-<a name="l00258"></a>00258       clam = M[3], slam = -M[0],
-<a name="l00259"></a>00259       P = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(X, Y),
-<a name="l00260"></a>00260       R = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(P, Z),
-<a name="l00261"></a>00261       <span class="comment">// psi is geocentric latitude</span>
-<a name="l00262"></a>00262       cpsi = R ? P / R : M[7],
-<a name="l00263"></a>00263       spsi = R ? Z / R : M[8];
-<a name="l00264"></a>00264     <span class="comment">// Rotate cartesian into spherical coordinates</span>
-<a name="l00265"></a>00265     real MC[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00266"></a>00266     Geocentric::Rotation(spsi, cpsi, slam, clam, MC);
-<a name="l00267"></a>00267     Geocentric::Unrotate(MC, deltax, deltay, deltaz, deltax, deltay, deltaz);
-<a name="l00268"></a>00268     <span class="comment">// H+M, Eq 2-151c</span>
-<a name="l00269"></a>00269     Dg01 = - deltaz - 2 * T / R;
-<a name="l00270"></a>00270     real gammaX, gammaY, gammaZ;
-<a name="l00271"></a>00271     _earth.U(X, Y, Z, gammaX, gammaY, gammaZ);
-<a name="l00272"></a>00272     real gamma = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>( <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(gammaX, gammaY), gammaZ);
-<a name="l00273"></a>00273     xi  = -(deltay/gamma) / Math::degree<real>();
-<a name="l00274"></a>00274     eta = -(deltax/gamma) / Math::degree<real>();
-<a name="l00275"></a>00275   }
-<a name="l00276"></a>00276 
-<a name="l00277"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a7e75bdba6b9c8e64cc64403335a6fba4">00277</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityModel.html#a7e75bdba6b9c8e64cc64403335a6fba4">GravityModel::GeoidHeight</a>(real lat, real lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
-<a name="l00278"></a>00278   {
-<a name="l00279"></a>00279     real X, Y, Z;
-<a name="l00280"></a>00280     _earth.Earth().IntForward(lat, lon, 0, X, Y, Z, NULL);
-<a name="l00281"></a>00281     real
-<a name="l00282"></a>00282       gamma0 = _earth.SurfaceGravity(lat),
-<a name="l00283"></a>00283       dummy,
-<a name="l00284"></a>00284       T = InternalT(X, Y, Z, dummy, dummy, dummy, <span class="keyword">false</span>, <span class="keyword">false</span>),
-<a name="l00285"></a>00285       invR = 1 / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(X, Y), Z),
-<a name="l00286"></a>00286       correction = _corrmult * _correction(invR * X, invR * Y, invR * Z);
-<a name="l00287"></a>00287     <span class="comment">// _zeta0 has been included in _correction</span>
-<a name="l00288"></a>00288     <span class="keywordflow">return</span> T/gamma0 + correction;
-<a name="l00289"></a>00289   }
-<a name="l00290"></a>00290 
-<a name="l00291"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a2dc8bf4cfa3c1914f4c7e93a5a3b3eac">00291</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityModel.html#a2dc8bf4cfa3c1914f4c7e93a5a3b3eac">GravityModel::Gravity</a>(real lat, real lon, real h,
-<a name="l00292"></a>00292                                    real& gx, real& gy, real& gz) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00293"></a>00293     real X, Y, Z, M[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00294"></a>00294     _earth.Earth().IntForward(lat, lon, h, X, Y, Z, M);
-<a name="l00295"></a>00295     real Wres = W(X, Y, Z, gx, gy, gz);
-<a name="l00296"></a>00296     Geocentric::Unrotate(M, gx, gy, gz, gx, gy, gz);
-<a name="l00297"></a>00297     <span class="keywordflow">return</span> Wres;
-<a name="l00298"></a>00298   }
-<a name="l00299"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a75cf57146334d9ce0856222a6814ae6f">00299</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityModel.html#a75cf57146334d9ce0856222a6814ae6f">GravityModel::Disturbance</a>(real lat, real lon, real h,
-<a name="l00300"></a>00300                                        real& deltax, real& deltay, real& deltaz)
-<a name="l00301"></a>00301     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00302"></a>00302     real X, Y, Z, M[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00303"></a>00303     _earth.Earth().IntForward(lat, lon, h, X, Y, Z, M);
-<a name="l00304"></a>00304     real Tres = InternalT(X, Y, Z, deltax, deltay, deltaz, <span class="keyword">true</span>, <span class="keyword">true</span>);
-<a name="l00305"></a>00305     Geocentric::Unrotate(M, deltax, deltay, deltaz, deltax, deltay, deltaz);
-<a name="l00306"></a>00306     <span class="keywordflow">return</span> Tres;
-<a name="l00307"></a>00307   }
-<a name="l00308"></a>00308 
-<a name="l00309"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#aadafafc09b9b707d47606da1e413d54f">00309</a>   <a class="code" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> <a class="code" href="classGeographicLib_1_1GravityModel.html#aadafafc09b9b707d47606da1e413d54f">GravityModel::Circle</a>(real lat, real h, <span class="keywordtype">unsigned</span> caps)<span class="keyword"> const </span>{
-<a name="l00310"></a>00310     <span class="keywordflow">if</span> (h != 0)
-<a name="l00311"></a>00311       <span class="comment">// Disallow invoking GeoidHeight unless h is zero.</span>
-<a name="l00312"></a>00312       caps &= ~(CAP_GAMMA0 | CAP_C);
-<a name="l00313"></a>00313     real X, Y, Z, M[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00314"></a>00314     _earth.<a class="code" href="classGeographicLib_1_1NormalGravity.html#ab15ded1ab7ec9a30e8053fc330ed76ac">Earth</a>().IntForward(lat, 0, h, X, Y, Z, M);
-<a name="l00315"></a>00315     <span class="comment">// Y = 0, cphi = M[7], sphi = M[8];</span>
-<a name="l00316"></a>00316     real
-<a name="l00317"></a>00317       invR = 1 / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(X, Z),
-<a name="l00318"></a>00318       gamma0 = (caps & CAP_GAMMA0 ?_earth.<a class="code" href="classGeographicLib_1_1NormalGravity.html#a019541fea3712f8ca73aec8a0b29c71c">SurfaceGravity</a>(lat)
-<a name="l00319"></a>00319                 : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>()),
-<a name="l00320"></a>00320       fx, fy, fz, gamma;
-<a name="l00321"></a>00321     <span class="keywordflow">if</span> (caps & CAP_GAMMA) {
-<a name="l00322"></a>00322       _earth.<a class="code" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">U</a>(X, Y, Z, fx, fy, fz); <span class="comment">// fy = 0</span>
-<a name="l00323"></a>00323       gamma = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(fx, fz);
-<a name="l00324"></a>00324     } <span class="keywordflow">else</span>
-<a name="l00325"></a>00325       gamma = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00326"></a>00326     _earth.<a class="code" href="classGeographicLib_1_1NormalGravity.html#af0f50fd88d8b647a1b7bb209a4cfae0f">Phi</a>(X, Y, fx, fy);
-<a name="l00327"></a>00327     <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1GravityModel.html#a243c90a7f9bf3f7aa96877a4b0667a89">GravityCircle</a>(GravityCircle::mask(caps),
-<a name="l00328"></a>00328                          _earth._a, _earth._f, lat, h, Z, X, M[7], M[8],
-<a name="l00329"></a>00329                          _amodel, _GMmodel, _dzonal0, _corrmult,
-<a name="l00330"></a>00330                          gamma0, gamma, fx,
-<a name="l00331"></a>00331                          caps & CAP_G ?
-<a name="l00332"></a>00332                          _gravitational.<a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">Circle</a>(X, Z, <span class="keyword">true</span>) :
-<a name="l00333"></a>00333                          <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a>(),
-<a name="l00334"></a>00334                          <span class="comment">// N.B. If CAP_DELTA is set then CAP_T should be too.</span>
-<a name="l00335"></a>00335                          caps & CAP_T ?
-<a name="l00336"></a>00336                          _disturbing.<a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#a32dd4989c40181939d667298681625f6">Circle</a>(-1, X, Z, (caps & CAP_DELTA) != 0) :
-<a name="l00337"></a>00337                          <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a>(),
-<a name="l00338"></a>00338                          caps & CAP_C ?
-<a name="l00339"></a>00339                          _correction.<a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">Circle</a>(invR * X, invR * Z, <span class="keyword">false</span>) :
-<a name="l00340"></a>00340                          <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a>());
-<a name="l00341"></a>00341   }
-<a name="l00342"></a>00342 
-<a name="l00343"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">00343</a>   std::string <a class="code" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">GravityModel::DefaultGravityPath</a>() {
-<a name="l00344"></a>00344     <span class="keywordtype">string</span> path;
-<a name="l00345"></a>00345     <span class="keywordtype">char</span>* gravitypath = getenv(<span class="stringliteral">"GRAVITY_PATH"</span>);
-<a name="l00346"></a>00346     <span class="keywordflow">if</span> (gravitypath)
-<a name="l00347"></a>00347       path = string(gravitypath);
-<a name="l00348"></a>00348     <span class="keywordflow">if</span> (path.length())
-<a name="l00349"></a>00349       <span class="keywordflow">return</span> path;
-<a name="l00350"></a>00350     <span class="keywordtype">char</span>* datapath = getenv(<span class="stringliteral">"GEOGRAPHICLIB_DATA"</span>);
-<a name="l00351"></a>00351     <span class="keywordflow">if</span> (datapath)
-<a name="l00352"></a>00352       path = string(datapath);
-<a name="l00353"></a>00353     <span class="keywordflow">return</span> (path.length() ? path : string(<a class="code" href="GravityModel_8cpp.html#a45687ef771d809c1c369daea074cc109">GEOGRAPHICLIB_DATA</a>)) + <span class="stringliteral">"/gravity"</span>;
-<a name="l00354"></a>00354   }
-<a name="l00355"></a>00355 
-<a name="l00356"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#ad4a776d68b60e85275c0e580d3c7caba">00356</a>   std::string <a class="code" href="classGeographicLib_1_1GravityModel.html#ad4a776d68b60e85275c0e580d3c7caba">GravityModel::DefaultGravityName</a>() {
-<a name="l00357"></a>00357     <span class="keywordtype">string</span> name;
-<a name="l00358"></a>00358     <span class="keywordtype">char</span>* gravityname = getenv(<span class="stringliteral">"GRAVITY_NAME"</span>);
-<a name="l00359"></a>00359     <span class="keywordflow">if</span> (gravityname)
-<a name="l00360"></a>00360       name = string(gravityname);
-<a name="l00361"></a>00361     <span class="keywordflow">return</span> name.length() ? name : string(<a class="code" href="GravityModel_8cpp.html#a05d4f5b688275acf184933e85a0063bd">GRAVITY_DEFAULT_NAME</a>);
-<a name="l00362"></a>00362   }
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GravityModel_8hpp.html b/doc/html/GravityModel_8hpp.html
deleted file mode 100644
index cf0fe69..0000000
--- a/doc/html/GravityModel_8hpp.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GravityModel.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">GravityModel.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <string></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <vector></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="NormalGravity_8hpp_source.html">GeographicLib/NormalGravity.hpp</a>></code><br/>
-<code>#include <<a class="el" href="SphericalHarmonic_8hpp_source.html">GeographicLib/SphericalHarmonic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="SphericalHarmonic1_8hpp_source.html">GeographicLib/SphericalHarmonic1.hpp</a>></code><br/>
-</div>
-<p><a href="GravityModel_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Model of the earth's gravity field.  <a href="classGeographicLib_1_1GravityModel.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityModel_8hpp.html#ace85f3a4d35d4657064e289e2bf57dab">GEOGRAPHICLIB_GRAVITYMODEL_HPP</a>   "$Id: e1a573fb0148fa5bc408b2dbdb096d4cd3091bac $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ace85f3a4d35d4657064e289e2bf57dab"></a><!-- doxytag: member="GravityModel.hpp::GEOGRAPHICLIB_GRAVITYMODEL_HPP" ref="ace85f3a4d35d4657064e289e2bf57dab" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_GRAVITYMODEL_HPP   "$Id: e1a573fb0148fa5bc408b2dbdb096d4cd3091bac $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00011">11</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/GravityModel_8hpp_source.html b/doc/html/GravityModel_8hpp_source.html
deleted file mode 100644
index df21718..0000000
--- a/doc/html/GravityModel_8hpp_source.html
+++ /dev/null
@@ -1,591 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GravityModel.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GravityModel.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="GravityModel_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file GravityModel.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::GravityModel class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_GRAVITYMODEL_HPP)</span>
-<a name="l00011"></a><a class="code" href="GravityModel_8hpp.html#ace85f3a4d35d4657064e289e2bf57dab">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_GRAVITYMODEL_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: e1a573fb0148fa5bc408b2dbdb096d4cd3091bac $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <string></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <sstream></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <vector></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00018"></a>00018 <span class="preprocessor">#include <<a class="code" href="NormalGravity_8hpp.html" title="Header for GeographicLib::NormalGravity class.">GeographicLib/NormalGravity.hpp</a>></span>
-<a name="l00019"></a>00019 <span class="preprocessor">#include <<a class="code" href="SphericalHarmonic_8hpp.html" title="Header for GeographicLib::SphericalHarmonic class.">GeographicLib/SphericalHarmonic.hpp</a>></span>
-<a name="l00020"></a>00020 <span class="preprocessor">#include <<a class="code" href="SphericalHarmonic1_8hpp.html" title="Header for GeographicLib::SphericalHarmonic1 class.">GeographicLib/SphericalHarmonic1.hpp</a>></span>
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="comment">// Squelch warnings about dll vs vector</span>
-<a name="l00024"></a>00024 <span class="preprocessor">#pragma warning (push)</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4251)</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00028"></a>00028 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030   <span class="keyword">class </span>GravityCircle;
-<a name="l00031"></a>00031 <span class="comment"></span>
-<a name="l00032"></a>00032 <span class="comment">  /**</span>
-<a name="l00033"></a>00033 <span class="comment">   * \brief Model of the earth's gravity field</span>
-<a name="l00034"></a>00034 <span class="comment">   *</span>
-<a name="l00035"></a>00035 <span class="comment">   * Evaluate the earth's gravity field according to a model.  The supported</span>
-<a name="l00036"></a>00036 <span class="comment">   * models treat only the gravitational field exterior to the mass of the</span>
-<a name="l00037"></a>00037 <span class="comment">   * earth.  When computing the field at points near (but above) the surface of</span>
-<a name="l00038"></a>00038 <span class="comment">   * the earth a small correction can be applied to account for the mass of the</span>
-<a name="l00039"></a>00039 <span class="comment">   * atomsphere above the point in question; see \ref gravityatmos.</span>
-<a name="l00040"></a>00040 <span class="comment">   * Determining the geoid height entails correcting for the mass of the earth</span>
-<a name="l00041"></a>00041 <span class="comment">   * above the geoid.  The egm96 and egm2008 include separate correction terms</span>
-<a name="l00042"></a>00042 <span class="comment">   * to account for this mass.</span>
-<a name="l00043"></a>00043 <span class="comment">   *</span>
-<a name="l00044"></a>00044 <span class="comment">   * Definitions and terminology (from Heiskanen and Moritz, Sec 2-13):</span>
-<a name="l00045"></a>00045 <span class="comment">   * - \e V = gravitational potential;</span>
-<a name="l00046"></a>00046 <span class="comment">   * - \e Phi = rotational potential;</span>
-<a name="l00047"></a>00047 <span class="comment">   * - \e W = \e V + \e Phi = \e T + \e U = total potential;</span>
-<a name="l00048"></a>00048 <span class="comment">   * - <i>V</i><sub>0</sub> = normal gravitation potential;</span>
-<a name="l00049"></a>00049 <span class="comment">   * - \e U = <i>V</i><sub>0</sub> + \e Phi = total normal potential;</span>
-<a name="l00050"></a>00050 <span class="comment">   * - \e T = \e W - \e U = \e V - <i>V</i><sub>0</sub> = anomalous or</span>
-<a name="l00051"></a>00051 <span class="comment">   *   disturbing potential;</span>
-<a name="l00052"></a>00052 <span class="comment">   * - <b>g</b> = <b>grad</b> \e W = <b>gamma</b> + <b>delta</b>;</span>
-<a name="l00053"></a>00053 <span class="comment">   * - <b>f</b> = <b>grad</b> \e Phi;</span>
-<a name="l00054"></a>00054 <span class="comment">   * - <b>Gamma</b> = <b>grad</b> <i>V</i><sub>0</sub>;</span>
-<a name="l00055"></a>00055 <span class="comment">   * - <b>gamma</b> = <b>grad</b> \e U;</span>
-<a name="l00056"></a>00056 <span class="comment">   * - <b>delta</b> = <b>grad</b> \e T = gravity disturbance vector</span>
-<a name="l00057"></a>00057 <span class="comment">   *   = <b>g</b><sub><i>P</i></sub> - <b>gamma</b><sub><i>P</i></sub>;</span>
-<a name="l00058"></a>00058 <span class="comment">   * - delta \e g = gravity disturbance = \e g<sub><i>P</i></sub> - \e</span>
-<a name="l00059"></a>00059 <span class="comment">   *   gamma<sub><i>P</i></sub>;</span>
-<a name="l00060"></a>00060 <span class="comment">   * - Delta <b>g</b> = gravity anomaly vector =</span>
-<a name="l00061"></a>00061 <span class="comment">   *   <b>g</b><sub><i>P</i></sub> - <b>gamma</b><sub><i>Q</i></sub>; here the</span>
-<a name="l00062"></a>00062 <span class="comment">   *   line \e PQ is perpendicular to ellipsoid and the potential at \e P</span>
-<a name="l00063"></a>00063 <span class="comment">   *   equals the normal potential at \e Q;</span>
-<a name="l00064"></a>00064 <span class="comment">   * - Delta \e g = gravity anomaly = \e g<sub><i>P</i></sub> - \e</span>
-<a name="l00065"></a>00065 <span class="comment">   *   gamma<sub><i>Q</i></sub>;</span>
-<a name="l00066"></a>00066 <span class="comment">   * - (\e xi, \e eta) deflection of the vertical, the difference in</span>
-<a name="l00067"></a>00067 <span class="comment">   *   directions of <b>g</b><sub><i>P</i></sub> and</span>
-<a name="l00068"></a>00068 <span class="comment">   *   <b>gamma</b><sub><i>Q</i></sub>, \e xi = NS, \e eta = EW.</span>
-<a name="l00069"></a>00069 <span class="comment">   * - \e X, \e Y, \e Z, geocentric coordinates;</span>
-<a name="l00070"></a>00070 <span class="comment">   * - \e x, \e y, \e z, local cartesian coordinates used to denote the east,</span>
-<a name="l00071"></a>00071 <span class="comment">   *   north and up directions.</span>
-<a name="l00072"></a>00072 <span class="comment">   *</span>
-<a name="l00073"></a>00073 <span class="comment">   * See \ref gravity for details of how to install the gravity model and the</span>
-<a name="l00074"></a>00074 <span class="comment">   * data format.</span>
-<a name="l00075"></a>00075 <span class="comment">   *</span>
-<a name="l00076"></a>00076 <span class="comment">   * References:</span>
-<a name="l00077"></a>00077 <span class="comment">   * - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San</span>
-<a name="l00078"></a>00078 <span class="comment">   *   Francisco, 1967).</span>
-<a name="l00079"></a>00079 <span class="comment">   *</span>
-<a name="l00080"></a>00080 <span class="comment">   * Example of use:</span>
-<a name="l00081"></a>00081 <span class="comment">   * \include example-GravityModel.cpp</span>
-<a name="l00082"></a>00082 <span class="comment">   *</span>
-<a name="l00083"></a>00083 <span class="comment">   * <a href="Gravity.1.html">Gravity</a> is a command-line utility providing</span>
-<a name="l00084"></a>00084 <span class="comment">   * access to the functionality of GravityModel and GravityCircle.</span>
-<a name="l00085"></a>00085 <span class="comment">   **********************************************************************/</span>
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> GravityModel {
-<a name="l00088"></a>00088   <span class="keyword">private</span>:
-<a name="l00089"></a>00089     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00090"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a243c90a7f9bf3f7aa96877a4b0667a89">00090</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a>;
-<a name="l00091"></a>00091     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> idlength_ = 8;
-<a name="l00092"></a>00092     std::string _name, _dir, _description, _date, _filename, _id;
-<a name="l00093"></a>00093     real _amodel, _GMmodel, _zeta0, _corrmult;
-<a name="l00094"></a>00094     <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>::normalization _norm;
-<a name="l00095"></a>00095     <a class="code" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a> _earth;
-<a name="l00096"></a>00096     std::vector<real> _C, _S, _CC, _CS, _zonal;
-<a name="l00097"></a>00097     real _dzonal0;              <span class="comment">// A left over contribution to _zonal.</span>
-<a name="l00098"></a>00098     <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> _gravitational;
-<a name="l00099"></a>00099     <a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html" title="Spherical Harmonic series with a correction to the coefficients.">SphericalHarmonic1</a> _disturbing;
-<a name="l00100"></a>00100     <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> _correction;
-<a name="l00101"></a>00101     <span class="keywordtype">void</span> ReadMetadata(<span class="keyword">const</span> std::string& name);
-<a name="l00102"></a>00102     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real InternalT(real X, real Y, real Z,
-<a name="l00103"></a>00103                          real& deltaX, real& deltaY, real& deltaZ,
-<a name="l00104"></a>00104                          <span class="keywordtype">bool</span> gradp, <span class="keywordtype">bool</span> correct) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00105"></a>00105     <span class="keyword">enum</span> captype {
-<a name="l00106"></a>00106       CAP_NONE   = 0U,
-<a name="l00107"></a>00107       CAP_G      = 1U<<0,       <span class="comment">// implies potentials W and V</span>
-<a name="l00108"></a>00108       CAP_T      = 1U<<1,
-<a name="l00109"></a>00109       CAP_DELTA  = 1U<<2 | CAP_T, <span class="comment">// delta implies T?</span>
-<a name="l00110"></a>00110       CAP_C      = 1U<<3,
-<a name="l00111"></a>00111       CAP_GAMMA0 = 1U<<4,
-<a name="l00112"></a>00112       CAP_GAMMA  = 1U<<5,
-<a name="l00113"></a>00113       CAP_ALL    = 0x3FU,
-<a name="l00114"></a>00114     };
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116   <span class="keyword">public</span>:
-<a name="l00117"></a>00117 <span class="comment"></span>
-<a name="l00118"></a>00118 <span class="comment">    /**</span>
-<a name="l00119"></a>00119 <span class="comment">     * Bit masks for the capabilities to be given to the GravityCircle object</span>
-<a name="l00120"></a>00120 <span class="comment">     * produced by Circle.</span>
-<a name="l00121"></a>00121 <span class="comment">     **********************************************************************/</span>
-<a name="l00122"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365">00122</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365">mask</a> {<span class="comment"></span>
-<a name="l00123"></a>00123 <span class="comment">      /**</span>
-<a name="l00124"></a>00124 <span class="comment">       * No capabilities.</span>
-<a name="l00125"></a>00125 <span class="comment">       * @hideinitializer</span>
-<a name="l00126"></a>00126 <span class="comment">       **********************************************************************/</span>
-<a name="l00127"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365add4ee1aa94e38a8283826704105dc2e1">00127</a>       NONE = 0U,<span class="comment"></span>
-<a name="l00128"></a>00128 <span class="comment">      /**</span>
-<a name="l00129"></a>00129 <span class="comment">       * Allow calls to GravityCircle::Gravity, GravityCircle::W, and</span>
-<a name="l00130"></a>00130 <span class="comment">       * GravityCircle::V.</span>
-<a name="l00131"></a>00131 <span class="comment">       * @hideinitializer</span>
-<a name="l00132"></a>00132 <span class="comment">       **********************************************************************/</span>
-<a name="l00133"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ae6a4573c13b932c98ab95e7f9dbd0952">00133</a>       GRAVITY = CAP_G,<span class="comment"></span>
-<a name="l00134"></a>00134 <span class="comment">      /**</span>
-<a name="l00135"></a>00135 <span class="comment">       * Allow calls to GravityCircle::Disturbance and GravityCircle::T.</span>
-<a name="l00136"></a>00136 <span class="comment">       * @hideinitializer</span>
-<a name="l00137"></a>00137 <span class="comment">       **********************************************************************/</span>
-<a name="l00138"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a83daf366a2c7ab93495f0e6b4144d885">00138</a>       DISTURBANCE = CAP_DELTA,<span class="comment"></span>
-<a name="l00139"></a>00139 <span class="comment">      /**</span>
-<a name="l00140"></a>00140 <span class="comment">       * Allow calls to GravityCircle::T(real lon) (i.e., computing the</span>
-<a name="l00141"></a>00141 <span class="comment">       * disturbing potential and not the gravity disturbance vector).</span>
-<a name="l00142"></a>00142 <span class="comment">       * @hideinitializer</span>
-<a name="l00143"></a>00143 <span class="comment">       **********************************************************************/</span>
-<a name="l00144"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365abe1f6d891a721a4f544cd8a341abcb28">00144</a>       DISTURBING_POTENTIAL = CAP_T,<span class="comment"></span>
-<a name="l00145"></a>00145 <span class="comment">      /**</span>
-<a name="l00146"></a>00146 <span class="comment">       * Allow calls to GravityCircle::SphericalAnomaly.</span>
-<a name="l00147"></a>00147 <span class="comment">       * @hideinitializer</span>
-<a name="l00148"></a>00148 <span class="comment">       **********************************************************************/</span>
-<a name="l00149"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ada02eebe918ebb3764a62b9323dceac9">00149</a>       SPHERICAL_ANOMALY = CAP_DELTA | CAP_GAMMA,<span class="comment"></span>
-<a name="l00150"></a>00150 <span class="comment">      /**</span>
-<a name="l00151"></a>00151 <span class="comment">       * Allow calls to GravityCircle::GeoidHeight.</span>
-<a name="l00152"></a>00152 <span class="comment">       * @hideinitializer</span>
-<a name="l00153"></a>00153 <span class="comment">       **********************************************************************/</span>
-<a name="l00154"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69">00154</a>       GEOID_HEIGHT = CAP_T | CAP_C | CAP_GAMMA0,<span class="comment"></span>
-<a name="l00155"></a>00155 <span class="comment">      /**</span>
-<a name="l00156"></a>00156 <span class="comment">       * All capabilities.</span>
-<a name="l00157"></a>00157 <span class="comment">       * @hideinitializer</span>
-<a name="l00158"></a>00158 <span class="comment">       **********************************************************************/</span>
-<a name="l00159"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a8e0e6b9a6d629d05f22f41996fe98068">00159</a>       ALL = CAP_ALL,
-<a name="l00160"></a>00160     };<span class="comment"></span>
-<a name="l00161"></a>00161 <span class="comment">    /** \name Setting up the gravity model</span>
-<a name="l00162"></a>00162 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00163"></a>00163 <span class="comment">    ///@{</span>
-<a name="l00164"></a>00164 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00165"></a>00165 <span class="comment">     * Construct a gravity model.</span>
-<a name="l00166"></a>00166 <span class="comment">     *</span>
-<a name="l00167"></a>00167 <span class="comment">     * @param[in] name the name of the model.</span>
-<a name="l00168"></a>00168 <span class="comment">     * @param[in] path (optional) directory for data file.</span>
-<a name="l00169"></a>00169 <span class="comment">     *</span>
-<a name="l00170"></a>00170 <span class="comment">     * A filename is formed by appending ".egm" (World Gravity Model) to the</span>
-<a name="l00171"></a>00171 <span class="comment">     * name.  If \e path is specified (and is non-empty), then the file is</span>
-<a name="l00172"></a>00172 <span class="comment">     * loaded from directory, \e path.  Otherwise the path is given by</span>
-<a name="l00173"></a>00173 <span class="comment">     * DefaultGravityPath().  This may throw an exception because the file does</span>
-<a name="l00174"></a>00174 <span class="comment">     * not exist, is unreadable, or is corrupt.</span>
-<a name="l00175"></a>00175 <span class="comment">     *</span>
-<a name="l00176"></a>00176 <span class="comment">     * This file contains the metadata which specifies the properties of the</span>
-<a name="l00177"></a>00177 <span class="comment">     * model.  The coefficients for the spherical harmonic sums are obtained</span>
-<a name="l00178"></a>00178 <span class="comment">     * from a file obtained by appending ".cof" to metadata file (so the</span>
-<a name="l00179"></a>00179 <span class="comment">     * filename ends in ".egm.cof").</span>
-<a name="l00180"></a>00180 <span class="comment">     **********************************************************************/</span>
-<a name="l00181"></a>00181     <span class="keyword">explicit</span> GravityModel(<span class="keyword">const</span> std::string& name,
-<a name="l00182"></a>00182                           <span class="keyword">const</span> std::string& path = <span class="stringliteral">""</span>);<span class="comment"></span>
-<a name="l00183"></a>00183 <span class="comment">    ///@}</span>
-<a name="l00184"></a>00184 <span class="comment"></span><span class="comment"></span>
-<a name="l00185"></a>00185 <span class="comment">    /** \name Compute gravity in geodetic coordinates</span>
-<a name="l00186"></a>00186 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00187"></a>00187 <span class="comment">    ///@{</span>
-<a name="l00188"></a>00188 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00189"></a>00189 <span class="comment">     * Evaluate the gravity at an arbitrary point above (or below) the</span>
-<a name="l00190"></a>00190 <span class="comment">     * ellipsoid.</span>
-<a name="l00191"></a>00191 <span class="comment">     *</span>
-<a name="l00192"></a>00192 <span class="comment">     * @param[in] lat the geographic latitude (degrees).</span>
-<a name="l00193"></a>00193 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00194"></a>00194 <span class="comment">     * @param[in] h the height above the ellipsoid (meters).</span>
-<a name="l00195"></a>00195 <span class="comment">     * @param[out] gx the easterly component of the acceleration</span>
-<a name="l00196"></a>00196 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00197"></a>00197 <span class="comment">     * @param[out] gy the northerly component of the acceleration</span>
-<a name="l00198"></a>00198 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00199"></a>00199 <span class="comment">     * @param[out] gz the upward component of the acceleration</span>
-<a name="l00200"></a>00200 <span class="comment">     *   (m s<sup>-2</sup>); this is usually negative.</span>
-<a name="l00201"></a>00201 <span class="comment">     * @return \e W the sum of the gravitational and centrifugal potentials.</span>
-<a name="l00202"></a>00202 <span class="comment">     *</span>
-<a name="l00203"></a>00203 <span class="comment">     * The function includes the effects of the earth's rotation.</span>
-<a name="l00204"></a>00204 <span class="comment">     **********************************************************************/</span>
-<a name="l00205"></a>00205     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Gravity(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h,
-<a name="l00206"></a>00206                        <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gy, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gz) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00207"></a>00207 <span class="comment"></span>
-<a name="l00208"></a>00208 <span class="comment">    /**</span>
-<a name="l00209"></a>00209 <span class="comment">     * Evaluate the gravity disturbance vector at an arbitrary point above (or</span>
-<a name="l00210"></a>00210 <span class="comment">     * below) the ellipsoid.</span>
-<a name="l00211"></a>00211 <span class="comment">     *</span>
-<a name="l00212"></a>00212 <span class="comment">     * @param[in] lat the geographic latitude (degrees).</span>
-<a name="l00213"></a>00213 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00214"></a>00214 <span class="comment">     * @param[in] h the height above the ellipsoid (meters).</span>
-<a name="l00215"></a>00215 <span class="comment">     * @param[out] deltax the easterly component of the disturbance vector</span>
-<a name="l00216"></a>00216 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00217"></a>00217 <span class="comment">     * @param[out] deltay the northerly component of the disturbance vector</span>
-<a name="l00218"></a>00218 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00219"></a>00219 <span class="comment">     * @param[out] deltaz the upward component of the disturbance vector</span>
-<a name="l00220"></a>00220 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00221"></a>00221 <span class="comment">     * @return \e T the corresponding disturbing potential.</span>
-<a name="l00222"></a>00222 <span class="comment">     **********************************************************************/</span>
-<a name="l00223"></a>00223     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Disturbance(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">rea [...]
-<a name="l00224"></a>00224                            <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltax, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltay, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& deltaz)
-<a name="l00225"></a>00225       <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00226"></a>00226 <span class="comment"></span>
-<a name="l00227"></a>00227 <span class="comment">    /**</span>
-<a name="l00228"></a>00228 <span class="comment">     * Evaluate the geoid height.</span>
-<a name="l00229"></a>00229 <span class="comment">     *</span>
-<a name="l00230"></a>00230 <span class="comment">     * @param[in] lat the geographic latitude (degrees).</span>
-<a name="l00231"></a>00231 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00232"></a>00232 <span class="comment">     * @return \e N the height of the geoid above the ReferenceEllipsoid()</span>
-<a name="l00233"></a>00233 <span class="comment">     *   (meters).</span>
-<a name="l00234"></a>00234 <span class="comment">     *</span>
-<a name="l00235"></a>00235 <span class="comment">     * This calls NormalGravity::U for ReferenceEllipsoid().  Some</span>
-<a name="l00236"></a>00236 <span class="comment">     * approximations are made in computing the geoid height so that the</span>
-<a name="l00237"></a>00237 <span class="comment">     * results of the NGA codes are reproduced accurately.  Details are given</span>
-<a name="l00238"></a>00238 <span class="comment">     * in \ref gravitygeoid.</span>
-<a name="l00239"></a>00239 <span class="comment">     **********************************************************************/</span>
-<a name="l00240"></a>00240     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> GeoidHeight(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00241"></a>00241 <span class="comment"></span>
-<a name="l00242"></a>00242 <span class="comment">    /**</span>
-<a name="l00243"></a>00243 <span class="comment">     * Evaluate the components of the gravity anomaly vector using the</span>
-<a name="l00244"></a>00244 <span class="comment">     * spherical approximation.</span>
-<a name="l00245"></a>00245 <span class="comment">     *</span>
-<a name="l00246"></a>00246 <span class="comment">     * @param[in] lat the geographic latitude (degrees).</span>
-<a name="l00247"></a>00247 <span class="comment">     * @param[in] lon the geographic longitude (degrees).</span>
-<a name="l00248"></a>00248 <span class="comment">     * @param[in] h the height above the ellipsoid (meters).</span>
-<a name="l00249"></a>00249 <span class="comment">     * @param[out] Dg01 the gravity anomaly (m s<sup>-2</sup>).</span>
-<a name="l00250"></a>00250 <span class="comment">     * @param[out] xi the northerly component of the deflection of the vertical</span>
-<a name="l00251"></a>00251 <span class="comment">     *  (degrees).</span>
-<a name="l00252"></a>00252 <span class="comment">     * @param[out] eta the easterly component of the deflection of the vertical</span>
-<a name="l00253"></a>00253 <span class="comment">     *  (degrees).</span>
-<a name="l00254"></a>00254 <span class="comment">     *</span>
-<a name="l00255"></a>00255 <span class="comment">     * The spherical approximation (see Heiskanen and Moritz, Sec 2-14) is used</span>
-<a name="l00256"></a>00256 <span class="comment">     * so that the results of the NGA codes are reproduced accurately.</span>
-<a name="l00257"></a>00257 <span class="comment">     * approximations used here.  Details are given in \ref gravitygeoid.</span>
-<a name="l00258"></a>00258 <span class="comment">     **********************************************************************/</span>
-<a name="l00259"></a>00259     <span class="keywordtype">void</span> SphericalAnomaly(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h,
-<a name="l00260"></a>00260                           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Dg01, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& xi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& eta) <span class="keyword">const</span> <span class="keywordflow">throw</span>();<span class="comment"></span>
-<a name="l00261"></a>00261 <span class="comment">    ///@}</span>
-<a name="l00262"></a>00262 <span class="comment"></span><span class="comment"></span>
-<a name="l00263"></a>00263 <span class="comment">    /** \name Compute gravity in geocentric coordinates</span>
-<a name="l00264"></a>00264 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00265"></a>00265 <span class="comment">    ///@{</span>
-<a name="l00266"></a>00266 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00267"></a>00267 <span class="comment">     * Evaluate the components of the acceleration due to gravity and the</span>
-<a name="l00268"></a>00268 <span class="comment">     * centrifugal acceleration in geocentric coordinates.</span>
-<a name="l00269"></a>00269 <span class="comment">     *</span>
-<a name="l00270"></a>00270 <span class="comment">     * @param[in] X geocentric coordinate of point (meters).</span>
-<a name="l00271"></a>00271 <span class="comment">     * @param[in] Y geocentric coordinate of point (meters).</span>
-<a name="l00272"></a>00272 <span class="comment">     * @param[in] Z geocentric coordinate of point (meters).</span>
-<a name="l00273"></a>00273 <span class="comment">     * @param[out] gX the \e X component of the acceleration</span>
-<a name="l00274"></a>00274 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00275"></a>00275 <span class="comment">     * @param[out] gY the \e Y component of the acceleration</span>
-<a name="l00276"></a>00276 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00277"></a>00277 <span class="comment">     * @param[out] gZ the \e Z component of the acceleration</span>
-<a name="l00278"></a>00278 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00279"></a>00279 <span class="comment">     * @return \e W = \e V + \e Phi the sum of the gravitational and</span>
-<a name="l00280"></a>00280 <span class="comment">     *   centrifugal potentials (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00281"></a>00281 <span class="comment">     *</span>
-<a name="l00282"></a>00282 <span class="comment">     * This calls NormalGravity::U for  ReferenceEllipsoid().</span>
-<a name="l00283"></a>00283 <span class="comment">     **********************************************************************/</span>
-<a name="l00284"></a>00284     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> W(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Z,
-<a name="l00285"></a>00285                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gX, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gY, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00286"></a>00286 <span class="comment"></span>
-<a name="l00287"></a>00287 <span class="comment">    /**</span>
-<a name="l00288"></a>00288 <span class="comment">     * Evaluate the components of the acceleration due to gravity in geocentric</span>
-<a name="l00289"></a>00289 <span class="comment">     * coordinates.</span>
-<a name="l00290"></a>00290 <span class="comment">     *</span>
-<a name="l00291"></a>00291 <span class="comment">     * @param[in] X geocentric coordinate of point (meters).</span>
-<a name="l00292"></a>00292 <span class="comment">     * @param[in] Y geocentric coordinate of point (meters).</span>
-<a name="l00293"></a>00293 <span class="comment">     * @param[in] Z geocentric coordinate of point (meters).</span>
-<a name="l00294"></a>00294 <span class="comment">     * @param[out] GX the \e X component of the acceleration</span>
-<a name="l00295"></a>00295 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00296"></a>00296 <span class="comment">     * @param[out] GY the \e Y component of the acceleration</span>
-<a name="l00297"></a>00297 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00298"></a>00298 <span class="comment">     * @param[out] GZ the \e Z component of the acceleration</span>
-<a name="l00299"></a>00299 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00300"></a>00300 <span class="comment">     * @return \e V = \e W - \e Phi the gravitational potential</span>
-<a name="l00301"></a>00301 <span class="comment">     *   (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00302"></a>00302 <span class="comment">     **********************************************************************/</span>
-<a name="l00303"></a>00303     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> V(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Z,
-<a name="l00304"></a>00304                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& GX, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& GY, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& GZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00305"></a>00305 <span class="comment"></span>
-<a name="l00306"></a>00306 <span class="comment">    /**</span>
-<a name="l00307"></a>00307 <span class="comment">     * Evaluate the components of the gravity disturbance in geocentric</span>
-<a name="l00308"></a>00308 <span class="comment">     * coordinates.</span>
-<a name="l00309"></a>00309 <span class="comment">     *</span>
-<a name="l00310"></a>00310 <span class="comment">     * @param[in] X geocentric coordinate of point (meters).</span>
-<a name="l00311"></a>00311 <span class="comment">     * @param[in] Y geocentric coordinate of point (meters).</span>
-<a name="l00312"></a>00312 <span class="comment">     * @param[in] Z geocentric coordinate of point (meters).</span>
-<a name="l00313"></a>00313 <span class="comment">     * @param[out] deltaX the \e X component of the gravity disturbance</span>
-<a name="l00314"></a>00314 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00315"></a>00315 <span class="comment">     * @param[out] deltaY the \e Y component of the gravity disturbance</span>
-<a name="l00316"></a>00316 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00317"></a>00317 <span class="comment">     * @param[out] deltaZ the \e Z component of the gravity disturbance</span>
-<a name="l00318"></a>00318 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00319"></a>00319 <span class="comment">     * @return \e T = \e W - \e U the disturbing potential (also called the</span>
-<a name="l00320"></a>00320 <span class="comment">     *   anomalous potential) (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00321"></a>00321 <span class="comment">     **********************************************************************/</span>
-<a name="l00322"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a257022f1f125d88b0a6efdccfc5e7a41">00322</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real T(real X, real Y, real Z,
-<a name="l00323"></a>00323                  real& deltaX, real& deltaY, real& deltaZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
-<a name="l00324"></a>00324     { <span class="keywordflow">return</span> InternalT(X, Y, Z, deltaX, deltaY, deltaZ, <span class="keyword">true</span>, <span class="keyword">true</span>); }
-<a name="l00325"></a>00325 <span class="comment"></span>
-<a name="l00326"></a>00326 <span class="comment">    /**</span>
-<a name="l00327"></a>00327 <span class="comment">     * Evaluate disturbing potential in geocentric coordinates.</span>
-<a name="l00328"></a>00328 <span class="comment">     *</span>
-<a name="l00329"></a>00329 <span class="comment">     * @param[in] X geocentric coordinate of point (meters).</span>
-<a name="l00330"></a>00330 <span class="comment">     * @param[in] Y geocentric coordinate of point (meters).</span>
-<a name="l00331"></a>00331 <span class="comment">     * @param[in] Z geocentric coordinate of point (meters).</span>
-<a name="l00332"></a>00332 <span class="comment">     * @return \e T = \e W - \e U the disturbing potential (also called the</span>
-<a name="l00333"></a>00333 <span class="comment">     *   anomalous potential) (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00334"></a>00334 <span class="comment">     **********************************************************************/</span>
-<a name="l00335"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a690657dedac8ccea22052eda2829fea3">00335</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityModel.html#a690657dedac8ccea22052eda2829fea3">T</a>(real X, real Y, real Z) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00336"></a>00336       real dummy;
-<a name="l00337"></a>00337       <span class="keywordflow">return</span> InternalT(X, Y, Z, dummy, dummy, dummy, <span class="keyword">false</span>, <span class="keyword">true</span>);
-<a name="l00338"></a>00338     }
-<a name="l00339"></a>00339 <span class="comment"></span>
-<a name="l00340"></a>00340 <span class="comment">    /**</span>
-<a name="l00341"></a>00341 <span class="comment">     * Evaluate the components of the acceleration due to normal gravity and the</span>
-<a name="l00342"></a>00342 <span class="comment">     * centrifugal acceleration in geocentric coordinates.</span>
-<a name="l00343"></a>00343 <span class="comment">     *</span>
-<a name="l00344"></a>00344 <span class="comment">     * @param[in] X geocentric coordinate of point (meters).</span>
-<a name="l00345"></a>00345 <span class="comment">     * @param[in] Y geocentric coordinate of point (meters).</span>
-<a name="l00346"></a>00346 <span class="comment">     * @param[in] Z geocentric coordinate of point (meters).</span>
-<a name="l00347"></a>00347 <span class="comment">     * @param[out] gammaX the \e X component of the normal acceleration</span>
-<a name="l00348"></a>00348 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00349"></a>00349 <span class="comment">     * @param[out] gammaY the \e Y component of the normal acceleration</span>
-<a name="l00350"></a>00350 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00351"></a>00351 <span class="comment">     * @param[out] gammaZ the \e Z component of the normal acceleration</span>
-<a name="l00352"></a>00352 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00353"></a>00353 <span class="comment">     * @return \e U = <i>V</i><sub>0</sub> + \e Phi the sum of the</span>
-<a name="l00354"></a>00354 <span class="comment">     *   normal gravitational and centrifugal potentials</span>
-<a name="l00355"></a>00355 <span class="comment">     *   (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00356"></a>00356 <span class="comment">     *</span>
-<a name="l00357"></a>00357 <span class="comment">     * This calls NormalGravity::U for  ReferenceEllipsoid().</span>
-<a name="l00358"></a>00358 <span class="comment">     **********************************************************************/</span>
-<a name="l00359"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af368d4f9015e076e5cc57ad87b8a185f">00359</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real U(real X, real Y, real Z,
-<a name="l00360"></a>00360                  real& gammaX, real& gammaY, real& gammaZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
-<a name="l00361"></a>00361     { <span class="keywordflow">return</span> _earth.U(X, Y, Z, gammaX, gammaY, gammaZ); }
-<a name="l00362"></a>00362 <span class="comment"></span>
-<a name="l00363"></a>00363 <span class="comment">    /**</span>
-<a name="l00364"></a>00364 <span class="comment">     * Evaluate the centrifugal acceleration in geocentric coordinates.</span>
-<a name="l00365"></a>00365 <span class="comment">     *</span>
-<a name="l00366"></a>00366 <span class="comment">     * @param[in] X geocentric coordinate of point (meters).</span>
-<a name="l00367"></a>00367 <span class="comment">     * @param[in] Y geocentric coordinate of point (meters).</span>
-<a name="l00368"></a>00368 <span class="comment">     * @param[out] fX the \e X component of the centrifugal acceleration</span>
-<a name="l00369"></a>00369 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00370"></a>00370 <span class="comment">     * @param[out] fY the \e Y component of the centrifugal acceleration</span>
-<a name="l00371"></a>00371 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00372"></a>00372 <span class="comment">     * @return \e Phi the centrifugal potential (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00373"></a>00373 <span class="comment">     *</span>
-<a name="l00374"></a>00374 <span class="comment">     * This calls NormalGravity::Phi for  ReferenceEllipsoid().</span>
-<a name="l00375"></a>00375 <span class="comment">     **********************************************************************/</span>
-<a name="l00376"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a80477ccafa1049964ee0cef40ae2eea6">00376</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Phi(real X, real Y, real& fX, real& fY) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
-<a name="l00377"></a>00377     { <span class="keywordflow">return</span> _earth.Phi(X, Y, fX, fY); }<span class="comment"></span>
-<a name="l00378"></a>00378 <span class="comment">    ///@}</span>
-<a name="l00379"></a>00379 <span class="comment"></span><span class="comment"></span>
-<a name="l00380"></a>00380 <span class="comment">    /** \name Compute gravity on a circle of constant latitude</span>
-<a name="l00381"></a>00381 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00382"></a>00382 <span class="comment">    ///@{</span>
-<a name="l00383"></a>00383 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00384"></a>00384 <span class="comment">     * Create a GravityCircle object to allow the gravity field at many points</span>
-<a name="l00385"></a>00385 <span class="comment">     * with constant \e lat and \e h and varying \e lon to be computed</span>
-<a name="l00386"></a>00386 <span class="comment">     * efficiently.</span>
-<a name="l00387"></a>00387 <span class="comment">     *</span>
-<a name="l00388"></a>00388 <span class="comment">     * @param[in] lat latitude of the point (degrees).</span>
-<a name="l00389"></a>00389 <span class="comment">     * @param[in] h the height of the point above the ellipsoid (meters).</span>
-<a name="l00390"></a>00390 <span class="comment">     * @param[in] caps bitor'ed combination of GravityModel::mask values</span>
-<a name="l00391"></a>00391 <span class="comment">     *   specifying the capabilities of the resulting GravityCircle object.</span>
-<a name="l00392"></a>00392 <span class="comment">     * @return a GravityCircle object whose member functions computes the</span>
-<a name="l00393"></a>00393 <span class="comment">     *   gravitational field at a particular values of \e lon.</span>
-<a name="l00394"></a>00394 <span class="comment">     *</span>
-<a name="l00395"></a>00395 <span class="comment">     * The GravityModel::mask values are</span>
-<a name="l00396"></a>00396 <span class="comment">     * - \e caps |= GravityModel::GRAVITY</span>
-<a name="l00397"></a>00397 <span class="comment">     * - \e caps |= GravityModel::DISTURBANCE</span>
-<a name="l00398"></a>00398 <span class="comment">     * - \e caps |= GravityModel::DISTURBING_POTENTIAL</span>
-<a name="l00399"></a>00399 <span class="comment">     * - \e caps |= GravityModel::SPHERICAL_ANOMALY</span>
-<a name="l00400"></a>00400 <span class="comment">     * - \e caps |= GravityModel::GEOID_HEIGHT</span>
-<a name="l00401"></a>00401 <span class="comment">     * .</span>
-<a name="l00402"></a>00402 <span class="comment">     * The default value of \e caps is GravityModel::ALL which turns on all the</span>
-<a name="l00403"></a>00403 <span class="comment">     * capabilities.  If an unsupported function is invoked, it will return</span>
-<a name="l00404"></a>00404 <span class="comment">     * NaNs.  Note that GravityModel::GEOID_HEIGHT will only be honored if \e h</span>
-<a name="l00405"></a>00405 <span class="comment">     * = 0.</span>
-<a name="l00406"></a>00406 <span class="comment">     *</span>
-<a name="l00407"></a>00407 <span class="comment">     * If the field at several points on a circle of latitude need to be</span>
-<a name="l00408"></a>00408 <span class="comment">     * calculated then creating a GravityCircle object and using its member</span>
-<a name="l00409"></a>00409 <span class="comment">     * functions will be substantially faster, especially for high-degree</span>
-<a name="l00410"></a>00410 <span class="comment">     * models.  See \ref gravityparallel for an example of using GravityCircle</span>
-<a name="l00411"></a>00411 <span class="comment">     * (together with OpenMP) to speed up the computation of geoid heights.</span>
-<a name="l00412"></a>00412 <span class="comment">     **********************************************************************/</span>
-<a name="l00413"></a>00413     <a class="code" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> Circle(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h, <span class="keywordtype">unsigned</span> caps = ALL) <span class="keyword">const</span>;<span class="comment"></span>
-<a name="l00414"></a>00414 <span class="comment">    ///@}</span>
-<a name="l00415"></a>00415 <span class="comment"></span><span class="comment"></span>
-<a name="l00416"></a>00416 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00417"></a>00417 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00418"></a>00418 <span class="comment">    ///@{</span>
-<a name="l00419"></a>00419 <span class="comment"></span><span class="comment"></span>
-<a name="l00420"></a>00420 <span class="comment">    /**</span>
-<a name="l00421"></a>00421 <span class="comment">     * @return the NormalGravity object for the reference ellipsoid.</span>
-<a name="l00422"></a>00422 <span class="comment">     **********************************************************************/</span>
-<a name="l00423"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">00423</a>     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a>& <a class="code" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">retu [...]
-<a name="l00424"></a>00424 <span class="comment"></span>
-<a name="l00425"></a>00425 <span class="comment">    /**</span>
-<a name="l00426"></a>00426 <span class="comment">     * @return the description of the gravity model, if available, in the data</span>
-<a name="l00427"></a>00427 <span class="comment">     *   file; if absent, return "NONE".</span>
-<a name="l00428"></a>00428 <span class="comment">     **********************************************************************/</span>
-<a name="l00429"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#af2c1c74254e3193adb155987f6dd0a59">00429</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1GravityModel.html#af2c1c74254e3193adb155987f6dd0a59">Description</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _description; }
-<a name="l00430"></a>00430 <span class="comment"></span>
-<a name="l00431"></a>00431 <span class="comment">    /**</span>
-<a name="l00432"></a>00432 <span class="comment">     * @return date of the model; if absent, return "UNKNOWN".</span>
-<a name="l00433"></a>00433 <span class="comment">     **********************************************************************/</span>
-<a name="l00434"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#acbed448c2423cd45e800d03fab059500">00434</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1GravityModel.html#acbed448c2423cd45e800d03fab059500">DateTime</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _date; }
-<a name="l00435"></a>00435 <span class="comment"></span>
-<a name="l00436"></a>00436 <span class="comment">    /**</span>
-<a name="l00437"></a>00437 <span class="comment">     * @return full file name used to load the gravity model.</span>
-<a name="l00438"></a>00438 <span class="comment">     **********************************************************************/</span>
-<a name="l00439"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a26a87d363713ba3d1aa1b16da2fc2f27">00439</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1GravityModel.html#a26a87d363713ba3d1aa1b16da2fc2f27">GravityFile</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _filename; }
-<a name="l00440"></a>00440 <span class="comment"></span>
-<a name="l00441"></a>00441 <span class="comment">    /**</span>
-<a name="l00442"></a>00442 <span class="comment">     * @return "name" used to load the gravity model (from the first argument</span>
-<a name="l00443"></a>00443 <span class="comment">     *   of the constructor, but this may be overridden by the model file).</span>
-<a name="l00444"></a>00444 <span class="comment">     **********************************************************************/</span>
-<a name="l00445"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a9ca1191e449bf7c04595ebd8a299af78">00445</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1GravityModel.html#a9ca1191e449bf7c04595ebd8a299af78">GravityModelName</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _name; }
-<a name="l00446"></a>00446 <span class="comment"></span>
-<a name="l00447"></a>00447 <span class="comment">    /**</span>
-<a name="l00448"></a>00448 <span class="comment">     * @return directory used to load the gravity model.</span>
-<a name="l00449"></a>00449 <span class="comment">     **********************************************************************/</span>
-<a name="l00450"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a17f2da4cd5abbb5f38f1b90d75975898">00450</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1GravityModel.html#a17f2da4cd5abbb5f38f1b90d75975898">GravityModelDirectory</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _dir; }
-<a name="l00451"></a>00451 <span class="comment"></span>
-<a name="l00452"></a>00452 <span class="comment">    /**</span>
-<a name="l00453"></a>00453 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).</span>
-<a name="l00454"></a>00454 <span class="comment">     **********************************************************************/</span>
-<a name="l00455"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a07f361e231e1725a4f8e3c37a06cf304">00455</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityModel.html#a07f361e231e1725a4f8e3c37a06cf304">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.MajorRadius(); }
-<a name="l00456"></a>00456 <span class="comment"></span>
-<a name="l00457"></a>00457 <span class="comment">    /**</span>
-<a name="l00458"></a>00458 <span class="comment">     * @return \e GM the mass constant of the model</span>
-<a name="l00459"></a>00459 <span class="comment">     *   (m<sup>3</sup> s<sup>-2</sup>); this is the product of \e G the</span>
-<a name="l00460"></a>00460 <span class="comment">     *   gravitational constant and \e M the mass of the earth (usually</span>
-<a name="l00461"></a>00461 <span class="comment">     *   including the mass of the earth's atmosphere).</span>
-<a name="l00462"></a>00462 <span class="comment">     **********************************************************************/</span>
-<a name="l00463"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#aa63d1c6e71abfa9455df695f4a3e6bdd">00463</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityModel.html#aa63d1c6e71abfa9455df695f4a3e6bdd">MassConstant</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _GMmodel; }
-<a name="l00464"></a>00464 <span class="comment"></span>
-<a name="l00465"></a>00465 <span class="comment">    /**</span>
-<a name="l00466"></a>00466 <span class="comment">     * @return \e GM the mass constant of the ReferenceEllipsoid()</span>
-<a name="l00467"></a>00467 <span class="comment">     *   (m<sup>3</sup> s<sup>-2</sup>).</span>
-<a name="l00468"></a>00468 <span class="comment">     **********************************************************************/</span>
-<a name="l00469"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#a4e6b9d48f26544a45c5509a87eb334e7">00469</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real ReferenceMassConstant() <span class="keyword">const</span> throw()
-<a name="l00470"></a>00470     { <span class="keywordflow">return</span> _earth.MassConstant(); }
-<a name="l00471"></a>00471 <span class="comment"></span>
-<a name="l00472"></a>00472 <span class="comment">    /**</span>
-<a name="l00473"></a>00473 <span class="comment">     * @return \e omega the angular velocity of the model and the</span>
-<a name="l00474"></a>00474 <span class="comment">     *   ReferenceEllipsoid() (rad s<sup>-1</sup>).</span>
-<a name="l00475"></a>00475 <span class="comment">     **********************************************************************/</span>
-<a name="l00476"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#aeb3d751ba7719e57e0266b65ee7d63d8">00476</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real AngularVelocity() <span class="keyword">const</span> throw()
-<a name="l00477"></a>00477     { <span class="keywordflow">return</span> _earth.AngularVelocity(); }
-<a name="l00478"></a>00478 <span class="comment"></span>
-<a name="l00479"></a>00479 <span class="comment">    /**</span>
-<a name="l00480"></a>00480 <span class="comment">     * @return \e f the flattening of the ellipsoid.</span>
-<a name="l00481"></a>00481 <span class="comment">     **********************************************************************/</span>
-<a name="l00482"></a><a class="code" href="classGeographicLib_1_1GravityModel.html#aa2316f6d328435417627d49046c45308">00482</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1GravityModel.html#aa2316f6d328435417627d49046c45308">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.Flattening(); }<span class=" [...]
-<a name="l00483"></a>00483 <span class="comment">    ///@}</span>
-<a name="l00484"></a>00484 <span class="comment"></span><span class="comment"></span>
-<a name="l00485"></a>00485 <span class="comment">    /**</span>
-<a name="l00486"></a>00486 <span class="comment">     * @return the default path for gravity model data files.</span>
-<a name="l00487"></a>00487 <span class="comment">     *</span>
-<a name="l00488"></a>00488 <span class="comment">     * This is the value of the environment variable GRAVITY_PATH, if set;</span>
-<a name="l00489"></a>00489 <span class="comment">     * otherwise, it is $GEOGRAPHICLIB_DATA/gravity if the environment variable</span>
-<a name="l00490"></a>00490 <span class="comment">     * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default</span>
-<a name="l00491"></a>00491 <span class="comment">     * (/usr/local/share/GeographicLib/gravity on non-Windows systems and</span>
-<a name="l00492"></a>00492 <span class="comment">     * C:/Documents and Settings/All Users/Application</span>
-<a name="l00493"></a>00493 <span class="comment">     * Data/GeographicLib/gravity on Windows systems).</span>
-<a name="l00494"></a>00494 <span class="comment">     **********************************************************************/</span>
-<a name="l00495"></a>00495     <span class="keyword">static</span> std::string DefaultGravityPath();
-<a name="l00496"></a>00496 <span class="comment"></span>
-<a name="l00497"></a>00497 <span class="comment">    /**</span>
-<a name="l00498"></a>00498 <span class="comment">     * @return the default name for the gravity model.</span>
-<a name="l00499"></a>00499 <span class="comment">     *</span>
-<a name="l00500"></a>00500 <span class="comment">     * This is the value of the environment variable GRAVITY_NAME, if set,</span>
-<a name="l00501"></a>00501 <span class="comment">     * otherwise, it is "egm96".  The GravityModel class does not use</span>
-<a name="l00502"></a>00502 <span class="comment">     * this function; it is just provided as a convenience for a calling</span>
-<a name="l00503"></a>00503 <span class="comment">     * program when constructing a GravityModel object.</span>
-<a name="l00504"></a>00504 <span class="comment">     **********************************************************************/</span>
-<a name="l00505"></a>00505     <span class="keyword">static</span> std::string DefaultGravityName();
-<a name="l00506"></a>00506   };
-<a name="l00507"></a>00507 
-<a name="l00508"></a>00508 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00511"></a>00511 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
-<a name="l00512"></a>00512 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00513"></a>00513 <span class="preprocessor"></span>
-<a name="l00514"></a>00514 <span class="preprocessor">#endif  // GEOGRAPHICLIB_GRAVITYMODEL_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Gravity_8cpp.html b/doc/html/Gravity_8cpp.html
deleted file mode 100644
index 6e10611..0000000
--- a/doc/html/Gravity_8cpp.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Gravity.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">Gravity.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for evaluating gravity fields.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="GravityModel_8hpp_source.html">GeographicLib/GravityModel.hpp</a>></code><br/>
-<code>#include <<a class="el" href="GravityCircle_8hpp_source.html">GeographicLib/GravityCircle.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include "Gravity.usage"</code><br/>
-</div>
-<p><a href="Gravity_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="Gravity_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for evaluating gravity fields. </p>
-<p>Copyright (c) Charles Karney (2011, 2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o Gravity \ <a class="el" href="Gravity_8cpp.html" title="Command line utility for evaluating gravity fields.">Gravity.cpp</a> \ ../src/CircularEngine.cpp \ ../src/DMS.cpp \ ../src/Geocentric.cpp \ ../src/GravityCircle.cpp \ ../src/GravityModel.cpp \ ../src/NormalGravity.cpp \ ../src/SphericalEngine.cpp \ ../src/Utility.cpp</p>
-<p>See the <a href="Gravity.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="Gravity_8cpp_source.html">Gravity.cpp</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="Gravity.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Gravity_8cpp_source.html#l00036">36</a> of file <a class="el" href="Gravity_8cpp_source.html">Gravity.cpp</a>.</p>
-
-<p>References <a class="el" href="GravityModel_8cpp_source.html#l00356">GeographicLib::GravityModel::DefaultGravityName()</a>, <a class="el" href="DMS_8cpp_source.html#l00031">GeographicLib::DMS::Decode()</a>, <a class="el" href="DMS_8hpp_source.html#l00078">GeographicLib::DMS::LONGITUDE</a>, <a class="el" href="GravityModel_8cpp_source.html#l00343">GeographicLib::GravityModel::DefaultGravityPath()</a>, <a class="el" href="GravityModel_8hpp_source.html#l00439">GeographicLib::GravityModel [...]
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Gravity_8cpp_source.html b/doc/html/Gravity_8cpp_source.html
deleted file mode 100644
index 60ecfe3..0000000
--- a/doc/html/Gravity_8cpp_source.html
+++ /dev/null
@@ -1,389 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Gravity.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Gravity.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Gravity_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Gravity.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for evaluating gravity fields</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o Gravity \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       Gravity.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/CircularEngine.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/Geocentric.cpp \</span>
-<a name="l00015"></a>00015 <span class="comment"> *       ../src/GravityCircle.cpp \</span>
-<a name="l00016"></a>00016 <span class="comment"> *       ../src/GravityModel.cpp \</span>
-<a name="l00017"></a>00017 <span class="comment"> *       ../src/NormalGravity.cpp \</span>
-<a name="l00018"></a>00018 <span class="comment"> *       ../src/SphericalEngine.cpp \</span>
-<a name="l00019"></a>00019 <span class="comment"> *       ../src/Utility.cpp</span>
-<a name="l00020"></a>00020 <span class="comment"> *</span>
-<a name="l00021"></a>00021 <span class="comment"> * See the <a href="Gravity.1.html">man page</a> for usage</span>
-<a name="l00022"></a>00022 <span class="comment"> * information.</span>
-<a name="l00023"></a>00023 <span class="comment"> **********************************************************************/</span>
-<a name="l00024"></a>00024 
-<a name="l00025"></a>00025 <span class="preprocessor">#include <iostream></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <string></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <sstream></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <fstream></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="GravityModel_8hpp.html" title="Header for GeographicLib::GravityModel class.">GeographicLib/GravityModel.hpp</a>></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="GravityCircle_8hpp.html" title="Header for GeographicLib::GravityCircle class.">GeographicLib/GravityCircle.hpp</a>></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#include "Gravity.usage"</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a><a class="code" href="Gravity_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00036</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00037"></a>00037   <span class="keywordflow">try</span> {
-<a name="l00038"></a>00038     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00039"></a>00039     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00040"></a>00040     <span class="keywordtype">bool</span> verbose = <span class="keyword">false</span>;
-<a name="l00041"></a>00041     std::string dir;
-<a name="l00042"></a>00042     std::string model = <a class="code" href="classGeographicLib_1_1GravityModel.html#ad4a776d68b60e85275c0e580d3c7caba">GravityModel::DefaultGravityName</a>();
-<a name="l00043"></a>00043     std::string istring, ifile, ofile, cdelim;
-<a name="l00044"></a>00044     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>;
-<a name="l00045"></a>00045     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat = 0, h = 0;
-<a name="l00046"></a>00046     <span class="keywordtype">bool</span> circle = <span class="keyword">false</span>;
-<a name="l00047"></a>00047     <span class="keywordtype">int</span> prec = -1;
-<a name="l00048"></a>00048     <span class="keyword">enum</span> {
-<a name="l00049"></a>00049       GRAVITY = 0,
-<a name="l00050"></a>00050       DISTURBANCE = 1,
-<a name="l00051"></a>00051       ANOMALY = 2,
-<a name="l00052"></a>00052       UNDULATION = 3,
-<a name="l00053"></a>00053     };
-<a name="l00054"></a>00054     <span class="keywordtype">unsigned</span> mode = GRAVITY;
-<a name="l00055"></a>00055     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00056"></a>00056       std::string arg(argv[m]);
-<a name="l00057"></a>00057       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-n"</span>) {
-<a name="l00058"></a>00058         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00059"></a>00059         model = argv[m];
-<a name="l00060"></a>00060       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-d"</span>) {
-<a name="l00061"></a>00061         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00062"></a>00062         dir = argv[m];
-<a name="l00063"></a>00063       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-G"</span>)
-<a name="l00064"></a>00064         mode = GRAVITY;
-<a name="l00065"></a>00065       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-D"</span>)
-<a name="l00066"></a>00066         mode = DISTURBANCE;
-<a name="l00067"></a>00067       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-A"</span>)
-<a name="l00068"></a>00068         mode = ANOMALY;
-<a name="l00069"></a>00069       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-H"</span>)
-<a name="l00070"></a>00070         mode = UNDULATION;
-<a name="l00071"></a>00071       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-c"</span>) {
-<a name="l00072"></a>00072         <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00073"></a>00073         <span class="keywordflow">try</span> {
-<a name="l00074"></a>00074           <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>::flag ind;
-<a name="l00075"></a>00075           lat = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(std::string(argv[++m]), ind);
-<a name="l00076"></a>00076           <span class="keywordflow">if</span> (ind == <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">DMS::LONGITUDE</a>)
-<a name="l00077"></a>00077             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad hemisphere letter on latitude"</span>);
-<a name="l00078"></a>00078           <span class="keywordflow">if</span> (!(std::abs(lat) <= 90))
-<a name="l00079"></a>00079             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude not in [-90d, 90d]"</span>);
-<a name="l00080"></a>00080           h = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[++m]));
-<a name="l00081"></a>00081           circle = <span class="keyword">true</span>;
-<a name="l00082"></a>00082         }
-<a name="l00083"></a>00083         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00084"></a>00084           std::cerr << <span class="stringliteral">"Error decoding argument of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00085"></a>00085                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00086"></a>00086           <span class="keywordflow">return</span> 1;
-<a name="l00087"></a>00087         }
-<a name="l00088"></a>00088       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-p"</span>) {
-<a name="l00089"></a>00089         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00090"></a>00090         <span class="keywordflow">try</span> {
-<a name="l00091"></a>00091           prec = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<int>(std::string(argv[m]));
-<a name="l00092"></a>00092         }
-<a name="l00093"></a>00093         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&) {
-<a name="l00094"></a>00094           std::cerr << <span class="stringliteral">"Precision "</span> << argv[m] << <span class="stringliteral">" is not a number\n"</span>;
-<a name="l00095"></a>00095           <span class="keywordflow">return</span> 1;
-<a name="l00096"></a>00096         }
-<a name="l00097"></a>00097       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-v"</span>)
-<a name="l00098"></a>00098         verbose = <span class="keyword">true</span>;
-<a name="l00099"></a>00099       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00100"></a>00100         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00101"></a>00101         istring = argv[m];
-<a name="l00102"></a>00102       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00103"></a>00103         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00104"></a>00104         ifile = argv[m];
-<a name="l00105"></a>00105       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00106"></a>00106         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00107"></a>00107         ofile = argv[m];
-<a name="l00108"></a>00108       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00109"></a>00109         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00110"></a>00110         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00111"></a>00111           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00112"></a>00112           <span class="keywordflow">return</span> 1;
-<a name="l00113"></a>00113         }
-<a name="l00114"></a>00114         lsep = argv[m][0];
-<a name="l00115"></a>00115       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00116"></a>00116         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00117"></a>00117         cdelim = argv[m];
-<a name="l00118"></a>00118       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00119"></a>00119         std::cout
-<a name="l00120"></a>00120           << argv[0]
-<a name="l00121"></a>00121           << <span class="stringliteral">": $Id: c87c647c3e973929010cdb2fd5d1eaa6aa739eca $\n"</span>
-<a name="l00122"></a>00122           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00123"></a>00123         <span class="keywordflow">return</span> 0;
-<a name="l00124"></a>00124       } <span class="keywordflow">else</span> {
-<a name="l00125"></a>00125         <span class="keywordtype">int</span> retval = usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00126"></a>00126         <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-h"</span>)
-<a name="l00127"></a>00127           std::cout<< <span class="stringliteral">"\nDefault gravity path = \""</span>
-<a name="l00128"></a>00128                    << <a class="code" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">GravityModel::DefaultGravityPath</a>()
-<a name="l00129"></a>00129                    << <span class="stringliteral">"\"\nDefault gravity name = \""</span>
-<a name="l00130"></a>00130                    << <a class="code" href="classGeographicLib_1_1GravityModel.html#ad4a776d68b60e85275c0e580d3c7caba">GravityModel::DefaultGravityName</a>()
-<a name="l00131"></a>00131                    << <span class="stringliteral">"\"\n"</span>;
-<a name="l00132"></a>00132         <span class="keywordflow">return</span> retval;
-<a name="l00133"></a>00133       }
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00137"></a>00137       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00138"></a>00138       <span class="keywordflow">return</span> 1;
-<a name="l00139"></a>00139     }
-<a name="l00140"></a>00140     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00141"></a>00141     std::ifstream infile;
-<a name="l00142"></a>00142     std::istringstream instring;
-<a name="l00143"></a>00143     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00144"></a>00144       infile.open(ifile.c_str());
-<a name="l00145"></a>00145       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00146"></a>00146         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00147"></a>00147         <span class="keywordflow">return</span> 1;
-<a name="l00148"></a>00148       }
-<a name="l00149"></a>00149     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00150"></a>00150       std::string::size_type m = 0;
-<a name="l00151"></a>00151       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00152"></a>00152         m = istring.find(lsep, m);
-<a name="l00153"></a>00153         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00154"></a>00154           <span class="keywordflow">break</span>;
-<a name="l00155"></a>00155         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00156"></a>00156       }
-<a name="l00157"></a>00157       instring.str(istring);
-<a name="l00158"></a>00158     }
-<a name="l00159"></a>00159     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00160"></a>00160       (!istring.empty() ? &instring : &std::cin);
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     std::ofstream outfile;
-<a name="l00163"></a>00163     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00164"></a>00164     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00165"></a>00165       outfile.open(ofile.c_str());
-<a name="l00166"></a>00166       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00167"></a>00167         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00168"></a>00168         <span class="keywordflow">return</span> 1;
-<a name="l00169"></a>00169       }
-<a name="l00170"></a>00170     }
-<a name="l00171"></a>00171     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     <span class="keywordflow">switch</span> (mode) {
-<a name="l00174"></a>00174     <span class="keywordflow">case</span> GRAVITY:
-<a name="l00175"></a>00175       prec = std::min(16, prec < 0 ? 5 : prec);
-<a name="l00176"></a>00176       <span class="keywordflow">break</span>;
-<a name="l00177"></a>00177     <span class="keywordflow">case</span> DISTURBANCE:
-<a name="l00178"></a>00178     <span class="keywordflow">case</span> ANOMALY:
-<a name="l00179"></a>00179       prec = std::min(14, prec < 0 ? 3 : prec);
-<a name="l00180"></a>00180       <span class="keywordflow">break</span>;
-<a name="l00181"></a>00181     <span class="keywordflow">case</span> UNDULATION:
-<a name="l00182"></a>00182     <span class="keywordflow">default</span>:
-<a name="l00183"></a>00183       prec = std::min(12, prec < 0 ? 4 : prec);
-<a name="l00184"></a>00184       <span class="keywordflow">break</span>;
-<a name="l00185"></a>00185     }
-<a name="l00186"></a>00186     <span class="keywordtype">int</span> retval = 0;
-<a name="l00187"></a>00187     <span class="keywordflow">try</span> {
-<a name="l00188"></a>00188       <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> g(model, dir);
-<a name="l00189"></a>00189       <span class="keywordflow">if</span> (circle) {
-<a name="l00190"></a>00190         <span class="keywordflow">if</span> (!Math::isfinite<real>(h))
-<a name="l00191"></a>00191           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad height"</span>);
-<a name="l00192"></a>00192         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mode == UNDULATION && h != 0)
-<a name="l00193"></a>00193           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Height should be zero for geoid undulations"</span>);
-<a name="l00194"></a>00194       }
-<a name="l00195"></a>00195       <span class="keywordflow">if</span> (verbose) {
-<a name="l00196"></a>00196         std::cerr << <span class="stringliteral">"Gravity file: "</span> << g.<a class="code" href="classGeographicLib_1_1GravityModel.html#a26a87d363713ba3d1aa1b16da2fc2f27">GravityFile</a>()      << <span class="stringliteral">"\n"</span>
-<a name="l00197"></a>00197                   << <span class="stringliteral">"Name: "</span>         << g.<a class="code" href="classGeographicLib_1_1GravityModel.html#a9ca1191e449bf7c04595ebd8a299af78">GravityModelName</a>() << <span class="stringliteral">"\n"</span>
-<a name="l00198"></a>00198                   << <span class="stringliteral">"Description: "</span>  << g.<a class="code" href="classGeographicLib_1_1GravityModel.html#af2c1c74254e3193adb155987f6dd0a59">Description</a>()      << <span class="stringliteral">"\n"</span>
-<a name="l00199"></a>00199                   << <span class="stringliteral">"Date & Time: "</span>  << g.<a class="code" href="classGeographicLib_1_1GravityModel.html#acbed448c2423cd45e800d03fab059500">DateTime</a>()         << <span class="stringliteral">"\n"</span>;
-<a name="l00200"></a>00200       }
-<a name="l00201"></a>00201       <span class="keywordtype">unsigned</span> mask = (mode == GRAVITY ? <a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a>::GRAVITY :
-<a name="l00202"></a>00202                        (mode == DISTURBANCE ? <a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a>::DISTURBANCE :
-<a name="l00203"></a>00203                         (mode == ANOMALY ? <a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a>::SPHERICAL_ANOMALY :
-<a name="l00204"></a>00204                          <a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a>::GEOID_HEIGHT))); <span class="comment">// mode == UNDULATION</span>
-<a name="l00205"></a>00205       <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> c(circle ? g.<a class="code" href="classGeographicLib_1_1GravityModel.html#aadafafc09b9b707d47606da1e413d54f">Circle</a>(lat, h, mask) : <a class="code" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a>());
-<a name="l00206"></a>00206       std::string s, stra, strb;
-<a name="l00207"></a>00207       <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00208"></a>00208         <span class="keywordflow">try</span> {
-<a name="l00209"></a>00209           std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00210"></a>00210           <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00211"></a>00211             std::string::size_type m = s.find(cdelim);
-<a name="l00212"></a>00212             <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00213"></a>00213               eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00214"></a>00214               s = s.substr(0, m);
-<a name="l00215"></a>00215             }
-<a name="l00216"></a>00216           }
-<a name="l00217"></a>00217           std::istringstream str(s);
-<a name="l00218"></a>00218           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon;
-<a name="l00219"></a>00219           <span class="keywordflow">if</span> (circle) {
-<a name="l00220"></a>00220             <span class="keywordflow">if</span> (!(str >> strb))
-<a name="l00221"></a>00221               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00222"></a>00222             <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>::flag ind;
-<a name="l00223"></a>00223             lon = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(strb, ind);
-<a name="l00224"></a>00224             <span class="keywordflow">if</span> (ind == <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">DMS::LATITUDE</a>)
-<a name="l00225"></a>00225               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad hemisphere letter on "</span> + strb);
-<a name="l00226"></a>00226             <span class="keywordflow">if</span> (lon < -180 || lon > 360)
-<a name="l00227"></a>00227               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Longitude "</span> + strb + <span class="stringliteral">"not in [-180d, 360d]"</span>);
-<a name="l00228"></a>00228           } <span class="keywordflow">else</span> {
-<a name="l00229"></a>00229             <span class="keywordflow">if</span> (!(str >> stra >> strb))
-<a name="l00230"></a>00230               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00231"></a>00231             <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(stra, strb, lat, lon);
-<a name="l00232"></a>00232             h = 0;
-<a name="l00233"></a>00233             <span class="keywordflow">if</span> (!(str >> h))    <span class="comment">// h is optional</span>
-<a name="l00234"></a>00234               str.clear();
-<a name="l00235"></a>00235             <span class="keywordflow">if</span> (mode == UNDULATION && h != 0)
-<a name="l00236"></a>00236                 <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Height must be zero for geoid heights"</span>);
-<a name="l00237"></a>00237           }
-<a name="l00238"></a>00238           <span class="keywordflow">if</span> (str >> stra)
-<a name="l00239"></a>00239             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extra junk in input: "</span> + s);
-<a name="l00240"></a>00240           <span class="keywordflow">switch</span> (mode) {
-<a name="l00241"></a>00241           <span class="keywordflow">case</span> GRAVITY:
-<a name="l00242"></a>00242             {
-<a name="l00243"></a>00243               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> gx, gy, gz;
-<a name="l00244"></a>00244               <span class="keywordflow">if</span> (circle) {
-<a name="l00245"></a>00245                 c.Gravity(lon, gx, gy, gz);
-<a name="l00246"></a>00246               } <span class="keywordflow">else</span> {
-<a name="l00247"></a>00247                 g.<a class="code" href="classGeographicLib_1_1GravityModel.html#a2dc8bf4cfa3c1914f4c7e93a5a3b3eac">Gravity</a>(lat, lon, h, gx, gy, gz);
-<a name="l00248"></a>00248               }
-<a name="l00249"></a>00249               *output << Utility::str<real>(gx, prec) << <span class="stringliteral">" "</span>
-<a name="l00250"></a>00250                       << Utility::str<real>(gy, prec) << <span class="stringliteral">" "</span>
-<a name="l00251"></a>00251                       << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(gz, prec) << eol;
-<a name="l00252"></a>00252             }
-<a name="l00253"></a>00253             <span class="keywordflow">break</span>;
-<a name="l00254"></a>00254           <span class="keywordflow">case</span> DISTURBANCE:
-<a name="l00255"></a>00255             {
-<a name="l00256"></a>00256               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> deltax, deltay, deltaz;
-<a name="l00257"></a>00257               <span class="keywordflow">if</span> (circle) {
-<a name="l00258"></a>00258                 c.Disturbance(lon, deltax, deltay, deltaz);
-<a name="l00259"></a>00259               } <span class="keywordflow">else</span> {
-<a name="l00260"></a>00260                 g.<a class="code" href="classGeographicLib_1_1GravityModel.html#a75cf57146334d9ce0856222a6814ae6f">Disturbance</a>(lat, lon, h, deltax, deltay, deltaz);
-<a name="l00261"></a>00261               }
-<a name="l00262"></a>00262               <span class="comment">// Convert to mGals</span>
-<a name="l00263"></a>00263               *output << Utility::str<real>(deltax * 1e5, prec) << <span class="stringliteral">" "</span>
-<a name="l00264"></a>00264                       << Utility::str<real>(deltay * 1e5, prec) << <span class="stringliteral">" "</span>
-<a name="l00265"></a>00265                       << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(deltaz * 1e5, prec)
-<a name="l00266"></a>00266                       << eol;
-<a name="l00267"></a>00267             }
-<a name="l00268"></a>00268             <span class="keywordflow">break</span>;
-<a name="l00269"></a>00269           <span class="keywordflow">case</span> ANOMALY:
-<a name="l00270"></a>00270             {
-<a name="l00271"></a>00271               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Dg01, xi, eta;
-<a name="l00272"></a>00272               <span class="keywordflow">if</span> (circle)
-<a name="l00273"></a>00273                 c.SphericalAnomaly(lon, Dg01, xi, eta);
-<a name="l00274"></a>00274               <span class="keywordflow">else</span>
-<a name="l00275"></a>00275                 g.<a class="code" href="classGeographicLib_1_1GravityModel.html#aaf89eb4a9b7266f0aa2ef2c341fc264e">SphericalAnomaly</a>(lat, lon, h, Dg01, xi, eta);
-<a name="l00276"></a>00276               Dg01 *= 1e5;      <span class="comment">// Convert to mGals</span>
-<a name="l00277"></a>00277               xi *= 3600;       <span class="comment">// Convert to arcsecs</span>
-<a name="l00278"></a>00278               eta *= 3600;
-<a name="l00279"></a>00279               *output << Utility::str<real>(Dg01, prec) << <span class="stringliteral">" "</span>
-<a name="l00280"></a>00280                       << Utility::str<real>(xi, prec) << <span class="stringliteral">" "</span>
-<a name="l00281"></a>00281                       << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(eta, prec) << eol;
-<a name="l00282"></a>00282             }
-<a name="l00283"></a>00283             <span class="keywordflow">break</span>;
-<a name="l00284"></a>00284           <span class="keywordflow">case</span> UNDULATION:
-<a name="l00285"></a>00285           <span class="keywordflow">default</span>:
-<a name="l00286"></a>00286             {
-<a name="l00287"></a>00287               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> N = circle ? c.GeoidHeight(lon) : g.<a class="code" href="classGeographicLib_1_1GravityModel.html#a7e75bdba6b9c8e64cc64403335a6fba4">GeoidHeight</a>(lat, lon);
-<a name="l00288"></a>00288               *output << Utility::str<real>(N, prec) << eol;
-<a name="l00289"></a>00289             }
-<a name="l00290"></a>00290             <span class="keywordflow">break</span>;
-<a name="l00291"></a>00291           }
-<a name="l00292"></a>00292         }
-<a name="l00293"></a>00293         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00294"></a>00294           *output << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00295"></a>00295           retval = 1;
-<a name="l00296"></a>00296         }
-<a name="l00297"></a>00297       }
-<a name="l00298"></a>00298     }
-<a name="l00299"></a>00299     <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00300"></a>00300       std::cerr << <span class="stringliteral">"Error reading "</span> << model << <span class="stringliteral">": "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00301"></a>00301       retval = 1;
-<a name="l00302"></a>00302     }
-<a name="l00303"></a>00303     <span class="keywordflow">return</span> retval;
-<a name="l00304"></a>00304   }
-<a name="l00305"></a>00305   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00306"></a>00306     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00307"></a>00307     <span class="keywordflow">return</span> 1;
-<a name="l00308"></a>00308   }
-<a name="l00309"></a>00309   <span class="keywordflow">catch</span> (...) {
-<a name="l00310"></a>00310     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00311"></a>00311     <span class="keywordflow">return</span> 1;
-<a name="l00312"></a>00312   }
-<a name="l00313"></a>00313 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/LICENSE.txt b/doc/html/LICENSE.txt
deleted file mode 100644
index 692304c..0000000
--- a/doc/html/LICENSE.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-This license applies to GeographicLib, versions 1.12 and later.
-
-Copyright (c) 2008-2012, Charles Karney
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use, copy,
-modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/doc/html/LambertConformalConic_8cpp.html b/doc/html/LambertConformalConic_8cpp.html
deleted file mode 100644
index 278255a..0000000
--- a/doc/html/LambertConformalConic_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: LambertConformalConic.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">LambertConformalConic.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="LambertConformalConic_8hpp_source.html">GeographicLib/LambertConformalConic.hpp</a>></code><br/>
-</div>
-<p><a href="LambertConformalConic_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="LambertConformalConic_8cpp.html#adf8d4ab2a5f0e2571915d27d31758930">GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP</a>   "$Id: da8f6ce89092006a26946d671edca1a7836e7ce6 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="LambertConformalConic_8cpp_source.html">LambertConformalConic.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="adf8d4ab2a5f0e2571915d27d31758930"></a><!-- doxytag: member="LambertConformalConic.cpp::GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP" ref="adf8d4ab2a5f0e2571915d27d31758930" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP   "$Id: da8f6ce89092006a26946d671edca1a7836e7ce6 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8cpp_source.html#l00012">12</a> of file <a class="el" href="LambertConformalConic_8cpp_source.html">LambertConformalConic.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/LambertConformalConic_8cpp_source.html b/doc/html/LambertConformalConic_8cpp_source.html
deleted file mode 100644
index 5861534..0000000
--- a/doc/html/LambertConformalConic_8cpp_source.html
+++ /dev/null
@@ -1,545 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: LambertConformalConic.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">LambertConformalConic.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="LambertConformalConic_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file LambertConformalConic.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::LambertConformalConic class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="LambertConformalConic_8hpp.html" title="Header for GeographicLib::LambertConformalConic class.">GeographicLib/LambertConformalConic.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="LambertConformalConic_8cpp.html#adf8d4ab2a5f0e2571915d27d31758930">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: da8f6ce89092006a26946d671edca1a7836e7ce6 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="LambertConformalConic_8cpp.html#adf8d4ab2a5f0e2571915d27d31758930">GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="LambertConformalConic_8hpp.html#aac2fbd995d5b75016781c58b97093c67">GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> LambertConformalConic::eps_ =
-<a name="l00023"></a>00023     numeric_limits<real>::epsilon();
-<a name="l00024"></a>00024   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> LambertConformalConic::epsx_ = Math::sq(eps_);
-<a name="l00025"></a>00025   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> LambertConformalConic::tol_ = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.1) * sqrt(eps_);
-<a name="l00026"></a>00026   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> LambertConformalConic::ahypover_ =
-<a name="l00027"></a>00027     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(numeric_limits<real>::digits) * log(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(numeric_limits<real>::radix))
-<a name="l00028"></a>00028     + 2;
-<a name="l00029"></a>00029 
-<a name="l00030"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a21dc9fa160a5b96a1c11ab30af0eb129">00030</a>   LambertConformalConic::LambertConformalConic(real a, real f,
-<a name="l00031"></a>00031                                                real stdlat, real k0)
-<a name="l00032"></a>00032     : _a(a)
-<a name="l00033"></a>00033     , _f(f <= 1 ? f : 1/f)
-<a name="l00034"></a>00034     , _fm(1 - _f)
-<a name="l00035"></a>00035     , _e2(_f * (2 - _f))
-<a name="l00036"></a>00036     , _e(sqrt(abs(_e2)))
-<a name="l00037"></a>00037     , _e2m(1 - _e2)
-<a name="l00038"></a>00038   {
-<a name="l00039"></a>00039     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00040"></a>00040       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00041"></a>00041     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f) && _f < 1))
-<a name="l00042"></a>00042       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00043"></a>00043     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(k0) && k0 > 0))
-<a name="l00044"></a>00044       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00045"></a>00045     <span class="keywordflow">if</span> (!(abs(stdlat) <= 90))
-<a name="l00046"></a>00046       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude not in [-90, 90]"</span>);
-<a name="l00047"></a>00047     real
-<a name="l00048"></a>00048       phi = stdlat * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00049"></a>00049       sphi = sin(phi),
-<a name="l00050"></a>00050       cphi = abs(stdlat) != 90 ? cos(phi) : 0;
-<a name="l00051"></a>00051     Init(sphi, cphi, sphi, cphi, k0);
-<a name="l00052"></a>00052   }
-<a name="l00053"></a>00053 
-<a name="l00054"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a6273d61ce32ad6016471a7bd0e155ca4">00054</a>   <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a21dc9fa160a5b96a1c11ab30af0eb129">LambertConformalConic::LambertConformalConic</a>(real a, real f,
-<a name="l00055"></a>00055                                                real stdlat1, real stdlat2,
-<a name="l00056"></a>00056                                                real k1)
-<a name="l00057"></a>00057     : _a(a)
-<a name="l00058"></a>00058     , _f(f <= 1 ? f : 1/f)
-<a name="l00059"></a>00059     , _fm(1 - _f)
-<a name="l00060"></a>00060     , _e2(_f * (2 - _f))
-<a name="l00061"></a>00061     , _e(sqrt(abs(_e2)))
-<a name="l00062"></a>00062     , _e2m(1 - _e2)
-<a name="l00063"></a>00063   {
-<a name="l00064"></a>00064     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00065"></a>00065       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00066"></a>00066     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f) && _f < 1))
-<a name="l00067"></a>00067       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00068"></a>00068     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(k1) && k1 > 0))
-<a name="l00069"></a>00069       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00070"></a>00070     <span class="keywordflow">if</span> (!(abs(stdlat1) <= 90))
-<a name="l00071"></a>00071       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude 1 not in [-90, 90]"</span>);
-<a name="l00072"></a>00072     <span class="keywordflow">if</span> (!(abs(stdlat2) <= 90))
-<a name="l00073"></a>00073       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude 2 not in [-90, 90]"</span>);
-<a name="l00074"></a>00074     real
-<a name="l00075"></a>00075       phi1 = stdlat1 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00076"></a>00076       phi2 = stdlat2 * Math::degree<real>();
-<a name="l00077"></a>00077     Init(sin(phi1), abs(stdlat1) != 90 ? cos(phi1) : 0,
-<a name="l00078"></a>00078          sin(phi2), abs(stdlat2) != 90 ? cos(phi2) : 0, k1);
-<a name="l00079"></a>00079   }
-<a name="l00080"></a>00080 
-<a name="l00081"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a4d772372388f32029359b156dc43e4cd">00081</a>   <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a21dc9fa160a5b96a1c11ab30af0eb129">LambertConformalConic::LambertConformalConic</a>(real a, real f,
-<a name="l00082"></a>00082                                                real sinlat1, real coslat1,
-<a name="l00083"></a>00083                                                real sinlat2, real coslat2,
-<a name="l00084"></a>00084                                                real k1)
-<a name="l00085"></a>00085     : _a(a)
-<a name="l00086"></a>00086     , _f(f <= 1 ? f : 1/f)
-<a name="l00087"></a>00087     , _fm(1 - _f)
-<a name="l00088"></a>00088     , _e2(_f * (2 - _f))
-<a name="l00089"></a>00089     , _e(sqrt(abs(_e2)))
-<a name="l00090"></a>00090     , _e2m(1 - _e2)
-<a name="l00091"></a>00091   {
-<a name="l00092"></a>00092     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00093"></a>00093       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00094"></a>00094     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f) && _f < 1))
-<a name="l00095"></a>00095       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00096"></a>00096     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(k1) && k1 > 0))
-<a name="l00097"></a>00097       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00098"></a>00098     <span class="keywordflow">if</span> (!(coslat1 >= 0))
-<a name="l00099"></a>00099       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude 1 not in [-90, 90]"</span>);
-<a name="l00100"></a>00100     <span class="keywordflow">if</span> (!(coslat2 >= 0))
-<a name="l00101"></a>00101       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Standard latitude 2 not in [-90, 90]"</span>);
-<a name="l00102"></a>00102     <span class="keywordflow">if</span> (!(abs(sinlat1) <= 1 && coslat1 <= 1) || (coslat1 == 0 && sinlat1 == 0))
-<a name="l00103"></a>00103       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad sine/cosine of standard latitude 1"</span>);
-<a name="l00104"></a>00104     <span class="keywordflow">if</span> (!(abs(sinlat2) <= 1 && coslat2 <= 1) || (coslat2 == 0 && sinlat2 == 0))
-<a name="l00105"></a>00105       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad sine/cosine of standard latitude 2"</span>);
-<a name="l00106"></a>00106     <span class="keywordflow">if</span> (coslat1 == 0 || coslat2 == 0)
-<a name="l00107"></a>00107       <span class="keywordflow">if</span> (!(coslat1 == coslat2 && sinlat1 == sinlat2))
-<a name="l00108"></a>00108         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>
-<a name="l00109"></a>00109           (<span class="stringliteral">"Standard latitudes must be equal is either is a pole"</span>);
-<a name="l00110"></a>00110     Init(sinlat1, coslat1, sinlat2, coslat2, k1);
-<a name="l00111"></a>00111   }
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113   <span class="keywordtype">void</span> LambertConformalConic::Init(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi1,
-<a name="l00114"></a>00114                                    <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k1) <span class="keywordflow">throw</span>() {
-<a name="l00115"></a>00115     {
-<a name="l00116"></a>00116       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> r;
-<a name="l00117"></a>00117       r = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(sphi1, cphi1);
-<a name="l00118"></a>00118       sphi1 /= r; cphi1 /= r;
-<a name="l00119"></a>00119       r = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(sphi2, cphi2);
-<a name="l00120"></a>00120       sphi2 /= r; cphi2 /= r;
-<a name="l00121"></a>00121     }
-<a name="l00122"></a>00122     <span class="keywordtype">bool</span> polar = (cphi1 == 0);
-<a name="l00123"></a>00123     cphi1 = max(epsx_, cphi1);   <span class="comment">// Avoid singularities at poles</span>
-<a name="l00124"></a>00124     cphi2 = max(epsx_, cphi2);
-<a name="l00125"></a>00125     <span class="comment">// Determine hemisphere of tangent latitude</span>
-<a name="l00126"></a>00126     _sign = sphi1 + sphi2 >= 0 ? 1 : -1;
-<a name="l00127"></a>00127     <span class="comment">// Internally work with tangent latitude positive</span>
-<a name="l00128"></a>00128     sphi1 *= _sign; sphi2 *= _sign;
-<a name="l00129"></a>00129     <span class="keywordflow">if</span> (sphi1 > sphi2) {
-<a name="l00130"></a>00130       swap(sphi1, sphi2); swap(cphi1, cphi2); <span class="comment">// Make phi1 < phi2</span>
-<a name="l00131"></a>00131     }
-<a name="l00132"></a>00132     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00133"></a>00133       tphi1 = sphi1/cphi1, tphi2 = sphi2/cphi2, tphi0;
-<a name="l00134"></a>00134     <span class="comment">//</span>
-<a name="l00135"></a>00135     <span class="comment">// Snyder: 15-8: n = (log(m1) - log(m2))/(log(t1)-log(t2))</span>
-<a name="l00136"></a>00136     <span class="comment">//</span>
-<a name="l00137"></a>00137     <span class="comment">// m = cos(bet) = 1/sec(bet) = 1/sqrt(1+tan(bet)^2)</span>
-<a name="l00138"></a>00138     <span class="comment">// bet = parametric lat, tan(bet) = (1-f)*tan(phi)</span>
-<a name="l00139"></a>00139     <span class="comment">//</span>
-<a name="l00140"></a>00140     <span class="comment">// t = tan(pi/4-chi/2) = 1/(sec(chi) + tan(chi)) = sec(chi) - tan(chi)</span>
-<a name="l00141"></a>00141     <span class="comment">// log(t) = -asinh(tan(chi)) = -psi</span>
-<a name="l00142"></a>00142     <span class="comment">// chi = conformal lat</span>
-<a name="l00143"></a>00143     <span class="comment">// tan(chi) = tan(phi)*cosh(xi) - sinh(xi)*sec(phi)</span>
-<a name="l00144"></a>00144     <span class="comment">// xi = eatanhe(sin(phi)), eatanhe(x) = e * atanh(e*x)</span>
-<a name="l00145"></a>00145     <span class="comment">//</span>
-<a name="l00146"></a>00146     <span class="comment">// n = (log(sec(bet2))-log(sec(bet1)))/(asinh(tan(chi2))-asinh(tan(chi1)))</span>
-<a name="l00147"></a>00147     <span class="comment">//</span>
-<a name="l00148"></a>00148     <span class="comment">// Let log(sec(bet)) = b(tphi), asinh(tan(chi)) = c(tphi)</span>
-<a name="l00149"></a>00149     <span class="comment">// Then n = Db(tphi2, tphi1)/Dc(tphi2, tphi1)</span>
-<a name="l00150"></a>00150     <span class="comment">// In limit tphi2 -> tphi1, n -> sphi1</span>
-<a name="l00151"></a>00151     <span class="comment">//</span>
-<a name="l00152"></a>00152     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00153"></a>00153       tbet1 = _fm * tphi1, scbet1 = hyp(tbet1),
-<a name="l00154"></a>00154       tbet2 = _fm * tphi2, scbet2 = hyp(tbet2);
-<a name="l00155"></a>00155     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00156"></a>00156       scphi1 = 1/cphi1,
-<a name="l00157"></a>00157       xi1 = eatanhe(sphi1), shxi1 = sinh(xi1), chxi1 = hyp(shxi1),
-<a name="l00158"></a>00158       tchi1 = chxi1 * tphi1 - shxi1 * scphi1, scchi1 = hyp(tchi1),
-<a name="l00159"></a>00159       scphi2 = 1/cphi2,
-<a name="l00160"></a>00160       xi2 = eatanhe(sphi2), shxi2 = sinh(xi2), chxi2 = hyp(shxi2),
-<a name="l00161"></a>00161       tchi2 = chxi2 * tphi2 - shxi2 * scphi2, scchi2 = hyp(tchi2),
-<a name="l00162"></a>00162       psi1 = <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">Math::asinh</a>(tchi1);
-<a name="l00163"></a>00163     <span class="keywordflow">if</span> (tphi2 - tphi1 != 0) {
-<a name="l00164"></a>00164       <span class="comment">// Db(tphi2, tphi1)</span>
-<a name="l00165"></a>00165       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> num = Dlog1p(<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tbet2)/(1 + scbet2),
-<a name="l00166"></a>00166                         <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tbet1)/(1 + scbet1))
-<a name="l00167"></a>00167         * Dhyp(tbet2, tbet1, scbet2, scbet1) * _fm;
-<a name="l00168"></a>00168       <span class="comment">// Dc(tphi2, tphi1)</span>
-<a name="l00169"></a>00169       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> den = Dasinh(tphi2, tphi1, scphi2, scphi1)
-<a name="l00170"></a>00170         - Deatanhe(sphi2, sphi1) * Dsn(tphi2, tphi1, sphi2, sphi1);
-<a name="l00171"></a>00171       _n = num/den;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173       <span class="keywordflow">if</span> (_n < 0.25)
-<a name="l00174"></a>00174         _nc = sqrt((1 - _n) * (1 + _n));
-<a name="l00175"></a>00175       <span class="keywordflow">else</span> {
-<a name="l00176"></a>00176         <span class="comment">// Compute nc = cos(phi0) = sqrt((1 - n) * (1 + n)), evaluating 1 - n</span>
-<a name="l00177"></a>00177         <span class="comment">// carefully.  First write</span>
-<a name="l00178"></a>00178         <span class="comment">//</span>
-<a name="l00179"></a>00179         <span class="comment">// Dc(tphi2, tphi1) * (tphi2 - tphi1)</span>
-<a name="l00180"></a>00180         <span class="comment">//   = log(tchi2 + scchi2) - log(tchi1 + scchi1)</span>
-<a name="l00181"></a>00181         <span class="comment">//</span>
-<a name="l00182"></a>00182         <span class="comment">// then den * (1 - n) =</span>
-<a name="l00183"></a>00183         <span class="comment">// (log((tchi2 + scchi2)/(2*scbet2)) - log((tchi1 + scchi1)/(2*scbet1)))</span>
-<a name="l00184"></a>00184         <span class="comment">// / (tphi2 - tphi1)</span>
-<a name="l00185"></a>00185         <span class="comment">// = Dlog1p(a2, a1) * (tchi2+scchi2 + tchi1+scchi1)/(4*scbet1*scbet2)</span>
-<a name="l00186"></a>00186         <span class="comment">//   * fm * Q</span>
-<a name="l00187"></a>00187         <span class="comment">//</span>
-<a name="l00188"></a>00188         <span class="comment">// where</span>
-<a name="l00189"></a>00189         <span class="comment">// a1 = ( (tchi1 - scbet1) + (scchi1 - scbet1) ) / (2 * scbet1)</span>
-<a name="l00190"></a>00190         <span class="comment">// Q = ((scbet2 + scbet1)/fm)/((scchi2 + scchi1)/D(tchi2, tchi1))</span>
-<a name="l00191"></a>00191         <span class="comment">//     - (tbet2 + tbet1)/(scbet2 + scbet1)</span>
-<a name="l00192"></a>00192         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t;
-<a name="l00193"></a>00193         {
-<a name="l00194"></a>00194           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00195"></a>00195             <span class="comment">// s1 = (scbet1 - scchi1) * (scbet1 + scchi1)</span>
-<a name="l00196"></a>00196             s1 = (tphi1 * (2 * shxi1 * chxi1 * scphi1 - _e2 * tphi1) -
-<a name="l00197"></a>00197                   <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(shxi1) * (1 + 2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tphi1))),
-<a name="l00198"></a>00198             s2 = (tphi2 * (2 * shxi2 * chxi2 * scphi2 - _e2 * tphi2) -
-<a name="l00199"></a>00199                   <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(shxi2) * (1 + 2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tphi2))),
-<a name="l00200"></a>00200             <span class="comment">// t1 = scbet1 - tchi1</span>
-<a name="l00201"></a>00201             t1 = tchi1 < 0 ? scbet1 - tchi1 : (s1 + 1)/(scbet1 + tchi1),
-<a name="l00202"></a>00202             t2 = tchi2 < 0 ? scbet2 - tchi2 : (s2 + 1)/(scbet2 + tchi2),
-<a name="l00203"></a>00203             a2 = -(s2 / (scbet2 + scchi2) + t2) / (2 * scbet2),
-<a name="l00204"></a>00204             a1 = -(s1 / (scbet1 + scchi1) + t1) / (2 * scbet1);
-<a name="l00205"></a>00205           t = Dlog1p(a2, a1) / den;
-<a name="l00206"></a>00206         }
-<a name="l00207"></a>00207         <span class="comment">// multiply by (tchi2 + scchi2 + tchi1 + scchi1)/(4*scbet1*scbet2) * fm</span>
-<a name="l00208"></a>00208         t *= ( ( (tchi2 >= 0 ? scchi2 + tchi2 : 1/(scchi2 - tchi2)) +
-<a name="l00209"></a>00209                  (tchi1 >= 0 ? scchi1 + tchi1 : 1/(scchi1 - tchi1)) ) /
-<a name="l00210"></a>00210                (4 * scbet1 * scbet2) ) * _fm;
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212         <span class="comment">// Rewrite</span>
-<a name="l00213"></a>00213         <span class="comment">// Q = (1 - (tbet2 + tbet1)/(scbet2 + scbet1)) -</span>
-<a name="l00214"></a>00214         <span class="comment">//     (1 - ((scbet2 + scbet1)/fm)/((scchi2 + scchi1)/D(tchi2, tchi1)))</span>
-<a name="l00215"></a>00215         <span class="comment">//   = tbm - tam</span>
-<a name="l00216"></a>00216         <span class="comment">// where</span>
-<a name="l00217"></a>00217         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tbm = ( ((tbet1 > 0 ? 1/(scbet1+tbet1) : scbet1 - tbet1) +
-<a name="l00218"></a>00218                       (tbet2 > 0 ? 1/(scbet2+tbet2) : scbet2 - tbet2)) /
-<a name="l00219"></a>00219                      (scbet1+scbet2) );
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221         <span class="comment">// tam = (1 - ((scbet2+scbet1)/fm)/((scchi2+scchi1)/D(tchi2, tchi1)))</span>
-<a name="l00222"></a>00222         <span class="comment">//</span>
-<a name="l00223"></a>00223         <span class="comment">// Let</span>
-<a name="l00224"></a>00224         <span class="comment">//   (scbet2 + scbet1)/fm = scphi2 + scphi1 + dbet</span>
-<a name="l00225"></a>00225         <span class="comment">//   (scchi2 + scchi1)/D(tchi2, tchi1) = scphi2 + scphi1 + dchi</span>
-<a name="l00226"></a>00226         <span class="comment">// then</span>
-<a name="l00227"></a>00227         <span class="comment">//   tam = D(tchi2, tchi1) * (dchi - dbet) / (scchi1 + scchi2)</span>
-<a name="l00228"></a>00228         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00229"></a>00229           <span class="comment">// D(tchi2, tchi1)</span>
-<a name="l00230"></a>00230           dtchi = den / Dasinh(tchi2, tchi1, scchi2, scchi1),
-<a name="l00231"></a>00231           <span class="comment">// (scbet2 + scbet1)/fm - (scphi2 + scphi1)</span>
-<a name="l00232"></a>00232           dbet = (_e2/_fm) * ( 1 / (scbet2 + _fm * scphi2) +
-<a name="l00233"></a>00233                                1 / (scbet1 + _fm * scphi1) );
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235         <span class="comment">// dchi = (scchi2 + scchi1)/D(tchi2, tchi1) - (scphi2 + scphi1)</span>
-<a name="l00236"></a>00236         <span class="comment">// Let</span>
-<a name="l00237"></a>00237         <span class="comment">//    tzet = chxiZ * tphi - shxiZ * scphi</span>
-<a name="l00238"></a>00238         <span class="comment">//    tchi = tzet + nu</span>
-<a name="l00239"></a>00239         <span class="comment">//    scchi = sczet + mu</span>
-<a name="l00240"></a>00240         <span class="comment">// where</span>
-<a name="l00241"></a>00241         <span class="comment">//    xiZ = eatanhe(1), shxiZ = sinh(xiZ), chxiZ = cosh(xiZ)</span>
-<a name="l00242"></a>00242         <span class="comment">//    nu =   scphi * (shxiZ - shxi) - tphi * (chxiZ - chxi)</span>
-<a name="l00243"></a>00243         <span class="comment">//    mu = - scphi * (chxiZ - chxi) + tphi * (shxiZ - shxi)</span>
-<a name="l00244"></a>00244         <span class="comment">// then</span>
-<a name="l00245"></a>00245         <span class="comment">// dchi = ((mu2 + mu1) - D(nu2, nu1) * (scphi2 + scphi1)) /</span>
-<a name="l00246"></a>00246         <span class="comment">//         D(tchi2, tchi1)</span>
-<a name="l00247"></a>00247         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00248"></a>00248           xiZ = eatanhe(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1)), shxiZ = sinh(xiZ), chxiZ = hyp(shxiZ),
-<a name="l00249"></a>00249           <span class="comment">// These are differences not divided differences</span>
-<a name="l00250"></a>00250           <span class="comment">// dxiZ1 = xiZ - xi1; dshxiZ1 = shxiZ - shxi; dchxiZ1 = chxiZ - chxi</span>
-<a name="l00251"></a>00251           dxiZ1 = Deatanhe(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), sphi1)/(scphi1*(tphi1+scphi1)),
-<a name="l00252"></a>00252           dxiZ2 = Deatanhe(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), sphi2)/(scphi2*(tphi2+scphi2)),
-<a name="l00253"></a>00253           dshxiZ1 = Dsinh(xiZ, xi1, shxiZ, shxi1, chxiZ, chxi1) * dxiZ1,
-<a name="l00254"></a>00254           dshxiZ2 = Dsinh(xiZ, xi2, shxiZ, shxi2, chxiZ, chxi2) * dxiZ2,
-<a name="l00255"></a>00255           dchxiZ1 = Dhyp(shxiZ, shxi1, chxiZ, chxi1) * dshxiZ1,
-<a name="l00256"></a>00256           dchxiZ2 = Dhyp(shxiZ, shxi2, chxiZ, chxi2) * dshxiZ2,
-<a name="l00257"></a>00257           <span class="comment">// mu1 + mu2</span>
-<a name="l00258"></a>00258           amu12 = (- scphi1 * dchxiZ1 + tphi1 * dshxiZ1
-<a name="l00259"></a>00259                    - scphi2 * dchxiZ2 + tphi2 * dshxiZ2),
-<a name="l00260"></a>00260           <span class="comment">// D(xi2, xi1)</span>
-<a name="l00261"></a>00261           dxi = Deatanhe(sphi1, sphi2) * Dsn(tphi2, tphi1, sphi2, sphi1),
-<a name="l00262"></a>00262           <span class="comment">// D(nu2, nu1)</span>
-<a name="l00263"></a>00263           dnu12 =
-<a name="l00264"></a>00264           ( (_f * 4 * scphi2 * dshxiZ2 > _f * scphi1 * dshxiZ1 ?
-<a name="l00265"></a>00265              <span class="comment">// Use divided differences</span>
-<a name="l00266"></a>00266              (dshxiZ1 + dshxiZ2)/2 * Dhyp(tphi1, tphi2, scphi1, scphi2)
-<a name="l00267"></a>00267              - ( (scphi1 + scphi2)/2
-<a name="l00268"></a>00268                  * Dsinh(xi1, xi2, shxi1, shxi2, chxi1, chxi2) * dxi ) :
-<a name="l00269"></a>00269              <span class="comment">// Use ratio of differences</span>
-<a name="l00270"></a>00270              (scphi2 * dshxiZ2 - scphi1 * dshxiZ1)/(tphi2 - tphi1))
-<a name="l00271"></a>00271             + ( (tphi1 + tphi2)/2 * Dhyp(shxi1, shxi2, chxi1, chxi2)
-<a name="l00272"></a>00272                 * Dsinh(xi1, xi2, shxi1, shxi2, chxi1, chxi2) * dxi )
-<a name="l00273"></a>00273             - (dchxiZ1 + dchxiZ2)/2 ),
-<a name="l00274"></a>00274           <span class="comment">// dtchi * dchi</span>
-<a name="l00275"></a>00275           dchia = (amu12 - dnu12 * (scphi2 + scphi1)),
-<a name="l00276"></a>00276           tam = (dchia - dtchi * dbet) / (scchi1 + scchi2);
-<a name="l00277"></a>00277         t *= tbm - tam;
-<a name="l00278"></a>00278         _nc = sqrt(max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), t) * (1 + _n));
-<a name="l00279"></a>00279       }
-<a name="l00280"></a>00280       {
-<a name="l00281"></a>00281         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> r = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(_n, _nc);
-<a name="l00282"></a>00282         _n /= r;
-<a name="l00283"></a>00283         _nc /= r;
-<a name="l00284"></a>00284       }
-<a name="l00285"></a>00285       tphi0 = _n / _nc;
-<a name="l00286"></a>00286     } <span class="keywordflow">else</span> {
-<a name="l00287"></a>00287       tphi0 = tphi1;
-<a name="l00288"></a>00288       _nc = 1/hyp(tphi0);
-<a name="l00289"></a>00289       _n = tphi0 * _nc;
-<a name="l00290"></a>00290       <span class="keywordflow">if</span> (polar)
-<a name="l00291"></a>00291         _nc = 0;
-<a name="l00292"></a>00292     }
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294     _scbet0 = hyp(_fm * tphi0);
-<a name="l00295"></a>00295     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> shxi0 = sinh(eatanhe(_n));
-<a name="l00296"></a>00296     _tchi0 = tphi0 * hyp(shxi0) - shxi0 * hyp(tphi0); _scchi0 = hyp(_tchi0);
-<a name="l00297"></a>00297     _psi0 = <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">Math::asinh</a>(_tchi0);
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299     _lat0 = atan(_sign * tphi0) / Math::degree<real>();
-<a name="l00300"></a>00300     _t0nm1 = <a class="code" href="classGeographicLib_1_1Math.html#a2fd4e8930d9dd953352d25fc184d843e">Math::expm1</a>(- _n * _psi0); <span class="comment">// Snyder's t0^n - 1</span>
-<a name="l00301"></a>00301     <span class="comment">// a * k1 * m1/t1^n = a * k1 * m2/t2^n = a * k1 * n * (Snyder's F)</span>
-<a name="l00302"></a>00302     <span class="comment">// = a * k1 / (scbet1 * exp(-n * psi1))</span>
-<a name="l00303"></a>00303     _scale = _a * k1 / scbet1 *
-<a name="l00304"></a>00304       <span class="comment">// exp(n * psi1) = exp(- (1 - n) * psi1) * exp(psi1)</span>
-<a name="l00305"></a>00305       <span class="comment">// with (1-n) = nc^2/(1+n) and exp(-psi1) = scchi1 + tchi1</span>
-<a name="l00306"></a>00306       exp( - (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_nc)/(1 + _n)) * psi1 )
-<a name="l00307"></a>00307       * (tchi1 >= 0 ? scchi1 + tchi1 : 1 / (scchi1 - tchi1));
-<a name="l00308"></a>00308     <span class="comment">// Scale at phi0 = k0 = k1 * (scbet0*exp(-n*psi0))/(scbet1*exp(-n*psi1))</span>
-<a name="l00309"></a>00309     <span class="comment">//                    = k1 * scbet0/scbet1 * exp(n * (psi1 - psi0))</span>
-<a name="l00310"></a>00310     <span class="comment">// psi1 - psi0 = Dasinh(tchi1, tchi0) * (tchi1 - tchi0)</span>
-<a name="l00311"></a>00311     _k0 = k1 * (_scbet0/scbet1) *
-<a name="l00312"></a>00312       exp( - (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_nc)/(1 + _n)) *
-<a name="l00313"></a>00313            Dasinh(tchi1, _tchi0, scchi1, _scchi0) * (tchi1 - _tchi0))
-<a name="l00314"></a>00314       * (tchi1 >= 0 ? scchi1 + tchi1 : 1 / (scchi1 - tchi1)) /
-<a name="l00315"></a>00315       (_scchi0 + _tchi0);
-<a name="l00316"></a>00316     _nrho0 = polar ? 0 : _a * _k0 / _scbet0;
-<a name="l00317"></a>00317   }
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319   <span class="keyword">const</span> LambertConformalConic
-<a name="l00320"></a>00320   <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a7fbb6973b77593245db52c9759740f9a">LambertConformalConic::Mercator</a>(Constants::WGS84_a<real>(),
-<a name="l00321"></a>00321                                   Constants::WGS84_f<real>(),
-<a name="l00322"></a>00322                                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00323"></a>00323 
-<a name="l00324"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a2bafb6c1a81d4b6cf04f172b9e96278c">00324</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a2bafb6c1a81d4b6cf04f172b9e96278c">LambertConformalConic::Forward</a>(real lon0, real lat, real lon,
-<a name="l00325"></a>00325                                       real& x, real& y, real& gamma, real& k)
-<a name="l00326"></a>00326     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00327"></a>00327     <span class="keywordflow">if</span> (lon - lon0 >= 180)
-<a name="l00328"></a>00328       lon -= lon0 + 360;
-<a name="l00329"></a>00329     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lon - lon0 < -180)
-<a name="l00330"></a>00330       lon -= lon0 - 360;
-<a name="l00331"></a>00331     <span class="keywordflow">else</span>
-<a name="l00332"></a>00332       lon -= lon0;
-<a name="l00333"></a>00333     lat *= _sign;
-<a name="l00334"></a>00334     <span class="comment">// From Snyder, we have</span>
-<a name="l00335"></a>00335     <span class="comment">//</span>
-<a name="l00336"></a>00336     <span class="comment">// theta = n * lambda</span>
-<a name="l00337"></a>00337     <span class="comment">// x = rho * sin(theta)</span>
-<a name="l00338"></a>00338     <span class="comment">//   = (nrho0 + n * drho) * sin(theta)/n</span>
-<a name="l00339"></a>00339     <span class="comment">// y = rho0 - rho * cos(theta)</span>
-<a name="l00340"></a>00340     <span class="comment">//   = nrho0 * (1-cos(theta))/n - drho * cos(theta)</span>
-<a name="l00341"></a>00341     <span class="comment">//</span>
-<a name="l00342"></a>00342     <span class="comment">// where nrho0 = n * rho0, drho = rho - rho0</span>
-<a name="l00343"></a>00343     <span class="comment">// and drho is evaluated with divided differences</span>
-<a name="l00344"></a>00344     real
-<a name="l00345"></a>00345       lam = lon * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00346"></a>00346       phi = lat * Math::degree<real>(),
-<a name="l00347"></a>00347       sphi = sin(phi), cphi = abs(lat) != 90 ? cos(phi) : epsx_,
-<a name="l00348"></a>00348       tphi = sphi/cphi, tbet = _fm * tphi, scbet = hyp(tbet),
-<a name="l00349"></a>00349       scphi = 1/cphi, shxi = sinh(eatanhe(sphi)),
-<a name="l00350"></a>00350       tchi = hyp(shxi) * tphi - shxi * scphi, scchi = hyp(tchi),
-<a name="l00351"></a>00351       psi = <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">Math::asinh</a>(tchi),
-<a name="l00352"></a>00352       theta = _n * lam, stheta = sin(theta), ctheta = cos(theta),
-<a name="l00353"></a>00353       dpsi = Dasinh(tchi, _tchi0, scchi, _scchi0) * (tchi - _tchi0),
-<a name="l00354"></a>00354       drho = - _scale * (2 * _nc < 1 && dpsi != 0 ?
-<a name="l00355"></a>00355                          (exp(<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_nc)/(1 + _n) * psi ) *
-<a name="l00356"></a>00356                           (tchi > 0 ? 1/(scchi + tchi) : (scchi - tchi))
-<a name="l00357"></a>00357                           - (_t0nm1 + 1))/(-_n) :
-<a name="l00358"></a>00358                          Dexp(-_n * psi, -_n * _psi0) * dpsi);
-<a name="l00359"></a>00359     x = (_nrho0 + _n * drho) * (_n != 0 ? stheta / _n : lam);
-<a name="l00360"></a>00360     y = _nrho0 *
-<a name="l00361"></a>00361       (_n != 0 ?
-<a name="l00362"></a>00362        (ctheta < 0 ? 1 - ctheta : <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(stheta)/(1 + ctheta)) / _n : 0)
-<a name="l00363"></a>00363       - drho * ctheta;
-<a name="l00364"></a>00364     k = _k0 * (scbet/_scbet0) /
-<a name="l00365"></a>00365       (exp( - (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_nc)/(1 + _n)) * dpsi )
-<a name="l00366"></a>00366        * (tchi >= 0 ? scchi + tchi : 1 / (scchi - tchi)) / (_scchi0 + _tchi0));
-<a name="l00367"></a>00367     y *= _sign;
-<a name="l00368"></a>00368     gamma = _sign * theta / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00369"></a>00369   }
-<a name="l00370"></a>00370 
-<a name="l00371"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a085d37693f5e95fd650b7f59f61ab744">00371</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a085d37693f5e95fd650b7f59f61ab744">LambertConformalConic::Reverse</a>(real lon0, real x, real y,
-<a name="l00372"></a>00372                                       real& lat, real& lon,
-<a name="l00373"></a>00373                                       real& gamma, real& k)
-<a name="l00374"></a>00374     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00375"></a>00375     <span class="comment">// From Snyder, we have</span>
-<a name="l00376"></a>00376     <span class="comment">//</span>
-<a name="l00377"></a>00377     <span class="comment">//        x = rho * sin(theta)</span>
-<a name="l00378"></a>00378     <span class="comment">// rho0 - y = rho * cos(theta)</span>
-<a name="l00379"></a>00379     <span class="comment">//</span>
-<a name="l00380"></a>00380     <span class="comment">// rho = hypot(x, rho0 - y)</span>
-<a name="l00381"></a>00381     <span class="comment">// drho = (n*x^2 - 2*y*nrho0 + n*y^2)/(hypot(n*x, nrho0-n*y) + nrho0)</span>
-<a name="l00382"></a>00382     <span class="comment">// theta = atan2(n*x, nrho0-n*y)</span>
-<a name="l00383"></a>00383     <span class="comment">//</span>
-<a name="l00384"></a>00384     <span class="comment">// From drho, obtain t^n-1</span>
-<a name="l00385"></a>00385     <span class="comment">// psi = -log(t), so</span>
-<a name="l00386"></a>00386     <span class="comment">// dpsi = - Dlog1p(t^n-1, t0^n-1) * drho / scale</span>
-<a name="l00387"></a>00387     y *= _sign;
-<a name="l00388"></a>00388     real
-<a name="l00389"></a>00389       nx = _n * x, ny = _n * y, y1 = _nrho0 - ny,
-<a name="l00390"></a>00390       den = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(nx, y1) + _nrho0, <span class="comment">// 0 implies origin with polar aspect</span>
-<a name="l00391"></a>00391       drho = den != 0 ? (x*nx - 2*y*_nrho0 + y*ny) / den : 0,
-<a name="l00392"></a>00392       tnm1 = _t0nm1 + _n * drho/_scale,
-<a name="l00393"></a>00393       dpsi = (den == 0 ? 0 :
-<a name="l00394"></a>00394               (tnm1 + 1 != 0 ? - Dlog1p(tnm1, _t0nm1) * drho / _scale :
-<a name="l00395"></a>00395                ahypover_));
-<a name="l00396"></a>00396     real tchi;
-<a name="l00397"></a>00397     <span class="keywordflow">if</span> (2 * _n <= 1) {
-<a name="l00398"></a>00398       <span class="comment">// tchi = sinh(psi)</span>
-<a name="l00399"></a>00399       real
-<a name="l00400"></a>00400         psi = _psi0 + dpsi, tchia = sinh(psi), scchi = hyp(tchia),
-<a name="l00401"></a>00401         dtchi = Dsinh(psi, _psi0, tchia, _tchi0, scchi, _scchi0) * dpsi;
-<a name="l00402"></a>00402       tchi = _tchi0 + dtchi;    <span class="comment">// Update tchi using divided difference</span>
-<a name="l00403"></a>00403     } <span class="keywordflow">else</span> {
-<a name="l00404"></a>00404       <span class="comment">// tchi = sinh(-1/n * log(tn))</span>
-<a name="l00405"></a>00405       <span class="comment">//      = sinh((1-1/n) * log(tn) - log(tn))</span>
-<a name="l00406"></a>00406       <span class="comment">//      = + sinh((1-1/n) * log(tn)) * cosh(log(tn))</span>
-<a name="l00407"></a>00407       <span class="comment">//        - cosh((1-1/n) * log(tn)) * sinh(log(tn))</span>
-<a name="l00408"></a>00408       <span class="comment">// (1-1/n) = - nc^2/(n*(1+n))</span>
-<a name="l00409"></a>00409       <span class="comment">// cosh(log(tn)) = (tn + 1/tn)/2; sinh(log(tn)) = (tn - 1/tn)/2</span>
-<a name="l00410"></a>00410       real
-<a name="l00411"></a>00411         tn = tnm1 + 1 == 0 ? epsx_ : tnm1 + 1,
-<a name="l00412"></a>00412         sh = sinh( -<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_nc)/(_n * (1 + _n)) *
-<a name="l00413"></a>00413                    (2 * tn > 1 ? <a class="code" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">Math::log1p</a>(tnm1) : log(tn)) );
-<a name="l00414"></a>00414       tchi = sh * (tn + 1/tn)/2 - hyp(sh) * (tnm1 * (tn + 1)/tn)/2;
-<a name="l00415"></a>00415     }
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417     <span class="comment">// Use Newton's method to solve for tphi</span>
-<a name="l00418"></a>00418     real
-<a name="l00419"></a>00419       <span class="comment">// See comment in TransverseMercator.cpp about the initial guess</span>
-<a name="l00420"></a>00420       tphi = tchi/_e2m,
-<a name="l00421"></a>00421       stol = tol_ * max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), abs(tchi));
-<a name="l00422"></a>00422     <span class="comment">// min iterations = 1, max iterations = 2; mean = 1.94</span>
-<a name="l00423"></a>00423     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < numit_; ++i) {
-<a name="l00424"></a>00424       real
-<a name="l00425"></a>00425         scphi = hyp(tphi),
-<a name="l00426"></a>00426         shxi = sinh( eatanhe( tphi / scphi ) ),
-<a name="l00427"></a>00427         tchia = hyp(shxi) * tphi - shxi * scphi,
-<a name="l00428"></a>00428         dtphi = (tchi - tchia) * (1 + _e2m * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tphi)) /
-<a name="l00429"></a>00429         ( _e2m * scphi * hyp(tchia) );
-<a name="l00430"></a>00430       tphi += dtphi;
-<a name="l00431"></a>00431       <span class="keywordflow">if</span> (!(abs(dtphi) >= stol))
-<a name="l00432"></a>00432         <span class="keywordflow">break</span>;
-<a name="l00433"></a>00433     }
-<a name="l00434"></a>00434     <span class="comment">// log(t) = -asinh(tan(chi)) = -psi</span>
-<a name="l00435"></a>00435     gamma = atan2(nx, y1);
-<a name="l00436"></a>00436     real
-<a name="l00437"></a>00437       phi = _sign * atan(tphi),
-<a name="l00438"></a>00438       scbet = hyp(_fm * tphi), scchi = hyp(tchi),
-<a name="l00439"></a>00439       lam = _n != 0 ? gamma / _n : x / y1;
-<a name="l00440"></a>00440     lat = phi / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00441"></a>00441     lon = lam / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00442"></a>00442     <span class="comment">// Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)</span>
-<a name="l00443"></a>00443     <span class="keywordflow">if</span> (lon + lon0 >= 180)
-<a name="l00444"></a>00444       lon += lon0 - 360;
-<a name="l00445"></a>00445     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lon + lon0 < -180)
-<a name="l00446"></a>00446       lon += lon0 + 360;
-<a name="l00447"></a>00447     <span class="keywordflow">else</span>
-<a name="l00448"></a>00448       lon += lon0;
-<a name="l00449"></a>00449     k = _k0 * (scbet/_scbet0) /
-<a name="l00450"></a>00450       (exp(_nc != 0 ? - (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_nc)/(1 + _n)) * dpsi : 0)
-<a name="l00451"></a>00451        * (tchi >= 0 ? scchi + tchi : 1 / (scchi - tchi)) / (_scchi0 + _tchi0));
-<a name="l00452"></a>00452     gamma /= _sign * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00453"></a>00453   }
-<a name="l00454"></a>00454 
-<a name="l00455"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#aac6267f7f970b35043b17e12e4163ff2">00455</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#aac6267f7f970b35043b17e12e4163ff2">LambertConformalConic::SetScale</a>(real lat, real k) {
-<a name="l00456"></a>00456     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(k) && k > 0))
-<a name="l00457"></a>00457       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00458"></a>00458     <span class="keywordflow">if</span> (!(abs(lat) <= 90))
-<a name="l00459"></a>00459       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude for SetScale not in [-90, 90]"</span>);
-<a name="l00460"></a>00460     <span class="keywordflow">if</span> (abs(lat) == 90 && !(_nc == 0 && lat * _n > 0))
-<a name="l00461"></a>00461       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incompatible polar latitude in SetScale"</span>);
-<a name="l00462"></a>00462     real x, y, gamma, kold;
-<a name="l00463"></a>00463     <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a2bafb6c1a81d4b6cf04f172b9e96278c">Forward</a>(0, lat, 0, x, y, gamma, kold);
-<a name="l00464"></a>00464     k /= kold;
-<a name="l00465"></a>00465     _scale *= k;
-<a name="l00466"></a>00466     _k0 *= k;
-<a name="l00467"></a>00467   }
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/LambertConformalConic_8hpp.html b/doc/html/LambertConformalConic_8hpp.html
deleted file mode 100644
index 9af9ad0..0000000
--- a/doc/html/LambertConformalConic_8hpp.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: LambertConformalConic.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">LambertConformalConic.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <algorithm></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="LambertConformalConic_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Lambert Conformal Conic Projection.  <a href="classGeographicLib_1_1LambertConformalConic.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="LambertConformalConic_8hpp.html#aac2fbd995d5b75016781c58b97093c67">GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP</a>   "$Id: 9aef04f77098543818681966f13ef97ea47dedb4 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="aac2fbd995d5b75016781c58b97093c67"></a><!-- doxytag: member="LambertConformalConic.hpp::GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP" ref="aac2fbd995d5b75016781c58b97093c67" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP   "$Id: 9aef04f77098543818681966f13ef97ea47dedb4 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8hpp_source.html#l00011">11</a> of file <a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/LambertConformalConic_8hpp_source.html b/doc/html/LambertConformalConic_8hpp_source.html
deleted file mode 100644
index ac33fea..0000000
--- a/doc/html/LambertConformalConic_8hpp_source.html
+++ /dev/null
@@ -1,404 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: LambertConformalConic.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">LambertConformalConic.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="LambertConformalConic_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file LambertConformalConic.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::LambertConformalConic class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP)</span>
-<a name="l00011"></a><a class="code" href="LambertConformalConic_8hpp.html#aac2fbd995d5b75016781c58b97093c67">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 9aef04f77098543818681966f13ef97ea47dedb4 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <algorithm></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00018"></a>00018 <span class="comment"></span>
-<a name="l00019"></a>00019 <span class="comment">  /**</span>
-<a name="l00020"></a>00020 <span class="comment">   * \brief Lambert Conformal Conic Projection</span>
-<a name="l00021"></a>00021 <span class="comment">   *</span>
-<a name="l00022"></a>00022 <span class="comment">   * Implementation taken from the report,</span>
-<a name="l00023"></a>00023 <span class="comment">   * - J. P. Snyder,</span>
-<a name="l00024"></a>00024 <span class="comment">   *   <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"> Map Projections: A</span>
-<a name="l00025"></a>00025 <span class="comment">   *   Working Manual</a>, USGS Professional Paper 1395 (1987),</span>
-<a name="l00026"></a>00026 <span class="comment">   *   pp. 107&ndash;109.</span>
-<a name="l00027"></a>00027 <span class="comment">   *</span>
-<a name="l00028"></a>00028 <span class="comment">   * This is a implementation of the equations in Snyder except that divided</span>
-<a name="l00029"></a>00029 <span class="comment">   * differences have been used to transform the expressions into ones which</span>
-<a name="l00030"></a>00030 <span class="comment">   * may be evaluated accurately and that Newton's method is used to invert the</span>
-<a name="l00031"></a>00031 <span class="comment">   * projection.  In this implementation, the projection correctly becomes the</span>
-<a name="l00032"></a>00032 <span class="comment">   * Mercator projection or the polar stereographic projection when the</span>
-<a name="l00033"></a>00033 <span class="comment">   * standard latitude is the equator or a pole.  The accuracy of the</span>
-<a name="l00034"></a>00034 <span class="comment">   * projections is about 10 nm (10 nanometers).</span>
-<a name="l00035"></a>00035 <span class="comment">   *</span>
-<a name="l00036"></a>00036 <span class="comment">   * The ellipsoid parameters, the standard parallels, and the scale on the</span>
-<a name="l00037"></a>00037 <span class="comment">   * standard parallels are set in the constructor.  Internally, the case with</span>
-<a name="l00038"></a>00038 <span class="comment">   * two standard parallels is converted into a single standard parallel, the</span>
-<a name="l00039"></a>00039 <span class="comment">   * latitude of tangency (also the latitude of minimum scale), with a scale</span>
-<a name="l00040"></a>00040 <span class="comment">   * specified on this parallel.  This latitude is also used as the latitude of</span>
-<a name="l00041"></a>00041 <span class="comment">   * origin which is returned by LambertConformalConic::OriginLatitude.  The</span>
-<a name="l00042"></a>00042 <span class="comment">   * scale on the latitude of origin is given by</span>
-<a name="l00043"></a>00043 <span class="comment">   * LambertConformalConic::CentralScale.  The case with two distinct standard</span>
-<a name="l00044"></a>00044 <span class="comment">   * parallels where one is a pole is singular and is disallowed.  The central</span>
-<a name="l00045"></a>00045 <span class="comment">   * meridian (which is a trivial shift of the longitude) is specified as the</span>
-<a name="l00046"></a>00046 <span class="comment">   * \e lon0 argument of the LambertConformalConic::Forward and</span>
-<a name="l00047"></a>00047 <span class="comment">   * LambertConformalConic::Reverse functions.  There is no provision in this</span>
-<a name="l00048"></a>00048 <span class="comment">   * class for specifying a false easting or false northing or a different</span>
-<a name="l00049"></a>00049 <span class="comment">   * latitude of origin.  However these are can be simply included by the</span>
-<a name="l00050"></a>00050 <span class="comment">   * calling function.  For example the Pennsylvania South state coordinate</span>
-<a name="l00051"></a>00051 <span class="comment">   * system (<a href="http://www.spatialreference.org/ref/epsg/3364/"></span>
-<a name="l00052"></a>00052 <span class="comment">   * EPSG:3364</a>) is obtained by:</span>
-<a name="l00053"></a>00053 <span class="comment">   * \include example-LambertConformalConic.cpp</span>
-<a name="l00054"></a>00054 <span class="comment">   *</span>
-<a name="l00055"></a>00055 <span class="comment">   * <a href="ConicProj.1.html">ConicProj</a> is a command-line utility</span>
-<a name="l00056"></a>00056 <span class="comment">   * providing access to the functionality of LambertConformalConic and</span>
-<a name="l00057"></a>00057 <span class="comment">   * AlbersEqualArea.</span>
-<a name="l00058"></a>00058 <span class="comment">   **********************************************************************/</span>
-<a name="l00059"></a>00059   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> LambertConformalConic {
-<a name="l00060"></a>00060   <span class="keyword">private</span>:
-<a name="l00061"></a>00061     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00062"></a>00062     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _f, _fm, _e2, _e, _e2m;
-<a name="l00063"></a>00063     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _sign, _n, _nc, _t0nm1, _scale, _lat0, _k0;
-<a name="l00064"></a>00064     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _scbet0, _tchi0, _scchi0, _psi0, _nrho0;
-<a name="l00065"></a>00065     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps_;
-<a name="l00066"></a>00066     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> epsx_;
-<a name="l00067"></a>00067     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tol_;
-<a name="l00068"></a>00068     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ahypover_;
-<a name="l00069"></a>00069     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numit_ = 5;
-<a name="l00070"></a>00070     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> hyp(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp. [...]
-<a name="l00071"></a>00071     <span class="comment">// e * atanh(e * x) = log( ((1 + e*x)/(1 - e*x))^(e/2) ) if f >= 0</span>
-<a name="l00072"></a>00072     <span class="comment">// - sqrt(-e2) * atan( sqrt(-e2) * x)                    if f < 0</span>
-<a name="l00073"></a>00073     <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eatanhe(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00074"></a>00074       <span class="keywordflow">return</span> _f >= 0 ? _e * <a class="code" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">Math::atanh</a>(_e * x) : - _e * std::atan(_e * x);
-<a name="l00075"></a>00075     }
-<a name="l00076"></a>00076     <span class="comment">// Divided differences</span>
-<a name="l00077"></a>00077     <span class="comment">// Definition: Df(x,y) = (f(x)-f(y))/(x-y)</span>
-<a name="l00078"></a>00078     <span class="comment">// See: W. M. Kahan and R. J. Fateman,</span>
-<a name="l00079"></a>00079     <span class="comment">// Symbolic computation of divided differences,</span>
-<a name="l00080"></a>00080     <span class="comment">// SIGSAM Bull. 33(3), 7-28 (1999)</span>
-<a name="l00081"></a>00081     <span class="comment">// http://dx.doi.org/10.1145/334714.334716</span>
-<a name="l00082"></a>00082     <span class="comment">// http://www.cs.berkeley.edu/~fateman/papers/divdiff.pdf</span>
-<a name="l00083"></a>00083     <span class="comment">//</span>
-<a name="l00084"></a>00084     <span class="comment">// General rules</span>
-<a name="l00085"></a>00085     <span class="comment">// h(x) = f(g(x)): Dh(x,y) = Df(g(x),g(y))*Dg(x,y)</span>
-<a name="l00086"></a>00086     <span class="comment">// h(x) = f(x)*g(x):</span>
-<a name="l00087"></a>00087     <span class="comment">//        Dh(x,y) = Df(x,y)*g(x) + Dg(x,y)*f(y)</span>
-<a name="l00088"></a>00088     <span class="comment">//                = Df(x,y)*g(y) + Dg(x,y)*f(x)</span>
-<a name="l00089"></a>00089     <span class="comment">//                = Df(x,y)*(g(x)+g(y))/2 + Dg(x,y)*(f(x)+f(y))/2</span>
-<a name="l00090"></a>00090     <span class="comment">//</span>
-<a name="l00091"></a>00091     <span class="comment">// hyp(x) = sqrt(1+x^2): Dhyp(x,y) = (x+y)/(hyp(x)+hyp(y))</span>
-<a name="l00092"></a>00092     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Dhyp(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> hx, <a class="code" href="Geod_8cpp.html#a5caf95d46b18 [...]
-<a name="l00093"></a>00093     <span class="comment">// hx = hyp(x)</span>
-<a name="l00094"></a>00094     { <span class="keywordflow">return</span> (x + y) / (hx + hy); }
-<a name="l00095"></a>00095     <span class="comment">// sn(x) = x/sqrt(1+x^2): Dsn(x,y) = (x+y)/((sn(x)+sn(y))*(1+x^2)*(1+y^2))</span>
-<a name="l00096"></a>00096     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Dsn(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184 [...]
-<a name="l00097"></a>00097       <span class="comment">// sx = x/hyp(x)</span>
-<a name="l00098"></a>00098       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = x * y;
-<a name="l00099"></a>00099       <span class="keywordflow">return</span> t > 0 ? (x + y) * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>( (sx * sy)/t ) / (sx + sy) :
-<a name="l00100"></a>00100         (x - y != 0 ? (sx - sy) / (x - y) : 1);
-<a name="l00101"></a>00101     }
-<a name="l00102"></a>00102     <span class="comment">// Dlog1p(x,y) = log1p((x-y)/(1+y)/(x-y)</span>
-<a name="l00103"></a>00103     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Dlog1p(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keywordflow">throw</span>() {
-<a name="l00104"></a>00104       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = x - y; <span class="keywordflow">if</span> (t < 0) { t = -t; y = x; }
-<a name="l00105"></a>00105       <span class="keywordflow">return</span> t != 0 ? <a class="code" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">Math::log1p</a>(t / (1 + y)) / t : 1 / (1 + x);
-<a name="l00106"></a>00106     }
-<a name="l00107"></a>00107     <span class="comment">// Dexp(x,y) = exp((x+y)/2) * 2*sinh((x-y)/2)/(x-y)</span>
-<a name="l00108"></a>00108     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Dexp(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keywordflow">throw</span>() {
-<a name="l00109"></a>00109       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = (x - y)/2;
-<a name="l00110"></a>00110       <span class="keywordflow">return</span> (t != 0 ? sinh(t)/t : <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1)) * exp((x + y)/2);
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112     <span class="comment">// Dsinh(x,y) = 2*sinh((x-y)/2)/(x-y) * cosh((x+y)/2)</span>
-<a name="l00113"></a>00113     <span class="comment">//   cosh((x+y)/2) = (c+sinh(x)*sinh(y)/c)/2</span>
-<a name="l00114"></a>00114     <span class="comment">//   c=sqrt((1+cosh(x))*(1+cosh(y)))</span>
-<a name="l00115"></a>00115     <span class="comment">//   cosh((x+y)/2) = sqrt( (sinh(x)*sinh(y) + cosh(x)*cosh(y) + 1)/2 )</span>
-<a name="l00116"></a>00116     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Dsinh(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sx, <a class="code" href="Geod_8cpp.html#a5caf95d46b1 [...]
-<a name="l00117"></a>00117       <span class="comment">// sx = sinh(x), cx = cosh(x)</span>
-<a name="l00118"></a>00118       <span class="keywordflow">throw</span>() {
-<a name="l00119"></a>00119       <span class="comment">// real t = (x - y)/2, c = sqrt((1 + cx) * (1 + cy));</span>
-<a name="l00120"></a>00120       <span class="comment">// return (t != 0 ? sinh(t)/t : real(1)) * (c + sx * sy / c) /2;</span>
-<a name="l00121"></a>00121       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = (x - y)/2;
-<a name="l00122"></a>00122       <span class="keywordflow">return</span> (t != 0 ? sinh(t)/t : <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1)) * sqrt((sx * sy + cx * cy + 1) /2);
-<a name="l00123"></a>00123     }
-<a name="l00124"></a>00124     <span class="comment">// Dasinh(x,y) = asinh((x-y)*(x+y)/(x*sqrt(1+y^2)+y*sqrt(1+x^2)))/(x-y)</span>
-<a name="l00125"></a>00125     <span class="comment">//             = asinh((x*sqrt(1+y^2)-y*sqrt(1+x^2)))/(x-y)</span>
-<a name="l00126"></a>00126     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Dasinh(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> hx, <a class="code" href="Geod_8cpp.html#a5caf95d46b [...]
-<a name="l00127"></a>00127       <span class="comment">// hx = hyp(x)</span>
-<a name="l00128"></a>00128       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = x - y;
-<a name="l00129"></a>00129       <span class="keywordflow">return</span> t != 0 ?
-<a name="l00130"></a>00130         <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">Math::asinh</a>(x*y > 0 ? t * (x+y) / (x*hy + y*hx) : x*hy - y*hx) / t :
-<a name="l00131"></a>00131         1/hx;
-<a name="l00132"></a>00132     }
-<a name="l00133"></a>00133     <span class="comment">// Deatanhe(x,y) = eatanhe((x-y)/(1-e^2*x*y))/(x-y)</span>
-<a name="l00134"></a>00134     <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Deatanhe(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00135"></a>00135       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = x - y, d = 1 - _e2 * x * y;
-<a name="l00136"></a>00136       <span class="keywordflow">return</span> t != 0 ? eatanhe(t / d) / t : _e2 / d;
-<a name="l00137"></a>00137     }
-<a name="l00138"></a>00138     <span class="keywordtype">void</span> Init(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781 [...]
-<a name="l00139"></a>00139   <span class="keyword">public</span>:
-<a name="l00140"></a>00140 <span class="comment"></span>
-<a name="l00141"></a>00141 <span class="comment">    /**</span>
-<a name="l00142"></a>00142 <span class="comment">     * Constructor with a single standard parallel.</span>
-<a name="l00143"></a>00143 <span class="comment">     *</span>
-<a name="l00144"></a>00144 <span class="comment">     * @param[in] a equatorial radius of ellipsoid (meters).</span>
-<a name="l00145"></a>00145 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00146"></a>00146 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00147"></a>00147 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00148"></a>00148 <span class="comment">     * @param[in] stdlat standard parallel (degrees), the circle of tangency.</span>
-<a name="l00149"></a>00149 <span class="comment">     * @param[in] k0 scale on the standard parallel.</span>
-<a name="l00150"></a>00150 <span class="comment">     *</span>
-<a name="l00151"></a>00151 <span class="comment">     * An exception is thrown if \e a or \e k0 is not positive or if \e stdlat</span>
-<a name="l00152"></a>00152 <span class="comment">     * is not in the range [-90, 90].</span>
-<a name="l00153"></a>00153 <span class="comment">     **********************************************************************/</span>
-<a name="l00154"></a>00154     LambertConformalConic(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> stdlat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k0);
-<a name="l00155"></a>00155 <span class="comment"></span>
-<a name="l00156"></a>00156 <span class="comment">    /**</span>
-<a name="l00157"></a>00157 <span class="comment">     * Constructor with two standard parallels.</span>
-<a name="l00158"></a>00158 <span class="comment">     *</span>
-<a name="l00159"></a>00159 <span class="comment">     * @param[in] a equatorial radius of ellipsoid (meters).</span>
-<a name="l00160"></a>00160 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00161"></a>00161 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00162"></a>00162 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00163"></a>00163 <span class="comment">     * @param[in] stdlat1 first standard parallel (degrees).</span>
-<a name="l00164"></a>00164 <span class="comment">     * @param[in] stdlat2 second standard parallel (degrees).</span>
-<a name="l00165"></a>00165 <span class="comment">     * @param[in] k1 scale on the standard parallels.</span>
-<a name="l00166"></a>00166 <span class="comment">     *</span>
-<a name="l00167"></a>00167 <span class="comment">     * An exception is thrown if \e a or \e k0 is not positive or if \e stdlat1</span>
-<a name="l00168"></a>00168 <span class="comment">     * or \e stdlat2 is not in the range [-90, 90].  In addition, if either \e</span>
-<a name="l00169"></a>00169 <span class="comment">     * stdlat1 or \e stdlat2 is a pole, then an exception is thrown if \e</span>
-<a name="l00170"></a>00170 <span class="comment">     * stdlat1 is not equal \e stdlat2.</span>
-<a name="l00171"></a>00171 <span class="comment">     **********************************************************************/</span>
-<a name="l00172"></a>00172     LambertConformalConic(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> stdlat1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> stdlat2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k1);
-<a name="l00173"></a>00173 <span class="comment"></span>
-<a name="l00174"></a>00174 <span class="comment">    /**</span>
-<a name="l00175"></a>00175 <span class="comment">     * Constructor with two standard parallels specified by sines and cosines.</span>
-<a name="l00176"></a>00176 <span class="comment">     *</span>
-<a name="l00177"></a>00177 <span class="comment">     * @param[in] a equatorial radius of ellipsoid (meters).</span>
-<a name="l00178"></a>00178 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00179"></a>00179 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00180"></a>00180 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00181"></a>00181 <span class="comment">     * @param[in] sinlat1 sine of first standard parallel.</span>
-<a name="l00182"></a>00182 <span class="comment">     * @param[in] coslat1 cosine of first standard parallel.</span>
-<a name="l00183"></a>00183 <span class="comment">     * @param[in] sinlat2 sine of second standard parallel.</span>
-<a name="l00184"></a>00184 <span class="comment">     * @param[in] coslat2 cosine of second standard parallel.</span>
-<a name="l00185"></a>00185 <span class="comment">     * @param[in] k1 scale on the standard parallels.</span>
-<a name="l00186"></a>00186 <span class="comment">     *</span>
-<a name="l00187"></a>00187 <span class="comment">     * This allows parallels close to the poles to be specified accurately.</span>
-<a name="l00188"></a>00188 <span class="comment">     * This routine computes the latitude of origin and the scale at this</span>
-<a name="l00189"></a>00189 <span class="comment">     * latitude.  In the case where \e lat1 and \e lat2 are different, the</span>
-<a name="l00190"></a>00190 <span class="comment">     * errors in this routines are as follows: if \e dlat = abs(\e lat2 - \e</span>
-<a name="l00191"></a>00191 <span class="comment">     * lat1) <= 160<sup>o</sup> and max(abs(\e lat1), abs(\e lat2)) <= 90 -</span>
-<a name="l00192"></a>00192 <span class="comment">     * min(0.0002, 2.2e-6(180 - \e dlat), 6e-8 <i>dlat</i><sup>2</sup>) (in</span>
-<a name="l00193"></a>00193 <span class="comment">     * degrees), then the error in the latitude of origin is less than</span>
-<a name="l00194"></a>00194 <span class="comment">     * 4.5e-14<sup>o</sup> and the relative error in the scale is less than</span>
-<a name="l00195"></a>00195 <span class="comment">     * 7e-15.</span>
-<a name="l00196"></a>00196 <span class="comment">     **********************************************************************/</span>
-<a name="l00197"></a>00197     LambertConformalConic(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f,
-<a name="l00198"></a>00198                           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sinlat1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> coslat1,
-<a name="l00199"></a>00199                           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sinlat2, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> coslat2,
-<a name="l00200"></a>00200                           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k1);
-<a name="l00201"></a>00201 <span class="comment"></span>
-<a name="l00202"></a>00202 <span class="comment">    /**</span>
-<a name="l00203"></a>00203 <span class="comment">     * Set the scale for the projection.</span>
-<a name="l00204"></a>00204 <span class="comment">     *</span>
-<a name="l00205"></a>00205 <span class="comment">     * @param[in] lat (degrees).</span>
-<a name="l00206"></a>00206 <span class="comment">     * @param[in] k scale at latitude \e lat (default 1).</span>
-<a name="l00207"></a>00207 <span class="comment">     *</span>
-<a name="l00208"></a>00208 <span class="comment">     * This allows a "latitude of true scale" to be specified.  An exception is</span>
-<a name="l00209"></a>00209 <span class="comment">     * thrown if \e k is not positive or if \e stdlat is not in the range [-90,</span>
-<a name="l00210"></a>00210 <span class="comment">     * 90]</span>
-<a name="l00211"></a>00211 <span class="comment">     **********************************************************************/</span>
-<a name="l00212"></a>00212     <span class="keywordtype">void</span> SetScale(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00213"></a>00213 <span class="comment"></span>
-<a name="l00214"></a>00214 <span class="comment">    /**</span>
-<a name="l00215"></a>00215 <span class="comment">     * Forward projection, from geographic to Lambert conformal conic.</span>
-<a name="l00216"></a>00216 <span class="comment">     *</span>
-<a name="l00217"></a>00217 <span class="comment">     * @param[in] lon0 central meridian longitude (degrees).</span>
-<a name="l00218"></a>00218 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00219"></a>00219 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00220"></a>00220 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00221"></a>00221 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00222"></a>00222 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00223"></a>00223 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00224"></a>00224 <span class="comment">     *</span>
-<a name="l00225"></a>00225 <span class="comment">     * The latitude origin is given by LambertConformalConic::LatitudeOrigin().</span>
-<a name="l00226"></a>00226 <span class="comment">     * No false easting or northing is added and \e lat should be in the range</span>
-<a name="l00227"></a>00227 <span class="comment">     * [-90, 90]; \e lon and \e lon0 should be in the range [-180, 360].  The</span>
-<a name="l00228"></a>00228 <span class="comment">     * error in the projection is less than about 10 nm (10 nanometers), true</span>
-<a name="l00229"></a>00229 <span class="comment">     * distance, and the errors in the meridian convergence and scale are</span>
-<a name="l00230"></a>00230 <span class="comment">     * consistent with this.  The values of \e x and \e y returned for points</span>
-<a name="l00231"></a>00231 <span class="comment">     * which project to infinity (i.e., one or both of the poles) will be large</span>
-<a name="l00232"></a>00232 <span class="comment">     * but finite.</span>
-<a name="l00233"></a>00233 <span class="comment">     **********************************************************************/</span>
-<a name="l00234"></a>00234     <span class="keywordtype">void</span> Forward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon,
-<a name="l00235"></a>00235                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00236"></a>00236 <span class="comment"></span>
-<a name="l00237"></a>00237 <span class="comment">    /**</span>
-<a name="l00238"></a>00238 <span class="comment">     * Reverse projection, from Lambert conformal conic to geographic.</span>
-<a name="l00239"></a>00239 <span class="comment">     *</span>
-<a name="l00240"></a>00240 <span class="comment">     * @param[in] lon0 central meridian longitude (degrees).</span>
-<a name="l00241"></a>00241 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00242"></a>00242 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00243"></a>00243 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00244"></a>00244 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00245"></a>00245 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00246"></a>00246 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00247"></a>00247 <span class="comment">     *</span>
-<a name="l00248"></a>00248 <span class="comment">     * The latitude origin is given by LambertConformalConic::LatitudeOrigin().</span>
-<a name="l00249"></a>00249 <span class="comment">     * No false easting or northing is added.  \e lon0 should be in the range</span>
-<a name="l00250"></a>00250 <span class="comment">     * [-180, 360].  The value of \e lon returned is in the range [-180, 180).</span>
-<a name="l00251"></a>00251 <span class="comment">     * The error in the projection is less than about 10 nm (10 nanometers),</span>
-<a name="l00252"></a>00252 <span class="comment">     * true distance, and the errors in the meridian convergence and scale are</span>
-<a name="l00253"></a>00253 <span class="comment">     * consistent with this.</span>
-<a name="l00254"></a>00254 <span class="comment">     **********************************************************************/</span>
-<a name="l00255"></a>00255     <span class="keywordtype">void</span> Reverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00256"></a>00256                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00257"></a>00257 <span class="comment"></span>
-<a name="l00258"></a>00258 <span class="comment">    /**</span>
-<a name="l00259"></a>00259 <span class="comment">     * LambertConformalConic::Forward without returning the convergence and</span>
-<a name="l00260"></a>00260 <span class="comment">     * scale.</span>
-<a name="l00261"></a>00261 <span class="comment">     **********************************************************************/</span>
-<a name="l00262"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a14a3757d85e81488afe476f7ceb8a720">00262</a>     <span class="keywordtype">void</span> Forward(real lon0, real lat, real lon,
-<a name="l00263"></a>00263                  real& x, real& y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00264"></a>00264       real gamma, k;
-<a name="l00265"></a>00265       Forward(lon0, lat, lon, x, y, gamma, k);
-<a name="l00266"></a>00266     }
-<a name="l00267"></a>00267 <span class="comment"></span>
-<a name="l00268"></a>00268 <span class="comment">    /**</span>
-<a name="l00269"></a>00269 <span class="comment">     * LambertConformalConic::Reverse without returning the convergence and</span>
-<a name="l00270"></a>00270 <span class="comment">     * scale.</span>
-<a name="l00271"></a>00271 <span class="comment">     **********************************************************************/</span>
-<a name="l00272"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a1bffe1259895569e6834a4b1df9b22ab">00272</a>     <span class="keywordtype">void</span> Reverse(real lon0, real x, real y,
-<a name="l00273"></a>00273                  real& lat, real& lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00274"></a>00274       real gamma, k;
-<a name="l00275"></a>00275       Reverse(lon0, x, y, lat, lon, gamma, k);
-<a name="l00276"></a>00276     }
-<a name="l00277"></a>00277 <span class="comment"></span>
-<a name="l00278"></a>00278 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00279"></a>00279 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00280"></a>00280 <span class="comment">    ///@{</span>
-<a name="l00281"></a>00281 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00282"></a>00282 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00283"></a>00283 <span class="comment">     *   the value used in the constructor.</span>
-<a name="l00284"></a>00284 <span class="comment">     **********************************************************************/</span>
-<a name="l00285"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a21f9bc21f3f40c56d2f5d12fb4b7f75a">00285</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a21f9bc21f3f40c56d2f5d12fb4b7f75a">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a; }
-<a name="l00286"></a>00286 <span class="comment"></span>
-<a name="l00287"></a>00287 <span class="comment">    /**</span>
-<a name="l00288"></a>00288 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the</span>
-<a name="l00289"></a>00289 <span class="comment">     *   value used in the constructor.</span>
-<a name="l00290"></a>00290 <span class="comment">     **********************************************************************/</span>
-<a name="l00291"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#abd47e48c75ed958f5aa91bcaa80ddc8c">00291</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#abd47e48c75ed958f5aa91bcaa80ddc8c">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _f; }
-<a name="l00292"></a>00292 <span class="comment"></span>
-<a name="l00293"></a>00293 <span class="comment">    /// \cond SKIP</span>
-<a name="l00294"></a>00294 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00295"></a>00295 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00296"></a>00296 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00297"></a>00297 <span class="comment">     **********************************************************************/</span>
-<a name="l00298"></a>00298     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> 1/_f; }<span class="comment"></span>
-<a name="l00299"></a>00299 <span class="comment">    /// \endcond</span>
-<a name="l00300"></a>00300 <span class="comment"></span><span class="comment"></span>
-<a name="l00301"></a>00301 <span class="comment">    /**</span>
-<a name="l00302"></a>00302 <span class="comment">     * @return latitude of the origin for the projection (degrees).</span>
-<a name="l00303"></a>00303 <span class="comment">     *</span>
-<a name="l00304"></a>00304 <span class="comment">     * This is the latitude of minimum scale and equals the \e stdlat in the</span>
-<a name="l00305"></a>00305 <span class="comment">     * 1-parallel constructor and lies between \e stdlat1 and \e stdlat2 in the</span>
-<a name="l00306"></a>00306 <span class="comment">     * 2-parallel constructors.</span>
-<a name="l00307"></a>00307 <span class="comment">     **********************************************************************/</span>
-<a name="l00308"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a7c589335b43b2274d3a68c0f68f29d77">00308</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a7c589335b43b2274d3a68c0f68f29d77">OriginLatitude</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _lat0; }
-<a name="l00309"></a>00309 <span class="comment"></span>
-<a name="l00310"></a>00310 <span class="comment">    /**</span>
-<a name="l00311"></a>00311 <span class="comment">     * @return central scale for the projection.  This is the scale on the</span>
-<a name="l00312"></a>00312 <span class="comment">     *   latitude of origin.</span>
-<a name="l00313"></a>00313 <span class="comment">     **********************************************************************/</span>
-<a name="l00314"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a2298a4e48e550cfd7346cf5f2dd175ad">00314</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a2298a4e48e550cfd7346cf5f2dd175ad">CentralScale</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _k0; }<span cla [...]
-<a name="l00315"></a>00315 <span class="comment">    ///@}</span>
-<a name="l00316"></a>00316 <span class="comment"></span><span class="comment"></span>
-<a name="l00317"></a>00317 <span class="comment">    /**</span>
-<a name="l00318"></a>00318 <span class="comment">     * A global instantiation of LambertConformalConic with the WGS84</span>
-<a name="l00319"></a>00319 <span class="comment">     * ellipsoid, \e stdlat = 0, and \e k0 = 1.  This degenerates to the</span>
-<a name="l00320"></a>00320 <span class="comment">     * Mercator projection.</span>
-<a name="l00321"></a>00321 <span class="comment">     **********************************************************************/</span>
-<a name="l00322"></a><a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a7fbb6973b77593245db52c9759740f9a">00322</a>     <span class="keyword">static</span> <span class="keyword">const</span> LambertConformalConic <a class="code" href="classGeographicLib_1_1LambertConformalConic.html#a7fbb6973b77593245db52c9759740f9a">Mercator</a>;
-<a name="l00323"></a>00323   };
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327 <span class="preprocessor">#endif  // GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/LocalCartesian_8cpp.html b/doc/html/LocalCartesian_8cpp.html
deleted file mode 100644
index 781fca6..0000000
--- a/doc/html/LocalCartesian_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: LocalCartesian.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">LocalCartesian.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="LocalCartesian_8hpp_source.html">GeographicLib/LocalCartesian.hpp</a>></code><br/>
-</div>
-<p><a href="LocalCartesian_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="LocalCartesian_8cpp.html#a0917de4aed4abb985b1e2830077aea45">GEOGRAPHICLIB_LOCALCARTESIAN_CPP</a>   "$Id: 4d15764c089e07855bf6db300271e18f4fa89624 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="LocalCartesian_8cpp_source.html">LocalCartesian.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a0917de4aed4abb985b1e2830077aea45"></a><!-- doxytag: member="LocalCartesian.cpp::GEOGRAPHICLIB_LOCALCARTESIAN_CPP" ref="a0917de4aed4abb985b1e2830077aea45" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_LOCALCARTESIAN_CPP   "$Id: 4d15764c089e07855bf6db300271e18f4fa89624 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="LocalCartesian_8cpp_source.html#l00012">12</a> of file <a class="el" href="LocalCartesian_8cpp_source.html">LocalCartesian.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/LocalCartesian_8cpp_source.html b/doc/html/LocalCartesian_8cpp_source.html
deleted file mode 100644
index 4d58616..0000000
--- a/doc/html/LocalCartesian_8cpp_source.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: LocalCartesian.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">LocalCartesian.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="LocalCartesian_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file LocalCartesian.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::LocalCartesian class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="LocalCartesian_8hpp.html" title="Header for GeographicLib::LocalCartesian class.">GeographicLib/LocalCartesian.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="LocalCartesian_8cpp.html#a0917de4aed4abb985b1e2830077aea45">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_LOCALCARTESIAN_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: 4d15764c089e07855bf6db300271e18f4fa89624 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="LocalCartesian_8cpp.html#a0917de4aed4abb985b1e2830077aea45">GEOGRAPHICLIB_LOCALCARTESIAN_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="LocalCartesian_8hpp.html#a628d4dcde137e8249cb7fdbcaab30acd">GEOGRAPHICLIB_LOCALCARTESIAN_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#a85b9c15b843cf6a84be08e0cc4de9122">00022</a>   <span class="keywordtype">void</span> LocalCartesian::Reset(real lat0, real lon0, real h0) <span class="keywordflow">throw</span>() {
-<a name="l00023"></a>00023     _lat0 = lat0;
-<a name="l00024"></a>00024     _lon0 = lon0 >= 180 ? lon0 - 360 : (lon0 < -180 ? lon0 + 360 : lon0);
-<a name="l00025"></a>00025     _h0 = h0;
-<a name="l00026"></a>00026     _earth.Forward(_lat0, _lon0, _h0, _x0, _y0, _z0);
-<a name="l00027"></a>00027     real
-<a name="l00028"></a>00028       phi = lat0 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00029"></a>00029       sphi = sin(phi),
-<a name="l00030"></a>00030       cphi = abs(_lat0) == 90 ? 0 : cos(phi),
-<a name="l00031"></a>00031       lam = lon0 * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00032"></a>00032       slam = _lon0 == -180 ? 0 : sin(lam),
-<a name="l00033"></a>00033       clam = abs(_lon0) == 90 ? 0 : cos(lam);
-<a name="l00034"></a>00034     _earth.Rotation(sphi, cphi, slam, clam, _r);
-<a name="l00035"></a>00035   }
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037   <span class="keywordtype">void</span> LocalCartesian::MatrixMultiply(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00038"></a>00038     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t[dim2_];
-<a name="l00039"></a>00039     copy(M, M + dim2_, t);
-<a name="l00040"></a>00040     <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < dim2_; ++i) {
-<a name="l00041"></a>00041       <span class="keywordtype">size_t</span> row = i / dim_, col = i % dim_;
-<a name="l00042"></a>00042       M[i] = _r[row] * t[col] + _r[row+3] * t[col+3] + _r[row+6] * t[col+6];
-<a name="l00043"></a>00043     }
-<a name="l00044"></a>00044   }
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046   <span class="keywordtype">void</span> LocalCartesian::IntForward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h,
-<a name="l00047"></a>00047                                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& z,
-<a name="l00048"></a>00048                                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00049"></a>00049     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xc, yc, zc;
-<a name="l00050"></a>00050     _earth.IntForward(lat, lon, h, xc, yc, zc, M);
-<a name="l00051"></a>00051     xc -= _x0; yc -= _y0; zc -= _z0;
-<a name="l00052"></a>00052     x = _r[0] * xc + _r[3] * yc + _r[6] * zc;
-<a name="l00053"></a>00053     y = _r[1] * xc + _r[4] * yc + _r[7] * zc;
-<a name="l00054"></a>00054     z = _r[2] * xc + _r[5] * yc + _r[8] * zc;
-<a name="l00055"></a>00055     <span class="keywordflow">if</span> (M)
-<a name="l00056"></a>00056       MatrixMultiply(M);
-<a name="l00057"></a>00057   }
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   <span class="keywordtype">void</span> LocalCartesian::IntReverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z,
-<a name="l00060"></a>00060                                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& h,
-<a name="l00061"></a>00061                                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00062"></a>00062     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00063"></a>00063       xc = _x0 + _r[0] * x + _r[1] * y + _r[2] * z,
-<a name="l00064"></a>00064       yc = _y0 + _r[3] * x + _r[4] * y + _r[5] * z,
-<a name="l00065"></a>00065       zc = _z0 + _r[6] * x + _r[7] * y + _r[8] * z;
-<a name="l00066"></a>00066     _earth.IntReverse(xc, yc, zc, lat, lon, h, M);
-<a name="l00067"></a>00067     <span class="keywordflow">if</span> (M)
-<a name="l00068"></a>00068       MatrixMultiply(M);
-<a name="l00069"></a>00069   }
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/LocalCartesian_8hpp.html b/doc/html/LocalCartesian_8hpp.html
deleted file mode 100644
index 721998b..0000000
--- a/doc/html/LocalCartesian_8hpp.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: LocalCartesian.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">LocalCartesian.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Geocentric_8hpp_source.html">GeographicLib/Geocentric.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="LocalCartesian_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Local Cartesian coordinates.  <a href="classGeographicLib_1_1LocalCartesian.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="LocalCartesian_8hpp.html#a628d4dcde137e8249cb7fdbcaab30acd">GEOGRAPHICLIB_LOCALCARTESIAN_HPP</a>   "$Id: 133014a30695adf3bdea9f4b52613fab458c505a $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a628d4dcde137e8249cb7fdbcaab30acd"></a><!-- doxytag: member="LocalCartesian.hpp::GEOGRAPHICLIB_LOCALCARTESIAN_HPP" ref="a628d4dcde137e8249cb7fdbcaab30acd" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_LOCALCARTESIAN_HPP   "$Id: 133014a30695adf3bdea9f4b52613fab458c505a $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00011">11</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/LocalCartesian_8hpp_source.html b/doc/html/LocalCartesian_8hpp_source.html
deleted file mode 100644
index cd636b1..0000000
--- a/doc/html/LocalCartesian_8hpp_source.html
+++ /dev/null
@@ -1,318 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: LocalCartesian.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">LocalCartesian.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="LocalCartesian_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file LocalCartesian.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::LocalCartesian class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_LOCALCARTESIAN_HPP)</span>
-<a name="l00011"></a><a class="code" href="LocalCartesian_8hpp.html#a628d4dcde137e8249cb7fdbcaab30acd">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_LOCALCARTESIAN_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 133014a30695adf3bdea9f4b52613fab458c505a $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00018"></a>00018 <span class="comment"></span>
-<a name="l00019"></a>00019 <span class="comment">  /**</span>
-<a name="l00020"></a>00020 <span class="comment">   * \brief Local Cartesian coordinates</span>
-<a name="l00021"></a>00021 <span class="comment">   *</span>
-<a name="l00022"></a>00022 <span class="comment">   * Convert between geodetic coordinates latitude = \e lat, longitude = \e</span>
-<a name="l00023"></a>00023 <span class="comment">   * lon, height = \e h (measured vertically from the surface of the ellipsoid)</span>
-<a name="l00024"></a>00024 <span class="comment">   * to local cartesian coordinates (\e x, \e y, \e z).  The origin of local</span>
-<a name="l00025"></a>00025 <span class="comment">   * cartesian coordinate system is at \e lat = \e lat0, \e lon = \e lon0, \e h</span>
-<a name="l00026"></a>00026 <span class="comment">   * = \e h0. The \e z axis is normal to the ellipsoid; the \e y axis points</span>
-<a name="l00027"></a>00027 <span class="comment">   * due north.  The plane \e z = - \e h0 is tangent to the ellipsoid.</span>
-<a name="l00028"></a>00028 <span class="comment">   *</span>
-<a name="l00029"></a>00029 <span class="comment">   * The conversions all take place via geocentric coordinates using a</span>
-<a name="l00030"></a>00030 <span class="comment">   * Geocentric object (by default Geocentric::WGS84).</span>
-<a name="l00031"></a>00031 <span class="comment">   *</span>
-<a name="l00032"></a>00032 <span class="comment">   * Example of use:</span>
-<a name="l00033"></a>00033 <span class="comment">   * \include example-LocalCartesian.cpp</span>
-<a name="l00034"></a>00034 <span class="comment">   *</span>
-<a name="l00035"></a>00035 <span class="comment">   * <a href="CartConvert.1.html">CartConvert</a> is a command-line utility</span>
-<a name="l00036"></a>00036 <span class="comment">   * providing access to the functionality of Geocentric and LocalCartesian.</span>
-<a name="l00037"></a>00037 <span class="comment">   **********************************************************************/</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> LocalCartesian {
-<a name="l00040"></a>00040   <span class="keyword">private</span>:
-<a name="l00041"></a>00041     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00042"></a>00042     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> dim_ = 3;
-<a name="l00043"></a>00043     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> dim2_ = dim_ * dim_;
-<a name="l00044"></a>00044     Geocentric _earth;
-<a name="l00045"></a>00045     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _lat0, _lon0, _h0;
-<a name="l00046"></a>00046     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _x0, _y0, _z0, _r[dim2_];
-<a name="l00047"></a>00047     <span class="keywordtype">void</span> IntForward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b [...]
-<a name="l00048"></a>00048                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00049"></a>00049     <span class="keywordtype">void</span> IntReverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c [...]
-<a name="l00050"></a>00050                     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00051"></a>00051     <span class="keywordtype">void</span> MatrixMultiply(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[dim2_]) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00052"></a>00052   <span class="keyword">public</span>:
-<a name="l00053"></a>00053 <span class="comment"></span>
-<a name="l00054"></a>00054 <span class="comment">    /**</span>
-<a name="l00055"></a>00055 <span class="comment">     * Constructor setting the origin.</span>
-<a name="l00056"></a>00056 <span class="comment">     *</span>
-<a name="l00057"></a>00057 <span class="comment">     * @param[in] lat0 latitude at origin (degrees).</span>
-<a name="l00058"></a>00058 <span class="comment">     * @param[in] lon0 longitude at origin (degrees).</span>
-<a name="l00059"></a>00059 <span class="comment">     * @param[in] h0 height above ellipsoid at origin (meters); default 0.</span>
-<a name="l00060"></a>00060 <span class="comment">     * @param[in] earth Geocentric object for the transformation; default</span>
-<a name="l00061"></a>00061 <span class="comment">     *   Geocentric::WGS84.</span>
-<a name="l00062"></a>00062 <span class="comment">     **********************************************************************/</span>
-<a name="l00063"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#ad277a6798293d5d66168c3c1438d10a2">00063</a>     LocalCartesian(real lat0, real lon0, real h0 = 0,
-<a name="l00064"></a>00064                    <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>& earth = <a class="code" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>) throw()
-<a name="l00065"></a>00065       : _earth(earth)
-<a name="l00066"></a>00066     { Reset(lat0, lon0, h0); }
-<a name="l00067"></a>00067 <span class="comment"></span>
-<a name="l00068"></a>00068 <span class="comment">    /**</span>
-<a name="l00069"></a>00069 <span class="comment">     * Default constructor.</span>
-<a name="l00070"></a>00070 <span class="comment">     *</span>
-<a name="l00071"></a>00071 <span class="comment">     * @param[in] earth Geocentric object for the transformation; default</span>
-<a name="l00072"></a>00072 <span class="comment">     *   Geocentric::WGS84.</span>
-<a name="l00073"></a>00073 <span class="comment">     *</span>
-<a name="l00074"></a>00074 <span class="comment">     * Sets \e lat0 = 0, \e lon0 = 0, \e h0 = 0.</span>
-<a name="l00075"></a>00075 <span class="comment">     **********************************************************************/</span>
-<a name="l00076"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#a3474a0434b2ff8b258111fe6d8468f0d">00076</a>     <span class="keyword">explicit</span> LocalCartesian(<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>& earth = <a class="code" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>)
-<a name="l00077"></a>00077       throw()
-<a name="l00078"></a>00078       : _earth(earth)
-<a name="l00079"></a>00079     { Reset(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0)); }
-<a name="l00080"></a>00080 <span class="comment"></span>
-<a name="l00081"></a>00081 <span class="comment">    /**</span>
-<a name="l00082"></a>00082 <span class="comment">     * Reset the origin.</span>
-<a name="l00083"></a>00083 <span class="comment">     *</span>
-<a name="l00084"></a>00084 <span class="comment">     * @param[in] lat0 latitude at origin (degrees).</span>
-<a name="l00085"></a>00085 <span class="comment">     * @param[in] lon0 longitude at origin (degrees).</span>
-<a name="l00086"></a>00086 <span class="comment">     * @param[in] h0 height above ellipsoid at origin (meters); default 0.</span>
-<a name="l00087"></a>00087 <span class="comment">     **********************************************************************/</span>
-<a name="l00088"></a>00088     <span class="keywordtype">void</span> Reset(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h0 = 0)
-<a name="l00089"></a>00089       throw();
-<a name="l00090"></a>00090 <span class="comment"></span>
-<a name="l00091"></a>00091 <span class="comment">    /**</span>
-<a name="l00092"></a>00092 <span class="comment">     * Convert from geodetic to local cartesian coordinates.</span>
-<a name="l00093"></a>00093 <span class="comment">     *</span>
-<a name="l00094"></a>00094 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00095"></a>00095 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00096"></a>00096 <span class="comment">     * @param[in] h height of point above the ellipsoid (meters).</span>
-<a name="l00097"></a>00097 <span class="comment">     * @param[out] x local cartesian coordinate (meters).</span>
-<a name="l00098"></a>00098 <span class="comment">     * @param[out] y local cartesian coordinate (meters).</span>
-<a name="l00099"></a>00099 <span class="comment">     * @param[out] z local cartesian coordinate (meters).</span>
-<a name="l00100"></a>00100 <span class="comment">     *</span>
-<a name="l00101"></a>00101 <span class="comment">     * \e lat should be in the range [-90, 90]; \e lon and \e lon0 should be in</span>
-<a name="l00102"></a>00102 <span class="comment">     * the range [-180, 360].</span>
-<a name="l00103"></a>00103 <span class="comment">     **********************************************************************/</span>
-<a name="l00104"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#a6426e95f904f224eabedb8fcd17fe537">00104</a>     <span class="keywordtype">void</span> Forward(real lat, real lon, real h, real& x, real& y, real& z)
-<a name="l00105"></a>00105       const throw() {
-<a name="l00106"></a>00106       IntForward(lat, lon, h, x, y, z, NULL);
-<a name="l00107"></a>00107     }
-<a name="l00108"></a>00108 <span class="comment"></span>
-<a name="l00109"></a>00109 <span class="comment">    /**</span>
-<a name="l00110"></a>00110 <span class="comment">     * Convert from geodetic to local cartesian coordinates and return rotation</span>
-<a name="l00111"></a>00111 <span class="comment">     * matrix.</span>
-<a name="l00112"></a>00112 <span class="comment">     *</span>
-<a name="l00113"></a>00113 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00114"></a>00114 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00115"></a>00115 <span class="comment">     * @param[in] h height of point above the ellipsoid (meters).</span>
-<a name="l00116"></a>00116 <span class="comment">     * @param[out] x local cartesian coordinate (meters).</span>
-<a name="l00117"></a>00117 <span class="comment">     * @param[out] y local cartesian coordinate (meters).</span>
-<a name="l00118"></a>00118 <span class="comment">     * @param[out] z local cartesian coordinate (meters).</span>
-<a name="l00119"></a>00119 <span class="comment">     * @param[out] M if the length of the vector is 9, fill with the rotation</span>
-<a name="l00120"></a>00120 <span class="comment">     *   matrix in row-major order.</span>
-<a name="l00121"></a>00121 <span class="comment">     *</span>
-<a name="l00122"></a>00122 <span class="comment">     * Let \e v be a unit vector located at (\e lat, \e lon, \e h).  We can</span>
-<a name="l00123"></a>00123 <span class="comment">     * express \e v as \e column vectors in one of two ways</span>
-<a name="l00124"></a>00124 <span class="comment">     * - in east, north, up coordinates (where the components are relative to a</span>
-<a name="l00125"></a>00125 <span class="comment">     *   local coordinate system at (\e lat, \e lon, \e h)); call this</span>
-<a name="l00126"></a>00126 <span class="comment">     *   representation \e v1.</span>
-<a name="l00127"></a>00127 <span class="comment">     * - in \e x, \e y, \e z coordinates (where the components are relative to</span>
-<a name="l00128"></a>00128 <span class="comment">     *   the local coordinate system at (\e lat0, \e lon0, \e h0)); call this</span>
-<a name="l00129"></a>00129 <span class="comment">     *   representation \e v0.</span>
-<a name="l00130"></a>00130 <span class="comment">     * .</span>
-<a name="l00131"></a>00131 <span class="comment">     * Then we have \e v0 = \e M . \e v1.</span>
-<a name="l00132"></a>00132 <span class="comment">     **********************************************************************/</span>
-<a name="l00133"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#a774332be14e894536f13b3cc7a8323c7">00133</a>     <span class="keywordtype">void</span> Forward(real lat, real lon, real h, real& x, real& y, real& z,
-<a name="l00134"></a>00134                  std::vector<real>& M)
-<a name="l00135"></a>00135       <span class="keyword">const</span> <span class="keywordflow">throw</span>()  {
-<a name="l00136"></a>00136       <span class="keywordflow">if</span> (M.end() == M.begin() + dim2_) {
-<a name="l00137"></a>00137         real t[dim2_];
-<a name="l00138"></a>00138         IntForward(lat, lon, h, x, y, z, t);
-<a name="l00139"></a>00139         copy(t, t + dim2_, M.begin());
-<a name="l00140"></a>00140       } <span class="keywordflow">else</span>
-<a name="l00141"></a>00141         IntForward(lat, lon, h, x, y, z, NULL);
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143 <span class="comment"></span>
-<a name="l00144"></a>00144 <span class="comment">    /**</span>
-<a name="l00145"></a>00145 <span class="comment">     * Convert from local cartesian to geodetic coordinates.</span>
-<a name="l00146"></a>00146 <span class="comment">     *</span>
-<a name="l00147"></a>00147 <span class="comment">     * @param[in] x local cartesian coordinate (meters).</span>
-<a name="l00148"></a>00148 <span class="comment">     * @param[in] y local cartesian coordinate (meters).</span>
-<a name="l00149"></a>00149 <span class="comment">     * @param[in] z local cartesian coordinate (meters).</span>
-<a name="l00150"></a>00150 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00151"></a>00151 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00152"></a>00152 <span class="comment">     * @param[out] h height of point above the ellipsoid (meters).</span>
-<a name="l00153"></a>00153 <span class="comment">     *</span>
-<a name="l00154"></a>00154 <span class="comment">     * The value of \e lon returned is in the range [-180, 180).</span>
-<a name="l00155"></a>00155 <span class="comment">     **********************************************************************/</span>
-<a name="l00156"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#ac34878de3ae995e7d54f0347a1f34118">00156</a>     <span class="keywordtype">void</span> Reverse(real x, real y, real z, real& lat, real& lon, real& h)
-<a name="l00157"></a>00157       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00158"></a>00158       IntReverse(x, y, z, lat, lon, h, NULL);
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160 <span class="comment"></span>
-<a name="l00161"></a>00161 <span class="comment">    /**</span>
-<a name="l00162"></a>00162 <span class="comment">     * Convert from local cartesian to geodetic coordinates and return rotation</span>
-<a name="l00163"></a>00163 <span class="comment">     * matrix.</span>
-<a name="l00164"></a>00164 <span class="comment">     *</span>
-<a name="l00165"></a>00165 <span class="comment">     * @param[in] x local cartesian coordinate (meters).</span>
-<a name="l00166"></a>00166 <span class="comment">     * @param[in] y local cartesian coordinate (meters).</span>
-<a name="l00167"></a>00167 <span class="comment">     * @param[in] z local cartesian coordinate (meters).</span>
-<a name="l00168"></a>00168 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00169"></a>00169 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00170"></a>00170 <span class="comment">     * @param[out] h height of point above the ellipsoid (meters).</span>
-<a name="l00171"></a>00171 <span class="comment">     * @param[out] M if the length of the vector is 9, fill with the rotation</span>
-<a name="l00172"></a>00172 <span class="comment">     *   matrix in row-major order.</span>
-<a name="l00173"></a>00173 <span class="comment">     *</span>
-<a name="l00174"></a>00174 <span class="comment">     * Let \e v be a unit vector located at (\e lat, \e lon, \e h).  We can</span>
-<a name="l00175"></a>00175 <span class="comment">     * express \e v as \e column vectors in one of two ways</span>
-<a name="l00176"></a>00176 <span class="comment">     * - in east, north, up coordinates (where the components are relative to a</span>
-<a name="l00177"></a>00177 <span class="comment">     *   local coordinate system at (\e lat, \e lon, \e h)); call this</span>
-<a name="l00178"></a>00178 <span class="comment">     *   representation \e v1.</span>
-<a name="l00179"></a>00179 <span class="comment">     * - in \e x, \e y, \e z coordinates (where the components are relative to</span>
-<a name="l00180"></a>00180 <span class="comment">     *   the local coordinate system at (\e lat0, \e lon0, \e h0)); call this</span>
-<a name="l00181"></a>00181 <span class="comment">     *   representation \e v0.</span>
-<a name="l00182"></a>00182 <span class="comment">     * .</span>
-<a name="l00183"></a>00183 <span class="comment">     * Then we have \e v1 = \e M^T . \e v0, where \e M^T is the transpose of \e</span>
-<a name="l00184"></a>00184 <span class="comment">     * M.</span>
-<a name="l00185"></a>00185 <span class="comment">     **********************************************************************/</span>
-<a name="l00186"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#a7baa88b38b320d763f6cba3ece4f518d">00186</a>     <span class="keywordtype">void</span> Reverse(real x, real y, real z, real& lat, real& lon, real& h,
-<a name="l00187"></a>00187                  std::vector<real>& M)
-<a name="l00188"></a>00188       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00189"></a>00189       <span class="keywordflow">if</span> (M.end() == M.begin() + dim2_) {
-<a name="l00190"></a>00190         real t[dim2_];
-<a name="l00191"></a>00191         IntReverse(x, y, z, lat, lon, h, t);
-<a name="l00192"></a>00192         copy(t, t + dim2_, M.begin());
-<a name="l00193"></a>00193       } <span class="keywordflow">else</span>
-<a name="l00194"></a>00194         IntReverse(x, y, z, lat, lon, h, NULL);
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 <span class="comment"></span>
-<a name="l00197"></a>00197 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00198"></a>00198 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00199"></a>00199 <span class="comment">    ///@{</span>
-<a name="l00200"></a>00200 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00201"></a>00201 <span class="comment">     * @return latitude of the origin (degrees).</span>
-<a name="l00202"></a>00202 <span class="comment">     **********************************************************************/</span>
-<a name="l00203"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#af4905164de5157c7ae2678f7716cbad7">00203</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1LocalCartesian.html#af4905164de5157c7ae2678f7716cbad7">LatitudeOrigin</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _lat0; }
-<a name="l00204"></a>00204 <span class="comment"></span>
-<a name="l00205"></a>00205 <span class="comment">    /**</span>
-<a name="l00206"></a>00206 <span class="comment">     * @return longitude of the origin (degrees).</span>
-<a name="l00207"></a>00207 <span class="comment">     **********************************************************************/</span>
-<a name="l00208"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#a45656227b4fff45249f1844bc6d233ad">00208</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1LocalCartesian.html#a45656227b4fff45249f1844bc6d233ad">LongitudeOrigin</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _lon0; }
-<a name="l00209"></a>00209 <span class="comment"></span>
-<a name="l00210"></a>00210 <span class="comment">    /**</span>
-<a name="l00211"></a>00211 <span class="comment">     * @return height of the origin (meters).</span>
-<a name="l00212"></a>00212 <span class="comment">     **********************************************************************/</span>
-<a name="l00213"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#ac8e00f262d70da122f45afa15b9381e2">00213</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1LocalCartesian.html#ac8e00f262d70da122f45afa15b9381e2">HeightOrigin</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _h0; }
-<a name="l00214"></a>00214 <span class="comment"></span>
-<a name="l00215"></a>00215 <span class="comment">    /**</span>
-<a name="l00216"></a>00216 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00217"></a>00217 <span class="comment">     *   the value of \e a inherited from the Geocentric object used in the</span>
-<a name="l00218"></a>00218 <span class="comment">     *   constructor.</span>
-<a name="l00219"></a>00219 <span class="comment">     **********************************************************************/</span>
-<a name="l00220"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#a795356c736f1170fe5ef075ebbf34354">00220</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1LocalCartesian.html#a795356c736f1170fe5ef075ebbf34354">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.MajorRadius(); }
-<a name="l00221"></a>00221 <span class="comment"></span>
-<a name="l00222"></a>00222 <span class="comment">    /**</span>
-<a name="l00223"></a>00223 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value</span>
-<a name="l00224"></a>00224 <span class="comment">     *   inherited from the Geocentric object used in the constructor.</span>
-<a name="l00225"></a>00225 <span class="comment">     **********************************************************************/</span>
-<a name="l00226"></a><a class="code" href="classGeographicLib_1_1LocalCartesian.html#a99907eda4b863acbe8e7d159a6482abb">00226</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1LocalCartesian.html#a99907eda4b863acbe8e7d159a6482abb">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.Flattening(); }<span cla [...]
-<a name="l00227"></a>00227 <span class="comment">    ///@}</span>
-<a name="l00228"></a>00228 <span class="comment"></span><span class="comment"></span>
-<a name="l00229"></a>00229 <span class="comment">    /// \cond SKIP</span>
-<a name="l00230"></a>00230 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00231"></a>00231 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00232"></a>00232 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00233"></a>00233 <span class="comment">     **********************************************************************/</span>
-<a name="l00234"></a>00234     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw()
-<a name="l00235"></a>00235     { <span class="keywordflow">return</span> _earth.InverseFlattening(); }<span class="comment"></span>
-<a name="l00236"></a>00236 <span class="comment">    /// \endcond</span>
-<a name="l00237"></a>00237 <span class="comment"></span>  };
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 <span class="preprocessor">#endif  // GEOGRAPHICLIB_LOCALCARTESIAN_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MGRS_8cpp.html b/doc/html/MGRS_8cpp.html
deleted file mode 100644
index b59433f..0000000
--- a/doc/html/MGRS_8cpp.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MGRS.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">MGRS.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="MGRS_8hpp_source.html">GeographicLib/MGRS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="MGRS_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="MGRS_8cpp.html#a7882927f72a62a7131868e387edd4dac">GEOGRAPHICLIB_MGRS_CPP</a>   "$Id: e4e6b419c8cd8544b3edab85b3352add0d1dd7cb $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="MGRS_8cpp_source.html">MGRS.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a7882927f72a62a7131868e387edd4dac"></a><!-- doxytag: member="MGRS.cpp::GEOGRAPHICLIB_MGRS_CPP" ref="a7882927f72a62a7131868e387edd4dac" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_MGRS_CPP   "$Id: e4e6b419c8cd8544b3edab85b3352add0d1dd7cb $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MGRS_8cpp_source.html#l00013">13</a> of file <a class="el" href="MGRS_8cpp_source.html">MGRS.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MGRS_8cpp_source.html b/doc/html/MGRS_8cpp_source.html
deleted file mode 100644
index 3e405bc..0000000
--- a/doc/html/MGRS_8cpp_source.html
+++ /dev/null
@@ -1,419 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MGRS.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">MGRS.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="MGRS_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file MGRS.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::MGRS class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="MGRS_8hpp.html" title="Header for GeographicLib::MGRS class.">GeographicLib/MGRS.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00012"></a>00012 
-<a name="l00013"></a><a class="code" href="MGRS_8cpp.html#a7882927f72a62a7131868e387edd4dac">00013</a> <span class="preprocessor">#define GEOGRAPHICLIB_MGRS_CPP "$Id: e4e6b419c8cd8544b3edab85b3352add0d1dd7cb $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="MGRS_8cpp.html#a7882927f72a62a7131868e387edd4dac">GEOGRAPHICLIB_MGRS_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="MGRS_8hpp.html#a1c5e778121820c6ec16b6180ffab51ac">GEOGRAPHICLIB_MGRS_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> MGRS::eps_ =
-<a name="l00023"></a>00023     <span class="comment">// 25 = ceil(log_2(2e7)) -- use half circumference here because northing</span>
-<a name="l00024"></a>00024     <span class="comment">// 195e5 is a legal in the "southern" hemisphere.</span>
-<a name="l00025"></a>00025     pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5), numeric_limits<real>::digits - 25);
-<a name="l00026"></a>00026   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> MGRS::angeps_ =
-<a name="l00027"></a>00027     <span class="comment">// 7 = ceil(log_2(90))</span>
-<a name="l00028"></a>00028     pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5), numeric_limits<real>::digits - 7);
-<a name="l00029"></a>00029   <span class="keyword">const</span> <span class="keywordtype">string</span> MGRS::hemispheres_ = <span class="stringliteral">"SN"</span>;
-<a name="l00030"></a>00030   <span class="keyword">const</span> <span class="keywordtype">string</span> MGRS::utmcols_[3] = { <span class="stringliteral">"ABCDEFGH"</span>, <span class="stringliteral">"JKLMNPQR"</span>, <span class="stringliteral">"STUVWXYZ"</span> };
-<a name="l00031"></a>00031   <span class="keyword">const</span> <span class="keywordtype">string</span> MGRS::utmrow_ = <span class="stringliteral">"ABCDEFGHJKLMNPQRSTUV"</span>;
-<a name="l00032"></a>00032   <span class="keyword">const</span> <span class="keywordtype">string</span> MGRS::upscols_[4] =
-<a name="l00033"></a>00033     { <span class="stringliteral">"JKLPQRSTUXYZ"</span>, <span class="stringliteral">"ABCFGHJKLPQR"</span>, <span class="stringliteral">"RSTUXYZ"</span>, <span class="stringliteral">"ABCFGHJ"</span> };
-<a name="l00034"></a>00034   <span class="keyword">const</span> <span class="keywordtype">string</span> MGRS::upsrows_[2] =
-<a name="l00035"></a>00035     { <span class="stringliteral">"ABCDEFGHJKLMNPQRSTUVWXYZ"</span>, <span class="stringliteral">"ABCDEFGHJKLMNP"</span> };
-<a name="l00036"></a>00036   <span class="keyword">const</span> <span class="keywordtype">string</span> MGRS::latband_ = <span class="stringliteral">"CDEFGHJKLMNPQRSTUVWX"</span>;
-<a name="l00037"></a>00037   <span class="keyword">const</span> <span class="keywordtype">string</span> MGRS::upsband_ = <span class="stringliteral">"ABYZ"</span>;
-<a name="l00038"></a>00038   <span class="keyword">const</span> <span class="keywordtype">string</span> MGRS::digits_ = <span class="stringliteral">"0123456789"</span>;
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040   <span class="keyword">const</span> <span class="keywordtype">int</span> MGRS::mineasting_[4] =
-<a name="l00041"></a>00041     { minupsSind_, minupsNind_, minutmcol_, minutmcol_ };
-<a name="l00042"></a>00042   <span class="keyword">const</span> <span class="keywordtype">int</span> MGRS::maxeasting_[4] =
-<a name="l00043"></a>00043     { maxupsSind_, maxupsNind_, maxutmcol_, maxutmcol_ };
-<a name="l00044"></a>00044   <span class="keyword">const</span> <span class="keywordtype">int</span> MGRS::minnorthing_[4] =
-<a name="l00045"></a>00045     { minupsSind_, minupsNind_,
-<a name="l00046"></a>00046       minutmSrow_, minutmSrow_ - (maxutmSrow_ - minutmNrow_) };
-<a name="l00047"></a>00047   <span class="keyword">const</span> <span class="keywordtype">int</span> MGRS::maxnorthing_[4] =
-<a name="l00048"></a>00048     { maxupsSind_, maxupsNind_,
-<a name="l00049"></a>00049       maxutmNrow_ + (maxutmSrow_ - minutmNrow_), maxutmNrow_ };
-<a name="l00050"></a>00050 
-<a name="l00051"></a><a class="code" href="classGeographicLib_1_1MGRS.html#a37f9dd9b12dbc74381116d842be47ccd">00051</a>   <span class="keywordtype">void</span> MGRS::Forward(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp, real x, real y, real lat,
-<a name="l00052"></a>00052                      <span class="keywordtype">int</span> prec, std::string& mgrs) {
-<a name="l00053"></a>00053     <span class="keywordflow">if</span> (zone == UTMUPS::INVALID ||
-<a name="l00054"></a>00054         Math::isnan(x) || Math::isnan(y) || Math::isnan(lat)) {
-<a name="l00055"></a>00055       prec = -1;
-<a name="l00056"></a>00056       mgrs = <span class="stringliteral">"INVALID"</span>;
-<a name="l00057"></a>00057       <span class="keywordflow">return</span>;
-<a name="l00058"></a>00058     }
-<a name="l00059"></a>00059     <span class="keywordtype">bool</span> utmp = zone != 0;
-<a name="l00060"></a>00060     CheckCoords(utmp, northp, x, y);
-<a name="l00061"></a>00061     <span class="keywordflow">if</span> (!(zone >= UTMUPS::MINZONE && zone <= UTMUPS::MAXZONE))
-<a name="l00062"></a>00062       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Zone "</span> + Utility::str(zone) + <span class="stringliteral">" not in [0,60]"</span>);
-<a name="l00063"></a>00063     <span class="keywordflow">if</span> (!(prec >= 0 && prec <= maxprec_))
-<a name="l00064"></a>00064       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"MGRS precision "</span> + Utility::str(prec)
-<a name="l00065"></a>00065                           + <span class="stringliteral">" not in [0, "</span>
-<a name="l00066"></a>00066                           + Utility::str(<span class="keywordtype">int</span>(maxprec_)) + <span class="stringliteral">"]"</span>);
-<a name="l00067"></a>00067     <span class="comment">// Fixed char array for accumulating string.  Allow space for zone, 3 block</span>
-<a name="l00068"></a>00068     <span class="comment">// letters, easting + northing.  Don't need to allow for terminating null.</span>
-<a name="l00069"></a>00069     <span class="keywordtype">char</span> mgrs1[2 + 3 + 2 * maxprec_];
-<a name="l00070"></a>00070     <span class="keywordtype">int</span>
-<a name="l00071"></a>00071       zone1 = zone - 1,
-<a name="l00072"></a>00072       z = utmp ? 2 : 0,
-<a name="l00073"></a>00073       mlen = z + 3 + 2 * prec;
-<a name="l00074"></a>00074     <span class="keywordflow">if</span> (utmp) {
-<a name="l00075"></a>00075       mgrs1[0] = digits_[ zone / base_ ];
-<a name="l00076"></a>00076       mgrs1[1] = digits_[ zone % base_ ];
-<a name="l00077"></a>00077       <span class="comment">// This isn't necessary...!  Keep y non-neg</span>
-<a name="l00078"></a>00078       <span class="comment">// if (!northp) y -= maxutmSrow_ * tile_;</span>
-<a name="l00079"></a>00079     }
-<a name="l00080"></a>00080     <span class="keywordtype">int</span>
-<a name="l00081"></a>00081       xh = int(floor(x)) / tile_,
-<a name="l00082"></a>00082       yh = int(floor(y)) / tile_;
-<a name="l00083"></a>00083     real
-<a name="l00084"></a>00084       xf = x - tile_ * xh,
-<a name="l00085"></a>00085       yf = y - tile_ * yh;
-<a name="l00086"></a>00086     <span class="keywordflow">if</span> (utmp) {
-<a name="l00087"></a>00087       <span class="keywordtype">int</span>
-<a name="l00088"></a>00088         <span class="comment">// Correct fuzziness in latitude near equator</span>
-<a name="l00089"></a>00089         iband = abs(lat) > angeps_ ? LatitudeBand(lat) : (northp ? 0 : -1),
-<a name="l00090"></a>00090         icol = xh - minutmcol_,
-<a name="l00091"></a>00091         irow = UTMRow(iband, icol, yh % utmrowperiod_);
-<a name="l00092"></a>00092       <span class="keywordflow">if</span> (irow != yh - (northp ? minutmNrow_ : maxutmSrow_))
-<a name="l00093"></a>00093         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude "</span> + Utility::str(lat)
-<a name="l00094"></a>00094                             + <span class="stringliteral">" is inconsistent with UTM coordinates"</span>);
-<a name="l00095"></a>00095       mgrs1[z++] = latband_[10 + iband];
-<a name="l00096"></a>00096       mgrs1[z++] = utmcols_[zone1 % 3][icol];
-<a name="l00097"></a>00097       mgrs1[z++] = utmrow_[(yh + (zone1 & 1 ? utmevenrowshift_ : 0))
-<a name="l00098"></a>00098                          % utmrowperiod_];
-<a name="l00099"></a>00099     } <span class="keywordflow">else</span> {
-<a name="l00100"></a>00100       <span class="keywordtype">bool</span> eastp = xh >= upseasting_;
-<a name="l00101"></a>00101       <span class="keywordtype">int</span> iband = (northp ? 2 : 0) + (eastp ? 1 : 0);
-<a name="l00102"></a>00102       mgrs1[z++] = upsband_[iband];
-<a name="l00103"></a>00103       mgrs1[z++] = upscols_[iband][xh - (eastp ? upseasting_ :
-<a name="l00104"></a>00104                                          (northp ? minupsNind_ : minupsSind_))];
-<a name="l00105"></a>00105       mgrs1[z++] = upsrows_[northp][yh - (northp ? minupsNind_ : minupsSind_)];
-<a name="l00106"></a>00106     }
-<a name="l00107"></a>00107     real mult = pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(base_), max(tilelevel_ - prec, 0));
-<a name="l00108"></a>00108     <span class="keywordtype">int</span>
-<a name="l00109"></a>00109       ix = int(floor(xf / mult)),
-<a name="l00110"></a>00110       iy = int(floor(yf / mult));
-<a name="l00111"></a>00111     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = min(prec, <span class="keywordtype">int</span>(tilelevel_)); c--;) {
-<a name="l00112"></a>00112       mgrs1[z + c] = digits_[ ix % base_ ];
-<a name="l00113"></a>00113       ix /= base_;
-<a name="l00114"></a>00114       mgrs1[z + c + prec] = digits_[ iy % base_ ];
-<a name="l00115"></a>00115       iy /= base_;
-<a name="l00116"></a>00116     }
-<a name="l00117"></a>00117     <span class="keywordflow">if</span> (prec > tilelevel_) {
-<a name="l00118"></a>00118       xf -= floor(xf / mult);
-<a name="l00119"></a>00119       yf -= floor(yf / mult);
-<a name="l00120"></a>00120       mult = pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(base_), prec - tilelevel_);
-<a name="l00121"></a>00121       ix = int(floor(xf * mult));
-<a name="l00122"></a>00122       iy = int(floor(yf * mult));
-<a name="l00123"></a>00123       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = prec - tilelevel_; c--;) {
-<a name="l00124"></a>00124         mgrs1[z + c + tilelevel_] = digits_[ ix % base_ ];
-<a name="l00125"></a>00125         ix /= base_;
-<a name="l00126"></a>00126         mgrs1[z + c + tilelevel_ + prec] = digits_[ iy % base_ ];
-<a name="l00127"></a>00127         iy /= base_;
-<a name="l00128"></a>00128       }
-<a name="l00129"></a>00129     }
-<a name="l00130"></a>00130     mgrs.resize(mlen);
-<a name="l00131"></a>00131     copy(mgrs1, mgrs1 + mlen, mgrs.begin());
-<a name="l00132"></a>00132   }
-<a name="l00133"></a>00133 
-<a name="l00134"></a><a class="code" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">00134</a>   <span class="keywordtype">void</span> MGRS::Forward(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp, real x, real y,
-<a name="l00135"></a>00135                      <span class="keywordtype">int</span> prec, std::string& mgrs) {
-<a name="l00136"></a>00136     real lat, lon;
-<a name="l00137"></a>00137     <span class="keywordflow">if</span> (zone > 0)
-<a name="l00138"></a>00138       UTMUPS::Reverse(zone, northp, x, y, lat, lon);
-<a name="l00139"></a>00139     <span class="keywordflow">else</span>
-<a name="l00140"></a>00140       <span class="comment">// Latitude isn't needed for UPS specs or for INVALID</span>
-<a name="l00141"></a>00141       lat = 0;
-<a name="l00142"></a>00142     Forward(zone, northp, x, y, lat, prec, mgrs);
-<a name="l00143"></a>00143   }
-<a name="l00144"></a>00144 
-<a name="l00145"></a><a class="code" href="classGeographicLib_1_1MGRS.html#a066b79e78cd85bf4b50df50808bed7e3">00145</a>   <span class="keywordtype">void</span> MGRS::Reverse(<span class="keyword">const</span> std::string& mgrs,
-<a name="l00146"></a>00146                      <span class="keywordtype">int</span>& zone, <span class="keywordtype">bool</span>& northp, real& x, real& y,
-<a name="l00147"></a>00147                      <span class="keywordtype">int</span>& prec, <span class="keywordtype">bool</span> centerp) {
-<a name="l00148"></a>00148     <span class="keywordtype">int</span>
-<a name="l00149"></a>00149       p = 0,
-<a name="l00150"></a>00150       len = int(mgrs.size());
-<a name="l00151"></a>00151     <span class="keywordflow">if</span> (len >= 3 &&
-<a name="l00152"></a>00152         toupper(mgrs[0]) == <span class="charliteral">'I'</span> &&
-<a name="l00153"></a>00153         toupper(mgrs[1]) == <span class="charliteral">'N'</span> &&
-<a name="l00154"></a>00154         toupper(mgrs[2]) == <span class="charliteral">'V'</span>) {
-<a name="l00155"></a>00155       zone = <a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>::INVALID;
-<a name="l00156"></a>00156       northp = <span class="keyword">false</span>;
-<a name="l00157"></a>00157       x = y = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00158"></a>00158       prec = -1;
-<a name="l00159"></a>00159       <span class="keywordflow">return</span>;
-<a name="l00160"></a>00160     }
-<a name="l00161"></a>00161     <span class="keywordtype">int</span> zone1 = 0;
-<a name="l00162"></a>00162     <span class="keywordflow">while</span> (p < len) {
-<a name="l00163"></a>00163       <span class="keywordtype">int</span> i = Utility::lookup(digits_, mgrs[p]);
-<a name="l00164"></a>00164       <span class="keywordflow">if</span> (i < 0)
-<a name="l00165"></a>00165         <span class="keywordflow">break</span>;
-<a name="l00166"></a>00166       zone1 = 10 * zone1 + i;
-<a name="l00167"></a>00167       ++p;
-<a name="l00168"></a>00168     }
-<a name="l00169"></a>00169     <span class="keywordflow">if</span> (p > 0 && !(zone1 >= UTMUPS::MINUTMZONE && zone1 <= UTMUPS::MAXUTMZONE))
-<a name="l00170"></a>00170       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Zone "</span> + Utility::str(zone1) + <span class="stringliteral">" not in [1,60]"</span>);
-<a name="l00171"></a>00171     <span class="keywordflow">if</span> (p > 2)
-<a name="l00172"></a>00172       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"More than 2 digits_ at start of MGRS "</span>
-<a name="l00173"></a>00173                           + mgrs.substr(0, p));
-<a name="l00174"></a>00174     <span class="keywordflow">if</span> (len - p < 3)
-<a name="l00175"></a>00175       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"MGRS string too short "</span> + mgrs);
-<a name="l00176"></a>00176     <span class="keywordtype">bool</span> utmp = zone1 != <a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>::UPS;
-<a name="l00177"></a>00177     <span class="keywordtype">int</span> zonem1 = zone1 - 1;
-<a name="l00178"></a>00178     <span class="keyword">const</span> <span class="keywordtype">string</span>& band = utmp ? latband_ : upsband_;
-<a name="l00179"></a>00179     <span class="keywordtype">int</span> iband = Utility::lookup(band, mgrs[p++]);
-<a name="l00180"></a>00180     <span class="keywordflow">if</span> (iband < 0)
-<a name="l00181"></a>00181       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Band letter "</span> + Utility::str(mgrs[p-1]) + <span class="stringliteral">" not in "</span>
-<a name="l00182"></a>00182                           + (utmp ? <span class="stringliteral">"UTM"</span> : <span class="stringliteral">"UPS"</span>) + <span class="stringliteral">" set "</span> + band);
-<a name="l00183"></a>00183     <span class="keywordtype">bool</span> northp1 = iband >= (utmp ? 10 : 2);
-<a name="l00184"></a>00184     <span class="keyword">const</span> <span class="keywordtype">string</span>& col = utmp ? utmcols_[zonem1 % 3] : upscols_[iband];
-<a name="l00185"></a>00185     <span class="keyword">const</span> <span class="keywordtype">string</span>& row = utmp ? utmrow_ : upsrows_[northp1];
-<a name="l00186"></a>00186     <span class="keywordtype">int</span> icol = Utility::lookup(col, mgrs[p++]);
-<a name="l00187"></a>00187     <span class="keywordflow">if</span> (icol < 0)
-<a name="l00188"></a>00188       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Column letter "</span> + Utility::str(mgrs[p-1])
-<a name="l00189"></a>00189                           + <span class="stringliteral">" not in "</span>
-<a name="l00190"></a>00190                           + (utmp ? <span class="stringliteral">"zone "</span> + mgrs.substr(0, p-2) :
-<a name="l00191"></a>00191                              <span class="stringliteral">"UPS band "</span> + Utility::str(mgrs[p-2]))
-<a name="l00192"></a>00192                           + <span class="stringliteral">" set "</span> + col );
-<a name="l00193"></a>00193     <span class="keywordtype">int</span> irow = Utility::lookup(row, mgrs[p++]);
-<a name="l00194"></a>00194     <span class="keywordflow">if</span> (irow < 0)
-<a name="l00195"></a>00195       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Row letter "</span> + Utility::str(mgrs[p-1]) + <span class="stringliteral">" not in "</span>
-<a name="l00196"></a>00196                           + (utmp ? <span class="stringliteral">"UTM"</span> :
-<a name="l00197"></a>00197                              <span class="stringliteral">"UPS "</span> + Utility::str(hemispheres_[northp1]))
-<a name="l00198"></a>00198                           + <span class="stringliteral">" set "</span> + row);
-<a name="l00199"></a>00199     <span class="keywordflow">if</span> (utmp) {
-<a name="l00200"></a>00200       <span class="keywordflow">if</span> (zonem1 & 1)
-<a name="l00201"></a>00201         irow = (irow + utmrowperiod_ - utmevenrowshift_) % utmrowperiod_;
-<a name="l00202"></a>00202       iband -= 10;
-<a name="l00203"></a>00203       irow = UTMRow(iband, icol, irow);
-<a name="l00204"></a>00204       <span class="keywordflow">if</span> (irow == maxutmSrow_)
-<a name="l00205"></a>00205         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Block "</span> + mgrs.substr(p-2, 2)
-<a name="l00206"></a>00206                             + <span class="stringliteral">" not in zone/band "</span> + mgrs.substr(0, p-2));
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208       irow = northp1 ? irow : irow + 100;
-<a name="l00209"></a>00209       icol = icol + minutmcol_;
-<a name="l00210"></a>00210     } <span class="keywordflow">else</span> {
-<a name="l00211"></a>00211       <span class="keywordtype">bool</span> eastp = iband & 1;
-<a name="l00212"></a>00212       icol += eastp ? upseasting_ : (northp1 ? minupsNind_ : minupsSind_);
-<a name="l00213"></a>00213       irow += northp1 ? minupsNind_ : minupsSind_;
-<a name="l00214"></a>00214     }
-<a name="l00215"></a>00215     <span class="keywordtype">int</span> prec1 = (len - p)/2;
-<a name="l00216"></a>00216     real
-<a name="l00217"></a>00217       unit = tile_,
-<a name="l00218"></a>00218       x1 = unit * icol,
-<a name="l00219"></a>00219       y1 = unit * irow;
-<a name="l00220"></a>00220     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < prec1; ++i) {
-<a name="l00221"></a>00221       unit /= base_;
-<a name="l00222"></a>00222       <span class="keywordtype">int</span>
-<a name="l00223"></a>00223         ix = Utility::lookup(digits_, mgrs[p + i]),
-<a name="l00224"></a>00224         iy = Utility::lookup(digits_, mgrs[p + i + prec1]);
-<a name="l00225"></a>00225       <span class="keywordflow">if</span> (ix < 0 || iy < 0)
-<a name="l00226"></a>00226         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Encountered a non-digit in "</span> + mgrs.substr(p));
-<a name="l00227"></a>00227       x1 += unit * ix;
-<a name="l00228"></a>00228       y1 += unit * iy;
-<a name="l00229"></a>00229     }
-<a name="l00230"></a>00230     <span class="keywordflow">if</span> ((len - p) % 2) {
-<a name="l00231"></a>00231       <span class="keywordflow">if</span> (Utility::lookup(digits_, mgrs[len - 1]) < 0)
-<a name="l00232"></a>00232         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Encountered a non-digit in "</span> + mgrs.substr(p));
-<a name="l00233"></a>00233       <span class="keywordflow">else</span>
-<a name="l00234"></a>00234         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Not an even number of digits_ in "</span>
-<a name="l00235"></a>00235                             + mgrs.substr(p));
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237     <span class="keywordflow">if</span> (prec1 > maxprec_)
-<a name="l00238"></a>00238       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"More than "</span> + Utility::str(2*maxprec_)
-<a name="l00239"></a>00239                           + <span class="stringliteral">" digits_ in "</span>
-<a name="l00240"></a>00240                           + mgrs.substr(p));
-<a name="l00241"></a>00241     <span class="keywordflow">if</span> (centerp) {
-<a name="l00242"></a>00242       x1 += unit/2;
-<a name="l00243"></a>00243       y1 += unit/2;
-<a name="l00244"></a>00244     }
-<a name="l00245"></a>00245     zone = zone1;
-<a name="l00246"></a>00246     northp = northp1;
-<a name="l00247"></a>00247     x = x1;
-<a name="l00248"></a>00248     y = y1;
-<a name="l00249"></a>00249     prec = prec1;
-<a name="l00250"></a>00250   }
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252   <span class="keywordtype">void</span> MGRS::CheckCoords(<span class="keywordtype">bool</span> utmp, <span class="keywordtype">bool</span>& northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y) {
-<a name="l00253"></a>00253     <span class="comment">// Limits are all multiples of 100km and are all closed on the lower end</span>
-<a name="l00254"></a>00254     <span class="comment">// and open on the upper end -- and this is reflected in the error</span>
-<a name="l00255"></a>00255     <span class="comment">// messages.  However if a coordinate lies on the excluded upper end (e.g.,</span>
-<a name="l00256"></a>00256     <span class="comment">// after rounding), it is shifted down by eps_.  This also folds UTM</span>
-<a name="l00257"></a>00257     <span class="comment">// northings to the correct N/S hemisphere.</span>
-<a name="l00258"></a>00258     <span class="keywordtype">int</span>
-<a name="l00259"></a>00259       ix = int(floor(x / tile_)),
-<a name="l00260"></a>00260       iy = int(floor(y / tile_)),
-<a name="l00261"></a>00261       ind = (utmp ? 2 : 0) + (northp ? 1 : 0);
-<a name="l00262"></a>00262     <span class="keywordflow">if</span> (! (ix >= mineasting_[ind] && ix < maxeasting_[ind]) ) {
-<a name="l00263"></a>00263       <span class="keywordflow">if</span> (ix == maxeasting_[ind] && x == maxeasting_[ind] * tile_)
-<a name="l00264"></a>00264         x -= eps_;
-<a name="l00265"></a>00265       <span class="keywordflow">else</span>
-<a name="l00266"></a>00266         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Easting "</span> + Utility::str(<span class="keywordtype">int</span>(floor(x/1000)))
-<a name="l00267"></a>00267                             + <span class="stringliteral">"km not in MGRS/"</span>
-<a name="l00268"></a>00268                             + (utmp ? <span class="stringliteral">"UTM"</span> : <span class="stringliteral">"UPS"</span>) + <span class="stringliteral">" range for "</span>
-<a name="l00269"></a>00269                             + (northp ? <span class="stringliteral">"N"</span> : <span class="stringliteral">"S"</span> ) + <span class="stringliteral">" hemisphere ["</span>
-<a name="l00270"></a>00270                             + Utility::str(mineasting_[ind]*tile_/1000)
-<a name="l00271"></a>00271                             + <span class="stringliteral">"km, "</span>
-<a name="l00272"></a>00272                             + Utility::str(maxeasting_[ind]*tile_/1000)
-<a name="l00273"></a>00273                             + <span class="stringliteral">"km)"</span>);
-<a name="l00274"></a>00274     }
-<a name="l00275"></a>00275     <span class="keywordflow">if</span> (! (iy >= minnorthing_[ind] && iy < maxnorthing_[ind]) ) {
-<a name="l00276"></a>00276       <span class="keywordflow">if</span> (iy == maxnorthing_[ind] && y == maxnorthing_[ind] * tile_)
-<a name="l00277"></a>00277         y -= eps_;
-<a name="l00278"></a>00278       <span class="keywordflow">else</span>
-<a name="l00279"></a>00279         <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Northing "</span> + Utility::str(<span class="keywordtype">int</span>(floor(y/1000)))
-<a name="l00280"></a>00280                             + <span class="stringliteral">"km not in MGRS/"</span>
-<a name="l00281"></a>00281                             + (utmp ? <span class="stringliteral">"UTM"</span> : <span class="stringliteral">"UPS"</span>) + <span class="stringliteral">" range for "</span>
-<a name="l00282"></a>00282                             + (northp ? <span class="stringliteral">"N"</span> : <span class="stringliteral">"S"</span> ) + <span class="stringliteral">" hemisphere ["</span>
-<a name="l00283"></a>00283                             + Utility::str(minnorthing_[ind]*tile_/1000)
-<a name="l00284"></a>00284                             + <span class="stringliteral">"km, "</span>
-<a name="l00285"></a>00285                             + Utility::str(maxnorthing_[ind]*tile_/1000)
-<a name="l00286"></a>00286                             + <span class="stringliteral">"km)"</span>);
-<a name="l00287"></a>00287     }
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289     <span class="comment">// Correct the UTM northing and hemisphere if necessary</span>
-<a name="l00290"></a>00290     <span class="keywordflow">if</span> (utmp) {
-<a name="l00291"></a>00291       <span class="keywordflow">if</span> (northp && iy < minutmNrow_) {
-<a name="l00292"></a>00292         northp = <span class="keyword">false</span>;
-<a name="l00293"></a>00293         y += utmNshift_;
-<a name="l00294"></a>00294       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!northp && iy >= maxutmSrow_) {
-<a name="l00295"></a>00295         <span class="keywordflow">if</span> (y == maxutmSrow_ * tile_)
-<a name="l00296"></a>00296           <span class="comment">// If on equator retain S hemisphere</span>
-<a name="l00297"></a>00297           y -= eps_;
-<a name="l00298"></a>00298         <span class="keywordflow">else</span> {
-<a name="l00299"></a>00299           northp = <span class="keyword">true</span>;
-<a name="l00300"></a>00300           y -= utmNshift_;
-<a name="l00301"></a>00301         }
-<a name="l00302"></a>00302       }
-<a name="l00303"></a>00303     }
-<a name="l00304"></a>00304   }
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306   <span class="keywordtype">int</span> MGRS::UTMRow(<span class="keywordtype">int</span> iband, <span class="keywordtype">int</span> icol, <span class="keywordtype">int</span> irow) <span class="keywordflow">throw</span>() {
-<a name="l00307"></a>00307     <span class="comment">// Input is MGRS (periodic) row index and output is true row index.  Band</span>
-<a name="l00308"></a>00308     <span class="comment">// index is in [-10, 10) (as returned by LatitudeBand).  Column index</span>
-<a name="l00309"></a>00309     <span class="comment">// origin is easting = 100km.  Returns maxutmSrow_ if irow and iband are</span>
-<a name="l00310"></a>00310     <span class="comment">// incompatible.  Row index origin is equator.</span>
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312     <span class="comment">// Estimate center row number for latitude band</span>
-<a name="l00313"></a>00313     <span class="comment">// 90 deg = 100 tiles; 1 band = 8 deg = 100*8/90 tiles</span>
-<a name="l00314"></a>00314     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> c = 100 * (8 * iband + 4)/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(90);
-<a name="l00315"></a>00315     <span class="keywordtype">bool</span> northp = iband >= 0;
-<a name="l00316"></a>00316     <span class="keywordtype">int</span>
-<a name="l00317"></a>00317       minrow = iband > -10 ?
-<a name="l00318"></a>00318       int(floor(c - <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(4.3) - <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.1) * northp)) : -90,
-<a name="l00319"></a>00319       maxrow = iband <   9 ?
-<a name="l00320"></a>00320       int(floor(c + <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(4.4) - <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.1) * northp)) :  94,
-<a name="l00321"></a>00321       baserow = (minrow + maxrow) / 2 - utmrowperiod_ / 2;
-<a name="l00322"></a>00322     <span class="comment">// Add maxutmSrow_ = 5 * utmrowperiod_ to ensure operand is positive</span>
-<a name="l00323"></a>00323     irow = (irow - baserow + maxutmSrow_) % utmrowperiod_ + baserow;
-<a name="l00324"></a>00324     <span class="keywordflow">if</span> (irow < minrow || irow > maxrow) {
-<a name="l00325"></a>00325       <span class="comment">// Northing = 71*100km and 80*100km intersect band boundaries</span>
-<a name="l00326"></a>00326       <span class="comment">// The following deals with these special cases.</span>
-<a name="l00327"></a>00327       <span class="keywordtype">int</span>
-<a name="l00328"></a>00328         <span class="comment">// Fold [-10,-1] -> [9,0]</span>
-<a name="l00329"></a>00329         sband = iband >= 0 ? iband : -iband - 1,
-<a name="l00330"></a>00330         <span class="comment">// Fold [-90,-1] -> [89,0]</span>
-<a name="l00331"></a>00331         srow = irow >= 0 ? irow : -irow - 1,
-<a name="l00332"></a>00332         <span class="comment">// Fold [4,7] -> [3,0]</span>
-<a name="l00333"></a>00333         scol = icol < 4 ? icol : -icol + 7;
-<a name="l00334"></a>00334       <span class="keywordflow">if</span> ( ! ( (srow == 70 && sband == 8 && scol >= 2) ||
-<a name="l00335"></a>00335                (srow == 71 && sband == 7 && scol <= 2) ||
-<a name="l00336"></a>00336                (srow == 79 && sband == 9 && scol >= 1) ||
-<a name="l00337"></a>00337                (srow == 80 && sband == 8 && scol <= 1) ) )
-<a name="l00338"></a>00338         irow = maxutmSrow_;
-<a name="l00339"></a>00339     }
-<a name="l00340"></a>00340     <span class="keywordflow">return</span> irow;
-<a name="l00341"></a>00341   }
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MGRS_8hpp.html b/doc/html/MGRS_8hpp.html
deleted file mode 100644
index 2d78459..0000000
--- a/doc/html/MGRS_8hpp.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MGRS.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">MGRS.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <sstream></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="UTMUPS_8hpp_source.html">GeographicLib/UTMUPS.hpp</a>></code><br/>
-</div>
-<p><a href="MGRS_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MGRS.html">GeographicLib::MGRS</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert between UTM/UPS and MGRS.  <a href="classGeographicLib_1_1MGRS.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="MGRS_8hpp.html#a1c5e778121820c6ec16b6180ffab51ac">GEOGRAPHICLIB_MGRS_HPP</a>   "$Id: 80e08da6eca9d9cf92c5adad148c64302df2573d $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="MGRS_8hpp_source.html">MGRS.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a1c5e778121820c6ec16b6180ffab51ac"></a><!-- doxytag: member="MGRS.hpp::GEOGRAPHICLIB_MGRS_HPP" ref="a1c5e778121820c6ec16b6180ffab51ac" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_MGRS_HPP   "$Id: 80e08da6eca9d9cf92c5adad148c64302df2573d $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MGRS_8hpp_source.html#l00011">11</a> of file <a class="el" href="MGRS_8hpp_source.html">MGRS.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MGRS_8hpp_source.html b/doc/html/MGRS_8hpp_source.html
deleted file mode 100644
index 9598e70..0000000
--- a/doc/html/MGRS_8hpp_source.html
+++ /dev/null
@@ -1,369 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MGRS.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">MGRS.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="MGRS_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file MGRS.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::MGRS class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_MGRS_HPP)</span>
-<a name="l00011"></a><a class="code" href="MGRS_8hpp.html#a1c5e778121820c6ec16b6180ffab51ac">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_MGRS_HPP "$Id: 80e08da6eca9d9cf92c5adad148c64302df2573d $"</span>
-<a name="l00012"></a>00012 <span class="preprocessor"></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <sstream></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="UTMUPS_8hpp.html" title="Header for GeographicLib::UTMUPS class.">GeographicLib/UTMUPS.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00018"></a>00018 <span class="preprocessor"></span><span class="comment">// Squelch warnings about dll vs string</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#pragma warning (push)</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4251)</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span>
-<a name="l00023"></a>00023 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00024"></a>00024 <span class="comment"></span>
-<a name="l00025"></a>00025 <span class="comment">  /**</span>
-<a name="l00026"></a>00026 <span class="comment">   * \brief Convert between UTM/UPS and %MGRS</span>
-<a name="l00027"></a>00027 <span class="comment">   *</span>
-<a name="l00028"></a>00028 <span class="comment">   * MGRS is defined in Chapter 3 of</span>
-<a name="l00029"></a>00029 <span class="comment">   * - J. W. Hager, L. L. Fry, S. S. Jacks, D. R. Hill,</span>
-<a name="l00030"></a>00030 <span class="comment">   *   <a href="http://earth-info.nga.mil/GandG/publications/tm8358.1/pdf/TM8358_1.pdf"></span>
-<a name="l00031"></a>00031 <span class="comment"></span>
-<a name="l00032"></a>00032 <span class="comment">   *   Datums, Ellipsoids, Grids, and Grid Reference Systems</a>,</span>
-<a name="l00033"></a>00033 <span class="comment">   *   Defense Mapping Agency, Technical Manual TM8358.1 (1990).</span>
-<a name="l00034"></a>00034 <span class="comment">   *</span>
-<a name="l00035"></a>00035 <span class="comment">   * This implementation has the following properties:</span>
-<a name="l00036"></a>00036 <span class="comment">   * - The conversions are closed, i.e., output from Forward is legal input for</span>
-<a name="l00037"></a>00037 <span class="comment">   *   Reverse and vice versa.  Conversion in both directions preserve the</span>
-<a name="l00038"></a>00038 <span class="comment">   *   UTM/UPS selection and the UTM zone.</span>
-<a name="l00039"></a>00039 <span class="comment">   * - Forward followed by Reverse and vice versa is approximately the</span>
-<a name="l00040"></a>00040 <span class="comment">   *   identity.  (This is affected in predictable ways by errors in</span>
-<a name="l00041"></a>00041 <span class="comment">   *   determining the latitude band and by loss of precision in the MGRS</span>
-<a name="l00042"></a>00042 <span class="comment">   *   coordinates.)</span>
-<a name="l00043"></a>00043 <span class="comment">   * - All MGRS coordinates truncate to legal 100 km blocks.  All MGRS</span>
-<a name="l00044"></a>00044 <span class="comment">   *   coordinates with a legal 100 km block prefix are legal (even though the</span>
-<a name="l00045"></a>00045 <span class="comment">   *   latitude band letter may now belong to a neighboring band).</span>
-<a name="l00046"></a>00046 <span class="comment">   * - The range of UTM/UPS coordinates allowed for conversion to MGRS</span>
-<a name="l00047"></a>00047 <span class="comment">   *   coordinates is the maximum consistent with staying within the letter</span>
-<a name="l00048"></a>00048 <span class="comment">   *   ranges of the MGRS scheme.</span>
-<a name="l00049"></a>00049 <span class="comment">   * - All the transformations are implemented as static methods in the MGRS</span>
-<a name="l00050"></a>00050 <span class="comment">   *   class.</span>
-<a name="l00051"></a>00051 <span class="comment">   *</span>
-<a name="l00052"></a>00052 <span class="comment">   * The <a href="http://www.nga.mil">NGA</a> software package</span>
-<a name="l00053"></a>00053 <span class="comment">   * <a href="http://earth-info.nga.mil/GandG/geotrans/index.html">geotrans</a></span>
-<a name="l00054"></a>00054 <span class="comment">   * also provides conversions to and from MGRS.  Version 3.0 (and earlier)</span>
-<a name="l00055"></a>00055 <span class="comment">   * suffers from some drawbacks:</span>
-<a name="l00056"></a>00056 <span class="comment">   * - Inconsistent rules are used to determine the whether a particular MGRS</span>
-<a name="l00057"></a>00057 <span class="comment">   *   coordinate is legal.  A more systematic approach is taken here.</span>
-<a name="l00058"></a>00058 <span class="comment">   * - The underlying projections are not very accurately implemented.</span>
-<a name="l00059"></a>00059 <span class="comment">   *</span>
-<a name="l00060"></a>00060 <span class="comment">   * Example of use:</span>
-<a name="l00061"></a>00061 <span class="comment">   * \include example-MGRS.cpp</span>
-<a name="l00062"></a>00062 <span class="comment">   **********************************************************************/</span>
-<a name="l00063"></a>00063   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> MGRS {
-<a name="l00064"></a>00064   <span class="keyword">private</span>:
-<a name="l00065"></a>00065     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00066"></a>00066     <span class="comment">// The smallest length s.t., 1.0e7 - eps_ < 1.0e7 (approx 1.9 nm)</span>
-<a name="l00067"></a>00067     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eps_;
-<a name="l00068"></a>00068     <span class="comment">// The smallest angle s.t., 90 - eps_ < 90 (approx 50e-12 arcsec)</span>
-<a name="l00069"></a>00069     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> angeps_;
-<a name="l00070"></a>00070     <span class="keyword">static</span> <span class="keyword">const</span> std::string hemispheres_;
-<a name="l00071"></a>00071     <span class="keyword">static</span> <span class="keyword">const</span> std::string utmcols_[3];
-<a name="l00072"></a>00072     <span class="keyword">static</span> <span class="keyword">const</span> std::string utmrow_;
-<a name="l00073"></a>00073     <span class="keyword">static</span> <span class="keyword">const</span> std::string upscols_[4];
-<a name="l00074"></a>00074     <span class="keyword">static</span> <span class="keyword">const</span> std::string upsrows_[2];
-<a name="l00075"></a>00075     <span class="keyword">static</span> <span class="keyword">const</span> std::string latband_;
-<a name="l00076"></a>00076     <span class="keyword">static</span> <span class="keyword">const</span> std::string upsband_;
-<a name="l00077"></a>00077     <span class="keyword">static</span> <span class="keyword">const</span> std::string digits_;
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> mineasting_[4];
-<a name="l00080"></a>00080     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> maxeasting_[4];
-<a name="l00081"></a>00081     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> minnorthing_[4];
-<a name="l00082"></a>00082     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> maxnorthing_[4];
-<a name="l00083"></a>00083     <span class="keyword">enum</span> {
-<a name="l00084"></a>00084       base_ = 10,
-<a name="l00085"></a>00085       <span class="comment">// Top-level tiles are 10^5 m = 100 km on a side</span>
-<a name="l00086"></a>00086       tilelevel_ = 5,
-<a name="l00087"></a>00087       <span class="comment">// Period of UTM row letters</span>
-<a name="l00088"></a>00088       utmrowperiod_ = 20,
-<a name="l00089"></a>00089       <span class="comment">// Row letters are shifted by 5 for even zones</span>
-<a name="l00090"></a>00090       utmevenrowshift_ = 5,
-<a name="l00091"></a>00091       <span class="comment">// Maximum precision is um</span>
-<a name="l00092"></a>00092       maxprec_ = 5 + 6,
-<a name="l00093"></a>00093     };
-<a name="l00094"></a>00094     <span class="keyword">static</span> <span class="keywordtype">void</span> CheckCoords(<span class="keywordtype">bool</span> utmp, <span class="keywordtype">bool</span>& northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y);
-<a name="l00095"></a>00095     <span class="keyword">static</span> <span class="keywordtype">int</span> UTMRow(<span class="keywordtype">int</span> iband, <span class="keywordtype">int</span> icol, <span class="keywordtype">int</span> irow) <span class="keywordflow">throw</span>();
-<a name="l00096"></a>00096 
-<a name="l00097"></a><a class="code" href="classGeographicLib_1_1MGRS.html#a6a0cfac496024eaf645c7a2f98a02a75">00097</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>;        <span class="comment">// UTMUPS::StandardZone calls LatitudeBand</span>
-<a name="l00098"></a>00098     <span class="comment">// Return latitude band number [-10, 10) for the give latitude (degrees).</span>
-<a name="l00099"></a>00099     <span class="comment">// The bands are reckoned in include their southern edges.</span>
-<a name="l00100"></a>00100     <span class="keyword">static</span> <span class="keywordtype">int</span> LatitudeBand(real lat) <span class="keywordflow">throw</span>() {
-<a name="l00101"></a>00101       <span class="keywordtype">int</span> ilat = int(std::floor(lat));
-<a name="l00102"></a>00102       <span class="keywordflow">return</span> (std::max)(-10, (std::min)(9, (ilat + 80)/8 - 10));
-<a name="l00103"></a>00103     }
-<a name="l00104"></a>00104     <span class="comment">// UTMUPS access these enums</span>
-<a name="l00105"></a>00105     <span class="keyword">enum</span> {
-<a name="l00106"></a>00106       tile_ = 100000,            <span class="comment">// Size MGRS blocks</span>
-<a name="l00107"></a>00107       minutmcol_ = 1,
-<a name="l00108"></a>00108       maxutmcol_ = 9,
-<a name="l00109"></a>00109       minutmSrow_ = 10,
-<a name="l00110"></a>00110       maxutmSrow_ = 100,         <span class="comment">// Also used for UTM S false northing</span>
-<a name="l00111"></a>00111       minutmNrow_ = 0,           <span class="comment">// Also used for UTM N false northing</span>
-<a name="l00112"></a>00112       maxutmNrow_ = 95,
-<a name="l00113"></a>00113       minupsSind_ = 8,           <span class="comment">// These 4 ind's apply to easting and northing</span>
-<a name="l00114"></a>00114       maxupsSind_ = 32,
-<a name="l00115"></a>00115       minupsNind_ = 13,
-<a name="l00116"></a>00116       maxupsNind_ = 27,
-<a name="l00117"></a>00117       upseasting_ = 20,          <span class="comment">// Also used for UPS false northing</span>
-<a name="l00118"></a>00118       utmeasting_ = 5,           <span class="comment">// UTM false easting</span>
-<a name="l00119"></a>00119       <span class="comment">// Difference between S hemisphere northing and N hemisphere northing</span>
-<a name="l00120"></a>00120       utmNshift_ = (maxutmSrow_ - minutmNrow_) * tile_
-<a name="l00121"></a>00121     };
-<a name="l00122"></a>00122     MGRS();                     <span class="comment">// Disable constructor</span>
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124   <span class="keyword">public</span>:
-<a name="l00125"></a>00125 <span class="comment"></span>
-<a name="l00126"></a>00126 <span class="comment">    /**</span>
-<a name="l00127"></a>00127 <span class="comment">     * Convert UTM or UPS coordinate to an MGRS coordinate.</span>
-<a name="l00128"></a>00128 <span class="comment">     *</span>
-<a name="l00129"></a>00129 <span class="comment">     * @param[in] zone UTM zone (zero means UPS).</span>
-<a name="l00130"></a>00130 <span class="comment">     * @param[in] northp hemisphere (true means north, false means south).</span>
-<a name="l00131"></a>00131 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00132"></a>00132 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00133"></a>00133 <span class="comment">     * @param[in] prec precision relative to 100 km.</span>
-<a name="l00134"></a>00134 <span class="comment">     * @param[out] mgrs MGRS string.</span>
-<a name="l00135"></a>00135 <span class="comment">     *</span>
-<a name="l00136"></a>00136 <span class="comment">     * \e prec specifies the precision of the MGRS string as follows:</span>
-<a name="l00137"></a>00137 <span class="comment">     * - prec = 0 (min), 100 km</span>
-<a name="l00138"></a>00138 <span class="comment">     * - prec = 1, 10 km</span>
-<a name="l00139"></a>00139 <span class="comment">     * - prec = 2, 1 km</span>
-<a name="l00140"></a>00140 <span class="comment">     * - prec = 3, 100 m</span>
-<a name="l00141"></a>00141 <span class="comment">     * - prec = 4, 10 m</span>
-<a name="l00142"></a>00142 <span class="comment">     * - prec = 5, 1 m</span>
-<a name="l00143"></a>00143 <span class="comment">     * - prec = 6, 0.1 m</span>
-<a name="l00144"></a>00144 <span class="comment">     * - prec = 11 (max), 1 um</span>
-<a name="l00145"></a>00145 <span class="comment">     *</span>
-<a name="l00146"></a>00146 <span class="comment">     * UTM eastings are allowed to be in the range [100 km, 900 km], northings</span>
-<a name="l00147"></a>00147 <span class="comment">     * are allowed to be in in [0 km, 9500 km] for the northern hemisphere and</span>
-<a name="l00148"></a>00148 <span class="comment">     * in [1000 km, 10000 km] for the southern hemisphere.  (However UTM</span>
-<a name="l00149"></a>00149 <span class="comment">     * northings can be continued across the equator.  So the actual limits on</span>
-<a name="l00150"></a>00150 <span class="comment">     * the northings are [-9000 km, 9500 km] for the "northern" hemisphere and</span>
-<a name="l00151"></a>00151 <span class="comment">     * [1000 km, 19500 km] for the "southern" hemisphere.)</span>
-<a name="l00152"></a>00152 <span class="comment">     *</span>
-<a name="l00153"></a>00153 <span class="comment">     * UPS eastings/northings are allowed to be in the range [1300 km, 2700 km]</span>
-<a name="l00154"></a>00154 <span class="comment">     * in the northern hemisphere and in [800 km, 3200 km] in the southern</span>
-<a name="l00155"></a>00155 <span class="comment">     * hemisphere.</span>
-<a name="l00156"></a>00156 <span class="comment">     *</span>
-<a name="l00157"></a>00157 <span class="comment">     * The ranges are 100 km more restrictive that for the conversion between</span>
-<a name="l00158"></a>00158 <span class="comment">     * geographic coordinates and UTM and UPS given by UTMUPS.  These</span>
-<a name="l00159"></a>00159 <span class="comment">     * restrictions are dictated by the allowed letters in MGRS coordinates.</span>
-<a name="l00160"></a>00160 <span class="comment">     * The choice of 9500 km for the maximum northing for northern hemisphere</span>
-<a name="l00161"></a>00161 <span class="comment">     * and of 1000 km as the minimum northing for southern hemisphere provide</span>
-<a name="l00162"></a>00162 <span class="comment">     * at least 0.5 degree extension into standard UPS zones.  The upper ends</span>
-<a name="l00163"></a>00163 <span class="comment">     * of the ranges for the UPS coordinates is dictated by requiring symmetry</span>
-<a name="l00164"></a>00164 <span class="comment">     * about the meridians 0E and 90E.</span>
-<a name="l00165"></a>00165 <span class="comment">     *</span>
-<a name="l00166"></a>00166 <span class="comment">     * All allowed UTM and UPS coordinates may now be converted to legal MGRS</span>
-<a name="l00167"></a>00167 <span class="comment">     * coordinates with the proviso that eastings and northings on the upper</span>
-<a name="l00168"></a>00168 <span class="comment">     * boundaries are silently reduced by about 4 nm (4 nanometers) to place</span>
-<a name="l00169"></a>00169 <span class="comment">     * them \e within the allowed range.  (This includes reducing a southern</span>
-<a name="l00170"></a>00170 <span class="comment">     * hemisphere northing of 10000 km by 4 nm so that it is placed in latitude</span>
-<a name="l00171"></a>00171 <span class="comment">     * band M.)  The UTM or UPS coordinates are truncated to requested</span>
-<a name="l00172"></a>00172 <span class="comment">     * precision to determine the MGRS coordinate.  Thus in UTM zone 38N, the</span>
-<a name="l00173"></a>00173 <span class="comment">     * square area with easting in [444 km, 445 km) and northing in [3688 km,</span>
-<a name="l00174"></a>00174 <span class="comment">     * 3689 km) maps to MGRS coordinate 38SMB4488 (at \e prec = 2, 1 km),</span>
-<a name="l00175"></a>00175 <span class="comment">     * Khulani Sq., Baghdad.</span>
-<a name="l00176"></a>00176 <span class="comment">     *</span>
-<a name="l00177"></a>00177 <span class="comment">     * The UTM/UPS selection and the UTM zone is preserved in the conversion to</span>
-<a name="l00178"></a>00178 <span class="comment">     * MGRS coordinate.  Thus for \e zone > 0, the MGRS coordinate begins with</span>
-<a name="l00179"></a>00179 <span class="comment">     * the zone number followed by one of [C&ndash;M] for the southern</span>
-<a name="l00180"></a>00180 <span class="comment">     * hemisphere and [N&ndash;X] for the northern hemisphere.  For \e zone =</span>
-<a name="l00181"></a>00181 <span class="comment">     * 0, the MGRS coordinates begins with one of [AB] for the southern</span>
-<a name="l00182"></a>00182 <span class="comment">     * hemisphere and [XY] for the northern hemisphere.</span>
-<a name="l00183"></a>00183 <span class="comment">     *</span>
-<a name="l00184"></a>00184 <span class="comment">     * The conversion to the MGRS is exact for prec in [0, 5] except that a</span>
-<a name="l00185"></a>00185 <span class="comment">     * neighboring latitude band letter may be given if the point is within 5nm</span>
-<a name="l00186"></a>00186 <span class="comment">     * of a band boundary.  For prec in [6, 11], the conversion is accurate to</span>
-<a name="l00187"></a>00187 <span class="comment">     * roundoff.</span>
-<a name="l00188"></a>00188 <span class="comment">     *</span>
-<a name="l00189"></a>00189 <span class="comment">     * If \e x or \e y is NaN or if \e zone is UTMUPS::INVALID, the returned</span>
-<a name="l00190"></a>00190 <span class="comment">     * MGRS string is "INVALID".</span>
-<a name="l00191"></a>00191 <span class="comment">     *</span>
-<a name="l00192"></a>00192 <span class="comment">     * Return the result via a reference argument to avoid the overhead of</span>
-<a name="l00193"></a>00193 <span class="comment">     * allocating a potentially large number of small strings.  If an error is</span>
-<a name="l00194"></a>00194 <span class="comment">     * thrown, then \e mgrs is unchanged.</span>
-<a name="l00195"></a>00195 <span class="comment">     **********************************************************************/</span>
-<a name="l00196"></a>00196     <span class="keyword">static</span> <span class="keywordtype">void</span> Forward(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00197"></a>00197                         <span class="keywordtype">int</span> prec, std::string& mgrs);
-<a name="l00198"></a>00198 <span class="comment"></span>
-<a name="l00199"></a>00199 <span class="comment">    /**</span>
-<a name="l00200"></a>00200 <span class="comment">     * Convert UTM or UPS coordinate to an MGRS coordinate when the latitude is</span>
-<a name="l00201"></a>00201 <span class="comment">     * known.</span>
-<a name="l00202"></a>00202 <span class="comment">     *</span>
-<a name="l00203"></a>00203 <span class="comment">     * @param[in] zone UTM zone (zero means UPS).</span>
-<a name="l00204"></a>00204 <span class="comment">     * @param[in] northp hemisphere (true means north, false means south).</span>
-<a name="l00205"></a>00205 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00206"></a>00206 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00207"></a>00207 <span class="comment">     * @param[in] lat latitude (degrees).</span>
-<a name="l00208"></a>00208 <span class="comment">     * @param[in] prec precision relative to 100 km.</span>
-<a name="l00209"></a>00209 <span class="comment">     * @param[out] mgrs MGRS string.</span>
-<a name="l00210"></a>00210 <span class="comment">     *</span>
-<a name="l00211"></a>00211 <span class="comment">     * The latitude is ignored for \e zone = 0 (UPS); otherwise the latitude is</span>
-<a name="l00212"></a>00212 <span class="comment">     * used to determine the latitude band and this is checked for consistency</span>
-<a name="l00213"></a>00213 <span class="comment">     * using the same tests as Reverse.</span>
-<a name="l00214"></a>00214 <span class="comment">     **********************************************************************/</span>
-<a name="l00215"></a>00215     <span class="keyword">static</span> <span class="keywordtype">void</span> Forward(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat,
-<a name="l00216"></a>00216                         <span class="keywordtype">int</span> prec, std::string& mgrs);
-<a name="l00217"></a>00217 <span class="comment"></span>
-<a name="l00218"></a>00218 <span class="comment">    /**</span>
-<a name="l00219"></a>00219 <span class="comment">     * Convert a MGRS coordinate to UTM or UPS coordinates.</span>
-<a name="l00220"></a>00220 <span class="comment">     *</span>
-<a name="l00221"></a>00221 <span class="comment">     * @param[in] mgrs MGRS string.</span>
-<a name="l00222"></a>00222 <span class="comment">     * @param[out] zone UTM zone (zero means UPS).</span>
-<a name="l00223"></a>00223 <span class="comment">     * @param[out] northp hemisphere (true means north, false means south).</span>
-<a name="l00224"></a>00224 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00225"></a>00225 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00226"></a>00226 <span class="comment">     * @param[out] prec precision relative to 100 km.</span>
-<a name="l00227"></a>00227 <span class="comment">     * @param[in] centerp if true (default), return center of the MGRS square,</span>
-<a name="l00228"></a>00228 <span class="comment">     *   else return SW (lower left) corner.</span>
-<a name="l00229"></a>00229 <span class="comment">     *</span>
-<a name="l00230"></a>00230 <span class="comment">     * All conversions from MGRS to UTM/UPS are permitted provided the MGRS</span>
-<a name="l00231"></a>00231 <span class="comment">     * coordinate is a possible result of a conversion in the other direction.</span>
-<a name="l00232"></a>00232 <span class="comment">     * (The leading 0 may be dropped from an input MGRS coordinate for UTM</span>
-<a name="l00233"></a>00233 <span class="comment">     * zones 1&ndash;9.)  In addition, MGRS coordinates with a neighboring</span>
-<a name="l00234"></a>00234 <span class="comment">     * latitude band letter are permitted provided that some portion of the</span>
-<a name="l00235"></a>00235 <span class="comment">     * 100 km block is within the given latitude band.  Thus</span>
-<a name="l00236"></a>00236 <span class="comment">     *   - 38VLS and 38WLS are allowed (latitude 64N intersects the square</span>
-<a name="l00237"></a>00237 <span class="comment">     *     38[VW]LS); but 38VMS is not permitted (all of 38VMS is north of 64N)</span>
-<a name="l00238"></a>00238 <span class="comment">     *   - 38MPE and 38NPF are permitted (they straddle the equator); but 38NPE</span>
-<a name="l00239"></a>00239 <span class="comment">     *     and 38MPF are not permitted (the equator does not intersect either</span>
-<a name="l00240"></a>00240 <span class="comment">     *     block).</span>
-<a name="l00241"></a>00241 <span class="comment">     *   - Similarly ZAB and YZB are permitted (they straddle the prime</span>
-<a name="l00242"></a>00242 <span class="comment">     *     meridian); but YAB and ZZB are not (the prime meridian does not</span>
-<a name="l00243"></a>00243 <span class="comment">     *     intersect either block).</span>
-<a name="l00244"></a>00244 <span class="comment">     *</span>
-<a name="l00245"></a>00245 <span class="comment">     * The UTM/UPS selection and the UTM zone is preserved in the conversion</span>
-<a name="l00246"></a>00246 <span class="comment">     * from MGRS coordinate.  The conversion is exact for prec in [0, 5].  With</span>
-<a name="l00247"></a>00247 <span class="comment">     * centerp = true the conversion from MGRS to geographic and back is</span>
-<a name="l00248"></a>00248 <span class="comment">     * stable.  This is not assured if \e centerp = false.</span>
-<a name="l00249"></a>00249 <span class="comment">     *</span>
-<a name="l00250"></a>00250 <span class="comment">     * If an error is thrown, then the arguments are unchanged.</span>
-<a name="l00251"></a>00251 <span class="comment">     **********************************************************************/</span>
-<a name="l00252"></a>00252     <span class="keyword">static</span> <span class="keywordtype">void</span> Reverse(<span class="keyword">const</span> std::string& mgrs,
-<a name="l00253"></a>00253                         <span class="keywordtype">int</span>& zone, <span class="keywordtype">bool</span>& northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y,
-<a name="l00254"></a>00254                         <span class="keywordtype">int</span>& prec, <span class="keywordtype">bool</span> centerp = <span class="keyword">true</span>);
-<a name="l00255"></a>00255 <span class="comment"></span>
-<a name="l00256"></a>00256 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00257"></a>00257 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00258"></a>00258 <span class="comment">    ///@{</span>
-<a name="l00259"></a>00259 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00260"></a>00260 <span class="comment">     * @return \e a the equatorial radius of the WGS84 ellipsoid (meters).</span>
-<a name="l00261"></a>00261 <span class="comment">     *</span>
-<a name="l00262"></a>00262 <span class="comment">     * (The WGS84 value is returned because the UTM and UPS projections are</span>
-<a name="l00263"></a>00263 <span class="comment">     * based on this ellipsoid.)</span>
-<a name="l00264"></a>00264 <span class="comment">     **********************************************************************/</span>
-<a name="l00265"></a><a class="code" href="classGeographicLib_1_1MGRS.html#a8942a1dfafa3ea845ccc5fafb6ca4dc2">00265</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1MGRS.html#a8942a1dfafa3ea845ccc5fafb6ca4dc2">MajorRadius</a>() throw() { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1UTMUP [...]
-<a name="l00266"></a>00266 <span class="comment"></span>
-<a name="l00267"></a>00267 <span class="comment">    /**</span>
-<a name="l00268"></a>00268 <span class="comment">     * @return \e f the flattening of the WGS84 ellipsoid.</span>
-<a name="l00269"></a>00269 <span class="comment">     *</span>
-<a name="l00270"></a>00270 <span class="comment">     * (The WGS84 value is returned because the UTM and UPS projections are</span>
-<a name="l00271"></a>00271 <span class="comment">     * based on this ellipsoid.)</span>
-<a name="l00272"></a>00272 <span class="comment">     **********************************************************************/</span>
-<a name="l00273"></a><a class="code" href="classGeographicLib_1_1MGRS.html#a8eee27799bda8238d6d0525dffdddd4e">00273</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1MGRS.html#a8eee27799bda8238d6d0525dffdddd4e">Flattening</a>() throw() { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1UTMUPS [...]
-<a name="l00274"></a>00274 <span class="comment">    ///@}</span>
-<a name="l00275"></a>00275 <span class="comment"></span><span class="comment"></span>
-<a name="l00276"></a>00276 <span class="comment">    /// \cond SKIP</span>
-<a name="l00277"></a>00277 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00278"></a>00278 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00279"></a>00279 <span class="comment">     * @return \e r the inverse flattening of the WGS84 ellipsoid.</span>
-<a name="l00280"></a>00280 <span class="comment">     **********************************************************************/</span>
-<a name="l00281"></a>00281     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() throw()
-<a name="l00282"></a>00282     { <span class="keywordflow">return</span> UTMUPS::InverseFlattening(); }<span class="comment"></span>
-<a name="l00283"></a>00283 <span class="comment">    /// \endcond</span>
-<a name="l00284"></a>00284 <span class="comment"></span>  };
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00289"></a>00289 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
-<a name="l00290"></a>00290 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00291"></a>00291 <span class="preprocessor"></span>
-<a name="l00292"></a>00292 <span class="preprocessor">#endif  // GEOGRAPHICLIB_MGRS_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticCircle_8cpp.html b/doc/html/MagneticCircle_8cpp.html
deleted file mode 100644
index 41a6a60..0000000
--- a/doc/html/MagneticCircle_8cpp.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticCircle.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">MagneticCircle.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="MagneticCircle_8hpp_source.html">GeographicLib/MagneticCircle.hpp</a>></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <<a class="el" href="Geocentric_8hpp_source.html">GeographicLib/Geocentric.hpp</a>></code><br/>
-</div>
-<p><a href="MagneticCircle_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticCircle_8cpp.html#a0ca864788d9c9fdd4987afdc16db17ac">GEOGRAPHICLIB_MAGNETICCIRCLE_CPP</a>   "$Id: 8cd933c406708a1f8b90e029e89bb99d2eb177b0 $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticCircle_8cpp.html#adda468b8dc758dd6d082ccf33c5e1b75">MAGNETIC_DEFAULT_PATH</a>   "/home/ckarney/geographiclib/magnetic"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="MagneticCircle_8cpp_source.html">MagneticCircle.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a0ca864788d9c9fdd4987afdc16db17ac"></a><!-- doxytag: member="MagneticCircle.cpp::GEOGRAPHICLIB_MAGNETICCIRCLE_CPP" ref="a0ca864788d9c9fdd4987afdc16db17ac" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_MAGNETICCIRCLE_CPP   "$Id: 8cd933c406708a1f8b90e029e89bb99d2eb177b0 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MagneticCircle_8cpp_source.html#l00015">15</a> of file <a class="el" href="MagneticCircle_8cpp_source.html">MagneticCircle.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adda468b8dc758dd6d082ccf33c5e1b75"></a><!-- doxytag: member="MagneticCircle.cpp::MAGNETIC_DEFAULT_PATH" ref="adda468b8dc758dd6d082ccf33c5e1b75" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define MAGNETIC_DEFAULT_PATH   "/home/ckarney/geographiclib/magnetic"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MagneticCircle_8cpp_source.html#l00021">21</a> of file <a class="el" href="MagneticCircle_8cpp_source.html">MagneticCircle.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticCircle_8cpp_source.html b/doc/html/MagneticCircle_8cpp_source.html
deleted file mode 100644
index c2a98c9..0000000
--- a/doc/html/MagneticCircle_8cpp_source.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticCircle.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">MagneticCircle.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="MagneticCircle_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file MagneticCircle.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::MagneticCircle class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="MagneticCircle_8hpp.html" title="Header for GeographicLib::MagneticCircle class.">GeographicLib/MagneticCircle.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <fstream></span>
-<a name="l00012"></a>00012 <span class="preprocessor">#include <sstream></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-<a name="l00014"></a>00014 
-<a name="l00015"></a><a class="code" href="MagneticCircle_8cpp.html#a0ca864788d9c9fdd4987afdc16db17ac">00015</a> <span class="preprocessor">#define GEOGRAPHICLIB_MAGNETICCIRCLE_CPP \</span>
-<a name="l00016"></a>00016 <span class="preprocessor">  "$Id: 8cd933c406708a1f8b90e029e89bb99d2eb177b0 $"</span>
-<a name="l00017"></a>00017 <span class="preprocessor"></span>
-<a name="l00018"></a>00018 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="MagneticCircle_8cpp.html#a0ca864788d9c9fdd4987afdc16db17ac">GEOGRAPHICLIB_MAGNETICCIRCLE_CPP</a>)
-<a name="l00019"></a>00019 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="MagneticCircle_8hpp.html#a5bc784ff412658d1c422828506b424da">GEOGRAPHICLIB_MAGNETICCIRCLE_HPP</a>)
-<a name="l00020"></a>00020 
-<a name="l00021"></a><a class="code" href="MagneticCircle_8cpp.html#adda468b8dc758dd6d082ccf33c5e1b75">00021</a> <span class="preprocessor">#define MAGNETIC_DEFAULT_PATH "/home/ckarney/geographiclib/magnetic"</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span>
-<a name="l00023"></a>00023 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00024"></a>00024 
-<a name="l00025"></a>00025   <span class="keyword">using namespace </span>std;
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027   <span class="keywordtype">void</span> MagneticCircle::Field(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <span class="keywordtype">bool</span> diffp,
-<a name="l00028"></a>00028                              <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& By, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bz,
-<a name="l00029"></a>00029                              <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bxt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Byt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bzt) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00030"></a>00030     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> clam, slam;
-<a name="l00031"></a>00031     CircularEngine::cossin(lon, clam, slam);
-<a name="l00032"></a>00032     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[Geocentric::dim2_];
-<a name="l00033"></a>00033     Geocentric::Rotation(_sphi, _cphi, slam, clam, M);
-<a name="l00034"></a>00034     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> BX0, BY0, BZ0, BX1, BY1, BZ1; <span class="comment">// Components in geocentric basis</span>
-<a name="l00035"></a>00035     _circ0(clam, slam, BX0, BY0, BZ0);
-<a name="l00036"></a>00036     _circ1(clam, slam, BX1, BY1, BZ1);
-<a name="l00037"></a>00037     <span class="keywordflow">if</span> (_interpolate) {
-<a name="l00038"></a>00038       BX1 = (BX1 - BX0) / _dt0;
-<a name="l00039"></a>00039       BY1 = (BY1 - BY0) / _dt0;
-<a name="l00040"></a>00040       BZ1 = (BZ1 - BZ0) / _dt0;
-<a name="l00041"></a>00041     }
-<a name="l00042"></a>00042     BX0 += _t1 * BX1;
-<a name="l00043"></a>00043     BY0 += _t1 * BY1;
-<a name="l00044"></a>00044     BZ0 += _t1 * BZ1;
-<a name="l00045"></a>00045     <span class="keywordflow">if</span> (diffp) {
-<a name="l00046"></a>00046       Geocentric::Unrotate(M, BX1, BY1, BZ1, Bxt, Byt, Bzt);
-<a name="l00047"></a>00047       Bxt *= - _a;
-<a name="l00048"></a>00048       Byt *= - _a;
-<a name="l00049"></a>00049       Bzt *= - _a;
-<a name="l00050"></a>00050     }
-<a name="l00051"></a>00051     Geocentric::Unrotate(M, BX0, BY0, BZ0, Bx, By, Bz);
-<a name="l00052"></a>00052     Bx *= - _a;
-<a name="l00053"></a>00053     By *= - _a;
-<a name="l00054"></a>00054     Bz *= - _a;
-<a name="l00055"></a>00055   }
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticCircle_8hpp.html b/doc/html/MagneticCircle_8hpp.html
deleted file mode 100644
index ad8c1ab..0000000
--- a/doc/html/MagneticCircle_8hpp.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticCircle.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">MagneticCircle.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <string></code><br/>
-<code>#include <vector></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="CircularEngine_8hpp_source.html">GeographicLib/CircularEngine.hpp</a>></code><br/>
-</div>
-<p><a href="MagneticCircle_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Geomagnetic field on a circle of latitude.  <a href="classGeographicLib_1_1MagneticCircle.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticCircle_8hpp.html#a5bc784ff412658d1c422828506b424da">GEOGRAPHICLIB_MAGNETICCIRCLE_HPP</a>   "$Id: 5b3adc58d894f36ca4206864eb565541f24ff492 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a5bc784ff412658d1c422828506b424da"></a><!-- doxytag: member="MagneticCircle.hpp::GEOGRAPHICLIB_MAGNETICCIRCLE_HPP" ref="a5bc784ff412658d1c422828506b424da" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_MAGNETICCIRCLE_HPP   "$Id: 5b3adc58d894f36ca4206864eb565541f24ff492 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00011">11</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticCircle_8hpp_source.html b/doc/html/MagneticCircle_8hpp_source.html
deleted file mode 100644
index b5ba339..0000000
--- a/doc/html/MagneticCircle_8hpp_source.html
+++ /dev/null
@@ -1,235 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticCircle.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">MagneticCircle.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="MagneticCircle_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file MagneticCircle.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::MagneticCircle class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_MAGNETICCIRCLE_HPP)</span>
-<a name="l00011"></a><a class="code" href="MagneticCircle_8hpp.html#a5bc784ff412658d1c422828506b424da">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_MAGNETICCIRCLE_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 5b3adc58d894f36ca4206864eb565541f24ff492 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <string></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <vector></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#include <<a class="code" href="CircularEngine_8hpp.html" title="Header for GeographicLib::CircularEngine class.">GeographicLib/CircularEngine.hpp</a>></span>
-<a name="l00018"></a>00018 
-<a name="l00019"></a>00019 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">  /**</span>
-<a name="l00022"></a>00022 <span class="comment">   * \brief Geomagnetic field on a circle of latitude</span>
-<a name="l00023"></a>00023 <span class="comment">   *</span>
-<a name="l00024"></a>00024 <span class="comment">   * Evaluate the earth's magnetic field on a circle of constant height and</span>
-<a name="l00025"></a>00025 <span class="comment">   * latitude.  This uses a CircleEngine to pre-evaluate the inner sum of the</span>
-<a name="l00026"></a>00026 <span class="comment">   * spherical harmonic sum, allowing the values of the field at several</span>
-<a name="l00027"></a>00027 <span class="comment">   * different longitudes to be evaluated rapidly.</span>
-<a name="l00028"></a>00028 <span class="comment">   *</span>
-<a name="l00029"></a>00029 <span class="comment">   * Use MagneticModel::Circle to create a MagneticCircle object.  (The</span>
-<a name="l00030"></a>00030 <span class="comment">   * constructor for this class is private.)</span>
-<a name="l00031"></a>00031 <span class="comment">   *</span>
-<a name="l00032"></a>00032 <span class="comment">   * Example of use:</span>
-<a name="l00033"></a>00033 <span class="comment">   * \include example-MagneticCircle.cpp</span>
-<a name="l00034"></a>00034 <span class="comment">   *</span>
-<a name="l00035"></a>00035 <span class="comment">   * <a href="MagneticField.1.html">MagneticField</a> is a command-line utility</span>
-<a name="l00036"></a>00036 <span class="comment">   * providing access to the functionality of MagneticModel and MagneticCircle.</span>
-<a name="l00037"></a>00037 <span class="comment">   **********************************************************************/</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> MagneticCircle {
-<a name="l00040"></a>00040   <span class="keyword">private</span>:
-<a name="l00041"></a>00041     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _f, _lat, _h, _t, _cphi, _sphi, _t1, _dt0;
-<a name="l00044"></a>00044     <span class="keywordtype">bool</span> _interpolate;
-<a name="l00045"></a>00045     CircularEngine _circ0, _circ1;
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047     MagneticCircle(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t,
-<a name="l00048"></a>00048                    <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cphi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sphi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dt0,
-<a name="l00049"></a>00049                    <span class="keywordtype">bool</span> interpolate,
-<a name="l00050"></a>00050                    <span class="keyword">const</span> CircularEngine& circ0, <span class="keyword">const</span> CircularEngine& circ1)
-<a name="l00051"></a>00051       : _a(a)
-<a name="l00052"></a>00052       , _f(f)
-<a name="l00053"></a>00053       , _lat(lat)
-<a name="l00054"></a>00054       , _h(h)
-<a name="l00055"></a>00055       , _t(t)
-<a name="l00056"></a>00056       , _cphi(cphi)
-<a name="l00057"></a>00057       , _sphi(sphi)
-<a name="l00058"></a>00058       , _t1(t1)
-<a name="l00059"></a>00059       , _dt0(dt0)
-<a name="l00060"></a>00060       , _interpolate(interpolate)
-<a name="l00061"></a>00061       , _circ0(circ0)
-<a name="l00062"></a>00062       , _circ1(circ1)
-<a name="l00063"></a>00063     {}
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065     <span class="keywordtype">void</span> Field(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <span class="keywordtype">bool</span> diffp,
-<a name="l00066"></a>00066                <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& By, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bz,
-<a name="l00067"></a>00067                <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bxt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Byt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bzt) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00068"></a>00068 
-<a name="l00069"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#af6619ebe4c078705fc49a0d9f950b431">00069</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a>; <span class="comment">// MagneticModel calls the private constructor</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071   <span class="keyword">public</span>:
-<a name="l00072"></a>00072 <span class="comment"></span>
-<a name="l00073"></a>00073 <span class="comment">    /**</span>
-<a name="l00074"></a>00074 <span class="comment">     * A default constructor for the normal gravity.  This sets up an</span>
-<a name="l00075"></a>00075 <span class="comment">     * uninitialized object which can be later replaced by the</span>
-<a name="l00076"></a>00076 <span class="comment">     * MagneticModel::Circle.</span>
-<a name="l00077"></a>00077 <span class="comment">     **********************************************************************/</span>
-<a name="l00078"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#a49170460b1833722ad9bc45b92c86e5a">00078</a>     <a class="code" href="classGeographicLib_1_1MagneticCircle.html#a49170460b1833722ad9bc45b92c86e5a">MagneticCircle</a>() : _a(-1) {}
-<a name="l00079"></a>00079 <span class="comment"></span>
-<a name="l00080"></a>00080 <span class="comment">    /** \name Compute the magnetic field</span>
-<a name="l00081"></a>00081 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00082"></a>00082 <span class="comment">    ///@{</span>
-<a name="l00083"></a>00083 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00084"></a>00084 <span class="comment">     * Evaluate the components of the geomagnetic field at a particular</span>
-<a name="l00085"></a>00085 <span class="comment">     * longitude.</span>
-<a name="l00086"></a>00086 <span class="comment">     *</span>
-<a name="l00087"></a>00087 <span class="comment">     * @param[in] lon longitude of the point (degrees).</span>
-<a name="l00088"></a>00088 <span class="comment">     * @param[out] Bx the easterly component of the magnetic field (nanotesla).</span>
-<a name="l00089"></a>00089 <span class="comment">     * @param[out] By the northerly component of the magnetic field (nanotesla).</span>
-<a name="l00090"></a>00090 <span class="comment">     * @param[out] Bz the vertical (up) component of the magnetic field</span>
-<a name="l00091"></a>00091 <span class="comment">     *   (nanotesla).</span>
-<a name="l00092"></a>00092 <span class="comment">     **********************************************************************/</span>
-<a name="l00093"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#a8669d47d20b03e9185d358440d3da9b1">00093</a>     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1MagneticCircle.html#a8669d47d20b03e9185d358440d3da9b1">operator()</a>(real lon, real& Bx, real& By, real& Bz) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00094"></a>00094       real dummy;
-<a name="l00095"></a>00095       Field(lon, <span class="keyword">false</span>, Bx, By, Bz, dummy, dummy, dummy);
-<a name="l00096"></a>00096     }
-<a name="l00097"></a>00097 <span class="comment"></span>
-<a name="l00098"></a>00098 <span class="comment">    /**</span>
-<a name="l00099"></a>00099 <span class="comment">     * Evaluate the components of the geomagnetic field and their time</span>
-<a name="l00100"></a>00100 <span class="comment">     * derivatives at a particular longitude.</span>
-<a name="l00101"></a>00101 <span class="comment">     *</span>
-<a name="l00102"></a>00102 <span class="comment">     * @param[in] lon longitude of the point (degrees).</span>
-<a name="l00103"></a>00103 <span class="comment">     * @param[out] Bx the easterly component of the magnetic field (nanotesla).</span>
-<a name="l00104"></a>00104 <span class="comment">     * @param[out] By the northerly component of the magnetic field (nanotesla).</span>
-<a name="l00105"></a>00105 <span class="comment">     * @param[out] Bz the vertical (up) component of the magnetic field</span>
-<a name="l00106"></a>00106 <span class="comment">     *   (nanotesla).</span>
-<a name="l00107"></a>00107 <span class="comment">     * @param[out] Bxt the rate of change of \e Bx (nT/yr).</span>
-<a name="l00108"></a>00108 <span class="comment">     * @param[out] Byt the rate of change of \e By (nT/yr).</span>
-<a name="l00109"></a>00109 <span class="comment">     * @param[out] Bzt the rate of change of \e Bz (nT/yr).</span>
-<a name="l00110"></a>00110 <span class="comment">     **********************************************************************/</span>
-<a name="l00111"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#ac715ae0394bd7f8c23288f80c406e5bc">00111</a>     <span class="keywordtype">void</span> operator()(real lon, real& Bx, real& By, real& Bz,
-<a name="l00112"></a>00112                     real& Bxt, real& Byt, real& Bzt) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00113"></a>00113       Field(lon, <span class="keyword">true</span>, Bx, By, Bz, Bxt, Byt, Bzt);
-<a name="l00114"></a>00114     }<span class="comment"></span>
-<a name="l00115"></a>00115 <span class="comment">    ///@}</span>
-<a name="l00116"></a>00116 <span class="comment"></span><span class="comment"></span>
-<a name="l00117"></a>00117 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00118"></a>00118 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00119"></a>00119 <span class="comment">    ///@{</span>
-<a name="l00120"></a>00120 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00121"></a>00121 <span class="comment">     * @return true if the object has been initialized.</span>
-<a name="l00122"></a>00122 <span class="comment">     **********************************************************************/</span>
-<a name="l00123"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#a8ec84cd0b1d97b51464ec80d9e2dcf57">00123</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1MagneticCircle.html#a8ec84cd0b1d97b51464ec80d9e2dcf57">Init</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a > 0; }<span class="comment"></span>
-<a name="l00124"></a>00124 <span class="comment">    /**</span>
-<a name="l00125"></a>00125 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00126"></a>00126 <span class="comment">     *   the value inherited from the MagneticModel object used in the</span>
-<a name="l00127"></a>00127 <span class="comment">     *   constructor.</span>
-<a name="l00128"></a>00128 <span class="comment">     **********************************************************************/</span>
-<a name="l00129"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#a78721d381d21f676152394dd576f2e77">00129</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MajorRadius() <span class="keyword">const</span> throw()
-<a name="l00130"></a>00130     { <span class="keywordflow">return</span> Init() ? _a : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }<span class="comment"></span>
-<a name="l00131"></a>00131 <span class="comment">    /**</span>
-<a name="l00132"></a>00132 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value</span>
-<a name="l00133"></a>00133 <span class="comment">     *   inherited from the MagneticModel object used in the constructor.</span>
-<a name="l00134"></a>00134 <span class="comment">     **********************************************************************/</span>
-<a name="l00135"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#a4c3fc40a49332ddcd042e5cb41c3cb2a">00135</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Flattening() <span class="keyword">const</span> throw()
-<a name="l00136"></a>00136     { <span class="keywordflow">return</span> Init() ? _f : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }<span class="comment"></span>
-<a name="l00137"></a>00137 <span class="comment">    /**</span>
-<a name="l00138"></a>00138 <span class="comment">     * @return the latitude of the circle (degrees).</span>
-<a name="l00139"></a>00139 <span class="comment">     **********************************************************************/</span>
-<a name="l00140"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#aaf14e89275bffd8253acdbe4840b65d0">00140</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Latitude() <span class="keyword">const</span> throw()
-<a name="l00141"></a>00141     { <span class="keywordflow">return</span> Init() ? _lat : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }<span class="comment"></span>
-<a name="l00142"></a>00142 <span class="comment">    /**</span>
-<a name="l00143"></a>00143 <span class="comment">     * @return the height of the circle (meters).</span>
-<a name="l00144"></a>00144 <span class="comment">     **********************************************************************/</span>
-<a name="l00145"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#aadd95eac0650f195e4d7acdc9819716b">00145</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Height() <span class="keyword">const</span> throw()
-<a name="l00146"></a>00146     { <span class="keywordflow">return</span> Init() ? _h : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }<span class="comment"></span>
-<a name="l00147"></a>00147 <span class="comment">    /**</span>
-<a name="l00148"></a>00148 <span class="comment">     * @return the time (fractional years).</span>
-<a name="l00149"></a>00149 <span class="comment">     **********************************************************************/</span>
-<a name="l00150"></a><a class="code" href="classGeographicLib_1_1MagneticCircle.html#a44783c9e44f16bbd48cc5061b30ce8e9">00150</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Time() <span class="keyword">const</span> throw()
-<a name="l00151"></a>00151     { <span class="keywordflow">return</span> Init() ? _t : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00152"></a>00152 <span class="comment"></span>
-<a name="l00153"></a>00153 <span class="comment">    ///@}</span>
-<a name="l00154"></a>00154 <span class="comment"></span>  };
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 <span class="preprocessor">#endif  // GEOGRAPHICLIB_MAGNETICCIRCLE_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticField.1.html b/doc/html/MagneticField.1.html
deleted file mode 100644
index cf39b66..0000000
--- a/doc/html/MagneticField.1.html
+++ /dev/null
@@ -1,306 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>MagneticField -- compute the earth's magnetic field</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#models">MODELS</a></li>
-	<li><a href="#environment">ENVIRONMENT</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>MagneticField -- compute the earth's magnetic field</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>MagneticField</strong> [ <strong>-n</strong> <em>name</em> ] [ <strong>-d</strong> <em>dir</em> ]
-[ <strong>-t</strong> <em>time</em> | <strong>-c</strong> <em>time</em> <em>lat</em> <em>h</em> ]
-[ <strong>-r</strong> ] [ <strong>-T</strong> <em>tguard</em> ] [ <strong>-H</strong> <em>hguard</em> ] [ <strong>-p</strong> <em>prec</em> ]
-[ <strong>-v</strong> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p><strong>MagneticField</strong> reads in times and positions on standard input and
-prints out the geomagnetic field on standard output and, optionally, its
-rate of change.</p>
-<p>The input line is of the form <em>time</em> <em>lat</em> <em>lon</em> <em>h</em>. <em>time</em> is a
-date of the form 2012-07-03 or a fractional year such as 2012.5.  <em>lat</em>
-and <em>lon</em> are the latitude and longitude expressed as decimal degrees
-or degrees, minutes, and seconds; see <a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a> for details.  <em>h</em>
-is the height above the ellipsoid in meters; this is optional and
-defaults to zero.  Alternatively, <em>time</em> can be given on the command
-line as the argument to the <strong>-t</strong> option, in which case it should not be
-included on the input lines.  Finally, the magnetic field can be
-computed at various points on a circle of latitude (constant <em>time</em>,
-<em>lat</em>, and <em>h</em>) via the <strong>-c</strong> option; in this case only the longitude
-should be given on the input lines.</p>
-<p>The output consists of the following 7 items:</p>
-<pre>
-  the declination (the direction of the horizontal component of
-    the magnetic field measured clockwise from north) in degrees,
-  the inclination (the direction of the magnetic field measured
-    down from the horizontal) in degrees,
-  the horizontal field in nanotesla (nT),
-  the north component of the field in nT,
-  the east component of the field in nT,
-  the vertical component of the field in nT (down is positive),
-  the total field in nT.</pre>
-<p>If the <strong>-r</strong> option is given, a second line is printed giving the rates
-of change of these quantities in degrees/yr and nT/yr.</p>
-<p>The WGS84 ellipsoid is used, <em>a</em> = 6378137 m, <em>f</em> = 1/298.257223563.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="n" class="item"><strong>-n</strong></a></strong></dt>
-
-<dd>
-<p>use magnetic field model <em>name</em> instead of the default <code>wmm2010</code>.  See
-<a href="#models">MODELS</a>.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
-
-<dd>
-<p>read magnetic models from <em>dir</em> instead of the default.  See
-<a href="#models">MODELS</a>.</p>
-</dd>
-<dt><strong><a name="t" class="item"><strong>-t</strong></a></strong></dt>
-
-<dd>
-<p>evaluate the field at <em>time</em> instead of reading the time from the input
-lines.</p>
-</dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
-
-<dd>
-<p>evaluate the field on a circle of latitude given by <em>time</em>, <em>lat</em>,
-<em>h</em> instead of reading these quantities from the input lines.  In this
-case, <strong>MagneticField</strong> can calculate the field considerably more
-quickly.</p>
-</dd>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
-
-<dd>
-<p>toggle whether to report the rates of change of the field.</p>
-</dd>
-<dt><strong><a name="t" class="item"><strong>-T</strong></a></strong></dt>
-
-<dd>
-<p>signal an error if <em>time</em> lies <em>tguard</em> years (default 50 yr) beyond
-the range for the model.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-H</strong></a></strong></dt>
-
-<dd>
-<p>signal an error if <em>h</em> lies <em>hguard</em> meters (default 500000 m) beyond
-the range for the model.</p>
-</dd>
-<dt><strong><a name="p" class="item"><strong>-p</strong></a></strong></dt>
-
-<dd>
-<p>set the output precision to <em>prec</em> (default 1).  Fields are printed
-with precision with <em>prec</em> decimal places; angles use <em>prec</em> + 1
-places.</p>
-</dd>
-<dt><strong><a name="v" class="item"><strong>-v</strong></a></strong></dt>
-
-<dd>
-<p>print information about the magnetic model on standard error before
-processing the input.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage, the default magnetic path and name, and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="models">MODELS</a></h1>
-<p><strong>MagneticField</strong> computes the geomagnetic field using one of the
-following models</p>
-<pre>
-    wmm2010, the World Magnetic Model 2010, which approximates the
-      main magnetic field for the period 2010–2015.  See
-      <a href="http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml">http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml</a>
-    igrf11, the International Geomagnetic Reference Field (11th
-      generation) which approximates the main magnetic field for
-      the period 1900–2015.  See
-      <a href="http://ngdc.noaa.gov/IAGA/vmod/igrf.html">http://ngdc.noaa.gov/IAGA/vmod/igrf.html</a>
-    emm2010, the Enhanced Magnetic Model 2010, which approximates the
-      main and crustal magnetic fields for the period 2010–2015.  See
-      <a href="http://ngdc.noaa.gov/geomag/EMM/index.html">http://ngdc.noaa.gov/geomag/EMM/index.html</a></pre>
-<p>These models approximate the magnetic field due to the earth's core and
-(in the case of emm2010) its crust.  They neglect magnetic fields due to
-the ionosphere, the magnetosphere, nearby magnetized materials,
-electrical machinery, etc.</p>
-<p>By default, the <code>wmm2010</code> magnetic model is used.  This may changed by
-setting the environment variable <a href="#magnetic_name"><code>MAGNETIC_NAME</code></a> or with the <strong>-n</strong>
-option.</p>
-<p>The magnetic models will be loaded from a directory specified at compile
-time.  This may changed by setting the environment variables
-<a href="#magnetic_path"><code>MAGNETIC_PATH</code></a> or <a href="#geographiclib_data"><code>GEOGRAPHICLIB_DATA</code></a>, or with the <strong>-d</strong> option.
-The <strong>-h</strong> option prints the default magnetic path and name.  Use the
-<strong>-v</strong> option to ascertain the full path name of the data file.</p>
-<p>Instructions for downloading and installing magnetic models are
-available at
-<a href="http://geographiclib.sf.net/html/magnetic.html#magneticinst">http://geographiclib.sf.net/html/magnetic.html#magneticinst</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="environment">ENVIRONMENT</a></h1>
-<dl>
-<dt><strong><a name="magnetic_name" class="item"><strong>MAGNETIC_NAME</strong></a></strong></dt>
-
-<dd>
-<p>Override the compile-time default magnetic name of <code>wmm2010</code>.  The <strong>-h</strong>
-option reports the value of <strong>MAGNETIC_NAME</strong>, if defined, otherwise it
-reports the compile-time value.  If the <strong>-n</strong> <em>name</em> option is used,
-then <em>name</em> takes precedence.</p>
-</dd>
-<dt><strong><a name="magnetic_path" class="item"><strong>MAGNETIC_PATH</strong></a></strong></dt>
-
-<dd>
-<p>Override the compile-time default magnetic path.  This is typically
-<code>/usr/local/share/GeographicLib/magnetic</code> on Unix-like systems and
-<code>C:/Documents and Settings/All Users/Application
-Data/GeographicLib/magnetic</code> on Windows systems.  The <strong>-h</strong> option reports
-the value of <strong>MAGNETIC_PATH</strong>, if defined, otherwise it reports the
-compile-time value.  If the <strong>-d</strong> <em>dir</em> option is used, then <em>dir</em>
-takes precedence.</p>
-</dd>
-<dt><strong><a name="geographiclib_data" class="item"><strong>GEOGRAPHICLIB_DATA</strong></a></strong></dt>
-
-<dd>
-<p>Another way of overriding the compile-time default magnetic path.  If it
-is set (and if <strong>MAGNETIC_PATH</strong> is not set), then
-$<strong>GEOGRAPHICLIB_DATA</strong>/magnetic is used.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>MagneticField</strong> to return an exit
-code of 1.  However, an error does not cause <strong>MagneticField</strong> to
-terminate; following lines will be converted.  If <em>time</em> or <em>h</em> are
-outside the recommended ranges for the model (but inside the ranges
-increase by <em>tguard</em> and <em>hguard</em>), a warning is printed on standard
-error and the field (which may be inaccurate) is returned in the normal
-way.</p>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<p>The magnetic field from WMM2010 in Timbuktu on 2012-01-01</p>
-<pre>
-    echo 2012-01-01 16:46:33N 3:00:34W 300 | MagneticField -r
-    => -2.55 12.43 33771.0 33737.6 -1500.5 7446.0 34582.1
-       0.10 -0.07 34.3 36.8 54.4 -35.3 25.9</pre>
-<p>The first two numbers returned are the declination and inclination of
-the field.  The second line gives the annual change.</p>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p><a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>MagneticField</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>MagneticField</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in version 1.15.</p>
-
-</body>
-
-</html>
diff --git a/doc/html/MagneticField_8cpp.html b/doc/html/MagneticField_8cpp.html
deleted file mode 100644
index e34d4d4..0000000
--- a/doc/html/MagneticField_8cpp.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticField.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">MagneticField.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for evaluating magnetic fields.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="MagneticModel_8hpp_source.html">GeographicLib/MagneticModel.hpp</a>></code><br/>
-<code>#include <<a class="el" href="MagneticCircle_8hpp_source.html">GeographicLib/MagneticCircle.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include "MagneticField.usage"</code><br/>
-</div>
-<p><a href="MagneticField_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticField_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for evaluating magnetic fields. </p>
-<p>Copyright (c) Charles Karney (2011, 2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o MagneticField \ <a class="el" href="MagneticField_8cpp.html" title="Command line utility for evaluating magnetic fields.">MagneticField.cpp</a> \ ../src/CircularEngine.cpp \ ../src/DMS.cpp \ ../src/Geocentric.cpp \ ../src/MagneticCircle.cpp \ ../src/MagneticModel.cpp \ ../src/SphericalEngine.cpp \ ../src/Utility.cpp</p>
-<p>See the <a href="MagneticField.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="MagneticField_8cpp_source.html">MagneticField.cpp</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="MagneticField.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MagneticField_8cpp_source.html#l00035">35</a> of file <a class="el" href="MagneticField_8cpp_source.html">MagneticField.cpp</a>.</p>
-
-<p>References <a class="el" href="MagneticModel_8cpp_source.html#l00250">GeographicLib::MagneticModel::DefaultMagneticName()</a>, <a class="el" href="DMS_8cpp_source.html#l00031">GeographicLib::DMS::Decode()</a>, <a class="el" href="DMS_8hpp_source.html#l00078">GeographicLib::DMS::LONGITUDE</a>, <a class="el" href="MagneticModel_8cpp_source.html#l00237">GeographicLib::MagneticModel::DefaultMagneticPath()</a>, <a class="el" href="MagneticModel_8hpp_source.html#l00286">GeographicLib::Magne [...]
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticField_8cpp_source.html b/doc/html/MagneticField_8cpp_source.html
deleted file mode 100644
index e67beef..0000000
--- a/doc/html/MagneticField_8cpp_source.html
+++ /dev/null
@@ -1,420 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticField.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">MagneticField.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="MagneticField_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file MagneticField.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for evaluating magnetic fields</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o MagneticField \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       MagneticField.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/CircularEngine.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/Geocentric.cpp \</span>
-<a name="l00015"></a>00015 <span class="comment"> *       ../src/MagneticCircle.cpp \</span>
-<a name="l00016"></a>00016 <span class="comment"> *       ../src/MagneticModel.cpp \</span>
-<a name="l00017"></a>00017 <span class="comment"> *       ../src/SphericalEngine.cpp \</span>
-<a name="l00018"></a>00018 <span class="comment"> *       ../src/Utility.cpp</span>
-<a name="l00019"></a>00019 <span class="comment"> *</span>
-<a name="l00020"></a>00020 <span class="comment"> * See the <a href="MagneticField.1.html">man page</a> for usage</span>
-<a name="l00021"></a>00021 <span class="comment"> * information.</span>
-<a name="l00022"></a>00022 <span class="comment"> **********************************************************************/</span>
-<a name="l00023"></a>00023 
-<a name="l00024"></a>00024 <span class="preprocessor">#include <iostream></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <string></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <sstream></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <fstream></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <<a class="code" href="MagneticModel_8hpp.html" title="Header for GeographicLib::MagneticModel class.">GeographicLib/MagneticModel.hpp</a>></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="MagneticCircle_8hpp.html" title="Header for GeographicLib::MagneticCircle class.">GeographicLib/MagneticCircle.hpp</a>></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="preprocessor">#include "MagneticField.usage"</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a><a class="code" href="MagneticField_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00035</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00036"></a>00036   <span class="keywordflow">try</span> {
-<a name="l00037"></a>00037     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00038"></a>00038     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00039"></a>00039     <span class="keywordtype">bool</span> verbose = <span class="keyword">false</span>;
-<a name="l00040"></a>00040     std::string dir;
-<a name="l00041"></a>00041     std::string model = <a class="code" href="classGeographicLib_1_1MagneticModel.html#ab2ac8cc598c0d9a6b448c9a45e9642d9">MagneticModel::DefaultMagneticName</a>();
-<a name="l00042"></a>00042     std::string istring, ifile, ofile, cdelim;
-<a name="l00043"></a>00043     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>;
-<a name="l00044"></a>00044     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> time = 0, lat = 0, h = 0;
-<a name="l00045"></a>00045     <span class="keywordtype">bool</span> timeset = <span class="keyword">false</span>, circle = <span class="keyword">false</span>, rate = <span class="keyword">false</span>;
-<a name="l00046"></a>00046     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> hguard = 500000, tguard = 50;
-<a name="l00047"></a>00047     <span class="keywordtype">int</span> prec = 1;
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00050"></a>00050       std::string arg(argv[m]);
-<a name="l00051"></a>00051       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-n"</span>) {
-<a name="l00052"></a>00052         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00053"></a>00053         model = argv[m];
-<a name="l00054"></a>00054       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-d"</span>) {
-<a name="l00055"></a>00055         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00056"></a>00056         dir = argv[m];
-<a name="l00057"></a>00057       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-t"</span>) {
-<a name="l00058"></a>00058         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00059"></a>00059         <span class="keywordflow">try</span> {
-<a name="l00060"></a>00060           time = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fractionalyear<real>(std::string(argv[m]));
-<a name="l00061"></a>00061           timeset = <span class="keyword">true</span>;
-<a name="l00062"></a>00062           circle = <span class="keyword">false</span>;
-<a name="l00063"></a>00063         }
-<a name="l00064"></a>00064         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00065"></a>00065           std::cerr << <span class="stringliteral">"Error decoding argument of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00066"></a>00066                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00067"></a>00067           <span class="keywordflow">return</span> 1;
-<a name="l00068"></a>00068         }
-<a name="l00069"></a>00069       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-c"</span>) {
-<a name="l00070"></a>00070         <span class="keywordflow">if</span> (m + 3 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00071"></a>00071         <span class="keywordflow">try</span> {
-<a name="l00072"></a>00072           time = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fractionalyear<real>(std::string(argv[++m]));
-<a name="l00073"></a>00073           <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>::flag ind;
-<a name="l00074"></a>00074           lat = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(std::string(argv[++m]), ind);
-<a name="l00075"></a>00075           <span class="keywordflow">if</span> (ind == <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">DMS::LONGITUDE</a>)
-<a name="l00076"></a>00076             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad hemisphere letter on latitude"</span>);
-<a name="l00077"></a>00077           <span class="keywordflow">if</span> (!(std::abs(lat) <= 90))
-<a name="l00078"></a>00078             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude not in [-90d, 90d]"</span>);
-<a name="l00079"></a>00079           h = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[++m]));
-<a name="l00080"></a>00080           timeset = <span class="keyword">false</span>;
-<a name="l00081"></a>00081           circle = <span class="keyword">true</span>;
-<a name="l00082"></a>00082         }
-<a name="l00083"></a>00083         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00084"></a>00084           std::cerr << <span class="stringliteral">"Error decoding argument of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00085"></a>00085                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00086"></a>00086           <span class="keywordflow">return</span> 1;
-<a name="l00087"></a>00087         }
-<a name="l00088"></a>00088       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-r"</span>)
-<a name="l00089"></a>00089         rate = !rate;
-<a name="l00090"></a>00090       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-p"</span>) {
-<a name="l00091"></a>00091         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00092"></a>00092         <span class="keywordflow">try</span> {
-<a name="l00093"></a>00093           prec = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<int>(std::string(argv[m]));
-<a name="l00094"></a>00094         }
-<a name="l00095"></a>00095         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&) {
-<a name="l00096"></a>00096           std::cerr << <span class="stringliteral">"Precision "</span> << argv[m] << <span class="stringliteral">" is not a number\n"</span>;
-<a name="l00097"></a>00097           <span class="keywordflow">return</span> 1;
-<a name="l00098"></a>00098         }
-<a name="l00099"></a>00099       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-T"</span>) {
-<a name="l00100"></a>00100         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00101"></a>00101         <span class="keywordflow">try</span> {
-<a name="l00102"></a>00102           tguard = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m]));
-<a name="l00103"></a>00103         }
-<a name="l00104"></a>00104         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00105"></a>00105           std::cerr << <span class="stringliteral">"Error decoding argument of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00106"></a>00106                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00107"></a>00107           <span class="keywordflow">return</span> 1;
-<a name="l00108"></a>00108         }
-<a name="l00109"></a>00109       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-H"</span>) {
-<a name="l00110"></a>00110         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00111"></a>00111         <span class="keywordflow">try</span> {
-<a name="l00112"></a>00112           hguard = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m]));
-<a name="l00113"></a>00113         }
-<a name="l00114"></a>00114         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00115"></a>00115           std::cerr << <span class="stringliteral">"Error decoding argument of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00116"></a>00116                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00117"></a>00117           <span class="keywordflow">return</span> 1;
-<a name="l00118"></a>00118         }
-<a name="l00119"></a>00119       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-v"</span>)
-<a name="l00120"></a>00120         verbose = <span class="keyword">true</span>;
-<a name="l00121"></a>00121       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00122"></a>00122         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00123"></a>00123         istring = argv[m];
-<a name="l00124"></a>00124       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00125"></a>00125         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00126"></a>00126         ifile = argv[m];
-<a name="l00127"></a>00127       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00128"></a>00128         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00129"></a>00129         ofile = argv[m];
-<a name="l00130"></a>00130       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00131"></a>00131         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00132"></a>00132         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00133"></a>00133           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00134"></a>00134           <span class="keywordflow">return</span> 1;
-<a name="l00135"></a>00135         }
-<a name="l00136"></a>00136         lsep = argv[m][0];
-<a name="l00137"></a>00137       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00138"></a>00138         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00139"></a>00139         cdelim = argv[m];
-<a name="l00140"></a>00140       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00141"></a>00141         std::cout
-<a name="l00142"></a>00142           << argv[0]
-<a name="l00143"></a>00143           << <span class="stringliteral">": $Id: cd55a73582dee908c12a23bee33362e7607268af $\n"</span>
-<a name="l00144"></a>00144           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00145"></a>00145         <span class="keywordflow">return</span> 0;
-<a name="l00146"></a>00146       } <span class="keywordflow">else</span> {
-<a name="l00147"></a>00147         <span class="keywordtype">int</span> retval = usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00148"></a>00148         <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-h"</span>)
-<a name="l00149"></a>00149           std::cout<< <span class="stringliteral">"\nDefault magnetic path = \""</span>
-<a name="l00150"></a>00150                    << <a class="code" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">MagneticModel::DefaultMagneticPath</a>()
-<a name="l00151"></a>00151                    << <span class="stringliteral">"\"\nDefault magnetic name = \""</span>
-<a name="l00152"></a>00152                    << <a class="code" href="classGeographicLib_1_1MagneticModel.html#ab2ac8cc598c0d9a6b448c9a45e9642d9">MagneticModel::DefaultMagneticName</a>()
-<a name="l00153"></a>00153                    << <span class="stringliteral">"\"\n"</span>;
-<a name="l00154"></a>00154         <span class="keywordflow">return</span> retval;
-<a name="l00155"></a>00155       }
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00159"></a>00159       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00160"></a>00160       <span class="keywordflow">return</span> 1;
-<a name="l00161"></a>00161     }
-<a name="l00162"></a>00162     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00163"></a>00163     std::ifstream infile;
-<a name="l00164"></a>00164     std::istringstream instring;
-<a name="l00165"></a>00165     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00166"></a>00166       infile.open(ifile.c_str());
-<a name="l00167"></a>00167       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00168"></a>00168         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00169"></a>00169         <span class="keywordflow">return</span> 1;
-<a name="l00170"></a>00170       }
-<a name="l00171"></a>00171     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00172"></a>00172       std::string::size_type m = 0;
-<a name="l00173"></a>00173       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00174"></a>00174         m = istring.find(lsep, m);
-<a name="l00175"></a>00175         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00176"></a>00176           <span class="keywordflow">break</span>;
-<a name="l00177"></a>00177         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00178"></a>00178       }
-<a name="l00179"></a>00179       instring.str(istring);
-<a name="l00180"></a>00180     }
-<a name="l00181"></a>00181     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00182"></a>00182       (!istring.empty() ? &instring : &std::cin);
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     std::ofstream outfile;
-<a name="l00185"></a>00185     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00186"></a>00186     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00187"></a>00187       outfile.open(ofile.c_str());
-<a name="l00188"></a>00188       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00189"></a>00189         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00190"></a>00190         <span class="keywordflow">return</span> 1;
-<a name="l00191"></a>00191       }
-<a name="l00192"></a>00192     }
-<a name="l00193"></a>00193     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     tguard = std::max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), tguard);
-<a name="l00196"></a>00196     hguard = std::max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), hguard);
-<a name="l00197"></a>00197     prec = std::min(10, std::max(0, prec));
-<a name="l00198"></a>00198     <span class="keywordtype">int</span> retval = 0;
-<a name="l00199"></a>00199     <span class="keywordflow">try</span> {
-<a name="l00200"></a>00200       <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> m(model, dir);
-<a name="l00201"></a>00201       <span class="keywordflow">if</span> ((timeset || circle)
-<a name="l00202"></a>00202           && (!Math::isfinite<real>(time) ||
-<a name="l00203"></a>00203               time < m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>() - tguard ||
-<a name="l00204"></a>00204               time > m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>() + tguard))
-<a name="l00205"></a>00205         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Time "</span> + <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(time) +
-<a name="l00206"></a>00206                             <span class="stringliteral">" too far outside allowed range ["</span> +
-<a name="l00207"></a>00207                             <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>()) + <span class="stringliteral">","</span> +
-<a name="l00208"></a>00208                             <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>()) + <span class="stringliteral">"]"</span>);
-<a name="l00209"></a>00209       <span class="keywordflow">if</span> (circle
-<a name="l00210"></a>00210           && (!Math::isfinite<real>(h) ||
-<a name="l00211"></a>00211               h < m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>() - hguard ||
-<a name="l00212"></a>00212               h > m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>() + hguard))
-<a name="l00213"></a>00213         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Height "</span> + <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(h/1000) +
-<a name="l00214"></a>00214                             <span class="stringliteral">"km too far outside allowed range ["</span> +
-<a name="l00215"></a>00215                             <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>()/1000) + <span class="stringliteral">"km,"</span> +
-<a name="l00216"></a>00216                             <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>()/1000) + <span class="stringliteral">"km]"</span>);
-<a name="l00217"></a>00217       <span class="keywordflow">if</span> (verbose) {
-<a name="l00218"></a>00218         std::cerr << <span class="stringliteral">"Magnetic file: "</span> << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#aa072d202531c0cacdd7bca128d670705">MagneticFile</a>()      << <span class="stringliteral">"\n"</span>
-<a name="l00219"></a>00219                   << <span class="stringliteral">"Name: "</span>          << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#ad500f0d76997b4026b75805fad71dbee">MagneticModelName</a>() << <span class="stringliteral">"\n"</span>
-<a name="l00220"></a>00220                   << <span class="stringliteral">"Description: "</span>   << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a204e8d3c4ebf6f8c13eb9e1817921ea2">Description</a>()       << <span class="stringliteral">"\n"</span>
-<a name="l00221"></a>00221                   << <span class="stringliteral">"Date & Time: "</span>   << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a230648296f87ff6fc12a3e65ff01bc3b">DateTime</a>()          << <span class="stringliteral">"\n"</span>
-<a name="l00222"></a>00222                   << <span class="stringliteral">"Time range: ["</span>
-<a name="l00223"></a>00223                   << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>() << <span class="stringliteral">","</span>
-<a name="l00224"></a>00224                   << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>() << <span class="stringliteral">"]\n"</span>
-<a name="l00225"></a>00225                   << <span class="stringliteral">"Height range: ["</span>
-<a name="l00226"></a>00226                   << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>()/1000 << <span class="stringliteral">"km,"</span>
-<a name="l00227"></a>00227                   << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>()/1000 << <span class="stringliteral">"km]\n"</span>;
-<a name="l00228"></a>00228       }
-<a name="l00229"></a>00229       <span class="keywordflow">if</span> ((timeset || circle) && (time < m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>() || time > m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>()))
-<a name="l00230"></a>00230         std::cerr << <span class="stringliteral">"WARNING: Time "</span> << time
-<a name="l00231"></a>00231                   << <span class="stringliteral">" outside allowed range ["</span>
-<a name="l00232"></a>00232                   << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>() << <span class="stringliteral">","</span> << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>() << <span class="stringliteral">"]\n"</span>;
-<a name="l00233"></a>00233       <span class="keywordflow">if</span> (circle && (h < m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>() || h > m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>()))
-<a name="l00234"></a>00234         std::cerr << <span class="stringliteral">"WARNING: Height "</span> << h/1000
-<a name="l00235"></a>00235                   << <span class="stringliteral">"km outside allowed range ["</span>
-<a name="l00236"></a>00236                   << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>()/1000 << <span class="stringliteral">"km,"</span>
-<a name="l00237"></a>00237                   << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>()/1000 << <span class="stringliteral">"km]\n"</span>;
-<a name="l00238"></a>00238       <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a> c(circle ? m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">Circle</a>(time, lat, h) :
-<a name="l00239"></a>00239                              <a class="code" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a>());
-<a name="l00240"></a>00240       std::string s, stra, strb;
-<a name="l00241"></a>00241       <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00242"></a>00242         <span class="keywordflow">try</span> {
-<a name="l00243"></a>00243           std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00244"></a>00244           <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00245"></a>00245             std::string::size_type m = s.find(cdelim);
-<a name="l00246"></a>00246             <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00247"></a>00247               eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00248"></a>00248               s = s.substr(0, m);
-<a name="l00249"></a>00249             }
-<a name="l00250"></a>00250           }
-<a name="l00251"></a>00251           std::istringstream str(s);
-<a name="l00252"></a>00252           <span class="keywordflow">if</span> (!(timeset || circle)) {
-<a name="l00253"></a>00253             <span class="keywordflow">if</span> (!(str >> stra))
-<a name="l00254"></a>00254               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00255"></a>00255             time = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fractionalyear<real>(stra);
-<a name="l00256"></a>00256             <span class="keywordflow">if</span> (time < m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>() - tguard || time > m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>() + tguard)
-<a name="l00257"></a>00257               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Time "</span> + <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(time) +
-<a name="l00258"></a>00258                                   <span class="stringliteral">" too far outside allowed range ["</span> +
-<a name="l00259"></a>00259                                   <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>()) + <span class="stringliteral">","</span> +
-<a name="l00260"></a>00260                                   <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>()) +
-<a name="l00261"></a>00261                                   <span class="stringliteral">"]"</span>);
-<a name="l00262"></a>00262             <span class="keywordflow">if</span> (time < m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>() || time > m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>())
-<a name="l00263"></a>00263               std::cerr << <span class="stringliteral">"WARNING: Time "</span> << time
-<a name="l00264"></a>00264                         << <span class="stringliteral">" outside allowed range ["</span>
-<a name="l00265"></a>00265                         << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>() << <span class="stringliteral">","</span> << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>() << <span class="stringliteral">"]\n"</span>;
-<a name="l00266"></a>00266           }
-<a name="l00267"></a>00267           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon;
-<a name="l00268"></a>00268           <span class="keywordflow">if</span> (circle) {
-<a name="l00269"></a>00269             <span class="keywordflow">if</span> (!(str >> strb))
-<a name="l00270"></a>00270               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00271"></a>00271             <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>::flag ind;
-<a name="l00272"></a>00272             lon = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(strb, ind);
-<a name="l00273"></a>00273             <span class="keywordflow">if</span> (ind == <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">DMS::LATITUDE</a>)
-<a name="l00274"></a>00274               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad hemisphere letter on "</span> + strb);
-<a name="l00275"></a>00275             <span class="keywordflow">if</span> (lon < -180 || lon > 360)
-<a name="l00276"></a>00276               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Longitude "</span> + strb + <span class="stringliteral">"not in [-180d, 360d]"</span>);
-<a name="l00277"></a>00277           } <span class="keywordflow">else</span> {
-<a name="l00278"></a>00278             <span class="keywordflow">if</span> (!(str >> stra >> strb))
-<a name="l00279"></a>00279               <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00280"></a>00280             <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(stra, strb, lat, lon);
-<a name="l00281"></a>00281             h = 0;              <span class="comment">// h is optional</span>
-<a name="l00282"></a>00282             <span class="keywordflow">if</span> (str >> h) {
-<a name="l00283"></a>00283               <span class="keywordflow">if</span> (h < m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>() - hguard || h > m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>() + hguard)
-<a name="l00284"></a>00284                 <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Height "</span> + <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(h/1000) +
-<a name="l00285"></a>00285                                     <span class="stringliteral">"km too far outside allowed range ["</span> +
-<a name="l00286"></a>00286                                     <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>()/1000) + <span class="stringliteral">"km,"</span> +
-<a name="l00287"></a>00287                                     <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">Utility::str</a>(m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>()/1000) + <span class="stringliteral">"km]"</span>);
-<a name="l00288"></a>00288               <span class="keywordflow">if</span> (h < m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>() || h > m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>())
-<a name="l00289"></a>00289                 std::cerr << <span class="stringliteral">"WARNING: Height "</span> << h/1000
-<a name="l00290"></a>00290                           << <span class="stringliteral">"km outside allowed range ["</span>
-<a name="l00291"></a>00291                           << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>()/1000 << <span class="stringliteral">"km,"</span>
-<a name="l00292"></a>00292                           << m.<a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>()/1000 << <span class="stringliteral">"km]\n"</span>;
-<a name="l00293"></a>00293             }
-<a name="l00294"></a>00294             <span class="keywordflow">else</span>
-<a name="l00295"></a>00295               str.clear();
-<a name="l00296"></a>00296           }
-<a name="l00297"></a>00297           <span class="keywordflow">if</span> (str >> stra)
-<a name="l00298"></a>00298             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extra junk in input: "</span> + s);
-<a name="l00299"></a>00299           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> bx, by, bz, bxt, byt, bzt;
-<a name="l00300"></a>00300           <span class="keywordflow">if</span> (circle)
-<a name="l00301"></a>00301             c(lon, bx, by, bz, bxt, byt, bzt);
-<a name="l00302"></a>00302           <span class="keywordflow">else</span>
-<a name="l00303"></a>00303             m(time, lat, lon, h, bx, by, bz, bxt, byt, bzt);
-<a name="l00304"></a>00304           <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> H, F, D, I, Ht, Ft, Dt, It;
-<a name="l00305"></a>00305           <a class="code" href="classGeographicLib_1_1MagneticModel.html#af553c42337b9a9a1d51b81fea7083ea2">MagneticModel::FieldComponents</a>(bx, by, bz, bxt, byt, bzt,
-<a name="l00306"></a>00306                                          H, F, D, I, Ht, Ft, Dt, It);
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308           *output << <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(D, prec + 1, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
-<a name="l00309"></a>00309                   << <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(I, prec + 1, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
-<a name="l00310"></a>00310                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(H, prec) << <span class="stringliteral">" "</span>
-<a name="l00311"></a>00311                   << Utility::str<real>(by, prec) << <span class="stringliteral">" "</span>
-<a name="l00312"></a>00312                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(bx, prec) << <span class="stringliteral">" "</span>
-<a name="l00313"></a>00313                   << Utility::str<real>(-bz, prec) << <span class="stringliteral">" "</span>
-<a name="l00314"></a>00314                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(F, prec) << eol;
-<a name="l00315"></a>00315           <span class="keywordflow">if</span> (rate)
-<a name="l00316"></a>00316             *output << <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(Dt, prec + 1, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
-<a name="l00317"></a>00317                     << <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(It, prec + 1, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
-<a name="l00318"></a>00318                     << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(Ht, prec) << <span class="stringliteral">" "</span>
-<a name="l00319"></a>00319                     << Utility::str<real>(byt, prec) << <span class="stringliteral">" "</span>
-<a name="l00320"></a>00320                     << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(bxt, prec) << <span class="stringliteral">" "</span>
-<a name="l00321"></a>00321                     << Utility::str<real>(-bzt, prec) << <span class="stringliteral">" "</span>
-<a name="l00322"></a>00322                     << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(Ft, prec) << eol;
-<a name="l00323"></a>00323         }
-<a name="l00324"></a>00324         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00325"></a>00325           *output << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00326"></a>00326           retval = 1;
-<a name="l00327"></a>00327         }
-<a name="l00328"></a>00328       }
-<a name="l00329"></a>00329     }
-<a name="l00330"></a>00330     <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00331"></a>00331       std::cerr << <span class="stringliteral">"Error reading "</span> << model << <span class="stringliteral">": "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00332"></a>00332       retval = 1;
-<a name="l00333"></a>00333     }
-<a name="l00334"></a>00334     <span class="keywordflow">return</span> retval;
-<a name="l00335"></a>00335   }
-<a name="l00336"></a>00336   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00337"></a>00337     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00338"></a>00338     <span class="keywordflow">return</span> 1;
-<a name="l00339"></a>00339   }
-<a name="l00340"></a>00340   <span class="keywordflow">catch</span> (...) {
-<a name="l00341"></a>00341     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00342"></a>00342     <span class="keywordflow">return</span> 1;
-<a name="l00343"></a>00343   }
-<a name="l00344"></a>00344 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticModel_8cpp.html b/doc/html/MagneticModel_8cpp.html
deleted file mode 100644
index f8b1572..0000000
--- a/doc/html/MagneticModel_8cpp.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticModel.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">MagneticModel.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="MagneticModel_8hpp_source.html">GeographicLib/MagneticModel.hpp</a>></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="SphericalEngine_8hpp_source.html">GeographicLib/SphericalEngine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="MagneticCircle_8hpp_source.html">GeographicLib/MagneticCircle.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="MagneticModel_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticModel_8cpp.html#ac744ec56ccbc33cff2c75c204b4c7ae1">GEOGRAPHICLIB_MAGNETICMODEL_CPP</a>   "$Id: b0287ac014f10e4c6656b67f21c764432a47559a $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticModel_8cpp.html#a45687ef771d809c1c369daea074cc109">GEOGRAPHICLIB_DATA</a>   "/usr/local/share/GeographicLib"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticModel_8cpp.html#a302055ff69e445c8103c09913de840ff">MAGNETIC_DEFAULT_NAME</a>   "wmm2010"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ac744ec56ccbc33cff2c75c204b4c7ae1"></a><!-- doxytag: member="MagneticModel.cpp::GEOGRAPHICLIB_MAGNETICMODEL_CPP" ref="ac744ec56ccbc33cff2c75c204b4c7ae1" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_MAGNETICMODEL_CPP   "$Id: b0287ac014f10e4c6656b67f21c764432a47559a $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MagneticModel_8cpp_source.html#l00016">16</a> of file <a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a45687ef771d809c1c369daea074cc109"></a><!-- doxytag: member="MagneticModel.cpp::GEOGRAPHICLIB_DATA" ref="a45687ef771d809c1c369daea074cc109" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_DATA   "/usr/local/share/GeographicLib"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MagneticModel_8cpp_source.html#l00027">27</a> of file <a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticModel_8cpp_source.html#l00237">GeographicLib::MagneticModel::DefaultMagneticPath()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a302055ff69e445c8103c09913de840ff"></a><!-- doxytag: member="MagneticModel.cpp::MAGNETIC_DEFAULT_NAME" ref="a302055ff69e445c8103c09913de840ff" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define MAGNETIC_DEFAULT_NAME   "wmm2010"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MagneticModel_8cpp_source.html#l00032">32</a> of file <a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticModel_8cpp_source.html#l00250">GeographicLib::MagneticModel::DefaultMagneticName()</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticModel_8cpp_source.html b/doc/html/MagneticModel_8cpp_source.html
deleted file mode 100644
index 0f70445..0000000
--- a/doc/html/MagneticModel_8cpp_source.html
+++ /dev/null
@@ -1,334 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticModel.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">MagneticModel.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="MagneticModel_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file MagneticModel.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::MagneticModel class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="MagneticModel_8hpp.html" title="Header for GeographicLib::MagneticModel class.">GeographicLib/MagneticModel.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <fstream></span>
-<a name="l00012"></a>00012 <span class="preprocessor">#include <<a class="code" href="SphericalEngine_8hpp.html" title="Header for GeographicLib::SphericalEngine class.">GeographicLib/SphericalEngine.hpp</a>></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <<a class="code" href="MagneticCircle_8hpp.html" title="Header for GeographicLib::MagneticCircle class.">GeographicLib/MagneticCircle.hpp</a>></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00015"></a>00015 
-<a name="l00016"></a><a class="code" href="MagneticModel_8cpp.html#ac744ec56ccbc33cff2c75c204b4c7ae1">00016</a> <span class="preprocessor">#define GEOGRAPHICLIB_MAGNETICMODEL_CPP \</span>
-<a name="l00017"></a>00017 <span class="preprocessor">  "$Id: b0287ac014f10e4c6656b67f21c764432a47559a $"</span>
-<a name="l00018"></a>00018 <span class="preprocessor"></span>
-<a name="l00019"></a>00019 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="MagneticModel_8cpp.html#ac744ec56ccbc33cff2c75c204b4c7ae1">GEOGRAPHICLIB_MAGNETICMODEL_CPP</a>)
-<a name="l00020"></a>00020 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="MagneticModel_8hpp.html#a8f9f091785b789fbe080c650bc0b8654">GEOGRAPHICLIB_MAGNETICMODEL_HPP</a>)
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_DATA)</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#  if defined(_MSC_VER)</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHICLIB_DATA \</span>
-<a name="l00025"></a>00025 <span class="preprocessor">  "C:/Documents and Settings/All Users/Application Data/GeographicLib"</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#  else</span>
-<a name="l00027"></a><a class="code" href="MagneticModel_8cpp.html#a45687ef771d809c1c369daea074cc109">00027</a> <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHICLIB_DATA "/usr/local/share/GeographicLib"</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#if !defined(MAGNETIC_DEFAULT_NAME)</span>
-<a name="l00032"></a><a class="code" href="MagneticModel_8cpp.html#a302055ff69e445c8103c09913de840ff">00032</a> <span class="preprocessor"></span><span class="preprocessor">#  define MAGNETIC_DEFAULT_NAME "wmm2010"</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="comment">// Squelch warnings about unsafe use of getenv</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#pragma warning (disable: 4996)</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042   <span class="keyword">using namespace </span>std;
-<a name="l00043"></a>00043 
-<a name="l00044"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a84a020586d58c4da61ec6ffbc7b4fa37">00044</a>   MagneticModel::MagneticModel(<span class="keyword">const</span> std::string& name,<span class="keyword">const</span> std::string& path,
-<a name="l00045"></a>00045                                <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>& earth)
-<a name="l00046"></a>00046     : _name(name)
-<a name="l00047"></a>00047     , _dir(path)
-<a name="l00048"></a>00048     , _description(<span class="stringliteral">"NONE"</span>)
-<a name="l00049"></a>00049     , _date(<span class="stringliteral">"UNKNOWN"</span>)
-<a name="l00050"></a>00050     , _t0(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>())
-<a name="l00051"></a>00051     , _dt0(1)
-<a name="l00052"></a>00052     , _tmin(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>())
-<a name="l00053"></a>00053     , _tmax(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>())
-<a name="l00054"></a>00054     , _a(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>())
-<a name="l00055"></a>00055     , _hmin(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>())
-<a name="l00056"></a>00056     , _hmax(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>())
-<a name="l00057"></a>00057     , _Nmodels(1)
-<a name="l00058"></a>00058     , _norm(<a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>::SCHMIDT)
-<a name="l00059"></a>00059     , _earth(earth)
-<a name="l00060"></a>00060   {
-<a name="l00061"></a>00061     <span class="keywordflow">if</span> (_dir.empty())
-<a name="l00062"></a>00062       _dir = <a class="code" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">DefaultMagneticPath</a>();
-<a name="l00063"></a>00063     ReadMetadata(_name);
-<a name="l00064"></a>00064     _G.resize(_Nmodels + 1);
-<a name="l00065"></a>00065     _H.resize(_Nmodels + 1);
-<a name="l00066"></a>00066     {
-<a name="l00067"></a>00067       <span class="keywordtype">string</span> coeff = _filename + <span class="stringliteral">".cof"</span>;
-<a name="l00068"></a>00068       ifstream coeffstr(coeff.c_str(), ios::binary);
-<a name="l00069"></a>00069       <span class="keywordflow">if</span> (!coeffstr.good())
-<a name="l00070"></a>00070         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Error opening "</span> + coeff);
-<a name="l00071"></a>00071       <span class="keywordtype">char</span> <span class="keywordtype">id</span>[idlength_ + 1];
-<a name="l00072"></a>00072       coeffstr.read(<span class="keywordtype">id</span>, idlength_);
-<a name="l00073"></a>00073       <span class="keywordflow">if</span> (!coeffstr.good())
-<a name="l00074"></a>00074         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"No header in "</span> + coeff);
-<a name="l00075"></a>00075       <span class="keywordtype">id</span>[idlength_] = <span class="charliteral">'\0'</span>;
-<a name="l00076"></a>00076       <span class="keywordflow">if</span> (_id != <span class="keywordtype">string</span>(<span class="keywordtype">id</span>))
-<a name="l00077"></a>00077         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"ID mismatch: "</span> + _id + <span class="stringliteral">" vs "</span> + <span class="keywordtype">id</span>);
-<a name="l00078"></a>00078       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= _Nmodels; ++i) {
-<a name="l00079"></a>00079         <span class="keywordtype">int</span> N, M;
-<a name="l00080"></a>00080         <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2d545f589894683e7de297c42b7c995a">SphericalEngine::coeff::readcoeffs</a>(coeffstr, N, M, _G[i], _H[i]);
-<a name="l00081"></a>00081         <span class="keywordflow">if</span> (!(M < 0 || _G[i][0] == 0))
-<a name="l00082"></a>00082           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"A degree 0 term is not permitted"</span>);
-<a name="l00083"></a>00083         _harm.push_back(<a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>(_G[i], _H[i], N, N, M, _a, _norm));
-<a name="l00084"></a>00084       }
-<a name="l00085"></a>00085       <span class="keywordtype">int</span> pos = int(coeffstr.tellg());
-<a name="l00086"></a>00086       coeffstr.seekg(0, ios::end);
-<a name="l00087"></a>00087       <span class="keywordflow">if</span> (pos != coeffstr.tellg())
-<a name="l00088"></a>00088         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extra data in "</span> + coeff);
-<a name="l00089"></a>00089     }
-<a name="l00090"></a>00090   }
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092   <span class="keywordtype">void</span> MagneticModel::ReadMetadata(<span class="keyword">const</span> std::string& name) {
-<a name="l00093"></a>00093     <span class="keyword">const</span> <span class="keywordtype">char</span>* spaces = <span class="stringliteral">" \t\n\v\f\r"</span>;
-<a name="l00094"></a>00094     _filename = _dir + <span class="stringliteral">"/"</span> + name + <span class="stringliteral">".wmm"</span>;
-<a name="l00095"></a>00095     ifstream metastr(_filename.c_str());
-<a name="l00096"></a>00096     <span class="keywordflow">if</span> (!metastr.good())
-<a name="l00097"></a>00097       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Cannot open "</span> + _filename);
-<a name="l00098"></a>00098     <span class="keywordtype">string</span> line;
-<a name="l00099"></a>00099     getline(metastr, line);
-<a name="l00100"></a>00100     <span class="keywordflow">if</span> (!(line.size() >= 6 && line.substr(0,5) == <span class="stringliteral">"WMMF-"</span>))
-<a name="l00101"></a>00101       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(_filename + <span class="stringliteral">" does not contain WMMF-n signature"</span>);
-<a name="l00102"></a>00102     <span class="keywordtype">string</span>::size_type n = line.find_first_of(spaces, 5);
-<a name="l00103"></a>00103     <span class="keywordflow">if</span> (n != string::npos)
-<a name="l00104"></a>00104       n -= 5;
-<a name="l00105"></a>00105     <span class="keywordtype">string</span> version = line.substr(5, n);
-<a name="l00106"></a>00106     <span class="keywordflow">if</span> (version != <span class="stringliteral">"1"</span>)
-<a name="l00107"></a>00107       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Unknown version in "</span> + _filename + <span class="stringliteral">": "</span> + version);
-<a name="l00108"></a>00108     <span class="keywordtype">string</span> key, val;
-<a name="l00109"></a>00109     <span class="keywordflow">while</span> (getline(metastr, line)) {
-<a name="l00110"></a>00110       <span class="keywordflow">if</span> (!<a class="code" href="classGeographicLib_1_1Utility.html#a96252f445a912b77517bff04d4d6ea74">Utility::ParseLine</a>(line, key, val))
-<a name="l00111"></a>00111         <span class="keywordflow">continue</span>;
-<a name="l00112"></a>00112       <span class="comment">// Process key words</span>
-<a name="l00113"></a>00113       <span class="keywordflow">if</span> (key == <span class="stringliteral">"Name"</span>)
-<a name="l00114"></a>00114         _name = val;
-<a name="l00115"></a>00115       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Description"</span>)
-<a name="l00116"></a>00116         _description = val;
-<a name="l00117"></a>00117       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ReleaseDate"</span>)
-<a name="l00118"></a>00118         _date = val;
-<a name="l00119"></a>00119       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Radius"</span>)
-<a name="l00120"></a>00120         _a = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(val);
-<a name="l00121"></a>00121       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Type"</span>) {
-<a name="l00122"></a>00122         <span class="keywordflow">if</span> (!(val == <span class="stringliteral">"Linear"</span> || val == <span class="stringliteral">"linear"</span>))
-<a name="l00123"></a>00123           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Only linear models are supported"</span>);
-<a name="l00124"></a>00124       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Epoch"</span>)
-<a name="l00125"></a>00125         _t0 = Utility::num<real>(val);
-<a name="l00126"></a>00126       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"DeltaEpoch"</span>)
-<a name="l00127"></a>00127         _dt0 = Utility::num<real>(val);
-<a name="l00128"></a>00128       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"NumModels"</span>)
-<a name="l00129"></a>00129         _Nmodels = Utility::num<int>(val);
-<a name="l00130"></a>00130       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"MinTime"</span>)
-<a name="l00131"></a>00131         _tmin = Utility::num<real>(val);
-<a name="l00132"></a>00132       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"MaxTime"</span>)
-<a name="l00133"></a>00133         _tmax = Utility::num<real>(val);
-<a name="l00134"></a>00134       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"MinHeight"</span>)
-<a name="l00135"></a>00135         _hmin = Utility::num<real>(val);
-<a name="l00136"></a>00136       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"MaxHeight"</span>)
-<a name="l00137"></a>00137         _hmax = Utility::num<real>(val);
-<a name="l00138"></a>00138       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"Normalization"</span>) {
-<a name="l00139"></a>00139         <span class="keywordflow">if</span> (val == <span class="stringliteral">"FULL"</span> || val == <span class="stringliteral">"Full"</span> || val == <span class="stringliteral">"full"</span>)
-<a name="l00140"></a>00140           _norm = SphericalHarmonic::FULL;
-<a name="l00141"></a>00141         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (val == <span class="stringliteral">"SCHMIDT"</span> || val == <span class="stringliteral">"Schmidt"</span> || val == <span class="stringliteral">"schmidt"</span>)
-<a name="l00142"></a>00142           _norm = SphericalHarmonic::SCHMIDT;
-<a name="l00143"></a>00143         <span class="keywordflow">else</span>
-<a name="l00144"></a>00144           <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Unknown normalization "</span> + val);
-<a name="l00145"></a>00145       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ByteOrder"</span>) {
-<a name="l00146"></a>00146         <span class="keywordflow">if</span> (val == <span class="stringliteral">"Big"</span> || val == <span class="stringliteral">"big"</span>)
-<a name="l00147"></a>00147           <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Only little-endian ordering is supported"</span>);
-<a name="l00148"></a>00148         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!(val == <span class="stringliteral">"Little"</span> || val == <span class="stringliteral">"little"</span>))
-<a name="l00149"></a>00149           <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Unknown byte ordering "</span> + val);
-<a name="l00150"></a>00150       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key == <span class="stringliteral">"ID"</span>)
-<a name="l00151"></a>00151         _id = val;
-<a name="l00152"></a>00152       <span class="comment">// else unrecognized keywords are skipped</span>
-<a name="l00153"></a>00153     }
-<a name="l00154"></a>00154     <span class="comment">// Check values</span>
-<a name="l00155"></a>00155     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00156"></a>00156       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Reference radius must be positive"</span>);
-<a name="l00157"></a>00157     <span class="keywordflow">if</span> (!(_t0 > 0))
-<a name="l00158"></a>00158       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Epoch time not defined"</span>);
-<a name="l00159"></a>00159     <span class="keywordflow">if</span> (_tmin >= _tmax)
-<a name="l00160"></a>00160       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Min time exceeds max time"</span>);
-<a name="l00161"></a>00161     <span class="keywordflow">if</span> (_hmin >= _hmax)
-<a name="l00162"></a>00162       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Min height exceeds max height"</span>);
-<a name="l00163"></a>00163     <span class="keywordflow">if</span> (<span class="keywordtype">int</span>(_id.size()) != idlength_)
-<a name="l00164"></a>00164       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Invalid ID"</span>);
-<a name="l00165"></a>00165     <span class="keywordflow">if</span> (!(_dt0 > 0)) {
-<a name="l00166"></a>00166       <span class="keywordflow">if</span> (_Nmodels > 1)
-<a name="l00167"></a>00167         <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"DeltaEpoch must be positive"</span>);
-<a name="l00168"></a>00168       <span class="keywordflow">else</span>
-<a name="l00169"></a>00169         _dt0 = 1;
-<a name="l00170"></a>00170     }
-<a name="l00171"></a>00171   }
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173   <span class="keywordtype">void</span> MagneticModel::Field(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h, <span class="keywordtype">bool</span> diffp,
-<a name="l00174"></a>00174                             <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& By, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bz,
-<a name="l00175"></a>00175                             <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bxt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Byt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bzt) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00176"></a>00176     t -= _t0;
-<a name="l00177"></a>00177     <span class="keywordtype">int</span> n = max(min(<span class="keywordtype">int</span>(floor(t / _dt0)), _Nmodels - 1), 0);
-<a name="l00178"></a>00178     <span class="keywordtype">bool</span> interpolate = n + 1 < _Nmodels;
-<a name="l00179"></a>00179     t -= n * _dt0;
-<a name="l00180"></a>00180     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, Y, Z;
-<a name="l00181"></a>00181     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> M[Geocentric::dim2_];
-<a name="l00182"></a>00182     _earth.IntForward(lat, lon, h, X, Y, Z, M);
-<a name="l00183"></a>00183     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> BX0, BY0, BZ0, BX1, BY1, BZ1; <span class="comment">// Components in geocentric basis</span>
-<a name="l00184"></a>00184     _harm[n](X, Y, Z, BX0, BY0, BZ0);
-<a name="l00185"></a>00185     _harm[n + 1](X, Y, Z, BX1, BY1, BZ1);
-<a name="l00186"></a>00186     <span class="keywordflow">if</span> (interpolate) {
-<a name="l00187"></a>00187       <span class="comment">// Convert to a time derivative</span>
-<a name="l00188"></a>00188       BX1 = (BX1 - BX0) / _dt0;
-<a name="l00189"></a>00189       BY1 = (BY1 - BY0) / _dt0;
-<a name="l00190"></a>00190       BZ1 = (BZ1 - BZ0) / _dt0;
-<a name="l00191"></a>00191     }
-<a name="l00192"></a>00192     BX0 += t * BX1;
-<a name="l00193"></a>00193     BY0 += t * BY1;
-<a name="l00194"></a>00194     BZ0 += t * BZ1;
-<a name="l00195"></a>00195     <span class="keywordflow">if</span> (diffp) {
-<a name="l00196"></a>00196       Geocentric::Unrotate(M, BX1, BY1, BZ1, Bxt, Byt, Bzt);
-<a name="l00197"></a>00197       Bxt *= - _a;
-<a name="l00198"></a>00198       Byt *= - _a;
-<a name="l00199"></a>00199       Bzt *= - _a;
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201     Geocentric::Unrotate(M, BX0, BY0, BZ0, Bx, By, Bz);
-<a name="l00202"></a>00202     Bx *= - _a;
-<a name="l00203"></a>00203     By *= - _a;
-<a name="l00204"></a>00204     Bz *= - _a;
-<a name="l00205"></a>00205   }
-<a name="l00206"></a>00206 
-<a name="l00207"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">00207</a>   <a class="code" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a> <a class="code" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">MagneticModel::Circle</a>(real t, real lat, real h)<span class="keyword"> const </span>{
-<a name="l00208"></a>00208     real t1 = t - _t0;
-<a name="l00209"></a>00209     <span class="keywordtype">int</span> n = max(min(<span class="keywordtype">int</span>(floor(t1 / _dt0)), _Nmodels - 1), 0);
-<a name="l00210"></a>00210     <span class="keywordtype">bool</span> interpolate = n + 1 < _Nmodels;
-<a name="l00211"></a>00211     t1 -= n * _dt0;
-<a name="l00212"></a>00212     real X, Y, Z, M[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00213"></a>00213     _earth.IntForward(lat, 0, h, X, Y, Z, M);
-<a name="l00214"></a>00214     <span class="comment">// Y = 0, cphi = M[7], sphi = M[8];</span>
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216     <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a>(_a, _earth._f, lat, h, t,
-<a name="l00217"></a>00217                           M[7], M[8], t1, _dt0, interpolate,
-<a name="l00218"></a>00218                           _harm[n].Circle(X, Z, <span class="keyword">true</span>),
-<a name="l00219"></a>00219                           _harm[n + 1].Circle(X, Z, <span class="keyword">true</span>));
-<a name="l00220"></a>00220   }
-<a name="l00221"></a>00221 
-<a name="l00222"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a54aa849393ab2a7e37aa1f086e64cffb">00222</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1MagneticModel.html#af553c42337b9a9a1d51b81fea7083ea2">MagneticModel::FieldComponents</a>(real Bx, real By, real Bz,
-<a name="l00223"></a>00223                                       real Bxt, real Byt, real Bzt,
-<a name="l00224"></a>00224                                       real& H, real& F, real& D, real& I,
-<a name="l00225"></a>00225                                       real& Ht, real& Ft,
-<a name="l00226"></a>00226                                       real& Dt, real& It) <span class="keywordflow">throw</span>() {
-<a name="l00227"></a>00227     H = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(Bx, By);
-<a name="l00228"></a>00228     Ht = H ? (Bx * Bxt + By * Byt) / H : <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(Bxt, Byt);
-<a name="l00229"></a>00229     D = (0 - (H ? atan2(-Bx, By) : atan2(-Bxt, Byt))) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00230"></a>00230     Dt = (H ? (By * Bxt - Bx * Byt) / <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(H) : 0) / Math::degree<real>();
-<a name="l00231"></a>00231     F = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(H, Bz);
-<a name="l00232"></a>00232     Ft = F ? (H * Ht + Bz * Bzt) / F : <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(Ht, Bzt);
-<a name="l00233"></a>00233     I = (F ? atan2(-Bz, H) : atan2(-Bzt, Ht)) / Math::degree<real>();
-<a name="l00234"></a>00234     It = (F ? (Bz * Ht - H * Bzt) / <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(F) : 0) / Math::degree<real>();
-<a name="l00235"></a>00235   }
-<a name="l00236"></a>00236 
-<a name="l00237"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">00237</a>   std::string <a class="code" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">MagneticModel::DefaultMagneticPath</a>() {
-<a name="l00238"></a>00238     <span class="keywordtype">string</span> path;
-<a name="l00239"></a>00239     <span class="keywordtype">char</span>* magneticpath = getenv(<span class="stringliteral">"MAGNETIC_PATH"</span>);
-<a name="l00240"></a>00240     <span class="keywordflow">if</span> (magneticpath)
-<a name="l00241"></a>00241       path = string(magneticpath);
-<a name="l00242"></a>00242     <span class="keywordflow">if</span> (path.length())
-<a name="l00243"></a>00243       <span class="keywordflow">return</span> path;
-<a name="l00244"></a>00244     <span class="keywordtype">char</span>* datapath = getenv(<span class="stringliteral">"GEOGRAPHICLIB_DATA"</span>);
-<a name="l00245"></a>00245     <span class="keywordflow">if</span> (datapath)
-<a name="l00246"></a>00246       path = string(datapath);
-<a name="l00247"></a>00247     <span class="keywordflow">return</span> (path.length() ? path : string(<a class="code" href="MagneticModel_8cpp.html#a45687ef771d809c1c369daea074cc109">GEOGRAPHICLIB_DATA</a>)) + <span class="stringliteral">"/magnetic"</span>;
-<a name="l00248"></a>00248   }
-<a name="l00249"></a>00249 
-<a name="l00250"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#ab2ac8cc598c0d9a6b448c9a45e9642d9">00250</a>   std::string <a class="code" href="classGeographicLib_1_1MagneticModel.html#ab2ac8cc598c0d9a6b448c9a45e9642d9">MagneticModel::DefaultMagneticName</a>() {
-<a name="l00251"></a>00251     <span class="keywordtype">string</span> name;
-<a name="l00252"></a>00252     <span class="keywordtype">char</span>* magneticname = getenv(<span class="stringliteral">"MAGNETIC_NAME"</span>);
-<a name="l00253"></a>00253     <span class="keywordflow">if</span> (magneticname)
-<a name="l00254"></a>00254       name = string(magneticname);
-<a name="l00255"></a>00255     <span class="keywordflow">return</span> name.length() ? name : string(<a class="code" href="MagneticModel_8cpp.html#a302055ff69e445c8103c09913de840ff">MAGNETIC_DEFAULT_NAME</a>);
-<a name="l00256"></a>00256   }
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticModel_8hpp.html b/doc/html/MagneticModel_8hpp.html
deleted file mode 100644
index 9e8efc4..0000000
--- a/doc/html/MagneticModel_8hpp.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticModel.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">MagneticModel.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <string></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <vector></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Geocentric_8hpp_source.html">GeographicLib/Geocentric.hpp</a>></code><br/>
-<code>#include <<a class="el" href="SphericalHarmonic_8hpp_source.html">GeographicLib/SphericalHarmonic.hpp</a>></code><br/>
-</div>
-<p><a href="MagneticModel_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Model of the earth's magnetic field.  <a href="classGeographicLib_1_1MagneticModel.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticModel_8hpp.html#a8f9f091785b789fbe080c650bc0b8654">GEOGRAPHICLIB_MAGNETICMODEL_HPP</a>   "$Id: 7f8c59ee3cdbfce252d1172c1bb4d7db7cf5ef38 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a8f9f091785b789fbe080c650bc0b8654"></a><!-- doxytag: member="MagneticModel.hpp::GEOGRAPHICLIB_MAGNETICMODEL_HPP" ref="a8f9f091785b789fbe080c650bc0b8654" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_MAGNETICMODEL_HPP   "$Id: 7f8c59ee3cdbfce252d1172c1bb4d7db7cf5ef38 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00011">11</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/MagneticModel_8hpp_source.html b/doc/html/MagneticModel_8hpp_source.html
deleted file mode 100644
index 9c86121..0000000
--- a/doc/html/MagneticModel_8hpp_source.html
+++ /dev/null
@@ -1,419 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: MagneticModel.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">MagneticModel.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="MagneticModel_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file MagneticModel.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::MagneticModel class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_MAGNETICMODEL_HPP)</span>
-<a name="l00011"></a><a class="code" href="MagneticModel_8hpp.html#a8f9f091785b789fbe080c650bc0b8654">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_MAGNETICMODEL_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 7f8c59ee3cdbfce252d1172c1bb4d7db7cf5ef38 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <string></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <sstream></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <vector></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00018"></a>00018 <span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-<a name="l00019"></a>00019 <span class="preprocessor">#include <<a class="code" href="SphericalHarmonic_8hpp.html" title="Header for GeographicLib::SphericalHarmonic class.">GeographicLib/SphericalHarmonic.hpp</a>></span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="comment">// Squelch warnings about dll vs vector</span>
-<a name="l00023"></a>00023 <span class="preprocessor">#pragma warning (push)</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4251)</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span>
-<a name="l00027"></a>00027 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029   <span class="keyword">class </span>MagneticCircle;
-<a name="l00030"></a>00030 <span class="comment"></span>
-<a name="l00031"></a>00031 <span class="comment">  /**</span>
-<a name="l00032"></a>00032 <span class="comment">   * \brief Model of the earth's magnetic field</span>
-<a name="l00033"></a>00033 <span class="comment">   *</span>
-<a name="l00034"></a>00034 <span class="comment">   * Evaluate the earth's magnetic field according to a model.  At present only</span>
-<a name="l00035"></a>00035 <span class="comment">   * internal magnetic fields are handled.  These are due to the earth's code</span>
-<a name="l00036"></a>00036 <span class="comment">   * and crust; these vary slowly (over many years).  Excluded are the effects</span>
-<a name="l00037"></a>00037 <span class="comment">   * of currents in the ionosphere and magnetosphere which have daily and</span>
-<a name="l00038"></a>00038 <span class="comment">   * annual variations.</span>
-<a name="l00039"></a>00039 <span class="comment">   *</span>
-<a name="l00040"></a>00040 <span class="comment">   * See \ref magnetic for details of how to install the magnetic model and the</span>
-<a name="l00041"></a>00041 <span class="comment">   * data format.</span>
-<a name="l00042"></a>00042 <span class="comment">   *</span>
-<a name="l00043"></a>00043 <span class="comment">   * See</span>
-<a name="l00044"></a>00044 <span class="comment">   * - General information:</span>
-<a name="l00045"></a>00045 <span class="comment">   *   - http://geomag.org/models/index.html</span>
-<a name="l00046"></a>00046 <span class="comment">   * - WMM2010:</span>
-<a name="l00047"></a>00047 <span class="comment">   *   - http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml</span>
-<a name="l00048"></a>00048 <span class="comment">   *   - http://ngdc.noaa.gov/geomag/WMM/data/WMM2010/WMM2010COF.zip</span>
-<a name="l00049"></a>00049 <span class="comment">   * - IGRF11:</span>
-<a name="l00050"></a>00050 <span class="comment">   *   - http://ngdc.noaa.gov/IAGA/vmod/igrf.html</span>
-<a name="l00051"></a>00051 <span class="comment">   *   - http://ngdc.noaa.gov/IAGA/vmod/igrf11coeffs.txt</span>
-<a name="l00052"></a>00052 <span class="comment">   *   - http://ngdc.noaa.gov/IAGA/vmod/geomag70_linux.tar.gz</span>
-<a name="l00053"></a>00053 <span class="comment">   * - EMM2010:</span>
-<a name="l00054"></a>00054 <span class="comment">   *   - http://ngdc.noaa.gov/geomag/EMM/index.html</span>
-<a name="l00055"></a>00055 <span class="comment">   *   - http://ngdc.noaa.gov/geomag/EMM/data/geomag/EMM2010_Sph_Windows_Linux.zip</span>
-<a name="l00056"></a>00056 <span class="comment">   *</span>
-<a name="l00057"></a>00057 <span class="comment">   * Example of use:</span>
-<a name="l00058"></a>00058 <span class="comment">   * \include example-MagneticModel.cpp</span>
-<a name="l00059"></a>00059 <span class="comment">   *</span>
-<a name="l00060"></a>00060 <span class="comment">   * <a href="MagneticField.1.html">MagneticField</a> is a command-line utility</span>
-<a name="l00061"></a>00061 <span class="comment">   * providing access to the functionality of MagneticModel and MagneticCircle.</span>
-<a name="l00062"></a>00062 <span class="comment">   **********************************************************************/</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> MagneticModel {
-<a name="l00065"></a>00065   <span class="keyword">private</span>:
-<a name="l00066"></a>00066     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00067"></a>00067     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> idlength_ = 8;
-<a name="l00068"></a>00068     std::string _name, _dir, _description, _date, _filename, _id;
-<a name="l00069"></a>00069     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _t0, _dt0, _tmin, _tmax, _a, _hmin, _hmax;
-<a name="l00070"></a>00070     <span class="keywordtype">int</span> _Nmodels;
-<a name="l00071"></a>00071     SphericalHarmonic::normalization _norm;
-<a name="l00072"></a>00072     Geocentric _earth;
-<a name="l00073"></a>00073     std::vector< std::vector<real> > _G;
-<a name="l00074"></a>00074     std::vector< std::vector<real> > _H;
-<a name="l00075"></a>00075     std::vector<SphericalHarmonic> _harm;
-<a name="l00076"></a>00076     <span class="keywordtype">void</span> Field(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h, <span class="keywordtype">bool</span> diffp,
-<a name="l00077"></a>00077                <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& By, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bz,
-<a name="l00078"></a>00078                <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bxt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Byt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Bzt) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00079"></a>00079     <span class="keywordtype">void</span> ReadMetadata(<span class="keyword">const</span> std::string& name);
-<a name="l00080"></a>00080     MagneticModel(<span class="keyword">const</span> MagneticModel&); <span class="comment">// copy constructor not allowed</span>
-<a name="l00081"></a>00081     MagneticModel& operator=(<span class="keyword">const</span> MagneticModel&); <span class="comment">// nor copy assignment</span>
-<a name="l00082"></a>00082   <span class="keyword">public</span>:
-<a name="l00083"></a>00083 <span class="comment"></span>
-<a name="l00084"></a>00084 <span class="comment">    /** \name Setting up the magnetic model</span>
-<a name="l00085"></a>00085 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00086"></a>00086 <span class="comment">    ///@{</span>
-<a name="l00087"></a>00087 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00088"></a>00088 <span class="comment">     * Construct a magnetic model.</span>
-<a name="l00089"></a>00089 <span class="comment">     *</span>
-<a name="l00090"></a>00090 <span class="comment">     * @param[in] name the name of the model.</span>
-<a name="l00091"></a>00091 <span class="comment">     * @param[in] path (optional) directory for data file.</span>
-<a name="l00092"></a>00092 <span class="comment">     * @param[in] earth (optional) Geocentric object for converting</span>
-<a name="l00093"></a>00093 <span class="comment">     *   coordinates; default Geocentric::WGS84.</span>
-<a name="l00094"></a>00094 <span class="comment">     *</span>
-<a name="l00095"></a>00095 <span class="comment">     * A filename is formed by appending ".wmm" (World Magnetic Model) to the</span>
-<a name="l00096"></a>00096 <span class="comment">     * name.  If \e path is specified (and is non-empty), then the file is</span>
-<a name="l00097"></a>00097 <span class="comment">     * loaded from directory, \e path.  Otherwise the path is given by the</span>
-<a name="l00098"></a>00098 <span class="comment">     * DefaultMagneticPath().  This may throw an exception because the file</span>
-<a name="l00099"></a>00099 <span class="comment">     * does not exist, is unreadable, or is corrupt.</span>
-<a name="l00100"></a>00100 <span class="comment">     *</span>
-<a name="l00101"></a>00101 <span class="comment">     * This file contains the metadata which specifies the properties of the</span>
-<a name="l00102"></a>00102 <span class="comment">     * model.  The coefficients for the spherical harmonic sums are obtained</span>
-<a name="l00103"></a>00103 <span class="comment">     * from a file obtained by appending ".cof" to metadata file (so the</span>
-<a name="l00104"></a>00104 <span class="comment">     * filename ends in ".wwm.cof").</span>
-<a name="l00105"></a>00105 <span class="comment">     *</span>
-<a name="l00106"></a>00106 <span class="comment">     * The model is not tied to a particular ellipsoidal model of the earth.</span>
-<a name="l00107"></a>00107 <span class="comment">     * The final earth argument to the constructor specify an ellipsoid to</span>
-<a name="l00108"></a>00108 <span class="comment">     * allow geodetic coordinates to the transformed into the spherical</span>
-<a name="l00109"></a>00109 <span class="comment">     * coordinates used in the spherical harmonic sum.</span>
-<a name="l00110"></a>00110 <span class="comment">     **********************************************************************/</span>
-<a name="l00111"></a>00111     <span class="keyword">explicit</span> MagneticModel(<span class="keyword">const</span> std::string& name,
-<a name="l00112"></a>00112                            <span class="keyword">const</span> std::string& path = <span class="stringliteral">""</span>,
-<a name="l00113"></a>00113                            <span class="keyword">const</span> Geocentric& earth = <a class="code" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>);<span class="comment"></span>
-<a name="l00114"></a>00114 <span class="comment">    ///@}</span>
-<a name="l00115"></a>00115 <span class="comment"></span><span class="comment"></span>
-<a name="l00116"></a>00116 <span class="comment">    /** \name Compute the magnetic field</span>
-<a name="l00117"></a>00117 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00118"></a>00118 <span class="comment">    ///@{</span>
-<a name="l00119"></a>00119 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00120"></a>00120 <span class="comment">     * Evaluate the components of the geomagnetic field.</span>
-<a name="l00121"></a>00121 <span class="comment">     *</span>
-<a name="l00122"></a>00122 <span class="comment">     * @param[in] t the time (years).</span>
-<a name="l00123"></a>00123 <span class="comment">     * @param[in] lat latitude of the point (degrees).</span>
-<a name="l00124"></a>00124 <span class="comment">     * @param[in] lon longitude of the point (degrees).</span>
-<a name="l00125"></a>00125 <span class="comment">     * @param[in] h the height of the point above the ellipsoid (meters).</span>
-<a name="l00126"></a>00126 <span class="comment">     * @param[out] Bx the easterly component of the magnetic field (nanotesla).</span>
-<a name="l00127"></a>00127 <span class="comment">     * @param[out] By the northerly component of the magnetic field (nanotesla).</span>
-<a name="l00128"></a>00128 <span class="comment">     * @param[out] Bz the vertical (up) component of the magnetic field</span>
-<a name="l00129"></a>00129 <span class="comment">     *   (nanotesla).</span>
-<a name="l00130"></a>00130 <span class="comment">     **********************************************************************/</span>
-<a name="l00131"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a550eb1739712fbbae1a167c2559d6dbc">00131</a>     <span class="keywordtype">void</span> operator()(real t, real lat, real lon, real h,
-<a name="l00132"></a>00132                     real& Bx, real& By, real& Bz) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00133"></a>00133       real dummy;
-<a name="l00134"></a>00134       Field(t, lat, lon, h, <span class="keyword">false</span>, Bx, By, Bz, dummy, dummy, dummy);
-<a name="l00135"></a>00135     }
-<a name="l00136"></a>00136 <span class="comment"></span>
-<a name="l00137"></a>00137 <span class="comment">    /**</span>
-<a name="l00138"></a>00138 <span class="comment">     * Evaluate the components of the geomagnetic field and their time</span>
-<a name="l00139"></a>00139 <span class="comment">     * derivatives</span>
-<a name="l00140"></a>00140 <span class="comment">     *</span>
-<a name="l00141"></a>00141 <span class="comment">     * @param[in] t the time (years).</span>
-<a name="l00142"></a>00142 <span class="comment">     * @param[in] lat latitude of the point (degrees).</span>
-<a name="l00143"></a>00143 <span class="comment">     * @param[in] lon longitude of the point (degrees).</span>
-<a name="l00144"></a>00144 <span class="comment">     * @param[in] h the height of the point above the ellipsoid (meters).</span>
-<a name="l00145"></a>00145 <span class="comment">     * @param[out] Bx the easterly component of the magnetic field (nanotesla).</span>
-<a name="l00146"></a>00146 <span class="comment">     * @param[out] By the northerly component of the magnetic field (nanotesla).</span>
-<a name="l00147"></a>00147 <span class="comment">     * @param[out] Bz the vertical (up) component of the magnetic field</span>
-<a name="l00148"></a>00148 <span class="comment">     *   (nanotesla).</span>
-<a name="l00149"></a>00149 <span class="comment">     * @param[out] Bxt the rate of change of \e Bx (nT/yr).</span>
-<a name="l00150"></a>00150 <span class="comment">     * @param[out] Byt the rate of change of \e By (nT/yr).</span>
-<a name="l00151"></a>00151 <span class="comment">     * @param[out] Bzt the rate of change of \e Bz (nT/yr).</span>
-<a name="l00152"></a>00152 <span class="comment">     **********************************************************************/</span>
-<a name="l00153"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a11fed1ca7a45947f6f43f6ba7897250f">00153</a>     <span class="keywordtype">void</span> operator()(real t, real lat, real lon, real h,
-<a name="l00154"></a>00154                     real& Bx, real& By, real& Bz,
-<a name="l00155"></a>00155                     real& Bxt, real& Byt, real& Bzt) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00156"></a>00156       Field(t, lat, lon, h, <span class="keyword">true</span>, Bx, By, Bz, Bxt, Byt, Bzt);
-<a name="l00157"></a>00157     }
-<a name="l00158"></a>00158 <span class="comment"></span>
-<a name="l00159"></a>00159 <span class="comment">    /**</span>
-<a name="l00160"></a>00160 <span class="comment">     * Create a MagneticCircle object to allow the geomagnetic field at many</span>
-<a name="l00161"></a>00161 <span class="comment">     * points with constant \e lat, \e h, and \e t and varying \e lon to be</span>
-<a name="l00162"></a>00162 <span class="comment">     * computed efficiently.</span>
-<a name="l00163"></a>00163 <span class="comment">     *</span>
-<a name="l00164"></a>00164 <span class="comment">     * @param[in] t the time (years).</span>
-<a name="l00165"></a>00165 <span class="comment">     * @param[in] lat latitude of the point (degrees).</span>
-<a name="l00166"></a>00166 <span class="comment">     * @param[in] h the height of the point above the ellipsoid (meters).</span>
-<a name="l00167"></a>00167 <span class="comment">     * @return a MagneticCircle object whose MagneticCircle::operator()(real</span>
-<a name="l00168"></a>00168 <span class="comment">     *   lon) member function computes the field at particular values of \e</span>
-<a name="l00169"></a>00169 <span class="comment">     *   lon.</span>
-<a name="l00170"></a>00170 <span class="comment">     *</span>
-<a name="l00171"></a>00171 <span class="comment">     * If the field at several points on a circle of latitude need to be</span>
-<a name="l00172"></a>00172 <span class="comment">     * calculated then creating a MagneticCircle and using its member functions</span>
-<a name="l00173"></a>00173 <span class="comment">     * will be substantially faster, especially for high-degree models.</span>
-<a name="l00174"></a>00174 <span class="comment">     **********************************************************************/</span>
-<a name="l00175"></a>00175     <a class="code" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a> Circle(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h) <span class="keyword">const</span>;
-<a name="l00176"></a>00176 <span class="comment"></span>
-<a name="l00177"></a>00177 <span class="comment">    /**</span>
-<a name="l00178"></a>00178 <span class="comment">     * Compute various quantities dependent on the magnetic field.</span>
-<a name="l00179"></a>00179 <span class="comment">     *</span>
-<a name="l00180"></a>00180 <span class="comment">     * @param[in] Bx the \e x (easterly) component of the magnetic field (nT).</span>
-<a name="l00181"></a>00181 <span class="comment">     * @param[in] By the \e y (northerly) component of the magnetic field (nT).</span>
-<a name="l00182"></a>00182 <span class="comment">     * @param[in] Bz the \e z (vertical, up positive) component of the magnetic</span>
-<a name="l00183"></a>00183 <span class="comment">     *   field (nT).</span>
-<a name="l00184"></a>00184 <span class="comment">     * @param[out] H the horizontal magnetic field (nT).</span>
-<a name="l00185"></a>00185 <span class="comment">     * @param[out] F the total magnetic field (nT).</span>
-<a name="l00186"></a>00186 <span class="comment">     * @param[out] D the declination of the field (degrees east of north).</span>
-<a name="l00187"></a>00187 <span class="comment">     * @param[out] I the inclination of the field (degrees down from</span>
-<a name="l00188"></a>00188 <span class="comment">     *   horizontal).</span>
-<a name="l00189"></a>00189 <span class="comment">     **********************************************************************/</span>
-<a name="l00190"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#af553c42337b9a9a1d51b81fea7083ea2">00190</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> FieldComponents(real Bx, real By, real Bz,
-<a name="l00191"></a>00191                                 real& H, real& F, real& D, real& I) <span class="keywordflow">throw</span>() {
-<a name="l00192"></a>00192       real Ht, Ft, Dt, It;
-<a name="l00193"></a>00193       FieldComponents(Bx, By, Bz, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0),
-<a name="l00194"></a>00194                       H, F, D, I, Ht, Ft, Dt, It);
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 <span class="comment"></span>
-<a name="l00197"></a>00197 <span class="comment">    /**</span>
-<a name="l00198"></a>00198 <span class="comment">     * Compute various quantities dependent on the magnetic field and its rate</span>
-<a name="l00199"></a>00199 <span class="comment">     * of change.</span>
-<a name="l00200"></a>00200 <span class="comment">     *</span>
-<a name="l00201"></a>00201 <span class="comment">     * @param[in] Bx the \e x (easterly) component of the magnetic field (nT).</span>
-<a name="l00202"></a>00202 <span class="comment">     * @param[in] By the \e y (northerly) component of the magnetic field (nT).</span>
-<a name="l00203"></a>00203 <span class="comment">     * @param[in] Bz the \e z (vertical, up positive) component of the magnetic</span>
-<a name="l00204"></a>00204 <span class="comment">     *   field (nT).</span>
-<a name="l00205"></a>00205 <span class="comment">     * @param[in] Bxt the rate of change of \e Bx (nT/yr).</span>
-<a name="l00206"></a>00206 <span class="comment">     * @param[in] Byt the rate of change of \e By (nT/yr).</span>
-<a name="l00207"></a>00207 <span class="comment">     * @param[in] Bzt the rate of change of \e Bz (nT/yr).</span>
-<a name="l00208"></a>00208 <span class="comment">     * @param[out] H the horizontal magnetic field (nT).</span>
-<a name="l00209"></a>00209 <span class="comment">     * @param[out] F the total magnetic field (nT).</span>
-<a name="l00210"></a>00210 <span class="comment">     * @param[out] D the declination of the field (degrees east of north).</span>
-<a name="l00211"></a>00211 <span class="comment">     * @param[out] I the inclination of the field (degrees down from</span>
-<a name="l00212"></a>00212 <span class="comment">     *   horizontal).</span>
-<a name="l00213"></a>00213 <span class="comment">     * @param[out] Ht the rate of change of \e H (nT/yr).</span>
-<a name="l00214"></a>00214 <span class="comment">     * @param[out] Ft the rate of change of \e F (nT/yr).</span>
-<a name="l00215"></a>00215 <span class="comment">     * @param[out] Dt the rate of change of \e D (degrees/yr).</span>
-<a name="l00216"></a>00216 <span class="comment">     * @param[out] It the rate of change of \e I (degrees/yr).</span>
-<a name="l00217"></a>00217 <span class="comment">     **********************************************************************/</span>
-<a name="l00218"></a>00218     <span class="keyword">static</span> <span class="keywordtype">void</span> FieldComponents(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Bx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> By, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Bz,
-<a name="l00219"></a>00219                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Bxt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Byt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Bzt,
-<a name="l00220"></a>00220                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& H, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& F, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& D, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& I,
-<a name="l00221"></a>00221                                 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Ht, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Ft, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& Dt, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& It) <span class="keywordflow">throw</span>();<span class="comment"></span>
-<a name="l00222"></a>00222 <span class="comment">    ///@}</span>
-<a name="l00223"></a>00223 <span class="comment"></span><span class="comment"></span>
-<a name="l00224"></a>00224 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00225"></a>00225 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00226"></a>00226 <span class="comment">    ///@{</span>
-<a name="l00227"></a>00227 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00228"></a>00228 <span class="comment">     * @return the description of the magnetic model, if available, from the</span>
-<a name="l00229"></a>00229 <span class="comment">     *   Description file in the data file; if absent, return "NONE".</span>
-<a name="l00230"></a>00230 <span class="comment">     **********************************************************************/</span>
-<a name="l00231"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a204e8d3c4ebf6f8c13eb9e1817921ea2">00231</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1MagneticModel.html#a204e8d3c4ebf6f8c13eb9e1817921ea2">Description</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _description; }
-<a name="l00232"></a>00232 <span class="comment"></span>
-<a name="l00233"></a>00233 <span class="comment">    /**</span>
-<a name="l00234"></a>00234 <span class="comment">     * @return date of the model, if available, from the ReleaseDate field in</span>
-<a name="l00235"></a>00235 <span class="comment">     *   the data file; if absent, return "UNKNOWN".</span>
-<a name="l00236"></a>00236 <span class="comment">     **********************************************************************/</span>
-<a name="l00237"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a230648296f87ff6fc12a3e65ff01bc3b">00237</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1MagneticModel.html#a230648296f87ff6fc12a3e65ff01bc3b">DateTime</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _date; }
-<a name="l00238"></a>00238 <span class="comment"></span>
-<a name="l00239"></a>00239 <span class="comment">    /**</span>
-<a name="l00240"></a>00240 <span class="comment">     * @return full file name used to load the magnetic model.</span>
-<a name="l00241"></a>00241 <span class="comment">     **********************************************************************/</span>
-<a name="l00242"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#aa072d202531c0cacdd7bca128d670705">00242</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1MagneticModel.html#aa072d202531c0cacdd7bca128d670705">MagneticFile</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _filename; }
-<a name="l00243"></a>00243 <span class="comment"></span>
-<a name="l00244"></a>00244 <span class="comment">    /**</span>
-<a name="l00245"></a>00245 <span class="comment">     * @return "name" used to load the magnetic model (from the first argument</span>
-<a name="l00246"></a>00246 <span class="comment">     *   of the constructor, but this may be overridden by the model file).</span>
-<a name="l00247"></a>00247 <span class="comment">     **********************************************************************/</span>
-<a name="l00248"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#ad500f0d76997b4026b75805fad71dbee">00248</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1MagneticModel.html#ad500f0d76997b4026b75805fad71dbee">MagneticModelName</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _name; }
-<a name="l00249"></a>00249 <span class="comment"></span>
-<a name="l00250"></a>00250 <span class="comment">    /**</span>
-<a name="l00251"></a>00251 <span class="comment">     * @return directory used to load the magnetic model.</span>
-<a name="l00252"></a>00252 <span class="comment">     **********************************************************************/</span>
-<a name="l00253"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a2476aee96f07071de17c24dbbf80f521">00253</a>     <span class="keyword">const</span> std::string& <a class="code" href="classGeographicLib_1_1MagneticModel.html#a2476aee96f07071de17c24dbbf80f521">MagneticModelDirectory</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _dir; }
-<a name="l00254"></a>00254 <span class="comment"></span>
-<a name="l00255"></a>00255 <span class="comment">    /**</span>
-<a name="l00256"></a>00256 <span class="comment">     * @return the minimum height above the ellipsoid (in meters) for which</span>
-<a name="l00257"></a>00257 <span class="comment">     *   this MagneticModel should be used.</span>
-<a name="l00258"></a>00258 <span class="comment">     *</span>
-<a name="l00259"></a>00259 <span class="comment">     * Because the model will typically provide useful results</span>
-<a name="l00260"></a>00260 <span class="comment">     * slightly outside the range of allowed heights, no check of \e t</span>
-<a name="l00261"></a>00261 <span class="comment">     * argument is made by MagneticModel::operator()() or</span>
-<a name="l00262"></a>00262 <span class="comment">     * MagneticModel::Circle.</span>
-<a name="l00263"></a>00263 <span class="comment">     **********************************************************************/</span>
-<a name="l00264"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">00264</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _hmin; }
-<a name="l00265"></a>00265 <span class="comment"></span>
-<a name="l00266"></a>00266 <span class="comment">    /**</span>
-<a name="l00267"></a>00267 <span class="comment">     * @return the maximum height above the ellipsoid (in meters) for which</span>
-<a name="l00268"></a>00268 <span class="comment">     *   this MagneticModel should be used.</span>
-<a name="l00269"></a>00269 <span class="comment">     *</span>
-<a name="l00270"></a>00270 <span class="comment">     * Because the model will typically provide useful results</span>
-<a name="l00271"></a>00271 <span class="comment">     * slightly outside the range of allowed heights, no check of \e t</span>
-<a name="l00272"></a>00272 <span class="comment">     * argument is made by MagneticModel::operator()() or</span>
-<a name="l00273"></a>00273 <span class="comment">     * MagneticModel::Circle.</span>
-<a name="l00274"></a>00274 <span class="comment">     **********************************************************************/</span>
-<a name="l00275"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">00275</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _hmax; }
-<a name="l00276"></a>00276 <span class="comment"></span>
-<a name="l00277"></a>00277 <span class="comment">    /**</span>
-<a name="l00278"></a>00278 <span class="comment">     * @return the minimum time (in years) for which this MagneticModel should</span>
-<a name="l00279"></a>00279 <span class="comment">     *   be used.</span>
-<a name="l00280"></a>00280 <span class="comment">     *</span>
-<a name="l00281"></a>00281 <span class="comment">     * Because the model will typically provide useful results</span>
-<a name="l00282"></a>00282 <span class="comment">     * slightly outside the range of allowed times, no check of \e t</span>
-<a name="l00283"></a>00283 <span class="comment">     * argument is made by MagneticModel::operator()() or</span>
-<a name="l00284"></a>00284 <span class="comment">     * MagneticModel::Circle.</span>
-<a name="l00285"></a>00285 <span class="comment">     **********************************************************************/</span>
-<a name="l00286"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">00286</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _tmin; }
-<a name="l00287"></a>00287 <span class="comment"></span>
-<a name="l00288"></a>00288 <span class="comment">    /**</span>
-<a name="l00289"></a>00289 <span class="comment">     * @return the maximum time (in years) for which this MagneticModel should</span>
-<a name="l00290"></a>00290 <span class="comment">     *   be used.</span>
-<a name="l00291"></a>00291 <span class="comment">     *</span>
-<a name="l00292"></a>00292 <span class="comment">     * Because the model will typically provide useful results</span>
-<a name="l00293"></a>00293 <span class="comment">     * slightly outside the range of allowed times, no check of \e t</span>
-<a name="l00294"></a>00294 <span class="comment">     * argument is made by MagneticModel::operator()() or</span>
-<a name="l00295"></a>00295 <span class="comment">     * MagneticModel::Circle.</span>
-<a name="l00296"></a>00296 <span class="comment">     **********************************************************************/</span>
-<a name="l00297"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">00297</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _tmax; }
-<a name="l00298"></a>00298 <span class="comment"></span>
-<a name="l00299"></a>00299 <span class="comment">    /**</span>
-<a name="l00300"></a>00300 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00301"></a>00301 <span class="comment">     *   the value of \e a inherited from the Geocentric object used in the</span>
-<a name="l00302"></a>00302 <span class="comment">     *   constructor.</span>
-<a name="l00303"></a>00303 <span class="comment">     **********************************************************************/</span>
-<a name="l00304"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a0b55df676607204a2d44687ffafe8d9e">00304</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1MagneticModel.html#a0b55df676607204a2d44687ffafe8d9e">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.MajorRadius(); }
-<a name="l00305"></a>00305 <span class="comment"></span>
-<a name="l00306"></a>00306 <span class="comment">    /**</span>
-<a name="l00307"></a>00307 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value</span>
-<a name="l00308"></a>00308 <span class="comment">     *   inherited from the Geocentric object used in the constructor.</span>
-<a name="l00309"></a>00309 <span class="comment">     **********************************************************************/</span>
-<a name="l00310"></a><a class="code" href="classGeographicLib_1_1MagneticModel.html#a38ad95b421f5fbce40abff5733421370">00310</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1MagneticModel.html#a38ad95b421f5fbce40abff5733421370">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.Flattening(); }<span class [...]
-<a name="l00311"></a>00311 <span class="comment">    ///@}</span>
-<a name="l00312"></a>00312 <span class="comment"></span><span class="comment"></span>
-<a name="l00313"></a>00313 <span class="comment">    /**</span>
-<a name="l00314"></a>00314 <span class="comment">     * @return the default path for magnetic model data files.</span>
-<a name="l00315"></a>00315 <span class="comment">     *</span>
-<a name="l00316"></a>00316 <span class="comment">     * This is the value of the environment variable MAGNETIC_PATH, if set;</span>
-<a name="l00317"></a>00317 <span class="comment">     * otherwise, it is $GEOGRAPHICLIB_DATA/magnetic if the environment</span>
-<a name="l00318"></a>00318 <span class="comment">     * variable GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time</span>
-<a name="l00319"></a>00319 <span class="comment">     * default (/usr/local/share/GeographicLib/magnetic on non-Windows systems</span>
-<a name="l00320"></a>00320 <span class="comment">     * and C:/Documents and Settings/All Users/Application</span>
-<a name="l00321"></a>00321 <span class="comment">     * Data/GeographicLib/magnetic on Windows systems).</span>
-<a name="l00322"></a>00322 <span class="comment">     **********************************************************************/</span>
-<a name="l00323"></a>00323     <span class="keyword">static</span> std::string DefaultMagneticPath();
-<a name="l00324"></a>00324 <span class="comment"></span>
-<a name="l00325"></a>00325 <span class="comment">    /**</span>
-<a name="l00326"></a>00326 <span class="comment">     * @return the default name for the magnetic model.</span>
-<a name="l00327"></a>00327 <span class="comment">     *</span>
-<a name="l00328"></a>00328 <span class="comment">     * This is the value of the environment variable MAGNETIC_NAME, if set,</span>
-<a name="l00329"></a>00329 <span class="comment">     * otherwise, it is "wmm2010".  The MagneticModel class does not use this</span>
-<a name="l00330"></a>00330 <span class="comment">     * function; it is just provided as a convenience for a calling program</span>
-<a name="l00331"></a>00331 <span class="comment">     * when constructing a MagneticModel object.</span>
-<a name="l00332"></a>00332 <span class="comment">     **********************************************************************/</span>
-<a name="l00333"></a>00333     <span class="keyword">static</span> std::string DefaultMagneticName();
-<a name="l00334"></a>00334   };
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00339"></a>00339 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
-<a name="l00340"></a>00340 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00341"></a>00341 <span class="preprocessor"></span>
-<a name="l00342"></a>00342 <span class="preprocessor">#endif  // GEOGRAPHICLIB_MAGNETICMODEL_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Math_8hpp.html b/doc/html/Math_8hpp.html
deleted file mode 100644
index e1d5882..0000000
--- a/doc/html/Math_8hpp.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Math.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Math.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <cmath></code><br/>
-<code>#include <limits></code><br/>
-<code>#include <algorithm></code><br/>
-<code>#include <vector></code><br/>
-</div>
-<p><a href="Math_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Mathematical functions needed by GeographicLib.  <a href="classGeographicLib_1_1Math.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Math_8hpp.html#afb2818ef5e2f2bed96dcaa151b3edca4">GEOGRAPHICLIB_MATH_HPP</a>   "$Id: edd244e4c5c74e696096c2b6d598728957a0d36d $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Math_8hpp.html#a2769cdfa2277e2728e4e157ec3f6318b">GEOGRAPHICLIB_CPLUSPLUS11_MATH</a>   0</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Math_8hpp.html#a82e69009d3cd108c8aad8afe44fb1132">WORDS_BIGENDIAN</a>   0</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Math_8hpp.html#a8df061fdb3d6e90d150d4fdd749f96b1">GEOGRAPHICLIB_PREC</a>   1</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="afb2818ef5e2f2bed96dcaa151b3edca4"></a><!-- doxytag: member="Math.hpp::GEOGRAPHICLIB_MATH_HPP" ref="afb2818ef5e2f2bed96dcaa151b3edca4" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_MATH_HPP   "$Id: edd244e4c5c74e696096c2b6d598728957a0d36d $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00015">15</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2769cdfa2277e2728e4e157ec3f6318b"></a><!-- doxytag: member="Math.hpp::GEOGRAPHICLIB_CPLUSPLUS11_MATH" ref="a2769cdfa2277e2728e4e157ec3f6318b" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_CPLUSPLUS11_MATH   0</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Are C++11 math functions available? </p>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00024">24</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a82e69009d3cd108c8aad8afe44fb1132"></a><!-- doxytag: member="Math.hpp::WORDS_BIGENDIAN" ref="a82e69009d3cd108c8aad8afe44fb1132" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define WORDS_BIGENDIAN   0</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00029">29</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8df061fdb3d6e90d150d4fdd749f96b1"></a><!-- doxytag: member="Math.hpp::GEOGRAPHICLIB_PREC" ref="a8df061fdb3d6e90d150d4fdd749f96b1" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_PREC   1</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The precision of floating point numbers used in GeographicLib. 0 means float; 1 (default) means double; 2 means long double. Nearly all the testing has been carried out with doubles and that's the recommended configuration. In order for long double to be used, HAVE_LONG_DOUBLE needs to be defined. Note that with Microsoft Visual Studio, long double is the same as double. </p>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00041">41</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Math_8hpp_source.html b/doc/html/Math_8hpp_source.html
deleted file mode 100644
index 1531cb3..0000000
--- a/doc/html/Math_8hpp_source.html
+++ /dev/null
@@ -1,485 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Math.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Math.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Math_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Math.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::Math class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="comment">// Constants.hpp includes Math.hpp.  Place this include outside Math.hpp's</span>
-<a name="l00011"></a>00011 <span class="comment">// include guard to enforce this ordering.</span>
-<a name="l00012"></a>00012 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00013"></a>00013 
-<a name="l00014"></a>00014 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_MATH_HPP)</span>
-<a name="l00015"></a><a class="code" href="Math_8hpp.html#afb2818ef5e2f2bed96dcaa151b3edca4">00015</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_MATH_HPP "$Id: edd244e4c5c74e696096c2b6d598728957a0d36d $"</span>
-<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="comment"></span>
-<a name="l00017"></a>00017 <span class="comment">/**</span>
-<a name="l00018"></a>00018 <span class="comment"> * Are C++11 math functions available?</span>
-<a name="l00019"></a>00019 <span class="comment"> **********************************************************************/</span>
-<a name="l00020"></a>00020 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_CPLUSPLUS11_MATH)</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#  if defined(__GXX_EXPERIMENTAL_CXX0X__)</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHICLIB_CPLUSPLUS11_MATH 1</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#  else</span>
-<a name="l00024"></a><a class="code" href="Math_8hpp.html#a2769cdfa2277e2728e4e157ec3f6318b">00024</a> <span class="preprocessor"></span><span class="preprocessor">#    define GEOGRAPHICLIB_CPLUSPLUS11_MATH 0</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#  endif</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#if !defined(WORDS_BIGENDIAN)</span>
-<a name="l00029"></a><a class="code" href="Math_8hpp.html#a82e69009d3cd108c8aad8afe44fb1132">00029</a> <span class="preprocessor"></span><span class="preprocessor"># define WORDS_BIGENDIAN 0</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_PREC)</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="comment">/**</span>
-<a name="l00034"></a>00034 <span class="comment"> * The precision of floating point numbers used in %GeographicLib.  0 means</span>
-<a name="l00035"></a>00035 <span class="comment"> * float; 1 (default) means double; 2 means long double.  Nearly all the</span>
-<a name="l00036"></a>00036 <span class="comment"> * testing has been carried out with doubles and that's the recommended</span>
-<a name="l00037"></a>00037 <span class="comment"> * configuration.  In order for long double to be used, HAVE_LONG_DOUBLE needs</span>
-<a name="l00038"></a>00038 <span class="comment"> * to be defined.  Note that with Microsoft Visual Studio, long double is the</span>
-<a name="l00039"></a>00039 <span class="comment"> * same as double.</span>
-<a name="l00040"></a>00040 <span class="comment"> **********************************************************************/</span>
-<a name="l00041"></a><a class="code" href="Math_8hpp.html#a8df061fdb3d6e90d150d4fdd749f96b1">00041</a> <span class="preprocessor">#define GEOGRAPHICLIB_PREC 1</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <cmath></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <limits></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <algorithm></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <vector></span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00050"></a>00050 <span class="comment"></span>
-<a name="l00051"></a>00051 <span class="comment">  /**</span>
-<a name="l00052"></a>00052 <span class="comment">   * \brief Mathematical functions needed by %GeographicLib</span>
-<a name="l00053"></a>00053 <span class="comment">   *</span>
-<a name="l00054"></a>00054 <span class="comment">   * Define mathematical functions in order to localize system dependencies and</span>
-<a name="l00055"></a>00055 <span class="comment">   * to provide generic versions of the functions.  In addition define a real</span>
-<a name="l00056"></a>00056 <span class="comment">   * type to be used by %GeographicLib.</span>
-<a name="l00057"></a>00057 <span class="comment">   *</span>
-<a name="l00058"></a>00058 <span class="comment">   * Example of use:</span>
-<a name="l00059"></a>00059 <span class="comment">   * \include example-Math.cpp</span>
-<a name="l00060"></a>00060 <span class="comment">   **********************************************************************/</span>
-<a name="l00061"></a>00061   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> Math {
-<a name="l00062"></a>00062   <span class="keyword">private</span>:
-<a name="l00063"></a>00063     <span class="keywordtype">void</span> dummy() {
-<a name="l00064"></a>00064       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(<a class="code" href="Math_8hpp.html#a8df061fdb3d6e90d150d4fdd749f96b1">GEOGRAPHICLIB_PREC</a> >= 0 && <a class="code" href="Math_8hpp.html#a8df061fdb3d6e90d150d4fdd749f96b1">GEOGRAPHICLIB_PREC</a> <= 2,
-<a name="l00065"></a>00065                     <span class="stringliteral">"Bad value of precision"</span>);
-<a name="l00066"></a>00066     }
-<a name="l00067"></a>00067     Math();                     <span class="comment">// Disable constructor</span>
-<a name="l00068"></a>00068   <span class="keyword">public</span>:
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="preprocessor">#if defined(HAVE_LONG_DOUBLE)</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="comment">    /**</span>
-<a name="l00072"></a>00072 <span class="comment">     * The extended precision type for real numbers, used for some testing.</span>
-<a name="l00073"></a>00073 <span class="comment">     * This is long double on computers with this type; otherwise it is double.</span>
-<a name="l00074"></a>00074 <span class="comment">     **********************************************************************/</span>
-<a name="l00075"></a>00075     <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> extended;
-<a name="l00076"></a>00076 <span class="preprocessor">#else</span>
-<a name="l00077"></a><a class="code" href="classGeographicLib_1_1Math.html#a436f350a6a9539e176dda19d0e4811f8">00077</a> <span class="preprocessor"></span>    <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="classGeographicLib_1_1Math.html#a436f350a6a9539e176dda19d0e4811f8">extended</a>;
-<a name="l00078"></a>00078 <span class="preprocessor">#endif</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span>
-<a name="l00080"></a>00080 <span class="preprocessor">#if GEOGRAPHICLIB_PREC == 1</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="comment">    /**</span>
-<a name="l00082"></a>00082 <span class="comment">     * The real type for %GeographicLib. Nearly all the testing has been done</span>
-<a name="l00083"></a>00083 <span class="comment">     * with \e real = double.  However, the algorithms should also work with</span>
-<a name="l00084"></a>00084 <span class="comment">     * float and long double (where available).  (<b>CAUTION</b>: reasonable</span>
-<a name="l00085"></a>00085 <span class="comment">     * accuracy typically cannot be obtained using floats.)</span>
-<a name="l00086"></a>00086 <span class="comment">     **********************************************************************/</span>
-<a name="l00087"></a><a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">00087</a>     <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a>;
-<a name="l00088"></a>00088 <span class="preprocessor">#elif GEOGRAPHICLIB_PREC == 0</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00090"></a>00090 <span class="preprocessor">#elif GEOGRAPHICLIB_PREC == 2</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html#a436f350a6a9539e176dda19d0e4811f8">extended</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00092"></a>00092 <span class="preprocessor">#else</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span>    <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00094"></a>00094 <span class="preprocessor">#endif</span>
-<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="comment"></span>
-<a name="l00096"></a>00096 <span class="comment">    /**</span>
-<a name="l00097"></a>00097 <span class="comment">     * true if the machine is big-endian</span>
-<a name="l00098"></a>00098 <span class="comment">     **********************************************************************/</span>
-<a name="l00099"></a><a class="code" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">00099</a>     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> bigendian = <a class="code" href="Math_8hpp.html#a82e69009d3cd108c8aad8afe44fb1132">WORDS_BIGENDIAN</a>;
-<a name="l00100"></a>00100 <span class="comment"></span>
-<a name="l00101"></a>00101 <span class="comment">    /**</span>
-<a name="l00102"></a>00102 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00103"></a>00103 <span class="comment">     * @return \e pi.</span>
-<a name="l00104"></a>00104 <span class="comment">     **********************************************************************/</span>
-<a name="l00105"></a><a class="code" href="classGeographicLib_1_1Math.html#aca1580c771e7019bfe826512fba9b2f1">00105</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T pi() throw()
-<a name="l00106"></a>00106     { <span class="keywordflow">return</span> std::atan2(T(0), -T(1)); }<span class="comment"></span>
-<a name="l00107"></a>00107 <span class="comment">    /**</span>
-<a name="l00108"></a>00108 <span class="comment">     * A synonym for pi<real>().</span>
-<a name="l00109"></a>00109 <span class="comment">     **********************************************************************/</span>
-<a name="l00110"></a><a class="code" href="classGeographicLib_1_1Math.html#abb031de2a30d6fbac4c634b344e46df4">00110</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> <a class="code" href="classGeographicLib_1_1Math.html#abb031de2a30d6fbac4c634b344e46df4">pi</a>() throw() { <span class="keywordflow">return</span> pi<real>(); }
-<a name="l00111"></a>00111 <span class="comment"></span>
-<a name="l00112"></a>00112 <span class="comment">    /**</span>
-<a name="l00113"></a>00113 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00114"></a>00114 <span class="comment">     * @return the number of radians in a degree.</span>
-<a name="l00115"></a>00115 <span class="comment">     **********************************************************************/</span>
-<a name="l00116"></a><a class="code" href="classGeographicLib_1_1Math.html#a0f3b4ea16cc2cb21557555fca3b1c201">00116</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T degree() throw()
-<a name="l00117"></a>00117     { <span class="keywordflow">return</span> pi<T>() / T(180); }<span class="comment"></span>
-<a name="l00118"></a>00118 <span class="comment">    /**</span>
-<a name="l00119"></a>00119 <span class="comment">     * A synonym for degree<real>().</span>
-<a name="l00120"></a>00120 <span class="comment">     **********************************************************************/</span>
-<a name="l00121"></a><a class="code" href="classGeographicLib_1_1Math.html#a5bb8bea024e11eb402ecbcf9bae28bb5">00121</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> <a class="code" href="classGeographicLib_1_1Math.html#a5bb8bea024e11eb402ecbcf9bae28bb5">degree</a>() throw() { <span class="keywordflow">return</span> degree<real>(); }
-<a name="l00122"></a>00122 <span class="comment"></span>
-<a name="l00123"></a>00123 <span class="comment">    /**</span>
-<a name="l00124"></a>00124 <span class="comment">     * Square a number.</span>
-<a name="l00125"></a>00125 <span class="comment"></span>
-<a name="l00126"></a>00126 <span class="comment">     * @tparam T the type of the argument and the returned value.</span>
-<a name="l00127"></a>00127 <span class="comment">     * @param[in] x</span>
-<a name="l00128"></a>00128 <span class="comment">     * @return <i>x</i><sup>2</sup>.</span>
-<a name="l00129"></a>00129 <span class="comment">     **********************************************************************/</span>
-<a name="l00130"></a><a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">00130</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T sq(T x) <span class="keywordflow">throw</span>()
-<a name="l00131"></a>00131     { <span class="keywordflow">return</span> x * x; }
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 <span class="preprocessor">#if defined(DOXYGEN)</span>
-<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="comment">    /**</span>
-<a name="l00135"></a>00135 <span class="comment">     * The hypotenuse function avoiding underflow and overflow.</span>
-<a name="l00136"></a>00136 <span class="comment">     *</span>
-<a name="l00137"></a>00137 <span class="comment">     * @tparam T the type of the arguments and the returned value.</span>
-<a name="l00138"></a>00138 <span class="comment">     * @param[in] x</span>
-<a name="l00139"></a>00139 <span class="comment">     * @param[in] y</span>
-<a name="l00140"></a>00140 <span class="comment">     * @return sqrt(<i>x</i><sup>2</sup> + <i>y</i><sup>2</sup>).</span>
-<a name="l00141"></a>00141 <span class="comment">     **********************************************************************/</span>
-<a name="l00142"></a><a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">00142</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">hypot</a>(T x, T y) <span class="keywordflow">throw</span>() {
-<a name="l00143"></a>00143       x = std::abs(x);
-<a name="l00144"></a>00144       y = std::abs(y);
-<a name="l00145"></a>00145       T a = (std::max)(x, y),
-<a name="l00146"></a>00146         b = (std::min)(x, y) / (a ? a : 1);
-<a name="l00147"></a>00147       <span class="keywordflow">return</span> a * std::sqrt(1 + b * b);
-<a name="l00148"></a>00148     }
-<a name="l00149"></a>00149 <span class="preprocessor">#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T hypot(T x, T y) <span class="keywordflow">throw</span>()
-<a name="l00151"></a>00151     { <span class="keywordflow">return</span> std::hypot(x, y); }
-<a name="l00152"></a>00152 <span class="preprocessor">#elif defined(_MSC_VER)</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> hypot(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y) <span class="keywordflow">throw</span>()
-<a name="l00154"></a>00154     { <span class="keywordflow">return</span> _hypot(x, y); }
-<a name="l00155"></a>00155 <span class="preprocessor">#if _MSC_VER < 1400</span>
-<a name="l00156"></a>00156 <span class="preprocessor"></span>    <span class="comment">// Visual C++ 7.1/VS .NET 2003 does not have _hypotf()</span>
-<a name="l00157"></a>00157     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> hypot(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y) <span class="keywordflow">throw</span>()
-<a name="l00158"></a>00158     { <span class="keywordflow">return</span> float(_hypot(x, y)); }
-<a name="l00159"></a>00159 <span class="preprocessor">#else</span>
-<a name="l00160"></a>00160 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> hypot(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y) <span class="keywordflow">throw</span>()
-<a name="l00161"></a>00161     { <span class="keywordflow">return</span> _hypotf(x, y); }
-<a name="l00162"></a>00162 <span class="preprocessor">#endif</span>
-<a name="l00163"></a>00163 <span class="preprocessor"></span><span class="preprocessor">#if defined(HAVE_LONG_DOUBLE)</span>
-<a name="l00164"></a>00164 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> hypot(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x, <span class="keywordtype">long</span> <span class="keywordtype">double</span> y) <span class="keywordflow">throw</span>()
-<a name="l00165"></a>00165     { <span class="keywordflow">return</span> _hypot(x, y); }
-<a name="l00166"></a>00166 <span class="preprocessor">#endif</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00168"></a>00168 <span class="preprocessor"></span>    <span class="comment">// Use overloading to define generic versions</span>
-<a name="l00169"></a>00169     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> hypot(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y) <span class="keywordflow">throw</span>()
-<a name="l00170"></a>00170     { return ::hypot(x, y); }
-<a name="l00171"></a>00171     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> hypot(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y) <span class="keywordflow">throw</span>()
-<a name="l00172"></a>00172     { return ::hypotf(x, y); }
-<a name="l00173"></a>00173 <span class="preprocessor">#if defined(HAVE_LONG_DOUBLE)</span>
-<a name="l00174"></a>00174 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> hypot(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x, <span class="keywordtype">long</span> <span class="keywordtype">double</span> y) <span class="keywordflow">throw</span>()
-<a name="l00175"></a>00175     { return ::hypotl(x, y); }
-<a name="l00176"></a>00176 <span class="preprocessor">#endif</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span>
-<a name="l00179"></a>00179 <span class="preprocessor">#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span><span class="comment">    /**</span>
-<a name="l00181"></a>00181 <span class="comment">     * exp(\e x) - 1 accurate near \e x = 0.  This is taken from</span>
-<a name="l00182"></a>00182 <span class="comment">     * N. J. Higham, Accuracy and Stability of Numerical Algorithms, 2nd</span>
-<a name="l00183"></a>00183 <span class="comment">     * Edition (SIAM, 2002), Sec 1.14.1, p 19.</span>
-<a name="l00184"></a>00184 <span class="comment">     *</span>
-<a name="l00185"></a>00185 <span class="comment">     * @tparam T the type of the argument and the returned value.</span>
-<a name="l00186"></a>00186 <span class="comment">     * @param[in] x</span>
-<a name="l00187"></a>00187 <span class="comment">     * @return exp(\e x) - 1.</span>
-<a name="l00188"></a>00188 <span class="comment">     **********************************************************************/</span>
-<a name="l00189"></a><a class="code" href="classGeographicLib_1_1Math.html#a2fd4e8930d9dd953352d25fc184d843e">00189</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Math.html#a2fd4e8930d9dd953352d25fc184d843e">expm1</a>(T x) <span class="keywordflow">throw</span>() {
-<a name="l00190"></a>00190       <span class="keyword">volatile</span> T
-<a name="l00191"></a>00191         y = std::exp(x),
-<a name="l00192"></a>00192         z = y - 1;
-<a name="l00193"></a>00193       <span class="comment">// The reasoning here is similar to that for log1p.  The expression</span>
-<a name="l00194"></a>00194       <span class="comment">// mathematically reduces to exp(x) - 1, and the factor z/log(y) = (y -</span>
-<a name="l00195"></a>00195       <span class="comment">// 1)/log(y) is a slowly varying quantity near y = 1 and is accurately</span>
-<a name="l00196"></a>00196       <span class="comment">// computed.</span>
-<a name="l00197"></a>00197       <span class="keywordflow">return</span> std::abs(x) > 1 ? z : (z == 0 ? x : x * z / std::log(y));
-<a name="l00198"></a>00198     }
-<a name="l00199"></a>00199 <span class="preprocessor">#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T expm1(T x) <span class="keywordflow">throw</span>()
-<a name="l00201"></a>00201     { <span class="keywordflow">return</span> std::expm1(x); }
-<a name="l00202"></a>00202 <span class="preprocessor">#else</span>
-<a name="l00203"></a>00203 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> expm1(<span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>() { return ::expm1(x); }
-<a name="l00204"></a>00204     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> expm1(<span class="keywordtype">float</span> x) <span class="keywordflow">throw</span>() { return ::expm1f(x); }
-<a name="l00205"></a>00205 <span class="preprocessor">#if defined(HAVE_LONG_DOUBLE)</span>
-<a name="l00206"></a>00206 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> expm1(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>()
-<a name="l00207"></a>00207     { return ::expm1l(x); }
-<a name="l00208"></a>00208 <span class="preprocessor">#endif</span>
-<a name="l00209"></a>00209 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00210"></a>00210 <span class="preprocessor"></span>
-<a name="l00211"></a>00211 <span class="preprocessor">#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)</span>
-<a name="l00212"></a>00212 <span class="preprocessor"></span><span class="comment">    /**</span>
-<a name="l00213"></a>00213 <span class="comment">     * log(1 + \e x) accurate near \e x = 0.</span>
-<a name="l00214"></a>00214 <span class="comment">     *</span>
-<a name="l00215"></a>00215 <span class="comment">     * This is taken from D. Goldberg,</span>
-<a name="l00216"></a>00216 <span class="comment">     * <a href="http://dx.doi.org/10.1145/103162.103163">What every computer</span>
-<a name="l00217"></a>00217 <span class="comment">     * scientist should know about floating-point arithmetic</a> (1991),</span>
-<a name="l00218"></a>00218 <span class="comment">     * Theorem 4.  See also, Higham (op. cit.), Answer to Problem 1.5, p 528.</span>
-<a name="l00219"></a>00219 <span class="comment">     *</span>
-<a name="l00220"></a>00220 <span class="comment">     * @tparam T the type of the argument and the returned value.</span>
-<a name="l00221"></a>00221 <span class="comment">     * @param[in] x</span>
-<a name="l00222"></a>00222 <span class="comment">     * @return log(1 + \e x).</span>
-<a name="l00223"></a>00223 <span class="comment">     **********************************************************************/</span>
-<a name="l00224"></a><a class="code" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">00224</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">log1p</a>(T x) <span class="keywordflow">throw</span>() {
-<a name="l00225"></a>00225       <span class="keyword">volatile</span> T
-<a name="l00226"></a>00226         y = 1 + x,
-<a name="l00227"></a>00227         z = y - 1;
-<a name="l00228"></a>00228       <span class="comment">// Here's the explanation for this magic: y = 1 + z, exactly, and z</span>
-<a name="l00229"></a>00229       <span class="comment">// approx x, thus log(y)/z (which is nearly constant near z = 0) returns</span>
-<a name="l00230"></a>00230       <span class="comment">// a good approximation to the true log(1 + x)/x.  The multiplication x *</span>
-<a name="l00231"></a>00231       <span class="comment">// (log(y)/z) introduces little additional error.</span>
-<a name="l00232"></a>00232       <span class="keywordflow">return</span> z == 0 ? x : x * std::log(y) / z;
-<a name="l00233"></a>00233     }
-<a name="l00234"></a>00234 <span class="preprocessor">#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH</span>
-<a name="l00235"></a>00235 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T log1p(T x) <span class="keywordflow">throw</span>()
-<a name="l00236"></a>00236     { <span class="keywordflow">return</span> std::log1p(x); }
-<a name="l00237"></a>00237 <span class="preprocessor">#else</span>
-<a name="l00238"></a>00238 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> log1p(<span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>() { return ::log1p(x); }
-<a name="l00239"></a>00239     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> log1p(<span class="keywordtype">float</span> x) <span class="keywordflow">throw</span>() { return ::log1pf(x); }
-<a name="l00240"></a>00240 <span class="preprocessor">#if defined(HAVE_LONG_DOUBLE)</span>
-<a name="l00241"></a>00241 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> log1p(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>()
-<a name="l00242"></a>00242     { return ::log1pl(x); }
-<a name="l00243"></a>00243 <span class="preprocessor">#endif</span>
-<a name="l00244"></a>00244 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00245"></a>00245 <span class="preprocessor"></span>
-<a name="l00246"></a>00246 <span class="preprocessor">#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)</span>
-<a name="l00247"></a>00247 <span class="preprocessor"></span><span class="comment">    /**</span>
-<a name="l00248"></a>00248 <span class="comment">     * The inverse hyperbolic sine function.  This is defined in terms of</span>
-<a name="l00249"></a>00249 <span class="comment">     * Math::log1p(\e x) in order to maintain accuracy near \e x = 0.  In</span>
-<a name="l00250"></a>00250 <span class="comment">     * addition, the odd parity of the function is enforced.</span>
-<a name="l00251"></a>00251 <span class="comment">     *</span>
-<a name="l00252"></a>00252 <span class="comment">     * @tparam T the type of the argument and the returned value.</span>
-<a name="l00253"></a>00253 <span class="comment">     * @param[in] x</span>
-<a name="l00254"></a>00254 <span class="comment">     * @return asinh(\e x).</span>
-<a name="l00255"></a>00255 <span class="comment">     **********************************************************************/</span>
-<a name="l00256"></a><a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">00256</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">asinh</a>(T x) <span class="keywordflow">throw</span>() {
-<a name="l00257"></a>00257       T y = std::abs(x);     <span class="comment">// Enforce odd parity</span>
-<a name="l00258"></a>00258       y = log1p(y * (1 + y/(hypot(T(1), y) + 1)));
-<a name="l00259"></a>00259       <span class="keywordflow">return</span> x < 0 ? -y : y;
-<a name="l00260"></a>00260     }
-<a name="l00261"></a>00261 <span class="preprocessor">#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH</span>
-<a name="l00262"></a>00262 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T asinh(T x) <span class="keywordflow">throw</span>()
-<a name="l00263"></a>00263     { <span class="keywordflow">return</span> std::asinh(x); }
-<a name="l00264"></a>00264 <span class="preprocessor">#else</span>
-<a name="l00265"></a>00265 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> asinh(<span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>() { return ::asinh(x); }
-<a name="l00266"></a>00266     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> asinh(<span class="keywordtype">float</span> x) <span class="keywordflow">throw</span>() { return ::asinhf(x); }
-<a name="l00267"></a>00267 <span class="preprocessor">#if defined(HAVE_LONG_DOUBLE)</span>
-<a name="l00268"></a>00268 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> asinh(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>()
-<a name="l00269"></a>00269     { return ::asinhl(x); }
-<a name="l00270"></a>00270 <span class="preprocessor">#endif</span>
-<a name="l00271"></a>00271 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00272"></a>00272 <span class="preprocessor"></span>
-<a name="l00273"></a>00273 <span class="preprocessor">#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)</span>
-<a name="l00274"></a>00274 <span class="preprocessor"></span><span class="comment">    /**</span>
-<a name="l00275"></a>00275 <span class="comment">     * The inverse hyperbolic tangent function.  This is defined in terms of</span>
-<a name="l00276"></a>00276 <span class="comment">     * Math::log1p(\e x) in order to maintain accuracy near \e x = 0.  In</span>
-<a name="l00277"></a>00277 <span class="comment">     * addition, the odd parity of the function is enforced.</span>
-<a name="l00278"></a>00278 <span class="comment">     *</span>
-<a name="l00279"></a>00279 <span class="comment">     * @tparam T the type of the argument and the returned value.</span>
-<a name="l00280"></a>00280 <span class="comment">     * @param[in] x</span>
-<a name="l00281"></a>00281 <span class="comment">     * @return atanh(\e x).</span>
-<a name="l00282"></a>00282 <span class="comment">     **********************************************************************/</span>
-<a name="l00283"></a><a class="code" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">00283</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">atanh</a>(T x) <span class="keywordflow">throw</span>() {
-<a name="l00284"></a>00284       T y = std::abs(x);     <span class="comment">// Enforce odd parity</span>
-<a name="l00285"></a>00285       y = log1p(2 * y/(1 - y))/2;
-<a name="l00286"></a>00286       <span class="keywordflow">return</span> x < 0 ? -y : y;
-<a name="l00287"></a>00287     }
-<a name="l00288"></a>00288 <span class="preprocessor">#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH</span>
-<a name="l00289"></a>00289 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T atanh(T x) <span class="keywordflow">throw</span>()
-<a name="l00290"></a>00290     { <span class="keywordflow">return</span> std::atanh(x); }
-<a name="l00291"></a>00291 <span class="preprocessor">#else</span>
-<a name="l00292"></a>00292 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> atanh(<span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>() { return ::atanh(x); }
-<a name="l00293"></a>00293     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> atanh(<span class="keywordtype">float</span> x) <span class="keywordflow">throw</span>() { return ::atanhf(x); }
-<a name="l00294"></a>00294 <span class="preprocessor">#if defined(HAVE_LONG_DOUBLE)</span>
-<a name="l00295"></a>00295 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> atanh(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>()
-<a name="l00296"></a>00296     { return ::atanhl(x); }
-<a name="l00297"></a>00297 <span class="preprocessor">#endif</span>
-<a name="l00298"></a>00298 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00299"></a>00299 <span class="preprocessor"></span>
-<a name="l00300"></a>00300 <span class="preprocessor">#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)</span>
-<a name="l00301"></a>00301 <span class="preprocessor"></span><span class="comment">    /**</span>
-<a name="l00302"></a>00302 <span class="comment">     * The cube root function.</span>
-<a name="l00303"></a>00303 <span class="comment">     *</span>
-<a name="l00304"></a>00304 <span class="comment">     * @tparam T the type of the argument and the returned value.</span>
-<a name="l00305"></a>00305 <span class="comment">     * @param[in] x</span>
-<a name="l00306"></a>00306 <span class="comment">     * @return the real cube root of \e x.</span>
-<a name="l00307"></a>00307 <span class="comment">     **********************************************************************/</span>
-<a name="l00308"></a><a class="code" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">00308</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">cbrt</a>(T x) <span class="keywordflow">throw</span>() {
-<a name="l00309"></a>00309       T y = std::pow(std::abs(x), 1/T(3)); <span class="comment">// Return the real cube root</span>
-<a name="l00310"></a>00310       <span class="keywordflow">return</span> x < 0 ? -y : y;
-<a name="l00311"></a>00311     }
-<a name="l00312"></a>00312 <span class="preprocessor">#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH</span>
-<a name="l00313"></a>00313 <span class="preprocessor"></span>    <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T cbrt(T x) <span class="keywordflow">throw</span>()
-<a name="l00314"></a>00314     { <span class="keywordflow">return</span> std::cbrt(x); }
-<a name="l00315"></a>00315 <span class="preprocessor">#else</span>
-<a name="l00316"></a>00316 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> cbrt(<span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>() { return ::cbrt(x); }
-<a name="l00317"></a>00317     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">float</span> cbrt(<span class="keywordtype">float</span> x) <span class="keywordflow">throw</span>() { return ::cbrtf(x); }
-<a name="l00318"></a>00318 <span class="preprocessor">#if defined(HAVE_LONG_DOUBLE)</span>
-<a name="l00319"></a>00319 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cbrt(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x) <span class="keywordflow">throw</span>() { return ::cbrtl(x); }
-<a name="l00320"></a>00320 <span class="preprocessor">#endif</span>
-<a name="l00321"></a>00321 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00322"></a>00322 <span class="preprocessor"></span><span class="comment"></span>
-<a name="l00323"></a>00323 <span class="comment">    /**</span>
-<a name="l00324"></a>00324 <span class="comment">     * Test for finiteness.</span>
-<a name="l00325"></a>00325 <span class="comment">     *</span>
-<a name="l00326"></a>00326 <span class="comment">     * @tparam T the type of the argument.</span>
-<a name="l00327"></a>00327 <span class="comment">     * @param[in] x</span>
-<a name="l00328"></a>00328 <span class="comment">     * @return true if number is finite, false if NaN or infinite.</span>
-<a name="l00329"></a>00329 <span class="comment">     **********************************************************************/</span>
-<a name="l00330"></a><a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">00330</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">isfinite</a>(T x) <span class="keywordflow">throw</span>() {
-<a name="l00331"></a>00331 <span class="preprocessor">#if defined(DOXYGEN)</span>
-<a name="l00332"></a>00332 <span class="preprocessor"></span>      <span class="keywordflow">return</span> std::abs(x) <= (std::numeric_limits<T>::max)();
-<a name="l00333"></a>00333 <span class="preprocessor">#elif (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)</span>
-<a name="l00334"></a>00334 <span class="preprocessor"></span>      <span class="keywordflow">return</span> _finite(x) != 0;
-<a name="l00335"></a>00335 <span class="preprocessor">#else</span>
-<a name="l00336"></a>00336 <span class="preprocessor"></span>      <span class="keywordflow">return</span> std::isfinite(x);
-<a name="l00337"></a>00337 <span class="preprocessor">#endif</span>
-<a name="l00338"></a>00338 <span class="preprocessor"></span>    }
-<a name="l00339"></a>00339 <span class="comment"></span>
-<a name="l00340"></a>00340 <span class="comment">    /**</span>
-<a name="l00341"></a>00341 <span class="comment">     * The NaN (not a number)</span>
-<a name="l00342"></a>00342 <span class="comment">     *</span>
-<a name="l00343"></a>00343 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00344"></a>00344 <span class="comment">     * @return NaN if available, otherwise return the max real.</span>
-<a name="l00345"></a>00345 <span class="comment">     **********************************************************************/</span>
-<a name="l00346"></a><a class="code" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">00346</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">NaN</a>() throw() {
-<a name="l00347"></a>00347       <span class="keywordflow">return</span> std::numeric_limits<T>::has_quiet_NaN ?
-<a name="l00348"></a>00348         std::numeric_limits<T>::quiet_NaN() :
-<a name="l00349"></a>00349         (std::numeric_limits<T>::max)();
-<a name="l00350"></a>00350     }<span class="comment"></span>
-<a name="l00351"></a>00351 <span class="comment">    /**</span>
-<a name="l00352"></a>00352 <span class="comment">     * A synonym for NaN<real>().</span>
-<a name="l00353"></a>00353 <span class="comment">     **********************************************************************/</span>
-<a name="l00354"></a><a class="code" href="classGeographicLib_1_1Math.html#a28304be9b5cb17eeb7413b059604a154">00354</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> <a class="code" href="classGeographicLib_1_1Math.html#a28304be9b5cb17eeb7413b059604a154">NaN</a>() throw() { <span class="keywordflow">return</span> NaN<real>(); }
-<a name="l00355"></a>00355 <span class="comment"></span>
-<a name="l00356"></a>00356 <span class="comment">    /**</span>
-<a name="l00357"></a>00357 <span class="comment">     * Test for NaN.</span>
-<a name="l00358"></a>00358 <span class="comment">     *</span>
-<a name="l00359"></a>00359 <span class="comment">     * @tparam T the type of the argument.</span>
-<a name="l00360"></a>00360 <span class="comment">     * @param[in] x</span>
-<a name="l00361"></a>00361 <span class="comment">     * @return true if argument is a NaN.</span>
-<a name="l00362"></a>00362 <span class="comment">     **********************************************************************/</span>
-<a name="l00363"></a><a class="code" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">00363</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">isnan</a>(T x) <span class="keywordflow">throw</span>() {
-<a name="l00364"></a>00364 <span class="preprocessor">#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)</span>
-<a name="l00365"></a>00365 <span class="preprocessor"></span>      <span class="keywordflow">return</span> x != x;
-<a name="l00366"></a>00366 <span class="preprocessor">#else</span>
-<a name="l00367"></a>00367 <span class="preprocessor"></span>      <span class="keywordflow">return</span> std::isnan(x);
-<a name="l00368"></a>00368 <span class="preprocessor">#endif</span>
-<a name="l00369"></a>00369 <span class="preprocessor"></span>    }
-<a name="l00370"></a>00370 <span class="comment"></span>
-<a name="l00371"></a>00371 <span class="comment">    /**</span>
-<a name="l00372"></a>00372 <span class="comment">     * Infinity</span>
-<a name="l00373"></a>00373 <span class="comment">     *</span>
-<a name="l00374"></a>00374 <span class="comment">     * @tparam T the type of the returned value.</span>
-<a name="l00375"></a>00375 <span class="comment">     * @return infinity if available, otherwise return the max real.</span>
-<a name="l00376"></a>00376 <span class="comment">     **********************************************************************/</span>
-<a name="l00377"></a><a class="code" href="classGeographicLib_1_1Math.html#a82ccc01be301f14061c681ee93a5120b">00377</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Math.html#a82ccc01be301f14061c681ee93a5120b">infinity</a>() throw() {
-<a name="l00378"></a>00378       <span class="keywordflow">return</span> std::numeric_limits<T>::has_infinity ?
-<a name="l00379"></a>00379         std::numeric_limits<T>::infinity() :
-<a name="l00380"></a>00380         (std::numeric_limits<T>::max)();
-<a name="l00381"></a>00381     }<span class="comment"></span>
-<a name="l00382"></a>00382 <span class="comment">    /**</span>
-<a name="l00383"></a>00383 <span class="comment">     * A synonym for infinity<real>().</span>
-<a name="l00384"></a>00384 <span class="comment">     **********************************************************************/</span>
-<a name="l00385"></a><a class="code" href="classGeographicLib_1_1Math.html#a1606218c36b8d7c60a5ad5847a94ab9c">00385</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> <a class="code" href="classGeographicLib_1_1Math.html#a1606218c36b8d7c60a5ad5847a94ab9c">infinity</a>() throw() { <span class="keywordflow">return</span> infinity<real>(); }
-<a name="l00386"></a>00386 <span class="comment"></span>
-<a name="l00387"></a>00387 <span class="comment">    /**</span>
-<a name="l00388"></a>00388 <span class="comment">     * Swap the bytes of a quantity</span>
-<a name="l00389"></a>00389 <span class="comment">     *</span>
-<a name="l00390"></a>00390 <span class="comment">     * @tparam T the type of the argument and the returned value.</span>
-<a name="l00391"></a>00391 <span class="comment">     * @param[in] x</span>
-<a name="l00392"></a>00392 <span class="comment">     * @return x with its bytes swapped.</span>
-<a name="l00393"></a>00393 <span class="comment">     **********************************************************************/</span>
-<a name="l00394"></a><a class="code" href="classGeographicLib_1_1Math.html#aec7f95c2bb99422f1f047cb628a232f8">00394</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="classGeographicLib_1_1Math.html#aec7f95c2bb99422f1f047cb628a232f8">swab</a>(T x) {
-<a name="l00395"></a>00395       <span class="keyword">union </span>{
-<a name="l00396"></a>00396         T r;
-<a name="l00397"></a>00397         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c[<span class="keyword">sizeof</span>(T)];
-<a name="l00398"></a>00398       } b;
-<a name="l00399"></a>00399       b.r = x;
-<a name="l00400"></a>00400       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = <span class="keyword">sizeof</span>(T)/2; i--; )
-<a name="l00401"></a>00401         std::swap(b.c[i], b.c[<span class="keyword">sizeof</span>(T) - 1 - i]);
-<a name="l00402"></a>00402       <span class="keywordflow">return</span> b.r;
-<a name="l00403"></a>00403     }
-<a name="l00404"></a>00404   };
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408 <span class="preprocessor">#endif  // GEOGRAPHICLIB_MATH_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/NormalGravity_8cpp.html b/doc/html/NormalGravity_8cpp.html
deleted file mode 100644
index 9022f38..0000000
--- a/doc/html/NormalGravity_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: NormalGravity.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">NormalGravity.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="NormalGravity_8hpp_source.html">GeographicLib/NormalGravity.hpp</a>></code><br/>
-</div>
-<p><a href="NormalGravity_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="NormalGravity_8cpp.html#ae09694799ad8f72c9b216b9729848655">GEOGRAPHICLIB_NORMALGRAVITY_CPP</a>   "$Id: ccd3d6bd4bddefb0b40cbce0006d863f08d64db4 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="NormalGravity_8cpp_source.html">NormalGravity.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ae09694799ad8f72c9b216b9729848655"></a><!-- doxytag: member="NormalGravity.cpp::GEOGRAPHICLIB_NORMALGRAVITY_CPP" ref="ae09694799ad8f72c9b216b9729848655" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_NORMALGRAVITY_CPP   "$Id: ccd3d6bd4bddefb0b40cbce0006d863f08d64db4 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="NormalGravity_8cpp_source.html#l00012">12</a> of file <a class="el" href="NormalGravity_8cpp_source.html">NormalGravity.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/NormalGravity_8cpp_source.html b/doc/html/NormalGravity_8cpp_source.html
deleted file mode 100644
index acdb2a8..0000000
--- a/doc/html/NormalGravity_8cpp_source.html
+++ /dev/null
@@ -1,316 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: NormalGravity.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">NormalGravity.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="NormalGravity_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file NormalGravity.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::NormalGravity class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="NormalGravity_8hpp.html" title="Header for GeographicLib::NormalGravity class.">GeographicLib/NormalGravity.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="NormalGravity_8cpp.html#ae09694799ad8f72c9b216b9729848655">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_NORMALGRAVITY_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: ccd3d6bd4bddefb0b40cbce0006d863f08d64db4 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="NormalGravity_8cpp.html#ae09694799ad8f72c9b216b9729848655">GEOGRAPHICLIB_NORMALGRAVITY_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="NormalGravity_8hpp.html#a3f83059dc418514a79fa4e6c94869b58">GEOGRAPHICLIB_NORMALGRAVITY_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#af625bbc7df2d36ba5c43c8f20f61c134">00022</a>   NormalGravity::NormalGravity(real a, real GM, real omega, real f, real J2)
-<a name="l00023"></a>00023     : _a(a)
-<a name="l00024"></a>00024     , _GM(GM)
-<a name="l00025"></a>00025     , _omega(omega)
-<a name="l00026"></a>00026     , _f(f)
-<a name="l00027"></a>00027     , _J2(J2)
-<a name="l00028"></a>00028     , _omega2(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::sq(_omega))
-<a name="l00029"></a>00029     , _aomega2(<a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::sq(_omega * _a))
-<a name="l00030"></a>00030     {
-<a name="l00031"></a>00031       <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00032"></a>00032         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00033"></a>00033       <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_GM) && _GM > 0))
-<a name="l00034"></a>00034         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Gravitational constants is not positive"</span>);
-<a name="l00035"></a>00035       <span class="keywordtype">bool</span> flatp = _f > 0 && <a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f);
-<a name="l00036"></a>00036       <span class="keywordflow">if</span> (_J2 > 0 && Math::isfinite(_J2) && flatp)
-<a name="l00037"></a>00037         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Cannot specify both f and J2"</span>);
-<a name="l00038"></a>00038       <span class="keywordflow">if</span> (!(_J2 > 0 && Math::isfinite(_J2)) && !flatp)
-<a name="l00039"></a>00039         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Must specify one of f and J2"</span>);
-<a name="l00040"></a>00040       <span class="keywordflow">if</span> (!(Math::isfinite(_omega) && _omega != 0))
-<a name="l00041"></a>00041         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Angular velocity is not non-zero"</span>);
-<a name="l00042"></a>00042       real K = 2 * _aomega2 * _a / (15 * _GM);
-<a name="l00043"></a>00043       <span class="keywordflow">if</span> (flatp) {
-<a name="l00044"></a>00044         _e2 = _f * (2 - _f);
-<a name="l00045"></a>00045         _ep2 = _e2 / (1 - _e2);
-<a name="l00046"></a>00046         _q0 = qf(_ep2);
-<a name="l00047"></a>00047         _J2 = _e2 * ( 1 - K * sqrt(_e2) / _q0) / 3; <span class="comment">// H+M, Eq 2-90</span>
-<a name="l00048"></a>00048       } <span class="keywordflow">else</span> {
-<a name="l00049"></a>00049         _e2 = 3 * _J2;          <span class="comment">// See Moritz (1980), p 398.</span>
-<a name="l00050"></a>00050         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j < maxit_; ++j) {
-<a name="l00051"></a>00051           real e2a = _e2;
-<a name="l00052"></a>00052           real q0 = qf(_e2 / (1 - _e2));
-<a name="l00053"></a>00053           _e2 = 3 * _J2 + K * _e2 * sqrt(_e2) / q0;
-<a name="l00054"></a>00054           <span class="keywordflow">if</span> (_e2 == e2a)
-<a name="l00055"></a>00055             <span class="keywordflow">break</span>;
-<a name="l00056"></a>00056         }
-<a name="l00057"></a>00057         _f = _e2 / (1 + sqrt(1 - _e2));
-<a name="l00058"></a>00058         _ep2 = _e2 / (1 - _e2);
-<a name="l00059"></a>00059         _q0 = qf(_ep2);
-<a name="l00060"></a>00060       }
-<a name="l00061"></a>00061       _earth = <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>(_a, _f);
-<a name="l00062"></a>00062       _b = _a * (1 - _f);
-<a name="l00063"></a>00063       _E = a * sqrt(_e2);                               <span class="comment">// H+M, Eq 2-54</span>
-<a name="l00064"></a>00064       _U0 = _GM / _E * atan(sqrt(_ep2)) + _aomega2 / 3; <span class="comment">// H+M, Eq 2-61</span>
-<a name="l00065"></a>00065       <span class="comment">// The approximate ratio of the centrifugal acceleration (at the equator)</span>
-<a name="l00066"></a>00066       <span class="comment">// to gravity.</span>
-<a name="l00067"></a>00067       _m = _aomega2 * _b / _GM;                         <span class="comment">// H+M, Eq 2-70</span>
-<a name="l00068"></a>00068       real
-<a name="l00069"></a>00069         Q = _m * sqrt(_ep2) * qpf(_ep2) / (3 * _q0),
-<a name="l00070"></a>00070         G = (1 - _m - Q / 2);
-<a name="l00071"></a>00071       _gammae = _GM / (_a * _b) * G;       <span class="comment">// H+M, Eq 2-73</span>
-<a name="l00072"></a>00072       _gammap = _GM / (_a * _a) * (1 + Q); <span class="comment">// H+M, Eq 2-74</span>
-<a name="l00073"></a>00073       <span class="comment">// k = b * gammap / (a * gammae) - 1</span>
-<a name="l00074"></a>00074       _k = (_m + 3 * Q / 2 - _e2 * (1 + Q)) / G;
-<a name="l00075"></a>00075       <span class="comment">// f* = (gammap - gammae) / gammae</span>
-<a name="l00076"></a>00076       _fstar = (_m + 3 * Q / 2 - _f * (1 + Q)) / G;
-<a name="l00077"></a>00077     }
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a>
-<a name="l00080"></a>00080   <a class="code" href="classGeographicLib_1_1NormalGravity.html#a70c328a95e05964180106d89c2583b78">NormalGravity::WGS84</a>(Constants::WGS84_a<real>(), Constants::WGS84_GM<real>(),
-<a name="l00081"></a>00081                        Constants::WGS84_omega<real>(),
-<a name="l00082"></a>00082                        Constants::WGS84_f<real>(), 0);
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a>
-<a name="l00085"></a>00085   <a class="code" href="classGeographicLib_1_1NormalGravity.html#a78cf6878967ad52adadbe06b5f7c4146">NormalGravity::GRS80</a>(Constants::GRS80_a<real>(), Constants::GRS80_GM<real>(),
-<a name="l00086"></a>00086                        Constants::GRS80_omega<real>(),
-<a name="l00087"></a>00087                        0, Constants::GRS80_J2<real>());
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> NormalGravity::qf(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ep2) <span class="keywordflow">throw</span>() {
-<a name="l00090"></a>00090     <span class="comment">// Compute</span>
-<a name="l00091"></a>00091     <span class="comment">//</span>
-<a name="l00092"></a>00092     <span class="comment">//   ((1 + 3/e'^2) * atan(e') - 3/e')/2</span>
-<a name="l00093"></a>00093     <span class="comment">//</span>
-<a name="l00094"></a>00094     <span class="comment">// See H+M, Eq 2-57, with E/u = e'.  This suffers from two levels of</span>
-<a name="l00095"></a>00095     <span class="comment">// cancelation.  The e'^-1 and e'^1 terms drop out, so that the leading</span>
-<a name="l00096"></a>00096     <span class="comment">// term is O(e'^3).</span>
-<a name="l00097"></a>00097     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ep = sqrt(ep2);
-<a name="l00098"></a>00098     <span class="keywordflow">if</span> (abs(ep2) > <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5))  <span class="comment">// Use the closed expression</span>
-<a name="l00099"></a>00099       <span class="keywordflow">return</span> ((1 + 3 / ep2) * atan(ep) - 3 / ep)/2;
-<a name="l00100"></a>00100     <span class="keywordflow">else</span> {
-<a name="l00101"></a>00101       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ep2n = 1, q = 0;     <span class="comment">// The series expansion H+M, Eq 2-86</span>
-<a name="l00102"></a>00102       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 1; ; ++n) {
-<a name="l00103"></a>00103         ep2n *= -ep2;
-<a name="l00104"></a>00104         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00105"></a>00105           t = (ep2n * n) / ((2 * n + 1) * (2 * n + 3)),
-<a name="l00106"></a>00106           qn = q + t;
-<a name="l00107"></a>00107         <span class="keywordflow">if</span> (qn == q)
-<a name="l00108"></a>00108           <span class="keywordflow">break</span>;
-<a name="l00109"></a>00109         q = qn;
-<a name="l00110"></a>00110       }
-<a name="l00111"></a>00111       q *= -2 * ep;
-<a name="l00112"></a>00112       <span class="keywordflow">return</span> q;
-<a name="l00113"></a>00113     }
-<a name="l00114"></a>00114   }
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> NormalGravity::qpf(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ep2) <span class="keywordflow">throw</span>() {
-<a name="l00117"></a>00117     <span class="comment">// Compute</span>
-<a name="l00118"></a>00118     <span class="comment">//</span>
-<a name="l00119"></a>00119     <span class="comment">//   3*(1 + 1/e'^2) * (1 - atan(e')/e') - 1</span>
-<a name="l00120"></a>00120     <span class="comment">//</span>
-<a name="l00121"></a>00121     <span class="comment">// See H+M, Eq 2-67, with E/u = e'.  This suffers from two levels of</span>
-<a name="l00122"></a>00122     <span class="comment">// cancelation.  The e'^-2 and e'^0 terms drop out, so that the leading</span>
-<a name="l00123"></a>00123     <span class="comment">// term is O(e'^2).</span>
-<a name="l00124"></a>00124     <span class="keywordflow">if</span> (abs(ep2) > <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.5)) { <span class="comment">// Use the closed expression</span>
-<a name="l00125"></a>00125       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ep = sqrt(ep2);
-<a name="l00126"></a>00126       <span class="keywordflow">return</span> 3 * (1 + 1 / ep2) * (1 - atan(ep) / ep) - 1;
-<a name="l00127"></a>00127     } <span class="keywordflow">else</span> {
-<a name="l00128"></a>00128       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> ep2n = 1, qp = 0;    <span class="comment">// The series expansion H+M, Eq 2-101c</span>
-<a name="l00129"></a>00129       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = 1; ; ++n) {
-<a name="l00130"></a>00130         ep2n *= -ep2;
-<a name="l00131"></a>00131         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00132"></a>00132           t = ep2n / ((2 * n + 1) * (2 * n + 3)),
-<a name="l00133"></a>00133           qpn = qp + t;
-<a name="l00134"></a>00134         <span class="keywordflow">if</span> (qpn == qp)
-<a name="l00135"></a>00135           <span class="keywordflow">break</span>;
-<a name="l00136"></a>00136         qp = qpn;
-<a name="l00137"></a>00137       }
-<a name="l00138"></a>00138       qp *= -6;
-<a name="l00139"></a>00139       <span class="keywordflow">return</span> qp;
-<a name="l00140"></a>00140     }
-<a name="l00141"></a>00141   }
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> NormalGravity::Jn(<span class="keywordtype">int</span> n) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00144"></a>00144     <span class="comment">// Note Jn(0) = -1; Jn(2) = _J2; Jn(odd) = 0</span>
-<a name="l00145"></a>00145     <span class="keywordflow">if</span> (n & 1 || n < 0)
-<a name="l00146"></a>00146       <span class="keywordflow">return</span> 0;
-<a name="l00147"></a>00147     n /= 2;
-<a name="l00148"></a>00148     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> e2n = 1;            <span class="comment">// Perhaps this should just be e2n = pow(-_e2, n);</span>
-<a name="l00149"></a>00149     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = n; j--;)
-<a name="l00150"></a>00150       e2n *= -_e2;
-<a name="l00151"></a>00151     <span class="keywordflow">return</span>                      <span class="comment">// H+M, Eq 2-92</span>
-<a name="l00152"></a>00152       -3 * e2n * (1 - n + 5 * n * _J2 / _e2) / ((2 * n + 1) * (2 * n + 3));
-<a name="l00153"></a>00153   }
-<a name="l00154"></a>00154 
-<a name="l00155"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a019541fea3712f8ca73aec8a0b29c71c">00155</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1NormalGravity.html#a019541fea3712f8ca73aec8a0b29c71c">NormalGravity::SurfaceGravity</a>(real lat) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00156"></a>00156     real
-<a name="l00157"></a>00157       phi = lat * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00158"></a>00158       sphi2 = abs(lat) == 90 ? 1 : <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sin(phi));
-<a name="l00159"></a>00159     <span class="comment">// H+M, Eq 2-78</span>
-<a name="l00160"></a>00160     <span class="keywordflow">return</span> _gammae * (1 + _k * sphi2) / sqrt(1 - _e2 * sphi2);
-<a name="l00161"></a>00161   }
-<a name="l00162"></a>00162 
-<a name="l00163"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#aa656e36306bc396ac6d32dcdfc2069a2">00163</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1NormalGravity.html#aa656e36306bc396ac6d32dcdfc2069a2">NormalGravity::V0</a>(real X, real Y, real Z,
-<a name="l00164"></a>00164                                real& GammaX, real& GammaY, real& GammaZ)
-<a name="l00165"></a>00165     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00166"></a>00166     <span class="comment">// See H+M, Sec 6-2</span>
-<a name="l00167"></a>00167     real
-<a name="l00168"></a>00168       p = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(X, Y),
-<a name="l00169"></a>00169       clam = p ? X/p : 1,
-<a name="l00170"></a>00170       slam = p ? Y/p : 0,
-<a name="l00171"></a>00171       r = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(p, Z),
-<a name="l00172"></a>00172       Q = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(r) - <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_E),
-<a name="l00173"></a>00173       t2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(2 * _E * Z),
-<a name="l00174"></a>00174       disc = sqrt(<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(Q) + t2),
-<a name="l00175"></a>00175       <span class="comment">// This is H+M, Eq 6-8a, but generalized to deal with Q negative</span>
-<a name="l00176"></a>00176       <span class="comment">// accurately.</span>
-<a name="l00177"></a>00177       u = sqrt((Q >= 0 ? (Q + disc) : t2 / (disc - Q)) / 2),
-<a name="l00178"></a>00178       uE = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(u, _E),
-<a name="l00179"></a>00179       <span class="comment">// H+M, Eq 6-8b</span>
-<a name="l00180"></a>00180       sbet = Z * uE,
-<a name="l00181"></a>00181       cbet = p * u,
-<a name="l00182"></a>00182       s = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(cbet, sbet);
-<a name="l00183"></a>00183     cbet = s ? cbet/s : 0;
-<a name="l00184"></a>00184     sbet = s ? sbet/s : 1;
-<a name="l00185"></a>00185     real
-<a name="l00186"></a>00186       invw = uE / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(u, _E * sbet), <span class="comment">// H+M, Eq 2-63</span>
-<a name="l00187"></a>00187       ep = _E/u,
-<a name="l00188"></a>00188       ep2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(ep),
-<a name="l00189"></a>00189       q = qf(ep2) / _q0,
-<a name="l00190"></a>00190       qp = qpf(ep2) / _q0,
-<a name="l00191"></a>00191       <span class="comment">// H+M, Eqs 2-62 + 6-9, but omitting last (rotational) term .</span>
-<a name="l00192"></a>00192       Vres = (_GM / _E * atan(_E / u)
-<a name="l00193"></a>00193               + _aomega2 * q * (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sbet) - 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(3)) / 2),
-<a name="l00194"></a>00194       <span class="comment">// H+M, Eq 6-10</span>
-<a name="l00195"></a>00195       gamu = - invw * (_GM
-<a name="l00196"></a>00196                        + (_aomega2 * _E * qp
-<a name="l00197"></a>00197                           * (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sbet) - 1/<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(3)) / 2)) / <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(uE),
-<a name="l00198"></a>00198       gamb = _aomega2 * q * sbet * cbet * invw / uE,
-<a name="l00199"></a>00199       t = u * invw / uE;
-<a name="l00200"></a>00200     <span class="comment">// H+M, Eq 6-12</span>
-<a name="l00201"></a>00201     GammaX = t * cbet * gamu - invw * sbet * gamb;
-<a name="l00202"></a>00202     GammaY = GammaX * slam;
-<a name="l00203"></a>00203     GammaX *= clam;
-<a name="l00204"></a>00204     GammaZ = invw * sbet * gamu + t * cbet * gamb;
-<a name="l00205"></a>00205     <span class="keywordflow">return</span> Vres;
-<a name="l00206"></a>00206   }
-<a name="l00207"></a>00207 
-<a name="l00208"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#af0f50fd88d8b647a1b7bb209a4cfae0f">00208</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1NormalGravity.html#af0f50fd88d8b647a1b7bb209a4cfae0f">NormalGravity::Phi</a>(real X, real Y, real& fX, real& fY)
-<a name="l00209"></a>00209     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00210"></a>00210     fX = _omega2 * X;
-<a name="l00211"></a>00211     fY = _omega2 * Y;
-<a name="l00212"></a>00212     <span class="comment">// N.B. fZ = 0;</span>
-<a name="l00213"></a>00213     <span class="keywordflow">return</span> _omega2 * (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(X) + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(Y)) / 2;
-<a name="l00214"></a>00214   }
-<a name="l00215"></a>00215 
-<a name="l00216"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">00216</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">NormalGravity::U</a>(real X, real Y, real Z,
-<a name="l00217"></a>00217                               real& gammaX, real& gammaY, real& gammaZ)
-<a name="l00218"></a>00218     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00219"></a>00219     real fX, fY;
-<a name="l00220"></a>00220     real Ures = V0(X, Y, Z, gammaX, gammaY, gammaZ) + Phi(X, Y, fX, fY);
-<a name="l00221"></a>00221     gammaX += fX;
-<a name="l00222"></a>00222     gammaY += fY;
-<a name="l00223"></a>00223     <span class="keywordflow">return</span> Ures;
-<a name="l00224"></a>00224   }
-<a name="l00225"></a>00225 
-<a name="l00226"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#acfca8d6e44778501b54cd0b38dbbddde">00226</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1NormalGravity.html#acfca8d6e44778501b54cd0b38dbbddde">NormalGravity::Gravity</a>(real lat, real h,
-<a name="l00227"></a>00227                                     real& gammay, real& gammaz)
-<a name="l00228"></a>00228     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00229"></a>00229     real X, Y, Z;
-<a name="l00230"></a>00230     real M[<a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>::dim2_];
-<a name="l00231"></a>00231     _earth.IntForward(lat, 0, h, X, Y, Z, M);
-<a name="l00232"></a>00232     real gammaX, gammaY, gammaZ,
-<a name="l00233"></a>00233       Ures = U(X, Y, Z, gammaX, gammaY, gammaZ);
-<a name="l00234"></a>00234     <span class="comment">// gammax = M[0] * gammaX + M[3] * gammaY + M[6] * gammaZ;</span>
-<a name="l00235"></a>00235     gammay = M[1] * gammaX + M[4] * gammaY + M[7] * gammaZ;
-<a name="l00236"></a>00236     gammaz = M[2] * gammaX + M[5] * gammaY + M[8] * gammaZ;
-<a name="l00237"></a>00237     <span class="keywordflow">return</span> Ures;
-<a name="l00238"></a>00238   }
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/NormalGravity_8hpp.html b/doc/html/NormalGravity_8hpp.html
deleted file mode 100644
index ed47932..0000000
--- a/doc/html/NormalGravity_8hpp.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: NormalGravity.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">NormalGravity.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Geocentric_8hpp_source.html">GeographicLib/Geocentric.hpp</a>></code><br/>
-</div>
-<p><a href="NormalGravity_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The normal gravity of the earth.  <a href="classGeographicLib_1_1NormalGravity.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="NormalGravity_8hpp.html#a3f83059dc418514a79fa4e6c94869b58">GEOGRAPHICLIB_NORMALGRAVITY_HPP</a>   "$Id: e4b65c9c5787d8ee14f476cbb518fd5007006344 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a3f83059dc418514a79fa4e6c94869b58"></a><!-- doxytag: member="NormalGravity.hpp::GEOGRAPHICLIB_NORMALGRAVITY_HPP" ref="a3f83059dc418514a79fa4e6c94869b58" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_NORMALGRAVITY_HPP   "$Id: e4b65c9c5787d8ee14f476cbb518fd5007006344 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00011">11</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/NormalGravity_8hpp_source.html b/doc/html/NormalGravity_8hpp_source.html
deleted file mode 100644
index b30d559..0000000
--- a/doc/html/NormalGravity_8hpp_source.html
+++ /dev/null
@@ -1,387 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: NormalGravity.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">NormalGravity.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="NormalGravity_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file NormalGravity.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::NormalGravity class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_NORMALGRAVITY_HPP)</span>
-<a name="l00011"></a><a class="code" href="NormalGravity_8hpp.html#a3f83059dc418514a79fa4e6c94869b58">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_NORMALGRAVITY_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: e4b65c9c5787d8ee14f476cbb518fd5007006344 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00018"></a>00018 <span class="comment"></span>
-<a name="l00019"></a>00019 <span class="comment">  /**</span>
-<a name="l00020"></a>00020 <span class="comment">   * \brief The normal gravity of the earth</span>
-<a name="l00021"></a>00021 <span class="comment">   *</span>
-<a name="l00022"></a>00022 <span class="comment">   * "Normal" gravity refers to an idealization of the earth which is modeled</span>
-<a name="l00023"></a>00023 <span class="comment">   * as an rotating ellipsoid.  The eccentricity of the ellipsoid, the rotation</span>
-<a name="l00024"></a>00024 <span class="comment">   * speed, and the distribution of mass within the ellipsoid are such that the</span>
-<a name="l00025"></a>00025 <span class="comment">   * surface of the ellipsoid is a surface of constant potential (gravitational</span>
-<a name="l00026"></a>00026 <span class="comment">   * plus centrifugal).  The acceleration due to gravity is therefore</span>
-<a name="l00027"></a>00027 <span class="comment">   * perpendicular to the surface of the ellipsoid.</span>
-<a name="l00028"></a>00028 <span class="comment">   *</span>
-<a name="l00029"></a>00029 <span class="comment">   * There is a closed solution to this problem which is implemented here.</span>
-<a name="l00030"></a>00030 <span class="comment">   * Series "approximations" are only used to evaluate certain combinations of</span>
-<a name="l00031"></a>00031 <span class="comment">   * elementary functions where use of the closed expression results in a loss</span>
-<a name="l00032"></a>00032 <span class="comment">   * of accuracy for small arguments due to cancellation of the two leading</span>
-<a name="l00033"></a>00033 <span class="comment">   * terms.  However these series include sufficient terms to give full machine</span>
-<a name="l00034"></a>00034 <span class="comment">   * precision.</span>
-<a name="l00035"></a>00035 <span class="comment">   *</span>
-<a name="l00036"></a>00036 <span class="comment">   * Definitions:</span>
-<a name="l00037"></a>00037 <span class="comment">   * - <i>V</i><sub>0</sub>, the gravitational contribution to the normal</span>
-<a name="l00038"></a>00038 <span class="comment">   *   potential;</span>
-<a name="l00039"></a>00039 <span class="comment">   * - \e Phi, the rotational contribution to the normal potential;</span>
-<a name="l00040"></a>00040 <span class="comment">   * - \e U = <i>V</i><sub>0</sub> + \e Phi, the total</span>
-<a name="l00041"></a>00041 <span class="comment">   *   potential;</span>
-<a name="l00042"></a>00042 <span class="comment">   * - <b>Gamma</b> = <b>grad</b> <i>V</i><sub>0</sub>, the acceleration due to</span>
-<a name="l00043"></a>00043 <span class="comment">   *   mass of the earth;</span>
-<a name="l00044"></a>00044 <span class="comment">   * - <b>f</b> = <b>grad</b> \e Phi, the centrifugal acceleration;</span>
-<a name="l00045"></a>00045 <span class="comment">   * - <b>gamma</b> = <b>grad</b> \e U = <b>Gamma</b> + <b>f</b>, the normal</span>
-<a name="l00046"></a>00046 <span class="comment">   *   acceleration;</span>
-<a name="l00047"></a>00047 <span class="comment">   * - \e X, \e Y, \e Z, geocentric coordinates;</span>
-<a name="l00048"></a>00048 <span class="comment">   * - \e x, \e y, \e z, local cartesian coordinates used to denote the east,</span>
-<a name="l00049"></a>00049 <span class="comment">   *   north and up directions.</span>
-<a name="l00050"></a>00050 <span class="comment">   *</span>
-<a name="l00051"></a>00051 <span class="comment">   * References:</span>
-<a name="l00052"></a>00052 <span class="comment">   * - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San</span>
-<a name="l00053"></a>00053 <span class="comment">   *   Francisco, 1967), Secs. 1-19, 2-7, 2-8 (2-9, 2-10), 6-2 (6-3).</span>
-<a name="l00054"></a>00054 <span class="comment">   * - H. Moritz, Geodetic Reference System 1980, J. Geod. 54(3), 395-405</span>
-<a name="l00055"></a>00055 <span class="comment">   *   (1980) http://dx.doi.org/10.1007/BF02521480</span>
-<a name="l00056"></a>00056 <span class="comment">   *</span>
-<a name="l00057"></a>00057 <span class="comment">   * Example of use:</span>
-<a name="l00058"></a>00058 <span class="comment">   * \include example-NormalGravity.cpp</span>
-<a name="l00059"></a>00059 <span class="comment">   **********************************************************************/</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> NormalGravity {
-<a name="l00062"></a>00062   <span class="keyword">private</span>:
-<a name="l00063"></a>00063     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> maxit_ = 10;
-<a name="l00064"></a>00064     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00065"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#ada1db1d9f480d8044753ed869c995519">00065</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a>;
-<a name="l00066"></a>00066     real _a, _GM, _omega, _f, _J2, _omega2, _aomega2;
-<a name="l00067"></a>00067     real _e2, _ep2, _b, _E, _U0, _gammae, _gammap, _q0, _m, _k, _fstar;
-<a name="l00068"></a>00068     <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> _earth;
-<a name="l00069"></a>00069     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real qf(real ep2) <span class="keywordflow">throw</span>();
-<a name="l00070"></a>00070     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real qpf(real ep2) <span class="keywordflow">throw</span>();
-<a name="l00071"></a>00071     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Jn(<span class="keywordtype">int</span> n) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00072"></a>00072   <span class="keyword">public</span>:
-<a name="l00073"></a>00073 <span class="comment"></span>
-<a name="l00074"></a>00074 <span class="comment">    /** \name Setting up the normal gravity</span>
-<a name="l00075"></a>00075 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00076"></a>00076 <span class="comment">    ///@{</span>
-<a name="l00077"></a>00077 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00078"></a>00078 <span class="comment">     * Constructor for the normal gravity.</span>
-<a name="l00079"></a>00079 <span class="comment">     *</span>
-<a name="l00080"></a>00080 <span class="comment">     * @param[in] a equatorial radius (meters).</span>
-<a name="l00081"></a>00081 <span class="comment">     * @param[in] GM mass constant of the ellipsoid</span>
-<a name="l00082"></a>00082 <span class="comment">     *   (meters<sup>3</sup>/seconds<sup>2</sup>); this is the product of \e G</span>
-<a name="l00083"></a>00083 <span class="comment">     *   the gravitational constant and \e M the mass of the earth (usually</span>
-<a name="l00084"></a>00084 <span class="comment">     *   including the mass of the earth's atmosphere).</span>
-<a name="l00085"></a>00085 <span class="comment">     * @param[in] omega the angular velocity (rad s<sup>-1</sup>).</span>
-<a name="l00086"></a>00086 <span class="comment">     * @param[in] f the flattening of the ellipsoid.</span>
-<a name="l00087"></a>00087 <span class="comment">     * @param[in] J2 dynamical form factor.</span>
-<a name="l00088"></a>00088 <span class="comment">     *</span>
-<a name="l00089"></a>00089 <span class="comment">     * Exactly one of \e f and \e J2 should be positive and this will be used</span>
-<a name="l00090"></a>00090 <span class="comment">     * to define the ellipsoid.  The shape of the ellipsoid can be given in one</span>
-<a name="l00091"></a>00091 <span class="comment">     * of two ways:</span>
-<a name="l00092"></a>00092 <span class="comment">     * - geometrically, the ellipsoid is defined by the flattening \e f =</span>
-<a name="l00093"></a>00093 <span class="comment">     *   (\e a - \e b) / \e a, where \e a and \e b are the equatorial radius</span>
-<a name="l00094"></a>00094 <span class="comment">     *   and the polar semi-axis.</span>
-<a name="l00095"></a>00095 <span class="comment">     * - physically, the ellipsoid is defined by the dynamical form factor</span>
-<a name="l00096"></a>00096 <span class="comment">     *   <i>J</i><sub>2</sub> = (\e C - \e A) / <i>Ma</i><sup>2</sup>, where \e</span>
-<a name="l00097"></a>00097 <span class="comment">     *   A and \e C are the equatorial and polar moments of inertia and \e M is</span>
-<a name="l00098"></a>00098 <span class="comment">     *   the mass of the earth.</span>
-<a name="l00099"></a>00099 <span class="comment">     **********************************************************************/</span>
-<a name="l00100"></a>00100     NormalGravity(real a, real GM, real omega, real f, real J2);
-<a name="l00101"></a>00101 <span class="comment"></span>
-<a name="l00102"></a>00102 <span class="comment">    /**</span>
-<a name="l00103"></a>00103 <span class="comment">     * A default constructor for the normal gravity.  This sets up an</span>
-<a name="l00104"></a>00104 <span class="comment">     * uninitialized object and is used by GravityModel which constructs this</span>
-<a name="l00105"></a>00105 <span class="comment">     * object before it has read in the parameters for the reference ellipsoid.</span>
-<a name="l00106"></a>00106 <span class="comment">     **********************************************************************/</span>
-<a name="l00107"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a55f749c3bb3e9d19626105041bf1b6fb">00107</a>     <a class="code" href="classGeographicLib_1_1NormalGravity.html#a55f749c3bb3e9d19626105041bf1b6fb">NormalGravity</a>() : _a(-1) {}<span class="comment"></span>
-<a name="l00108"></a>00108 <span class="comment">    ///@}</span>
-<a name="l00109"></a>00109 <span class="comment"></span><span class="comment"></span>
-<a name="l00110"></a>00110 <span class="comment">    /** \name Compute the gravity</span>
-<a name="l00111"></a>00111 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00112"></a>00112 <span class="comment">    ///@{</span>
-<a name="l00113"></a>00113 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00114"></a>00114 <span class="comment">     * Evaluate the gravity on the surface of the ellipsoid.</span>
-<a name="l00115"></a>00115 <span class="comment">     *</span>
-<a name="l00116"></a>00116 <span class="comment">     * @param[in] lat the geographic latitude (degrees).</span>
-<a name="l00117"></a>00117 <span class="comment">     * @return \e gamma the acceleration due to gravity, positive downwards</span>
-<a name="l00118"></a>00118 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00119"></a>00119 <span class="comment">     *</span>
-<a name="l00120"></a>00120 <span class="comment">     * Due to the axial symmetry of the ellipsoid, the result is independent of</span>
-<a name="l00121"></a>00121 <span class="comment">     * the value of the longitude.  This acceleration is perpendicular to the</span>
-<a name="l00122"></a>00122 <span class="comment">     * surface of the ellipsoid.  It includes the effects of the earth's</span>
-<a name="l00123"></a>00123 <span class="comment">     * rotation.</span>
-<a name="l00124"></a>00124 <span class="comment">     **********************************************************************/</span>
-<a name="l00125"></a>00125     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> SurfaceGravity(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00126"></a>00126 <span class="comment"></span>
-<a name="l00127"></a>00127 <span class="comment">    /**</span>
-<a name="l00128"></a>00128 <span class="comment">     * Evaluate the gravity at an arbitrary point above (or below) the</span>
-<a name="l00129"></a>00129 <span class="comment">     * ellipsoid.</span>
-<a name="l00130"></a>00130 <span class="comment">     *</span>
-<a name="l00131"></a>00131 <span class="comment">     * @param[in] lat the geographic latitude (degrees).</span>
-<a name="l00132"></a>00132 <span class="comment">     * @param[in] h the height above the ellipsoid (meters).</span>
-<a name="l00133"></a>00133 <span class="comment">     * @param[out] gammay the northerly component of the acceleration</span>
-<a name="l00134"></a>00134 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00135"></a>00135 <span class="comment">     * @param[out] gammaz the upward component of the acceleration</span>
-<a name="l00136"></a>00136 <span class="comment">     *   (m s<sup>-2</sup>); this is usually negative.</span>
-<a name="l00137"></a>00137 <span class="comment">     * @return \e U the corresponding normal potential.</span>
-<a name="l00138"></a>00138 <span class="comment">     *</span>
-<a name="l00139"></a>00139 <span class="comment">     * Due to the axial symmetry of the ellipsoid, the result is independent of</span>
-<a name="l00140"></a>00140 <span class="comment">     * the value of the longitude and the easterly component of the</span>
-<a name="l00141"></a>00141 <span class="comment">     * acceleration vanishes, \e gammax = 0.  The function includes the effects</span>
-<a name="l00142"></a>00142 <span class="comment">     * of the earth's rotation.  When \e h = 0, this function gives \e gammay =</span>
-<a name="l00143"></a>00143 <span class="comment">     * 0 and the returned value matches that of NormalGravity::SurfaceGravity.</span>
-<a name="l00144"></a>00144 <span class="comment">     **********************************************************************/</span>
-<a name="l00145"></a>00145     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Gravity(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> h, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& [...]
-<a name="l00146"></a>00146       <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00147"></a>00147 <span class="comment"></span>
-<a name="l00148"></a>00148 <span class="comment">    /**</span>
-<a name="l00149"></a>00149 <span class="comment">     * Evaluate the components of the acceleration due to gravity and the</span>
-<a name="l00150"></a>00150 <span class="comment">     * centrifugal acceleration in geocentric coordinates.</span>
-<a name="l00151"></a>00151 <span class="comment">     *</span>
-<a name="l00152"></a>00152 <span class="comment">     * @param[in] X geocentric coordinate of point (meters).</span>
-<a name="l00153"></a>00153 <span class="comment">     * @param[in] Y geocentric coordinate of point (meters).</span>
-<a name="l00154"></a>00154 <span class="comment">     * @param[in] Z geocentric coordinate of point (meters).</span>
-<a name="l00155"></a>00155 <span class="comment">     * @param[out] gammaX the \e X component of the acceleration</span>
-<a name="l00156"></a>00156 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00157"></a>00157 <span class="comment">     * @param[out] gammaY the \e Y component of the acceleration</span>
-<a name="l00158"></a>00158 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00159"></a>00159 <span class="comment">     * @param[out] gammaZ the \e Z component of the acceleration</span>
-<a name="l00160"></a>00160 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00161"></a>00161 <span class="comment">     * @return \e U = <i>V</i><sub>0</sub> + \e Phi the sum of the</span>
-<a name="l00162"></a>00162 <span class="comment">     *   gravitational and centrifugal potentials</span>
-<a name="l00163"></a>00163 <span class="comment">     *   (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00164"></a>00164 <span class="comment">     *</span>
-<a name="l00165"></a>00165 <span class="comment">     * The acceleration given by <b>gamma</b> = <b>grad</b> \e U = <b>grad</b></span>
-<a name="l00166"></a>00166 <span class="comment">     * <i>V</i><sub>0</sub> + <b>grad</b> \e Phi = <b>Gamma</b> + <b>f</b>.</span>
-<a name="l00167"></a>00167 <span class="comment">     **********************************************************************/</span>
-<a name="l00168"></a>00168     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> U(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Z,
-<a name="l00169"></a>00169                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gammaX, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gammaY, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gammaZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00170"></a>00170 <span class="comment"></span>
-<a name="l00171"></a>00171 <span class="comment">    /**</span>
-<a name="l00172"></a>00172 <span class="comment">     * Evaluate the components of the acceleration due to gravity alone in</span>
-<a name="l00173"></a>00173 <span class="comment">     * geocentric coordinates.</span>
-<a name="l00174"></a>00174 <span class="comment">     *</span>
-<a name="l00175"></a>00175 <span class="comment">     * @param[in] X geocentric coordinate of point (meters).</span>
-<a name="l00176"></a>00176 <span class="comment">     * @param[in] Y geocentric coordinate of point (meters).</span>
-<a name="l00177"></a>00177 <span class="comment">     * @param[in] Z geocentric coordinate of point (meters).</span>
-<a name="l00178"></a>00178 <span class="comment">     * @param[out] GammaX the \e X component of the acceleration due to gravity</span>
-<a name="l00179"></a>00179 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00180"></a>00180 <span class="comment">     * @param[out] GammaY the \e Y component of the acceleration due to gravity</span>
-<a name="l00181"></a>00181 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00182"></a>00182 <span class="comment">     * @param[out] GammaZ the \e Z component of the acceleration due to gravity</span>
-<a name="l00183"></a>00183 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00184"></a>00184 <span class="comment">     * @return <i>V</i><sub>0</sub> the gravitational potential</span>
-<a name="l00185"></a>00185 <span class="comment">     *   (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00186"></a>00186 <span class="comment">     *</span>
-<a name="l00187"></a>00187 <span class="comment">     * This function excludes the centrifugal acceleration and is appropriate</span>
-<a name="l00188"></a>00188 <span class="comment">     * to use for space applications.  In terrestrial applications, the</span>
-<a name="l00189"></a>00189 <span class="comment">     * function NormalGravity::U (which includes this effect) should usually be</span>
-<a name="l00190"></a>00190 <span class="comment">     * used.</span>
-<a name="l00191"></a>00191 <span class="comment">     **********************************************************************/</span>
-<a name="l00192"></a>00192     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> V0(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Z,
-<a name="l00193"></a>00193                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& GammaX, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& GammaY, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& GammaZ) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00194"></a>00194 <span class="comment"></span>
-<a name="l00195"></a>00195 <span class="comment">    /**</span>
-<a name="l00196"></a>00196 <span class="comment">     * Evaluate the centrifugal acceleration in geocentric coordinates.</span>
-<a name="l00197"></a>00197 <span class="comment">     *</span>
-<a name="l00198"></a>00198 <span class="comment">     * @param[in] X geocentric coordinate of point (meters).</span>
-<a name="l00199"></a>00199 <span class="comment">     * @param[in] Y geocentric coordinate of point (meters).</span>
-<a name="l00200"></a>00200 <span class="comment">     * @param[out] fX the \e X component of the centrifugal acceleration</span>
-<a name="l00201"></a>00201 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00202"></a>00202 <span class="comment">     * @param[out] fY the \e Y component of the centrifugal acceleration</span>
-<a name="l00203"></a>00203 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00204"></a>00204 <span class="comment">     * @return \e Phi the centrifugal potential (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00205"></a>00205 <span class="comment">     *</span>
-<a name="l00206"></a>00206 <span class="comment">     * \e Phi is independent of \e Z, thus \e fZ = 0.  This function</span>
-<a name="l00207"></a>00207 <span class="comment">     * NormalGravity::U sums the results of NormalGravity::V0 and</span>
-<a name="l00208"></a>00208 <span class="comment">     * NormalGravity::Phi.</span>
-<a name="l00209"></a>00209 <span class="comment">     **********************************************************************/</span>
-<a name="l00210"></a>00210     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Phi(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> X, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> Y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& f [...]
-<a name="l00211"></a>00211 <span class="comment">    ///@}</span>
-<a name="l00212"></a>00212 <span class="comment"></span><span class="comment"></span>
-<a name="l00213"></a>00213 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00214"></a>00214 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00215"></a>00215 <span class="comment">    ///@{</span>
-<a name="l00216"></a>00216 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00217"></a>00217 <span class="comment">     * @return true if the object has been initialized.</span>
-<a name="l00218"></a>00218 <span class="comment">     **********************************************************************/</span>
-<a name="l00219"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a1d96cafc362959215eaa553a712b6908">00219</a>     <span class="keywordtype">bool</span> <a class="code" href="classGeographicLib_1_1NormalGravity.html#a1d96cafc362959215eaa553a712b6908">Init</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a > 0; }
-<a name="l00220"></a>00220 <span class="comment"></span>
-<a name="l00221"></a>00221 <span class="comment">    /**</span>
-<a name="l00222"></a>00222 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00223"></a>00223 <span class="comment">     *   the value used in the constructor.</span>
-<a name="l00224"></a>00224 <span class="comment">     **********************************************************************/</span>
-<a name="l00225"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a9155d22c5a64a7ef346ce7f590a6264f">00225</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MajorRadius() <span class="keyword">const</span> throw()
-<a name="l00226"></a>00226     { <span class="keywordflow">return</span> Init() ? _a : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00227"></a>00227 <span class="comment"></span>
-<a name="l00228"></a>00228 <span class="comment">    /**</span>
-<a name="l00229"></a>00229 <span class="comment">     * @return \e GM the mass constant of the ellipsoid</span>
-<a name="l00230"></a>00230 <span class="comment">     *   (m<sup>3</sup> s<sup>-2</sup>).  This is the value used in the</span>
-<a name="l00231"></a>00231 <span class="comment">     *   constructor.</span>
-<a name="l00232"></a>00232 <span class="comment">     **********************************************************************/</span>
-<a name="l00233"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a3c6693dc7efe04cdbed408b2510c69da">00233</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MassConstant() <span class="keyword">const</span> throw()
-<a name="l00234"></a>00234     { <span class="keywordflow">return</span> Init() ? _GM : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00235"></a>00235 <span class="comment"></span>
-<a name="l00236"></a>00236 <span class="comment">    /**</span>
-<a name="l00237"></a>00237 <span class="comment">     * @return \e J<sub>n</sub> the dynamical form factors of the ellipsoid.</span>
-<a name="l00238"></a>00238 <span class="comment">     *</span>
-<a name="l00239"></a>00239 <span class="comment">     * If \e n = 2 (the default), this is the value of <i>J</i><sub>2</sub></span>
-<a name="l00240"></a>00240 <span class="comment">     * used in the constructor.  Otherwise it is the zonal coefficient of the</span>
-<a name="l00241"></a>00241 <span class="comment">     * Legendre harmonic sum of the normal gravitational potential.  Note that</span>
-<a name="l00242"></a>00242 <span class="comment">     * \e J<sub>n</sub> = 0 if \e is odd.  In most gravity applications, fully</span>
-<a name="l00243"></a>00243 <span class="comment">     * normalized Legendre functions are used and the corresponding coefficient</span>
-<a name="l00244"></a>00244 <span class="comment">     * is <i>C</i><sub><i>n</i>0</sub> = -\e J<sub>n</sub> / sqrt(2 \e n + 1).</span>
-<a name="l00245"></a>00245 <span class="comment">     **********************************************************************/</span>
-<a name="l00246"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#aa52b03157eb0b199d331d6fca28a259a">00246</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real DynamicalFormFactor(<span class="keywordtype">int</span> n = 2) <span class="keyword">const</span> throw()
-<a name="l00247"></a>00247     { <span class="keywordflow">return</span> Init() ? ( n == 2 ? _J2 : Jn(n)) : Math::NaN<real>(); }
-<a name="l00248"></a>00248 <span class="comment"></span>
-<a name="l00249"></a>00249 <span class="comment">    /**</span>
-<a name="l00250"></a>00250 <span class="comment">     * @return \e omega the angular velocity of the ellipsoid</span>
-<a name="l00251"></a>00251 <span class="comment">     *   (rad s<sup>-1</sup>).  This is the value used in the constructor.</span>
-<a name="l00252"></a>00252 <span class="comment">     **********************************************************************/</span>
-<a name="l00253"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#aefd6dfb7e6f806b63d099316dcc97f55">00253</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real AngularVelocity() <span class="keyword">const</span> throw()
-<a name="l00254"></a>00254     { <span class="keywordflow">return</span> Init() ? _omega : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00255"></a>00255 <span class="comment"></span>
-<a name="l00256"></a>00256 <span class="comment">    /**</span>
-<a name="l00257"></a>00257 <span class="comment">     * @return <i>f</i> the flattening of the ellipsoid (\e a - \e b)/\e a.</span>
-<a name="l00258"></a>00258 <span class="comment">     **********************************************************************/</span>
-<a name="l00259"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#aba396954f43e623e755bdff7db7d850b">00259</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Flattening() <span class="keyword">const</span> throw()
-<a name="l00260"></a>00260     { <span class="keywordflow">return</span> Init() ? _f : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00261"></a>00261 <span class="comment"></span>
-<a name="l00262"></a>00262 <span class="comment">    /**</span>
-<a name="l00263"></a>00263 <span class="comment">     * @return <i>gamma</i><sub>e</sub> the normal gravity at equator</span>
-<a name="l00264"></a>00264 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00265"></a>00265 <span class="comment">     **********************************************************************/</span>
-<a name="l00266"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a3610ec908c7b168b39f00946e2fc3fad">00266</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real EquatorialGravity() <span class="keyword">const</span> throw()
-<a name="l00267"></a>00267     { <span class="keywordflow">return</span> Init() ? _gammae : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00268"></a>00268 <span class="comment"></span>
-<a name="l00269"></a>00269 <span class="comment">    /**</span>
-<a name="l00270"></a>00270 <span class="comment">     * @return <i>gamma</i><sub>p</sub> the normal gravity at poles</span>
-<a name="l00271"></a>00271 <span class="comment">     *   (m s<sup>-2</sup>).</span>
-<a name="l00272"></a>00272 <span class="comment">     **********************************************************************/</span>
-<a name="l00273"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a3079310d3a7af97ccb50b91be01d5a50">00273</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real PolarGravity() <span class="keyword">const</span> throw()
-<a name="l00274"></a>00274     { <span class="keywordflow">return</span> Init() ? _gammap : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00275"></a>00275 <span class="comment"></span>
-<a name="l00276"></a>00276 <span class="comment">    /**</span>
-<a name="l00277"></a>00277 <span class="comment">     * @return <i>f*</i> the gravity flattening</span>
-<a name="l00278"></a>00278 <span class="comment">     *   (<i>gamma</i><sub>p</sub> - <i>gamma</i><sub>e</sub>) /</span>
-<a name="l00279"></a>00279 <span class="comment">     *   <i>gamma</i><sub>e</sub>.</span>
-<a name="l00280"></a>00280 <span class="comment">     **********************************************************************/</span>
-<a name="l00281"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a7e9329f7b3120b7777a0c5be3ca424a7">00281</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real GravityFlattening() <span class="keyword">const</span> throw()
-<a name="l00282"></a>00282     { <span class="keywordflow">return</span> Init() ? _fstar : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00283"></a>00283 <span class="comment"></span>
-<a name="l00284"></a>00284 <span class="comment">    /**</span>
-<a name="l00285"></a>00285 <span class="comment">     * @return <i>U</i><sub>0</sub> the constant normal potential for the</span>
-<a name="l00286"></a>00286 <span class="comment">     *   surface of the ellipsoid (m<sup>2</sup> s<sup>-2</sup>).</span>
-<a name="l00287"></a>00287 <span class="comment">     **********************************************************************/</span>
-<a name="l00288"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a5bc3756dd7dbc82c07ef4afd1a182372">00288</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real SurfacePotential() <span class="keyword">const</span> throw()
-<a name="l00289"></a>00289     { <span class="keywordflow">return</span> Init() ? _U0 : <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>(); }
-<a name="l00290"></a>00290 <span class="comment"></span>
-<a name="l00291"></a>00291 <span class="comment">    /**</span>
-<a name="l00292"></a>00292 <span class="comment">     * @return the Geocentric object used by this instance.</span>
-<a name="l00293"></a>00293 <span class="comment">     **********************************************************************/</span>
-<a name="l00294"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#ab15ded1ab7ec9a30e8053fc330ed76ac">00294</a>     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a>& <a class="code" href="classGeographicLib_1_1NormalGravity.html#ab15ded1ab7ec9a30e8053fc330ed76ac">Earth</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth; }<span cl [...]
-<a name="l00295"></a>00295 <span class="comment">    ///@}</span>
-<a name="l00296"></a>00296 <span class="comment"></span><span class="comment"></span>
-<a name="l00297"></a>00297 <span class="comment">    /**</span>
-<a name="l00298"></a>00298 <span class="comment">     * A global instantiation of NormalGravity for the WGS84 ellipsoid.</span>
-<a name="l00299"></a>00299 <span class="comment">     **********************************************************************/</span>
-<a name="l00300"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a70c328a95e05964180106d89c2583b78">00300</a>     <span class="keyword">static</span> <span class="keyword">const</span> NormalGravity <a class="code" href="classGeographicLib_1_1NormalGravity.html#a70c328a95e05964180106d89c2583b78">WGS84</a>;
-<a name="l00301"></a>00301 <span class="comment"></span>
-<a name="l00302"></a>00302 <span class="comment">    /**</span>
-<a name="l00303"></a>00303 <span class="comment">     * A global instantiation of NormalGravity for the GRS80 ellipsoid.</span>
-<a name="l00304"></a>00304 <span class="comment">     **********************************************************************/</span>
-<a name="l00305"></a><a class="code" href="classGeographicLib_1_1NormalGravity.html#a78cf6878967ad52adadbe06b5f7c4146">00305</a>     <span class="keyword">static</span> <span class="keyword">const</span> NormalGravity <a class="code" href="classGeographicLib_1_1NormalGravity.html#a78cf6878967ad52adadbe06b5f7c4146">GRS80</a>;
-<a name="l00306"></a>00306   };
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310 <span class="preprocessor">#endif  // GEOGRAPHICLIB_NORMALGRAVITY_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/OSGB_8cpp.html b/doc/html/OSGB_8cpp.html
deleted file mode 100644
index a2bae7c..0000000
--- a/doc/html/OSGB_8cpp.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: OSGB.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">OSGB.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">GeographicLib::OSGB</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="OSGB_8hpp_source.html">GeographicLib/OSGB.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="OSGB_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="OSGB_8cpp.html#af7fa9aa83a3be95cccc572fc3b399b58">GEOGRAPHICLIB_OSGB_CPP</a>   "$Id: 4bfb35c88866ed936faad797f3cef6f4ece36196 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">GeographicLib::OSGB</a> class. </p>
-<p>Copyright (c) Charles Karney (2010-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="OSGB_8cpp_source.html">OSGB.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="af7fa9aa83a3be95cccc572fc3b399b58"></a><!-- doxytag: member="OSGB.cpp::GEOGRAPHICLIB_OSGB_CPP" ref="af7fa9aa83a3be95cccc572fc3b399b58" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_OSGB_CPP   "$Id: 4bfb35c88866ed936faad797f3cef6f4ece36196 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="OSGB_8cpp_source.html#l00013">13</a> of file <a class="el" href="OSGB_8cpp_source.html">OSGB.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/OSGB_8cpp_source.html b/doc/html/OSGB_8cpp_source.html
deleted file mode 100644
index e93490b..0000000
--- a/doc/html/OSGB_8cpp_source.html
+++ /dev/null
@@ -1,234 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: OSGB.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">OSGB.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="OSGB_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file OSGB.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::OSGB class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="OSGB_8hpp.html" title="Header for GeographicLib::OSGB class.">GeographicLib/OSGB.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00012"></a>00012 
-<a name="l00013"></a><a class="code" href="OSGB_8cpp.html#af7fa9aa83a3be95cccc572fc3b399b58">00013</a> <span class="preprocessor">#define GEOGRAPHICLIB_OSGB_CPP "$Id: 4bfb35c88866ed936faad797f3cef6f4ece36196 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="OSGB_8cpp.html#af7fa9aa83a3be95cccc572fc3b399b58">GEOGRAPHICLIB_OSGB_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="OSGB_8hpp.html#a786c5942146679103feb716bea66a0a7">GEOGRAPHICLIB_OSGB_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022   <span class="keyword">const</span> <span class="keywordtype">string</span> OSGB::letters_ = <span class="stringliteral">"ABCDEFGHJKLMNOPQRSTUVWXYZ"</span>;
-<a name="l00023"></a>00023   <span class="keyword">const</span> <span class="keywordtype">string</span> OSGB::digits_ = <span class="stringliteral">"0123456789"</span>;
-<a name="l00024"></a>00024 
-<a name="l00025"></a>00025   <span class="keyword">const</span> TransverseMercator
-<a name="l00026"></a>00026   OSGB::OSGBTM_(MajorRadius(), Flattening(), CentralScale());
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> OSGB::computenorthoffset() <span class="keywordflow">throw</span>() {
-<a name="l00029"></a>00029     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, y;
-<a name="l00030"></a>00030     OSGBTM_.Forward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), OriginLatitude(), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), x, y);
-<a name="l00031"></a>00031     <span class="keywordflow">return</span> FalseNorthing() - y;
-<a name="l00032"></a>00032   }
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> OSGB::northoffset_ = computenorthoffset();
-<a name="l00035"></a>00035 
-<a name="l00036"></a><a class="code" href="classGeographicLib_1_1OSGB.html#a0a79e8f2babae1eb0305a0e728fea8c8">00036</a>   <span class="keywordtype">void</span> OSGB::GridReference(real x, real y, <span class="keywordtype">int</span> prec, std::string& gridref) {
-<a name="l00037"></a>00037     CheckCoords(x, y);
-<a name="l00038"></a>00038     <span class="keywordflow">if</span> (!(prec >= 0 && prec <= maxprec_))
-<a name="l00039"></a>00039       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"OSGB precision "</span> + Utility::str(prec)
-<a name="l00040"></a>00040                           + <span class="stringliteral">" not in [0, "</span>
-<a name="l00041"></a>00041                           + Utility::str(<span class="keywordtype">int</span>(maxprec_)) + <span class="stringliteral">"]"</span>);
-<a name="l00042"></a>00042     <span class="keywordtype">char</span> grid[2 + 2 * maxprec_];
-<a name="l00043"></a>00043     <span class="keywordtype">int</span>
-<a name="l00044"></a>00044       xh = int(floor(x)) / tile_,
-<a name="l00045"></a>00045       yh = int(floor(y)) / tile_;
-<a name="l00046"></a>00046     real
-<a name="l00047"></a>00047       xf = x - tile_ * xh,
-<a name="l00048"></a>00048       yf = y - tile_ * yh;
-<a name="l00049"></a>00049     xh += tileoffx_;
-<a name="l00050"></a>00050     yh += tileoffy_;
-<a name="l00051"></a>00051     <span class="keywordtype">int</span> z = 0;
-<a name="l00052"></a>00052     grid[z++] = letters_[(tilegrid_ - (yh / tilegrid_) - 1)
-<a name="l00053"></a>00053                         * tilegrid_ + (xh / tilegrid_)];
-<a name="l00054"></a>00054     grid[z++] = letters_[(tilegrid_ - (yh % tilegrid_) - 1)
-<a name="l00055"></a>00055                         * tilegrid_ + (xh % tilegrid_)];
-<a name="l00056"></a>00056     real mult = pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(base_), max(tilelevel_ - prec, 0));
-<a name="l00057"></a>00057     <span class="keywordtype">int</span>
-<a name="l00058"></a>00058       ix = int(floor(xf / mult)),
-<a name="l00059"></a>00059       iy = int(floor(yf / mult));
-<a name="l00060"></a>00060     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = min(prec, <span class="keywordtype">int</span>(tilelevel_)); c--;) {
-<a name="l00061"></a>00061       grid[z + c] = digits_[ ix % base_ ];
-<a name="l00062"></a>00062       ix /= base_;
-<a name="l00063"></a>00063       grid[z + c + prec] = digits_[ iy % base_ ];
-<a name="l00064"></a>00064       iy /= base_;
-<a name="l00065"></a>00065     }
-<a name="l00066"></a>00066     <span class="keywordflow">if</span> (prec > tilelevel_) {
-<a name="l00067"></a>00067       xf -= floor(xf / mult);
-<a name="l00068"></a>00068       yf -= floor(yf / mult);
-<a name="l00069"></a>00069       mult = pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(base_), prec - tilelevel_);
-<a name="l00070"></a>00070       ix = int(floor(xf * mult));
-<a name="l00071"></a>00071       iy = int(floor(yf * mult));
-<a name="l00072"></a>00072       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> c = prec - tilelevel_; c--;) {
-<a name="l00073"></a>00073         grid[z + c + tilelevel_] = digits_[ ix % base_ ];
-<a name="l00074"></a>00074         ix /= base_;
-<a name="l00075"></a>00075         grid[z + c + tilelevel_ + prec] = digits_[ iy % base_ ];
-<a name="l00076"></a>00076         iy /= base_;
-<a name="l00077"></a>00077       }
-<a name="l00078"></a>00078     }
-<a name="l00079"></a>00079     <span class="keywordtype">int</span> mlen = z + 2 * prec;
-<a name="l00080"></a>00080     gridref.resize(mlen);
-<a name="l00081"></a>00081     copy(grid, grid + mlen, gridref.begin());
-<a name="l00082"></a>00082   }
-<a name="l00083"></a>00083 
-<a name="l00084"></a><a class="code" href="classGeographicLib_1_1OSGB.html#a3693cfef49442747750e8393c81014aa">00084</a>   <span class="keywordtype">void</span> OSGB::GridReference(<span class="keyword">const</span> std::string& gridref,
-<a name="l00085"></a>00085                            real& x, real& y, <span class="keywordtype">int</span>& prec,
-<a name="l00086"></a>00086                            <span class="keywordtype">bool</span> centerp) {
-<a name="l00087"></a>00087     <span class="keywordtype">int</span>
-<a name="l00088"></a>00088       len = int(gridref.size()),
-<a name="l00089"></a>00089       p = 0;
-<a name="l00090"></a>00090     <span class="keywordtype">char</span> grid[2 + 2 * maxprec_];
-<a name="l00091"></a>00091     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < len; ++i) {
-<a name="l00092"></a>00092       <span class="keywordflow">if</span> (!isspace(gridref[i])) {
-<a name="l00093"></a>00093         <span class="keywordflow">if</span> (p >= 2 + 2 * maxprec_)
-<a name="l00094"></a>00094           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"OSGB string "</span> + gridref + <span class="stringliteral">" too long"</span>);
-<a name="l00095"></a>00095         grid[p++] = gridref[i];
-<a name="l00096"></a>00096       }
-<a name="l00097"></a>00097     }
-<a name="l00098"></a>00098     len = p;
-<a name="l00099"></a>00099     p = 0;
-<a name="l00100"></a>00100     <span class="keywordflow">if</span> (len < 2)
-<a name="l00101"></a>00101       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"OSGB string "</span> + gridref + <span class="stringliteral">" too short"</span>);
-<a name="l00102"></a>00102     <span class="keywordflow">if</span> (len % 2)
-<a name="l00103"></a>00103       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"OSGB string "</span> + gridref +
-<a name="l00104"></a>00104                           <span class="stringliteral">" has odd number of characters"</span>);
-<a name="l00105"></a>00105     <span class="keywordtype">int</span>
-<a name="l00106"></a>00106       xh = 0,
-<a name="l00107"></a>00107       yh = 0;
-<a name="l00108"></a>00108     <span class="keywordflow">while</span> (p < 2) {
-<a name="l00109"></a>00109       <span class="keywordtype">int</span> i = Utility::lookup(letters_, grid[p++]);
-<a name="l00110"></a>00110       <span class="keywordflow">if</span> (i < 0)
-<a name="l00111"></a>00111         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Illegal prefix character "</span> + gridref);
-<a name="l00112"></a>00112       yh = yh * tilegrid_ + tilegrid_ - (i / tilegrid_) - 1;
-<a name="l00113"></a>00113       xh = xh * tilegrid_ + (i % tilegrid_);
-<a name="l00114"></a>00114     }
-<a name="l00115"></a>00115     xh -= tileoffx_;
-<a name="l00116"></a>00116     yh -= tileoffy_;
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118     <span class="keywordtype">int</span> prec1 = (len - p)/2;
-<a name="l00119"></a>00119     real
-<a name="l00120"></a>00120       unit = tile_,
-<a name="l00121"></a>00121       x1 = unit * xh,
-<a name="l00122"></a>00122       y1 = unit * yh;
-<a name="l00123"></a>00123     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < prec1; ++i) {
-<a name="l00124"></a>00124       unit /= base_;
-<a name="l00125"></a>00125       <span class="keywordtype">int</span>
-<a name="l00126"></a>00126         ix = Utility::lookup(digits_, grid[p + i]),
-<a name="l00127"></a>00127         iy = Utility::lookup(digits_, grid[p + i + prec1]);
-<a name="l00128"></a>00128       <span class="keywordflow">if</span> (ix < 0 || iy < 0)
-<a name="l00129"></a>00129         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Encountered a non-digit in "</span> + gridref);
-<a name="l00130"></a>00130       x1 += unit * ix;
-<a name="l00131"></a>00131       y1 += unit * iy;
-<a name="l00132"></a>00132     }
-<a name="l00133"></a>00133     <span class="keywordflow">if</span> (centerp) {
-<a name="l00134"></a>00134       x1 += unit/2;
-<a name="l00135"></a>00135       y1 += unit/2;
-<a name="l00136"></a>00136     }
-<a name="l00137"></a>00137     x = x1;
-<a name="l00138"></a>00138     y = y1;
-<a name="l00139"></a>00139     prec = prec1;
-<a name="l00140"></a>00140   }
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142   <span class="keywordtype">void</span> OSGB::CheckCoords(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y) {
-<a name="l00143"></a>00143     <span class="comment">// Limits are all multiples of 100km and are all closed on the lower end</span>
-<a name="l00144"></a>00144     <span class="comment">// and open on the upper end -- and this is reflected in the error</span>
-<a name="l00145"></a>00145     <span class="comment">// messages.</span>
-<a name="l00146"></a>00146     <span class="keywordflow">if</span> (! (x >= minx_ && x < maxx_) )
-<a name="l00147"></a>00147       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Easting "</span> + Utility::str(<span class="keywordtype">int</span>(floor(x/1000)))
-<a name="l00148"></a>00148                           + <span class="stringliteral">"km not in OSGB range ["</span>
-<a name="l00149"></a>00149                           + Utility::str(minx_/1000) + <span class="stringliteral">"km, "</span>
-<a name="l00150"></a>00150                           + Utility::str(maxx_/1000) + <span class="stringliteral">"km)"</span>);
-<a name="l00151"></a>00151     <span class="keywordflow">if</span> (! (y >= miny_ && y < maxy_) )
-<a name="l00152"></a>00152       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Northing "</span> + Utility::str(<span class="keywordtype">int</span>(floor(y/1000)))
-<a name="l00153"></a>00153                           + <span class="stringliteral">"km not in OSGB range ["</span>
-<a name="l00154"></a>00154                           + Utility::str(miny_/1000) + <span class="stringliteral">"km, "</span>
-<a name="l00155"></a>00155                           + Utility::str(maxy_/1000) + <span class="stringliteral">"km)"</span>);
-<a name="l00156"></a>00156   }
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/OSGB_8hpp.html b/doc/html/OSGB_8hpp.html
deleted file mode 100644
index 7273343..0000000
--- a/doc/html/OSGB_8hpp.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: OSGB.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">OSGB.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">GeographicLib::OSGB</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <string></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="TransverseMercator_8hpp_source.html">GeographicLib/TransverseMercator.hpp</a>></code><br/>
-</div>
-<p><a href="OSGB_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Ordnance Survey grid system for Great Britain.  <a href="classGeographicLib_1_1OSGB.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="OSGB_8hpp.html#a786c5942146679103feb716bea66a0a7">GEOGRAPHICLIB_OSGB_HPP</a>   "$Id: e91367e693ad63bb500c953e9c21445bef017464 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">GeographicLib::OSGB</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a786c5942146679103feb716bea66a0a7"></a><!-- doxytag: member="OSGB.hpp::GEOGRAPHICLIB_OSGB_HPP" ref="a786c5942146679103feb716bea66a0a7" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_OSGB_HPP   "$Id: e91367e693ad63bb500c953e9c21445bef017464 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00011">11</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/OSGB_8hpp_source.html b/doc/html/OSGB_8hpp_source.html
deleted file mode 100644
index 8ae6724..0000000
--- a/doc/html/OSGB_8hpp_source.html
+++ /dev/null
@@ -1,317 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: OSGB.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">OSGB.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="OSGB_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file OSGB.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::OSGB class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_OSGB_HPP)</span>
-<a name="l00011"></a><a class="code" href="OSGB_8hpp.html#a786c5942146679103feb716bea66a0a7">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_OSGB_HPP "$Id: e91367e693ad63bb500c953e9c21445bef017464 $"</span>
-<a name="l00012"></a>00012 <span class="preprocessor"></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <string></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <sstream></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="TransverseMercator_8hpp.html" title="Header for GeographicLib::TransverseMercator class.">GeographicLib/TransverseMercator.hpp</a>></span>
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="comment">// Squelch warnings about dll vs string</span>
-<a name="l00020"></a>00020 <span class="preprocessor">#pragma warning (push)</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4251)</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment">  /**</span>
-<a name="l00027"></a>00027 <span class="comment">   * \brief Ordnance Survey grid system for Great Britain</span>
-<a name="l00028"></a>00028 <span class="comment">   *</span>
-<a name="l00029"></a>00029 <span class="comment">   * The class implements the coordinate system used by the Ordnance Survey for</span>
-<a name="l00030"></a>00030 <span class="comment">   * maps of Great Britain and conversions to the grid reference system.</span>
-<a name="l00031"></a>00031 <span class="comment">   *</span>
-<a name="l00032"></a>00032 <span class="comment">   * See</span>
-<a name="l00033"></a>00033 <span class="comment">   * - <a href="http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/A_Guide_to_Coordinate_Systems_in_Great_Britain.pdf"></span>
-<a name="l00034"></a>00034 <span class="comment">   * A guide to coordinate systems in Great Britain</a></span>
-<a name="l00035"></a>00035 <span class="comment">   * - <a href="http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidetonationalgrid/page1.html"></span>
-<a name="l00036"></a>00036 <span class="comment">   * Guide to National Grid</a></span>
-<a name="l00037"></a>00037 <span class="comment">   *</span>
-<a name="l00038"></a>00038 <span class="comment">   * \b WARNING: the latitudes and longitudes for the Ordnance Survey grid</span>
-<a name="l00039"></a>00039 <span class="comment">   * system do not use the WGS84 datum.  Do not use the values returned by this</span>
-<a name="l00040"></a>00040 <span class="comment">   * class in the UTMUPS, MGRS, or Geoid classes without first converting the</span>
-<a name="l00041"></a>00041 <span class="comment">   * datum (and vice versa).</span>
-<a name="l00042"></a>00042 <span class="comment">   *</span>
-<a name="l00043"></a>00043 <span class="comment">   * Example of use:</span>
-<a name="l00044"></a>00044 <span class="comment">   * \include example-OSGB.cpp</span>
-<a name="l00045"></a>00045 <span class="comment">   **********************************************************************/</span>
-<a name="l00046"></a>00046   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> OSGB {
-<a name="l00047"></a>00047   <span class="keyword">private</span>:
-<a name="l00048"></a>00048     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00049"></a>00049     <span class="keyword">static</span> <span class="keyword">const</span> std::string letters_;
-<a name="l00050"></a>00050     <span class="keyword">static</span> <span class="keyword">const</span> std::string digits_;
-<a name="l00051"></a>00051     <span class="keyword">static</span> <span class="keyword">const</span> TransverseMercator OSGBTM_;
-<a name="l00052"></a>00052     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> northoffset_;
-<a name="l00053"></a>00053     <span class="keyword">enum</span> {
-<a name="l00054"></a>00054       base_ = 10,
-<a name="l00055"></a>00055       tile_ = 100000,
-<a name="l00056"></a>00056       tilelevel_ = 5,
-<a name="l00057"></a>00057       tilegrid_ = 5,
-<a name="l00058"></a>00058       tileoffx_ = 2 * tilegrid_,
-<a name="l00059"></a>00059       tileoffy_ = 1 * tilegrid_,
-<a name="l00060"></a>00060       minx_ = - tileoffx_ * tile_,
-<a name="l00061"></a>00061       miny_ = - tileoffy_ * tile_,
-<a name="l00062"></a>00062       maxx_ = (tilegrid_*tilegrid_ - tileoffx_) * tile_,
-<a name="l00063"></a>00063       maxy_ = (tilegrid_*tilegrid_ - tileoffy_) * tile_,
-<a name="l00064"></a>00064       <span class="comment">// Maximum precision is um</span>
-<a name="l00065"></a>00065       maxprec_ = 5 + 6,
-<a name="l00066"></a>00066     };
-<a name="l00067"></a>00067     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> computenorthoffset() <span class="keywordflow">throw</span>();
-<a name="l00068"></a>00068     <span class="keyword">static</span> <span class="keywordtype">void</span> CheckCoords(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y);
-<a name="l00069"></a>00069     OSGB();                     <span class="comment">// Disable constructor</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071   <span class="keyword">public</span>:
-<a name="l00072"></a>00072 <span class="comment"></span>
-<a name="l00073"></a>00073 <span class="comment">    /**</span>
-<a name="l00074"></a>00074 <span class="comment">     * Forward projection, from geographic to OSGB coordinates.</span>
-<a name="l00075"></a>00075 <span class="comment">     *</span>
-<a name="l00076"></a>00076 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00077"></a>00077 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00078"></a>00078 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00079"></a>00079 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00080"></a>00080 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00081"></a>00081 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00082"></a>00082 <span class="comment">     *</span>
-<a name="l00083"></a>00083 <span class="comment">     * \e lat should be in the range [-90, 90]; \e lon and \e lon0 should be in</span>
-<a name="l00084"></a>00084 <span class="comment">     * the range [-180, 360].</span>
-<a name="l00085"></a>00085 <span class="comment">     **********************************************************************/</span>
-<a name="l00086"></a><a class="code" href="classGeographicLib_1_1OSGB.html#a92618eea9870908e11446875d80aab6b">00086</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> Forward(real lat, real lon,
-<a name="l00087"></a>00087                         real& x, real& y, real& gamma, real& k) <span class="keywordflow">throw</span>() {
-<a name="l00088"></a>00088       OSGBTM_.Forward(OriginLongitude(), lat, lon, x, y, gamma, k);
-<a name="l00089"></a>00089       x += FalseEasting();
-<a name="l00090"></a>00090       y += northoffset_;
-<a name="l00091"></a>00091     }
-<a name="l00092"></a>00092 <span class="comment"></span>
-<a name="l00093"></a>00093 <span class="comment">    /**</span>
-<a name="l00094"></a>00094 <span class="comment">     * Reverse projection, from OSGB coordinates to geographic.</span>
-<a name="l00095"></a>00095 <span class="comment">     *</span>
-<a name="l00096"></a>00096 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00097"></a>00097 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00098"></a>00098 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00099"></a>00099 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00100"></a>00100 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00101"></a>00101 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00102"></a>00102 <span class="comment">     *</span>
-<a name="l00103"></a>00103 <span class="comment">     * The value of \e lon returned is in the range [-180, 180).</span>
-<a name="l00104"></a>00104 <span class="comment">     **********************************************************************/</span>
-<a name="l00105"></a>00105 
-<a name="l00106"></a><a class="code" href="classGeographicLib_1_1OSGB.html#ae006380e574858a81011752dd1d4af60">00106</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> Reverse(real x, real y,
-<a name="l00107"></a>00107                         real& lat, real& lon, real& gamma, real& k) <span class="keywordflow">throw</span>() {
-<a name="l00108"></a>00108       x -= FalseEasting();
-<a name="l00109"></a>00109       y -= northoffset_;
-<a name="l00110"></a>00110       OSGBTM_.Reverse(OriginLongitude(), x, y, lat, lon, gamma, k);
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112 <span class="comment"></span>
-<a name="l00113"></a>00113 <span class="comment">    /**</span>
-<a name="l00114"></a>00114 <span class="comment">     * OSGB::Forward without returning the convergence and scale.</span>
-<a name="l00115"></a>00115 <span class="comment">     **********************************************************************/</span>
-<a name="l00116"></a><a class="code" href="classGeographicLib_1_1OSGB.html#a0f705bee98c6669ca7a95394712fd758">00116</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1OSGB.html#a0f705bee98c6669ca7a95394712fd758">Forward</a>(real lat, real lon, real& x, real& y) <span class="keywordflow">throw</span>() {
-<a name="l00117"></a>00117       real gamma, k;
-<a name="l00118"></a>00118       Forward(lat, lon, x, y, gamma, k);
-<a name="l00119"></a>00119     }
-<a name="l00120"></a>00120 <span class="comment"></span>
-<a name="l00121"></a>00121 <span class="comment">    /**</span>
-<a name="l00122"></a>00122 <span class="comment">     * OSGB::Reverse without returning the convergence and scale.</span>
-<a name="l00123"></a>00123 <span class="comment">     **********************************************************************/</span>
-<a name="l00124"></a><a class="code" href="classGeographicLib_1_1OSGB.html#ab804929a4126ed390a40d35e837b4001">00124</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1OSGB.html#ab804929a4126ed390a40d35e837b4001">Reverse</a>(real x, real y, real& lat, real& lon) <span class="keywordflow">throw</span>() {
-<a name="l00125"></a>00125       real gamma, k;
-<a name="l00126"></a>00126       Reverse(x, y, lat, lon, gamma, k);
-<a name="l00127"></a>00127     }
-<a name="l00128"></a>00128 <span class="comment"></span>
-<a name="l00129"></a>00129 <span class="comment">    /**</span>
-<a name="l00130"></a>00130 <span class="comment">     * Convert OSGB coordinates to a grid reference.</span>
-<a name="l00131"></a>00131 <span class="comment">     *</span>
-<a name="l00132"></a>00132 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00133"></a>00133 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00134"></a>00134 <span class="comment">     * @param[in] prec precision relative to 100 km.</span>
-<a name="l00135"></a>00135 <span class="comment">     * @param[out] gridref National Grid reference.</span>
-<a name="l00136"></a>00136 <span class="comment">     *</span>
-<a name="l00137"></a>00137 <span class="comment">     * \e prec specifies the precision of the grid reference string as follows:</span>
-<a name="l00138"></a>00138 <span class="comment">     * - prec = 0 (min), 100km</span>
-<a name="l00139"></a>00139 <span class="comment">     * - prec = 1, 10km</span>
-<a name="l00140"></a>00140 <span class="comment">     * - prec = 2, 1km</span>
-<a name="l00141"></a>00141 <span class="comment">     * - prec = 3, 100m</span>
-<a name="l00142"></a>00142 <span class="comment">     * - prec = 4, 10m</span>
-<a name="l00143"></a>00143 <span class="comment">     * - prec = 5, 1m</span>
-<a name="l00144"></a>00144 <span class="comment">     * - prec = 6, 0.1m</span>
-<a name="l00145"></a>00145 <span class="comment">     * - prec = 11 (max), 1um</span>
-<a name="l00146"></a>00146 <span class="comment">     *</span>
-<a name="l00147"></a>00147 <span class="comment">     * The easting must be in the range [-1000 km, 1500 km) and the northing</span>
-<a name="l00148"></a>00148 <span class="comment">     * must be in the range [-500 km, 2000 km).  An exception is thrown if</span>
-<a name="l00149"></a>00149 <span class="comment">     * either the easting and northing is outside these bounds.  These bounds</span>
-<a name="l00150"></a>00150 <span class="comment">     * are consistent with rules for the letter designations for the grid</span>
-<a name="l00151"></a>00151 <span class="comment">     * system.</span>
-<a name="l00152"></a>00152 <span class="comment">     **********************************************************************/</span>
-<a name="l00153"></a>00153     <span class="keyword">static</span> <span class="keywordtype">void</span> GridReference(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <span class="keywordtype">int</span> prec, std::string& gridref);
-<a name="l00154"></a>00154 <span class="comment"></span>
-<a name="l00155"></a>00155 <span class="comment">    /**</span>
-<a name="l00156"></a>00156 <span class="comment">     * Convert OSGB coordinates to a grid reference.</span>
-<a name="l00157"></a>00157 <span class="comment">     *</span>
-<a name="l00158"></a>00158 <span class="comment">     * @param[in] gridref National Grid reference.</span>
-<a name="l00159"></a>00159 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00160"></a>00160 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00161"></a>00161 <span class="comment">     * @param[out] prec precision relative to 100 km.</span>
-<a name="l00162"></a>00162 <span class="comment">     * @param[in] centerp if true (default), return center of the grid square,</span>
-<a name="l00163"></a>00163 <span class="comment">     *   else return SW (lower left) corner.</span>
-<a name="l00164"></a>00164 <span class="comment">     *</span>
-<a name="l00165"></a>00165 <span class="comment">     * The grid reference must be of the form: two letters (not including I)</span>
-<a name="l00166"></a>00166 <span class="comment">     * followed by an even number of digits (up to 22).</span>
-<a name="l00167"></a>00167 <span class="comment">     **********************************************************************/</span>
-<a name="l00168"></a>00168     <span class="keyword">static</span> <span class="keywordtype">void</span> GridReference(<span class="keyword">const</span> std::string& gridref,
-<a name="l00169"></a>00169                               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <span class="keywordtype">int</span>& prec,
-<a name="l00170"></a>00170                               <span class="keywordtype">bool</span> centerp = <span class="keyword">true</span>);
-<a name="l00171"></a>00171 <span class="comment"></span>
-<a name="l00172"></a>00172 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00173"></a>00173 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00174"></a>00174 <span class="comment">    ///@{</span>
-<a name="l00175"></a>00175 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00176"></a>00176 <span class="comment">     * @return \e a the equatorial radius of the Airy 1830 ellipsoid (meters).</span>
-<a name="l00177"></a>00177 <span class="comment">     *</span>
-<a name="l00178"></a>00178 <span class="comment">     * This is 20923713 ft converted to meters using the rule 1 ft =</span>
-<a name="l00179"></a>00179 <span class="comment">     * 10^(9.48401603-10) m.  (The Airy 1830 value is returned because the OSGB</span>
-<a name="l00180"></a>00180 <span class="comment">     * projection is based on this ellipsoid.)</span>
-<a name="l00181"></a>00181 <span class="comment">     **********************************************************************/</span>
-<a name="l00182"></a><a class="code" href="classGeographicLib_1_1OSGB.html#a9bb3b0ff55a462ac2ebcd0cfd446d811">00182</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MajorRadius() throw()
-<a name="l00183"></a>00183     <span class="comment">// result is about 6377563.3960320664406 m</span>
-<a name="l00184"></a>00184     { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(20923713) * std::pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(10), <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.48401603L) - 1); }
-<a name="l00185"></a>00185 <span class="comment"></span>
-<a name="l00186"></a>00186 <span class="comment">    /**</span>
-<a name="l00187"></a>00187 <span class="comment">     * @return \e f the inverse flattening of the Airy 1830 ellipsoid.</span>
-<a name="l00188"></a>00188 <span class="comment">     *</span>
-<a name="l00189"></a>00189 <span class="comment">     * For the Airy 1830 ellipsoid, \e a = 20923713 ft and \e b = 20853810 ft;</span>
-<a name="l00190"></a>00190 <span class="comment">     * thus the flattening = (20923713 - 20853810)/20923713 = 7767/2324857 =</span>
-<a name="l00191"></a>00191 <span class="comment">     * 1/299.32496459...  (The Airy 1830 value is returned because the OSGB</span>
-<a name="l00192"></a>00192 <span class="comment">     * projection is based on this ellipsoid.)</span>
-<a name="l00193"></a>00193 <span class="comment">     **********************************************************************/</span>
-<a name="l00194"></a><a class="code" href="classGeographicLib_1_1OSGB.html#aae688ebd8c126f22517eaa0a01d659f8">00194</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Flattening() throw()
-<a name="l00195"></a>00195     { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(20923713 - 20853810) / <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(20923713); }
-<a name="l00196"></a>00196 <span class="comment"></span>
-<a name="l00197"></a>00197 <span class="comment">    /// \cond SKIP</span>
-<a name="l00198"></a>00198 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00199"></a>00199 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00200"></a>00200 <span class="comment">     * @return \e r the inverse flattening of the Airy 1830 ellipsoid.</span>
-<a name="l00201"></a>00201 <span class="comment">     **********************************************************************/</span>
-<a name="l00202"></a>00202     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() throw() { <span class="keywordflow">return</span> 1/Flattening(); }<span class="comment"></span>
-<a name="l00203"></a>00203 <span class="comment">    /// \endcond</span>
-<a name="l00204"></a>00204 <span class="comment"></span><span class="comment"></span>
-<a name="l00205"></a>00205 <span class="comment">    /**</span>
-<a name="l00206"></a>00206 <span class="comment">     * @return \e k0 central scale for the OSGB projection (0.9996012717).</span>
-<a name="l00207"></a>00207 <span class="comment">     **********************************************************************/</span>
-<a name="l00208"></a><a class="code" href="classGeographicLib_1_1OSGB.html#a65210bfdcac362f393a8f81f28259ad0">00208</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real CentralScale() throw()
-<a name="l00209"></a>00209     { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.9996012717L); }
-<a name="l00210"></a>00210 <span class="comment"></span>
-<a name="l00211"></a>00211 <span class="comment">    /**</span>
-<a name="l00212"></a>00212 <span class="comment">     * @return latitude of the origin for the OSGB projection (49 degrees).</span>
-<a name="l00213"></a>00213 <span class="comment">     **********************************************************************/</span>
-<a name="l00214"></a><a class="code" href="classGeographicLib_1_1OSGB.html#ad6bcef7e2dcc2992831e101bf0b05fa8">00214</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1OSGB.html#ad6bcef7e2dcc2992831e101bf0b05fa8">OriginLatitude</a>() throw() { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d4 [...]
-<a name="l00215"></a>00215 <span class="comment"></span>
-<a name="l00216"></a>00216 <span class="comment">    /**</span>
-<a name="l00217"></a>00217 <span class="comment">     * @return longitude of the origin for the OSGB projection (-2 degrees).</span>
-<a name="l00218"></a>00218 <span class="comment">     **********************************************************************/</span>
-<a name="l00219"></a><a class="code" href="classGeographicLib_1_1OSGB.html#a4eb3b20734af47c9661d40581555c345">00219</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1OSGB.html#a4eb3b20734af47c9661d40581555c345">OriginLongitude</a>() throw() { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d [...]
-<a name="l00220"></a>00220 <span class="comment"></span>
-<a name="l00221"></a>00221 <span class="comment">    /**</span>
-<a name="l00222"></a>00222 <span class="comment">     * @return false northing the OSGB projection (-100000 meters).</span>
-<a name="l00223"></a>00223 <span class="comment">     **********************************************************************/</span>
-<a name="l00224"></a><a class="code" href="classGeographicLib_1_1OSGB.html#a74072d4e62fcd4ca679b222716b6a6a1">00224</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1OSGB.html#a74072d4e62fcd4ca679b222716b6a6a1">FalseNorthing</a>() throw() { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46 [...]
-<a name="l00225"></a>00225 <span class="comment"></span>
-<a name="l00226"></a>00226 <span class="comment">    /**</span>
-<a name="l00227"></a>00227 <span class="comment">     * @return false easting the OSGB projection (400000 meters).</span>
-<a name="l00228"></a>00228 <span class="comment">     **********************************************************************/</span>
-<a name="l00229"></a><a class="code" href="classGeographicLib_1_1OSGB.html#ab27e19f7688f6b472d217b31aeae079c">00229</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1OSGB.html#ab27e19f7688f6b472d217b31aeae079c">FalseEasting</a>() throw() { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b [...]
-<a name="l00230"></a>00230 <span class="comment">    ///@}</span>
-<a name="l00231"></a>00231 <span class="comment"></span>
-<a name="l00232"></a>00232   };
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00237"></a>00237 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
-<a name="l00238"></a>00238 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00239"></a>00239 <span class="preprocessor"></span>
-<a name="l00240"></a>00240 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Planimeter.1.html b/doc/html/Planimeter.1.html
deleted file mode 100644
index 37d5415..0000000
--- a/doc/html/Planimeter.1.html
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>Planimeter -- compute the area of geodesic polygons</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>Planimeter -- compute the area of geodesic polygons</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>Planimeter</strong> [ <strong>-r</strong> ] [ <strong>-s</strong> ] [ <strong>-l</strong> ] [ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Measure the area of a geodesic polygon.  Reads polygon vertices from
-standard input, one per line.  Vertices may be given as latitude and
-longitude, UTM/UPS, or MGRS coordinates, interpreted in the same way as
-<a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>.  (MGRS coordinates signify the center of the
-corresponding MGRS square.)  The end of input, a blank line, or a line
-which can't be interpreted as a vertex signals the end of one polygon
-and the start of the next.  For each polygon print a summary line with
-the number of points, the perimeter (in meters), and the area (in
-meters^2).</p>
-<p>By default, polygons traversed in a counter-clockwise direction return a
-positive area and those traversed in a clockwise direction return a
-negative area.  This sign convention is reversed if the <strong>-r</strong> option is
-given.</p>
-<p>Of course, encircling an area in the clockwise direction is equivalent
-to encircling the rest of the ellipsoid in the counter-clockwise
-direction.  The default interpretation used by <strong>Planimeter</strong> is the one
-that results in a smaller magnitude of area; i.e., the magnitude of the
-area is less than or equal to one half the total area of the ellipsoid.
-If the <strong>-s</strong> option is given, then the interpretation used is the one
-that results in a positive area; i.e., the area is positive and less
-than the total area of the ellipsoid.</p>
-<p>Only simple polygons are supported for the area computation.  Polygons
-may include one or both poles.  There is no need to close the polygon.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
-
-<dd>
-<p>toggle whether counter-clockwise traversal of the polygon returns a
-positive (the default) or negative result.</p>
-</dd>
-<dt><strong><a name="s" class="item"><strong>-s</strong></a></strong></dt>
-
-<dd>
-<p>toggle whether to return a signed result (the default) or not.</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
-
-<dd>
-<p>toggle whether the vertices represent a polygon (the default) or a
-polyline.  For a polyline, the number of points and the length of the
-path joining them is returned; the path is not closed and the area is
-not reported.</p>
-</dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
-
-<dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.  If entering vertices as UTM/UPS or MGRS
-coordinates, use the default ellipsoid, since the conversion of these
-coordinates to latitude and longitude uses the WGS84 parameters.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing.  For a given polygon, the last such string found will be
-appended to the output line (separated by a space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<p>Example (the area of the 100km MGRS square 18SWK)</p>
-<pre>
-   Planimeter <<EOF
-   18N 500000 4400000
-   18N 600000 4400000
-   18N 600000 4500000
-   18N 500000 4500000
-   EOF
-   => 4 400139.53295860 10007388597.1913</pre>
-<p>The following code takes the output from gdalinfo and reports the area
-covered by the data (assuming the edges of the image are geodesics).</p>
-<pre>
-   #! /bin/sh
-   egrep '^((Upper|Lower) (Left|Right)|Center) ' |
-   sed -e 's/d /d/g' -e "s/' /'/g" | tr -s '(),\r\t' ' ' | awk '{
-       if ($1 $2 == "UpperLeft")
-           ul = $6 " " $5;
-       else if ($1 $2 == "LowerLeft")
-           ll = $6 " " $5;
-       else if ($1 $2 == "UpperRight")
-           ur = $6 " " $5;
-       else if ($1 $2 == "LowerRight")
-           lr = $6 " " $5;
-       else if ($1 == "Center") {
-           printf "%s\n%s\n%s\n%s\n\n", ul, ll, lr, ur;
-           ul = ll = ur = lr = "";
-       }
-   }
-   ' | Planimeter | cut -f3 -d' '</pre>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p><a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>.  The algorithm for the area of geodesic polygon is given
-in Section 15 of C. F. F. Karney, <em>Geodesics on an ellipsoid of
-revolution</em>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215">http://arxiv.org/abs/1102.1215</a>.  See
-also Section 6 of C. F. F. Karney, <em>Algorithms for geodesics</em>,
-Sept. 2011; preprint <a href="http://arxiv.org/abs/1109.4448">http://arxiv.org/abs/1109.4448</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>Planimeter</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>Planimeter</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in version 1.4.</p>
-
-</body>
-
-</html>
diff --git a/doc/html/Planimeter_8cpp.html b/doc/html/Planimeter_8cpp.html
deleted file mode 100644
index add05c6..0000000
--- a/doc/html/Planimeter_8cpp.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Planimeter.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">Planimeter.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for measuring the area of geodesic polygons.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="PolygonArea_8hpp_source.html">GeographicLib/PolygonArea.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include <<a class="el" href="GeoCoords_8hpp_source.html">GeographicLib/GeoCoords.hpp</a>></code><br/>
-<code>#include "Planimeter.usage"</code><br/>
-</div>
-<p><a href="Planimeter_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="Planimeter_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for measuring the area of geodesic polygons. </p>
-<p>Copyright (c) Charles Karney (2010-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o Planimeter \ <a class="el" href="Planimeter_8cpp.html" title="Command line utility for measuring the area of geodesic polygons.">Planimeter.cpp</a> \ ../src/DMS.cpp \ ../src/GeoCoords.cpp \ ../src/Geodesic.cpp \ ../src/GeodesicLine.cpp \ ../src/MGRS.cpp \ ../src/PolarStereographic.cpp \ ../src/PolygonArea.cpp \ ../src/TransverseMercator.cpp \ ../src/UTMUPS.cpp</p>
-<p>See the <a href="Planimeter.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="Planimeter_8cpp_source.html">Planimeter.cpp</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="Planimeter.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Planimeter_8cpp_source.html#l00037">37</a> of file <a class="el" href="Planimeter_8cpp_source.html">Planimeter.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00363">GeographicLib::Math::isnan()</a>, <a class="el" href="PolygonArea_8cpp_source.html#l00041">GeographicLib::PolygonArea::Compute()</a>, <a class="el" href="PolygonArea_8hpp_source.html#l00110">GeographicLib::PolygonArea::Clear()</a>, and <a class="el" href="PolygonArea_8cpp_source.html#l00023">GeographicLib::PolygonArea::AddPoint()</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Planimeter_8cpp_source.html b/doc/html/Planimeter_8cpp_source.html
deleted file mode 100644
index c0f7f90..0000000
--- a/doc/html/Planimeter_8cpp_source.html
+++ /dev/null
@@ -1,270 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Planimeter.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Planimeter.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Planimeter_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Planimeter.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for measuring the area of geodesic polygons</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o Planimeter \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       Planimeter.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/GeoCoords.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/Geodesic.cpp \</span>
-<a name="l00015"></a>00015 <span class="comment"> *       ../src/GeodesicLine.cpp \</span>
-<a name="l00016"></a>00016 <span class="comment"> *       ../src/MGRS.cpp \</span>
-<a name="l00017"></a>00017 <span class="comment"> *       ../src/PolarStereographic.cpp \</span>
-<a name="l00018"></a>00018 <span class="comment"> *       ../src/PolygonArea.cpp \</span>
-<a name="l00019"></a>00019 <span class="comment"> *       ../src/TransverseMercator.cpp \</span>
-<a name="l00020"></a>00020 <span class="comment"> *       ../src/UTMUPS.cpp</span>
-<a name="l00021"></a>00021 <span class="comment"> *</span>
-<a name="l00022"></a>00022 <span class="comment"> * See the <a href="Planimeter.1.html">man page</a> for usage</span>
-<a name="l00023"></a>00023 <span class="comment"> * information.</span>
-<a name="l00024"></a>00024 <span class="comment"> **********************************************************************/</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="preprocessor">#include <iostream></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <string></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <sstream></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <fstream></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="PolygonArea_8hpp.html" title="Header for GeographicLib::PolygonArea class.">GeographicLib/PolygonArea.hpp</a>></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <<a class="code" href="GeoCoords_8hpp.html" title="Header for GeographicLib::GeoCoords class.">GeographicLib/GeoCoords.hpp</a>></span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include "Planimeter.usage"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a><a class="code" href="Planimeter_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00037</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00038"></a>00038   <span class="keywordflow">try</span> {
-<a name="l00039"></a>00039     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00040"></a>00040     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00041"></a>00041     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00042"></a>00042       a = <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<real>(),
-<a name="l00043"></a>00043       f = Constants::WGS84_f<real>();
-<a name="l00044"></a>00044     <span class="keywordtype">bool</span> reverse = <span class="keyword">false</span>, sign = <span class="keyword">true</span>, polyline = <span class="keyword">false</span>;
-<a name="l00045"></a>00045     std::string istring, ifile, ofile, cdelim;
-<a name="l00046"></a>00046     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>;
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00049"></a>00049       std::string arg(argv[m]);
-<a name="l00050"></a>00050       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-r"</span>)
-<a name="l00051"></a>00051         reverse = !reverse;
-<a name="l00052"></a>00052       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-s"</span>)
-<a name="l00053"></a>00053         sign = !sign;
-<a name="l00054"></a>00054       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-l"</span>)
-<a name="l00055"></a>00055         polyline = !polyline;
-<a name="l00056"></a>00056       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-e"</span>) {
-<a name="l00057"></a>00057         <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00058"></a>00058         <span class="keywordflow">try</span> {
-<a name="l00059"></a>00059           a = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m + 1]));
-<a name="l00060"></a>00060           f = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(std::string(argv[m + 2]));
-<a name="l00061"></a>00061         }
-<a name="l00062"></a>00062         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00063"></a>00063           std::cerr << <span class="stringliteral">"Error decoding arguments of -e: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00064"></a>00064           <span class="keywordflow">return</span> 1;
-<a name="l00065"></a>00065         }
-<a name="l00066"></a>00066         m += 2;
-<a name="l00067"></a>00067       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00068"></a>00068         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00069"></a>00069         istring = argv[m];
-<a name="l00070"></a>00070       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00071"></a>00071         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00072"></a>00072         ifile = argv[m];
-<a name="l00073"></a>00073       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00074"></a>00074         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00075"></a>00075         ofile = argv[m];
-<a name="l00076"></a>00076       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00077"></a>00077         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00078"></a>00078         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00079"></a>00079           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00080"></a>00080           <span class="keywordflow">return</span> 1;
-<a name="l00081"></a>00081         }
-<a name="l00082"></a>00082         lsep = argv[m][0];
-<a name="l00083"></a>00083       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00084"></a>00084         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00085"></a>00085         cdelim = argv[m];
-<a name="l00086"></a>00086       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00087"></a>00087         std::cout
-<a name="l00088"></a>00088           << argv[0]
-<a name="l00089"></a>00089           << <span class="stringliteral">": $Id: dbb8a9a0d79f172256044e72f65ebc667801eeac $\n"</span>
-<a name="l00090"></a>00090           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00091"></a>00091         <span class="keywordflow">return</span> 0;
-<a name="l00092"></a>00092       } <span class="keywordflow">else</span>
-<a name="l00093"></a>00093         <span class="keywordflow">return</span> usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00094"></a>00094     }
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00097"></a>00097       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00098"></a>00098       <span class="keywordflow">return</span> 1;
-<a name="l00099"></a>00099     }
-<a name="l00100"></a>00100     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00101"></a>00101     std::ifstream infile;
-<a name="l00102"></a>00102     std::istringstream instring;
-<a name="l00103"></a>00103     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00104"></a>00104       infile.open(ifile.c_str());
-<a name="l00105"></a>00105       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00106"></a>00106         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00107"></a>00107         <span class="keywordflow">return</span> 1;
-<a name="l00108"></a>00108       }
-<a name="l00109"></a>00109     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00110"></a>00110       std::string::size_type m = 0;
-<a name="l00111"></a>00111       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00112"></a>00112         m = istring.find(lsep, m);
-<a name="l00113"></a>00113         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00114"></a>00114           <span class="keywordflow">break</span>;
-<a name="l00115"></a>00115         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00116"></a>00116       }
-<a name="l00117"></a>00117       instring.str(istring);
-<a name="l00118"></a>00118     }
-<a name="l00119"></a>00119     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00120"></a>00120       (!istring.empty() ? &instring : &std::cin);
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122     std::ofstream outfile;
-<a name="l00123"></a>00123     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00124"></a>00124     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00125"></a>00125       outfile.open(ofile.c_str());
-<a name="l00126"></a>00126       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00127"></a>00127         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00128"></a>00128         <span class="keywordflow">return</span> 1;
-<a name="l00129"></a>00129       }
-<a name="l00130"></a>00130     }
-<a name="l00131"></a>00131     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> geod(a, f);
-<a name="l00134"></a>00134     <a class="code" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">PolygonArea</a> poly(geod, polyline);
-<a name="l00135"></a>00135     <a class="code" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeoCoords</a> p;
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137     std::string s;
-<a name="l00138"></a>00138     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> perimeter, area;
-<a name="l00139"></a>00139     <span class="keywordtype">unsigned</span> num;
-<a name="l00140"></a>00140     std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00141"></a>00141     <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00142"></a>00142       <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00143"></a>00143         std::string::size_type m = s.find(cdelim);
-<a name="l00144"></a>00144         <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00145"></a>00145           eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00146"></a>00146           s = s.substr(0, m);
-<a name="l00147"></a>00147         }
-<a name="l00148"></a>00148       }
-<a name="l00149"></a>00149       <span class="keywordtype">bool</span> endpoly = s.empty();
-<a name="l00150"></a>00150       <span class="keywordflow">if</span> (!endpoly) {
-<a name="l00151"></a>00151         <span class="keywordflow">try</span> {
-<a name="l00152"></a>00152           p.Reset(s);
-<a name="l00153"></a>00153           <span class="keywordflow">if</span> (<a class="code" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">Math::isnan</a>(p.Latitude()) || <a class="code" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">Math::isnan</a>(p.Longitude()))
-<a name="l00154"></a>00154             endpoly = <span class="keyword">true</span>;
-<a name="l00155"></a>00155         }
-<a name="l00156"></a>00156         <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>&) {
-<a name="l00157"></a>00157           endpoly = <span class="keyword">true</span>;
-<a name="l00158"></a>00158         }
-<a name="l00159"></a>00159       }
-<a name="l00160"></a>00160       <span class="keywordflow">if</span> (endpoly) {
-<a name="l00161"></a>00161         num = poly.<a class="code" href="classGeographicLib_1_1PolygonArea.html#a60e1c288358818c849356c9921191215">Compute</a>(reverse, sign, perimeter, area);
-<a name="l00162"></a>00162         <span class="keywordflow">if</span> (num > 0) {
-<a name="l00163"></a>00163           *output << num << <span class="stringliteral">" "</span>
-<a name="l00164"></a>00164                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(perimeter, 8);
-<a name="l00165"></a>00165           <span class="keywordflow">if</span> (!polyline)
-<a name="l00166"></a>00166             *output << <span class="stringliteral">" "</span> << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(area, 3);
-<a name="l00167"></a>00167           *output << eol;
-<a name="l00168"></a>00168         }
-<a name="l00169"></a>00169         poly.<a class="code" href="classGeographicLib_1_1PolygonArea.html#a66198bec67036ad09aa58ec43166fe60">Clear</a>();
-<a name="l00170"></a>00170         eol = <span class="stringliteral">"\n"</span>;
-<a name="l00171"></a>00171       } <span class="keywordflow">else</span>
-<a name="l00172"></a>00172         poly.<a class="code" href="classGeographicLib_1_1PolygonArea.html#acfec56f0e136a534192e1e71589299f1">AddPoint</a>(p.Latitude(), p.Longitude());
-<a name="l00173"></a>00173     }
-<a name="l00174"></a>00174     num = poly.<a class="code" href="classGeographicLib_1_1PolygonArea.html#a60e1c288358818c849356c9921191215">Compute</a>(reverse, sign, perimeter, area);
-<a name="l00175"></a>00175     <span class="keywordflow">if</span> (num > 0) {
-<a name="l00176"></a>00176       *output << num << <span class="stringliteral">" "</span>
-<a name="l00177"></a>00177               << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(perimeter, 8);
-<a name="l00178"></a>00178       <span class="keywordflow">if</span> (!polyline)
-<a name="l00179"></a>00179         *output << <span class="stringliteral">" "</span> << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(area, 3);
-<a name="l00180"></a>00180       *output << eol;
-<a name="l00181"></a>00181     }
-<a name="l00182"></a>00182     poly.<a class="code" href="classGeographicLib_1_1PolygonArea.html#a66198bec67036ad09aa58ec43166fe60">Clear</a>();
-<a name="l00183"></a>00183     eol = <span class="stringliteral">"\n"</span>;
-<a name="l00184"></a>00184     <span class="keywordflow">return</span> 0;
-<a name="l00185"></a>00185   }
-<a name="l00186"></a>00186   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00187"></a>00187     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00188"></a>00188     <span class="keywordflow">return</span> 1;
-<a name="l00189"></a>00189   }
-<a name="l00190"></a>00190   <span class="keywordflow">catch</span> (...) {
-<a name="l00191"></a>00191     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00192"></a>00192     <span class="keywordflow">return</span> 1;
-<a name="l00193"></a>00193   }
-<a name="l00194"></a>00194 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/PolarStereographic_8cpp.html b/doc/html/PolarStereographic_8cpp.html
deleted file mode 100644
index 117622e..0000000
--- a/doc/html/PolarStereographic_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: PolarStereographic.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">PolarStereographic.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="PolarStereographic_8hpp_source.html">GeographicLib/PolarStereographic.hpp</a>></code><br/>
-</div>
-<p><a href="PolarStereographic_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="PolarStereographic_8cpp.html#a2887f1d8fd2633373698a2d1468befc2">GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP</a>   "$Id: 3a2dee07e6ef1c55ddcdc2178d818c8edd4d1cd4 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="PolarStereographic_8cpp_source.html">PolarStereographic.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a2887f1d8fd2633373698a2d1468befc2"></a><!-- doxytag: member="PolarStereographic.cpp::GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP" ref="a2887f1d8fd2633373698a2d1468befc2" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP   "$Id: 3a2dee07e6ef1c55ddcdc2178d818c8edd4d1cd4 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="PolarStereographic_8cpp_source.html#l00012">12</a> of file <a class="el" href="PolarStereographic_8cpp_source.html">PolarStereographic.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/PolarStereographic_8cpp_source.html b/doc/html/PolarStereographic_8cpp_source.html
deleted file mode 100644
index a15928e..0000000
--- a/doc/html/PolarStereographic_8cpp_source.html
+++ /dev/null
@@ -1,213 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: PolarStereographic.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">PolarStereographic.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="PolarStereographic_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file PolarStereographic.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::PolarStereographic class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="PolarStereographic_8hpp.html" title="Header for GeographicLib::PolarStereographic class.">GeographicLib/PolarStereographic.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="PolarStereographic_8cpp.html#a2887f1d8fd2633373698a2d1468befc2">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: 3a2dee07e6ef1c55ddcdc2178d818c8edd4d1cd4 $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="PolarStereographic_8cpp.html#a2887f1d8fd2633373698a2d1468befc2">GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="PolarStereographic_8hpp.html#a7450566a6ed1475dc10f7c0dc85f5dd9">GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> PolarStereographic::tol_ =
-<a name="l00023"></a>00023     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.1)*sqrt(numeric_limits<real>::epsilon());
-<a name="l00024"></a>00024   <span class="comment">// Overflow value s.t. atan(overflow_) = pi/2</span>
-<a name="l00025"></a>00025   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> PolarStereographic::overflow_ =
-<a name="l00026"></a>00026     1 / Math::sq(numeric_limits<real>::epsilon());
-<a name="l00027"></a>00027 
-<a name="l00028"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a170d21f9c7a2e922c57fc83a44ea3dfa">00028</a>   PolarStereographic::PolarStereographic(real a, real f, real k0)
-<a name="l00029"></a>00029     : _a(a)
-<a name="l00030"></a>00030     , _f(f <= 1 ? f : 1/f)
-<a name="l00031"></a>00031     , _e2(_f * (2 - _f))
-<a name="l00032"></a>00032     , _e(sqrt(abs(_e2)))
-<a name="l00033"></a>00033     , _e2m(1 - _e2)
-<a name="l00034"></a>00034     , _Cx(exp(eatanhe(real(1))))
-<a name="l00035"></a>00035     , _c( (1 - _f) * _Cx )
-<a name="l00036"></a>00036     , _k0(k0)
-<a name="l00037"></a>00037   {
-<a name="l00038"></a>00038     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00039"></a>00039       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00040"></a>00040     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f) && _f < 1))
-<a name="l00041"></a>00041       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00042"></a>00042     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_k0) && _k0 > 0))
-<a name="l00043"></a>00043       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00044"></a>00044   }
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">PolarStereographic</a>
-<a name="l00047"></a>00047   <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">PolarStereographic::UPS</a>(Constants::WGS84_a<real>(),
-<a name="l00048"></a>00048                           Constants::WGS84_f<real>(),
-<a name="l00049"></a>00049                           Constants::UPS_k0<real>());
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051   <span class="comment">// This formulation converts to conformal coordinates by tau = tan(phi) and</span>
-<a name="l00052"></a>00052   <span class="comment">// tau' = tan(phi') where phi' is the conformal latitude.  The formulas are:</span>
-<a name="l00053"></a>00053   <span class="comment">//    tau = tan(phi)</span>
-<a name="l00054"></a>00054   <span class="comment">//    secphi = hypot(1, tau)</span>
-<a name="l00055"></a>00055   <span class="comment">//    sig = sinh(e * atanh(e * tau / secphi))</span>
-<a name="l00056"></a>00056   <span class="comment">//    taup = tan(phip) = tau * hypot(1, sig) - sig * hypot(1, tau)</span>
-<a name="l00057"></a>00057   <span class="comment">//    c = (1 - f) * exp(e * atanh(e))</span>
-<a name="l00058"></a>00058   <span class="comment">//</span>
-<a name="l00059"></a>00059   <span class="comment">// Forward:</span>
-<a name="l00060"></a>00060   <span class="comment">//   rho = (2*k0*a/c) / (hypot(1, taup) + taup)  (taup >= 0)</span>
-<a name="l00061"></a>00061   <span class="comment">//       = (2*k0*a/c) * (hypot(1, taup) - taup)  (taup <  0)</span>
-<a name="l00062"></a>00062   <span class="comment">//</span>
-<a name="l00063"></a>00063   <span class="comment">// Reverse:</span>
-<a name="l00064"></a>00064   <span class="comment">//   taup = ((2*k0*a/c) / rho - rho / (2*k0*a/c))/2</span>
-<a name="l00065"></a>00065   <span class="comment">//</span>
-<a name="l00066"></a>00066   <span class="comment">// Scale:</span>
-<a name="l00067"></a>00067   <span class="comment">//   k = (rho/a) * secphi * sqrt((1-e2) + e2 / secphi^2)</span>
-<a name="l00068"></a>00068   <span class="comment">//</span>
-<a name="l00069"></a>00069   <span class="comment">// In limit rho -> 0, tau -> inf, taup -> inf, secphi -> inf, secphip -> inf</span>
-<a name="l00070"></a>00070   <span class="comment">//   secphip = taup = exp(-e * atanh(e)) * tau = exp(-e * atanh(e)) * secphi</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">00072</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">PolarStereographic::Forward</a>(<span class="keywordtype">bool</span> northp, real lat, real lon,
-<a name="l00073"></a>00073                                    real& x, real& y, real& gamma, real& k)
-<a name="l00074"></a>00074     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00075"></a>00075     lat *= northp ? 1 : -1;
-<a name="l00076"></a>00076     real
-<a name="l00077"></a>00077       phi = lat * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00078"></a>00078       tau = lat != -90 ? tanx(phi) : -overflow_,
-<a name="l00079"></a>00079       secphi = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), tau),
-<a name="l00080"></a>00080       sig = sinh( eatanhe(tau / secphi) ),
-<a name="l00081"></a>00081       taup = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), sig) * tau - sig * secphi,
-<a name="l00082"></a>00082       rho = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), taup) + abs(taup);
-<a name="l00083"></a>00083     rho = taup >= 0 ? (lat != 90 ? 1/rho : 0) : rho;
-<a name="l00084"></a>00084     rho *= 2 * _k0 * _a / _c;
-<a name="l00085"></a>00085     k = lat != 90 ? (rho / _a) * secphi * sqrt(_e2m + _e2 / <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(secphi)) :
-<a name="l00086"></a>00086       _k0;
-<a name="l00087"></a>00087     lon = lon >= 180 ? lon - 360 : (lon < -180 ? lon + 360 : lon);
-<a name="l00088"></a>00088     real
-<a name="l00089"></a>00089       lam = lon * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00090"></a>00090     x = rho * (lon == -180 ? 0 : sin(lam));
-<a name="l00091"></a>00091     y = (northp ? -rho : rho) * (abs(lon) == 90 ? 0 : cos(lam));
-<a name="l00092"></a>00092     gamma = northp ? lon : -lon;
-<a name="l00093"></a>00093   }
-<a name="l00094"></a>00094 
-<a name="l00095"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">00095</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">PolarStereographic::Reverse</a>(<span class="keywordtype">bool</span> northp, real x, real y,
-<a name="l00096"></a>00096                                    real& lat, real& lon, real& gamma, real& k)
-<a name="l00097"></a>00097     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00098"></a>00098     real
-<a name="l00099"></a>00099       rho = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(x, y),
-<a name="l00100"></a>00100       t = rho / (2 * _k0 * _a / _c),
-<a name="l00101"></a>00101       taup = (1 / t - t) / 2,
-<a name="l00102"></a>00102       tau = taup * _Cx,
-<a name="l00103"></a>00103       stol = tol_ * max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), abs(taup));
-<a name="l00104"></a>00104     <span class="comment">// min iterations = 1, max iterations = 2; mean = 1.99</span>
-<a name="l00105"></a>00105     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < numit_; ++i) {
-<a name="l00106"></a>00106       real
-<a name="l00107"></a>00107         tau1 = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), tau),
-<a name="l00108"></a>00108         sig = sinh( eatanhe( tau / tau1 ) ),
-<a name="l00109"></a>00109         taupa = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), sig) * tau - sig * tau1,
-<a name="l00110"></a>00110         dtau = (taup - taupa) * (1 + _e2m * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tau)) /
-<a name="l00111"></a>00111         ( _e2m * tau1 * <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), taupa) );
-<a name="l00112"></a>00112       tau += dtau;
-<a name="l00113"></a>00113       <span class="keywordflow">if</span> (!(abs(dtau) >= stol))
-<a name="l00114"></a>00114         <span class="keywordflow">break</span>;
-<a name="l00115"></a>00115     }
-<a name="l00116"></a>00116     real
-<a name="l00117"></a>00117       phi = atan(tau),
-<a name="l00118"></a>00118       secphi = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), tau);
-<a name="l00119"></a>00119     k = rho != 0 ?
-<a name="l00120"></a>00120       (rho / _a) * secphi * sqrt(_e2m + _e2 / <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(secphi)) : _k0;
-<a name="l00121"></a>00121     lat = (northp ? 1 : -1) * (rho != 0 ? phi / Math::degree<real>() : 90);
-<a name="l00122"></a>00122     lon = -atan2( -x, northp ? -y : y ) / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00123"></a>00123     gamma = northp ? lon : -lon;
-<a name="l00124"></a>00124   }
-<a name="l00125"></a>00125 
-<a name="l00126"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a3f957214eb1d1248277a680e4c4ceed5">00126</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a3f957214eb1d1248277a680e4c4ceed5">PolarStereographic::SetScale</a>(real lat, real k) {
-<a name="l00127"></a>00127     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(k) && k > 0))
-<a name="l00128"></a>00128       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00129"></a>00129     <span class="keywordflow">if</span> (!(-90 < lat && lat <= 90))
-<a name="l00130"></a>00130       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude must be in (-90d, 90d]"</span>);
-<a name="l00131"></a>00131     real x, y, gamma, kold;
-<a name="l00132"></a>00132     _k0 = 1;
-<a name="l00133"></a>00133     <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">Forward</a>(<span class="keyword">true</span>, lat, 0, x, y, gamma, kold);
-<a name="l00134"></a>00134     _k0 *= k/kold;
-<a name="l00135"></a>00135   }
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/PolarStereographic_8hpp.html b/doc/html/PolarStereographic_8hpp.html
deleted file mode 100644
index e1e18d7..0000000
--- a/doc/html/PolarStereographic_8hpp.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: PolarStereographic.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">PolarStereographic.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="PolarStereographic_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Polar Stereographic Projection.  <a href="classGeographicLib_1_1PolarStereographic.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="PolarStereographic_8hpp.html#a7450566a6ed1475dc10f7c0dc85f5dd9">GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP</a>   "$Id: 07add8492c46e42012007a8738060abc902a5504 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="PolarStereographic_8hpp_source.html">PolarStereographic.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a7450566a6ed1475dc10f7c0dc85f5dd9"></a><!-- doxytag: member="PolarStereographic.hpp::GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP" ref="a7450566a6ed1475dc10f7c0dc85f5dd9" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP   "$Id: 07add8492c46e42012007a8738060abc902a5504 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="PolarStereographic_8hpp_source.html#l00011">11</a> of file <a class="el" href="PolarStereographic_8hpp_source.html">PolarStereographic.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/PolarStereographic_8hpp_source.html b/doc/html/PolarStereographic_8hpp_source.html
deleted file mode 100644
index 00a4664..0000000
--- a/doc/html/PolarStereographic_8hpp_source.html
+++ /dev/null
@@ -1,254 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: PolarStereographic.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">PolarStereographic.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="PolarStereographic_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file PolarStereographic.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::PolarStereographic class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP)</span>
-<a name="l00011"></a><a class="code" href="PolarStereographic_8hpp.html#a7450566a6ed1475dc10f7c0dc85f5dd9">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 07add8492c46e42012007a8738060abc902a5504 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 
-<a name="l00016"></a>00016 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00017"></a>00017 <span class="comment"></span>
-<a name="l00018"></a>00018 <span class="comment">  /**</span>
-<a name="l00019"></a>00019 <span class="comment">   * \brief Polar Stereographic Projection</span>
-<a name="l00020"></a>00020 <span class="comment">   *</span>
-<a name="l00021"></a>00021 <span class="comment">   * Implementation taken from the report,</span>
-<a name="l00022"></a>00022 <span class="comment">   * - J. P. Snyder,</span>
-<a name="l00023"></a>00023 <span class="comment">   *   <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"> Map Projections: A</span>
-<a name="l00024"></a>00024 <span class="comment">   *   Working Manual</a>, USGS Professional Paper 1395 (1987),</span>
-<a name="l00025"></a>00025 <span class="comment">   *   pp. 160&ndash;163.</span>
-<a name="l00026"></a>00026 <span class="comment">   *</span>
-<a name="l00027"></a>00027 <span class="comment">   * This is a straightforward implementation of the equations in Snyder except</span>
-<a name="l00028"></a>00028 <span class="comment">   * that Newton's method is used to invert the projection.</span>
-<a name="l00029"></a>00029 <span class="comment">   *</span>
-<a name="l00030"></a>00030 <span class="comment">   * Example of use:</span>
-<a name="l00031"></a>00031 <span class="comment">   * \include example-PolarStereographic.cpp</span>
-<a name="l00032"></a>00032 <span class="comment">   **********************************************************************/</span>
-<a name="l00033"></a>00033   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> PolarStereographic {
-<a name="l00034"></a>00034   <span class="keyword">private</span>:
-<a name="l00035"></a>00035     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00036"></a>00036     <span class="comment">// _Cx used to be _C but g++ 3.4 has a macro of that name</span>
-<a name="l00037"></a>00037     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _f, _e2, _e, _e2m, _Cx, _c;
-<a name="l00038"></a>00038     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _k0;
-<a name="l00039"></a>00039     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tol_;
-<a name="l00040"></a>00040     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> overflow_;
-<a name="l00041"></a>00041     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numit_ = 5;
-<a name="l00042"></a>00042     <span class="comment">// tan(x) for x in [-pi/2, pi/2] ensuring that the sign is right</span>
-<a name="l00043"></a>00043     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tanx(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() {
-<a name="l00044"></a>00044       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = std::tan(x);
-<a name="l00045"></a>00045       <span class="comment">// Write the tests this way to ensure that tanx(NaN()) is NaN()</span>
-<a name="l00046"></a>00046       <span class="keywordflow">return</span> x >= 0 ? (!(t < 0) ? t : overflow_) : (!(t >= 0) ? t : -overflow_);
-<a name="l00047"></a>00047     }
-<a name="l00048"></a>00048     <span class="comment">// Return e * atanh(e * x) for f >= 0, else return</span>
-<a name="l00049"></a>00049     <span class="comment">// - sqrt(-e2) * atan( sqrt(-e2) * x) for f < 0</span>
-<a name="l00050"></a>00050     <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eatanhe(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00051"></a>00051       <span class="keywordflow">return</span> _f >= 0 ? _e * <a class="code" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">Math::atanh</a>(_e * x) : - _e * std::atan(_e * x);
-<a name="l00052"></a>00052     }
-<a name="l00053"></a>00053   <span class="keyword">public</span>:
-<a name="l00054"></a>00054 <span class="comment"></span>
-<a name="l00055"></a>00055 <span class="comment">    /**</span>
-<a name="l00056"></a>00056 <span class="comment">     * Constructor for a ellipsoid with</span>
-<a name="l00057"></a>00057 <span class="comment">     *</span>
-<a name="l00058"></a>00058 <span class="comment">     * @param[in] a equatorial radius (meters).</span>
-<a name="l00059"></a>00059 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00060"></a>00060 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00061"></a>00061 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00062"></a>00062 <span class="comment">     * @param[in] k0 central scale factor.</span>
-<a name="l00063"></a>00063 <span class="comment">     *</span>
-<a name="l00064"></a>00064 <span class="comment">     * An exception is thrown if either of the axes of the ellipsoid is</span>
-<a name="l00065"></a>00065 <span class="comment">     * not positive \e a or if \e k0 is not positive.</span>
-<a name="l00066"></a>00066 <span class="comment">     **********************************************************************/</span>
-<a name="l00067"></a>00067     PolarStereographic(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k0);
-<a name="l00068"></a>00068 <span class="comment"></span>
-<a name="l00069"></a>00069 <span class="comment">    /**</span>
-<a name="l00070"></a>00070 <span class="comment">     * Set the scale for the projection.</span>
-<a name="l00071"></a>00071 <span class="comment">     *</span>
-<a name="l00072"></a>00072 <span class="comment">     * @param[in] lat (degrees) assuming \e northp = true.</span>
-<a name="l00073"></a>00073 <span class="comment">     * @param[in] k scale at latitude \e lat (default 1).</span>
-<a name="l00074"></a>00074 <span class="comment">     *</span>
-<a name="l00075"></a>00075 <span class="comment">     * This allows a "latitude of true scale" to be specified.  An exception is</span>
-<a name="l00076"></a>00076 <span class="comment">     * thrown if \e k is not positive or if \e lat is not in the range (-90,</span>
-<a name="l00077"></a>00077 <span class="comment">     * 90].</span>
-<a name="l00078"></a>00078 <span class="comment">     **********************************************************************/</span>
-<a name="l00079"></a>00079     <span class="keywordtype">void</span> SetScale(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1));
-<a name="l00080"></a>00080 <span class="comment"></span>
-<a name="l00081"></a>00081 <span class="comment">    /**</span>
-<a name="l00082"></a>00082 <span class="comment">     * Forward projection, from geographic to polar stereographic.</span>
-<a name="l00083"></a>00083 <span class="comment">     *</span>
-<a name="l00084"></a>00084 <span class="comment">     * @param[in] northp the pole which is the center of projection (true means</span>
-<a name="l00085"></a>00085 <span class="comment">     *   north, false means south).</span>
-<a name="l00086"></a>00086 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00087"></a>00087 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00088"></a>00088 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00089"></a>00089 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00090"></a>00090 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00091"></a>00091 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00092"></a>00092 <span class="comment">     *</span>
-<a name="l00093"></a>00093 <span class="comment">     * No false easting or northing is added.  \e lat should be in the range</span>
-<a name="l00094"></a>00094 <span class="comment">     * (-90, 90] for \e northp = true and in the range [-90, 90) for \e northp</span>
-<a name="l00095"></a>00095 <span class="comment">     * = false; \e lon should be in the range [-180, 360].</span>
-<a name="l00096"></a>00096 <span class="comment">     **********************************************************************/</span>
-<a name="l00097"></a>00097     <span class="keywordtype">void</span> Forward(<span class="keywordtype">bool</span> northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon,
-<a name="l00098"></a>00098                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00099"></a>00099 <span class="comment"></span>
-<a name="l00100"></a>00100 <span class="comment">    /**</span>
-<a name="l00101"></a>00101 <span class="comment">     * Reverse projection, from polar stereographic to geographic.</span>
-<a name="l00102"></a>00102 <span class="comment">     *</span>
-<a name="l00103"></a>00103 <span class="comment">     * @param[in] northp the pole which is the center of projection (true means</span>
-<a name="l00104"></a>00104 <span class="comment">     *   north, false means south).</span>
-<a name="l00105"></a>00105 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00106"></a>00106 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00107"></a>00107 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00108"></a>00108 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00109"></a>00109 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00110"></a>00110 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00111"></a>00111 <span class="comment">     *</span>
-<a name="l00112"></a>00112 <span class="comment">     * No false easting or northing is added.  The value of \e lon returned is</span>
-<a name="l00113"></a>00113 <span class="comment">     * in the range [-180, 180).</span>
-<a name="l00114"></a>00114 <span class="comment">     **********************************************************************/</span>
-<a name="l00115"></a>00115     <span class="keywordtype">void</span> Reverse(<span class="keywordtype">bool</span> northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00116"></a>00116                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00117"></a>00117 <span class="comment"></span>
-<a name="l00118"></a>00118 <span class="comment">    /**</span>
-<a name="l00119"></a>00119 <span class="comment">     * PolarStereographic::Forward without returning the convergence and scale.</span>
-<a name="l00120"></a>00120 <span class="comment">     **********************************************************************/</span>
-<a name="l00121"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#ac2fe4c9524ec35f8d05336555f96e1b1">00121</a>     <span class="keywordtype">void</span> Forward(<span class="keywordtype">bool</span> northp, real lat, real lon,
-<a name="l00122"></a>00122                  real& x, real& y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00123"></a>00123       real gamma, k;
-<a name="l00124"></a>00124       Forward(northp, lat, lon, x, y, gamma, k);
-<a name="l00125"></a>00125     }
-<a name="l00126"></a>00126 <span class="comment"></span>
-<a name="l00127"></a>00127 <span class="comment">    /**</span>
-<a name="l00128"></a>00128 <span class="comment">     * PolarStereographic::Reverse without returning the convergence and scale.</span>
-<a name="l00129"></a>00129 <span class="comment">     **********************************************************************/</span>
-<a name="l00130"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a16572cc552eeb24ebf84319cdcd6652e">00130</a>     <span class="keywordtype">void</span> Reverse(<span class="keywordtype">bool</span> northp, real x, real y,
-<a name="l00131"></a>00131                  real& lat, real& lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00132"></a>00132       real gamma, k;
-<a name="l00133"></a>00133       Reverse(northp, x, y, lat, lon, gamma, k);
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135 <span class="comment"></span>
-<a name="l00136"></a>00136 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00137"></a>00137 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00138"></a>00138 <span class="comment">    ///@{</span>
-<a name="l00139"></a>00139 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00140"></a>00140 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00141"></a>00141 <span class="comment">     *   the value used in the constructor.</span>
-<a name="l00142"></a>00142 <span class="comment">     **********************************************************************/</span>
-<a name="l00143"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#ab1746576356a2409f34d9527064adfdd">00143</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1PolarStereographic.html#ab1746576356a2409f34d9527064adfdd">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a; }
-<a name="l00144"></a>00144 <span class="comment"></span>
-<a name="l00145"></a>00145 <span class="comment">    /**</span>
-<a name="l00146"></a>00146 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value used in</span>
-<a name="l00147"></a>00147 <span class="comment">     *   the constructor.</span>
-<a name="l00148"></a>00148 <span class="comment">     **********************************************************************/</span>
-<a name="l00149"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a3b08d03e475dae2c2a81c76420946942">00149</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a3b08d03e475dae2c2a81c76420946942">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _f; }
-<a name="l00150"></a>00150 <span class="comment"></span>
-<a name="l00151"></a>00151 <span class="comment">    /// \cond SKIP</span>
-<a name="l00152"></a>00152 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00153"></a>00153 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00154"></a>00154 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00155"></a>00155 <span class="comment">     **********************************************************************/</span>
-<a name="l00156"></a>00156     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> 1/_f; }<span class="comment"></span>
-<a name="l00157"></a>00157 <span class="comment">    /// \endcond</span>
-<a name="l00158"></a>00158 <span class="comment"></span><span class="comment"></span>
-<a name="l00159"></a>00159 <span class="comment">    /**</span>
-<a name="l00160"></a>00160 <span class="comment">     * The central scale for the projection.  This is the value of \e k0 used</span>
-<a name="l00161"></a>00161 <span class="comment">     * in the constructor and is the scale at the pole unless overridden by</span>
-<a name="l00162"></a>00162 <span class="comment">     * PolarStereographic::SetScale.</span>
-<a name="l00163"></a>00163 <span class="comment">     **********************************************************************/</span>
-<a name="l00164"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#ad6f7bd8a35208d91706ac8c258387e6f">00164</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1PolarStereographic.html#ad6f7bd8a35208d91706ac8c258387e6f">CentralScale</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _k0; }<span class="co [...]
-<a name="l00165"></a>00165 <span class="comment">    ///@}</span>
-<a name="l00166"></a>00166 <span class="comment"></span><span class="comment"></span>
-<a name="l00167"></a>00167 <span class="comment">    /**</span>
-<a name="l00168"></a>00168 <span class="comment">     * A global instantiation of PolarStereographic with the WGS84 ellipsoid</span>
-<a name="l00169"></a>00169 <span class="comment">     * and the UPS scale factor.  However, unlike UPS, no false easting or</span>
-<a name="l00170"></a>00170 <span class="comment">     * northing is added.</span>
-<a name="l00171"></a>00171 <span class="comment">     **********************************************************************/</span>
-<a name="l00172"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">00172</a>     <span class="keyword">static</span> <span class="keyword">const</span> PolarStereographic <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">UPS</a>;
-<a name="l00173"></a>00173   };
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 <span class="preprocessor">#endif  // GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/PolygonArea_8cpp.html b/doc/html/PolygonArea_8cpp.html
deleted file mode 100644
index 3c89aea..0000000
--- a/doc/html/PolygonArea_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: PolygonArea.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">PolygonArea.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="PolygonArea_8hpp_source.html">GeographicLib/PolygonArea.hpp</a>></code><br/>
-</div>
-<p><a href="PolygonArea_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="PolygonArea_8cpp.html#adda27aeacbbca888326b0f4cd9577254">GEOGRAPHICLIB_POLYGONAREA_CPP</a>   "$Id: ae2fce0b24653309ca8835d962b1a3e047a6768a $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="PolygonArea_8cpp_source.html">PolygonArea.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="adda27aeacbbca888326b0f4cd9577254"></a><!-- doxytag: member="PolygonArea.cpp::GEOGRAPHICLIB_POLYGONAREA_CPP" ref="adda27aeacbbca888326b0f4cd9577254" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_POLYGONAREA_CPP   "$Id: ae2fce0b24653309ca8835d962b1a3e047a6768a $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="PolygonArea_8cpp_source.html#l00012">12</a> of file <a class="el" href="PolygonArea_8cpp_source.html">PolygonArea.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/PolygonArea_8cpp_source.html b/doc/html/PolygonArea_8cpp_source.html
deleted file mode 100644
index b179ec9..0000000
--- a/doc/html/PolygonArea_8cpp_source.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: PolygonArea.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">PolygonArea.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="PolygonArea_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file PolygonArea.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::PolygonArea class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="PolygonArea_8hpp.html" title="Header for GeographicLib::PolygonArea class.">GeographicLib/PolygonArea.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="PolygonArea_8cpp.html#adda27aeacbbca888326b0f4cd9577254">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_POLYGONAREA_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: ae2fce0b24653309ca8835d962b1a3e047a6768a $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="PolygonArea_8cpp.html#adda27aeacbbca888326b0f4cd9577254">GEOGRAPHICLIB_POLYGONAREA_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="PolygonArea_8hpp.html#a284051319ec399ec9363ace180fc1203">GEOGRAPHICLIB_POLYGONAREA_HPP</a>)
-<a name="l00017"></a>00017 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Accumulator_8hpp.html#af2ea0de968b20eb37534fa6baedcba54">GEOGRAPHICLIB_ACCUMULATOR_HPP</a>)
-<a name="l00018"></a>00018 
-<a name="l00019"></a>00019 namespace GeographicLib {
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021   <span class="keyword">using namespace </span>std;
-<a name="l00022"></a>00022 
-<a name="l00023"></a><a class="code" href="classGeographicLib_1_1PolygonArea.html#acfec56f0e136a534192e1e71589299f1">00023</a>   <span class="keywordtype">void</span> PolygonArea::AddPoint(real lat, real lon) <span class="keywordflow">throw</span>() {
-<a name="l00024"></a>00024     <span class="keywordflow">if</span> (_num == 0) {
-<a name="l00025"></a>00025       _lat0 = _lat1 = lat;
-<a name="l00026"></a>00026       _lon0 = _lon1 = lon;
-<a name="l00027"></a>00027     } <span class="keywordflow">else</span> {
-<a name="l00028"></a>00028       real s12, S12, t;
-<a name="l00029"></a>00029       _earth.GenInverse(_lat1, _lon1, lat, lon, _mask, s12, t, t, t, t, t, S12);
-<a name="l00030"></a>00030       _perimetersum += s12;
-<a name="l00031"></a>00031       <span class="keywordflow">if</span> (!_polyline) {
-<a name="l00032"></a>00032         _areasum += S12;
-<a name="l00033"></a>00033         _crossings += transit(_lon1, lon);
-<a name="l00034"></a>00034       }
-<a name="l00035"></a>00035       _lat1 = lat;
-<a name="l00036"></a>00036       _lon1 = lon;
-<a name="l00037"></a>00037     }
-<a name="l00038"></a>00038     ++_num;
-<a name="l00039"></a>00039   }
-<a name="l00040"></a>00040 
-<a name="l00041"></a><a class="code" href="classGeographicLib_1_1PolygonArea.html#a60e1c288358818c849356c9921191215">00041</a>   <span class="keywordtype">unsigned</span> PolygonArea::Compute(<span class="keywordtype">bool</span> reverse, <span class="keywordtype">bool</span> sign,
-<a name="l00042"></a>00042                                 real& perimeter, real& area) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00043"></a>00043     real s12, S12, t;
-<a name="l00044"></a>00044     <span class="keywordflow">if</span> (_num < 2) {
-<a name="l00045"></a>00045       perimeter = 0;
-<a name="l00046"></a>00046       <span class="keywordflow">if</span> (!_polyline)
-<a name="l00047"></a>00047         area = 0;
-<a name="l00048"></a>00048       <span class="keywordflow">return</span> _num;
-<a name="l00049"></a>00049     }
-<a name="l00050"></a>00050     <span class="keywordflow">if</span> (_polyline) {
-<a name="l00051"></a>00051       perimeter = _perimetersum();
-<a name="l00052"></a>00052       <span class="keywordflow">return</span> _num;
-<a name="l00053"></a>00053     }
-<a name="l00054"></a>00054     _earth.GenInverse(_lat1, _lon1, _lat0, _lon0, _mask,
-<a name="l00055"></a>00055                       s12, t, t, t, t, t, S12);
-<a name="l00056"></a>00056     perimeter = _perimetersum(s12);
-<a name="l00057"></a>00057     <a class="code" href="classGeographicLib_1_1Accumulator.html">Accumulator<real></a> tempsum(_areasum);
-<a name="l00058"></a>00058     tempsum += S12;
-<a name="l00059"></a>00059     <span class="keywordtype">int</span> crossings = _crossings + transit(_lon1, _lon0);
-<a name="l00060"></a>00060     <span class="keywordflow">if</span> (crossings & 1)
-<a name="l00061"></a>00061       tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
-<a name="l00062"></a>00062     <span class="comment">// area is with the clockwise sense.  If !reverse convert to</span>
-<a name="l00063"></a>00063     <span class="comment">// counter-clockwise convention.</span>
-<a name="l00064"></a>00064     <span class="keywordflow">if</span> (!reverse)
-<a name="l00065"></a>00065       tempsum *= -1;
-<a name="l00066"></a>00066     <span class="comment">// If sign put area in (-area0/2, area0/2], else put area in [0, area0)</span>
-<a name="l00067"></a>00067     <span class="keywordflow">if</span> (sign) {
-<a name="l00068"></a>00068       <span class="keywordflow">if</span> (tempsum > _area0/2)
-<a name="l00069"></a>00069         tempsum -= _area0;
-<a name="l00070"></a>00070       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tempsum <= -_area0/2)
-<a name="l00071"></a>00071         tempsum += _area0;
-<a name="l00072"></a>00072     } <span class="keywordflow">else</span> {
-<a name="l00073"></a>00073       <span class="keywordflow">if</span> (tempsum >= _area0)
-<a name="l00074"></a>00074         tempsum -= _area0;
-<a name="l00075"></a>00075       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tempsum < 0)
-<a name="l00076"></a>00076         tempsum += _area0;
-<a name="l00077"></a>00077     }
-<a name="l00078"></a>00078     area = 0 + tempsum();
-<a name="l00079"></a>00079     <span class="keywordflow">return</span> _num;
-<a name="l00080"></a>00080   }
-<a name="l00081"></a>00081 
-<a name="l00082"></a><a class="code" href="classGeographicLib_1_1PolygonArea.html#ac46ac5567223b3db2ee11e6c4f72c257">00082</a>   <span class="keywordtype">unsigned</span> PolygonArea::TestCompute(real lat, real lon, <span class="keywordtype">bool</span> reverse, <span class="keywordtype">bool</span> sign,
-<a name="l00083"></a>00083                                     real& perimeter, real& area) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00084"></a>00084     <span class="keywordflow">if</span> (_num == 0) {
-<a name="l00085"></a>00085       perimeter = 0;
-<a name="l00086"></a>00086       <span class="keywordflow">if</span> (!_polyline)
-<a name="l00087"></a>00087         area = 0;
-<a name="l00088"></a>00088       <span class="keywordflow">return</span> 1;
-<a name="l00089"></a>00089     }
-<a name="l00090"></a>00090     perimeter = _perimetersum();
-<a name="l00091"></a>00091     real tempsum = _polyline ? 0 : _areasum();
-<a name="l00092"></a>00092     <span class="keywordtype">int</span> crossings = _crossings, num = _num + 1;
-<a name="l00093"></a>00093     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < (_polyline ? 1 : 2); ++i) {
-<a name="l00094"></a>00094       real s12, S12, t;
-<a name="l00095"></a>00095       _earth.GenInverse(i == 0 ? _lat1 : lat, i == 0 ? _lon1 : lon,
-<a name="l00096"></a>00096                         i != 0 ? _lat0 : lat, i != 0 ? _lon0 : lon,
-<a name="l00097"></a>00097                         _mask, s12, t, t, t, t, t, S12);
-<a name="l00098"></a>00098       perimeter += s12;
-<a name="l00099"></a>00099       <span class="keywordflow">if</span> (!_polyline) {
-<a name="l00100"></a>00100         tempsum += S12;
-<a name="l00101"></a>00101         crossings += transit(i == 0 ? _lon1 : lon,
-<a name="l00102"></a>00102                              i != 0 ? _lon0 : lon);
-<a name="l00103"></a>00103       }
-<a name="l00104"></a>00104     }
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <span class="keywordflow">if</span> (_polyline)
-<a name="l00107"></a>00107       <span class="keywordflow">return</span> num;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109     <span class="keywordflow">if</span> (crossings & 1)
-<a name="l00110"></a>00110       tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
-<a name="l00111"></a>00111     <span class="comment">// area is with the clockwise sense.  If !reverse convert to</span>
-<a name="l00112"></a>00112     <span class="comment">// counter-clockwise convention.</span>
-<a name="l00113"></a>00113     <span class="keywordflow">if</span> (!reverse)
-<a name="l00114"></a>00114       tempsum *= -1;
-<a name="l00115"></a>00115     <span class="comment">// If sign put area in (-area0/2, area0/2], else put area in [0, area0)</span>
-<a name="l00116"></a>00116     <span class="keywordflow">if</span> (sign) {
-<a name="l00117"></a>00117       <span class="keywordflow">if</span> (tempsum > _area0/2)
-<a name="l00118"></a>00118         tempsum -= _area0;
-<a name="l00119"></a>00119       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tempsum <= -_area0/2)
-<a name="l00120"></a>00120         tempsum += _area0;
-<a name="l00121"></a>00121     } <span class="keywordflow">else</span> {
-<a name="l00122"></a>00122       <span class="keywordflow">if</span> (tempsum >= _area0)
-<a name="l00123"></a>00123         tempsum -= _area0;
-<a name="l00124"></a>00124       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tempsum < 0)
-<a name="l00125"></a>00125         tempsum += _area0;
-<a name="l00126"></a>00126     }
-<a name="l00127"></a>00127     area = 0 + tempsum;
-<a name="l00128"></a>00128     <span class="keywordflow">return</span> num;
-<a name="l00129"></a>00129   }
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/PolygonArea_8hpp.html b/doc/html/PolygonArea_8hpp.html
deleted file mode 100644
index 1d29700..0000000
--- a/doc/html/PolygonArea_8hpp.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: PolygonArea.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">PolygonArea.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Geodesic_8hpp_source.html">GeographicLib/Geodesic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Accumulator_8hpp_source.html">GeographicLib/Accumulator.hpp</a>></code><br/>
-</div>
-<p><a href="PolygonArea_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Polygon Areas.  <a href="classGeographicLib_1_1PolygonArea.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="PolygonArea_8hpp.html#a284051319ec399ec9363ace180fc1203">GEOGRAPHICLIB_POLYGONAREA_HPP</a>   "$Id: 7a339f312a9c977b9fccad3c0c8bfa9009d863e2 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a> class. </p>
-<p>Copyright (c) Charles Karney (2010, 2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="PolygonArea_8hpp_source.html">PolygonArea.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a284051319ec399ec9363ace180fc1203"></a><!-- doxytag: member="PolygonArea.hpp::GEOGRAPHICLIB_POLYGONAREA_HPP" ref="a284051319ec399ec9363ace180fc1203" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_POLYGONAREA_HPP   "$Id: 7a339f312a9c977b9fccad3c0c8bfa9009d863e2 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="PolygonArea_8hpp_source.html#l00011">11</a> of file <a class="el" href="PolygonArea_8hpp_source.html">PolygonArea.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/PolygonArea_8hpp_source.html b/doc/html/PolygonArea_8hpp_source.html
deleted file mode 100644
index 8d17b8a..0000000
--- a/doc/html/PolygonArea_8hpp_source.html
+++ /dev/null
@@ -1,270 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: PolygonArea.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">PolygonArea.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="PolygonArea_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file PolygonArea.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::PolygonArea class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_POLYGONAREA_HPP)</span>
-<a name="l00011"></a><a class="code" href="PolygonArea_8hpp.html#a284051319ec399ec9363ace180fc1203">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_POLYGONAREA_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 7a339f312a9c977b9fccad3c0c8bfa9009d863e2 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="Accumulator_8hpp.html" title="Header for GeographicLib::Accumulator class.">GeographicLib/Accumulator.hpp</a>></span>
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00019"></a>00019 <span class="comment"></span>
-<a name="l00020"></a>00020 <span class="comment">  /**</span>
-<a name="l00021"></a>00021 <span class="comment">   * \brief Polygon Areas.</span>
-<a name="l00022"></a>00022 <span class="comment">   *</span>
-<a name="l00023"></a>00023 <span class="comment">   * This computes the area of a geodesic polygon using the method given</span>
-<a name="l00024"></a>00024 <span class="comment">   * Section 15 of</span>
-<a name="l00025"></a>00025 <span class="comment">   * - C. F. F. Karney,</span>
-<a name="l00026"></a>00026 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics</span>
-<a name="l00027"></a>00027 <span class="comment">   *   on an ellipsoid of revolution</a>,</span>
-<a name="l00028"></a>00028 <span class="comment">   *   Feb. 2011;</span>
-<a name="l00029"></a>00029 <span class="comment">   *   preprint</span>
-<a name="l00030"></a>00030 <span class="comment">   *   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.</span>
-<a name="l00031"></a>00031 <span class="comment">   * .</span>
-<a name="l00032"></a>00032 <span class="comment">   * See also Section 6 of</span>
-<a name="l00033"></a>00033 <span class="comment">   * - C. F. F. Karney,</span>
-<a name="l00034"></a>00034 <span class="comment">   *   <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>,</span>
-<a name="l00035"></a>00035 <span class="comment">   *   Sept. 2011;</span>
-<a name="l00036"></a>00036 <span class="comment">   *   preprint</span>
-<a name="l00037"></a>00037 <span class="comment">   *   <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.</span>
-<a name="l00038"></a>00038 <span class="comment">   *</span>
-<a name="l00039"></a>00039 <span class="comment">   * This class lets you add vertices one at a time to the polygon.  The area</span>
-<a name="l00040"></a>00040 <span class="comment">   * and perimeter are accumulated in two times the standard floating point</span>
-<a name="l00041"></a>00041 <span class="comment">   * precision to guard against the loss of accuracy with many-sided polygons.</span>
-<a name="l00042"></a>00042 <span class="comment">   * At any point you can ask for the perimeter and area so far.  There's an</span>
-<a name="l00043"></a>00043 <span class="comment">   * option to treat the points as defining a polyline instead of a polygon; in</span>
-<a name="l00044"></a>00044 <span class="comment">   * that case, only the perimeter is computed.</span>
-<a name="l00045"></a>00045 <span class="comment">   *</span>
-<a name="l00046"></a>00046 <span class="comment">   * Example of use:</span>
-<a name="l00047"></a>00047 <span class="comment">   * \include example-PolygonArea.cpp</span>
-<a name="l00048"></a>00048 <span class="comment">   *</span>
-<a name="l00049"></a>00049 <span class="comment">   * <a href="Planimeter.1.html">Planimeter</a> is a command-line utility</span>
-<a name="l00050"></a>00050 <span class="comment">   * providing access to the functionality of PolygonArea.</span>
-<a name="l00051"></a>00051 <span class="comment">   **********************************************************************/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> PolygonArea {
-<a name="l00054"></a>00054   <span class="keyword">private</span>:
-<a name="l00055"></a>00055     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00056"></a>00056     Geodesic _earth;
-<a name="l00057"></a>00057     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _area0;                <span class="comment">// Full ellipsoid area</span>
-<a name="l00058"></a>00058     <span class="keywordtype">bool</span> _polyline;             <span class="comment">// Assume polyline (don't close and skip area)</span>
-<a name="l00059"></a>00059     <span class="keywordtype">unsigned</span> _mask;
-<a name="l00060"></a>00060     <span class="keywordtype">unsigned</span> _num;
-<a name="l00061"></a>00061     <span class="keywordtype">int</span> _crossings;
-<a name="l00062"></a>00062     Accumulator<real> _areasum, _perimetersum;
-<a name="l00063"></a>00063     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _lat0, _lon0, _lat1, _lon1;
-<a name="l00064"></a>00064     <span class="comment">// Copied from Geodesic class</span>
-<a name="l00065"></a>00065     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> AngNormalize(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() {
-<a name="l00066"></a>00066       <span class="comment">// Place angle in [-180, 180).  Assumes x is in [-540, 540).</span>
-<a name="l00067"></a>00067       <span class="comment">//</span>
-<a name="l00068"></a>00068       <span class="comment">// g++ 4.4.4 holds a temporary in an extended register causing an error</span>
-<a name="l00069"></a>00069       <span class="comment">// with the triangle 89,0.1;89,90.1;89,-179.9.  The volatile declaration</span>
-<a name="l00070"></a>00070       <span class="comment">// fixes this.  (The bug probably triggered because transit and</span>
-<a name="l00071"></a>00071       <span class="comment">// AngNormalize are inline functions.  So don't port this change over to</span>
-<a name="l00072"></a>00072       <span class="comment">// Geodesic.hpp.)</span>
-<a name="l00073"></a>00073       <span class="keyword">volatile</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y = x;
-<a name="l00074"></a>00074       <span class="keywordflow">return</span> y >= 180 ? y - 360 : (y < -180 ? y + 360 : y);
-<a name="l00075"></a>00075     }
-<a name="l00076"></a>00076     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> transit(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon2) {
-<a name="l00077"></a>00077       <span class="comment">// Return 1 or -1 if crossing prime meridian in east or west direction.</span>
-<a name="l00078"></a>00078       <span class="comment">// Otherwise return zero.</span>
-<a name="l00079"></a>00079       lon1 = AngNormalize(lon1);
-<a name="l00080"></a>00080       lon2 = AngNormalize(lon2);
-<a name="l00081"></a>00081       <span class="comment">// treat lon12 = -180 as an eastward geodesic, so convert to 180.</span>
-<a name="l00082"></a>00082       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon12 = -AngNormalize(lon1 - lon2); <span class="comment">// In (-180, 180]</span>
-<a name="l00083"></a>00083       <span class="keywordtype">int</span> cross =
-<a name="l00084"></a>00084         lon1 < 0 && lon2 >= 0 && lon12 > 0 ? 1 :
-<a name="l00085"></a>00085         (lon2 < 0 && lon1 >= 0 && lon12 < 0 ? -1 : 0);
-<a name="l00086"></a>00086       <span class="keywordflow">return</span> cross;
-<a name="l00087"></a>00087     }
-<a name="l00088"></a>00088   <span class="keyword">public</span>:
-<a name="l00089"></a>00089 <span class="comment"></span>
-<a name="l00090"></a>00090 <span class="comment">    /**</span>
-<a name="l00091"></a>00091 <span class="comment">     * Constructor for PolygonArea.</span>
-<a name="l00092"></a>00092 <span class="comment">     *</span>
-<a name="l00093"></a>00093 <span class="comment">     * @param[in] earth the Geodesic object to use for geodesic calculations.</span>
-<a name="l00094"></a>00094 <span class="comment">     *   By default this uses the WGS84 ellipsoid.</span>
-<a name="l00095"></a>00095 <span class="comment">     * @param[in] polyline if true that treat the points as defining a polyline</span>
-<a name="l00096"></a>00096 <span class="comment">     *   instead of a polygon (default = false).</span>
-<a name="l00097"></a>00097 <span class="comment">     **********************************************************************/</span>
-<a name="l00098"></a><a class="code" href="classGeographicLib_1_1PolygonArea.html#a060a1dc499bd079c62f62ed5cad929e5">00098</a>     PolygonArea(<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>& earth, <span class="keywordtype">bool</span> polyline = <span class="keyword">false</span>) throw()
-<a name="l00099"></a>00099       : _earth(earth)
-<a name="l00100"></a>00100       , _area0(_earth.EllipsoidArea())
-<a name="l00101"></a>00101       , _polyline(polyline)
-<a name="l00102"></a>00102       , _mask(<a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::DISTANCE | (_polyline ? 0 : <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::AREA))
-<a name="l00103"></a>00103     {
-<a name="l00104"></a>00104       Clear();
-<a name="l00105"></a>00105     }
-<a name="l00106"></a>00106 <span class="comment"></span>
-<a name="l00107"></a>00107 <span class="comment">    /**</span>
-<a name="l00108"></a>00108 <span class="comment">     * Clear PolygonArea, allowing a new polygon to be started.</span>
-<a name="l00109"></a>00109 <span class="comment">     **********************************************************************/</span>
-<a name="l00110"></a><a class="code" href="classGeographicLib_1_1PolygonArea.html#a66198bec67036ad09aa58ec43166fe60">00110</a>     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1PolygonArea.html#a66198bec67036ad09aa58ec43166fe60">Clear</a>() throw() {
-<a name="l00111"></a>00111       _num = 0;
-<a name="l00112"></a>00112       _crossings = 0;
-<a name="l00113"></a>00113       _areasum = 0;
-<a name="l00114"></a>00114       _perimetersum = 0;
-<a name="l00115"></a>00115       _lat0 = _lon0 = _lat1 = _lon1 = 0;
-<a name="l00116"></a>00116     }
-<a name="l00117"></a>00117 <span class="comment"></span>
-<a name="l00118"></a>00118 <span class="comment">    /**</span>
-<a name="l00119"></a>00119 <span class="comment">     * Add a point to the polygon or polyline.</span>
-<a name="l00120"></a>00120 <span class="comment">     *</span>
-<a name="l00121"></a>00121 <span class="comment">     * @param[in] lat the latitude of the point (degrees).</span>
-<a name="l00122"></a>00122 <span class="comment">     * @param[in] lon the latitude of the point (degrees).</span>
-<a name="l00123"></a>00123 <span class="comment">     *</span>
-<a name="l00124"></a>00124 <span class="comment">     * \e lat should be in the range [-90, 90] and \e lon should be in the</span>
-<a name="l00125"></a>00125 <span class="comment">     * range [-180, 360].</span>
-<a name="l00126"></a>00126 <span class="comment">     **********************************************************************/</span>
-<a name="l00127"></a>00127     <span class="keywordtype">void</span> AddPoint(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon) <span class="keywordflow">throw</span>();
-<a name="l00128"></a>00128 <span class="comment"></span>
-<a name="l00129"></a>00129 <span class="comment">    /**</span>
-<a name="l00130"></a>00130 <span class="comment">     * Return the results so far.</span>
-<a name="l00131"></a>00131 <span class="comment">     *</span>
-<a name="l00132"></a>00132 <span class="comment">     * @param[in] reverse if true then clockwise (instead of counter-clockwise)</span>
-<a name="l00133"></a>00133 <span class="comment">     *   traversal counts as a positive area.</span>
-<a name="l00134"></a>00134 <span class="comment">     * @param[in] sign if true then return a signed result for the area if</span>
-<a name="l00135"></a>00135 <span class="comment">     *   the polygon is traversed in the "wrong" direction instead of returning</span>
-<a name="l00136"></a>00136 <span class="comment">     *   the area for the rest of the earth.</span>
-<a name="l00137"></a>00137 <span class="comment">     * @param[out] perimeter the perimeter of the polygon or length of the</span>
-<a name="l00138"></a>00138 <span class="comment">     *   polyline (meters).</span>
-<a name="l00139"></a>00139 <span class="comment">     * @param[out] area the area of the polygon (meters^2); only set if</span>
-<a name="l00140"></a>00140 <span class="comment">     *   polyline is false in the constructor.</span>
-<a name="l00141"></a>00141 <span class="comment">     * @return the number of points.</span>
-<a name="l00142"></a>00142 <span class="comment">     **********************************************************************/</span>
-<a name="l00143"></a>00143     <span class="keywordtype">unsigned</span> Compute(<span class="keywordtype">bool</span> reverse, <span class="keywordtype">bool</span> sign,
-<a name="l00144"></a>00144                      <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& perimeter, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& area) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00145"></a>00145 <span class="comment"></span>
-<a name="l00146"></a>00146 <span class="comment">    /**</span>
-<a name="l00147"></a>00147 <span class="comment">     * Return the results assuming a tentative final test point is added;</span>
-<a name="l00148"></a>00148 <span class="comment">     * however, the data for the test point is not saved.  This lets you report</span>
-<a name="l00149"></a>00149 <span class="comment">     * a running result for the perimeter and area as the user moves the mouse</span>
-<a name="l00150"></a>00150 <span class="comment">     * cursor.  Ordinary floating point arithmetic is used to accumulate the</span>
-<a name="l00151"></a>00151 <span class="comment">     * data for the test point; thus the area and perimeter returned are less</span>
-<a name="l00152"></a>00152 <span class="comment">     * accurate than if AddPoint and Compute are used.</span>
-<a name="l00153"></a>00153 <span class="comment">     *</span>
-<a name="l00154"></a>00154 <span class="comment">     * @param[in] lat the latitude of the test point (degrees).</span>
-<a name="l00155"></a>00155 <span class="comment">     * @param[in] lon the longitude of the test point (degrees).</span>
-<a name="l00156"></a>00156 <span class="comment">     * @param[in] reverse if true then clockwise (instead of counter-clockwise)</span>
-<a name="l00157"></a>00157 <span class="comment">     *   traversal counts as a positive area.</span>
-<a name="l00158"></a>00158 <span class="comment">     * @param[in] sign if true then return a signed result for the area if</span>
-<a name="l00159"></a>00159 <span class="comment">     *   the polygon is traversed in the "wrong" direction instead of returning</span>
-<a name="l00160"></a>00160 <span class="comment">     *   the area for the rest of the earth.</span>
-<a name="l00161"></a>00161 <span class="comment">     * @param[out] perimeter the approximate perimeter of the polygon or length</span>
-<a name="l00162"></a>00162 <span class="comment">     *   of the polyline (meters).</span>
-<a name="l00163"></a>00163 <span class="comment">     * @param[out] area the approximate area of the polygon (meters^2); only</span>
-<a name="l00164"></a>00164 <span class="comment">     *   set if polyline is false in the constructor.</span>
-<a name="l00165"></a>00165 <span class="comment">     * @return the number of points.</span>
-<a name="l00166"></a>00166 <span class="comment">     *</span>
-<a name="l00167"></a>00167 <span class="comment">     * \e lat should be in the range [-90, 90] and \e lon should be in the</span>
-<a name="l00168"></a>00168 <span class="comment">     * range [-180, 360].</span>
-<a name="l00169"></a>00169 <span class="comment">     **********************************************************************/</span>
-<a name="l00170"></a>00170     <span class="keywordtype">unsigned</span> TestCompute(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <span class="keywordtype">bool</span> reverse, <span class="keywordtype">bool</span> sign,
-<a name="l00171"></a>00171                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& perimeter, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& area) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00172"></a>00172 <span class="comment"></span>
-<a name="l00173"></a>00173 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00174"></a>00174 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00175"></a>00175 <span class="comment">    ///@{</span>
-<a name="l00176"></a>00176 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00177"></a>00177 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00178"></a>00178 <span class="comment">     *   the value inherited from the Geodesic object used in the constructor.</span>
-<a name="l00179"></a>00179 <span class="comment">     **********************************************************************/</span>
-<a name="l00180"></a>00180 
-<a name="l00181"></a><a class="code" href="classGeographicLib_1_1PolygonArea.html#afcdd74fcb4a0f57aa193e5fd08239369">00181</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1PolygonArea.html#afcdd74fcb4a0f57aa193e5fd08239369">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.MajorRadius(); }
-<a name="l00182"></a>00182 <span class="comment"></span>
-<a name="l00183"></a>00183 <span class="comment">    /**</span>
-<a name="l00184"></a>00184 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value</span>
-<a name="l00185"></a>00185 <span class="comment">     *   inherited from the Geodesic object used in the constructor.</span>
-<a name="l00186"></a>00186 <span class="comment">     **********************************************************************/</span>
-<a name="l00187"></a><a class="code" href="classGeographicLib_1_1PolygonArea.html#aba3543baed0f014b64890d174b8c62a0">00187</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1PolygonArea.html#aba3543baed0f014b64890d174b8c62a0">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _earth.Flattening(); }<span class="co [...]
-<a name="l00188"></a>00188 <span class="comment">    ///@}</span>
-<a name="l00189"></a>00189 <span class="comment"></span>  };
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 <span class="preprocessor">#endif  // GEOGRAPHICLIB_POLYGONAREA_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalEngine_8cpp.html b/doc/html/SphericalEngine_8cpp.html
deleted file mode 100644
index 4788635..0000000
--- a/doc/html/SphericalEngine_8cpp.html
+++ /dev/null
@@ -1,215 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalEngine.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">SphericalEngine.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="SphericalEngine_8hpp_source.html">GeographicLib/SphericalEngine.hpp</a>></code><br/>
-<code>#include <limits></code><br/>
-<code>#include <algorithm></code><br/>
-<code>#include <<a class="el" href="CircularEngine_8hpp_source.html">GeographicLib/CircularEngine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="SphericalEngine_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalEngine_8cpp.html#acbb0476075cd231855709ab48c95fa7e">GEOGRAPHICLIB_SPHERICALENGINE_CPP</a>   "$Id: 861a718d09c83cdd9bf58939d938a25797b9f306 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>The general sum is </p>
-<div class="fragment"><pre class="fragment">
- V(r, theta, lambda) = sum(n = 0..N) sum(m = 0..n)
-   q^(n+1) * (C[n,m] * cos(m*lambda) + S[n,m] * sin(m*lambda)) * P[n,m](t)
-</pre></div><p> where <code>t = cos(theta)</code>, <code>q = a/r</code>. In addition write <code>u = sin(theta)</code>.</p>
-<p><code>P[n,m]</code> is a normalized associated Legendre function of degree <code>n</code> and order <code>m</code>. Here the formulas are given for full normalized functions (usually denoted <code>Pbar</code>).</p>
-<p>Rewrite outer sum </p>
-<div class="fragment"><pre class="fragment">
- V(r, theta, lambda) = sum(m = 0..N) * P[m,m](t) * q^(m+1) *
-    [Sc[m] * cos(m*lambda) + Ss[m] * sin(m*lambda)]
-</pre></div><p> where the inner sums are </p>
-<div class="fragment"><pre class="fragment">
-   Sc[m] = sum(n = m..N) q^(n-m) * C[n,m] * P[n,m](t)/P[m,m](t)
-   Ss[m] = sum(n = m..N) q^(n-m) * S[n,m] * P[n,m](t)/P[m,m](t)
-</pre></div><p> Evaluate sums via Clenshaw method. The overall framework is similar to Deakin with the following changes:</p>
-<ul>
-<li>Clenshaw summation is used to roll the computation of <code>cos(m*lambda)</code> and <code>sin(m*lambda)</code> into the evaluation of the outer sum (rather than independently computing an array of these trigonometric terms).</li>
-<li>Scale the coefficients to guard against overflow when <code>N</code> is large.</li>
-</ul>
-<p>For the general framework of Clenshaw, see <a href="http://mathworld.wolfram.com/ClenshawRecurrenceFormula.html">http://mathworld.wolfram.com/ClenshawRecurrenceFormula.html</a></p>
-<p>Let </p>
-<div class="fragment"><pre class="fragment">
-    S = sum(k = 0..N) c[k] * F[k](x)
-    F[n+1](x) = alpha[n](x) * F[n](x) + beta[n](x) * F[n-1](x)
-</pre></div><p> Evaluate <code>S</code> with </p>
-<div class="fragment"><pre class="fragment">
-    y[N+2] = y[N+1] = 0
-    y[k] = alpha[k] * y[k+1] + beta[k+1] * y[k+2] + c[k]
-    S = c[0] * F[0] + y[1] * F[1] + beta[1] * F[0] * y[2]
-</pre></div><p> <em>IF</em> <code>F[0](x) = 1</code> and <code>beta(0,x) = 0</code>, then <code>F[1](x) = alpha(0,x)</code> and we can continue the recursion for <code>y[k]</code> until <code>y[0]</code>, giving </p>
-<div class="fragment"><pre class="fragment">
-    S = y[0]
-</pre></div><p>Evaluating the inner sum </p>
-<div class="fragment"><pre class="fragment">
- l = n-m; n = l+m
- Sc[m] = sum(l = 0..N-m) C[l+m,m] * q^l * P[l+m,m](t)/P[m,m](t)
- F[l] = q^l * P[l+m,m](t)/P[m,m](t)
-</pre></div><p> Holmes + Featherstone, Eq. (11), give </p>
-<div class="fragment"><pre class="fragment">
-   P[n,m] = sqrt((2*n-1)*(2*n+1)/((n-m)*(n+m))) * t * P[n-1,m] -
-            sqrt((2*n+1)*(n+m-1)*(n-m-1)/((n-m)*(n+m)*(2*n-3))) * P[n-2,m]
-</pre></div><p> thus </p>
-<div class="fragment"><pre class="fragment">
-   alpha[l] = t * q * sqrt(((2*n+1)*(2*n+3))/
-                           ((n-m+1)*(n+m+1)))
-   beta[l+1] = - q^2 * sqrt(((n-m+1)*(n+m+1)*(2*n+5))/
-                            ((n-m+2)*(n+m+2)*(2*n+1)))
-</pre></div><p> In this case, <code>F[0] = 1</code> and <code>beta[0] = 0</code>, so the <code>Sc[m] = y[0]</code>.</p>
-<p>Evaluating the outer sum </p>
-<div class="fragment"><pre class="fragment">
- V = sum(m = 0..N) Sc[m] * q^(m+1) * cos(m*lambda) * P[m,m](t)
-   + sum(m = 0..N) Ss[m] * q^(m+1) * cos(m*lambda) * P[m,m](t)
- F[m] = q^(m+1) * cos(m*lambda) * P[m,m](t) [or sin(m*lambda)]
-</pre></div><p> Holmes + Featherstone, Eq. (13), give </p>
-<div class="fragment"><pre class="fragment">
-   P[m,m] = u * sqrt((2*m+1)/((m>1?2:1)*m)) * P[m-1,m-1]
-</pre></div><p> also, we have </p>
-<div class="fragment"><pre class="fragment">
-   cos((m+1)*lambda) = 2*cos(lambda)*cos(m*lambda) - cos((m-1)*lambda)
-</pre></div><p> thus </p>
-<div class="fragment"><pre class="fragment">
-   alpha[m] = 2*cos(lambda) * sqrt((2*m+3)/(2*(m+1))) * u * q
-            =   cos(lambda) * sqrt( 2*(2*m+3)/(m+1) ) * u * q
-   beta[m+1] = -sqrt((2*m+3)*(2*m+5)/(4*(m+1)*(m+2))) * u^2 * q^2
-               * (m == 0 ? sqrt(2) : 1)
-</pre></div><p> Thus </p>
-<div class="fragment"><pre class="fragment">
- F[0] = q                                [or 0]
- F[1] = cos(lambda) * sqrt(3) * u * q^2  [or sin(lambda)]
- beta[1] = - sqrt(15/4) * u^2 * q^2
-</pre></div><p>Here is how the various components of the gradient are computed</p>
-<p>Differentiate wrt <code>r</code> </p>
-<div class="fragment"><pre class="fragment">
-   d q^(n+1) / dr = (-1/r) * (n+1) * q^(n+1)
-</pre></div><p> so multiply <code>C[n,m]</code> by <code>n+1</code> in inner sum and multiply the sum by <code>-1/r</code>.</p>
-<p>Differentiate wrt <code>lambda</code> </p>
-<div class="fragment"><pre class="fragment">
-   d cos(m*lambda) = -m * sin(m*lambda)
-   d sin(m*lambda) =  m * cos(m*lambda)
-</pre></div><p> so multiply terms by <code>m</code> in outer sum and swap sine and cosine variables.</p>
-<p>Differentiate wrt <code>theta</code> </p>
-<div class="fragment"><pre class="fragment">
-  dV/dtheta = V' = -u * dV/dt = -u * V'
-</pre></div><p> here <code>'</code> denotes differentiation wrt <code>theta</code>. </p>
-<div class="fragment"><pre class="fragment">
-   d/dtheta (Sc[m] * P[m,m](t)) = Sc'[m] * P[m,m](t) + Sc[m] * P'[m,m](t)
-</pre></div><p> Now <code>P[m,m](t) = const * u^m</code>, so <code>P'[m,m](t) = m * t/u * P[m,m](t)</code>, thus </p>
-<div class="fragment"><pre class="fragment">
-   d/dtheta (Sc[m] * P[m,m](t)) = (Sc'[m] + m * t/u * Sc[m]) * P[m,m](t)
-</pre></div><p> Clenshaw recursion for <code>Sc[m]</code> reads </p>
-<div class="fragment"><pre class="fragment">
-    y[k] = alpha[k] * y[k+1] + beta[k+1] * y[k+2] + c[k]
-</pre></div><p> Substituting <code>alpha[k] = const * t</code>, <code>alpha'[k] = -u/t * alpha[k]</code>, <code>beta'[k] = c'[k] = 0</code> gives </p>
-<div class="fragment"><pre class="fragment">
-    y'[k] = alpha[k] * y'[k+1] + beta[k+1] * y'[k+2] - u/t * alpha[k] * y[k+1]
-</pre></div><p>Finally, given the derivatives of <code>V</code>, we can compute the components of the gradient in spherical coordinates and transform the result into cartesian coordinates. </p>
-
-<p>Definition in file <a class="el" href="SphericalEngine_8cpp_source.html">SphericalEngine.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="acbb0476075cd231855709ab48c95fa7e"></a><!-- doxytag: member="SphericalEngine.cpp::GEOGRAPHICLIB_SPHERICALENGINE_CPP" ref="acbb0476075cd231855709ab48c95fa7e" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_SPHERICALENGINE_CPP   "$Id: 861a718d09c83cdd9bf58939d938a25797b9f306 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="SphericalEngine_8cpp_source.html#l00139">139</a> of file <a class="el" href="SphericalEngine_8cpp_source.html">SphericalEngine.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalEngine_8cpp_source.html b/doc/html/SphericalEngine_8cpp_source.html
deleted file mode 100644
index 023a470..0000000
--- a/doc/html/SphericalEngine_8cpp_source.html
+++ /dev/null
@@ -1,555 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalEngine.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">SphericalEngine.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="SphericalEngine_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file SphericalEngine.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::SphericalEngine class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * The general sum is\verbatim</span>
-<a name="l00010"></a>00010 <span class="comment"> V(r, theta, lambda) = sum(n = 0..N) sum(m = 0..n)</span>
-<a name="l00011"></a>00011 <span class="comment">   q^(n+1) * (C[n,m] * cos(m*lambda) + S[n,m] * sin(m*lambda)) * P[n,m](t)</span>
-<a name="l00012"></a>00012 <span class="comment">\endverbatim</span>
-<a name="l00013"></a>00013 <span class="comment"> * where <tt>t = cos(theta)</tt>, <tt>q = a/r</tt>.  In addition write <tt>u =</span>
-<a name="l00014"></a>00014 <span class="comment"> * sin(theta)</tt>.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * <tt>P[n,m]</tt> is a normalized associated Legendre function of degree</span>
-<a name="l00017"></a>00017 <span class="comment"> * <tt>n</tt> and order <tt>m</tt>.  Here the formulas are given for full</span>
-<a name="l00018"></a>00018 <span class="comment"> * normalized functions (usually denoted <tt>Pbar</tt>).</span>
-<a name="l00019"></a>00019 <span class="comment"> *</span>
-<a name="l00020"></a>00020 <span class="comment"> * Rewrite outer sum\verbatim</span>
-<a name="l00021"></a>00021 <span class="comment"> V(r, theta, lambda) = sum(m = 0..N) * P[m,m](t) * q^(m+1) *</span>
-<a name="l00022"></a>00022 <span class="comment">    [Sc[m] * cos(m*lambda) + Ss[m] * sin(m*lambda)]</span>
-<a name="l00023"></a>00023 <span class="comment">\endverbatim</span>
-<a name="l00024"></a>00024 <span class="comment"> * where the inner sums are\verbatim</span>
-<a name="l00025"></a>00025 <span class="comment">   Sc[m] = sum(n = m..N) q^(n-m) * C[n,m] * P[n,m](t)/P[m,m](t)</span>
-<a name="l00026"></a>00026 <span class="comment">   Ss[m] = sum(n = m..N) q^(n-m) * S[n,m] * P[n,m](t)/P[m,m](t)</span>
-<a name="l00027"></a>00027 <span class="comment">\endverbatim</span>
-<a name="l00028"></a>00028 <span class="comment"> * Evaluate sums via Clenshaw method.  The overall framework is similar to</span>
-<a name="l00029"></a>00029 <span class="comment"> * Deakin with the following changes:</span>
-<a name="l00030"></a>00030 <span class="comment"> * - Clenshaw summation is used to roll the computation of</span>
-<a name="l00031"></a>00031 <span class="comment"> *   <tt>cos(m*lambda)</tt> and <tt>sin(m*lambda)</tt> into the evaluation of</span>
-<a name="l00032"></a>00032 <span class="comment"> *   the outer sum (rather than independently computing an array of these</span>
-<a name="l00033"></a>00033 <span class="comment"> *   trigonometric terms).</span>
-<a name="l00034"></a>00034 <span class="comment"> * - Scale the coefficients to guard against overflow when <tt>N</tt> is large.</span>
-<a name="l00035"></a>00035 <span class="comment"> * .</span>
-<a name="l00036"></a>00036 <span class="comment"> * For the general framework of Clenshaw, see</span>
-<a name="l00037"></a>00037 <span class="comment"> * http://mathworld.wolfram.com/ClenshawRecurrenceFormula.html</span>
-<a name="l00038"></a>00038 <span class="comment"> *</span>
-<a name="l00039"></a>00039 <span class="comment"> * Let\verbatim</span>
-<a name="l00040"></a>00040 <span class="comment">    S = sum(k = 0..N) c[k] * F[k](x)</span>
-<a name="l00041"></a>00041 <span class="comment">    F[n+1](x) = alpha[n](x) * F[n](x) + beta[n](x) * F[n-1](x)</span>
-<a name="l00042"></a>00042 <span class="comment">\endverbatim</span>
-<a name="l00043"></a>00043 <span class="comment"> * Evaluate <tt>S</tt> with\verbatim</span>
-<a name="l00044"></a>00044 <span class="comment">    y[N+2] = y[N+1] = 0</span>
-<a name="l00045"></a>00045 <span class="comment">    y[k] = alpha[k] * y[k+1] + beta[k+1] * y[k+2] + c[k]</span>
-<a name="l00046"></a>00046 <span class="comment">    S = c[0] * F[0] + y[1] * F[1] + beta[1] * F[0] * y[2]</span>
-<a name="l00047"></a>00047 <span class="comment">\endverbatim</span>
-<a name="l00048"></a>00048 <span class="comment"> * \e IF <tt>F[0](x) = 1</tt> and <tt>beta(0,x) = 0</tt>, then <tt>F[1](x) =</span>
-<a name="l00049"></a>00049 <span class="comment"> * alpha(0,x)</tt> and we can continue the recursion for <tt>y[k]</tt> until</span>
-<a name="l00050"></a>00050 <span class="comment"> * <tt>y[0]</tt>, giving\verbatim</span>
-<a name="l00051"></a>00051 <span class="comment">    S = y[0]</span>
-<a name="l00052"></a>00052 <span class="comment">\endverbatim</span>
-<a name="l00053"></a>00053 <span class="comment"> *</span>
-<a name="l00054"></a>00054 <span class="comment"> * Evaluating the inner sum\verbatim</span>
-<a name="l00055"></a>00055 <span class="comment"> l = n-m; n = l+m</span>
-<a name="l00056"></a>00056 <span class="comment"> Sc[m] = sum(l = 0..N-m) C[l+m,m] * q^l * P[l+m,m](t)/P[m,m](t)</span>
-<a name="l00057"></a>00057 <span class="comment"> F[l] = q^l * P[l+m,m](t)/P[m,m](t)</span>
-<a name="l00058"></a>00058 <span class="comment">\endverbatim</span>
-<a name="l00059"></a>00059 <span class="comment"> * Holmes + Featherstone, Eq. (11), give\verbatim</span>
-<a name="l00060"></a>00060 <span class="comment">   P[n,m] = sqrt((2*n-1)*(2*n+1)/((n-m)*(n+m))) * t * P[n-1,m] -</span>
-<a name="l00061"></a>00061 <span class="comment">            sqrt((2*n+1)*(n+m-1)*(n-m-1)/((n-m)*(n+m)*(2*n-3))) * P[n-2,m]</span>
-<a name="l00062"></a>00062 <span class="comment">\endverbatim</span>
-<a name="l00063"></a>00063 <span class="comment"> * thus\verbatim</span>
-<a name="l00064"></a>00064 <span class="comment">   alpha[l] = t * q * sqrt(((2*n+1)*(2*n+3))/</span>
-<a name="l00065"></a>00065 <span class="comment">                           ((n-m+1)*(n+m+1)))</span>
-<a name="l00066"></a>00066 <span class="comment">   beta[l+1] = - q^2 * sqrt(((n-m+1)*(n+m+1)*(2*n+5))/</span>
-<a name="l00067"></a>00067 <span class="comment">                            ((n-m+2)*(n+m+2)*(2*n+1)))</span>
-<a name="l00068"></a>00068 <span class="comment">\endverbatim</span>
-<a name="l00069"></a>00069 <span class="comment"> * In this case, <tt>F[0] = 1</tt> and <tt>beta[0] = 0</tt>, so the <tt>Sc[m]</span>
-<a name="l00070"></a>00070 <span class="comment"> * = y[0]</tt>.</span>
-<a name="l00071"></a>00071 <span class="comment"> *</span>
-<a name="l00072"></a>00072 <span class="comment"> * Evaluating the outer sum\verbatim</span>
-<a name="l00073"></a>00073 <span class="comment"> V = sum(m = 0..N) Sc[m] * q^(m+1) * cos(m*lambda) * P[m,m](t)</span>
-<a name="l00074"></a>00074 <span class="comment">   + sum(m = 0..N) Ss[m] * q^(m+1) * cos(m*lambda) * P[m,m](t)</span>
-<a name="l00075"></a>00075 <span class="comment"> F[m] = q^(m+1) * cos(m*lambda) * P[m,m](t) [or sin(m*lambda)]</span>
-<a name="l00076"></a>00076 <span class="comment">\endverbatim</span>
-<a name="l00077"></a>00077 <span class="comment"> * Holmes + Featherstone, Eq. (13), give\verbatim</span>
-<a name="l00078"></a>00078 <span class="comment">   P[m,m] = u * sqrt((2*m+1)/((m>1?2:1)*m)) * P[m-1,m-1]</span>
-<a name="l00079"></a>00079 <span class="comment">\endverbatim</span>
-<a name="l00080"></a>00080 <span class="comment"> * also, we have\verbatim</span>
-<a name="l00081"></a>00081 <span class="comment">   cos((m+1)*lambda) = 2*cos(lambda)*cos(m*lambda) - cos((m-1)*lambda)</span>
-<a name="l00082"></a>00082 <span class="comment">\endverbatim</span>
-<a name="l00083"></a>00083 <span class="comment"> * thus\verbatim</span>
-<a name="l00084"></a>00084 <span class="comment">   alpha[m] = 2*cos(lambda) * sqrt((2*m+3)/(2*(m+1))) * u * q</span>
-<a name="l00085"></a>00085 <span class="comment">            =   cos(lambda) * sqrt( 2*(2*m+3)/(m+1) ) * u * q</span>
-<a name="l00086"></a>00086 <span class="comment">   beta[m+1] = -sqrt((2*m+3)*(2*m+5)/(4*(m+1)*(m+2))) * u^2 * q^2</span>
-<a name="l00087"></a>00087 <span class="comment">               * (m == 0 ? sqrt(2) : 1)</span>
-<a name="l00088"></a>00088 <span class="comment">\endverbatim</span>
-<a name="l00089"></a>00089 <span class="comment"> * Thus\verbatim</span>
-<a name="l00090"></a>00090 <span class="comment"> F[0] = q                                [or 0]</span>
-<a name="l00091"></a>00091 <span class="comment"> F[1] = cos(lambda) * sqrt(3) * u * q^2  [or sin(lambda)]</span>
-<a name="l00092"></a>00092 <span class="comment"> beta[1] = - sqrt(15/4) * u^2 * q^2</span>
-<a name="l00093"></a>00093 <span class="comment">\endverbatim</span>
-<a name="l00094"></a>00094 <span class="comment"> *</span>
-<a name="l00095"></a>00095 <span class="comment"> * Here is how the various components of the gradient are computed</span>
-<a name="l00096"></a>00096 <span class="comment"> *</span>
-<a name="l00097"></a>00097 <span class="comment"> * Differentiate wrt <tt>r</tt>\verbatim</span>
-<a name="l00098"></a>00098 <span class="comment">   d q^(n+1) / dr = (-1/r) * (n+1) * q^(n+1)</span>
-<a name="l00099"></a>00099 <span class="comment">\endverbatim</span>
-<a name="l00100"></a>00100 <span class="comment"> * so multiply <tt>C[n,m]</tt> by <tt>n+1</tt> in inner sum and multiply the</span>
-<a name="l00101"></a>00101 <span class="comment"> * sum by <tt>-1/r</tt>.</span>
-<a name="l00102"></a>00102 <span class="comment"> *</span>
-<a name="l00103"></a>00103 <span class="comment"> * Differentiate wrt <tt>lambda</tt>\verbatim</span>
-<a name="l00104"></a>00104 <span class="comment">   d cos(m*lambda) = -m * sin(m*lambda)</span>
-<a name="l00105"></a>00105 <span class="comment">   d sin(m*lambda) =  m * cos(m*lambda)</span>
-<a name="l00106"></a>00106 <span class="comment">\endverbatim</span>
-<a name="l00107"></a>00107 <span class="comment"> * so multiply terms by <tt>m</tt> in outer sum and swap sine and cosine</span>
-<a name="l00108"></a>00108 <span class="comment"> * variables.</span>
-<a name="l00109"></a>00109 <span class="comment"> *</span>
-<a name="l00110"></a>00110 <span class="comment"> * Differentiate wrt <tt>theta</tt>\verbatim</span>
-<a name="l00111"></a>00111 <span class="comment">  dV/dtheta = V' = -u * dV/dt = -u * V'</span>
-<a name="l00112"></a>00112 <span class="comment">\endverbatim</span>
-<a name="l00113"></a>00113 <span class="comment"> * here <tt>'</tt> denotes differentiation wrt <tt>theta</tt>.\verbatim</span>
-<a name="l00114"></a>00114 <span class="comment">   d/dtheta (Sc[m] * P[m,m](t)) = Sc'[m] * P[m,m](t) + Sc[m] * P'[m,m](t)</span>
-<a name="l00115"></a>00115 <span class="comment">\endverbatim</span>
-<a name="l00116"></a>00116 <span class="comment"> * Now <tt>P[m,m](t) = const * u^m</tt>, so <tt>P'[m,m](t) = m * t/u *</span>
-<a name="l00117"></a>00117 <span class="comment"> * P[m,m](t)</tt>, thus\verbatim</span>
-<a name="l00118"></a>00118 <span class="comment">   d/dtheta (Sc[m] * P[m,m](t)) = (Sc'[m] + m * t/u * Sc[m]) * P[m,m](t)</span>
-<a name="l00119"></a>00119 <span class="comment">\endverbatim</span>
-<a name="l00120"></a>00120 <span class="comment"> * Clenshaw recursion for <tt>Sc[m]</tt> reads\verbatim</span>
-<a name="l00121"></a>00121 <span class="comment">    y[k] = alpha[k] * y[k+1] + beta[k+1] * y[k+2] + c[k]</span>
-<a name="l00122"></a>00122 <span class="comment">\endverbatim</span>
-<a name="l00123"></a>00123 <span class="comment"> * Substituting <tt>alpha[k] = const * t</tt>, <tt>alpha'[k] = -u/t *</span>
-<a name="l00124"></a>00124 <span class="comment"> * alpha[k]</tt>, <tt>beta'[k] = c'[k] = 0</tt> gives\verbatim</span>
-<a name="l00125"></a>00125 <span class="comment">    y'[k] = alpha[k] * y'[k+1] + beta[k+1] * y'[k+2] - u/t * alpha[k] * y[k+1]</span>
-<a name="l00126"></a>00126 <span class="comment">\endverbatim</span>
-<a name="l00127"></a>00127 <span class="comment"> *</span>
-<a name="l00128"></a>00128 <span class="comment"> * Finally, given the derivatives of <tt>V</tt>, we can compute the components</span>
-<a name="l00129"></a>00129 <span class="comment"> * of the gradient in spherical coordinates and transform the result into</span>
-<a name="l00130"></a>00130 <span class="comment"> * cartesian coordinates.</span>
-<a name="l00131"></a>00131 <span class="comment"> **********************************************************************/</span>
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 <span class="preprocessor">#include <<a class="code" href="SphericalEngine_8hpp.html" title="Header for GeographicLib::SphericalEngine class.">GeographicLib/SphericalEngine.hpp</a>></span>
-<a name="l00134"></a>00134 <span class="preprocessor">#include <limits></span>
-<a name="l00135"></a>00135 <span class="preprocessor">#include <algorithm></span>
-<a name="l00136"></a>00136 <span class="preprocessor">#include <<a class="code" href="CircularEngine_8hpp.html" title="Header for GeographicLib::CircularEngine class.">GeographicLib/CircularEngine.hpp</a>></span>
-<a name="l00137"></a>00137 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00138"></a>00138 
-<a name="l00139"></a><a class="code" href="SphericalEngine_8cpp.html#acbb0476075cd231855709ab48c95fa7e">00139</a> <span class="preprocessor">#define GEOGRAPHICLIB_SPHERICALENGINE_CPP \</span>
-<a name="l00140"></a>00140 <span class="preprocessor">  "$Id: 861a718d09c83cdd9bf58939d938a25797b9f306 $"</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span>
-<a name="l00142"></a>00142 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="SphericalEngine_8cpp.html#acbb0476075cd231855709ab48c95fa7e">GEOGRAPHICLIB_SPHERICALENGINE_CPP</a>)
-<a name="l00143"></a>00143 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="SphericalEngine_8hpp.html#a46e29e0e930e205c8f9a059ae458b44e">GEOGRAPHICLIB_SPHERICALENGINE_HPP</a>)
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 namespace GeographicLib {
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147   <span class="keyword">using namespace </span>std;
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> SphericalEngine::scale_ =
-<a name="l00150"></a>00150     pow(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(numeric_limits<real>::radix),
-<a name="l00151"></a>00151         -3 * numeric_limits<real>::max_exponent / 5);
-<a name="l00152"></a>00152   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> SphericalEngine::eps_ =
-<a name="l00153"></a>00153     numeric_limits<real>::epsilon() * sqrt(numeric_limits<real>::epsilon());
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155   <span class="keyword">const</span> vector<Math::real> SphericalEngine::Z_(0);
-<a name="l00156"></a>00156   vector<Math::real> SphericalEngine::root_(0);
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158   <span class="keyword">template</span><<span class="keywordtype">bool</span> gradp, SphericalEngine::normalization norm, <span class="keywordtype">int</span> L>
-<a name="l00159"></a><a class="code" href="classGeographicLib_1_1SphericalEngine.html#a1157f59596dd15bf0a21b6a7fb99630b">00159</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real SphericalEngine::Value(<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a> c[], <span class="keyword">const</spa [...]
-<a name="l00160"></a>00160                                     real x, real y, real z, real a,
-<a name="l00161"></a>00161                                     real& gradx, real& grady, real& gradz)
-<a name="l00162"></a>00162     <span class="keywordflow">throw</span>() {
-<a name="l00163"></a>00163     <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(L > 0, <span class="stringliteral">"L must be positive"</span>);
-<a name="l00164"></a>00164     <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(norm == FULL || norm == SCHMIDT, <span class="stringliteral">"Unknown normalization"</span>);
-<a name="l00165"></a>00165     <span class="keywordtype">int</span> N = c[0].nmx(), M = c[0].mmx();
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     real
-<a name="l00168"></a>00168       p = Math::hypot(x, y),
-<a name="l00169"></a>00169       cl = p ? x / p : 1,       <span class="comment">// cos(lambda); at pole, pick lambda = 0</span>
-<a name="l00170"></a>00170       sl = p ? y / p : 0,       <span class="comment">// sin(lambda)</span>
-<a name="l00171"></a>00171       r = Math::hypot(z, p),
-<a name="l00172"></a>00172       t = r ? z / r : 0,            <span class="comment">// cos(theta); at origin, pick theta = pi/2</span>
-<a name="l00173"></a>00173       u = r ? max(p / r, eps_) : 1, <span class="comment">// sin(theta); but avoid the pole</span>
-<a name="l00174"></a>00174       q = a / r;
-<a name="l00175"></a>00175     real
-<a name="l00176"></a>00176       q2 = Math::sq(q),
-<a name="l00177"></a>00177       uq = u * q,
-<a name="l00178"></a>00178       uq2 = Math::sq(uq),
-<a name="l00179"></a>00179       tu = t / u;
-<a name="l00180"></a>00180     <span class="comment">// Initialize outer sum</span>
-<a name="l00181"></a>00181     real vc  = 0, vc2  = 0, vs  = 0, vs2  = 0;   <span class="comment">// v [N + 1], v [N + 2]</span>
-<a name="l00182"></a>00182     <span class="comment">// vr, vt, vl and similar w variable accumulate the sums for the</span>
-<a name="l00183"></a>00183     <span class="comment">// derivatives wrt r, theta, and lambda, respectively.</span>
-<a name="l00184"></a>00184     real vrc = 0, vrc2 = 0, vrs = 0, vrs2 = 0;   <span class="comment">// vr[N + 1], vr[N + 2]</span>
-<a name="l00185"></a>00185     real vtc = 0, vtc2 = 0, vts = 0, vts2 = 0;   <span class="comment">// vt[N + 1], vt[N + 2]</span>
-<a name="l00186"></a>00186     real vlc = 0, vlc2 = 0, vls = 0, vls2 = 0;   <span class="comment">// vl[N + 1], vl[N + 2]</span>
-<a name="l00187"></a>00187     <span class="keywordtype">int</span> k[L];
-<a name="l00188"></a>00188     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = M; m >= 0; --m) {   <span class="comment">// m = M .. 0</span>
-<a name="l00189"></a>00189       <span class="comment">// Initialize inner sum</span>
-<a name="l00190"></a>00190       real wc  = 0, wc2  = 0, ws  = 0, ws2  = 0; <span class="comment">// w [N - m + 1], w [N - m + 2]</span>
-<a name="l00191"></a>00191       real wrc = 0, wrc2 = 0, wrs = 0, wrs2 = 0; <span class="comment">// wr[N - m + 1], wr[N - m + 2]</span>
-<a name="l00192"></a>00192       real wtc = 0, wtc2 = 0, wts = 0, wts2 = 0; <span class="comment">// wt[N - m + 1], wt[N - m + 2]</span>
-<a name="l00193"></a>00193       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> l = 0; l < L; ++l)
-<a name="l00194"></a>00194         k[l] = c[l].index(N, m) + 1;
-<a name="l00195"></a>00195       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = N; n >= m; --n) {             <span class="comment">// n = N .. m; l = N - m .. 0</span>
-<a name="l00196"></a>00196         real w, A, Ax, B, R;    <span class="comment">// alpha[l], beta[l + 1]</span>
-<a name="l00197"></a>00197         <span class="keywordflow">switch</span> (norm) {
-<a name="l00198"></a>00198         <span class="keywordflow">case</span> FULL:
-<a name="l00199"></a>00199           w = root_[2 * n + 1] / (root_[n - m + 1] * root_[n + m + 1]);
-<a name="l00200"></a>00200           Ax = q * w * root_[2 * n + 3];
-<a name="l00201"></a>00201           A = t * Ax;
-<a name="l00202"></a>00202           B = - q2 * root_[2 * n + 5] /
-<a name="l00203"></a>00203             (w * root_[n - m + 2] * root_[n + m + 2]);
-<a name="l00204"></a>00204           <span class="keywordflow">break</span>;
-<a name="l00205"></a>00205         <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00206"></a>00206           w = root_[n - m + 1] * root_[n + m + 1];
-<a name="l00207"></a>00207           Ax = q * (2 * n + 1) / w;
-<a name="l00208"></a>00208           A = t * Ax;
-<a name="l00209"></a>00209           B = - q2 * w / (root_[n - m + 2] * root_[n + m + 2]);
-<a name="l00210"></a>00210           <span class="keywordflow">break</span>;
-<a name="l00211"></a>00211         }
-<a name="l00212"></a>00212         R = c[0].Cv(--k[0]);
-<a name="l00213"></a>00213         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> l = 1; l < L; ++l)
-<a name="l00214"></a>00214           R += c[l].Cv(--k[l], n, m, f[l]);
-<a name="l00215"></a>00215         R *= scale_;
-<a name="l00216"></a>00216         w = A * wc + B * wc2 + R; wc2 = wc; wc = w;
-<a name="l00217"></a>00217         <span class="keywordflow">if</span> (gradp) {
-<a name="l00218"></a>00218           w = A * wrc + B * wrc2 + (n + 1) * R; wrc2 = wrc; wrc = w;
-<a name="l00219"></a>00219           w = A * wtc + B * wtc2 -  u*Ax * wc2; wtc2 = wtc; wtc = w;
-<a name="l00220"></a>00220         }
-<a name="l00221"></a>00221         <span class="keywordflow">if</span> (m) {
-<a name="l00222"></a>00222           R = c[0].Sv(k[0]);
-<a name="l00223"></a>00223           <span class="keywordflow">for</span> (<span class="keywordtype">int</span> l = 1; l < L; ++l)
-<a name="l00224"></a>00224             R += c[l].Sv(k[l], n, m, f[l]);
-<a name="l00225"></a>00225           R *= scale_;
-<a name="l00226"></a>00226           w = A * ws + B * ws2 + R; ws2 = ws; ws = w;
-<a name="l00227"></a>00227           <span class="keywordflow">if</span> (gradp) {
-<a name="l00228"></a>00228             w = A * wrs + B * wrs2 + (n + 1) * R; wrs2 = wrs; wrs = w;
-<a name="l00229"></a>00229             w = A * wts + B * wts2 -  u*Ax * ws2; wts2 = wts; wts = w;
-<a name="l00230"></a>00230           }
-<a name="l00231"></a>00231         }
-<a name="l00232"></a>00232       }
-<a name="l00233"></a>00233       <span class="comment">// Now Sc[m] = wc, Ss[m] = ws</span>
-<a name="l00234"></a>00234       <span class="comment">// Sc'[m] = wtc, Ss'[m] = wtc</span>
-<a name="l00235"></a>00235       <span class="keywordflow">if</span> (m) {
-<a name="l00236"></a>00236         real v, A, B;           <span class="comment">// alpha[m], beta[m + 1]</span>
-<a name="l00237"></a>00237         <span class="keywordflow">switch</span> (norm) {
-<a name="l00238"></a>00238         <span class="keywordflow">case</span> FULL:
-<a name="l00239"></a>00239           v = root_[2] * root_[2 * m + 3] / root_[m + 1];
-<a name="l00240"></a>00240           A = cl * v * uq;
-<a name="l00241"></a>00241           B = - v * root_[2 * m + 5] / (root_[8] * root_[m + 2]) * uq2;
-<a name="l00242"></a>00242           <span class="keywordflow">break</span>;
-<a name="l00243"></a>00243         <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00244"></a>00244           v = root_[2] * root_[2 * m + 1] / root_[m + 1];
-<a name="l00245"></a>00245           A = cl * v * uq;
-<a name="l00246"></a>00246           B = - v * root_[2 * m + 3] / (root_[8] * root_[m + 2]) * uq2;
-<a name="l00247"></a>00247           <span class="keywordflow">break</span>;
-<a name="l00248"></a>00248         }
-<a name="l00249"></a>00249         v = A * vc  + B * vc2  +  wc ; vc2  = vc ; vc  = v;
-<a name="l00250"></a>00250         v = A * vs  + B * vs2  +  ws ; vs2  = vs ; vs  = v;
-<a name="l00251"></a>00251         <span class="keywordflow">if</span> (gradp) {
-<a name="l00252"></a>00252           <span class="comment">// Include the terms Sc[m] * P'[m,m](t) and Ss[m] * P'[m,m](t)</span>
-<a name="l00253"></a>00253           wtc += m * tu * wc; wts += m * tu * ws;
-<a name="l00254"></a>00254           v = A * vrc + B * vrc2 +  wrc; vrc2 = vrc; vrc = v;
-<a name="l00255"></a>00255           v = A * vrs + B * vrs2 +  wrs; vrs2 = vrs; vrs = v;
-<a name="l00256"></a>00256           v = A * vtc + B * vtc2 +  wtc; vtc2 = vtc; vtc = v;
-<a name="l00257"></a>00257           v = A * vts + B * vts2 +  wts; vts2 = vts; vts = v;
-<a name="l00258"></a>00258           v = A * vlc + B * vlc2 + m*ws; vlc2 = vlc; vlc = v;
-<a name="l00259"></a>00259           v = A * vls + B * vls2 - m*wc; vls2 = vls; vls = v;
-<a name="l00260"></a>00260         }
-<a name="l00261"></a>00261       } <span class="keywordflow">else</span> {
-<a name="l00262"></a>00262         real A, B, qs;
-<a name="l00263"></a>00263         <span class="keywordflow">switch</span> (norm) {
-<a name="l00264"></a>00264         <span class="keywordflow">case</span> FULL:
-<a name="l00265"></a>00265           A = root_[3] * uq;       <span class="comment">// F[1]/(q*cl) or F[1]/(q*sl)</span>
-<a name="l00266"></a>00266           B = - root_[15]/2 * uq2; <span class="comment">// beta[1]/q</span>
-<a name="l00267"></a>00267           <span class="keywordflow">break</span>;
-<a name="l00268"></a>00268         <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00269"></a>00269           A = uq;
-<a name="l00270"></a>00270           B = - root_[3]/2 * uq2;
-<a name="l00271"></a>00271           <span class="keywordflow">break</span>;
-<a name="l00272"></a>00272         }
-<a name="l00273"></a>00273         qs = q / scale_;
-<a name="l00274"></a>00274         vc = qs * (wc + A * (cl * vc + sl * vs ) + B * vc2);
-<a name="l00275"></a>00275         <span class="keywordflow">if</span> (gradp) {
-<a name="l00276"></a>00276           qs /= r;
-<a name="l00277"></a>00277           <span class="comment">// The components of the gradient in spherical coordinates are</span>
-<a name="l00278"></a>00278           <span class="comment">// r: dV/dr</span>
-<a name="l00279"></a>00279           <span class="comment">// theta: 1/r * dV/dtheta</span>
-<a name="l00280"></a>00280           <span class="comment">// lambda: 1/(r*u) * dV/dlambda</span>
-<a name="l00281"></a>00281           vrc =   - qs * (wrc + A * (cl * vrc + sl * vrs) + B * vrc2);
-<a name="l00282"></a>00282           vtc =     qs * (wtc + A * (cl * vtc + sl * vts) + B * vtc2);
-<a name="l00283"></a>00283           vlc = qs / u * (      A * (cl * vlc + sl * vls) + B * vlc2);
-<a name="l00284"></a>00284         }
-<a name="l00285"></a>00285       }
-<a name="l00286"></a>00286     }
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288     <span class="keywordflow">if</span> (gradp) {
-<a name="l00289"></a>00289       <span class="comment">// Rotate into cartesian (geocentric) coordinates</span>
-<a name="l00290"></a>00290       gradx = cl * (u * vrc + t * vtc) - sl * vlc;
-<a name="l00291"></a>00291       grady = sl * (u * vrc + t * vtc) + cl * vlc;
-<a name="l00292"></a>00292       gradz =       t * vrc - u * vtc            ;
-<a name="l00293"></a>00293     }
-<a name="l00294"></a>00294     <span class="keywordflow">return</span> vc;
-<a name="l00295"></a>00295   }
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297   <span class="keyword">template</span><<span class="keywordtype">bool</span> gradp, SphericalEngine::normalization norm, <span class="keywordtype">int</span> L>
-<a name="l00298"></a><a class="code" href="classGeographicLib_1_1SphericalEngine.html#af6a5fa63535d47cf528b733bb6a97901">00298</a>   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> SphericalEngine::Circle(<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a> c[], <span class="keyword">const [...]
-<a name="l00299"></a>00299                                          real p, real z, real a) {
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(L > 0, <span class="stringliteral">"L must be positive"</span>);
-<a name="l00302"></a>00302     <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(norm == FULL || norm == SCHMIDT, <span class="stringliteral">"Unknown normalization"</span>);
-<a name="l00303"></a>00303     <span class="keywordtype">int</span> N = c[0].<a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a96467118f9c16c16259d4fbbed3917ff">nmx</a>(), M = c[0].<a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2a1ff83503433c64bd4399689a3e40f6">mmx</a>();
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305     real
-<a name="l00306"></a>00306       r = Math::hypot(z, p),
-<a name="l00307"></a>00307       t = r ? z / r : 0,            <span class="comment">// cos(theta); at origin, pick theta = pi/2</span>
-<a name="l00308"></a>00308       u = r ? max(p / r, eps_) : 1, <span class="comment">// sin(theta); but avoid the pole</span>
-<a name="l00309"></a>00309       q = a / r;
-<a name="l00310"></a>00310     real
-<a name="l00311"></a>00311       q2 = Math::sq(q),
-<a name="l00312"></a>00312       tu = t / u;
-<a name="l00313"></a>00313     <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> circ(M, gradp, norm, a, r, u, t);
-<a name="l00314"></a>00314     <span class="keywordtype">int</span> k[L];
-<a name="l00315"></a>00315     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = M; m >= 0; --m) {   <span class="comment">// m = M .. 0</span>
-<a name="l00316"></a>00316       <span class="comment">// Initialize inner sum</span>
-<a name="l00317"></a>00317       real wc  = 0, wc2  = 0, ws  = 0, ws2  = 0; <span class="comment">// w [N - m + 1], w [N - m + 2]</span>
-<a name="l00318"></a>00318       real wrc = 0, wrc2 = 0, wrs = 0, wrs2 = 0; <span class="comment">// wr[N - m + 1], wr[N - m + 2]</span>
-<a name="l00319"></a>00319       real wtc = 0, wtc2 = 0, wts = 0, wts2 = 0; <span class="comment">// wt[N - m + 1], wt[N - m + 2]</span>
-<a name="l00320"></a>00320       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> l = 0; l < L; ++l)
-<a name="l00321"></a>00321         k[l] = c[l].index(N, m) + 1;
-<a name="l00322"></a>00322       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n = N; n >= m; --n) {             <span class="comment">// n = N .. m; l = N - m .. 0</span>
-<a name="l00323"></a>00323         real w, A, Ax, B, R;    <span class="comment">// alpha[l], beta[l + 1]</span>
-<a name="l00324"></a>00324         <span class="keywordflow">switch</span> (norm) {
-<a name="l00325"></a>00325         <span class="keywordflow">case</span> FULL:
-<a name="l00326"></a>00326           w = root_[2 * n + 1] / (root_[n - m + 1] * root_[n + m + 1]);
-<a name="l00327"></a>00327           Ax = q * w * root_[2 * n + 3];
-<a name="l00328"></a>00328           A = t * Ax;
-<a name="l00329"></a>00329           B = - q2 * root_[2 * n + 5] /
-<a name="l00330"></a>00330             (w * root_[n - m + 2] * root_[n + m + 2]);
-<a name="l00331"></a>00331           <span class="keywordflow">break</span>;
-<a name="l00332"></a>00332         <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00333"></a>00333           w = root_[n - m + 1] * root_[n + m + 1];
-<a name="l00334"></a>00334           Ax = q * (2 * n + 1) / w;
-<a name="l00335"></a>00335           A = t * Ax;
-<a name="l00336"></a>00336           B = - q2 * w / (root_[n - m + 2] * root_[n + m + 2]);
-<a name="l00337"></a>00337           <span class="keywordflow">break</span>;
-<a name="l00338"></a>00338         }
-<a name="l00339"></a>00339         R = c[0].<a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ab591ddf74f5653c16b58ed2f5bde5ffe">Cv</a>(--k[0]);
-<a name="l00340"></a>00340         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> l = 1; l < L; ++l)
-<a name="l00341"></a>00341           R += c[l].Cv(--k[l], n, m, f[l]);
-<a name="l00342"></a>00342         R *= scale_;
-<a name="l00343"></a>00343         w = A * wc + B * wc2 + R; wc2 = wc; wc = w;
-<a name="l00344"></a>00344         <span class="keywordflow">if</span> (gradp) {
-<a name="l00345"></a>00345           w = A * wrc + B * wrc2 + (n + 1) * R; wrc2 = wrc; wrc = w;
-<a name="l00346"></a>00346           w = A * wtc + B * wtc2 -  u*Ax * wc2; wtc2 = wtc; wtc = w;
-<a name="l00347"></a>00347         }
-<a name="l00348"></a>00348         <span class="keywordflow">if</span> (m) {
-<a name="l00349"></a>00349           R = c[0].<a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ac93aaebb09086ab14330aafc0f105a17">Sv</a>(k[0]);
-<a name="l00350"></a>00350           <span class="keywordflow">for</span> (<span class="keywordtype">int</span> l = 1; l < L; ++l)
-<a name="l00351"></a>00351             R += c[l].Sv(k[l], n, m, f[l]);
-<a name="l00352"></a>00352           R *= scale_;
-<a name="l00353"></a>00353           w = A * ws + B * ws2 + R; ws2 = ws; ws = w;
-<a name="l00354"></a>00354           <span class="keywordflow">if</span> (gradp) {
-<a name="l00355"></a>00355             w = A * wrs + B * wrs2 + (n + 1) * R; wrs2 = wrs; wrs = w;
-<a name="l00356"></a>00356             w = A * wts + B * wts2 -  u*Ax * ws2; wts2 = wts; wts = w;
-<a name="l00357"></a>00357           }
-<a name="l00358"></a>00358         }
-<a name="l00359"></a>00359       }
-<a name="l00360"></a>00360       <span class="keywordflow">if</span> (!gradp)
-<a name="l00361"></a>00361         circ.SetCoeff(m, wc, ws);
-<a name="l00362"></a>00362       <span class="keywordflow">else</span> {
-<a name="l00363"></a>00363         <span class="comment">// Include the terms Sc[m] * P'[m,m](t) and  Ss[m] * P'[m,m](t)</span>
-<a name="l00364"></a>00364         wtc += m * tu * wc; wts += m * tu * ws;
-<a name="l00365"></a>00365         circ.SetCoeff(m, wc, ws, wrc, wrs, wtc, wts);
-<a name="l00366"></a>00366       }
-<a name="l00367"></a>00367     }
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369     <span class="keywordflow">return</span> circ;
-<a name="l00370"></a>00370   }
-<a name="l00371"></a>00371 
-<a name="l00372"></a><a class="code" href="classGeographicLib_1_1SphericalEngine.html#a7fac63262c0a8bb18aee8c962a08d429">00372</a>   <span class="keywordtype">void</span> SphericalEngine::RootTable(<span class="keywordtype">int</span> N) {
-<a name="l00373"></a>00373     <span class="comment">// Need square roots up to max(2 * N + 5, 15).</span>
-<a name="l00374"></a>00374     <span class="keywordtype">int</span> L = max(2 * N + 5, 15) + 1, oldL = int(root_.size());
-<a name="l00375"></a>00375     <span class="keywordflow">if</span> (oldL >= L)
-<a name="l00376"></a>00376       <span class="keywordflow">return</span>;
-<a name="l00377"></a>00377     root_.resize(L);
-<a name="l00378"></a>00378     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> l = oldL; l < L; ++l)
-<a name="l00379"></a>00379       root_[l] = sqrt(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(l));
-<a name="l00380"></a>00380   }
-<a name="l00381"></a>00381 
-<a name="l00382"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2d545f589894683e7de297c42b7c995a">00382</a>   <span class="keywordtype">void</span> SphericalEngine::coeff::readcoeffs(std::istream& stream, <span class="keywordtype">int</span>& N, <span class="keywordtype">int</span>& M,
-<a name="l00383"></a>00383                                           std::vector<real>& C,
-<a name="l00384"></a>00384                                           std::vector<real>& S) {
-<a name="l00385"></a>00385     <span class="keywordtype">int</span> nm[2];
-<a name="l00386"></a>00386     <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::readarray<int, int, false>(stream, nm, 2);
-<a name="l00387"></a>00387     N = nm[0]; M = nm[1];
-<a name="l00388"></a>00388     <span class="keywordflow">if</span> (!(N >= M && M >= -1 && N * M >= 0))
-<a name="l00389"></a>00389       <span class="comment">// The last condition is that M = -1 implies N = -1 and vice versa.</span>
-<a name="l00390"></a>00390       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad degree and order "</span> +
-<a name="l00391"></a>00391                           Utility::str(N) + <span class="stringliteral">" "</span> + Utility::str(M));
-<a name="l00392"></a>00392     C.resize(SphericalEngine::coeff::Csize(N, M));
-<a name="l00393"></a>00393     <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::readarray<double, real, false>(stream, C);
-<a name="l00394"></a>00394     S.resize(SphericalEngine::coeff::Ssize(N, M));
-<a name="l00395"></a>00395     <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::readarray<double, real, false>(stream, S);
-<a name="l00396"></a>00396     <span class="keywordflow">return</span>;
-<a name="l00397"></a>00397   }
-<a name="l00398"></a>00398 <span class="comment"></span>
-<a name="l00399"></a>00399 <span class="comment">  /// \cond SKIP</span>
-<a name="l00400"></a>00400 <span class="comment"></span>  <span class="keyword">template</span>
-<a name="l00401"></a>00401   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::FULL, 1>
-<a name="l00402"></a>00402   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00403"></a>00403   <span class="keyword">template</span>
-<a name="l00404"></a>00404   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::FULL, 1>
-<a name="l00405"></a>00405   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00406"></a>00406   <span class="keyword">template</span>
-<a name="l00407"></a>00407   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::SCHMIDT, 1>
-<a name="l00408"></a>00408   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00409"></a>00409   <span class="keyword">template</span>
-<a name="l00410"></a>00410   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::SCHMIDT, 1>
-<a name="l00411"></a>00411   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413   <span class="keyword">template</span>
-<a name="l00414"></a>00414   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::FULL, 2>
-<a name="l00415"></a>00415   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00416"></a>00416   <span class="keyword">template</span>
-<a name="l00417"></a>00417   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::FULL, 2>
-<a name="l00418"></a>00418   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00419"></a>00419   <span class="keyword">template</span>
-<a name="l00420"></a>00420   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::SCHMIDT, 2>
-<a name="l00421"></a>00421   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00422"></a>00422   <span class="keyword">template</span>
-<a name="l00423"></a>00423   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::SCHMIDT, 2>
-<a name="l00424"></a>00424   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426   <span class="keyword">template</span>
-<a name="l00427"></a>00427   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::FULL, 3>
-<a name="l00428"></a>00428   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00429"></a>00429   <span class="keyword">template</span>
-<a name="l00430"></a>00430   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::FULL, 3>
-<a name="l00431"></a>00431   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00432"></a>00432   <span class="keyword">template</span>
-<a name="l00433"></a>00433   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::SCHMIDT, 3>
-<a name="l00434"></a>00434   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00435"></a>00435   <span class="keyword">template</span>
-<a name="l00436"></a>00436   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::SCHMIDT, 3>
-<a name="l00437"></a>00437   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439   <span class="keyword">template</span>
-<a name="l00440"></a>00440   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::FULL, 1>
-<a name="l00441"></a>00441   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00442"></a>00442   <span class="keyword">template</span>
-<a name="l00443"></a>00443   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<false, SphericalEngine::FULL, 1>
-<a name="l00444"></a>00444   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00445"></a>00445   <span class="keyword">template</span>
-<a name="l00446"></a>00446   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::SCHMIDT, 1>
-<a name="l00447"></a>00447   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00448"></a>00448   <span class="keyword">template</span>
-<a name="l00449"></a>00449   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<false, SphericalEngine::SCHMIDT, 1>
-<a name="l00450"></a>00450   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452   <span class="keyword">template</span>
-<a name="l00453"></a>00453   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::FULL, 2>
-<a name="l00454"></a>00454   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00455"></a>00455   <span class="keyword">template</span>
-<a name="l00456"></a>00456   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<false, SphericalEngine::FULL, 2>
-<a name="l00457"></a>00457   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00458"></a>00458   <span class="keyword">template</span>
-<a name="l00459"></a>00459   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::SCHMIDT, 2>
-<a name="l00460"></a>00460   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00461"></a>00461   <span class="keyword">template</span>
-<a name="l00462"></a>00462   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<false, SphericalEngine::SCHMIDT, 2>
-<a name="l00463"></a>00463   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465   <span class="keyword">template</span>
-<a name="l00466"></a>00466   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::FULL, 3>
-<a name="l00467"></a>00467   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00468"></a>00468   <span class="keyword">template</span>
-<a name="l00469"></a>00469   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<false, SphericalEngine::FULL, 3>
-<a name="l00470"></a>00470   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00471"></a>00471   <span class="keyword">template</span>
-<a name="l00472"></a>00472   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::SCHMIDT, 3>
-<a name="l00473"></a>00473   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>);
-<a name="l00474"></a>00474   <span class="keyword">template</span>
-<a name="l00475"></a>00475   <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<false, SphericalEngine::SCHMIDT, 3>
-<a name="l00476"></a>00476   (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>[], <span class="keyword">const</span> real[], <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a [...]
-<a name="l00477"></a>00477 <span class="comment">  /// \endcond</span>
-<a name="l00478"></a>00478 <span class="comment"></span>
-<a name="l00479"></a>00479 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalEngine_8hpp.html b/doc/html/SphericalEngine_8hpp.html
deleted file mode 100644
index ff67994..0000000
--- a/doc/html/SphericalEngine_8hpp.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalEngine.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">SphericalEngine.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <vector></code><br/>
-<code>#include <istream></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="SphericalEngine_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The evaluation engine for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>.  <a href="classGeographicLib_1_1SphericalEngine.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Package up coefficients for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>.  <a href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalEngine_8hpp.html#a46e29e0e930e205c8f9a059ae458b44e">GEOGRAPHICLIB_SPHERICALENGINE_HPP</a>   "$Id: f48320a694ecf901d997b23d32ea625e589f9534 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a> class. </p>
-<p>Copyright (c) Charles Karney (2011, 2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a46e29e0e930e205c8f9a059ae458b44e"></a><!-- doxytag: member="SphericalEngine.hpp::GEOGRAPHICLIB_SPHERICALENGINE_HPP" ref="a46e29e0e930e205c8f9a059ae458b44e" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_SPHERICALENGINE_HPP   "$Id: f48320a694ecf901d997b23d32ea625e589f9534 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00011">11</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalEngine_8hpp_source.html b/doc/html/SphericalEngine_8hpp_source.html
deleted file mode 100644
index cdb8098..0000000
--- a/doc/html/SphericalEngine_8hpp_source.html
+++ /dev/null
@@ -1,439 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalEngine.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">SphericalEngine.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="SphericalEngine_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file SphericalEngine.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::SphericalEngine class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_SPHERICALENGINE_HPP)</span>
-<a name="l00011"></a><a class="code" href="SphericalEngine_8hpp.html#a46e29e0e930e205c8f9a059ae458b44e">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_SPHERICALENGINE_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: f48320a694ecf901d997b23d32ea625e589f9534 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <vector></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <istream></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="comment">// Squelch warnings about dll vs vector</span>
-<a name="l00020"></a>00020 <span class="preprocessor">#pragma warning (push)</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (disable: 4251)</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span>
-<a name="l00024"></a>00024 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026   <span class="keyword">class </span>CircularEngine;
-<a name="l00027"></a>00027 <span class="comment"></span>
-<a name="l00028"></a>00028 <span class="comment">  /**</span>
-<a name="l00029"></a>00029 <span class="comment">   * \brief The evaluation engine for SphericalHarmonic</span>
-<a name="l00030"></a>00030 <span class="comment">   *</span>
-<a name="l00031"></a>00031 <span class="comment">   * This serves as the backend to SphericalHarmonic, SphericalHarmonic1, and</span>
-<a name="l00032"></a>00032 <span class="comment">   * SphericalHarmonic2.  Typically end-users will not have to access this</span>
-<a name="l00033"></a>00033 <span class="comment">   * class directly.</span>
-<a name="l00034"></a>00034 <span class="comment">   *</span>
-<a name="l00035"></a>00035 <span class="comment">   * See SphericalEngine.cpp for more information on the implementation.</span>
-<a name="l00036"></a>00036 <span class="comment">   *</span>
-<a name="l00037"></a>00037 <span class="comment">   * Example of use:</span>
-<a name="l00038"></a>00038 <span class="comment">   * \include example-SphericalEngine.cpp</span>
-<a name="l00039"></a>00039 <span class="comment">   **********************************************************************/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> SphericalEngine {
-<a name="l00042"></a>00042   <span class="keyword">private</span>:
-<a name="l00043"></a>00043     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00044"></a>00044     <span class="comment">// A table of the square roots of integers</span>
-<a name="l00045"></a>00045     <span class="keyword">static</span> std::vector<real> root_;
-<a name="l00046"></a><a class="code" href="classGeographicLib_1_1SphericalEngine.html#a0c689dbf7b6bf2fb4cffb109085b1d3b">00046</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a>; <span class="comment">// CircularEngine needs access to root_, scale_</span>
-<a name="l00047"></a>00047     <span class="comment">// An internal scaling of the coefficients to avoid overflow in</span>
-<a name="l00048"></a>00048     <span class="comment">// intermediate calculations.</span>
-<a name="l00049"></a>00049     <span class="keyword">static</span> <span class="keyword">const</span> real scale_;
-<a name="l00050"></a>00050     <span class="comment">// Move latitudes near the pole off the axis by this amount.</span>
-<a name="l00051"></a>00051     <span class="keyword">static</span> <span class="keyword">const</span> real eps_;
-<a name="l00052"></a>00052     <span class="keyword">static</span> <span class="keyword">const</span> std::vector<real> Z_;
-<a name="l00053"></a>00053     SphericalEngine();          <span class="comment">// Disable constructor</span>
-<a name="l00054"></a>00054   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00055"></a>00055 <span class="comment">    /**</span>
-<a name="l00056"></a>00056 <span class="comment">     * Supported normalizations for associated Legendre polynomials.</span>
-<a name="l00057"></a>00057 <span class="comment">     **********************************************************************/</span>
-<a name="l00058"></a><a class="code" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949f">00058</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949f">normalization</a> {<span class="comment"></span>
-<a name="l00059"></a>00059 <span class="comment">      /**</span>
-<a name="l00060"></a>00060 <span class="comment">       * Fully normalized associated Legendre polynomials.  See</span>
-<a name="l00061"></a>00061 <span class="comment">       * SphericalHarmonic::FULL for documentation.</span>
-<a name="l00062"></a>00062 <span class="comment">       *</span>
-<a name="l00063"></a>00063 <span class="comment">       * @hideinitializer</span>
-<a name="l00064"></a>00064 <span class="comment">       **********************************************************************/</span>
-<a name="l00065"></a><a class="code" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fac720ca87adfc478dbfc13a37f0cf8ba9">00065</a>       FULL = 0,<span class="comment"></span>
-<a name="l00066"></a>00066 <span class="comment">      /**</span>
-<a name="l00067"></a>00067 <span class="comment">       * Schmidt semi-normalized associated Legendre polynomials.  See</span>
-<a name="l00068"></a>00068 <span class="comment">       * SphericalHarmonic::SCHMIDT for documentation.</span>
-<a name="l00069"></a>00069 <span class="comment">       *</span>
-<a name="l00070"></a>00070 <span class="comment">       * @hideinitializer</span>
-<a name="l00071"></a>00071 <span class="comment">       **********************************************************************/</span>
-<a name="l00072"></a><a class="code" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fa2e3db3efd68d118e3f357a97eb77a131">00072</a>       SCHMIDT = 1,<span class="comment"></span>
-<a name="l00073"></a>00073 <span class="comment">      /// \cond SKIP</span>
-<a name="l00074"></a>00074 <span class="comment"></span>      <span class="comment">// These are deprecated...</span>
-<a name="l00075"></a>00075       full = FULL,
-<a name="l00076"></a>00076       schmidt = SCHMIDT,<span class="comment"></span>
-<a name="l00077"></a>00077 <span class="comment">      /// \endcond</span>
-<a name="l00078"></a>00078 <span class="comment"></span>    };
-<a name="l00079"></a>00079 <span class="comment"></span>
-<a name="l00080"></a>00080 <span class="comment">    /**</span>
-<a name="l00081"></a>00081 <span class="comment">     * \brief Package up coefficients for SphericalEngine</span>
-<a name="l00082"></a>00082 <span class="comment">     *</span>
-<a name="l00083"></a>00083 <span class="comment">     * This packages up the \e C, \e S coefficients and information about how</span>
-<a name="l00084"></a>00084 <span class="comment">     * the coefficients are stored into a single structure.  This allows a</span>
-<a name="l00085"></a>00085 <span class="comment">     * vector of type SphericalEngine::coeff to be passed to</span>
-<a name="l00086"></a>00086 <span class="comment">     * SphericalEngine::Value.  This class also includes functions to aid</span>
-<a name="l00087"></a>00087 <span class="comment">     * indexing into \e C and \e S.</span>
-<a name="l00088"></a>00088 <span class="comment">     *</span>
-<a name="l00089"></a>00089 <span class="comment">     * The storage layout of the coefficients is documented in</span>
-<a name="l00090"></a>00090 <span class="comment">     * SphericalHarmonic and SphericalHarmonic::SphericalHarmonic.</span>
-<a name="l00091"></a>00091 <span class="comment">     **********************************************************************/</span>
-<a name="l00092"></a>00092     <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> coeff {
-<a name="l00093"></a>00093     <span class="keyword">private</span>:
-<a name="l00094"></a>00094       <span class="keywordtype">int</span> _N, _nmx, _mmx;
-<a name="l00095"></a>00095       std::vector<real>::const_iterator _Cnm;
-<a name="l00096"></a>00096       std::vector<real>::const_iterator _Snm;
-<a name="l00097"></a>00097     <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00098"></a>00098 <span class="comment">      /**</span>
-<a name="l00099"></a>00099 <span class="comment">       * A default constructor</span>
-<a name="l00100"></a>00100 <span class="comment">       **********************************************************************/</span>
-<a name="l00101"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a98ee0fd797434667a8cb5093d7644af4">00101</a>       <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>()
-<a name="l00102"></a>00102         : _N(-1)
-<a name="l00103"></a>00103         , _nmx(-1)
-<a name="l00104"></a>00104         , _mmx(-1)
-<a name="l00105"></a>00105         , _Cnm(Z_.begin())
-<a name="l00106"></a>00106         , _Snm(Z_.begin()) {}<span class="comment"></span>
-<a name="l00107"></a>00107 <span class="comment">      /**</span>
-<a name="l00108"></a>00108 <span class="comment">       * The general constructor.</span>
-<a name="l00109"></a>00109 <span class="comment">       *</span>
-<a name="l00110"></a>00110 <span class="comment">       * @param[in] C a vector of coefficients for the cosine terms.</span>
-<a name="l00111"></a>00111 <span class="comment">       * @param[in] S a vector of coefficients for the sine terms.</span>
-<a name="l00112"></a>00112 <span class="comment">       * @param[in] N the degree giving storage layout for \e C and \e S.</span>
-<a name="l00113"></a>00113 <span class="comment">       * @param[in] nmx the maximum degree to be used.</span>
-<a name="l00114"></a>00114 <span class="comment">       * @param[in] mmx the maximum order to be used.</span>
-<a name="l00115"></a>00115 <span class="comment">       *</span>
-<a name="l00116"></a>00116 <span class="comment">       * This requires \e N >= \e nmx >= \e mmx >= -1.  \e C and \e S must also</span>
-<a name="l00117"></a>00117 <span class="comment">       * be large enough to hold the coefficients.  Otherwise an exception is</span>
-<a name="l00118"></a>00118 <span class="comment">       * thrown.</span>
-<a name="l00119"></a>00119 <span class="comment">       **********************************************************************/</span>
-<a name="l00120"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a45a4378903a4f3ee817c47b72d086183">00120</a>       <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>(<span class="keyword">const</span> std::vector<real>& C,
-<a name="l00121"></a>00121             <span class="keyword">const</span> std::vector<real>& S,
-<a name="l00122"></a>00122             <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> nmx, <span class="keywordtype">int</span> mmx)
-<a name="l00123"></a>00123         : _N(N)
-<a name="l00124"></a>00124         , _nmx(nmx)
-<a name="l00125"></a>00125         , _mmx(mmx)
-<a name="l00126"></a>00126         , _Cnm(C.begin())
-<a name="l00127"></a>00127         , _Snm(S.begin())
-<a name="l00128"></a>00128       {
-<a name="l00129"></a>00129         <span class="keywordflow">if</span> (!(_N >= _nmx && _nmx >= _mmx && _mmx >= -1))
-<a name="l00130"></a>00130           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad indices for coeff"</span>);
-<a name="l00131"></a>00131         <span class="keywordflow">if</span> (!(index(_nmx, _mmx) < <span class="keywordtype">int</span>(C.size()) &&
-<a name="l00132"></a>00132               index(_nmx, _mmx) < int(S.size()) + (_N + 1)))
-<a name="l00133"></a>00133           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Arrays too small in coeff"</span>);
-<a name="l00134"></a>00134         <a class="code" href="classGeographicLib_1_1SphericalEngine.html#a7fac63262c0a8bb18aee8c962a08d429">SphericalEngine::RootTable</a>(_nmx);
-<a name="l00135"></a>00135       }<span class="comment"></span>
-<a name="l00136"></a>00136 <span class="comment">      /**</span>
-<a name="l00137"></a>00137 <span class="comment">       * The constructor for full coefficient vectors.</span>
-<a name="l00138"></a>00138 <span class="comment">       *</span>
-<a name="l00139"></a>00139 <span class="comment">       * @param[in] C a vector of coefficients for the cosine terms.</span>
-<a name="l00140"></a>00140 <span class="comment">       * @param[in] S a vector of coefficients for the sine terms.</span>
-<a name="l00141"></a>00141 <span class="comment">       * @param[in] N the maximum degree and order.</span>
-<a name="l00142"></a>00142 <span class="comment">       *</span>
-<a name="l00143"></a>00143 <span class="comment">       * This requires \e N >= -1.  \e C and \e S must also be large enough to</span>
-<a name="l00144"></a>00144 <span class="comment">       * hold the coefficients.  Otherwise an exception is thrown.</span>
-<a name="l00145"></a>00145 <span class="comment">       **********************************************************************/</span>
-<a name="l00146"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2f453e210345b33a364bf5a3bee84b7b">00146</a>       <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">coeff</a>(<span class="keyword">const</span> std::vector<real>& C,
-<a name="l00147"></a>00147             <span class="keyword">const</span> std::vector<real>& S,
-<a name="l00148"></a>00148             <span class="keywordtype">int</span> N)
-<a name="l00149"></a>00149         : _N(N)
-<a name="l00150"></a>00150         , _nmx(N)
-<a name="l00151"></a>00151         , _mmx(N)
-<a name="l00152"></a>00152         , _Cnm(C.begin())
-<a name="l00153"></a>00153         , _Snm(S.begin())
-<a name="l00154"></a>00154       {
-<a name="l00155"></a>00155         <span class="keywordflow">if</span> (!(_N >= -1))
-<a name="l00156"></a>00156           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad indices for coeff"</span>);
-<a name="l00157"></a>00157         <span class="keywordflow">if</span> (!(index(_nmx, _mmx) < <span class="keywordtype">int</span>(C.size()) &&
-<a name="l00158"></a>00158               index(_nmx, _mmx) < int(S.size()) + (_N + 1)))
-<a name="l00159"></a>00159           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Arrays too small in coeff"</span>);
-<a name="l00160"></a>00160         <a class="code" href="classGeographicLib_1_1SphericalEngine.html#a7fac63262c0a8bb18aee8c962a08d429">SphericalEngine::RootTable</a>(_nmx);
-<a name="l00161"></a>00161       }<span class="comment"></span>
-<a name="l00162"></a>00162 <span class="comment">      /**</span>
-<a name="l00163"></a>00163 <span class="comment">       * @return \e N the degree giving storage layout for \e C and \e S.</span>
-<a name="l00164"></a>00164 <span class="comment">       **********************************************************************/</span>
-<a name="l00165"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a38ab91101bb639963e094327a22fed59">00165</a>       <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a38ab91101bb639963e094327a22fed59">N</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _N; }<span class="comment"></span>
-<a name="l00166"></a>00166 <span class="comment">      /**</span>
-<a name="l00167"></a>00167 <span class="comment">       * @return \e nmx the maximum degree to be used.</span>
-<a name="l00168"></a>00168 <span class="comment">       **********************************************************************/</span>
-<a name="l00169"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a96467118f9c16c16259d4fbbed3917ff">00169</a>       <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a96467118f9c16c16259d4fbbed3917ff">nmx</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _nmx; }<span class="comment"></span>
-<a name="l00170"></a>00170 <span class="comment">      /**</span>
-<a name="l00171"></a>00171 <span class="comment">       * @return \e mmx the maximum order to be used.</span>
-<a name="l00172"></a>00172 <span class="comment">       **********************************************************************/</span>
-<a name="l00173"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2a1ff83503433c64bd4399689a3e40f6">00173</a>       <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2a1ff83503433c64bd4399689a3e40f6">mmx</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _mmx; }<span class="comment"></span>
-<a name="l00174"></a>00174 <span class="comment">      /**</span>
-<a name="l00175"></a>00175 <span class="comment">       * The one-dimensional index into \e C and \e S.</span>
-<a name="l00176"></a>00176 <span class="comment">       *</span>
-<a name="l00177"></a>00177 <span class="comment">       * @param[in] n the degree.</span>
-<a name="l00178"></a>00178 <span class="comment">       * @param[in] m the order.</span>
-<a name="l00179"></a>00179 <span class="comment">       * @return the one-dimensional index.</span>
-<a name="l00180"></a>00180 <span class="comment">       **********************************************************************/</span>
-<a name="l00181"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a356d705a99ee15089d1faabd0c01084c">00181</a>       <span class="keyword">inline</span> <span class="keywordtype">int</span> index(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m) <span class="keyword">const</span> <span class="keywordflow">throw</span>()
-<a name="l00182"></a>00182       { <span class="keywordflow">return</span> m * _N - m * (m - 1) / 2 + n; }<span class="comment"></span>
-<a name="l00183"></a>00183 <span class="comment">      /**</span>
-<a name="l00184"></a>00184 <span class="comment">       * An element of \e C.</span>
-<a name="l00185"></a>00185 <span class="comment">       *</span>
-<a name="l00186"></a>00186 <span class="comment">       * @param[in] k the one-dimensional index.</span>
-<a name="l00187"></a>00187 <span class="comment">       * @return the value of the \e C coefficient.</span>
-<a name="l00188"></a>00188 <span class="comment">       **********************************************************************/</span>
-<a name="l00189"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ab591ddf74f5653c16b58ed2f5bde5ffe">00189</a>       <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ab591ddf74f5653c16b58ed2f5bde5ffe">Cv</a>(<span class="keywordtype">int</span> k)<span class="keyword"> const  [...]
-<a name="l00190"></a>00190 <span class="comment">      /**</span>
-<a name="l00191"></a>00191 <span class="comment">       * An element of \e S.</span>
-<a name="l00192"></a>00192 <span class="comment">       *</span>
-<a name="l00193"></a>00193 <span class="comment">       * @param[in] k the one-dimensional index.</span>
-<a name="l00194"></a>00194 <span class="comment">       * @return the value of the \e S coefficient.</span>
-<a name="l00195"></a>00195 <span class="comment">       **********************************************************************/</span>
-<a name="l00196"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ac93aaebb09086ab14330aafc0f105a17">00196</a>       <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ac93aaebb09086ab14330aafc0f105a17">Sv</a>(<span class="keywordtype">int</span> k)<span class="keyword"> const  [...]
-<a name="l00197"></a>00197 <span class="comment">      /**</span>
-<a name="l00198"></a>00198 <span class="comment">       * An element of \e C with checking.</span>
-<a name="l00199"></a>00199 <span class="comment">       *</span>
-<a name="l00200"></a>00200 <span class="comment">       * @param[in] k the one-dimensional index.</span>
-<a name="l00201"></a>00201 <span class="comment">       * @param[in] n the requested degree.</span>
-<a name="l00202"></a>00202 <span class="comment">       * @param[in] m the requested order.</span>
-<a name="l00203"></a>00203 <span class="comment">       * @param[in] f a multiplier.</span>
-<a name="l00204"></a>00204 <span class="comment">       * @return the value of the \e C coefficient multiplied by \e f in \e n</span>
-<a name="l00205"></a>00205 <span class="comment">       *   and \e m are in range else 0.</span>
-<a name="l00206"></a>00206 <span class="comment">       **********************************************************************/</span>
-<a name="l00207"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ad30081b2dfdee79652aacbc24bacb635">00207</a>       <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Cv(<span class="keywordtype">int</span> k, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, real f)<span class="keyword"> const</span>
-<a name="l00208"></a>00208 <span class="keyword">      </span>{ <span class="keywordflow">return</span> m > _mmx || n > _nmx ? 0 : *(_Cnm + k) * f; }<span class="comment"></span>
-<a name="l00209"></a>00209 <span class="comment">      /**</span>
-<a name="l00210"></a>00210 <span class="comment">       * An element of \e S with checking.</span>
-<a name="l00211"></a>00211 <span class="comment">       *</span>
-<a name="l00212"></a>00212 <span class="comment">       * @param[in] k the one-dimensional index.</span>
-<a name="l00213"></a>00213 <span class="comment">       * @param[in] n the requested degree.</span>
-<a name="l00214"></a>00214 <span class="comment">       * @param[in] m the requested order.</span>
-<a name="l00215"></a>00215 <span class="comment">       * @param[in] f a multiplier.</span>
-<a name="l00216"></a>00216 <span class="comment">       * @return the value of the \e S coefficient multiplied by \e f in \e n</span>
-<a name="l00217"></a>00217 <span class="comment">       *   and \e m are in range else 0.</span>
-<a name="l00218"></a>00218 <span class="comment">       **********************************************************************/</span>
-<a name="l00219"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a4fc7e6c7faf3f5940ee8f3ab28216897">00219</a>       <span class="keyword">inline</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Sv(<span class="keywordtype">int</span> k, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, real f)<span class="keyword"> const</span>
-<a name="l00220"></a>00220 <span class="keyword">      </span>{ <span class="keywordflow">return</span> m > _mmx || n > _nmx ? 0 : *(_Snm + (k - (_N + 1))) * f; }
-<a name="l00221"></a>00221 <span class="comment"></span>
-<a name="l00222"></a>00222 <span class="comment">      /**</span>
-<a name="l00223"></a>00223 <span class="comment">       * The size of the coefficient vector for the cosine terms.</span>
-<a name="l00224"></a>00224 <span class="comment">       *</span>
-<a name="l00225"></a>00225 <span class="comment">       * @param[in] N the maximum degree.</span>
-<a name="l00226"></a>00226 <span class="comment">       * @param[in] M the maximum order.</span>
-<a name="l00227"></a>00227 <span class="comment">       * @return the size of the vector of cosine terms as stored in column</span>
-<a name="l00228"></a>00228 <span class="comment">       *   major order.</span>
-<a name="l00229"></a>00229 <span class="comment">       **********************************************************************/</span>
-<a name="l00230"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a8a126c9790a7a1609046fbae7934e587">00230</a>       <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> Csize(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)
-<a name="l00231"></a>00231       { <span class="keywordflow">return</span> (M + 1) * (2 * N - M + 2) / 2; }
-<a name="l00232"></a>00232 <span class="comment"></span>
-<a name="l00233"></a>00233 <span class="comment">      /**</span>
-<a name="l00234"></a>00234 <span class="comment">       * The size of the coefficient vector for the sine terms.</span>
-<a name="l00235"></a>00235 <span class="comment">       *</span>
-<a name="l00236"></a>00236 <span class="comment">       * @param[in] N the maximum degree.</span>
-<a name="l00237"></a>00237 <span class="comment">       * @param[in] M the maximum order.</span>
-<a name="l00238"></a>00238 <span class="comment">       * @return the size of the vector of cosine terms as stored in column</span>
-<a name="l00239"></a>00239 <span class="comment">       *   major order.</span>
-<a name="l00240"></a>00240 <span class="comment">       **********************************************************************/</span>
-<a name="l00241"></a><a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a98a75827d68247cf5ad1843d9d68b222">00241</a>       <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> Ssize(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)
-<a name="l00242"></a>00242       { <span class="keywordflow">return</span> Csize(N, M) - (N + 1); }
-<a name="l00243"></a>00243 <span class="comment"></span>
-<a name="l00244"></a>00244 <span class="comment">      /**</span>
-<a name="l00245"></a>00245 <span class="comment">       * Load coefficients from a binary stream.</span>
-<a name="l00246"></a>00246 <span class="comment">       *</span>
-<a name="l00247"></a>00247 <span class="comment">       * @param[in] stream the input stream.</span>
-<a name="l00248"></a>00248 <span class="comment">       * @param[out] N The maximum degree of the coefficients.</span>
-<a name="l00249"></a>00249 <span class="comment">       * @param[out] M The maximum order of the coefficients.</span>
-<a name="l00250"></a>00250 <span class="comment">       * @param[out] C The vector of cosine coefficients.</span>
-<a name="l00251"></a>00251 <span class="comment">       * @param[out] S The vector of sine coefficients.</span>
-<a name="l00252"></a>00252 <span class="comment">       *</span>
-<a name="l00253"></a>00253 <span class="comment">       * \e N and \e M are read as 4-byte ints.  \e C and \e S are resized to</span>
-<a name="l00254"></a>00254 <span class="comment">       * accommodate all the coefficients (with the \e m = 0 coefficients for</span>
-<a name="l00255"></a>00255 <span class="comment">       * \e S excluded) and the data for these coefficients read as 8-byte</span>
-<a name="l00256"></a>00256 <span class="comment">       * doubles.  The coefficients are stored in column major order.  The</span>
-<a name="l00257"></a>00257 <span class="comment">       * bytes in the stream should use little-endian ordering.  IEEE floating</span>
-<a name="l00258"></a>00258 <span class="comment">       * point is assumed for the coefficients.</span>
-<a name="l00259"></a>00259 <span class="comment">       **********************************************************************/</span>
-<a name="l00260"></a>00260       <span class="keyword">static</span> <span class="keywordtype">void</span> readcoeffs(std::istream& stream, <span class="keywordtype">int</span>& N, <span class="keywordtype">int</span>& M,
-<a name="l00261"></a>00261                              std::vector<real>& C, std::vector<real>& S);
-<a name="l00262"></a>00262     };
-<a name="l00263"></a>00263 <span class="comment"></span>
-<a name="l00264"></a>00264 <span class="comment">    /**</span>
-<a name="l00265"></a>00265 <span class="comment">     * Evaluate a spherical harmonic sum and its gradient.</span>
-<a name="l00266"></a>00266 <span class="comment">     *</span>
-<a name="l00267"></a>00267 <span class="comment">     * @tparam gradp should the gradient be calculated.</span>
-<a name="l00268"></a>00268 <span class="comment">     * @tparam norm the normalization for the associated Legendre polynomials.</span>
-<a name="l00269"></a>00269 <span class="comment">     * @tparam L the number of terms in the coefficients.</span>
-<a name="l00270"></a>00270 <span class="comment">     * @param[in] c an array of coeff objects.</span>
-<a name="l00271"></a>00271 <span class="comment">     * @param[in] f array of coefficient multipliers.  f[0] should be 1.</span>
-<a name="l00272"></a>00272 <span class="comment">     * @param[in] x the \e x component of the cartesian position.</span>
-<a name="l00273"></a>00273 <span class="comment">     * @param[in] y the \e y component of the cartesian position.</span>
-<a name="l00274"></a>00274 <span class="comment">     * @param[in] z the \e z component of the cartesian position.</span>
-<a name="l00275"></a>00275 <span class="comment">     * @param[in] a the normalizing radius.</span>
-<a name="l00276"></a>00276 <span class="comment">     * @param[out] gradx the \e x component of the gradient.</span>
-<a name="l00277"></a>00277 <span class="comment">     * @param[out] grady the \e y component of the gradient.</span>
-<a name="l00278"></a>00278 <span class="comment">     * @param[out] gradz the \e z component of the gradient.</span>
-<a name="l00279"></a>00279 <span class="comment">     * @result the spherical harmonic sum.</span>
-<a name="l00280"></a>00280 <span class="comment">     *</span>
-<a name="l00281"></a>00281 <span class="comment">     * See the SphericalHarmonic class for the definition of the sum.</span>
-<a name="l00282"></a>00282 <span class="comment">     * The coefficients used by this function are, for example,</span>
-<a name="l00283"></a>00283 <span class="comment">     * c[0].Cv + f[1] * c[1].Cv + ... + f[L-1] * c[L-1].Cv.  (Note</span>
-<a name="l00284"></a>00284 <span class="comment">     * that f[0] is \e not used.)  The upper limits on the sum are</span>
-<a name="l00285"></a>00285 <span class="comment">     * determined by c[0].nmx() and c[0].mmx(); these limits apply to</span>
-<a name="l00286"></a>00286 <span class="comment">     * \e all the components of the coefficients.  The parameters \e</span>
-<a name="l00287"></a>00287 <span class="comment">     * gradp, \e norm, and \e L are template parameters, to allow more</span>
-<a name="l00288"></a>00288 <span class="comment">     * optimization to be done at compile time.</span>
-<a name="l00289"></a>00289 <span class="comment">     *</span>
-<a name="l00290"></a>00290 <span class="comment">     * Clenshaw summation is used which permits the evaluation of the sum</span>
-<a name="l00291"></a>00291 <span class="comment">     * without the need to allocate temporary arrays.  Thus this function never</span>
-<a name="l00292"></a>00292 <span class="comment">     * throws an exception.</span>
-<a name="l00293"></a>00293 <span class="comment">     **********************************************************************/</span>
-<a name="l00294"></a>00294     <span class="keyword">template</span><<span class="keywordtype">bool</span> gradp, normalization norm, <span class="keywordtype">int</span> L>
-<a name="l00295"></a>00295       <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> Value(<span class="keyword">const</span> coeff c[], <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f[],
-<a name="l00296"></a>00296                               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a,
-<a name="l00297"></a>00297                               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gradx, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& grady, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gradz) <span class="keywordflow">throw</span>();
-<a name="l00298"></a>00298 <span class="comment"></span>
-<a name="l00299"></a>00299 <span class="comment">    /**</span>
-<a name="l00300"></a>00300 <span class="comment">     * Create a CircularEngine object</span>
-<a name="l00301"></a>00301 <span class="comment">     *</span>
-<a name="l00302"></a>00302 <span class="comment">     * @tparam gradp should the gradient be calculated.</span>
-<a name="l00303"></a>00303 <span class="comment">     * @tparam norm the normalization for the associated Legendre polynomials.</span>
-<a name="l00304"></a>00304 <span class="comment">     * @tparam L the number of terms in the coefficients.</span>
-<a name="l00305"></a>00305 <span class="comment">     * @param[in] c an array of coeff objects.</span>
-<a name="l00306"></a>00306 <span class="comment">     * @param[in] f array of coefficient multipliers.  f[0] should be 1.</span>
-<a name="l00307"></a>00307 <span class="comment">     * @param[in] p the radius of the circle = sqrt(<i>x</i><sup>2</sup> + </span>
-<a name="l00308"></a>00308 <span class="comment">     *   <i>y</i><sup>2</sup>).</span>
-<a name="l00309"></a>00309 <span class="comment">     * @param[in] z the height of the circle.</span>
-<a name="l00310"></a>00310 <span class="comment">     * @param[in] a the normalizing radius.</span>
-<a name="l00311"></a>00311 <span class="comment">     * @result the CircularEngine object.</span>
-<a name="l00312"></a>00312 <span class="comment">     *</span>
-<a name="l00313"></a>00313 <span class="comment">     * If you need to evaluate the spherical harmonic sum for several points</span>
-<a name="l00314"></a>00314 <span class="comment">     * with constant \e f, \e p = sqrt(<i>x</i><sup>2</sup> +</span>
-<a name="l00315"></a>00315 <span class="comment">     * <i>y</i><sup>2</sup>), \e z, and \e a, it is more efficient to construct</span>
-<a name="l00316"></a>00316 <span class="comment">     * call SphericalEngine::Circle to give a CircularEngine object and then</span>
-<a name="l00317"></a>00317 <span class="comment">     * call CircularEngine::operator()() with arguments <i>x</i>/\e p and</span>
-<a name="l00318"></a>00318 <span class="comment">     * <i>y</i>/\e p.</span>
-<a name="l00319"></a>00319 <span class="comment">     **********************************************************************/</span>
-<a name="l00320"></a>00320     <span class="keyword">template</span><<span class="keywordtype">bool</span> gradp, normalization norm, <span class="keywordtype">int</span> L>
-<a name="l00321"></a>00321       <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> Circle(<span class="keyword">const</span> coeff c[], <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f[],
-<a name="l00322"></a>00322                                    <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> p, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> z, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a);<span class="comment"></span>
-<a name="l00323"></a>00323 <span class="comment">    /**</span>
-<a name="l00324"></a>00324 <span class="comment">     * Check that the static table of square roots is big enough and enlarge it</span>
-<a name="l00325"></a>00325 <span class="comment">     * if necessary.</span>
-<a name="l00326"></a>00326 <span class="comment">     *</span>
-<a name="l00327"></a>00327 <span class="comment">     * @param[in] N the maximum degree to be used in SphericalEngine.</span>
-<a name="l00328"></a>00328 <span class="comment">     *</span>
-<a name="l00329"></a>00329 <span class="comment">     * Typically, there's no need for an end-user to call this routine, because</span>
-<a name="l00330"></a>00330 <span class="comment">     * the constructors for SphericalEngine::coeff do so.  However, since this</span>
-<a name="l00331"></a>00331 <span class="comment">     * updates a static table, there's a possible race condition in a</span>
-<a name="l00332"></a>00332 <span class="comment">     * multi-threaded environment.  Because this routine does nothing if the</span>
-<a name="l00333"></a>00333 <span class="comment">     * table is already large enough, one way to avoid race conditions is to</span>
-<a name="l00334"></a>00334 <span class="comment">     * call this routine at program start up (when it's still single threaded),</span>
-<a name="l00335"></a>00335 <span class="comment">     * supplying the largest degree that your program will use.  E.g.,</span>
-<a name="l00336"></a>00336 <span class="comment">     \code</span>
-<a name="l00337"></a>00337 <span class="comment">  GeographicLib::SphericalEngine::RootTable(2190);</span>
-<a name="l00338"></a>00338 <span class="comment">     \endcode</span>
-<a name="l00339"></a>00339 <span class="comment">     * suffices to accommodate extant magnetic and gravity models.</span>
-<a name="l00340"></a>00340 <span class="comment">     **********************************************************************/</span>
-<a name="l00341"></a>00341     <span class="keyword">static</span> <span class="keywordtype">void</span> RootTable(<span class="keywordtype">int</span> N);
-<a name="l00342"></a>00342 <span class="comment"></span>
-<a name="l00343"></a>00343 <span class="comment">    /**</span>
-<a name="l00344"></a>00344 <span class="comment">     * Clear the static table of square roots and release the memory.  Call</span>
-<a name="l00345"></a>00345 <span class="comment">     * this only when you are sure you no longer will be using SphericalEngine.</span>
-<a name="l00346"></a>00346 <span class="comment">     * Your program will crash if you call SphericalEngine after calling this</span>
-<a name="l00347"></a>00347 <span class="comment">     * routine.  <b>It's safest not to call this routine at all.</b> (The space</span>
-<a name="l00348"></a>00348 <span class="comment">     * used by the table is modest.)</span>
-<a name="l00349"></a>00349 <span class="comment">     **********************************************************************/</span>
-<a name="l00350"></a><a class="code" href="classGeographicLib_1_1SphericalEngine.html#ab3fb8f933adb257df6b7537268d55a75">00350</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1SphericalEngine.html#ab3fb8f933adb257df6b7537268d55a75">ClearRootTable</a>() {
-<a name="l00351"></a>00351       std::vector<real> temp(0);
-<a name="l00352"></a>00352       root_.swap(temp);
-<a name="l00353"></a>00353     }
-<a name="l00354"></a>00354   };
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358 <span class="preprocessor">#if defined(_MSC_VER)</span>
-<a name="l00359"></a>00359 <span class="preprocessor"></span><span class="preprocessor">#pragma warning (pop)</span>
-<a name="l00360"></a>00360 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00361"></a>00361 <span class="preprocessor"></span>
-<a name="l00362"></a>00362 <span class="preprocessor">#endif  // GEOGRAPHICLIB_SPHERICALENGINE_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalHarmonic1_8hpp.html b/doc/html/SphericalHarmonic1_8hpp.html
deleted file mode 100644
index 73bda18..0000000
--- a/doc/html/SphericalHarmonic1_8hpp.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalHarmonic1.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">SphericalHarmonic1.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html" title="Spherical Harmonic series with a correction to the coefficients.">GeographicLib::SphericalHarmonic1</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <vector></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="SphericalEngine_8hpp_source.html">GeographicLib/SphericalEngine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="CircularEngine_8hpp_source.html">GeographicLib/CircularEngine.hpp</a>></code><br/>
-</div>
-<p><a href="SphericalHarmonic1_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spherical Harmonic series with a correction to the coefficients.  <a href="classGeographicLib_1_1SphericalHarmonic1.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalHarmonic1_8hpp.html#a16f04a6cf043288bc2d78f51d9c42186">GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP</a>   "$Id: 9dd895ded08db0f7fdd82159399da511f40a17e1 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html" title="Spherical Harmonic series with a correction to the coefficients.">GeographicLib::SphericalHarmonic1</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a16f04a6cf043288bc2d78f51d9c42186"></a><!-- doxytag: member="SphericalHarmonic1.hpp::GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP" ref="a16f04a6cf043288bc2d78f51d9c42186" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP   "$Id: 9dd895ded08db0f7fdd82159399da511f40a17e1 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00011">11</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalHarmonic1_8hpp_source.html b/doc/html/SphericalHarmonic1_8hpp_source.html
deleted file mode 100644
index 5bde964..0000000
--- a/doc/html/SphericalHarmonic1_8hpp_source.html
+++ /dev/null
@@ -1,352 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalHarmonic1.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">SphericalHarmonic1.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="SphericalHarmonic1_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file SphericalHarmonic1.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::SphericalHarmonic1 class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP)</span>
-<a name="l00011"></a><a class="code" href="SphericalHarmonic1_8hpp.html#a16f04a6cf043288bc2d78f51d9c42186">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 9dd895ded08db0f7fdd82159399da511f40a17e1 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <vector></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="SphericalEngine_8hpp.html" title="Header for GeographicLib::SphericalEngine class.">GeographicLib/SphericalEngine.hpp</a>></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#include <<a class="code" href="CircularEngine_8hpp.html" title="Header for GeographicLib::CircularEngine class.">GeographicLib/CircularEngine.hpp</a>></span>
-<a name="l00018"></a>00018 
-<a name="l00019"></a>00019 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">  /**</span>
-<a name="l00022"></a>00022 <span class="comment">   * \brief Spherical Harmonic series with a correction to the coefficients.</span>
-<a name="l00023"></a>00023 <span class="comment">   *</span>
-<a name="l00024"></a>00024 <span class="comment">   * This classes is similar to SphericalHarmonic, except that the coefficients</span>
-<a name="l00025"></a>00025 <span class="comment">   * \e C<sub>\e nm</sub> are replaced by \e C<sub>\e nm</sub> + \e tau</span>
-<a name="l00026"></a>00026 <span class="comment">   * C'<sub>\e nm</sub> (and similarly for \e S<sub>\e nm</sub>).</span>
-<a name="l00027"></a>00027 <span class="comment">   *</span>
-<a name="l00028"></a>00028 <span class="comment">   * Example of use:</span>
-<a name="l00029"></a>00029 <span class="comment">   * \include example-SphericalHarmonic1.cpp</span>
-<a name="l00030"></a>00030 <span class="comment">   **********************************************************************/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> SphericalHarmonic1 {
-<a name="l00033"></a>00033   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00034"></a>00034 <span class="comment">    /**</span>
-<a name="l00035"></a>00035 <span class="comment">     * Supported normalizations for associate Legendre polynomials.</span>
-<a name="l00036"></a>00036 <span class="comment">     **********************************************************************/</span>
-<a name="l00037"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916">00037</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916">normalization</a> {<span class="comment"></span>
-<a name="l00038"></a>00038 <span class="comment">      /**</span>
-<a name="l00039"></a>00039 <span class="comment">       * Fully normalized associated Legendre polynomials.  See</span>
-<a name="l00040"></a>00040 <span class="comment">       * SphericalHarmonic::FULL for documentation.</span>
-<a name="l00041"></a>00041 <span class="comment">       *</span>
-<a name="l00042"></a>00042 <span class="comment">       * @hideinitializer</span>
-<a name="l00043"></a>00043 <span class="comment">       **********************************************************************/</span>
-<a name="l00044"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638">00044</a>       FULL = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::FULL,<span class="comment"></span>
-<a name="l00045"></a>00045 <span class="comment">      /**</span>
-<a name="l00046"></a>00046 <span class="comment">       * Schmidt semi-normalized associated Legendre polynomials.  See</span>
-<a name="l00047"></a>00047 <span class="comment">       * SphericalHarmonic::SCHMIDT for documentation.</span>
-<a name="l00048"></a>00048 <span class="comment">       *</span>
-<a name="l00049"></a>00049 <span class="comment">       * @hideinitializer</span>
-<a name="l00050"></a>00050 <span class="comment">       **********************************************************************/</span>
-<a name="l00051"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231">00051</a>       SCHMIDT = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::SCHMIDT,<span class="comment"></span>
-<a name="l00052"></a>00052 <span class="comment">      /// \cond SKIP</span>
-<a name="l00053"></a>00053 <span class="comment"></span>      <span class="comment">// These are deprecated...</span>
-<a name="l00054"></a>00054       full = FULL,
-<a name="l00055"></a>00055       schmidt = SCHMIDT,<span class="comment"></span>
-<a name="l00056"></a>00056 <span class="comment">      /// \endcond</span>
-<a name="l00057"></a>00057 <span class="comment"></span>    };
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   <span class="keyword">private</span>:
-<a name="l00060"></a>00060     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00061"></a>00061     <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff _c[2];
-<a name="l00062"></a>00062     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a;
-<a name="l00063"></a>00063     <span class="keywordtype">unsigned</span> _norm;
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00066"></a>00066 <span class="comment">    /**</span>
-<a name="l00067"></a>00067 <span class="comment">     * Constructor with a full set of coefficients specified.</span>
-<a name="l00068"></a>00068 <span class="comment">     *</span>
-<a name="l00069"></a>00069 <span class="comment">     * @param[in] C the coefficients \e C<sub>\e nm</sub>.</span>
-<a name="l00070"></a>00070 <span class="comment">     * @param[in] S the coefficients \e S<sub>\e nm</sub>.</span>
-<a name="l00071"></a>00071 <span class="comment">     * @param[in] N the maximum degree and order of the sum</span>
-<a name="l00072"></a>00072 <span class="comment">     * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.</span>
-<a name="l00073"></a>00073 <span class="comment">     * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.</span>
-<a name="l00074"></a>00074 <span class="comment">     * @param[in] N1 the maximum degree and order of the correction</span>
-<a name="l00075"></a>00075 <span class="comment">     *   coefficients \e C'<sub>\e nm</sub> and \e S'<sub>\e nm</sub>.</span>
-<a name="l00076"></a>00076 <span class="comment">     * @param[in] a the reference radius appearing in the definition of the</span>
-<a name="l00077"></a>00077 <span class="comment">     *   sum.</span>
-<a name="l00078"></a>00078 <span class="comment">     * @param[in] norm the normalization for the associated Legendre</span>
-<a name="l00079"></a>00079 <span class="comment">     *   polynomials, either SphericalHarmonic1::FULL (the default) or</span>
-<a name="l00080"></a>00080 <span class="comment">     *   SphericalHarmonic1::SCHMIDT.</span>
-<a name="l00081"></a>00081 <span class="comment">     *</span>
-<a name="l00082"></a>00082 <span class="comment">     * See SphericalHarmonic for the way the coefficients should be stored.  \e</span>
-<a name="l00083"></a>00083 <span class="comment">     * N1 should satisfy \e N1 <= \e N.</span>
-<a name="l00084"></a>00084 <span class="comment">     *</span>
-<a name="l00085"></a>00085 <span class="comment">     * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e</span>
-<a name="l00086"></a>00086 <span class="comment">     * C', and \e S'.  These arrays should not be altered or destroyed during</span>
-<a name="l00087"></a>00087 <span class="comment">     * the lifetime of a SphericalHarmonic object.</span>
-<a name="l00088"></a>00088 <span class="comment">     **********************************************************************/</span>
-<a name="l00089"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#aeb3299ea40b0bedae55fd0a6f0c1fa40">00089</a>     SphericalHarmonic1(<span class="keyword">const</span> std::vector<real>& C,
-<a name="l00090"></a>00090                        <span class="keyword">const</span> std::vector<real>& S,
-<a name="l00091"></a>00091                        <span class="keywordtype">int</span> N,
-<a name="l00092"></a>00092                        <span class="keyword">const</span> std::vector<real>& C1,
-<a name="l00093"></a>00093                        <span class="keyword">const</span> std::vector<real>& S1,
-<a name="l00094"></a>00094                        <span class="keywordtype">int</span> N1,
-<a name="l00095"></a>00095                        real a, <span class="keywordtype">unsigned</span> norm = FULL)
-<a name="l00096"></a>00096       : _a(a)
-<a name="l00097"></a>00097       , _norm(norm) {
-<a name="l00098"></a>00098       <span class="keywordflow">if</span> (!(N1 <= N))
-<a name="l00099"></a>00099         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"N1 cannot be larger that N"</span>);
-<a name="l00100"></a>00100       _c[0] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C, S, N);
-<a name="l00101"></a>00101       _c[1] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C1, S1, N1);
-<a name="l00102"></a>00102     }
-<a name="l00103"></a>00103 <span class="comment"></span>
-<a name="l00104"></a>00104 <span class="comment">    /**</span>
-<a name="l00105"></a>00105 <span class="comment">     * Constructor with a subset of coefficients specified.</span>
-<a name="l00106"></a>00106 <span class="comment">     *</span>
-<a name="l00107"></a>00107 <span class="comment">     * @param[in] C the coefficients \e C<sub>\e nm</sub>.</span>
-<a name="l00108"></a>00108 <span class="comment">     * @param[in] S the coefficients \e S<sub>\e nm</sub>.</span>
-<a name="l00109"></a>00109 <span class="comment">     * @param[in] N the degree used to determine the layout of \e C and \e S.</span>
-<a name="l00110"></a>00110 <span class="comment">     * @param[in] nmx the maximum degree used in the sum.  The sum over \e n is</span>
-<a name="l00111"></a>00111 <span class="comment">     *   from 0 thru \e nmx.</span>
-<a name="l00112"></a>00112 <span class="comment">     * @param[in] mmx the maximum order used in the sum.  The sum over \e m is</span>
-<a name="l00113"></a>00113 <span class="comment">     *   from 0 thru min(\e n, \e mmx).</span>
-<a name="l00114"></a>00114 <span class="comment">     * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.</span>
-<a name="l00115"></a>00115 <span class="comment">     * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.</span>
-<a name="l00116"></a>00116 <span class="comment">     * @param[in] N1 the degree used to determine the layout of \e C' and \e</span>
-<a name="l00117"></a>00117 <span class="comment">     *   S'.</span>
-<a name="l00118"></a>00118 <span class="comment">     * @param[in] nmx1 the maximum degree used for \e C' and \e S'.</span>
-<a name="l00119"></a>00119 <span class="comment">     * @param[in] mmx1 the maximum order used for \e C' and \e S'.</span>
-<a name="l00120"></a>00120 <span class="comment">     * @param[in] a the reference radius appearing in the definition of the</span>
-<a name="l00121"></a>00121 <span class="comment">     *   sum.</span>
-<a name="l00122"></a>00122 <span class="comment">     * @param[in] norm the normalization for the associated Legendre</span>
-<a name="l00123"></a>00123 <span class="comment">     *   polynomials, either SphericalHarmonic1::FULL (the default) or</span>
-<a name="l00124"></a>00124 <span class="comment">     *   SphericalHarmonic1::SCHMIDT.</span>
-<a name="l00125"></a>00125 <span class="comment">     *</span>
-<a name="l00126"></a>00126 <span class="comment">     * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e</span>
-<a name="l00127"></a>00127 <span class="comment">     * C', and \e S'.  These arrays should not be altered or destroyed during</span>
-<a name="l00128"></a>00128 <span class="comment">     * the lifetime of a SphericalHarmonic object.</span>
-<a name="l00129"></a>00129 <span class="comment">     **********************************************************************/</span>
-<a name="l00130"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#aca472a143f7e000e232f4c261550b626">00130</a>     SphericalHarmonic1(<span class="keyword">const</span> std::vector<real>& C,
-<a name="l00131"></a>00131                        <span class="keyword">const</span> std::vector<real>& S,
-<a name="l00132"></a>00132                        <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> nmx, <span class="keywordtype">int</span> mmx,
-<a name="l00133"></a>00133                        <span class="keyword">const</span> std::vector<real>& C1,
-<a name="l00134"></a>00134                        <span class="keyword">const</span> std::vector<real>& S1,
-<a name="l00135"></a>00135                        <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> nmx1, <span class="keywordtype">int</span> mmx1,
-<a name="l00136"></a>00136                        real a, <span class="keywordtype">unsigned</span> norm = FULL)
-<a name="l00137"></a>00137       : _a(a)
-<a name="l00138"></a>00138       , _norm(norm) {
-<a name="l00139"></a>00139       <span class="keywordflow">if</span> (!(nmx1 <= nmx))
-<a name="l00140"></a>00140         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"nmx1 cannot be larger that nmx"</span>);
-<a name="l00141"></a>00141       <span class="keywordflow">if</span> (!(mmx1 <= mmx))
-<a name="l00142"></a>00142         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"mmx1 cannot be larger that mmx"</span>);
-<a name="l00143"></a>00143       _c[0] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C, S, N, nmx, mmx);
-<a name="l00144"></a>00144       _c[1] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C1, S1, N1, nmx1, mmx1);
-<a name="l00145"></a>00145     }
-<a name="l00146"></a>00146 <span class="comment"></span>
-<a name="l00147"></a>00147 <span class="comment">    /**</span>
-<a name="l00148"></a>00148 <span class="comment">     * A default constructor so that the object can be created when the</span>
-<a name="l00149"></a>00149 <span class="comment">     * constructor for another object is initialized.  This default object can</span>
-<a name="l00150"></a>00150 <span class="comment">     * then be reset with the default copy assignment operator.</span>
-<a name="l00151"></a>00151 <span class="comment">     **********************************************************************/</span>
-<a name="l00152"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#aa976378e6eae1e85ce04976b631ccb5f">00152</a>     <a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#aa976378e6eae1e85ce04976b631ccb5f">SphericalHarmonic1</a>() {}
-<a name="l00153"></a>00153 <span class="comment"></span>
-<a name="l00154"></a>00154 <span class="comment">    /**</span>
-<a name="l00155"></a>00155 <span class="comment">     * Compute a spherical harmonic sum with a correction term.</span>
-<a name="l00156"></a>00156 <span class="comment">     *</span>
-<a name="l00157"></a>00157 <span class="comment">     * @param[in] tau multiplier for correction coefficients \e C' and \e S'.</span>
-<a name="l00158"></a>00158 <span class="comment">     * @param[in] x cartesian coordinate.</span>
-<a name="l00159"></a>00159 <span class="comment">     * @param[in] y cartesian coordinate.</span>
-<a name="l00160"></a>00160 <span class="comment">     * @param[in] z cartesian coordinate.</span>
-<a name="l00161"></a>00161 <span class="comment">     * @return \e V the spherical harmonic sum.</span>
-<a name="l00162"></a>00162 <span class="comment">     *</span>
-<a name="l00163"></a>00163 <span class="comment">     * This routine requires constant memory and thus never throws</span>
-<a name="l00164"></a>00164 <span class="comment">     * an exception.</span>
-<a name="l00165"></a>00165 <span class="comment">     **********************************************************************/</span>
-<a name="l00166"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#a43098674b6bb823ccbac8908a7831234">00166</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#a43098674b6bb823ccbac8908a7831234">operator()</a>(real tau, real x, real y, real z) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00167"></a>00167       real f[] = {1, tau};
-<a name="l00168"></a>00168       real v = 0;
-<a name="l00169"></a>00169       real dummy;
-<a name="l00170"></a>00170       <span class="keywordflow">switch</span> (_norm) {
-<a name="l00171"></a>00171       <span class="keywordflow">case</span> FULL:
-<a name="l00172"></a>00172         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::FULL, 2>
-<a name="l00173"></a>00173           (_c, f, x, y, z, _a, dummy, dummy, dummy);
-<a name="l00174"></a>00174         <span class="keywordflow">break</span>;
-<a name="l00175"></a>00175       <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00176"></a>00176         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::SCHMIDT, 2>
-<a name="l00177"></a>00177           (_c, f, x, y, z, _a, dummy, dummy, dummy);
-<a name="l00178"></a>00178         <span class="keywordflow">break</span>;
-<a name="l00179"></a>00179       }
-<a name="l00180"></a>00180       <span class="keywordflow">return</span> v;
-<a name="l00181"></a>00181     }
-<a name="l00182"></a>00182 <span class="comment"></span>
-<a name="l00183"></a>00183 <span class="comment">    /**</span>
-<a name="l00184"></a>00184 <span class="comment">     * Compute a spherical harmonic sum with a correction term and its</span>
-<a name="l00185"></a>00185 <span class="comment">     * gradient.</span>
-<a name="l00186"></a>00186 <span class="comment">     *</span>
-<a name="l00187"></a>00187 <span class="comment">     * @param[in] tau multiplier for correction coefficients \e C' and \e S'.</span>
-<a name="l00188"></a>00188 <span class="comment">     * @param[in] x cartesian coordinate.</span>
-<a name="l00189"></a>00189 <span class="comment">     * @param[in] y cartesian coordinate.</span>
-<a name="l00190"></a>00190 <span class="comment">     * @param[in] z cartesian coordinate.</span>
-<a name="l00191"></a>00191 <span class="comment">     * @param[out] gradx \e x component of the gradient</span>
-<a name="l00192"></a>00192 <span class="comment">     * @param[out] grady \e y component of the gradient</span>
-<a name="l00193"></a>00193 <span class="comment">     * @param[out] gradz \e z component of the gradient</span>
-<a name="l00194"></a>00194 <span class="comment">     * @return \e V the spherical harmonic sum.</span>
-<a name="l00195"></a>00195 <span class="comment">     *</span>
-<a name="l00196"></a>00196 <span class="comment">     * This is the same as the previous function, except that the components of</span>
-<a name="l00197"></a>00197 <span class="comment">     * the gradients of the sum in the \e x, \e y, and \e z directions are</span>
-<a name="l00198"></a>00198 <span class="comment">     * computed.  This routine requires constant memory and thus never throws</span>
-<a name="l00199"></a>00199 <span class="comment">     * an exception.</span>
-<a name="l00200"></a>00200 <span class="comment">     **********************************************************************/</span>
-<a name="l00201"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#ac732f25af07eee71ad0ca288a2e86fbd">00201</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real operator()(real tau, real x, real y, real z,
-<a name="l00202"></a>00202                           real& gradx, real& grady, real& gradz) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00203"></a>00203       real f[] = {1, tau};
-<a name="l00204"></a>00204       real v = 0;
-<a name="l00205"></a>00205       <span class="keywordflow">switch</span> (_norm) {
-<a name="l00206"></a>00206       <span class="keywordflow">case</span> FULL:
-<a name="l00207"></a>00207         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::FULL, 2>
-<a name="l00208"></a>00208           (_c, f, x, y, z, _a, gradx, grady, gradz);
-<a name="l00209"></a>00209         <span class="keywordflow">break</span>;
-<a name="l00210"></a>00210       <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00211"></a>00211         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::SCHMIDT, 2>
-<a name="l00212"></a>00212           (_c, f, x, y, z, _a, gradx, grady, gradz);
-<a name="l00213"></a>00213         <span class="keywordflow">break</span>;
-<a name="l00214"></a>00214       }
-<a name="l00215"></a>00215       <span class="keywordflow">return</span> v;
-<a name="l00216"></a>00216     }
-<a name="l00217"></a>00217 <span class="comment"></span>
-<a name="l00218"></a>00218 <span class="comment">    /**</span>
-<a name="l00219"></a>00219 <span class="comment">     * Create a CircularEngine to allow the efficient evaluation of several</span>
-<a name="l00220"></a>00220 <span class="comment">     * points on a circle of latitude at a fixed value of \e tau.</span>
-<a name="l00221"></a>00221 <span class="comment">     *</span>
-<a name="l00222"></a>00222 <span class="comment">     * @param[in] tau the multiplier for the correction coefficients.</span>
-<a name="l00223"></a>00223 <span class="comment">     * @param[in] p the radius of the circle.</span>
-<a name="l00224"></a>00224 <span class="comment">     * @param[in] z the height of the circle above the equatorial plane.</span>
-<a name="l00225"></a>00225 <span class="comment">     * @param[in] gradp if true the returned object will be able to compute the</span>
-<a name="l00226"></a>00226 <span class="comment">     *   gradient of the sum.</span>
-<a name="l00227"></a>00227 <span class="comment">     * @return the CircularEngine object.</span>
-<a name="l00228"></a>00228 <span class="comment">     *</span>
-<a name="l00229"></a>00229 <span class="comment">     * SphericalHarmonic1::operator()() exchanges the order of the sums in the</span>
-<a name="l00230"></a>00230 <span class="comment">     * definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m =</span>
-<a name="l00231"></a>00231 <span class="comment">     * 0..N)[sum(n = m..N)[...]].  SphericalHarmonic1::Circle performs the</span>
-<a name="l00232"></a>00232 <span class="comment">     * inner sum over degree \e n (which entails about <i>N</i><sup>2</sup></span>
-<a name="l00233"></a>00233 <span class="comment">     * operations).  Calling CircularEngine::operator()() on the returned</span>
-<a name="l00234"></a>00234 <span class="comment">     * object performs the outer sum over the order \e m (about \e N</span>
-<a name="l00235"></a>00235 <span class="comment">     * operations).  This routine may throw a bad_alloc exception in the</span>
-<a name="l00236"></a>00236 <span class="comment">     * CircularEngine constructor.</span>
-<a name="l00237"></a>00237 <span class="comment">     *</span>
-<a name="l00238"></a>00238 <span class="comment">     * See SphericalHarmonic::Circle for an example of its use.</span>
-<a name="l00239"></a>00239 <span class="comment">     **********************************************************************/</span>
-<a name="l00240"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#a32dd4989c40181939d667298681625f6">00240</a>     <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#a32dd4989c40181939d667298681625f6">Circle</a>(real tau, real p, real z, <span class="keywordtype">bool</span> gradp)<span class="keyword"> const </span>{
-<a name="l00241"></a>00241       real f[] = {1, tau};
-<a name="l00242"></a>00242       <span class="keywordflow">switch</span> (_norm) {
-<a name="l00243"></a>00243       <span class="keywordflow">case</span> FULL:
-<a name="l00244"></a>00244         <span class="keywordflow">return</span> gradp ?
-<a name="l00245"></a>00245           <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::FULL, 2>
-<a name="l00246"></a>00246           (_c, f, p, z, _a) :
-<a name="l00247"></a>00247           SphericalEngine::Circle<false, SphericalEngine::FULL, 2>
-<a name="l00248"></a>00248           (_c, f, p, z, _a);
-<a name="l00249"></a>00249         <span class="keywordflow">break</span>;
-<a name="l00250"></a>00250       <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00251"></a>00251       <span class="keywordflow">default</span>:                  <span class="comment">// To avoid compiler warnings</span>
-<a name="l00252"></a>00252         <span class="keywordflow">return</span> gradp ?
-<a name="l00253"></a>00253           <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::SCHMIDT, 2>
-<a name="l00254"></a>00254           (_c, f, p, z, _a) :
-<a name="l00255"></a>00255           SphericalEngine::Circle<false, SphericalEngine::SCHMIDT, 2>
-<a name="l00256"></a>00256           (_c, f, p, z, _a);
-<a name="l00257"></a>00257         <span class="keywordflow">break</span>;
-<a name="l00258"></a>00258       }
-<a name="l00259"></a>00259     }
-<a name="l00260"></a>00260 <span class="comment"></span>
-<a name="l00261"></a>00261 <span class="comment">    /**</span>
-<a name="l00262"></a>00262 <span class="comment">     * @return the zeroth SphericalEngine::coeff object.</span>
-<a name="l00263"></a>00263 <span class="comment">     **********************************************************************/</span>
-<a name="l00264"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#a67fe3c8ab08be94a300d07c98814aab0">00264</a>     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff& Coefficients() <span class="keyword">const</span> throw()
-<a name="l00265"></a>00265     { <span class="keywordflow">return</span> _c[0]; }<span class="comment"></span>
-<a name="l00266"></a>00266 <span class="comment">    /**</span>
-<a name="l00267"></a>00267 <span class="comment">     * @return the first SphericalEngine::coeff object.</span>
-<a name="l00268"></a>00268 <span class="comment">     **********************************************************************/</span>
-<a name="l00269"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html#ad200e309790cd6e41bb79529d9076274">00269</a>     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff& Coefficients1() <span class="keyword">const</span> throw()
-<a name="l00270"></a>00270     { <span class="keywordflow">return</span> _c[1]; }
-<a name="l00271"></a>00271   };
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275 <span class="preprocessor">#endif  // GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalHarmonic2_8hpp.html b/doc/html/SphericalHarmonic2_8hpp.html
deleted file mode 100644
index 28cd7ee..0000000
--- a/doc/html/SphericalHarmonic2_8hpp.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalHarmonic2.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">SphericalHarmonic2.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html" title="Spherical Harmonic series with two corrections to the coefficients.">GeographicLib::SphericalHarmonic2</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <vector></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="SphericalEngine_8hpp_source.html">GeographicLib/SphericalEngine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="CircularEngine_8hpp_source.html">GeographicLib/CircularEngine.hpp</a>></code><br/>
-</div>
-<p><a href="SphericalHarmonic2_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spherical Harmonic series with two corrections to the coefficients.  <a href="classGeographicLib_1_1SphericalHarmonic2.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalHarmonic2_8hpp.html#a15f930b306cf77dee059d32d2bb417ad">GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP</a>   "$Id: ce4cda614c1966dea65610bc73bc4db562677fa8 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html" title="Spherical Harmonic series with two corrections to the coefficients.">GeographicLib::SphericalHarmonic2</a> class. </p>
-<p>Copyright (c) Charles Karney (2011, 2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a15f930b306cf77dee059d32d2bb417ad"></a><!-- doxytag: member="SphericalHarmonic2.hpp::GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP" ref="a15f930b306cf77dee059d32d2bb417ad" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP   "$Id: ce4cda614c1966dea65610bc73bc4db562677fa8 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00011">11</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalHarmonic2_8hpp_source.html b/doc/html/SphericalHarmonic2_8hpp_source.html
deleted file mode 100644
index ca3f00a..0000000
--- a/doc/html/SphericalHarmonic2_8hpp_source.html
+++ /dev/null
@@ -1,381 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalHarmonic2.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">SphericalHarmonic2.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="SphericalHarmonic2_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file SphericalHarmonic2.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::SphericalHarmonic2 class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP)</span>
-<a name="l00011"></a><a class="code" href="SphericalHarmonic2_8hpp.html#a15f930b306cf77dee059d32d2bb417ad">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: ce4cda614c1966dea65610bc73bc4db562677fa8 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <vector></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="SphericalEngine_8hpp.html" title="Header for GeographicLib::SphericalEngine class.">GeographicLib/SphericalEngine.hpp</a>></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#include <<a class="code" href="CircularEngine_8hpp.html" title="Header for GeographicLib::CircularEngine class.">GeographicLib/CircularEngine.hpp</a>></span>
-<a name="l00018"></a>00018 
-<a name="l00019"></a>00019 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">  /**</span>
-<a name="l00022"></a>00022 <span class="comment">   * \brief Spherical Harmonic series with two corrections to the coefficients.</span>
-<a name="l00023"></a>00023 <span class="comment">   *</span>
-<a name="l00024"></a>00024 <span class="comment">   * This classes is similar to SphericalHarmonic, except that the coefficients</span>
-<a name="l00025"></a>00025 <span class="comment">   * \e C<sub>\e nm</sub> are replaced by \e C<sub>\e nm</sub> + \e tau'</span>
-<a name="l00026"></a>00026 <span class="comment">   * C'<sub>\e nm</sub> + \e tau'' C''<sub>\e nm</sub> (and similarly for \e</span>
-<a name="l00027"></a>00027 <span class="comment">   * S<sub>\e nm</sub>).</span>
-<a name="l00028"></a>00028 <span class="comment">   *</span>
-<a name="l00029"></a>00029 <span class="comment">   * Example of use:</span>
-<a name="l00030"></a>00030 <span class="comment">   * \include example-SphericalHarmonic2.cpp</span>
-<a name="l00031"></a>00031 <span class="comment">   **********************************************************************/</span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> SphericalHarmonic2 {
-<a name="l00034"></a>00034   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00035"></a>00035 <span class="comment">    /**</span>
-<a name="l00036"></a>00036 <span class="comment">     * Supported normalizations for associate Legendre polynomials.</span>
-<a name="l00037"></a>00037 <span class="comment">     **********************************************************************/</span>
-<a name="l00038"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8be">00038</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8be">normalization</a> {<span class="comment"></span>
-<a name="l00039"></a>00039 <span class="comment">      /**</span>
-<a name="l00040"></a>00040 <span class="comment">       * Fully normalized associated Legendre polynomials.  See</span>
-<a name="l00041"></a>00041 <span class="comment">       * SphericalHarmonic::FULL for documentation.</span>
-<a name="l00042"></a>00042 <span class="comment">       *</span>
-<a name="l00043"></a>00043 <span class="comment">       * @hideinitializer</span>
-<a name="l00044"></a>00044 <span class="comment">       **********************************************************************/</span>
-<a name="l00045"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946">00045</a>       FULL = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::FULL,<span class="comment"></span>
-<a name="l00046"></a>00046 <span class="comment">      /**</span>
-<a name="l00047"></a>00047 <span class="comment">       * Schmidt semi-normalized associated Legendre polynomials.  See</span>
-<a name="l00048"></a>00048 <span class="comment">       * SphericalHarmonic::SCHMIDT for documentation.</span>
-<a name="l00049"></a>00049 <span class="comment">       *</span>
-<a name="l00050"></a>00050 <span class="comment">       * @hideinitializer</span>
-<a name="l00051"></a>00051 <span class="comment">       **********************************************************************/</span>
-<a name="l00052"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58">00052</a>       SCHMIDT = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::SCHMIDT,<span class="comment"></span>
-<a name="l00053"></a>00053 <span class="comment">      /// \cond SKIP</span>
-<a name="l00054"></a>00054 <span class="comment"></span>      <span class="comment">// These are deprecated...</span>
-<a name="l00055"></a>00055       full = FULL,
-<a name="l00056"></a>00056       schmidt = SCHMIDT,<span class="comment"></span>
-<a name="l00057"></a>00057 <span class="comment">      /// \endcond</span>
-<a name="l00058"></a>00058 <span class="comment"></span>    };
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060   <span class="keyword">private</span>:
-<a name="l00061"></a>00061     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00062"></a>00062     <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff _c[3];
-<a name="l00063"></a>00063     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a;
-<a name="l00064"></a>00064     <span class="keywordtype">unsigned</span> _norm;
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00067"></a>00067 <span class="comment">    /**</span>
-<a name="l00068"></a>00068 <span class="comment">     * Constructor with a full set of coefficients specified.</span>
-<a name="l00069"></a>00069 <span class="comment">     *</span>
-<a name="l00070"></a>00070 <span class="comment">     * @param[in] C the coefficients \e C<sub>\e nm</sub>.</span>
-<a name="l00071"></a>00071 <span class="comment">     * @param[in] S the coefficients \e S<sub>\e nm</sub>.</span>
-<a name="l00072"></a>00072 <span class="comment">     * @param[in] N the maximum degree and order of the sum</span>
-<a name="l00073"></a>00073 <span class="comment">     * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.</span>
-<a name="l00074"></a>00074 <span class="comment">     * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.</span>
-<a name="l00075"></a>00075 <span class="comment">     * @param[in] N1 the maximum degree and order of the first correction</span>
-<a name="l00076"></a>00076 <span class="comment">     *   coefficients \e C'<sub>\e nm</sub> and \e S'<sub>\e nm</sub>.</span>
-<a name="l00077"></a>00077 <span class="comment">     * @param[in] C2 the coefficients \e C''<sub>\e nm</sub>.</span>
-<a name="l00078"></a>00078 <span class="comment">     * @param[in] S2 the coefficients \e S''<sub>\e nm</sub>.</span>
-<a name="l00079"></a>00079 <span class="comment">     * @param[in] N2 the maximum degree and order of the second correction</span>
-<a name="l00080"></a>00080 <span class="comment">     *   coefficients \e C'<sub>\e nm</sub> and \e S'<sub>\e nm</sub>.</span>
-<a name="l00081"></a>00081 <span class="comment">     * @param[in] a the reference radius appearing in the definition of the</span>
-<a name="l00082"></a>00082 <span class="comment">     *   sum.</span>
-<a name="l00083"></a>00083 <span class="comment">     * @param[in] norm the normalization for the associated Legendre</span>
-<a name="l00084"></a>00084 <span class="comment">     *   polynomials, either SphericalHarmonic2::FULL (the default) or</span>
-<a name="l00085"></a>00085 <span class="comment">     *   SphericalHarmonic2::SCHMIDT.</span>
-<a name="l00086"></a>00086 <span class="comment">     *</span>
-<a name="l00087"></a>00087 <span class="comment">     * See SphericalHarmonic for the way the coefficients should be stored.  \e</span>
-<a name="l00088"></a>00088 <span class="comment">     * N1 and \e N2 should satisfy \e N1 <= \e N and \e N2 <= \e N.</span>
-<a name="l00089"></a>00089 <span class="comment">     *</span>
-<a name="l00090"></a>00090 <span class="comment">     * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e</span>
-<a name="l00091"></a>00091 <span class="comment">     * C', \e S', \e C'', and \e S''.  These arrays should not be altered or</span>
-<a name="l00092"></a>00092 <span class="comment">     * destroyed during the lifetime of a SphericalHarmonic object.</span>
-<a name="l00093"></a>00093 <span class="comment">     **********************************************************************/</span>
-<a name="l00094"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a897f6b15b82812e874a2b0927cfc3912">00094</a>     SphericalHarmonic2(<span class="keyword">const</span> std::vector<real>& C,
-<a name="l00095"></a>00095                        <span class="keyword">const</span> std::vector<real>& S,
-<a name="l00096"></a>00096                        <span class="keywordtype">int</span> N,
-<a name="l00097"></a>00097                        <span class="keyword">const</span> std::vector<real>& C1,
-<a name="l00098"></a>00098                        <span class="keyword">const</span> std::vector<real>& S1,
-<a name="l00099"></a>00099                        <span class="keywordtype">int</span> N1,
-<a name="l00100"></a>00100                        <span class="keyword">const</span> std::vector<real>& C2,
-<a name="l00101"></a>00101                        <span class="keyword">const</span> std::vector<real>& S2,
-<a name="l00102"></a>00102                        <span class="keywordtype">int</span> N2,
-<a name="l00103"></a>00103                        real a, <span class="keywordtype">unsigned</span> norm = FULL)
-<a name="l00104"></a>00104       : _a(a)
-<a name="l00105"></a>00105       , _norm(norm) {
-<a name="l00106"></a>00106       <span class="keywordflow">if</span> (!(N1 <= N && N2 <= N))
-<a name="l00107"></a>00107         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"N1 and N2 cannot be larger that N"</span>);
-<a name="l00108"></a>00108       _c[0] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C, S, N);
-<a name="l00109"></a>00109       _c[1] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C1, S1, N1);
-<a name="l00110"></a>00110       _c[2] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C2, S2, N2);
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112 <span class="comment"></span>
-<a name="l00113"></a>00113 <span class="comment">    /**</span>
-<a name="l00114"></a>00114 <span class="comment">     * Constructor with a subset of coefficients specified.</span>
-<a name="l00115"></a>00115 <span class="comment">     *</span>
-<a name="l00116"></a>00116 <span class="comment">     * @param[in] C the coefficients \e C<sub>\e nm</sub>.</span>
-<a name="l00117"></a>00117 <span class="comment">     * @param[in] S the coefficients \e S<sub>\e nm</sub>.</span>
-<a name="l00118"></a>00118 <span class="comment">     * @param[in] N the degree used to determine the layout of \e C and \e S.</span>
-<a name="l00119"></a>00119 <span class="comment">     * @param[in] nmx the maximum degree used in the sum.  The sum over \e n is</span>
-<a name="l00120"></a>00120 <span class="comment">     *   from 0 thru \e nmx.</span>
-<a name="l00121"></a>00121 <span class="comment">     * @param[in] mmx the maximum order used in the sum.  The sum over \e m is</span>
-<a name="l00122"></a>00122 <span class="comment">     *   from 0 thru min(\e n, \e mmx).</span>
-<a name="l00123"></a>00123 <span class="comment">     * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.</span>
-<a name="l00124"></a>00124 <span class="comment">     * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.</span>
-<a name="l00125"></a>00125 <span class="comment">     * @param[in] N1 the degree used to determine the layout of \e C' and \e</span>
-<a name="l00126"></a>00126 <span class="comment">     *   S'.</span>
-<a name="l00127"></a>00127 <span class="comment">     * @param[in] nmx1 the maximum degree used for \e C' and \e S'.</span>
-<a name="l00128"></a>00128 <span class="comment">     * @param[in] mmx1 the maximum order used for \e C' and \e S'.</span>
-<a name="l00129"></a>00129 <span class="comment">     * @param[in] C2 the coefficients \e C''<sub>\e nm</sub>.</span>
-<a name="l00130"></a>00130 <span class="comment">     * @param[in] S2 the coefficients \e S''<sub>\e nm</sub>.</span>
-<a name="l00131"></a>00131 <span class="comment">     * @param[in] N2 the degree used to determine the layout of \e C'' and \e</span>
-<a name="l00132"></a>00132 <span class="comment">     *   S''.</span>
-<a name="l00133"></a>00133 <span class="comment">     * @param[in] nmx2 the maximum degree used for \e C'' and \e S''.</span>
-<a name="l00134"></a>00134 <span class="comment">     * @param[in] mmx2 the maximum order used for \e C'' and \e S''.</span>
-<a name="l00135"></a>00135 <span class="comment">     * @param[in] a the reference radius appearing in the definition of the</span>
-<a name="l00136"></a>00136 <span class="comment">     *   sum.</span>
-<a name="l00137"></a>00137 <span class="comment">     * @param[in] norm the normalization for the associated Legendre</span>
-<a name="l00138"></a>00138 <span class="comment">     *   polynomials, either SphericalHarmonic2::FULL (the default) or</span>
-<a name="l00139"></a>00139 <span class="comment">     *   SphericalHarmonic2::SCHMIDT.</span>
-<a name="l00140"></a>00140 <span class="comment">     *</span>
-<a name="l00141"></a>00141 <span class="comment">     * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e</span>
-<a name="l00142"></a>00142 <span class="comment">     * C', \e S', \e C'', and \e S''.  These arrays should not be altered or</span>
-<a name="l00143"></a>00143 <span class="comment">     * destroyed during the lifetime of a SphericalHarmonic object.</span>
-<a name="l00144"></a>00144 <span class="comment">     **********************************************************************/</span>
-<a name="l00145"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a19300de2d629c014883026bf0042b6f0">00145</a>     SphericalHarmonic2(<span class="keyword">const</span> std::vector<real>& C,
-<a name="l00146"></a>00146                        <span class="keyword">const</span> std::vector<real>& S,
-<a name="l00147"></a>00147                        <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> nmx, <span class="keywordtype">int</span> mmx,
-<a name="l00148"></a>00148                        <span class="keyword">const</span> std::vector<real>& C1,
-<a name="l00149"></a>00149                        <span class="keyword">const</span> std::vector<real>& S1,
-<a name="l00150"></a>00150                        <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> nmx1, <span class="keywordtype">int</span> mmx1,
-<a name="l00151"></a>00151                        <span class="keyword">const</span> std::vector<real>& C2,
-<a name="l00152"></a>00152                        <span class="keyword">const</span> std::vector<real>& S2,
-<a name="l00153"></a>00153                        <span class="keywordtype">int</span> N2, <span class="keywordtype">int</span> nmx2, <span class="keywordtype">int</span> mmx2,
-<a name="l00154"></a>00154                        real a, <span class="keywordtype">unsigned</span> norm = FULL)
-<a name="l00155"></a>00155       : _a(a)
-<a name="l00156"></a>00156       , _norm(norm) {
-<a name="l00157"></a>00157       <span class="keywordflow">if</span> (!(nmx1 <= nmx && nmx2 <= nmx))
-<a name="l00158"></a>00158         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"nmx1 and nmx2 cannot be larger that nmx"</span>);
-<a name="l00159"></a>00159       <span class="keywordflow">if</span> (!(mmx1 <= mmx && mmx2 <= mmx))
-<a name="l00160"></a>00160         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"mmx1 and mmx2cannot be larger that mmx"</span>);
-<a name="l00161"></a>00161       _c[0] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C, S, N, nmx, mmx);
-<a name="l00162"></a>00162       _c[1] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C1, S1, N1, nmx1, mmx1);
-<a name="l00163"></a>00163       _c[2] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C2, S2, N2, nmx2, mmx2);
-<a name="l00164"></a>00164     }
-<a name="l00165"></a>00165 <span class="comment"></span>
-<a name="l00166"></a>00166 <span class="comment">    /**</span>
-<a name="l00167"></a>00167 <span class="comment">     * A default constructor so that the object can be created when the</span>
-<a name="l00168"></a>00168 <span class="comment">     * constructor for another object is initialized.  This default object can</span>
-<a name="l00169"></a>00169 <span class="comment">     * then be reset with the default copy assignment operator.</span>
-<a name="l00170"></a>00170 <span class="comment">     **********************************************************************/</span>
-<a name="l00171"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a2fad42164df6175bc376e2f78e3e0c5a">00171</a>     <a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a2fad42164df6175bc376e2f78e3e0c5a">SphericalHarmonic2</a>() {}
-<a name="l00172"></a>00172 <span class="comment"></span>
-<a name="l00173"></a>00173 <span class="comment">    /**</span>
-<a name="l00174"></a>00174 <span class="comment">     * Compute a spherical harmonic sum with two correction terms.</span>
-<a name="l00175"></a>00175 <span class="comment">     *</span>
-<a name="l00176"></a>00176 <span class="comment">     * @param[in] tau1 multiplier for correction coefficients \e C' and \e S'.</span>
-<a name="l00177"></a>00177 <span class="comment">     * @param[in] tau2 multiplier for correction coefficients \e C'' and \e S''.</span>
-<a name="l00178"></a>00178 <span class="comment">     * @param[in] x cartesian coordinate.</span>
-<a name="l00179"></a>00179 <span class="comment">     * @param[in] y cartesian coordinate.</span>
-<a name="l00180"></a>00180 <span class="comment">     * @param[in] z cartesian coordinate.</span>
-<a name="l00181"></a>00181 <span class="comment">     * @return \e V the spherical harmonic sum.</span>
-<a name="l00182"></a>00182 <span class="comment">     *</span>
-<a name="l00183"></a>00183 <span class="comment">     * This routine requires constant memory and thus never throws an</span>
-<a name="l00184"></a>00184 <span class="comment">     * exception.</span>
-<a name="l00185"></a>00185 <span class="comment">     **********************************************************************/</span>
-<a name="l00186"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a48f85ac41417815e6735ff5aa7d74155">00186</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real operator()(real tau1, real tau2, real x, real y, real z)
-<a name="l00187"></a>00187       <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00188"></a>00188       real f[] = {1, tau1, tau2};
-<a name="l00189"></a>00189       real v = 0;
-<a name="l00190"></a>00190       real dummy;
-<a name="l00191"></a>00191       <span class="keywordflow">switch</span> (_norm) {
-<a name="l00192"></a>00192       <span class="keywordflow">case</span> FULL:
-<a name="l00193"></a>00193         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::FULL, 3>
-<a name="l00194"></a>00194           (_c, f, x, y, z, _a, dummy, dummy, dummy);
-<a name="l00195"></a>00195         <span class="keywordflow">break</span>;
-<a name="l00196"></a>00196       <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00197"></a>00197         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::SCHMIDT, 3>
-<a name="l00198"></a>00198           (_c, f, x, y, z, _a, dummy, dummy, dummy);
-<a name="l00199"></a>00199         <span class="keywordflow">break</span>;
-<a name="l00200"></a>00200       }
-<a name="l00201"></a>00201       <span class="keywordflow">return</span> v;
-<a name="l00202"></a>00202     }
-<a name="l00203"></a>00203 <span class="comment"></span>
-<a name="l00204"></a>00204 <span class="comment">    /**</span>
-<a name="l00205"></a>00205 <span class="comment">     * Compute a spherical harmonic sum with two correction terms and its</span>
-<a name="l00206"></a>00206 <span class="comment">     * gradient.</span>
-<a name="l00207"></a>00207 <span class="comment">     *</span>
-<a name="l00208"></a>00208 <span class="comment">     * @param[in] tau1 multiplier for correction coefficients \e C' and \e S'.</span>
-<a name="l00209"></a>00209 <span class="comment">     * @param[in] tau2 multiplier for correction coefficients \e C'' and \e S''.</span>
-<a name="l00210"></a>00210 <span class="comment">     * @param[in] x cartesian coordinate.</span>
-<a name="l00211"></a>00211 <span class="comment">     * @param[in] y cartesian coordinate.</span>
-<a name="l00212"></a>00212 <span class="comment">     * @param[in] z cartesian coordinate.</span>
-<a name="l00213"></a>00213 <span class="comment">     * @param[out] gradx \e x component of the gradient</span>
-<a name="l00214"></a>00214 <span class="comment">     * @param[out] grady \e y component of the gradient</span>
-<a name="l00215"></a>00215 <span class="comment">     * @param[out] gradz \e z component of the gradient</span>
-<a name="l00216"></a>00216 <span class="comment">     * @return \e V the spherical harmonic sum.</span>
-<a name="l00217"></a>00217 <span class="comment">     *</span>
-<a name="l00218"></a>00218 <span class="comment">     * This is the same as the previous function, except that the components of</span>
-<a name="l00219"></a>00219 <span class="comment">     * the gradients of the sum in the \e x, \e y, and \e z directions are</span>
-<a name="l00220"></a>00220 <span class="comment">     * computed.  This routine requires constant memory and thus never throws</span>
-<a name="l00221"></a>00221 <span class="comment">     * an exception.</span>
-<a name="l00222"></a>00222 <span class="comment">     **********************************************************************/</span>
-<a name="l00223"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a762d48fc2c3dc902859286de4df7672c">00223</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real operator()(real tau1, real tau2, real x, real y, real z,
-<a name="l00224"></a>00224                           real& gradx, real& grady, real& gradz) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00225"></a>00225       real f[] = {1, tau1, tau2};
-<a name="l00226"></a>00226       real v = 0;
-<a name="l00227"></a>00227       <span class="keywordflow">switch</span> (_norm) {
-<a name="l00228"></a>00228       <span class="keywordflow">case</span> FULL:
-<a name="l00229"></a>00229         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::FULL, 3>
-<a name="l00230"></a>00230           (_c, f, x, y, z, _a, gradx, grady, gradz);
-<a name="l00231"></a>00231         <span class="keywordflow">break</span>;
-<a name="l00232"></a>00232       <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00233"></a>00233         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::SCHMIDT, 3>
-<a name="l00234"></a>00234           (_c, f, x, y, z, _a, gradx, grady, gradz);
-<a name="l00235"></a>00235         <span class="keywordflow">break</span>;
-<a name="l00236"></a>00236       }
-<a name="l00237"></a>00237       <span class="keywordflow">return</span> v;
-<a name="l00238"></a>00238     }
-<a name="l00239"></a>00239 <span class="comment"></span>
-<a name="l00240"></a>00240 <span class="comment">    /**</span>
-<a name="l00241"></a>00241 <span class="comment">     * Create a CircularEngine to allow the efficient evaluation of several</span>
-<a name="l00242"></a>00242 <span class="comment">     * points on a circle of latitude at fixed values of \e tau1 and \e tau2.</span>
-<a name="l00243"></a>00243 <span class="comment">     *</span>
-<a name="l00244"></a>00244 <span class="comment">     * @param[in] tau1 multiplier for correction coefficients \e C' and \e S'.</span>
-<a name="l00245"></a>00245 <span class="comment">     * @param[in] tau2 multiplier for correction coefficients \e C'' and \e S''.</span>
-<a name="l00246"></a>00246 <span class="comment">     * @param[in] p the radius of the circle.</span>
-<a name="l00247"></a>00247 <span class="comment">     * @param[in] z the height of the circle above the equatorial plane.</span>
-<a name="l00248"></a>00248 <span class="comment">     * @param[in] gradp if true the returned object will be able to compute the</span>
-<a name="l00249"></a>00249 <span class="comment">     *   gradient of the sum.</span>
-<a name="l00250"></a>00250 <span class="comment">     * @return the CircularEngine object.</span>
-<a name="l00251"></a>00251 <span class="comment">     *</span>
-<a name="l00252"></a>00252 <span class="comment">     * SphericalHarmonic2::operator()() exchanges the order of the sums in the</span>
-<a name="l00253"></a>00253 <span class="comment">     * definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m =</span>
-<a name="l00254"></a>00254 <span class="comment">     * 0..N)[sum(n = m..N)[...]].  SphericalHarmonic2::Circle performs the</span>
-<a name="l00255"></a>00255 <span class="comment">     * inner sum over degree \e n (which entails about <i>N</i><sup>2</sup></span>
-<a name="l00256"></a>00256 <span class="comment">     * operations).  Calling CircularEngine::operator()() on the returned</span>
-<a name="l00257"></a>00257 <span class="comment">     * object performs the outer sum over the order \e m (about \e N</span>
-<a name="l00258"></a>00258 <span class="comment">     * operations).  This routine may throw a bad_alloc exception in the</span>
-<a name="l00259"></a>00259 <span class="comment">     * CircularEngine constructor.</span>
-<a name="l00260"></a>00260 <span class="comment">     *</span>
-<a name="l00261"></a>00261 <span class="comment">     * See SphericalHarmonic::Circle for an example of its use.</span>
-<a name="l00262"></a>00262 <span class="comment">     **********************************************************************/</span>
-<a name="l00263"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a3aa683a43a8e9232a16390b09c6be920">00263</a>     <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> Circle(real tau1, real tau2, real p, real z, <span class="keywordtype">bool</span> gradp)<span class="keyword"></span>
-<a name="l00264"></a>00264 <span class="keyword">      const </span>{
-<a name="l00265"></a>00265       real f[] = {1, tau1, tau2};
-<a name="l00266"></a>00266       <span class="keywordflow">switch</span> (_norm) {
-<a name="l00267"></a>00267       <span class="keywordflow">case</span> FULL:
-<a name="l00268"></a>00268         <span class="keywordflow">return</span> gradp ?
-<a name="l00269"></a>00269           <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::FULL, 3>
-<a name="l00270"></a>00270           (_c, f, p, z, _a) :
-<a name="l00271"></a>00271           SphericalEngine::Circle<false, SphericalEngine::FULL, 3>
-<a name="l00272"></a>00272           (_c, f, p, z, _a);
-<a name="l00273"></a>00273         <span class="keywordflow">break</span>;
-<a name="l00274"></a>00274       <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00275"></a>00275       <span class="keywordflow">default</span>:                  <span class="comment">// To avoid compiler warnings</span>
-<a name="l00276"></a>00276         <span class="keywordflow">return</span> gradp ?
-<a name="l00277"></a>00277           <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::SCHMIDT, 3>
-<a name="l00278"></a>00278           (_c, f, p, z, _a) :
-<a name="l00279"></a>00279           SphericalEngine::Circle<false, SphericalEngine::SCHMIDT, 3>
-<a name="l00280"></a>00280           (_c, f, p, z, _a);
-<a name="l00281"></a>00281         <span class="keywordflow">break</span>;
-<a name="l00282"></a>00282       }
-<a name="l00283"></a>00283     }
-<a name="l00284"></a>00284 <span class="comment"></span>
-<a name="l00285"></a>00285 <span class="comment">    /**</span>
-<a name="l00286"></a>00286 <span class="comment">     * @return the zeroth SphericalEngine::coeff object.</span>
-<a name="l00287"></a>00287 <span class="comment">     **********************************************************************/</span>
-<a name="l00288"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a166338f0b4ccf89c48278bb9514046f0">00288</a>     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff& Coefficients() <span class="keyword">const</span> throw()
-<a name="l00289"></a>00289     { <span class="keywordflow">return</span> _c[0]; }<span class="comment"></span>
-<a name="l00290"></a>00290 <span class="comment">    /**</span>
-<a name="l00291"></a>00291 <span class="comment">     * @return the first SphericalEngine::coeff object.</span>
-<a name="l00292"></a>00292 <span class="comment">     **********************************************************************/</span>
-<a name="l00293"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a51751279dc4e0b6e19886723f8e8b493">00293</a>     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff& Coefficients1() <span class="keyword">const</span> throw()
-<a name="l00294"></a>00294     { <span class="keywordflow">return</span> _c[1]; }<span class="comment"></span>
-<a name="l00295"></a>00295 <span class="comment">    /**</span>
-<a name="l00296"></a>00296 <span class="comment">     * @return the second SphericalEngine::coeff object.</span>
-<a name="l00297"></a>00297 <span class="comment">     **********************************************************************/</span>
-<a name="l00298"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html#a676b4c36923744bf5057b24484d9cf60">00298</a>     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff& Coefficients2() <span class="keyword">const</span> throw()
-<a name="l00299"></a>00299     { <span class="keywordflow">return</span> _c[2]; }
-<a name="l00300"></a>00300   };
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304 <span class="preprocessor">#endif  // GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalHarmonic_8hpp.html b/doc/html/SphericalHarmonic_8hpp.html
deleted file mode 100644
index 0ca715b..0000000
--- a/doc/html/SphericalHarmonic_8hpp.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalHarmonic.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">SphericalHarmonic.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">GeographicLib::SphericalHarmonic</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <vector></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="SphericalEngine_8hpp_source.html">GeographicLib/SphericalEngine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="CircularEngine_8hpp_source.html">GeographicLib/CircularEngine.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Geocentric_8hpp_source.html">GeographicLib/Geocentric.hpp</a>></code><br/>
-</div>
-<p><a href="SphericalHarmonic_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spherical Harmonic series.  <a href="classGeographicLib_1_1SphericalHarmonic.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalHarmonic_8hpp.html#ab6742c760b0220c0a0d6423bed5b8bf8">GEOGRAPHICLIB_SPHERICALHARMONIC_HPP</a>   "$Id: 6fa804c46efd01670cfb7835dd022791b60d2942 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">GeographicLib::SphericalHarmonic</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ab6742c760b0220c0a0d6423bed5b8bf8"></a><!-- doxytag: member="SphericalHarmonic.hpp::GEOGRAPHICLIB_SPHERICALHARMONIC_HPP" ref="ab6742c760b0220c0a0d6423bed5b8bf8" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_SPHERICALHARMONIC_HPP   "$Id: 6fa804c46efd01670cfb7835dd022791b60d2942 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="SphericalHarmonic_8hpp_source.html#l00011">11</a> of file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/SphericalHarmonic_8hpp_source.html b/doc/html/SphericalHarmonic_8hpp_source.html
deleted file mode 100644
index 0a8dc2d..0000000
--- a/doc/html/SphericalHarmonic_8hpp_source.html
+++ /dev/null
@@ -1,419 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: SphericalHarmonic.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">SphericalHarmonic.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="SphericalHarmonic_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file SphericalHarmonic.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::SphericalHarmonic class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_SPHERICALHARMONIC_HPP)</span>
-<a name="l00011"></a><a class="code" href="SphericalHarmonic_8hpp.html#ab6742c760b0220c0a0d6423bed5b8bf8">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_SPHERICALHARMONIC_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 6fa804c46efd01670cfb7835dd022791b60d2942 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <vector></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <<a class="code" href="SphericalEngine_8hpp.html" title="Header for GeographicLib::SphericalEngine class.">GeographicLib/SphericalEngine.hpp</a>></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#include <<a class="code" href="CircularEngine_8hpp.html" title="Header for GeographicLib::CircularEngine class.">GeographicLib/CircularEngine.hpp</a>></span>
-<a name="l00018"></a>00018 <span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00021"></a>00021 <span class="comment"></span>
-<a name="l00022"></a>00022 <span class="comment">  /**</span>
-<a name="l00023"></a>00023 <span class="comment">   * \brief Spherical Harmonic series</span>
-<a name="l00024"></a>00024 <span class="comment">   *</span>
-<a name="l00025"></a>00025 <span class="comment">   * This class evaluates the spherical harmonic sum \verbatim</span>
-<a name="l00026"></a>00026 <span class="comment"> V(x, y, z) = sum(n = 0..N)[ q^(n+1) * sum(m = 0..n)[</span>
-<a name="l00027"></a>00027 <span class="comment">   (C[n,m] * cos(m*lambda) + S[n,m] * sin(m*lambda)) *</span>
-<a name="l00028"></a>00028 <span class="comment">   P[n,m](cos(theta)) ] ]</span>
-<a name="l00029"></a>00029 <span class="comment">\endverbatim</span>
-<a name="l00030"></a>00030 <span class="comment">   * where</span>
-<a name="l00031"></a>00031 <span class="comment">   * - <i>p</i><sup>2</sup> = <i>x</i><sup>2</sup> + <i>y</i><sup>2</sup>,</span>
-<a name="l00032"></a>00032 <span class="comment">   * - <i>r</i><sup>2</sup> = <i>p</i><sup>2</sup> + <i>z</i><sup>2</sup>,</span>
-<a name="l00033"></a>00033 <span class="comment">   * - \e q = <i>a</i>/<i>r</i>,</span>
-<a name="l00034"></a>00034 <span class="comment">   * - \e theta = atan2(\e p, \e z) = the spherical \e colatitude,</span>
-<a name="l00035"></a>00035 <span class="comment">   * - \e lambda = atan2(\e y, \e x) = the longitude.</span>
-<a name="l00036"></a>00036 <span class="comment">   * - P<sub>\e nm</sub>(\e t) is the associated Legendre polynomial of degree</span>
-<a name="l00037"></a>00037 <span class="comment">   *   \e n and order \e m.</span>
-<a name="l00038"></a>00038 <span class="comment">   *</span>
-<a name="l00039"></a>00039 <span class="comment">   * Two normalizations are supported for P<sub>\e nm</sub></span>
-<a name="l00040"></a>00040 <span class="comment">   * - fully normalized denoted by SphericalHarmonic::FULL.</span>
-<a name="l00041"></a>00041 <span class="comment">   * - Schmidt semi-normalized denoted by SphericalHarmonic::SCHMIDT.</span>
-<a name="l00042"></a>00042 <span class="comment">   *</span>
-<a name="l00043"></a>00043 <span class="comment">   * Clenshaw summation is used for the sums over both \e n and \e m.  This</span>
-<a name="l00044"></a>00044 <span class="comment">   * allows the computation to be carried out without the need for any</span>
-<a name="l00045"></a>00045 <span class="comment">   * temporary arrays.  See SphericalEngine.cpp for more information on the</span>
-<a name="l00046"></a>00046 <span class="comment">   * implementation.</span>
-<a name="l00047"></a>00047 <span class="comment">   *</span>
-<a name="l00048"></a>00048 <span class="comment">   * References:</span>
-<a name="l00049"></a>00049 <span class="comment">   * - C. W. Clenshaw, A note on the summation of Chebyshev series,</span>
-<a name="l00050"></a>00050 <span class="comment">   *   %Math. Tables Aids Comput. 9(51), 118-120 (1955).</span>
-<a name="l00051"></a>00051 <span class="comment">   * - R. E. Deakin, Derivatives of the earth's potentials, Geomatics</span>
-<a name="l00052"></a>00052 <span class="comment">   *   Research Australasia 68, 31-60, (June 1998).</span>
-<a name="l00053"></a>00053 <span class="comment">   * - W. A. Heiskanen and H. Moritz, Physical Geodesy, (Freeman, San</span>
-<a name="l00054"></a>00054 <span class="comment">   *   Francisco, 1967).  (See Sec. 1-14, for a definition of Pbar.)</span>
-<a name="l00055"></a>00055 <span class="comment">   * - S. A. Holmes and W. E. Featherstone, A unified approach to the</span>
-<a name="l00056"></a>00056 <span class="comment">   *   Clenshaw summation and the recursive computation of very high degree</span>
-<a name="l00057"></a>00057 <span class="comment">   *   and order normalised associated Legendre functions, J. Geod. 76(5),</span>
-<a name="l00058"></a>00058 <span class="comment">   *   279-299 (2002).</span>
-<a name="l00059"></a>00059 <span class="comment">   * - C. C. Tscherning and K. Poder, Some geodetic applications of Clenshaw</span>
-<a name="l00060"></a>00060 <span class="comment">   *   summation, Boll. Geod. Sci. Aff. 41(4), 349-375 (1982).</span>
-<a name="l00061"></a>00061 <span class="comment">   *</span>
-<a name="l00062"></a>00062 <span class="comment">   * Example of use:</span>
-<a name="l00063"></a>00063 <span class="comment">   * \include example-SphericalHarmonic.cpp</span>
-<a name="l00064"></a>00064 <span class="comment">   **********************************************************************/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> SphericalHarmonic {
-<a name="l00067"></a>00067   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00068"></a>00068 <span class="comment">    /**</span>
-<a name="l00069"></a>00069 <span class="comment">     * Supported normalizations for the associated Legendre polynomials.</span>
-<a name="l00070"></a>00070 <span class="comment">     **********************************************************************/</span>
-<a name="l00071"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eb">00071</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eb">normalization</a> {<span class="comment"></span>
-<a name="l00072"></a>00072 <span class="comment">      /**</span>
-<a name="l00073"></a>00073 <span class="comment">       * Fully normalized associated Legendre polynomials.</span>
-<a name="l00074"></a>00074 <span class="comment">       *</span>
-<a name="l00075"></a>00075 <span class="comment">       * These are defined by <i>P</i><sub><i>nm</i></sub><sup>full</sup>(\e z)</span>
-<a name="l00076"></a>00076 <span class="comment">       * = (-1)<sup><i>m</i></sup> sqrt(\e k (2\e n + 1) (\e n - \e m)! / (\e n</span>
-<a name="l00077"></a>00077 <span class="comment">       * + \e m)!) <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z), where</span>
-<a name="l00078"></a>00078 <span class="comment">       * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers</span>
-<a name="l00079"></a>00079 <span class="comment">       * function (also known as the Legendre function on the cut or the</span>
-<a name="l00080"></a>00080 <span class="comment">       * associated Legendre polynomial) http://dlmf.nist.gov/14.7.E10 and \e k</span>
-<a name="l00081"></a>00081 <span class="comment">       * = 1 for \e m = 0 and \e k = 2 otherwise.</span>
-<a name="l00082"></a>00082 <span class="comment">       *</span>
-<a name="l00083"></a>00083 <span class="comment">       * The mean squared value of</span>
-<a name="l00084"></a>00084 <span class="comment">       * <i>P</i><sub><i>nm</i></sub><sup>full</sup>(cos \e theta) cos(\e m \e</span>
-<a name="l00085"></a>00085 <span class="comment">       * lambda) and <i>P</i><sub><i>nm</i></sub><sup>full</sup>(cos \e theta)</span>
-<a name="l00086"></a>00086 <span class="comment">       * sin(\e m \e lambda) over the sphere is 1.</span>
-<a name="l00087"></a>00087 <span class="comment">       *</span>
-<a name="l00088"></a>00088 <span class="comment">       * @hideinitializer</span>
-<a name="l00089"></a>00089 <span class="comment">       **********************************************************************/</span>
-<a name="l00090"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">00090</a>       FULL = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::FULL,<span class="comment"></span>
-<a name="l00091"></a>00091 <span class="comment">      /**</span>
-<a name="l00092"></a>00092 <span class="comment">       * Schmidt semi-normalized associated Legendre polynomials.</span>
-<a name="l00093"></a>00093 <span class="comment">       *</span>
-<a name="l00094"></a>00094 <span class="comment">       * These are defined by <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(\e</span>
-<a name="l00095"></a>00095 <span class="comment">       * z) = (-1)<sup><i>m</i></sup> sqrt(\e k (\e n - \e m)! / (\e n + \e</span>
-<a name="l00096"></a>00096 <span class="comment">       * m)!)  <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z), where</span>
-<a name="l00097"></a>00097 <span class="comment">       * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers</span>
-<a name="l00098"></a>00098 <span class="comment">       * function (also known as the Legendre function on the cut or the</span>
-<a name="l00099"></a>00099 <span class="comment">       * associated Legendre polynomial) http://dlmf.nist.gov/14.7.E10 and \e k</span>
-<a name="l00100"></a>00100 <span class="comment">       * = 1 for \e m = 0 and \e k = 2 otherwise.</span>
-<a name="l00101"></a>00101 <span class="comment">       *</span>
-<a name="l00102"></a>00102 <span class="comment">       * The mean squared value of</span>
-<a name="l00103"></a>00103 <span class="comment">       * <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(cos \e theta) cos(\e m</span>
-<a name="l00104"></a>00104 <span class="comment">       * \e lambda) and <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(cos \e</span>
-<a name="l00105"></a>00105 <span class="comment">       * theta) sin(\e m \e lambda) over the sphere is 1/(2\e n + 1).</span>
-<a name="l00106"></a>00106 <span class="comment">       *</span>
-<a name="l00107"></a>00107 <span class="comment">       * @hideinitializer</span>
-<a name="l00108"></a>00108 <span class="comment">       **********************************************************************/</span>
-<a name="l00109"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">00109</a>       SCHMIDT = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::SCHMIDT,<span class="comment"></span>
-<a name="l00110"></a>00110 <span class="comment">      /// \cond SKIP</span>
-<a name="l00111"></a>00111 <span class="comment"></span>      <span class="comment">// These are deprecated...</span>
-<a name="l00112"></a>00112       full = FULL,
-<a name="l00113"></a>00113       schmidt = SCHMIDT,<span class="comment"></span>
-<a name="l00114"></a>00114 <span class="comment">      /// \endcond</span>
-<a name="l00115"></a>00115 <span class="comment"></span>    };
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117   <span class="keyword">private</span>:
-<a name="l00118"></a>00118     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00119"></a>00119     <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff _c[1];
-<a name="l00120"></a>00120     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a;
-<a name="l00121"></a>00121     <span class="keywordtype">unsigned</span> _norm;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123   <span class="keyword">public</span>:<span class="comment"></span>
-<a name="l00124"></a>00124 <span class="comment">    /**</span>
-<a name="l00125"></a>00125 <span class="comment">     * Constructor with a full set of coefficients specified.</span>
-<a name="l00126"></a>00126 <span class="comment">     *</span>
-<a name="l00127"></a>00127 <span class="comment">     * @param[in] C the coefficients \e C<sub>\e nm</sub>.</span>
-<a name="l00128"></a>00128 <span class="comment">     * @param[in] S the coefficients \e S<sub>\e nm</sub>.</span>
-<a name="l00129"></a>00129 <span class="comment">     * @param[in] N the maximum degree and order of the sum</span>
-<a name="l00130"></a>00130 <span class="comment">     * @param[in] a the reference radius appearing in the definition of the</span>
-<a name="l00131"></a>00131 <span class="comment">     *   sum.</span>
-<a name="l00132"></a>00132 <span class="comment">     * @param[in] norm the normalization for the associated Legendre</span>
-<a name="l00133"></a>00133 <span class="comment">     *   polynomials, either SphericalHarmonic::full (the default) or</span>
-<a name="l00134"></a>00134 <span class="comment">     *   SphericalHarmonic::schmidt.</span>
-<a name="l00135"></a>00135 <span class="comment">     *</span>
-<a name="l00136"></a>00136 <span class="comment">     * The coefficients \e C<sub>\e nm</sub> and \e S<sub>\e nm</sub> are</span>
-<a name="l00137"></a>00137 <span class="comment">     * stored in the one-dimensional vectors \e C and \e S which must contain</span>
-<a name="l00138"></a>00138 <span class="comment">     * (\e N + 1)(\e N + 2)/2 and N (\e N + 1)/2 elements, respectively, stored</span>
-<a name="l00139"></a>00139 <span class="comment">     * in "column-major" order.  Thus for \e N = 3, the order would be:</span>
-<a name="l00140"></a>00140 <span class="comment">     * <i>C</i><sub>00</sub>,</span>
-<a name="l00141"></a>00141 <span class="comment">     * <i>C</i><sub>10</sub>,</span>
-<a name="l00142"></a>00142 <span class="comment">     * <i>C</i><sub>20</sub>,</span>
-<a name="l00143"></a>00143 <span class="comment">     * <i>C</i><sub>30</sub>,</span>
-<a name="l00144"></a>00144 <span class="comment">     * <i>C</i><sub>11</sub>,</span>
-<a name="l00145"></a>00145 <span class="comment">     * <i>C</i><sub>21</sub>,</span>
-<a name="l00146"></a>00146 <span class="comment">     * <i>C</i><sub>31</sub>,</span>
-<a name="l00147"></a>00147 <span class="comment">     * <i>C</i><sub>22</sub>,</span>
-<a name="l00148"></a>00148 <span class="comment">     * <i>C</i><sub>32</sub>,</span>
-<a name="l00149"></a>00149 <span class="comment">     * <i>C</i><sub>33</sub>.</span>
-<a name="l00150"></a>00150 <span class="comment">     * In general the (\e n,\e m) element is at index \e m*\e N - \e m*(\e m -</span>
-<a name="l00151"></a>00151 <span class="comment">     * 1)/2 + \e n.  The layout of \e S is the same except that the first</span>
-<a name="l00152"></a>00152 <span class="comment">     * column is omitted (since the \e m = 0 terms never contribute to the sum)</span>
-<a name="l00153"></a>00153 <span class="comment">     * and the 0th element is <i>S</i><sub>11</sub></span>
-<a name="l00154"></a>00154 <span class="comment">     *</span>
-<a name="l00155"></a>00155 <span class="comment">     * The class stores <i>pointers</i> to the first elements of \e C and \e S.</span>
-<a name="l00156"></a>00156 <span class="comment">     * These arrays should not be altered or destroyed during the lifetime of a</span>
-<a name="l00157"></a>00157 <span class="comment">     * SphericalHarmonic object.</span>
-<a name="l00158"></a>00158 <span class="comment">     **********************************************************************/</span>
-<a name="l00159"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#adb71d28aa60a813ca3384f9c58ef8fa1">00159</a>     SphericalHarmonic(<span class="keyword">const</span> std::vector<real>& C,
-<a name="l00160"></a>00160                       <span class="keyword">const</span> std::vector<real>& S,
-<a name="l00161"></a>00161                       <span class="keywordtype">int</span> N, real a, <span class="keywordtype">unsigned</span> norm = FULL)
-<a name="l00162"></a>00162       : _a(a)
-<a name="l00163"></a>00163       , _norm(norm)
-<a name="l00164"></a>00164     { _c[0] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C, S, N); }
-<a name="l00165"></a>00165 <span class="comment"></span>
-<a name="l00166"></a>00166 <span class="comment">    /**</span>
-<a name="l00167"></a>00167 <span class="comment">     * Constructor with a subset of coefficients specified.</span>
-<a name="l00168"></a>00168 <span class="comment">     *</span>
-<a name="l00169"></a>00169 <span class="comment">     * @param[in] C the coefficients \e C<sub>\e nm</sub>.</span>
-<a name="l00170"></a>00170 <span class="comment">     * @param[in] S the coefficients \e S<sub>\e nm</sub>.</span>
-<a name="l00171"></a>00171 <span class="comment">     * @param[in] N the degree used to determine the layout of \e C and \e S.</span>
-<a name="l00172"></a>00172 <span class="comment">     * @param[in] nmx the maximum degree used in the sum.  The sum over \e n is</span>
-<a name="l00173"></a>00173 <span class="comment">     *   from 0 thru \e nmx.</span>
-<a name="l00174"></a>00174 <span class="comment">     * @param[in] mmx the maximum order used in the sum.  The sum over \e m is</span>
-<a name="l00175"></a>00175 <span class="comment">     *   from 0 thru min(\e n, \e mmx).</span>
-<a name="l00176"></a>00176 <span class="comment">     * @param[in] a the reference radius appearing in the definition of the</span>
-<a name="l00177"></a>00177 <span class="comment">     *   sum.</span>
-<a name="l00178"></a>00178 <span class="comment">     * @param[in] norm the normalization for the associated Legendre</span>
-<a name="l00179"></a>00179 <span class="comment">     *   polynomials, either SphericalHarmonic::FULL (the default) or</span>
-<a name="l00180"></a>00180 <span class="comment">     *   SphericalHarmonic::SCHMIDT.</span>
-<a name="l00181"></a>00181 <span class="comment">     *</span>
-<a name="l00182"></a>00182 <span class="comment">     * The class stores <i>pointers</i> to the first elements of \e C and \e S.</span>
-<a name="l00183"></a>00183 <span class="comment">     * These arrays should not be altered or destroyed during the lifetime of a</span>
-<a name="l00184"></a>00184 <span class="comment">     * SphericalHarmonic object.</span>
-<a name="l00185"></a>00185 <span class="comment">     **********************************************************************/</span>
-<a name="l00186"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a2ed62c0ad8fb1ab36d5a331a3f33c3d7">00186</a>     SphericalHarmonic(<span class="keyword">const</span> std::vector<real>& C,
-<a name="l00187"></a>00187                       <span class="keyword">const</span> std::vector<real>& S,
-<a name="l00188"></a>00188                       <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> nmx, <span class="keywordtype">int</span> mmx,
-<a name="l00189"></a>00189                       real a, <span class="keywordtype">unsigned</span> norm = FULL)
-<a name="l00190"></a>00190       : _a(a)
-<a name="l00191"></a>00191       , _norm(norm)
-<a name="l00192"></a>00192     { _c[0] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C, S, N, nmx, mmx); }
-<a name="l00193"></a>00193 <span class="comment"></span>
-<a name="l00194"></a>00194 <span class="comment">    /**</span>
-<a name="l00195"></a>00195 <span class="comment">     * A default constructor so that the object can be created when the</span>
-<a name="l00196"></a>00196 <span class="comment">     * constructor for another object is initialized.  This default object can</span>
-<a name="l00197"></a>00197 <span class="comment">     * then be reset with the default copy assignment operator.</span>
-<a name="l00198"></a>00198 <span class="comment">     **********************************************************************/</span>
-<a name="l00199"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a6d97388f273d1511a8191d812e9bde3e">00199</a>     <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a6d97388f273d1511a8191d812e9bde3e">SphericalHarmonic</a>() {}
-<a name="l00200"></a>00200 <span class="comment"></span>
-<a name="l00201"></a>00201 <span class="comment">    /**</span>
-<a name="l00202"></a>00202 <span class="comment">     * Compute the spherical harmonic sum.</span>
-<a name="l00203"></a>00203 <span class="comment">     *</span>
-<a name="l00204"></a>00204 <span class="comment">     * @param[in] x cartesian coordinate.</span>
-<a name="l00205"></a>00205 <span class="comment">     * @param[in] y cartesian coordinate.</span>
-<a name="l00206"></a>00206 <span class="comment">     * @param[in] z cartesian coordinate.</span>
-<a name="l00207"></a>00207 <span class="comment">     * @return \e V the spherical harmonic sum.</span>
-<a name="l00208"></a>00208 <span class="comment">     *</span>
-<a name="l00209"></a>00209 <span class="comment">     * This routine requires constant memory and thus never throws an</span>
-<a name="l00210"></a>00210 <span class="comment">     * exception.</span>
-<a name="l00211"></a>00211 <span class="comment">     **********************************************************************/</span>
-<a name="l00212"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a42480d85a81238f612a6178410bf97ff">00212</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a42480d85a81238f612a6178410bf97ff">operator()</a>(real x, real y, real z) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00213"></a>00213       real f[] = {1};
-<a name="l00214"></a>00214       real v = 0;
-<a name="l00215"></a>00215       real dummy;
-<a name="l00216"></a>00216       <span class="keywordflow">switch</span> (_norm) {
-<a name="l00217"></a>00217       <span class="keywordflow">case</span> FULL:
-<a name="l00218"></a>00218         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::FULL, 1>
-<a name="l00219"></a>00219           (_c, f, x, y, z, _a, dummy, dummy, dummy);
-<a name="l00220"></a>00220         <span class="keywordflow">break</span>;
-<a name="l00221"></a>00221       <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00222"></a>00222         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<false, SphericalEngine::SCHMIDT, 1>
-<a name="l00223"></a>00223           (_c, f, x, y, z, _a, dummy, dummy, dummy);
-<a name="l00224"></a>00224         <span class="keywordflow">break</span>;
-<a name="l00225"></a>00225       }
-<a name="l00226"></a>00226       <span class="keywordflow">return</span> v;
-<a name="l00227"></a>00227     }
-<a name="l00228"></a>00228 <span class="comment"></span>
-<a name="l00229"></a>00229 <span class="comment">    /**</span>
-<a name="l00230"></a>00230 <span class="comment">     * Compute a spherical harmonic sum and its gradient.</span>
-<a name="l00231"></a>00231 <span class="comment">     *</span>
-<a name="l00232"></a>00232 <span class="comment">     * @param[in] x cartesian coordinate.</span>
-<a name="l00233"></a>00233 <span class="comment">     * @param[in] y cartesian coordinate.</span>
-<a name="l00234"></a>00234 <span class="comment">     * @param[in] z cartesian coordinate.</span>
-<a name="l00235"></a>00235 <span class="comment">     * @param[out] gradx \e x component of the gradient</span>
-<a name="l00236"></a>00236 <span class="comment">     * @param[out] grady \e y component of the gradient</span>
-<a name="l00237"></a>00237 <span class="comment">     * @param[out] gradz \e z component of the gradient</span>
-<a name="l00238"></a>00238 <span class="comment">     * @return \e V the spherical harmonic sum.</span>
-<a name="l00239"></a>00239 <span class="comment">     *</span>
-<a name="l00240"></a>00240 <span class="comment">     * This is the same as the previous function, except that the components of</span>
-<a name="l00241"></a>00241 <span class="comment">     * the gradients of the sum in the \e x, \e y, and \e z directions are</span>
-<a name="l00242"></a>00242 <span class="comment">     * computed.  This routine requires constant memory and thus never throws</span>
-<a name="l00243"></a>00243 <span class="comment">     * an exception.</span>
-<a name="l00244"></a>00244 <span class="comment">     **********************************************************************/</span>
-<a name="l00245"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a5046d787c241c5216cfeb0062673cbd7">00245</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real operator()(real x, real y, real z,
-<a name="l00246"></a>00246                           real& gradx, real& grady, real& gradz) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00247"></a>00247       real f[] = {1};
-<a name="l00248"></a>00248       real v = 0;
-<a name="l00249"></a>00249       <span class="keywordflow">switch</span> (_norm) {
-<a name="l00250"></a>00250       <span class="keywordflow">case</span> FULL:
-<a name="l00251"></a>00251         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::FULL, 1>
-<a name="l00252"></a>00252           (_c, f, x, y, z, _a, gradx, grady, gradz);
-<a name="l00253"></a>00253         <span class="keywordflow">break</span>;
-<a name="l00254"></a>00254       <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00255"></a>00255         v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::SCHMIDT, 1>
-<a name="l00256"></a>00256           (_c, f, x, y, z, _a, gradx, grady, gradz);
-<a name="l00257"></a>00257         <span class="keywordflow">break</span>;
-<a name="l00258"></a>00258       }
-<a name="l00259"></a>00259       <span class="keywordflow">return</span> v;
-<a name="l00260"></a>00260     }
-<a name="l00261"></a>00261 <span class="comment"></span>
-<a name="l00262"></a>00262 <span class="comment">    /**</span>
-<a name="l00263"></a>00263 <span class="comment">     * Create a CircularEngine to allow the efficient evaluation of several</span>
-<a name="l00264"></a>00264 <span class="comment">     * points on a circle of latitude.</span>
-<a name="l00265"></a>00265 <span class="comment">     *</span>
-<a name="l00266"></a>00266 <span class="comment">     * @param[in] p the radius of the circle.</span>
-<a name="l00267"></a>00267 <span class="comment">     * @param[in] z the height of the circle above the equatorial plane.</span>
-<a name="l00268"></a>00268 <span class="comment">     * @param[in] gradp if true the returned object will be able to compute the</span>
-<a name="l00269"></a>00269 <span class="comment">     *   gradient of the sum.</span>
-<a name="l00270"></a>00270 <span class="comment">     * @return the CircularEngine object.</span>
-<a name="l00271"></a>00271 <span class="comment">     *</span>
-<a name="l00272"></a>00272 <span class="comment">     * SphericalHarmonic::operator()() exchanges the order of the sums in the</span>
-<a name="l00273"></a>00273 <span class="comment">     * definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m =</span>
-<a name="l00274"></a>00274 <span class="comment">     * 0..N)[sum(n = m..N)[...]].  SphericalHarmonic::Circle performs the inner</span>
-<a name="l00275"></a>00275 <span class="comment">     * sum over degree \e n (which entails about <i>N</i><sup>2</sup></span>
-<a name="l00276"></a>00276 <span class="comment">     * operations).  Calling CircularEngine::operator()() on the returned</span>
-<a name="l00277"></a>00277 <span class="comment">     * object performs the outer sum over the order \e m (about \e N</span>
-<a name="l00278"></a>00278 <span class="comment">     * operations).  This routine may throw a bad_alloc exception in the</span>
-<a name="l00279"></a>00279 <span class="comment">     * CircularEngine constructor.</span>
-<a name="l00280"></a>00280 <span class="comment">     *</span>
-<a name="l00281"></a>00281 <span class="comment">     * Here's an example of computing the spherical sum at a sequence of</span>
-<a name="l00282"></a>00282 <span class="comment">     * longitudes without using a CircularEngine object</span>
-<a name="l00283"></a>00283 <span class="comment">     \code</span>
-<a name="l00284"></a>00284 <span class="comment">  SphericalHarmonic h(...);     // Create the SphericalHarmonic object</span>
-<a name="l00285"></a>00285 <span class="comment">  double r = 2, lat = 33, lon0 = 44, dlon = 0.01;</span>
-<a name="l00286"></a>00286 <span class="comment">  double</span>
-<a name="l00287"></a>00287 <span class="comment">    phi = lat * Math::degree<double>(),</span>
-<a name="l00288"></a>00288 <span class="comment">    z = r * sin(phi), p = r * cos(phi);</span>
-<a name="l00289"></a>00289 <span class="comment">  for (int i = 0; i <= 100; ++i) {</span>
-<a name="l00290"></a>00290 <span class="comment">    real</span>
-<a name="l00291"></a>00291 <span class="comment">      lon = lon0 + i * dlon,</span>
-<a name="l00292"></a>00292 <span class="comment">      lam = lon * Math::degree<double>();</span>
-<a name="l00293"></a>00293 <span class="comment">    std::cout << lon << " " << h(p * cos(lam), p * sin(lam), z) << "\n";</span>
-<a name="l00294"></a>00294 <span class="comment">  }</span>
-<a name="l00295"></a>00295 <span class="comment">     \endcode</span>
-<a name="l00296"></a>00296 <span class="comment">     * Here is the same calculation done using a CircularEngine object.  This</span>
-<a name="l00297"></a>00297 <span class="comment">     * will be about <i>N</i>/2 times faster.</span>
-<a name="l00298"></a>00298 <span class="comment">     \code</span>
-<a name="l00299"></a>00299 <span class="comment">  SphericalHarmonic h(...);     // Create the SphericalHarmonic object</span>
-<a name="l00300"></a>00300 <span class="comment">  double r = 2, lat = 33, lon0 = 44, dlon = 0.01;</span>
-<a name="l00301"></a>00301 <span class="comment">  double</span>
-<a name="l00302"></a>00302 <span class="comment">    phi = lat * Math::degree<double>(),</span>
-<a name="l00303"></a>00303 <span class="comment">    z = r * sin(phi), p = r * cos(phi);</span>
-<a name="l00304"></a>00304 <span class="comment">  CircularEngine c(h(p, z, false)); // Create the CircularEngine object</span>
-<a name="l00305"></a>00305 <span class="comment">  for (int i = 0; i <= 100; ++i) {</span>
-<a name="l00306"></a>00306 <span class="comment">    real</span>
-<a name="l00307"></a>00307 <span class="comment">      lon = lon0 + i * dlon;</span>
-<a name="l00308"></a>00308 <span class="comment">    std::cout << lon << " " << c(lon) << "\n";</span>
-<a name="l00309"></a>00309 <span class="comment">  }</span>
-<a name="l00310"></a>00310 <span class="comment">     \endcode</span>
-<a name="l00311"></a>00311 <span class="comment">     **********************************************************************/</span>
-<a name="l00312"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">00312</a>     <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">Circle</a>(real p, real z, <span class="keywordtype">bool</span> gradp)<span class="keyword"> const </span>{
-<a name="l00313"></a>00313       real f[] = {1};
-<a name="l00314"></a>00314       <span class="keywordflow">switch</span> (_norm) {
-<a name="l00315"></a>00315       <span class="keywordflow">case</span> FULL:
-<a name="l00316"></a>00316         <span class="keywordflow">return</span> gradp ?
-<a name="l00317"></a>00317           <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::FULL, 1>
-<a name="l00318"></a>00318           (_c, f, p, z, _a) :
-<a name="l00319"></a>00319           SphericalEngine::Circle<false, SphericalEngine::FULL, 1>
-<a name="l00320"></a>00320           (_c, f, p, z, _a);
-<a name="l00321"></a>00321         <span class="keywordflow">break</span>;
-<a name="l00322"></a>00322       <span class="keywordflow">case</span> SCHMIDT:
-<a name="l00323"></a>00323       <span class="keywordflow">default</span>:                  <span class="comment">// To avoid compiler warnings</span>
-<a name="l00324"></a>00324         <span class="keywordflow">return</span> gradp ?
-<a name="l00325"></a>00325           <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Circle<true, SphericalEngine::SCHMIDT, 1>
-<a name="l00326"></a>00326           (_c, f, p, z, _a) :
-<a name="l00327"></a>00327           SphericalEngine::Circle<false, SphericalEngine::SCHMIDT, 1>
-<a name="l00328"></a>00328           (_c, f, p, z, _a);
-<a name="l00329"></a>00329         <span class="keywordflow">break</span>;
-<a name="l00330"></a>00330       }
-<a name="l00331"></a>00331     }
-<a name="l00332"></a>00332 <span class="comment"></span>
-<a name="l00333"></a>00333 <span class="comment">    /**</span>
-<a name="l00334"></a>00334 <span class="comment">     * @return the zeroth SphericalEngine::coeff object.</span>
-<a name="l00335"></a>00335 <span class="comment">     **********************************************************************/</span>
-<a name="l00336"></a><a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#ac8886de1d1400ecf6482f6441c76a8a0">00336</a>     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff& Coefficients() <span class="keyword">const</span> throw()
-<a name="l00337"></a>00337     { <span class="keywordflow">return</span> _c[0]; }
-<a name="l00338"></a>00338   };
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 <span class="preprocessor">#endif  // GEOGRAPHICLIB_SPHERICALHARMONIC_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercatorExact_8cpp.html b/doc/html/TransverseMercatorExact_8cpp.html
deleted file mode 100644
index 1d73286..0000000
--- a/doc/html/TransverseMercatorExact_8cpp.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercatorExact.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">TransverseMercatorExact.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="TransverseMercatorExact_8hpp_source.html">GeographicLib/TransverseMercatorExact.hpp</a>></code><br/>
-</div>
-<p><a href="TransverseMercatorExact_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercatorExact_8cpp.html#a019dc2a5f6ac9aa9ba03ad8dd974e438">GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP</a>   "$Id: 125a2d11919018a84fb0c09ea2e77011a35a4a2d $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>The relevant section of Lee's paper is part V, pp 67–101, <a href="http://dx.doi.org/10.3138/X687-1574-4325-WM62">Conformal Projections Based On Jacobian Elliptic Functions</a>.</p>
-<p>The method entails using the Thompson Transverse Mercator as an intermediate projection. The projections from the intermediate coordinates to [<em>phi</em>, <em>lam</em>] and [<em>x</em>, <em>y</em>] are given by elliptic functions. The inverse of these projections are found by Newton's method with a suitable starting guess.</p>
-<p>This implementation and notation closely follows Lee, with the following exceptions: </p>
-<center><table class="doxtable">
-<tr>
-<th>Lee </th><th>here </th><th>Description </th></tr>
-<tr>
-<td>x/a </td><td>xi </td><td>Northing (unit Earth) </td></tr>
-<tr>
-<td>y/a </td><td>eta </td><td>Easting (unit Earth) </td></tr>
-<tr>
-<td>s/a </td><td>sigma </td><td>xi + i * eta </td></tr>
-<tr>
-<td>y </td><td>x </td><td>Easting </td></tr>
-<tr>
-<td>x </td><td>y </td><td>Northing </td></tr>
-<tr>
-<td>k </td><td>e </td><td>eccentricity </td></tr>
-<tr>
-<td>k^2 </td><td>mu </td><td>elliptic function parameter </td></tr>
-<tr>
-<td>k'^2 </td><td>mv </td><td>elliptic function complementary parameter </td></tr>
-<tr>
-<td>m </td><td>k </td><td>scale </td></tr>
-<tr>
-<td>zeta </td><td>zeta </td><td>complex longitude = Mercator = chi in paper </td></tr>
-<tr>
-<td>s </td><td>sigma </td><td>complex GK = zeta in paper </td></tr>
-</table>
-</center><p>Minor alterations have been made in some of Lee's expressions in an attempt to control round-off. For example atanh(sin(phi)) is replaced by asinh(tan(phi)) which maintains accuracy near phi = pi/2. Such changes are noted in the code. </p>
-
-<p>Definition in file <a class="el" href="TransverseMercatorExact_8cpp_source.html">TransverseMercatorExact.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a019dc2a5f6ac9aa9ba03ad8dd974e438"></a><!-- doxytag: member="TransverseMercatorExact.cpp::GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP" ref="a019dc2a5f6ac9aa9ba03ad8dd974e438" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP   "$Id: 125a2d11919018a84fb0c09ea2e77011a35a4a2d $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8cpp_source.html#l00044">44</a> of file <a class="el" href="TransverseMercatorExact_8cpp_source.html">TransverseMercatorExact.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercatorExact_8cpp_source.html b/doc/html/TransverseMercatorExact_8cpp_source.html
deleted file mode 100644
index 1e72f8f..0000000
--- a/doc/html/TransverseMercatorExact_8cpp_source.html
+++ /dev/null
@@ -1,580 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercatorExact.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">TransverseMercatorExact.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="TransverseMercatorExact_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file TransverseMercatorExact.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::TransverseMercatorExact class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * The relevant section of Lee's paper is part V, pp 67&ndash;101,</span>
-<a name="l00010"></a>00010 <span class="comment"> * <a href="http://dx.doi.org/10.3138/X687-1574-4325-WM62">Conformal</span>
-<a name="l00011"></a>00011 <span class="comment"> * Projections Based On Jacobian Elliptic Functions</a>.</span>
-<a name="l00012"></a>00012 <span class="comment"> *</span>
-<a name="l00013"></a>00013 <span class="comment"> * The method entails using the Thompson Transverse Mercator as an</span>
-<a name="l00014"></a>00014 <span class="comment"> * intermediate projection.  The projections from the intermediate</span>
-<a name="l00015"></a>00015 <span class="comment"> * coordinates to [\e phi, \e lam] and [\e x, \e y] are given by elliptic</span>
-<a name="l00016"></a>00016 <span class="comment"> * functions.  The inverse of these projections are found by Newton's method</span>
-<a name="l00017"></a>00017 <span class="comment"> * with a suitable starting guess.</span>
-<a name="l00018"></a>00018 <span class="comment"> *</span>
-<a name="l00019"></a>00019 <span class="comment"> * This implementation and notation closely follows Lee, with the following</span>
-<a name="l00020"></a>00020 <span class="comment"> * exceptions:</span>
-<a name="l00021"></a>00021 <span class="comment"> * <center><table></span>
-<a name="l00022"></a>00022 <span class="comment"> * <tr><th>Lee    <th>here    <th>Description</span>
-<a name="l00023"></a>00023 <span class="comment"> * <tr><td>x/a    <td>xi      <td>Northing (unit Earth)</span>
-<a name="l00024"></a>00024 <span class="comment"> * <tr><td>y/a    <td>eta     <td>Easting (unit Earth)</span>
-<a name="l00025"></a>00025 <span class="comment"> * <tr><td>s/a    <td>sigma   <td>xi + i * eta</span>
-<a name="l00026"></a>00026 <span class="comment"> * <tr><td>y      <td>x       <td>Easting</span>
-<a name="l00027"></a>00027 <span class="comment"> * <tr><td>x      <td>y       <td>Northing</span>
-<a name="l00028"></a>00028 <span class="comment"> * <tr><td>k      <td>e       <td>eccentricity</span>
-<a name="l00029"></a>00029 <span class="comment"> * <tr><td>k^2    <td>mu      <td>elliptic function parameter</span>
-<a name="l00030"></a>00030 <span class="comment"> * <tr><td>k'^2   <td>mv      <td>elliptic function complementary parameter</span>
-<a name="l00031"></a>00031 <span class="comment"> * <tr><td>m      <td>k       <td>scale</span>
-<a name="l00032"></a>00032 <span class="comment"> * <tr><td>zeta   <td>zeta    <td>complex longitude = Mercator = chi in paper</span>
-<a name="l00033"></a>00033 <span class="comment"> * <tr><td>s      <td>sigma   <td>complex GK = zeta in paper</span>
-<a name="l00034"></a>00034 <span class="comment"> * </table></center></span>
-<a name="l00035"></a>00035 <span class="comment"> *</span>
-<a name="l00036"></a>00036 <span class="comment"> * Minor alterations have been made in some of Lee's expressions in an</span>
-<a name="l00037"></a>00037 <span class="comment"> * attempt to control round-off.  For example atanh(sin(phi)) is replaced by</span>
-<a name="l00038"></a>00038 <span class="comment"> * asinh(tan(phi)) which maintains accuracy near phi = pi/2.  Such changes</span>
-<a name="l00039"></a>00039 <span class="comment"> * are noted in the code.</span>
-<a name="l00040"></a>00040 <span class="comment"> **********************************************************************/</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <<a class="code" href="TransverseMercatorExact_8hpp.html" title="Header for GeographicLib::TransverseMercatorExact class.">GeographicLib/TransverseMercatorExact.hpp</a>></span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a><a class="code" href="TransverseMercatorExact_8cpp.html#a019dc2a5f6ac9aa9ba03ad8dd974e438">00044</a> <span class="preprocessor">#define GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP \</span>
-<a name="l00045"></a>00045 <span class="preprocessor">  "$Id: 125a2d11919018a84fb0c09ea2e77011a35a4a2d $"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="TransverseMercatorExact_8cpp.html#a019dc2a5f6ac9aa9ba03ad8dd974e438">GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP</a>)
-<a name="l00048"></a>00048 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="TransverseMercatorExact_8hpp.html#a33c80ffd2f74ea9ed9dd4c11bf9e1198">GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP</a>)
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 namespace GeographicLib {
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052   <span class="keyword">using namespace </span>std;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> TransverseMercatorExact::tol_ =
-<a name="l00055"></a>00055     numeric_limits<real>::epsilon();
-<a name="l00056"></a>00056   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> TransverseMercatorExact::tol1_ = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.1) * sqrt(tol_);
-<a name="l00057"></a>00057   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> TransverseMercatorExact::tol2_ = <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.1) * tol_;
-<a name="l00058"></a>00058   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> TransverseMercatorExact::taytol_ = pow(tol_, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.6));
-<a name="l00059"></a>00059   <span class="comment">// Overflow value s.t. atan(overflow_) = pi/2</span>
-<a name="l00060"></a>00060   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> TransverseMercatorExact::overflow_ = 1 / Math::sq(tol_);
-<a name="l00061"></a>00061 
-<a name="l00062"></a><a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a72ffcc89eee6f30a6d1f4d061518a6f1">00062</a>   TransverseMercatorExact::TransverseMercatorExact(real a, real f, real k0,
-<a name="l00063"></a>00063                                                    <span class="keywordtype">bool</span> extendp)
-<a name="l00064"></a>00064     : _a(a)
-<a name="l00065"></a>00065     , _f(f <= 1 ? f : 1/f)
-<a name="l00066"></a>00066     , _k0(k0)
-<a name="l00067"></a>00067     , _mu(_f * (2 - _f))        <span class="comment">// e^2</span>
-<a name="l00068"></a>00068     , _mv(1 - _mu)              <span class="comment">// 1 - e^2</span>
-<a name="l00069"></a>00069     , _e(sqrt(_mu))
-<a name="l00070"></a>00070     , _ep2(_mu / _mv)           <span class="comment">// e^2 / (1 - e^2)</span>
-<a name="l00071"></a>00071     , _extendp(extendp)
-<a name="l00072"></a>00072     , _Eu(_mu)
-<a name="l00073"></a>00073     , _Ev(_mv)
-<a name="l00074"></a>00074   {
-<a name="l00075"></a>00075     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00076"></a>00076       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00077"></a>00077     <span class="keywordflow">if</span> (!(_f > 0))
-<a name="l00078"></a>00078       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Flattening is not positive"</span>);
-<a name="l00079"></a>00079     <span class="keywordflow">if</span> (!(_f < 1))
-<a name="l00080"></a>00080       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00081"></a>00081     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_k0) && _k0 > 0))
-<a name="l00082"></a>00082       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00083"></a>00083   }
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>
-<a name="l00086"></a>00086   <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a68668637e754201897bddb82baaf634b">TransverseMercatorExact::UTM</a>(Constants::WGS84_a<real>(),
-<a name="l00087"></a>00087                                Constants::WGS84_f<real>(),
-<a name="l00088"></a>00088                                Constants::UTM_k0<real>());
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090   <span class="comment">// tau = tan(phi), taup = sinh(psi)</span>
-<a name="l00091"></a>00091   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> TransverseMercatorExact::taup(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tau) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00092"></a>00092     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00093"></a>00093       tau1 = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), tau),
-<a name="l00094"></a>00094       sig = sinh( _e * <a class="code" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">Math::atanh</a>(_e * tau / tau1) );
-<a name="l00095"></a>00095     <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), sig) * tau - sig * tau1;
-<a name="l00096"></a>00096   }
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098   Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> TransverseMercatorExact::taupinv(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> taup) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00099"></a>00099     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00100"></a>00100       <span class="comment">// See comment in TransverseMercator.cpp about the initial guess</span>
-<a name="l00101"></a>00101       tau = taup/_mv,
-<a name="l00102"></a>00102       stol = tol_ * max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), abs(taup));
-<a name="l00103"></a>00103     <span class="comment">// min iterations = 1, max iterations = 2; mean = 1.94</span>
-<a name="l00104"></a>00104     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < numit_; ++i) {
-<a name="l00105"></a>00105       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00106"></a>00106         tau1 = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), tau),
-<a name="l00107"></a>00107         sig = sinh( _e * <a class="code" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">Math::atanh</a>(_e * tau / tau1 ) ),
-<a name="l00108"></a>00108         taupa = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), sig) * tau - sig * tau1,
-<a name="l00109"></a>00109         dtau = (taup - taupa) * (1 + _mv * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tau)) /
-<a name="l00110"></a>00110         ( _mv * tau1 * <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), taupa) );
-<a name="l00111"></a>00111       tau += dtau;
-<a name="l00112"></a>00112       <span class="keywordflow">if</span> (!(abs(dtau) >= stol))
-<a name="l00113"></a>00113         <span class="keywordflow">break</span>;
-<a name="l00114"></a>00114     }
-<a name="l00115"></a>00115     <span class="keywordflow">return</span> tau;
-<a name="l00116"></a>00116   }
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118   <span class="keywordtype">void</span> TransverseMercatorExact::zeta(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> <span class="comment">/*u*/</span>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00119"></a>00119                                      <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> <span class="comment">/*v*/</span>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00120"></a>00120                                      <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& taup, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lam) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00121"></a>00121     <span class="comment">// Lee 54.17 but write</span>
-<a name="l00122"></a>00122     <span class="comment">// atanh(snu * dnv) = asinh(snu * dnv / sqrt(cnu^2 + _mv * snu^2 * snv^2))</span>
-<a name="l00123"></a>00123     <span class="comment">// atanh(_e * snu / dnv) =</span>
-<a name="l00124"></a>00124     <span class="comment">//         asinh(_e * snu / sqrt(_mu * cnu^2 + _mv * cnv^2))</span>
-<a name="l00125"></a>00125     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00126"></a>00126       d1 = sqrt(<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnu) + _mv * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(snu * snv)),
-<a name="l00127"></a>00127       d2 = sqrt(_mu * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnu) + _mv * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnv)),
-<a name="l00128"></a>00128       t1 = (d1 ? snu * dnv / d1 : (snu < 0 ? -overflow_ : overflow_)),
-<a name="l00129"></a>00129       t2 = (d2 ? sinh( _e * <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">Math::asinh</a>(_e * snu / d2) ) :
-<a name="l00130"></a>00130             (snu < 0 ? -overflow_ : overflow_));
-<a name="l00131"></a>00131     <span class="comment">// psi = asinh(t1) - asinh(t2)</span>
-<a name="l00132"></a>00132     <span class="comment">// taup = sinh(psi)</span>
-<a name="l00133"></a>00133     taup = t1 * <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), t2) - t2 * <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), t1);
-<a name="l00134"></a>00134     lam = (d1 != 0 && d2 != 0) ?
-<a name="l00135"></a>00135       atan2(dnu * snv, cnu * cnv) - _e * atan2(_e * cnu * snv, dnu * cnv) :
-<a name="l00136"></a>00136       0;
-<a name="l00137"></a>00137   }
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139   <span class="keywordtype">void</span> TransverseMercatorExact::dwdzeta(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> <span class="comment">/*u*/</span>,
-<a name="l00140"></a>00140                                         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00141"></a>00141                                         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> <span class="comment">/*v*/</span>,
-<a name="l00142"></a>00142                                         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00143"></a>00143                                         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& du, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& dv) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00144"></a>00144     <span class="comment">// Lee 54.21 but write (1 - dnu^2 * snv^2) = (cnv^2 + _mu * snu^2 * snv^2)</span>
-<a name="l00145"></a>00145     <span class="comment">// (see A+S 16.21.4)</span>
-<a name="l00146"></a>00146     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> d = _mv * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnv) + _mu * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(snu * snv));
-<a name="l00147"></a>00147     du =  cnu * dnu * dnv * (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnv) - _mu * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(snu * snv)) / d;
-<a name="l00148"></a>00148     dv = -snu * snv * cnv * (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(dnu * dnv) + _mu * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnu)) / d;
-<a name="l00149"></a>00149   }
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151   <span class="comment">// Starting point for zetainv</span>
-<a name="l00152"></a>00152   <span class="keywordtype">bool</span> TransverseMercatorExact::zetainv0(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> psi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lam, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& v)
-<a name="l00153"></a>00153     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00154"></a>00154     <span class="keywordtype">bool</span> retval = <span class="keyword">false</span>;
-<a name="l00155"></a>00155     <span class="keywordflow">if</span> (psi < -_e * Math::pi<real>()/4 &&
-<a name="l00156"></a>00156         lam > (1 - 2 * _e) * Math::pi<real>()/2 &&
-<a name="l00157"></a>00157         psi < lam - (1 - _e) * Math::pi<real>()/2) {
-<a name="l00158"></a>00158       <span class="comment">// N.B. this branch is normally not taken because psi < 0 is converted</span>
-<a name="l00159"></a>00159       <span class="comment">// psi > 0 by Forward.</span>
-<a name="l00160"></a>00160       <span class="comment">//</span>
-<a name="l00161"></a>00161       <span class="comment">// There's a log singularity at w = w0 = Eu.K() + i * Ev.K(),</span>
-<a name="l00162"></a>00162       <span class="comment">// corresponding to the south pole, where we have, approximately</span>
-<a name="l00163"></a>00163       <span class="comment">//</span>
-<a name="l00164"></a>00164       <span class="comment">//   psi = _e + i * pi/2 - _e * atanh(cos(i * (w - w0)/(1 + _mu/2)))</span>
-<a name="l00165"></a>00165       <span class="comment">//</span>
-<a name="l00166"></a>00166       <span class="comment">// Inverting this gives:</span>
-<a name="l00167"></a>00167       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00168"></a>00168         psix = 1 - psi / _e,
-<a name="l00169"></a>00169         lamx = (Math::pi<real>()/2 - lam) / _e;
-<a name="l00170"></a>00170       u = <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">Math::asinh</a>(sin(lamx) / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(cos(lamx), sinh(psix))) *
-<a name="l00171"></a>00171         (1 + _mu/2);
-<a name="l00172"></a>00172       v = atan2(cos(lamx), sinh(psix)) * (1 + _mu/2);
-<a name="l00173"></a>00173       u = _Eu.K() - u;
-<a name="l00174"></a>00174       v = _Ev.K() - v;
-<a name="l00175"></a>00175     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (psi < _e * Math::pi<real>()/2 &&
-<a name="l00176"></a>00176                lam > (1 - 2 * _e) * Math::pi<real>()/2) {
-<a name="l00177"></a>00177       <span class="comment">// At w = w0 = i * Ev.K(), we have</span>
-<a name="l00178"></a>00178       <span class="comment">//</span>
-<a name="l00179"></a>00179       <span class="comment">//     zeta = zeta0 = i * (1 - _e) * pi/2</span>
-<a name="l00180"></a>00180       <span class="comment">//     zeta' = zeta'' = 0</span>
-<a name="l00181"></a>00181       <span class="comment">//</span>
-<a name="l00182"></a>00182       <span class="comment">// including the next term in the Taylor series gives:</span>
-<a name="l00183"></a>00183       <span class="comment">//</span>
-<a name="l00184"></a>00184       <span class="comment">// zeta = zeta0 - (_mv * _e) / 3 * (w - w0)^3</span>
-<a name="l00185"></a>00185       <span class="comment">//</span>
-<a name="l00186"></a>00186       <span class="comment">// When inverting this, we map arg(w - w0) = [-90, 0] to</span>
-<a name="l00187"></a>00187       <span class="comment">// arg(zeta - zeta0) = [-90, 180]</span>
-<a name="l00188"></a>00188       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00189"></a>00189         dlam = lam - (1 - _e) * Math::pi<real>()/2,
-<a name="l00190"></a>00190         rad = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(psi, dlam),
-<a name="l00191"></a>00191         <span class="comment">// atan2(dlam-psi, psi+dlam) + 45d gives arg(zeta - zeta0) in range</span>
-<a name="l00192"></a>00192         <span class="comment">// [-135, 225).  Subtracting 180 (since multiplier is negative) makes</span>
-<a name="l00193"></a>00193         <span class="comment">// range [-315, 45).  Multiplying by 1/3 (for cube root) gives range</span>
-<a name="l00194"></a>00194         <span class="comment">// [-105, 15).  In particular the range [-90, 180] in zeta space maps</span>
-<a name="l00195"></a>00195         <span class="comment">// to [-90, 0] in w space as required.</span>
-<a name="l00196"></a>00196         ang = atan2(dlam-psi, psi+dlam) - <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.75) * Math::pi<real>();
-<a name="l00197"></a>00197       <span class="comment">// Error using this guess is about 0.21 * (rad/e)^(5/3)</span>
-<a name="l00198"></a>00198       retval = rad < _e * taytol_;
-<a name="l00199"></a>00199       rad = <a class="code" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">Math::cbrt</a>(3 / (_mv * _e) * rad);
-<a name="l00200"></a>00200       ang /= 3;
-<a name="l00201"></a>00201       u = rad * cos(ang);
-<a name="l00202"></a>00202       v = rad * sin(ang) + _Ev.K();
-<a name="l00203"></a>00203     } <span class="keywordflow">else</span> {
-<a name="l00204"></a>00204       <span class="comment">// Use spherical TM, Lee 12.6 -- writing atanh(sin(lam) / cosh(psi)) =</span>
-<a name="l00205"></a>00205       <span class="comment">// asinh(sin(lam) / hypot(cos(lam), sinh(psi))).  This takes care of the</span>
-<a name="l00206"></a>00206       <span class="comment">// log singularity at zeta = Eu.K() (corresponding to the north pole)</span>
-<a name="l00207"></a>00207       v = <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">Math::asinh</a>(sin(lam) / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(cos(lam), sinh(psi)));
-<a name="l00208"></a>00208       u = atan2(sinh(psi), cos(lam));
-<a name="l00209"></a>00209       <span class="comment">// But scale to put 90,0 on the right place</span>
-<a name="l00210"></a>00210       u *= _Eu.K() / (Math::pi<real>()/2);
-<a name="l00211"></a>00211       v *= _Eu.K() / (Math::pi<real>()/2);
-<a name="l00212"></a>00212     }
-<a name="l00213"></a>00213     <span class="keywordflow">return</span> retval;
-<a name="l00214"></a>00214   }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216   <span class="comment">// Invert zeta using Newton's method</span>
-<a name="l00217"></a>00217   <span class="keywordtype">void</span> TransverseMercatorExact::zetainv(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> taup, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lam, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& v)
-<a name="l00218"></a>00218     <span class="keyword">const</span> <span class="keywordflow">throw</span>()  {
-<a name="l00219"></a>00219     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00220"></a>00220       psi = <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">Math::asinh</a>(taup),
-<a name="l00221"></a>00221       scal = 1/<a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), taup);
-<a name="l00222"></a>00222     <span class="keywordflow">if</span> (zetainv0(psi, lam, u, v))
-<a name="l00223"></a>00223       <span class="keywordflow">return</span>;
-<a name="l00224"></a>00224     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> stol2 = tol2_ / <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(max(psi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1)));
-<a name="l00225"></a>00225     <span class="comment">// min iterations = 2, max iterations = 6; mean = 4.0</span>
-<a name="l00226"></a>00226     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0, trip = 0; i < numit_; ++i) {
-<a name="l00227"></a>00227       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, cnu, dnu, snv, cnv, dnv;
-<a name="l00228"></a>00228       _Eu.sncndn(u, snu, cnu, dnu);
-<a name="l00229"></a>00229       _Ev.sncndn(v, snv, cnv, dnv);
-<a name="l00230"></a>00230       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tau1, lam1, du1, dv1;
-<a name="l00231"></a>00231       zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau1, lam1);
-<a name="l00232"></a>00232       dwdzeta(u, snu, cnu, dnu, v, snv, cnv, dnv, du1, dv1);
-<a name="l00233"></a>00233       tau1 -= taup;
-<a name="l00234"></a>00234       lam1 -= lam;
-<a name="l00235"></a>00235       tau1 *= scal;
-<a name="l00236"></a>00236       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00237"></a>00237         delu = tau1 * du1 - lam1 * dv1,
-<a name="l00238"></a>00238         delv = tau1 * dv1 + lam1 * du1;
-<a name="l00239"></a>00239       u -= delu;
-<a name="l00240"></a>00240       v -= delv;
-<a name="l00241"></a>00241       <span class="keywordflow">if</span> (trip)
-<a name="l00242"></a>00242         <span class="keywordflow">break</span>;
-<a name="l00243"></a>00243       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> delw2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(delu) + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(delv);
-<a name="l00244"></a>00244       <span class="keywordflow">if</span> (!(delw2 >= stol2))
-<a name="l00245"></a>00245         ++trip;
-<a name="l00246"></a>00246     }
-<a name="l00247"></a>00247   }
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249   <span class="keywordtype">void</span> TransverseMercatorExact::sigma(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> <span class="comment">/*u*/</span>, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00250"></a>00250                                       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> v, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00251"></a>00251                                       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& xi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& eta) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00252"></a>00252     <span class="comment">// Lee 55.4 writing</span>
-<a name="l00253"></a>00253     <span class="comment">// dnu^2 + dnv^2 - 1 = _mu * cnu^2 + _mv * cnv^2</span>
-<a name="l00254"></a>00254     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> d = _mu * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnu) + _mv * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnv);
-<a name="l00255"></a>00255     xi = _Eu.E(snu, cnu, dnu) - _mu * snu * cnu * dnu / d;
-<a name="l00256"></a>00256     eta = v - _Ev.E(snv, cnv, dnv) + _mv * snv * cnv * dnv / d;
-<a name="l00257"></a>00257   }
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259   <span class="keywordtype">void</span> TransverseMercatorExact::dwdsigma(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> <span class="comment">/*u*/</span>,
-<a name="l00260"></a>00260                                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00261"></a>00261                                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> <span class="comment">/*v*/</span>,
-<a name="l00262"></a>00262                                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00263"></a>00263                                          <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& du, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& dv) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00264"></a>00264     <span class="comment">// Reciprocal of 55.9: dw/ds = dn(w)^2/_mv, expanding complex dn(w) using</span>
-<a name="l00265"></a>00265     <span class="comment">// A+S 16.21.4</span>
-<a name="l00266"></a>00266     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> d = _mv * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnv) + _mu * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(snu * snv));
-<a name="l00267"></a>00267     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00268"></a>00268       dnr = dnu * cnv * dnv,
-<a name="l00269"></a>00269       dni = - _mu * snu * cnu * snv;
-<a name="l00270"></a>00270     du = (<a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(dnr) - <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(dni)) / d;
-<a name="l00271"></a>00271     dv = 2 * dnr * dni / d;
-<a name="l00272"></a>00272   }
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274   <span class="comment">// Starting point for sigmainv</span>
-<a name="l00275"></a>00275   <span class="keywordtype">bool</span> TransverseMercatorExact::sigmainv0(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eta, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& v)
-<a name="l00276"></a>00276     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00277"></a>00277     <span class="keywordtype">bool</span> retval = <span class="keyword">false</span>;
-<a name="l00278"></a>00278     <span class="keywordflow">if</span> (eta > <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1.25) * _Ev.KE() ||
-<a name="l00279"></a>00279         (xi < -<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.25) * _Eu.E() && xi < eta - _Ev.KE())) {
-<a name="l00280"></a>00280       <span class="comment">// sigma as a simple pole at w = w0 = Eu.K() + i * Ev.K() and sigma is</span>
-<a name="l00281"></a>00281       <span class="comment">// approximated by</span>
-<a name="l00282"></a>00282       <span class="comment">//</span>
-<a name="l00283"></a>00283       <span class="comment">// sigma = (Eu.E() + i * Ev.KE()) + 1/(w - w0)</span>
-<a name="l00284"></a>00284       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00285"></a>00285         x = xi - _Eu.E(),
-<a name="l00286"></a>00286         y = eta - _Ev.KE(),
-<a name="l00287"></a>00287         r2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(x) + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(y);
-<a name="l00288"></a>00288       u = _Eu.K() + x/r2;
-<a name="l00289"></a>00289       v = _Ev.K() - y/r2;
-<a name="l00290"></a>00290     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((eta > <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.75) * _Ev.KE() && xi < <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.25) * _Eu.E())
-<a name="l00291"></a>00291                || eta > _Ev.KE()) {
-<a name="l00292"></a>00292       <span class="comment">// At w = w0 = i * Ev.K(), we have</span>
-<a name="l00293"></a>00293       <span class="comment">//</span>
-<a name="l00294"></a>00294       <span class="comment">//     sigma = sigma0 = i * Ev.KE()</span>
-<a name="l00295"></a>00295       <span class="comment">//     sigma' = sigma'' = 0</span>
-<a name="l00296"></a>00296       <span class="comment">//</span>
-<a name="l00297"></a>00297       <span class="comment">// including the next term in the Taylor series gives:</span>
-<a name="l00298"></a>00298       <span class="comment">//</span>
-<a name="l00299"></a>00299       <span class="comment">// sigma = sigma0 - _mv / 3 * (w - w0)^3</span>
-<a name="l00300"></a>00300       <span class="comment">//</span>
-<a name="l00301"></a>00301       <span class="comment">// When inverting this, we map arg(w - w0) = [-pi/2, -pi/6] to</span>
-<a name="l00302"></a>00302       <span class="comment">// arg(sigma - sigma0) = [-pi/2, pi/2]</span>
-<a name="l00303"></a>00303       <span class="comment">// mapping arg = [-pi/2, -pi/6] to [-pi/2, pi/2]</span>
-<a name="l00304"></a>00304       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00305"></a>00305         deta = eta - _Ev.KE(),
-<a name="l00306"></a>00306         rad = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(xi, deta),
-<a name="l00307"></a>00307         <span class="comment">// Map the range [-90, 180] in sigma space to [-90, 0] in w space.  See</span>
-<a name="l00308"></a>00308         <span class="comment">// discussion in zetainv0 on the cut for ang.</span>
-<a name="l00309"></a>00309         ang = atan2(deta-xi, xi+deta) - <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.75) * Math::pi<real>();
-<a name="l00310"></a>00310       <span class="comment">// Error using this guess is about 0.068 * rad^(5/3)</span>
-<a name="l00311"></a>00311       retval = rad < 2 * taytol_;
-<a name="l00312"></a>00312       rad = <a class="code" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">Math::cbrt</a>(3 / _mv * rad);
-<a name="l00313"></a>00313       ang /= 3;
-<a name="l00314"></a>00314       u = rad * cos(ang);
-<a name="l00315"></a>00315       v = rad * sin(ang) + _Ev.K();
-<a name="l00316"></a>00316     } <span class="keywordflow">else</span> {
-<a name="l00317"></a>00317       <span class="comment">// Else use w = sigma * Eu.K/Eu.E (which is correct in the limit _e -> 0)</span>
-<a name="l00318"></a>00318       u = xi * _Eu.K()/_Eu.E();
-<a name="l00319"></a>00319       v = eta * _Eu.K()/_Eu.E();
-<a name="l00320"></a>00320     }
-<a name="l00321"></a>00321     <span class="keywordflow">return</span> retval;
-<a name="l00322"></a>00322   }
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324   <span class="comment">// Invert sigma using Newton's method</span>
-<a name="l00325"></a>00325   <span class="keywordtype">void</span> TransverseMercatorExact::sigmainv(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eta, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& v)
-<a name="l00326"></a>00326     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00327"></a>00327     <span class="keywordflow">if</span> (sigmainv0(xi, eta, u, v))
-<a name="l00328"></a>00328       <span class="keywordflow">return</span>;
-<a name="l00329"></a>00329     <span class="comment">// min iterations = 2, max iterations = 7; mean = 3.9</span>
-<a name="l00330"></a>00330     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0, trip = 0; i < numit_; ++i) {
-<a name="l00331"></a>00331       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, cnu, dnu, snv, cnv, dnv;
-<a name="l00332"></a>00332       _Eu.sncndn(u, snu, cnu, dnu);
-<a name="l00333"></a>00333       _Ev.sncndn(v, snv, cnv, dnv);
-<a name="l00334"></a>00334       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xi1, eta1, du1, dv1;
-<a name="l00335"></a>00335       sigma(u, snu, cnu, dnu, v, snv, cnv, dnv, xi1, eta1);
-<a name="l00336"></a>00336       dwdsigma(u, snu, cnu, dnu, v, snv, cnv, dnv, du1, dv1);
-<a name="l00337"></a>00337       xi1 -= xi;
-<a name="l00338"></a>00338       eta1 -= eta;
-<a name="l00339"></a>00339       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00340"></a>00340         delu = xi1 * du1 - eta1 * dv1,
-<a name="l00341"></a>00341         delv = xi1 * dv1 + eta1 * du1;
-<a name="l00342"></a>00342       u -= delu;
-<a name="l00343"></a>00343       v -= delv;
-<a name="l00344"></a>00344       <span class="keywordflow">if</span> (trip)
-<a name="l00345"></a>00345         <span class="keywordflow">break</span>;
-<a name="l00346"></a>00346       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> delw2 = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(delu) + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(delv);
-<a name="l00347"></a>00347       <span class="keywordflow">if</span> (!(delw2 >= tol2_))
-<a name="l00348"></a>00348         ++trip;
-<a name="l00349"></a>00349     }
-<a name="l00350"></a>00350   }
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352   <span class="keywordtype">void</span> TransverseMercatorExact::Scale(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tau, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> <span class="comment">/*lam*/</span>,
-<a name="l00353"></a>00353                                        <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00354"></a>00354                                        <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00355"></a>00355                                        <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00356"></a>00356     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sec2 = 1 + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tau);    <span class="comment">// sec(phi)^2</span>
-<a name="l00357"></a>00357     <span class="comment">// Lee 55.12 -- negated for our sign convention.  gamma gives the bearing</span>
-<a name="l00358"></a>00358     <span class="comment">// (clockwise from true north) of grid north</span>
-<a name="l00359"></a>00359     gamma = atan2(_mv * snu * snv * cnv, cnu * dnu * dnv);
-<a name="l00360"></a>00360     <span class="comment">// Lee 55.13 with nu given by Lee 9.1 -- in sqrt change the numerator</span>
-<a name="l00361"></a>00361     <span class="comment">// from</span>
-<a name="l00362"></a>00362     <span class="comment">//</span>
-<a name="l00363"></a>00363     <span class="comment">//    (1 - snu^2 * dnv^2) to (_mv * snv^2 + cnu^2 * dnv^2)</span>
-<a name="l00364"></a>00364     <span class="comment">//</span>
-<a name="l00365"></a>00365     <span class="comment">// to maintain accuracy near phi = 90 and change the denomintor from</span>
-<a name="l00366"></a>00366     <span class="comment">//</span>
-<a name="l00367"></a>00367     <span class="comment">//    (dnu^2 + dnv^2 - 1) to (_mu * cnu^2 + _mv * cnv^2)</span>
-<a name="l00368"></a>00368     <span class="comment">//</span>
-<a name="l00369"></a>00369     <span class="comment">// to maintain accuracy near phi = 0, lam = 90 * (1 - e).  Similarly</span>
-<a name="l00370"></a>00370     <span class="comment">// rewrite sqrt term in 9.1 as</span>
-<a name="l00371"></a>00371     <span class="comment">//</span>
-<a name="l00372"></a>00372     <span class="comment">//    _mv + _mu * c^2 instead of 1 - _mu * sin(phi)^2</span>
-<a name="l00373"></a>00373     k = sqrt(_mv + _mu / sec2) * sqrt(sec2) *
-<a name="l00374"></a>00374       sqrt( (_mv * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(snv) + <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnu * dnv)) /
-<a name="l00375"></a>00375             (_mu * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnu) + _mv * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cnv)) );
-<a name="l00376"></a>00376   }
-<a name="l00377"></a>00377 
-<a name="l00378"></a><a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a0dab8d1a275df9e4796d2d858f42f7e3">00378</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a0dab8d1a275df9e4796d2d858f42f7e3">TransverseMercatorExact::Forward</a>(real lon0, real lat, real lon,
-<a name="l00379"></a>00379                                         real& x, real& y, real& gamma, real& k)
-<a name="l00380"></a>00380     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00381"></a>00381     <span class="comment">// Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)</span>
-<a name="l00382"></a>00382     <span class="keywordflow">if</span> (lon - lon0 > 180)
-<a name="l00383"></a>00383       lon -= lon0 + 360;
-<a name="l00384"></a>00384     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lon - lon0 <= -180)
-<a name="l00385"></a>00385       lon -= lon0 - 360;
-<a name="l00386"></a>00386     <span class="keywordflow">else</span>
-<a name="l00387"></a>00387       lon -= lon0;
-<a name="l00388"></a>00388     <span class="comment">// Now lon in (-180, 180]</span>
-<a name="l00389"></a>00389     <span class="comment">// Explicitly enforce the parity</span>
-<a name="l00390"></a>00390     <span class="keywordtype">int</span>
-<a name="l00391"></a>00391       latsign = !_extendp && lat < 0 ? -1 : 1,
-<a name="l00392"></a>00392       lonsign = !_extendp && lon < 0 ? -1 : 1;
-<a name="l00393"></a>00393     lon *= lonsign;
-<a name="l00394"></a>00394     lat *= latsign;
-<a name="l00395"></a>00395     <span class="keywordtype">bool</span> backside = !_extendp && lon > 90;
-<a name="l00396"></a>00396     <span class="keywordflow">if</span> (backside) {
-<a name="l00397"></a>00397       <span class="keywordflow">if</span> (lat == 0)
-<a name="l00398"></a>00398         latsign = -1;
-<a name="l00399"></a>00399       lon = 180 - lon;
-<a name="l00400"></a>00400     }
-<a name="l00401"></a>00401     real
-<a name="l00402"></a>00402       phi = lat * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00403"></a>00403       lam = lon * Math::degree<real>(),
-<a name="l00404"></a>00404       tau = tanx(phi);
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406     <span class="comment">// u,v = coordinates for the Thompson TM, Lee 54</span>
-<a name="l00407"></a>00407     real u, v;
-<a name="l00408"></a>00408     <span class="keywordflow">if</span> (lat == 90) {
-<a name="l00409"></a>00409       u = _Eu.K();
-<a name="l00410"></a>00410       v = 0;
-<a name="l00411"></a>00411     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lat == 0 && lon == 90 * (1 - _e)) {
-<a name="l00412"></a>00412       u = 0;
-<a name="l00413"></a>00413       v = _Ev.K();
-<a name="l00414"></a>00414     } <span class="keywordflow">else</span>
-<a name="l00415"></a>00415       zetainv(taup(tau), lam, u, v);
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417     real snu, cnu, dnu, snv, cnv, dnv;
-<a name="l00418"></a>00418     _Eu.sncndn(u, snu, cnu, dnu);
-<a name="l00419"></a>00419     _Ev.sncndn(v, snv, cnv, dnv);
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421     real xi, eta;
-<a name="l00422"></a>00422     sigma(u, snu, cnu, dnu, v, snv, cnv, dnv, xi, eta);
-<a name="l00423"></a>00423     <span class="keywordflow">if</span> (backside)
-<a name="l00424"></a>00424       xi = 2 * _Eu.E() - xi;
-<a name="l00425"></a>00425     y = xi * _a * _k0 * latsign;
-<a name="l00426"></a>00426     x = eta * _a * _k0 * lonsign;
-<a name="l00427"></a>00427 
-<a name="l00428"></a>00428     <span class="comment">// Recompute (tau, lam) from (u, v) to improve accuracy of Scale</span>
-<a name="l00429"></a>00429     zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau, lam);
-<a name="l00430"></a>00430     tau=taupinv(tau);
-<a name="l00431"></a>00431     Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k);
-<a name="l00432"></a>00432     gamma /= <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00433"></a>00433     <span class="keywordflow">if</span> (backside)
-<a name="l00434"></a>00434       gamma = 180 - gamma;
-<a name="l00435"></a>00435     gamma *= latsign * lonsign;
-<a name="l00436"></a>00436     k *= _k0;
-<a name="l00437"></a>00437   }
-<a name="l00438"></a>00438 
-<a name="l00439"></a><a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a350070780708de5a622d4f4c4757104c">00439</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a350070780708de5a622d4f4c4757104c">TransverseMercatorExact::Reverse</a>(real lon0, real x, real y,
-<a name="l00440"></a>00440                                         real& lat, real& lon,
-<a name="l00441"></a>00441                                         real& gamma, real& k)
-<a name="l00442"></a>00442     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00443"></a>00443     <span class="comment">// This undoes the steps in Forward.</span>
-<a name="l00444"></a>00444     real
-<a name="l00445"></a>00445       xi = y / (_a * _k0),
-<a name="l00446"></a>00446       eta = x / (_a * _k0);
-<a name="l00447"></a>00447     <span class="comment">// Explicitly enforce the parity</span>
-<a name="l00448"></a>00448     <span class="keywordtype">int</span>
-<a name="l00449"></a>00449       latsign = !_extendp && y < 0 ? -1 : 1,
-<a name="l00450"></a>00450       lonsign = !_extendp && x < 0 ? -1 : 1;
-<a name="l00451"></a>00451     xi *= latsign;
-<a name="l00452"></a>00452     eta *= lonsign;
-<a name="l00453"></a>00453     <span class="keywordtype">bool</span> backside = !_extendp && xi > _Eu.E();
-<a name="l00454"></a>00454     <span class="keywordflow">if</span> (backside)
-<a name="l00455"></a>00455       xi = 2 * _Eu.E()- xi;
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457     <span class="comment">// u,v = coordinates for the Thompson TM, Lee 54</span>
-<a name="l00458"></a>00458     real u, v;
-<a name="l00459"></a>00459     <span class="keywordflow">if</span> (xi == 0 && eta == _Ev.KE()) {
-<a name="l00460"></a>00460       u = 0;
-<a name="l00461"></a>00461       v = _Ev.K();
-<a name="l00462"></a>00462     } <span class="keywordflow">else</span>
-<a name="l00463"></a>00463       sigmainv(xi, eta, u, v);
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465     real snu, cnu, dnu, snv, cnv, dnv;
-<a name="l00466"></a>00466     _Eu.sncndn(u, snu, cnu, dnu);
-<a name="l00467"></a>00467     _Ev.sncndn(v, snv, cnv, dnv);
-<a name="l00468"></a>00468     real phi, lam, tau;
-<a name="l00469"></a>00469     <span class="keywordflow">if</span> (v != 0 || u != _Eu.K()) {
-<a name="l00470"></a>00470       zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau, lam);
-<a name="l00471"></a>00471       tau = taupinv(tau);
-<a name="l00472"></a>00472       phi = atan(tau);
-<a name="l00473"></a>00473       lat = phi / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00474"></a>00474       lon = lam / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00475"></a>00475     } <span class="keywordflow">else</span> {
-<a name="l00476"></a>00476       tau = overflow_;
-<a name="l00477"></a>00477       phi = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::pi<real>()/2;
-<a name="l00478"></a>00478       lat = 90;
-<a name="l00479"></a>00479       lon = lam = 0;
-<a name="l00480"></a>00480     }
-<a name="l00481"></a>00481     Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k);
-<a name="l00482"></a>00482     gamma /= <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00483"></a>00483     <span class="keywordflow">if</span> (backside)
-<a name="l00484"></a>00484       lon = 180 - lon;
-<a name="l00485"></a>00485     lon *= lonsign;
-<a name="l00486"></a>00486     <span class="comment">// Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)</span>
-<a name="l00487"></a>00487     <span class="keywordflow">if</span> (lon + lon0 >= 180)
-<a name="l00488"></a>00488       lon += lon0 - 360;
-<a name="l00489"></a>00489     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lon + lon0 < -180)
-<a name="l00490"></a>00490       lon += lon0 + 360;
-<a name="l00491"></a>00491     <span class="keywordflow">else</span>
-<a name="l00492"></a>00492       lon += lon0;
-<a name="l00493"></a>00493     lat *= latsign;
-<a name="l00494"></a>00494     <span class="keywordflow">if</span> (backside)
-<a name="l00495"></a>00495       y = 2 * _Eu.E() - y;
-<a name="l00496"></a>00496     y *= _a * _k0 * latsign;
-<a name="l00497"></a>00497     x *= _a * _k0 * lonsign;
-<a name="l00498"></a>00498     <span class="keywordflow">if</span> (backside)
-<a name="l00499"></a>00499       gamma = 180 - gamma;
-<a name="l00500"></a>00500     gamma *= latsign * lonsign;
-<a name="l00501"></a>00501     k *= _k0;
-<a name="l00502"></a>00502   }
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercatorExact_8hpp.html b/doc/html/TransverseMercatorExact_8hpp.html
deleted file mode 100644
index 3e2c11f..0000000
--- a/doc/html/TransverseMercatorExact_8hpp.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercatorExact.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">TransverseMercatorExact.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <<a class="el" href="EllipticFunction_8hpp_source.html">GeographicLib/EllipticFunction.hpp</a>></code><br/>
-</div>
-<p><a href="TransverseMercatorExact_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An exact implementation of the Transverse Mercator Projection.  <a href="classGeographicLib_1_1TransverseMercatorExact.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercatorExact_8hpp.html#a33c80ffd2f74ea9ed9dd4c11bf9e1198">GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP</a>   "$Id: bd96340b9dc3e7bfd09d4374296a75f4c6e00fc3 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="TransverseMercatorExact_8hpp_source.html">TransverseMercatorExact.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a33c80ffd2f74ea9ed9dd4c11bf9e1198"></a><!-- doxytag: member="TransverseMercatorExact.hpp::GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP" ref="a33c80ffd2f74ea9ed9dd4c11bf9e1198" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP   "$Id: bd96340b9dc3e7bfd09d4374296a75f4c6e00fc3 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8hpp_source.html#l00011">11</a> of file <a class="el" href="TransverseMercatorExact_8hpp_source.html">TransverseMercatorExact.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercatorExact_8hpp_source.html b/doc/html/TransverseMercatorExact_8hpp_source.html
deleted file mode 100644
index 5021c1a..0000000
--- a/doc/html/TransverseMercatorExact_8hpp_source.html
+++ /dev/null
@@ -1,350 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercatorExact.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">TransverseMercatorExact.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="TransverseMercatorExact_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file TransverseMercatorExact.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::TransverseMercatorExact class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP)</span>
-<a name="l00011"></a><a class="code" href="TransverseMercatorExact_8hpp.html#a33c80ffd2f74ea9ed9dd4c11bf9e1198">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: bd96340b9dc3e7bfd09d4374296a75f4c6e00fc3 $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="EllipticFunction_8hpp.html" title="Header for GeographicLib::EllipticFunction class.">GeographicLib/EllipticFunction.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00018"></a>00018 <span class="comment"></span>
-<a name="l00019"></a>00019 <span class="comment">  /**</span>
-<a name="l00020"></a>00020 <span class="comment">   * \brief An exact implementation of the Transverse Mercator Projection</span>
-<a name="l00021"></a>00021 <span class="comment">   *</span>
-<a name="l00022"></a>00022 <span class="comment">   * Implementation of the Transverse Mercator Projection given in</span>
-<a name="l00023"></a>00023 <span class="comment">   *  - L. P. Lee,</span>
-<a name="l00024"></a>00024 <span class="comment">   *    <a href="http://dx.doi.org/10.3138/X687-1574-4325-WM62"> Conformal</span>
-<a name="l00025"></a>00025 <span class="comment">   *    Projections Based On Jacobian Elliptic Functions</a>, Part V of</span>
-<a name="l00026"></a>00026 <span class="comment">   *    Conformal Projections Based on Elliptic Functions,</span>
-<a name="l00027"></a>00027 <span class="comment">   *    (B. V. Gutsell, Toronto, 1976), 128pp.,</span>
-<a name="l00028"></a>00028 <span class="comment">   *    ISBN: 0919870163</span>
-<a name="l00029"></a>00029 <span class="comment">   *    (also appeared as:</span>
-<a name="l00030"></a>00030 <span class="comment">   *    Monograph 16, Suppl. No. 1 to Canadian Cartographer, Vol 13).</span>
-<a name="l00031"></a>00031 <span class="comment">   *  - C. F. F. Karney,</span>
-<a name="l00032"></a>00032 <span class="comment">   *    <a href="http://dx.doi.org/10.1007/s00190-011-0445-3"></span>
-<a name="l00033"></a>00033 <span class="comment">   *    Transverse Mercator with an accuracy of a few nanometers,</a></span>
-<a name="l00034"></a>00034 <span class="comment">   *    J. Geodesy 85(8), 475-485 (Aug. 2011);</span>
-<a name="l00035"></a>00035 <span class="comment">   *    preprint</span>
-<a name="l00036"></a>00036 <span class="comment">   *    <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.</span>
-<a name="l00037"></a>00037 <span class="comment">   *</span>
-<a name="l00038"></a>00038 <span class="comment">   * Lee gives the correct results for forward and reverse transformations</span>
-<a name="l00039"></a>00039 <span class="comment">   * subject to the branch cut rules (see the description of the \e extendp</span>
-<a name="l00040"></a>00040 <span class="comment">   * argument to the constructor).  The maximum error is about 8 nm (8</span>
-<a name="l00041"></a>00041 <span class="comment">   * nanometers), ground distance, for the forward and reverse transformations.</span>
-<a name="l00042"></a>00042 <span class="comment">   * The error in the convergence is 2e-15&quot;, the relative error in the</span>
-<a name="l00043"></a>00043 <span class="comment">   * scale is 7e-12%%.  See Sec. 3 of</span>
-<a name="l00044"></a>00044 <span class="comment">   * <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for details.</span>
-<a name="l00045"></a>00045 <span class="comment">   * The method is "exact" in the sense that the errors are close to the</span>
-<a name="l00046"></a>00046 <span class="comment">   * round-off limit and that no changes are needed in the algorithms for them</span>
-<a name="l00047"></a>00047 <span class="comment">   * to be used with reals of a higher precision.  Thus the errors using long</span>
-<a name="l00048"></a>00048 <span class="comment">   * double (with a 64-bit fraction) are about 2000 times smaller than using</span>
-<a name="l00049"></a>00049 <span class="comment">   * double (with a 53-bit fraction).</span>
-<a name="l00050"></a>00050 <span class="comment">   *</span>
-<a name="l00051"></a>00051 <span class="comment">   * This algorithm is about 4.5 times slower than the 6th-order Kr&uuml;ger</span>
-<a name="l00052"></a>00052 <span class="comment">   * method, TransverseMercator, taking about 11 us for a combined forward and</span>
-<a name="l00053"></a>00053 <span class="comment">   * reverse projection on a 2.66 GHz Intel machine (g++, version 4.3.0, -O3).</span>
-<a name="l00054"></a>00054 <span class="comment">   *</span>
-<a name="l00055"></a>00055 <span class="comment">   * The ellipsoid parameters and the central scale are set in the constructor.</span>
-<a name="l00056"></a>00056 <span class="comment">   * The central meridian (which is a trivial shift of the longitude) is</span>
-<a name="l00057"></a>00057 <span class="comment">   * specified as the \e lon0 argument of the TransverseMercatorExact::Forward</span>
-<a name="l00058"></a>00058 <span class="comment">   * and TransverseMercatorExact::Reverse functions.  The latitude of origin is</span>
-<a name="l00059"></a>00059 <span class="comment">   * taken to be the equator.  See the documentation on TransverseMercator for</span>
-<a name="l00060"></a>00060 <span class="comment">   * how to include a false easting, false northing, or a latitude of origin.</span>
-<a name="l00061"></a>00061 <span class="comment">   *</span>
-<a name="l00062"></a>00062 <span class="comment">   * See <a href="http://geographiclib.sourceforge.net/tm-grid.kmz"</span>
-<a name="l00063"></a>00063 <span class="comment">   * type="application/vnd.google-earth.kmz"> tm-grid.kmz</a>, for an</span>
-<a name="l00064"></a>00064 <span class="comment">   * illustration of the transverse Mercator grid in Google Earth.</span>
-<a name="l00065"></a>00065 <span class="comment">   *</span>
-<a name="l00066"></a>00066 <span class="comment">   * See TransverseMercatorExact.cpp for more information on the</span>
-<a name="l00067"></a>00067 <span class="comment">   * implementation.</span>
-<a name="l00068"></a>00068 <span class="comment">   *</span>
-<a name="l00069"></a>00069 <span class="comment">   * See \ref transversemercator for a discussion of this projection.</span>
-<a name="l00070"></a>00070 <span class="comment">   *</span>
-<a name="l00071"></a>00071 <span class="comment">   * Example of use:</span>
-<a name="l00072"></a>00072 <span class="comment">   * \include example-TransverseMercatorExact.cpp</span>
-<a name="l00073"></a>00073 <span class="comment">   *</span>
-<a name="l00074"></a>00074 <span class="comment">   * <a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a> is a</span>
-<a name="l00075"></a>00075 <span class="comment">   * command-line utility providing access to the functionality of</span>
-<a name="l00076"></a>00076 <span class="comment">   * TransverseMercator and TransverseMercatorExact.</span>
-<a name="l00077"></a>00077 <span class="comment">   **********************************************************************/</span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> TransverseMercatorExact {
-<a name="l00080"></a>00080   <span class="keyword">private</span>:
-<a name="l00081"></a>00081     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00082"></a>00082     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tol_;
-<a name="l00083"></a>00083     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tol1_;
-<a name="l00084"></a>00084     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tol2_;
-<a name="l00085"></a>00085     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> taytol_;
-<a name="l00086"></a>00086     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> overflow_;
-<a name="l00087"></a>00087     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numit_ = 10;
-<a name="l00088"></a>00088     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _f, _k0, _mu, _mv, _e, _ep2;
-<a name="l00089"></a>00089     <span class="keywordtype">bool</span> _extendp;
-<a name="l00090"></a>00090     EllipticFunction _Eu, _Ev;
-<a name="l00091"></a>00091     <span class="comment">// tan(x) for x in [-pi/2, pi/2] ensuring that the sign is right</span>
-<a name="l00092"></a>00092     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tanx(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() {
-<a name="l00093"></a>00093       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = std::tan(x);
-<a name="l00094"></a>00094       <span class="comment">// Write the tests this way to ensure that tanx(NaN()) is NaN()</span>
-<a name="l00095"></a>00095       <span class="keywordflow">return</span> x >= 0 ? (!(t < 0) ? t : overflow_) : (!(t >= 0) ? t : -overflow_);
-<a name="l00096"></a>00096     }
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> taup(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tau) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00099"></a>00099     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> taupinv(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> taup) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101     <span class="keywordtype">void</span> zeta(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00102"></a>00102               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> v, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00103"></a>00103               <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& taup, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lam) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105     <span class="keywordtype">void</span> dwdzeta(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00106"></a>00106                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> v, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00107"></a>00107                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& du, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& dv) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109     <span class="keywordtype">bool</span> zetainv0(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> psi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lam, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& v) <span class="keyword">const</span> <span class="keywordflow">thr [...]
-<a name="l00110"></a>00110     <span class="keywordtype">void</span> zetainv(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> taup, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lam, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& v) <span class="keyword">const</span> <span class="keywordflow">thr [...]
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112     <span class="keywordtype">void</span> sigma(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00113"></a>00113                <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> v, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00114"></a>00114                <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& xi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& eta) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116     <span class="keywordtype">void</span> dwdsigma(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00117"></a>00117                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> v, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00118"></a>00118                   <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& du, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& dv) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120     <span class="keywordtype">bool</span> sigmainv0(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eta, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& v) <span class="keyword">const</span> <span class="keywordflow">thr [...]
-<a name="l00121"></a>00121     <span class="keywordtype">void</span> sigmainv(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> xi, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eta, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& u, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& v) <span class="keyword">const</span> <span class="keywordflow">thro [...]
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     <span class="keywordtype">void</span> Scale(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tau, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lam,
-<a name="l00124"></a>00124                <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnu, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnu,
-<a name="l00125"></a>00125                <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> snv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cnv, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dnv,
-<a name="l00126"></a>00126                <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128   <span class="keyword">public</span>:
-<a name="l00129"></a>00129 <span class="comment"></span>
-<a name="l00130"></a>00130 <span class="comment">    /**</span>
-<a name="l00131"></a>00131 <span class="comment">     * Constructor for a ellipsoid with</span>
-<a name="l00132"></a>00132 <span class="comment">     *</span>
-<a name="l00133"></a>00133 <span class="comment">     * @param[in] a equatorial radius (meters).</span>
-<a name="l00134"></a>00134 <span class="comment">     * @param[in] f flattening of ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00135"></a>00135 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00136"></a>00136 <span class="comment">     * @param[in] k0 central scale factor.</span>
-<a name="l00137"></a>00137 <span class="comment">     * @param[in] extendp use extended domain.</span>
-<a name="l00138"></a>00138 <span class="comment">     *</span>
-<a name="l00139"></a>00139 <span class="comment">     * The transverse Mercator projection has a branch point singularity at \e</span>
-<a name="l00140"></a>00140 <span class="comment">     * lat = 0 and \e lon - \e lon0 = 90 (1 - \e e) or (for</span>
-<a name="l00141"></a>00141 <span class="comment">     * TransverseMercatorExact::UTM) x = 18381 km, y = 0m.  The \e extendp</span>
-<a name="l00142"></a>00142 <span class="comment">     * argument governs where the branch cut is placed.  With \e extendp =</span>
-<a name="l00143"></a>00143 <span class="comment">     * false, the "standard" convention is followed, namely the cut is placed</span>
-<a name="l00144"></a>00144 <span class="comment">     * along x > 18381 km, y = 0m.  Forward can be called with any \e lat and</span>
-<a name="l00145"></a>00145 <span class="comment">     * \e lon then produces the transformation shown in Lee, Fig 46.  Reverse</span>
-<a name="l00146"></a>00146 <span class="comment">     * analytically continues this in the +/- \e x direction.  As a</span>
-<a name="l00147"></a>00147 <span class="comment">     * consequence, Reverse may map multiple points to the same geographic</span>
-<a name="l00148"></a>00148 <span class="comment">     * location; for example, for TransverseMercatorExact::UTM, \e x =</span>
-<a name="l00149"></a>00149 <span class="comment">     * 22051449.037349 m, \e y = -7131237.022729 m and \e x = 29735142.378357</span>
-<a name="l00150"></a>00150 <span class="comment">     * m, \e y = 4235043.607933 m both map to \e lat = -2 deg, \e lon = 88 deg.</span>
-<a name="l00151"></a>00151 <span class="comment">     *</span>
-<a name="l00152"></a>00152 <span class="comment">     * With \e extendp = true, the branch cut is moved to the lower left</span>
-<a name="l00153"></a>00153 <span class="comment">     * quadrant.  The various symmetries of the transverse Mercator projection</span>
-<a name="l00154"></a>00154 <span class="comment">     * can be used to explore the projection on any sheet.  In this mode the</span>
-<a name="l00155"></a>00155 <span class="comment">     * domains of \e lat, \e lon, \e x, and \e y are restricted to</span>
-<a name="l00156"></a>00156 <span class="comment">     * - the union of</span>
-<a name="l00157"></a>00157 <span class="comment">     *   - \e lat in [0, 90] and \e lon - \e lon0 in [0, 90]</span>
-<a name="l00158"></a>00158 <span class="comment">     *   - \e lat in (-90, 0] and \e lon - \e lon0 in [90 (1 - \e e), 90]</span>
-<a name="l00159"></a>00159 <span class="comment">     * - the union of</span>
-<a name="l00160"></a>00160 <span class="comment">     *   - <i>x</i>/(\e k0 \e a) in [0, inf) and</span>
-<a name="l00161"></a>00161 <span class="comment">     *     <i>y</i>/(\e k0 \e a) in [0, E(<i>e</i><sup>2</sup>)]</span>
-<a name="l00162"></a>00162 <span class="comment">     *   - <i>x</i>/(\e k0 \e a) in [K(1 - <i>e</i><sup>2</sup>) - E(1 -</span>
-<a name="l00163"></a>00163 <span class="comment">     *     <i>e</i><sup>2</sup>), inf) and <i>y</i>/(\e k0 \e a) in (-inf, 0]</span>
-<a name="l00164"></a>00164 <span class="comment">     * .</span>
-<a name="l00165"></a>00165 <span class="comment">     * See Sec. 5 of</span>
-<a name="l00166"></a>00166 <span class="comment">     * <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for a full</span>
-<a name="l00167"></a>00167 <span class="comment">     * discussion of the treatment of the branch cut.</span>
-<a name="l00168"></a>00168 <span class="comment">     *</span>
-<a name="l00169"></a>00169 <span class="comment">     * The method will work for all ellipsoids used in terrestrial geodesy.</span>
-<a name="l00170"></a>00170 <span class="comment">     * The method cannot be applied directly to the case of a sphere (\e f = 0)</span>
-<a name="l00171"></a>00171 <span class="comment">     * because some the constants characterizing this method diverge in that</span>
-<a name="l00172"></a>00172 <span class="comment">     * limit, and in practice, \e f should be larger than about numeric_limits<</span>
-<a name="l00173"></a>00173 <span class="comment">     * real >::%epsilon().  However, TransverseMercator treats the sphere</span>
-<a name="l00174"></a>00174 <span class="comment">     * exactly.  An exception is thrown if either axis of the ellipsoid or \e</span>
-<a name="l00175"></a>00175 <span class="comment">     * k0 is not positive or if \e f <= 0.</span>
-<a name="l00176"></a>00176 <span class="comment">     **********************************************************************/</span>
-<a name="l00177"></a>00177     TransverseMercatorExact(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k0, <span class="keywordtype">bool</span> extendp = <span class="keyword">false</span>);
-<a name="l00178"></a>00178 <span class="comment"></span>
-<a name="l00179"></a>00179 <span class="comment">    /**</span>
-<a name="l00180"></a>00180 <span class="comment">     * Forward projection, from geographic to transverse Mercator.</span>
-<a name="l00181"></a>00181 <span class="comment">     *</span>
-<a name="l00182"></a>00182 <span class="comment">     * @param[in] lon0 central meridian of the projection (degrees).</span>
-<a name="l00183"></a>00183 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00184"></a>00184 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00185"></a>00185 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00186"></a>00186 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00187"></a>00187 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00188"></a>00188 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00189"></a>00189 <span class="comment">     *</span>
-<a name="l00190"></a>00190 <span class="comment">     * No false easting or northing is added. \e lat should be in the range</span>
-<a name="l00191"></a>00191 <span class="comment">     * [-90, 90]; \e lon and \e lon0 should be in the range [-180, 360].</span>
-<a name="l00192"></a>00192 <span class="comment">     **********************************************************************/</span>
-<a name="l00193"></a>00193     <span class="keywordtype">void</span> Forward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon,
-<a name="l00194"></a>00194                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00195"></a>00195 <span class="comment"></span>
-<a name="l00196"></a>00196 <span class="comment">    /**</span>
-<a name="l00197"></a>00197 <span class="comment">     * Reverse projection, from transverse Mercator to geographic.</span>
-<a name="l00198"></a>00198 <span class="comment">     *</span>
-<a name="l00199"></a>00199 <span class="comment">     * @param[in] lon0 central meridian of the projection (degrees).</span>
-<a name="l00200"></a>00200 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00201"></a>00201 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00202"></a>00202 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00203"></a>00203 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00204"></a>00204 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00205"></a>00205 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00206"></a>00206 <span class="comment">     *</span>
-<a name="l00207"></a>00207 <span class="comment">     * No false easting or northing is added.  \e lon0 should be in the range</span>
-<a name="l00208"></a>00208 <span class="comment">     * [-180, 360].  The value of \e lon returned is in the range [-180, 180).</span>
-<a name="l00209"></a>00209 <span class="comment">     **********************************************************************/</span>
-<a name="l00210"></a>00210     <span class="keywordtype">void</span> Reverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00211"></a>00211                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00212"></a>00212 <span class="comment"></span>
-<a name="l00213"></a>00213 <span class="comment">    /**</span>
-<a name="l00214"></a>00214 <span class="comment">     * TransverseMercatorExact::Forward without returning the convergence and</span>
-<a name="l00215"></a>00215 <span class="comment">     * scale.</span>
-<a name="l00216"></a>00216 <span class="comment">     **********************************************************************/</span>
-<a name="l00217"></a><a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a39c294a3389af325c41a8de51fd9228a">00217</a>     <span class="keywordtype">void</span> Forward(real lon0, real lat, real lon,
-<a name="l00218"></a>00218                  real& x, real& y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00219"></a>00219       real gamma, k;
-<a name="l00220"></a>00220       Forward(lon0, lat, lon, x, y, gamma, k);
-<a name="l00221"></a>00221     }
-<a name="l00222"></a>00222 <span class="comment"></span>
-<a name="l00223"></a>00223 <span class="comment">    /**</span>
-<a name="l00224"></a>00224 <span class="comment">     * TransverseMercatorExact::Reverse without returning the convergence and</span>
-<a name="l00225"></a>00225 <span class="comment">     * scale.</span>
-<a name="l00226"></a>00226 <span class="comment">     **********************************************************************/</span>
-<a name="l00227"></a><a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a56ff2f371d59e2ca0da8644571706169">00227</a>     <span class="keywordtype">void</span> Reverse(real lon0, real x, real y,
-<a name="l00228"></a>00228                  real& lat, real& lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00229"></a>00229       real gamma, k;
-<a name="l00230"></a>00230       Reverse(lon0, x, y, lat, lon, gamma, k);
-<a name="l00231"></a>00231     }
-<a name="l00232"></a>00232 <span class="comment"></span>
-<a name="l00233"></a>00233 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00234"></a>00234 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00235"></a>00235 <span class="comment">    ///@{</span>
-<a name="l00236"></a>00236 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00237"></a>00237 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00238"></a>00238 <span class="comment">     *   the value used in the constructor.</span>
-<a name="l00239"></a>00239 <span class="comment">     **********************************************************************/</span>
-<a name="l00240"></a><a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a19083f16ecfc51f9020d7242b3ded43e">00240</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a19083f16ecfc51f9020d7242b3ded43e">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a; }
-<a name="l00241"></a>00241 <span class="comment"></span>
-<a name="l00242"></a>00242 <span class="comment">    /**</span>
-<a name="l00243"></a>00243 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value used in</span>
-<a name="l00244"></a>00244 <span class="comment">     *   the constructor.</span>
-<a name="l00245"></a>00245 <span class="comment">     **********************************************************************/</span>
-<a name="l00246"></a><a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a4045ec4b01c99c4bb589b1b3e7e07ca4">00246</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a4045ec4b01c99c4bb589b1b3e7e07ca4">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _f; }
-<a name="l00247"></a>00247 <span class="comment"></span>
-<a name="l00248"></a>00248 <span class="comment">    /// \cond SKIP</span>
-<a name="l00249"></a>00249 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00250"></a>00250 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00251"></a>00251 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00252"></a>00252 <span class="comment">     **********************************************************************/</span>
-<a name="l00253"></a>00253     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> 1/_f; }<span class="comment"></span>
-<a name="l00254"></a>00254 <span class="comment">    /// \endcond</span>
-<a name="l00255"></a>00255 <span class="comment"></span><span class="comment"></span>
-<a name="l00256"></a>00256 <span class="comment">    /**</span>
-<a name="l00257"></a>00257 <span class="comment">     * @return \e k0 central scale for the projection.  This is the value of \e</span>
-<a name="l00258"></a>00258 <span class="comment">     *   k0 used in the constructor and is the scale on the central meridian.</span>
-<a name="l00259"></a>00259 <span class="comment">     **********************************************************************/</span>
-<a name="l00260"></a><a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a355a827f45c194d56a465e0d4f91c3a3">00260</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a355a827f45c194d56a465e0d4f91c3a3">CentralScale</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _k0; }<span [...]
-<a name="l00261"></a>00261 <span class="comment">    ///@}</span>
-<a name="l00262"></a>00262 <span class="comment"></span><span class="comment"></span>
-<a name="l00263"></a>00263 <span class="comment">    /**</span>
-<a name="l00264"></a>00264 <span class="comment">     * A global instantiation of TransverseMercatorExact with the WGS84</span>
-<a name="l00265"></a>00265 <span class="comment">     * ellipsoid and the UTM scale factor.  However, unlike UTM, no false</span>
-<a name="l00266"></a>00266 <span class="comment">     * easting or northing is added.</span>
-<a name="l00267"></a>00267 <span class="comment">     **********************************************************************/</span>
-<a name="l00268"></a><a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a68668637e754201897bddb82baaf634b">00268</a>     <span class="keyword">static</span> <span class="keyword">const</span> TransverseMercatorExact <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html#a68668637e754201897bddb82baaf634b">UTM</a>;
-<a name="l00269"></a>00269   };
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273 <span class="preprocessor">#endif  // GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercatorProj.1.html b/doc/html/TransverseMercatorProj.1.html
deleted file mode 100644
index c3868d4..0000000
--- a/doc/html/TransverseMercatorProj.1.html
+++ /dev/null
@@ -1,221 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>TransverseMercatorProj -- perform transverse Mercator projection</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#extended_domain">EXTENDED DOMAIN</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>TransverseMercatorProj -- perform transverse Mercator projection</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>TransverseMercatorProj</strong> [ <strong>-s</strong> | <strong>-t</strong> ]
-[ <strong>-l</strong> <em>lon0</em> ] [ <strong>-k</strong> <em>k1</em> ] [ <strong>-r</strong> ]
-[ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Perform the transverse Mercator projections.  Convert geodetic
-coordinates to transverse Mercator coordinates.  The central meridian is
-given by <em>lon0</em>.  The longitude of origin is the equator.  The scale on
-the central meridian is <em>k0</em>.  By default an implementation of the
-exact transverse Mercator projection is used.</p>
-<p>Geodetic coordinates are provided on standard input as a set of lines
-containing (blank separated) <em>latitude</em> and <em>longitude</em> (decimal
-degrees or degrees, minutes, seconds).  For each set of geodetic
-coordinates, the corresponding projected easting, <em>x</em>, and northing,
-<em>y</em>, (meters) are printed on standard output together with the meridian
-convergence <em>gamma</em> (degrees) and scale <em>k</em>.  The meridian convergence
-is the bearing of the <em>y</em> axis measured clockwise from true north.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="s" class="item"><strong>-s</strong></a></strong></dt>
-
-<dd>
-<p>use the sixth-order Krueger series approximation to the transverse
-Mercator projection instead of the exact projection.</p>
-</dd>
-<dt><strong><a name="t" class="item"><strong>-t</strong></a></strong></dt>
-
-<dd>
-<p>use exact algorithm with the <a href="#extended_domain">EXTENDED DOMAIN</a>.</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
-
-<dd>
-<p>specify the longitude of origin <em>lon0</em> (degrees, default 0).</p>
-</dd>
-<dt><strong><a name="k" class="item"><strong>-k</strong></a></strong></dt>
-
-<dd>
-<p>specify the scale <em>k0</em> on the central meridian (default 0.9996).</p>
-</dd>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
-
-<dd>
-<p>perform the reverse projection.  <em>x</em> and <em>y</em> are given on standard
-input and each line of standard output gives <em>latitude</em>, <em>longitude</em>,
-<em>gamma</em>, and <em>k</em>.</p>
-</dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
-
-<dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.  If the exact algorithm is used, <em>f</em> must be
-positive.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="extended_domain">EXTENDED DOMAIN</a></h1>
-<p>The exact transverse Mercator projection has a <em>branch point</em> on the
-equator at longitudes (relative to <em>lon0</em>) of +/- (1 - <em>e</em>) 90, where
-<em>e</em> is the eccentricity of the ellipsoid.  The standard convention for
-handling this branch point is to map positive (negative) latitudes into
-positive (negative) northings <em>y</em>; i.e., a branch cut is placed on the
-equator.  With the <em>extended</em> domain, the northern sheet of the
-projection is extended into the south hemisphere by pushing the branch
-cut south from the branch points.  See the reference below for details.</p>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 0 90 | TransverseMercatorProj
-   => 25953592.84 9997964.94 90 18.40
-   echo 260e5 100e5 | TransverseMercatorProj -r
-   => -0.02 90.00 90.01 18.48</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>TransverseMercatorProj</strong> to return an exit
-code of 1.  However, an error does not cause <strong>TransverseMercatorProj</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>TransverseMercatorProj</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The algorithms for the transverse Mercator projection are described in
-C. F. F. Karney, <em>Transverse Mercator with an accuracy of a few
-nanometers</em>, J. Geod <strong>85</strong>(8), 475-485 (Aug. 2011); DOI
-<a href="http://dx.doi.org/10.1007/s00190-011-0445-3">http://dx.doi.org/10.1007/s00190-011-0445-3</a>; preprint
-<a href="http://arxiv.org/abs/1002.1417">http://arxiv.org/abs/1002.1417</a>.  The explanation of the extended
-domain of the projection with the <strong>-t</strong> option is given in Section 5 of
-this paper.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>TransverseMercatorProj</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-01.  Prior to version 1.9 it was
-called TransverseMercatorTest (and its interface was slightly
-different).</p>
-
-</body>
-
-</html>
diff --git a/doc/html/TransverseMercatorProj_8cpp.html b/doc/html/TransverseMercatorProj_8cpp.html
deleted file mode 100644
index fd048f4..0000000
--- a/doc/html/TransverseMercatorProj_8cpp.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercatorProj.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">TransverseMercatorProj.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Command line utility for transverse Mercator projections.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <iostream></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <string></code><br/>
-<code>#include <fstream></code><br/>
-<code>#include <<a class="el" href="EllipticFunction_8hpp_source.html">GeographicLib/EllipticFunction.hpp</a>></code><br/>
-<code>#include <<a class="el" href="TransverseMercatorExact_8hpp_source.html">GeographicLib/TransverseMercatorExact.hpp</a>></code><br/>
-<code>#include <<a class="el" href="TransverseMercator_8hpp_source.html">GeographicLib/TransverseMercator.hpp</a>></code><br/>
-<code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-<code>#include "TransverseMercatorProj.usage"</code><br/>
-</div>
-<p><a href="TransverseMercatorProj_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercatorProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Command line utility for transverse Mercator projections. </p>
-<p>Copyright (c) Charles Karney (2008-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>Compile and link with g++ -g -O3 -I../include -I../man -o TransverseMercatorProj \ <a class="el" href="TransverseMercatorProj_8cpp.html" title="Command line utility for transverse Mercator projections.">TransverseMercatorProj.cpp</a> \ ../src/DMS.cpp \ ../src/EllipticFunction.cpp \ ../src/TransverseMercator.cpp \ ../src/TransverseMercatorExact.cpp</p>
-<p>See the <a href="TransverseMercatorProj.1.html">man page</a> for usage information. </p>
-
-<p>Definition in file <a class="el" href="TransverseMercatorProj_8cpp_source.html">TransverseMercatorProj.cpp</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a0ddf1224851353fc92bfbff6f499fa97"></a><!-- doxytag: member="TransverseMercatorProj.cpp::main" ref="a0ddf1224851353fc92bfbff6f499fa97" args="(int argc, char *argv[])" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int main </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>argc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"><em>argv</em>[] </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="TransverseMercatorProj_8cpp_source.html#l00034">34</a> of file <a class="el" href="TransverseMercatorProj_8cpp_source.html">TransverseMercatorProj.cpp</a>.</p>
-
-<p>References <a class="el" href="DMS_8cpp_source.html#l00031">GeographicLib::DMS::Decode()</a>, <a class="el" href="DMS_8hpp_source.html#l00073">GeographicLib::DMS::LATITUDE</a>, and <a class="el" href="DMS_8cpp_source.html#l00207">GeographicLib::DMS::DecodeLatLon()</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercatorProj_8cpp_source.html b/doc/html/TransverseMercatorProj_8cpp_source.html
deleted file mode 100644
index 86f2b73..0000000
--- a/doc/html/TransverseMercatorProj_8cpp_source.html
+++ /dev/null
@@ -1,307 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercatorProj.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">TransverseMercatorProj.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="TransverseMercatorProj_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file TransverseMercatorProj.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for transverse Mercator projections</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * Compile and link with</span>
-<a name="l00010"></a>00010 <span class="comment"> *   g++ -g -O3 -I../include -I../man -o TransverseMercatorProj \</span>
-<a name="l00011"></a>00011 <span class="comment"> *       TransverseMercatorProj.cpp \</span>
-<a name="l00012"></a>00012 <span class="comment"> *       ../src/DMS.cpp \</span>
-<a name="l00013"></a>00013 <span class="comment"> *       ../src/EllipticFunction.cpp \</span>
-<a name="l00014"></a>00014 <span class="comment"> *       ../src/TransverseMercator.cpp \</span>
-<a name="l00015"></a>00015 <span class="comment"> *       ../src/TransverseMercatorExact.cpp</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * See the <a href="TransverseMercatorProj.1.html">man page</a> for usage</span>
-<a name="l00018"></a>00018 <span class="comment"> * information.</span>
-<a name="l00019"></a>00019 <span class="comment"> **********************************************************************/</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="preprocessor">#include <iostream></span>
-<a name="l00022"></a>00022 <span class="preprocessor">#include <sstream></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include <string></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <sstream></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <fstream></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <<a class="code" href="EllipticFunction_8hpp.html" title="Header for GeographicLib::EllipticFunction class.">GeographicLib/EllipticFunction.hpp</a>></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <<a class="code" href="TransverseMercatorExact_8hpp.html" title="Header for GeographicLib::TransverseMercatorExact class.">GeographicLib/TransverseMercatorExact.hpp</a>></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <<a class="code" href="TransverseMercator_8hpp.html" title="Header for GeographicLib::TransverseMercator class.">GeographicLib/TransverseMercator.hpp</a>></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#include "TransverseMercatorProj.usage"</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a><a class="code" href="TransverseMercatorProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00034</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-<a name="l00035"></a>00035   <span class="keywordflow">try</span> {
-<a name="l00036"></a>00036     <span class="keyword">using namespace </span>GeographicLib;
-<a name="l00037"></a>00037     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00038"></a>00038     <span class="keywordtype">bool</span> exact = <span class="keyword">true</span>, extended = <span class="keyword">false</span>, series = <span class="keyword">false</span>, reverse = <span class="keyword">false</span>;
-<a name="l00039"></a>00039     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-<a name="l00040"></a>00040       a = <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<real>(),
-<a name="l00041"></a>00041       f = Constants::WGS84_f<real>(),
-<a name="l00042"></a>00042       k0 = <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::UTM_k0<real>(),
-<a name="l00043"></a>00043       lon0 = 0;
-<a name="l00044"></a>00044     std::string istring, ifile, ofile, cdelim;
-<a name="l00045"></a>00045     <span class="keywordtype">char</span> lsep = <span class="charliteral">';'</span>;
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
-<a name="l00048"></a>00048       std::string arg(argv[m]);
-<a name="l00049"></a>00049       <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-r"</span>)
-<a name="l00050"></a>00050         reverse = <span class="keyword">true</span>;
-<a name="l00051"></a>00051       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-t"</span>) {
-<a name="l00052"></a>00052         exact = <span class="keyword">true</span>;
-<a name="l00053"></a>00053         extended = <span class="keyword">true</span>;
-<a name="l00054"></a>00054         series = <span class="keyword">false</span>;
-<a name="l00055"></a>00055       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-s"</span>) {
-<a name="l00056"></a>00056         exact = <span class="keyword">false</span>;
-<a name="l00057"></a>00057         extended = <span class="keyword">false</span>;
-<a name="l00058"></a>00058         series = <span class="keyword">true</span>;
-<a name="l00059"></a>00059       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-l"</span>) {
-<a name="l00060"></a>00060         <span class="keywordflow">if</span> (++m >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00061"></a>00061         <span class="keywordflow">try</span> {
-<a name="l00062"></a>00062           <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a>::flag ind;
-<a name="l00063"></a>00063           lon0 = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(std::string(argv[m]), ind);
-<a name="l00064"></a>00064           <span class="keywordflow">if</span> (ind == <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">DMS::LATITUDE</a>)
-<a name="l00065"></a>00065             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad hemisphere"</span>);
-<a name="l00066"></a>00066           <span class="keywordflow">if</span> (!(lon0 >= -180 && lon0 <= 360))
-<a name="l00067"></a>00067             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Bad longitude"</span>);
-<a name="l00068"></a>00068           <span class="keywordflow">if</span> (lon0 >= 180) lon0 -= 360;
-<a name="l00069"></a>00069         }
-<a name="l00070"></a>00070         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00071"></a>00071           std::cerr << <span class="stringliteral">"Error decoding argument of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00072"></a>00072                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00073"></a>00073           <span class="keywordflow">return</span> 1;
-<a name="l00074"></a>00074         }
-<a name="l00075"></a>00075       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-k"</span>) {
-<a name="l00076"></a>00076         <span class="keywordflow">if</span> (++m >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00077"></a>00077         <span class="keywordflow">try</span> {
-<a name="l00078"></a>00078           k0 = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m]));
-<a name="l00079"></a>00079         }
-<a name="l00080"></a>00080         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00081"></a>00081           std::cerr << <span class="stringliteral">"Error decoding argument of "</span> << arg << <span class="stringliteral">": "</span>
-<a name="l00082"></a>00082                     << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00083"></a>00083           <span class="keywordflow">return</span> 1;
-<a name="l00084"></a>00084         }
-<a name="l00085"></a>00085       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-e"</span>) {
-<a name="l00086"></a>00086         <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00087"></a>00087         <span class="keywordflow">try</span> {
-<a name="l00088"></a>00088           a = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(std::string(argv[m + 1]));
-<a name="l00089"></a>00089           f = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::fract<real>(std::string(argv[m + 2]));
-<a name="l00090"></a>00090         }
-<a name="l00091"></a>00091         <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00092"></a>00092           std::cerr << <span class="stringliteral">"Error decoding arguments of -e: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00093"></a>00093           <span class="keywordflow">return</span> 1;
-<a name="l00094"></a>00094         }
-<a name="l00095"></a>00095         m += 2;
-<a name="l00096"></a>00096       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-string"</span>) {
-<a name="l00097"></a>00097         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00098"></a>00098         istring = argv[m];
-<a name="l00099"></a>00099       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--input-file"</span>) {
-<a name="l00100"></a>00100         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00101"></a>00101         ifile = argv[m];
-<a name="l00102"></a>00102       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--output-file"</span>) {
-<a name="l00103"></a>00103         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00104"></a>00104         ofile = argv[m];
-<a name="l00105"></a>00105       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--line-separator"</span>) {
-<a name="l00106"></a>00106         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00107"></a>00107         <span class="keywordflow">if</span> (std::string(argv[m]).size() != 1) {
-<a name="l00108"></a>00108           std::cerr << <span class="stringliteral">"Line separator must be a single character\n"</span>;
-<a name="l00109"></a>00109           <span class="keywordflow">return</span> 1;
-<a name="l00110"></a>00110         }
-<a name="l00111"></a>00111         lsep = argv[m][0];
-<a name="l00112"></a>00112       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--comment-delimiter"</span>) {
-<a name="l00113"></a>00113         <span class="keywordflow">if</span> (++m == argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
-<a name="l00114"></a>00114         cdelim = argv[m];
-<a name="l00115"></a>00115       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
-<a name="l00116"></a>00116         std::cout
-<a name="l00117"></a>00117           << argv[0]
-<a name="l00118"></a>00118           << <span class="stringliteral">": $Id: dd2a53288a82171129091d16bec6d1457568eb4d $\n"</span>
-<a name="l00119"></a>00119           << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION_STRING << <span class="stringliteral">"\n"</span>;
-<a name="l00120"></a>00120         <span class="keywordflow">return</span> 0;
-<a name="l00121"></a>00121       } <span class="keywordflow">else</span>
-<a name="l00122"></a>00122         <span class="keywordflow">return</span> usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
-<a name="l00123"></a>00123     }
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125     <span class="keywordflow">if</span> (!ifile.empty() && !istring.empty()) {
-<a name="l00126"></a>00126       std::cerr << <span class="stringliteral">"Cannot specify --input-string and --input-file together\n"</span>;
-<a name="l00127"></a>00127       <span class="keywordflow">return</span> 1;
-<a name="l00128"></a>00128     }
-<a name="l00129"></a>00129     <span class="keywordflow">if</span> (ifile == <span class="stringliteral">"-"</span>) ifile.clear();
-<a name="l00130"></a>00130     std::ifstream infile;
-<a name="l00131"></a>00131     std::istringstream instring;
-<a name="l00132"></a>00132     <span class="keywordflow">if</span> (!ifile.empty()) {
-<a name="l00133"></a>00133       infile.open(ifile.c_str());
-<a name="l00134"></a>00134       <span class="keywordflow">if</span> (!infile.is_open()) {
-<a name="l00135"></a>00135         std::cerr << <span class="stringliteral">"Cannot open "</span> << ifile << <span class="stringliteral">" for reading\n"</span>;
-<a name="l00136"></a>00136         <span class="keywordflow">return</span> 1;
-<a name="l00137"></a>00137       }
-<a name="l00138"></a>00138     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!istring.empty()) {
-<a name="l00139"></a>00139       std::string::size_type m = 0;
-<a name="l00140"></a>00140       <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
-<a name="l00141"></a>00141         m = istring.find(lsep, m);
-<a name="l00142"></a>00142         <span class="keywordflow">if</span> (m == std::string::npos)
-<a name="l00143"></a>00143           <span class="keywordflow">break</span>;
-<a name="l00144"></a>00144         istring[m] = <span class="charliteral">'\n'</span>;
-<a name="l00145"></a>00145       }
-<a name="l00146"></a>00146       instring.str(istring);
-<a name="l00147"></a>00147     }
-<a name="l00148"></a>00148     std::istream* input = !ifile.empty() ? &infile :
-<a name="l00149"></a>00149       (!istring.empty() ? &instring : &std::cin);
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     std::ofstream outfile;
-<a name="l00152"></a>00152     <span class="keywordflow">if</span> (ofile == <span class="stringliteral">"-"</span>) ofile.clear();
-<a name="l00153"></a>00153     <span class="keywordflow">if</span> (!ofile.empty()) {
-<a name="l00154"></a>00154       outfile.open(ofile.c_str());
-<a name="l00155"></a>00155       <span class="keywordflow">if</span> (!outfile.is_open()) {
-<a name="l00156"></a>00156         std::cerr << <span class="stringliteral">"Cannot open "</span> << ofile << <span class="stringliteral">" for writing\n"</span>;
-<a name="l00157"></a>00157         <span class="keywordflow">return</span> 1;
-<a name="l00158"></a>00158       }
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a>& TMS =
-<a name="l00163"></a>00163       series ? <a class="code" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a>(a, f, k0) : TransverseMercator(1, 0, 1);
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>& TME =
-<a name="l00166"></a>00166       exact ? <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>(a, f, k0, extended)
-<a name="l00167"></a>00167       : TransverseMercatorExact(1, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.1), 1, <span class="keyword">false</span>);
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     std::string s;
-<a name="l00170"></a>00170     <span class="keywordtype">int</span> retval = 0;
-<a name="l00171"></a>00171     std::cout << std::fixed;
-<a name="l00172"></a>00172     <span class="keywordflow">while</span> (std::getline(*input, s)) {
-<a name="l00173"></a>00173       <span class="keywordflow">try</span> {
-<a name="l00174"></a>00174         std::string eol(<span class="stringliteral">"\n"</span>);
-<a name="l00175"></a>00175         <span class="keywordflow">if</span> (!cdelim.empty()) {
-<a name="l00176"></a>00176           std::string::size_type m = s.find(cdelim);
-<a name="l00177"></a>00177           <span class="keywordflow">if</span> (m != std::string::npos) {
-<a name="l00178"></a>00178             eol = <span class="stringliteral">" "</span> + s.substr(m) + <span class="stringliteral">"\n"</span>;
-<a name="l00179"></a>00179             s = s.substr(0, m);
-<a name="l00180"></a>00180           }
-<a name="l00181"></a>00181         }
-<a name="l00182"></a>00182         std::istringstream str(s);
-<a name="l00183"></a>00183         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, lon, x, y;
-<a name="l00184"></a>00184         std::string stra, strb;
-<a name="l00185"></a>00185         <span class="keywordflow">if</span> (!(str >> stra >> strb))
-<a name="l00186"></a>00186           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Incomplete input: "</span> + s);
-<a name="l00187"></a>00187         <span class="keywordflow">if</span> (reverse) {
-<a name="l00188"></a>00188           x = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(stra);
-<a name="l00189"></a>00189           y = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<real>(strb);
-<a name="l00190"></a>00190         } <span class="keywordflow">else</span>
-<a name="l00191"></a>00191           <a class="code" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DMS::DecodeLatLon</a>(stra, strb, lat, lon);
-<a name="l00192"></a>00192         std::string strc;
-<a name="l00193"></a>00193         <span class="keywordflow">if</span> (str >> strc)
-<a name="l00194"></a>00194           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extraneous input: "</span> + strc);
-<a name="l00195"></a>00195         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> gamma, k;
-<a name="l00196"></a>00196         <span class="keywordflow">if</span> (reverse) {
-<a name="l00197"></a>00197           <span class="keywordflow">if</span> (series)
-<a name="l00198"></a>00198             TMS.Reverse(lon0, x, y, lat, lon, gamma, k);
-<a name="l00199"></a>00199           <span class="keywordflow">else</span>
-<a name="l00200"></a>00200             TME.Reverse(lon0, x, y, lat, lon, gamma, k);
-<a name="l00201"></a>00201           *output << Utility::str<real>(lat, 15) << <span class="stringliteral">" "</span>
-<a name="l00202"></a>00202                   << Utility::str<real>(lon, 15) << <span class="stringliteral">" "</span>
-<a name="l00203"></a>00203                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(gamma, 16) << <span class="stringliteral">" "</span>
-<a name="l00204"></a>00204                   << Utility::str<real>(k, 16) << eol;
-<a name="l00205"></a>00205         } <span class="keywordflow">else</span> {
-<a name="l00206"></a>00206           <span class="keywordflow">if</span> (series)
-<a name="l00207"></a>00207             TMS.Forward(lon0, lat, lon, x, y, gamma, k);
-<a name="l00208"></a>00208           <span class="keywordflow">else</span>
-<a name="l00209"></a>00209             TME.Forward(lon0, lat, lon, x, y, gamma, k);
-<a name="l00210"></a>00210           *output << Utility::str<real>(x, 10) << <span class="stringliteral">" "</span>
-<a name="l00211"></a>00211                   << Utility::str<real>(y, 10) << <span class="stringliteral">" "</span>
-<a name="l00212"></a>00212                   << <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::str<real>(gamma, 16) << <span class="stringliteral">" "</span>
-<a name="l00213"></a>00213                   << Utility::str<real>(k, 16) << eol;
-<a name="l00214"></a>00214         }
-<a name="l00215"></a>00215       }
-<a name="l00216"></a>00216       <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00217"></a>00217         *output << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00218"></a>00218         retval = 1;
-<a name="l00219"></a>00219       }
-<a name="l00220"></a>00220     }
-<a name="l00221"></a>00221     <span class="keywordflow">return</span> retval;
-<a name="l00222"></a>00222   }
-<a name="l00223"></a>00223   <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
-<a name="l00224"></a>00224     std::cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-<a name="l00225"></a>00225     <span class="keywordflow">return</span> 1;
-<a name="l00226"></a>00226   }
-<a name="l00227"></a>00227   <span class="keywordflow">catch</span> (...) {
-<a name="l00228"></a>00228     std::cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-<a name="l00229"></a>00229     <span class="keywordflow">return</span> 1;
-<a name="l00230"></a>00230   }
-<a name="l00231"></a>00231 }
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercator_8cpp.html b/doc/html/TransverseMercator_8cpp.html
deleted file mode 100644
index e51df6c..0000000
--- a/doc/html/TransverseMercator_8cpp.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercator.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">TransverseMercator.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="TransverseMercator_8hpp_source.html">GeographicLib/TransverseMercator.hpp</a>></code><br/>
-</div>
-<p><a href="TransverseMercator_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercator_8cpp.html#ab09ba83d5531a4ca91dc8ce82ae98084">GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP</a>   "$Id: 7b5a1854a015da061b8fdad0a4b35be7e06fcb9a $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a></p>
-<p>This implementation follows closely <a href="http://www.jhs-suositukset.fi/suomi/jhs154">JHS 154, ETRS89 - järjestelmään liittyvät karttaprojektiot, tasokoordinaatistot ja karttalehtijako</a> (Map projections, plane coordinates, and map sheet index for ETRS89), published by JUHTA, Finnish Geodetic Institute, and the National Land Survey of Finland (2006).</p>
-<p>The relevant section is available as the 2008 PDF file <a href="http://docs.jhs-suositukset.fi/jhs-suositukset/JHS154/JHS154_liite1.pdf">http://docs.jhs-suositukset.fi/jhs-suositukset/JHS154/JHS154_liite1.pdf</a></p>
-<p>This is a straight transcription of the formulas in this paper with the following exceptions:</p>
-<ul>
-<li>use of 6th order series instead of 4th order series. This reduces the error to about 5nm for the UTM range of coordinates (instead of 200nm), with a speed penalty of only 1%;</li>
-<li>use Newton's method instead of plain iteration to solve for latitude in terms of isometric latitude in the Reverse method;</li>
-<li>use of Horner's representation for evaluating polynomials and Clenshaw's method for summing trigonometric series;</li>
-<li>several modifications of the formulas to improve the numerical accuracy;</li>
-<li>evaluating the convergence and scale using the expression for the projection or its inverse.</li>
-</ul>
-<p>If the preprocessor variable TM_TX_MAXPOW is set to an integer between 4 and 8, then this specifies the order of the series used for the forward and reverse transformations. The default value is 6. (The series accurate to 12th order is given in <a class="el" href="transversemercator.html#tmseries">Series approximation for transverse Mercator</a>.)</p>
-<p>Other equivalent implementations are given in</p>
-<ul>
-<li><a href="http://www.ign.fr/DISPLAY/000/526/702/5267021/NTG_76.pdf">http://www.ign.fr/DISPLAY/000/526/702/5267021/NTG_76.pdf</a></li>
-<li><a href="http://www.lantmateriet.se/upload/filer/kartor/geodesi_gps_och_detaljmatning/geodesi/Formelsamling/Gauss_Conformal_Projection.pdf">http://www.lantmateriet.se/upload/filer/kartor/geodesi_gps_och_detaljmatning/geodesi/Formelsamling/Gauss_Conformal_Projection.pdf</a> </li>
-</ul>
-
-<p>Definition in file <a class="el" href="TransverseMercator_8cpp_source.html">TransverseMercator.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ab09ba83d5531a4ca91dc8ce82ae98084"></a><!-- doxytag: member="TransverseMercator.cpp::GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP" ref="ab09ba83d5531a4ca91dc8ce82ae98084" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP   "$Id: 7b5a1854a015da061b8fdad0a4b35be7e06fcb9a $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="TransverseMercator_8cpp_source.html#l00044">44</a> of file <a class="el" href="TransverseMercator_8cpp_source.html">TransverseMercator.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercator_8cpp_source.html b/doc/html/TransverseMercator_8cpp_source.html
deleted file mode 100644
index 737aeef..0000000
--- a/doc/html/TransverseMercator_8cpp_source.html
+++ /dev/null
@@ -1,577 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercator.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">TransverseMercator.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="TransverseMercator_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file TransverseMercator.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::TransverseMercator class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * This implementation follows closely</span>
-<a name="l00010"></a>00010 <span class="comment"> * <a href="http://www.jhs-suositukset.fi/suomi/jhs154"> JHS 154, ETRS89 -</span>
-<a name="l00011"></a>00011 <span class="comment"> * j&auml;rjestelm&auml;&auml;n liittyv&auml;t karttaprojektiot,</span>
-<a name="l00012"></a>00012 <span class="comment"> * tasokoordinaatistot ja karttalehtijako</a> (Map projections, plane</span>
-<a name="l00013"></a>00013 <span class="comment"> * coordinates, and map sheet index for ETRS89), published by JUHTA, Finnish</span>
-<a name="l00014"></a>00014 <span class="comment"> * Geodetic Institute, and the National Land Survey of Finland (2006).</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * The relevant section is available as the 2008 PDF file</span>
-<a name="l00017"></a>00017 <span class="comment"> * http://docs.jhs-suositukset.fi/jhs-suositukset/JHS154/JHS154_liite1.pdf</span>
-<a name="l00018"></a>00018 <span class="comment"> *</span>
-<a name="l00019"></a>00019 <span class="comment"> * This is a straight transcription of the formulas in this paper with the</span>
-<a name="l00020"></a>00020 <span class="comment"> * following exceptions:</span>
-<a name="l00021"></a>00021 <span class="comment"> *  - use of 6th order series instead of 4th order series.  This reduces the</span>
-<a name="l00022"></a>00022 <span class="comment"> *    error to about 5nm for the UTM range of coordinates (instead of 200nm),</span>
-<a name="l00023"></a>00023 <span class="comment"> *    with a speed penalty of only 1%;</span>
-<a name="l00024"></a>00024 <span class="comment"> *  - use Newton's method instead of plain iteration to solve for latitude in</span>
-<a name="l00025"></a>00025 <span class="comment"> *    terms of isometric latitude in the Reverse method;</span>
-<a name="l00026"></a>00026 <span class="comment"> *  - use of Horner's representation for evaluating polynomials and Clenshaw's</span>
-<a name="l00027"></a>00027 <span class="comment"> *    method for summing trigonometric series;</span>
-<a name="l00028"></a>00028 <span class="comment"> *  - several modifications of the formulas to improve the numerical accuracy;</span>
-<a name="l00029"></a>00029 <span class="comment"> *  - evaluating the convergence and scale using the expression for the</span>
-<a name="l00030"></a>00030 <span class="comment"> *    projection or its inverse.</span>
-<a name="l00031"></a>00031 <span class="comment"> *</span>
-<a name="l00032"></a>00032 <span class="comment"> * If the preprocessor variable TM_TX_MAXPOW is set to an integer between 4 and</span>
-<a name="l00033"></a>00033 <span class="comment"> * 8, then this specifies the order of the series used for the forward and</span>
-<a name="l00034"></a>00034 <span class="comment"> * reverse transformations.  The default value is 6.  (The series accurate to</span>
-<a name="l00035"></a>00035 <span class="comment"> * 12th order is given in \ref tmseries.)</span>
-<a name="l00036"></a>00036 <span class="comment"> *</span>
-<a name="l00037"></a>00037 <span class="comment"> * Other equivalent implementations are given in</span>
-<a name="l00038"></a>00038 <span class="comment"> *  - http://www.ign.fr/DISPLAY/000/526/702/5267021/NTG_76.pdf</span>
-<a name="l00039"></a>00039 <span class="comment"> *  - http://www.lantmateriet.se/upload/filer/kartor/geodesi_gps_och_detaljmatning/geodesi/Formelsamling/Gauss_Conformal_Projection.pdf</span>
-<a name="l00040"></a>00040 <span class="comment"> **********************************************************************/</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <<a class="code" href="TransverseMercator_8hpp.html" title="Header for GeographicLib::TransverseMercator class.">GeographicLib/TransverseMercator.hpp</a>></span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a><a class="code" href="TransverseMercator_8cpp.html#ab09ba83d5531a4ca91dc8ce82ae98084">00044</a> <span class="preprocessor">#define GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP \</span>
-<a name="l00045"></a>00045 <span class="preprocessor">  "$Id: 7b5a1854a015da061b8fdad0a4b35be7e06fcb9a $"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="TransverseMercator_8cpp.html#ab09ba83d5531a4ca91dc8ce82ae98084">GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP</a>)
-<a name="l00048"></a>00048 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="TransverseMercator_8hpp.html#abbbe2faaff284db3183ddf3afcbf5623">GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP</a>)
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 namespace GeographicLib {
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052   <span class="keyword">using namespace </span>std;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> TransverseMercator::tol_ =
-<a name="l00055"></a>00055     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0.1)*sqrt(numeric_limits<real>::epsilon());
-<a name="l00056"></a>00056   <span class="comment">// Overflow value s.t. atan(overflow_) = pi/2</span>
-<a name="l00057"></a>00057   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> TransverseMercator::overflow_ =
-<a name="l00058"></a>00058     1 / Math::sq(numeric_limits<real>::epsilon());
-<a name="l00059"></a>00059 
-<a name="l00060"></a><a class="code" href="classGeographicLib_1_1TransverseMercator.html#a9a4074c9d0ea35f0ebfc9c9f73bd3183">00060</a>   TransverseMercator::TransverseMercator(real a, real f, real k0)
-<a name="l00061"></a>00061     : _a(a)
-<a name="l00062"></a>00062     , _f(f <= 1 ? f : 1/f)
-<a name="l00063"></a>00063     , _k0(k0)
-<a name="l00064"></a>00064     , _e2(_f * (2 - _f))
-<a name="l00065"></a>00065     , _e(sqrt(abs(_e2)))
-<a name="l00066"></a>00066     , _e2m(1 - _e2)
-<a name="l00067"></a>00067       <span class="comment">// _c = sqrt( pow(1 + _e, 1 + _e) * pow(1 - _e, 1 - _e) ) )</span>
-<a name="l00068"></a>00068       <span class="comment">// See, for example, Lee (1976), p 100.</span>
-<a name="l00069"></a>00069     , _c( sqrt(_e2m) * exp(eatanhe(real(1))) )
-<a name="l00070"></a>00070     , _n(_f / (2 - _f))
-<a name="l00071"></a>00071   {
-<a name="l00072"></a>00072     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_a) && _a > 0))
-<a name="l00073"></a>00073       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Major radius is not positive"</span>);
-<a name="l00074"></a>00074     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_f) && _f < 1))
-<a name="l00075"></a>00075       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Minor radius is not positive"</span>);
-<a name="l00076"></a>00076     <span class="keywordflow">if</span> (!(<a class="code" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">Math::isfinite</a>(_k0) && _k0 > 0))
-<a name="l00077"></a>00077       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Scale is not positive"</span>);
-<a name="l00078"></a>00078     <span class="comment">// If coefficents might overflow_ an int, convert them to double (and they</span>
-<a name="l00079"></a>00079     <span class="comment">// are all exactly representable as doubles).</span>
-<a name="l00080"></a>00080     real nx = <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(_n);
-<a name="l00081"></a>00081     <span class="keywordflow">switch</span> (maxpow_) {
-<a name="l00082"></a>00082     <span class="keywordflow">case</span> 4:
-<a name="l00083"></a>00083       _b1 = 1/(1+_n)*(nx*(nx+16)+64)/64;
-<a name="l00084"></a>00084       _alp[1] = _n*(_n*(_n*(164*_n+225)-480)+360)/720;
-<a name="l00085"></a>00085       _bet[1] = _n*(_n*((555-4*_n)*_n-960)+720)/1440;
-<a name="l00086"></a>00086       _alp[2] = nx*(_n*(557*_n-864)+390)/1440;
-<a name="l00087"></a>00087       _bet[2] = nx*((96-437*_n)*_n+30)/1440;
-<a name="l00088"></a>00088       nx *= _n;
-<a name="l00089"></a>00089       _alp[3] = (427-1236*_n)*nx/1680;
-<a name="l00090"></a>00090       _bet[3] = (119-148*_n)*nx/3360;
-<a name="l00091"></a>00091       nx *= _n;
-<a name="l00092"></a>00092       _alp[4] = 49561*nx/161280;
-<a name="l00093"></a>00093       _bet[4] = 4397*nx/161280;
-<a name="l00094"></a>00094       <span class="keywordflow">break</span>;
-<a name="l00095"></a>00095     <span class="keywordflow">case</span> 5:
-<a name="l00096"></a>00096       _b1 = 1/(1+_n)*(nx*(nx+16)+64)/64;
-<a name="l00097"></a>00097       _alp[1] = _n*(_n*(_n*((328-635*_n)*_n+450)-960)+720)/1440;
-<a name="l00098"></a>00098       _bet[1] = _n*(_n*(_n*((-3645*_n-64)*_n+8880)-15360)+11520)/23040;
-<a name="l00099"></a>00099       _alp[2] = nx*(_n*(_n*(4496*_n+3899)-6048)+2730)/10080;
-<a name="l00100"></a>00100       _bet[2] = nx*(_n*(_n*(4416*_n-3059)+672)+210)/10080;
-<a name="l00101"></a>00101       nx *= _n;
-<a name="l00102"></a>00102       _alp[3] = nx*(_n*(15061*_n-19776)+6832)/26880;
-<a name="l00103"></a>00103       _bet[3] = nx*((-627*_n-592)*_n+476)/13440;
-<a name="l00104"></a>00104       nx *= _n;
-<a name="l00105"></a>00105       _alp[4] = (49561-171840*_n)*nx/161280;
-<a name="l00106"></a>00106       _bet[4] = (4397-3520*_n)*nx/161280;
-<a name="l00107"></a>00107       nx *= _n;
-<a name="l00108"></a>00108       _alp[5] = 34729*nx/80640;
-<a name="l00109"></a>00109       _bet[5] = 4583*nx/161280;
-<a name="l00110"></a>00110       <span class="keywordflow">break</span>;
-<a name="l00111"></a>00111     <span class="keywordflow">case</span> 6:
-<a name="l00112"></a>00112       _b1 = 1/(1+_n)*(nx*(nx*(nx+4)+64)+256)/256;
-<a name="l00113"></a>00113       _alp[1] = _n*(_n*(_n*(_n*(_n*(31564*_n-66675)+34440)+47250)-100800)+
-<a name="l00114"></a>00114                     75600)/151200;
-<a name="l00115"></a>00115       _bet[1] = _n*(_n*(_n*(_n*(_n*(384796*_n-382725)-6720)+932400)-1612800)+
-<a name="l00116"></a>00116                     1209600)/2419200;
-<a name="l00117"></a>00117       _alp[2] = nx*(_n*(_n*((863232-1983433*_n)*_n+748608)-1161216)+524160)/
-<a name="l00118"></a>00118         1935360;
-<a name="l00119"></a>00119       _bet[2] = nx*(_n*(_n*((1695744-1118711*_n)*_n-1174656)+258048)+80640)/
-<a name="l00120"></a>00120         3870720;
-<a name="l00121"></a>00121       nx *= _n;
-<a name="l00122"></a>00122       _alp[3] = nx*(_n*(_n*(670412*_n+406647)-533952)+184464)/725760;
-<a name="l00123"></a>00123       _bet[3] = nx*(_n*(_n*(22276*_n-16929)-15984)+12852)/362880;
-<a name="l00124"></a>00124       nx *= _n;
-<a name="l00125"></a>00125       _alp[4] = nx*(_n*(6601661*_n-7732800)+2230245)/7257600;
-<a name="l00126"></a>00126       _bet[4] = nx*((-830251*_n-158400)*_n+197865)/7257600;
-<a name="l00127"></a>00127       nx *= _n;
-<a name="l00128"></a>00128       _alp[5] = (3438171-13675556*_n)*nx/7983360;
-<a name="l00129"></a>00129       _bet[5] = (453717-435388*_n)*nx/15966720;
-<a name="l00130"></a>00130       nx *= _n;
-<a name="l00131"></a>00131       _alp[6] = 212378941*nx/319334400;
-<a name="l00132"></a>00132       _bet[6] = 20648693*nx/638668800;
-<a name="l00133"></a>00133       <span class="keywordflow">break</span>;
-<a name="l00134"></a>00134     <span class="keywordflow">case</span> 7:
-<a name="l00135"></a>00135       _b1 = 1/(1+_n)*(nx*(nx*(nx+4)+64)+256)/256;
-<a name="l00136"></a>00136       _alp[1] = _n*(_n*(_n*(_n*(_n*(_n*(1804025*_n+2020096)-4267200)+2204160)+
-<a name="l00137"></a>00137                             3024000)-6451200)+4838400)/9676800;
-<a name="l00138"></a>00138       _bet[1] = _n*(_n*(_n*(_n*(_n*((6156736-5406467*_n)*_n-6123600)-107520)+
-<a name="l00139"></a>00139                             14918400)-25804800)+19353600)/38707200;
-<a name="l00140"></a>00140       _alp[2] = nx*(_n*(_n*(_n*(_n*(4626384*_n-9917165)+4316160)+3743040)-
-<a name="l00141"></a>00141                         5806080)+2620800)/9676800;
-<a name="l00142"></a>00142       _bet[2] = nx*(_n*(_n*(_n*(_n*(829456*_n-5593555)+8478720)-5873280)+
-<a name="l00143"></a>00143                         1290240)+403200)/19353600;
-<a name="l00144"></a>00144       nx *= _n;
-<a name="l00145"></a>00145       _alp[3] = nx*(_n*(_n*((26816480-67102379*_n)*_n+16265880)-21358080)+
-<a name="l00146"></a>00146                     7378560)/29030400;
-<a name="l00147"></a>00147       _bet[3] = nx*(_n*(_n*(_n*(9261899*_n+3564160)-2708640)-2557440)+
-<a name="l00148"></a>00148                     2056320)/58060800;
-<a name="l00149"></a>00149       nx *= _n;
-<a name="l00150"></a>00150       _alp[4] = nx*(_n*(_n*(155912000*_n+72618271)-85060800)+24532695)/
-<a name="l00151"></a>00151         79833600;
-<a name="l00152"></a>00152       _bet[4] = nx*(_n*(_n*(14928352*_n-9132761)-1742400)+2176515)/79833600;
-<a name="l00153"></a>00153       nx *= _n;
-<a name="l00154"></a>00154       _alp[5] = nx*(_n*(102508609*_n-109404448)+27505368)/63866880;
-<a name="l00155"></a>00155       _bet[5] = nx*((-8005831*_n-1741552)*_n+1814868)/63866880;
-<a name="l00156"></a>00156       nx *= _n;
-<a name="l00157"></a>00157       _alp[6] = (2760926233.0-12282192400.0*_n)*nx/4151347200.0;
-<a name="l00158"></a>00158       _bet[6] = (268433009-261810608*_n)*nx/8302694400.0;
-<a name="l00159"></a>00159       nx *= _n;
-<a name="l00160"></a>00160       _alp[7] = 1522256789.0*nx/1383782400.0;
-<a name="l00161"></a>00161       _bet[7] = 219941297*nx/5535129600.0;
-<a name="l00162"></a>00162       <span class="keywordflow">break</span>;
-<a name="l00163"></a>00163     <span class="keywordflow">case</span> 8:
-<a name="l00164"></a>00164       _b1 = 1/(1+_n)*(nx*(nx*(nx*(25*nx+64)+256)+4096)+16384)/16384;
-<a name="l00165"></a>00165       _alp[1] = _n*(_n*(_n*(_n*(_n*(_n*((37884525-75900428*_n)*_n+42422016)-
-<a name="l00166"></a>00166                                     89611200)+46287360)+63504000)-135475200)+
-<a name="l00167"></a>00167                     101606400)/203212800;
-<a name="l00168"></a>00168       _bet[1] = _n*(_n*(_n*(_n*(_n*(_n*(_n*(31777436*_n-37845269)+43097152)-
-<a name="l00169"></a>00169                                     42865200)-752640)+104428800)-180633600)+
-<a name="l00170"></a>00170                     135475200)/270950400;
-<a name="l00171"></a>00171       _alp[2] = nx*(_n*(_n*(_n*(_n*(_n*(148003883*_n+83274912)-178508970)+
-<a name="l00172"></a>00172                                 77690880)+67374720)-104509440)+47174400)/
-<a name="l00173"></a>00173         174182400;
-<a name="l00174"></a>00174       _bet[2] = nx*(_n*(_n*(_n*(_n*(_n*(24749483*_n+14930208)-100683990)+
-<a name="l00175"></a>00175                                 152616960)-105719040)+23224320)+7257600)/
-<a name="l00176"></a>00176         348364800;
-<a name="l00177"></a>00177       nx *= _n;
-<a name="l00178"></a>00178       _alp[3] = nx*(_n*(_n*(_n*(_n*(318729724*_n-738126169)+294981280)+
-<a name="l00179"></a>00179                             178924680)-234938880)+81164160)/319334400;
-<a name="l00180"></a>00180       _bet[3] = nx*(_n*(_n*(_n*((101880889-232468668*_n)*_n+39205760)-
-<a name="l00181"></a>00181                             29795040)-28131840)+22619520)/638668800;
-<a name="l00182"></a>00182       nx *= _n;
-<a name="l00183"></a>00183       _alp[4] = nx*(_n*(_n*((14967552000.0-40176129013.0*_n)*_n+6971354016.0)-
-<a name="l00184"></a>00184                         8165836800.0)+2355138720.0)/7664025600.0;
-<a name="l00185"></a>00185       _bet[4] = nx*(_n*(_n*(_n*(324154477*_n+1433121792.0)-876745056)-
-<a name="l00186"></a>00186                         167270400)+208945440)/7664025600.0;
-<a name="l00187"></a>00187       nx *= _n;
-<a name="l00188"></a>00188       _alp[5] = nx*(_n*(_n*(10421654396.0*_n+3997835751.0)-4266773472.0)+
-<a name="l00189"></a>00189                     1072709352.0)/2490808320.0;
-<a name="l00190"></a>00190       _bet[5] = nx*(_n*(_n*(457888660*_n-312227409)-67920528)+70779852)/
-<a name="l00191"></a>00191         2490808320.0;
-<a name="l00192"></a>00192       nx *= _n;
-<a name="l00193"></a>00193       _alp[6] = nx*(_n*(175214326799.0*_n-171950693600.0)+38652967262.0)/
-<a name="l00194"></a>00194         58118860800.0;
-<a name="l00195"></a>00195       _bet[6] = nx*((-19841813847.0*_n-3665348512.0)*_n+3758062126.0)/
-<a name="l00196"></a>00196         116237721600.0;
-<a name="l00197"></a>00197       nx *= _n;
-<a name="l00198"></a>00198       _alp[7] = (13700311101.0-67039739596.0*_n)*nx/12454041600.0;
-<a name="l00199"></a>00199       _bet[7] = (1979471673.0-1989295244.0*_n)*nx/49816166400.0;
-<a name="l00200"></a>00200       nx *= _n;
-<a name="l00201"></a>00201       _alp[8] = 1424729850961.0*nx/743921418240.0;
-<a name="l00202"></a>00202       _bet[8] = 191773887257.0*nx/3719607091200.0;
-<a name="l00203"></a>00203       <span class="keywordflow">break</span>;
-<a name="l00204"></a>00204     <span class="keywordflow">default</span>:
-<a name="l00205"></a>00205       <a class="code" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">STATIC_ASSERT</a>(maxpow_ >= 4 && maxpow_ <= 8, <span class="stringliteral">"Bad value of maxpow_"</span>);
-<a name="l00206"></a>00206     }
-<a name="l00207"></a>00207     <span class="comment">// _a1 is the equivalent radius for computing the circumference of</span>
-<a name="l00208"></a>00208     <span class="comment">// ellipse.</span>
-<a name="l00209"></a>00209     _a1 = _b1 * _a;
-<a name="l00210"></a>00210   }
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a>
-<a name="l00213"></a>00213   <a class="code" href="classGeographicLib_1_1TransverseMercator.html#aa25b52e35bc54c368e6c8b17e02b0542">TransverseMercator::UTM</a>(Constants::WGS84_a<real>(),
-<a name="l00214"></a>00214                           Constants::WGS84_f<real>(),
-<a name="l00215"></a>00215                           Constants::UTM_k0<real>());
-<a name="l00216"></a>00216 
-<a name="l00217"></a><a class="code" href="classGeographicLib_1_1TransverseMercator.html#a07d73a6d94e2434cbb937978d61a5ae7">00217</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1TransverseMercator.html#a07d73a6d94e2434cbb937978d61a5ae7">TransverseMercator::Forward</a>(real lon0, real lat, real lon,
-<a name="l00218"></a>00218                                    real& x, real& y, real& gamma, real& k)
-<a name="l00219"></a>00219     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00220"></a>00220     <span class="comment">// Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)</span>
-<a name="l00221"></a>00221     <span class="keywordflow">if</span> (lon - lon0 > 180)
-<a name="l00222"></a>00222       lon -= lon0 + 360;
-<a name="l00223"></a>00223     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lon - lon0 <= -180)
-<a name="l00224"></a>00224       lon -= lon0 - 360;
-<a name="l00225"></a>00225     <span class="keywordflow">else</span>
-<a name="l00226"></a>00226       lon -= lon0;
-<a name="l00227"></a>00227     <span class="comment">// Now lon in (-180, 180]</span>
-<a name="l00228"></a>00228     <span class="comment">// Explicitly enforce the parity</span>
-<a name="l00229"></a>00229     <span class="keywordtype">int</span>
-<a name="l00230"></a>00230       latsign = lat < 0 ? -1 : 1,
-<a name="l00231"></a>00231       lonsign = lon < 0 ? -1 : 1;
-<a name="l00232"></a>00232     lon *= lonsign;
-<a name="l00233"></a>00233     lat *= latsign;
-<a name="l00234"></a>00234     <span class="keywordtype">bool</span> backside = lon > 90;
-<a name="l00235"></a>00235     <span class="keywordflow">if</span> (backside) {
-<a name="l00236"></a>00236       <span class="keywordflow">if</span> (lat == 0)
-<a name="l00237"></a>00237         latsign = -1;
-<a name="l00238"></a>00238       lon = 180 - lon;
-<a name="l00239"></a>00239     }
-<a name="l00240"></a>00240     real
-<a name="l00241"></a>00241       phi = lat * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>(),
-<a name="l00242"></a>00242       lam = lon * Math::degree<real>();
-<a name="l00243"></a>00243     <span class="comment">// phi = latitude</span>
-<a name="l00244"></a>00244     <span class="comment">// phi' = conformal latitude</span>
-<a name="l00245"></a>00245     <span class="comment">// psi = isometric latitude</span>
-<a name="l00246"></a>00246     <span class="comment">// tau = tan(phi)</span>
-<a name="l00247"></a>00247     <span class="comment">// tau' = tan(phi')</span>
-<a name="l00248"></a>00248     <span class="comment">// [xi', eta'] = Gauss-Schreiber TM coordinates</span>
-<a name="l00249"></a>00249     <span class="comment">// [xi, eta] = Gauss-Krueger TM coordinates</span>
-<a name="l00250"></a>00250     <span class="comment">//</span>
-<a name="l00251"></a>00251     <span class="comment">// We use</span>
-<a name="l00252"></a>00252     <span class="comment">//   tan(phi') = sinh(psi)</span>
-<a name="l00253"></a>00253     <span class="comment">//   sin(phi') = tanh(psi)</span>
-<a name="l00254"></a>00254     <span class="comment">//   cos(phi') = sech(psi)</span>
-<a name="l00255"></a>00255     <span class="comment">//   denom^2    = 1-cos(phi')^2*sin(lam)^2 = 1-sech(psi)^2*sin(lam)^2</span>
-<a name="l00256"></a>00256     <span class="comment">//   sin(xip)   = sin(phi')/denom          = tanh(psi)/denom</span>
-<a name="l00257"></a>00257     <span class="comment">//   cos(xip)   = cos(phi')*cos(lam)/denom = sech(psi)*cos(lam)/denom</span>
-<a name="l00258"></a>00258     <span class="comment">//   cosh(etap) = 1/denom                  = 1/denom</span>
-<a name="l00259"></a>00259     <span class="comment">//   sinh(etap) = cos(phi')*sin(lam)/denom = sech(psi)*sin(lam)/denom</span>
-<a name="l00260"></a>00260     real etap, xip;
-<a name="l00261"></a>00261     <span class="keywordflow">if</span> (lat != 90) {
-<a name="l00262"></a>00262       real
-<a name="l00263"></a>00263         c = max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), cos(lam)), <span class="comment">// cos(pi/2) might be negative</span>
-<a name="l00264"></a>00264         tau = tan(phi),
-<a name="l00265"></a>00265         secphi = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), tau),
-<a name="l00266"></a>00266         sig = sinh( eatanhe(tau / secphi) ),
-<a name="l00267"></a>00267         taup = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), sig) * tau - sig * secphi;
-<a name="l00268"></a>00268       xip = atan2(taup, c);
-<a name="l00269"></a>00269       <span class="comment">// Used to be</span>
-<a name="l00270"></a>00270       <span class="comment">//   etap = Math::atanh(sin(lam) / cosh(psi));</span>
-<a name="l00271"></a>00271       etap = <a class="code" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">Math::asinh</a>(sin(lam) / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(taup, c));
-<a name="l00272"></a>00272       <span class="comment">// convergence and scale for Gauss-Schreiber TM (xip, etap) -- gamma0 =</span>
-<a name="l00273"></a>00273       <span class="comment">// atan(tan(xip) * tanh(etap)) = atan(tan(lam) * sin(phi'));</span>
-<a name="l00274"></a>00274       <span class="comment">// sin(phi') = tau'/sqrt(1 + tau'^2)</span>
-<a name="l00275"></a>00275       gamma = atan(tanx(lam) *
-<a name="l00276"></a>00276                    taup / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), taup)); <span class="comment">// Krueger p 22 (44)</span>
-<a name="l00277"></a>00277       <span class="comment">// k0 = sqrt(1 - _e2 * sin(phi)^2) * (cos(phi') / cos(phi)) * cosh(etap)</span>
-<a name="l00278"></a>00278       <span class="comment">// Note 1/cos(phi) = cosh(psip);</span>
-<a name="l00279"></a>00279       <span class="comment">// and cos(phi') * cosh(etap) = 1/hypot(sinh(psi), cos(lam))</span>
-<a name="l00280"></a>00280       <span class="comment">//</span>
-<a name="l00281"></a>00281       <span class="comment">// This form has cancelling errors.  This property is lost if cosh(psip)</span>
-<a name="l00282"></a>00282       <span class="comment">// is replaced by 1/cos(phi), even though it's using "primary" data (phi</span>
-<a name="l00283"></a>00283       <span class="comment">// instead of psip).</span>
-<a name="l00284"></a>00284       k = sqrt(_e2m + _e2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cos(phi))) * secphi / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(taup, c);
-<a name="l00285"></a>00285     } <span class="keywordflow">else</span> {
-<a name="l00286"></a>00286       xip = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::pi<real>()/2;
-<a name="l00287"></a>00287       etap = 0;
-<a name="l00288"></a>00288       gamma = lam;
-<a name="l00289"></a>00289       k = _c;
-<a name="l00290"></a>00290     }
-<a name="l00291"></a>00291     <span class="comment">// {xi',eta'} is {northing,easting} for Gauss-Schreiber transverse Mercator</span>
-<a name="l00292"></a>00292     <span class="comment">// (for eta' = 0, xi' = bet). {xi,eta} is {northing,easting} for transverse</span>
-<a name="l00293"></a>00293     <span class="comment">// Mercator with constant scale on the central meridian (for eta = 0, xip =</span>
-<a name="l00294"></a>00294     <span class="comment">// rectifying latitude).  Define</span>
-<a name="l00295"></a>00295     <span class="comment">//</span>
-<a name="l00296"></a>00296     <span class="comment">//   zeta = xi + i*eta</span>
-<a name="l00297"></a>00297     <span class="comment">//   zeta' = xi' + i*eta'</span>
-<a name="l00298"></a>00298     <span class="comment">//</span>
-<a name="l00299"></a>00299     <span class="comment">// The conversion from conformal to rectifying latitude can be expresses as</span>
-<a name="l00300"></a>00300     <span class="comment">// a series in _n:</span>
-<a name="l00301"></a>00301     <span class="comment">//</span>
-<a name="l00302"></a>00302     <span class="comment">//   zeta = zeta' + sum(h[j-1]' * sin(2 * j * zeta'), j = 1..maxpow_)</span>
-<a name="l00303"></a>00303     <span class="comment">//</span>
-<a name="l00304"></a>00304     <span class="comment">// where h[j]' = O(_n^j).  The reversion of this series gives</span>
-<a name="l00305"></a>00305     <span class="comment">//</span>
-<a name="l00306"></a>00306     <span class="comment">//   zeta' = zeta - sum(h[j-1] * sin(2 * j * zeta), j = 1..maxpow_)</span>
-<a name="l00307"></a>00307     <span class="comment">//</span>
-<a name="l00308"></a>00308     <span class="comment">// which is used in Reverse.</span>
-<a name="l00309"></a>00309     <span class="comment">//</span>
-<a name="l00310"></a>00310     <span class="comment">// Evaluate sums via Clenshaw method.  See</span>
-<a name="l00311"></a>00311     <span class="comment">//    http://mathworld.wolfram.com/ClenshawRecurrenceFormula.html</span>
-<a name="l00312"></a>00312     <span class="comment">//</span>
-<a name="l00313"></a>00313     <span class="comment">// Let</span>
-<a name="l00314"></a>00314     <span class="comment">//</span>
-<a name="l00315"></a>00315     <span class="comment">//    S = sum(c[k] * F[k](x), k = 0..N)</span>
-<a name="l00316"></a>00316     <span class="comment">//    F[n+1](x) = alpha(n,x) * F[n](x) + beta(n,x) * F[n-1](x)</span>
-<a name="l00317"></a>00317     <span class="comment">//</span>
-<a name="l00318"></a>00318     <span class="comment">// Evaluate S with</span>
-<a name="l00319"></a>00319     <span class="comment">//</span>
-<a name="l00320"></a>00320     <span class="comment">//    y[N+2] = y[N+1] = 0</span>
-<a name="l00321"></a>00321     <span class="comment">//    y[k] = alpha(k,x) * y[k+1] + beta(k+1,x) * y[k+2] + c[k]</span>
-<a name="l00322"></a>00322     <span class="comment">//    S = c[0] * F[0](x) + y[1] * F[1](x) + beta(1,x) * F[0](x) * y[2]</span>
-<a name="l00323"></a>00323     <span class="comment">//</span>
-<a name="l00324"></a>00324     <span class="comment">// Here we have</span>
-<a name="l00325"></a>00325     <span class="comment">//</span>
-<a name="l00326"></a>00326     <span class="comment">//    x = 2 * zeta'</span>
-<a name="l00327"></a>00327     <span class="comment">//    F[n](x) = sin(n * x)</span>
-<a name="l00328"></a>00328     <span class="comment">//    a(n, x) = 2 * cos(x)</span>
-<a name="l00329"></a>00329     <span class="comment">//    b(n, x) = -1</span>
-<a name="l00330"></a>00330     <span class="comment">//    [ sin(A+B) - 2*cos(B)*sin(A) + sin(A-B) = 0, A = n*x, B = x ]</span>
-<a name="l00331"></a>00331     <span class="comment">//    N = maxpow_</span>
-<a name="l00332"></a>00332     <span class="comment">//    c[k] = _alp[k]</span>
-<a name="l00333"></a>00333     <span class="comment">//    S = y[1] * sin(x)</span>
-<a name="l00334"></a>00334     <span class="comment">//</span>
-<a name="l00335"></a>00335     <span class="comment">// For the derivative we have</span>
-<a name="l00336"></a>00336     <span class="comment">//</span>
-<a name="l00337"></a>00337     <span class="comment">//    x = 2 * zeta'</span>
-<a name="l00338"></a>00338     <span class="comment">//    F[n](x) = cos(n * x)</span>
-<a name="l00339"></a>00339     <span class="comment">//    a(n, x) = 2 * cos(x)</span>
-<a name="l00340"></a>00340     <span class="comment">//    b(n, x) = -1</span>
-<a name="l00341"></a>00341     <span class="comment">//    [ cos(A+B) - 2*cos(B)*cos(A) + cos(A-B) = 0, A = n*x, B = x ]</span>
-<a name="l00342"></a>00342     <span class="comment">//    c[0] = 1; c[k] = 2*k*_alp[k]</span>
-<a name="l00343"></a>00343     <span class="comment">//    S = (c[0] - y[2]) + y[1] * cos(x)</span>
-<a name="l00344"></a>00344     real
-<a name="l00345"></a>00345       c0 = cos(2 * xip), ch0 = cosh(2 * etap),
-<a name="l00346"></a>00346       s0 = sin(2 * xip), sh0 = sinh(2 * etap),
-<a name="l00347"></a>00347       ar = 2 * c0 * ch0, ai = -2 * s0 * sh0; <span class="comment">// 2 * cos(2*zeta')</span>
-<a name="l00348"></a>00348     <span class="keywordtype">int</span> n = maxpow_;
-<a name="l00349"></a>00349     real
-<a name="l00350"></a>00350       xi0 = (n & 1 ? _alp[n] : 0), eta0 = 0,
-<a name="l00351"></a>00351       xi1 = 0, eta1 = 0;
-<a name="l00352"></a>00352     real                        <span class="comment">// Accumulators for dzeta/dzeta'</span>
-<a name="l00353"></a>00353       yr0 = (n & 1 ? 2 * maxpow_ * _alp[n--] : 0), yi0 = 0,
-<a name="l00354"></a>00354       yr1 = 0, yi1 = 0;
-<a name="l00355"></a>00355     <span class="keywordflow">while</span> (n) {
-<a name="l00356"></a>00356       xi1  = ar * xi0 - ai * eta0 - xi1 + _alp[n];
-<a name="l00357"></a>00357       eta1 = ai * xi0 + ar * eta0 - eta1;
-<a name="l00358"></a>00358       yr1 = ar * yr0 - ai * yi0 - yr1 + 2 * n * _alp[n];
-<a name="l00359"></a>00359       yi1 = ai * yr0 + ar * yi0 - yi1;
-<a name="l00360"></a>00360       --n;
-<a name="l00361"></a>00361       xi0  = ar * xi1 - ai * eta1 - xi0 + _alp[n];
-<a name="l00362"></a>00362       eta0 = ai * xi1 + ar * eta1 - eta0;
-<a name="l00363"></a>00363       yr0 = ar * yr1 - ai * yi1 - yr0 + 2 * n * _alp[n];
-<a name="l00364"></a>00364       yi0 = ai * yr1 + ar * yi1 - yi0;
-<a name="l00365"></a>00365       --n;
-<a name="l00366"></a>00366     }
-<a name="l00367"></a>00367     ar /= 2; ai /= 2;           <span class="comment">// cos(2*zeta')</span>
-<a name="l00368"></a>00368     yr1 = 1 - yr1 + ar * yr0 - ai * yi0;
-<a name="l00369"></a>00369     yi1 =   - yi1 + ai * yr0 + ar * yi0;
-<a name="l00370"></a>00370     ar = s0 * ch0; ai = c0 * sh0; <span class="comment">// sin(2*zeta')</span>
-<a name="l00371"></a>00371     real
-<a name="l00372"></a>00372       xi  = xip  + ar * xi0 - ai * eta0,
-<a name="l00373"></a>00373       eta = etap + ai * xi0 + ar * eta0;
-<a name="l00374"></a>00374     <span class="comment">// Fold in change in convergence and scale for Gauss-Schreiber TM to</span>
-<a name="l00375"></a>00375     <span class="comment">// Gauss-Krueger TM.</span>
-<a name="l00376"></a>00376     gamma -= atan2(yi1, yr1);
-<a name="l00377"></a>00377     k *= _b1 * <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(yr1, yi1);
-<a name="l00378"></a>00378     gamma /= <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00379"></a>00379     y = _a1 * _k0 * (backside ? <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::pi<real>() - xi : xi) * latsign;
-<a name="l00380"></a>00380     x = _a1 * _k0 * eta * lonsign;
-<a name="l00381"></a>00381     <span class="keywordflow">if</span> (backside)
-<a name="l00382"></a>00382       gamma = 180 - gamma;
-<a name="l00383"></a>00383     gamma *= latsign * lonsign;
-<a name="l00384"></a>00384     k *= _k0;
-<a name="l00385"></a>00385   }
-<a name="l00386"></a>00386 
-<a name="l00387"></a><a class="code" href="classGeographicLib_1_1TransverseMercator.html#a15611aee4e3707e155278bab02403a07">00387</a>   <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1TransverseMercator.html#a15611aee4e3707e155278bab02403a07">TransverseMercator::Reverse</a>(real lon0, real x, real y,
-<a name="l00388"></a>00388                                    real& lat, real& lon, real& gamma, real& k)
-<a name="l00389"></a>00389     <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00390"></a>00390     <span class="comment">// This undoes the steps in Forward.  The wrinkles are: (1) Use of the</span>
-<a name="l00391"></a>00391     <span class="comment">// reverted series to express zeta' in terms of zeta. (2) Newton's method</span>
-<a name="l00392"></a>00392     <span class="comment">// to solve for phi in terms of tan(phi).</span>
-<a name="l00393"></a>00393     real
-<a name="l00394"></a>00394       xi = y / (_a1 * _k0),
-<a name="l00395"></a>00395       eta = x / (_a1 * _k0);
-<a name="l00396"></a>00396     <span class="comment">// Explicitly enforce the parity</span>
-<a name="l00397"></a>00397     <span class="keywordtype">int</span>
-<a name="l00398"></a>00398       xisign = xi < 0 ? -1 : 1,
-<a name="l00399"></a>00399       etasign = eta < 0 ? -1 : 1;
-<a name="l00400"></a>00400     xi *= xisign;
-<a name="l00401"></a>00401     eta *= etasign;
-<a name="l00402"></a>00402     <span class="keywordtype">bool</span> backside = xi > <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::pi<real>()/2;
-<a name="l00403"></a>00403     <span class="keywordflow">if</span> (backside)
-<a name="l00404"></a>00404       xi = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::pi<real>() - xi;
-<a name="l00405"></a>00405     real
-<a name="l00406"></a>00406       c0 = cos(2 * xi), ch0 = cosh(2 * eta),
-<a name="l00407"></a>00407       s0 = sin(2 * xi), sh0 = sinh(2 * eta),
-<a name="l00408"></a>00408       ar = 2 * c0 * ch0, ai = -2 * s0 * sh0; <span class="comment">// 2 * cos(2*zeta)</span>
-<a name="l00409"></a>00409     <span class="keywordtype">int</span> n = maxpow_;
-<a name="l00410"></a>00410     real                        <span class="comment">// Accumulators for zeta'</span>
-<a name="l00411"></a>00411       xip0 = (n & 1 ? -_bet[n] : 0), etap0 = 0,
-<a name="l00412"></a>00412       xip1 = 0, etap1 = 0;
-<a name="l00413"></a>00413     real                        <span class="comment">// Accumulators for dzeta'/dzeta</span>
-<a name="l00414"></a>00414       yr0 = (n & 1 ? - 2 * maxpow_ * _bet[n--] : 0), yi0 = 0,
-<a name="l00415"></a>00415       yr1 = 0, yi1 = 0;
-<a name="l00416"></a>00416     <span class="keywordflow">while</span> (n) {
-<a name="l00417"></a>00417       xip1  = ar * xip0 - ai * etap0 - xip1 - _bet[n];
-<a name="l00418"></a>00418       etap1 = ai * xip0 + ar * etap0 - etap1;
-<a name="l00419"></a>00419       yr1 = ar * yr0 - ai * yi0 - yr1 - 2 * n * _bet[n];
-<a name="l00420"></a>00420       yi1 = ai * yr0 + ar * yi0 - yi1;
-<a name="l00421"></a>00421       --n;
-<a name="l00422"></a>00422       xip0  = ar * xip1 - ai * etap1 - xip0 - _bet[n];
-<a name="l00423"></a>00423       etap0 = ai * xip1 + ar * etap1 - etap0;
-<a name="l00424"></a>00424       yr0 = ar * yr1 - ai * yi1 - yr0 - 2 * n * _bet[n];
-<a name="l00425"></a>00425       yi0 = ai * yr1 + ar * yi1 - yi0;
-<a name="l00426"></a>00426       --n;
-<a name="l00427"></a>00427     }
-<a name="l00428"></a>00428     ar /= 2; ai /= 2;           <span class="comment">// cos(2*zeta')</span>
-<a name="l00429"></a>00429     yr1 = 1 - yr1 + ar * yr0 - ai * yi0;
-<a name="l00430"></a>00430     yi1 =   - yi1 + ai * yr0 + ar * yi0;
-<a name="l00431"></a>00431     ar = s0 * ch0; ai = c0 * sh0; <span class="comment">// sin(2*zeta)</span>
-<a name="l00432"></a>00432     real
-<a name="l00433"></a>00433       xip  = xi  + ar * xip0 - ai * etap0,
-<a name="l00434"></a>00434       etap = eta + ai * xip0 + ar * etap0;
-<a name="l00435"></a>00435     <span class="comment">// Convergence and scale for Gauss-Schreiber TM to Gauss-Krueger TM.</span>
-<a name="l00436"></a>00436     gamma = atan2(yi1, yr1);
-<a name="l00437"></a>00437     k = _b1 / <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(yr1, yi1);
-<a name="l00438"></a>00438     <span class="comment">// JHS 154 has</span>
-<a name="l00439"></a>00439     <span class="comment">//</span>
-<a name="l00440"></a>00440     <span class="comment">//   phi' = asin(sin(xi') / cosh(eta')) (Krueger p 17 (25))</span>
-<a name="l00441"></a>00441     <span class="comment">//   lam = asin(tanh(eta') / cos(phi')</span>
-<a name="l00442"></a>00442     <span class="comment">//   psi = asinh(tan(phi'))</span>
-<a name="l00443"></a>00443     real lam, phi;
-<a name="l00444"></a>00444     real
-<a name="l00445"></a>00445       s = sinh(etap),
-<a name="l00446"></a>00446       c = max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(0), cos(xip)), <span class="comment">// cos(pi/2) might be negative</span>
-<a name="l00447"></a>00447       r = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(s, c);
-<a name="l00448"></a>00448     <span class="keywordflow">if</span> (r != 0) {
-<a name="l00449"></a>00449       lam = atan2(s, c);        <span class="comment">// Krueger p 17 (25)</span>
-<a name="l00450"></a>00450       <span class="comment">// Use Newton's method to solve for tau</span>
-<a name="l00451"></a>00451       real
-<a name="l00452"></a>00452         taup = sin(xip)/r,
-<a name="l00453"></a>00453         <span class="comment">// To lowest order in e^2, taup = (1 - e^2) * tau = _e2m * tau; so use</span>
-<a name="l00454"></a>00454         <span class="comment">// tau = taup/_e2m as a starting guess.  Only 1 iteration is needed for</span>
-<a name="l00455"></a>00455         <span class="comment">// |lat| < 3.35 deg, otherwise 2 iterations are needed.  If, instead,</span>
-<a name="l00456"></a>00456         <span class="comment">// tau = taup is used the mean number of iterations increases to 1.99</span>
-<a name="l00457"></a>00457         <span class="comment">// (2 iterations are needed except near tau = 0).</span>
-<a name="l00458"></a>00458         tau = taup/_e2m,
-<a name="l00459"></a>00459         stol = tol_ * max(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), abs(taup));
-<a name="l00460"></a>00460       <span class="comment">// min iterations = 1, max iterations = 2; mean = 1.94</span>
-<a name="l00461"></a>00461       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < numit_; ++i) {
-<a name="l00462"></a>00462         real
-<a name="l00463"></a>00463           tau1 = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), tau),
-<a name="l00464"></a>00464           sig = sinh( eatanhe( tau / tau1 ) ),
-<a name="l00465"></a>00465           taupa = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), sig) * tau - sig * tau1,
-<a name="l00466"></a>00466           dtau = (taup - taupa) * (1 + _e2m * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(tau)) /
-<a name="l00467"></a>00467           ( _e2m * tau1 * <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), taupa) );
-<a name="l00468"></a>00468         tau += dtau;
-<a name="l00469"></a>00469         <span class="keywordflow">if</span> (!(abs(dtau) >= stol))
-<a name="l00470"></a>00470           <span class="keywordflow">break</span>;
-<a name="l00471"></a>00471       }
-<a name="l00472"></a>00472       phi = atan(tau);
-<a name="l00473"></a>00473       gamma += atan(tanx(xip) * tanh(etap)); <span class="comment">// Krueger p 19 (31)</span>
-<a name="l00474"></a>00474       <span class="comment">// Note cos(phi') * cosh(eta') = r</span>
-<a name="l00475"></a>00475       k *= sqrt(_e2m + _e2 * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(cos(phi))) *
-<a name="l00476"></a>00476         <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(1), tau) * r;
-<a name="l00477"></a>00477     } <span class="keywordflow">else</span> {
-<a name="l00478"></a>00478       phi = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::pi<real>()/2;
-<a name="l00479"></a>00479       lam = 0;
-<a name="l00480"></a>00480       k *= _c;
-<a name="l00481"></a>00481     }
-<a name="l00482"></a>00482     lat = phi / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>() * xisign;
-<a name="l00483"></a>00483     lon = lam / <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00484"></a>00484     <span class="keywordflow">if</span> (backside)
-<a name="l00485"></a>00485       lon = 180 - lon;
-<a name="l00486"></a>00486     lon *= etasign;
-<a name="l00487"></a>00487     <span class="comment">// Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)</span>
-<a name="l00488"></a>00488     <span class="keywordflow">if</span> (lon + lon0 >= 180)
-<a name="l00489"></a>00489       lon += lon0 - 360;
-<a name="l00490"></a>00490     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lon + lon0 < -180)
-<a name="l00491"></a>00491       lon += lon0 + 360;
-<a name="l00492"></a>00492     <span class="keywordflow">else</span>
-<a name="l00493"></a>00493       lon += lon0;
-<a name="l00494"></a>00494     gamma /= <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::degree<real>();
-<a name="l00495"></a>00495     <span class="keywordflow">if</span> (backside)
-<a name="l00496"></a>00496       gamma = 180 - gamma;
-<a name="l00497"></a>00497     gamma *= xisign * etasign;
-<a name="l00498"></a>00498     k *= _k0;
-<a name="l00499"></a>00499   }
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercator_8hpp.html b/doc/html/TransverseMercator_8hpp.html
deleted file mode 100644
index af144ca..0000000
--- a/doc/html/TransverseMercator_8hpp.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercator.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">TransverseMercator.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="TransverseMercator_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Transverse Mercator Projection.  <a href="classGeographicLib_1_1TransverseMercator.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercator_8hpp.html#abbbe2faaff284db3183ddf3afcbf5623">GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP</a>   "$Id: 94bb078aa13d2d7392cee5498aae7df6e9914e4a $"</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercator_8hpp.html#a823820984cba9dabe0517925bf18c77b">TM_TX_MAXPOW</a>   (GEOGRAPHICLIB_PREC == 1 ? 6 : (GEOGRAPHICLIB_PREC == 0 ? 4 : 8))</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="abbbe2faaff284db3183ddf3afcbf5623"></a><!-- doxytag: member="TransverseMercator.hpp::GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP" ref="abbbe2faaff284db3183ddf3afcbf5623" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP   "$Id: 94bb078aa13d2d7392cee5498aae7df6e9914e4a $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="TransverseMercator_8hpp_source.html#l00011">11</a> of file <a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a823820984cba9dabe0517925bf18c77b"></a><!-- doxytag: member="TransverseMercator.hpp::TM_TX_MAXPOW" ref="a823820984cba9dabe0517925bf18c77b" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define TM_TX_MAXPOW   (GEOGRAPHICLIB_PREC == 1 ? 6 : (GEOGRAPHICLIB_PREC == 0 ? 4 : 8))</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The order of the series approximation used in TransverseMercator. TM_TX_MAXPOW can be set to any integer in [4, 8]. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8hpp_source.html#l00021">21</a> of file <a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/TransverseMercator_8hpp_source.html b/doc/html/TransverseMercator_8hpp_source.html
deleted file mode 100644
index de93497..0000000
--- a/doc/html/TransverseMercator_8hpp_source.html
+++ /dev/null
@@ -1,285 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: TransverseMercator.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">TransverseMercator.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="TransverseMercator_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file TransverseMercator.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::TransverseMercator class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP)</span>
-<a name="l00011"></a><a class="code" href="TransverseMercator_8hpp.html#abbbe2faaff284db3183ddf3afcbf5623">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 94bb078aa13d2d7392cee5498aae7df6e9914e4a $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 
-<a name="l00016"></a>00016 <span class="preprocessor">#if !defined(TM_TX_MAXPOW)</span>
-<a name="l00017"></a>00017 <span class="preprocessor"></span><span class="comment">/**</span>
-<a name="l00018"></a>00018 <span class="comment"> * The order of the series approximation used in TransverseMercator.</span>
-<a name="l00019"></a>00019 <span class="comment"> * TM_TX_MAXPOW can be set to any integer in [4, 8].</span>
-<a name="l00020"></a>00020 <span class="comment"> **********************************************************************/</span>
-<a name="l00021"></a><a class="code" href="TransverseMercator_8hpp.html#a823820984cba9dabe0517925bf18c77b">00021</a> <span class="preprocessor">#define TM_TX_MAXPOW \</span>
-<a name="l00022"></a>00022 <span class="preprocessor">  (GEOGRAPHICLIB_PREC == 1 ? 6 : (GEOGRAPHICLIB_PREC == 0 ? 4 : 8))</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span>
-<a name="l00025"></a>00025 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment">  /**</span>
-<a name="l00028"></a>00028 <span class="comment">   * \brief Transverse Mercator Projection</span>
-<a name="l00029"></a>00029 <span class="comment">   *</span>
-<a name="l00030"></a>00030 <span class="comment">   * This uses Kr&uuml;ger's method which evaluates the projection and its</span>
-<a name="l00031"></a>00031 <span class="comment">   * inverse in terms of a series.  See</span>
-<a name="l00032"></a>00032 <span class="comment">   *  - L. Kr&uuml;ger,</span>
-<a name="l00033"></a>00033 <span class="comment">   *    <a href="http://dx.doi.org/10.2312/GFZ.b103-krueger28"> Konforme</span>
-<a name="l00034"></a>00034 <span class="comment">   *    Abbildung des Erdellipsoids in der Ebene</a> (Conformal mapping of the</span>
-<a name="l00035"></a>00035 <span class="comment">   *    ellipsoidal earth to the plane), Royal Prussian Geodetic Institute, New</span>
-<a name="l00036"></a>00036 <span class="comment">   *    Series 52, 172 pp. (1912).</span>
-<a name="l00037"></a>00037 <span class="comment">   *  - C. F. F. Karney,</span>
-<a name="l00038"></a>00038 <span class="comment">   *    <a href="http://dx.doi.org/10.1007/s00190-011-0445-3"></span>
-<a name="l00039"></a>00039 <span class="comment">   *    Transverse Mercator with an accuracy of a few nanometers,</a></span>
-<a name="l00040"></a>00040 <span class="comment">   *    J. Geodesy 85(8), 475-485 (Aug. 2011);</span>
-<a name="l00041"></a>00041 <span class="comment">   *    preprint</span>
-<a name="l00042"></a>00042 <span class="comment">   *    <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.</span>
-<a name="l00043"></a>00043 <span class="comment">   *</span>
-<a name="l00044"></a>00044 <span class="comment">   * Kr&uuml;ger's method has been extended from 4th to 6th order.  The maximum</span>
-<a name="l00045"></a>00045 <span class="comment">   * error is 5 nm (5 nanometers), ground distance, for all positions within 35</span>
-<a name="l00046"></a>00046 <span class="comment">   * degrees of the central meridian.  The error in the convergence is</span>
-<a name="l00047"></a>00047 <span class="comment">   * 2e-15&quot; and the relative error in the scale is 6e-12%%.  See Sec. 4 of</span>
-<a name="l00048"></a>00048 <span class="comment">   * <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for details.</span>
-<a name="l00049"></a>00049 <span class="comment">   * The speed penalty in going to 6th order is only about 1%.</span>
-<a name="l00050"></a>00050 <span class="comment">   * TransverseMercatorExact is an alternative implementation of the projection</span>
-<a name="l00051"></a>00051 <span class="comment">   * using exact formulas which yield accurate (to 8 nm) results over the</span>
-<a name="l00052"></a>00052 <span class="comment">   * entire ellipsoid.</span>
-<a name="l00053"></a>00053 <span class="comment">   *</span>
-<a name="l00054"></a>00054 <span class="comment">   * The ellipsoid parameters and the central scale are set in the constructor.</span>
-<a name="l00055"></a>00055 <span class="comment">   * The central meridian (which is a trivial shift of the longitude) is</span>
-<a name="l00056"></a>00056 <span class="comment">   * specified as the \e lon0 argument of the TransverseMercator::Forward and</span>
-<a name="l00057"></a>00057 <span class="comment">   * TransverseMercator::Reverse functions.  The latitude of origin is taken to</span>
-<a name="l00058"></a>00058 <span class="comment">   * be the equator.  There is no provision in this class for specifying a</span>
-<a name="l00059"></a>00059 <span class="comment">   * false easting or false northing or a different latitude of origin.</span>
-<a name="l00060"></a>00060 <span class="comment">   * However these are can be simply included by the calling function.  For</span>
-<a name="l00061"></a>00061 <span class="comment">   * example, the UTMUPS class applies the false easting and false northing for</span>
-<a name="l00062"></a>00062 <span class="comment">   * the UTM projections.  A more complicated example is the British National</span>
-<a name="l00063"></a>00063 <span class="comment">   * Grid (<a href="http://www.spatialreference.org/ref/epsg/7405/"></span>
-<a name="l00064"></a>00064 <span class="comment">   * EPSG:7405</a>) which requires the use of a latitude of origin.  This is</span>
-<a name="l00065"></a>00065 <span class="comment">   * implemented by the GeographicLib::OSGB class.</span>
-<a name="l00066"></a>00066 <span class="comment">   *</span>
-<a name="l00067"></a>00067 <span class="comment">   * See TransverseMercator.cpp for more information on the implementation.</span>
-<a name="l00068"></a>00068 <span class="comment">   *</span>
-<a name="l00069"></a>00069 <span class="comment">   * See \ref transversemercator for a discussion of this projection.</span>
-<a name="l00070"></a>00070 <span class="comment">   *</span>
-<a name="l00071"></a>00071 <span class="comment">   * Example of use:</span>
-<a name="l00072"></a>00072 <span class="comment">   * \include example-TransverseMercator.cpp</span>
-<a name="l00073"></a>00073 <span class="comment">   *</span>
-<a name="l00074"></a>00074 <span class="comment">   * <a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a> is a</span>
-<a name="l00075"></a>00075 <span class="comment">   * command-line utility providing access to the functionality of</span>
-<a name="l00076"></a>00076 <span class="comment">   * TransverseMercator and TransverseMercatorExact.</span>
-<a name="l00077"></a>00077 <span class="comment">   **********************************************************************/</span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> TransverseMercator {
-<a name="l00080"></a>00080   <span class="keyword">private</span>:
-<a name="l00081"></a>00081     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00082"></a>00082     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> maxpow_ = <a class="code" href="TransverseMercator_8hpp.html#a823820984cba9dabe0517925bf18c77b">TM_TX_MAXPOW</a>;
-<a name="l00083"></a>00083     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tol_;
-<a name="l00084"></a>00084     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> overflow_;
-<a name="l00085"></a>00085     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numit_ = 5;
-<a name="l00086"></a>00086     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a, _f, _k0, _e2, _e, _e2m,  _c, _n;
-<a name="l00087"></a>00087     <span class="comment">// _alp[0] and _bet[0] unused</span>
-<a name="l00088"></a>00088     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> _a1, _b1, _alp[maxpow_ + 1], _bet[maxpow_ + 1];
-<a name="l00089"></a>00089     <span class="comment">// tan(x) for x in [-pi/2, pi/2] ensuring that the sign is right</span>
-<a name="l00090"></a>00090     <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> tanx(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keywordflow">throw</span>() {
-<a name="l00091"></a>00091       <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> t = std::tan(x);
-<a name="l00092"></a>00092       <span class="comment">// Write the tests this way to ensure that tanx(NaN()) is NaN()</span>
-<a name="l00093"></a>00093       <span class="keywordflow">return</span> x >= 0 ? (!(t < 0) ? t : overflow_) : (!(t >= 0) ? t : -overflow_);
-<a name="l00094"></a>00094     }
-<a name="l00095"></a>00095     <span class="comment">// Return e * atanh(e * x) for f >= 0, else return</span>
-<a name="l00096"></a>00096     <span class="comment">// - sqrt(-e2) * atan( sqrt(-e2) * x) for f < 0</span>
-<a name="l00097"></a>00097     <span class="keyword">inline</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> eatanhe(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00098"></a>00098       <span class="keywordflow">return</span> _f >= 0 ? _e * <a class="code" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">Math::atanh</a>(_e * x) : - _e * std::atan(_e * x);
-<a name="l00099"></a>00099     }
-<a name="l00100"></a>00100   <span class="keyword">public</span>:
-<a name="l00101"></a>00101 <span class="comment"></span>
-<a name="l00102"></a>00102 <span class="comment">    /**</span>
-<a name="l00103"></a>00103 <span class="comment">     * Constructor for a ellipsoid with</span>
-<a name="l00104"></a>00104 <span class="comment">     *</span>
-<a name="l00105"></a>00105 <span class="comment">     * @param[in] a equatorial radius (meters).</span>
-<a name="l00106"></a>00106 <span class="comment">     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.</span>
-<a name="l00107"></a>00107 <span class="comment">     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening</span>
-<a name="l00108"></a>00108 <span class="comment">     *   to 1/\e f.</span>
-<a name="l00109"></a>00109 <span class="comment">     * @param[in] k0 central scale factor.</span>
-<a name="l00110"></a>00110 <span class="comment">     *</span>
-<a name="l00111"></a>00111 <span class="comment">     * An exception is thrown if either of the axes of the ellipsoid or \e k0</span>
-<a name="l00112"></a>00112 <span class="comment">     * is not positive.</span>
-<a name="l00113"></a>00113 <span class="comment">     **********************************************************************/</span>
-<a name="l00114"></a>00114     TransverseMercator(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> a, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> f, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> k0);
-<a name="l00115"></a>00115 <span class="comment"></span>
-<a name="l00116"></a>00116 <span class="comment">    /**</span>
-<a name="l00117"></a>00117 <span class="comment">     * Forward projection, from geographic to transverse Mercator.</span>
-<a name="l00118"></a>00118 <span class="comment">     *</span>
-<a name="l00119"></a>00119 <span class="comment">     * @param[in] lon0 central meridian of the projection (degrees).</span>
-<a name="l00120"></a>00120 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00121"></a>00121 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00122"></a>00122 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00123"></a>00123 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00124"></a>00124 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00125"></a>00125 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00126"></a>00126 <span class="comment">     *</span>
-<a name="l00127"></a>00127 <span class="comment">     * No false easting or northing is added. \e lat should be in the range</span>
-<a name="l00128"></a>00128 <span class="comment">     * [-90, 90]; \e lon and \e lon0 should be in the range [-180, 360].</span>
-<a name="l00129"></a>00129 <span class="comment">     **********************************************************************/</span>
-<a name="l00130"></a>00130     <span class="keywordtype">void</span> Forward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon,
-<a name="l00131"></a>00131                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00132"></a>00132 <span class="comment"></span>
-<a name="l00133"></a>00133 <span class="comment">    /**</span>
-<a name="l00134"></a>00134 <span class="comment">     * Reverse projection, from transverse Mercator to geographic.</span>
-<a name="l00135"></a>00135 <span class="comment">     *</span>
-<a name="l00136"></a>00136 <span class="comment">     * @param[in] lon0 central meridian of the projection (degrees).</span>
-<a name="l00137"></a>00137 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00138"></a>00138 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00139"></a>00139 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00140"></a>00140 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00141"></a>00141 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00142"></a>00142 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00143"></a>00143 <span class="comment">     *</span>
-<a name="l00144"></a>00144 <span class="comment">     * No false easting or northing is added.  \e lon0 should be in the range</span>
-<a name="l00145"></a>00145 <span class="comment">     * [-180, 360].  The value of \e lon returned is in the range [-180, 180).</span>
-<a name="l00146"></a>00146 <span class="comment">     **********************************************************************/</span>
-<a name="l00147"></a>00147     <span class="keywordtype">void</span> Reverse(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon0, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00148"></a>00148                  <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
-<a name="l00149"></a>00149 <span class="comment"></span>
-<a name="l00150"></a>00150 <span class="comment">    /**</span>
-<a name="l00151"></a>00151 <span class="comment">     * TransverseMercator::Forward without returning the convergence and scale.</span>
-<a name="l00152"></a>00152 <span class="comment">     **********************************************************************/</span>
-<a name="l00153"></a><a class="code" href="classGeographicLib_1_1TransverseMercator.html#af689c212234963734354347d56bf12f6">00153</a>     <span class="keywordtype">void</span> Forward(real lon0, real lat, real lon,
-<a name="l00154"></a>00154                  real& x, real& y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00155"></a>00155       real gamma, k;
-<a name="l00156"></a>00156       Forward(lon0, lat, lon, x, y, gamma, k);
-<a name="l00157"></a>00157     }
-<a name="l00158"></a>00158 <span class="comment"></span>
-<a name="l00159"></a>00159 <span class="comment">    /**</span>
-<a name="l00160"></a>00160 <span class="comment">     * TransverseMercator::Reverse without returning the convergence and scale.</span>
-<a name="l00161"></a>00161 <span class="comment">     **********************************************************************/</span>
-<a name="l00162"></a><a class="code" href="classGeographicLib_1_1TransverseMercator.html#ac3bd58646dd6c06731a9baadee11f7e5">00162</a>     <span class="keywordtype">void</span> Reverse(real lon0, real x, real y,
-<a name="l00163"></a>00163                  real& lat, real& lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
-<a name="l00164"></a>00164       real gamma, k;
-<a name="l00165"></a>00165       Reverse(lon0, x, y, lat, lon, gamma, k);
-<a name="l00166"></a>00166     }
-<a name="l00167"></a>00167 <span class="comment"></span>
-<a name="l00168"></a>00168 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00169"></a>00169 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00170"></a>00170 <span class="comment">    ///@{</span>
-<a name="l00171"></a>00171 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00172"></a>00172 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
-<a name="l00173"></a>00173 <span class="comment">     *   the value used in the constructor.</span>
-<a name="l00174"></a>00174 <span class="comment">     **********************************************************************/</span>
-<a name="l00175"></a><a class="code" href="classGeographicLib_1_1TransverseMercator.html#a47e93a8cde548b6e8d7c4c076bac4be6">00175</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1TransverseMercator.html#a47e93a8cde548b6e8d7c4c076bac4be6">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a; }
-<a name="l00176"></a>00176 <span class="comment"></span>
-<a name="l00177"></a>00177 <span class="comment">    /**</span>
-<a name="l00178"></a>00178 <span class="comment">     * @return \e f the flattening of the ellipsoid.  This is the value used in</span>
-<a name="l00179"></a>00179 <span class="comment">     *   the constructor.</span>
-<a name="l00180"></a>00180 <span class="comment">     **********************************************************************/</span>
-<a name="l00181"></a><a class="code" href="classGeographicLib_1_1TransverseMercator.html#a6571ba8c59fd7e5e32c9994d37d4cdb5">00181</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1TransverseMercator.html#a6571ba8c59fd7e5e32c9994d37d4cdb5">Flattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _f; }
-<a name="l00182"></a>00182 <span class="comment"></span>
-<a name="l00183"></a>00183 <span class="comment">    /// \cond SKIP</span>
-<a name="l00184"></a>00184 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00185"></a>00185 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00186"></a>00186 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.</span>
-<a name="l00187"></a>00187 <span class="comment">     **********************************************************************/</span>
-<a name="l00188"></a>00188     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> 1/_f; }<span class="comment"></span>
-<a name="l00189"></a>00189 <span class="comment">    /// \endcond</span>
-<a name="l00190"></a>00190 <span class="comment"></span><span class="comment"></span>
-<a name="l00191"></a>00191 <span class="comment">    /**</span>
-<a name="l00192"></a>00192 <span class="comment">     * @return \e k0 central scale for the projection.  This is the value of \e</span>
-<a name="l00193"></a>00193 <span class="comment">     *   k0 used in the constructor and is the scale on the central meridian.</span>
-<a name="l00194"></a>00194 <span class="comment">     **********************************************************************/</span>
-<a name="l00195"></a><a class="code" href="classGeographicLib_1_1TransverseMercator.html#a63876dc20e8765501ca62022f9a73432">00195</a>     <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real <a class="code" href="classGeographicLib_1_1TransverseMercator.html#a63876dc20e8765501ca62022f9a73432">CentralScale</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _k0; }<span class="co [...]
-<a name="l00196"></a>00196 <span class="comment">    ///@}</span>
-<a name="l00197"></a>00197 <span class="comment"></span><span class="comment"></span>
-<a name="l00198"></a>00198 <span class="comment">    /**</span>
-<a name="l00199"></a>00199 <span class="comment">     * A global instantiation of TransverseMercator with the WGS84 ellipsoid</span>
-<a name="l00200"></a>00200 <span class="comment">     * and the UTM scale factor.  However, unlike UTM, no false easting or</span>
-<a name="l00201"></a>00201 <span class="comment">     * northing is added.</span>
-<a name="l00202"></a>00202 <span class="comment">     **********************************************************************/</span>
-<a name="l00203"></a><a class="code" href="classGeographicLib_1_1TransverseMercator.html#aa25b52e35bc54c368e6c8b17e02b0542">00203</a>     <span class="keyword">static</span> <span class="keyword">const</span> TransverseMercator <a class="code" href="classGeographicLib_1_1TransverseMercator.html#aa25b52e35bc54c368e6c8b17e02b0542">UTM</a>;
-<a name="l00204"></a>00204   };
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208 <span class="preprocessor">#endif  // GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/UTMUPS_8cpp.html b/doc/html/UTMUPS_8cpp.html
deleted file mode 100644
index 1ff7596..0000000
--- a/doc/html/UTMUPS_8cpp.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: UTMUPS.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">UTMUPS.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="UTMUPS_8hpp_source.html">GeographicLib/UTMUPS.hpp</a>></code><br/>
-<code>#include <iomanip></code><br/>
-<code>#include <<a class="el" href="MGRS_8hpp_source.html">GeographicLib/MGRS.hpp</a>></code><br/>
-<code>#include <<a class="el" href="PolarStereographic_8hpp_source.html">GeographicLib/PolarStereographic.hpp</a>></code><br/>
-<code>#include <<a class="el" href="TransverseMercator_8hpp_source.html">GeographicLib/TransverseMercator.hpp</a>></code><br/>
-<code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="UTMUPS_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="UTMUPS_8cpp.html#af7026e1ac5bb37428765d957f2f14a6b">GEOGRAPHICLIB_UTMUPS_CPP</a>   "$Id: 5672b003ee47cd660377c111e3fca2b81da86323 $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="UTMUPS_8cpp_source.html">UTMUPS.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="af7026e1ac5bb37428765d957f2f14a6b"></a><!-- doxytag: member="UTMUPS.cpp::GEOGRAPHICLIB_UTMUPS_CPP" ref="af7026e1ac5bb37428765d957f2f14a6b" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_UTMUPS_CPP   "$Id: 5672b003ee47cd660377c111e3fca2b81da86323 $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="UTMUPS_8cpp_source.html#l00017">17</a> of file <a class="el" href="UTMUPS_8cpp_source.html">UTMUPS.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/UTMUPS_8cpp_source.html b/doc/html/UTMUPS_8cpp_source.html
deleted file mode 100644
index ca13e6b..0000000
--- a/doc/html/UTMUPS_8cpp_source.html
+++ /dev/null
@@ -1,321 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: UTMUPS.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">UTMUPS.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="UTMUPS_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file UTMUPS.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::UTMUPS class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="UTMUPS_8hpp.html" title="Header for GeographicLib::UTMUPS class.">GeographicLib/UTMUPS.hpp</a>></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <iomanip></span>
-<a name="l00012"></a>00012 <span class="preprocessor">#include <<a class="code" href="MGRS_8hpp.html" title="Header for GeographicLib::MGRS class.">GeographicLib/MGRS.hpp</a>></span>
-<a name="l00013"></a>00013 <span class="preprocessor">#include <<a class="code" href="PolarStereographic_8hpp.html" title="Header for GeographicLib::PolarStereographic class.">GeographicLib/PolarStereographic.hpp</a>></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="TransverseMercator_8hpp.html" title="Header for GeographicLib::TransverseMercator class.">GeographicLib/TransverseMercator.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a><a class="code" href="UTMUPS_8cpp.html#af7026e1ac5bb37428765d957f2f14a6b">00017</a> <span class="preprocessor">#define GEOGRAPHICLIB_UTMUPS_CPP \</span>
-<a name="l00018"></a>00018 <span class="preprocessor">  "$Id: 5672b003ee47cd660377c111e3fca2b81da86323 $"</span>
-<a name="l00019"></a>00019 <span class="preprocessor"></span>
-<a name="l00020"></a>00020 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="UTMUPS_8cpp.html#af7026e1ac5bb37428765d957f2f14a6b">GEOGRAPHICLIB_UTMUPS_CPP</a>)
-<a name="l00021"></a>00021 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="UTMUPS_8hpp.html#aab4dce5d203c0d98ae740800332ed9d9">GEOGRAPHICLIB_UTMUPS_HPP</a>)
-<a name="l00022"></a>00022 
-<a name="l00023"></a>00023 namespace GeographicLib {
-<a name="l00024"></a>00024 
-<a name="l00025"></a>00025   <span class="keyword">using namespace </span>std;
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> UTMUPS::falseeasting_[4] =
-<a name="l00028"></a>00028     { MGRS::upseasting_ * MGRS::tile_, MGRS::upseasting_ * MGRS::tile_,
-<a name="l00029"></a>00029       MGRS::utmeasting_ * MGRS::tile_, MGRS::utmeasting_ * MGRS::tile_ };
-<a name="l00030"></a>00030   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> UTMUPS::falsenorthing_[4] =
-<a name="l00031"></a>00031     { MGRS::upseasting_ * MGRS::tile_, MGRS::upseasting_ * MGRS::tile_,
-<a name="l00032"></a>00032       MGRS::maxutmSrow_ * MGRS::tile_, MGRS::minutmNrow_ * MGRS::tile_ };
-<a name="l00033"></a>00033   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> UTMUPS::mineasting_[4] =
-<a name="l00034"></a>00034     { MGRS::minupsSind_ * MGRS::tile_, MGRS::minupsNind_ * MGRS::tile_,
-<a name="l00035"></a>00035       MGRS::minutmcol_ * MGRS::tile_, MGRS::minutmcol_ * MGRS::tile_ };
-<a name="l00036"></a>00036   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> UTMUPS::maxeasting_[4] =
-<a name="l00037"></a>00037     { MGRS::maxupsSind_ * MGRS::tile_, MGRS::maxupsNind_ * MGRS::tile_,
-<a name="l00038"></a>00038       MGRS::maxutmcol_ * MGRS::tile_, MGRS::maxutmcol_ * MGRS::tile_ };
-<a name="l00039"></a>00039   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> UTMUPS::minnorthing_[4] =
-<a name="l00040"></a>00040     { MGRS::minupsSind_ * MGRS::tile_, MGRS::minupsNind_ * MGRS::tile_,
-<a name="l00041"></a>00041       MGRS::minutmSrow_ * MGRS::tile_,
-<a name="l00042"></a>00042       (MGRS::minutmNrow_ + MGRS::minutmSrow_ - MGRS::maxutmSrow_)
-<a name="l00043"></a>00043       * MGRS::tile_ };
-<a name="l00044"></a>00044   <span class="keyword">const</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> UTMUPS::maxnorthing_[4] =
-<a name="l00045"></a>00045     { MGRS::maxupsSind_ * MGRS::tile_, MGRS::maxupsNind_ * MGRS::tile_,
-<a name="l00046"></a>00046       (MGRS::maxutmSrow_ + MGRS::maxutmNrow_ - MGRS::minutmNrow_) * MGRS::tile_,
-<a name="l00047"></a>00047       MGRS::maxutmNrow_ * MGRS::tile_ };
-<a name="l00048"></a>00048 
-<a name="l00049"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a62623c295d1b43318a9fa762c3da94ea">00049</a>   <span class="keywordtype">int</span> UTMUPS::StandardZone(real lat, real lon, <span class="keywordtype">int</span> setzone) {
-<a name="l00050"></a>00050     <span class="keywordflow">if</span> (!(setzone >= MINPSEUDOZONE && setzone <= MAXZONE))
-<a name="l00051"></a>00051       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Illegal zone requested "</span> + Utility::str(setzone));
-<a name="l00052"></a>00052     <span class="keywordflow">if</span> (setzone >= MINZONE || setzone == INVALID)
-<a name="l00053"></a>00053       <span class="keywordflow">return</span> setzone;
-<a name="l00054"></a>00054     <span class="keywordflow">if</span> (Math::isnan(lat) || Math::isnan(lon)) <span class="comment">// Check if lat or lon is a NaN</span>
-<a name="l00055"></a>00055       <span class="keywordflow">return</span> INVALID;
-<a name="l00056"></a>00056     <span class="comment">// Assume lon is in [-180, 360].</span>
-<a name="l00057"></a>00057     <span class="keywordflow">if</span> (setzone == UTM || (lat >= -80 && lat < 84)) {
-<a name="l00058"></a>00058       <span class="comment">// Assume lon is in [-180, 360].</span>
-<a name="l00059"></a>00059       <span class="keywordtype">int</span> ilon = int(floor(lon));
-<a name="l00060"></a>00060       <span class="keywordflow">if</span> (ilon >= 180)
-<a name="l00061"></a>00061         ilon -= 360;
-<a name="l00062"></a>00062       <span class="keywordtype">int</span> zone = (ilon + 186)/6;
-<a name="l00063"></a>00063       <span class="keywordtype">int</span> band = MGRS::LatitudeBand(lat);
-<a name="l00064"></a>00064       <span class="keywordflow">if</span> (band == 7 && zone == 31 && ilon >= 3)
-<a name="l00065"></a>00065         zone = 32;
-<a name="l00066"></a>00066       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (band == 9 && ilon >= 0 && ilon < 42)
-<a name="l00067"></a>00067         zone = 2 * ((ilon + 183)/12) + 1;
-<a name="l00068"></a>00068       <span class="keywordflow">return</span> zone;
-<a name="l00069"></a>00069     } <span class="keywordflow">else</span>
-<a name="l00070"></a>00070       <span class="keywordflow">return</span> UPS;
-<a name="l00071"></a>00071   }
-<a name="l00072"></a>00072 
-<a name="l00073"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">00073</a>   <span class="keywordtype">void</span> UTMUPS::Forward(real lat, real lon,
-<a name="l00074"></a>00074                        <span class="keywordtype">int</span>& zone, <span class="keywordtype">bool</span>& northp, real& x, real& y,
-<a name="l00075"></a>00075                        real& gamma, real& k,
-<a name="l00076"></a>00076                        <span class="keywordtype">int</span> setzone, <span class="keywordtype">bool</span> mgrslimits) {
-<a name="l00077"></a>00077     CheckLatLon(lat, lon);
-<a name="l00078"></a>00078     <span class="keywordtype">bool</span> northp1 = lat >= 0;
-<a name="l00079"></a>00079     <span class="keywordtype">int</span> zone1 = StandardZone(lat, lon, setzone);
-<a name="l00080"></a>00080     <span class="keywordflow">if</span> (zone1 == INVALID) {
-<a name="l00081"></a>00081       zone = zone1;
-<a name="l00082"></a>00082       northp = northp1;
-<a name="l00083"></a>00083       x = y = gamma = k = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00084"></a>00084       <span class="keywordflow">return</span>;
-<a name="l00085"></a>00085     }
-<a name="l00086"></a>00086     real x1, y1, gamma1, k1;
-<a name="l00087"></a>00087     <span class="keywordtype">bool</span> utmp = zone1 != UPS;
-<a name="l00088"></a>00088     <span class="keywordflow">if</span> (utmp) {
-<a name="l00089"></a>00089       real
-<a name="l00090"></a>00090         lon0 = CentralMeridian(zone1),
-<a name="l00091"></a>00091         dlon = lon - lon0;
-<a name="l00092"></a>00092       dlon = abs(dlon - 360 * floor((dlon + 180)/360));
-<a name="l00093"></a>00093       <span class="keywordflow">if</span> (dlon > 60)
-<a name="l00094"></a>00094         <span class="comment">// Check isn't really necessary because CheckCoords catches this case.</span>
-<a name="l00095"></a>00095         <span class="comment">// But this allows a more meaningful error message to be given.</span>
-<a name="l00096"></a>00096         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Longitude "</span> + Utility::str(lon)
-<a name="l00097"></a>00097                             + <span class="stringliteral">"d more than 60d from center of UTM zone "</span>
-<a name="l00098"></a>00098                             + Utility::str(zone1));
-<a name="l00099"></a>00099       <a class="code" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a>::UTM.<a class="code" href="classGeographicLib_1_1TransverseMercator.html#a07d73a6d94e2434cbb937978d61a5ae7">Forward</a>(lon0, lat, lon, x1, y1, gamma1, k1);
-<a name="l00100"></a>00100     } <span class="keywordflow">else</span> {
-<a name="l00101"></a>00101       <span class="keywordflow">if</span> (abs(lat) < 70)
-<a name="l00102"></a>00102         <span class="comment">// Check isn't really necessary ... (see above).</span>
-<a name="l00103"></a>00103         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude "</span> + Utility::str(lat)
-<a name="l00104"></a>00104                             + <span class="stringliteral">"d more than 20d from "</span>
-<a name="l00105"></a>00105                             + (northp1 ? <span class="stringliteral">"N"</span> : <span class="stringliteral">"S"</span>) + <span class="stringliteral">" pole"</span>);
-<a name="l00106"></a>00106       <a class="code" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">PolarStereographic</a>::UPS.<a class="code" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">Forward</a>(northp1, lat, lon, x1, y1, gamma1, k1);
-<a name="l00107"></a>00107     }
-<a name="l00108"></a>00108     <span class="keywordtype">int</span> ind = (utmp ? 2 : 0) + (northp1 ? 1 : 0);
-<a name="l00109"></a>00109     x1 += falseeasting_[ind];
-<a name="l00110"></a>00110     y1 += falsenorthing_[ind];
-<a name="l00111"></a>00111     <span class="keywordflow">if</span> (! CheckCoords(zone1 != UPS, northp1, x1, y1, mgrslimits, <span class="keyword">false</span>) )
-<a name="l00112"></a>00112       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude "</span> + Utility::str(lat)
-<a name="l00113"></a>00113                           + <span class="stringliteral">", longitude "</span> + Utility::str(lon)
-<a name="l00114"></a>00114                           + <span class="stringliteral">" out of legal range for "</span>
-<a name="l00115"></a>00115                           + (utmp ? <span class="stringliteral">"UTM zone "</span> + Utility::str(zone1) : <span class="stringliteral">"UPS"</span>));
-<a name="l00116"></a>00116     zone = zone1;
-<a name="l00117"></a>00117     northp = northp1;
-<a name="l00118"></a>00118     x = x1;
-<a name="l00119"></a>00119     y = y1;
-<a name="l00120"></a>00120     gamma = gamma1;
-<a name="l00121"></a>00121     k = k1;
-<a name="l00122"></a>00122   }
-<a name="l00123"></a>00123 
-<a name="l00124"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#aaf417ae6bed6da324aa03fc96ee0dda4">00124</a>   <span class="keywordtype">void</span> UTMUPS::Reverse(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp, real x, real y,
-<a name="l00125"></a>00125                        real& lat, real& lon, real& gamma, real& k,
-<a name="l00126"></a>00126                        <span class="keywordtype">bool</span> mgrslimits) {
-<a name="l00127"></a>00127     <span class="keywordflow">if</span> (zone == INVALID || Math::isnan(x) || Math::isnan(y)) {
-<a name="l00128"></a>00128       lat = lon = gamma = k = <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<real>();
-<a name="l00129"></a>00129       <span class="keywordflow">return</span>;
-<a name="l00130"></a>00130     }
-<a name="l00131"></a>00131     <span class="keywordflow">if</span> (!(zone >= MINZONE && zone <= MAXZONE))
-<a name="l00132"></a>00132       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Zone "</span> + Utility::str(zone)
-<a name="l00133"></a>00133                           + <span class="stringliteral">" not in range [0, 60]"</span>);
-<a name="l00134"></a>00134     <span class="keywordtype">bool</span> utmp = zone != UPS;
-<a name="l00135"></a>00135     CheckCoords(utmp, northp, x, y, mgrslimits);
-<a name="l00136"></a>00136     <span class="keywordtype">int</span> ind = (utmp ? 2 : 0) + (northp ? 1 : 0);
-<a name="l00137"></a>00137     x -= falseeasting_[ind];
-<a name="l00138"></a>00138     y -= falsenorthing_[ind];
-<a name="l00139"></a>00139     <span class="keywordflow">if</span> (utmp)
-<a name="l00140"></a>00140       <a class="code" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a>::UTM.<a class="code" href="classGeographicLib_1_1TransverseMercator.html#a15611aee4e3707e155278bab02403a07">Reverse</a>(CentralMeridian(zone),
-<a name="l00141"></a>00141                                       x, y, lat, lon, gamma, k);
-<a name="l00142"></a>00142     <span class="keywordflow">else</span>
-<a name="l00143"></a>00143       <a class="code" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">PolarStereographic</a>::UPS.<a class="code" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">Reverse</a>(northp, x, y, lat, lon, gamma, k);
-<a name="l00144"></a>00144   }
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146   <span class="keywordtype">void</span> UTMUPS::CheckLatLon(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon) {
-<a name="l00147"></a>00147     <span class="keywordflow">if</span> (lat < -90 || lat > 90)
-<a name="l00148"></a>00148       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude "</span> + Utility::str(lat)
-<a name="l00149"></a>00149                           + <span class="stringliteral">"d not in [-90d, 90d]"</span>);
-<a name="l00150"></a>00150     <span class="keywordflow">if</span> (lon < -180 || lon > 360)
-<a name="l00151"></a>00151       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Latitude "</span> + Utility::str(lon)
-<a name="l00152"></a>00152                           + <span class="stringliteral">"d not in [-180d, 360d]"</span>);
-<a name="l00153"></a>00153     }
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155   <span class="keywordtype">bool</span> UTMUPS::CheckCoords(<span class="keywordtype">bool</span> utmp, <span class="keywordtype">bool</span> northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00156"></a>00156                            <span class="keywordtype">bool</span> mgrslimits, <span class="keywordtype">bool</span> throwp) {
-<a name="l00157"></a>00157     <span class="comment">// Limits are all multiples of 100km and are all closed on the both ends.</span>
-<a name="l00158"></a>00158     <span class="comment">// Failure tests are such that NaNs succeed.</span>
-<a name="l00159"></a>00159     <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> slop = mgrslimits ? 0 : MGRS::tile_;
-<a name="l00160"></a>00160     <span class="keywordtype">int</span> ind = (utmp ? 2 : 0) + (northp ? 1 : 0);
-<a name="l00161"></a>00161     <span class="keywordflow">if</span> (x < mineasting_[ind] - slop || x > maxeasting_[ind] + slop) {
-<a name="l00162"></a>00162       <span class="keywordflow">if</span> (!throwp) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00163"></a>00163       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Easting "</span> + Utility::str(x/1000) + <span class="stringliteral">"km not in "</span>
-<a name="l00164"></a>00164                           + (mgrslimits ? <span class="stringliteral">"MGRS/"</span> : <span class="stringliteral">""</span>)
-<a name="l00165"></a>00165                           + (utmp ? <span class="stringliteral">"UTM"</span> : <span class="stringliteral">"UPS"</span>) + <span class="stringliteral">" range for "</span>
-<a name="l00166"></a>00166                           + (northp ? <span class="stringliteral">"N"</span> : <span class="stringliteral">"S"</span> ) + <span class="stringliteral">" hemisphere ["</span>
-<a name="l00167"></a>00167                           + Utility::str((mineasting_[ind] - slop)/1000)
-<a name="l00168"></a>00168                           + <span class="stringliteral">"km, "</span>
-<a name="l00169"></a>00169                           + Utility::str((maxeasting_[ind] + slop)/1000)
-<a name="l00170"></a>00170                           + <span class="stringliteral">"km]"</span>);
-<a name="l00171"></a>00171     }
-<a name="l00172"></a>00172     <span class="keywordflow">if</span> (y < minnorthing_[ind] - slop || y > maxnorthing_[ind] + slop) {
-<a name="l00173"></a>00173       <span class="keywordflow">if</span> (!throwp) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00174"></a>00174       <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Northing "</span> + Utility::str(y/1000) + <span class="stringliteral">"km not in "</span>
-<a name="l00175"></a>00175                           + (mgrslimits ? <span class="stringliteral">"MGRS/"</span> : <span class="stringliteral">""</span>)
-<a name="l00176"></a>00176                           + (utmp ? <span class="stringliteral">"UTM"</span> : <span class="stringliteral">"UPS"</span>) + <span class="stringliteral">" range for "</span>
-<a name="l00177"></a>00177                           + (northp ? <span class="stringliteral">"N"</span> : <span class="stringliteral">"S"</span> ) + <span class="stringliteral">" hemisphere ["</span>
-<a name="l00178"></a>00178                           + Utility::str((minnorthing_[ind] - slop)/1000)
-<a name="l00179"></a>00179                           + <span class="stringliteral">"km, "</span>
-<a name="l00180"></a>00180                           + Utility::str((maxnorthing_[ind] + slop)/1000)
-<a name="l00181"></a>00181                           + <span class="stringliteral">"km]"</span>);
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00184"></a>00184   }
-<a name="l00185"></a>00185 
-<a name="l00186"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#ad74d52d7ebeff195019745f791f30562">00186</a>   <span class="keywordtype">void</span> UTMUPS::DecodeZone(<span class="keyword">const</span> std::string& zonestr, <span class="keywordtype">int</span>& zone, <span class="keywordtype">bool</span>& northp) {
-<a name="l00187"></a>00187     <span class="keywordtype">unsigned</span> zlen = unsigned(zonestr.size());
-<a name="l00188"></a>00188     <span class="keywordflow">if</span> (zlen == 0)
-<a name="l00189"></a>00189       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Empty zone specification"</span>);
-<a name="l00190"></a>00190     <span class="keywordflow">if</span> (zlen > 3)
-<a name="l00191"></a>00191       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"More than 3 characters in zone specification "</span>
-<a name="l00192"></a>00192                           + zonestr);
-<a name="l00193"></a>00193     <span class="keywordflow">if</span> (zlen == 3 &&
-<a name="l00194"></a>00194         toupper(zonestr[0]) == <span class="charliteral">'I'</span> &&
-<a name="l00195"></a>00195         toupper(zonestr[1]) == <span class="charliteral">'N'</span> &&
-<a name="l00196"></a>00196         toupper(zonestr[2]) == <span class="charliteral">'V'</span>) {
-<a name="l00197"></a>00197       zone = INVALID;
-<a name="l00198"></a>00198       northp = <span class="keyword">false</span>;
-<a name="l00199"></a>00199       <span class="keywordflow">return</span>;
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201     <span class="keywordtype">char</span> hemi = toupper(zonestr[zlen - 1]);
-<a name="l00202"></a>00202     <span class="keywordtype">bool</span> northp1 = hemi == <span class="charliteral">'N'</span>;
-<a name="l00203"></a>00203     <span class="keywordflow">if</span> (! (northp1 || hemi == <span class="charliteral">'S'</span>))
-<a name="l00204"></a>00204       <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="keywordtype">string</span>(<span class="stringliteral">"Illegal hemisphere letter "</span>) + hemi + <span class="stringliteral">" in "</span>
-<a name="l00205"></a>00205                           + zonestr + <span class="stringliteral">", specify N or S"</span>);
-<a name="l00206"></a>00206     <span class="keywordflow">if</span> (zlen == 1)
-<a name="l00207"></a>00207       zone = UPS;
-<a name="l00208"></a>00208     <span class="keywordflow">else</span> {
-<a name="l00209"></a>00209       <span class="keyword">const</span> <span class="keywordtype">char</span>* c = zonestr.c_str();
-<a name="l00210"></a>00210       <span class="keywordtype">char</span>* q;
-<a name="l00211"></a>00211       <span class="keywordtype">int</span> zone1 = strtol(c, &q, 10);
-<a name="l00212"></a>00212       <span class="keywordflow">if</span> (q == c)
-<a name="l00213"></a>00213         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"No zone number found in "</span> + zonestr);
-<a name="l00214"></a>00214       <span class="keywordflow">if</span> (q - c != <span class="keywordtype">int</span>(zlen) - 1)
-<a name="l00215"></a>00215         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Extra text "</span> +
-<a name="l00216"></a>00216                             zonestr.substr(q - c, <span class="keywordtype">int</span>(zlen) - 1 - (q - c)) +
-<a name="l00217"></a>00217                             <span class="stringliteral">" in UTM/UPS zone "</span> + zonestr);
-<a name="l00218"></a>00218       <span class="keywordflow">if</span> (zone1 == UPS)
-<a name="l00219"></a>00219         <span class="comment">// Don't allow 0N as an alternative to N for UPS coordinates</span>
-<a name="l00220"></a>00220         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Illegal zone 0 in "</span> + zonestr +
-<a name="l00221"></a>00221                             <span class="stringliteral">", use just "</span> + hemi + <span class="stringliteral">" for UPS"</span>);
-<a name="l00222"></a>00222       <span class="keywordflow">if</span> (!(zone1 >= MINUTMZONE && zone1 <= MAXUTMZONE))
-<a name="l00223"></a>00223         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Zone "</span> + Utility::str(zone1)
-<a name="l00224"></a>00224                             + <span class="stringliteral">" not in range [1, 60]"</span>);
-<a name="l00225"></a>00225       zone = zone1;
-<a name="l00226"></a>00226     }
-<a name="l00227"></a>00227     northp = northp1;
-<a name="l00228"></a>00228   }
-<a name="l00229"></a>00229 
-<a name="l00230"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a3410e1e221158962f34147255653818f">00230</a>   std::string UTMUPS::EncodeZone(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp) {
-<a name="l00231"></a>00231     <span class="keywordflow">if</span> (zone == INVALID)
-<a name="l00232"></a>00232       <span class="keywordflow">return</span> string(<span class="stringliteral">"INV"</span>);
-<a name="l00233"></a>00233     <span class="keywordflow">if</span> (!(zone >= MINZONE && zone <= MAXZONE))
-<a name="l00234"></a>00234         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Zone "</span> + Utility::str(zone)
-<a name="l00235"></a>00235                             + <span class="stringliteral">" not in range [0, 60]"</span>);
-<a name="l00236"></a>00236     ostringstream os;
-<a name="l00237"></a>00237     <span class="keywordflow">if</span> (zone != UPS)
-<a name="l00238"></a>00238       os << setfill(<span class="charliteral">'0'</span>) << setw(2) << zone;
-<a name="l00239"></a>00239     os << (northp ? <span class="charliteral">'N'</span> : <span class="charliteral">'S'</span>);
-<a name="l00240"></a>00240     <span class="keywordflow">return</span> os.str();
-<a name="l00241"></a>00241   }
-<a name="l00242"></a>00242 
-<a name="l00243"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#abd70d3f90f5c79a09bdd217b67e6729b">00243</a>   <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real UTMUPS::UTMShift() throw() { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(MGRS::utmNshift_); }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/UTMUPS_8hpp.html b/doc/html/UTMUPS_8hpp.html
deleted file mode 100644
index ebbe8df..0000000
--- a/doc/html/UTMUPS_8hpp.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: UTMUPS.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">UTMUPS.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <sstream></code><br/>
-<code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-</div>
-<p><a href="UTMUPS_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert between Geographic coordinates and UTM/UPS.  <a href="classGeographicLib_1_1UTMUPS.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="UTMUPS_8hpp.html#aab4dce5d203c0d98ae740800332ed9d9">GEOGRAPHICLIB_UTMUPS_HPP</a>   "$Id: a529ed8aeaeffb02994254bbc7eb1209aa41b9ca $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> class. </p>
-<p>Copyright (c) Charles Karney (2008-2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="UTMUPS_8hpp_source.html">UTMUPS.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="aab4dce5d203c0d98ae740800332ed9d9"></a><!-- doxytag: member="UTMUPS.hpp::GEOGRAPHICLIB_UTMUPS_HPP" ref="aab4dce5d203c0d98ae740800332ed9d9" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_UTMUPS_HPP   "$Id: a529ed8aeaeffb02994254bbc7eb1209aa41b9ca $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="UTMUPS_8hpp_source.html#l00011">11</a> of file <a class="el" href="UTMUPS_8hpp_source.html">UTMUPS.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/UTMUPS_8hpp_source.html b/doc/html/UTMUPS_8hpp_source.html
deleted file mode 100644
index 4585af9..0000000
--- a/doc/html/UTMUPS_8hpp_source.html
+++ /dev/null
@@ -1,397 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: UTMUPS.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">UTMUPS.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="UTMUPS_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file UTMUPS.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::UTMUPS class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_UTMUPS_HPP)</span>
-<a name="l00011"></a><a class="code" href="UTMUPS_8hpp.html#aab4dce5d203c0d98ae740800332ed9d9">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_UTMUPS_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: a529ed8aeaeffb02994254bbc7eb1209aa41b9ca $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <sstream></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00016"></a>00016 
-<a name="l00017"></a>00017 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00018"></a>00018 <span class="comment"></span>
-<a name="l00019"></a>00019 <span class="comment">  /**</span>
-<a name="l00020"></a>00020 <span class="comment">   * \brief Convert between Geographic coordinates and UTM/UPS</span>
-<a name="l00021"></a>00021 <span class="comment">   *</span>
-<a name="l00022"></a>00022 <span class="comment">   * UTM and UPS are defined</span>
-<a name="l00023"></a>00023 <span class="comment">   * - J. W. Hager, J. F. Behensky, and B. W. Drew,</span>
-<a name="l00024"></a>00024 <span class="comment">   *   <a href="http://earth-info.nga.mil/GandG/publications/tm8358.2/TM8358_2.pdf"></span>
-<a name="l00025"></a>00025 <span class="comment">   *   The Universal Grids: Universal Transverse Mercator (UTM) and Universal</span>
-<a name="l00026"></a>00026 <span class="comment">   *   Polar Stereographic (UPS)</a>, Defense Mapping Agency, Technical Manual</span>
-<a name="l00027"></a>00027 <span class="comment">   *   TM8358.2 (1989).</span>
-<a name="l00028"></a>00028 <span class="comment">   * .</span>
-<a name="l00029"></a>00029 <span class="comment">   * Section 2-3 defines UTM and section 3-2.4 defines UPS.  This document also</span>
-<a name="l00030"></a>00030 <span class="comment">   * includes approximate algorithms for the computation of the underlying</span>
-<a name="l00031"></a>00031 <span class="comment">   * transverse Mercator and polar stereographic projections.  Here we</span>
-<a name="l00032"></a>00032 <span class="comment">   * substitute much more accurate algorithms given by</span>
-<a name="l00033"></a>00033 <span class="comment">   * GeographicLib:TransverseMercator and GeographicLib:PolarStereographic.</span>
-<a name="l00034"></a>00034 <span class="comment">   *</span>
-<a name="l00035"></a>00035 <span class="comment">   * In this implementation, the conversions are closed, i.e., output from</span>
-<a name="l00036"></a>00036 <span class="comment">   * Forward is legal input for Reverse and vice versa.  The error is about 5nm</span>
-<a name="l00037"></a>00037 <span class="comment">   * in each direction.  However, the conversion from legal UTM/UPS coordinates</span>
-<a name="l00038"></a>00038 <span class="comment">   * to geographic coordinates and back might throw an error if the initial</span>
-<a name="l00039"></a>00039 <span class="comment">   * point is within 5nm of the edge of the allowed range for the UTM/UPS</span>
-<a name="l00040"></a>00040 <span class="comment">   * coordinates.</span>
-<a name="l00041"></a>00041 <span class="comment">   *</span>
-<a name="l00042"></a>00042 <span class="comment">   * The simplest way to guarantee the closed property is to define allowed</span>
-<a name="l00043"></a>00043 <span class="comment">   * ranges for the eastings and northings for UTM and UPS coordinates.  The</span>
-<a name="l00044"></a>00044 <span class="comment">   * UTM boundaries are the same for all zones.  (The only place the</span>
-<a name="l00045"></a>00045 <span class="comment">   * exceptional nature of the zone boundaries is evident is when converting to</span>
-<a name="l00046"></a>00046 <span class="comment">   * UTM/UPS coordinates requesting the standard zone.)  The MGRS lettering</span>
-<a name="l00047"></a>00047 <span class="comment">   * scheme imposes natural limits on UTM/UPS coordinates which may be</span>
-<a name="l00048"></a>00048 <span class="comment">   * converted into MGRS coordinates.  For the conversion to/from geographic</span>
-<a name="l00049"></a>00049 <span class="comment">   * coordinates these ranges have been extended by 100km in order to provide a</span>
-<a name="l00050"></a>00050 <span class="comment">   * generous overlap between UTM and UPS and between UTM zones.</span>
-<a name="l00051"></a>00051 <span class="comment">   *</span>
-<a name="l00052"></a>00052 <span class="comment">   * The <a href="http://www.nga.mil">NGA</a> software package</span>
-<a name="l00053"></a>00053 <span class="comment">   * <a href="http://earth-info.nga.mil/GandG/geotrans/index.html">geotrans</a></span>
-<a name="l00054"></a>00054 <span class="comment">   * also provides conversions to and from UTM and UPS.  Version 2.4.2 (and</span>
-<a name="l00055"></a>00055 <span class="comment">   * earlier) suffers from some drawbacks:</span>
-<a name="l00056"></a>00056 <span class="comment">   * - Inconsistent rules are used to determine the whether a particular UTM or</span>
-<a name="l00057"></a>00057 <span class="comment">   *   UPS coordinate is legal.  A more systematic approach is taken here.</span>
-<a name="l00058"></a>00058 <span class="comment">   * - The underlying projections are not very accurately implemented.</span>
-<a name="l00059"></a>00059 <span class="comment">   *</span>
-<a name="l00060"></a>00060 <span class="comment">   * Example of use:</span>
-<a name="l00061"></a>00061 <span class="comment">   * \include example-UTMUPS.cpp</span>
-<a name="l00062"></a>00062 <span class="comment">   **********************************************************************/</span>
-<a name="l00063"></a>00063   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> UTMUPS {
-<a name="l00064"></a>00064   <span class="keyword">private</span>:
-<a name="l00065"></a>00065     <span class="keyword">typedef</span> Math<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>;
-<a name="l00066"></a>00066     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> falseeasting_[4];
-<a name="l00067"></a>00067     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> falsenorthing_[4];
-<a name="l00068"></a>00068     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> mineasting_[4];
-<a name="l00069"></a>00069     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> maxeasting_[4];
-<a name="l00070"></a>00070     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> minnorthing_[4];
-<a name="l00071"></a>00071     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> maxnorthing_[4];
-<a name="l00072"></a>00072     <span class="keyword">static</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> CentralMeridian(<span class="keywordtype">int</span> zone) <span class="keywordflow">throw</span>()
-<a name="l00073"></a>00073     { <span class="keywordflow">return</span> <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>(6 * zone - 183); }
-<a name="l00074"></a>00074     <span class="keyword">static</span> <span class="keywordtype">void</span> CheckLatLon(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon);
-<a name="l00075"></a>00075     <span class="comment">// Throw an error if easting or northing are outside standard ranges.  If</span>
-<a name="l00076"></a>00076     <span class="comment">// throwp = false, return bool instead.</span>
-<a name="l00077"></a>00077     <span class="keyword">static</span> <span class="keywordtype">bool</span> CheckCoords(<span class="keywordtype">bool</span> utmp, <span class="keywordtype">bool</span> northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00078"></a>00078                             <span class="keywordtype">bool</span> msgrlimits = <span class="keyword">false</span>, <span class="keywordtype">bool</span> throwp = <span class="keyword">true</span>);
-<a name="l00079"></a>00079     UTMUPS();                   <span class="comment">// Disable constructor</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081   <span class="keyword">public</span>:
-<a name="l00082"></a>00082 <span class="comment"></span>
-<a name="l00083"></a>00083 <span class="comment">    /**</span>
-<a name="l00084"></a>00084 <span class="comment">     * In this class we bring together the UTM and UPS coordinates systems.</span>
-<a name="l00085"></a>00085 <span class="comment">     * The UTM divides the earth between latitudes -80 and 84 into 60 zones</span>
-<a name="l00086"></a>00086 <span class="comment">     * numbered 1 thru 60.  Zone assign zone number 0 to the UPS regions,</span>
-<a name="l00087"></a>00087 <span class="comment">     * covering the two poles.  Within UTMUPS, non-negative zone numbers refer</span>
-<a name="l00088"></a>00088 <span class="comment">     * to one of the "physical" zones, 0 for UPS and [1, 60] for UTM.  Negative</span>
-<a name="l00089"></a>00089 <span class="comment">     * "pseudo-zone" numbers are used to select one of the physical zones.</span>
-<a name="l00090"></a>00090 <span class="comment">     **********************************************************************/</span>
-<a name="l00091"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">00091</a>     <span class="keyword">enum</span> <a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">zonespec</a> {<span class="comment"></span>
-<a name="l00092"></a>00092 <span class="comment">      /**</span>
-<a name="l00093"></a>00093 <span class="comment">       * The smallest pseudo-zone number.</span>
-<a name="l00094"></a>00094 <span class="comment">       **********************************************************************/</span>
-<a name="l00095"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a058ac8a834bbc78ce73d9b37a1a5dfb9">00095</a>       MINPSEUDOZONE = -4,<span class="comment"></span>
-<a name="l00096"></a>00096 <span class="comment">      /**</span>
-<a name="l00097"></a>00097 <span class="comment">       * A marker for an undefined or invalid zone.  Equivalent to NaN.</span>
-<a name="l00098"></a>00098 <span class="comment">       **********************************************************************/</span>
-<a name="l00099"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0">00099</a>       INVALID = -4,<span class="comment"></span>
-<a name="l00100"></a>00100 <span class="comment">      /**</span>
-<a name="l00101"></a>00101 <span class="comment">       * If a coordinate already include zone information (e.g., it is an MGRS</span>
-<a name="l00102"></a>00102 <span class="comment">       * coordinate), use that, otherwise apply the UTMUPS::STANDARD rules.</span>
-<a name="l00103"></a>00103 <span class="comment">       **********************************************************************/</span>
-<a name="l00104"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a9059a8e3b4721e27869e99ed1ae3d320">00104</a>       MATCH = -3,<span class="comment"></span>
-<a name="l00105"></a>00105 <span class="comment">      /**</span>
-<a name="l00106"></a>00106 <span class="comment">       * Apply the standard rules for UTM zone assigment extending the UTM zone</span>
-<a name="l00107"></a>00107 <span class="comment">       * to each pole to give a zone number in [1, 60].  For example, use UTM</span>
-<a name="l00108"></a>00108 <span class="comment">       * zone 38 for longitude in [42, 48).  The rules include the Norway and</span>
-<a name="l00109"></a>00109 <span class="comment">       * Svalbard exceptions.</span>
-<a name="l00110"></a>00110 <span class="comment">       **********************************************************************/</span>
-<a name="l00111"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aacc8f89ac6144b1e445ca21cbe9a2533">00111</a>       UTM = -2,<span class="comment"></span>
-<a name="l00112"></a>00112 <span class="comment">      /**</span>
-<a name="l00113"></a>00113 <span class="comment">       * Apply the standard rules for zone assignment to give a zone number in</span>
-<a name="l00114"></a>00114 <span class="comment">       * [0, 60].  If the latitude is not in [-80, 84), then use UTMUPS::UPS =</span>
-<a name="l00115"></a>00115 <span class="comment">       * 0, otherwise apply the rules for UTMUPS::UTM.  The tests on latitudes</span>
-<a name="l00116"></a>00116 <span class="comment">       * and longitudes are all closed on the lower end open on the upper.</span>
-<a name="l00117"></a>00117 <span class="comment">       * Thus for UTM zone 38, latitude is in [-80, 84) and longitude is in</span>
-<a name="l00118"></a>00118 <span class="comment">       * [42, 48).</span>
-<a name="l00119"></a>00119 <span class="comment">       **********************************************************************/</span>
-<a name="l00120"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">00120</a>       STANDARD = -1,<span class="comment"></span>
-<a name="l00121"></a>00121 <span class="comment">      /**</span>
-<a name="l00122"></a>00122 <span class="comment">       * The largest pseudo-zone number.</span>
-<a name="l00123"></a>00123 <span class="comment">       **********************************************************************/</span>
-<a name="l00124"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ac22db7e136b6e06fba7c3c06b5888362">00124</a>       MAXPSEUDOZONE = -1,<span class="comment"></span>
-<a name="l00125"></a>00125 <span class="comment">      /**</span>
-<a name="l00126"></a>00126 <span class="comment">       * The smallest physical zone number.</span>
-<a name="l00127"></a>00127 <span class="comment">       **********************************************************************/</span>
-<a name="l00128"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1">00128</a>       MINZONE = 0,<span class="comment"></span>
-<a name="l00129"></a>00129 <span class="comment">      /**</span>
-<a name="l00130"></a>00130 <span class="comment">       * The zone number used for UPS</span>
-<a name="l00131"></a>00131 <span class="comment">       **********************************************************************/</span>
-<a name="l00132"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42">00132</a>       UPS = 0,<span class="comment"></span>
-<a name="l00133"></a>00133 <span class="comment">      /**</span>
-<a name="l00134"></a>00134 <span class="comment">       * The smallest UTM zone number.</span>
-<a name="l00135"></a>00135 <span class="comment">       **********************************************************************/</span>
-<a name="l00136"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a1413e6cc83d4bf1eb4ad1c0f1d745eb6">00136</a>       MINUTMZONE = 1,<span class="comment"></span>
-<a name="l00137"></a>00137 <span class="comment">      /**</span>
-<a name="l00138"></a>00138 <span class="comment">       * The largest UTM zone number.</span>
-<a name="l00139"></a>00139 <span class="comment">       **********************************************************************/</span>
-<a name="l00140"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ae8e04ab8df50a062c1fe277a6880bc19">00140</a>       MAXUTMZONE = 60,<span class="comment"></span>
-<a name="l00141"></a>00141 <span class="comment">      /**</span>
-<a name="l00142"></a>00142 <span class="comment">       * The largest physical zone number.</span>
-<a name="l00143"></a>00143 <span class="comment">       **********************************************************************/</span>
-<a name="l00144"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a">00144</a>       MAXZONE = 60,
-<a name="l00145"></a>00145     };
-<a name="l00146"></a>00146 <span class="comment"></span>
-<a name="l00147"></a>00147 <span class="comment">    /**</span>
-<a name="l00148"></a>00148 <span class="comment">     * The standard zone.</span>
-<a name="l00149"></a>00149 <span class="comment">     *</span>
-<a name="l00150"></a>00150 <span class="comment">     * @param[in] lat latitude (degrees).</span>
-<a name="l00151"></a>00151 <span class="comment">     * @param[in] lon longitude (degrees).</span>
-<a name="l00152"></a>00152 <span class="comment">     * @param[in] setzone zone override (optional).</span>
-<a name="l00153"></a>00153 <span class="comment">     *</span>
-<a name="l00154"></a>00154 <span class="comment">     * This is exact.  If the optional argument \e setzone is given then use</span>
-<a name="l00155"></a>00155 <span class="comment">     * that zone if it is non-negative, otherwise apply the rules given in</span>
-<a name="l00156"></a>00156 <span class="comment">     * UTMUPS::zonespec.  Throws an error if \e setzone is outsize the range</span>
-<a name="l00157"></a>00157 <span class="comment">     * [UTMUPS::MINPSEUDOZONE, UTMUPS::MAXZONE] = [-4, 60].</span>
-<a name="l00158"></a>00158 <span class="comment">     **********************************************************************/</span>
-<a name="l00159"></a>00159     <span class="keyword">static</span> <span class="keywordtype">int</span> StandardZone(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon, <span class="keywordtype">int</span> setzone = STANDARD);
-<a name="l00160"></a>00160 <span class="comment"></span>
-<a name="l00161"></a>00161 <span class="comment">    /**</span>
-<a name="l00162"></a>00162 <span class="comment">     * Forward projection, from geographic to UTM/UPS.</span>
-<a name="l00163"></a>00163 <span class="comment">     *</span>
-<a name="l00164"></a>00164 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
-<a name="l00165"></a>00165 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
-<a name="l00166"></a>00166 <span class="comment">     * @param[out] zone the UTM zone (zero means UPS).</span>
-<a name="l00167"></a>00167 <span class="comment">     * @param[out] northp hemisphere (true means north, false means south).</span>
-<a name="l00168"></a>00168 <span class="comment">     * @param[out] x easting of point (meters).</span>
-<a name="l00169"></a>00169 <span class="comment">     * @param[out] y northing of point (meters).</span>
-<a name="l00170"></a>00170 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00171"></a>00171 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00172"></a>00172 <span class="comment">     * @param[in] setzone zone override.</span>
-<a name="l00173"></a>00173 <span class="comment">     * @param[in] mgrslimits if true enforce the stricter MGRS limits on the</span>
-<a name="l00174"></a>00174 <span class="comment">     *   coordinates (default = false).</span>
-<a name="l00175"></a>00175 <span class="comment">     *</span>
-<a name="l00176"></a>00176 <span class="comment">     * The preferred zone for the result can be specified with \e setzone, see</span>
-<a name="l00177"></a>00177 <span class="comment">     * UTMUPS::StandardZone.  Throw error if the resulting easting or northing</span>
-<a name="l00178"></a>00178 <span class="comment">     * is outside the allowed range (see Reverse), in which case the arguments</span>
-<a name="l00179"></a>00179 <span class="comment">     * are unchanged.  This also returns meridian convergence \e gamma</span>
-<a name="l00180"></a>00180 <span class="comment">     * (degrees) and scale \e k.  The accuracy of the conversion is about 5nm.</span>
-<a name="l00181"></a>00181 <span class="comment">     **********************************************************************/</span>
-<a name="l00182"></a>00182     <span class="keyword">static</span> <span class="keywordtype">void</span> Forward(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lon,
-<a name="l00183"></a>00183                         <span class="keywordtype">int</span>& zone, <span class="keywordtype">bool</span>& northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& y,
-<a name="l00184"></a>00184                         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k,
-<a name="l00185"></a>00185                         <span class="keywordtype">int</span> setzone = STANDARD, <span class="keywordtype">bool</span> mgrslimits = <span class="keyword">false</span>);
-<a name="l00186"></a>00186 <span class="comment"></span>
-<a name="l00187"></a>00187 <span class="comment">    /**</span>
-<a name="l00188"></a>00188 <span class="comment">     * Reverse projection, from  UTM/UPS to geographic.</span>
-<a name="l00189"></a>00189 <span class="comment">     *</span>
-<a name="l00190"></a>00190 <span class="comment">     * @param[in] zone the UTM zone (zero means UPS).</span>
-<a name="l00191"></a>00191 <span class="comment">     * @param[in] northp hemisphere (true means north, false means south).</span>
-<a name="l00192"></a>00192 <span class="comment">     * @param[in] x easting of point (meters).</span>
-<a name="l00193"></a>00193 <span class="comment">     * @param[in] y northing of point (meters).</span>
-<a name="l00194"></a>00194 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
-<a name="l00195"></a>00195 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
-<a name="l00196"></a>00196 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
-<a name="l00197"></a>00197 <span class="comment">     * @param[out] k scale of projection at point.</span>
-<a name="l00198"></a>00198 <span class="comment">     * @param[in] mgrslimits if true enforce the stricter MGRS limits on the</span>
-<a name="l00199"></a>00199 <span class="comment">     *   coordinates (default = false).</span>
-<a name="l00200"></a>00200 <span class="comment">     *</span>
-<a name="l00201"></a>00201 <span class="comment">     * Throw error if easting or northing is outside the allowed range (see</span>
-<a name="l00202"></a>00202 <span class="comment">     * below), in which case the arguments are unchanged.  The accuracy of the</span>
-<a name="l00203"></a>00203 <span class="comment">     * conversion is about 5nm.</span>
-<a name="l00204"></a>00204 <span class="comment">     *</span>
-<a name="l00205"></a>00205 <span class="comment">     * UTM eastings are allowed to be in the range [0km, 1000km], northings are</span>
-<a name="l00206"></a>00206 <span class="comment">     * allowed to be in in [0km, 9600km] for the northern hemisphere and in</span>
-<a name="l00207"></a>00207 <span class="comment">     * [900km, 10000km] for the southern hemisphere.  (However UTM northings</span>
-<a name="l00208"></a>00208 <span class="comment">     * can be continued across the equator.  So the actual limits on the</span>
-<a name="l00209"></a>00209 <span class="comment">     * northings are [-9100km, 9600km] for the "northern" hemisphere and</span>
-<a name="l00210"></a>00210 <span class="comment">     * [900km, 19600km] for the "southern" hemisphere.)</span>
-<a name="l00211"></a>00211 <span class="comment">     *</span>
-<a name="l00212"></a>00212 <span class="comment">     * UPS eastings and northings are allowed to be in the range [1200km,</span>
-<a name="l00213"></a>00213 <span class="comment">     * 2800km] in the northern hemisphere and in [700km, 3100km] in the</span>
-<a name="l00214"></a>00214 <span class="comment">     * southern hemisphere.</span>
-<a name="l00215"></a>00215 <span class="comment">     *</span>
-<a name="l00216"></a>00216 <span class="comment">     * These ranges are 100km larger than allowed for the conversions to MGRS.</span>
-<a name="l00217"></a>00217 <span class="comment">     * (100km is the maximum extra padding consistent with eastings remaining</span>
-<a name="l00218"></a>00218 <span class="comment">     * non-negative.)  This allows generous overlaps between zones and UTM and</span>
-<a name="l00219"></a>00219 <span class="comment">     * UPS.  If \e mgrslimits = true, then all the ranges are shrunk by 100km</span>
-<a name="l00220"></a>00220 <span class="comment">     * so that they agree with the stricter MGRS ranges.  No checks are</span>
-<a name="l00221"></a>00221 <span class="comment">     * performed besides these (e.g., to limit the distance outside the</span>
-<a name="l00222"></a>00222 <span class="comment">     * standard zone boundaries).</span>
-<a name="l00223"></a>00223 <span class="comment">     **********************************************************************/</span>
-<a name="l00224"></a>00224     <span class="keyword">static</span> <span class="keywordtype">void</span> Reverse(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> y,
-<a name="l00225"></a>00225                         <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lat, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& lon, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& gamma, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& k,
-<a name="l00226"></a>00226                         <span class="keywordtype">bool</span> mgrslimits = <span class="keyword">false</span>);
-<a name="l00227"></a>00227 <span class="comment"></span>
-<a name="l00228"></a>00228 <span class="comment">    /**</span>
-<a name="l00229"></a>00229 <span class="comment">     * UTMUPS::Forward without returning convergence and scale.</span>
-<a name="l00230"></a>00230 <span class="comment">     **********************************************************************/</span>
-<a name="l00231"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#aa21ec1bc26f691e0a6f2ccc44debe6f0">00231</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> Forward(real lat, real lon,
-<a name="l00232"></a>00232                         <span class="keywordtype">int</span>& zone, <span class="keywordtype">bool</span>& northp, real& x, real& y,
-<a name="l00233"></a>00233                         <span class="keywordtype">int</span> setzone = STANDARD, <span class="keywordtype">bool</span> mgrslimits = <span class="keyword">false</span>) {
-<a name="l00234"></a>00234       real gamma, k;
-<a name="l00235"></a>00235       Forward(lat, lon, zone, northp, x, y, gamma, k, setzone, mgrslimits);
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237 <span class="comment"></span>
-<a name="l00238"></a>00238 <span class="comment">    /**</span>
-<a name="l00239"></a>00239 <span class="comment">     * UTMUPS::Reverse without returning convergence and scale.</span>
-<a name="l00240"></a>00240 <span class="comment">     **********************************************************************/</span>
-<a name="l00241"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#ac8cbfd7b15c96b52b876b54ce68f7b4d">00241</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> Reverse(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp, real x, real y,
-<a name="l00242"></a>00242                         real& lat, real& lon, <span class="keywordtype">bool</span> mgrslimits = <span class="keyword">false</span>) {
-<a name="l00243"></a>00243       real gamma, k;
-<a name="l00244"></a>00244       Reverse(zone, northp, x, y, lat, lon, gamma, k, mgrslimits);
-<a name="l00245"></a>00245     }
-<a name="l00246"></a>00246 <span class="comment"></span>
-<a name="l00247"></a>00247 <span class="comment">    /**</span>
-<a name="l00248"></a>00248 <span class="comment">     * Decode a UTM/UPS zone string.</span>
-<a name="l00249"></a>00249 <span class="comment">     *</span>
-<a name="l00250"></a>00250 <span class="comment">     * @param[in] zonestr string representation of zone and hemisphere.</span>
-<a name="l00251"></a>00251 <span class="comment">     * @param[out] zone the UTM zone (zero means UPS).</span>
-<a name="l00252"></a>00252 <span class="comment">     * @param[out] northp hemisphere (true means north, false means south).</span>
-<a name="l00253"></a>00253 <span class="comment">     *</span>
-<a name="l00254"></a>00254 <span class="comment">     * For UTM, \e zonestr has the form of a zone number in the range</span>
-<a name="l00255"></a>00255 <span class="comment">     * [UTMUPS::MINUTMZONE, UTMUPS::MAXUTMZONE] = [1, 60] followed by a</span>
-<a name="l00256"></a>00256 <span class="comment">     * hemisphere letter, N or S.  For UPS, it consists just of the hemisphere</span>
-<a name="l00257"></a>00257 <span class="comment">     * letter.  The returned value of \e zone is UTMUPS::UPS = 0 for UPS.  Note</span>
-<a name="l00258"></a>00258 <span class="comment">     * well that "38S" indicates the southern hemisphere of zone 38 and not</span>
-<a name="l00259"></a>00259 <span class="comment">     * latitude band S, [32, 40].  N, 01S, 2N, 38S are legal.  0N, 001S, 61N,</span>
-<a name="l00260"></a>00260 <span class="comment">     * 38P are illegal.  INV is a special value for which the returned value of</span>
-<a name="l00261"></a>00261 <span class="comment">     * \e is UTMUPS::INVALID.  Throws an error is the zone string is malformed.</span>
-<a name="l00262"></a>00262 <span class="comment">     **********************************************************************/</span>
-<a name="l00263"></a>00263     <span class="keyword">static</span> <span class="keywordtype">void</span> DecodeZone(<span class="keyword">const</span> std::string& zonestr, <span class="keywordtype">int</span>& zone, <span class="keywordtype">bool</span>& northp);
-<a name="l00264"></a>00264 <span class="comment"></span>
-<a name="l00265"></a>00265 <span class="comment">    /**</span>
-<a name="l00266"></a>00266 <span class="comment">     * Encode a UTM/UPS zone string.</span>
-<a name="l00267"></a>00267 <span class="comment">     *</span>
-<a name="l00268"></a>00268 <span class="comment">     * @param[out] zone the UTM zone (zero means UPS).</span>
-<a name="l00269"></a>00269 <span class="comment">     * @param[out] northp hemisphere (true means north, false means south).</span>
-<a name="l00270"></a>00270 <span class="comment">     * @return string representation of zone and hemisphere.</span>
-<a name="l00271"></a>00271 <span class="comment">     *</span>
-<a name="l00272"></a>00272 <span class="comment">     * \e zone must be in the range [UTMUPS::MINZONE, UTMUPS::MAXZONE] = [0,</span>
-<a name="l00273"></a>00273 <span class="comment">     * 60] with \e zone = UTMUPS::UPS, 0, indicating UPS (but the resulting</span>
-<a name="l00274"></a>00274 <span class="comment">     * string does not contain "0").  \e zone may also be UTMUPS::INVALID, in</span>
-<a name="l00275"></a>00275 <span class="comment">     * which case the returned string is "INV".  This reverses</span>
-<a name="l00276"></a>00276 <span class="comment">     * UTMUPS::DecodeZone.</span>
-<a name="l00277"></a>00277 <span class="comment">     **********************************************************************/</span>
-<a name="l00278"></a>00278     <span class="keyword">static</span> std::string EncodeZone(<span class="keywordtype">int</span> zone, <span class="keywordtype">bool</span> northp);
-<a name="l00279"></a>00279 <span class="comment"></span>
-<a name="l00280"></a>00280 <span class="comment">    /**</span>
-<a name="l00281"></a>00281 <span class="comment">     * @return shift (meters) necessary to align N and S halves of a UTM zone</span>
-<a name="l00282"></a>00282 <span class="comment">     * (10<sup>7</sup>).</span>
-<a name="l00283"></a>00283 <span class="comment">     **********************************************************************/</span>
-<a name="l00284"></a>00284     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> UTMShift() throw();
-<a name="l00285"></a>00285 <span class="comment"></span>
-<a name="l00286"></a>00286 <span class="comment">    /** \name Inspector functions</span>
-<a name="l00287"></a>00287 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
-<a name="l00288"></a>00288 <span class="comment">    ///@{</span>
-<a name="l00289"></a>00289 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00290"></a>00290 <span class="comment">     * @return \e a the equatorial radius of the WGS84 ellipsoid (meters).</span>
-<a name="l00291"></a>00291 <span class="comment">     *</span>
-<a name="l00292"></a>00292 <span class="comment">     * (The WGS84 value is returned because the UTM and UPS projections are</span>
-<a name="l00293"></a>00293 <span class="comment">     * based on this ellipsoid.)</span>
-<a name="l00294"></a>00294 <span class="comment">     **********************************************************************/</span>
-<a name="l00295"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a293aa30508096d49db77a23917ea1092">00295</a>     static <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real MajorRadius() throw()
-<a name="l00296"></a>00296     { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<real>(); }
-<a name="l00297"></a>00297 <span class="comment"></span>
-<a name="l00298"></a>00298 <span class="comment">    /**</span>
-<a name="l00299"></a>00299 <span class="comment">     * @return \e f the flattening of the WGS84 ellipsoid.</span>
-<a name="l00300"></a>00300 <span class="comment">     *</span>
-<a name="l00301"></a>00301 <span class="comment">     * (The WGS84 value is returned because the UTM and UPS projections are</span>
-<a name="l00302"></a>00302 <span class="comment">     * based on this ellipsoid.)</span>
-<a name="l00303"></a>00303 <span class="comment">     **********************************************************************/</span>
-<a name="l00304"></a><a class="code" href="classGeographicLib_1_1UTMUPS.html#a182de2e29f1181c55a266777039b8a9d">00304</a>     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::real Flattening() throw()
-<a name="l00305"></a>00305     { <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_f<real>(); }<span class="comment"></span>
-<a name="l00306"></a>00306 <span class="comment">    ///@}</span>
-<a name="l00307"></a>00307 <span class="comment"></span><span class="comment"></span>
-<a name="l00308"></a>00308 <span class="comment">    /// \cond SKIP</span>
-<a name="l00309"></a>00309 <span class="comment"></span><span class="comment">    /**</span>
-<a name="l00310"></a>00310 <span class="comment">     * <b>DEPRECATED</b></span>
-<a name="l00311"></a>00311 <span class="comment">     * @return \e r the inverse flattening of the WGS84 ellipsoid.</span>
-<a name="l00312"></a>00312 <span class="comment">     **********************************************************************/</span>
-<a name="l00313"></a>00313     <span class="keyword">static</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a><a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">::real</a> InverseFlattening() throw()
-<a name="l00314"></a>00314     { <span class="keywordflow">return</span> 1/<a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_f<real>(); }<span class="comment"></span>
-<a name="l00315"></a>00315 <span class="comment">    /// \endcond</span>
-<a name="l00316"></a>00316 <span class="comment"></span>  };
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320 <span class="preprocessor">#endif  // GEOGRAPHICLIB_UTMUPS_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Utility_8cpp.html b/doc/html/Utility_8cpp.html
deleted file mode 100644
index 1ed907d..0000000
--- a/doc/html/Utility_8cpp.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Utility.cpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Utility.cpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Implementation for <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code><br/>
-</div>
-<p><a href="Utility_8cpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Utility_8cpp.html#a572751ca8465c95b9e157dc20175f6bc">GEOGRAPHICLIB_UTILITY_CPP</a>   "$Id: 6f06d5d8fa9d731dc5a5fa4516838f639a2ba40b $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Implementation for <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a> class. </p>
-<p>Copyright (c) Charles Karney (2011) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Utility_8cpp_source.html">Utility.cpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="a572751ca8465c95b9e157dc20175f6bc"></a><!-- doxytag: member="Utility.cpp::GEOGRAPHICLIB_UTILITY_CPP" ref="a572751ca8465c95b9e157dc20175f6bc" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_UTILITY_CPP   "$Id: 6f06d5d8fa9d731dc5a5fa4516838f639a2ba40b $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Utility_8cpp_source.html#l00012">12</a> of file <a class="el" href="Utility_8cpp_source.html">Utility.cpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Utility_8cpp_source.html b/doc/html/Utility_8cpp_source.html
deleted file mode 100644
index e996271..0000000
--- a/doc/html/Utility_8cpp_source.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Utility.cpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Utility.cpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Utility_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Utility.cpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Implementation for GeographicLib::Utility class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under</span>
-<a name="l00006"></a>00006 <span class="comment"> * the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-<a name="l00011"></a>00011 
-<a name="l00012"></a><a class="code" href="Utility_8cpp.html#a572751ca8465c95b9e157dc20175f6bc">00012</a> <span class="preprocessor">#define GEOGRAPHICLIB_UTILITY_CPP \</span>
-<a name="l00013"></a>00013 <span class="preprocessor">  "$Id: 6f06d5d8fa9d731dc5a5fa4516838f639a2ba40b $"</span>
-<a name="l00014"></a>00014 <span class="preprocessor"></span>
-<a name="l00015"></a>00015 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Utility_8cpp.html#a572751ca8465c95b9e157dc20175f6bc">GEOGRAPHICLIB_UTILITY_CPP</a>)
-<a name="l00016"></a>00016 <a class="code" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">RCSID_DECL</a>(<a class="code" href="Utility_8hpp.html#aba45651243cd7449a073dd2c8b11a88a">GEOGRAPHICLIB_UTILITY_HPP</a>)
-<a name="l00017"></a>00017 
-<a name="l00018"></a>00018 namespace GeographicLib {
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020   <span class="keyword">using namespace </span>std;
-<a name="l00021"></a>00021 
-<a name="l00022"></a><a class="code" href="classGeographicLib_1_1Utility.html#a96252f445a912b77517bff04d4d6ea74">00022</a>   <span class="keywordtype">bool</span> Utility::ParseLine(<span class="keyword">const</span> std::string& line,
-<a name="l00023"></a>00023                           std::string& key, std::string& val) {
-<a name="l00024"></a>00024     <span class="keyword">const</span> <span class="keywordtype">char</span>* spaces = <span class="stringliteral">" \t\n\v\f\r"</span>;
-<a name="l00025"></a>00025     <span class="keywordtype">string</span>::size_type n0 = line.find_first_not_of(spaces);
-<a name="l00026"></a>00026     <span class="keywordflow">if</span> (n0 == string::npos)
-<a name="l00027"></a>00027       <span class="keywordflow">return</span> <span class="keyword">false</span>;             <span class="comment">// Blank line</span>
-<a name="l00028"></a>00028     <span class="keywordtype">string</span>::size_type n1 = line.find_first_of(<span class="charliteral">'#'</span>, n0);
-<a name="l00029"></a>00029     <span class="keywordflow">if</span> (n0 == n1)
-<a name="l00030"></a>00030       <span class="keywordflow">return</span> <span class="keyword">false</span>;             <span class="comment">// Only a comment</span>
-<a name="l00031"></a>00031     val = line.substr(n0, n1 == string::npos ? n1 : n1 - n0);
-<a name="l00032"></a>00032     n0 = val.find_first_of(spaces);
-<a name="l00033"></a>00033     key = val.substr(0, n0);
-<a name="l00034"></a>00034     <span class="keywordflow">if</span> (n0 == string::npos) {
-<a name="l00035"></a>00035       val = <span class="stringliteral">""</span>;
-<a name="l00036"></a>00036       <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00037"></a>00037     }
-<a name="l00038"></a>00038     n0 = val.find_first_not_of(spaces, n0);
-<a name="l00039"></a>00039     <span class="keywordflow">if</span> (n0 == string::npos) {
-<a name="l00040"></a>00040       val = <span class="stringliteral">""</span>;
-<a name="l00041"></a>00041       <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00042"></a>00042     }
-<a name="l00043"></a>00043     n1 = val.find_last_not_of(spaces);
-<a name="l00044"></a>00044     val = val.substr(n0, n1 + 1 - n0);
-<a name="l00045"></a>00045     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00046"></a>00046   }
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 } <span class="comment">// namespace GeographicLib</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Utility_8hpp.html b/doc/html/Utility_8hpp.html
deleted file mode 100644
index 5cd5ed6..0000000
--- a/doc/html/Utility_8hpp.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Utility.hpp File Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#namespaces">Namespaces</a> |
-<a href="#define-members">Defines</a>  </div>
-  <div class="headertitle">
-<div class="title">Utility.hpp File Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Header for <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a> class.  
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code><br/>
-<code>#include <iomanip></code><br/>
-<code>#include <vector></code><br/>
-<code>#include <string></code><br/>
-<code>#include <sstream></code><br/>
-<code>#include <algorithm></code><br/>
-<code>#include <cctype></code><br/>
-</div>
-<p><a href="Utility_8hpp_source.html">Go to the source code of this file.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Some utility routines for GeographicLib.  <a href="classGeographicLib_1_1Utility.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="namespaces"></a>
-Namespaces</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Namespace for GeographicLib. </p>
-<br/></td></tr>
-<tr><td colspan="2"><h2><a name="define-members"></a>
-Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Utility_8hpp.html#aba45651243cd7449a073dd2c8b11a88a">GEOGRAPHICLIB_UTILITY_HPP</a>   "$Id: 92c92fcb8ea92116fed01909c2611934b708e4cd $"</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Header for <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a> class. </p>
-<p>Copyright (c) Charles Karney (2011, 2012) <<a href="mailto:charles at karney.com">charles at karney.com</a>> and licensed under the MIT/X11 License. For more information, see <a href="http://geographiclib.sourceforge.net/">http://geographiclib.sourceforge.net/</a> </p>
-
-<p>Definition in file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-</div><hr/><h2>Define Documentation</h2>
-<a class="anchor" id="aba45651243cd7449a073dd2c8b11a88a"></a><!-- doxytag: member="Utility.hpp::GEOGRAPHICLIB_UTILITY_HPP" ref="aba45651243cd7449a073dd2c8b11a88a" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">#define GEOGRAPHICLIB_UTILITY_HPP   "$Id: 92c92fcb8ea92116fed01909c2611934b708e4cd $"</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00011">11</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/Utility_8hpp_source.html b/doc/html/Utility_8hpp_source.html
deleted file mode 100644
index 26af483..0000000
--- a/doc/html/Utility_8hpp_source.html
+++ /dev/null
@@ -1,578 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Utility.hpp Source File</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Utility.hpp</div>  </div>
-</div>
-<div class="contents">
-<a href="Utility_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
-<a name="l00002"></a>00002 <span class="comment"> * \file Utility.hpp</span>
-<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::Utility class</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed</span>
-<a name="l00006"></a>00006 <span class="comment"> * under the MIT/X11 License.  For more information, see</span>
-<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
-<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
-<a name="l00009"></a>00009 
-<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_UTILITY_HPP)</span>
-<a name="l00011"></a><a class="code" href="Utility_8hpp.html#aba45651243cd7449a073dd2c8b11a88a">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_UTILITY_HPP \</span>
-<a name="l00012"></a>00012 <span class="preprocessor">  "$Id: 92c92fcb8ea92116fed01909c2611934b708e4cd $"</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span>
-<a name="l00014"></a>00014 <span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-<a name="l00015"></a>00015 <span class="preprocessor">#include <iomanip></span>
-<a name="l00016"></a>00016 <span class="preprocessor">#include <vector></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#include <string></span>
-<a name="l00018"></a>00018 <span class="preprocessor">#include <sstream></span>
-<a name="l00019"></a>00019 <span class="preprocessor">#include <algorithm></span>
-<a name="l00020"></a>00020 <span class="preprocessor">#include <cctype></span>
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="keyword">namespace </span>GeographicLib {
-<a name="l00023"></a>00023 <span class="comment"></span>
-<a name="l00024"></a>00024 <span class="comment">  /**</span>
-<a name="l00025"></a>00025 <span class="comment">   * \brief Some utility routines for %GeographicLib</span>
-<a name="l00026"></a>00026 <span class="comment">   *</span>
-<a name="l00027"></a>00027 <span class="comment">   * Example of use:</span>
-<a name="l00028"></a>00028 <span class="comment">   * \include example-Utility.cpp</span>
-<a name="l00029"></a>00029 <span class="comment">   **********************************************************************/</span>
-<a name="l00030"></a>00030   <span class="keyword">class </span><a class="code" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">GEOGRAPHIC_EXPORT</a> Utility {
-<a name="l00031"></a>00031   <span class="keyword">private</span>:
-<a name="l00032"></a>00032     <span class="keyword">static</span> <span class="keywordtype">bool</span> gregorian(<span class="keywordtype">int</span> y, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> d) {
-<a name="l00033"></a>00033       <span class="comment">// The original cut over to the Gregorian calendar in Pope Gregory XIII's</span>
-<a name="l00034"></a>00034       <span class="comment">// time had 1582-10-04 followed by 1582-10-15. Here we implement the</span>
-<a name="l00035"></a>00035       <span class="comment">// switch over used by the English-speaking world where 1752-09-02 was</span>
-<a name="l00036"></a>00036       <span class="comment">// followed by 1752-09-14. We also assume that the year always begins</span>
-<a name="l00037"></a>00037       <span class="comment">// with January 1, whereas in reality it often was reckoned to begin in</span>
-<a name="l00038"></a>00038       <span class="comment">// March.</span>
-<a name="l00039"></a>00039       <span class="keywordflow">return</span> 100 * (100 * y + m) + d >= 17520914; <span class="comment">// or 15821004</span>
-<a name="l00040"></a>00040     }
-<a name="l00041"></a>00041     <span class="keyword">static</span> <span class="keywordtype">bool</span> gregorian(<span class="keywordtype">int</span> s) {
-<a name="l00042"></a>00042       <span class="keywordflow">return</span> s >= 639799;       <span class="comment">// 1752-09-14</span>
-<a name="l00043"></a>00043     }
-<a name="l00044"></a>00044   <span class="keyword">public</span>:
-<a name="l00045"></a>00045 <span class="comment"></span>
-<a name="l00046"></a>00046 <span class="comment">    /**</span>
-<a name="l00047"></a>00047 <span class="comment">     * Convert a date to the day numbering sequentially starting with</span>
-<a name="l00048"></a>00048 <span class="comment">     * 0001-01-01 as day 1.</span>
-<a name="l00049"></a>00049 <span class="comment">     *</span>
-<a name="l00050"></a>00050 <span class="comment">     * @param[in] y the year (must be positive).</span>
-<a name="l00051"></a>00051 <span class="comment">     * @param[in] m the month, Jan = 1, etc. (must be positive).  Default = 1.</span>
-<a name="l00052"></a>00052 <span class="comment">     * @param[in] d the day of the month (must be positive).  Default = 1.</span>
-<a name="l00053"></a>00053 <span class="comment">     * @return the sequential day number.</span>
-<a name="l00054"></a>00054 <span class="comment">     **********************************************************************/</span>
-<a name="l00055"></a><a class="code" href="classGeographicLib_1_1Utility.html#a877a58000a56bc84c354cf42b4b1cd99">00055</a>     <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1Utility.html#a877a58000a56bc84c354cf42b4b1cd99">day</a>(<span class="keywordtype">int</span> y, <span class="keywordtype">int</span> m = 1, <span class="keywordtype">int</span> d = 1) throw() {
-<a name="l00056"></a>00056       <span class="comment">// Convert from date to sequential day and vice versa</span>
-<a name="l00057"></a>00057       <span class="comment">//</span>
-<a name="l00058"></a>00058       <span class="comment">// Here is some code to convert a date to sequential day and vice</span>
-<a name="l00059"></a>00059       <span class="comment">// versa. The sequential day is numbered so that January 1, 1 AD is day 1</span>
-<a name="l00060"></a>00060       <span class="comment">// (a Saturday). So this is offset from the "Julian" day which starts the</span>
-<a name="l00061"></a>00061       <span class="comment">// numbering with 4713 BC.</span>
-<a name="l00062"></a>00062       <span class="comment">//</span>
-<a name="l00063"></a>00063       <span class="comment">// This is inspired by a talk by John Conway at the John von Neumann</span>
-<a name="l00064"></a>00064       <span class="comment">// National Supercomputer Center when he described his Doomsday algorithm</span>
-<a name="l00065"></a>00065       <span class="comment">// for figuring the day of the week. The code avoids explicitly doing ifs</span>
-<a name="l00066"></a>00066       <span class="comment">// (except for the decision of whether to use the Julian or Gregorian</span>
-<a name="l00067"></a>00067       <span class="comment">// calendar). Instead the equivalent result is achieved using integer</span>
-<a name="l00068"></a>00068       <span class="comment">// arithmetic. I got this idea from the routine for the day of the week</span>
-<a name="l00069"></a>00069       <span class="comment">// in MACLisp (I believe that that routine was written by Guy Steele).</span>
-<a name="l00070"></a>00070       <span class="comment">//</span>
-<a name="l00071"></a>00071       <span class="comment">// There are three issues to take care of</span>
-<a name="l00072"></a>00072       <span class="comment">//</span>
-<a name="l00073"></a>00073       <span class="comment">// 1. the rules for leap years,</span>
-<a name="l00074"></a>00074       <span class="comment">// 2. the inconvenient placement of leap days at the end of February,</span>
-<a name="l00075"></a>00075       <span class="comment">// 3. the irregular pattern of month lengths.</span>
-<a name="l00076"></a>00076       <span class="comment">//</span>
-<a name="l00077"></a>00077       <span class="comment">// We deal with these as follows:</span>
-<a name="l00078"></a>00078       <span class="comment">//</span>
-<a name="l00079"></a>00079       <span class="comment">// 1. Leap years are given by simple rules which are straightforward to</span>
-<a name="l00080"></a>00080       <span class="comment">// accommodate.</span>
-<a name="l00081"></a>00081       <span class="comment">//</span>
-<a name="l00082"></a>00082       <span class="comment">// 2. We simplify the calculations by moving January and February to the</span>
-<a name="l00083"></a>00083       <span class="comment">// previous year. Here we internally number the months March–December,</span>
-<a name="l00084"></a>00084       <span class="comment">// January, February as 0–9, 10, 11.</span>
-<a name="l00085"></a>00085       <span class="comment">//</span>
-<a name="l00086"></a>00086       <span class="comment">// 3. The pattern of month lengths from March through January is regular</span>
-<a name="l00087"></a>00087       <span class="comment">// with a 5-month period—31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31. The</span>
-<a name="l00088"></a>00088       <span class="comment">// 5-month period is 153 days long. Since February is now at the end of</span>
-<a name="l00089"></a>00089       <span class="comment">// the year, we don't need to include its length in this part of the</span>
-<a name="l00090"></a>00090       <span class="comment">// calculation.</span>
-<a name="l00091"></a>00091       <span class="keywordtype">bool</span> greg = gregorian(y, m, d);
-<a name="l00092"></a>00092       y += (m + 9) / 12 - 1; <span class="comment">// Move Jan and Feb to previous year,</span>
-<a name="l00093"></a>00093       m = (m + 9) % 12;      <span class="comment">// making March month 0.</span>
-<a name="l00094"></a>00094       <span class="keywordflow">return</span>
-<a name="l00095"></a>00095         (1461 * y) / 4 <span class="comment">// Julian years converted to days.  Julian year is 365 +</span>
-<a name="l00096"></a>00096                        <span class="comment">// 1/4 = 1461/4 days.</span>
-<a name="l00097"></a>00097         <span class="comment">// Gregorian leap year corrections.  The 2 offset with respect to the</span>
-<a name="l00098"></a>00098         <span class="comment">// Julian calendar synchronizes the vernal equinox with that at the time</span>
-<a name="l00099"></a>00099         <span class="comment">// of the Council of Nicea (325 AD).</span>
-<a name="l00100"></a>00100         + (greg ? (y / 100) / 4 - (y / 100) + 2 : 0)
-<a name="l00101"></a>00101         + (153 * m + 2) / 5     <span class="comment">// The zero-based start of the m'th month</span>
-<a name="l00102"></a>00102         + d - 1                 <span class="comment">// The zero-based day</span>
-<a name="l00103"></a>00103         - 305; <span class="comment">// The number of days between March 1 and December 31.</span>
-<a name="l00104"></a>00104                <span class="comment">// This makes 0001-01-01 day 1</span>
-<a name="l00105"></a>00105     }
-<a name="l00106"></a>00106 <span class="comment"></span>
-<a name="l00107"></a>00107 <span class="comment">    /**</span>
-<a name="l00108"></a>00108 <span class="comment">     * Convert a date to the day numbering sequentially starting with</span>
-<a name="l00109"></a>00109 <span class="comment">     * 0001-01-01 as day 1.</span>
-<a name="l00110"></a>00110 <span class="comment">     *</span>
-<a name="l00111"></a>00111 <span class="comment">     * @param[in] y the year (must be positive).</span>
-<a name="l00112"></a>00112 <span class="comment">     * @param[in] m the month, Jan = 1, etc. (must be positive).  Default = 1.</span>
-<a name="l00113"></a>00113 <span class="comment">     * @param[in] d the day of the month (must be positive).  Default = 1.</span>
-<a name="l00114"></a>00114 <span class="comment">     * @param[in] check whether to check the date.</span>
-<a name="l00115"></a>00115 <span class="comment">     * @return the sequential day number.</span>
-<a name="l00116"></a>00116 <span class="comment">     *</span>
-<a name="l00117"></a>00117 <span class="comment">     * If \e check is true and the date is invalid an exception is thrown.</span>
-<a name="l00118"></a>00118 <span class="comment">     **********************************************************************/</span>
-<a name="l00119"></a><a class="code" href="classGeographicLib_1_1Utility.html#a0590e044fe0352adc10a58c46fa1e529">00119</a>     <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1Utility.html#a0590e044fe0352adc10a58c46fa1e529">day</a>(<span class="keywordtype">int</span> y, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> d, <span class="keywordtype">bool</span> check) {
-<a name="l00120"></a>00120       <span class="keywordtype">int</span> s = day(y, m, d);
-<a name="l00121"></a>00121       <span class="keywordflow">if</span> (!check)
-<a name="l00122"></a>00122         <span class="keywordflow">return</span> s;
-<a name="l00123"></a>00123       <span class="keywordtype">int</span> y1, m1, d1;
-<a name="l00124"></a>00124       date(s, y1, m1, d1);
-<a name="l00125"></a>00125       <span class="keywordflow">if</span> (!(s > 0 && y == y1 && m == m1 && d == d1))
-<a name="l00126"></a>00126         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Invalid date "</span> +
-<a name="l00127"></a>00127                             str(y) + <span class="stringliteral">"-"</span> + str(m) + <span class="stringliteral">"-"</span> + str(d)
-<a name="l00128"></a>00128                             + (s > 0 ? <span class="stringliteral">"; use "</span> +
-<a name="l00129"></a>00129                                str(y1) + <span class="stringliteral">"-"</span> + str(m1) + <span class="stringliteral">"-"</span> + str(d1) :
-<a name="l00130"></a>00130                                <span class="stringliteral">" before 0001-01-01"</span>));
-<a name="l00131"></a>00131       <span class="keywordflow">return</span> s;
-<a name="l00132"></a>00132     }
-<a name="l00133"></a>00133 <span class="comment"></span>
-<a name="l00134"></a>00134 <span class="comment">    /**</span>
-<a name="l00135"></a>00135 <span class="comment">     * Given a day (counting from 0001-01-01 as day 1), return the date.</span>
-<a name="l00136"></a>00136 <span class="comment">     *</span>
-<a name="l00137"></a>00137 <span class="comment">     * @param[in] s the sequential day number (must be positive)</span>
-<a name="l00138"></a>00138 <span class="comment">     * @param[out] y the year.</span>
-<a name="l00139"></a>00139 <span class="comment">     * @param[out] m the month, Jan = 1, etc.</span>
-<a name="l00140"></a>00140 <span class="comment">     * @param[out] d the day of the month.</span>
-<a name="l00141"></a>00141 <span class="comment">     **********************************************************************/</span>
-<a name="l00142"></a><a class="code" href="classGeographicLib_1_1Utility.html#aa6955e745deebb79795b12ab139798e0">00142</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1Utility.html#aa6955e745deebb79795b12ab139798e0">date</a>(<span class="keywordtype">int</span> s, <span class="keywordtype">int</span>& y, <span class="keywordtype">int</span>& m, <span class="keywordtype">int</span>& d) <span class="ke [...]
-<a name="l00143"></a>00143       <span class="keywordtype">int</span> c = 0;
-<a name="l00144"></a>00144       <span class="keywordtype">bool</span> greg = gregorian(s);
-<a name="l00145"></a>00145       s += 305;                 <span class="comment">// s = 0 on March 1, 1BC</span>
-<a name="l00146"></a>00146       <span class="keywordflow">if</span> (greg) {
-<a name="l00147"></a>00147         s -= 2;                 <span class="comment">// The 2 day Gregorian offset</span>
-<a name="l00148"></a>00148         <span class="comment">// Determine century with the Gregorian rules for leap years.  The</span>
-<a name="l00149"></a>00149         <span class="comment">// Gregorian year is 365 + 1/4 - 1/100 + 1/400 = 146097/400 days.</span>
-<a name="l00150"></a>00150         c = (4 * s + 3) / 146097;
-<a name="l00151"></a>00151         s -= (c * 146097) / 4;  <span class="comment">// s = 0 at beginning of century</span>
-<a name="l00152"></a>00152       }
-<a name="l00153"></a>00153       y = (4 * s + 3) / 1461;   <span class="comment">// Determine the year using Julian rules.</span>
-<a name="l00154"></a>00154       s -= (1461 * y) / 4;      <span class="comment">// s = 0 at start of year, i.e., March 1</span>
-<a name="l00155"></a>00155       y += c * 100;             <span class="comment">// Assemble full year</span>
-<a name="l00156"></a>00156       m = (5 * s + 2) / 153;    <span class="comment">// Determine the month</span>
-<a name="l00157"></a>00157       s -= (153 * m + 2) / 5;   <span class="comment">// s = 0 at beginning of month</span>
-<a name="l00158"></a>00158       d = s + 1;                <span class="comment">// Determine day of month</span>
-<a name="l00159"></a>00159       y += (m + 2) / 12;        <span class="comment">// Move Jan and Feb back to original year</span>
-<a name="l00160"></a>00160       m = (m + 2) % 12 + 1;     <span class="comment">// Renumber the months so January = 1</span>
-<a name="l00161"></a>00161     }
-<a name="l00162"></a>00162 <span class="comment"></span>
-<a name="l00163"></a>00163 <span class="comment">    /**</span>
-<a name="l00164"></a>00164 <span class="comment">     * Given a date as a string in the format yyyy, yyyy-mm, or yyyy-mm-dd,</span>
-<a name="l00165"></a>00165 <span class="comment">     * return the numeric values for the year, month, and day.  No checking is</span>
-<a name="l00166"></a>00166 <span class="comment">     * done on these values.</span>
-<a name="l00167"></a>00167 <span class="comment">     *</span>
-<a name="l00168"></a>00168 <span class="comment">     * @param[in] s the date in string format.</span>
-<a name="l00169"></a>00169 <span class="comment">     * @param[out] y the year.</span>
-<a name="l00170"></a>00170 <span class="comment">     * @param[out] m the month, Jan = 1, etc.</span>
-<a name="l00171"></a>00171 <span class="comment">     * @param[out] d the day of the month.</span>
-<a name="l00172"></a>00172 <span class="comment">     **********************************************************************/</span>
-<a name="l00173"></a><a class="code" href="classGeographicLib_1_1Utility.html#a3b62cb71f8b7cafd49c1bf3389298525">00173</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1Utility.html#a3b62cb71f8b7cafd49c1bf3389298525">date</a>(<span class="keyword">const</span> std::string& s, <span class="keywordtype">int</span>& y, <span class="keywordtype">int</span>& m, <span class="keywordtype">int</span>& d) {
-<a name="l00174"></a>00174       <span class="keywordtype">int</span> y1, m1 = 1, d1 = 1;
-<a name="l00175"></a>00175       <span class="keyword">const</span> <span class="keywordtype">char</span>* digits = <span class="stringliteral">"0123456789"</span>;
-<a name="l00176"></a>00176       std::string::size_type p1 = s.find_first_not_of(digits);
-<a name="l00177"></a>00177       <span class="keywordflow">if</span> (p1 == std::string::npos)
-<a name="l00178"></a>00178         y1 = num<int>(s);
-<a name="l00179"></a>00179       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (s[p1] != <span class="charliteral">'-'</span>)
-<a name="l00180"></a>00180         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Delimiter not hyphen in date "</span> + s);
-<a name="l00181"></a>00181       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p1 == 0)
-<a name="l00182"></a>00182         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Empty year field in date "</span> + s);
-<a name="l00183"></a>00183       <span class="keywordflow">else</span> {
-<a name="l00184"></a>00184         y1 = num<int>(s.substr(0, p1));
-<a name="l00185"></a>00185         <span class="keywordflow">if</span> (++p1 == s.size())
-<a name="l00186"></a>00186           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Empty month field in date "</span> + s);
-<a name="l00187"></a>00187         std::string::size_type p2 = s.find_first_not_of(digits, p1);
-<a name="l00188"></a>00188         <span class="keywordflow">if</span> (p2 == std::string::npos)
-<a name="l00189"></a>00189           m1 = num<int>(s.substr(p1));
-<a name="l00190"></a>00190         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (s[p2] != <span class="charliteral">'-'</span>)
-<a name="l00191"></a>00191           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Delimiter not hyphen in date "</span> + s);
-<a name="l00192"></a>00192         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p2 == p1)
-<a name="l00193"></a>00193           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Empty month field in date "</span> + s);
-<a name="l00194"></a>00194         <span class="keywordflow">else</span> {
-<a name="l00195"></a>00195           m1 = num<int>(s.substr(p1, p2 - p1));
-<a name="l00196"></a>00196           <span class="keywordflow">if</span> (++p2 == s.size())
-<a name="l00197"></a>00197             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Empty day field in date "</span> + s);
-<a name="l00198"></a>00198           d1 = num<int>(s.substr(p2));
-<a name="l00199"></a>00199         }
-<a name="l00200"></a>00200       }
-<a name="l00201"></a>00201       y = y1; m = m1; d = d1;
-<a name="l00202"></a>00202     }
-<a name="l00203"></a>00203 <span class="comment"></span>
-<a name="l00204"></a>00204 <span class="comment">    /**</span>
-<a name="l00205"></a>00205 <span class="comment">     * Given the date, return the day of the week.</span>
-<a name="l00206"></a>00206 <span class="comment">     *</span>
-<a name="l00207"></a>00207 <span class="comment">     * @param[in] y the year (must be positive).</span>
-<a name="l00208"></a>00208 <span class="comment">     * @param[in] m the month, Jan = 1, etc. (must be positive).</span>
-<a name="l00209"></a>00209 <span class="comment">     * @param[in] d the day of the month (must be positive).</span>
-<a name="l00210"></a>00210 <span class="comment">     * @return the day of the week with Sunday, Monday - Saturday = 0, 1 - 6.</span>
-<a name="l00211"></a>00211 <span class="comment">     **********************************************************************/</span>
-<a name="l00212"></a><a class="code" href="classGeographicLib_1_1Utility.html#a42a6f8679c068dcb06f1da26aa21dfb1">00212</a>     <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1Utility.html#a42a6f8679c068dcb06f1da26aa21dfb1">dow</a>(<span class="keywordtype">int</span> y, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> d) <span class="keywordflow">throw</span>() { <span class="keywordflow">ret [...]
-<a name="l00213"></a>00213 <span class="comment"></span>
-<a name="l00214"></a>00214 <span class="comment">    /**</span>
-<a name="l00215"></a>00215 <span class="comment">     * Given the sequential day, return the day of the week.</span>
-<a name="l00216"></a>00216 <span class="comment">     *</span>
-<a name="l00217"></a>00217 <span class="comment">     * @param[in] s the sequential day (must be positive).</span>
-<a name="l00218"></a>00218 <span class="comment">     * @return the day of the week with Sunday, Monday - Saturday = 0, 1 - 6.</span>
-<a name="l00219"></a>00219 <span class="comment">     **********************************************************************/</span>
-<a name="l00220"></a><a class="code" href="classGeographicLib_1_1Utility.html#a4687c34e55dc7ccc135e31a72402f008">00220</a>     <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1Utility.html#a4687c34e55dc7ccc135e31a72402f008">dow</a>(<span class="keywordtype">int</span> s) <span class="keywordflow">throw</span>() {
-<a name="l00221"></a>00221       <span class="keywordflow">return</span> (s + 5) % 7;  <span class="comment">// The 5 offset makes day 1 (0001-01-01) a Saturday.</span>
-<a name="l00222"></a>00222     }
-<a name="l00223"></a>00223 <span class="comment"></span>
-<a name="l00224"></a>00224 <span class="comment">    /**</span>
-<a name="l00225"></a>00225 <span class="comment">     * Convert a string representing a date to a fractional year.</span>
-<a name="l00226"></a>00226 <span class="comment">     *</span>
-<a name="l00227"></a>00227 <span class="comment">     * @tparam T the type of the argument.</span>
-<a name="l00228"></a>00228 <span class="comment">     * @param[in] s the string to be converted.</span>
-<a name="l00229"></a>00229 <span class="comment">     * @return the fractional year.</span>
-<a name="l00230"></a>00230 <span class="comment">     *</span>
-<a name="l00231"></a>00231 <span class="comment">     * The string is first read as an ordinary number (e.g., 2010 or 2012.5);</span>
-<a name="l00232"></a>00232 <span class="comment">     * if this is successful, the value is returned.  Otherwise the string</span>
-<a name="l00233"></a>00233 <span class="comment">     * should be of the form yyyy-mm or yyyy-mm-dd and this is converted to a</span>
-<a name="l00234"></a>00234 <span class="comment">     * number with 2010-01-01 giving 2010.0 and 2012-07-03 giving 2012.5.</span>
-<a name="l00235"></a>00235 <span class="comment">     **********************************************************************/</span>
-<a name="l00236"></a><a class="code" href="classGeographicLib_1_1Utility.html#a074607cb34326b7109532c8fdd07e38c">00236</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> T <a class="code" href="classGeographicLib_1_1Utility.html#a074607cb34326b7109532c8fdd07e38c">fractionalyear</a>(<span class="keyword">const</span> std::string& s) {
-<a name="l00237"></a>00237       <span class="keywordflow">try</span> {
-<a name="l00238"></a>00238         <span class="keywordflow">return</span> num<T>(s);
-<a name="l00239"></a>00239       }
-<a name="l00240"></a>00240       <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&) {
-<a name="l00241"></a>00241       }
-<a name="l00242"></a>00242       <span class="keywordtype">int</span> y, m, d;
-<a name="l00243"></a>00243       date(s, y, m, d);
-<a name="l00244"></a>00244       <span class="keywordtype">int</span> t = day(y, m, d, <span class="keyword">true</span>);
-<a name="l00245"></a>00245       <span class="keywordflow">return</span> T(y) + T(t - day(y)) / T(day(y + 1) - day(y));
-<a name="l00246"></a>00246     }
-<a name="l00247"></a>00247 <span class="comment"></span>
-<a name="l00248"></a>00248 <span class="comment">    /**</span>
-<a name="l00249"></a>00249 <span class="comment">     * Convert a object of type T to a string.</span>
-<a name="l00250"></a>00250 <span class="comment">     *</span>
-<a name="l00251"></a>00251 <span class="comment">     * @tparam T the type of the argument.</span>
-<a name="l00252"></a>00252 <span class="comment">     * @param[in] x the value to be converted.</span>
-<a name="l00253"></a>00253 <span class="comment">     * @param[in] p the precision used (default -1).</span>
-<a name="l00254"></a>00254 <span class="comment">     * @return the string representation.</span>
-<a name="l00255"></a>00255 <span class="comment">     *</span>
-<a name="l00256"></a>00256 <span class="comment">     * If \e p >= 0, then the number fixed format is used with p bits of</span>
-<a name="l00257"></a>00257 <span class="comment">     * precision.  With p < 0, there is no manipulation of the format.</span>
-<a name="l00258"></a>00258 <span class="comment">     **********************************************************************/</span>
-<a name="l00259"></a><a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">00259</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> std::string <a class="code" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">str</a>(T x, <span class="keywordtype">int</span> p = -1) {
-<a name="l00260"></a>00260       <span class="keywordflow">if</span> (!std::numeric_limits<T>::is_integer && !Math::isfinite<T>(x))
-<a name="l00261"></a>00261         <span class="keywordflow">return</span> x < 0 ? std::string(<span class="stringliteral">"-inf"</span>) :
-<a name="l00262"></a>00262           (x > 0 ? std::string(<span class="stringliteral">"inf"</span>) : std::string(<span class="stringliteral">"nan"</span>));
-<a name="l00263"></a>00263       std::ostringstream s;
-<a name="l00264"></a>00264       <span class="keywordflow">if</span> (p >= 0) s << std::fixed << std::setprecision(p);
-<a name="l00265"></a>00265       s << x; <span class="keywordflow">return</span> s.str();
-<a name="l00266"></a>00266     }
-<a name="l00267"></a>00267 <span class="comment"></span>
-<a name="l00268"></a>00268 <span class="comment">    /**</span>
-<a name="l00269"></a>00269 <span class="comment">     * Convert a string to an object of type T.</span>
-<a name="l00270"></a>00270 <span class="comment">     *</span>
-<a name="l00271"></a>00271 <span class="comment">     * @tparam T the type of the return value.</span>
-<a name="l00272"></a>00272 <span class="comment">     * @param[in] s the string to be converted.</span>
-<a name="l00273"></a>00273 <span class="comment">     * @return object of type T</span>
-<a name="l00274"></a>00274 <span class="comment">     **********************************************************************/</span>
-<a name="l00275"></a><a class="code" href="classGeographicLib_1_1Utility.html#aa35f1f83c0543558a79b3cf42ddf50c8">00275</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> T <a class="code" href="classGeographicLib_1_1Utility.html#aa35f1f83c0543558a79b3cf42ddf50c8">num</a>(<span class="keyword">const</span> std::string& s) {
-<a name="l00276"></a>00276       T x;
-<a name="l00277"></a>00277       std::string errmsg;
-<a name="l00278"></a>00278       <span class="keywordflow">do</span> {                     <span class="comment">// Executed once (provides the ability to break)</span>
-<a name="l00279"></a>00279         std::istringstream is(s);
-<a name="l00280"></a>00280         <span class="keywordflow">if</span> (!(is >> x)) {
-<a name="l00281"></a>00281           errmsg = <span class="stringliteral">"Cannot decode "</span> + s;
-<a name="l00282"></a>00282           <span class="keywordflow">break</span>;
-<a name="l00283"></a>00283         }
-<a name="l00284"></a>00284         <span class="keywordtype">int</span> pos = int(is.tellg()); <span class="comment">// Returns -1 at end of string?</span>
-<a name="l00285"></a>00285         <span class="keywordflow">if</span> (!(pos < 0 || pos == <span class="keywordtype">int</span>(s.size()))) {
-<a name="l00286"></a>00286           errmsg = <span class="stringliteral">"Extra text "</span> + s.substr(pos) + <span class="stringliteral">" at end of "</span> + s;
-<a name="l00287"></a>00287           <span class="keywordflow">break</span>;
-<a name="l00288"></a>00288         }
-<a name="l00289"></a>00289         <span class="keywordflow">return</span> x;
-<a name="l00290"></a>00290       } <span class="keywordflow">while</span> (<span class="keyword">false</span>);
-<a name="l00291"></a>00291       x = std::numeric_limits<T>::is_integer ? 0 : nummatch<T>(s);
-<a name="l00292"></a>00292       <span class="keywordflow">if</span> (x == 0)
-<a name="l00293"></a>00293         <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(errmsg);
-<a name="l00294"></a>00294       <span class="keywordflow">return</span> x;
-<a name="l00295"></a>00295     }
-<a name="l00296"></a>00296 <span class="comment"></span>
-<a name="l00297"></a>00297 <span class="comment">    /**</span>
-<a name="l00298"></a>00298 <span class="comment">     * Match "nan" and "inf" (and variants thereof) in a string.</span>
-<a name="l00299"></a>00299 <span class="comment">     *</span>
-<a name="l00300"></a>00300 <span class="comment">     * @tparam T the type of the return value.</span>
-<a name="l00301"></a>00301 <span class="comment">     * @param[in] s the string to be matched.</span>
-<a name="l00302"></a>00302 <span class="comment">     * @return appropriate special value (+/-inf, nan) or 0 is none is found.</span>
-<a name="l00303"></a>00303 <span class="comment">     **********************************************************************/</span>
-<a name="l00304"></a><a class="code" href="classGeographicLib_1_1Utility.html#ad0d89bfe63814bab5312306fe3ac2b43">00304</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> T <a class="code" href="classGeographicLib_1_1Utility.html#ad0d89bfe63814bab5312306fe3ac2b43">nummatch</a>(<span class="keyword">const</span> std::string& s) {
-<a name="l00305"></a>00305       <span class="keywordflow">if</span> (s.length() < 3)
-<a name="l00306"></a>00306         <span class="keywordflow">return</span> 0;
-<a name="l00307"></a>00307       std::string t;
-<a name="l00308"></a>00308       t.resize(s.length());
-<a name="l00309"></a>00309       std::transform(s.begin(), s.end(), t.begin(), (int(*)(int))std::toupper);
-<a name="l00310"></a>00310       <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = s.length(); i--;)
-<a name="l00311"></a>00311         t[i] = std::toupper(s[i]);
-<a name="l00312"></a>00312       <span class="keywordtype">int</span> sign = t[0] == <span class="charliteral">'-'</span> ? -1 : 1;
-<a name="l00313"></a>00313       std::string::size_type p0 = t[0] == <span class="charliteral">'-'</span> || t[0] == <span class="charliteral">'+'</span> ? 1 : 0;
-<a name="l00314"></a>00314       std::string::size_type p1 = t.find_last_not_of(<span class="charliteral">'0'</span>);
-<a name="l00315"></a>00315       <span class="keywordflow">if</span> (p1 == std::string::npos || p1 + 1 < p0 + 3)
-<a name="l00316"></a>00316         <span class="keywordflow">return</span> 0;
-<a name="l00317"></a>00317       <span class="comment">// Strip off sign and trailing 0s</span>
-<a name="l00318"></a>00318       t = t.substr(p0, p1 + 1 - p0);  <span class="comment">// Length at least 3</span>
-<a name="l00319"></a>00319       <span class="keywordflow">if</span> (t == <span class="stringliteral">"NAN"</span> || t == <span class="stringliteral">"1.#QNAN"</span> || t == <span class="stringliteral">"1.#SNAN"</span> || t == <span class="stringliteral">"1.#IND"</span> ||
-<a name="l00320"></a>00320           t == <span class="stringliteral">"1.#R"</span>)
-<a name="l00321"></a>00321         <span class="keywordflow">return</span> <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::NaN<T>();
-<a name="l00322"></a>00322       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (t == <span class="stringliteral">"INF"</span> || t == <span class="stringliteral">"1.#INF"</span>)
-<a name="l00323"></a>00323         <span class="keywordflow">return</span> sign * <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::infinity<T>();
-<a name="l00324"></a>00324       <span class="keywordflow">return</span> 0;
-<a name="l00325"></a>00325     }
-<a name="l00326"></a>00326 <span class="comment"></span>
-<a name="l00327"></a>00327 <span class="comment">    /**</span>
-<a name="l00328"></a>00328 <span class="comment">     * Read a simple fraction, e.g., 3/4, from a string to an object of type T.</span>
-<a name="l00329"></a>00329 <span class="comment">     *</span>
-<a name="l00330"></a>00330 <span class="comment">     * @tparam T the type of the return value.</span>
-<a name="l00331"></a>00331 <span class="comment">     * @param[in] s the string to be converted.</span>
-<a name="l00332"></a>00332 <span class="comment">     * @return object of type T</span>
-<a name="l00333"></a>00333 <span class="comment">     **********************************************************************/</span>
-<a name="l00334"></a><a class="code" href="classGeographicLib_1_1Utility.html#a46b13d9ce2893f7e0fe6e7da093f528f">00334</a>     <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> T <a class="code" href="classGeographicLib_1_1Utility.html#a46b13d9ce2893f7e0fe6e7da093f528f">fract</a>(<span class="keyword">const</span> std::string& s) {
-<a name="l00335"></a>00335       std::string::size_type delim = s.find(<span class="charliteral">'/'</span>);
-<a name="l00336"></a>00336       <span class="keywordflow">return</span>
-<a name="l00337"></a>00337         !(delim != std::string::npos && delim >= 1 && delim + 2 <= s.size()) ?
-<a name="l00338"></a>00338         num<T>(s) :
-<a name="l00339"></a>00339         <span class="comment">// delim in [1, size() - 2]</span>
-<a name="l00340"></a>00340         num<T>(s.substr(0, delim)) / num<T>(s.substr(delim + 1));
-<a name="l00341"></a>00341     }
-<a name="l00342"></a>00342 <span class="comment"></span>
-<a name="l00343"></a>00343 <span class="comment">    /**</span>
-<a name="l00344"></a>00344 <span class="comment">     * Lookup up a character in a string.</span>
-<a name="l00345"></a>00345 <span class="comment">     *</span>
-<a name="l00346"></a>00346 <span class="comment">     * @param[in] s the string to be searched.</span>
-<a name="l00347"></a>00347 <span class="comment">     * @param[in] c the character to look for.</span>
-<a name="l00348"></a>00348 <span class="comment">     * @return the index of the first occurrence character in the string or -1</span>
-<a name="l00349"></a>00349 <span class="comment">     *   is the character is not present.</span>
-<a name="l00350"></a>00350 <span class="comment">     *</span>
-<a name="l00351"></a>00351 <span class="comment">     * \e c is converted to upper case before search \e s.  Therefore, it is</span>
-<a name="l00352"></a>00352 <span class="comment">     * intended that \e s should not contain any lower case letters.</span>
-<a name="l00353"></a>00353 <span class="comment">     **********************************************************************/</span>
-<a name="l00354"></a><a class="code" href="classGeographicLib_1_1Utility.html#a9a47fdaaa00a92e9a42035e62bd98faa">00354</a>     <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classGeographicLib_1_1Utility.html#a9a47fdaaa00a92e9a42035e62bd98faa">lookup</a>(<span class="keyword">const</span> std::string& s, <span class="keywordtype">char</span> c) <span class="keywordflow">throw</span>() {
-<a name="l00355"></a>00355       std::string::size_type r = s.find(toupper(c));
-<a name="l00356"></a>00356       <span class="keywordflow">return</span> r == std::string::npos ? -1 : int(r);
-<a name="l00357"></a>00357     }
-<a name="l00358"></a>00358 <span class="comment"></span>
-<a name="l00359"></a>00359 <span class="comment">    /**</span>
-<a name="l00360"></a>00360 <span class="comment">     * Read data of type ExtT from a binary stream to an array of type IntT.</span>
-<a name="l00361"></a>00361 <span class="comment">     * The data in the file is in (bigendp ? big : little)-endian format.</span>
-<a name="l00362"></a>00362 <span class="comment">     *</span>
-<a name="l00363"></a>00363 <span class="comment">     * @tparam ExtT the type of the objects in the binary stream (external).</span>
-<a name="l00364"></a>00364 <span class="comment">     * @tparam IntT the type of the objects in the array (internal).</span>
-<a name="l00365"></a>00365 <span class="comment">     * @tparam bigendp true if the external storage format is big-endian.</span>
-<a name="l00366"></a>00366 <span class="comment">     * @param[in] str the input stream containing the data of type ExtT</span>
-<a name="l00367"></a>00367 <span class="comment">     *   (external).</span>
-<a name="l00368"></a>00368 <span class="comment">     * @param[out] array the output array of type IntT (internal).</span>
-<a name="l00369"></a>00369 <span class="comment">     * @param[in] num the size of the array.</span>
-<a name="l00370"></a>00370 <span class="comment">     **********************************************************************/</span>
-<a name="l00371"></a>00371     <span class="keyword">template</span><<span class="keyword">typename</span> ExtT, <span class="keyword">typename</span> IntT, <span class="keywordtype">bool</span> bigendp>
-<a name="l00372"></a><a class="code" href="classGeographicLib_1_1Utility.html#a23e88040ceb60bd3fe28efc04f9119f8">00372</a>       <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> readarray(std::istream& str,
-<a name="l00373"></a>00373                                    IntT array[], <span class="keywordtype">size_t</span> num) {
-<a name="l00374"></a>00374       <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(IntT) == <span class="keyword">sizeof</span>(ExtT) &&
-<a name="l00375"></a>00375           std::numeric_limits<IntT>::is_integer ==
-<a name="l00376"></a>00376           std::numeric_limits<ExtT>::is_integer) {
-<a name="l00377"></a>00377         <span class="comment">// Data is compatible (aside from the issue of endian-ness).</span>
-<a name="l00378"></a>00378         str.read(reinterpret_cast<char *>(array), num * <span class="keyword">sizeof</span>(ExtT));
-<a name="l00379"></a>00379         <span class="keywordflow">if</span> (!str.good())
-<a name="l00380"></a>00380           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Failure reading data"</span>);
-<a name="l00381"></a>00381         <span class="keywordflow">if</span> (bigendp != <a class="code" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">Math::bigendian</a>) { <span class="comment">// endian mismatch -> swap bytes</span>
-<a name="l00382"></a>00382           <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = num; i--;)
-<a name="l00383"></a>00383             array[i] = Math::swab<IntT>(array[i]);
-<a name="l00384"></a>00384         }
-<a name="l00385"></a>00385       } <span class="keywordflow">else</span> {
-<a name="l00386"></a>00386         <span class="keyword">const</span> <span class="keywordtype">int</span> bufsize = 1024; <span class="comment">// read this many values at a time</span>
-<a name="l00387"></a>00387         ExtT buffer[bufsize];     <span class="comment">// temporary buffer</span>
-<a name="l00388"></a>00388         <span class="keywordtype">int</span> k = int(num);         <span class="comment">// data values left to read</span>
-<a name="l00389"></a>00389         <span class="keywordtype">int</span> i = 0;                <span class="comment">// index into output array</span>
-<a name="l00390"></a>00390         <span class="keywordflow">while</span> (k) {
-<a name="l00391"></a>00391           <span class="keywordtype">int</span> n = (std::min)(k, bufsize);
-<a name="l00392"></a>00392           str.read(reinterpret_cast<char *>(buffer), n * <span class="keyword">sizeof</span>(ExtT));
-<a name="l00393"></a>00393           <span class="keywordflow">if</span> (!str.good())
-<a name="l00394"></a>00394             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Failure reading data"</span>);
-<a name="l00395"></a>00395           <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j < n; ++j)
-<a name="l00396"></a>00396             <span class="comment">// fix endian-ness and cast to IntT</span>
-<a name="l00397"></a>00397             array[i++] = IntT(bigendp == <a class="code" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">Math::bigendian</a> ? buffer[j] :
-<a name="l00398"></a>00398                               Math::swab<ExtT>(buffer[j]));
-<a name="l00399"></a>00399           k -= n;
-<a name="l00400"></a>00400         }
-<a name="l00401"></a>00401       }
-<a name="l00402"></a>00402       <span class="keywordflow">return</span>;
-<a name="l00403"></a>00403     }
-<a name="l00404"></a>00404 <span class="comment"></span>
-<a name="l00405"></a>00405 <span class="comment">    /**</span>
-<a name="l00406"></a>00406 <span class="comment">     * Read data of type ExtT from a binary stream to a vector array of type</span>
-<a name="l00407"></a>00407 <span class="comment">     * IntT.  The data in the file is in (bigendp ? big : little)-endian</span>
-<a name="l00408"></a>00408 <span class="comment">     * format.</span>
-<a name="l00409"></a>00409 <span class="comment">     *</span>
-<a name="l00410"></a>00410 <span class="comment">     * @tparam ExtT the type of the objects in the binary stream (external).</span>
-<a name="l00411"></a>00411 <span class="comment">     * @tparam IntT the type of the objects in the array (internal).</span>
-<a name="l00412"></a>00412 <span class="comment">     * @tparam bigendp true if the external storage format is big-endian.</span>
-<a name="l00413"></a>00413 <span class="comment">     * @param[in] str the input stream containing the data of type ExtT</span>
-<a name="l00414"></a>00414 <span class="comment">     *   (external).</span>
-<a name="l00415"></a>00415 <span class="comment">     * @param[out] array the output vector of type IntT (internal).</span>
-<a name="l00416"></a>00416 <span class="comment">     **********************************************************************/</span>
-<a name="l00417"></a>00417     <span class="keyword">template</span><<span class="keyword">typename</span> ExtT, <span class="keyword">typename</span> IntT, <span class="keywordtype">bool</span> bigendp>
-<a name="l00418"></a><a class="code" href="classGeographicLib_1_1Utility.html#a044796b4fc14a952abec27da27fc20be">00418</a>       <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> readarray(std::istream& str,
-<a name="l00419"></a>00419                                    std::vector<IntT>& array) {
-<a name="l00420"></a>00420       readarray<ExtT, IntT, bigendp>(str, &array[0], array.size());
-<a name="l00421"></a>00421     }
-<a name="l00422"></a>00422 <span class="comment"></span>
-<a name="l00423"></a>00423 <span class="comment">    /**</span>
-<a name="l00424"></a>00424 <span class="comment">     * Write data in an array of type IntT as type ExtT to a binary stream.</span>
-<a name="l00425"></a>00425 <span class="comment">     * The data in the file is in (bigendp ? big : little)-endian format.</span>
-<a name="l00426"></a>00426 <span class="comment">     *</span>
-<a name="l00427"></a>00427 <span class="comment">     * @tparam ExtT the type of the objects in the binary stream (external).</span>
-<a name="l00428"></a>00428 <span class="comment">     * @tparam IntT the type of the objects in the array (internal).</span>
-<a name="l00429"></a>00429 <span class="comment">     * @tparam bigendp true if the external storage format is big-endian.</span>
-<a name="l00430"></a>00430 <span class="comment">     * @param[out] str the output stream for the data of type ExtT (external).</span>
-<a name="l00431"></a>00431 <span class="comment">     * @param[in] array the input array of type IntT (internal).</span>
-<a name="l00432"></a>00432 <span class="comment">     * @param[in] num the size of the array.</span>
-<a name="l00433"></a>00433 <span class="comment">     **********************************************************************/</span>
-<a name="l00434"></a>00434     <span class="keyword">template</span><<span class="keyword">typename</span> ExtT, <span class="keyword">typename</span> IntT, <span class="keywordtype">bool</span> bigendp>
-<a name="l00435"></a><a class="code" href="classGeographicLib_1_1Utility.html#a276eb20ace49c5260e1878c7d8aefd31">00435</a>       <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> writearray(std::ostream& str,
-<a name="l00436"></a>00436                                    <span class="keyword">const</span> IntT array[], <span class="keywordtype">size_t</span> num) {
-<a name="l00437"></a>00437       <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(IntT) == <span class="keyword">sizeof</span>(ExtT) &&
-<a name="l00438"></a>00438           std::numeric_limits<IntT>::is_integer ==
-<a name="l00439"></a>00439           std::numeric_limits<ExtT>::is_integer &&
-<a name="l00440"></a>00440           bigendp == <a class="code" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">Math::bigendian</a>) {
-<a name="l00441"></a>00441         <span class="comment">// Data is compatible (including endian-ness).</span>
-<a name="l00442"></a>00442         str.write(reinterpret_cast<const char *>(array), num * <span class="keyword">sizeof</span>(ExtT));
-<a name="l00443"></a>00443         <span class="keywordflow">if</span> (!str.good())
-<a name="l00444"></a>00444           <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Failure writing data"</span>);
-<a name="l00445"></a>00445       } <span class="keywordflow">else</span> {
-<a name="l00446"></a>00446         <span class="keyword">const</span> <span class="keywordtype">int</span> bufsize = 1024; <span class="comment">// write this many values at a time</span>
-<a name="l00447"></a>00447         ExtT buffer[bufsize];     <span class="comment">// temporary buffer</span>
-<a name="l00448"></a>00448         <span class="keywordtype">int</span> k = int(num);         <span class="comment">// data values left to write</span>
-<a name="l00449"></a>00449         <span class="keywordtype">int</span> i = 0;                <span class="comment">// index into output array</span>
-<a name="l00450"></a>00450         <span class="keywordflow">while</span> (k) {
-<a name="l00451"></a>00451           <span class="keywordtype">int</span> n = (std::min)(k, bufsize);
-<a name="l00452"></a>00452           <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j < n; ++j)
-<a name="l00453"></a>00453             <span class="comment">// cast to ExtT and fix endian-ness</span>
-<a name="l00454"></a>00454             buffer[j] = bigendp == <a class="code" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">Math::bigendian</a> ? ExtT(array[i++]) :
-<a name="l00455"></a>00455               <a class="code" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">Math</a>::swab<ExtT>(ExtT(array[i++]));
-<a name="l00456"></a>00456           str.write(reinterpret_cast<const char *>(buffer), n * <span class="keyword">sizeof</span>(ExtT));
-<a name="l00457"></a>00457           <span class="keywordflow">if</span> (!str.good())
-<a name="l00458"></a>00458             <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>(<span class="stringliteral">"Failure writing data"</span>);
-<a name="l00459"></a>00459           k -= n;
-<a name="l00460"></a>00460         }
-<a name="l00461"></a>00461       }
-<a name="l00462"></a>00462       <span class="keywordflow">return</span>;
-<a name="l00463"></a>00463     }
-<a name="l00464"></a>00464 <span class="comment"></span>
-<a name="l00465"></a>00465 <span class="comment">    /**</span>
-<a name="l00466"></a>00466 <span class="comment">     * Write data in an array of type IntT as type ExtT to a binary stream.</span>
-<a name="l00467"></a>00467 <span class="comment">     * The data in the file is in (bigendp ? big : little)-endian format.</span>
-<a name="l00468"></a>00468 <span class="comment">     *</span>
-<a name="l00469"></a>00469 <span class="comment">     * @tparam ExtT the type of the objects in the binary stream (external).</span>
-<a name="l00470"></a>00470 <span class="comment">     * @tparam IntT the type of the objects in the array (internal).</span>
-<a name="l00471"></a>00471 <span class="comment">     * @tparam bigendp true if the external storage format is big-endian.</span>
-<a name="l00472"></a>00472 <span class="comment">     * @param[out] str the output stream for the data of type ExtT (external).</span>
-<a name="l00473"></a>00473 <span class="comment">     * @param[in] array the input vector of type IntT (internal).</span>
-<a name="l00474"></a>00474 <span class="comment">     **********************************************************************/</span>
-<a name="l00475"></a>00475     <span class="keyword">template</span><<span class="keyword">typename</span> ExtT, <span class="keyword">typename</span> IntT, <span class="keywordtype">bool</span> bigendp>
-<a name="l00476"></a><a class="code" href="classGeographicLib_1_1Utility.html#a0621066e4aa146a2c100802375e70389">00476</a>       <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> writearray(std::ostream& str,
-<a name="l00477"></a>00477                                    std::vector<IntT>& array) {
-<a name="l00478"></a>00478       writearray<ExtT, IntT, bigendp>(str, &array[0], array.size());
-<a name="l00479"></a>00479     }
-<a name="l00480"></a>00480 <span class="comment"></span>
-<a name="l00481"></a>00481 <span class="comment">    /**</span>
-<a name="l00482"></a>00482 <span class="comment">     * Parse a KEY VALUE line.</span>
-<a name="l00483"></a>00483 <span class="comment">     *</span>
-<a name="l00484"></a>00484 <span class="comment">     * @param[in] line the input line.</span>
-<a name="l00485"></a>00485 <span class="comment">     * @param[out] key the key.</span>
-<a name="l00486"></a>00486 <span class="comment">     * @param[out] val the value.</span>
-<a name="l00487"></a>00487 <span class="comment">     * @return whether a key was found.</span>
-<a name="l00488"></a>00488 <span class="comment">     *</span>
-<a name="l00489"></a>00489 <span class="comment">     * A # character and everything after it are discarded.  If the results is</span>
-<a name="l00490"></a>00490 <span class="comment">     * just white space, the routine returns false (and \e key and \e val are</span>
-<a name="l00491"></a>00491 <span class="comment">     * not set).  Otherwise the first token is taken to be the key and the rest</span>
-<a name="l00492"></a>00492 <span class="comment">     * of the line (trimmed of leading and trailing white space) is the value.</span>
-<a name="l00493"></a>00493 <span class="comment">     **********************************************************************/</span>
-<a name="l00494"></a>00494     <span class="keyword">static</span> <span class="keywordtype">bool</span> ParseLine(<span class="keyword">const</span> std::string& line,
-<a name="l00495"></a>00495                           std::string& key, std::string& val);
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497   };
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499 } <span class="comment">// namespace GeographicLib</span>
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501 <span class="preprocessor">#endif  // GEOGRAPHICLIB_UTILITY_HPP</span>
-</pre></div></div>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
deleted file mode 100644
index d19faf0..0000000
--- a/doc/html/annotated.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Class List</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><table>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td class="indexvalue">An accumulator for sums </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td class="indexvalue">Albers Equal Area Conic Projection </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a></td><td class="indexvalue">Azimuthal Equidistant Projection </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td class="indexvalue">Cassini-Soldner Projection </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td><td class="indexvalue">Spherical Harmonic sums for a circle </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td class="indexvalue">Package up coefficients for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a> </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td class="indexvalue">Constants needed by GeographicLib </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td class="indexvalue">Convert between degrees and DMS representation </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td class="indexvalue">Elliptic functions needed for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a> </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td class="indexvalue">Geocentric coordinates </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td class="indexvalue">Conversion between geographic coordinates </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td class="indexvalue">Geodesic calculations </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td class="indexvalue">A geodesic line </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1GeographicErr.html">GeographicLib::GeographicErr</a></td><td class="indexvalue">Exception handling for GeographicLib </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td class="indexvalue">Looking up the height of the geoid </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a></td><td class="indexvalue">Gnomonic Projection </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td class="indexvalue">Gravity on a circle of latitude </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td class="indexvalue">Model of the earth's gravity field </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td class="indexvalue">Lambert Conformal Conic Projection </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td class="indexvalue">Local Cartesian coordinates </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td class="indexvalue">Geomagnetic field on a circle of latitude </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td class="indexvalue">Model of the earth's magnetic field </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td class="indexvalue">Mathematical functions needed by GeographicLib </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1MGRS.html">GeographicLib::MGRS</a></td><td class="indexvalue">Convert between UTM/UPS and MGRS </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td class="indexvalue">The normal gravity of the earth </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td class="indexvalue">Ordnance Survey grid system for Great Britain </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td class="indexvalue">Polar Stereographic Projection </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a></td><td class="indexvalue">Polygon Areas </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td><td class="indexvalue">The evaluation engine for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td class="indexvalue">Spherical Harmonic series </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td class="indexvalue">Spherical Harmonic series with a correction to the coefficients </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td class="indexvalue">Spherical Harmonic series with two corrections to the coefficients </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td class="indexvalue">Transverse Mercator Projection </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td class="indexvalue">An exact implementation of the Transverse Mercator Projection </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td class="indexvalue">Some utility routines for GeographicLib </td></tr>
-  <tr><td class="indexkey"><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td class="indexvalue">Convert between Geographic coordinates and UTM/UPS </td></tr>
-</table>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/bc_s.png b/doc/html/bc_s.png
deleted file mode 100644
index e401862..0000000
Binary files a/doc/html/bc_s.png and /dev/null differ
diff --git a/doc/html/classGeographicLib_1_1Accumulator-members.html b/doc/html/classGeographicLib_1_1Accumulator-members.html
deleted file mode 100644
index f4d44e3..0000000
--- a/doc/html/classGeographicLib_1_1Accumulator-members.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::Accumulator Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#a6d30e4a792644ffc78546dda4b5d0022">Accumulator</a>(T y=T(0))</td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#a4102ce7aac36753c2b0390c4fc951a42">operator!=</a>(T y) const </td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#af74ec2f9a77fcc82819111e6bb87b375">operator()</a>() const </td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#a1a2b7ac3fd3b067a1c9930cb02a102b2">operator()</a>(T y) const </td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#a2b0bc40e9722e1ffac89ecfeb601fb23">operator*=</a>(int n)</td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#adc56d12f08b8a61b19dd78ce532285d4">operator+=</a>(T y)</td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#abf3e43f38791c48d1fa09e4fb569827b">operator-=</a>(T y)</td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#a9a7299c02ec8805d951309fdae60e57f">operator<</a>(T y) const </td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#afb83bdb43b78e20f76e2a7e5e2440386">operator<=</a>(T y) const </td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#a9cd31c9155208a2de0fdd9810f2a9dd8">operator=</a>(T y)</td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#a6ea5d769a36e01327f3633b39cd38290">operator==</a>(T y) const </td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#af0e4a35c09b0b179ebf1e2f6912ddeb3">operator></a>(T y) const </td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Accumulator.html#aeafc5d10683648d37fe18ec75725196b">operator>=</a>(T y) const </td><td><a class="el" href="classGeographicLib_1_1Accumulator.html">GeographicLib::Accumulator</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Accumulator.html b/doc/html/classGeographicLib_1_1Accumulator.html
deleted file mode 100644
index e97f1d6..0000000
--- a/doc/html/classGeographicLib_1_1Accumulator.html
+++ /dev/null
@@ -1,441 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::Accumulator Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::Accumulator Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::Accumulator" -->
-<p>An accumulator for sums.  
- <a href="classGeographicLib_1_1Accumulator.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="Accumulator_8hpp_source.html">GeographicLib/Accumulator.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1Accumulator-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#a6d30e4a792644ffc78546dda4b5d0022">Accumulator</a> (T y=T(0))  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#a9cd31c9155208a2de0fdd9810f2a9dd8">operator=</a> (T y)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">T </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#af74ec2f9a77fcc82819111e6bb87b375">operator()</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">T </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#a1a2b7ac3fd3b067a1c9930cb02a102b2">operator()</a> (T y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#adc56d12f08b8a61b19dd78ce532285d4">operator+=</a> (T y)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#abf3e43f38791c48d1fa09e4fb569827b">operator-=</a> (T y)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#a2b0bc40e9722e1ffac89ecfeb601fb23">operator*=</a> (int n)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#a6ea5d769a36e01327f3633b39cd38290">operator==</a> (T y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#a4102ce7aac36753c2b0390c4fc951a42">operator!=</a> (T y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#a9a7299c02ec8805d951309fdae60e57f">operator<</a> (T y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#afb83bdb43b78e20f76e2a7e5e2440386">operator<=</a> (T y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#af0e4a35c09b0b179ebf1e2f6912ddeb3">operator></a> (T y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html#aeafc5d10683648d37fe18ec75725196b">operator>=</a> (T y) const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>An accumulator for sums. </p>
-<p>This allow many numbers of floating point type <em>T</em> to be added together with twice the normal precision. Thus if <em>T</em> is double, the effective precision of the sum is 106 bits or about 32 decimal places. The core idea is the error free transformation of a sum, D. E. Knuth, TAOCP, Vol 2, 4.2.2, Theorem B.</p>
-<p>The implementation follows J. R. Shewchuk, <a href="http://dx.doi.org/10.1007/PL00009321">Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates</a>, Discrete & Computational Geometry 18(3) 305-363 (1997).</p>
-<p>Approximate timings (summing a vector<double>)</p>
-<ul>
-<li>double: 2ns</li>
-<li>Accumulator<double>: 23ns</li>
-</ul>
-<p>In the documentation of the member functions, <em>sum</em> stands for the value currently held in the accumulator.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::Accumulator class</span>
-<span class="comment">// $Id: cd6505cf47fbae653b439ba63ea927050cbf0a45 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="Accumulator_8hpp.html" title="Header for GeographicLib::Accumulator class.">GeographicLib/Accumulator.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="comment">// Compare using Accumulator and ordinary summation for a sum of large and</span>
-    <span class="comment">// small terms.</span>
-    <span class="keywordtype">double</span> sum = 0;
-    <a class="code" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">Accumulator<double></a> acc = 0;
-    sum += 1e20; sum += 1; sum += 2; sum += 100; sum += 5000; sum += -1e20;
-    acc += 1e20; acc += 1; acc += 2; acc += 100; acc += 5000; acc += -1e20;
-    cout << sum << <span class="stringliteral">" "</span> << acc() << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a6d30e4a792644ffc78546dda4b5d0022"></a><!-- doxytag: member="GeographicLib::Accumulator::Accumulator" ref="a6d30e4a792644ffc78546dda4b5d0022" args="(T y=T(0))" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::Accumulator::Accumulator </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em> = <code>T(0)</code></td><td>)</td>
-          <td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Construct from a <em>T</em>. This is not declared explicit, so that you can write <code>Accumulator<double> a = 5;</code>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>set <em>sum</em> = <em>y</em>. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00116">116</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a9cd31c9155208a2de0fdd9810f2a9dd8"></a><!-- doxytag: member="GeographicLib::Accumulator::operator=" ref="a9cd31c9155208a2de0fdd9810f2a9dd8" args="(T y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a>& GeographicLib::Accumulator::operator= </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the accumulator to a number.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>set <em>sum</em> = <em>y</em>. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00125">125</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af74ec2f9a77fcc82819111e6bb87b375"></a><!-- doxytag: member="GeographicLib::Accumulator::operator()" ref="af74ec2f9a77fcc82819111e6bb87b375" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">T GeographicLib::Accumulator::operator() </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the value held in the accumulator.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>sum</em>. </dd></dl>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00131">131</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1a2b7ac3fd3b067a1c9930cb02a102b2"></a><!-- doxytag: member="GeographicLib::Accumulator::operator()" ref="a1a2b7ac3fd3b067a1c9930cb02a102b2" args="(T y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">T GeographicLib::Accumulator::operator() </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the result of adding a number to <em>sum</em> (but don't change <em>sum</em>).</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>the number to be added to the sum. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>sum</em> + <em>y</em>. </dd></dl>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00138">138</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adc56d12f08b8a61b19dd78ce532285d4"></a><!-- doxytag: member="GeographicLib::Accumulator::operator+=" ref="adc56d12f08b8a61b19dd78ce532285d4" args="(T y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a>& GeographicLib::Accumulator::operator+= </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Add a number to the accumulator.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>set <em>sum</em> += <em>y</em>. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00144">144</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="abf3e43f38791c48d1fa09e4fb569827b"></a><!-- doxytag: member="GeographicLib::Accumulator::operator-=" ref="abf3e43f38791c48d1fa09e4fb569827b" args="(T y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a>& GeographicLib::Accumulator::operator-= </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Subtract a number from the accumulator.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>set <em>sum</em> -= <em>y</em>. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00150">150</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2b0bc40e9722e1ffac89ecfeb601fb23"></a><!-- doxytag: member="GeographicLib::Accumulator::operator*=" ref="a2b0bc40e9722e1ffac89ecfeb601fb23" args="(int n)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a>& GeographicLib::Accumulator::operator*= </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>n</em></td><td>)</td>
-          <td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Multiply accumulator by an integer. To avoid loss of accuracy, use only integers such that <em>n</em> * <em>T</em> is exactly representable as a <em>T</em> (i.e., +/- powers of two). Use <em>n</em> = -1 to negate <em>sum</em>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">n</td><td>set <em>sum</em> *= <em>n</em>. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00158">158</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6ea5d769a36e01327f3633b39cd38290"></a><!-- doxytag: member="GeographicLib::Accumulator::operator==" ref="a6ea5d769a36e01327f3633b39cd38290" args="(T y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Accumulator::operator== </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Test equality of an <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">Accumulator</a> with a number. </p>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00162">162</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4102ce7aac36753c2b0390c4fc951a42"></a><!-- doxytag: member="GeographicLib::Accumulator::operator!=" ref="a4102ce7aac36753c2b0390c4fc951a42" args="(T y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Accumulator::operator!= </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Test inequality of an <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">Accumulator</a> with a number. </p>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00166">166</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9a7299c02ec8805d951309fdae60e57f"></a><!-- doxytag: member="GeographicLib::Accumulator::operator<" ref="a9a7299c02ec8805d951309fdae60e57f" args="(T y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Accumulator::operator< </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Less operator on an <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">Accumulator</a> and a number. </p>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00170">170</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afb83bdb43b78e20f76e2a7e5e2440386"></a><!-- doxytag: member="GeographicLib::Accumulator::operator<=" ref="afb83bdb43b78e20f76e2a7e5e2440386" args="(T y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Accumulator::operator<= </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Less or equal operator on an <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">Accumulator</a> and a number. </p>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00174">174</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af0e4a35c09b0b179ebf1e2f6912ddeb3"></a><!-- doxytag: member="GeographicLib::Accumulator::operator>" ref="af0e4a35c09b0b179ebf1e2f6912ddeb3" args="(T y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Accumulator::operator> </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Greater operator on an <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">Accumulator</a> and a number. </p>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00178">178</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aeafc5d10683648d37fe18ec75725196b"></a><!-- doxytag: member="GeographicLib::Accumulator::operator>=" ref="aeafc5d10683648d37fe18ec75725196b" args="(T y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Accumulator::operator>= </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Greater or equal operator on an <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">Accumulator</a> and a number. </p>
-
-<p>Definition at line <a class="el" href="Accumulator_8hpp_source.html#l00182">182</a> of file <a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="Accumulator_8hpp_source.html">Accumulator.hpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1AlbersEqualArea-members.html b/doc/html/classGeographicLib_1_1AlbersEqualArea-members.html
deleted file mode 100644
index 6ef50a4..0000000
--- a/doc/html/classGeographicLib_1_1AlbersEqualArea-members.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::AlbersEqualArea Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a08edd228ba175a5ae71d783c4a712e50">AlbersEqualArea</a>(real a, real f, real stdlat, real k0)</td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a3851897cd1944503f81b46b7ce372d2a">AlbersEqualArea</a>(real a, real f, real stdlat1, real stdlat2, real k1)</td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a58535d87e148d0cc474f3139c5188371">AlbersEqualArea</a>(real a, real f, real sinlat1, real coslat1, real sinlat2, real coslat2, real k1)</td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae65fcb68843b36d206751527ebd08f44">AzimuthalEqualAreaNorth</a></td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#aff0ff4e2f162107bd136310b44444cc1">AzimuthalEqualAreaSouth</a></td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#af407e835eaf76895ee25ec9e7a9c090c">CentralScale</a>() const </td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae643f7f82f5864f95da4cb14571ccf55">CylindricalEqualArea</a></td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a565c63954715204781ae458db0d6b1f7">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#aac57f3a9c0c08fb897a1e37034d127c1">Forward</a>(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a68a13780a73bcf9c8e50a3ce4eae3086">Forward</a>(real lon0, real lat, real lon, real &x, real &y) const </td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a55d5ca45e7c80a96b3faf0094714ac59">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ad780e943e9a9ba168b350d809d0bfe08">OriginLatitude</a>() const </td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a577a9f43be8c1e238a4d56158acf8625">Reverse</a>(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a871246cba03145512f3f12ceb3e3e3a8">Reverse</a>(real lon0, real x, real y, real &lat, real &lon) const </td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a0c00022edeb6b67dcd4e00f087b412c4">SetScale</a>(real lat, real k=real(1))</td><td><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">GeographicLib::AlbersEqualArea</a></td><td></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1AlbersEqualArea.html b/doc/html/classGeographicLib_1_1AlbersEqualArea.html
deleted file mode 100644
index 7edfc1d..0000000
--- a/doc/html/classGeographicLib_1_1AlbersEqualArea.html
+++ /dev/null
@@ -1,769 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::AlbersEqualArea Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::AlbersEqualArea Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::AlbersEqualArea" -->
-<p>Albers Equal Area Conic Projection.  
- <a href="classGeographicLib_1_1AlbersEqualArea.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="AlbersEqualArea_8hpp_source.html">GeographicLib/AlbersEqualArea.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1AlbersEqualArea-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a08edd228ba175a5ae71d783c4a712e50">AlbersEqualArea</a> (real a, real f, real stdlat, real k0)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a3851897cd1944503f81b46b7ce372d2a">AlbersEqualArea</a> (real a, real f, real stdlat1, real stdlat2, real k1)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a58535d87e148d0cc474f3139c5188371">AlbersEqualArea</a> (real a, real f, real sinlat1, real coslat1, real sinlat2, real coslat2, real k1)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a0c00022edeb6b67dcd4e00f087b412c4">SetScale</a> (real lat, real k=real(1))</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#aac57f3a9c0c08fb897a1e37034d127c1">Forward</a> (real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a577a9f43be8c1e238a4d56158acf8625">Reverse</a> (real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a68a13780a73bcf9c8e50a3ce4eae3086">Forward</a> (real lon0, real lat, real lon, real &x, real &y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a871246cba03145512f3f12ceb3e3e3a8">Reverse</a> (real lon0, real x, real y, real &lat, real &lon) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a55d5ca45e7c80a96b3faf0094714ac59">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a565c63954715204781ae458db0d6b1f7">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ad780e943e9a9ba168b350d809d0bfe08">OriginLatitude</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#af407e835eaf76895ee25ec9e7a9c090c">CentralScale</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae643f7f82f5864f95da4cb14571ccf55">CylindricalEqualArea</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae65fcb68843b36d206751527ebd08f44">AzimuthalEqualAreaNorth</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#aff0ff4e2f162107bd136310b44444cc1">AzimuthalEqualAreaSouth</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Albers Equal Area Conic Projection. </p>
-<p>Implementation taken from the report,</p>
-<ul>
-<li>J. P. Snyder, <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395">Map Projections: A Working Manual</a>, USGS Professional Paper 1395 (1987), pp. 101–102.</li>
-</ul>
-<p>This is a implementation of the equations in Snyder except that divided differences will be [have been] used to transform the expressions into ones which may be evaluated accurately. [In this implementation, the projection correctly becomes the cylindrical equal area or the azimuthal equal area projection when the standard latitude is the equator or a pole.]</p>
-<p>The ellipsoid parameters, the standard parallels, and the scale on the standard parallels are set in the constructor. Internally, the case with two standard parallels is converted into a single standard parallel, the latitude of minimum azimuthal scale, with an azimuthal scale specified on this parallel. This latitude is also used as the latitude of origin which is returned by <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ad780e943e9a9ba168b350d809d0bfe08">AlbersEqual [...]
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::AlbersEqualArea class</span>
-<span class="comment">// $Id: 230027b09ff2dfa7940202913a6d965281818b99 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="AlbersEqualArea_8hpp.html" title="Header for GeographicLib::AlbersEqualArea class.">GeographicLib/AlbersEqualArea.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-   <span class="keyword">const</span> <span class="keywordtype">double</span>
-     a = <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<double>(),
-     f = Constants::WGS84_f<double>(),
-     lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, <span class="comment">// standard parallels</span>
-     k1 = 1,                                   <span class="comment">// scale</span>
-     lon0 = -77 - 45/60.0;                     <span class="comment">// Central meridan</span>
-   <span class="comment">// Set up basic projection</span>
-   <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a> albers(a, f, lat1, lat2, k1);
-   {
-     <span class="comment">// Sample conversion from geodetic to Albers Equal Area</span>
-     <span class="keywordtype">double</span> lat = 39.95, lon = -75.17;    <span class="comment">// Philadelphia</span>
-     <span class="keywordtype">double</span> x, y;
-     albers.Forward(lon0, lat, lon, x, y);
-     std::cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">"\n"</span>;
-   }
-   {
-     <span class="comment">// Sample conversion from Albers Equal Area grid to geodetic</span>
-     <span class="keywordtype">double</span> x = 220e3, y = -53e3;
-     <span class="keywordtype">double</span> lat, lon;
-     albers.Reverse(lon0, x, y, lat, lon);
-     std::cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-   }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="ConicProj.1.html">ConicProj</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">LambertConformalConic</a> and <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a08edd228ba175a5ae71d783c4a712e50"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::AlbersEqualArea" ref="a08edd228ba175a5ae71d783c4a712e50" args="(real a, real f, real stdlat, real k0)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::AlbersEqualArea::AlbersEqualArea </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>stdlat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k0</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with a single standard parallel.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius of ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">stdlat</td><td>standard parallel (degrees), the circle of tangency. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k0</td><td>azimuthal scale on the standard parallel.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>An exception is thrown if <em>a</em> or <em>k0</em> is not positive or if <em>stdlat</em> is not in the range [-90, 90]. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8cpp_source.html#l00031">31</a> of file <a class="el" href="AlbersEqualArea_8cpp_source.html">AlbersEqualArea.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3851897cd1944503f81b46b7ce372d2a"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::AlbersEqualArea" ref="a3851897cd1944503f81b46b7ce372d2a" args="(real a, real f, real stdlat1, real stdlat2, real k1)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::AlbersEqualArea::AlbersEqualArea </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>stdlat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>stdlat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k1</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with two standard parallels.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius of ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">stdlat1</td><td>first standard parallel (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">stdlat2</td><td>second standard parallel (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k1</td><td>azimuthal scale on the standard parallels.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>An exception is thrown if <em>a</em> or <em>k0</em> is not positive or if <em>stdlat1</em> or <em>stdlat2</em> is not in the range [-90, 90]. In addition, an exception is thrown if <em>stdlat1</em> and <em>stdlat2</em> are opposite poles. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8cpp_source.html#l00056">56</a> of file <a class="el" href="AlbersEqualArea_8cpp_source.html">AlbersEqualArea.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a58535d87e148d0cc474f3139c5188371"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::AlbersEqualArea" ref="a58535d87e148d0cc474f3139c5188371" args="(real a, real f, real sinlat1, real coslat1, real sinlat2, real coslat2, real k1)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::AlbersEqualArea::AlbersEqualArea </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>sinlat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>coslat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>sinlat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>coslat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k1</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with two standard parallels specified by sines and cosines.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius of ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">sinlat1</td><td>sine of first standard parallel. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">coslat1</td><td>cosine of first standard parallel. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">sinlat2</td><td>sine of second standard parallel. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">coslat2</td><td>cosine of second standard parallel. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k1</td><td>azimuthal scale on the standard parallels.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>This allows parallels close to the poles to be specified accurately. This routine computes the latitude of origin and the azimuthal scale at this latitude. If <em>dlat</em> = abs(<em>lat2</em> - <em>lat1</em>) <= 160<sup>o</sup>, then the error in the latitude of origin is less than 4.5e-14<sup>o</sup>. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8cpp_source.html#l00084">84</a> of file <a class="el" href="AlbersEqualArea_8cpp_source.html">AlbersEqualArea.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a0c00022edeb6b67dcd4e00f087b412c4"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::SetScale" ref="a0c00022edeb6b67dcd4e00f087b412c4" args="(real lat, real k=real(1))" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::AlbersEqualArea::SetScale </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k</em> = <code>real(1)</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the azimuthal scale for the projection.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>(degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k</td><td>azimuthal scale at latitude <em>lat</em> (default 1).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>This allows a "latitude of conformality" to be specified. An exception is thrown if <em>k</em> is not positive or if <em>lat</em> is not in the range (-90, 90). </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8cpp_source.html#l00439">439</a> of file <a class="el" href="AlbersEqualArea_8cpp_source.html">AlbersEqualArea.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>, <a class="el" href="AlbersEqualArea_8cpp_source.html#l00379">Forward()</a>, and <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aac57f3a9c0c08fb897a1e37034d127c1"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::Forward" ref="aac57f3a9c0c08fb897a1e37034d127c1" args="(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::AlbersEqualArea::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to Lambert conformal conic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>central meridian longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>azimuthal scale of projection at point; the radial scale is the 1/<em>k</em>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The latitude origin is given by AlbersEqualArea::LatitudeOrigin(). No false easting or northing is added and <em>lat</em> should be in the range [-90, 90]; <em>lon</em> and <em>lon0</em> should be in the range [-180, 360]. The values of <em>x</em> and <em>y</em> returned for points which project to infinity (i.e., one or both of the poles) will be large but finite. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8cpp_source.html#l00379">379</a> of file <a class="el" href="AlbersEqualArea_8cpp_source.html">AlbersEqualArea.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-<p>Referenced by <a class="el" href="AlbersEqualArea_8cpp_source.html#l00439">SetScale()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a577a9f43be8c1e238a4d56158acf8625"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::Reverse" ref="a577a9f43be8c1e238a4d56158acf8625" args="(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::AlbersEqualArea::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from Lambert conformal conic to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>central meridian longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>azimuthal scale of projection at point; the radial scale is the 1/<em>k</em>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The latitude origin is given by AlbersEqualArea::LatitudeOrigin(). No false easting or northing is added. <em>lon0</em> should be in the range [-180, 360]. The value of <em>lon</em> returned is in the range [-180, 180). The value of <em>lat</em> returned is in the range [-90,90]. If the input point is outside the legal projected space the nearest pole is returned. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8cpp_source.html#l00409">409</a> of file <a class="el" href="AlbersEqualArea_8cpp_source.html">AlbersEqualArea.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>, and <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a68a13780a73bcf9c8e50a3ce4eae3086"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::Forward" ref="a68a13780a73bcf9c8e50a3ce4eae3086" args="(real lon0, real lat, real lon, real &x, real &y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::AlbersEqualArea::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#aac57f3a9c0c08fb897a1e37034d127c1">AlbersEqualArea::Forward</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00233">233</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a871246cba03145512f3f12ceb3e3e3a8"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::Reverse" ref="a871246cba03145512f3f12ceb3e3e3a8" args="(real lon0, real x, real y, real &lat, real &lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::AlbersEqualArea::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a577a9f43be8c1e238a4d56158acf8625">AlbersEqualArea::Reverse</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00243">243</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a55d5ca45e7c80a96b3faf0094714ac59"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::MajorRadius" ref="a55d5ca45e7c80a96b3faf0094714ac59" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::AlbersEqualArea::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00256">256</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a565c63954715204781ae458db0d6b1f7"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::Flattening" ref="a565c63954715204781ae458db0d6b1f7" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::AlbersEqualArea::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00262">262</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad780e943e9a9ba168b350d809d0bfe08"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::OriginLatitude" ref="ad780e943e9a9ba168b350d809d0bfe08" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::AlbersEqualArea::OriginLatitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>latitude of the origin for the projection (degrees).</dd></dl>
-<p>This is the latitude of minimum azimuthal scale and equals the <em>stdlat</em> in the 1-parallel constructor and lies between <em>stdlat1</em> and <em>stdlat2</em> in the 2-parallel constructors. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00279">279</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af407e835eaf76895ee25ec9e7a9c090c"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::CentralScale" ref="af407e835eaf76895ee25ec9e7a9c090c" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::AlbersEqualArea::CentralScale </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>central scale for the projection. This is the azimuthal scale on the latitude of origin. </dd></dl>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00285">285</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Data Documentation</h2>
-<a class="anchor" id="ae643f7f82f5864f95da4cb14571ccf55"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::CylindricalEqualArea" ref="ae643f7f82f5864f95da4cb14571ccf55" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a> <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae643f7f82f5864f95da4cb14571ccf55">GeographicLib::AlbersEqualArea::CylindricalEqualArea</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a> with the WGS84 ellipsoid, <em>stdlat</em> = 0, and <em>k0</em> = 1. This degenerates to the cylindrical equal area projection. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00293">293</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae65fcb68843b36d206751527ebd08f44"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::AzimuthalEqualAreaNorth" ref="ae65fcb68843b36d206751527ebd08f44" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a> <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae65fcb68843b36d206751527ebd08f44">GeographicLib::AlbersEqualArea::AzimuthalEqualAreaNorth</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a> with the WGS84 ellipsoid, <em>stdlat</em> = 90<sup>o</sup>, and <em>k0</em> = 1. This degenerates to the Lambert azimuthal equal area projection. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00300">300</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aff0ff4e2f162107bd136310b44444cc1"></a><!-- doxytag: member="GeographicLib::AlbersEqualArea::AzimuthalEqualAreaSouth" ref="aff0ff4e2f162107bd136310b44444cc1" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a> <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#aff0ff4e2f162107bd136310b44444cc1">GeographicLib::AlbersEqualArea::AzimuthalEqualAreaSouth</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a> with the WGS84 ellipsoid, <em>stdlat</em> = -90<sup>o</sup>, and <em>k0</em> = 1. This degenerates to the Lambert azimuthal equal area projection. </p>
-
-<p>Definition at line <a class="el" href="AlbersEqualArea_8hpp_source.html#l00307">307</a> of file <a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="AlbersEqualArea_8hpp_source.html">AlbersEqualArea.hpp</a></li>
-<li><a class="el" href="AlbersEqualArea_8cpp_source.html">AlbersEqualArea.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1AzimuthalEquidistant-members.html b/doc/html/classGeographicLib_1_1AzimuthalEquidistant-members.html
deleted file mode 100644
index 7bb45e5..0000000
--- a/doc/html/classGeographicLib_1_1AzimuthalEquidistant-members.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">AzimuthalEquidistant</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::AzimuthalEquidistant Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a125571cdeed68d10192611cc12e221ce">AzimuthalEquidistant</a>(const Geodesic &earth=Geodesic::WGS84)</td><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a3f300fcc10aeee9dc88ff93fb991f191">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a8b4951b7c732f97aedeb8e869c9349d2">Forward</a>(real lat0, real lon0, real lat, real lon, real &x, real &y, real &azi, real &rk) const </td><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a950431c3d269fb82e9410f332c401786">Forward</a>(real lat0, real lon0, real lat, real lon, real &x, real &y) const </td><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a42c4103265af804395b8b5260a4c25e0">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a26d1b6fe3af8750babaeb60efdfec062">Reverse</a>(real lat0, real lon0, real x, real y, real &lat, real &lon, real &azi, real &rk) const </td><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a6b86b19f2e1c773e028e386a0f5e00e0">Reverse</a>(real lat0, real lon0, real x, real y, real &lat, real &lon) const </td><td><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">GeographicLib::AzimuthalEquidistant</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1AzimuthalEquidistant.html b/doc/html/classGeographicLib_1_1AzimuthalEquidistant.html
deleted file mode 100644
index 00304d7..0000000
--- a/doc/html/classGeographicLib_1_1AzimuthalEquidistant.html
+++ /dev/null
@@ -1,483 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::AzimuthalEquidistant Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">AzimuthalEquidistant</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::AzimuthalEquidistant Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::AzimuthalEquidistant" -->
-<p>Azimuthal Equidistant Projection.  
- <a href="classGeographicLib_1_1AzimuthalEquidistant.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="AzimuthalEquidistant_8hpp_source.html">GeographicLib/AzimuthalEquidistant.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1AzimuthalEquidistant-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a125571cdeed68d10192611cc12e221ce">AzimuthalEquidistant</a> (const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> &earth=<a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a8b4951b7c732f97aedeb8e869c9349d2">Forward</a> (real lat0, real lon0, real lat, real lon, real &x, real &y, real &azi, real &rk) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a26d1b6fe3af8750babaeb60efdfec062">Reverse</a> (real lat0, real lon0, real x, real y, real &lat, real &lon, real &azi, real &rk) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a950431c3d269fb82e9410f332c401786">Forward</a> (real lat0, real lon0, real lat, real lon, real &x, real &y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a6b86b19f2e1c773e028e386a0f5e00e0">Reverse</a> (real lat0, real lon0, real x, real y, real &lat, real &lon) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a42c4103265af804395b8b5260a4c25e0">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a3f300fcc10aeee9dc88ff93fb991f191">Flattening</a> () const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Azimuthal Equidistant Projection. </p>
-<p>Azimuthal equidistant projection centered at an arbitrary position on the ellipsoid. For a point in projected space (<em>x</em>, <em>y</em>), the geodesic distance from the center position is hypot(<em>x</em>, <em>y</em>) and the azimuth of the geodesic from the center point is atan2(<em>x</em>, <em>y</em>). The Forward and Reverse methods also return the azimuth <em>azi</em> of the geodesic at (<em>x</em>, <em>y</em>) and reciprocal scale <em>rk</em> in the azimuthal direction which, [...]
-<p>The conversions all take place using a <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object (by default <a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>). For more information on geodesics see <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::AzimuthalEquidistant class</span>
-<span class="comment">// $Id: d018fda4dc3289b06b9e6fe8cda16638430d9213 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="AzimuthalEquidistant_8hpp.html" title="Header for GeographicLib::AzimuthalEquidistant class.">GeographicLib/AzimuthalEquidistant.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> geod(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>());
-    <span class="comment">// Alternatively: const Geodesic& geod = Geodesic::WGS84;</span>
-    <span class="keyword">const</span> <span class="keywordtype">double</span> lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; <span class="comment">// Paris</span>
-    <a class="code" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">AzimuthalEquidistant</a> proj(geod);
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 50.9, lon = 1.8; <span class="comment">// Calais</span>
-      <span class="keywordtype">double</span> x, y;
-      proj.Forward(lat0, lon0, lat, lon, x, y);
-      cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">double</span> x = -38e3, y = 230e3;
-      <span class="keywordtype">double</span> lat, lon;
-      proj.Reverse(lat0, lon0, x, y, lat, lon);
-      cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="GeodesicProj.1.html">GeodesicProj</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">AzimuthalEquidistant</a>, <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">Gnomonic</a>, and <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">CassiniSoldner</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a125571cdeed68d10192611cc12e221ce"></a><!-- doxytag: member="GeographicLib::AzimuthalEquidistant::AzimuthalEquidistant" ref="a125571cdeed68d10192611cc12e221ce" args="(const Geodesic &earth=Geodesic::WGS84)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::AzimuthalEquidistant::AzimuthalEquidistant </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> & </td>
-          <td class="paramname"><em>earth</em> = <code><a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a></code></td><td>)</td>
-          <td>  throw ()<code> [inline, explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">AzimuthalEquidistant</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">earth</td><td>the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object to use for geodesic calculations. By default this uses the WGS84 ellipsoid. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="AzimuthalEquidistant_8hpp_source.html#l00056">56</a> of file <a class="el" href="AzimuthalEquidistant_8hpp_source.html">AzimuthalEquidistant.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a8b4951b7c732f97aedeb8e869c9349d2"></a><!-- doxytag: member="GeographicLib::AzimuthalEquidistant::Forward" ref="a8b4951b7c732f97aedeb8e869c9349d2" args="(real lat0, real lon0, real lat, real lon, real &x, real &y, real &azi, real &rk) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::AzimuthalEquidistant::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>rk</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to azimuthal equidistant.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat0</td><td>latitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>longitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi</td><td>azimuth of geodesic at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">rk</td><td>reciprocal of azimuthal scale at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat0</em> and <em>lat</em> should be in the range [-90, 90] and <em>lon0</em> and <em>lon</em> should be in the range [-180, 360]. The scale of the projection is 1 in the "radial" direction, <em>azi</em> clockwise from true north, and is 1/<em>rk</em> in the direction perpendicular to this. A call to Forward followed by a call to Reverse will return the original (<em>lat</em>, <em>lon</em>) (to within roundoff). </p>
-
-<p>Definition at line <a class="el" href="AzimuthalEquidistant_8cpp_source.html#l00025">25</a> of file <a class="el" href="AzimuthalEquidistant_8cpp_source.html">AzimuthalEquidistant.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeodesicProj_8cpp_source.html#l00037">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a26d1b6fe3af8750babaeb60efdfec062"></a><!-- doxytag: member="GeographicLib::AzimuthalEquidistant::Reverse" ref="a26d1b6fe3af8750babaeb60efdfec062" args="(real lat0, real lon0, real x, real y, real &lat, real &lon, real &azi, real &rk) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::AzimuthalEquidistant::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>rk</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from azimuthal equidistant to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat0</td><td>latitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>longitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi</td><td>azimuth of geodesic at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">rk</td><td>reciprocal of azimuthal scale at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat0</em> should be in the range [-90, 90] and <em>lon0</em> should be in the range [-180, 360]. <em>lat</em> will be in the range [-90, 90] and <em>lon</em> will be in the range [-180, 180). The scale of the projection is 1 in the "radial" direction, <em>azi</em> clockwise from true north, and is 1/<em>rk</em> in the direction perpendicular to this. A call to Reverse followed by a call to Forward will return the original (<em>x</em>, <em>y</em>) (to roundoff) only if the geodesic [...]
-
-<p>Definition at line <a class="el" href="AzimuthalEquidistant_8cpp_source.html#l00036">36</a> of file <a class="el" href="AzimuthalEquidistant_8cpp_source.html">AzimuthalEquidistant.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeodesicProj_8cpp_source.html#l00037">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a950431c3d269fb82e9410f332c401786"></a><!-- doxytag: member="GeographicLib::AzimuthalEquidistant::Forward" ref="a950431c3d269fb82e9410f332c401786" args="(real lat0, real lon0, real lat, real lon, real &x, real &y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::AzimuthalEquidistant::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a8b4951b7c732f97aedeb8e869c9349d2">AzimuthalEquidistant::Forward</a> without returning the azimuth and scale. </p>
-
-<p>Definition at line <a class="el" href="AzimuthalEquidistant_8hpp_source.html#l00107">107</a> of file <a class="el" href="AzimuthalEquidistant_8hpp_source.html">AzimuthalEquidistant.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6b86b19f2e1c773e028e386a0f5e00e0"></a><!-- doxytag: member="GeographicLib::AzimuthalEquidistant::Reverse" ref="a6b86b19f2e1c773e028e386a0f5e00e0" args="(real lat0, real lon0, real x, real y, real &lat, real &lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::AzimuthalEquidistant::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a26d1b6fe3af8750babaeb60efdfec062">AzimuthalEquidistant::Reverse</a> without returning the azimuth and scale. </p>
-
-<p>Definition at line <a class="el" href="AzimuthalEquidistant_8hpp_source.html#l00116">116</a> of file <a class="el" href="AzimuthalEquidistant_8hpp_source.html">AzimuthalEquidistant.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a42c4103265af804395b8b5260a4c25e0"></a><!-- doxytag: member="GeographicLib::AzimuthalEquidistant::MajorRadius" ref="a42c4103265af804395b8b5260a4c25e0" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::AzimuthalEquidistant::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="AzimuthalEquidistant_8hpp_source.html#l00129">129</a> of file <a class="el" href="AzimuthalEquidistant_8hpp_source.html">AzimuthalEquidistant.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3f300fcc10aeee9dc88ff93fb991f191"></a><!-- doxytag: member="GeographicLib::AzimuthalEquidistant::Flattening" ref="a3f300fcc10aeee9dc88ff93fb991f191" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::AzimuthalEquidistant::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="AzimuthalEquidistant_8hpp_source.html#l00135">135</a> of file <a class="el" href="AzimuthalEquidistant_8hpp_source.html">AzimuthalEquidistant.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="AzimuthalEquidistant_8hpp_source.html">AzimuthalEquidistant.hpp</a></li>
-<li><a class="el" href="AzimuthalEquidistant_8cpp_source.html">AzimuthalEquidistant.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1CassiniSoldner-members.html b/doc/html/classGeographicLib_1_1CassiniSoldner-members.html
deleted file mode 100644
index bf7e568..0000000
--- a/doc/html/classGeographicLib_1_1CassiniSoldner-members.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">CassiniSoldner</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::CassiniSoldner Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a948f9d934615c4120eb23740635200bc">CassiniSoldner</a>(const Geodesic &earth=Geodesic::WGS84)</td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a1b19cedb287ec9bbe59ec18a0ad2a5e4">CassiniSoldner</a>(real lat0, real lon0, const Geodesic &earth=Geodesic::WGS84)</td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a8d618d5abe71a49fc5ec4f2801d22555">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a37656c7551b10ad75a40758d0bba570d">Forward</a>(real lat, real lon, real &x, real &y, real &azi, real &rk) const </td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a87bf8d3b416bbfd8b7a2c5269245e693">Forward</a>(real lat, real lon, real &x, real &y) const </td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a3f71bb8b662438a7954be174315ce974">Init</a>() const </td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a2aa51120af199603f57d54b8c9a0bdde">LatitudeOrigin</a>() const </td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#aeb5c42b5cb6202a2371ba84bf76e0161">LongitudeOrigin</a>() const </td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a0019eeb70b5493de687c5cc36ae7f43c">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#af9bdc7088bca547dcc191691b2737759">Reset</a>(real lat0, real lon0)</td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#aea917b790f577026184a0bb262102db4">Reverse</a>(real x, real y, real &lat, real &lon, real &azi, real &rk) const </td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a27a675e995d2c1fdd0ab4c0ab397e065">Reverse</a>(real x, real y, real &lat, real &lon) const </td><td><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">GeographicLib::CassiniSoldner</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1CassiniSoldner.html b/doc/html/classGeographicLib_1_1CassiniSoldner.html
deleted file mode 100644
index 4e80438..0000000
--- a/doc/html/classGeographicLib_1_1CassiniSoldner.html
+++ /dev/null
@@ -1,576 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::CassiniSoldner Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">CassiniSoldner</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::CassiniSoldner Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::CassiniSoldner" -->
-<p>Cassini-Soldner Projection.  
- <a href="classGeographicLib_1_1CassiniSoldner.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="CassiniSoldner_8hpp_source.html">GeographicLib/CassiniSoldner.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1CassiniSoldner-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a948f9d934615c4120eb23740635200bc">CassiniSoldner</a> (const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> &earth=<a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a1b19cedb287ec9bbe59ec18a0ad2a5e4">CassiniSoldner</a> (real lat0, real lon0, const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> &earth=<a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#af9bdc7088bca547dcc191691b2737759">Reset</a> (real lat0, real lon0)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a37656c7551b10ad75a40758d0bba570d">Forward</a> (real lat, real lon, real &x, real &y, real &azi, real &rk) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#aea917b790f577026184a0bb262102db4">Reverse</a> (real x, real y, real &lat, real &lon, real &azi, real &rk) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a87bf8d3b416bbfd8b7a2c5269245e693">Forward</a> (real lat, real lon, real &x, real &y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a27a675e995d2c1fdd0ab4c0ab397e065">Reverse</a> (real x, real y, real &lat, real &lon) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a3f71bb8b662438a7954be174315ce974">Init</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a2aa51120af199603f57d54b8c9a0bdde">LatitudeOrigin</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#aeb5c42b5cb6202a2371ba84bf76e0161">LongitudeOrigin</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a0019eeb70b5493de687c5cc36ae7f43c">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a8d618d5abe71a49fc5ec4f2801d22555">Flattening</a> () const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Cassini-Soldner Projection. </p>
-<p>Cassini-Soldner projection centered at an arbitrary position, <em>lat0</em>, <em>lon0</em>, on the ellipsoid. This projection is a transverse cylindrical equidistant projection. The projection from (<em>lat</em>, <em>lon</em>) to easting and northing (<em>x</em>, <em>y</em>) is defined by geodesics as follows. Go north along a geodesic a distance <em>y</em> from the central point; then turn clockwise 90<sup>o</sup> and go a distance <em>x</em> along a geodesic. (Although the initial h [...]
-<p>Because of the properties of geodesics, the (<em>x</em>, <em>y</em>) grid is orthogonal. The scale in the easting direction is unity. The scale, <em>k</em>, in the northing direction is unity on the central meridian and increases away from the central meridian. The projection routines return <em>azi</em>, the true bearing of the easting direction, and <em>rk</em> = 1/<em>k</em>, the reciprocal of the scale in the northing direction.</p>
-<p>The conversions all take place using a <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object (by default <a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>). For more information on geodesics see <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>. The determination of (<em>lat1</em>, <em>lon1</em>) in the forward projection is by solving the inverse geodesic  [...]
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::CassiniSoldner class</span>
-<span class="comment">// $Id: f1d1d192c9449d198226a19cfbdc37d0b14ea52f $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="CassiniSoldner_8hpp.html" title="Header for GeographicLib::CassiniSoldner class.">GeographicLib/CassiniSoldner.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> geod(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>());
-    <span class="comment">// Alternatively: const Geodesic& geod = Geodesic::WGS84;</span>
-    <span class="keyword">const</span> <span class="keywordtype">double</span> lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; <span class="comment">// Paris</span>
-    <a class="code" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">CassiniSoldner</a> proj(lat0, lon0, geod);
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 50.9, lon = 1.8; <span class="comment">// Calais</span>
-      <span class="keywordtype">double</span> x, y;
-      proj.Forward(lat, lon, x, y);
-      cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">double</span> x = -38e3, y = 230e3;
-      <span class="keywordtype">double</span> lat, lon;
-      proj.Reverse(x, y, lat, lon);
-      cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="GeodesicProj.1.html">GeodesicProj</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">AzimuthalEquidistant</a>, <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">Gnomonic</a>, and <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">CassiniSoldner</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a948f9d934615c4120eb23740635200bc"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::CassiniSoldner" ref="a948f9d934615c4120eb23740635200bc" args="(const Geodesic &earth=Geodesic::WGS84)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::CassiniSoldner::CassiniSoldner </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> & </td>
-          <td class="paramname"><em>earth</em> = <code><a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a></code></td><td>)</td>
-          <td>  throw ()<code> [inline, explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">CassiniSoldner</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">earth</td><td>the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object to use for geodesic calculations. By default this uses the WGS84 ellipsoid.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>This constructor makes an "uninitialized" object. Call Reset to set the central latitude and longitude, prior to calling Forward and Reverse. </p>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00113">113</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1b19cedb287ec9bbe59ec18a0ad2a5e4"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::CassiniSoldner" ref="a1b19cedb287ec9bbe59ec18a0ad2a5e4" args="(real lat0, real lon0, const Geodesic &earth=Geodesic::WGS84)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::CassiniSoldner::CassiniSoldner </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> & </td>
-          <td class="paramname"><em>earth</em> = <code><a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a></code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">CassiniSoldner</a> specifying a center point.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat0</td><td>latitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>longitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">earth</td><td>the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object to use for geodesic calculations. By default this uses the WGS84 ellipsoid.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat0</em> should be in the range [-90, 90] and <em>lon0</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00127">127</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="af9bdc7088bca547dcc191691b2737759"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::Reset" ref="af9bdc7088bca547dcc191691b2737759" args="(real lat0, real lon0)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::CassiniSoldner::Reset </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the central point of the projection</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat0</td><td>latitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>longitude of center point of projection (degrees).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat0</em> should be in the range [-90, 90] and <em>lon0</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8cpp_source.html#l00026">26</a> of file <a class="el" href="CassiniSoldner_8cpp_source.html">CassiniSoldner.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a37656c7551b10ad75a40758d0bba570d"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::Forward" ref="a37656c7551b10ad75a40758d0bba570d" args="(real lat, real lon, real &x, real &y, real &azi, real &rk) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::CassiniSoldner::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>rk</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to Cassini-Soldner.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi</td><td>azimuth of easting direction at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">rk</td><td>reciprocal of azimuthal northing scale at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat</em> should be in the range [-90, 90] and <em>lon</em> should be in the range [-180, 360]. A call to Forward followed by a call to Reverse will return the original (<em>lat</em>, <em>lon</em>) (to within roundoff). The routine does nothing if the origin has not been set. </p>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8cpp_source.html#l00039">39</a> of file <a class="el" href="CassiniSoldner_8cpp_source.html">CassiniSoldner.cpp</a>.</p>
-
-<p>References <a class="el" href="GeodesicLine_8cpp_source.html#l00129">GeographicLib::GeodesicLine::GenPosition()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aea917b790f577026184a0bb262102db4"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::Reverse" ref="aea917b790f577026184a0bb262102db4" args="(real x, real y, real &lat, real &lon, real &azi, real &rk) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::CassiniSoldner::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>rk</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from Cassini-Soldner to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi</td><td>azimuth of easting direction at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">rk</td><td>reciprocal of azimuthal northing scale at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>A call to Reverse followed by a call to Forward will return the original (<em>x</em>, <em>y</em>) (to within roundoff), provided that <em>x</em> and <em>y</em> are sufficiently small not to "wrap around" the earth. The routine does nothing if the origin has not been set. </p>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8cpp_source.html#l00087">87</a> of file <a class="el" href="CassiniSoldner_8cpp_source.html">CassiniSoldner.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a87bf8d3b416bbfd8b7a2c5269245e693"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::Forward" ref="a87bf8d3b416bbfd8b7a2c5269245e693" args="(real lat, real lon, real &x, real &y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::CassiniSoldner::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a37656c7551b10ad75a40758d0bba570d">CassiniSoldner::Forward</a> without returning the azimuth and scale. </p>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00183">183</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a27a675e995d2c1fdd0ab4c0ab397e065"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::Reverse" ref="a27a675e995d2c1fdd0ab4c0ab397e065" args="(real x, real y, real &lat, real &lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::CassiniSoldner::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1CassiniSoldner.html#aea917b790f577026184a0bb262102db4">CassiniSoldner::Reverse</a> without returning the azimuth and scale. </p>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00192">192</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3f71bb8b662438a7954be174315ce974"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::Init" ref="a3f71bb8b662438a7954be174315ce974" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::CassiniSoldner::Init </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if the object has been initialized. </dd></dl>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00204">204</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2aa51120af199603f57d54b8c9a0bdde"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::LatitudeOrigin" ref="a2aa51120af199603f57d54b8c9a0bdde" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::CassiniSoldner::LatitudeOrigin </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>lat0</em> the latitude of origin (degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00209">209</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aeb5c42b5cb6202a2371ba84bf76e0161"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::LongitudeOrigin" ref="aeb5c42b5cb6202a2371ba84bf76e0161" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::CassiniSoldner::LongitudeOrigin </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>lon0</em> the longitude of origin (degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00215">215</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0019eeb70b5493de687c5cc36ae7f43c"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::MajorRadius" ref="a0019eeb70b5493de687c5cc36ae7f43c" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::CassiniSoldner::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00222">222</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8d618d5abe71a49fc5ec4f2801d22555"></a><!-- doxytag: member="GeographicLib::CassiniSoldner::Flattening" ref="a8d618d5abe71a49fc5ec4f2801d22555" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::CassiniSoldner::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="CassiniSoldner_8hpp_source.html#l00228">228</a> of file <a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="CassiniSoldner_8hpp_source.html">CassiniSoldner.hpp</a></li>
-<li><a class="el" href="CassiniSoldner_8cpp_source.html">CassiniSoldner.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1CircularEngine-members.html b/doc/html/classGeographicLib_1_1CircularEngine-members.html
deleted file mode 100644
index 055384e..0000000
--- a/doc/html/classGeographicLib_1_1CircularEngine-members.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::CircularEngine Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CircularEngine.html#a91dd2b9cc408e35f8cb6482cdf3aadbf">CircularEngine</a>()</td><td><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CircularEngine.html#a243c90a7f9bf3f7aa96877a4b0667a89">GravityCircle</a> class</td><td><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CircularEngine.html#a7294f6a1cc932f8fd1562a15602e9e86">MagneticCircle</a> class</td><td><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CircularEngine.html#a8e39d83fcbed23df36ef4fefe2a86420">operator()</a>(real coslon, real sinlon) const </td><td><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CircularEngine.html#a48d2327412e0c674285ff6bb85440054">operator()</a>(real lon) const </td><td><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CircularEngine.html#aa15c408a0ff4cf17575e62edfeae77a6">operator()</a>(real coslon, real sinlon, real &gradx, real &grady, real &gradz) const </td><td><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CircularEngine.html#a88a0726718baa7b457c77b5681fabb0a">operator()</a>(real lon, real &gradx, real &grady, real &gradz) const </td><td><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1CircularEngine.html#ab89064f7f3c32a745c72d8c3188f7485">SphericalEngine</a> class</td><td><a class="el" href="classGeographicLib_1_1CircularEngine.html">GeographicLib::CircularEngine</a></td><td><code> [friend]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1CircularEngine.html b/doc/html/classGeographicLib_1_1CircularEngine.html
deleted file mode 100644
index a2767e4..0000000
--- a/doc/html/classGeographicLib_1_1CircularEngine.html
+++ /dev/null
@@ -1,392 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::CircularEngine Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::CircularEngine Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::CircularEngine" -->
-<p>Spherical Harmonic sums for a circle.  
- <a href="classGeographicLib_1_1CircularEngine.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="CircularEngine_8hpp_source.html">GeographicLib/CircularEngine.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1CircularEngine-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html#a91dd2b9cc408e35f8cb6482cdf3aadbf">CircularEngine</a> ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html#a8e39d83fcbed23df36ef4fefe2a86420">operator()</a> (real coslon, real sinlon) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html#a48d2327412e0c674285ff6bb85440054">operator()</a> (real lon) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html#aa15c408a0ff4cf17575e62edfeae77a6">operator()</a> (real coslon, real sinlon, real &gradx, real &grady, real &gradz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html#a88a0726718baa7b457c77b5681fabb0a">operator()</a> (real lon, real &gradx, real &grady, real &gradz) const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html#ab89064f7f3c32a745c72d8c3188f7485">SphericalEngine</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html#a243c90a7f9bf3f7aa96877a4b0667a89">GravityCircle</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html#a7294f6a1cc932f8fd1562a15602e9e86">MagneticCircle</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Spherical Harmonic sums for a circle. </p>
-<p>The class is a companion to <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>. If the results of a spherical harmonic sum are needed for several points on a circle of constant latitude <em>lat</em> and height <em>h</em>, then <a class="el" href="classGeographicLib_1_1SphericalEngine.html#af6a5fa63535d47cf528b733bb6a97901">SphericalEngine::Circle</a> can compute the inner sum, which is independent of [...]
-<p><a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> is tightly linked to the internals of <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>. For that reason, the constructor for this class is private. Use <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">SphericalHarmonic::Ci [...]
-<p><a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> stores the coefficients needed to allow the summation over order to be performed in 2 or 6 vectors of length <em>M</em> + 1 (depending on whether gradients are to be calculated). For this reason the constructor may throw a bad_alloc exception.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::CircularEngine class</span>
-<span class="comment">// $Id: a742c5ccdb47b73fcd599dc1adda36a70450b5a5 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <vector></span>
-<span class="preprocessor">#include <<a class="code" href="CircularEngine_8hpp.html" title="Header for GeographicLib::CircularEngine class.">GeographicLib/CircularEngine.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="SphericalHarmonic_8hpp.html" title="Header for GeographicLib::SphericalHarmonic class.">GeographicLib/SphericalHarmonic.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="comment">// This computes the same value as example-SphericalHarmonic.cpp using a</span>
-  <span class="comment">// CircularEngine (which will be faster if many values on a circle of</span>
-  <span class="comment">// latitude are to be found).</span>
-  <span class="keywordflow">try</span> {
-    <span class="keywordtype">int</span> N = 3;                  <span class="comment">// The maxium degree</span>
-    <span class="keywordtype">double</span> ca[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; <span class="comment">// cosine coefficients</span>
-    vector<double> C(ca, ca + (N + 1) * (N + 2) / 2);
-    <span class="keywordtype">double</span> sa[] = {6, 5, 4, 3, 2, 1}; <span class="comment">// sine coefficients</span>
-    vector<double> S(sa, sa + N * (N + 1) / 2);
-    <span class="keywordtype">double</span> a = 1;
-    <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> h(C, S, N, a);
-    <span class="keywordtype">double</span> x = 2, y = 3, z = 1, p = <a class="code" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">Math::hypot</a>(x, y);
-    <a class="code" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> circ = h.Circle(p, z, <span class="keyword">true</span>);
-    <span class="keywordtype">double</span> v, vx, vy, vz;
-    v = circ(x/p, y/p, vx, vy, vz);
-    cout << v << <span class="stringliteral">" "</span> << vx << <span class="stringliteral">" "</span> << vy << <span class="stringliteral">" "</span> << vz << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a91dd2b9cc408e35f8cb6482cdf3aadbf"></a><!-- doxytag: member="GeographicLib::CircularEngine::CircularEngine" ref="a91dd2b9cc408e35f8cb6482cdf3aadbf" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::CircularEngine::CircularEngine </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor. <a class="el" href="classGeographicLib_1_1CircularEngine.html#a8e39d83fcbed23df36ef4fefe2a86420">CircularEngine::operator()()</a> on the resulting object returns zero. The resulting object can be assigned to the result of <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">SphericalHarmonic::Circle</a>. </p>
-
-<p>Definition at line <a class="el" href="CircularEngine_8hpp_source.html#l00120">120</a> of file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a8e39d83fcbed23df36ef4fefe2a86420"></a><!-- doxytag: member="GeographicLib::CircularEngine::operator()" ref="a8e39d83fcbed23df36ef4fefe2a86420" args="(real coslon, real sinlon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::CircularEngine::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>coslon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>sinlon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the sum for a particular longitude given in terms of its cosine and sine.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">coslon</td><td>the cosine of the longitude. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">sinlon</td><td>the sine of the longitude. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the value of the sum.</dd></dl>
-<p>The arguments must satisfy <em>coslon</em><sup>2</sup> + <em>sinlon</em><sup>2</sup> = 1. </p>
-
-<p>Definition at line <a class="el" href="CircularEngine_8hpp_source.html#l00138">138</a> of file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a48d2327412e0c674285ff6bb85440054"></a><!-- doxytag: member="GeographicLib::CircularEngine::operator()" ref="a48d2327412e0c674285ff6bb85440054" args="(real lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::CircularEngine::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the sum for a particular longitude.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the longitude (degrees). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the value of the sum. </dd></dl>
-
-<p>Definition at line <a class="el" href="CircularEngine_8hpp_source.html#l00149">149</a> of file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa15c408a0ff4cf17575e62edfeae77a6"></a><!-- doxytag: member="GeographicLib::CircularEngine::operator()" ref="aa15c408a0ff4cf17575e62edfeae77a6" args="(real coslon, real sinlon, real &gradx, real &grady, real &gradz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::CircularEngine::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>coslon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>sinlon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>grady</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the sum and its gradient for a particular longitude given in terms of its cosine and sine.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">coslon</td><td>the cosine of the longitude. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">sinlon</td><td>the sine of the longitude. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradx</td><td><em>x</em> component of the gradient. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">grady</td><td><em>y</em> component of the gradient. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradz</td><td><em>z</em> component of the gradient. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the value of the sum.</dd></dl>
-<p>The gradients will only be computed if the <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> object was created with this capability (e.g., via <em>gradp</em> = true in <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">SphericalHarmonic::Circle</a>). If not, <em>gradx</em>, etc., will not be touched. The arguments must satisfy <em>coslon</em><sup>2</sup> + <e [...]
-
-<p>Definition at line <a class="el" href="CircularEngine_8hpp_source.html#l00172">172</a> of file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a88a0726718baa7b457c77b5681fabb0a"></a><!-- doxytag: member="GeographicLib::CircularEngine::operator()" ref="a88a0726718baa7b457c77b5681fabb0a" args="(real lon, real &gradx, real &grady, real &gradz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::CircularEngine::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>grady</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the sum and its gradient for a particular longitude.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradx</td><td><em>x</em> component of the gradient. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">grady</td><td><em>y</em> component of the gradient. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradz</td><td><em>z</em> component of the gradient. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the value of the sum.</dd></dl>
-<p>The gradients will only be computed if the <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> object was created with this capability (e.g., via <em>gradp</em> = true in <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">SphericalHarmonic::Circle</a>). If not, <em>gradx</em>, etc., will not be touched. </p>
-
-<p>Definition at line <a class="el" href="CircularEngine_8hpp_source.html#l00191">191</a> of file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="ab89064f7f3c32a745c72d8c3188f7485"></a><!-- doxytag: member="GeographicLib::CircularEngine::SphericalEngine" ref="ab89064f7f3c32a745c72d8c3188f7485" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1SphericalEngine.html">SphericalEngine</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="CircularEngine_8hpp_source.html#l00077">77</a> of file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a243c90a7f9bf3f7aa96877a4b0667a89"></a><!-- doxytag: member="GeographicLib::CircularEngine::GravityCircle" ref="a243c90a7f9bf3f7aa96877a4b0667a89" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1GravityCircle.html">GravityCircle</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="CircularEngine_8hpp_source.html#l00078">78</a> of file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7294f6a1cc932f8fd1562a15602e9e86"></a><!-- doxytag: member="GeographicLib::CircularEngine::MagneticCircle" ref="a7294f6a1cc932f8fd1562a15602e9e86" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1MagneticCircle.html">MagneticCircle</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="CircularEngine_8hpp_source.html#l00079">79</a> of file <a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="CircularEngine_8hpp_source.html">CircularEngine.hpp</a></li>
-<li><a class="el" href="CircularEngine_8cpp_source.html">CircularEngine.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Constants-members.html b/doc/html/classGeographicLib_1_1Constants-members.html
deleted file mode 100644
index b44d03e..0000000
--- a/doc/html/classGeographicLib_1_1Constants-members.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Constants.html">Constants</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::Constants Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#ae5aa419ea6c6ce121c912c8afea0a0b7">acre</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a8f8e6d3bd08abb72b686a0f4398b587b">arcminute</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a04858f922295d2a04bb021eecac07179">arcsecond</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#ac4f3792bce075999b0c9b9485e4079d0">chain</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a26ff02acd8141a815428cddf0ff3ff66">degree</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a51cf3e97984ac301b1f27b667b360be0">fathom</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#ac69f40e7e56c71bc72011c7591f7bef9">foot</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a824d39311cf43f916d4ac19e46da3713">furlong</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a9b955c3556dcfcebce6a2926bfeaf464">GRS80_a</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a7541474ca70cbec7fccb08d3e3fbfe31">GRS80_GM</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a59c7a1d298eb72256119894b67470974">GRS80_J2</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a9caea97ab2be0959c7972155141bfd1b">GRS80_omega</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a4cc4ae77e3136d7784cd7c69d6927adc">hectare</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a4ec5a9d91ab0ccbd3bd921cda4bfc836">kilometer</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#ac1b17e7cf67ef42b9b91f3677c2eaa75">meter</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#afeffc10d6b8171b39a50949cac149063">meter</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a49cb7b828f7c85c36761d47b8db6518c">mile</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#afedc242aa3ee9b3bf9c72d6d81fc6740">nauticalmile</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a1956824e4f2b22705d57566229a7c311">square_kilometer</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#ab92200b36f9d306a2710738c6d9bc705">square_meter</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a702b928c9a29dbcc7324b9d835b38d94">square_meter</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#ab7f473c27ad50da450b4192155cc92f9">square_mile</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a5acf6b2c23d1c9ddf140a6b4e588e88a">square_nauticalmile</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a7faf6e7435791c0a8061296a79c0be08">surveyfoot</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a3fe287ab1a0847f5392c1aaf9c5e635a">UPS_k0</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a49d415263ee320d1a63a857f784439a3">UPS_k0</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#ab5cc487ab160c0a213fdf8e12cde198a">UTM_k0</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#aebbe37ebfb407a851f72caa95e5dc94f">UTM_k0</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">WGS84_a</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a53f39f52837f47490fbdf7332a37dd8b">WGS84_a</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">WGS84_f</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#acd335c7f28440e0774666cedffed84f0">WGS84_f</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#af7806106d7bd289bb63d5290e79c87a6">WGS84_GM</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a98c114d5a6ca42d3e4ece8595a0c2180">WGS84_omega</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a199810de7ff3351be6473d20ef045789">WGS84_r</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Constants.html#a00057328caa45bc216d18243786920c2">yard</a>()</td><td><a class="el" href="classGeographicLib_1_1Constants.html">GeographicLib::Constants</a></td><td><code> [inline, static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Constants.html b/doc/html/classGeographicLib_1_1Constants.html
deleted file mode 100644
index 9773fc4..0000000
--- a/doc/html/classGeographicLib_1_1Constants.html
+++ /dev/null
@@ -1,951 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::Constants Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Constants.html">Constants</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::Constants Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::Constants" -->
-<p>Constants needed by GeographicLib  
- <a href="classGeographicLib_1_1Constants.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1Constants-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a26ff02acd8141a815428cddf0ff3ff66">degree</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a8f8e6d3bd08abb72b686a0f4398b587b">arcminute</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a04858f922295d2a04bb021eecac07179">arcsecond</a> ()  throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Ellipsoid parameters</div></td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">WGS84_a</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a53f39f52837f47490fbdf7332a37dd8b">WGS84_a</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">WGS84_f</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#acd335c7f28440e0774666cedffed84f0">WGS84_f</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#af7806106d7bd289bb63d5290e79c87a6">WGS84_GM</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a98c114d5a6ca42d3e4ece8595a0c2180">WGS84_omega</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a199810de7ff3351be6473d20ef045789">WGS84_r</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a9b955c3556dcfcebce6a2926bfeaf464">GRS80_a</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a7541474ca70cbec7fccb08d3e3fbfe31">GRS80_GM</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a9caea97ab2be0959c7972155141bfd1b">GRS80_omega</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a59c7a1d298eb72256119894b67470974">GRS80_J2</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#ab5cc487ab160c0a213fdf8e12cde198a">UTM_k0</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#aebbe37ebfb407a851f72caa95e5dc94f">UTM_k0</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a3fe287ab1a0847f5392c1aaf9c5e635a">UPS_k0</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a49d415263ee320d1a63a857f784439a3">UPS_k0</a> ()  throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">SI units</div></td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#ac1b17e7cf67ef42b9b91f3677c2eaa75">meter</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#afeffc10d6b8171b39a50949cac149063">meter</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a4ec5a9d91ab0ccbd3bd921cda4bfc836">kilometer</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#afedc242aa3ee9b3bf9c72d6d81fc6740">nauticalmile</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#ab92200b36f9d306a2710738c6d9bc705">square_meter</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a702b928c9a29dbcc7324b9d835b38d94">square_meter</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a4cc4ae77e3136d7784cd7c69d6927adc">hectare</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a1956824e4f2b22705d57566229a7c311">square_kilometer</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a5acf6b2c23d1c9ddf140a6b4e588e88a">square_nauticalmile</a> ()  throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Anachronistic British units</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#ac69f40e7e56c71bc72011c7591f7bef9">foot</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a00057328caa45bc216d18243786920c2">yard</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a51cf3e97984ac301b1f27b667b360be0">fathom</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#ac4f3792bce075999b0c9b9485e4079d0">chain</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a824d39311cf43f916d4ac19e46da3713">furlong</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a49cb7b828f7c85c36761d47b8db6518c">mile</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#ae5aa419ea6c6ce121c912c8afea0a0b7">acre</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#ab7f473c27ad50da450b4192155cc92f9">square_mile</a> ()  throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Anachronistic US units</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html#a7faf6e7435791c0a8061296a79c0be08">surveyfoot</a> ()  throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Constants needed by GeographicLib </p>
-<p>Define constants specifying the WGS84 ellipsoid, the UTM and UPS projections, and various unit conversions.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::Constants class</span>
-<span class="comment">// $Id: c32f14d43abd9e969043dd0506b00c2458763419 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    cout << <a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>() << <span class="stringliteral">" 1/"</span> << 1/<a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>() << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a26ff02acd8141a815428cddf0ff3ff66"></a><!-- doxytag: member="GeographicLib::Constants::degree" ref="a26ff02acd8141a815428cddf0ff3ff66" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::degree </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Math.html#a0f3b4ea16cc2cb21557555fca3b1c201">Math::degree<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00081">81</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8f8e6d3bd08abb72b686a0f4398b587b"></a><!-- doxytag: member="GeographicLib::Constants::arcminute" ref="a8f8e6d3bd08abb72b686a0f4398b587b" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::arcminute </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of radians in an arcminute. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00085">85</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a04858f922295d2a04bb021eecac07179"></a><!-- doxytag: member="GeographicLib::Constants::arcsecond" ref="a04858f922295d2a04bb021eecac07179" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::arcsecond </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of radians in an arcsecond. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00090">90</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae12127984ac6713823746d917b4abfa7"></a><!-- doxytag: member="GeographicLib::Constants::WGS84_a" ref="ae12127984ac6713823746d917b4abfa7" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::WGS84_a </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the equatorial radius of WGS84 ellipsoid (6378137 m). </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00100">100</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a53f39f52837f47490fbdf7332a37dd8b"></a><!-- doxytag: member="GeographicLib::Constants::WGS84_a" ref="a53f39f52837f47490fbdf7332a37dd8b" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::WGS84_a </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">WGS84_a<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00105">105</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acc5244425bb484594be51b27d56cd335"></a><!-- doxytag: member="GeographicLib::Constants::WGS84_f" ref="acc5244425bb484594be51b27d56cd335" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::WGS84_f </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the flattening of WGS84 ellipsoid (1/298.257223563). </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00110">110</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acd335c7f28440e0774666cedffed84f0"></a><!-- doxytag: member="GeographicLib::Constants::WGS84_f" ref="acd335c7f28440e0774666cedffed84f0" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::WGS84_f </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">WGS84_f<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00115">115</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af7806106d7bd289bb63d5290e79c87a6"></a><!-- doxytag: member="GeographicLib::Constants::WGS84_GM" ref="af7806106d7bd289bb63d5290e79c87a6" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::WGS84_GM </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the gravitational constant of the WGS84 ellipsoid, <em>GM</em>, in m<sup>3</sup> s<sup>-2</sup>. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00121">121</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a98c114d5a6ca42d3e4ece8595a0c2180"></a><!-- doxytag: member="GeographicLib::Constants::WGS84_omega" ref="a98c114d5a6ca42d3e4ece8595a0c2180" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::WGS84_omega </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the angular velocity of the the WGS84 ellipsoid, <em>omega</em>, in rad s<sup>-1</sup>. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00128">128</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a199810de7ff3351be6473d20ef045789"></a><!-- doxytag: member="GeographicLib::Constants::WGS84_r" ref="a199810de7ff3351be6473d20ef045789" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::WGS84_r </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00142">142</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9b955c3556dcfcebce6a2926bfeaf464"></a><!-- doxytag: member="GeographicLib::Constants::GRS80_a" ref="a9b955c3556dcfcebce6a2926bfeaf464" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::GRS80_a </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the equatorial radius of GRS80 ellipsoid, <em>a</em>, in m. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00147">147</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7541474ca70cbec7fccb08d3e3fbfe31"></a><!-- doxytag: member="GeographicLib::Constants::GRS80_GM" ref="a7541474ca70cbec7fccb08d3e3fbfe31" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::GRS80_GM </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the gravitational constant of the GRS80 ellipsoid, <em>GM</em>, in m<sup>3</sup> s<sup>-2</sup>. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00154">154</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9caea97ab2be0959c7972155141bfd1b"></a><!-- doxytag: member="GeographicLib::Constants::GRS80_omega" ref="a9caea97ab2be0959c7972155141bfd1b" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::GRS80_omega </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the angular velocity of the the GRS80 ellipsoid, <em>omega</em>, in rad s<sup>-1</sup>.</dd></dl>
-<p>This is about 2*pi*366.25 / (365.25*24*3600) rad s<sup>-1</sup>. 365.25 is the number of days in a Julian year and 365.35/366.25 converts from solar days to sidereal days. Using the number of days in a Gregorian year (365.2425) results in a worse approximation (because the Gregorian year includes the precession of the earth's axis). </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00167">167</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a59c7a1d298eb72256119894b67470974"></a><!-- doxytag: member="GeographicLib::Constants::GRS80_J2" ref="a59c7a1d298eb72256119894b67470974" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::GRS80_J2 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the dynamical form factor of the GRS80 ellipsoid, <em>J</em><sub>2</sub>. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00174">174</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab5cc487ab160c0a213fdf8e12cde198a"></a><!-- doxytag: member="GeographicLib::Constants::UTM_k0" ref="ab5cc487ab160c0a213fdf8e12cde198a" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::UTM_k0 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the central scale factor for UTM (0.9996). </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00180">180</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aebbe37ebfb407a851f72caa95e5dc94f"></a><!-- doxytag: member="GeographicLib::Constants::UTM_k0" ref="aebbe37ebfb407a851f72caa95e5dc94f" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::UTM_k0 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Constants.html#ab5cc487ab160c0a213fdf8e12cde198a">UTM_k0<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00185">185</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3fe287ab1a0847f5392c1aaf9c5e635a"></a><!-- doxytag: member="GeographicLib::Constants::UPS_k0" ref="a3fe287ab1a0847f5392c1aaf9c5e635a" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::UPS_k0 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the central scale factor for UPS (0.994). </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00190">190</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a49d415263ee320d1a63a857f784439a3"></a><!-- doxytag: member="GeographicLib::Constants::UPS_k0" ref="a49d415263ee320d1a63a857f784439a3" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::UPS_k0 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Constants.html#a3fe287ab1a0847f5392c1aaf9c5e635a">UPS_k0<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00195">195</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac1b17e7cf67ef42b9b91f3677c2eaa75"></a><!-- doxytag: member="GeographicLib::Constants::meter" ref="ac1b17e7cf67ef42b9b91f3677c2eaa75" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::meter </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in a meter.</dd></dl>
-<p>This is unity, but this lets the internal system of units be changed if necessary. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00208">208</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afeffc10d6b8171b39a50949cac149063"></a><!-- doxytag: member="GeographicLib::Constants::meter" ref="afeffc10d6b8171b39a50949cac149063" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::meter </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Constants.html#ac1b17e7cf67ef42b9b91f3677c2eaa75">meter<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00212">212</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4ec5a9d91ab0ccbd3bd921cda4bfc836"></a><!-- doxytag: member="GeographicLib::Constants::kilometer" ref="a4ec5a9d91ab0ccbd3bd921cda4bfc836" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::kilometer </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in a kilometer. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00216">216</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afedc242aa3ee9b3bf9c72d6d81fc6740"></a><!-- doxytag: member="GeographicLib::Constants::nauticalmile" ref="afedc242aa3ee9b3bf9c72d6d81fc6740" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::nauticalmile </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in a nautical mile (approximately 1 arc minute) </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00222">222</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab92200b36f9d306a2710738c6d9bc705"></a><!-- doxytag: member="GeographicLib::Constants::square_meter" ref="ab92200b36f9d306a2710738c6d9bc705" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Constants::square_meter </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of square meters in a square meter.</dd></dl>
-<p>This is unity, but this lets the internal system of units be changed if necessary. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00232">232</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a702b928c9a29dbcc7324b9d835b38d94"></a><!-- doxytag: member="GeographicLib::Constants::square_meter" ref="a702b928c9a29dbcc7324b9d835b38d94" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::square_meter </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Constants.html#ab92200b36f9d306a2710738c6d9bc705">square_meter<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00237">237</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4cc4ae77e3136d7784cd7c69d6927adc"></a><!-- doxytag: member="GeographicLib::Constants::hectare" ref="a4cc4ae77e3136d7784cd7c69d6927adc" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::hectare </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of square meters in a hectare. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00242">242</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1956824e4f2b22705d57566229a7c311"></a><!-- doxytag: member="GeographicLib::Constants::square_kilometer" ref="a1956824e4f2b22705d57566229a7c311" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::square_kilometer </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of square meters in a square kilometer. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00247">247</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5acf6b2c23d1c9ddf140a6b4e588e88a"></a><!-- doxytag: member="GeographicLib::Constants::square_nauticalmile" ref="a5acf6b2c23d1c9ddf140a6b4e588e88a" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::square_nauticalmile </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of square meters in a square nautical mile. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00252">252</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac69f40e7e56c71bc72011c7591f7bef9"></a><!-- doxytag: member="GeographicLib::Constants::foot" ref="ac69f40e7e56c71bc72011c7591f7bef9" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::foot </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in an international foot. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00262">262</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a00057328caa45bc216d18243786920c2"></a><!-- doxytag: member="GeographicLib::Constants::yard" ref="a00057328caa45bc216d18243786920c2" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::yard </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in a yard. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00267">267</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a51cf3e97984ac301b1f27b667b360be0"></a><!-- doxytag: member="GeographicLib::Constants::fathom" ref="a51cf3e97984ac301b1f27b667b360be0" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::fathom </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in a fathom. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00271">271</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac4f3792bce075999b0c9b9485e4079d0"></a><!-- doxytag: member="GeographicLib::Constants::chain" ref="ac4f3792bce075999b0c9b9485e4079d0" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::chain </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in a chain. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00275">275</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a824d39311cf43f916d4ac19e46da3713"></a><!-- doxytag: member="GeographicLib::Constants::furlong" ref="a824d39311cf43f916d4ac19e46da3713" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::furlong </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in a furlong. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00279">279</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a49cb7b828f7c85c36761d47b8db6518c"></a><!-- doxytag: member="GeographicLib::Constants::mile" ref="a49cb7b828f7c85c36761d47b8db6518c" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::mile </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in a statute mile. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00283">283</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae5aa419ea6c6ce121c912c8afea0a0b7"></a><!-- doxytag: member="GeographicLib::Constants::acre" ref="ae5aa419ea6c6ce121c912c8afea0a0b7" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::acre </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of square meters in an acre. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00287">287</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab7f473c27ad50da450b4192155cc92f9"></a><!-- doxytag: member="GeographicLib::Constants::square_mile" ref="ab7f473c27ad50da450b4192155cc92f9" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::square_mile </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of square meters in a square statute mile. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00291">291</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7faf6e7435791c0a8061296a79c0be08"></a><!-- doxytag: member="GeographicLib::Constants::surveyfoot" ref="a7faf6e7435791c0a8061296a79c0be08" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Constants::surveyfoot </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of meters in a US survey foot. </dd></dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00300">300</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="Constants_8hpp_source.html">Constants.hpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1DMS-members.html b/doc/html/classGeographicLib_1_1DMS-members.html
deleted file mode 100644
index f825568..0000000
--- a/doc/html/classGeographicLib_1_1DMS-members.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1DMS.html">DMS</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::DMS Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24">AZIMUTH</a> enum value</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">component</a> enum name</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">Decode</a>(const std::string &dms, flag &ind)</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a4987f8eb6c1ba5402eb25d6225ab58e1">Decode</a>(real d, real m=0, real s=0)</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a868248d72f6b0bf2dae18a15d741ac43">DecodeAngle</a>(const std::string &angstr)</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a0512cc1275e089138e1550efbee421d9">DecodeAzimuth</a>(const std::string &azistr)</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DecodeLatLon</a>(const std::string &dmsa, const std::string &dmsb, real &lat, real &lon, bool swaplatlong=false)</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a8ee59944227e74901b71f27410d70781">DEGREE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">Encode</a>(real angle, component trailing, unsigned prec, flag ind, char dmssep)</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">Encode</a>(real angle, component trailing, unsigned prec, flag ind=NONE)</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#aeb9d338b12e885092a611bda7e52f9f4">Encode</a>(real angle, unsigned prec, flag ind=NONE, char dmssep=char(0))</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a1ae785976e5d7c6346cfb68863884b55">Encode</a>(real ang, real &d, real &m)</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#af27df7ef6ac42bf0e6341749b4b96eec">Encode</a>(real ang, real &d, real &m, real &s)</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> enum name</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">LATITUDE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">LONGITUDE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a9884bea675fd214061e534e76a1c15d6">MINUTE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1">NONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">NUMBER</a> enum value</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a10c28c85ddfa71db5f1d46d362333075">SECOND</a> enum value</td><td><a class="el" href="classGeographicLib_1_1DMS.html">GeographicLib::DMS</a></td><td></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1DMS.html b/doc/html/classGeographicLib_1_1DMS.html
deleted file mode 100644
index c873efe..0000000
--- a/doc/html/classGeographicLib_1_1DMS.html
+++ /dev/null
@@ -1,732 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::DMS Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1DMS.html">DMS</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::DMS Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::DMS" -->
-<p>Convert between degrees and DMS representation.  
- <a href="classGeographicLib_1_1DMS.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="DMS_8hpp_source.html">GeographicLib/DMS.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1DMS-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> { <br/>
-  <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1">NONE</a>, 
-<a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">LATITUDE</a>, 
-<a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">LONGITUDE</a>, 
-<a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24">AZIMUTH</a>, 
-<br/>
-  <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">NUMBER</a>
-<br/>
- }</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">component</a> { <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a8ee59944227e74901b71f27410d70781">DEGREE</a>, 
-<a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a9884bea675fd214061e534e76a1c15d6">MINUTE</a>, 
-<a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a10c28c85ddfa71db5f1d46d362333075">SECOND</a>
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">Decode</a> (const std::string &dms, <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> &ind)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#a4987f8eb6c1ba5402eb25d6225ab58e1">Decode</a> (real d, real m=0, real s=0)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">DecodeLatLon</a> (const std::string &dmsa, const std::string &dmsb, real &lat, real &lon, bool swaplatlong=false)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#a868248d72f6b0bf2dae18a15d741ac43">DecodeAngle</a> (const std::string &angstr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#a0512cc1275e089138e1550efbee421d9">DecodeAzimuth</a> (const std::string &azistr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">Encode</a> (real angle, <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">component</a> trailing, unsigned prec, <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ind, char dmssep)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">Encode</a> (real angle, <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">component</a> trailing, unsigned prec, <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ind=NONE)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#aeb9d338b12e885092a611bda7e52f9f4">Encode</a> (real angle, unsigned prec, <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> ind=NONE, char dmssep=char(0))</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#a1ae785976e5d7c6346cfb68863884b55">Encode</a> (real ang, real &d, real &m)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html#af27df7ef6ac42bf0e6341749b4b96eec">Encode</a> (real ang, real &d, real &m, real &s)  throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Convert between degrees and DMS representation. </p>
-<p>Parse a string representing degree, minutes, and seconds and return the angle in degrees and format an angle in degrees as degree, minutes, and seconds. In addition, handle NANs and infinities on input and output.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::DMS class</span>
-<span class="comment">// $Id: c12828a51e75bb4a2a28f67768acdb405f63a197 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    {
-      <span class="keywordtype">string</span> dms = <span class="stringliteral">"30d14'45.6\"S"</span>;
-      <a class="code" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a><a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">::flag</a> type;
-      <span class="keywordtype">double</span> ang = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(dms, type);
-      cout << type << <span class="stringliteral">" "</span> << ang << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="keywordtype">double</span> ang = -30.245715;
-      <span class="keywordtype">string</span> dms = <a class="code" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a>(ang, 6, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">DMS::LATITUDE</a>);
-      cout << dms << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="a7a1101fd2577636863753baae3e54869"></a><!-- doxytag: member="GeographicLib::DMS::flag" ref="a7a1101fd2577636863753baae3e54869" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">GeographicLib::DMS::flag</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Indicator for presence of hemisphere indicator (N/S/E/W) on latitudes and longitudes. </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1"></a><!-- doxytag: member="NONE" ref="a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1" args="" -->NONE</em> </td><td>
-<p>No indicator present. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b"></a><!-- doxytag: member="LATITUDE" ref="a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b" args="" -->LATITUDE</em> </td><td>
-<p>Latitude indicator (N/S) present. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f"></a><!-- doxytag: member="LONGITUDE" ref="a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f" args="" -->LONGITUDE</em> </td><td>
-<p>Longitude indicator (E/W) present. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24"></a><!-- doxytag: member="AZIMUTH" ref="a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24" args="" -->AZIMUTH</em> </td><td>
-<p>Used in Encode to indicate output of an azimuth in [000, 360) with no letter indicator. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518"></a><!-- doxytag: member="NUMBER" ref="a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518" args="" -->NUMBER</em> </td><td>
-<p>Used in Encode to indicate output of a plain number. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="DMS_8hpp_source.html#l00063">63</a> of file <a class="el" href="DMS_8hpp_source.html">DMS.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab9fa04b3a9156f36f18852eed9b7ce09"></a><!-- doxytag: member="GeographicLib::DMS::component" ref="ab9fa04b3a9156f36f18852eed9b7ce09" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">GeographicLib::DMS::component</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Indicator for trailing units on an angle. </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="ab9fa04b3a9156f36f18852eed9b7ce09a8ee59944227e74901b71f27410d70781"></a><!-- doxytag: member="DEGREE" ref="ab9fa04b3a9156f36f18852eed9b7ce09a8ee59944227e74901b71f27410d70781" args="" -->DEGREE</em> </td><td>
-<p>Trailing unit is degrees. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ab9fa04b3a9156f36f18852eed9b7ce09a9884bea675fd214061e534e76a1c15d6"></a><!-- doxytag: member="MINUTE" ref="ab9fa04b3a9156f36f18852eed9b7ce09a9884bea675fd214061e534e76a1c15d6" args="" -->MINUTE</em> </td><td>
-<p>Trailing unit is arc minutes. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ab9fa04b3a9156f36f18852eed9b7ce09a10c28c85ddfa71db5f1d46d362333075"></a><!-- doxytag: member="SECOND" ref="ab9fa04b3a9156f36f18852eed9b7ce09a10c28c85ddfa71db5f1d46d362333075" args="" -->SECOND</em> </td><td>
-<p>Trailing unit is arc seconds. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="DMS_8hpp_source.html#l00095">95</a> of file <a class="el" href="DMS_8hpp_source.html">DMS.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="ae802c666ad53884ce062281409bd78b4"></a><!-- doxytag: member="GeographicLib::DMS::Decode" ref="ae802c666ad53884ce062281409bd78b4" args="(const std::string &dms, flag &ind)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::DMS::Decode </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>dms</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> & </td>
-          <td class="paramname"><em>ind</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a string in <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> to an angle.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">dms</td><td>string input. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">ind</td><td>a <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">DMS::flag</a> value signaling the presence of a hemisphere indicator. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>angle (degrees).</dd></dl>
-<p>Degrees, minutes, and seconds are indicated by the characters d, ' (single quote), " (double quote), and these components may only be given in this order. Any (but not all) components may be omitted and other symbols (e.g., the <sup>o</sup> symbol for degrees and the unicode prime and double prime symbols for minutes and seconds) may be substituted. The last component indicator may be omitted and is assumed to be the next smallest unit (thus 33d10 is interpreted as 33d10'). The final  [...]
-<ul>
-<li><em>LEGAL</em> (all the entries on each line are equivalent)<ul>
-<li>-20.51125, 20d30'40.5"S, -20d30'40.5, -20d30.675, N-20d30'40.5", -20:30:40.5</li>
-<li>4d0'9, 4d9", 4d9'', 4:0:9, 004:00:09, 4.0025, 4.0025d, 4d0.15, 04:.15</li>
-</ul>
-</li>
-<li><em>ILLEGAL</em> (the exception thrown explains the problem)<ul>
-<li>4d5"4', 4::5, 4:5:, :4:5, 4d4.5'4", -N20.5, 1.8e2d, 4:60, 4d-5'</li>
-</ul>
-</li>
-</ul>
-<p><b>NOTE:</b> At present, all the string handling in the C++ implementation GeographicLib is with 8-bit characters. The support for unicode symbols for degrees, minutes, and seconds is therefore via the <a href="http://en.wikipedia.org/wiki/UTF-8">UTF-8</a> encoding. (The Javascript implementation of this class uses unicode natively, of course.)</p>
-<p>Here is the list of Unicode symbols supported for degrees, minutes, seconds:</p>
-<ul>
-<li>degrees:<ul>
-<li>d, D lower and upper case letters</li>
-<li>U+00b0 degree symbol</li>
-<li>U+00ba masculine ordinal indicator</li>
-<li>U+2070 superscript zero</li>
-</ul>
-</li>
-<li>minutes:<ul>
-<li>' apostrophe</li>
-<li>U+2032 prime</li>
-<li>U+00b4 acute accent</li>
-</ul>
-</li>
-<li>seconds:<ul>
-<li>" quotation mark</li>
-<li>U+2033 double prime</li>
-<li>' ' any two consecutive symbols for minutes</li>
-</ul>
-</li>
-</ul>
-<p>The codes with a leading zero byte, e.g., U+00b0, are accepted in their UTF-8 coded form 0xc2 0xb0 and as a single byte 0xb0. </p>
-
-<p>Definition at line <a class="el" href="DMS_8cpp_source.html#l00031">31</a> of file <a class="el" href="DMS_8cpp_source.html">DMS.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="ConicProj_8cpp_source.html#l00032">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4987f8eb6c1ba5402eb25d6225ab58e1"></a><!-- doxytag: member="GeographicLib::DMS::Decode" ref="a4987f8eb6c1ba5402eb25d6225ab58e1" args="(real d, real m=0, real s=0)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::DMS::Decode </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>d</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>m</em> = <code>0</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s</em> = <code>0</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> to an angle.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">d</td><td>degrees. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>arc minutes. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>arc seconds. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>angle (degrees)</dd></dl>
-<p>This does not propagate the sign on <em>d</em> to the other components, so -3d20' would need to be represented as - <a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(3.0, 20.0) or <a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(-3.0, -20.0). </p>
-
-<p>Definition at line <a class="el" href="DMS_8hpp_source.html#l00191">191</a> of file <a class="el" href="DMS_8hpp_source.html">DMS.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2d38adcfecb7a41865092e870e19730f"></a><!-- doxytag: member="GeographicLib::DMS::DecodeLatLon" ref="a2d38adcfecb7a41865092e870e19730f" args="(const std::string &dmsa, const std::string &dmsb, real &lat, real &lon, bool swaplatlong=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::DMS::DecodeLatLon </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>dmsa</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>dmsb</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>swaplatlong</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a pair of strings to latitude and longitude.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">dmsa</td><td>first string. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">dmsb</td><td>second string. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">swaplatlong</td><td>if true assume longitude is given before latitude in the absence of hemisphere designators (default false).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>By default, the <em>lat</em> (resp., <em>lon</em>) is assigned to the results of decoding <em>dmsa</em> (resp., <em>dmsb</em>). However this is overridden if either <em>dmsa</em> or <em>dmsb</em> contain a latitude or longitude hemisphere designator (N, S, E, W). Throws an error if the decoded numbers are out of the ranges [-90<sup>o</sup>, 90<sup>o</sup>] for latitude and [-180<sup>o</sup>, 360<sup>o</sup>] for longitude and, in which case <em>lat</em> and <em>lon</em> are unchanged. [...]
-
-<p>Definition at line <a class="el" href="DMS_8cpp_source.html#l00207">207</a> of file <a class="el" href="DMS_8cpp_source.html">DMS.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="CartConvert_8cpp_source.html#l00032">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a868248d72f6b0bf2dae18a15d741ac43"></a><!-- doxytag: member="GeographicLib::DMS::DecodeAngle" ref="a868248d72f6b0bf2dae18a15d741ac43" args="(const std::string &angstr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::DMS::DecodeAngle </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>angstr</em></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a string to an angle in degrees.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">angstr</td><td>input string. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>angle (degrees)</dd></dl>
-<p>No hemisphere designator is allowed and no check is done on the range of the result. </p>
-
-<p>Definition at line <a class="el" href="DMS_8cpp_source.html#l00240">240</a> of file <a class="el" href="DMS_8cpp_source.html">DMS.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00062">ReadDistance()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0512cc1275e089138e1550efbee421d9"></a><!-- doxytag: member="GeographicLib::DMS::DecodeAzimuth" ref="a0512cc1275e089138e1550efbee421d9" args="(const std::string &azistr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::DMS::DecodeAzimuth </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>azistr</em></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a string to an azimuth in degrees.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">azistr</td><td>input string. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>azimuth (degrees)</dd></dl>
-<p>A hemisphere designator E/W can be used; the result is multiplied by -1 if W is present. Throws an error if the result is out of the range [-180<sup>o</sup>, 360<sup>o</sup>]. Finally the azimuth is reduced to the range [-180<sup>o</sup>, 180<sup>o</sup>). </p>
-
-<p>Definition at line <a class="el" href="DMS_8cpp_source.html#l00249">249</a> of file <a class="el" href="DMS_8cpp_source.html">DMS.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00067">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0777e26ef4507f8123549723bf3cb56f"></a><!-- doxytag: member="GeographicLib::DMS::Encode" ref="a0777e26ef4507f8123549723bf3cb56f" args="(real angle, component trailing, unsigned prec, flag ind, char dmssep)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">string GeographicLib::DMS::Encode </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>angle</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">component</a> </td>
-          <td class="paramname"><em>trailing</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> </td>
-          <td class="paramname"><em>ind</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char </td>
-          <td class="paramname"><em>dmssep</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert angle (in degrees) into a <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> string (using d, ', and ").</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">angle</td><td>input angle (degrees) </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">trailing</td><td><a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">DMS::component</a> value indicating the trailing units on the string and this is given as a decimal number if necessary. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>the number of digits after the decimal point for the trailing component. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">ind</td><td><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">DMS::flag</a> value indicated additional formatting. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">dmssep</td><td>if non-null, use as the <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> separator character (instead of d, ', " delimiters). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>formatted string</dd></dl>
-<p>The interpretation of <em>ind</em> is as follows:</p>
-<ul>
-<li>ind == <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1">DMS::NONE</a>, signed result no leading zeros on degrees except in the units place, e.g., -8d03'.</li>
-<li>ind == <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">DMS::LATITUDE</a>, trailing N or S hemisphere designator, no sign, pad degrees to 2 digits, e.g., 08d03'S.</li>
-<li>ind == <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">DMS::LONGITUDE</a>, trailing E or W hemisphere designator, no sign, pad degrees to 3 digits, e.g., 008d03'W.</li>
-<li>ind == <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24">DMS::AZIMUTH</a>, convert to the range [0, 360<sup>o</sup>), no sign, pad degrees to 3 digits, , e.g., 351d57'.</li>
-</ul>
-<p>The integer parts of the minutes and seconds components are always given with 2 digits. </p>
-
-<p>Definition at line <a class="el" href="DMS_8cpp_source.html#l00261">261</a> of file <a class="el" href="DMS_8cpp_source.html">DMS.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00034">LatLonString()</a>, <a class="el" href="Geod_8cpp_source.html#l00043">AzimuthString()</a>, <a class="el" href="Geod_8cpp_source.html#l00049">DistanceStrings()</a>, and <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3e36baa6114d46f82a8900d002784369"></a><!-- doxytag: member="GeographicLib::DMS::Encode" ref="a3e36baa6114d46f82a8900d002784369" args="(real angle, component trailing, unsigned prec, flag ind=NONE)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">string GeographicLib::DMS::Encode </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>angle</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">component</a> </td>
-          <td class="paramname"><em>trailing</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> </td>
-          <td class="paramname"><em>ind</em> = <code>NONE</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert angle (in degrees) into a <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> string (using d, ', and ").</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">angle</td><td>input angle (degrees) </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">trailing</td><td><a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">DMS::component</a> value indicating the trailing units on the string and this is given as a decimal number if necessary. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>the number of digits after the decimal point for the trailing component. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">ind</td><td><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">DMS::flag</a> value indicated additional formatting. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>formatted string</dd></dl>
-<p><b>COMPATIBILITY NOTE:</b> This function calls <a class="el" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">Encode(real, component, unsigned, flag, char)</a> with a 5th argument of char(0). At some point, <a class="el" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">Encode(real, component, unsigned, flag)</a> and will be withdrawn and the interface to <a class="el" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f"> [...]
-
-<p>Definition at line <a class="el" href="DMS_8cpp_source.html#l00338">338</a> of file <a class="el" href="DMS_8cpp_source.html">DMS.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aeb9d338b12e885092a611bda7e52f9f4"></a><!-- doxytag: member="GeographicLib::DMS::Encode" ref="aeb9d338b12e885092a611bda7e52f9f4" args="(real angle, unsigned prec, flag ind=NONE, char dmssep=char(0))" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static std::string GeographicLib::DMS::Encode </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>angle</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">flag</a> </td>
-          <td class="paramname"><em>ind</em> = <code>NONE</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char </td>
-          <td class="paramname"><em>dmssep</em> = <code>char(0)</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert angle into a <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> string (using d, ', and ") selecting the trailing component based on the precision.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">angle</td><td>input angle (degrees) </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>the precision relative to 1 degree. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">ind</td><td><a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">DMS::flag</a> value indicated additional formatting. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">dmssep</td><td>if non-null, use as the <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> separator character (instead of d, ', " delimiters). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>formatted string</dd></dl>
-<p><em>prec</em> indicates the precision relative to 1 degree, e.g., <em>prec</em> = 3 gives a result accurate to 0.1' and <em>prec</em> = 4 gives a result accurate to 1". <em>ind</em> is interpreted as in <a class="el" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">DMS::Encode</a> with the additional facility that <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a> represents <em> [...]
-
-<p>Definition at line <a class="el" href="DMS_8hpp_source.html#l00332">332</a> of file <a class="el" href="DMS_8hpp_source.html">DMS.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1ae785976e5d7c6346cfb68863884b55"></a><!-- doxytag: member="GeographicLib::DMS::Encode" ref="a1ae785976e5d7c6346cfb68863884b55" args="(real ang, real &d, real &m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::DMS::Encode </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>ang</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>d</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Split angle into degrees and minutes</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">ang</td><td>angle (degrees) </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">d</td><td>degrees (an integer returned as a real) </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m</td><td>arc minutes. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="DMS_8hpp_source.html#l00348">348</a> of file <a class="el" href="DMS_8hpp_source.html">DMS.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af27df7ef6ac42bf0e6341749b4b96eec"></a><!-- doxytag: member="GeographicLib::DMS::Encode" ref="af27df7ef6ac42bf0e6341749b4b96eec" args="(real ang, real &d, real &m, real &s)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::DMS::Encode </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>ang</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>d</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Split angle into degrees and minutes and seconds.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">ang</td><td>angle (degrees) </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">d</td><td>degrees (an integer returned as a real) </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m</td><td>arc minutes (an integer returned as a real) </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">s</td><td>arc seconds. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="DMS_8hpp_source.html#l00360">360</a> of file <a class="el" href="DMS_8hpp_source.html">DMS.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="DMS_8hpp_source.html">DMS.hpp</a></li>
-<li><a class="el" href="DMS_8cpp_source.html">DMS.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1EllipticFunction-members.html b/doc/html/classGeographicLib_1_1EllipticFunction-members.html
deleted file mode 100644
index 99e4449..0000000
--- a/doc/html/classGeographicLib_1_1EllipticFunction-members.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1EllipticFunction.html">EllipticFunction</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::EllipticFunction Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">E</a>() const </td><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a8be312b5da54b01f2976416aa82e7d08">E</a>(real phi) const </td><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html#af1b3b2265bca5d2b52c17ca44dabffa8">E</a>(real sn, real cn, real dn) const </td><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html#ada122111b55eb0ab9c7b9fafb0a4b1e6">EllipticFunction</a>(real m)</td><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td><code> [explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a6c6c8029d93946b32184ee964525938c">K</a>() const </td><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a12bcdf2c3fc7bcb165318822171328f7">KE</a>() const </td><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html#aba29c348874db7880ab7b1065f03ff7c">m</a>() const </td><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html#ad1fbe801f6731285462d35d874a149ba">m1</a>() const </td><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a0b8d63970c4276503d03d4133ee6c321">sncndn</a>(real x, real &sn, real &cn, real &dn) const </td><td><a class="el" href="classGeographicLib_1_1EllipticFunction.html">GeographicLib::EllipticFunction</a></td><td></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1EllipticFunction.html b/doc/html/classGeographicLib_1_1EllipticFunction.html
deleted file mode 100644
index 46a7808..0000000
--- a/doc/html/classGeographicLib_1_1EllipticFunction.html
+++ /dev/null
@@ -1,390 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::EllipticFunction Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1EllipticFunction.html">EllipticFunction</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::EllipticFunction Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::EllipticFunction" -->
-<p>Elliptic functions needed for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>.  
- <a href="classGeographicLib_1_1EllipticFunction.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="EllipticFunction_8hpp_source.html">GeographicLib/EllipticFunction.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1EllipticFunction-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html#ada122111b55eb0ab9c7b9fafb0a4b1e6">EllipticFunction</a> (real m)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html#aba29c348874db7880ab7b1065f03ff7c">m</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html#ad1fbe801f6731285462d35d874a149ba">m1</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a6c6c8029d93946b32184ee964525938c">K</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">E</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a12bcdf2c3fc7bcb165318822171328f7">KE</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a0b8d63970c4276503d03d4133ee6c321">sncndn</a> (real x, real &sn, real &cn, real &dn) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html#a8be312b5da54b01f2976416aa82e7d08">E</a> (real phi) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html#af1b3b2265bca5d2b52c17ca44dabffa8">E</a> (real sn, real cn, real dn) const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Elliptic functions needed for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>. </p>
-<p>This provides the subset of elliptic functions needed for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>. For a given ellipsoid, only parameters <em>e</em><sup>2</sup> and 1 - <em>e</em><sup>2</sup> are needed. This class taken the parameter as a constructor parameters and caches the values of the required complete integrals. A method is provided for Jacobi ellip [...]
-<p>The computation of the elliptic integrals uses the algorithms given in</p>
-<ul>
-<li>B. C. Carlson, <a href="http://dx.doi.org/10.1007/BF02198293">Computation of elliptic integrals</a>, Numerical Algorithms 10, 13–26 (1995).</li>
-</ul>
-<p>The computation of the Jacobi elliptic functions uses the algorithm given in</p>
-<ul>
-<li>R. Bulirsch, <a href="http://dx.doi.org/10.1007/BF01397975">Numerical Calculation of Elliptic Integrals and Elliptic Functions</a>, Numericshe Mathematik 7, 78–90 (1965).</li>
-</ul>
-<p>The notation follows Abramowitz and Stegun, Chapters 16 and 17.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::EllipticFunction class</span>
-<span class="comment">// $Id: 304e818254ce2fd366c2efa4f7ef93643e8c208c $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <cmath></span>
-<span class="preprocessor">#include <<a class="code" href="Math_8hpp.html" title="Header for GeographicLib::Math class.">GeographicLib/Math.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="EllipticFunction_8hpp.html" title="Header for GeographicLib::EllipticFunction class.">GeographicLib/EllipticFunction.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">EllipticFunction</a> ell(0.1);  <span class="comment">// parameter m = 0.1</span>
-    <span class="comment">// See Abramowitz and Stegun, table 17.1</span>
-    cout << ell.K() << <span class="stringliteral">" "</span> << ell.E() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordtype">double</span> phi = 20 * <a class="code" href="classGeographicLib_1_1Math.html#a0f3b4ea16cc2cb21557555fca3b1c201">Math::degree</a>();
-    <span class="comment">// See Abramowitz and Stegun, table 17.6 with</span>
-    <span class="comment">// alpha = asin(sqrt(m)) = 18.43 deg and phi = 20 deg</span>
-    cout << ell.E(phi) << <span class="stringliteral">" "</span>
-         << ell.E(sin(phi), cos(phi), sqrt(1 - ell.m() * <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(sin(phi))))
-         << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>& e) {
-    cout << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="ada122111b55eb0ab9c7b9fafb0a4b1e6"></a><!-- doxytag: member="GeographicLib::EllipticFunction::EllipticFunction" ref="ada122111b55eb0ab9c7b9fafb0a4b1e6" args="(real m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::EllipticFunction::EllipticFunction </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td>  throw ()<code> [explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>the parameter which must lie in [0, 1]. (No checking is done.) </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="EllipticFunction_8cpp_source.html#l00125">125</a> of file <a class="el" href="EllipticFunction_8cpp_source.html">EllipticFunction.cpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="aba29c348874db7880ab7b1065f03ff7c"></a><!-- doxytag: member="GeographicLib::EllipticFunction::m" ref="aba29c348874db7880ab7b1065f03ff7c" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::EllipticFunction::m </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the parameter <em>m</em>. </dd></dl>
-
-<p>Definition at line <a class="el" href="EllipticFunction_8hpp_source.html#l00076">76</a> of file <a class="el" href="EllipticFunction_8hpp_source.html">EllipticFunction.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad1fbe801f6731285462d35d874a149ba"></a><!-- doxytag: member="GeographicLib::EllipticFunction::m1" ref="ad1fbe801f6731285462d35d874a149ba" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::EllipticFunction::m1 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the complementary parameter <em>m'</em> = (1 - <em>m</em>). </dd></dl>
-
-<p>Definition at line <a class="el" href="EllipticFunction_8hpp_source.html#l00081">81</a> of file <a class="el" href="EllipticFunction_8hpp_source.html">EllipticFunction.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6c6c8029d93946b32184ee964525938c"></a><!-- doxytag: member="GeographicLib::EllipticFunction::K" ref="a6c6c8029d93946b32184ee964525938c" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::EllipticFunction::K </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the complete integral of first kind, <em>K</em>(<em>m</em>). </dd></dl>
-
-<p>Definition at line <a class="el" href="EllipticFunction_8hpp_source.html#l00086">86</a> of file <a class="el" href="EllipticFunction_8hpp_source.html">EllipticFunction.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a184174d29953891896b41c597c34eb9a"></a><!-- doxytag: member="GeographicLib::EllipticFunction::E" ref="a184174d29953891896b41c597c34eb9a" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::EllipticFunction::E </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the complete integral of second kind, <em>E</em>(<em>m</em>). </dd></dl>
-
-<p>Definition at line <a class="el" href="EllipticFunction_8hpp_source.html#l00091">91</a> of file <a class="el" href="EllipticFunction_8hpp_source.html">EllipticFunction.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a12bcdf2c3fc7bcb165318822171328f7"></a><!-- doxytag: member="GeographicLib::EllipticFunction::KE" ref="a12bcdf2c3fc7bcb165318822171328f7" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::EllipticFunction::KE </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the difference <em>K</em>(<em>m</em>) - <em>E</em>(<em>m</em>) (which can be computed directly). </dd></dl>
-
-<p>Definition at line <a class="el" href="EllipticFunction_8hpp_source.html#l00097">97</a> of file <a class="el" href="EllipticFunction_8hpp_source.html">EllipticFunction.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0b8d63970c4276503d03d4133ee6c321"></a><!-- doxytag: member="GeographicLib::EllipticFunction::sncndn" ref="a0b8d63970c4276503d03d4133ee6c321" args="(real x, real &sn, real &cn, real &dn) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::EllipticFunction::sncndn </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>sn</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>cn</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>dn</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The Jacobi elliptic functions.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>the argument. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">sn</td><td>sn(<em>x</em>|<em>m</em>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">cn</td><td>cn(<em>x</em>|<em>m</em>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">dn</td><td>dn(<em>x</em>|<em>m</em>). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="EllipticFunction_8cpp_source.html#l00151">151</a> of file <a class="el" href="EllipticFunction_8cpp_source.html">EllipticFunction.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8be312b5da54b01f2976416aa82e7d08"></a><!-- doxytag: member="GeographicLib::EllipticFunction::E" ref="a8be312b5da54b01f2976416aa82e7d08" args="(real phi) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::EllipticFunction::E </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>phi</em></td><td>)</td>
-          <td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The incomplete integral of the second kind.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">phi</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>int sqrt(1 - <em>m</em> sin<sup>2</sup>(<em>phi</em>)) <em>dphi</em>. </dd></dl>
-
-<p>Definition at line <a class="el" href="EllipticFunction_8cpp_source.html#l00213">213</a> of file <a class="el" href="EllipticFunction_8cpp_source.html">EllipticFunction.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af1b3b2265bca5d2b52c17ca44dabffa8"></a><!-- doxytag: member="GeographicLib::EllipticFunction::E" ref="af1b3b2265bca5d2b52c17ca44dabffa8" args="(real sn, real cn, real dn) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::EllipticFunction::E </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>sn</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>cn</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>dn</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The incomplete integral of the second kind in terms of Jacobi elliptic functions</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">sn</td><td></td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">cn</td><td></td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">dn</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>int dn(<em>w</em>)<sup>2</sup> <em>dw</em> (A+S 17.2.10).</dd></dl>
-<p>Instead of specifying the amplitude <em>phi</em>, we provide <em>sn</em> = sin(<em>phi</em>), <em>cn</em> = cos(<em>phi</em>), <em>dn</em> = sqrt(1 - <em>m</em> sin<sup>2</sup>(<em>phi</em>)). </p>
-
-<p>Definition at line <a class="el" href="EllipticFunction_8cpp_source.html#l00198">198</a> of file <a class="el" href="EllipticFunction_8cpp_source.html">EllipticFunction.cpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="EllipticFunction_8hpp_source.html">EllipticFunction.hpp</a></li>
-<li><a class="el" href="EllipticFunction_8cpp_source.html">EllipticFunction.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GeoCoords-members.html b/doc/html/classGeographicLib_1_1GeoCoords-members.html
deleted file mode 100644
index 2821e11..0000000
--- a/doc/html/classGeographicLib_1_1GeoCoords-members.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeoCoords</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::GeoCoords Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a2b62e667ce462d8102fdfa6ece6ff50e">AltConvergence</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#af4a5b63a1931973338f71ef2ec4e27fa">AltEasting</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#ad602893cd4a81ccc511daff76b411413">AltMGRSRepresentation</a>(int prec=0) const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a2f5a9665712214ad34b061d35ce89659">AltNorthing</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a299131cd5383ad0adc5af92c84dc6afe">AltScale</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a020732ccba257d7f5248692afd318b93">AltUTMUPSRepresentation</a>(int prec=0) const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a590600b600395c7914e4854faee08f8e">AltZone</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#ad92c8fa1b34bd11dbd908dfffbb836a8">Convergence</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#af6e9f9087a407b01dc24401df8610257">DMSRepresentation</a>(int prec, bool swaplatlong, char dmssep) const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#ab37746606876eb77335268054589390a">DMSRepresentation</a>(int prec=0, bool swaplatlong=false) const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a9a84801f0b383860b24cc1344e4015fb">Easting</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a4d892f5e55df8cbb597d1a693da4783c">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a8b3f4a919ba4478c4fec0e7b01e84c57">GeoCoords</a>()</td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#acdfe641aaea6b68aee25cfee822f782a">GeoCoords</a>(const std::string &s, bool centerp=true, bool swaplatlong=false)</td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a7bde6a5cba74adf66d831788e6be8e65">GeoCoords</a>(real latitude, real longitude, int zone=UTMUPS::STANDARD)</td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#aaab765054416e1243f2d7b36edc8e0d4">GeoCoords</a>(int zone, bool northp, real easting, real northing)</td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a79af2d72afdfeede78f2ba65b809d6b3">GeoRepresentation</a>(int prec=0, bool swaplatlong=false) const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a0764b9f389a6ce851f9c7c8317ecebb3">Hemisphere</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a1bc1bb3a2377fa6b70be046dcf5d3e97">Latitude</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a7db5459efae411dfebec758a8244a95a">Longitude</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a897e6bbfb71f78b0646045bf47e09696">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a36594aaa4f293b0ddf00b1c78bb04595">MGRSRepresentation</a>(int prec=0) const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#ac0202def9c16ce856f62485b5c249083">Northing</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a5bcf16f97750a6be77f72d50e304a007">Northp</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a4a1e0a65a8a344dfe519fcbf25078e37">Reset</a>(const std::string &s, bool centerp=true, bool swaplatlong=false)</td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a0cbbebaa7bb77f91f3f8dbbadfd6532a">Reset</a>(real latitude, real longitude, int zone=UTMUPS::STANDARD)</td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#ab072761684d992f508b5a3b9440653fb">Reset</a>(int zone, bool northp, real easting, real northing)</td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#aafd68e75d223b821abcbf20179c7a9e0">Scale</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a7782c2d78462bde2ba6277b2b60af8f6">SetAltZone</a>(int zone=UTMUPS::STANDARD) const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a056efc42fe4c653aad40be5d5b865ea3">UTMUPSRepresentation</a>(int prec=0) const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeoCoords.html#a3ce32259b53a9ea9a5346d9e418ad6a5">Zone</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeographicLib::GeoCoords</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GeoCoords.html b/doc/html/classGeographicLib_1_1GeoCoords.html
deleted file mode 100644
index 60b2d87..0000000
--- a/doc/html/classGeographicLib_1_1GeoCoords.html
+++ /dev/null
@@ -1,1107 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::GeoCoords Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeoCoords</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::GeoCoords Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::GeoCoords" -->
-<p>Conversion between geographic coordinates.  
- <a href="classGeographicLib_1_1GeoCoords.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="GeoCoords_8hpp_source.html">GeographicLib/GeoCoords.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1GeoCoords-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td colspan="2"><div class="groupHeader">Initializing the GeoCoords object</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a8b3f4a919ba4478c4fec0e7b01e84c57">GeoCoords</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#acdfe641aaea6b68aee25cfee822f782a">GeoCoords</a> (const std::string &s, bool centerp=true, bool swaplatlong=false)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a7bde6a5cba74adf66d831788e6be8e65">GeoCoords</a> (real latitude, real longitude, int zone=UTMUPS::STANDARD)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#aaab765054416e1243f2d7b36edc8e0d4">GeoCoords</a> (int zone, bool northp, real easting, real northing)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a4a1e0a65a8a344dfe519fcbf25078e37">Reset</a> (const std::string &s, bool centerp=true, bool swaplatlong=false)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a0cbbebaa7bb77f91f3f8dbbadfd6532a">Reset</a> (real latitude, real longitude, int zone=UTMUPS::STANDARD)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#ab072761684d992f508b5a3b9440653fb">Reset</a> (int zone, bool northp, real easting, real northing)</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Querying the GeoCoords object</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a1bc1bb3a2377fa6b70be046dcf5d3e97">Latitude</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a7db5459efae411dfebec758a8244a95a">Longitude</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a9a84801f0b383860b24cc1344e4015fb">Easting</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#ac0202def9c16ce856f62485b5c249083">Northing</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#ad92c8fa1b34bd11dbd908dfffbb836a8">Convergence</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#aafd68e75d223b821abcbf20179c7a9e0">Scale</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a5bcf16f97750a6be77f72d50e304a007">Northp</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a0764b9f389a6ce851f9c7c8317ecebb3">Hemisphere</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a3ce32259b53a9ea9a5346d9e418ad6a5">Zone</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Setting and querying the alternate zone</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a7782c2d78462bde2ba6277b2b60af8f6">SetAltZone</a> (int zone=UTMUPS::STANDARD) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a590600b600395c7914e4854faee08f8e">AltZone</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#af4a5b63a1931973338f71ef2ec4e27fa">AltEasting</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a2f5a9665712214ad34b061d35ce89659">AltNorthing</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a2b62e667ce462d8102fdfa6ece6ff50e">AltConvergence</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a299131cd5383ad0adc5af92c84dc6afe">AltScale</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">String representations of the GeoCoords object</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a79af2d72afdfeede78f2ba65b809d6b3">GeoRepresentation</a> (int prec=0, bool swaplatlong=false) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#af6e9f9087a407b01dc24401df8610257">DMSRepresentation</a> (int prec, bool swaplatlong, char dmssep) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#ab37746606876eb77335268054589390a">DMSRepresentation</a> (int prec=0, bool swaplatlong=false) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a36594aaa4f293b0ddf00b1c78bb04595">MGRSRepresentation</a> (int prec=0) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a056efc42fe4c653aad40be5d5b865ea3">UTMUPSRepresentation</a> (int prec=0) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#ad602893cd4a81ccc511daff76b411413">AltMGRSRepresentation</a> (int prec=0) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a020732ccba257d7f5248692afd318b93">AltUTMUPSRepresentation</a> (int prec=0) const </td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a897e6bbfb71f78b0646045bf47e09696">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html#a4d892f5e55df8cbb597d1a693da4783c">Flattening</a> () const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Conversion between geographic coordinates. </p>
-<p>This class stores a geographic position which may be set via the constructors or Reset via</p>
-<ul>
-<li>latitude and longitude</li>
-<li>UTM or UPS coordinates</li>
-<li>a string representation of these or an <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate string</li>
-</ul>
-<p>The state consists of the latitude and longitude and the supplied UTM or UPS coordinates (possibly derived from the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinates). If latitude and longitude were given then the UTM/UPS coordinates follows the standard conventions.</p>
-<p>The mutable state consists of the UTM or UPS coordinates for a alternate zone. A method SetAltZone is provided to set the alternate UPS/UTM zone.</p>
-<p>Methods are provided to return the geographic coordinates, the input UTM or UPS coordinates (and associated meridian convergence and scale), or alternate UTM or UPS coordinates (and their associated meridian convergence and scale).</p>
-<p>Once the input string has been parsed, you can print the result out in any of the formats, decimal degrees, degrees minutes seconds, <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a>, UTM/UPS.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::GeoCoords class</span>
-<span class="comment">// $Id: 3f9c326bb5293db26a153e6f5eab165146899a9e $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <string></span>
-<span class="preprocessor">#include <<a class="code" href="GeoCoords_8hpp.html" title="Header for GeographicLib::GeoCoords class.">GeographicLib/GeoCoords.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="comment">// Miscellaneous conversions</span>
-    <span class="keywordtype">double</span> lat = 33.3, lon = 44.4;
-    <a class="code" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeoCoords</a> c(lat, lon);
-    cout << c.MGRSRepresentation(-3) << <span class="stringliteral">"\n"</span>;
-    c.Reset(<span class="stringliteral">"18TWN0050"</span>);
-    cout << c.DMSRepresentation() << <span class="stringliteral">"\n"</span>;
-    cout << c.Latitude() << <span class="stringliteral">" "</span> << c.Longitude() << <span class="stringliteral">"\n"</span>;
-    c.Reset(<span class="stringliteral">"1d38'W 55d30'N"</span>);
-    cout << c.GeoRepresentation() << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="GeoConvert.1.html">GeoConvert</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeoCoords</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a8b3f4a919ba4478c4fec0e7b01e84c57"></a><!-- doxytag: member="GeographicLib::GeoCoords::GeoCoords" ref="a8b3f4a919ba4478c4fec0e7b01e84c57" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::GeoCoords::GeoCoords </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The default constructor is equivalent to <em>latitude</em> = 90<sup>o</sup>, <em>longitude</em> = 0<sup>o</sup>. </p>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00078">78</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acdfe641aaea6b68aee25cfee822f782a"></a><!-- doxytag: member="GeographicLib::GeoCoords::GeoCoords" ref="acdfe641aaea6b68aee25cfee822f782a" args="(const std::string &s, bool centerp=true, bool swaplatlong=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::GeoCoords::GeoCoords </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>s</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>centerp</em> = <code>true</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>swaplatlong</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Construct from a string.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>1-element, 2-element, or 3-element string representation of the position. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">centerp</td><td>governs the interpretation of <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinates (see below). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">swaplatlong</td><td>governs the interpretation of geographic coordinates (see below).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Parse as a string and interpret it as a geographic position. The input string is broken into space (or comma) separated pieces and Basic decision on which format is based on number of components</p>
-<ol type="1">
-<li><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a></li>
-<li>"Lat Long" or "Long Lat"</li>
-<li>"Zone Easting Northing" or "Easting Northing Zone"</li>
-</ol>
-<p>The following inputs are approximately the same (Ar Ramadi Bridge, Iraq)</p>
-<ul>
-<li>Latitude and Longitude<ul>
-<li>33.44 43.27</li>
-<li>N33d26.4' E43d16.2'</li>
-<li>43d16'12"E 33d26'24"N</li>
-<li>43:16:12E 33:26:24</li>
-</ul>
-</li>
-<li><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a><ul>
-<li>38SLC301</li>
-<li>38SLC391014</li>
-<li>38SLC3918701405</li>
-<li>37SHT9708</li>
-</ul>
-</li>
-<li>UTM<ul>
-<li>38N 339188 3701405</li>
-<li>897039 3708229 37N</li>
-</ul>
-</li>
-</ul>
-<p>Latitude and Longitude parsing. Latitude precedes longitude, unless a N, S, E, W hemisphere designator is used on one or both coordinates. If <em>swaplatlong</em> = true (default is false), then longitude precedes latitude in the absence of a hemisphere designator. Thus (with <em>swaplatlong</em> = false)</p>
-<ul>
-<li>40 -75</li>
-<li>N40 W75</li>
-<li>-75 N40</li>
-<li>75W 40N</li>
-<li>E-75 -40S</li>
-</ul>
-<p>are all the same position. The coordinates may be given in decimal degrees, degrees and decimal minutes, degrees, minutes, seconds, etc. Use d, ', and " to mark off the degrees, minutes and seconds. Alternatively, use : to separate these components. Thus</p>
-<ul>
-<li>40d30'30"</li>
-<li>40d30'30</li>
-<li>40d30.5'</li>
-<li>40d30.5</li>
-<li>40:30:30</li>
-<li>40:30.5</li>
-<li>40.508333333</li>
-</ul>
-<p>all specify the same angle. The leading sign applies to all components so -1d30 is -(1+30/60) = -1.5. Latitudes must be in the range [-90, 90] and longitudes in the range [-180, 360]. Internally longitudes are reduced to the range [-180, 180).</p>
-<p>UTM/UPS parsing. For UTM zones (-80 <= Lat <= 84), the zone designator is made up of a zone number (for 1 to 60) and a hemisphere letter (N or S), e.g., 38N. The latitude zone designer ([C–M] in the southern hemisphere and [N–X] in the northern) should NOT be used. (This is part of the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate.) The zone designator for the poles (where UPS is employed) is a hemi [...]
-<p><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> parsing interprets the grid references as square area at the specified precision (1m, 10m, 100m, etc.). If <em>centerp</em> = true (the default), the center of this square is then taken to be the precise position; thus:</p>
-<ul>
-<li>38SMB = 38N 450000 3650000</li>
-<li>38SMB4484 = 38N 444500 3684500</li>
-<li>38SMB44148470 = 38N 444145 3684705</li>
-</ul>
-<p>Otherwise, the "south-west" corner of the square is used, i.e.,</p>
-<ul>
-<li>38SMB = 38N 400000 3600000</li>
-<li>38SMB4484 = 38N 444000 3684000</li>
-<li>38SMB44148470 = 38N 444140 3684700 </li>
-</ul>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00169">169</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7bde6a5cba74adf66d831788e6be8e65"></a><!-- doxytag: member="GeographicLib::GeoCoords::GeoCoords" ref="a7bde6a5cba74adf66d831788e6be8e65" args="(real latitude, real longitude, int zone=UTMUPS::STANDARD)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::GeoCoords::GeoCoords </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>latitude</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>longitude</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em> = <code>UTMUPS::STANDARD</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Construct from geographic coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">latitude</td><td>(degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">longitude</td><td>(degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">zone</td><td>if specified, force the UTM/UPS representation to use a specified zone using the rules given in <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">UTMUPS::zonespec</a>. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00181">181</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaab765054416e1243f2d7b36edc8e0d4"></a><!-- doxytag: member="GeographicLib::GeoCoords::GeoCoords" ref="aaab765054416e1243f2d7b36edc8e0d4" args="(int zone, bool northp, real easting, real northing)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::GeoCoords::GeoCoords </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>easting</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>northing</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Construct from UTM/UPS coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">zone</td><td>UTM zone (zero means UPS). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">northp</td><td>hemisphere (true means north, false means south). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">easting</td><td>(meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">northing</td><td>(meters). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00193">193</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a4a1e0a65a8a344dfe519fcbf25078e37"></a><!-- doxytag: member="GeographicLib::GeoCoords::Reset" ref="a4a1e0a65a8a344dfe519fcbf25078e37" args="(const std::string &s, bool centerp=true, bool swaplatlong=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeoCoords::Reset </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>s</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>centerp</em> = <code>true</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>swaplatlong</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reset the location from a string. See <a class="el" href="classGeographicLib_1_1GeoCoords.html#acdfe641aaea6b68aee25cfee822f782a">GeoCoords(const std::string& s, bool centerp, bool swaplatlong)</a>. </p>
-
-<p>Definition at line <a class="el" href="GeoCoords_8cpp_source.html#l00027">27</a> of file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0cbbebaa7bb77f91f3f8dbbadfd6532a"></a><!-- doxytag: member="GeographicLib::GeoCoords::Reset" ref="a0cbbebaa7bb77f91f3f8dbbadfd6532a" args="(real latitude, real longitude, int zone=UTMUPS::STANDARD)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeoCoords::Reset </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>latitude</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>longitude</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em> = <code>UTMUPS::STANDARD</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reset the location in terms of geographic coordinates. See <a class="el" href="classGeographicLib_1_1GeoCoords.html#a7bde6a5cba74adf66d831788e6be8e65">GeoCoords(real latitude, real longitude, int zone)</a>. </p>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00208">208</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-<p>References <a class="el" href="UTMUPS_8cpp_source.html#l00073">GeographicLib::UTMUPS::Forward()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab072761684d992f508b5a3b9440653fb"></a><!-- doxytag: member="GeographicLib::GeoCoords::Reset" ref="ab072761684d992f508b5a3b9440653fb" args="(int zone, bool northp, real easting, real northing)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeoCoords::Reset </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>easting</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>northing</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reset the location in terms of UPS/UPS coordinates. See <a class="el" href="classGeographicLib_1_1GeoCoords.html#aaab765054416e1243f2d7b36edc8e0d4">GeoCoords(int zone, bool northp, real easting, real northing)</a>. </p>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00223">223</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-<p>References <a class="el" href="UTMUPS_8cpp_source.html#l00124">GeographicLib::UTMUPS::Reverse()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1bc1bb3a2377fa6b70be046dcf5d3e97"></a><!-- doxytag: member="GeographicLib::GeoCoords::Latitude" ref="a1bc1bb3a2377fa6b70be046dcf5d3e97" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::Latitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>latitude (degrees) </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00241">241</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7db5459efae411dfebec758a8244a95a"></a><!-- doxytag: member="GeographicLib::GeoCoords::Longitude" ref="a7db5459efae411dfebec758a8244a95a" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::Longitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>longitude (degrees) </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00246">246</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9a84801f0b383860b24cc1344e4015fb"></a><!-- doxytag: member="GeographicLib::GeoCoords::Easting" ref="a9a84801f0b383860b24cc1344e4015fb" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::Easting </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>easting (meters) </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00251">251</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac0202def9c16ce856f62485b5c249083"></a><!-- doxytag: member="GeographicLib::GeoCoords::Northing" ref="ac0202def9c16ce856f62485b5c249083" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::Northing </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>northing (meters) </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00256">256</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad92c8fa1b34bd11dbd908dfffbb836a8"></a><!-- doxytag: member="GeographicLib::GeoCoords::Convergence" ref="ad92c8fa1b34bd11dbd908dfffbb836a8" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::Convergence </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>meridian convergence (degrees) for the UTM/UPS projection. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00261">261</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aafd68e75d223b821abcbf20179c7a9e0"></a><!-- doxytag: member="GeographicLib::GeoCoords::Scale" ref="aafd68e75d223b821abcbf20179c7a9e0" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::Scale </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>scale for the UTM/UPS projection. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00266">266</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5bcf16f97750a6be77f72d50e304a007"></a><!-- doxytag: member="GeographicLib::GeoCoords::Northp" ref="a5bcf16f97750a6be77f72d50e304a007" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::GeoCoords::Northp </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>hemisphere (false means south, true means north). </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00271">271</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0764b9f389a6ce851f9c7c8317ecebb3"></a><!-- doxytag: member="GeographicLib::GeoCoords::Hemisphere" ref="a0764b9f389a6ce851f9c7c8317ecebb3" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">char GeographicLib::GeoCoords::Hemisphere </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>hemisphere letter N or S. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00276">276</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3ce32259b53a9ea9a5346d9e418ad6a5"></a><!-- doxytag: member="GeographicLib::GeoCoords::Zone" ref="a3ce32259b53a9ea9a5346d9e418ad6a5" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int GeographicLib::GeoCoords::Zone </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the zone corresponding to the input (return 0 for UPS). </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00281">281</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7782c2d78462bde2ba6277b2b60af8f6"></a><!-- doxytag: member="GeographicLib::GeoCoords::SetAltZone" ref="a7782c2d78462bde2ba6277b2b60af8f6" args="(int zone=UTMUPS::STANDARD) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeoCoords::SetAltZone </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em> = <code>UTMUPS::STANDARD</code></td><td>)</td>
-          <td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Specify alternate zone number.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">zone</td><td>zone number for the alternate representation.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>See <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">UTMUPS::zonespec</a> for more information on the interpretation of <em>zone</em>. Note that <em>zone</em> == <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">UTMUPS::STANDARD</a> (the default) use the standard UPS or UTM zone, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a9059a8e3 [...]
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00299">299</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-<p>References <a class="el" href="UTMUPS_8hpp_source.html#l00104">GeographicLib::UTMUPS::MATCH</a>, <a class="el" href="UTMUPS_8cpp_source.html#l00049">GeographicLib::UTMUPS::StandardZone()</a>, and <a class="el" href="UTMUPS_8cpp_source.html#l00073">GeographicLib::UTMUPS::Forward()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a590600b600395c7914e4854faee08f8e"></a><!-- doxytag: member="GeographicLib::GeoCoords::AltZone" ref="a590600b600395c7914e4854faee08f8e" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int GeographicLib::GeoCoords::AltZone </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>current alternate zone (return 0 for UPS). </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00317">317</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af4a5b63a1931973338f71ef2ec4e27fa"></a><!-- doxytag: member="GeographicLib::GeoCoords::AltEasting" ref="af4a5b63a1931973338f71ef2ec4e27fa" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::AltEasting </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>easting (meters) for alternate zone. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00322">322</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2f5a9665712214ad34b061d35ce89659"></a><!-- doxytag: member="GeographicLib::GeoCoords::AltNorthing" ref="a2f5a9665712214ad34b061d35ce89659" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::AltNorthing </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>northing (meters) for alternate zone. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00327">327</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2b62e667ce462d8102fdfa6ece6ff50e"></a><!-- doxytag: member="GeographicLib::GeoCoords::AltConvergence" ref="a2b62e667ce462d8102fdfa6ece6ff50e" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::AltConvergence </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>meridian convergence (degrees) for alternate zone. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00332">332</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a299131cd5383ad0adc5af92c84dc6afe"></a><!-- doxytag: member="GeographicLib::GeoCoords::AltScale" ref="a299131cd5383ad0adc5af92c84dc6afe" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::AltScale </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>scale for alternate zone. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00337">337</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a79af2d72afdfeede78f2ba65b809d6b3"></a><!-- doxytag: member="GeographicLib::GeoCoords::GeoRepresentation" ref="a79af2d72afdfeede78f2ba65b809d6b3" args="(int prec=0, bool swaplatlong=false) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">string GeographicLib::GeoCoords::GeoRepresentation </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em> = <code>0</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>swaplatlong</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>String representation with latitude and longitude as signed decimal degrees.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>precision (relative to about 1m). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">swaplatlong</td><td>if true give longitude first (default = false) </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>decimal latitude/longitude string representation.</dd></dl>
-<p>Precision specifies accuracy of representation as follows:</p>
-<ul>
-<li>prec = -5 (min), 1d</li>
-<li>prec = 0, 10<sup>-5</sup>d (about 1m)</li>
-<li>prec = 3, 10<sup>-8</sup>d</li>
-<li>prec = 9 (max), 10<sup>-14</sup>d </li>
-</ul>
-
-<p>Definition at line <a class="el" href="GeoCoords_8cpp_source.html#l00070">70</a> of file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af6e9f9087a407b01dc24401df8610257"></a><!-- doxytag: member="GeographicLib::GeoCoords::DMSRepresentation" ref="af6e9f9087a407b01dc24401df8610257" args="(int prec, bool swaplatlong, char dmssep) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">string GeographicLib::GeoCoords::DMSRepresentation </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>swaplatlong</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char </td>
-          <td class="paramname"><em>dmssep</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>String representation with latitude and longitude as degrees, minutes, seconds, and hemisphere.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>precision (relative to about 1m) </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">swaplatlong</td><td>if true give longitude first (default = false) </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">dmssep</td><td>if non-null, use as the <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> separator character (instead of d, ', " delimiters). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> latitude/longitude string representation.</dd></dl>
-<p>Precision specifies accuracy of representation as follows:</p>
-<ul>
-<li>prec = -5 (min), 1d</li>
-<li>prec = -4, 0.1d</li>
-<li>prec = -3, 1'</li>
-<li>prec = -2, 0.1'</li>
-<li>prec = -1, 1"</li>
-<li>prec = 0, 0.1" (about 3m)</li>
-<li>prec = 1, 0.01"</li>
-<li>prec = 10 (max), 10<sup>-11</sup>" </li>
-</ul>
-
-<p>Definition at line <a class="el" href="GeoCoords_8cpp_source.html#l00088">88</a> of file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab37746606876eb77335268054589390a"></a><!-- doxytag: member="GeographicLib::GeoCoords::DMSRepresentation" ref="ab37746606876eb77335268054589390a" args="(int prec=0, bool swaplatlong=false) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">string GeographicLib::GeoCoords::DMSRepresentation </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em> = <code>0</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>swaplatlong</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>String representation with latitude and longitude as degrees, minutes, seconds, and hemisphere.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>precision (relative to about 1m) </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">swaplatlong</td><td>if true give longitude first (default = false) </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">DMS</a> latitude/longitude string representation.</dd></dl>
-<p><b>COMPATIBILITY NOTE:</b> This function calls <a class="el" href="classGeographicLib_1_1GeoCoords.html#af6e9f9087a407b01dc24401df8610257">DMSRepresentation(int, bool, char) const </a>with a 3rd argument of char(0). At some point, <a class="el" href="classGeographicLib_1_1GeoCoords.html#ab37746606876eb77335268054589390a">DMSRepresentation(int, bool) const </a>and will be withdrawn and the interface to <a class="el" href="classGeographicLib_1_1GeoCoords.html#af6e9f9087a407b01dc24401df8 [...]
-
-<p>Definition at line <a class="el" href="GeoCoords_8cpp_source.html#l00097">97</a> of file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a36594aaa4f293b0ddf00b1c78bb04595"></a><!-- doxytag: member="GeographicLib::GeoCoords::MGRSRepresentation" ref="a36594aaa4f293b0ddf00b1c78bb04595" args="(int prec=0) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">string GeographicLib::GeoCoords::MGRSRepresentation </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em> = <code>0</code></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> string.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>precision (relative to about 1m). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> string.</dd></dl>
-<p>This gives the coordinates of the enclosing grid square with size given by the precision. Thus 38N 444180 3684790 converted to a <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate at precision -2 (100m) is 38SMB441847 and not 38SMB442848. <em>prec</em> specifies the precision of the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> string as follows:</p>
-<ul>
-<li>prec = -5 (min), 100km</li>
-<li>prec = -4, 10km</li>
-<li>prec = -3, 1km</li>
-<li>prec = -2, 100m</li>
-<li>prec = -1, 10m</li>
-<li>prec = 0, 1m</li>
-<li>prec = 1, 0.1m</li>
-<li>prec = 6 (max), 1um </li>
-</ul>
-
-<p>Definition at line <a class="el" href="GeoCoords_8cpp_source.html#l00100">100</a> of file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a056efc42fe4c653aad40be5d5b865ea3"></a><!-- doxytag: member="GeographicLib::GeoCoords::UTMUPSRepresentation" ref="a056efc42fe4c653aad40be5d5b865ea3" args="(int prec=0) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">string GeographicLib::GeoCoords::UTMUPSRepresentation </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em> = <code>0</code></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>UTM/UPS string.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>precision (relative to about 1m) </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>UTM/UPS string representation: zone designator, easting, and northing.</dd></dl>
-<p>Precision specifies accuracy of representation as follows:</p>
-<ul>
-<li>prec = -5 (min), 100km</li>
-<li>prec = -3, 1km</li>
-<li>prec = 0, 1m</li>
-<li>prec = 3, 1mm</li>
-<li>prec = 6, 1um</li>
-<li>prec = 9 (max), 1nm </li>
-</ul>
-
-<p>Definition at line <a class="el" href="GeoCoords_8cpp_source.html#l00138">138</a> of file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad602893cd4a81ccc511daff76b411413"></a><!-- doxytag: member="GeographicLib::GeoCoords::AltMGRSRepresentation" ref="ad602893cd4a81ccc511daff76b411413" args="(int prec=0) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">string GeographicLib::GeoCoords::AltMGRSRepresentation </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em> = <code>0</code></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> string for the alternate zone. See <a class="el" href="classGeographicLib_1_1GeoCoords.html#a36594aaa4f293b0ddf00b1c78bb04595">GeoCoords::MGRSRepresentation</a>. </p>
-
-<p>Definition at line <a class="el" href="GeoCoords_8cpp_source.html#l00108">108</a> of file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a020732ccba257d7f5248692afd318b93"></a><!-- doxytag: member="GeographicLib::GeoCoords::AltUTMUPSRepresentation" ref="a020732ccba257d7f5248692afd318b93" args="(int prec=0) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">string GeographicLib::GeoCoords::AltUTMUPSRepresentation </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em> = <code>0</code></td><td>)</td>
-          <td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>UTM/UPS string for the alternate zone. See <a class="el" href="classGeographicLib_1_1GeoCoords.html#a056efc42fe4c653aad40be5d5b865ea3">GeoCoords::UTMUPSRepresentation</a>. </p>
-
-<p>Definition at line <a class="el" href="GeoCoords_8cpp_source.html#l00144">144</a> of file <a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a897e6bbfb71f78b0646045bf47e09696"></a><!-- doxytag: member="GeographicLib::GeoCoords::MajorRadius" ref="a897e6bbfb71f78b0646045bf47e09696" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the WGS84 ellipsoid (meters).</dd></dl>
-<p>(The WGS84 value is returned because the UTM and UPS projections are based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00459">459</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-<p>References <a class="el" href="UTMUPS_8hpp_source.html#l00295">GeographicLib::UTMUPS::MajorRadius()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4d892f5e55df8cbb597d1a693da4783c"></a><!-- doxytag: member="GeographicLib::GeoCoords::Flattening" ref="a4d892f5e55df8cbb597d1a693da4783c" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeoCoords::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the WGS84 ellipsoid.</dd></dl>
-<p>(The WGS84 value is returned because the UTM and UPS projections are based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="GeoCoords_8hpp_source.html#l00467">467</a> of file <a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a>.</p>
-
-<p>References <a class="el" href="UTMUPS_8hpp_source.html#l00304">GeographicLib::UTMUPS::Flattening()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="GeoCoords_8hpp_source.html">GeoCoords.hpp</a></li>
-<li><a class="el" href="GeoCoords_8cpp_source.html">GeoCoords.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Geocentric-members.html b/doc/html/classGeographicLib_1_1Geocentric-members.html
deleted file mode 100644
index 1193b09..0000000
--- a/doc/html/classGeographicLib_1_1Geocentric-members.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::Geocentric Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a30ba434524b5836c9852d454e61d795f">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a65320594cad8c03d28beaa409f3d6fae">Forward</a>(real lat, real lon, real h, real &X, real &Y, real &Z) const </td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a54e09e4673ddbf99feeba81036c81345">Forward</a>(real lat, real lon, real h, real &X, real &Y, real &Z, std::vector< real > &M) const </td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a6527d3ab1df78de8277122581dbcdaff">Geocentric</a>(real a, real f)</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#adc92d7214526b4cfcd0b9a0171fc8448">Geocentric</a>()</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a243c90a7f9bf3f7aa96877a4b0667a89">GravityCircle</a> class</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#ada1db1d9f480d8044753ed869c995519">GravityModel</a> class</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a7d2e34d1be6009caf4576c6cc884a589">Init</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a8904c4eadcf94e3803743e8cd9ffbc1c">LocalCartesian</a> class</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a7294f6a1cc932f8fd1562a15602e9e86">MagneticCircle</a> class</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#af6619ebe4c078705fc49a0d9f950b431">MagneticModel</a> class</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#ae20c62c298f1724412fec581285cf269">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#ae7298549755c5982fe1be124d6631561">NormalGravity</a> class</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a1907735ce8f5f915a14a5f7a8b3adfea">Reverse</a>(real X, real Y, real Z, real &lat, real &lon, real &h) const </td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#aeddd854d52064bcb1f068052057edf2c">Reverse</a>(real X, real Y, real Z, real &lat, real &lon, real &h, std::vector< real > &M) const </td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#ae0383f6b1ce413d48e258750c3177f21">SphericalHarmonic</a> class</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#accac7c5b7843a1e4fb2baf0c83cc24f0">SphericalHarmonic1</a> class</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a3eabc426b6edd718324c791ef3536360">SphericalHarmonic2</a> class</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">WGS84</a></td><td><a class="el" href="classGeographicLib_1_1Geocentric.html">GeographicLib::Geocentric</a></td><td><code> [static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Geocentric.html b/doc/html/classGeographicLib_1_1Geocentric.html
deleted file mode 100644
index c3492c2..0000000
--- a/doc/html/classGeographicLib_1_1Geocentric.html
+++ /dev/null
@@ -1,735 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::Geocentric Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::Geocentric Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::Geocentric" -->
-<p>Geocentric coordinates  
- <a href="classGeographicLib_1_1Geocentric.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="Geocentric_8hpp_source.html">GeographicLib/Geocentric.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1Geocentric-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a6527d3ab1df78de8277122581dbcdaff">Geocentric</a> (real a, real f)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#adc92d7214526b4cfcd0b9a0171fc8448">Geocentric</a> ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a65320594cad8c03d28beaa409f3d6fae">Forward</a> (real lat, real lon, real h, real &X, real &Y, real &Z) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a54e09e4673ddbf99feeba81036c81345">Forward</a> (real lat, real lon, real h, real &X, real &Y, real &Z, std::vector< real > &M) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a1907735ce8f5f915a14a5f7a8b3adfea">Reverse</a> (real X, real Y, real Z, real &lat, real &lon, real &h) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#aeddd854d52064bcb1f068052057edf2c">Reverse</a> (real X, real Y, real Z, real &lat, real &lon, real &h, std::vector< real > &M) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a7d2e34d1be6009caf4576c6cc884a589">Init</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#ae20c62c298f1724412fec581285cf269">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a30ba434524b5836c9852d454e61d795f">Flattening</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">WGS84</a></td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a8904c4eadcf94e3803743e8cd9ffbc1c">LocalCartesian</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a7294f6a1cc932f8fd1562a15602e9e86">MagneticCircle</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#af6619ebe4c078705fc49a0d9f950b431">MagneticModel</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a243c90a7f9bf3f7aa96877a4b0667a89">GravityCircle</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#ada1db1d9f480d8044753ed869c995519">GravityModel</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#ae7298549755c5982fe1be124d6631561">NormalGravity</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#ae0383f6b1ce413d48e258750c3177f21">SphericalHarmonic</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#accac7c5b7843a1e4fb2baf0c83cc24f0">SphericalHarmonic1</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html#a3eabc426b6edd718324c791ef3536360">SphericalHarmonic2</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Geocentric coordinates </p>
-<p>Convert between geodetic coordinates latitude = <em>lat</em>, longitude = <em>lon</em>, height = <em>h</em> (measured vertically from the surface of the ellipsoid) to geocentric coordinates (<em>X</em>, <em>Y</em>, <em>Z</em>). The origin of geocentric coordinates is at the center of the earth. The <em>Z</em> axis goes thru the north pole, <em>lat</em> = 90<sup>o</sup>. The <em>X</em> axis goes thru <em>lat</em> = 0, <em>lon</em> = 0. Geocentric coordinates are also known as earth cen [...]
-<p>The conversion from geographic to geocentric coordinates is straightforward. For the reverse transformation we use</p>
-<ul>
-<li>H. Vermeille, <a href="http://dx.doi.org/10.1007/s00190-002-0273-6">Direct transformation from geocentric coordinates to geodetic coordinates</a>, J. Geodesy 76, 451–454 (2002).</li>
-</ul>
-<p>Several changes have been made to ensure that the method returns accurate results for all finite inputs (even if <em>h</em> is infinite). The changes are described in Appendix B of</p>
-<ul>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1102.1215v1">Geodesics on an ellipsoid of revolution</a>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.</li>
-</ul>
-<p>See <a class="el" href="geocentric.html">Geocentric coordinates</a> for more information.</p>
-<p>The errors in these routines are close to round-off. Specifically, for points within 5000 km of the surface of the ellipsoid (either inside or outside the ellipsoid), the error is bounded by 7 nm (7 nanometers) for the WGS84 ellipsoid. See <a class="el" href="geocentric.html">Geocentric coordinates</a> for further information on the errors.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::Geocentric class</span>
-<span class="comment">// $Id: fea8cd4d5464b6029d6a135a25230892f52f318f $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <cmath></span>
-<span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> earth(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>());
-    <span class="comment">// Alternatively: const Geocentric& earth = Geocentric::WGS84;</span>
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 27.99, lon = 86.93, h = 8820; <span class="comment">// Mt Everest</span>
-      <span class="keywordtype">double</span> X, Y, Z;
-      earth.Forward(lat, lon, h, X, Y, Z);
-      cout << floor(X / 1000 + 0.5) << <span class="stringliteral">" "</span>
-           << floor(Y / 1000 + 0.5) << <span class="stringliteral">" "</span>
-           << floor(Z / 1000 + 0.5) << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">double</span> X = 302e3, Y = 5636e3, Z = 2980e3;
-      <span class="keywordtype">double</span> lat, lon, h;
-      earth.Reverse(X, Y, Z, lat, lon, h);
-      cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">" "</span> << h << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="CartConvert.1.html">CartConvert</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> and <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">LocalCartesian</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a6527d3ab1df78de8277122581dbcdaff"></a><!-- doxytag: member="GeographicLib::Geocentric::Geocentric" ref="a6527d3ab1df78de8277122581dbcdaff" args="(real a, real f)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::Geocentric::Geocentric </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for a ellipsoid with</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>An exception is thrown if either of the axes of the ellipsoid is non-positive. </p>
-
-<p>Definition at line <a class="el" href="Geocentric_8cpp_source.html#l00022">22</a> of file <a class="el" href="Geocentric_8cpp_source.html">Geocentric.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adc92d7214526b4cfcd0b9a0171fc8448"></a><!-- doxytag: member="GeographicLib::Geocentric::Geocentric" ref="adc92d7214526b4cfcd0b9a0171fc8448" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::Geocentric::Geocentric </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor (for use by <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a>). </p>
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00119">119</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a65320594cad8c03d28beaa409f3d6fae"></a><!-- doxytag: member="GeographicLib::Geocentric::Forward" ref="a65320594cad8c03d28beaa409f3d6fae" args="(real lat, real lon, real h, real &X, real &Y, real &Z) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geocentric::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Z</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from geodetic to geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>height of point above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">X</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Y</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Z</td><td>geocentric coordinate (meters).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat</em> should be in the range [-90, 90]; <em>lon</em> and <em>lon0</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00134">134</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="CartConvert_8cpp_source.html#l00032">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a54e09e4673ddbf99feeba81036c81345"></a><!-- doxytag: member="GeographicLib::Geocentric::Forward" ref="a54e09e4673ddbf99feeba81036c81345" args="(real lat, real lon, real h, real &X, real &Y, real &Z, std::vector< real > &M) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geocentric::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::vector< real > & </td>
-          <td class="paramname"><em>M</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from geodetic to geocentric coordinates and return rotation matrix.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>height of point above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">X</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Y</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Z</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M</td><td>if the length of the vector is 9, fill with the rotation matrix in row-major order.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Let <em>v</em> be a unit vector located at (<em>lat</em>, <em>lon</em>, <em>h</em>). We can express <em>v</em> as <em>column</em> vectors in one of two ways</p>
-<ul>
-<li>in east, north, up coordinates (where the components are relative to a local coordinate system at (<em>lat</em>, <em>lon</em>, <em>h</em>)); call this representation <em>v1</em>.</li>
-<li>in geocentric <em>X</em>, <em>Y</em>, <em>Z</em> coordinates; call this representation <em>v0</em>.</li>
-</ul>
-<p>Then we have <em>v0</em> = <em>M</em> . <em>v1</em>. </p>
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00163">163</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1907735ce8f5f915a14a5f7a8b3adfea"></a><!-- doxytag: member="GeographicLib::Geocentric::Reverse" ref="a1907735ce8f5f915a14a5f7a8b3adfea" args="(real X, real Y, real Z, real &lat, real &lon, real &h) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geocentric::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>h</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from geocentric to geodetic to coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Z</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">h</td><td>height of point above the ellipsoid (meters).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>In general there are multiple solutions and the result which maximizes <em>h</em> is returned. If there are still multiple solutions with different latitudes (applies only if <em>Z</em> = 0), then the solution with <em>lat</em> > 0 is returned. If there are still multiple solutions with different longitudes (applies only if <em>X</em> = <em>Y</em> = 0) then <em>lon</em> = 0 is returned. The value of <em>h</em> returned satisfies <em>h</em> >= - <em>a</em> (1 - <em>e</em><sup>2</ [...]
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00195">195</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="CartConvert_8cpp_source.html#l00032">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aeddd854d52064bcb1f068052057edf2c"></a><!-- doxytag: member="GeographicLib::Geocentric::Reverse" ref="aeddd854d52064bcb1f068052057edf2c" args="(real X, real Y, real Z, real &lat, real &lon, real &h, std::vector< real > &M) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geocentric::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::vector< real > & </td>
-          <td class="paramname"><em>M</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from geocentric to geodetic to coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Z</td><td>geocentric coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">h</td><td>height of point above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M</td><td>if the length of the vector is 9, fill with the rotation matrix in row-major order.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Let <em>v</em> be a unit vector located at (<em>lat</em>, <em>lon</em>, <em>h</em>). We can express <em>v</em> as <em>column</em> vectors in one of two ways</p>
-<ul>
-<li>in east, north, up coordinates (where the components are relative to a local coordinate system at (<em>lat</em>, <em>lon</em>, <em>h</em>)); call this representation <em>v1</em>.</li>
-<li>in geocentric <em>X</em>, <em>Y</em>, <em>Z</em> coordinates; call this representation <em>v0</em>.</li>
-</ul>
-<p>Then we have <em>v1</em> = <em>M^T</em> . <em>v0</em>, where <em>M^T</em> is the transpose of <em>M</em>. </p>
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00224">224</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7d2e34d1be6009caf4576c6cc884a589"></a><!-- doxytag: member="GeographicLib::Geocentric::Init" ref="a7d2e34d1be6009caf4576c6cc884a589" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Geocentric::Init </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if the object has been initialized. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00243">243</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae20c62c298f1724412fec581285cf269"></a><!-- doxytag: member="GeographicLib::Geocentric::MajorRadius" ref="ae20c62c298f1724412fec581285cf269" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geocentric::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00248">248</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a30ba434524b5836c9852d454e61d795f"></a><!-- doxytag: member="GeographicLib::Geocentric::Flattening" ref="a30ba434524b5836c9852d454e61d795f" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geocentric::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00255">255</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="a8904c4eadcf94e3803743e8cd9ffbc1c"></a><!-- doxytag: member="GeographicLib::Geocentric::LocalCartesian" ref="a8904c4eadcf94e3803743e8cd9ffbc1c" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1LocalCartesian.html">LocalCartesian</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00066">66</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7294f6a1cc932f8fd1562a15602e9e86"></a><!-- doxytag: member="GeographicLib::Geocentric::MagneticCircle" ref="a7294f6a1cc932f8fd1562a15602e9e86" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1MagneticCircle.html">MagneticCircle</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00067">67</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af6619ebe4c078705fc49a0d9f950b431"></a><!-- doxytag: member="GeographicLib::Geocentric::MagneticModel" ref="af6619ebe4c078705fc49a0d9f950b431" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1MagneticModel.html">MagneticModel</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00068">68</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a243c90a7f9bf3f7aa96877a4b0667a89"></a><!-- doxytag: member="GeographicLib::Geocentric::GravityCircle" ref="a243c90a7f9bf3f7aa96877a4b0667a89" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1GravityCircle.html">GravityCircle</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00069">69</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ada1db1d9f480d8044753ed869c995519"></a><!-- doxytag: member="GeographicLib::Geocentric::GravityModel" ref="ada1db1d9f480d8044753ed869c995519" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1GravityModel.html">GravityModel</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00070">70</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae7298549755c5982fe1be124d6631561"></a><!-- doxytag: member="GeographicLib::Geocentric::NormalGravity" ref="ae7298549755c5982fe1be124d6631561" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00071">71</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae0383f6b1ce413d48e258750c3177f21"></a><!-- doxytag: member="GeographicLib::Geocentric::SphericalHarmonic" ref="ae0383f6b1ce413d48e258750c3177f21" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">SphericalHarmonic</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00072">72</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="accac7c5b7843a1e4fb2baf0c83cc24f0"></a><!-- doxytag: member="GeographicLib::Geocentric::SphericalHarmonic1" ref="accac7c5b7843a1e4fb2baf0c83cc24f0" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">SphericalHarmonic1</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00073">73</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3eabc426b6edd718324c791ef3536360"></a><!-- doxytag: member="GeographicLib::Geocentric::SphericalHarmonic2" ref="a3eabc426b6edd718324c791ef3536360" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">SphericalHarmonic2</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00074">74</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Data Documentation</h2>
-<a class="anchor" id="a4762989f3d1d30bca597f644e8b2b52e"></a><!-- doxytag: member="GeographicLib::Geocentric::WGS84" ref="a4762989f3d1d30bca597f644e8b2b52e" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> <a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">GeographicLib::Geocentric::WGS84</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> with the parameters for the WGS84 ellipsoid. </p>
-
-<p>Definition at line <a class="el" href="Geocentric_8hpp_source.html#l00272">272</a> of file <a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="Geocentric_8hpp_source.html">Geocentric.hpp</a></li>
-<li><a class="el" href="Geocentric_8cpp_source.html">Geocentric.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Geodesic-members.html b/doc/html/classGeographicLib_1_1Geodesic-members.html
deleted file mode 100644
index ad83e1b..0000000
--- a/doc/html/classGeographicLib_1_1Geodesic-members.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::Geodesic Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a30e0c9456c5df9e6ff23880014bd11e0">ALL</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">ArcDirect</a>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aa1bed6c11200c0323cffd0e7027e4df2">ArcDirect</a>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a6f8eabd951b2fe23ffacb6209b2d43bc">ArcDirect</a>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a223802b76bae1665f360b2e343d7afd7">ArcDirect</a>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a63ffe80d449adad813dc98805adcca81">ArcDirect</a>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a55c17605d76f6c46ac5b11f36e8e8641">ArcDirect</a>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#adc8a4d02e631e8966d5842056a49be9c">ArcDirect</a>(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14">AREA</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08">AZIMUTH</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Direct</a>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#ac8b9e451fc4093253cfe3f8051d72a14">Direct</a>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#ac8f0b5f4db73c5d8d11797698f937402">Direct</a>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a63f7681d1239902dc3f528ded0f90352">Direct</a>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a7fb2003b8f1d68976fac43d158b4b8b4">Direct</a>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a65cf95dc7f5c0bfd427e963281e044f0">Direct</a>(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d">DISTANCE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ae20140cdf788fa0497df59630d3211ef">DISTANCE_IN</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a0dde7d12d4bafedef63d371c5fe40f50">EllipsoidArea</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a7abba09bec76f8f97f1e3bc81a7456e2">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#acaef3032846a71fc730e1ea26ea32d20">GenDirect</a>(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a84a3b9b457dd87b1059045b9d50303fd">GenInverse</a>(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21, real &S12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a455300c36e6caa70968115416e1573a4">Geodesic</a>(real a, real f)</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#ac4a8bd684285e00b12427c052697a106">GeodesicLine</a> class</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e">GEODESICSCALE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Inverse</a>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21, real &S12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a7c35218473b1784b1a80b8631f2d345d">Inverse</a>(real lat1, real lon1, real lat2, real lon2, real &s12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a599e587407713f7019906881d6116873">Inverse</a>(real lat1, real lon1, real lat2, real lon2, real &azi1, real &azi2) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a3e07eef498c82ac25b482cadf129d8ae">Inverse</a>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aa6da95e73bec6443a03bf3928f401d19">Inverse</a>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#ac668b5d0f82b28440dac5a44719fd61a">Inverse</a>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#ad3f98a5f2adf39ff26cf3d6fe32258a8">Inverse</a>(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90">LATITUDE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">Line</a>(real lat1, real lon1, real azi1, unsigned caps=ALL) const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b">LONGITUDE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#acd276bb113cfdf3fe59aa43fb3d7289b">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">mask</a> enum name</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ab10adfebcb73de5356c4787246f056af">NONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c">REDUCEDLENGTH</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">WGS84</a></td><td><a class="el" href="classGeographicLib_1_1Geodesic.html">GeographicLib::Geodesic</a></td><td><code> [static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Geodesic.html b/doc/html/classGeographicLib_1_1Geodesic.html
deleted file mode 100644
index c8614f4..0000000
--- a/doc/html/classGeographicLib_1_1Geodesic.html
+++ /dev/null
@@ -1,2167 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::Geodesic Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::Geodesic Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::Geodesic" -->
-<p>Geodesic calculations  
- <a href="classGeographicLib_1_1Geodesic.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="Geodesic_8hpp_source.html">GeographicLib/Geodesic.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1Geodesic-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">mask</a> { <br/>
-  <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ab10adfebcb73de5356c4787246f056af">NONE</a>, 
-<a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90">LATITUDE</a>, 
-<a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b">LONGITUDE</a>, 
-<a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08">AZIMUTH</a>, 
-<br/>
-  <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d">DISTANCE</a>, 
-<a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ae20140cdf788fa0497df59630d3211ef">DISTANCE_IN</a>, 
-<a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c">REDUCEDLENGTH</a>, 
-<a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e">GEODESICSCALE</a>, 
-<br/>
-  <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14">AREA</a>, 
-<a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a30e0c9456c5df9e6ff23880014bd11e0">ALL</a>
-<br/>
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td colspan="2"><div class="groupHeader">Constructor</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a455300c36e6caa70968115416e1573a4">Geodesic</a> (real a, real f)</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Direct geodesic problem specified in terms of distance.</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Direct</a> (real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#ac8b9e451fc4093253cfe3f8051d72a14">Direct</a> (real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#ac8f0b5f4db73c5d8d11797698f937402">Direct</a> (real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a63f7681d1239902dc3f528ded0f90352">Direct</a> (real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a7fb2003b8f1d68976fac43d158b4b8b4">Direct</a> (real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a65cf95dc7f5c0bfd427e963281e044f0">Direct</a> (real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Direct geodesic problem specified in terms of arc length.</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">ArcDirect</a> (real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#aa1bed6c11200c0323cffd0e7027e4df2">ArcDirect</a> (real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a6f8eabd951b2fe23ffacb6209b2d43bc">ArcDirect</a> (real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a223802b76bae1665f360b2e343d7afd7">ArcDirect</a> (real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a63ffe80d449adad813dc98805adcca81">ArcDirect</a> (real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a55c17605d76f6c46ac5b11f36e8e8641">ArcDirect</a> (real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#adc8a4d02e631e8966d5842056a49be9c">ArcDirect</a> (real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">General version of the direct geodesic solution.</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#acaef3032846a71fc730e1ea26ea32d20">GenDirect</a> (real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real & [...]
-<tr><td colspan="2"><div class="groupHeader">Inverse geodesic problem.</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Inverse</a> (real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21, real &S12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a7c35218473b1784b1a80b8631f2d345d">Inverse</a> (real lat1, real lon1, real lat2, real lon2, real &s12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a599e587407713f7019906881d6116873">Inverse</a> (real lat1, real lon1, real lat2, real lon2, real &azi1, real &azi2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a3e07eef498c82ac25b482cadf129d8ae">Inverse</a> (real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#aa6da95e73bec6443a03bf3928f401d19">Inverse</a> (real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#ac668b5d0f82b28440dac5a44719fd61a">Inverse</a> (real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#ad3f98a5f2adf39ff26cf3d6fe32258a8">Inverse</a> (real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">General version of inverse geodesic solution.</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a84a3b9b457dd87b1059045b9d50303fd">GenInverse</a> (real lat1, real lon1, real lat2, real lon2, unsigned outmask, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21, real &S12) const    [...]
-<tr><td colspan="2"><div class="groupHeader">Interface to GeodesicLine.</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeodesicLine</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">Line</a> (real lat1, real lon1, real azi1, unsigned caps=ALL) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions.</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#acd276bb113cfdf3fe59aa43fb3d7289b">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a7abba09bec76f8f97f1e3bc81a7456e2">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#a0dde7d12d4bafedef63d371c5fe40f50">EllipsoidArea</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">WGS84</a></td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html#ac4a8bd684285e00b12427c052697a106">GeodesicLine</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Geodesic calculations </p>
-<p>The shortest path between two points on a ellipsoid at (<em>lat1</em>, <em>lon1</em>) and (<em>lat2</em>, <em>lon2</em>) is called the geodesic. Its length is <em>s12</em> and the geodesic from point 1 to point 2 has azimuths <em>azi1</em> and <em>azi2</em> at the two end points. (The azimuth is the heading measured clockwise from north. <em>azi2</em> is the "forward" azimuth, i.e., the heading that takes you beyond point 2 not back to point 1.)</p>
-<p>Given <em>lat1</em>, <em>lon1</em>, <em>azi1</em>, and <em>s12</em>, we can determine <em>lat2</em>, <em>lon2</em>, and <em>azi2</em>. This is the <em>direct</em> geodesic problem and its solution is given by the function <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a>. (If <em>s12</em> is sufficiently large that the geodesic wraps more than halfway around the earth, there will be another geodesic between the points with  [...]
-<p>Given <em>lat1</em>, <em>lon1</em>, <em>lat2</em>, and <em>lon2</em>, we can determine <em>azi1</em>, <em>azi2</em>, and <em>s12</em>. This is the <em>inverse</em> geodesic problem, whose solution is given by <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a>. Usually, the solution to the inverse problem is unique. In cases where there are multiple solutions (all with the same <em>s12</em>, of course), all the solutions can [...]
-<p>The standard way of specifying the direct problem is the specify the distance <em>s12</em> to the second point. However it is sometimes useful instead to specify the the arc length <em>a12</em> (in degrees) on the auxiliary sphere. This is a mathematical construct used in solving the geodesic problems. The solution of the direct problem in this form is provide by <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">Geodesic::ArcDirect</a>. An arc  [...]
-<p>This class can also calculate several other quantities related to geodesics. These are:</p>
-<ul>
-<li><em>reduced length</em>. If we fix the first point and increase <em>azi1</em> by <em>dazi1</em> (radians), the the second point is displaced <em>m12</em> <em>dazi1</em> in the direction <em>azi2</em> + 90<sup>o</sup>. The quantity <em>m12</em> is called the "reduced length" and is symmetric under interchange of the two points. On a curved surface the reduced length obeys a symmetry relation, <em>m12</em> + <em>m21</em> = 0. On a flat surface, we have <em>m12</em> = <em>s12</em>. The  [...]
-<li><em>geodesic scale</em>. Consider a reference geodesic and a second geodesic parallel to this one at point 1 and separated by a small distance <em>dt</em>. The separation of the two geodesics at point 2 is <em>M12</em> <em>dt</em> where <em>M12</em> is called the "geodesic scale". <em>M21</em> is defined similarly (with the geodesics being parallel at point 2). On a flat surface, we have <em>M12</em> = <em>M21</em> = 1. The quantity 1/<em>M12</em> gives the scale of the Cassini-Soldn [...]
-<li><em>area</em>. Consider the quadrilateral bounded by the following lines: the geodesic from point 1 to point 2, the meridian from point 2 to the equator, the equator from <em>lon2</em> to <em>lon1</em>, the meridian from the equator to point 1. The area of this quadrilateral is represented by <em>S12</em> with a clockwise traversal of the perimeter counting as a positive area and it can be used to compute the area of any simple geodesic polygon.</li>
-</ul>
-<p>Overloaded versions of <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a>, <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">Geodesic::ArcDirect</a>, and <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a> allow these quantities to be returned. In addition there are general functions <a class="el" href="classGeographicLib_1_ [...]
-<ul>
-<li><em>m13</em> = <em>m12</em> <em>M23</em> + <em>m23</em> <em>M21</em> </li>
-<li><em>M13</em> = <em>M12</em> <em>M23</em> - (1 - <em>M12</em> <em>M21</em>) <em>m23</em> / <em>m12</em> </li>
-<li><em>M31</em> = <em>M32</em> <em>M21</em> - (1 - <em>M23</em> <em>M32</em>) <em>m12</em> / <em>m23</em> </li>
-</ul>
-<p>Additional functionality is provided by the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> class, which allows a sequence of points along a geodesic to be computed.</p>
-<p>The calculations are accurate to better than 15 nm (15 nanometers). See Sec. 9 of <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for details.</p>
-<p>The algorithms are described in</p>
-<ul>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1102.1215v1">Geodesics on an ellipsoid of revolution</a>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a>.</li>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>, Sept. 2011; preprint <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.</li>
-</ul>
-<p>For more information on geodesics see <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::Geodesic class</span>
-<span class="comment">// $Id: c825b2bc016f758b52995e446ac77aa42e0f3fda $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> geod(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>());
-    <span class="comment">// Alternatively: const Geodesic& geod = Geodesic::WGS84;</span>
-    {
-      <span class="comment">// Sample direct calculation, travelling about NE from JFK</span>
-      <span class="keywordtype">double</span> lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
-      <span class="keywordtype">double</span> lat2, lon2;
-      geod.<a class="code" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Direct</a>(lat1, lon1, azi1, s12, lat2, lon2);
-      cout << lat2 << <span class="stringliteral">" "</span> << lon2 << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample inverse calculation, JFK to LHR</span>
-      <span class="keywordtype">double</span>
-        lat1 = 40.6, lon1 = -73.8, <span class="comment">// JFK Airport</span>
-        lat2 = 51.6, lon2 = -0.5;  <span class="comment">// LHR Airport</span>
-      <span class="keywordtype">double</span> s12;
-      geod.<a class="code" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Inverse</a>(lat1, lon1, lat2, lon2, s12);
-      cout << s12 << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="Geod.1.html">Geod</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> and <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a>. </p>
-</div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="aab966190e69651b86661fc2628d20828"></a><!-- doxytag: member="GeographicLib::Geodesic::mask" ref="aab966190e69651b86661fc2628d20828" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">GeographicLib::Geodesic::mask</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bit masks for what calculations to do. These masks do double duty. They signify to the <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a5669be85b4a574258f4a136f12d3f1bb">GeodesicLine::GeodesicLine</a> constructor and to <a class="el" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">Geodesic::Line</a> what capabilities should be included in the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a>  [...]
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828ab10adfebcb73de5356c4787246f056af"></a><!-- doxytag: member="NONE" ref="aab966190e69651b86661fc2628d20828ab10adfebcb73de5356c4787246f056af" args="" -->NONE</em> </td><td>
-<p>No capabilities, no output. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90"></a><!-- doxytag: member="LATITUDE" ref="aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90" args="" -->LATITUDE</em> </td><td>
-<p>Calculate latitude <em>lat2</em>. (It's not necessary to include this as a capability to <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> because this is included by default.) </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b"></a><!-- doxytag: member="LONGITUDE" ref="aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b" args="" -->LONGITUDE</em> </td><td>
-<p>Calculate longitude <em>lon2</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08"></a><!-- doxytag: member="AZIMUTH" ref="aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08" args="" -->AZIMUTH</em> </td><td>
-<p>Calculate azimuths <em>azi1</em> and <em>azi2</em>. (It's not necessary to include this as a capability to <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> because this is included by default.) </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d"></a><!-- doxytag: member="DISTANCE" ref="aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d" args="" -->DISTANCE</em> </td><td>
-<p>Calculate distance <em>s12</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828ae20140cdf788fa0497df59630d3211ef"></a><!-- doxytag: member="DISTANCE_IN" ref="aab966190e69651b86661fc2628d20828ae20140cdf788fa0497df59630d3211ef" args="" -->DISTANCE_IN</em> </td><td>
-<p>Allow distance <em>s12</em> to be used as input in the direct geodesic problem. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c"></a><!-- doxytag: member="REDUCEDLENGTH" ref="aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c" args="" -->REDUCEDLENGTH</em> </td><td>
-<p>Calculate reduced length <em>m12</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e"></a><!-- doxytag: member="GEODESICSCALE" ref="aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e" args="" -->GEODESICSCALE</em> </td><td>
-<p>Calculate geodesic scales <em>M12</em> and <em>M21</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14"></a><!-- doxytag: member="AREA" ref="aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14" args="" -->AREA</em> </td><td>
-<p>Calculate area <em>S12</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aab966190e69651b86661fc2628d20828a30e0c9456c5df9e6ff23880014bd11e0"></a><!-- doxytag: member="ALL" ref="aab966190e69651b86661fc2628d20828a30e0c9456c5df9e6ff23880014bd11e0" args="" -->ALL</em> </td><td>
-<p>All capabilities. Calculate everything. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00236">236</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a455300c36e6caa70968115416e1573a4"></a><!-- doxytag: member="GeographicLib::Geodesic::Geodesic" ref="a455300c36e6caa70968115416e1573a4" args="(real a, real f)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::Geodesic::Geodesic </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for a ellipsoid with</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>An exception is thrown if either of the axes of the ellipsoid is non-positive. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8cpp_source.html#l00054">54</a> of file <a class="el" href="Geodesic_8cpp_source.html">Geodesic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a6e31d7655895a61a49258de00fd14603"></a><!-- doxytag: member="GeographicLib::Geodesic::Direct" ref="a6e31d7655895a61a49258de00fd14603" args="(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Direct </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>S12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Perform the direct geodesic calculation where the length of the geodesic is specify in terms of distance.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat1</td><td>latitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon1</td><td>longitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">azi1</td><td>azimuth at point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">s12</td><td>distance between point 1 and point 2 (meters); it can be signed. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat2</td><td>latitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon2</td><td>longitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi2</td><td>(forward) azimuth at point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m12</td><td>reduced length of geodesic (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M12</td><td>geodesic scale of point 2 relative to point 1 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M21</td><td>geodesic scale of point 1 relative to point 2 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">S12</td><td>area under the geodesic (meters<sup>2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a12</em> arc length of between point 1 and point 2 (degrees).</dd></dl>
-<p><em>lat1</em> should be in the range [-90, 90]; <em>lon1</em> and <em>azi1</em> should be in the range [-180, 360]. The values of <em>lon2</em> and <em>azi2</em> returned are in the range [-180, 180).</p>
-<p>If either point is at a pole, the azimuth is defined by keeping the longitude fixed and writing <em>lat</em> = 90 - <em>eps</em> or -90 + <em>eps</em> and taking the limit <em>eps</em> -> 0 from above. An arc length greater that 180 degrees signifies a geodesic which is not a shortest path. (For a prolate ellipsoid, an additional condition is necessary for a shortest path: the longitudinal extent must not exceed of 180 degrees.)</p>
-<p>The following functions are overloaded versions of <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a> which omit some of the output parameters. Note, however, that the arc length is always computed and returned as the function value. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00348">348</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00067">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac8b9e451fc4093253cfe3f8051d72a14"></a><!-- doxytag: member="GeographicLib::Geodesic::Direct" ref="ac8b9e451fc4093253cfe3f8051d72a14" args="(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Direct </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00362">362</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac8f0b5f4db73c5d8d11797698f937402"></a><!-- doxytag: member="GeographicLib::Geodesic::Direct" ref="ac8f0b5f4db73c5d8d11797698f937402" args="(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Direct </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00374">374</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a63f7681d1239902dc3f528ded0f90352"></a><!-- doxytag: member="GeographicLib::Geodesic::Direct" ref="a63f7681d1239902dc3f528ded0f90352" args="(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Direct </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00386">386</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7fb2003b8f1d68976fac43d158b4b8b4"></a><!-- doxytag: member="GeographicLib::Geodesic::Direct" ref="a7fb2003b8f1d68976fac43d158b4b8b4" args="(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Direct </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00398">398</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a65cf95dc7f5c0bfd427e963281e044f0"></a><!-- doxytag: member="GeographicLib::Geodesic::Direct" ref="a65cf95dc7f5c0bfd427e963281e044f0" args="(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Direct </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00411">411</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="abfb6553227e1534b451900240b39d058"></a><!-- doxytag: member="GeographicLib::Geodesic::ArcDirect" ref="abfb6553227e1534b451900240b39d058" args="(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geodesic::ArcDirect </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>S12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Perform the direct geodesic calculation where the length of the geodesic is specify in terms of arc length.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat1</td><td>latitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon1</td><td>longitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">azi1</td><td>azimuth at point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">a12</td><td>arc length between point 1 and point 2 (degrees); it can be signed. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat2</td><td>latitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon2</td><td>longitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi2</td><td>(forward) azimuth at point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">s12</td><td>distance between point 1 and point 2 (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m12</td><td>reduced length of geodesic (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M12</td><td>geodesic scale of point 2 relative to point 1 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M21</td><td>geodesic scale of point 1 relative to point 2 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">S12</td><td>area under the geodesic (meters<sup>2</sup>).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat1</em> should be in the range [-90, 90]; <em>lon1</em> and <em>azi1</em> should be in the range [-180, 360]. The values of <em>lon2</em> and <em>azi2</em> returned are in the range [-180, 180).</p>
-<p>If either point is at a pole, the azimuth is defined by keeping the longitude fixed and writing <em>lat</em> = 90 - <em>eps</em> or -90 + <em>eps</em> and taking the limit <em>eps</em> -> 0 from above. An arc length greater that 180 degrees signifies a geodesic which is not a shortest path. (For a prolate ellipsoid, an additional condition is necessary for a shortest path: the longitudinal extent must not exceed of 180 degrees.)</p>
-<p>The following functions are overloaded versions of <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a> which omit some of the output parameters. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00460">460</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00067">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa1bed6c11200c0323cffd0e7027e4df2"></a><!-- doxytag: member="GeographicLib::Geodesic::ArcDirect" ref="aa1bed6c11200c0323cffd0e7027e4df2" args="(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geodesic::ArcDirect </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">Geodesic::ArcDirect</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00473">473</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6f8eabd951b2fe23ffacb6209b2d43bc"></a><!-- doxytag: member="GeographicLib::Geodesic::ArcDirect" ref="a6f8eabd951b2fe23ffacb6209b2d43bc" args="(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geodesic::ArcDirect </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">Geodesic::ArcDirect</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00484">484</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a223802b76bae1665f360b2e343d7afd7"></a><!-- doxytag: member="GeographicLib::Geodesic::ArcDirect" ref="a223802b76bae1665f360b2e343d7afd7" args="(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geodesic::ArcDirect </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">Geodesic::ArcDirect</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00495">495</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a63ffe80d449adad813dc98805adcca81"></a><!-- doxytag: member="GeographicLib::Geodesic::ArcDirect" ref="a63ffe80d449adad813dc98805adcca81" args="(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geodesic::ArcDirect </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">Geodesic::ArcDirect</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00507">507</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a55c17605d76f6c46ac5b11f36e8e8641"></a><!-- doxytag: member="GeographicLib::Geodesic::ArcDirect" ref="a55c17605d76f6c46ac5b11f36e8e8641" args="(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geodesic::ArcDirect </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">Geodesic::ArcDirect</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00520">520</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adc8a4d02e631e8966d5842056a49be9c"></a><!-- doxytag: member="GeographicLib::Geodesic::ArcDirect" ref="adc8a4d02e631e8966d5842056a49be9c" args="(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geodesic::ArcDirect </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">Geodesic::ArcDirect</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00533">533</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acaef3032846a71fc730e1ea26ea32d20"></a><!-- doxytag: member="GeographicLib::Geodesic::GenDirect" ref="acaef3032846a71fc730e1ea26ea32d20" args="(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::GenDirect </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>arcmode</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12_a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>outmask</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>S12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The general direct geodesic calculation. <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">Geodesic::Direct</a> and <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">Geodesic::ArcDirect</a> are defined in terms of this function.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat1</td><td>latitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon1</td><td>longitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">azi1</td><td>azimuth at point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">arcmode</td><td>boolean flag determining the meaning of the second parameter. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">s12_a12</td><td>if <em>arcmode</em> is false, this is the distance between point 1 and point 2 (meters); otherwise it is the arc length between point 1 and point 2 (degrees); it can be signed. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">outmask</td><td>a bitor'ed combination of <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">Geodesic::mask</a> values specifying which of the following parameters should be set. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat2</td><td>latitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon2</td><td>longitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi2</td><td>(forward) azimuth at point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">s12</td><td>distance between point 1 and point 2 (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m12</td><td>reduced length of geodesic (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M12</td><td>geodesic scale of point 2 relative to point 1 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M21</td><td>geodesic scale of point 1 relative to point 2 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">S12</td><td>area under the geodesic (meters<sup>2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a12</em> arc length of between point 1 and point 2 (degrees).</dd></dl>
-<p>The <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">Geodesic::mask</a> values possible for <em>outmask</em> are</p>
-<ul>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90">Geodesic::LATITUDE</a> for the latitude <em>lat2</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b">Geodesic::LONGITUDE</a> for the latitude <em>lon2</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08">Geodesic::AZIMUTH</a> for the latitude <em>azi2</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d">Geodesic::DISTANCE</a> for the distance <em>s12</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c">Geodesic::REDUCEDLENGTH</a> for the reduced length <em>m12</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e">Geodesic::GEODESICSCALE</a> for the geodesic scales <em>M12</em> and <em>M21</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14">Geodesic::AREA</a> for the area <em>S12</em>.</li>
-</ul>
-<p>The function value <em>a12</em> is always computed and returned and this equals <em>s12_a12</em> is <em>arcmode</em> is true. If <em>outmask</em> includes <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d">Geodesic::DISTANCE</a> and <em>arcmode</em> is false, then <em>s12</em> = <em>s12_a12</em>. It is not necessary to include <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d208 [...]
-
-<p>Definition at line <a class="el" href="Geodesic_8cpp_source.html#l00110">110</a> of file <a class="el" href="Geodesic_8cpp_source.html">Geodesic.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad7e59a242125a35a95c96cdb20573081"></a><!-- doxytag: member="GeographicLib::Geodesic::Inverse" ref="ad7e59a242125a35a95c96cdb20573081" args="(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21, real &S12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Inverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>S12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Perform the inverse geodesic calculation.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat1</td><td>latitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon1</td><td>longitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat2</td><td>latitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon2</td><td>longitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">s12</td><td>distance between point 1 and point 2 (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi1</td><td>azimuth at point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi2</td><td>(forward) azimuth at point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m12</td><td>reduced length of geodesic (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M12</td><td>geodesic scale of point 2 relative to point 1 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M21</td><td>geodesic scale of point 1 relative to point 2 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">S12</td><td>area under the geodesic (meters<sup>2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a12</em> arc length of between point 1 and point 2 (degrees).</dd></dl>
-<p><em>lat1</em> and <em>lat2</em> should be in the range [-90, 90]; <em>lon1</em> and <em>lon2</em> should be in the range [-180, 360]. The values of <em>azi1</em> and <em>azi2</em> returned are in the range [-180, 180).</p>
-<p>If either point is at a pole, the azimuth is defined by keeping the longitude fixed and writing <em>lat</em> = 90 - <em>eps</em> or -90 + <em>eps</em> and taking the limit <em>eps</em> -> 0 from above. If the routine fails to converge, then all the requested outputs are set to <a class="el" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">Math::NaN()</a>. (Test for such results with <a class="el" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a [...]
-<p>The following functions are overloaded versions of <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a> which omit some of the output parameters. Note, however, that the arc length is always computed and returned as the function value. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00635">635</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00067">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7c35218473b1784b1a80b8631f2d345d"></a><!-- doxytag: member="GeographicLib::Geodesic::Inverse" ref="a7c35218473b1784b1a80b8631f2d345d" args="(real lat1, real lon1, real lat2, real lon2, real &s12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Inverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00647">647</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a599e587407713f7019906881d6116873"></a><!-- doxytag: member="GeographicLib::Geodesic::Inverse" ref="a599e587407713f7019906881d6116873" args="(real lat1, real lon1, real lat2, real lon2, real &azi1, real &azi2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Inverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00658">658</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3e07eef498c82ac25b482cadf129d8ae"></a><!-- doxytag: member="GeographicLib::Geodesic::Inverse" ref="a3e07eef498c82ac25b482cadf129d8ae" args="(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Inverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00669">669</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa6da95e73bec6443a03bf3928f401d19"></a><!-- doxytag: member="GeographicLib::Geodesic::Inverse" ref="aa6da95e73bec6443a03bf3928f401d19" args="(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Inverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00681">681</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac668b5d0f82b28440dac5a44719fd61a"></a><!-- doxytag: member="GeographicLib::Geodesic::Inverse" ref="ac668b5d0f82b28440dac5a44719fd61a" args="(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Inverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00693">693</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad3f98a5f2adf39ff26cf3d6fe32258a8"></a><!-- doxytag: member="GeographicLib::Geodesic::Inverse" ref="ad3f98a5f2adf39ff26cf3d6fe32258a8" args="(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Inverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a>. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00705">705</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a84a3b9b457dd87b1059045b9d50303fd"></a><!-- doxytag: member="GeographicLib::Geodesic::GenInverse" ref="a84a3b9b457dd87b1059045b9d50303fd" args="(real lat1, real lon1, real lat2, real lon2, unsigned outmask, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21, real &S12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::GenInverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>outmask</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>S12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The general inverse geodesic calculation. <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Geodesic::Inverse</a> is defined in terms of this function.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat1</td><td>latitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon1</td><td>longitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat2</td><td>latitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon2</td><td>longitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">outmask</td><td>a bitor'ed combination of <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">Geodesic::mask</a> values specifying which of the following parameters should be set. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">s12</td><td>distance between point 1 and point 2 (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi1</td><td>azimuth at point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi2</td><td>(forward) azimuth at point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m12</td><td>reduced length of geodesic (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M12</td><td>geodesic scale of point 2 relative to point 1 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M21</td><td>geodesic scale of point 1 relative to point 2 (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">S12</td><td>area under the geodesic (meters<sup>2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a12</em> arc length of between point 1 and point 2 (degrees).</dd></dl>
-<p>The <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">Geodesic::mask</a> values possible for <em>outmask</em> are</p>
-<ul>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d">Geodesic::DISTANCE</a> for the distance <em>s12</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08">Geodesic::AZIMUTH</a> for the latitude <em>azi2</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c">Geodesic::REDUCEDLENGTH</a> for the reduced length <em>m12</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e">Geodesic::GEODESICSCALE</a> for the geodesic scales <em>M12</em> and <em>M21</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14">Geodesic::AREA</a> for the area <em>S12</em>.</li>
-</ul>
-<p>The arc length is always computed and returned as the function value. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8cpp_source.html#l00123">123</a> of file <a class="el" href="Geodesic_8cpp_source.html">Geodesic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>, and <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3ac241c18897bb9bec4b839d7e1a7c59"></a><!-- doxytag: member="GeographicLib::Geodesic::Line" ref="a3ac241c18897bb9bec4b839d7e1a7c59" args="(real lat1, real lon1, real azi1, unsigned caps=ALL) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeodesicLine</a> GeographicLib::Geodesic::Line </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>caps</em> = <code>ALL</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set up to compute several points on a singe geodesic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat1</td><td>latitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon1</td><td>longitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">azi1</td><td>azimuth at point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">caps</td><td>bitor'ed combination of <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">Geodesic::mask</a> values specifying the capabilities the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object should possess, i.e., which quantities can be returned in calls to GeodesicLib::Position.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat1</em> should be in the range [-90, 90]; <em>lon1</em> and <em>azi1</em> should be in the range [-180, 360].</p>
-<p>The <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">Geodesic::mask</a> values are</p>
-<ul>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90">Geodesic::LATITUDE</a> for the latitude <em>lat2</em>; this is added automatically</li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b">Geodesic::LONGITUDE</a> for the latitude <em>lon2</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08">Geodesic::AZIMUTH</a> for the latitude <em>azi2</em>; this is added automatically</li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d">Geodesic::DISTANCE</a> for the distance <em>s12</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c">Geodesic::REDUCEDLENGTH</a> for the reduced length <em>m12</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e">Geodesic::GEODESICSCALE</a> for the geodesic scales <em>M12</em> and <em>M21</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14">Geodesic::AREA</a> for the area <em>S12</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ae20140cdf788fa0497df59630d3211ef">Geodesic::DISTANCE_IN</a> permits the length of the geodesic to be given in terms of <em>s12</em>; without this capability the length can only be specified in terms of arc length.</li>
-</ul>
-<p>The default value of <em>caps</em> is <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a30e0c9456c5df9e6ff23880014bd11e0">Geodesic::ALL</a> which turns on all the capabilities.</p>
-<p>If the point is at a pole, the azimuth is defined by keeping the <em>lon1</em> fixed and writing <em>lat1</em> = 90 - <em>eps</em> or -90 + <em>eps</em> and taking the limit <em>eps</em> -> 0 from above. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8cpp_source.html#l00105">105</a> of file <a class="el" href="Geodesic_8cpp_source.html">Geodesic.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geod_8cpp_source.html#l00067">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acd276bb113cfdf3fe59aa43fb3d7289b"></a><!-- doxytag: member="GeographicLib::Geodesic::MajorRadius" ref="acd276bb113cfdf3fe59aa43fb3d7289b" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00811">811</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7abba09bec76f8f97f1e3bc81a7456e2"></a><!-- doxytag: member="GeographicLib::Geodesic::Flattening" ref="a7abba09bec76f8f97f1e3bc81a7456e2" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00817">817</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0dde7d12d4bafedef63d371c5fe40f50"></a><!-- doxytag: member="GeographicLib::Geodesic::EllipsoidArea" ref="a0dde7d12d4bafedef63d371c5fe40f50" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geodesic::EllipsoidArea </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>total area of ellipsoid in meters<sup>2</sup>. The area of a polygon encircling a pole can be found by adding <a class="el" href="classGeographicLib_1_1Geodesic.html#a0dde7d12d4bafedef63d371c5fe40f50">Geodesic::EllipsoidArea()</a>/2 to the sum of <em>S12</em> for each side of the polygon. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00833">833</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="ac4a8bd684285e00b12427c052697a106"></a><!-- doxytag: member="GeographicLib::Geodesic::GeodesicLine" ref="ac4a8bd684285e00b12427c052697a106" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeodesicLine</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00132">132</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Data Documentation</h2>
-<a class="anchor" id="ae918bb7e1555fba38483449cbbac0ca1"></a><!-- doxytag: member="GeographicLib::Geodesic::WGS84" ref="ae918bb7e1555fba38483449cbbac0ca1" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> <a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">GeographicLib::Geodesic::WGS84</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> with the parameters for the WGS84 ellipsoid. </p>
-
-<p>Definition at line <a class="el" href="Geodesic_8hpp_source.html#l00841">841</a> of file <a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="Geodesic_8hpp_source.html">Geodesic.hpp</a></li>
-<li><a class="el" href="Geodesic_8cpp_source.html">Geodesic.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GeodesicLine-members.html b/doc/html/classGeographicLib_1_1GeodesicLine-members.html
deleted file mode 100644
index e004e6d..0000000
--- a/doc/html/classGeographicLib_1_1GeodesicLine-members.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeodesicLine</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::GeodesicLine Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccabf2df1a904dc1c546a122ac0ebe1acd6">ALL</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">ArcPosition</a>(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#afa377ee7344df5759cb7ea1022ff8288">ArcPosition</a>(real a12, real &lat2, real &lon2) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a2d147b25bcef6a7258fabc581a2d64a1">ArcPosition</a>(real a12, real &lat2, real &lon2, real &azi2) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#afdedfa0bc105dbe5de4c292115c7b7ae">ArcPosition</a>(real a12, real &lat2, real &lon2, real &azi2, real &s12) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad6b2013f9dcde3f4bf867632f6a2d1ff">ArcPosition</a>(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a2e0249a548d2dd9c882cb4a8de17d8eb">ArcPosition</a>(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#af286d2071bdc59e68046dd2557115f21">ArcPosition</a>(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">AREA</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a40707b9e989c95418b2559b271cc2699">Azimuth</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e">AZIMUTH</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a21d07549d1171ad05c7318533c4c8970">Capabilities</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a4e12366c2ce02e7a96ee778eedb55bf9">Capabilities</a>(unsigned testcaps) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184">DISTANCE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc">DISTANCE_IN</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a308c7fb4f7c562a8c604453bf2ee2ca2">EquatorialArc</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad117912c4fc4ef29bf4050c9be3267f2">EquatorialAzimuth</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a42e1f97e3ed564f98b305450b0d04590">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad9522110fe6a5a0c7f912a6b1a23094d">GenPosition</a>(bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a088c26ef9558197029bbeb317f3104c0">Geodesic</a> class</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a5669be85b4a574258f4a136f12d3f1bb">GeodesicLine</a>(const Geodesic &g, real lat1, real lon1, real azi1, unsigned caps=ALL)</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ae5ad84103d70f252c66bf61afbda3fa0">GeodesicLine</a>()</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GEODESICSCALE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#af7e248d7632f56cf7abc6eac4927a587">Init</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a00a291e94d0c688a168a58623a360659">Latitude</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23">LATITUDE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">LONGITUDE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac567ccf20c683319370f4c747f23966a">Longitude</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#af8953029b9985a3929fe406f7530143b">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">mask</a> enum name</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca0f2ec05e56540d908a326a872b9aa68f">NONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">Position</a>(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a50feb9c64d66b6518c640584d25e9507">Position</a>(real s12, real &lat2, real &lon2) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac736a0cc3300e443d42bbd2dc901962c">Position</a>(real s12, real &lat2, real &lon2, real &azi2) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a10b743a14701f620c0f41f1c6e1cee76">Position</a>(real s12, real &lat2, real &lon2, real &azi2, real &m12) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ada48245beb736fe9ff3d8c491e9a691f">Position</a>(real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#aa42e5028aa78ef3ce8fbcb01b25eb458">Position</a>(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const </td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">REDUCEDLENGTH</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeographicLib::GeodesicLine</a></td><td></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GeodesicLine.html b/doc/html/classGeographicLib_1_1GeodesicLine.html
deleted file mode 100644
index a3a242b..0000000
--- a/doc/html/classGeographicLib_1_1GeodesicLine.html
+++ /dev/null
@@ -1,1404 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::GeodesicLine Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeodesicLine</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::GeodesicLine Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::GeodesicLine" -->
-<p>A geodesic line.  
- <a href="classGeographicLib_1_1GeodesicLine.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="GeodesicLine_8hpp_source.html">GeographicLib/GeodesicLine.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1GeodesicLine-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">mask</a> { <br/>
-  <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca0f2ec05e56540d908a326a872b9aa68f">NONE</a>, 
-<a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23">LATITUDE</a>, 
-<a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">LONGITUDE</a>, 
-<a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e">AZIMUTH</a>, 
-<br/>
-  <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184">DISTANCE</a>, 
-<a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc">DISTANCE_IN</a>, 
-<a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">REDUCEDLENGTH</a>, 
-<a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GEODESICSCALE</a>, 
-<br/>
-  <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">AREA</a>, 
-<a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccabf2df1a904dc1c546a122ac0ebe1acd6">ALL</a>
-<br/>
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td colspan="2"><div class="groupHeader">Constructors</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a5669be85b4a574258f4a136f12d3f1bb">GeodesicLine</a> (const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> &g, real lat1, real lon1, real azi1, unsigned caps=ALL)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ae5ad84103d70f252c66bf61afbda3fa0">GeodesicLine</a> ()  throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Position in terms of distance</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">Position</a> (real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a50feb9c64d66b6518c640584d25e9507">Position</a> (real s12, real &lat2, real &lon2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac736a0cc3300e443d42bbd2dc901962c">Position</a> (real s12, real &lat2, real &lon2, real &azi2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a10b743a14701f620c0f41f1c6e1cee76">Position</a> (real s12, real &lat2, real &lon2, real &azi2, real &m12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ada48245beb736fe9ff3d8c491e9a691f">Position</a> (real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#aa42e5028aa78ef3ce8fbcb01b25eb458">Position</a> (real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Position in terms of arc length</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">ArcPosition</a> (real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#afa377ee7344df5759cb7ea1022ff8288">ArcPosition</a> (real a12, real &lat2, real &lon2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a2d147b25bcef6a7258fabc581a2d64a1">ArcPosition</a> (real a12, real &lat2, real &lon2, real &azi2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#afdedfa0bc105dbe5de4c292115c7b7ae">ArcPosition</a> (real a12, real &lat2, real &lon2, real &azi2, real &s12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad6b2013f9dcde3f4bf867632f6a2d1ff">ArcPosition</a> (real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a2e0249a548d2dd9c882cb4a8de17d8eb">ArcPosition</a> (real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#af286d2071bdc59e68046dd2557115f21">ArcPosition</a> (real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">The general position function.</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad9522110fe6a5a0c7f912a6b1a23094d">GenPosition</a> (bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) con [...]
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#af7e248d7632f56cf7abc6eac4927a587">Init</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a00a291e94d0c688a168a58623a360659">Latitude</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac567ccf20c683319370f4c747f23966a">Longitude</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a40707b9e989c95418b2559b271cc2699">Azimuth</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad117912c4fc4ef29bf4050c9be3267f2">EquatorialAzimuth</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a308c7fb4f7c562a8c604453bf2ee2ca2">EquatorialArc</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#af8953029b9985a3929fe406f7530143b">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a42e1f97e3ed564f98b305450b0d04590">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a21d07549d1171ad05c7318533c4c8970">Capabilities</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a4e12366c2ce02e7a96ee778eedb55bf9">Capabilities</a> (unsigned testcaps) const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html#a088c26ef9558197029bbeb317f3104c0">Geodesic</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>A geodesic line. </p>
-<p><a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> facilitates the determination of a series of points on a single geodesic. The starting point (<em>lat1</em>, <em>lon1</em>) and the azimuth <em>azi1</em> are specified in the constructor. <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeodesicLine.Position</a> returns the location of point 2 a distance <em>s12</em> along the geodesic. A [...]
-<p>The default copy constructor and assignment operators work with this class. Similarly, a vector can be used to hold <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> objects.</p>
-<p>The calculations are accurate to better than 15 nm (15 nanometers). See Sec. 9 of <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for details.</p>
-<p>The algorithms are described in</p>
-<ul>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1102.1215v1">Geodesics on an ellipsoid of revolution</a>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a>.</li>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>, Sept. 2011; preprint <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.</li>
-</ul>
-<p>For more information on geodesics see <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::GeodesicLine class</span>
-<span class="comment">// $Id: df5c5ffe6534d46e343544430de8c13fc8119bfb $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <cmath></span>
-<span class="preprocessor">#include <iomanip></span>
-<span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="GeodesicLine_8hpp.html" title="Header for GeographicLib::GeodesicLine class.">GeographicLib/GeodesicLine.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="comment">// Print waypoints between JFK and SIN</span>
-    <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> geod(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>());
-    <span class="comment">// Alternatively: const Geodesic& geod = Geodesic::WGS84;</span>
-    <span class="keywordtype">double</span>
-      lat1 = 40.640, lon1 = -73.779, <span class="comment">// JFK</span>
-      lat2 =  1.359, lon2 = 103.989; <span class="comment">// SIN</span>
-    <span class="keywordtype">double</span> s12, azi1, azi2,
-      a12 = geod.<a class="code" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Inverse</a>(lat1, lon1, lat2, lon2, s12, azi1, azi2);
-    <span class="keyword">const</span> GeographicLib<a class="code" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">::GeodesicLine</a> line(geod, lat1, lon1, azi1);
-    <span class="comment">// Alternatively</span>
-    <span class="comment">// const GeographicLib::GeodesicLine line = geod.Line(lat1, lon1, azi1);</span>
-    <span class="keywordtype">double</span> ds = 500e3;          <span class="comment">// Nominal distance between points = 500 km</span>
-    <span class="keywordtype">int</span> num = int(ceil(s12 / ds)); <span class="comment">// The number of intervals</span>
-    cout << fixed << setprecision(3);
-    {
-      <span class="comment">// Use intervals of equal length</span>
-      <span class="keywordtype">double</span> ds = s12 / num;
-      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= num; ++i) {
-        <span class="keywordtype">double</span> lat, lon;
-       line.Position(i * ds, lat, lon);
-       cout << i << <span class="stringliteral">" "</span> << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-      }
-    }
-    {
-      <span class="comment">// Slightly faster, use intervals of equal arc length</span>
-      <span class="keywordtype">double</span> da = a12 / num;
-      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= num; ++i) {
-        <span class="keywordtype">double</span> lat, lon;
-       line.ArcPosition(i * da, lat, lon);
-       cout << i << <span class="stringliteral">" "</span> << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-      }
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="Geod.1.html">Geod</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> and <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a>. </p>
-</div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="adeec76cf92a8c30770e1199bdadacbcc"></a><!-- doxytag: member="GeographicLib::GeodesicLine::mask" ref="adeec76cf92a8c30770e1199bdadacbcc" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">GeographicLib::GeodesicLine::mask</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bit masks for what calculations to do. They signify to the <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a5669be85b4a574258f4a136f12d3f1bb">GeodesicLine::GeodesicLine</a> constructor and to <a class="el" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">Geodesic::Line</a> what capabilities should be included in the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object. This is merely a dup [...]
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbcca0f2ec05e56540d908a326a872b9aa68f"></a><!-- doxytag: member="NONE" ref="adeec76cf92a8c30770e1199bdadacbcca0f2ec05e56540d908a326a872b9aa68f" args="" -->NONE</em> </td><td>
-<p>No capabilities, no output. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23"></a><!-- doxytag: member="LATITUDE" ref="adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23" args="" -->LATITUDE</em> </td><td>
-<p>Calculate latitude <em>lat2</em>. (It's not necessary to include this as a capability to <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> because this is included by default.) </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9"></a><!-- doxytag: member="LONGITUDE" ref="adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9" args="" -->LONGITUDE</em> </td><td>
-<p>Calculate longitude <em>lon2</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e"></a><!-- doxytag: member="AZIMUTH" ref="adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e" args="" -->AZIMUTH</em> </td><td>
-<p>Calculate azimuths <em>azi1</em> and <em>azi2</em>. (It's not necessary to include this as a capability to <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> because this is included by default.) </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184"></a><!-- doxytag: member="DISTANCE" ref="adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184" args="" -->DISTANCE</em> </td><td>
-<p>Calculate distance <em>s12</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc"></a><!-- doxytag: member="DISTANCE_IN" ref="adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc" args="" -->DISTANCE_IN</em> </td><td>
-<p>Allow distance <em>s12</em> to be used as input in the direct geodesic problem. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411"></a><!-- doxytag: member="REDUCEDLENGTH" ref="adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411" args="" -->REDUCEDLENGTH</em> </td><td>
-<p>Calculate reduced length <em>m12</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6"></a><!-- doxytag: member="GEODESICSCALE" ref="adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6" args="" -->GEODESICSCALE</em> </td><td>
-<p>Calculate geodesic scales <em>M12</em> and <em>M21</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915"></a><!-- doxytag: member="AREA" ref="adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915" args="" -->AREA</em> </td><td>
-<p>Calculate area <em>S12</em>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adeec76cf92a8c30770e1199bdadacbccabf2df1a904dc1c546a122ac0ebe1acd6"></a><!-- doxytag: member="ALL" ref="adeec76cf92a8c30770e1199bdadacbccabf2df1a904dc1c546a122ac0ebe1acd6" args="" -->ALL</em> </td><td>
-<p>All capabilities. Calculate everything. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00096">96</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a5669be85b4a574258f4a136f12d3f1bb"></a><!-- doxytag: member="GeographicLib::GeodesicLine::GeodesicLine" ref="a5669be85b4a574258f4a136f12d3f1bb" args="(const Geodesic &g, real lat1, real lon1, real azi1, unsigned caps=ALL)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::GeodesicLine::GeodesicLine </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> & </td>
-          <td class="paramname"><em>g</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>azi1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>caps</em> = <code>ALL</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for a geodesic line staring at latitude <em>lat1</em>, longitude <em>lon1</em>, and azimuth <em>azi1</em> (all in degrees).</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">g</td><td>A <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used to compute the necessary information about the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a>.</td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat1</td><td>latitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon1</td><td>longitude of point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">azi1</td><td>azimuth at point 1 (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">caps</td><td>bitor'ed combination of <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">GeodesicLine::mask</a> values specifying the capabilities the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object should possess, i.e., which quantities can be returned in calls to GeodesicLib::Position.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat1</em> should be in the range [-90, 90]; <em>lon1</em> and <em>azi1</em> should be in the range [-180, 360].</p>
-<p>The <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">GeodesicLine::mask</a> values are</p>
-<ul>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23">GeodesicLine::LATITUDE</a> for the latitude <em>lat2</em>; this is added automatically</li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">GeodesicLine::LONGITUDE</a> for the latitude <em>lon2</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e">GeodesicLine::AZIMUTH</a> for the latitude <em>azi2</em>; this is added automatically</li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184">GeodesicLine::DISTANCE</a> for the distance <em>s12</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">GeodesicLine::REDUCEDLENGTH</a> for the reduced length <em>m12</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeodesicLine::GEODESICSCALE</a> for the geodesic scales <em>M12</em> and <em>M21</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">GeodesicLine::AREA</a> for the area <em>S12</em> </li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc">GeodesicLine::DISTANCE_IN</a> permits the length of the geodesic to be given in terms of <em>s12</em>; without this capability the length can only be specified in terms of arc length.</li>
-</ul>
-<p>The default value of <em>caps</em> is <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccabf2df1a904dc1c546a122ac0ebe1acd6">GeodesicLine::ALL</a> which turns on all the capabilities.</p>
-<p>If the point is at a pole, the azimuth is defined by keeping the <em>lon1</em> fixed and writing <em>lat1</em> = 90 - <em>eps</em> or -90 + <em>eps</em> and taking the limit <em>eps</em> -> 0 from above. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8cpp_source.html#l00041">41</a> of file <a class="el" href="GeodesicLine_8cpp_source.html">GeodesicLine.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae5ad84103d70f252c66bf61afbda3fa0"></a><!-- doxytag: member="GeographicLib::GeodesicLine::GeodesicLine" ref="ae5ad84103d70f252c66bf61afbda3fa0" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::GeodesicLine::GeodesicLine </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor. If <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeodesicLine::Position</a> is called on the resulting object, it returns immediately (without doing any calculations). The object can be set with a call to <a class="el" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">Geodesic::Line</a>. Use <a class="el" href="classGeographicLib_1_1GeodesicLine.html#af7e248d7632f56cf7abc6eac4927a587">In [...]
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00207">207</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="ac9843cbfff45e8163b78e184a3126d82"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Position" ref="ac9843cbfff45e8163b78e184a3126d82" args="(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Position </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>S12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the position of point 2 which is a distance <em>s12</em> (meters) from point 1.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s12</td><td>distance between point 1 and point 2 (meters); it can be signed. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat2</td><td>latitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon2</td><td>longitude of point 2 (degrees); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">GeodesicLine::LONGITUDE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi2</td><td>(forward) azimuth at point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m12</td><td>reduced length of geodesic (meters); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">GeodesicLine::REDUCEDLENGTH</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M12</td><td>geodesic scale of point 2 relative to point 1 (dimensionless); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeodesicLine::GEODESICSCALE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M21</td><td>geodesic scale of point 1 relative to point 2 (dimensionless); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeodesicLine::GEODESICSCALE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">S12</td><td>area under the geodesic (meters<sup>2</sup>); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">GeodesicLine::AREA</a>. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a12</em> arc length of between point 1 and point 2 (degrees).</dd></dl>
-<p>The values of <em>lon2</em> and <em>azi2</em> returned are in the range [-180, 180).</p>
-<p>The <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object <em>must</em> have been constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc">GeodesicLine::DISTANCE_IN</a>; otherwise <a class="el" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">Math::NaN()</a> is returned and no parameters are set. Reques [...]
-<p>The following functions are overloaded versions of <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeodesicLine::Position</a> which omit some of the output parameters. Note, however, that the arc length is always computed and returned as the function value. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00252">252</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Gnomonic_8cpp_source.html#l00044">GeographicLib::Gnomonic::Reverse()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a50feb9c64d66b6518c640584d25e9507"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Position" ref="a50feb9c64d66b6518c640584d25e9507" args="(real s12, real &lat2, real &lon2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Position </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeodesicLine::Position</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00266">266</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac736a0cc3300e443d42bbd2dc901962c"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Position" ref="ac736a0cc3300e443d42bbd2dc901962c" args="(real s12, real &lat2, real &lon2, real &azi2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Position </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeodesicLine::Position</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00276">276</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a10b743a14701f620c0f41f1c6e1cee76"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Position" ref="a10b743a14701f620c0f41f1c6e1cee76" args="(real s12, real &lat2, real &lon2, real &azi2, real &m12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Position </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeodesicLine::Position</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00287">287</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ada48245beb736fe9ff3d8c491e9a691f"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Position" ref="ada48245beb736fe9ff3d8c491e9a691f" args="(real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Position </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeodesicLine::Position</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00299">299</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa42e5028aa78ef3ce8fbcb01b25eb458"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Position" ref="aa42e5028aa78ef3ce8fbcb01b25eb458" args="(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Position </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeodesicLine::Position</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00312">312</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9270eecb58eaac3115a5f08879990482"></a><!-- doxytag: member="GeographicLib::GeodesicLine::ArcPosition" ref="a9270eecb58eaac3115a5f08879990482" args="(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeodesicLine::ArcPosition </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>S12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the position of point 2 which is an arc length <em>a12</em> (degrees) from point 1.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a12</td><td>arc length between point 1 and point 2 (degrees); it can be signed. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat2</td><td>latitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon2</td><td>longitude of point 2 (degrees); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">GeodesicLine::LONGITUDE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi2</td><td>(forward) azimuth at point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">s12</td><td>distance between point 1 and point 2 (meters); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184">GeodesicLine::DISTANCE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m12</td><td>reduced length of geodesic (meters); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">GeodesicLine::REDUCEDLENGTH</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M12</td><td>geodesic scale of point 2 relative to point 1 (dimensionless); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeodesicLine::GEODESICSCALE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M21</td><td>geodesic scale of point 1 relative to point 2 (dimensionless); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeodesicLine::GEODESICSCALE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">S12</td><td>area under the geodesic (meters<sup>2</sup>); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">GeodesicLine::AREA</a>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The values of <em>lon2</em> and <em>azi2</em> returned are in the range [-180, 180).</p>
-<p>Requesting a value which the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object is not capable of computing is not an error; the corresponding argument will not be altered.</p>
-<p>The following functions are overloaded versions of <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">GeodesicLine::ArcPosition</a> which omit some of the output parameters. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00365">365</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afa377ee7344df5759cb7ea1022ff8288"></a><!-- doxytag: member="GeographicLib::GeodesicLine::ArcPosition" ref="afa377ee7344df5759cb7ea1022ff8288" args="(real a12, real &lat2, real &lon2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeodesicLine::ArcPosition </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">GeodesicLine::ArcPosition</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00377">377</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2d147b25bcef6a7258fabc581a2d64a1"></a><!-- doxytag: member="GeographicLib::GeodesicLine::ArcPosition" ref="a2d147b25bcef6a7258fabc581a2d64a1" args="(real a12, real &lat2, real &lon2, real &azi2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeodesicLine::ArcPosition </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">GeodesicLine::ArcPosition</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00388">388</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afdedfa0bc105dbe5de4c292115c7b7ae"></a><!-- doxytag: member="GeographicLib::GeodesicLine::ArcPosition" ref="afdedfa0bc105dbe5de4c292115c7b7ae" args="(real a12, real &lat2, real &lon2, real &azi2, real &s12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeodesicLine::ArcPosition </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">GeodesicLine::ArcPosition</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00400">400</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad6b2013f9dcde3f4bf867632f6a2d1ff"></a><!-- doxytag: member="GeographicLib::GeodesicLine::ArcPosition" ref="ad6b2013f9dcde3f4bf867632f6a2d1ff" args="(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeodesicLine::ArcPosition </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">GeodesicLine::ArcPosition</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00411">411</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2e0249a548d2dd9c882cb4a8de17d8eb"></a><!-- doxytag: member="GeographicLib::GeodesicLine::ArcPosition" ref="a2e0249a548d2dd9c882cb4a8de17d8eb" args="(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeodesicLine::ArcPosition </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">GeodesicLine::ArcPosition</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00423">423</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af286d2071bdc59e68046dd2557115f21"></a><!-- doxytag: member="GeographicLib::GeodesicLine::ArcPosition" ref="af286d2071bdc59e68046dd2557115f21" args="(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GeodesicLine::ArcPosition </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>See the documentation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">GeodesicLine::ArcPosition</a>. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00436">436</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad9522110fe6a5a0c7f912a6b1a23094d"></a><!-- doxytag: member="GeographicLib::GeodesicLine::GenPosition" ref="ad9522110fe6a5a0c7f912a6b1a23094d" args="(bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::GenPosition </td>
-          <td>(</td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>arcmode</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>s12_a12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>outmask</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>s12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>m12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M12</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>M21</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>S12</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The general position function. <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeodesicLine::Position</a> and <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a9270eecb58eaac3115a5f08879990482">GeodesicLine::ArcPosition</a> are defined in terms of this function.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">arcmode</td><td>boolean flag determining the meaning of the second parameter; if arcmode is false, then the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object must have been constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc">GeodesicLine::DISTANCE_IN</a>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">s12_a12</td><td>if <em>arcmode</em> is false, this is the distance between point 1 and point 2 (meters); otherwise it is the arc length between point 1 and point 2 (degrees); it can be signed. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">outmask</td><td>a bitor'ed combination of <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">GeodesicLine::mask</a> values specifying which of the following parameters should be set. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat2</td><td>latitude of point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon2</td><td>longitude of point 2 (degrees); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">GeodesicLine::LONGITUDE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi2</td><td>(forward) azimuth at point 2 (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">s12</td><td>distance between point 1 and point 2 (meters); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184">GeodesicLine::DISTANCE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m12</td><td>reduced length of geodesic (meters); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">GeodesicLine::REDUCEDLENGTH</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M12</td><td>geodesic scale of point 2 relative to point 1 (dimensionless); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeodesicLine::GEODESICSCALE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M21</td><td>geodesic scale of point 1 relative to point 2 (dimensionless); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeodesicLine::GEODESICSCALE</a>. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">S12</td><td>area under the geodesic (meters<sup>2</sup>); requires that the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object was constructed with <em>caps</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">GeodesicLine::AREA</a>. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a12</em> arc length of between point 1 and point 2 (degrees).</dd></dl>
-<p>The <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">GeodesicLine::mask</a> values possible for <em>outmask</em> are</p>
-<ul>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23">GeodesicLine::LATITUDE</a> for the latitude <em>lat2</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">GeodesicLine::LONGITUDE</a> for the latitude <em>lon2</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e">GeodesicLine::AZIMUTH</a> for the latitude <em>azi2</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184">GeodesicLine::DISTANCE</a> for the distance <em>s12</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">GeodesicLine::REDUCEDLENGTH</a> for the reduced length <em>m12</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeodesicLine::GEODESICSCALE</a> for the geodesic scales <em>M12</em> and <em>M21</em>.</li>
-<li><em>outmask</em> |= <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">GeodesicLine::AREA</a> for the area <em>S12</em>.</li>
-</ul>
-<p>Requesting a value which the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object is not capable of computing is not an error; the corresponding argument will not be altered. Note, however, that the arc length is always computed and returned as the function value. </p>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8cpp_source.html#l00129">129</a> of file <a class="el" href="GeodesicLine_8cpp_source.html">GeodesicLine.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="CassiniSoldner_8cpp_source.html#l00039">GeographicLib::CassiniSoldner::Forward()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af7e248d7632f56cf7abc6eac4927a587"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Init" ref="af7e248d7632f56cf7abc6eac4927a587" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::GeodesicLine::Init </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if the object has been initialized. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00515">515</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a00a291e94d0c688a168a58623a360659"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Latitude" ref="a00a291e94d0c688a168a58623a360659" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Latitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>lat1</em> the latitude of point 1 (degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00520">520</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac567ccf20c683319370f4c747f23966a"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Longitude" ref="ac567ccf20c683319370f4c747f23966a" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Longitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>lon1</em> the longitude of point 1 (degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00526">526</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a40707b9e989c95418b2559b271cc2699"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Azimuth" ref="a40707b9e989c95418b2559b271cc2699" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Azimuth </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>azi1</em> the azimuth (degrees) of the geodesic line at point 1. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00532">532</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad117912c4fc4ef29bf4050c9be3267f2"></a><!-- doxytag: member="GeographicLib::GeodesicLine::EquatorialAzimuth" ref="ad117912c4fc4ef29bf4050c9be3267f2" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::EquatorialAzimuth </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>azi0</em> the azimuth (degrees) of the geodesic line as it crosses the equator in a northward direction. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00539">539</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a308c7fb4f7c562a8c604453bf2ee2ca2"></a><!-- doxytag: member="GeographicLib::GeodesicLine::EquatorialArc" ref="a308c7fb4f7c562a8c604453bf2ee2ca2" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::EquatorialArc </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a1</em> the arc length (degrees) between the northward equatorial crossing and point 1. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00548">548</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af8953029b9985a3929fe406f7530143b"></a><!-- doxytag: member="GeographicLib::GeodesicLine::MajorRadius" ref="af8953029b9985a3929fe406f7530143b" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00557">557</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a42e1f97e3ed564f98b305450b0d04590"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Flattening" ref="a42e1f97e3ed564f98b305450b0d04590" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GeodesicLine::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00564">564</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a21d07549d1171ad05c7318533c4c8970"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Capabilities" ref="a21d07549d1171ad05c7318533c4c8970" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">unsigned GeographicLib::GeodesicLine::Capabilities </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>caps</em> the computational capabilities that this object was constructed with. LATITUDE and AZIMUTH are always included. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00580">580</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4e12366c2ce02e7a96ee778eedb55bf9"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Capabilities" ref="a4e12366c2ce02e7a96ee778eedb55bf9" args="(unsigned testcaps) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::GeodesicLine::Capabilities </td>
-          <td>(</td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>testcaps</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">testcaps</td><td>a set of bitor'ed <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">GeodesicLine::mask</a> values. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object has all these capabilities. </dd></dl>
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00586">586</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="a088c26ef9558197029bbeb317f3104c0"></a><!-- doxytag: member="GeographicLib::GeodesicLine::Geodesic" ref="a088c26ef9558197029bbeb317f3104c0" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GeodesicLine_8hpp_source.html#l00062">62</a> of file <a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="GeodesicLine_8hpp_source.html">GeodesicLine.hpp</a></li>
-<li><a class="el" href="GeodesicLine_8cpp_source.html">GeodesicLine.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GeographicErr-members.html b/doc/html/classGeographicLib_1_1GeographicErr-members.html
deleted file mode 100644
index 1a93f94..0000000
--- a/doc/html/classGeographicLib_1_1GeographicErr-members.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GeographicErr.html">GeographicErr</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::GeographicErr Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1GeographicErr.html">GeographicLib::GeographicErr</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GeographicErr.html#ae0f338af58f073657b012c8a9a64b006">GeographicErr</a>(const std::string &msg)</td><td><a class="el" href="classGeographicLib_1_1GeographicErr.html">GeographicLib::GeographicErr</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GeographicErr.html b/doc/html/classGeographicLib_1_1GeographicErr.html
deleted file mode 100644
index cf7b6b7..0000000
--- a/doc/html/classGeographicLib_1_1GeographicErr.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::GeographicErr Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GeographicErr.html">GeographicErr</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::GeographicErr Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::GeographicErr" -->
-<p>Exception handling for GeographicLib.  
- <a href="classGeographicLib_1_1GeographicErr.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="Constants_8hpp_source.html">GeographicLib/Constants.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1GeographicErr-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeographicErr.html#ae0f338af58f073657b012c8a9a64b006">GeographicErr</a> (const std::string &msg)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Exception handling for GeographicLib. </p>
-<p>A class to handle exceptions. It's derived from std::runtime_error so it can be caught by the usual catch clauses.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::GeographicErr class</span>
-<span class="comment">// $Id: aaa4cf5e9b5070f9a6307a59daabf578880b85d3 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="keywordflow">throw</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html#ae0f338af58f073657b012c8a9a64b006">GeographicErr</a>(<span class="stringliteral">"Test throwing an exception"</span>);
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicErr</a>& e) {
-    cout << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="ae0f338af58f073657b012c8a9a64b006"></a><!-- doxytag: member="GeographicLib::GeographicErr::GeographicErr" ref="ae0f338af58f073657b012c8a9a64b006" args="(const std::string &msg)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::GeographicErr::GeographicErr </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>msg</em></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>a string message, which is accessible in the catch clause, via what(). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Constants_8hpp_source.html#l00323">323</a> of file <a class="el" href="Constants_8hpp_source.html">Constants.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="Constants_8hpp_source.html">Constants.hpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Geoid-members.html b/doc/html/classGeographicLib_1_1Geoid-members.html
deleted file mode 100644
index 7282d20..0000000
--- a/doc/html/classGeographicLib_1_1Geoid-members.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Geoid.html">Geoid</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::Geoid Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#ade5715c0d1428a409383b1acd2cbe9be">Cache</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">CacheAll</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a52b5dc2d976796046aaeb8765e4a9c0f">CacheArea</a>(real south, real west, real north, real east) const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#ad948f48545c9c40f1705f2892887cdab">CacheClear</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#acb34cfbcfb8be2794b16a3d18209dbbe">CacheEast</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a26742332938bb8f22be23c979ffb02a1">CacheNorth</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#aa3db8f9639eb231539376e4617a3d59e">CacheSouth</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#aa0d2e119f089ee4182987ddd3faaf62a">CacheWest</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">convertflag</a> enum name</td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#adf98d0f0d881893a4f5ff711a3be0e04">ConvertHeight</a>(real lat, real lon, real h, convertflag d) const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a9cd7304b5df37001f4ad3c91cdbc56f4">DateTime</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a048865342b2b12ed2272e547209381fd">DefaultGeoidName</a>()</td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">DefaultGeoidPath</a>()</td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a37d76bcfe0ddf9b84042d701c312e941">Description</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a4a1db06e9dcfa1ebb345c616151ab70d">ELLIPSOIDTOGEOID</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#abd2076cab3455b816e9477cdb410b187">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#ac3556c755dad0d43c3be0913df08b395">Geoid</a>(const std::string &name, const std::string &path="", bool cubic=true, bool threadsafe=false)</td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a83b17b17045c49984bcdd032e637155e">GeoidDirectory</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a07e5f704f2684ce5acf824b7e0b17d30">GeoidFile</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#aa244668a189e35ce5ff248fb8fa2e57b">GeoidName</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473">GEOIDTOELLIPSOID</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a0ddfefaef196023486fc7642af45cf96">Interpolation</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#aada99465d9ddfc1b34ccf2ef3d86dbd7">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#aff538da14578a02c551b411a899e567a">MaxError</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a677322ba74ea5494e67478c3dc1780d5">NONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#ac798950a643e4286aa8d3bb8cd9b0815">Offset</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#accb63bfbbadae10af79b3a3028a3045a">operator()</a>(real lat, real lon) const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a3bb5740c3a38a77caeb5eabd54c77cbc">operator()</a>(real lat, real lon, real &gradn, real &grade) const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a207f98316d20a5b9d47846e559c5e2a2">RMSError</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#ab2346300c12ff7e70d35e08479ecede1">Scale</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Geoid.html#a286e947c13592f21e45cbdd404b283c7">ThreadSafe</a>() const </td><td><a class="el" href="classGeographicLib_1_1Geoid.html">GeographicLib::Geoid</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Geoid.html b/doc/html/classGeographicLib_1_1Geoid.html
deleted file mode 100644
index c47c5b0..0000000
--- a/doc/html/classGeographicLib_1_1Geoid.html
+++ /dev/null
@@ -1,923 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::Geoid Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Geoid.html">Geoid</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::Geoid Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::Geoid" -->
-<p>Looking up the height of the geoid.  
- <a href="classGeographicLib_1_1Geoid.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="Geoid_8hpp_source.html">GeographicLib/Geoid.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1Geoid-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">convertflag</a> { <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a4a1db06e9dcfa1ebb345c616151ab70d">ELLIPSOIDTOGEOID</a> =  -1, 
-<a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a677322ba74ea5494e67478c3dc1780d5">NONE</a> =  0, 
-<a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473">GEOIDTOELLIPSOID</a> =  1
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td colspan="2"><div class="groupHeader">Setting up the geoid</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#ac3556c755dad0d43c3be0913df08b395">Geoid</a> (const std::string &name, const std::string &path="", bool cubic=true, bool threadsafe=false)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a52b5dc2d976796046aaeb8765e4a9c0f">CacheArea</a> (real south, real west, real north, real east) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">CacheAll</a> () const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#ad948f48545c9c40f1705f2892887cdab">CacheClear</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Compute geoid heights</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#accb63bfbbadae10af79b3a3028a3045a">operator()</a> (real lat, real lon) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a3bb5740c3a38a77caeb5eabd54c77cbc">operator()</a> (real lat, real lon, real &gradn, real &grade) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#adf98d0f0d881893a4f5ff711a3be0e04">ConvertHeight</a> (real lat, real lon, real h, <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">convertflag</a> d) const </td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a37d76bcfe0ddf9b84042d701c312e941">Description</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a9cd7304b5df37001f4ad3c91cdbc56f4">DateTime</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a07e5f704f2684ce5acf824b7e0b17d30">GeoidFile</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#aa244668a189e35ce5ff248fb8fa2e57b">GeoidName</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a83b17b17045c49984bcdd032e637155e">GeoidDirectory</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a0ddfefaef196023486fc7642af45cf96">Interpolation</a> () const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#aff538da14578a02c551b411a899e567a">MaxError</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a207f98316d20a5b9d47846e559c5e2a2">RMSError</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#ac798950a643e4286aa8d3bb8cd9b0815">Offset</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#ab2346300c12ff7e70d35e08479ecede1">Scale</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a286e947c13592f21e45cbdd404b283c7">ThreadSafe</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#ade5715c0d1428a409383b1acd2cbe9be">Cache</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#aa0d2e119f089ee4182987ddd3faaf62a">CacheWest</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#acb34cfbcfb8be2794b16a3d18209dbbe">CacheEast</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a26742332938bb8f22be23c979ffb02a1">CacheNorth</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#aa3db8f9639eb231539376e4617a3d59e">CacheSouth</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#aada99465d9ddfc1b34ccf2ef3d86dbd7">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#abd2076cab3455b816e9477cdb410b187">Flattening</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">DefaultGeoidPath</a> ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html#a048865342b2b12ed2272e547209381fd">DefaultGeoidName</a> ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Looking up the height of the geoid. </p>
-<p>This class evaluated the height of one of the standard geoids, EGM84, EGM96, or EGM2008 by bilinear or cubic interpolation into a rectangular grid of data. These geoid models are documented in</p>
-<ul>
-<li>EGM84: <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html</a></li>
-<li>EGM96: <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html</a></li>
-<li>EGM2008: <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008</a></li>
-</ul>
-<p>The geoids are defined in terms of spherical harmonics. However in order to provide a quick and flexible method of evaluating the geoid heights, this class evaluates the height by interpolation into a grid of precomputed values.</p>
-<p>See <a class="el" href="geoid.html">Geoid height</a> for details of how to install the data sets, the data format, estimates of the interpolation errors, and how to use caching.</p>
-<p>In addition to returning the geoid height, the gradient of the geoid can be calculated. The gradient is defined as the rate of change of the geoid as a function of position on the ellipsoid. This uses the parameters for the WGS84 ellipsoid. The gradient defined in terms of the interpolated heights. As a result of the way that the geoid data is stored, the calculation of gradients can result in large quantization errors. This is particularly acute for fine grids, at high latitudes, and [...]
-<p>This class is typically <em>not</em> thread safe in that a single instantiation cannot be safely used by multiple threads because of the way the object reads the data set and because it maintains a single-cell cache. If multiple threads need to calculate geoid heights they should all construct thread-local instantiations. Alternatively, set the optional <em>threadsafe</em> parameter to true in the constructor. This causes the constructor to read all the data into memory and to turn of [...]
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::Geoid class</span>
-<span class="comment">// $Id: 2ba4534ebb4c4853dc111932fe44b4bf85ac8149 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="Geoid_8hpp.html" title="Header for GeographicLib::Geoid class.">GeographicLib/Geoid.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a> egm96(<span class="stringliteral">"egm96-5"</span>);
-    <span class="comment">// Convert height above egm96 to height above the ellipsoid</span>
-    <span class="keywordtype">double</span> lat = 42, lon = -75, height_above_geoid = 20;
-    <span class="keywordtype">double</span>
-      geoid_height = egm96(lat, lon),
-      height_above_ellipsoid = (height_above_geoid +
-                                <a class="code" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a><a class="code" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473">::GEOIDTOELLIPSOID</a> * geoid_height);
-    cout << height_above_ellipsoid << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="GeoidEval.1.html">GeoidEval</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a>. </p>
-</div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="a58ddbd0fd48c25b361f45bdb70dadb96"></a><!-- doxytag: member="GeographicLib::Geoid::convertflag" ref="a58ddbd0fd48c25b361f45bdb70dadb96" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">GeographicLib::Geoid::convertflag</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Flags indicating conversions between heights above the geoid and heights above the ellipsoid. </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="a58ddbd0fd48c25b361f45bdb70dadb96a4a1db06e9dcfa1ebb345c616151ab70d"></a><!-- doxytag: member="ELLIPSOIDTOGEOID" ref="a58ddbd0fd48c25b361f45bdb70dadb96a4a1db06e9dcfa1ebb345c616151ab70d" args="" -->ELLIPSOIDTOGEOID</em> </td><td>
-<p>The multiplier for converting from heights above the geoid to heights above the ellipsoid. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a58ddbd0fd48c25b361f45bdb70dadb96a677322ba74ea5494e67478c3dc1780d5"></a><!-- doxytag: member="NONE" ref="a58ddbd0fd48c25b361f45bdb70dadb96a677322ba74ea5494e67478c3dc1780d5" args="" -->NONE</em> </td><td>
-<p>No conversion. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473"></a><!-- doxytag: member="GEOIDTOELLIPSOID" ref="a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473" args="" -->GEOIDTOELLIPSOID</em> </td><td>
-<p>The multiplier for converting from heights above the ellipsoid to heights above the geoid. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00185">185</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="ac3556c755dad0d43c3be0913df08b395"></a><!-- doxytag: member="GeographicLib::Geoid::Geoid" ref="ac3556c755dad0d43c3be0913df08b395" args="(const std::string &name, const std::string &path="", bool cubic=true, bool threadsafe=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::Geoid::Geoid </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>name</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>path</em> = <code>""</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>cubic</em> = <code>true</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>threadsafe</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Construct a geoid.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">name</td><td>the name of the geoid. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">path</td><td>(optional) directory for data file. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">cubic</td><td>(optional) interpolation method; false means bilinear, true (the default) means cubic. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">threadsafe</td><td>(optional), if true, construct a thread safe object. The default is false</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The data file is formed by appending ".pgm" to the name. If <em>path</em> is specified (and is non-empty), then the file is loaded from directory, <em>path</em>. Otherwise the path is given by <a class="el" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">DefaultGeoidPath()</a>. This may throw an exception because the file does not exist, is unreadable, or is corrupt. If the <em>threadsafe</em> parameter is true, the data set is read into memory (which this ma [...]
-
-<p>Definition at line <a class="el" href="Geoid_8cpp_source.html#l00208">208</a> of file <a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a>.</p>
-
-<p>References <a class="el" href="Constants_8hpp_source.html#l00025">STATIC_ASSERT</a>, <a class="el" href="Geoid_8cpp_source.html#l00529">DefaultGeoidPath()</a>, and <a class="el" href="Geoid_8hpp_source.html#l00258">CacheAll()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a52b5dc2d976796046aaeb8765e4a9c0f"></a><!-- doxytag: member="GeographicLib::Geoid::CacheArea" ref="a52b5dc2d976796046aaeb8765e4a9c0f" args="(real south, real west, real north, real east) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geoid::CacheArea </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>south</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>west</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>north</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>east</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set up a cache.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">south</td><td>latitude (degrees) of the south edge of the cached area. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">west</td><td>longitude (degrees) of the west edge of the cached area. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">north</td><td>latitude (degrees) of the north edge of the cached area. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">east</td><td>longitude (degrees) of the east edge of the cached area.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Cache the data for the specified "rectangular" area bounded by the parallels <em>south</em> and <em>north</em> and the meridians <em>west</em> and <em>east</em>. <em>east</em> is always interpreted as being east of <em>west</em>, if necessary by adding 360<sup>o</sup> to its value. This may throw an error because of insufficient memory or because of an error reading the data from the file. In this case, you can catch the error and either do nothing (you will have no cache in this case [...]
-
-<p>Definition at line <a class="el" href="Geoid_8cpp_source.html#l00448">448</a> of file <a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a>.</p>
-
-<p>References <a class="el" href="Geoid_8cpp_source.html#l00435">CacheClear()</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a482c6482d5ab4c5d661210327848170e"></a><!-- doxytag: member="GeographicLib::Geoid::CacheAll" ref="a482c6482d5ab4c5d661210327848170e" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geoid::CacheAll </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Cache all the data. On most computers, this is fast for data sets with grid resolution of 5' or coarser. For a 1' grid, the required RAM is 450MB; a 2.5' grid needs 72MB; and a 5' grid needs 18MB. This may throw an error because of insufficient memory or because of an error reading the data from the file. In this case, you can catch the error and either do nothing (you will have no cache in this case) or try using <a class="el" href="classGeographicLib_1_1Geoid.html#a52b5dc2d976796046 [...]
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00258">258</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geoid_8cpp_source.html#l00208">Geoid()</a>, and <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad948f48545c9c40f1705f2892887cdab"></a><!-- doxytag: member="GeographicLib::Geoid::CacheClear" ref="ad948f48545c9c40f1705f2892887cdab" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Geoid::CacheClear </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Clear the cache. This never throws an error. (This does nothing with a thread safe <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a>.) </p>
-
-<p>Definition at line <a class="el" href="Geoid_8cpp_source.html#l00435">435</a> of file <a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Geoid_8cpp_source.html#l00448">CacheArea()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="accb63bfbbadae10af79b3a3028a3045a"></a><!-- doxytag: member="GeographicLib::Geoid::operator()" ref="accb63bfbbadae10af79b3a3028a3045a" args="(real lat, real lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the geoid height at a point</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of the point (degrees). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>geoid height (meters).</dd></dl>
-<p>The latitude should be in [-90, 90] and longitude should be in [-180,360]. This may throw an error because of an error reading data from disk. However, it will not throw if (<em>lat</em>, <em>lon</em>) is within a successfully cached area. </p>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00284">284</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3bb5740c3a38a77caeb5eabd54c77cbc"></a><!-- doxytag: member="GeographicLib::Geoid::operator()" ref="a3bb5740c3a38a77caeb5eabd54c77cbc" args="(real lat, real lon, real &gradn, real &grade) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradn</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>grade</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the geoid height and gradient at a point</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradn</td><td>northerly gradient (dimensionless). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">grade</td><td>easterly gradient (dimensionless). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>geoid height (meters).</dd></dl>
-<p>The latitude should be in [-90, 90] and longitude should be in [-180, 360]. This may throw an error because of an error reading data from disk. However, it will not throw if (<em>lat</em>, <em>lon</em>) is within a successfully cached area. As a result of the way that the geoid data is stored, the calculation of gradients can result in large quantization errors. This is particularly acute for fine grids, at high latitudes, and for the easterly gradient. If you need to compute the dire [...]
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00308">308</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adf98d0f0d881893a4f5ff711a3be0e04"></a><!-- doxytag: member="GeographicLib::Geoid::ConvertHeight" ref="adf98d0f0d881893a4f5ff711a3be0e04" args="(real lat, real lon, real h, convertflag d) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::ConvertHeight </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">convertflag</a> </td>
-          <td class="paramname"><em>d</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a height above the geoid to a height above the ellipsoid and vice versa.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>height of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">d</td><td>a <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">Geoid::convertflag</a> specifying the direction of the conversion; <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473">Geoid::GEOIDTOELLIPSOID</a> means convert a height above the geoid to a height above the ellipsoid; <a class="el" href="classGeographicLib_1_1Ge [...]
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>converted height (meters). </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00325">325</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a37d76bcfe0ddf9b84042d701c312e941"></a><!-- doxytag: member="GeographicLib::Geoid::Description" ref="a37d76bcfe0ddf9b84042d701c312e941" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::Geoid::Description </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>geoid description, if available, in the data file; if absent, return "NONE". </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00340">340</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9cd7304b5df37001f4ad3c91cdbc56f4"></a><!-- doxytag: member="GeographicLib::Geoid::DateTime" ref="a9cd7304b5df37001f4ad3c91cdbc56f4" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::Geoid::DateTime </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>date of the data file; if absent, return "UNKNOWN". </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00345">345</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a07e5f704f2684ce5acf824b7e0b17d30"></a><!-- doxytag: member="GeographicLib::Geoid::GeoidFile" ref="a07e5f704f2684ce5acf824b7e0b17d30" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::Geoid::GeoidFile </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>full file name used to load the geoid data. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00350">350</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa244668a189e35ce5ff248fb8fa2e57b"></a><!-- doxytag: member="GeographicLib::Geoid::GeoidName" ref="aa244668a189e35ce5ff248fb8fa2e57b" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::Geoid::GeoidName </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>"name" used to load the geoid data (from the first argument of the constructor). </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00356">356</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a83b17b17045c49984bcdd032e637155e"></a><!-- doxytag: member="GeographicLib::Geoid::GeoidDirectory" ref="a83b17b17045c49984bcdd032e637155e" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::Geoid::GeoidDirectory </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>directory used to load the geoid data. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00361">361</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0ddfefaef196023486fc7642af45cf96"></a><!-- doxytag: member="GeographicLib::Geoid::Interpolation" ref="a0ddfefaef196023486fc7642af45cf96" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string GeographicLib::Geoid::Interpolation </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>interpolation method ("cubic" or "bilinear"). </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00366">366</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aff538da14578a02c551b411a899e567a"></a><!-- doxytag: member="GeographicLib::Geoid::MaxError" ref="aff538da14578a02c551b411a899e567a" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::MaxError </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>estimate of the maximum interpolation and quantization error (meters).</dd></dl>
-<p>This relies on the value being stored in the data file. If the value is absent, return -1. </p>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00376">376</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a207f98316d20a5b9d47846e559c5e2a2"></a><!-- doxytag: member="GeographicLib::Geoid::RMSError" ref="a207f98316d20a5b9d47846e559c5e2a2" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::RMSError </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>estimate of the RMS interpolation and quantization error (meters).</dd></dl>
-<p>This relies on the value being stored in the data file. If the value is absent, return -1. </p>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00385">385</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac798950a643e4286aa8d3bb8cd9b0815"></a><!-- doxytag: member="GeographicLib::Geoid::Offset" ref="ac798950a643e4286aa8d3bb8cd9b0815" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::Offset </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>offset (meters).</dd></dl>
-<p>This in used in converting from the pixel values in the data file to geoid heights. </p>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00393">393</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab2346300c12ff7e70d35e08479ecede1"></a><!-- doxytag: member="GeographicLib::Geoid::Scale" ref="ab2346300c12ff7e70d35e08479ecede1" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::Scale </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>scale (meters).</dd></dl>
-<p>This in used in converting from the pixel values in the data file to geoid heights. </p>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00401">401</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a286e947c13592f21e45cbdd404b283c7"></a><!-- doxytag: member="GeographicLib::Geoid::ThreadSafe" ref="a286e947c13592f21e45cbdd404b283c7" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Geoid::ThreadSafe </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if the object is constructed to be thread safe. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00406">406</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ade5715c0d1428a409383b1acd2cbe9be"></a><!-- doxytag: member="GeographicLib::Geoid::Cache" ref="ade5715c0d1428a409383b1acd2cbe9be" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Geoid::Cache </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if a data cache is active. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00411">411</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa0d2e119f089ee4182987ddd3faaf62a"></a><!-- doxytag: member="GeographicLib::Geoid::CacheWest" ref="aa0d2e119f089ee4182987ddd3faaf62a" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::CacheWest </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>west edge of the cached area; the cache includes this edge. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00416">416</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acb34cfbcfb8be2794b16a3d18209dbbe"></a><!-- doxytag: member="GeographicLib::Geoid::CacheEast" ref="acb34cfbcfb8be2794b16a3d18209dbbe" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::CacheEast </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>east edge of the cached area; the cache excludes this edge. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00425">425</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a26742332938bb8f22be23c979ffb02a1"></a><!-- doxytag: member="GeographicLib::Geoid::CacheNorth" ref="a26742332938bb8f22be23c979ffb02a1" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::CacheNorth </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>north edge of the cached area; the cache includes this edge. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00435">435</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa3db8f9639eb231539376e4617a3d59e"></a><!-- doxytag: member="GeographicLib::Geoid::CacheSouth" ref="aa3db8f9639eb231539376e4617a3d59e" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::CacheSouth </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>south edge of the cached area; the cache excludes this edge unless it's the south pole. </dd></dl>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00443">443</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aada99465d9ddfc1b34ccf2ef3d86dbd7"></a><!-- doxytag: member="GeographicLib::Geoid::MajorRadius" ref="aada99465d9ddfc1b34ccf2ef3d86dbd7" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the WGS84 ellipsoid (meters).</dd></dl>
-<p>(The WGS84 value is returned because the supported geoid models are all based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00453">453</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="abd2076cab3455b816e9477cdb410b187"></a><!-- doxytag: member="GeographicLib::Geoid::Flattening" ref="abd2076cab3455b816e9477cdb410b187" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Geoid::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the WGS84 ellipsoid.</dd></dl>
-<p>(The WGS84 value is returned because the supported geoid models are all based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="Geoid_8hpp_source.html#l00462">462</a> of file <a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2daf81f5c648cf190a83981f441ab08f"></a><!-- doxytag: member="GeographicLib::Geoid::DefaultGeoidPath" ref="a2daf81f5c648cf190a83981f441ab08f" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string GeographicLib::Geoid::DefaultGeoidPath </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the default path for geoid data files.</dd></dl>
-<p>This is the value of the environment variable GEOID_PATH, if set; otherwise, it is $GEOGRAPHICLIB_DATA/geoids if the environment variable GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default (/usr/local/share/GeographicLib/geoids on non-Windows systems and C:/Documents and Settings/All Users/Application Data/GeographicLib/geoids on Windows systems). </p>
-
-<p>Definition at line <a class="el" href="Geoid_8cpp_source.html#l00529">529</a> of file <a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a>.</p>
-
-<p>References <a class="el" href="Geoid_8cpp_source.html#l00027">GEOGRAPHICLIB_DATA</a>.</p>
-
-<p>Referenced by <a class="el" href="Geoid_8cpp_source.html#l00208">Geoid()</a>, and <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a048865342b2b12ed2272e547209381fd"></a><!-- doxytag: member="GeographicLib::Geoid::DefaultGeoidName" ref="a048865342b2b12ed2272e547209381fd" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string GeographicLib::Geoid::DefaultGeoidName </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the default name for the geoid.</dd></dl>
-<p>This is the value of the environment variable GEOID_NAME, if set, otherwise, it is "egm96-5". The <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a> class does not use this function; it is just provided as a convenience for a calling program when constructing a <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">Geoid</a> object. </p>
-
-<p>Definition at line <a class="el" href="Geoid_8cpp_source.html#l00542">542</a> of file <a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a>.</p>
-
-<p>References <a class="el" href="Geoid_8cpp_source.html#l00032">GEOID_DEFAULT_NAME</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="Geoid_8hpp_source.html">Geoid.hpp</a></li>
-<li><a class="el" href="Geoid_8cpp_source.html">Geoid.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Gnomonic-members.html b/doc/html/classGeographicLib_1_1Gnomonic-members.html
deleted file mode 100644
index 280fc44..0000000
--- a/doc/html/classGeographicLib_1_1Gnomonic-members.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Gnomonic.html">Gnomonic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::Gnomonic Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Gnomonic.html#a06b559fa72aa1e51da966c43d22b983d">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Gnomonic.html#ab851ea19db5671f8d4a4151820bc6853">Forward</a>(real lat0, real lon0, real lat, real lon, real &x, real &y, real &azi, real &rk) const </td><td><a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Gnomonic.html#a2c08cf2bad190ee9ab88f7d877223208">Forward</a>(real lat0, real lon0, real lat, real lon, real &x, real &y) const </td><td><a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Gnomonic.html#a2ac973ebbd7aaf18c451b152cd92db99">Gnomonic</a>(const Geodesic &earth=Geodesic::WGS84)</td><td><a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Gnomonic.html#a8598fe6d8c3896fa3fd58d24023f78ee">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Gnomonic.html#afccbed660a482ef73d33ad16406ee626">Reverse</a>(real lat0, real lon0, real x, real y, real &lat, real &lon, real &azi, real &rk) const </td><td><a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Gnomonic.html#a8700d59a1e244f8dd211e344587dfed3">Reverse</a>(real lat0, real lon0, real x, real y, real &lat, real &lon) const </td><td><a class="el" href="classGeographicLib_1_1Gnomonic.html">GeographicLib::Gnomonic</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Gnomonic.html b/doc/html/classGeographicLib_1_1Gnomonic.html
deleted file mode 100644
index 203df62..0000000
--- a/doc/html/classGeographicLib_1_1Gnomonic.html
+++ /dev/null
@@ -1,507 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::Gnomonic Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Gnomonic.html">Gnomonic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::Gnomonic Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::Gnomonic" -->
-<p>Gnomonic Projection.  
- <a href="classGeographicLib_1_1Gnomonic.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="Gnomonic_8hpp_source.html">GeographicLib/Gnomonic.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1Gnomonic-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Gnomonic.html#a2ac973ebbd7aaf18c451b152cd92db99">Gnomonic</a> (const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> &earth=<a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Gnomonic.html#ab851ea19db5671f8d4a4151820bc6853">Forward</a> (real lat0, real lon0, real lat, real lon, real &x, real &y, real &azi, real &rk) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Gnomonic.html#afccbed660a482ef73d33ad16406ee626">Reverse</a> (real lat0, real lon0, real x, real y, real &lat, real &lon, real &azi, real &rk) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Gnomonic.html#a2c08cf2bad190ee9ab88f7d877223208">Forward</a> (real lat0, real lon0, real lat, real lon, real &x, real &y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Gnomonic.html#a8700d59a1e244f8dd211e344587dfed3">Reverse</a> (real lat0, real lon0, real x, real y, real &lat, real &lon) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Gnomonic.html#a8598fe6d8c3896fa3fd58d24023f78ee">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Gnomonic.html#a06b559fa72aa1e51da966c43d22b983d">Flattening</a> () const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Gnomonic Projection. </p>
-<p>Gnomonic projection centered at an arbitrary position <em>C</em> on the ellipsoid. This projection is derived in Section 13 of</p>
-<ul>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1102.1215v1">Geodesics on an ellipsoid of revolution</a>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.</li>
-</ul>
-<p>See also Section 8 of</p>
-<ul>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>, Sept. 2011; preprint <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.</li>
-</ul>
-<p>The projection of <em>P</em> is defined as follows: compute the geodesic line from <em>C</em> to <em>P</em>; compute the reduced length <em>m12</em>, geodesic scale <em>M12</em>, and <em>rho</em> = <em>m12</em>/<em>M12</em>; finally <em>x</em> = <em>rho</em> sin <em>azi1</em>; <em>y</em> = <em>rho</em> cos <em>azi1</em>, where <em>azi1</em> is the azimuth of the geodesic at <em>C</em>. The <a class="el" href="classGeographicLib_1_1Gnomonic.html#ab851ea19db5671f8d4a4151820bc6853">Gnomo [...]
-<p>For a sphere, <em>rho</em> is reduces to <em>a</em> tan(<em>s12</em>/<em>a</em>), where <em>s12</em> is the length of the geodesic from <em>C</em> to <em>P</em>, and the gnomonic projection has the property that all geodesics appear as straight lines. For an ellipsoid, this property holds only for geodesics interesting the centers. However geodesic segments close to the center are approximately straight.</p>
-<p>Consider a geodesic segment of length <em>l</em>. Let <em>T</em> be the point on the geodesic (extended if necessary) closest to <em>C</em> the center of the projection and <em>t</em> be the distance <em>CT</em>. To lowest order, the maximum deviation (as a true distance) of the corresponding gnomonic line segment (i.e., with the same end points) from the geodesic is<br/>
- <br/>
- (<em>K</em>(<em>T</em>) - <em>K</em>(<em>C</em>)) <em>l</em><sup>2</sup> <em>t</em> / 32.<br/>
- <br/>
- where <em>K</em> is the Gaussian curvature.</p>
-<p>This result applies for any surface. For an ellipsoid of revolution, consider all geodesics whose end points are within a distance <em>r</em> of <em>C</em>. For a given <em>r</em>, the deviation is maximum when the latitude of <em>C</em> is 45<sup>o</sup>, when endpoints are a distance <em>r</em> away, and when their azimuths from the center are +/- 45<sup>o</sup> or +/- 135<sup>o</sup>. To lowest order in <em>r</em> and the flattening <em>f</em>, the deviation is <em>f</em> (<em>r</e [...]
-<p>The conversions all take place using a <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object (by default <a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a>). For more information on geodesics see <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>.</p>
-<p><b>CAUTION:</b> The definition of this projection for a sphere is standard. However, there is no standard for how it should be extended to an ellipsoid. The choices are:</p>
-<ul>
-<li>Declare that the projection is undefined for an ellipsoid.</li>
-<li>Project to a tangent plane from the center of the ellipsoid. This causes great ellipses to appear as straight lines in the projection; i.e., it generalizes the spherical great circle to a great ellipse. This was proposed by independently by Bowring and Williams in 1997.</li>
-<li>Project to the conformal sphere with the constant of integration chosen so that the values of the latitude match for the center point and perform a central projection onto the plane tangent to the conformal sphere at the center point. This causes normal sections through the center point to appear as straight lines in the projection; i.e., it generalizes the spherical great circle to a normal section. This was proposed by I. G. Letoval'tsev, Generalization of the Gnomonic Projection f [...]
-<li>The projection given here. This causes geodesics close to the center point to appear as straight lines in the projection; i.e., it generalizes the spherical great circle to a geodesic.</li>
-</ul>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::Gnomonic class</span>
-<span class="comment">// $Id: 59ed16349fd55bdde98654feeb1225a046d85696 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="Gnomonic_8hpp.html" title="Header for GeographicLib::Gnomonic class.">GeographicLib/Gnomonic.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> geod(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>());
-    <span class="comment">// Alternatively: const Geodesic& geod = Geodesic::WGS84;</span>
-    <span class="keyword">const</span> <span class="keywordtype">double</span> lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; <span class="comment">// Paris</span>
-    <a class="code" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">Gnomonic</a> proj(geod);
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 50.9, lon = 1.8; <span class="comment">// Calais</span>
-      <span class="keywordtype">double</span> x, y;
-      proj.Forward(lat0, lon0, lat, lon, x, y);
-      cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">double</span> x = -38e3, y = 230e3;
-      <span class="keywordtype">double</span> lat, lon;
-      proj.Reverse(lat0, lon0, x, y, lat, lon);
-      cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="GeodesicProj.1.html">GeodesicProj</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">AzimuthalEquidistant</a>, <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">Gnomonic</a>, and <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">CassiniSoldner</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a2ac973ebbd7aaf18c451b152cd92db99"></a><!-- doxytag: member="GeographicLib::Gnomonic::Gnomonic" ref="a2ac973ebbd7aaf18c451b152cd92db99" args="(const Geodesic &earth=Geodesic::WGS84)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::Gnomonic::Gnomonic </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> & </td>
-          <td class="paramname"><em>earth</em> = <code><a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">Geodesic::WGS84</a></code></td><td>)</td>
-          <td>  throw ()<code> [inline, explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">Gnomonic</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">earth</td><td>the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object to use for geodesic calculations. By default this uses the WGS84 ellipsoid. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Gnomonic_8hpp_source.html#l00123">123</a> of file <a class="el" href="Gnomonic_8hpp_source.html">Gnomonic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="ab851ea19db5671f8d4a4151820bc6853"></a><!-- doxytag: member="GeographicLib::Gnomonic::Forward" ref="ab851ea19db5671f8d4a4151820bc6853" args="(real lat0, real lon0, real lat, real lon, real &x, real &y, real &azi, real &rk) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Gnomonic::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>rk</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to gnomonic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat0</td><td>latitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>longitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi</td><td>azimuth of geodesic at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">rk</td><td>reciprocal of azimuthal scale at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat0</em> and <em>lat</em> should be in the range [-90, 90] and <em>lon0</em> and <em>lon</em> should be in the range [-180, 360]. The scale of the projection is 1/<em>rk</em><sup>2</sup> in the "radial" direction, <em>azi</em> clockwise from true north, and is 1/<em>rk</em> in the direction perpendicular to this. If the point lies "over the horizon", i.e., if <em>rk</em> <= 0, then NaNs are returned for <em>x</em> and <em>y</em> (the correct values are returned for <em>azi</em [...]
-
-<p>Definition at line <a class="el" href="Gnomonic_8cpp_source.html#l00025">25</a> of file <a class="el" href="Gnomonic_8cpp_source.html">Gnomonic.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeodesicProj_8cpp_source.html#l00037">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afccbed660a482ef73d33ad16406ee626"></a><!-- doxytag: member="GeographicLib::Gnomonic::Reverse" ref="afccbed660a482ef73d33ad16406ee626" args="(real lat0, real lon0, real x, real y, real &lat, real &lon, real &azi, real &rk) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Gnomonic::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>azi</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>rk</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from gnomonic to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat0</td><td>latitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>longitude of center point of projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">azi</td><td>azimuth of geodesic at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">rk</td><td>reciprocal of azimuthal scale at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat0</em> should be in the range [-90, 90] and <em>lon0</em> should be in the range [-180, 360]. <em>lat</em> will be in the range [-90, 90] and <em>lon</em> will be in the range [-180, 180). The scale of the projection is 1/<em>rk<sup>2</sup></em> in the "radial" direction, <em>azi</em> clockwise from true north, and is 1/<em>rk</em> in the direction perpendicular to this. Even though all inputs should return a valid <em>lat</em> and <em>lon</em>, it's possible that the procedure [...]
-
-<p>Definition at line <a class="el" href="Gnomonic_8cpp_source.html#l00044">44</a> of file <a class="el" href="Gnomonic_8cpp_source.html">Gnomonic.cpp</a>.</p>
-
-<p>References <a class="el" href="GeodesicLine_8hpp_source.html#l00252">GeographicLib::GeodesicLine::Position()</a>.</p>
-
-<p>Referenced by <a class="el" href="GeodesicProj_8cpp_source.html#l00037">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2c08cf2bad190ee9ab88f7d877223208"></a><!-- doxytag: member="GeographicLib::Gnomonic::Forward" ref="a2c08cf2bad190ee9ab88f7d877223208" args="(real lat0, real lon0, real lat, real lon, real &x, real &y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Gnomonic::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1Gnomonic.html#ab851ea19db5671f8d4a4151820bc6853">Gnomonic::Forward</a> without returning the azimuth and scale. </p>
-
-<p>Definition at line <a class="el" href="Gnomonic_8hpp_source.html#l00184">184</a> of file <a class="el" href="Gnomonic_8hpp_source.html">Gnomonic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8700d59a1e244f8dd211e344587dfed3"></a><!-- doxytag: member="GeographicLib::Gnomonic::Reverse" ref="a8700d59a1e244f8dd211e344587dfed3" args="(real lat0, real lon0, real x, real y, real &lat, real &lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::Gnomonic::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1Gnomonic.html#afccbed660a482ef73d33ad16406ee626">Gnomonic::Reverse</a> without returning the azimuth and scale. </p>
-
-<p>Definition at line <a class="el" href="Gnomonic_8hpp_source.html#l00193">193</a> of file <a class="el" href="Gnomonic_8hpp_source.html">Gnomonic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8598fe6d8c3896fa3fd58d24023f78ee"></a><!-- doxytag: member="GeographicLib::Gnomonic::MajorRadius" ref="a8598fe6d8c3896fa3fd58d24023f78ee" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Gnomonic::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="Gnomonic_8hpp_source.html#l00206">206</a> of file <a class="el" href="Gnomonic_8hpp_source.html">Gnomonic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a06b559fa72aa1e51da966c43d22b983d"></a><!-- doxytag: member="GeographicLib::Gnomonic::Flattening" ref="a06b559fa72aa1e51da966c43d22b983d" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::Gnomonic::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="Gnomonic_8hpp_source.html#l00212">212</a> of file <a class="el" href="Gnomonic_8hpp_source.html">Gnomonic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="Gnomonic_8hpp_source.html">Gnomonic.hpp</a></li>
-<li><a class="el" href="Gnomonic_8cpp_source.html">Gnomonic.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GravityCircle-members.html b/doc/html/classGeographicLib_1_1GravityCircle-members.html
deleted file mode 100644
index 755f589..0000000
--- a/doc/html/classGeographicLib_1_1GravityCircle-members.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GravityCircle.html">GravityCircle</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::GravityCircle Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a08ecc2b31ca7d0ddc2d25950a6bc247f">Capabilities</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a2fa608c25be9b8caa087102c4c311768">Capabilities</a>(unsigned testcaps) const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a2c3bde01c9d822b0cdd935314193a466">Disturbance</a>(real lon, real &deltax, real &deltay, real &deltaz) const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#ad9bfc60d802b662ffc1a41566882b743">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d5a577c99cf4649d9286f1b4afacab5">GeoidHeight</a>(real lon) const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d8053ee66ae22217ae0b61e96194b64">Gravity</a>(real lon, real &gx, real &gy, real &gz) const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a4a000e07f0856a130ab11f1b26c933ed">GravityCircle</a>()</td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#ada1db1d9f480d8044753ed869c995519">GravityModel</a> class</td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a026b2b79ff3ae70b4fee5d9c4d1ffb70">Height</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#aee7b6c92dc9264345048a8ad7c230e4c">Init</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a9628e97c53a2532959c5c8af75e1c14b">Latitude</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a19c5d003a9981cb3ece5b44ee836553a">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#ac94672db5e450f4394e6df69eda99e69">SphericalAnomaly</a>(real lon, real &Dg01, real &xi, real &eta) const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#afae12e4bbf17809f1dd6c32b41dfde03">T</a>(real lon, real &deltaX, real &deltaY, real &deltaZ) const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a408d52806d43fe61b53af3ffb306bec5">T</a>(real lon) const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#aba5f3ec3cb7b620e13dafa6fa4e48ae0">V</a>(real lon, real &GX, real &GY, real &GZ) const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityCircle.html#a04ae0659ec2eb766ae360d3bcbe332c4">W</a>(real lon, real &gX, real &gY, real &gZ) const </td><td><a class="el" href="classGeographicLib_1_1GravityCircle.html">GeographicLib::GravityCircle</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GravityCircle.html b/doc/html/classGeographicLib_1_1GravityCircle.html
deleted file mode 100644
index 32ba8a9..0000000
--- a/doc/html/classGeographicLib_1_1GravityCircle.html
+++ /dev/null
@@ -1,710 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::GravityCircle Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GravityCircle.html">GravityCircle</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::GravityCircle Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::GravityCircle" -->
-<p>Gravity on a circle of latitude.  
- <a href="classGeographicLib_1_1GravityCircle.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="GravityCircle_8hpp_source.html">GeographicLib/GravityCircle.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1GravityCircle-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a4a000e07f0856a130ab11f1b26c933ed">GravityCircle</a> ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Compute the gravitational field</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d8053ee66ae22217ae0b61e96194b64">Gravity</a> (real lon, real &gx, real &gy, real &gz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a2c3bde01c9d822b0cdd935314193a466">Disturbance</a> (real lon, real &deltax, real &deltay, real &deltaz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d5a577c99cf4649d9286f1b4afacab5">GeoidHeight</a> (real lon) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#ac94672db5e450f4394e6df69eda99e69">SphericalAnomaly</a> (real lon, real &Dg01, real &xi, real &eta) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a04ae0659ec2eb766ae360d3bcbe332c4">W</a> (real lon, real &gX, real &gY, real &gZ) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#aba5f3ec3cb7b620e13dafa6fa4e48ae0">V</a> (real lon, real &GX, real &GY, real &GZ) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#afae12e4bbf17809f1dd6c32b41dfde03">T</a> (real lon, real &deltaX, real &deltaY, real &deltaZ) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a408d52806d43fe61b53af3ffb306bec5">T</a> (real lon) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#aee7b6c92dc9264345048a8ad7c230e4c">Init</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a19c5d003a9981cb3ece5b44ee836553a">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#ad9bfc60d802b662ffc1a41566882b743">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a9628e97c53a2532959c5c8af75e1c14b">Latitude</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a026b2b79ff3ae70b4fee5d9c4d1ffb70">Height</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a08ecc2b31ca7d0ddc2d25950a6bc247f">Capabilities</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#a2fa608c25be9b8caa087102c4c311768">Capabilities</a> (unsigned testcaps) const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html#ada1db1d9f480d8044753ed869c995519">GravityModel</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Gravity on a circle of latitude. </p>
-<p>Evaluate the earth's gravity field on a circle of constant height and latitude. This uses a CircleEngine to pre-evaluate the inner sum of the spherical harmonic sum, allowing the values of the field at several different longitudes to be evaluated rapidly.</p>
-<p>Use <a class="el" href="classGeographicLib_1_1GravityModel.html#aadafafc09b9b707d47606da1e413d54f">GravityModel::Circle</a> to create a <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> object. (The constructor for this class is private.)</p>
-<p>See <a class="el" href="gravity.html#gravityparallel">Geoid heights on a multi-processor system</a> for an example of using <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> (together with OpenMP) to speed up the computation of geoid heights.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::GravityCircle class</span>
-<span class="comment">// $Id: dc7c895cc248cee01a434ea3df1b31771ffb6ad2 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="GravityModel_8hpp.html" title="Header for GeographicLib::GravityModel class.">GeographicLib/GravityModel.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="GravityCircle_8hpp.html" title="Header for GeographicLib::GravityCircle class.">GeographicLib/GravityCircle.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> grav(<span class="stringliteral">"egm96"</span>);
-    <span class="keywordtype">double</span> lat = 27.99, lon0 = 86.93, h = 8820; <span class="comment">// Mt Everest</span>
-    {
-      <span class="comment">// Slow method of evaluating the values at several points on a circle of</span>
-      <span class="comment">// latitude.</span>
-      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = -5; i <= 5; ++i) {
-        <span class="keywordtype">double</span> lon = lon0 + i * 0.2;
-        <span class="keywordtype">double</span> gx, gy, gz;
-        grav.Gravity(lat, lon, h, gx, gy, gz);
-        cout << lon << <span class="stringliteral">" "</span> << gx << <span class="stringliteral">" "</span> << gy << <span class="stringliteral">" "</span> << gz << <span class="stringliteral">"\n"</span>;
-      }
-    }
-    {
-      <span class="comment">// Fast method of evaluating the values at several points on a circle of</span>
-      <span class="comment">// latitude using GravityCircle.</span>
-      <a class="code" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> circ = grav.Circle(lat, h);
-      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = -5; i <= 5; ++i) {
-        <span class="keywordtype">double</span> lon = lon0 + i * 0.2;
-        <span class="keywordtype">double</span> gx, gy, gz;
-        circ.<a class="code" href="classGeographicLib_1_1GravityCircle.html#a5d8053ee66ae22217ae0b61e96194b64">Gravity</a>(lon, gx, gy, gz);
-        cout << lon << <span class="stringliteral">" "</span> << gx << <span class="stringliteral">" "</span> << gy << <span class="stringliteral">" "</span> << gz << <span class="stringliteral">"\n"</span>;
-      }
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="Gravity.1.html">Gravity</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> and <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a4a000e07f0856a130ab11f1b26c933ed"></a><!-- doxytag: member="GeographicLib::GravityCircle::GravityCircle" ref="a4a000e07f0856a130ab11f1b26c933ed" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::GravityCircle::GravityCircle </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor for the normal gravity. This sets up an uninitialized object which can be later replaced by the <a class="el" href="classGeographicLib_1_1GravityModel.html#aadafafc09b9b707d47606da1e413d54f">GravityModel::Circle</a>. </p>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00107">107</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a5d8053ee66ae22217ae0b61e96194b64"></a><!-- doxytag: member="GeographicLib::GravityCircle::Gravity" ref="a5d8053ee66ae22217ae0b61e96194b64" args="(real lon, real &gx, real &gy, real &gz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::Gravity </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gy</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the gravity.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gx</td><td>the easterly component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gy</td><td>the northerly component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gz</td><td>the upward component of the acceleration (m s<sup>-2</sup>); this is usually negative. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>W</em> the sum of the gravitational and centrifugal potentials.</dd></dl>
-<p>The function includes the effects of the earth's rotation. </p>
-
-<p>Definition at line <a class="el" href="GravityCircle_8cpp_source.html#l00027">27</a> of file <a class="el" href="GravityCircle_8cpp_source.html">GravityCircle.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2c3bde01c9d822b0cdd935314193a466"></a><!-- doxytag: member="GeographicLib::GravityCircle::Disturbance" ref="a2c3bde01c9d822b0cdd935314193a466" args="(real lon, real &deltax, real &deltay, real &deltaz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::Disturbance </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltax</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltay</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltaz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the gravity disturbance vector.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltax</td><td>the easterly component of the disturbance vector (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltay</td><td>the northerly component of the disturbance vector (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltaz</td><td>the upward component of the disturbance vector (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>T</em> the corresponding disturbing potential. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8cpp_source.html#l00037">37</a> of file <a class="el" href="GravityCircle_8cpp_source.html">GravityCircle.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5d5a577c99cf4649d9286f1b4afacab5"></a><!-- doxytag: member="GeographicLib::GravityCircle::GeoidHeight" ref="a5d5a577c99cf4649d9286f1b4afacab5" args="(real lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::GeoidHeight </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em></td><td>)</td>
-          <td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the geoid height.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>N</em> the height of the geoid above the reference ellipsoid (meters).</dd></dl>
-<p>Some approximations are made in computing the geoid height so that the results of the NGA codes are reproduced accurately. Details are given in <a class="el" href="gravity.html#gravitygeoid">Details of the geoid height and anomaly calculations</a>. </p>
-
-<p>Definition at line <a class="el" href="GravityCircle_8cpp_source.html#l00047">47</a> of file <a class="el" href="GravityCircle_8cpp_source.html">GravityCircle.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac94672db5e450f4394e6df69eda99e69"></a><!-- doxytag: member="GeographicLib::GravityCircle::SphericalAnomaly" ref="ac94672db5e450f4394e6df69eda99e69" args="(real lon, real &Dg01, real &xi, real &eta) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GravityCircle::SphericalAnomaly </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Dg01</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>xi</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>eta</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the gravity anomaly vector using the spherical approximation.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Dg01</td><td>the gravity anomaly (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">xi</td><td>the northerly component of the deflection of the vertical (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">eta</td><td>the easterly component of the deflection of the vertical (degrees).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The spherical approximation (see Heiskanen and Moritz, Sec 2-14) is used so that the results of the NGA codes are reproduced accurately. approximations used here. Details are given in <a class="el" href="gravity.html#gravitygeoid">Details of the geoid height and anomaly calculations</a>. </p>
-
-<p>Definition at line <a class="el" href="GravityCircle_8cpp_source.html#l00057">57</a> of file <a class="el" href="GravityCircle_8cpp_source.html">GravityCircle.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a04ae0659ec2eb766ae360d3bcbe332c4"></a><!-- doxytag: member="GeographicLib::GravityCircle::W" ref="a04ae0659ec2eb766ae360d3bcbe332c4" args="(real lon, real &gX, real &gY, real &gZ) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::W </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gZ</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the acceleration due to gravity and the centrifugal acceleration in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gX</td><td>the <em>X</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gY</td><td>the <em>Y</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gZ</td><td>the <em>Z</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>W</em> = <em>V</em> + <em>Phi</em> the sum of the gravitational and centrifugal potentials (m<sup>2</sup> s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00188">188</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aba5f3ec3cb7b620e13dafa6fa4e48ae0"></a><!-- doxytag: member="GeographicLib::GravityCircle::V" ref="aba5f3ec3cb7b620e13dafa6fa4e48ae0" args="(real lon, real &GX, real &GY, real &GZ) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::V </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>GX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>GY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>GZ</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the acceleration due to gravity in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">GX</td><td>the <em>X</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">GY</td><td>the <em>Y</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">GZ</td><td>the <em>Z</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> = <em>W</em> - <em>Phi</em> the gravitational potential (m<sup>2</sup> s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00208">208</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afae12e4bbf17809f1dd6c32b41dfde03"></a><!-- doxytag: member="GeographicLib::GravityCircle::T" ref="afae12e4bbf17809f1dd6c32b41dfde03" args="(real lon, real &deltaX, real &deltaY, real &deltaZ) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::T </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltaX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltaY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltaZ</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the gravity disturbance in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltaX</td><td>the <em>X</em> component of the gravity disturbance (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltaY</td><td>the <em>Y</em> component of the gravity disturbance (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltaZ</td><td>the <em>Z</em> component of the gravity disturbance (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>T</em> = <em>W</em> - <em>U</em> the disturbing potential (also called the anomalous potential) (m<sup>2</sup> s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00229">229</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a408d52806d43fe61b53af3ffb306bec5"></a><!-- doxytag: member="GeographicLib::GravityCircle::T" ref="a408d52806d43fe61b53af3ffb306bec5" args="(real lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::T </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate disturbing potential in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>T</em> = <em>W</em> - <em>U</em> the disturbing potential (also called the anomalous potential) (m<sup>2</sup> s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00243">243</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aee7b6c92dc9264345048a8ad7c230e4c"></a><!-- doxytag: member="GeographicLib::GravityCircle::Init" ref="aee7b6c92dc9264345048a8ad7c230e4c" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::GravityCircle::Init </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if the object has been initialized. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00257">257</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a19c5d003a9981cb3ece5b44ee836553a"></a><!-- doxytag: member="GeographicLib::GravityCircle::MajorRadius" ref="a19c5d003a9981cb3ece5b44ee836553a" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value inherited from the <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00264">264</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad9bfc60d802b662ffc1a41566882b743"></a><!-- doxytag: member="GeographicLib::GravityCircle::Flattening" ref="ad9bfc60d802b662ffc1a41566882b743" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value inherited from the <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00271">271</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9628e97c53a2532959c5c8af75e1c14b"></a><!-- doxytag: member="GeographicLib::GravityCircle::Latitude" ref="a9628e97c53a2532959c5c8af75e1c14b" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::Latitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the latitude of the circle (degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00277">277</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a026b2b79ff3ae70b4fee5d9c4d1ffb70"></a><!-- doxytag: member="GeographicLib::GravityCircle::Height" ref="a026b2b79ff3ae70b4fee5d9c4d1ffb70" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityCircle::Height </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the height of the circle (meters). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00283">283</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a08ecc2b31ca7d0ddc2d25950a6bc247f"></a><!-- doxytag: member="GeographicLib::GravityCircle::Capabilities" ref="a08ecc2b31ca7d0ddc2d25950a6bc247f" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">unsigned GeographicLib::GravityCircle::Capabilities </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>caps</em> the computational capabilities that this object was constructed with. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00290">290</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2fa608c25be9b8caa087102c4c311768"></a><!-- doxytag: member="GeographicLib::GravityCircle::Capabilities" ref="a2fa608c25be9b8caa087102c4c311768" args="(unsigned testcaps) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::GravityCircle::Capabilities </td>
-          <td>(</td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>testcaps</em></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">testcaps</td><td>a set of bitor'ed <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">GeodesicLine::mask</a> values. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if the <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeodesicLine</a> object has all these capabilities. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00296">296</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="ada1db1d9f480d8044753ed869c995519"></a><!-- doxytag: member="GeographicLib::GravityCircle::GravityModel" ref="ada1db1d9f480d8044753ed869c995519" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1GravityModel.html">GravityModel</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GravityCircle_8hpp_source.html#l00093">93</a> of file <a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="GravityCircle_8hpp_source.html">GravityCircle.hpp</a></li>
-<li><a class="el" href="GravityCircle_8cpp_source.html">GravityCircle.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GravityModel-members.html b/doc/html/classGeographicLib_1_1GravityModel-members.html
deleted file mode 100644
index fdf8ccd..0000000
--- a/doc/html/classGeographicLib_1_1GravityModel-members.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GravityModel.html">GravityModel</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::GravityModel Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a8e0e6b9a6d629d05f22f41996fe98068">ALL</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#aeb3d751ba7719e57e0266b65ee7d63d8">AngularVelocity</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#aadafafc09b9b707d47606da1e413d54f">Circle</a>(real lat, real h, unsigned caps=ALL) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#acbed448c2423cd45e800d03fab059500">DateTime</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#ad4a776d68b60e85275c0e580d3c7caba">DefaultGravityName</a>()</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">DefaultGravityPath</a>()</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af2c1c74254e3193adb155987f6dd0a59">Description</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a83daf366a2c7ab93495f0e6b4144d885">DISTURBANCE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a75cf57146334d9ce0856222a6814ae6f">Disturbance</a>(real lat, real lon, real h, real &deltax, real &deltay, real &deltaz) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365abe1f6d891a721a4f544cd8a341abcb28">DISTURBING_POTENTIAL</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#aa2316f6d328435417627d49046c45308">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69">GEOID_HEIGHT</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a7e75bdba6b9c8e64cc64403335a6fba4">GeoidHeight</a>(real lat, real lon) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a2dc8bf4cfa3c1914f4c7e93a5a3b3eac">Gravity</a>(real lat, real lon, real h, real &gx, real &gy, real &gz) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ae6a4573c13b932c98ab95e7f9dbd0952">GRAVITY</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a243c90a7f9bf3f7aa96877a4b0667a89">GravityCircle</a> class</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a26a87d363713ba3d1aa1b16da2fc2f27">GravityFile</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#ac351170c1104f41754d5c0b8371d3e15">GravityModel</a>(const std::string &name, const std::string &path="")</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a17f2da4cd5abbb5f38f1b90d75975898">GravityModelDirectory</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a9ca1191e449bf7c04595ebd8a299af78">GravityModelName</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a07f361e231e1725a4f8e3c37a06cf304">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365">mask</a> enum name</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#aa63d1c6e71abfa9455df695f4a3e6bdd">MassConstant</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365add4ee1aa94e38a8283826704105dc2e1">NONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a80477ccafa1049964ee0cef40ae2eea6">Phi</a>(real X, real Y, real &fX, real &fY) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a4e6b9d48f26544a45c5509a87eb334e7">ReferenceMassConstant</a>() const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ada02eebe918ebb3764a62b9323dceac9">SPHERICAL_ANOMALY</a> enum value</td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#aaf89eb4a9b7266f0aa2ef2c341fc264e">SphericalAnomaly</a>(real lat, real lon, real h, real &Dg01, real &xi, real &eta) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a257022f1f125d88b0a6efdccfc5e7a41">T</a>(real X, real Y, real Z, real &deltaX, real &deltaY, real &deltaZ) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a690657dedac8ccea22052eda2829fea3">T</a>(real X, real Y, real Z) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#af368d4f9015e076e5cc57ad87b8a185f">U</a>(real X, real Y, real Z, real &gammaX, real &gammaY, real &gammaZ) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#a7aec9ecfa959b257dd0a965331598368">V</a>(real X, real Y, real Z, real &GX, real &GY, real &GZ) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1GravityModel.html#ab6767f3833caa34095a7ef83c43a46f0">W</a>(real X, real Y, real Z, real &gX, real &gY, real &gZ) const </td><td><a class="el" href="classGeographicLib_1_1GravityModel.html">GeographicLib::GravityModel</a></td><td></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1GravityModel.html b/doc/html/classGeographicLib_1_1GravityModel.html
deleted file mode 100644
index 825bc26..0000000
--- a/doc/html/classGeographicLib_1_1GravityModel.html
+++ /dev/null
@@ -1,1238 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::GravityModel Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1GravityModel.html">GravityModel</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::GravityModel Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::GravityModel" -->
-<p>Model of the earth's gravity field.  
- <a href="classGeographicLib_1_1GravityModel.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="GravityModel_8hpp_source.html">GeographicLib/GravityModel.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1GravityModel-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365">mask</a> { <br/>
-  <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365add4ee1aa94e38a8283826704105dc2e1">NONE</a>, 
-<a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ae6a4573c13b932c98ab95e7f9dbd0952">GRAVITY</a>, 
-<a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a83daf366a2c7ab93495f0e6b4144d885">DISTURBANCE</a>, 
-<a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365abe1f6d891a721a4f544cd8a341abcb28">DISTURBING_POTENTIAL</a>, 
-<br/>
-  <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ada02eebe918ebb3764a62b9323dceac9">SPHERICAL_ANOMALY</a>, 
-<a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69">GEOID_HEIGHT</a>, 
-<a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a8e0e6b9a6d629d05f22f41996fe98068">ALL</a>
-<br/>
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td colspan="2"><div class="groupHeader">Setting up the gravity model</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#ac351170c1104f41754d5c0b8371d3e15">GravityModel</a> (const std::string &name, const std::string &path="")</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Compute gravity in geodetic coordinates</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a2dc8bf4cfa3c1914f4c7e93a5a3b3eac">Gravity</a> (real lat, real lon, real h, real &gx, real &gy, real &gz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a75cf57146334d9ce0856222a6814ae6f">Disturbance</a> (real lat, real lon, real h, real &deltax, real &deltay, real &deltaz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a7e75bdba6b9c8e64cc64403335a6fba4">GeoidHeight</a> (real lat, real lon) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#aaf89eb4a9b7266f0aa2ef2c341fc264e">SphericalAnomaly</a> (real lat, real lon, real h, real &Dg01, real &xi, real &eta) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Compute gravity in geocentric coordinates</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#ab6767f3833caa34095a7ef83c43a46f0">W</a> (real X, real Y, real Z, real &gX, real &gY, real &gZ) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a7aec9ecfa959b257dd0a965331598368">V</a> (real X, real Y, real Z, real &GX, real &GY, real &GZ) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a257022f1f125d88b0a6efdccfc5e7a41">T</a> (real X, real Y, real Z, real &deltaX, real &deltaY, real &deltaZ) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a690657dedac8ccea22052eda2829fea3">T</a> (real X, real Y, real Z) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#af368d4f9015e076e5cc57ad87b8a185f">U</a> (real X, real Y, real Z, real &gammaX, real &gammaY, real &gammaZ) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a80477ccafa1049964ee0cef40ae2eea6">Phi</a> (real X, real Y, real &fX, real &fY) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Compute gravity on a circle of constant latitude</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1GravityCircle.html">GravityCircle</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#aadafafc09b9b707d47606da1e413d54f">Circle</a> (real lat, real h, unsigned caps=ALL) const </td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#af2c1c74254e3193adb155987f6dd0a59">Description</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#acbed448c2423cd45e800d03fab059500">DateTime</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a26a87d363713ba3d1aa1b16da2fc2f27">GravityFile</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a9ca1191e449bf7c04595ebd8a299af78">GravityModelName</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a17f2da4cd5abbb5f38f1b90d75975898">GravityModelDirectory</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a07f361e231e1725a4f8e3c37a06cf304">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#aa63d1c6e71abfa9455df695f4a3e6bdd">MassConstant</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a4e6b9d48f26544a45c5509a87eb334e7">ReferenceMassConstant</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#aeb3d751ba7719e57e0266b65ee7d63d8">AngularVelocity</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#aa2316f6d328435417627d49046c45308">Flattening</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">DefaultGravityPath</a> ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#ad4a776d68b60e85275c0e580d3c7caba">DefaultGravityName</a> ()</td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html#a243c90a7f9bf3f7aa96877a4b0667a89">GravityCircle</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Model of the earth's gravity field. </p>
-<p>Evaluate the earth's gravity field according to a model. The supported models treat only the gravitational field exterior to the mass of the earth. When computing the field at points near (but above) the surface of the earth a small correction can be applied to account for the mass of the atomsphere above the point in question; see <a class="el" href="gravity.html#gravityatmos">The effect of the mass of the atmosphere</a>. Determining the geoid height entails correcting for the mass o [...]
-<p>Definitions and terminology (from Heiskanen and Moritz, Sec 2-13):</p>
-<ul>
-<li><em>V</em> = gravitational potential;</li>
-<li><em>Phi</em> = rotational potential;</li>
-<li><em>W</em> = <em>V</em> + <em>Phi</em> = <em>T</em> + <em>U</em> = total potential;</li>
-<li><em>V</em><sub>0</sub> = normal gravitation potential;</li>
-<li><em>U</em> = <em>V</em><sub>0</sub> + <em>Phi</em> = total normal potential;</li>
-<li><em>T</em> = <em>W</em> - <em>U</em> = <em>V</em> - <em>V</em><sub>0</sub> = anomalous or disturbing potential;</li>
-<li><b>g</b> = <b>grad</b> <em>W</em> = <b>gamma</b> + <b>delta</b>;</li>
-<li><b>f</b> = <b>grad</b> <em>Phi</em>;</li>
-<li><b>Gamma</b> = <b>grad</b> <em>V</em><sub>0</sub>;</li>
-<li><b>gamma</b> = <b>grad</b> <em>U</em>;</li>
-<li><b>delta</b> = <b>grad</b> <em>T</em> = gravity disturbance vector = <b>g</b><sub><em>P</em></sub> - <b>gamma</b><sub><em>P</em></sub>;</li>
-<li>delta <em>g</em> = gravity disturbance = <em>g<sub><em>P</em></sub></em> - <em>gamma<sub><em>P</em></sub></em>;</li>
-<li>Delta <b>g</b> = gravity anomaly vector = <b>g</b><sub><em>P</em></sub> - <b>gamma</b><sub><em>Q</em></sub>; here the line <em>PQ</em> is perpendicular to ellipsoid and the potential at <em>P</em> equals the normal potential at <em>Q</em>;</li>
-<li>Delta <em>g</em> = gravity anomaly = <em>g<sub><em>P</em></sub></em> - <em>gamma<sub><em>Q</em></sub></em>;</li>
-<li>(<em>xi</em>, <em>eta</em>) deflection of the vertical, the difference in directions of <b>g</b><sub><em>P</em></sub> and <b>gamma</b><sub><em>Q</em></sub>, <em>xi</em> = NS, <em>eta</em> = EW.</li>
-<li><em>X</em>, <em>Y</em>, <em>Z</em>, geocentric coordinates;</li>
-<li><em>x</em>, <em>y</em>, <em>z</em>, local cartesian coordinates used to denote the east, north and up directions.</li>
-</ul>
-<p>See <a class="el" href="gravity.html">Gravity models</a> for details of how to install the gravity model and the data format.</p>
-<p>References:</p>
-<ul>
-<li>W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San Francisco, 1967).</li>
-</ul>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::GravityModel class</span>
-<span class="comment">// $Id: fde4f431ed9c43e9e0ec797e302f32a373cdd219 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="GravityModel_8hpp.html" title="Header for GeographicLib::GravityModel class.">GeographicLib/GravityModel.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> grav(<span class="stringliteral">"egm96"</span>);
-    <span class="keywordtype">double</span> lat = 27.99, lon = 86.93, h = 8820; <span class="comment">// Mt Everest</span>
-    <span class="keywordtype">double</span> gx, gy, gz;
-    grav.Gravity(lat,lon, h, gx, gy, gz);
-    cout << gx << <span class="stringliteral">" "</span> << gy << <span class="stringliteral">" "</span> << gz << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="Gravity.1.html">Gravity</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> and <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a>. </p>
-</div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="af8691d0f13d6d42278cd1e615903d365"></a><!-- doxytag: member="GeographicLib::GravityModel::mask" ref="af8691d0f13d6d42278cd1e615903d365" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365">GeographicLib::GravityModel::mask</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bit masks for the capabilities to be given to the <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> object produced by Circle. </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="af8691d0f13d6d42278cd1e615903d365add4ee1aa94e38a8283826704105dc2e1"></a><!-- doxytag: member="NONE" ref="af8691d0f13d6d42278cd1e615903d365add4ee1aa94e38a8283826704105dc2e1" args="" -->NONE</em> </td><td>
-<p>No capabilities. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="af8691d0f13d6d42278cd1e615903d365ae6a4573c13b932c98ab95e7f9dbd0952"></a><!-- doxytag: member="GRAVITY" ref="af8691d0f13d6d42278cd1e615903d365ae6a4573c13b932c98ab95e7f9dbd0952" args="" -->GRAVITY</em> </td><td>
-<p>Allow calls to <a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d8053ee66ae22217ae0b61e96194b64">GravityCircle::Gravity</a>, GravityCircle::W, and GravityCircle::V. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="af8691d0f13d6d42278cd1e615903d365a83daf366a2c7ab93495f0e6b4144d885"></a><!-- doxytag: member="DISTURBANCE" ref="af8691d0f13d6d42278cd1e615903d365a83daf366a2c7ab93495f0e6b4144d885" args="" -->DISTURBANCE</em> </td><td>
-<p>Allow calls to <a class="el" href="classGeographicLib_1_1GravityCircle.html#a2c3bde01c9d822b0cdd935314193a466">GravityCircle::Disturbance</a> and <a class="el" href="classGeographicLib_1_1GravityCircle.html#afae12e4bbf17809f1dd6c32b41dfde03">GravityCircle::T</a>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="af8691d0f13d6d42278cd1e615903d365abe1f6d891a721a4f544cd8a341abcb28"></a><!-- doxytag: member="DISTURBING_POTENTIAL" ref="af8691d0f13d6d42278cd1e615903d365abe1f6d891a721a4f544cd8a341abcb28" args="" -->DISTURBING_POTENTIAL</em> </td><td>
-<p>Allow calls to GravityCircle::T(real lon) (i.e., computing the disturbing potential and not the gravity disturbance vector). </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="af8691d0f13d6d42278cd1e615903d365ada02eebe918ebb3764a62b9323dceac9"></a><!-- doxytag: member="SPHERICAL_ANOMALY" ref="af8691d0f13d6d42278cd1e615903d365ada02eebe918ebb3764a62b9323dceac9" args="" -->SPHERICAL_ANOMALY</em> </td><td>
-<p>Allow calls to <a class="el" href="classGeographicLib_1_1GravityCircle.html#ac94672db5e450f4394e6df69eda99e69">GravityCircle::SphericalAnomaly</a>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69"></a><!-- doxytag: member="GEOID_HEIGHT" ref="af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69" args="" -->GEOID_HEIGHT</em> </td><td>
-<p>Allow calls to <a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d5a577c99cf4649d9286f1b4afacab5">GravityCircle::GeoidHeight</a>. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="af8691d0f13d6d42278cd1e615903d365a8e0e6b9a6d629d05f22f41996fe98068"></a><!-- doxytag: member="ALL" ref="af8691d0f13d6d42278cd1e615903d365a8e0e6b9a6d629d05f22f41996fe98068" args="" -->ALL</em> </td><td>
-<p>All capabilities. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00122">122</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="ac351170c1104f41754d5c0b8371d3e15"></a><!-- doxytag: member="GeographicLib::GravityModel::GravityModel" ref="ac351170c1104f41754d5c0b8371d3e15" args="(const std::string &name, const std::string &path="")" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::GravityModel::GravityModel </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>name</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>path</em> = <code>""</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Construct a gravity model.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">name</td><td>the name of the model. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">path</td><td>(optional) directory for data file.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>A filename is formed by appending ".egm" (World Gravity Model) to the name. If <em>path</em> is specified (and is non-empty), then the file is loaded from directory, <em>path</em>. Otherwise the path is given by <a class="el" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">DefaultGravityPath()</a>. This may throw an exception because the file does not exist, is unreadable, or is corrupt.</p>
-<p>This file contains the metadata which specifies the properties of the model. The coefficients for the spherical harmonic sums are obtained from a file obtained by appending ".cof" to metadata file (so the filename ends in ".egm.cof"). </p>
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00043">43</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>References <a class="el" href="GravityModel_8cpp_source.html#l00343">DefaultGravityPath()</a>, <a class="el" href="SphericalEngine_8cpp_source.html#l00382">GeographicLib::SphericalEngine::coeff::readcoeffs()</a>, <a class="el" href="SphericalHarmonic_8hpp_source.html#l00336">GeographicLib::SphericalHarmonic::Coefficients()</a>, <a class="el" href="SphericalEngine_8hpp_source.html#l00169">GeographicLib::SphericalEngine::coeff::nmx()</a>, <a class="el" href="Math_8hpp_source.html#l00130 [...]
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a2dc8bf4cfa3c1914f4c7e93a5a3b3eac"></a><!-- doxytag: member="GeographicLib::GravityModel::Gravity" ref="a2dc8bf4cfa3c1914f4c7e93a5a3b3eac" args="(real lat, real lon, real h, real &gx, real &gy, real &gz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::Gravity </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gy</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the gravity at an arbitrary point above (or below) the ellipsoid.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>the geographic latitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>the height above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gx</td><td>the easterly component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gy</td><td>the northerly component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gz</td><td>the upward component of the acceleration (m s<sup>-2</sup>); this is usually negative. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>W</em> the sum of the gravitational and centrifugal potentials.</dd></dl>
-<p>The function includes the effects of the earth's rotation. </p>
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00291">291</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a75cf57146334d9ce0856222a6814ae6f"></a><!-- doxytag: member="GeographicLib::GravityModel::Disturbance" ref="a75cf57146334d9ce0856222a6814ae6f" args="(real lat, real lon, real h, real &deltax, real &deltay, real &deltaz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::Disturbance </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltax</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltay</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltaz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the gravity disturbance vector at an arbitrary point above (or below) the ellipsoid.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>the geographic latitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>the height above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltax</td><td>the easterly component of the disturbance vector (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltay</td><td>the northerly component of the disturbance vector (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltaz</td><td>the upward component of the disturbance vector (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>T</em> the corresponding disturbing potential. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00299">299</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7e75bdba6b9c8e64cc64403335a6fba4"></a><!-- doxytag: member="GeographicLib::GravityModel::GeoidHeight" ref="a7e75bdba6b9c8e64cc64403335a6fba4" args="(real lat, real lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::GeoidHeight </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the geoid height.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>the geographic latitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>N</em> the height of the geoid above the <a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid()</a> (meters).</dd></dl>
-<p>This calls <a class="el" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">NormalGravity::U</a> for <a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid()</a>. Some approximations are made in computing the geoid height so that the results of the NGA codes are reproduced accurately. Details are given in <a class="el" href="gravity.html#gravitygeoid">Details of the geoid height and anomaly calcu [...]
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00277">277</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaf89eb4a9b7266f0aa2ef2c341fc264e"></a><!-- doxytag: member="GeographicLib::GravityModel::SphericalAnomaly" ref="aaf89eb4a9b7266f0aa2ef2c341fc264e" args="(real lat, real lon, real h, real &Dg01, real &xi, real &eta) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::GravityModel::SphericalAnomaly </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Dg01</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>xi</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>eta</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the gravity anomaly vector using the spherical approximation.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>the geographic latitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the geographic longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>the height above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Dg01</td><td>the gravity anomaly (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">xi</td><td>the northerly component of the deflection of the vertical (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">eta</td><td>the easterly component of the deflection of the vertical (degrees).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The spherical approximation (see Heiskanen and Moritz, Sec 2-14) is used so that the results of the NGA codes are reproduced accurately. approximations used here. Details are given in <a class="el" href="gravity.html#gravitygeoid">Details of the geoid height and anomaly calculations</a>. </p>
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00250">250</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab6767f3833caa34095a7ef83c43a46f0"></a><!-- doxytag: member="GeographicLib::GravityModel::W" ref="ab6767f3833caa34095a7ef83c43a46f0" args="(real X, real Y, real Z, real &gX, real &gY, real &gZ) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::W </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gZ</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the acceleration due to gravity and the centrifugal acceleration in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Z</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gX</td><td>the <em>X</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gY</td><td>the <em>Y</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gZ</td><td>the <em>Z</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>W</em> = <em>V</em> + <em>Phi</em> the sum of the gravitational and centrifugal potentials (m<sup>2</sup> s<sup>-2</sup>).</dd></dl>
-<p>This calls <a class="el" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">NormalGravity::U</a> for <a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid()</a>. </p>
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00241">241</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7aec9ecfa959b257dd0a965331598368"></a><!-- doxytag: member="GeographicLib::GravityModel::V" ref="a7aec9ecfa959b257dd0a965331598368" args="(real X, real Y, real Z, real &GX, real &GY, real &GZ) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::V </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>GX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>GY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>GZ</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the acceleration due to gravity in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Z</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">GX</td><td>the <em>X</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">GY</td><td>the <em>Y</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">GZ</td><td>the <em>Z</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> = <em>W</em> - <em>Phi</em> the gravitational potential (m<sup>2</sup> s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00229">229</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a257022f1f125d88b0a6efdccfc5e7a41"></a><!-- doxytag: member="GeographicLib::GravityModel::T" ref="a257022f1f125d88b0a6efdccfc5e7a41" args="(real X, real Y, real Z, real &deltaX, real &deltaY, real &deltaZ) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::T </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltaX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltaY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>deltaZ</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the gravity disturbance in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Z</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltaX</td><td>the <em>X</em> component of the gravity disturbance (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltaY</td><td>the <em>Y</em> component of the gravity disturbance (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">deltaZ</td><td>the <em>Z</em> component of the gravity disturbance (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>T</em> = <em>W</em> - <em>U</em> the disturbing potential (also called the anomalous potential) (m<sup>2</sup> s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00322">322</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a690657dedac8ccea22052eda2829fea3"></a><!-- doxytag: member="GeographicLib::GravityModel::T" ref="a690657dedac8ccea22052eda2829fea3" args="(real X, real Y, real Z) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::T </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Z</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate disturbing potential in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Z</td><td>geocentric coordinate of point (meters). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>T</em> = <em>W</em> - <em>U</em> the disturbing potential (also called the anomalous potential) (m<sup>2</sup> s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00335">335</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af368d4f9015e076e5cc57ad87b8a185f"></a><!-- doxytag: member="GeographicLib::GravityModel::U" ref="af368d4f9015e076e5cc57ad87b8a185f" args="(real X, real Y, real Z, real &gammaX, real &gammaY, real &gammaZ) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::U </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gammaX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gammaY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gammaZ</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the acceleration due to normal gravity and the centrifugal acceleration in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Z</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gammaX</td><td>the <em>X</em> component of the normal acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gammaY</td><td>the <em>Y</em> component of the normal acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gammaZ</td><td>the <em>Z</em> component of the normal acceleration (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>U</em> = <em>V</em><sub>0</sub> + <em>Phi</em> the sum of the normal gravitational and centrifugal potentials (m<sup>2</sup> s<sup>-2</sup>).</dd></dl>
-<p>This calls <a class="el" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">NormalGravity::U</a> for <a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid()</a>. </p>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00359">359</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a80477ccafa1049964ee0cef40ae2eea6"></a><!-- doxytag: member="GeographicLib::GravityModel::Phi" ref="a80477ccafa1049964ee0cef40ae2eea6" args="(real X, real Y, real &fX, real &fY) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::Phi </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>fX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>fY</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the centrifugal acceleration in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">fX</td><td>the <em>X</em> component of the centrifugal acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">fY</td><td>the <em>Y</em> component of the centrifugal acceleration (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>Phi</em> the centrifugal potential (m<sup>2</sup> s<sup>-2</sup>).</dd></dl>
-<p>This calls <a class="el" href="classGeographicLib_1_1NormalGravity.html#af0f50fd88d8b647a1b7bb209a4cfae0f">NormalGravity::Phi</a> for <a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid()</a>. </p>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00376">376</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aadafafc09b9b707d47606da1e413d54f"></a><!-- doxytag: member="GeographicLib::GravityModel::Circle" ref="aadafafc09b9b707d47606da1e413d54f" args="(real lat, real h, unsigned caps=ALL) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1GravityCircle.html">GravityCircle</a> GeographicLib::GravityModel::Circle </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>caps</em> = <code>ALL</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Create a <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> object to allow the gravity field at many points with constant <em>lat</em> and <em>h</em> and varying <em>lon</em> to be computed efficiently.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>the height of the point above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">caps</td><td>bitor'ed combination of <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365">GravityModel::mask</a> values specifying the capabilities of the resulting <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> object. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>a <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> object whose member functions computes the gravitational field at a particular values of <em>lon</em>.</dd></dl>
-<p>The <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365">GravityModel::mask</a> values are</p>
-<ul>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ae6a4573c13b932c98ab95e7f9dbd0952">GravityModel::GRAVITY</a></li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a83daf366a2c7ab93495f0e6b4144d885">GravityModel::DISTURBANCE</a></li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365abe1f6d891a721a4f544cd8a341abcb28">GravityModel::DISTURBING_POTENTIAL</a></li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ada02eebe918ebb3764a62b9323dceac9">GravityModel::SPHERICAL_ANOMALY</a></li>
-<li><em>caps</em> |= <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69">GravityModel::GEOID_HEIGHT</a></li>
-</ul>
-<p>The default value of <em>caps</em> is <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a8e0e6b9a6d629d05f22f41996fe98068">GravityModel::ALL</a> which turns on all the capabilities. If an unsupported function is invoked, it will return NaNs. Note that <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69">GravityModel::GEOID_HEIGHT</a> will only be honored if <em>h</em>  [...]
-<p>If the field at several points on a circle of latitude need to be calculated then creating a <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> object and using its member functions will be substantially faster, especially for high-degree models. See <a class="el" href="gravity.html#gravityparallel">Geoid heights on a multi-processor system</a> for an example of using <a class="el" href="classGeographicLib_1_1Gravit [...]
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00309">309</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>References <a class="el" href="NormalGravity_8hpp_source.html#l00294">GeographicLib::NormalGravity::Earth()</a>, <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>, <a class="el" href="NormalGravity_8cpp_source.html#l00155">GeographicLib::NormalGravity::SurfaceGravity()</a>, <a class="el" href="NormalGravity_8cpp_source.html#l00216">GeographicLib::NormalGravity::U()</a>, <a class="el" href="NormalGravity_8cpp_source.html#l00208">GeographicLib::NormalGra [...]
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0467e44598b65fb403109ba0d0fbf182"></a><!-- doxytag: member="GeographicLib::GravityModel::ReferenceEllipsoid" ref="a0467e44598b65fb403109ba0d0fbf182" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a>& GeographicLib::GravityModel::ReferenceEllipsoid </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a> object for the reference ellipsoid. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00423">423</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af2c1c74254e3193adb155987f6dd0a59"></a><!-- doxytag: member="GeographicLib::GravityModel::Description" ref="af2c1c74254e3193adb155987f6dd0a59" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::GravityModel::Description </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the description of the gravity model, if available, in the data file; if absent, return "NONE". </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00429">429</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acbed448c2423cd45e800d03fab059500"></a><!-- doxytag: member="GeographicLib::GravityModel::DateTime" ref="acbed448c2423cd45e800d03fab059500" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::GravityModel::DateTime </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>date of the model; if absent, return "UNKNOWN". </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00434">434</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a26a87d363713ba3d1aa1b16da2fc2f27"></a><!-- doxytag: member="GeographicLib::GravityModel::GravityFile" ref="a26a87d363713ba3d1aa1b16da2fc2f27" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::GravityModel::GravityFile </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>full file name used to load the gravity model. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00439">439</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9ca1191e449bf7c04595ebd8a299af78"></a><!-- doxytag: member="GeographicLib::GravityModel::GravityModelName" ref="a9ca1191e449bf7c04595ebd8a299af78" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::GravityModel::GravityModelName </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>"name" used to load the gravity model (from the first argument of the constructor, but this may be overridden by the model file). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00445">445</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a17f2da4cd5abbb5f38f1b90d75975898"></a><!-- doxytag: member="GeographicLib::GravityModel::GravityModelDirectory" ref="a17f2da4cd5abbb5f38f1b90d75975898" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::GravityModel::GravityModelDirectory </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>directory used to load the gravity model. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00450">450</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a07f361e231e1725a4f8e3c37a06cf304"></a><!-- doxytag: member="GeographicLib::GravityModel::MajorRadius" ref="a07f361e231e1725a4f8e3c37a06cf304" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00455">455</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa63d1c6e71abfa9455df695f4a3e6bdd"></a><!-- doxytag: member="GeographicLib::GravityModel::MassConstant" ref="aa63d1c6e71abfa9455df695f4a3e6bdd" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::MassConstant </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>GM</em> the mass constant of the model (m<sup>3</sup> s<sup>-2</sup>); this is the product of <em>G</em> the gravitational constant and <em>M</em> the mass of the earth (usually including the mass of the earth's atmosphere). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00463">463</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4e6b9d48f26544a45c5509a87eb334e7"></a><!-- doxytag: member="GeographicLib::GravityModel::ReferenceMassConstant" ref="a4e6b9d48f26544a45c5509a87eb334e7" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::ReferenceMassConstant </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>GM</em> the mass constant of the <a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid()</a> (m<sup>3</sup> s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00469">469</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aeb3d751ba7719e57e0266b65ee7d63d8"></a><!-- doxytag: member="GeographicLib::GravityModel::AngularVelocity" ref="aeb3d751ba7719e57e0266b65ee7d63d8" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::AngularVelocity </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>omega</em> the angular velocity of the model and the <a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">ReferenceEllipsoid()</a> (rad s<sup>-1</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00476">476</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa2316f6d328435417627d49046c45308"></a><!-- doxytag: member="GeographicLib::GravityModel::Flattening" ref="aa2316f6d328435417627d49046c45308" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::GravityModel::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. </dd></dl>
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00482">482</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0fdf62e41828ae7ae183d9e876f37954"></a><!-- doxytag: member="GeographicLib::GravityModel::DefaultGravityPath" ref="a0fdf62e41828ae7ae183d9e876f37954" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string GeographicLib::GravityModel::DefaultGravityPath </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the default path for gravity model data files.</dd></dl>
-<p>This is the value of the environment variable GRAVITY_PATH, if set; otherwise, it is $GEOGRAPHICLIB_DATA/gravity if the environment variable GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default (/usr/local/share/GeographicLib/gravity on non-Windows systems and C:/Documents and Settings/All Users/Application Data/GeographicLib/gravity on Windows systems). </p>
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00343">343</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>References <a class="el" href="GravityModel_8cpp_source.html#l00026">GEOGRAPHICLIB_DATA</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>, and <a class="el" href="GravityModel_8cpp_source.html#l00043">GravityModel()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad4a776d68b60e85275c0e580d3c7caba"></a><!-- doxytag: member="GeographicLib::GravityModel::DefaultGravityName" ref="ad4a776d68b60e85275c0e580d3c7caba" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string GeographicLib::GravityModel::DefaultGravityName </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the default name for the gravity model.</dd></dl>
-<p>This is the value of the environment variable GRAVITY_NAME, if set, otherwise, it is "egm96". The <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> class does not use this function; it is just provided as a convenience for a calling program when constructing a <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> object. </p>
-
-<p>Definition at line <a class="el" href="GravityModel_8cpp_source.html#l00356">356</a> of file <a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a>.</p>
-
-<p>References <a class="el" href="GravityModel_8cpp_source.html#l00031">GRAVITY_DEFAULT_NAME</a>.</p>
-
-<p>Referenced by <a class="el" href="Gravity_8cpp_source.html#l00036">main()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="a243c90a7f9bf3f7aa96877a4b0667a89"></a><!-- doxytag: member="GeographicLib::GravityModel::GravityCircle" ref="a243c90a7f9bf3f7aa96877a4b0667a89" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1GravityCircle.html">GravityCircle</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="GravityModel_8hpp_source.html#l00090">90</a> of file <a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00309">Circle()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="GravityModel_8hpp_source.html">GravityModel.hpp</a></li>
-<li><a class="el" href="GravityModel_8cpp_source.html">GravityModel.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1LambertConformalConic-members.html b/doc/html/classGeographicLib_1_1LambertConformalConic-members.html
deleted file mode 100644
index e28a1d4..0000000
--- a/doc/html/classGeographicLib_1_1LambertConformalConic-members.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">LambertConformalConic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::LambertConformalConic Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a2298a4e48e550cfd7346cf5f2dd175ad">CentralScale</a>() const </td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#abd47e48c75ed958f5aa91bcaa80ddc8c">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a2bafb6c1a81d4b6cf04f172b9e96278c">Forward</a>(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a14a3757d85e81488afe476f7ceb8a720">Forward</a>(real lon0, real lat, real lon, real &x, real &y) const </td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a21dc9fa160a5b96a1c11ab30af0eb129">LambertConformalConic</a>(real a, real f, real stdlat, real k0)</td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a6273d61ce32ad6016471a7bd0e155ca4">LambertConformalConic</a>(real a, real f, real stdlat1, real stdlat2, real k1)</td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a4d772372388f32029359b156dc43e4cd">LambertConformalConic</a>(real a, real f, real sinlat1, real coslat1, real sinlat2, real coslat2, real k1)</td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a21f9bc21f3f40c56d2f5d12fb4b7f75a">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7fbb6973b77593245db52c9759740f9a">Mercator</a></td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7c589335b43b2274d3a68c0f68f29d77">OriginLatitude</a>() const </td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a085d37693f5e95fd650b7f59f61ab744">Reverse</a>(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a1bffe1259895569e6834a4b1df9b22ab">Reverse</a>(real lon0, real x, real y, real &lat, real &lon) const </td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#aac6267f7f970b35043b17e12e4163ff2">SetScale</a>(real lat, real k=real(1))</td><td><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">GeographicLib::LambertConformalConic</a></td><td></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1LambertConformalConic.html b/doc/html/classGeographicLib_1_1LambertConformalConic.html
deleted file mode 100644
index ff42bb7..0000000
--- a/doc/html/classGeographicLib_1_1LambertConformalConic.html
+++ /dev/null
@@ -1,742 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::LambertConformalConic Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">LambertConformalConic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::LambertConformalConic Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::LambertConformalConic" -->
-<p>Lambert Conformal Conic Projection.  
- <a href="classGeographicLib_1_1LambertConformalConic.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="LambertConformalConic_8hpp_source.html">GeographicLib/LambertConformalConic.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1LambertConformalConic-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a21dc9fa160a5b96a1c11ab30af0eb129">LambertConformalConic</a> (real a, real f, real stdlat, real k0)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a6273d61ce32ad6016471a7bd0e155ca4">LambertConformalConic</a> (real a, real f, real stdlat1, real stdlat2, real k1)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a4d772372388f32029359b156dc43e4cd">LambertConformalConic</a> (real a, real f, real sinlat1, real coslat1, real sinlat2, real coslat2, real k1)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#aac6267f7f970b35043b17e12e4163ff2">SetScale</a> (real lat, real k=real(1))</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a2bafb6c1a81d4b6cf04f172b9e96278c">Forward</a> (real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a085d37693f5e95fd650b7f59f61ab744">Reverse</a> (real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a14a3757d85e81488afe476f7ceb8a720">Forward</a> (real lon0, real lat, real lon, real &x, real &y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a1bffe1259895569e6834a4b1df9b22ab">Reverse</a> (real lon0, real x, real y, real &lat, real &lon) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a21f9bc21f3f40c56d2f5d12fb4b7f75a">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#abd47e48c75ed958f5aa91bcaa80ddc8c">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7c589335b43b2274d3a68c0f68f29d77">OriginLatitude</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a2298a4e48e550cfd7346cf5f2dd175ad">CentralScale</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1LambertConformalConic.html">LambertConformalConic</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7fbb6973b77593245db52c9759740f9a">Mercator</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Lambert Conformal Conic Projection. </p>
-<p>Implementation taken from the report,</p>
-<ul>
-<li>J. P. Snyder, <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395">Map Projections: A Working Manual</a>, USGS Professional Paper 1395 (1987), pp. 107–109.</li>
-</ul>
-<p>This is a implementation of the equations in Snyder except that divided differences have been used to transform the expressions into ones which may be evaluated accurately and that Newton's method is used to invert the projection. In this implementation, the projection correctly becomes the Mercator projection or the polar stereographic projection when the standard latitude is the equator or a pole. The accuracy of the projections is about 10 nm (10 nanometers).</p>
-<p>The ellipsoid parameters, the standard parallels, and the scale on the standard parallels are set in the constructor. Internally, the case with two standard parallels is converted into a single standard parallel, the latitude of tangency (also the latitude of minimum scale), with a scale specified on this parallel. This latitude is also used as the latitude of origin which is returned by <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7c589335b43b2274d3a68c0f68f2 [...]
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::LambertConformalConic class</span>
-<span class="comment">// $Id: 5cb2532e2709bcafee50974307836930069b0cff $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="LambertConformalConic_8hpp.html" title="Header for GeographicLib::LambertConformalConic class.">GeographicLib/LambertConformalConic.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="comment">// Define the Pennsylvania South state coordinate system EPSG:3364</span>
-    <span class="keyword">const</span> <span class="keywordtype">double</span>
-      a = <a class="code" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">Constants</a>::WGS84_a<double>(),
-      f = 1/298.257222101,                      <span class="comment">// GRS80</span>
-      lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, <span class="comment">// standard parallels</span>
-      k1 = 1,                                   <span class="comment">// scale</span>
-      lat0 = 39 + 20/60.0, lon0 =-77 - 45/60.0, <span class="comment">// origin</span>
-      fe = 600000, fn = 0;                      <span class="comment">// false easting and northing</span>
-    <span class="comment">// Set up basic projection</span>
-    <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">LambertConformalConic</a> PASouth(a, f, lat1, lat2, k1);
-    <span class="keywordtype">double</span> x0, y0;
-    <span class="comment">// Transform origin point</span>
-    PASouth.Forward(lon0, lat0, lon0, x0, y0);
-    x0 -= fe; y0 -= fn;
-    {
-      <span class="comment">// Sample conversion from geodetic to PASouth grid</span>
-      <span class="keywordtype">double</span> lat = 39.95, lon = -75.17;    <span class="comment">// Philadelphia</span>
-      <span class="keywordtype">double</span> x, y;
-      PASouth.Forward(lon0, lat, lon, x, y);
-      x -= x0; y -= y0;
-      std::cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample conversion from PASouth grid to geodetic</span>
-      <span class="keywordtype">double</span> x = 820e3, y = 72e3;
-      <span class="keywordtype">double</span> lat, lon;
-      x += x0; y += y0;
-      PASouth.Reverse(lon0, x, y, lat, lon);
-      std::cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="ConicProj.1.html">ConicProj</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">LambertConformalConic</a> and <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">AlbersEqualArea</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a21dc9fa160a5b96a1c11ab30af0eb129"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::LambertConformalConic" ref="a21dc9fa160a5b96a1c11ab30af0eb129" args="(real a, real f, real stdlat, real k0)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::LambertConformalConic::LambertConformalConic </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>stdlat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k0</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with a single standard parallel.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius of ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">stdlat</td><td>standard parallel (degrees), the circle of tangency. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k0</td><td>scale on the standard parallel.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>An exception is thrown if <em>a</em> or <em>k0</em> is not positive or if <em>stdlat</em> is not in the range [-90, 90]. </p>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8cpp_source.html#l00030">30</a> of file <a class="el" href="LambertConformalConic_8cpp_source.html">LambertConformalConic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6273d61ce32ad6016471a7bd0e155ca4"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::LambertConformalConic" ref="a6273d61ce32ad6016471a7bd0e155ca4" args="(real a, real f, real stdlat1, real stdlat2, real k1)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::LambertConformalConic::LambertConformalConic </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>stdlat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>stdlat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k1</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with two standard parallels.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius of ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">stdlat1</td><td>first standard parallel (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">stdlat2</td><td>second standard parallel (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k1</td><td>scale on the standard parallels.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>An exception is thrown if <em>a</em> or <em>k0</em> is not positive or if <em>stdlat1</em> or <em>stdlat2</em> is not in the range [-90, 90]. In addition, if either <em>stdlat1</em> or <em>stdlat2</em> is a pole, then an exception is thrown if <em>stdlat1</em> is not equal <em>stdlat2</em>. </p>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8cpp_source.html#l00054">54</a> of file <a class="el" href="LambertConformalConic_8cpp_source.html">LambertConformalConic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4d772372388f32029359b156dc43e4cd"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::LambertConformalConic" ref="a4d772372388f32029359b156dc43e4cd" args="(real a, real f, real sinlat1, real coslat1, real sinlat2, real coslat2, real k1)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::LambertConformalConic::LambertConformalConic </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>sinlat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>coslat1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>sinlat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>coslat2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k1</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with two standard parallels specified by sines and cosines.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius of ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">sinlat1</td><td>sine of first standard parallel. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">coslat1</td><td>cosine of first standard parallel. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">sinlat2</td><td>sine of second standard parallel. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">coslat2</td><td>cosine of second standard parallel. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k1</td><td>scale on the standard parallels.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>This allows parallels close to the poles to be specified accurately. This routine computes the latitude of origin and the scale at this latitude. In the case where <em>lat1</em> and <em>lat2</em> are different, the errors in this routines are as follows: if <em>dlat</em> = abs(<em>lat2</em> - <em>lat1</em>) <= 160<sup>o</sup> and max(abs(<em>lat1</em>), abs(<em>lat2</em>)) <= 90 - min(0.0002, 2.2e-6(180 - <em>dlat</em>), 6e-8 <em>dlat</em><sup>2</sup>) (in degrees), then the err [...]
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8cpp_source.html#l00081">81</a> of file <a class="el" href="LambertConformalConic_8cpp_source.html">LambertConformalConic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="aac6267f7f970b35043b17e12e4163ff2"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::SetScale" ref="aac6267f7f970b35043b17e12e4163ff2" args="(real lat, real k=real(1))" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LambertConformalConic::SetScale </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k</em> = <code>real(1)</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the scale for the projection.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>(degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k</td><td>scale at latitude <em>lat</em> (default 1).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>This allows a "latitude of true scale" to be specified. An exception is thrown if <em>k</em> is not positive or if <em>stdlat</em> is not in the range [-90, 90] </p>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8cpp_source.html#l00455">455</a> of file <a class="el" href="LambertConformalConic_8cpp_source.html">LambertConformalConic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>, and <a class="el" href="LambertConformalConic_8cpp_source.html#l00324">Forward()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2bafb6c1a81d4b6cf04f172b9e96278c"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::Forward" ref="a2bafb6c1a81d4b6cf04f172b9e96278c" args="(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LambertConformalConic::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to Lambert conformal conic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>central meridian longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The latitude origin is given by LambertConformalConic::LatitudeOrigin(). No false easting or northing is added and <em>lat</em> should be in the range [-90, 90]; <em>lon</em> and <em>lon0</em> should be in the range [-180, 360]. The error in the projection is less than about 10 nm (10 nanometers), true distance, and the errors in the meridian convergence and scale are consistent with this. The values of <em>x</em> and <em>y</em> returned for points which project to infinity (i.e., one [...]
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8cpp_source.html#l00324">324</a> of file <a class="el" href="LambertConformalConic_8cpp_source.html">LambertConformalConic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00256">GeographicLib::Math::asinh()</a>, and <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-<p>Referenced by <a class="el" href="LambertConformalConic_8cpp_source.html#l00455">SetScale()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a085d37693f5e95fd650b7f59f61ab744"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::Reverse" ref="a085d37693f5e95fd650b7f59f61ab744" args="(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LambertConformalConic::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from Lambert conformal conic to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>central meridian longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The latitude origin is given by LambertConformalConic::LatitudeOrigin(). No false easting or northing is added. <em>lon0</em> should be in the range [-180, 360]. The value of <em>lon</em> returned is in the range [-180, 180). The error in the projection is less than about 10 nm (10 nanometers), true distance, and the errors in the meridian convergence and scale are consistent with this. </p>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8cpp_source.html#l00371">371</a> of file <a class="el" href="LambertConformalConic_8cpp_source.html">LambertConformalConic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>, <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>, and <a class="el" href="Math_8hpp_source.html#l00224">GeographicLib::Math::log1p()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a14a3757d85e81488afe476f7ceb8a720"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::Forward" ref="a14a3757d85e81488afe476f7ceb8a720" args="(real lon0, real lat, real lon, real &x, real &y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LambertConformalConic::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a2bafb6c1a81d4b6cf04f172b9e96278c">LambertConformalConic::Forward</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8hpp_source.html#l00262">262</a> of file <a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1bffe1259895569e6834a4b1df9b22ab"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::Reverse" ref="a1bffe1259895569e6834a4b1df9b22ab" args="(real lon0, real x, real y, real &lat, real &lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LambertConformalConic::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a085d37693f5e95fd650b7f59f61ab744">LambertConformalConic::Reverse</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8hpp_source.html#l00272">272</a> of file <a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a21f9bc21f3f40c56d2f5d12fb4b7f75a"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::MajorRadius" ref="a21f9bc21f3f40c56d2f5d12fb4b7f75a" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::LambertConformalConic::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8hpp_source.html#l00285">285</a> of file <a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="abd47e48c75ed958f5aa91bcaa80ddc8c"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::Flattening" ref="abd47e48c75ed958f5aa91bcaa80ddc8c" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::LambertConformalConic::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8hpp_source.html#l00291">291</a> of file <a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7c589335b43b2274d3a68c0f68f29d77"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::OriginLatitude" ref="a7c589335b43b2274d3a68c0f68f29d77" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::LambertConformalConic::OriginLatitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>latitude of the origin for the projection (degrees).</dd></dl>
-<p>This is the latitude of minimum scale and equals the <em>stdlat</em> in the 1-parallel constructor and lies between <em>stdlat1</em> and <em>stdlat2</em> in the 2-parallel constructors. </p>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8hpp_source.html#l00308">308</a> of file <a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2298a4e48e550cfd7346cf5f2dd175ad"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::CentralScale" ref="a2298a4e48e550cfd7346cf5f2dd175ad" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::LambertConformalConic::CentralScale </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>central scale for the projection. This is the scale on the latitude of origin. </dd></dl>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8hpp_source.html#l00314">314</a> of file <a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Data Documentation</h2>
-<a class="anchor" id="a7fbb6973b77593245db52c9759740f9a"></a><!-- doxytag: member="GeographicLib::LambertConformalConic::Mercator" ref="a7fbb6973b77593245db52c9759740f9a" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1LambertConformalConic.html">LambertConformalConic</a> <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7fbb6973b77593245db52c9759740f9a">GeographicLib::LambertConformalConic::Mercator</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">LambertConformalConic</a> with the WGS84 ellipsoid, <em>stdlat</em> = 0, and <em>k0</em> = 1. This degenerates to the Mercator projection. </p>
-
-<p>Definition at line <a class="el" href="LambertConformalConic_8hpp_source.html#l00322">322</a> of file <a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="LambertConformalConic_8hpp_source.html">LambertConformalConic.hpp</a></li>
-<li><a class="el" href="LambertConformalConic_8cpp_source.html">LambertConformalConic.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1LocalCartesian-members.html b/doc/html/classGeographicLib_1_1LocalCartesian-members.html
deleted file mode 100644
index 9612c50..0000000
--- a/doc/html/classGeographicLib_1_1LocalCartesian-members.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1LocalCartesian.html">LocalCartesian</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::LocalCartesian Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a99907eda4b863acbe8e7d159a6482abb">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a6426e95f904f224eabedb8fcd17fe537">Forward</a>(real lat, real lon, real h, real &x, real &y, real &z) const </td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a774332be14e894536f13b3cc7a8323c7">Forward</a>(real lat, real lon, real h, real &x, real &y, real &z, std::vector< real > &M) const </td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#ac8e00f262d70da122f45afa15b9381e2">HeightOrigin</a>() const </td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#af4905164de5157c7ae2678f7716cbad7">LatitudeOrigin</a>() const </td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#ad277a6798293d5d66168c3c1438d10a2">LocalCartesian</a>(real lat0, real lon0, real h0=0, const Geocentric &earth=Geocentric::WGS84)</td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a3474a0434b2ff8b258111fe6d8468f0d">LocalCartesian</a>(const Geocentric &earth=Geocentric::WGS84)</td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline, explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a45656227b4fff45249f1844bc6d233ad">LongitudeOrigin</a>() const </td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a795356c736f1170fe5ef075ebbf34354">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a85b9c15b843cf6a84be08e0cc4de9122">Reset</a>(real lat0, real lon0, real h0=0)</td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#ac34878de3ae995e7d54f0347a1f34118">Reverse</a>(real x, real y, real z, real &lat, real &lon, real &h) const </td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a7baa88b38b320d763f6cba3ece4f518d">Reverse</a>(real x, real y, real z, real &lat, real &lon, real &h, std::vector< real > &M) const </td><td><a class="el" href="classGeographicLib_1_1LocalCartesian.html">GeographicLib::LocalCartesian</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1LocalCartesian.html b/doc/html/classGeographicLib_1_1LocalCartesian.html
deleted file mode 100644
index d59bcd7..0000000
--- a/doc/html/classGeographicLib_1_1LocalCartesian.html
+++ /dev/null
@@ -1,662 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::LocalCartesian Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1LocalCartesian.html">LocalCartesian</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::LocalCartesian Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::LocalCartesian" -->
-<p>Local Cartesian coordinates.  
- <a href="classGeographicLib_1_1LocalCartesian.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="LocalCartesian_8hpp_source.html">GeographicLib/LocalCartesian.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1LocalCartesian-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#ad277a6798293d5d66168c3c1438d10a2">LocalCartesian</a> (real lat0, real lon0, real h0=0, const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> &earth=<a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a3474a0434b2ff8b258111fe6d8468f0d">LocalCartesian</a> (const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> &earth=<a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a85b9c15b843cf6a84be08e0cc4de9122">Reset</a> (real lat0, real lon0, real h0=0)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a6426e95f904f224eabedb8fcd17fe537">Forward</a> (real lat, real lon, real h, real &x, real &y, real &z) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a774332be14e894536f13b3cc7a8323c7">Forward</a> (real lat, real lon, real h, real &x, real &y, real &z, std::vector< real > &M) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#ac34878de3ae995e7d54f0347a1f34118">Reverse</a> (real x, real y, real z, real &lat, real &lon, real &h) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a7baa88b38b320d763f6cba3ece4f518d">Reverse</a> (real x, real y, real z, real &lat, real &lon, real &h, std::vector< real > &M) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#af4905164de5157c7ae2678f7716cbad7">LatitudeOrigin</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a45656227b4fff45249f1844bc6d233ad">LongitudeOrigin</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#ac8e00f262d70da122f45afa15b9381e2">HeightOrigin</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a795356c736f1170fe5ef075ebbf34354">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html#a99907eda4b863acbe8e7d159a6482abb">Flattening</a> () const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Local Cartesian coordinates. </p>
-<p>Convert between geodetic coordinates latitude = <em>lat</em>, longitude = <em>lon</em>, height = <em>h</em> (measured vertically from the surface of the ellipsoid) to local cartesian coordinates (<em>x</em>, <em>y</em>, <em>z</em>). The origin of local cartesian coordinate system is at <em>lat</em> = <em>lat0</em>, <em>lon</em> = <em>lon0</em>, <em>h</em> = <em>h0</em>. The <em>z</em> axis is normal to the ellipsoid; the <em>y</em> axis points due north. The plane <em>z</em> = - <em>h [...]
-<p>The conversions all take place via geocentric coordinates using a <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> object (by default <a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>).</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::LocalCartesian class</span>
-<span class="comment">// $Id: 0fd182a359b17d3b76ccd55f405b272a327a42e8 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <cmath></span>
-<span class="preprocessor">#include <<a class="code" href="Geocentric_8hpp.html" title="Header for GeographicLib::Geocentric class.">GeographicLib/Geocentric.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="LocalCartesian_8hpp.html" title="Header for GeographicLib::LocalCartesian class.">GeographicLib/LocalCartesian.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> earth(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>());
-    <span class="comment">// Alternatively: const Geocentric& earth = Geocentric::WGS84;</span>
-    <span class="keyword">const</span> <span class="keywordtype">double</span> lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; <span class="comment">// Paris</span>
-    <a class="code" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">LocalCartesian</a> proj(lat0, lon0, 0, earth);
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 50.9, lon = 1.8, h = 0; <span class="comment">// Calais</span>
-      <span class="keywordtype">double</span> x, y, z;
-      proj.Forward(lat, lon, h, x, y, z);
-      cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << z << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">double</span> x = -38e3, y = 230e3, z = -4e3;
-      <span class="keywordtype">double</span> lat, lon, h;
-      proj.Reverse(x, y, z, lat, lon, h);
-      cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">" "</span> << h << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="CartConvert.1.html">CartConvert</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> and <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">LocalCartesian</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="ad277a6798293d5d66168c3c1438d10a2"></a><!-- doxytag: member="GeographicLib::LocalCartesian::LocalCartesian" ref="ad277a6798293d5d66168c3c1438d10a2" args="(real lat0, real lon0, real h0=0, const Geocentric &earth=Geocentric::WGS84)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::LocalCartesian::LocalCartesian </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h0</em> = <code>0</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> & </td>
-          <td class="paramname"><em>earth</em> = <code><a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a></code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor setting the origin.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat0</td><td>latitude at origin (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>longitude at origin (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h0</td><td>height above ellipsoid at origin (meters); default 0. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">earth</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> object for the transformation; default <a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00063">63</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3474a0434b2ff8b258111fe6d8468f0d"></a><!-- doxytag: member="GeographicLib::LocalCartesian::LocalCartesian" ref="a3474a0434b2ff8b258111fe6d8468f0d" args="(const Geocentric &earth=Geocentric::WGS84)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::LocalCartesian::LocalCartesian </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> & </td>
-          <td class="paramname"><em>earth</em> = <code><a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a></code></td><td>)</td>
-          <td>  throw ()<code> [inline, explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Default constructor.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">earth</td><td><a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> object for the transformation; default <a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Sets <em>lat0</em> = 0, <em>lon0</em> = 0, <em>h0</em> = 0. </p>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00076">76</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a85b9c15b843cf6a84be08e0cc4de9122"></a><!-- doxytag: member="GeographicLib::LocalCartesian::Reset" ref="a85b9c15b843cf6a84be08e0cc4de9122" args="(real lat0, real lon0, real h0=0)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LocalCartesian::Reset </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h0</em> = <code>0</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reset the origin.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat0</td><td>latitude at origin (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>longitude at origin (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h0</td><td>height above ellipsoid at origin (meters); default 0. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8cpp_source.html#l00022">22</a> of file <a class="el" href="LocalCartesian_8cpp_source.html">LocalCartesian.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6426e95f904f224eabedb8fcd17fe537"></a><!-- doxytag: member="GeographicLib::LocalCartesian::Forward" ref="a6426e95f904f224eabedb8fcd17fe537" args="(real lat, real lon, real h, real &x, real &y, real &z) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LocalCartesian::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>z</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from geodetic to local cartesian coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>height of point above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">z</td><td>local cartesian coordinate (meters).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat</em> should be in the range [-90, 90]; <em>lon</em> and <em>lon0</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00104">104</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="CartConvert_8cpp_source.html#l00032">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a774332be14e894536f13b3cc7a8323c7"></a><!-- doxytag: member="GeographicLib::LocalCartesian::Forward" ref="a774332be14e894536f13b3cc7a8323c7" args="(real lat, real lon, real h, real &x, real &y, real &z, std::vector< real > &M) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LocalCartesian::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::vector< real > & </td>
-          <td class="paramname"><em>M</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from geodetic to local cartesian coordinates and return rotation matrix.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>height of point above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">z</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M</td><td>if the length of the vector is 9, fill with the rotation matrix in row-major order.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Let <em>v</em> be a unit vector located at (<em>lat</em>, <em>lon</em>, <em>h</em>). We can express <em>v</em> as <em>column</em> vectors in one of two ways</p>
-<ul>
-<li>in east, north, up coordinates (where the components are relative to a local coordinate system at (<em>lat</em>, <em>lon</em>, <em>h</em>)); call this representation <em>v1</em>.</li>
-<li>in <em>x</em>, <em>y</em>, <em>z</em> coordinates (where the components are relative to the local coordinate system at (<em>lat0</em>, <em>lon0</em>, <em>h0</em>)); call this representation <em>v0</em>.</li>
-</ul>
-<p>Then we have <em>v0</em> = <em>M</em> . <em>v1</em>. </p>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00133">133</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac34878de3ae995e7d54f0347a1f34118"></a><!-- doxytag: member="GeographicLib::LocalCartesian::Reverse" ref="ac34878de3ae995e7d54f0347a1f34118" args="(real x, real y, real z, real &lat, real &lon, real &h) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LocalCartesian::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>h</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from local cartesian to geodetic coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">h</td><td>height of point above the ellipsoid (meters).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The value of <em>lon</em> returned is in the range [-180, 180). </p>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00156">156</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="CartConvert_8cpp_source.html#l00032">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7baa88b38b320d763f6cba3ece4f518d"></a><!-- doxytag: member="GeographicLib::LocalCartesian::Reverse" ref="a7baa88b38b320d763f6cba3ece4f518d" args="(real x, real y, real z, real &lat, real &lon, real &h, std::vector< real > &M) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::LocalCartesian::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::vector< real > & </td>
-          <td class="paramname"><em>M</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from local cartesian to geodetic coordinates and return rotation matrix.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>local cartesian coordinate (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">h</td><td>height of point above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M</td><td>if the length of the vector is 9, fill with the rotation matrix in row-major order.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Let <em>v</em> be a unit vector located at (<em>lat</em>, <em>lon</em>, <em>h</em>). We can express <em>v</em> as <em>column</em> vectors in one of two ways</p>
-<ul>
-<li>in east, north, up coordinates (where the components are relative to a local coordinate system at (<em>lat</em>, <em>lon</em>, <em>h</em>)); call this representation <em>v1</em>.</li>
-<li>in <em>x</em>, <em>y</em>, <em>z</em> coordinates (where the components are relative to the local coordinate system at (<em>lat0</em>, <em>lon0</em>, <em>h0</em>)); call this representation <em>v0</em>.</li>
-</ul>
-<p>Then we have <em>v1</em> = <em>M^T</em> . <em>v0</em>, where <em>M^T</em> is the transpose of <em>M</em>. </p>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00186">186</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af4905164de5157c7ae2678f7716cbad7"></a><!-- doxytag: member="GeographicLib::LocalCartesian::LatitudeOrigin" ref="af4905164de5157c7ae2678f7716cbad7" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::LocalCartesian::LatitudeOrigin </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>latitude of the origin (degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00203">203</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a45656227b4fff45249f1844bc6d233ad"></a><!-- doxytag: member="GeographicLib::LocalCartesian::LongitudeOrigin" ref="a45656227b4fff45249f1844bc6d233ad" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::LocalCartesian::LongitudeOrigin </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>longitude of the origin (degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00208">208</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac8e00f262d70da122f45afa15b9381e2"></a><!-- doxytag: member="GeographicLib::LocalCartesian::HeightOrigin" ref="ac8e00f262d70da122f45afa15b9381e2" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::LocalCartesian::HeightOrigin </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>height of the origin (meters). </dd></dl>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00213">213</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a795356c736f1170fe5ef075ebbf34354"></a><!-- doxytag: member="GeographicLib::LocalCartesian::MajorRadius" ref="a795356c736f1170fe5ef075ebbf34354" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::LocalCartesian::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value of <em>a</em> inherited from the <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00220">220</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a99907eda4b863acbe8e7d159a6482abb"></a><!-- doxytag: member="GeographicLib::LocalCartesian::Flattening" ref="a99907eda4b863acbe8e7d159a6482abb" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::LocalCartesian::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="LocalCartesian_8hpp_source.html#l00226">226</a> of file <a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="LocalCartesian_8hpp_source.html">LocalCartesian.hpp</a></li>
-<li><a class="el" href="LocalCartesian_8cpp_source.html">LocalCartesian.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1MGRS-members.html b/doc/html/classGeographicLib_1_1MGRS-members.html
deleted file mode 100644
index 8d8f74c..0000000
--- a/doc/html/classGeographicLib_1_1MGRS-members.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1MGRS.html">MGRS</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::MGRS Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1MGRS.html">GeographicLib::MGRS</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MGRS.html#a8eee27799bda8238d6d0525dffdddd4e">Flattening</a>()</td><td><a class="el" href="classGeographicLib_1_1MGRS.html">GeographicLib::MGRS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">Forward</a>(int zone, bool northp, real x, real y, int prec, std::string &mgrs)</td><td><a class="el" href="classGeographicLib_1_1MGRS.html">GeographicLib::MGRS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MGRS.html#a37f9dd9b12dbc74381116d842be47ccd">Forward</a>(int zone, bool northp, real x, real y, real lat, int prec, std::string &mgrs)</td><td><a class="el" href="classGeographicLib_1_1MGRS.html">GeographicLib::MGRS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MGRS.html#a8942a1dfafa3ea845ccc5fafb6ca4dc2">MajorRadius</a>()</td><td><a class="el" href="classGeographicLib_1_1MGRS.html">GeographicLib::MGRS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MGRS.html#a066b79e78cd85bf4b50df50808bed7e3">Reverse</a>(const std::string &mgrs, int &zone, bool &northp, real &x, real &y, int &prec, bool centerp=true)</td><td><a class="el" href="classGeographicLib_1_1MGRS.html">GeographicLib::MGRS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MGRS.html#a6a0cfac496024eaf645c7a2f98a02a75">UTMUPS</a> class</td><td><a class="el" href="classGeographicLib_1_1MGRS.html">GeographicLib::MGRS</a></td><td><code> [friend]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1MGRS.html b/doc/html/classGeographicLib_1_1MGRS.html
deleted file mode 100644
index 62ce7c6..0000000
--- a/doc/html/classGeographicLib_1_1MGRS.html
+++ /dev/null
@@ -1,465 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::MGRS Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1MGRS.html">MGRS</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::MGRS Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::MGRS" -->
-<p>Convert between UTM/UPS and MGRS.  
- <a href="classGeographicLib_1_1MGRS.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="MGRS_8hpp_source.html">GeographicLib/MGRS.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1MGRS-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">Forward</a> (int zone, bool northp, real x, real y, int prec, std::string &mgrs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MGRS.html#a37f9dd9b12dbc74381116d842be47ccd">Forward</a> (int zone, bool northp, real x, real y, real lat, int prec, std::string &mgrs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MGRS.html#a066b79e78cd85bf4b50df50808bed7e3">Reverse</a> (const std::string &mgrs, int &zone, bool &northp, real &x, real &y, int &prec, bool centerp=true)</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MGRS.html#a8942a1dfafa3ea845ccc5fafb6ca4dc2">MajorRadius</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MGRS.html#a8eee27799bda8238d6d0525dffdddd4e">Flattening</a> ()  throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MGRS.html#a6a0cfac496024eaf645c7a2f98a02a75">UTMUPS</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Convert between UTM/UPS and MGRS. </p>
-<p><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> is defined in Chapter 3 of</p>
-<ul>
-<li>J. W. Hager, L. L. Fry, S. S. Jacks, D. R. Hill, <a href="http://earth-info.nga.mil/GandG/publications/tm8358.1/pdf/TM8358_1.pdf">Datums, Ellipsoids, Grids, and Grid Reference Systems</a>, Defense Mapping Agency, Technical Manual TM8358.1 (1990).</li>
-</ul>
-<p>This implementation has the following properties:</p>
-<ul>
-<li>The conversions are closed, i.e., output from Forward is legal input for Reverse and vice versa. Conversion in both directions preserve the UTM/UPS selection and the UTM zone.</li>
-<li>Forward followed by Reverse and vice versa is approximately the identity. (This is affected in predictable ways by errors in determining the latitude band and by loss of precision in the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinates.)</li>
-<li>All <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinates truncate to legal 100 km blocks. All <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinates with a legal 100 km block prefix are legal (even though the latitude band letter may now belong to a neighboring band).</li>
-<li>The range of UTM/UPS coordinates allowed for conversion to <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinates is the maximum consistent with staying within the letter ranges of the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> scheme.</li>
-<li>All the transformations are implemented as static methods in the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> class.</li>
-</ul>
-<p>The <a href="http://www.nga.mil">NGA</a> software package <a href="http://earth-info.nga.mil/GandG/geotrans/index.html">geotrans</a> also provides conversions to and from <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a>. Version 3.0 (and earlier) suffers from some drawbacks:</p>
-<ul>
-<li>Inconsistent rules are used to determine the whether a particular <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate is legal. A more systematic approach is taken here.</li>
-<li>The underlying projections are not very accurately implemented.</li>
-</ul>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::MGRS class</span>
-<span class="comment">// $Id: 011e73554cd2851ef396442f1ec8392207b101c3 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <string></span>
-<span class="preprocessor">#include <<a class="code" href="UTMUPS_8hpp.html" title="Header for GeographicLib::UTMUPS class.">GeographicLib/UTMUPS.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="MGRS_8hpp.html" title="Header for GeographicLib::MGRS class.">GeographicLib/MGRS.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="comment">// See also example-GeoCoords.cpp</span>
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 33.3, lon = 44.4; <span class="comment">// Baghdad</span>
-      <span class="keywordtype">int</span> zone;
-      <span class="keywordtype">bool</span> northp;
-      <span class="keywordtype">double</span> x, y;
-      <a class="code" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">UTMUPS::Forward</a>(lat, lon, zone, northp, x, y);
-      <span class="keywordtype">string</span> mgrs;
-      <a class="code" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">MGRS::Forward</a>(zone, northp, x, y, 5, mgrs);
-      cout << mgrs << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">string</span> mgrs = <span class="stringliteral">"38SMB4488"</span>;
-      <span class="keywordtype">int</span> zone, prec;
-      <span class="keywordtype">bool</span> northp;
-      <span class="keywordtype">double</span> x, y;
-      <a class="code" href="classGeographicLib_1_1MGRS.html#a066b79e78cd85bf4b50df50808bed7e3">MGRS::Reverse</a>(mgrs, zone, northp, x, y, prec);
-      <span class="keywordtype">double</span> lat, lon;
-      <a class="code" href="classGeographicLib_1_1MGRS.html#a066b79e78cd85bf4b50df50808bed7e3">UTMUPS::Reverse</a>(zone, northp, x, y, lat, lon);
-      cout << prec << <span class="stringliteral">" "</span> << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a91de10ebde478dbb85b3c7d057ff97b9"></a><!-- doxytag: member="GeographicLib::MGRS::Forward" ref="a91de10ebde478dbb85b3c7d057ff97b9" args="(int zone, bool northp, real x, real y, int prec, std::string &mgrs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::MGRS::Forward </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::string & </td>
-          <td class="paramname"><em>mgrs</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert UTM or UPS coordinate to an <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">zone</td><td>UTM zone (zero means UPS). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">northp</td><td>hemisphere (true means north, false means south). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>precision relative to 100 km. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">mgrs</td><td><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> string.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>prec</em> specifies the precision of the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> string as follows:</p>
-<ul>
-<li>prec = 0 (min), 100 km</li>
-<li>prec = 1, 10 km</li>
-<li>prec = 2, 1 km</li>
-<li>prec = 3, 100 m</li>
-<li>prec = 4, 10 m</li>
-<li>prec = 5, 1 m</li>
-<li>prec = 6, 0.1 m</li>
-<li>prec = 11 (max), 1 um</li>
-</ul>
-<p>UTM eastings are allowed to be in the range [100 km, 900 km], northings are allowed to be in in [0 km, 9500 km] for the northern hemisphere and in [1000 km, 10000 km] for the southern hemisphere. (However UTM northings can be continued across the equator. So the actual limits on the northings are [-9000 km, 9500 km] for the "northern" hemisphere and [1000 km, 19500 km] for the "southern" hemisphere.)</p>
-<p>UPS eastings/northings are allowed to be in the range [1300 km, 2700 km] in the northern hemisphere and in [800 km, 3200 km] in the southern hemisphere.</p>
-<p>The ranges are 100 km more restrictive that for the conversion between geographic coordinates and UTM and UPS given by <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>. These restrictions are dictated by the allowed letters in <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinates. The choice of 9500 km for the maximum northing for northern hemisphe [...]
-<p>All allowed UTM and UPS coordinates may now be converted to legal <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinates with the proviso that eastings and northings on the upper boundaries are silently reduced by about 4 nm (4 nanometers) to place them <em>within</em> the allowed range. (This includes reducing a southern hemisphere northing of 10000 km by 4 nm so that it is placed in latitude band M.) The UTM or UPS coordin [...]
-<p>The UTM/UPS selection and the UTM zone is preserved in the conversion to <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate. Thus for <em>zone</em> > 0, the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate begins with the zone number followed by one of [C–M] for the southern hemisphere and [N–X] for the northern hemisphere. For <em>zone</em>  [...]
-<p>The conversion to the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> is exact for prec in [0, 5] except that a neighboring latitude band letter may be given if the point is within 5nm of a band boundary. For prec in [6, 11], the conversion is accurate to roundoff.</p>
-<p>If <em>x</em> or <em>y</em> is NaN or if <em>zone</em> is <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0">UTMUPS::INVALID</a>, the returned <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> string is "INVALID".</p>
-<p>Return the result via a reference argument to avoid the overhead of allocating a potentially large number of small strings. If an error is thrown, then <em>mgrs</em> is unchanged. </p>
-
-<p>Definition at line <a class="el" href="MGRS_8cpp_source.html#l00134">134</a> of file <a class="el" href="MGRS_8cpp_source.html">MGRS.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a37f9dd9b12dbc74381116d842be47ccd"></a><!-- doxytag: member="GeographicLib::MGRS::Forward" ref="a37f9dd9b12dbc74381116d842be47ccd" args="(int zone, bool northp, real x, real y, real lat, int prec, std::string &mgrs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::MGRS::Forward </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::string & </td>
-          <td class="paramname"><em>mgrs</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert UTM or UPS coordinate to an <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate when the latitude is known.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">zone</td><td>UTM zone (zero means UPS). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">northp</td><td>hemisphere (true means north, false means south). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>precision relative to 100 km. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">mgrs</td><td><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> string.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The latitude is ignored for <em>zone</em> = 0 (UPS); otherwise the latitude is used to determine the latitude band and this is checked for consistency using the same tests as Reverse. </p>
-
-<p>Definition at line <a class="el" href="MGRS_8cpp_source.html#l00051">51</a> of file <a class="el" href="MGRS_8cpp_source.html">MGRS.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a066b79e78cd85bf4b50df50808bed7e3"></a><!-- doxytag: member="GeographicLib::MGRS::Reverse" ref="a066b79e78cd85bf4b50df50808bed7e3" args="(const std::string &mgrs, int &zone, bool &northp, real &x, real &y, int &prec, bool centerp=true)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::MGRS::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>mgrs</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool & </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>centerp</em> = <code>true</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate to UTM or UPS coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">mgrs</td><td><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> string. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">zone</td><td>UTM zone (zero means UPS). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">northp</td><td>hemisphere (true means north, false means south). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">prec</td><td>precision relative to 100 km. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">centerp</td><td>if true (default), return center of the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> square, else return SW (lower left) corner.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>All conversions from <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> to UTM/UPS are permitted provided the <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate is a possible result of a conversion in the other direction. (The leading 0 may be dropped from an input <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> co [...]
-<ul>
-<li>38VLS and 38WLS are allowed (latitude 64N intersects the square 38[VW]LS); but 38VMS is not permitted (all of 38VMS is north of 64N)</li>
-<li>38MPE and 38NPF are permitted (they straddle the equator); but 38NPE and 38MPF are not permitted (the equator does not intersect either block).</li>
-<li>Similarly ZAB and YZB are permitted (they straddle the prime meridian); but YAB and ZZB are not (the prime meridian does not intersect either block).</li>
-</ul>
-<p>The UTM/UPS selection and the UTM zone is preserved in the conversion from <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate. The conversion is exact for prec in [0, 5]. With centerp = true the conversion from <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> to geographic and back is stable. This is not assured if <em>centerp</em> = false.</p>
-<p>If an error is thrown, then the arguments are unchanged. </p>
-
-<p>Definition at line <a class="el" href="MGRS_8cpp_source.html#l00145">145</a> of file <a class="el" href="MGRS_8cpp_source.html">MGRS.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8942a1dfafa3ea845ccc5fafb6ca4dc2"></a><!-- doxytag: member="GeographicLib::MGRS::MajorRadius" ref="a8942a1dfafa3ea845ccc5fafb6ca4dc2" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MGRS::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the WGS84 ellipsoid (meters).</dd></dl>
-<p>(The WGS84 value is returned because the UTM and UPS projections are based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="MGRS_8hpp_source.html#l00265">265</a> of file <a class="el" href="MGRS_8hpp_source.html">MGRS.hpp</a>.</p>
-
-<p>References <a class="el" href="UTMUPS_8hpp_source.html#l00295">GeographicLib::UTMUPS::MajorRadius()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8eee27799bda8238d6d0525dffdddd4e"></a><!-- doxytag: member="GeographicLib::MGRS::Flattening" ref="a8eee27799bda8238d6d0525dffdddd4e" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MGRS::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the WGS84 ellipsoid.</dd></dl>
-<p>(The WGS84 value is returned because the UTM and UPS projections are based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="MGRS_8hpp_source.html#l00273">273</a> of file <a class="el" href="MGRS_8hpp_source.html">MGRS.hpp</a>.</p>
-
-<p>References <a class="el" href="UTMUPS_8hpp_source.html#l00304">GeographicLib::UTMUPS::Flattening()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="a6a0cfac496024eaf645c7a2f98a02a75"></a><!-- doxytag: member="GeographicLib::MGRS::UTMUPS" ref="a6a0cfac496024eaf645c7a2f98a02a75" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1UTMUPS.html">UTMUPS</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MGRS_8hpp_source.html#l00097">97</a> of file <a class="el" href="MGRS_8hpp_source.html">MGRS.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="MGRS_8hpp_source.html">MGRS.hpp</a></li>
-<li><a class="el" href="MGRS_8cpp_source.html">MGRS.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1MagneticCircle-members.html b/doc/html/classGeographicLib_1_1MagneticCircle-members.html
deleted file mode 100644
index a02a78b..0000000
--- a/doc/html/classGeographicLib_1_1MagneticCircle-members.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1MagneticCircle.html">MagneticCircle</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::MagneticCircle Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a4c3fc40a49332ddcd042e5cb41c3cb2a">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#aadd95eac0650f195e4d7acdc9819716b">Height</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a8ec84cd0b1d97b51464ec80d9e2dcf57">Init</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#aaf14e89275bffd8253acdbe4840b65d0">Latitude</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a49170460b1833722ad9bc45b92c86e5a">MagneticCircle</a>()</td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#af6619ebe4c078705fc49a0d9f950b431">MagneticModel</a> class</td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a78721d381d21f676152394dd576f2e77">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a8669d47d20b03e9185d358440d3da9b1">operator()</a>(real lon, real &Bx, real &By, real &Bz) const </td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#ac715ae0394bd7f8c23288f80c406e5bc">operator()</a>(real lon, real &Bx, real &By, real &Bz, real &Bxt, real &Byt, real &Bzt) const </td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a44783c9e44f16bbd48cc5061b30ce8e9">Time</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticCircle.html">GeographicLib::MagneticCircle</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1MagneticCircle.html b/doc/html/classGeographicLib_1_1MagneticCircle.html
deleted file mode 100644
index f668272..0000000
--- a/doc/html/classGeographicLib_1_1MagneticCircle.html
+++ /dev/null
@@ -1,431 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::MagneticCircle Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1MagneticCircle.html">MagneticCircle</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::MagneticCircle Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::MagneticCircle" -->
-<p>Geomagnetic field on a circle of latitude.  
- <a href="classGeographicLib_1_1MagneticCircle.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="MagneticCircle_8hpp_source.html">GeographicLib/MagneticCircle.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1MagneticCircle-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a49170460b1833722ad9bc45b92c86e5a">MagneticCircle</a> ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Compute the magnetic field</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a8669d47d20b03e9185d358440d3da9b1">operator()</a> (real lon, real &Bx, real &By, real &Bz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#ac715ae0394bd7f8c23288f80c406e5bc">operator()</a> (real lon, real &Bx, real &By, real &Bz, real &Bxt, real &Byt, real &Bzt) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a8ec84cd0b1d97b51464ec80d9e2dcf57">Init</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a78721d381d21f676152394dd576f2e77">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a4c3fc40a49332ddcd042e5cb41c3cb2a">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#aaf14e89275bffd8253acdbe4840b65d0">Latitude</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#aadd95eac0650f195e4d7acdc9819716b">Height</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#a44783c9e44f16bbd48cc5061b30ce8e9">Time</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html#af6619ebe4c078705fc49a0d9f950b431">MagneticModel</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Geomagnetic field on a circle of latitude. </p>
-<p>Evaluate the earth's magnetic field on a circle of constant height and latitude. This uses a CircleEngine to pre-evaluate the inner sum of the spherical harmonic sum, allowing the values of the field at several different longitudes to be evaluated rapidly.</p>
-<p>Use <a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">MagneticModel::Circle</a> to create a <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a> object. (The constructor for this class is private.)</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::MagneticCircle class</span>
-<span class="comment">// $Id: d499f22160be523e01c0a6e3c740dbe828aa918d $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="MagneticModel_8hpp.html" title="Header for GeographicLib::MagneticModel class.">GeographicLib/MagneticModel.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="MagneticCircle_8hpp.html" title="Header for GeographicLib::MagneticCircle class.">GeographicLib/MagneticCircle.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> mag(<span class="stringliteral">"wmm2010"</span>);
-    <span class="keywordtype">double</span> lat = 27.99, lon0 = 86.93, h = 8820, t = 2012; <span class="comment">// Mt Everest</span>
-    {
-      <span class="comment">// Slow method of evaluating the values at several points on a circle of</span>
-      <span class="comment">// latitude.</span>
-      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = -5; i <= 5; ++i) {
-        <span class="keywordtype">double</span> lon = lon0 + i * 0.2;
-        <span class="keywordtype">double</span> Bx, By, Bz;
-        mag(t, lat, lon, h, Bx, By, Bz);
-        cout << lon << <span class="stringliteral">" "</span> << Bx << <span class="stringliteral">" "</span> << By << <span class="stringliteral">" "</span> << Bz << <span class="stringliteral">"\n"</span>;
-      }
-    }
-    {
-      <span class="comment">// Fast method of evaluating the values at several points on a circle of</span>
-      <span class="comment">// latitude using MagneticCircle.</span>
-      <a class="code" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a> circ = mag.Circle(t, lat, h);
-      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = -5; i <= 5; ++i) {
-        <span class="keywordtype">double</span> lon = lon0 + i * 0.2;
-        <span class="keywordtype">double</span> Bx, By, Bz;
-        circ(lon, Bx, By, Bz);
-        cout << lon << <span class="stringliteral">" "</span> << Bx << <span class="stringliteral">" "</span> << By << <span class="stringliteral">" "</span> << Bz << <span class="stringliteral">"\n"</span>;
-      }
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="MagneticField.1.html">MagneticField</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> and <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a49170460b1833722ad9bc45b92c86e5a"></a><!-- doxytag: member="GeographicLib::MagneticCircle::MagneticCircle" ref="a49170460b1833722ad9bc45b92c86e5a" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::MagneticCircle::MagneticCircle </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor for the normal gravity. This sets up an uninitialized object which can be later replaced by the <a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">MagneticModel::Circle</a>. </p>
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00078">78</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a8669d47d20b03e9185d358440d3da9b1"></a><!-- doxytag: member="GeographicLib::MagneticCircle::operator()" ref="a8669d47d20b03e9185d358440d3da9b1" args="(real lon, real &Bx, real &By, real &Bz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::MagneticCircle::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>By</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the geomagnetic field at a particular longitude.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bx</td><td>the easterly component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">By</td><td>the northerly component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bz</td><td>the vertical (up) component of the magnetic field (nanotesla). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00093">93</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac715ae0394bd7f8c23288f80c406e5bc"></a><!-- doxytag: member="GeographicLib::MagneticCircle::operator()" ref="ac715ae0394bd7f8c23288f80c406e5bc" args="(real lon, real &Bx, real &By, real &Bz, real &Bxt, real &Byt, real &Bzt) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::MagneticCircle::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>By</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bz</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bxt</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Byt</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bzt</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the geomagnetic field and their time derivatives at a particular longitude.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bx</td><td>the easterly component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">By</td><td>the northerly component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bz</td><td>the vertical (up) component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bxt</td><td>the rate of change of <em>Bx</em> (nT/yr). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Byt</td><td>the rate of change of <em>By</em> (nT/yr). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bzt</td><td>the rate of change of <em>Bz</em> (nT/yr). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00111">111</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8ec84cd0b1d97b51464ec80d9e2dcf57"></a><!-- doxytag: member="GeographicLib::MagneticCircle::Init" ref="a8ec84cd0b1d97b51464ec80d9e2dcf57" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::MagneticCircle::Init </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if the object has been initialized. </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00123">123</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a78721d381d21f676152394dd576f2e77"></a><!-- doxytag: member="GeographicLib::MagneticCircle::MajorRadius" ref="a78721d381d21f676152394dd576f2e77" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticCircle::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value inherited from the <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00129">129</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4c3fc40a49332ddcd042e5cb41c3cb2a"></a><!-- doxytag: member="GeographicLib::MagneticCircle::Flattening" ref="a4c3fc40a49332ddcd042e5cb41c3cb2a" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticCircle::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value inherited from the <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00135">135</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaf14e89275bffd8253acdbe4840b65d0"></a><!-- doxytag: member="GeographicLib::MagneticCircle::Latitude" ref="aaf14e89275bffd8253acdbe4840b65d0" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticCircle::Latitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the latitude of the circle (degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00140">140</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aadd95eac0650f195e4d7acdc9819716b"></a><!-- doxytag: member="GeographicLib::MagneticCircle::Height" ref="aadd95eac0650f195e4d7acdc9819716b" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticCircle::Height </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the height of the circle (meters). </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00145">145</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a44783c9e44f16bbd48cc5061b30ce8e9"></a><!-- doxytag: member="GeographicLib::MagneticCircle::Time" ref="a44783c9e44f16bbd48cc5061b30ce8e9" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticCircle::Time </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the time (fractional years). </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00150">150</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="af6619ebe4c078705fc49a0d9f950b431"></a><!-- doxytag: member="GeographicLib::MagneticCircle::MagneticModel" ref="af6619ebe4c078705fc49a0d9f950b431" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1MagneticModel.html">MagneticModel</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="MagneticCircle_8hpp_source.html#l00069">69</a> of file <a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="MagneticCircle_8hpp_source.html">MagneticCircle.hpp</a></li>
-<li><a class="el" href="MagneticCircle_8cpp_source.html">MagneticCircle.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1MagneticModel-members.html b/doc/html/classGeographicLib_1_1MagneticModel-members.html
deleted file mode 100644
index b2ffb1f..0000000
--- a/doc/html/classGeographicLib_1_1MagneticModel-members.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1MagneticModel.html">MagneticModel</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::MagneticModel Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">Circle</a>(real t, real lat, real h) const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a230648296f87ff6fc12a3e65ff01bc3b">DateTime</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#ab2ac8cc598c0d9a6b448c9a45e9642d9">DefaultMagneticName</a>()</td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">DefaultMagneticPath</a>()</td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a204e8d3c4ebf6f8c13eb9e1817921ea2">Description</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#af553c42337b9a9a1d51b81fea7083ea2">FieldComponents</a>(real Bx, real By, real Bz, real &H, real &F, real &D, real &I)</td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a54aa849393ab2a7e37aa1f086e64cffb">FieldComponents</a>(real Bx, real By, real Bz, real Bxt, real Byt, real Bzt, real &H, real &F, real &D, real &I, real &Ht, real &Ft, real &Dt, real &It)</td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a38ad95b421f5fbce40abff5733421370">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#aa072d202531c0cacdd7bca128d670705">MagneticFile</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a84a020586d58c4da61ec6ffbc7b4fa37">MagneticModel</a>(const std::string &name, const std::string &path="", const Geocentric &earth=Geocentric::WGS84)</td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [explicit]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a2476aee96f07071de17c24dbbf80f521">MagneticModelDirectory</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#ad500f0d76997b4026b75805fad71dbee">MagneticModelName</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a0b55df676607204a2d44687ffafe8d9e">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a>() const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a550eb1739712fbbae1a167c2559d6dbc">operator()</a>(real t, real lat, real lon, real h, real &Bx, real &By, real &Bz) const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1MagneticModel.html#a11fed1ca7a45947f6f43f6ba7897250f">operator()</a>(real t, real lat, real lon, real h, real &Bx, real &By, real &Bz, real &Bxt, real &Byt, real &Bzt) const </td><td><a class="el" href="classGeographicLib_1_1MagneticModel.html">GeographicLib::MagneticModel</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1MagneticModel.html b/doc/html/classGeographicLib_1_1MagneticModel.html
deleted file mode 100644
index 5cb66ac..0000000
--- a/doc/html/classGeographicLib_1_1MagneticModel.html
+++ /dev/null
@@ -1,911 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::MagneticModel Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1MagneticModel.html">MagneticModel</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::MagneticModel Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::MagneticModel" -->
-<p>Model of the earth's magnetic field.  
- <a href="classGeographicLib_1_1MagneticModel.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="MagneticModel_8hpp_source.html">GeographicLib/MagneticModel.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1MagneticModel-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td colspan="2"><div class="groupHeader">Setting up the magnetic model</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a84a020586d58c4da61ec6ffbc7b4fa37">MagneticModel</a> (const std::string &name, const std::string &path="", const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> &earth=<a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS [...]
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a204e8d3c4ebf6f8c13eb9e1817921ea2">Description</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a230648296f87ff6fc12a3e65ff01bc3b">DateTime</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#aa072d202531c0cacdd7bca128d670705">MagneticFile</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#ad500f0d76997b4026b75805fad71dbee">MagneticModelName</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const std::string & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a2476aee96f07071de17c24dbbf80f521">MagneticModelDirectory</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">MinHeight</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">MaxHeight</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">MinTime</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">MaxTime</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a0b55df676607204a2d44687ffafe8d9e">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a38ad95b421f5fbce40abff5733421370">Flattening</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">DefaultMagneticPath</a> ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#ab2ac8cc598c0d9a6b448c9a45e9642d9">DefaultMagneticName</a> ()</td></tr>
-<tr><td colspan="2"><h2><a name="member-group"></a>
-Compute the magnetic field</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a550eb1739712fbbae1a167c2559d6dbc">operator()</a> (real t, real lat, real lon, real h, real &Bx, real &By, real &Bz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a11fed1ca7a45947f6f43f6ba7897250f">operator()</a> (real t, real lat, real lon, real h, real &Bx, real &By, real &Bz, real &Bxt, real &Byt, real &Bzt) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1MagneticCircle.html">MagneticCircle</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">Circle</a> (real t, real lat, real h) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#af553c42337b9a9a1d51b81fea7083ea2">FieldComponents</a> (real Bx, real By, real Bz, real &H, real &F, real &D, real &I)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html#a54aa849393ab2a7e37aa1f086e64cffb">FieldComponents</a> (real Bx, real By, real Bz, real Bxt, real Byt, real Bzt, real &H, real &F, real &D, real &I, real &Ht, real &Ft, real &Dt, real &It)  throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Model of the earth's magnetic field. </p>
-<p>Evaluate the earth's magnetic field according to a model. At present only internal magnetic fields are handled. These are due to the earth's code and crust; these vary slowly (over many years). Excluded are the effects of currents in the ionosphere and magnetosphere which have daily and annual variations.</p>
-<p>See <a class="el" href="magnetic.html">Magnetic models</a> for details of how to install the magnetic model and the data format.</p>
-<p>See</p>
-<ul>
-<li>General information:<ul>
-<li><a href="http://geomag.org/models/index.html">http://geomag.org/models/index.html</a></li>
-</ul>
-</li>
-<li>WMM2010:<ul>
-<li><a href="http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml">http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml</a></li>
-<li><a href="http://ngdc.noaa.gov/geomag/WMM/data/WMM2010/WMM2010COF.zip">http://ngdc.noaa.gov/geomag/WMM/data/WMM2010/WMM2010COF.zip</a></li>
-</ul>
-</li>
-<li>IGRF11:<ul>
-<li><a href="http://ngdc.noaa.gov/IAGA/vmod/igrf.html">http://ngdc.noaa.gov/IAGA/vmod/igrf.html</a></li>
-<li><a href="http://ngdc.noaa.gov/IAGA/vmod/igrf11coeffs.txt">http://ngdc.noaa.gov/IAGA/vmod/igrf11coeffs.txt</a></li>
-<li><a href="http://ngdc.noaa.gov/IAGA/vmod/geomag70_linux.tar.gz">http://ngdc.noaa.gov/IAGA/vmod/geomag70_linux.tar.gz</a></li>
-</ul>
-</li>
-<li>EMM2010:<ul>
-<li><a href="http://ngdc.noaa.gov/geomag/EMM/index.html">http://ngdc.noaa.gov/geomag/EMM/index.html</a></li>
-<li><a href="http://ngdc.noaa.gov/geomag/EMM/data/geomag/EMM2010_Sph_Windows_Linux.zip">http://ngdc.noaa.gov/geomag/EMM/data/geomag/EMM2010_Sph_Windows_Linux.zip</a></li>
-</ul>
-</li>
-</ul>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::MagneticModel class</span>
-<span class="comment">// $Id: ab27b155755e540d29e5e6bf550df8cdb00c74ba $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="MagneticModel_8hpp.html" title="Header for GeographicLib::MagneticModel class.">GeographicLib/MagneticModel.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> mag(<span class="stringliteral">"wmm2010"</span>);
-    <span class="keywordtype">double</span> lat = 27.99, lon = 86.93, h = 8820, t = 2012; <span class="comment">// Mt Everest</span>
-    <span class="keywordtype">double</span> Bx, By, Bz;
-    mag(t, lat,lon, h, Bx, By, Bz);
-    <span class="keywordtype">double</span> H, F, D, I;
-    <a class="code" href="classGeographicLib_1_1MagneticModel.html#af553c42337b9a9a1d51b81fea7083ea2">MagneticModel::FieldComponents</a>(Bx, By, Bz, H, F, D, I);
-    cout << H << <span class="stringliteral">" "</span> << F << <span class="stringliteral">" "</span> << D << <span class="stringliteral">" "</span> << I << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="MagneticField.1.html">MagneticField</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> and <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a84a020586d58c4da61ec6ffbc7b4fa37"></a><!-- doxytag: member="GeographicLib::MagneticModel::MagneticModel" ref="a84a020586d58c4da61ec6ffbc7b4fa37" args="(const std::string &name, const std::string &path="", const Geocentric &earth=Geocentric::WGS84)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::MagneticModel::MagneticModel </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>name</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>path</em> = <code>""</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> & </td>
-          <td class="paramname"><em>earth</em> = <code><a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a></code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [explicit]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Construct a magnetic model.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">name</td><td>the name of the model. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">path</td><td>(optional) directory for data file. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">earth</td><td>(optional) <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> object for converting coordinates; default <a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">Geocentric::WGS84</a>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>A filename is formed by appending ".wmm" (World Magnetic Model) to the name. If <em>path</em> is specified (and is non-empty), then the file is loaded from directory, <em>path</em>. Otherwise the path is given by the <a class="el" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">DefaultMagneticPath()</a>. This may throw an exception because the file does not exist, is unreadable, or is corrupt.</p>
-<p>This file contains the metadata which specifies the properties of the model. The coefficients for the spherical harmonic sums are obtained from a file obtained by appending ".cof" to metadata file (so the filename ends in ".wwm.cof").</p>
-<p>The model is not tied to a particular ellipsoidal model of the earth. The final earth argument to the constructor specify an ellipsoid to allow geodetic coordinates to the transformed into the spherical coordinates used in the spherical harmonic sum. </p>
-
-<p>Definition at line <a class="el" href="MagneticModel_8cpp_source.html#l00044">44</a> of file <a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a>.</p>
-
-<p>References <a class="el" href="MagneticModel_8cpp_source.html#l00237">DefaultMagneticPath()</a>, and <a class="el" href="SphericalEngine_8cpp_source.html#l00382">GeographicLib::SphericalEngine::coeff::readcoeffs()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a550eb1739712fbbae1a167c2559d6dbc"></a><!-- doxytag: member="GeographicLib::MagneticModel::operator()" ref="a550eb1739712fbbae1a167c2559d6dbc" args="(real t, real lat, real lon, real h, real &Bx, real &By, real &Bz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::MagneticModel::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>t</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>By</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the geomagnetic field.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">t</td><td>the time (years). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>the height of the point above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bx</td><td>the easterly component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">By</td><td>the northerly component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bz</td><td>the vertical (up) component of the magnetic field (nanotesla). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00131">131</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a11fed1ca7a45947f6f43f6ba7897250f"></a><!-- doxytag: member="GeographicLib::MagneticModel::operator()" ref="a11fed1ca7a45947f6f43f6ba7897250f" args="(real t, real lat, real lon, real h, real &Bx, real &By, real &Bz, real &Bxt, real &Byt, real &Bzt) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::MagneticModel::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>t</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>By</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bz</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bxt</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Byt</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Bzt</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the geomagnetic field and their time derivatives</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">t</td><td>the time (years). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>the height of the point above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bx</td><td>the easterly component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">By</td><td>the northerly component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bz</td><td>the vertical (up) component of the magnetic field (nanotesla). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bxt</td><td>the rate of change of <em>Bx</em> (nT/yr). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Byt</td><td>the rate of change of <em>By</em> (nT/yr). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Bzt</td><td>the rate of change of <em>Bz</em> (nT/yr). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00153">153</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae4275d73128fc2c6c62f53677ce70bd5"></a><!-- doxytag: member="GeographicLib::MagneticModel::Circle" ref="ae4275d73128fc2c6c62f53677ce70bd5" args="(real t, real lat, real h) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1MagneticCircle.html">MagneticCircle</a> GeographicLib::MagneticModel::Circle </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>t</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Create a <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a> object to allow the geomagnetic field at many points with constant <em>lat</em>, <em>h</em>, and <em>t</em> and varying <em>lon</em> to be computed efficiently.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">t</td><td>the time (years). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>the height of the point above the ellipsoid (meters). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>a <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a> object whose MagneticCircle::operator()(real lon) member function computes the field at particular values of <em>lon</em>.</dd></dl>
-<p>If the field at several points on a circle of latitude need to be calculated then creating a <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">MagneticCircle</a> and using its member functions will be substantially faster, especially for high-degree models. </p>
-
-<p>Definition at line <a class="el" href="MagneticModel_8cpp_source.html#l00207">207</a> of file <a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af553c42337b9a9a1d51b81fea7083ea2"></a><!-- doxytag: member="GeographicLib::MagneticModel::FieldComponents" ref="af553c42337b9a9a1d51b81fea7083ea2" args="(real Bx, real By, real Bz, real &H, real &F, real &D, real &I)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::MagneticModel::FieldComponents </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Bx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>By</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Bz</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>H</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>F</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>D</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>I</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute various quantities dependent on the magnetic field.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">Bx</td><td>the <em>x</em> (easterly) component of the magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">By</td><td>the <em>y</em> (northerly) component of the magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Bz</td><td>the <em>z</em> (vertical, up positive) component of the magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">H</td><td>the horizontal magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">F</td><td>the total magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">D</td><td>the declination of the field (degrees east of north). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">I</td><td>the inclination of the field (degrees down from horizontal). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00190">190</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a54aa849393ab2a7e37aa1f086e64cffb"></a><!-- doxytag: member="GeographicLib::MagneticModel::FieldComponents" ref="a54aa849393ab2a7e37aa1f086e64cffb" args="(real Bx, real By, real Bz, real Bxt, real Byt, real Bzt, real &H, real &F, real &D, real &I, real &Ht, real &Ft, real &Dt, real &It)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::MagneticModel::FieldComponents </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Bx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>By</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Bz</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Bxt</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Byt</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Bzt</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>H</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>F</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>D</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>I</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Ht</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Ft</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>Dt</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>It</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute various quantities dependent on the magnetic field and its rate of change.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">Bx</td><td>the <em>x</em> (easterly) component of the magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">By</td><td>the <em>y</em> (northerly) component of the magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Bz</td><td>the <em>z</em> (vertical, up positive) component of the magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Bxt</td><td>the rate of change of <em>Bx</em> (nT/yr). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Byt</td><td>the rate of change of <em>By</em> (nT/yr). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Bzt</td><td>the rate of change of <em>Bz</em> (nT/yr). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">H</td><td>the horizontal magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">F</td><td>the total magnetic field (nT). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">D</td><td>the declination of the field (degrees east of north). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">I</td><td>the inclination of the field (degrees down from horizontal). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Ht</td><td>the rate of change of <em>H</em> (nT/yr). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Ft</td><td>the rate of change of <em>F</em> (nT/yr). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">Dt</td><td>the rate of change of <em>D</em> (degrees/yr). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">It</td><td>the rate of change of <em>I</em> (degrees/yr). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8cpp_source.html#l00222">222</a> of file <a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>, and <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a204e8d3c4ebf6f8c13eb9e1817921ea2"></a><!-- doxytag: member="GeographicLib::MagneticModel::Description" ref="a204e8d3c4ebf6f8c13eb9e1817921ea2" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::MagneticModel::Description </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the description of the magnetic model, if available, from the Description file in the data file; if absent, return "NONE". </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00231">231</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a230648296f87ff6fc12a3e65ff01bc3b"></a><!-- doxytag: member="GeographicLib::MagneticModel::DateTime" ref="a230648296f87ff6fc12a3e65ff01bc3b" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::MagneticModel::DateTime </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>date of the model, if available, from the ReleaseDate field in the data file; if absent, return "UNKNOWN". </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00237">237</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa072d202531c0cacdd7bca128d670705"></a><!-- doxytag: member="GeographicLib::MagneticModel::MagneticFile" ref="aa072d202531c0cacdd7bca128d670705" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::MagneticModel::MagneticFile </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>full file name used to load the magnetic model. </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00242">242</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad500f0d76997b4026b75805fad71dbee"></a><!-- doxytag: member="GeographicLib::MagneticModel::MagneticModelName" ref="ad500f0d76997b4026b75805fad71dbee" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::MagneticModel::MagneticModelName </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>"name" used to load the magnetic model (from the first argument of the constructor, but this may be overridden by the model file). </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00248">248</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2476aee96f07071de17c24dbbf80f521"></a><!-- doxytag: member="GeographicLib::MagneticModel::MagneticModelDirectory" ref="a2476aee96f07071de17c24dbbf80f521" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const std::string& GeographicLib::MagneticModel::MagneticModelDirectory </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>directory used to load the magnetic model. </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00253">253</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8a170290542bf8e694cda4b4d329c881"></a><!-- doxytag: member="GeographicLib::MagneticModel::MinHeight" ref="a8a170290542bf8e694cda4b4d329c881" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticModel::MinHeight </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the minimum height above the ellipsoid (in meters) for which this <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> should be used.</dd></dl>
-<p>Because the model will typically provide useful results slightly outside the range of allowed heights, no check of <em>t</em> argument is made by <a class="el" href="classGeographicLib_1_1MagneticModel.html#a550eb1739712fbbae1a167c2559d6dbc">MagneticModel::operator()()</a> or <a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">MagneticModel::Circle</a>. </p>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00264">264</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a41e16617bc2cdd89ab7b7a02b4bd4dcf"></a><!-- doxytag: member="GeographicLib::MagneticModel::MaxHeight" ref="a41e16617bc2cdd89ab7b7a02b4bd4dcf" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticModel::MaxHeight </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the maximum height above the ellipsoid (in meters) for which this <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> should be used.</dd></dl>
-<p>Because the model will typically provide useful results slightly outside the range of allowed heights, no check of <em>t</em> argument is made by <a class="el" href="classGeographicLib_1_1MagneticModel.html#a550eb1739712fbbae1a167c2559d6dbc">MagneticModel::operator()()</a> or <a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">MagneticModel::Circle</a>. </p>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00275">275</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1e8624990112edc3c6503c9c9acb9309"></a><!-- doxytag: member="GeographicLib::MagneticModel::MinTime" ref="a1e8624990112edc3c6503c9c9acb9309" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticModel::MinTime </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the minimum time (in years) for which this <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> should be used.</dd></dl>
-<p>Because the model will typically provide useful results slightly outside the range of allowed times, no check of <em>t</em> argument is made by <a class="el" href="classGeographicLib_1_1MagneticModel.html#a550eb1739712fbbae1a167c2559d6dbc">MagneticModel::operator()()</a> or <a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">MagneticModel::Circle</a>. </p>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00286">286</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5d538204401200c87b37cdc37509311a"></a><!-- doxytag: member="GeographicLib::MagneticModel::MaxTime" ref="a5d538204401200c87b37cdc37509311a" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticModel::MaxTime </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the maximum time (in years) for which this <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> should be used.</dd></dl>
-<p>Because the model will typically provide useful results slightly outside the range of allowed times, no check of <em>t</em> argument is made by <a class="el" href="classGeographicLib_1_1MagneticModel.html#a550eb1739712fbbae1a167c2559d6dbc">MagneticModel::operator()()</a> or <a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">MagneticModel::Circle</a>. </p>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00297">297</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0b55df676607204a2d44687ffafe8d9e"></a><!-- doxytag: member="GeographicLib::MagneticModel::MajorRadius" ref="a0b55df676607204a2d44687ffafe8d9e" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticModel::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value of <em>a</em> inherited from the <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00304">304</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a38ad95b421f5fbce40abff5733421370"></a><!-- doxytag: member="GeographicLib::MagneticModel::Flattening" ref="a38ad95b421f5fbce40abff5733421370" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::MagneticModel::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="MagneticModel_8hpp_source.html#l00310">310</a> of file <a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a469db97d257876c1abafa3da3c5f0f7e"></a><!-- doxytag: member="GeographicLib::MagneticModel::DefaultMagneticPath" ref="a469db97d257876c1abafa3da3c5f0f7e" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string GeographicLib::MagneticModel::DefaultMagneticPath </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the default path for magnetic model data files.</dd></dl>
-<p>This is the value of the environment variable MAGNETIC_PATH, if set; otherwise, it is $GEOGRAPHICLIB_DATA/magnetic if the environment variable GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default (/usr/local/share/GeographicLib/magnetic on non-Windows systems and C:/Documents and Settings/All Users/Application Data/GeographicLib/magnetic on Windows systems). </p>
-
-<p>Definition at line <a class="el" href="MagneticModel_8cpp_source.html#l00237">237</a> of file <a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a>.</p>
-
-<p>References <a class="el" href="MagneticModel_8cpp_source.html#l00027">GEOGRAPHICLIB_DATA</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>, and <a class="el" href="MagneticModel_8cpp_source.html#l00044">MagneticModel()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab2ac8cc598c0d9a6b448c9a45e9642d9"></a><!-- doxytag: member="GeographicLib::MagneticModel::DefaultMagneticName" ref="ab2ac8cc598c0d9a6b448c9a45e9642d9" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string GeographicLib::MagneticModel::DefaultMagneticName </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the default name for the magnetic model.</dd></dl>
-<p>This is the value of the environment variable MAGNETIC_NAME, if set, otherwise, it is "wmm2010". The <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> class does not use this function; it is just provided as a convenience for a calling program when constructing a <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">MagneticModel</a> object. </p>
-
-<p>Definition at line <a class="el" href="MagneticModel_8cpp_source.html#l00250">250</a> of file <a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a>.</p>
-
-<p>References <a class="el" href="MagneticModel_8cpp_source.html#l00032">MAGNETIC_DEFAULT_NAME</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="MagneticModel_8hpp_source.html">MagneticModel.hpp</a></li>
-<li><a class="el" href="MagneticModel_8cpp_source.html">MagneticModel.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Math-members.html b/doc/html/classGeographicLib_1_1Math-members.html
deleted file mode 100644
index 3cb8dc5..0000000
--- a/doc/html/classGeographicLib_1_1Math-members.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Math.html">Math</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::Math Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">asinh</a>(T x)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">atanh</a>(T x)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">bigendian</a></td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">cbrt</a>(T x)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a0f3b4ea16cc2cb21557555fca3b1c201">degree</a>()</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a5bb8bea024e11eb402ecbcf9bae28bb5">degree</a>()</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a2fd4e8930d9dd953352d25fc184d843e">expm1</a>(T x)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a436f350a6a9539e176dda19d0e4811f8">extended</a> typedef</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">hypot</a>(T x, T y)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a82ccc01be301f14061c681ee93a5120b">infinity</a>()</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a1606218c36b8d7c60a5ad5847a94ab9c">infinity</a>()</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">isfinite</a>(T x)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">isnan</a>(T x)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">log1p</a>(T x)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">NaN</a>()</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a28304be9b5cb17eeb7413b059604a154">NaN</a>()</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#aca1580c771e7019bfe826512fba9b2f1">pi</a>()</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#abb031de2a30d6fbac4c634b344e46df4">pi</a>()</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> typedef</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">sq</a>(T x)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Math.html#aec7f95c2bb99422f1f047cb628a232f8">swab</a>(T x)</td><td><a class="el" href="classGeographicLib_1_1Math.html">GeographicLib::Math</a></td><td><code> [inline, static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Math.html b/doc/html/classGeographicLib_1_1Math.html
deleted file mode 100644
index 1837c88..0000000
--- a/doc/html/classGeographicLib_1_1Math.html
+++ /dev/null
@@ -1,769 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::Math Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Math.html">Math</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::Math Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::Math" -->
-<p>Mathematical functions needed by GeographicLib.  
- <a href="classGeographicLib_1_1Math.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="Math_8hpp_source.html">GeographicLib/Math.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1Math-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a436f350a6a9539e176dda19d0e4811f8">extended</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a></td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#aca1580c771e7019bfe826512fba9b2f1">pi</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#abb031de2a30d6fbac4c634b344e46df4">pi</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a0f3b4ea16cc2cb21557555fca3b1c201">degree</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a5bb8bea024e11eb402ecbcf9bae28bb5">degree</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">sq</a> (T x)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">hypot</a> (T x, T y)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a2fd4e8930d9dd953352d25fc184d843e">expm1</a> (T x)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">log1p</a> (T x)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">asinh</a> (T x)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">atanh</a> (T x)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">cbrt</a> (T x)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">isfinite</a> (T x)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">NaN</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a28304be9b5cb17eeb7413b059604a154">NaN</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">isnan</a> (T x)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a82ccc01be301f14061c681ee93a5120b">infinity</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#a1606218c36b8d7c60a5ad5847a94ab9c">infinity</a> ()  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#aec7f95c2bb99422f1f047cb628a232f8">swab</a> (T x)</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">bigendian</a> = WORDS_BIGENDIAN</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Mathematical functions needed by GeographicLib. </p>
-<p>Define mathematical functions in order to localize system dependencies and to provide generic versions of the functions. In addition define a real type to be used by GeographicLib.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::Math class</span>
-<span class="comment">// $Id: 04519bb67e82229a86ee23002ddc27a6b5bb2939 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="Math_8hpp.html" title="Header for GeographicLib::Math class.">GeographicLib/Math.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    cout << <a class="code" href="classGeographicLib_1_1Math.html#aca1580c771e7019bfe826512fba9b2f1">Math::pi</a>() << <span class="stringliteral">" "</span> << <a class="code" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">Math::sq</a>(<a class="code" href="classGeographicLib_1_1Math.html#aca1580c771e7019bfe826512fba9b2f1">Math::pi</a>()) << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Typedef Documentation</h2>
-<a class="anchor" id="a436f350a6a9539e176dda19d0e4811f8"></a><!-- doxytag: member="GeographicLib::Math::extended" ref="a436f350a6a9539e176dda19d0e4811f8" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef double <a class="el" href="classGeographicLib_1_1Math.html#a436f350a6a9539e176dda19d0e4811f8">GeographicLib::Math::extended</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00077">77</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aeee4778d7cf2f9fb9648efe4911da59d"></a><!-- doxytag: member="GeographicLib::Math::real" ref="aeee4778d7cf2f9fb9648efe4911da59d" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef double <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">GeographicLib::Math::real</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The real type for GeographicLib. Nearly all the testing has been done with <em>real</em> = double. However, the algorithms should also work with float and long double (where available). (<b>CAUTION</b>: reasonable accuracy typically cannot be obtained using floats.) </p>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00087">87</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="aca1580c771e7019bfe826512fba9b2f1"></a><!-- doxytag: member="GeographicLib::Math::pi" ref="aca1580c771e7019bfe826512fba9b2f1" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::pi </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>pi</em>. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00105">105</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="abb031de2a30d6fbac4c634b344e46df4"></a><!-- doxytag: member="GeographicLib::Math::pi" ref="abb031de2a30d6fbac4c634b344e46df4" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> GeographicLib::Math::pi </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Math.html#aca1580c771e7019bfe826512fba9b2f1">pi<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00110">110</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0f3b4ea16cc2cb21557555fca3b1c201"></a><!-- doxytag: member="GeographicLib::Math::degree" ref="a0f3b4ea16cc2cb21557555fca3b1c201" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::degree </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of radians in a degree. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00116">116</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5bb8bea024e11eb402ecbcf9bae28bb5"></a><!-- doxytag: member="GeographicLib::Math::degree" ref="a5bb8bea024e11eb402ecbcf9bae28bb5" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> GeographicLib::Math::degree </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Math.html#a0f3b4ea16cc2cb21557555fca3b1c201">degree<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00121">121</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6a092f38e231c80a1f144814c90f1895"></a><!-- doxytag: member="GeographicLib::Math::sq" ref="a6a092f38e231c80a1f144814c90f1895" args="(T x)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::sq </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Square a number.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument and the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>x</em><sup>2</sup>. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00130">130</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="AlbersEqualArea_8cpp_source.html#l00379">GeographicLib::AlbersEqualArea::Forward()</a>, <a class="el" href="AlbersEqualArea_8cpp_source.html#l00409">GeographicLib::AlbersEqualArea::Reverse()</a>, <a class="el" href="AlbersEqualArea_8cpp_source.html#l00439">GeographicLib::AlbersEqualArea::SetScale()</a>, <a class="el" href="Geodesic_8cpp_source.html#l00123">GeographicLib::Geodesic::GenInverse()</a>, <a class="el" href="GravityModel_8cpp_source.html#l00 [...]
-
-</div>
-</div>
-<a class="anchor" id="a62b6fca06c571481aafba3f1716a8bb2"></a><!-- doxytag: member="GeographicLib::Math::hypot" ref="a62b6fca06c571481aafba3f1716a8bb2" args="(T x, T y)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::hypot </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The hypotenuse function avoiding underflow and overflow.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the arguments and the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>sqrt(<em>x</em><sup>2</sup> + <em>y</em><sup>2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00142">142</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="AlbersEqualArea_8cpp_source.html#l00409">GeographicLib::AlbersEqualArea::Reverse()</a>, <a class="el" href="Geodesic_8cpp_source.html#l00123">GeographicLib::Geodesic::GenInverse()</a>, <a class="el" href="GravityModel_8cpp_source.html#l00250">GeographicLib::GravityModel::SphericalAnomaly()</a>, <a class="el" href="GravityModel_8cpp_source.html#l00277">GeographicLib::GravityModel::GeoidHeight()</a>, <a class="el" href="GravityModel_8cpp_source.html#l00 [...]
-
-</div>
-</div>
-<a class="anchor" id="a2fd4e8930d9dd953352d25fc184d843e"></a><!-- doxytag: member="GeographicLib::Math::expm1" ref="a2fd4e8930d9dd953352d25fc184d843e" args="(T x)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::expm1 </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>exp(<em>x</em>) - 1 accurate near <em>x</em> = 0. This is taken from N. J. Higham, Accuracy and Stability of Numerical Algorithms, 2nd Edition (SIAM, 2002), Sec 1.14.1, p 19.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument and the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>exp(<em>x</em>) - 1. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00189">189</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a90eddd5a6d0c9dcc4a9f18dd647ac520"></a><!-- doxytag: member="GeographicLib::Math::log1p" ref="a90eddd5a6d0c9dcc4a9f18dd647ac520" args="(T x)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::log1p </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>log(1 + <em>x</em>) accurate near <em>x</em> = 0.</p>
-<p>This is taken from D. Goldberg, <a href="http://dx.doi.org/10.1145/103162.103163">What every computer scientist should know about floating-point arithmetic</a> (1991), Theorem 4. See also, Higham (op. cit.), Answer to Problem 1.5, p 528.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument and the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>log(1 + <em>x</em>). </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00224">224</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="LambertConformalConic_8cpp_source.html#l00371">GeographicLib::LambertConformalConic::Reverse()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aba75669f9d52fc672a8faaf69261bd8a"></a><!-- doxytag: member="GeographicLib::Math::asinh" ref="aba75669f9d52fc672a8faaf69261bd8a" args="(T x)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::asinh </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The inverse hyperbolic sine function. This is defined in terms of <a class="el" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">Math::log1p</a>(<em>x</em>) in order to maintain accuracy near <em>x</em> = 0. In addition, the odd parity of the function is enforced.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument and the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>asinh(<em>x</em>). </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00256">256</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="LambertConformalConic_8cpp_source.html#l00324">GeographicLib::LambertConformalConic::Forward()</a>, and <a class="el" href="TransverseMercator_8cpp_source.html#l00217">GeographicLib::TransverseMercator::Forward()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a372ac604592d9de9cf608cfdfc463447"></a><!-- doxytag: member="GeographicLib::Math::atanh" ref="a372ac604592d9de9cf608cfdfc463447" args="(T x)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::atanh </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The inverse hyperbolic tangent function. This is defined in terms of <a class="el" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">Math::log1p</a>(<em>x</em>) in order to maintain accuracy near <em>x</em> = 0. In addition, the odd parity of the function is enforced.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument and the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>atanh(<em>x</em>). </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00283">283</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a04b87b033b845f4812a5700661c64a2a"></a><!-- doxytag: member="GeographicLib::Math::cbrt" ref="a04b87b033b845f4812a5700661c64a2a" args="(T x)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::cbrt </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The cube root function.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument and the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the real cube root of <em>x</em>. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00308">308</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af61f7360e67c35131d80083e7b53dda8"></a><!-- doxytag: member="GeographicLib::Math::isfinite" ref="af61f7360e67c35131d80083e7b53dda8" args="(T x)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static bool GeographicLib::Math::isfinite </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Test for finiteness.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if number is finite, false if NaN or infinite. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00330">330</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="AlbersEqualArea_8cpp_source.html#l00031">GeographicLib::AlbersEqualArea::AlbersEqualArea()</a>, <a class="el" href="AlbersEqualArea_8cpp_source.html#l00439">GeographicLib::AlbersEqualArea::SetScale()</a>, <a class="el" href="Geocentric_8cpp_source.html#l00022">GeographicLib::Geocentric::Geocentric()</a>, <a class="el" href="Geodesic_8cpp_source.html#l00054">GeographicLib::Geodesic::Geodesic()</a>, <a class="el" href="LambertConformalConic_8cpp_source. [...]
-
-</div>
-</div>
-<a class="anchor" id="ad1dc13a367125d3f8d291eaa98339186"></a><!-- doxytag: member="GeographicLib::Math::NaN" ref="ad1dc13a367125d3f8d291eaa98339186" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::NaN </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The NaN (not a number)</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>NaN if available, otherwise return the max real. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00346">346</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a28304be9b5cb17eeb7413b059604a154"></a><!-- doxytag: member="GeographicLib::Math::NaN" ref="a28304be9b5cb17eeb7413b059604a154" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> GeographicLib::Math::NaN </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">NaN<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00354">354</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a554d35e9f54bf304447833a21ee2047c"></a><!-- doxytag: member="GeographicLib::Math::isnan" ref="a554d35e9f54bf304447833a21ee2047c" args="(T x)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static bool GeographicLib::Math::isnan </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Test for NaN.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if argument is a NaN. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00363">363</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoidEval_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a82ccc01be301f14061c681ee93a5120b"></a><!-- doxytag: member="GeographicLib::Math::infinity" ref="a82ccc01be301f14061c681ee93a5120b" args="()" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::infinity </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Infinity</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>infinity if available, otherwise return the max real. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00377">377</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1606218c36b8d7c60a5ad5847a94ab9c"></a><!-- doxytag: member="GeographicLib::Math::infinity" ref="a1606218c36b8d7c60a5ad5847a94ab9c" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">real</a> GeographicLib::Math::infinity </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A synonym for <a class="el" href="classGeographicLib_1_1Math.html#a82ccc01be301f14061c681ee93a5120b">infinity<real>()</a>. </p>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00385">385</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aec7f95c2bb99422f1f047cb628a232f8"></a><!-- doxytag: member="GeographicLib::Math::swab" ref="aec7f95c2bb99422f1f047cb628a232f8" args="(T x)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Math::swab </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em></td><td>)</td>
-          <td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Swap the bytes of a quantity</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument and the returned value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>x with its bytes swapped. </dd></dl>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00394">394</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Data Documentation</h2>
-<a class="anchor" id="ab14e512a1867b98ecb38e9175426596c"></a><!-- doxytag: member="GeographicLib::Math::bigendian" ref="ab14e512a1867b98ecb38e9175426596c" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const bool <a class="el" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">GeographicLib::Math::bigendian</a> = WORDS_BIGENDIAN<code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>true if the machine is big-endian </p>
-
-<p>Definition at line <a class="el" href="Math_8hpp_source.html#l00099">99</a> of file <a class="el" href="Math_8hpp_source.html">Math.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Utility_8hpp_source.html#l00372">GeographicLib::Utility::readarray()</a>, and <a class="el" href="Utility_8hpp_source.html#l00435">GeographicLib::Utility::writearray()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="Math_8hpp_source.html">Math.hpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1NormalGravity-members.html b/doc/html/classGeographicLib_1_1NormalGravity-members.html
deleted file mode 100644
index d39765b..0000000
--- a/doc/html/classGeographicLib_1_1NormalGravity-members.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::NormalGravity Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#aefd6dfb7e6f806b63d099316dcc97f55">AngularVelocity</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#aa52b03157eb0b199d331d6fca28a259a">DynamicalFormFactor</a>(int n=2) const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#ab15ded1ab7ec9a30e8053fc330ed76ac">Earth</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a3610ec908c7b168b39f00946e2fc3fad">EquatorialGravity</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#aba396954f43e623e755bdff7db7d850b">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#acfca8d6e44778501b54cd0b38dbbddde">Gravity</a>(real lat, real h, real &gammay, real &gammaz) const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a7e9329f7b3120b7777a0c5be3ca424a7">GravityFlattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#ada1db1d9f480d8044753ed869c995519">GravityModel</a> class</td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a78cf6878967ad52adadbe06b5f7c4146">GRS80</a></td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a1d96cafc362959215eaa553a712b6908">Init</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a9155d22c5a64a7ef346ce7f590a6264f">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a3c6693dc7efe04cdbed408b2510c69da">MassConstant</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#af625bbc7df2d36ba5c43c8f20f61c134">NormalGravity</a>(real a, real GM, real omega, real f, real J2)</td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a55f749c3bb3e9d19626105041bf1b6fb">NormalGravity</a>()</td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#af0f50fd88d8b647a1b7bb209a4cfae0f">Phi</a>(real X, real Y, real &fX, real &fY) const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a3079310d3a7af97ccb50b91be01d5a50">PolarGravity</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a019541fea3712f8ca73aec8a0b29c71c">SurfaceGravity</a>(real lat) const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a5bc3756dd7dbc82c07ef4afd1a182372">SurfacePotential</a>() const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">U</a>(real X, real Y, real Z, real &gammaX, real &gammaY, real &gammaZ) const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#aa656e36306bc396ac6d32dcdfc2069a2">V0</a>(real X, real Y, real Z, real &GammaX, real &GammaY, real &GammaZ) const </td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1NormalGravity.html#a70c328a95e05964180106d89c2583b78">WGS84</a></td><td><a class="el" href="classGeographicLib_1_1NormalGravity.html">GeographicLib::NormalGravity</a></td><td><code> [static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1NormalGravity.html b/doc/html/classGeographicLib_1_1NormalGravity.html
deleted file mode 100644
index dee56c4..0000000
--- a/doc/html/classGeographicLib_1_1NormalGravity.html
+++ /dev/null
@@ -1,801 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::NormalGravity Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-static-attribs">Static Public Attributes</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::NormalGravity Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::NormalGravity" -->
-<p>The normal gravity of the earth.  
- <a href="classGeographicLib_1_1NormalGravity.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="NormalGravity_8hpp_source.html">GeographicLib/NormalGravity.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1NormalGravity-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td colspan="2"><div class="groupHeader">Setting up the normal gravity</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#af625bbc7df2d36ba5c43c8f20f61c134">NormalGravity</a> (real a, real GM, real omega, real f, real J2)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a55f749c3bb3e9d19626105041bf1b6fb">NormalGravity</a> ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Compute the gravity</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a019541fea3712f8ca73aec8a0b29c71c">SurfaceGravity</a> (real lat) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#acfca8d6e44778501b54cd0b38dbbddde">Gravity</a> (real lat, real h, real &gammay, real &gammaz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">U</a> (real X, real Y, real Z, real &gammaX, real &gammaY, real &gammaZ) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#aa656e36306bc396ac6d32dcdfc2069a2">V0</a> (real X, real Y, real Z, real &GammaX, real &GammaY, real &GammaZ) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#af0f50fd88d8b647a1b7bb209a4cfae0f">Phi</a> (real X, real Y, real &fX, real &fY) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a1d96cafc362959215eaa553a712b6908">Init</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a9155d22c5a64a7ef346ce7f590a6264f">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a3c6693dc7efe04cdbed408b2510c69da">MassConstant</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#aa52b03157eb0b199d331d6fca28a259a">DynamicalFormFactor</a> (int n=2) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#aefd6dfb7e6f806b63d099316dcc97f55">AngularVelocity</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#aba396954f43e623e755bdff7db7d850b">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a3610ec908c7b168b39f00946e2fc3fad">EquatorialGravity</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a3079310d3a7af97ccb50b91be01d5a50">PolarGravity</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a7e9329f7b3120b7777a0c5be3ca424a7">GravityFlattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a5bc3756dd7dbc82c07ef4afd1a182372">SurfacePotential</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#ab15ded1ab7ec9a30e8053fc330ed76ac">Earth</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a70c328a95e05964180106d89c2583b78">WGS84</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#a78cf6878967ad52adadbe06b5f7c4146">GRS80</a></td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html#ada1db1d9f480d8044753ed869c995519">GravityModel</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>The normal gravity of the earth. </p>
-<p>"Normal" gravity refers to an idealization of the earth which is modeled as an rotating ellipsoid. The eccentricity of the ellipsoid, the rotation speed, and the distribution of mass within the ellipsoid are such that the surface of the ellipsoid is a surface of constant potential (gravitational plus centrifugal). The acceleration due to gravity is therefore perpendicular to the surface of the ellipsoid.</p>
-<p>There is a closed solution to this problem which is implemented here. Series "approximations" are only used to evaluate certain combinations of elementary functions where use of the closed expression results in a loss of accuracy for small arguments due to cancellation of the two leading terms. However these series include sufficient terms to give full machine precision.</p>
-<p>Definitions:</p>
-<ul>
-<li><em>V</em><sub>0</sub>, the gravitational contribution to the normal potential;</li>
-<li><em>Phi</em>, the rotational contribution to the normal potential;</li>
-<li><em>U</em> = <em>V</em><sub>0</sub> + <em>Phi</em>, the total potential;</li>
-<li><b>Gamma</b> = <b>grad</b> <em>V</em><sub>0</sub>, the acceleration due to mass of the earth;</li>
-<li><b>f</b> = <b>grad</b> <em>Phi</em>, the centrifugal acceleration;</li>
-<li><b>gamma</b> = <b>grad</b> <em>U</em> = <b>Gamma</b> + <b>f</b>, the normal acceleration;</li>
-<li><em>X</em>, <em>Y</em>, <em>Z</em>, geocentric coordinates;</li>
-<li><em>x</em>, <em>y</em>, <em>z</em>, local cartesian coordinates used to denote the east, north and up directions.</li>
-</ul>
-<p>References:</p>
-<ul>
-<li>W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San Francisco, 1967), Secs. 1-19, 2-7, 2-8 (2-9, 2-10), 6-2 (6-3).</li>
-<li>H. Moritz, Geodetic Reference System 1980, J. Geod. 54(3), 395-405 (1980) <a href="http://dx.doi.org/10.1007/BF02521480">http://dx.doi.org/10.1007/BF02521480</a></li>
-</ul>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::NormalGravity class</span>
-<span class="comment">// $Id: 8d0337072d40334e8147a50b1e6035d75d38c53c $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="NormalGravity_8hpp.html" title="Header for GeographicLib::NormalGravity class.">GeographicLib/NormalGravity.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a> grav(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), Constants::WGS84_GM<double>(),
-                       Constants::WGS84_omega<double>(),
-                       <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>(), 0);
-    <span class="comment">// Alternatively: const NormalGravity& grav = NormalGravity::WGS84;</span>
-    <span class="keywordtype">double</span> lat = 27.99, h = 8820; <span class="comment">// Mt Everest</span>
-    <span class="keywordtype">double</span> gammay, gammaz;
-    grav.Gravity(lat, h, gammay, gammaz);
-    cout << gammay << <span class="stringliteral">" "</span> << gammaz << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="af625bbc7df2d36ba5c43c8f20f61c134"></a><!-- doxytag: member="GeographicLib::NormalGravity::NormalGravity" ref="af625bbc7df2d36ba5c43c8f20f61c134" args="(real a, real GM, real omega, real f, real J2)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::NormalGravity::NormalGravity </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>GM</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>omega</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>J2</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for the normal gravity.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">GM</td><td>mass constant of the ellipsoid (meters<sup>3</sup>/seconds<sup>2</sup>); this is the product of <em>G</em> the gravitational constant and <em>M</em> the mass of the earth (usually including the mass of the earth's atmosphere). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">omega</td><td>the angular velocity (rad s<sup>-1</sup>). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>the flattening of the ellipsoid. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">J2</td><td>dynamical form factor.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Exactly one of <em>f</em> and <em>J2</em> should be positive and this will be used to define the ellipsoid. The shape of the ellipsoid can be given in one of two ways:</p>
-<ul>
-<li>geometrically, the ellipsoid is defined by the flattening <em>f</em> = (<em>a</em> - <em>b</em>) / <em>a</em>, where <em>a</em> and <em>b</em> are the equatorial radius and the polar semi-axis.</li>
-<li>physically, the ellipsoid is defined by the dynamical form factor <em>J</em><sub>2</sub> = (<em>C</em> - <em>A</em>) / <em>Ma</em><sup>2</sup>, where <em>A</em> and <em>C</em> are the equatorial and polar moments of inertia and <em>M</em> is the mass of the earth. </li>
-</ul>
-
-<p>Definition at line <a class="el" href="NormalGravity_8cpp_source.html#l00022">22</a> of file <a class="el" href="NormalGravity_8cpp_source.html">NormalGravity.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a55f749c3bb3e9d19626105041bf1b6fb"></a><!-- doxytag: member="GeographicLib::NormalGravity::NormalGravity" ref="a55f749c3bb3e9d19626105041bf1b6fb" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::NormalGravity::NormalGravity </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor for the normal gravity. This sets up an uninitialized object and is used by <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> which constructs this object before it has read in the parameters for the reference ellipsoid. </p>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00107">107</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a019541fea3712f8ca73aec8a0b29c71c"></a><!-- doxytag: member="GeographicLib::NormalGravity::SurfaceGravity" ref="a019541fea3712f8ca73aec8a0b29c71c" args="(real lat) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::SurfaceGravity </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em></td><td>)</td>
-          <td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the gravity on the surface of the ellipsoid.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>the geographic latitude (degrees). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>gamma</em> the acceleration due to gravity, positive downwards (m s<sup>-2</sup>).</dd></dl>
-<p>Due to the axial symmetry of the ellipsoid, the result is independent of the value of the longitude. This acceleration is perpendicular to the surface of the ellipsoid. It includes the effects of the earth's rotation. </p>
-
-<p>Definition at line <a class="el" href="NormalGravity_8cpp_source.html#l00155">155</a> of file <a class="el" href="NormalGravity_8cpp_source.html">NormalGravity.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00309">GeographicLib::GravityModel::Circle()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acfca8d6e44778501b54cd0b38dbbddde"></a><!-- doxytag: member="GeographicLib::NormalGravity::Gravity" ref="acfca8d6e44778501b54cd0b38dbbddde" args="(real lat, real h, real &gammay, real &gammaz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::Gravity </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>h</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gammay</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gammaz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the gravity at an arbitrary point above (or below) the ellipsoid.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>the geographic latitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">h</td><td>the height above the ellipsoid (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gammay</td><td>the northerly component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gammaz</td><td>the upward component of the acceleration (m s<sup>-2</sup>); this is usually negative. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>U</em> the corresponding normal potential.</dd></dl>
-<p>Due to the axial symmetry of the ellipsoid, the result is independent of the value of the longitude and the easterly component of the acceleration vanishes, <em>gammax</em> = 0. The function includes the effects of the earth's rotation. When <em>h</em> = 0, this function gives <em>gammay</em> = 0 and the returned value matches that of <a class="el" href="classGeographicLib_1_1NormalGravity.html#a019541fea3712f8ca73aec8a0b29c71c">NormalGravity::SurfaceGravity</a>. </p>
-
-<p>Definition at line <a class="el" href="NormalGravity_8cpp_source.html#l00226">226</a> of file <a class="el" href="NormalGravity_8cpp_source.html">NormalGravity.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a258290ade5fd46c42fdc4199683cf563"></a><!-- doxytag: member="GeographicLib::NormalGravity::U" ref="a258290ade5fd46c42fdc4199683cf563" args="(real X, real Y, real Z, real &gammaX, real &gammaY, real &gammaZ) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::U </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gammaX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gammaY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gammaZ</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the acceleration due to gravity and the centrifugal acceleration in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Z</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gammaX</td><td>the <em>X</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gammaY</td><td>the <em>Y</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gammaZ</td><td>the <em>Z</em> component of the acceleration (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>U</em> = <em>V</em><sub>0</sub> + <em>Phi</em> the sum of the gravitational and centrifugal potentials (m<sup>2</sup> s<sup>-2</sup>).</dd></dl>
-<p>The acceleration given by <b>gamma</b> = <b>grad</b> <em>U</em> = <b>grad</b> <em>V</em><sub>0</sub> + <b>grad</b> <em>Phi</em> = <b>Gamma</b> + <b>f</b>. </p>
-
-<p>Definition at line <a class="el" href="NormalGravity_8cpp_source.html#l00216">216</a> of file <a class="el" href="NormalGravity_8cpp_source.html">NormalGravity.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00309">GeographicLib::GravityModel::Circle()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa656e36306bc396ac6d32dcdfc2069a2"></a><!-- doxytag: member="GeographicLib::NormalGravity::V0" ref="aa656e36306bc396ac6d32dcdfc2069a2" args="(real X, real Y, real Z, real &GammaX, real &GammaY, real &GammaZ) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::V0 </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>GammaX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>GammaY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>GammaZ</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the components of the acceleration due to gravity alone in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Z</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">GammaX</td><td>the <em>X</em> component of the acceleration due to gravity (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">GammaY</td><td>the <em>Y</em> component of the acceleration due to gravity (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">GammaZ</td><td>the <em>Z</em> component of the acceleration due to gravity (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em><sub>0</sub> the gravitational potential (m<sup>2</sup> s<sup>-2</sup>).</dd></dl>
-<p>This function excludes the centrifugal acceleration and is appropriate to use for space applications. In terrestrial applications, the function <a class="el" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">NormalGravity::U</a> (which includes this effect) should usually be used. </p>
-
-<p>Definition at line <a class="el" href="NormalGravity_8cpp_source.html#l00163">163</a> of file <a class="el" href="NormalGravity_8cpp_source.html">NormalGravity.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>, and <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af0f50fd88d8b647a1b7bb209a4cfae0f"></a><!-- doxytag: member="GeographicLib::NormalGravity::Phi" ref="af0f50fd88d8b647a1b7bb209a4cfae0f" args="(real X, real Y, real &fX, real &fY) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::Phi </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>X</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>Y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>fX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>fY</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate the centrifugal acceleration in geocentric coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">X</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">Y</td><td>geocentric coordinate of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">fX</td><td>the <em>X</em> component of the centrifugal acceleration (m s<sup>-2</sup>). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">fY</td><td>the <em>Y</em> component of the centrifugal acceleration (m s<sup>-2</sup>). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>Phi</em> the centrifugal potential (m<sup>2</sup> s<sup>-2</sup>).</dd></dl>
-<p><em>Phi</em> is independent of <em>Z</em>, thus <em>fZ</em> = 0. This function <a class="el" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">NormalGravity::U</a> sums the results of <a class="el" href="classGeographicLib_1_1NormalGravity.html#aa656e36306bc396ac6d32dcdfc2069a2">NormalGravity::V0</a> and <a class="el" href="classGeographicLib_1_1NormalGravity.html#af0f50fd88d8b647a1b7bb209a4cfae0f">NormalGravity::Phi</a>. </p>
-
-<p>Definition at line <a class="el" href="NormalGravity_8cpp_source.html#l00208">208</a> of file <a class="el" href="NormalGravity_8cpp_source.html">NormalGravity.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00309">GeographicLib::GravityModel::Circle()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1d96cafc362959215eaa553a712b6908"></a><!-- doxytag: member="GeographicLib::NormalGravity::Init" ref="a1d96cafc362959215eaa553a712b6908" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::NormalGravity::Init </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>true if the object has been initialized. </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00219">219</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9155d22c5a64a7ef346ce7f590a6264f"></a><!-- doxytag: member="GeographicLib::NormalGravity::MajorRadius" ref="a9155d22c5a64a7ef346ce7f590a6264f" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00225">225</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3c6693dc7efe04cdbed408b2510c69da"></a><!-- doxytag: member="GeographicLib::NormalGravity::MassConstant" ref="a3c6693dc7efe04cdbed408b2510c69da" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::MassConstant </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>GM</em> the mass constant of the ellipsoid (m<sup>3</sup> s<sup>-2</sup>). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00233">233</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00043">GeographicLib::GravityModel::GravityModel()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa52b03157eb0b199d331d6fca28a259a"></a><!-- doxytag: member="GeographicLib::NormalGravity::DynamicalFormFactor" ref="aa52b03157eb0b199d331d6fca28a259a" args="(int n=2) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::DynamicalFormFactor </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>n</em> = <code>2</code></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>J<sub>n</sub></em> the dynamical form factors of the ellipsoid.</dd></dl>
-<p>If <em>n</em> = 2 (the default), this is the value of <em>J</em><sub>2</sub> used in the constructor. Otherwise it is the zonal coefficient of the Legendre harmonic sum of the normal gravitational potential. Note that <em>J<sub>n</sub></em> = 0 if <em>is</em> odd. In most gravity applications, fully normalized Legendre functions are used and the corresponding coefficient is <em>C</em><sub><em>n</em>0</sub> = -<em>J<sub>n</sub></em> / sqrt(2 <em>n</em> + 1). </p>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00246">246</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aefd6dfb7e6f806b63d099316dcc97f55"></a><!-- doxytag: member="GeographicLib::NormalGravity::AngularVelocity" ref="aefd6dfb7e6f806b63d099316dcc97f55" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::AngularVelocity </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>omega</em> the angular velocity of the ellipsoid (rad s<sup>-1</sup>). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00253">253</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aba396954f43e623e755bdff7db7d850b"></a><!-- doxytag: member="GeographicLib::NormalGravity::Flattening" ref="aba396954f43e623e755bdff7db7d850b" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid (<em>a</em> - <em>b</em>)/<em>a</em>. </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00259">259</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3610ec908c7b168b39f00946e2fc3fad"></a><!-- doxytag: member="GeographicLib::NormalGravity::EquatorialGravity" ref="a3610ec908c7b168b39f00946e2fc3fad" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::EquatorialGravity </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>gamma</em><sub>e</sub> the normal gravity at equator (m s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00266">266</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3079310d3a7af97ccb50b91be01d5a50"></a><!-- doxytag: member="GeographicLib::NormalGravity::PolarGravity" ref="a3079310d3a7af97ccb50b91be01d5a50" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::PolarGravity </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>gamma</em><sub>p</sub> the normal gravity at poles (m s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00273">273</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7e9329f7b3120b7777a0c5be3ca424a7"></a><!-- doxytag: member="GeographicLib::NormalGravity::GravityFlattening" ref="a7e9329f7b3120b7777a0c5be3ca424a7" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::GravityFlattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f*</em> the gravity flattening (<em>gamma</em><sub>p</sub> - <em>gamma</em><sub>e</sub>) / <em>gamma</em><sub>e</sub>. </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00281">281</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5bc3756dd7dbc82c07ef4afd1a182372"></a><!-- doxytag: member="GeographicLib::NormalGravity::SurfacePotential" ref="a5bc3756dd7dbc82c07ef4afd1a182372" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::NormalGravity::SurfacePotential </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>U</em><sub>0</sub> the constant normal potential for the surface of the ellipsoid (m<sup>2</sup> s<sup>-2</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00288">288</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab15ded1ab7ec9a30e8053fc330ed76ac"></a><!-- doxytag: member="GeographicLib::NormalGravity::Earth" ref="ab15ded1ab7ec9a30e8053fc330ed76ac" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a>& GeographicLib::NormalGravity::Earth </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">Geocentric</a> object used by this instance. </dd></dl>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00294">294</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00309">GeographicLib::GravityModel::Circle()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="ada1db1d9f480d8044753ed869c995519"></a><!-- doxytag: member="GeographicLib::NormalGravity::GravityModel" ref="ada1db1d9f480d8044753ed869c995519" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1GravityModel.html">GravityModel</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00065">65</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Data Documentation</h2>
-<a class="anchor" id="a70c328a95e05964180106d89c2583b78"></a><!-- doxytag: member="GeographicLib::NormalGravity::WGS84" ref="a70c328a95e05964180106d89c2583b78" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a> <a class="el" href="classGeographicLib_1_1NormalGravity.html#a70c328a95e05964180106d89c2583b78">GeographicLib::NormalGravity::WGS84</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a> for the WGS84 ellipsoid. </p>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00300">300</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a78cf6878967ad52adadbe06b5f7c4146"></a><!-- doxytag: member="GeographicLib::NormalGravity::GRS80" ref="a78cf6878967ad52adadbe06b5f7c4146" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a> <a class="el" href="classGeographicLib_1_1NormalGravity.html#a78cf6878967ad52adadbe06b5f7c4146">GeographicLib::NormalGravity::GRS80</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">NormalGravity</a> for the GRS80 ellipsoid. </p>
-
-<p>Definition at line <a class="el" href="NormalGravity_8hpp_source.html#l00305">305</a> of file <a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="NormalGravity_8hpp_source.html">NormalGravity.hpp</a></li>
-<li><a class="el" href="NormalGravity_8cpp_source.html">NormalGravity.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1OSGB-members.html b/doc/html/classGeographicLib_1_1OSGB-members.html
deleted file mode 100644
index 30261d9..0000000
--- a/doc/html/classGeographicLib_1_1OSGB-members.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1OSGB.html">OSGB</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::OSGB Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#a65210bfdcac362f393a8f81f28259ad0">CentralScale</a>()</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#ab27e19f7688f6b472d217b31aeae079c">FalseEasting</a>()</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#a74072d4e62fcd4ca679b222716b6a6a1">FalseNorthing</a>()</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#aae688ebd8c126f22517eaa0a01d659f8">Flattening</a>()</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#a92618eea9870908e11446875d80aab6b">Forward</a>(real lat, real lon, real &x, real &y, real &gamma, real &k)</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#a0f705bee98c6669ca7a95394712fd758">Forward</a>(real lat, real lon, real &x, real &y)</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#a0a79e8f2babae1eb0305a0e728fea8c8">GridReference</a>(real x, real y, int prec, std::string &gridref)</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#a3693cfef49442747750e8393c81014aa">GridReference</a>(const std::string &gridref, real &x, real &y, int &prec, bool centerp=true)</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#a9bb3b0ff55a462ac2ebcd0cfd446d811">MajorRadius</a>()</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#ad6bcef7e2dcc2992831e101bf0b05fa8">OriginLatitude</a>()</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#a4eb3b20734af47c9661d40581555c345">OriginLongitude</a>()</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#ae006380e574858a81011752dd1d4af60">Reverse</a>(real x, real y, real &lat, real &lon, real &gamma, real &k)</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1OSGB.html#ab804929a4126ed390a40d35e837b4001">Reverse</a>(real x, real y, real &lat, real &lon)</td><td><a class="el" href="classGeographicLib_1_1OSGB.html">GeographicLib::OSGB</a></td><td><code> [inline, static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1OSGB.html b/doc/html/classGeographicLib_1_1OSGB.html
deleted file mode 100644
index 2e5449d..0000000
--- a/doc/html/classGeographicLib_1_1OSGB.html
+++ /dev/null
@@ -1,630 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::OSGB Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1OSGB.html">OSGB</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::OSGB Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::OSGB" -->
-<p>Ordnance Survey grid system for Great Britain.  
- <a href="classGeographicLib_1_1OSGB.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="OSGB_8hpp_source.html">GeographicLib/OSGB.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1OSGB-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#a92618eea9870908e11446875d80aab6b">Forward</a> (real lat, real lon, real &x, real &y, real &gamma, real &k)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#ae006380e574858a81011752dd1d4af60">Reverse</a> (real x, real y, real &lat, real &lon, real &gamma, real &k)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#a0f705bee98c6669ca7a95394712fd758">Forward</a> (real lat, real lon, real &x, real &y)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#ab804929a4126ed390a40d35e837b4001">Reverse</a> (real x, real y, real &lat, real &lon)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#a0a79e8f2babae1eb0305a0e728fea8c8">GridReference</a> (real x, real y, int prec, std::string &gridref)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#a3693cfef49442747750e8393c81014aa">GridReference</a> (const std::string &gridref, real &x, real &y, int &prec, bool centerp=true)</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#a9bb3b0ff55a462ac2ebcd0cfd446d811">MajorRadius</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#aae688ebd8c126f22517eaa0a01d659f8">Flattening</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#a65210bfdcac362f393a8f81f28259ad0">CentralScale</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#ad6bcef7e2dcc2992831e101bf0b05fa8">OriginLatitude</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#a4eb3b20734af47c9661d40581555c345">OriginLongitude</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#a74072d4e62fcd4ca679b222716b6a6a1">FalseNorthing</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html#ab27e19f7688f6b472d217b31aeae079c">FalseEasting</a> ()  throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Ordnance Survey grid system for Great Britain. </p>
-<p>The class implements the coordinate system used by the Ordnance Survey for maps of Great Britain and conversions to the grid reference system.</p>
-<p>See</p>
-<ul>
-<li><a href="http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/A_Guide_to_Coordinate_Systems_in_Great_Britain.pdf">A guide to coordinate systems in Great Britain</a></li>
-<li><a href="http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidetonationalgrid/page1.html">Guide to National Grid</a></li>
-</ul>
-<p><b>WARNING:</b> the latitudes and longitudes for the Ordnance Survey grid system do not use the WGS84 datum. Do not use the values returned by this class in the <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>, <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a>, or <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geo [...]
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::OSGB class</span>
-<span class="comment">// $Id: 80feea12c2ebb7e594d8e17bf841c1a141cf3c36 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <string></span>
-<span class="preprocessor">#include <<a class="code" href="OSGB_8hpp.html" title="Header for GeographicLib::OSGB class.">GeographicLib/OSGB.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 55.5, lon = -1.64; <span class="comment">// Embleton, Northumberland</span>
-      <span class="keywordtype">double</span> x, y;
-      <a class="code" href="classGeographicLib_1_1OSGB.html#a92618eea9870908e11446875d80aab6b">OSGB::Forward</a>(lat, lon, x, y);
-      <span class="keywordtype">string</span> gridref;
-      <a class="code" href="classGeographicLib_1_1OSGB.html#a0a79e8f2babae1eb0305a0e728fea8c8">OSGB::GridReference</a>(x, y, 2, gridref);
-      cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">" "</span> << gridref << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">string</span> gridref = <span class="stringliteral">"NU2222"</span>;
-      <span class="keywordtype">double</span> x, y;
-      <span class="keywordtype">int</span> prec;
-      <a class="code" href="classGeographicLib_1_1OSGB.html#a0a79e8f2babae1eb0305a0e728fea8c8">OSGB::GridReference</a>(gridref, x, y, prec);
-      <span class="keywordtype">double</span> lat, lon;
-      <a class="code" href="classGeographicLib_1_1OSGB.html#ae006380e574858a81011752dd1d4af60">OSGB::Reverse</a>(x, y, lat, lon);
-      cout << prec << <span class="stringliteral">" "</span> << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a92618eea9870908e11446875d80aab6b"></a><!-- doxytag: member="GeographicLib::OSGB::Forward" ref="a92618eea9870908e11446875d80aab6b" args="(real lat, real lon, real &x, real &y, real &gamma, real &k)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::OSGB::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> coordinates.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat</em> should be in the range [-90, 90]; <em>lon</em> and <em>lon0</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00086">86</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae006380e574858a81011752dd1d4af60"></a><!-- doxytag: member="GeographicLib::OSGB::Reverse" ref="ae006380e574858a81011752dd1d4af60" args="(real x, real y, real &lat, real &lon, real &gamma, real &k)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::OSGB::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> coordinates to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The value of <em>lon</em> returned is in the range [-180, 180). </p>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00106">106</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0f705bee98c6669ca7a95394712fd758"></a><!-- doxytag: member="GeographicLib::OSGB::Forward" ref="a0f705bee98c6669ca7a95394712fd758" args="(real lat, real lon, real &x, real &y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::OSGB::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1OSGB.html#a92618eea9870908e11446875d80aab6b">OSGB::Forward</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00116">116</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab804929a4126ed390a40d35e837b4001"></a><!-- doxytag: member="GeographicLib::OSGB::Reverse" ref="ab804929a4126ed390a40d35e837b4001" args="(real x, real y, real &lat, real &lon)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::OSGB::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1OSGB.html#ae006380e574858a81011752dd1d4af60">OSGB::Reverse</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00124">124</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0a79e8f2babae1eb0305a0e728fea8c8"></a><!-- doxytag: member="GeographicLib::OSGB::GridReference" ref="a0a79e8f2babae1eb0305a0e728fea8c8" args="(real x, real y, int prec, std::string &gridref)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::OSGB::GridReference </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::string & </td>
-          <td class="paramname"><em>gridref</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> coordinates to a grid reference.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">prec</td><td>precision relative to 100 km. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gridref</td><td>National Grid reference.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>prec</em> specifies the precision of the grid reference string as follows:</p>
-<ul>
-<li>prec = 0 (min), 100km</li>
-<li>prec = 1, 10km</li>
-<li>prec = 2, 1km</li>
-<li>prec = 3, 100m</li>
-<li>prec = 4, 10m</li>
-<li>prec = 5, 1m</li>
-<li>prec = 6, 0.1m</li>
-<li>prec = 11 (max), 1um</li>
-</ul>
-<p>The easting must be in the range [-1000 km, 1500 km) and the northing must be in the range [-500 km, 2000 km). An exception is thrown if either the easting and northing is outside these bounds. These bounds are consistent with rules for the letter designations for the grid system. </p>
-
-<p>Definition at line <a class="el" href="OSGB_8cpp_source.html#l00036">36</a> of file <a class="el" href="OSGB_8cpp_source.html">OSGB.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3693cfef49442747750e8393c81014aa"></a><!-- doxytag: member="GeographicLib::OSGB::GridReference" ref="a3693cfef49442747750e8393c81014aa" args="(const std::string &gridref, real &x, real &y, int &prec, bool centerp=true)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::OSGB::GridReference </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>gridref</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>prec</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>centerp</em> = <code>true</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> coordinates to a grid reference.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">gridref</td><td>National Grid reference. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">prec</td><td>precision relative to 100 km. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">centerp</td><td>if true (default), return center of the grid square, else return SW (lower left) corner.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The grid reference must be of the form: two letters (not including I) followed by an even number of digits (up to 22). </p>
-
-<p>Definition at line <a class="el" href="OSGB_8cpp_source.html#l00084">84</a> of file <a class="el" href="OSGB_8cpp_source.html">OSGB.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9bb3b0ff55a462ac2ebcd0cfd446d811"></a><!-- doxytag: member="GeographicLib::OSGB::MajorRadius" ref="a9bb3b0ff55a462ac2ebcd0cfd446d811" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::OSGB::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the Airy 1830 ellipsoid (meters).</dd></dl>
-<p>This is 20923713 ft converted to meters using the rule 1 ft = 10^(9.48401603-10) m. (The Airy 1830 value is returned because the <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> projection is based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00182">182</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aae688ebd8c126f22517eaa0a01d659f8"></a><!-- doxytag: member="GeographicLib::OSGB::Flattening" ref="aae688ebd8c126f22517eaa0a01d659f8" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::OSGB::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the inverse flattening of the Airy 1830 ellipsoid.</dd></dl>
-<p>For the Airy 1830 ellipsoid, <em>a</em> = 20923713 ft and <em>b</em> = 20853810 ft; thus the flattening = (20923713 - 20853810)/20923713 = 7767/2324857 = 1/299.32496459... (The Airy 1830 value is returned because the <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> projection is based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00194">194</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a65210bfdcac362f393a8f81f28259ad0"></a><!-- doxytag: member="GeographicLib::OSGB::CentralScale" ref="a65210bfdcac362f393a8f81f28259ad0" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::OSGB::CentralScale </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>k0</em> central scale for the <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> projection (0.9996012717). </dd></dl>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00208">208</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad6bcef7e2dcc2992831e101bf0b05fa8"></a><!-- doxytag: member="GeographicLib::OSGB::OriginLatitude" ref="ad6bcef7e2dcc2992831e101bf0b05fa8" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::OSGB::OriginLatitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>latitude of the origin for the <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> projection (49 degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00214">214</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4eb3b20734af47c9661d40581555c345"></a><!-- doxytag: member="GeographicLib::OSGB::OriginLongitude" ref="a4eb3b20734af47c9661d40581555c345" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::OSGB::OriginLongitude </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>longitude of the origin for the <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> projection (-2 degrees). </dd></dl>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00219">219</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a74072d4e62fcd4ca679b222716b6a6a1"></a><!-- doxytag: member="GeographicLib::OSGB::FalseNorthing" ref="a74072d4e62fcd4ca679b222716b6a6a1" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::OSGB::FalseNorthing </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>false northing the <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> projection (-100000 meters). </dd></dl>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00224">224</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab27e19f7688f6b472d217b31aeae079c"></a><!-- doxytag: member="GeographicLib::OSGB::FalseEasting" ref="ab27e19f7688f6b472d217b31aeae079c" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::OSGB::FalseEasting </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>false easting the <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">OSGB</a> projection (400000 meters). </dd></dl>
-
-<p>Definition at line <a class="el" href="OSGB_8hpp_source.html#l00229">229</a> of file <a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="OSGB_8hpp_source.html">OSGB.hpp</a></li>
-<li><a class="el" href="OSGB_8cpp_source.html">OSGB.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1PolarStereographic-members.html b/doc/html/classGeographicLib_1_1PolarStereographic-members.html
deleted file mode 100644
index 297823e..0000000
--- a/doc/html/classGeographicLib_1_1PolarStereographic-members.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1PolarStereographic.html">PolarStereographic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::PolarStereographic Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#ad6f7bd8a35208d91706ac8c258387e6f">CentralScale</a>() const </td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3b08d03e475dae2c2a81c76420946942">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">Forward</a>(bool northp, real lat, real lon, real &x, real &y, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#ac2fe4c9524ec35f8d05336555f96e1b1">Forward</a>(bool northp, real lat, real lon, real &x, real &y) const </td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#ab1746576356a2409f34d9527064adfdd">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a170d21f9c7a2e922c57fc83a44ea3dfa">PolarStereographic</a>(real a, real f, real k0)</td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">Reverse</a>(bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a16572cc552eeb24ebf84319cdcd6652e">Reverse</a>(bool northp, real x, real y, real &lat, real &lon) const </td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3f957214eb1d1248277a680e4c4ceed5">SetScale</a>(real lat, real k=real(1))</td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">UPS</a></td><td><a class="el" href="classGeographicLib_1_1PolarStereographic.html">GeographicLib::PolarStereographic</a></td><td><code> [static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1PolarStereographic.html b/doc/html/classGeographicLib_1_1PolarStereographic.html
deleted file mode 100644
index ed35120..0000000
--- a/doc/html/classGeographicLib_1_1PolarStereographic.html
+++ /dev/null
@@ -1,568 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::PolarStereographic Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1PolarStereographic.html">PolarStereographic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::PolarStereographic Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::PolarStereographic" -->
-<p>Polar Stereographic Projection.  
- <a href="classGeographicLib_1_1PolarStereographic.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="PolarStereographic_8hpp_source.html">GeographicLib/PolarStereographic.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1PolarStereographic-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a170d21f9c7a2e922c57fc83a44ea3dfa">PolarStereographic</a> (real a, real f, real k0)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3f957214eb1d1248277a680e4c4ceed5">SetScale</a> (real lat, real k=real(1))</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">Forward</a> (bool northp, real lat, real lon, real &x, real &y, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">Reverse</a> (bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#ac2fe4c9524ec35f8d05336555f96e1b1">Forward</a> (bool northp, real lat, real lon, real &x, real &y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a16572cc552eeb24ebf84319cdcd6652e">Reverse</a> (bool northp, real x, real y, real &lat, real &lon) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#ab1746576356a2409f34d9527064adfdd">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3b08d03e475dae2c2a81c76420946942">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#ad6f7bd8a35208d91706ac8c258387e6f">CentralScale</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1PolarStereographic.html">PolarStereographic</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">UPS</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Polar Stereographic Projection. </p>
-<p>Implementation taken from the report,</p>
-<ul>
-<li>J. P. Snyder, <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395">Map Projections: A Working Manual</a>, USGS Professional Paper 1395 (1987), pp. 160–163.</li>
-</ul>
-<p>This is a straightforward implementation of the equations in Snyder except that Newton's method is used to invert the projection.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::PolarStereographic class</span>
-<span class="comment">// $Id: 76bd97693e4f711118164cc0cde1db7f5ca70e12 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <string></span>
-<span class="preprocessor">#include <iomanip></span>
-<span class="preprocessor">#include <<a class="code" href="PolarStereographic_8hpp.html" title="Header for GeographicLib::PolarStereographic class.">GeographicLib/PolarStereographic.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">PolarStereographic</a> proj(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>(),
-                            <a class="code" href="classGeographicLib_1_1Constants.html#a3fe287ab1a0847f5392c1aaf9c5e635a">Constants::UPS_k0</a>());
-    <span class="comment">// Alternatively:</span>
-    <span class="comment">// const PolarStereographic& proj = PolarStereographic::UPS;</span>
-    <span class="keywordtype">bool</span> northp = <span class="keyword">true</span>;
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 61.2, lon = -149.9; <span class="comment">// Anchorage</span>
-      <span class="keywordtype">double</span> x, y;
-      proj.Forward(northp, lat, lon, x, y);
-      cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">double</span> x = -1637e3, y = 2824e3;
-      <span class="keywordtype">double</span> lat, lon;
-      proj.Reverse(northp, x, y, lat, lon);
-      cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a170d21f9c7a2e922c57fc83a44ea3dfa"></a><!-- doxytag: member="GeographicLib::PolarStereographic::PolarStereographic" ref="a170d21f9c7a2e922c57fc83a44ea3dfa" args="(real a, real f, real k0)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::PolarStereographic::PolarStereographic </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k0</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for a ellipsoid with</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k0</td><td>central scale factor.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>An exception is thrown if either of the axes of the ellipsoid is not positive <em>a</em> or if <em>k0</em> is not positive. </p>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8cpp_source.html#l00028">28</a> of file <a class="el" href="PolarStereographic_8cpp_source.html">PolarStereographic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a3f957214eb1d1248277a680e4c4ceed5"></a><!-- doxytag: member="GeographicLib::PolarStereographic::SetScale" ref="a3f957214eb1d1248277a680e4c4ceed5" args="(real lat, real k=real(1))" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::PolarStereographic::SetScale </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k</em> = <code>real(1)</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the scale for the projection.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>(degrees) assuming <em>northp</em> = true. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k</td><td>scale at latitude <em>lat</em> (default 1).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>This allows a "latitude of true scale" to be specified. An exception is thrown if <em>k</em> is not positive or if <em>lat</em> is not in the range (-90, 90]. </p>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8cpp_source.html#l00126">126</a> of file <a class="el" href="PolarStereographic_8cpp_source.html">PolarStereographic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>, and <a class="el" href="PolarStereographic_8cpp_source.html#l00072">Forward()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a30ef1a1f906ee389e2a5f7e5fd7d8fa4"></a><!-- doxytag: member="GeographicLib::PolarStereographic::Forward" ref="a30ef1a1f906ee389e2a5f7e5fd7d8fa4" args="(bool northp, real lat, real lon, real &x, real &y, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::PolarStereographic::Forward </td>
-          <td>(</td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to polar stereographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">northp</td><td>the pole which is the center of projection (true means north, false means south). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>No false easting or northing is added. <em>lat</em> should be in the range (-90, 90] for <em>northp</em> = true and in the range [-90, 90) for <em>northp</em> = false; <em>lon</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8cpp_source.html#l00072">72</a> of file <a class="el" href="PolarStereographic_8cpp_source.html">PolarStereographic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>, and <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-<p>Referenced by <a class="el" href="PolarStereographic_8cpp_source.html#l00126">SetScale()</a>, and <a class="el" href="UTMUPS_8cpp_source.html#l00073">GeographicLib::UTMUPS::Forward()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a01302b8dba43c57e3c3849f94123a157"></a><!-- doxytag: member="GeographicLib::PolarStereographic::Reverse" ref="a01302b8dba43c57e3c3849f94123a157" args="(bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::PolarStereographic::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from polar stereographic to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">northp</td><td>the pole which is the center of projection (true means north, false means south). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>No false easting or northing is added. The value of <em>lon</em> returned is in the range [-180, 180). </p>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8cpp_source.html#l00095">95</a> of file <a class="el" href="PolarStereographic_8cpp_source.html">PolarStereographic.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>, and <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-<p>Referenced by <a class="el" href="UTMUPS_8cpp_source.html#l00124">GeographicLib::UTMUPS::Reverse()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac2fe4c9524ec35f8d05336555f96e1b1"></a><!-- doxytag: member="GeographicLib::PolarStereographic::Forward" ref="ac2fe4c9524ec35f8d05336555f96e1b1" args="(bool northp, real lat, real lon, real &x, real &y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::PolarStereographic::Forward </td>
-          <td>(</td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">PolarStereographic::Forward</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8hpp_source.html#l00121">121</a> of file <a class="el" href="PolarStereographic_8hpp_source.html">PolarStereographic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a16572cc552eeb24ebf84319cdcd6652e"></a><!-- doxytag: member="GeographicLib::PolarStereographic::Reverse" ref="a16572cc552eeb24ebf84319cdcd6652e" args="(bool northp, real x, real y, real &lat, real &lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::PolarStereographic::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">PolarStereographic::Reverse</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8hpp_source.html#l00130">130</a> of file <a class="el" href="PolarStereographic_8hpp_source.html">PolarStereographic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab1746576356a2409f34d9527064adfdd"></a><!-- doxytag: member="GeographicLib::PolarStereographic::MajorRadius" ref="ab1746576356a2409f34d9527064adfdd" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::PolarStereographic::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8hpp_source.html#l00143">143</a> of file <a class="el" href="PolarStereographic_8hpp_source.html">PolarStereographic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3b08d03e475dae2c2a81c76420946942"></a><!-- doxytag: member="GeographicLib::PolarStereographic::Flattening" ref="a3b08d03e475dae2c2a81c76420946942" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::PolarStereographic::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8hpp_source.html#l00149">149</a> of file <a class="el" href="PolarStereographic_8hpp_source.html">PolarStereographic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad6f7bd8a35208d91706ac8c258387e6f"></a><!-- doxytag: member="GeographicLib::PolarStereographic::CentralScale" ref="ad6f7bd8a35208d91706ac8c258387e6f" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::PolarStereographic::CentralScale </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The central scale for the projection. This is the value of <em>k0</em> used in the constructor and is the scale at the pole unless overridden by <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3f957214eb1d1248277a680e4c4ceed5">PolarStereographic::SetScale</a>. </p>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8hpp_source.html#l00164">164</a> of file <a class="el" href="PolarStereographic_8hpp_source.html">PolarStereographic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Data Documentation</h2>
-<a class="anchor" id="a2db6bcb1b59a6ddc6087ee04c64c9825"></a><!-- doxytag: member="GeographicLib::PolarStereographic::UPS" ref="a2db6bcb1b59a6ddc6087ee04c64c9825" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1PolarStereographic.html">PolarStereographic</a> <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">GeographicLib::PolarStereographic::UPS</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">PolarStereographic</a> with the WGS84 ellipsoid and the UPS scale factor. However, unlike UPS, no false easting or northing is added. </p>
-
-<p>Definition at line <a class="el" href="PolarStereographic_8hpp_source.html#l00172">172</a> of file <a class="el" href="PolarStereographic_8hpp_source.html">PolarStereographic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="PolarStereographic_8hpp_source.html">PolarStereographic.hpp</a></li>
-<li><a class="el" href="PolarStereographic_8cpp_source.html">PolarStereographic.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1PolygonArea-members.html b/doc/html/classGeographicLib_1_1PolygonArea-members.html
deleted file mode 100644
index 8910567..0000000
--- a/doc/html/classGeographicLib_1_1PolygonArea-members.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1PolygonArea.html">PolygonArea</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::PolygonArea Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolygonArea.html#acfec56f0e136a534192e1e71589299f1">AddPoint</a>(real lat, real lon)</td><td><a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolygonArea.html#a66198bec67036ad09aa58ec43166fe60">Clear</a>()</td><td><a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolygonArea.html#a60e1c288358818c849356c9921191215">Compute</a>(bool reverse, bool sign, real &perimeter, real &area) const </td><td><a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolygonArea.html#aba3543baed0f014b64890d174b8c62a0">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolygonArea.html#afcdd74fcb4a0f57aa193e5fd08239369">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolygonArea.html#a060a1dc499bd079c62f62ed5cad929e5">PolygonArea</a>(const Geodesic &earth, bool polyline=false)</td><td><a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1PolygonArea.html#ac46ac5567223b3db2ee11e6c4f72c257">TestCompute</a>(real lat, real lon, bool reverse, bool sign, real &perimeter, real &area) const </td><td><a class="el" href="classGeographicLib_1_1PolygonArea.html">GeographicLib::PolygonArea</a></td><td></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1PolygonArea.html b/doc/html/classGeographicLib_1_1PolygonArea.html
deleted file mode 100644
index d9664fc..0000000
--- a/doc/html/classGeographicLib_1_1PolygonArea.html
+++ /dev/null
@@ -1,404 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::PolygonArea Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1PolygonArea.html">PolygonArea</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::PolygonArea Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::PolygonArea" -->
-<p>Polygon Areas.  
- <a href="classGeographicLib_1_1PolygonArea.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="PolygonArea_8hpp_source.html">GeographicLib/PolygonArea.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1PolygonArea-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolygonArea.html#a060a1dc499bd079c62f62ed5cad929e5">PolygonArea</a> (const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> &earth, bool polyline=false)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolygonArea.html#a66198bec67036ad09aa58ec43166fe60">Clear</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolygonArea.html#acfec56f0e136a534192e1e71589299f1">AddPoint</a> (real lat, real lon)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolygonArea.html#a60e1c288358818c849356c9921191215">Compute</a> (bool reverse, bool sign, real &perimeter, real &area) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolygonArea.html#ac46ac5567223b3db2ee11e6c4f72c257">TestCompute</a> (real lat, real lon, bool reverse, bool sign, real &perimeter, real &area) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolygonArea.html#afcdd74fcb4a0f57aa193e5fd08239369">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolygonArea.html#aba3543baed0f014b64890d174b8c62a0">Flattening</a> () const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Polygon Areas. </p>
-<p>This computes the area of a geodesic polygon using the method given Section 15 of</p>
-<ul>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1102.1215v1">Geodesics on an ellipsoid of revolution</a>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.</li>
-</ul>
-<p>See also Section 6 of</p>
-<ul>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>, Sept. 2011; preprint <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.</li>
-</ul>
-<p>This class lets you add vertices one at a time to the polygon. The area and perimeter are accumulated in two times the standard floating point precision to guard against the loss of accuracy with many-sided polygons. At any point you can ask for the perimeter and area so far. There's an option to treat the points as defining a polyline instead of a polygon; in that case, only the perimeter is computed.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::PolygonArea class</span>
-<span class="comment">// $Id: 103c4d2f060347fd499adc2e8487102c8b93d58f $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="PolygonArea_8hpp.html" title="Header for GeographicLib::PolygonArea class.">GeographicLib/PolygonArea.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> geod(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>());
-    <span class="comment">// Alternatively: const Geodesic& geod = Geodesic::WGS84;</span>
-    <a class="code" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">PolygonArea</a> poly(geod);
-    poly.AddPoint( 52,  0);     <span class="comment">// London</span>
-    poly.AddPoint( 41,-74);     <span class="comment">// New York</span>
-    poly.AddPoint(-23,-43);     <span class="comment">// Rio de Janeiro</span>
-    poly.AddPoint(-26, 28);     <span class="comment">// Johannesburg</span>
-    <span class="keywordtype">double</span> perimeter, area;
-    <span class="keywordtype">unsigned</span> n = poly.Compute(<span class="keyword">false</span>, <span class="keyword">true</span>, perimeter, area);
-    cout << n << <span class="stringliteral">" "</span> << perimeter << <span class="stringliteral">" "</span> << area << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="Planimeter.1.html">Planimeter</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">PolygonArea</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a060a1dc499bd079c62f62ed5cad929e5"></a><!-- doxytag: member="GeographicLib::PolygonArea::PolygonArea" ref="a060a1dc499bd079c62f62ed5cad929e5" args="(const Geodesic &earth, bool polyline=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::PolygonArea::PolygonArea </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> & </td>
-          <td class="paramname"><em>earth</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>polyline</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">PolygonArea</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">earth</td><td>the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object to use for geodesic calculations. By default this uses the WGS84 ellipsoid. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">polyline</td><td>if true that treat the points as defining a polyline instead of a polygon (default = false). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="PolygonArea_8hpp_source.html#l00098">98</a> of file <a class="el" href="PolygonArea_8hpp_source.html">PolygonArea.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a66198bec67036ad09aa58ec43166fe60"></a><!-- doxytag: member="GeographicLib::PolygonArea::Clear" ref="a66198bec67036ad09aa58ec43166fe60" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::PolygonArea::Clear </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Clear <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">PolygonArea</a>, allowing a new polygon to be started. </p>
-
-<p>Definition at line <a class="el" href="PolygonArea_8hpp_source.html#l00110">110</a> of file <a class="el" href="PolygonArea_8hpp_source.html">PolygonArea.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Planimeter_8cpp_source.html#l00037">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acfec56f0e136a534192e1e71589299f1"></a><!-- doxytag: member="GeographicLib::PolygonArea::AddPoint" ref="acfec56f0e136a534192e1e71589299f1" args="(real lat, real lon)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::PolygonArea::AddPoint </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Add a point to the polygon or polyline.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>the latitude of the point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the latitude of the point (degrees).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>lat</em> should be in the range [-90, 90] and <em>lon</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="PolygonArea_8cpp_source.html#l00023">23</a> of file <a class="el" href="PolygonArea_8cpp_source.html">PolygonArea.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Planimeter_8cpp_source.html#l00037">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a60e1c288358818c849356c9921191215"></a><!-- doxytag: member="GeographicLib::PolygonArea::Compute" ref="a60e1c288358818c849356c9921191215" args="(bool reverse, bool sign, real &perimeter, real &area) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">unsigned GeographicLib::PolygonArea::Compute </td>
-          <td>(</td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>reverse</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>sign</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>perimeter</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>area</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the results so far.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">reverse</td><td>if true then clockwise (instead of counter-clockwise) traversal counts as a positive area. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">sign</td><td>if true then return a signed result for the area if the polygon is traversed in the "wrong" direction instead of returning the area for the rest of the earth. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">perimeter</td><td>the perimeter of the polygon or length of the polyline (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">area</td><td>the area of the polygon (meters^2); only set if polyline is false in the constructor. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of points. </dd></dl>
-
-<p>Definition at line <a class="el" href="PolygonArea_8cpp_source.html#l00041">41</a> of file <a class="el" href="PolygonArea_8cpp_source.html">PolygonArea.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="Planimeter_8cpp_source.html#l00037">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac46ac5567223b3db2ee11e6c4f72c257"></a><!-- doxytag: member="GeographicLib::PolygonArea::TestCompute" ref="ac46ac5567223b3db2ee11e6c4f72c257" args="(real lat, real lon, bool reverse, bool sign, real &perimeter, real &area) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">unsigned GeographicLib::PolygonArea::TestCompute </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>reverse</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>sign</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>perimeter</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>area</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the results assuming a tentative final test point is added; however, the data for the test point is not saved. This lets you report a running result for the perimeter and area as the user moves the mouse cursor. Ordinary floating point arithmetic is used to accumulate the data for the test point; thus the area and perimeter returned are less accurate than if AddPoint and Compute are used.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>the latitude of the test point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>the longitude of the test point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">reverse</td><td>if true then clockwise (instead of counter-clockwise) traversal counts as a positive area. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">sign</td><td>if true then return a signed result for the area if the polygon is traversed in the "wrong" direction instead of returning the area for the rest of the earth. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">perimeter</td><td>the approximate perimeter of the polygon or length of the polyline (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">area</td><td>the approximate area of the polygon (meters^2); only set if polyline is false in the constructor. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of points.</dd></dl>
-<p><em>lat</em> should be in the range [-90, 90] and <em>lon</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="PolygonArea_8cpp_source.html#l00082">82</a> of file <a class="el" href="PolygonArea_8cpp_source.html">PolygonArea.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afcdd74fcb4a0f57aa193e5fd08239369"></a><!-- doxytag: member="GeographicLib::PolygonArea::MajorRadius" ref="afcdd74fcb4a0f57aa193e5fd08239369" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::PolygonArea::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="PolygonArea_8hpp_source.html#l00181">181</a> of file <a class="el" href="PolygonArea_8hpp_source.html">PolygonArea.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aba3543baed0f014b64890d174b8c62a0"></a><!-- doxytag: member="GeographicLib::PolygonArea::Flattening" ref="aba3543baed0f014b64890d174b8c62a0" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::PolygonArea::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value inherited from the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a> object used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="PolygonArea_8hpp_source.html#l00187">187</a> of file <a class="el" href="PolygonArea_8hpp_source.html">PolygonArea.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="PolygonArea_8hpp_source.html">PolygonArea.hpp</a></li>
-<li><a class="el" href="PolygonArea_8cpp_source.html">PolygonArea.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalEngine-members.html b/doc/html/classGeographicLib_1_1SphericalEngine-members.html
deleted file mode 100644
index 2af8583..0000000
--- a/doc/html/classGeographicLib_1_1SphericalEngine-members.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalEngine.html">SphericalEngine</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalEngine Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html#af6a5fa63535d47cf528b733bb6a97901">Circle</a>(const coeff c[], const real f[], real p, real z, real a)</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a0c689dbf7b6bf2fb4cffb109085b1d3b">CircularEngine</a> class</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td><td><code> [friend]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html#ab3fb8f933adb257df6b7537268d55a75">ClearRootTable</a>()</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fac720ca87adfc478dbfc13a37f0cf8ba9">FULL</a> enum value</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949f">normalization</a> enum name</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a7fac63262c0a8bb18aee8c962a08d429">RootTable</a>(int N)</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fa2e3db3efd68d118e3f357a97eb77a131">SCHMIDT</a> enum value</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a1157f59596dd15bf0a21b6a7fb99630b">Value</a>(const coeff c[], const real f[], real x, real y, real z, real a, real &gradx, real &grady, real &gradz)</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine.html">GeographicLib::SphericalEngine</a></td><td><code> [static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalEngine.html b/doc/html/classGeographicLib_1_1SphericalEngine.html
deleted file mode 100644
index ae8fa26..0000000
--- a/doc/html/classGeographicLib_1_1SphericalEngine.html
+++ /dev/null
@@ -1,420 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::SphericalEngine Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalEngine.html">SphericalEngine</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a> |
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a> |
-<a href="#friends">Friends</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalEngine Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::SphericalEngine" -->
-<p>The evaluation engine for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>.  
- <a href="classGeographicLib_1_1SphericalEngine.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="SphericalEngine_8hpp_source.html">GeographicLib/SphericalEngine.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1SphericalEngine-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">coeff</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Package up coefficients for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>.  <a href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949f">normalization</a> { <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fac720ca87adfc478dbfc13a37f0cf8ba9">FULL</a>, 
-<a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fa2e3db3efd68d118e3f357a97eb77a131">SCHMIDT</a>
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memTemplParams" colspan="2">template<bool gradp, normalization norm, int L> </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a1157f59596dd15bf0a21b6a7fb99630b">Value</a> (const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">coeff</a> c[], const real f[], real x, real y, real z, real a, real &gradx, [...]
-<tr><td class="memTemplParams" colspan="2">template<bool gradp, normalization norm, int L> </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine.html#af6a5fa63535d47cf528b733bb6a97901">Circle</a> (const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">coeff</a> c[], const real f[], real p, real z, real a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a7fac63262c0a8bb18aee8c962a08d429">RootTable</a> (int N)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine.html#ab3fb8f933adb257df6b7537268d55a75">ClearRootTable</a> ()</td></tr>
-<tr><td colspan="2"><h2><a name="friends"></a>
-Friends</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine.html#a0c689dbf7b6bf2fb4cffb109085b1d3b">CircularEngine</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>The evaluation engine for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>. </p>
-<p>This serves as the backend to <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html" title="Spherical Harmonic series with a correction to the coefficients.">SphericalHarmonic1</a>, and <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html" title="Spherical Harmonic series with two corrections to the coefficients.">SphericalHarmonic2</a>.  [...]
-<p>See <a class="el" href="SphericalEngine_8cpp.html" title="Implementation for GeographicLib::SphericalEngine class.">SphericalEngine.cpp</a> for more information on the implementation.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::SphericalEngine class</span>
-<span class="comment">// $Id: 08fe16ba3619311b15fc58956511a88c37886f91 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <vector></span>
-<span class="preprocessor">#include <<a class="code" href="SphericalEngine_8hpp.html" title="Header for GeographicLib::SphericalEngine class.">GeographicLib/SphericalEngine.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="comment">// See also example-SphericHarmonic.cpp</span>
-  <span class="keywordflow">try</span> {
-    <span class="keywordtype">int</span> N = 3;                  <span class="comment">// The maxium degree</span>
-    <span class="keywordtype">double</span> ca[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; <span class="comment">// cosine coefficients</span>
-    vector<double> C(ca, ca + (N + 1) * (N + 2) / 2);
-    <span class="keywordtype">double</span> sa[] = {6, 5, 4, 3, 2, 1}; <span class="comment">// sine coefficients</span>
-    vector<double> S(sa, sa + N * (N + 1) / 2);
-    <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::coeff c[1];
-    c[0] = <a class="code" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a>(C, S, N);
-    <span class="keywordtype">double</span> f[] = {1};
-    <span class="keywordtype">double</span> x = 2, y = 3, z = 1, a = 1;
-    <span class="keywordtype">double</span> v, vx, vy, vz;
-    v = <a class="code" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>::Value<true, SphericalEngine::FULL, 1>
-      (c, f, x, y, z, a, vx, vy, vz);
-    cout << v << <span class="stringliteral">" "</span> << vx << <span class="stringliteral">" "</span> << vy << <span class="stringliteral">" "</span> << vz << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="a5332d09191e018cbddc568c1fc71949f"></a><!-- doxytag: member="GeographicLib::SphericalEngine::normalization" ref="a5332d09191e018cbddc568c1fc71949f" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949f">GeographicLib::SphericalEngine::normalization</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Supported normalizations for associated Legendre polynomials. </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="a5332d09191e018cbddc568c1fc71949fac720ca87adfc478dbfc13a37f0cf8ba9"></a><!-- doxytag: member="FULL" ref="a5332d09191e018cbddc568c1fc71949fac720ca87adfc478dbfc13a37f0cf8ba9" args="" -->FULL</em> </td><td>
-<p>Fully normalized associated Legendre polynomials. See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">SphericalHarmonic::FULL</a> for documentation. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a5332d09191e018cbddc568c1fc71949fa2e3db3efd68d118e3f357a97eb77a131"></a><!-- doxytag: member="SCHMIDT" ref="a5332d09191e018cbddc568c1fc71949fa2e3db3efd68d118e3f357a97eb77a131" args="" -->SCHMIDT</em> </td><td>
-<p>Schmidt semi-normalized associated Legendre polynomials. See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">SphericalHarmonic::SCHMIDT</a> for documentation. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00058">58</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a1157f59596dd15bf0a21b6a7fb99630b"></a><!-- doxytag: member="GeographicLib::SphericalEngine::Value" ref="a1157f59596dd15bf0a21b6a7fb99630b" args="(const coeff c[], const real f[], real x, real y, real z, real a, real &gradx, real &grady, real &gradz)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<bool gradp, SphericalEngine::normalization norm, int L> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalEngine::Value </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">coeff</a> </td>
-          <td class="paramname"><em>c</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const real </td>
-          <td class="paramname"><em>f</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>grady</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Evaluate a spherical harmonic sum and its gradient.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">gradp</td><td>should the gradient be calculated. </td></tr>
-    <tr><td class="paramname">norm</td><td>the normalization for the associated Legendre polynomials. </td></tr>
-    <tr><td class="paramname">L</td><td>the number of terms in the coefficients. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">c</td><td>an array of coeff objects. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>array of coefficient multipliers. f[0] should be 1. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>the <em>x</em> component of the cartesian position. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>the <em>y</em> component of the cartesian position. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>the <em>z</em> component of the cartesian position. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>the normalizing radius. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradx</td><td>the <em>x</em> component of the gradient. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">grady</td><td>the <em>y</em> component of the gradient. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradz</td><td>the <em>z</em> component of the gradient. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the spherical harmonic sum.</dd></dl>
-<p>See the <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> class for the definition of the sum. The coefficients used by this function are, for example, c[0].Cv + f[1] * c[1].Cv + ... + f[L-1] * c[L-1].Cv. (Note that f[0] is <em>not</em> used.) The upper limits on the sum are determined by c[0].nmx() and c[0].mmx(); these limits apply to <em>all</em> the components of the coefficients. The parameters <em>gradp</em [...]
-<p>Clenshaw summation is used which permits the evaluation of the sum without the need to allocate temporary arrays. Thus this function never throws an exception. </p>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8cpp_source.html#l00159">159</a> of file <a class="el" href="SphericalEngine_8cpp_source.html">SphericalEngine.cpp</a>.</p>
-
-<p>References <a class="el" href="Constants_8hpp_source.html#l00025">STATIC_ASSERT</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af6a5fa63535d47cf528b733bb6a97901"></a><!-- doxytag: member="GeographicLib::SphericalEngine::Circle" ref="af6a5fa63535d47cf528b733bb6a97901" args="(const coeff c[], const real f[], real p, real z, real a)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<bool gradp, SphericalEngine::normalization norm, int L> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a> GeographicLib::SphericalEngine::Circle </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">coeff</a> </td>
-          <td class="paramname"><em>c</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const real </td>
-          <td class="paramname"><em>f</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>p</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Create a <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> object</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">gradp</td><td>should the gradient be calculated. </td></tr>
-    <tr><td class="paramname">norm</td><td>the normalization for the associated Legendre polynomials. </td></tr>
-    <tr><td class="paramname">L</td><td>the number of terms in the coefficients. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">c</td><td>an array of coeff objects. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>array of coefficient multipliers. f[0] should be 1. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">p</td><td>the radius of the circle = sqrt(<em>x</em><sup>2</sup> + <em>y</em><sup>2</sup>). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>the height of the circle. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>the normalizing radius. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> object.</dd></dl>
-<p>If you need to evaluate the spherical harmonic sum for several points with constant <em>f</em>, <em>p</em> = sqrt(<em>x</em><sup>2</sup> + <em>y</em><sup>2</sup>), <em>z</em>, and <em>a</em>, it is more efficient to construct call <a class="el" href="classGeographicLib_1_1SphericalEngine.html#af6a5fa63535d47cf528b733bb6a97901">SphericalEngine::Circle</a> to give a <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngin [...]
-
-<p>Definition at line <a class="el" href="SphericalEngine_8cpp_source.html#l00298">298</a> of file <a class="el" href="SphericalEngine_8cpp_source.html">SphericalEngine.cpp</a>.</p>
-
-<p>References <a class="el" href="Constants_8hpp_source.html#l00025">STATIC_ASSERT</a>, <a class="el" href="SphericalEngine_8hpp_source.html#l00169">GeographicLib::SphericalEngine::coeff::nmx()</a>, <a class="el" href="SphericalEngine_8hpp_source.html#l00173">GeographicLib::SphericalEngine::coeff::mmx()</a>, <a class="el" href="SphericalEngine_8hpp_source.html#l00189">GeographicLib::SphericalEngine::coeff::Cv()</a>, and <a class="el" href="SphericalEngine_8hpp_source.html#l00196">Geograp [...]
-
-</div>
-</div>
-<a class="anchor" id="a7fac63262c0a8bb18aee8c962a08d429"></a><!-- doxytag: member="GeographicLib::SphericalEngine::RootTable" ref="a7fac63262c0a8bb18aee8c962a08d429" args="(int N)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::SphericalEngine::RootTable </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Check that the static table of square roots is big enough and enlarge it if necessary.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the maximum degree to be used in <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Typically, there's no need for an end-user to call this routine, because the constructors for <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a> do so. However, since this updates a static table, there's a possible race condition in a multi-threaded environment. Because this routine does nothing if the table is already large enough, one way to avoid race conditions is to call this rou [...]
-<div class="fragment"><pre class="fragment">  <a class="code" href="classGeographicLib_1_1SphericalEngine.html#a7fac63262c0a8bb18aee8c962a08d429">GeographicLib::SphericalEngine::RootTable</a>(2190);
-</pre></div><p> suffices to accommodate extant magnetic and gravity models. </p>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8cpp_source.html#l00372">372</a> of file <a class="el" href="SphericalEngine_8cpp_source.html">SphericalEngine.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="SphericalEngine_8hpp_source.html#l00120">GeographicLib::SphericalEngine::coeff::coeff()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab3fb8f933adb257df6b7537268d55a75"></a><!-- doxytag: member="GeographicLib::SphericalEngine::ClearRootTable" ref="ab3fb8f933adb257df6b7537268d55a75" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::SphericalEngine::ClearRootTable </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Clear the static table of square roots and release the memory. Call this only when you are sure you no longer will be using <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>. Your program will crash if you call <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a> after calling this routine. <b>It's safest not to call [...]
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00350">350</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Friends And Related Function Documentation</h2>
-<a class="anchor" id="a0c689dbf7b6bf2fb4cffb109085b1d3b"></a><!-- doxytag: member="GeographicLib::SphericalEngine::CircularEngine" ref="a0c689dbf7b6bf2fb4cffb109085b1d3b" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">friend class <a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a><code> [friend]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00046">46</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a></li>
-<li><a class="el" href="SphericalEngine_8cpp_source.html">SphericalEngine.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalEngine_1_1coeff-members.html b/doc/html/classGeographicLib_1_1SphericalEngine_1_1coeff-members.html
deleted file mode 100644
index fd2fb53..0000000
--- a/doc/html/classGeographicLib_1_1SphericalEngine_1_1coeff-members.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalEngine.html">SphericalEngine</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">coeff</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalEngine::coeff Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a98ee0fd797434667a8cb5093d7644af4">coeff</a>()</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a45a4378903a4f3ee817c47b72d086183">coeff</a>(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx)</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2f453e210345b33a364bf5a3bee84b7b">coeff</a>(const std::vector< real > &C, const std::vector< real > &S, int N)</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a8a126c9790a7a1609046fbae7934e587">Csize</a>(int N, int M)</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ab591ddf74f5653c16b58ed2f5bde5ffe">Cv</a>(int k) const </td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ad30081b2dfdee79652aacbc24bacb635">Cv</a>(int k, int n, int m, real f) const </td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a356d705a99ee15089d1faabd0c01084c">index</a>(int n, int m) const </td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2a1ff83503433c64bd4399689a3e40f6">mmx</a>() const </td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a38ab91101bb639963e094327a22fed59">N</a>() const </td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a96467118f9c16c16259d4fbbed3917ff">nmx</a>() const </td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2d545f589894683e7de297c42b7c995a">readcoeffs</a>(std::istream &stream, int &N, int &M, std::vector< real > &C, std::vector< real > &S)</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a98a75827d68247cf5ad1843d9d68b222">Ssize</a>(int N, int M)</td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ac93aaebb09086ab14330aafc0f105a17">Sv</a>(int k) const </td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a4fc7e6c7faf3f5940ee8f3ab28216897">Sv</a>(int k, int n, int m, real f) const </td><td><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">GeographicLib::SphericalEngine::coeff</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalEngine_1_1coeff.html b/doc/html/classGeographicLib_1_1SphericalEngine_1_1coeff.html
deleted file mode 100644
index 6dce922..0000000
--- a/doc/html/classGeographicLib_1_1SphericalEngine_1_1coeff.html
+++ /dev/null
@@ -1,644 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::SphericalEngine::coeff Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalEngine.html">SphericalEngine</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">coeff</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalEngine::coeff Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::SphericalEngine::coeff" -->
-<p>Package up coefficients for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>.  
- <a href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="SphericalEngine_8hpp_source.html">GeographicLib/SphericalEngine.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1SphericalEngine_1_1coeff-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a98ee0fd797434667a8cb5093d7644af4">coeff</a> ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a45a4378903a4f3ee817c47b72d086183">coeff</a> (const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2f453e210345b33a364bf5a3bee84b7b">coeff</a> (const std::vector< real > &C, const std::vector< real > &S, int N)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a38ab91101bb639963e094327a22fed59">N</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a96467118f9c16c16259d4fbbed3917ff">nmx</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2a1ff83503433c64bd4399689a3e40f6">mmx</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a356d705a99ee15089d1faabd0c01084c">index</a> (int n, int m) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ab591ddf74f5653c16b58ed2f5bde5ffe">Cv</a> (int k) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ac93aaebb09086ab14330aafc0f105a17">Sv</a> (int k) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ad30081b2dfdee79652aacbc24bacb635">Cv</a> (int k, int n, int m, real f) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a4fc7e6c7faf3f5940ee8f3ab28216897">Sv</a> (int k, int n, int m, real f) const </td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a8a126c9790a7a1609046fbae7934e587">Csize</a> (int N, int M)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a98a75827d68247cf5ad1843d9d68b222">Ssize</a> (int N, int M)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2d545f589894683e7de297c42b7c995a">readcoeffs</a> (std::istream &stream, int &N, int &M, std::vector< real > &C, std::vector< real > &S)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Package up coefficients for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">SphericalEngine</a>. </p>
-<p>This packages up the <em>C</em>, <em>S</em> coefficients and information about how the coefficients are stored into a single structure. This allows a vector of type <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a> to be passed to <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a1157f59596dd15bf0a21b6a7fb99630b">SphericalEngine::Value</a>. This class also includes func [...]
-<p>The storage layout of the coefficients is documented in <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> and <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#adb71d28aa60a813ca3384f9c58ef8fa1">SphericalHarmonic::SphericalHarmonic</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a98ee0fd797434667a8cb5093d7644af4"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::coeff" ref="a98ee0fd797434667a8cb5093d7644af4" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalEngine::coeff::coeff </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor </p>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00101">101</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a45a4378903a4f3ee817c47b72d086183"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::coeff" ref="a45a4378903a4f3ee817c47b72d086183" args="(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalEngine::coeff::coeff </td>
-          <td>(</td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>nmx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>mmx</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The general constructor.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">C</td><td>a vector of coefficients for the cosine terms. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S</td><td>a vector of coefficients for the sine terms. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the degree giving storage layout for <em>C</em> and <em>S</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">nmx</td><td>the maximum degree to be used. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">mmx</td><td>the maximum order to be used.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>This requires <em>N</em> >= <em>nmx</em> >= <em>mmx</em> >= -1. <em>C</em> and <em>S</em> must also be large enough to hold the coefficients. Otherwise an exception is thrown. </p>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00120">120</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-<p>References <a class="el" href="SphericalEngine_8cpp_source.html#l00372">GeographicLib::SphericalEngine::RootTable()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2f453e210345b33a364bf5a3bee84b7b"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::coeff" ref="a2f453e210345b33a364bf5a3bee84b7b" args="(const std::vector< real > &C, const std::vector< real > &S, int N)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalEngine::coeff::coeff </td>
-          <td>(</td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The constructor for full coefficient vectors.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">C</td><td>a vector of coefficients for the cosine terms. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S</td><td>a vector of coefficients for the sine terms. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the maximum degree and order.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>This requires <em>N</em> >= -1. <em>C</em> and <em>S</em> must also be large enough to hold the coefficients. Otherwise an exception is thrown. </p>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00146">146</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-<p>References <a class="el" href="SphericalEngine_8cpp_source.html#l00372">GeographicLib::SphericalEngine::RootTable()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a38ab91101bb639963e094327a22fed59"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::N" ref="a38ab91101bb639963e094327a22fed59" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int GeographicLib::SphericalEngine::coeff::N </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>N</em> the degree giving storage layout for <em>C</em> and <em>S</em>. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00165">165</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00043">GeographicLib::GravityModel::GravityModel()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a96467118f9c16c16259d4fbbed3917ff"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::nmx" ref="a96467118f9c16c16259d4fbbed3917ff" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int GeographicLib::SphericalEngine::coeff::nmx </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>nmx</em> the maximum degree to be used. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00169">169</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00043">GeographicLib::GravityModel::GravityModel()</a>, and <a class="el" href="SphericalEngine_8cpp_source.html#l00298">GeographicLib::SphericalEngine::Circle()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2a1ff83503433c64bd4399689a3e40f6"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::mmx" ref="a2a1ff83503433c64bd4399689a3e40f6" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int GeographicLib::SphericalEngine::coeff::mmx </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>mmx</em> the maximum order to be used. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00173">173</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00043">GeographicLib::GravityModel::GravityModel()</a>, and <a class="el" href="SphericalEngine_8cpp_source.html#l00298">GeographicLib::SphericalEngine::Circle()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a356d705a99ee15089d1faabd0c01084c"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::index" ref="a356d705a99ee15089d1faabd0c01084c" args="(int n, int m) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int GeographicLib::SphericalEngine::coeff::index </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>n</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>m</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The one-dimensional index into <em>C</em> and <em>S</em>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">n</td><td>the degree. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>the order. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the one-dimensional index. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00181">181</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab591ddf74f5653c16b58ed2f5bde5ffe"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::Cv" ref="ab591ddf74f5653c16b58ed2f5bde5ffe" args="(int k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalEngine::coeff::Cv </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>k</em></td><td>)</td>
-          <td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>An element of <em>C</em>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">k</td><td>the one-dimensional index. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the value of the <em>C</em> coefficient. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00189">189</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="SphericalEngine_8cpp_source.html#l00298">GeographicLib::SphericalEngine::Circle()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac93aaebb09086ab14330aafc0f105a17"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::Sv" ref="ac93aaebb09086ab14330aafc0f105a17" args="(int k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalEngine::coeff::Sv </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>k</em></td><td>)</td>
-          <td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>An element of <em>S</em>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">k</td><td>the one-dimensional index. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the value of the <em>S</em> coefficient. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00196">196</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="SphericalEngine_8cpp_source.html#l00298">GeographicLib::SphericalEngine::Circle()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad30081b2dfdee79652aacbc24bacb635"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::Cv" ref="ad30081b2dfdee79652aacbc24bacb635" args="(int k, int n, int m, real f) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalEngine::coeff::Cv </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>k</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>n</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>An element of <em>C</em> with checking.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">k</td><td>the one-dimensional index. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">n</td><td>the requested degree. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>the requested order. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>a multiplier. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the value of the <em>C</em> coefficient multiplied by <em>f</em> in <em>n</em> and <em>m</em> are in range else 0. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00207">207</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4fc7e6c7faf3f5940ee8f3ab28216897"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::Sv" ref="a4fc7e6c7faf3f5940ee8f3ab28216897" args="(int k, int n, int m, real f) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalEngine::coeff::Sv </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>k</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>n</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>An element of <em>S</em> with checking.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">k</td><td>the one-dimensional index. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">n</td><td>the requested degree. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>the requested order. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>a multiplier. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the value of the <em>S</em> coefficient multiplied by <em>f</em> in <em>n</em> and <em>m</em> are in range else 0. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00219">219</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8a126c9790a7a1609046fbae7934e587"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::Csize" ref="a8a126c9790a7a1609046fbae7934e587" args="(int N, int M)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static int GeographicLib::SphericalEngine::coeff::Csize </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>M</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The size of the coefficient vector for the cosine terms.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the maximum degree. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">M</td><td>the maximum order. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the size of the vector of cosine terms as stored in column major order. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00230">230</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a98a75827d68247cf5ad1843d9d68b222"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::Ssize" ref="a98a75827d68247cf5ad1843d9d68b222" args="(int N, int M)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static int GeographicLib::SphericalEngine::coeff::Ssize </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>M</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The size of the coefficient vector for the sine terms.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the maximum degree. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">M</td><td>the maximum order. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the size of the vector of cosine terms as stored in column major order. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8hpp_source.html#l00241">241</a> of file <a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2d545f589894683e7de297c42b7c995a"></a><!-- doxytag: member="GeographicLib::SphericalEngine::coeff::readcoeffs" ref="a2d545f589894683e7de297c42b7c995a" args="(std::istream &stream, int &N, int &M, std::vector< real > &C, std::vector< real > &S)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::SphericalEngine::coeff::readcoeffs </td>
-          <td>(</td>
-          <td class="paramtype">std::istream & </td>
-          <td class="paramname"><em>stream</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>M</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::vector< real > & </td>
-          <td class="paramname"><em>C</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::vector< real > & </td>
-          <td class="paramname"><em>S</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load coefficients from a binary stream.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">stream</td><td>the input stream. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">N</td><td>The maximum degree of the coefficients. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">M</td><td>The maximum order of the coefficients. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">C</td><td>The vector of cosine coefficients. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">S</td><td>The vector of sine coefficients.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p><em>N</em> and <em>M</em> are read as 4-byte ints. <em>C</em> and <em>S</em> are resized to accommodate all the coefficients (with the <em>m</em> = 0 coefficients for <em>S</em> excluded) and the data for these coefficients read as 8-byte doubles. The coefficients are stored in column major order. The bytes in the stream should use little-endian ordering. IEEE floating point is assumed for the coefficients. </p>
-
-<p>Definition at line <a class="el" href="SphericalEngine_8cpp_source.html#l00382">382</a> of file <a class="el" href="SphericalEngine_8cpp_source.html">SphericalEngine.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00043">GeographicLib::GravityModel::GravityModel()</a>, and <a class="el" href="MagneticModel_8cpp_source.html#l00044">GeographicLib::MagneticModel::MagneticModel()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="SphericalEngine_8hpp_source.html">SphericalEngine.hpp</a></li>
-<li><a class="el" href="SphericalEngine_8cpp_source.html">SphericalEngine.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalHarmonic-members.html b/doc/html/classGeographicLib_1_1SphericalHarmonic-members.html
deleted file mode 100644
index 49ddb23..0000000
--- a/doc/html/classGeographicLib_1_1SphericalHarmonic-members.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">SphericalHarmonic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalHarmonic Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">Circle</a>(real p, real z, bool gradp) const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#ac8886de1d1400ecf6482f6441c76a8a0">Coefficients</a>() const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">FULL</a> enum value</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eb">normalization</a> enum name</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a42480d85a81238f612a6178410bf97ff">operator()</a>(real x, real y, real z) const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a5046d787c241c5216cfeb0062673cbd7">operator()</a>(real x, real y, real z, real &gradx, real &grady, real &gradz) const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">SCHMIDT</a> enum value</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#adb71d28aa60a813ca3384f9c58ef8fa1">SphericalHarmonic</a>(const std::vector< real > &C, const std::vector< real > &S, int N, real a, unsigned norm=FULL)</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2ed62c0ad8fb1ab36d5a331a3f33c3d7">SphericalHarmonic</a>(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, real a, unsigned norm=FULL)</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a6d97388f273d1511a8191d812e9bde3e">SphericalHarmonic</a>()</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">GeographicLib::SphericalHarmonic</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalHarmonic.html b/doc/html/classGeographicLib_1_1SphericalHarmonic.html
deleted file mode 100644
index 2b80024..0000000
--- a/doc/html/classGeographicLib_1_1SphericalHarmonic.html
+++ /dev/null
@@ -1,558 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::SphericalHarmonic Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">SphericalHarmonic</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalHarmonic Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::SphericalHarmonic" -->
-<p>Spherical Harmonic series.  
- <a href="classGeographicLib_1_1SphericalHarmonic.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="SphericalHarmonic_8hpp_source.html">GeographicLib/SphericalHarmonic.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1SphericalHarmonic-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eb">normalization</a> { <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">FULL</a>, 
-<a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">SCHMIDT</a>
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#adb71d28aa60a813ca3384f9c58ef8fa1">SphericalHarmonic</a> (const std::vector< real > &C, const std::vector< real > &S, int N, real a, unsigned norm=FULL)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2ed62c0ad8fb1ab36d5a331a3f33c3d7">SphericalHarmonic</a> (const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, real a, unsigned norm=FULL)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a6d97388f273d1511a8191d812e9bde3e">SphericalHarmonic</a> ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a42480d85a81238f612a6178410bf97ff">operator()</a> (real x, real y, real z) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a5046d787c241c5216cfeb0062673cbd7">operator()</a> (real x, real y, real z, real &gradx, real &grady, real &gradz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">Circle</a> (real p, real z, bool gradp) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#ac8886de1d1400ecf6482f6441c76a8a0">Coefficients</a> () const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Spherical Harmonic series. </p>
-<p>This class evaluates the spherical harmonic sum </p>
-<div class="fragment"><pre class="fragment">
- V(x, y, z) = sum(n = 0..N)[ q^(n+1) * sum(m = 0..n)[
-   (C[n,m] * cos(m*lambda) + S[n,m] * sin(m*lambda)) *
-   P[n,m](cos(theta)) ] ]
-</pre></div><p> where</p>
-<ul>
-<li><em>p</em><sup>2</sup> = <em>x</em><sup>2</sup> + <em>y</em><sup>2</sup>,</li>
-<li><em>r</em><sup>2</sup> = <em>p</em><sup>2</sup> + <em>z</em><sup>2</sup>,</li>
-<li><em>q</em> = <em>a</em>/<em>r</em>,</li>
-<li><em>theta</em> = atan2(<em>p</em>, <em>z</em>) = the spherical <em>colatitude</em>,</li>
-<li><em>lambda</em> = atan2(<em>y</em>, <em>x</em>) = the longitude.</li>
-<li>P<sub><em>nm</sub></em>(<em>t</em>) is the associated Legendre polynomial of degree <em>n</em> and order <em>m</em>.</li>
-</ul>
-<p>Two normalizations are supported for P<sub><em>nm</sub></em> </p>
-<ul>
-<li>fully normalized denoted by <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">SphericalHarmonic::FULL</a>.</li>
-<li>Schmidt semi-normalized denoted by <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">SphericalHarmonic::SCHMIDT</a>.</li>
-</ul>
-<p>Clenshaw summation is used for the sums over both <em>n</em> and <em>m</em>. This allows the computation to be carried out without the need for any temporary arrays. See <a class="el" href="SphericalEngine_8cpp.html" title="Implementation for GeographicLib::SphericalEngine class.">SphericalEngine.cpp</a> for more information on the implementation.</p>
-<p>References:</p>
-<ul>
-<li>C. W. Clenshaw, A note on the summation of Chebyshev series, Math. Tables Aids Comput. 9(51), 118-120 (1955).</li>
-<li>R. E. Deakin, Derivatives of the earth's potentials, Geomatics Research Australasia 68, 31-60, (June 1998).</li>
-<li>W. A. Heiskanen and H. Moritz, Physical Geodesy, (Freeman, San Francisco, 1967). (See Sec. 1-14, for a definition of Pbar.)</li>
-<li>S. A. Holmes and W. E. Featherstone, A unified approach to the Clenshaw summation and the recursive computation of very high degree and order normalised associated Legendre functions, J. Geod. 76(5), 279-299 (2002).</li>
-<li>C. C. Tscherning and K. Poder, Some geodetic applications of Clenshaw summation, Boll. Geod. Sci. Aff. 41(4), 349-375 (1982).</li>
-</ul>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::SphericalHarmonic class</span>
-<span class="comment">// $Id: b7e4a45d66787db49d40aa7bc991ab686cc32d44 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <vector></span>
-<span class="preprocessor">#include <<a class="code" href="SphericalHarmonic_8hpp.html" title="Header for GeographicLib::SphericalHarmonic class.">GeographicLib/SphericalHarmonic.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="keywordtype">int</span> N = 3;                  <span class="comment">// The maxium degree</span>
-    <span class="keywordtype">double</span> ca[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; <span class="comment">// cosine coefficients</span>
-    vector<double> C(ca, ca + (N + 1) * (N + 2) / 2);
-    <span class="keywordtype">double</span> sa[] = {6, 5, 4, 3, 2, 1}; <span class="comment">// sine coefficients</span>
-    vector<double> S(sa, sa + N * (N + 1) / 2);
-    <span class="keywordtype">double</span> a = 1;
-    <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> h(C, S, N, a);
-    <span class="keywordtype">double</span> x = 2, y = 3, z = 1;
-    <span class="keywordtype">double</span> v, vx, vy, vz;
-    v = h(x, y, z, vx, vy, vz);
-    cout << v << <span class="stringliteral">" "</span> << vx << <span class="stringliteral">" "</span> << vy << <span class="stringliteral">" "</span> << vz << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="a889791c67edc32865996842c600104eb"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic::normalization" ref="a889791c67edc32865996842c600104eb" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eb">GeographicLib::SphericalHarmonic::normalization</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Supported normalizations for the associated Legendre polynomials. </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782"></a><!-- doxytag: member="FULL" ref="a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782" args="" -->FULL</em> </td><td>
-<p>Fully normalized associated Legendre polynomials.</p>
-<p>These are defined by <em>P</em><sub><em>nm</em></sub><sup>full</sup>(<em>z</em>) = (-1)<sup><em>m</em></sup> sqrt(<em>k</em> (2<em>n</em> + 1) (<em>n</em> - <em>m</em>)! / (<em>n</em> + <em>m</em>)!) <b>P</b><sub><em>n</em></sub><sup><em>m</em></sup>(<em>z</em>), where <b>P</b><sub><em>n</em></sub><sup><em>m</em></sup>(<em>z</em>) is Ferrers function (also known as the Legendre function on the cut or the associated Legendre polynomial) <a href="http://dlmf.nist.gov/14.7.E10">http://dl [...]
-<p>The mean squared value of <em>P</em><sub><em>nm</em></sub><sup>full</sup>(cos <em>theta</em>) cos(<em>m</em> <em>lambda</em>) and <em>P</em><sub><em>nm</em></sub><sup>full</sup>(cos <em>theta</em>) sin(<em>m</em> <em>lambda</em>) over the sphere is 1. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e"></a><!-- doxytag: member="SCHMIDT" ref="a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e" args="" -->SCHMIDT</em> </td><td>
-<p>Schmidt semi-normalized associated Legendre polynomials.</p>
-<p>These are defined by <em>P</em><sub><em>nm</em></sub><sup>schmidt</sup>(<em>z</em>) = (-1)<sup><em>m</em></sup> sqrt(<em>k</em> (<em>n</em> - <em>m</em>)! / (<em>n</em> + <em>m</em>)!) <b>P</b><sub><em>n</em></sub><sup><em>m</em></sup>(<em>z</em>), where <b>P</b><sub><em>n</em></sub><sup><em>m</em></sup>(<em>z</em>) is Ferrers function (also known as the Legendre function on the cut or the associated Legendre polynomial) <a href="http://dlmf.nist.gov/14.7.E10">http://dlmf.nist.gov/14. [...]
-<p>The mean squared value of <em>P</em><sub><em>nm</em></sub><sup>schmidt</sup>(cos <em>theta</em>) cos(<em>m</em> <em>lambda</em>) and <em>P</em><sub><em>nm</em></sub><sup>schmidt</sup>(cos <em>theta</em>) sin(<em>m</em> <em>lambda</em>) over the sphere is 1/(2<em>n</em> + 1). </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic_8hpp_source.html#l00071">71</a> of file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="adb71d28aa60a813ca3384f9c58ef8fa1"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic::SphericalHarmonic" ref="adb71d28aa60a813ca3384f9c58ef8fa1" args="(const std::vector< real > &C, const std::vector< real > &S, int N, real a, unsigned norm=FULL)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalHarmonic::SphericalHarmonic </td>
-          <td>(</td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>norm</em> = <code>FULL</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with a full set of coefficients specified.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">C</td><td>the coefficients <em>C<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S</td><td>the coefficients <em>S<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the maximum degree and order of the sum </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>the reference radius appearing in the definition of the sum. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">norm</td><td>the normalization for the associated Legendre polynomials, either SphericalHarmonic::full (the default) or SphericalHarmonic::schmidt.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The coefficients <em>C<sub><em>nm</sub></em> and</em> <em>S<sub><em>nm</sub></em> are</em> stored in the one-dimensional vectors <em>C</em> and <em>S</em> which must contain (<em>N</em> + 1)(<em>N</em> + 2)/2 and N (<em>N</em> + 1)/2 elements, respectively, stored in "column-major" order. Thus for <em>N</em> = 3, the order would be: <em>C</em><sub>00</sub>, <em>C</em><sub>10</sub>, <em>C</em><sub>20</sub>, <em>C</em><sub>30</sub>, <em>C</em><sub>11</sub>, <em>C</em><sub>21</sub>, <em> [...]
-<p>The class stores <em>pointers</em> to the first elements of <em>C</em> and <em>S</em>. These arrays should not be altered or destroyed during the lifetime of a <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> object. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic_8hpp_source.html#l00159">159</a> of file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2ed62c0ad8fb1ab36d5a331a3f33c3d7"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic::SphericalHarmonic" ref="a2ed62c0ad8fb1ab36d5a331a3f33c3d7" args="(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, real a, unsigned norm=FULL)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalHarmonic::SphericalHarmonic </td>
-          <td>(</td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>nmx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>mmx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>norm</em> = <code>FULL</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with a subset of coefficients specified.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">C</td><td>the coefficients <em>C<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S</td><td>the coefficients <em>S<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the degree used to determine the layout of <em>C</em> and <em>S</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">nmx</td><td>the maximum degree used in the sum. The sum over <em>n</em> is from 0 thru <em>nmx</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">mmx</td><td>the maximum order used in the sum. The sum over <em>m</em> is from 0 thru min(<em>n</em>, <em>mmx</em>). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>the reference radius appearing in the definition of the sum. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">norm</td><td>the normalization for the associated Legendre polynomials, either <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">SphericalHarmonic::FULL</a> (the default) or <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">SphericalHarmonic::SCHMIDT</a>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The class stores <em>pointers</em> to the first elements of <em>C</em> and <em>S</em>. These arrays should not be altered or destroyed during the lifetime of a <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> object. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic_8hpp_source.html#l00186">186</a> of file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6d97388f273d1511a8191d812e9bde3e"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic::SphericalHarmonic" ref="a6d97388f273d1511a8191d812e9bde3e" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalHarmonic::SphericalHarmonic </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor so that the object can be created when the constructor for another object is initialized. This default object can then be reset with the default copy assignment operator. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic_8hpp_source.html#l00199">199</a> of file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a42480d85a81238f612a6178410bf97ff"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic::operator()" ref="a42480d85a81238f612a6178410bf97ff" args="(real x, real y, real z) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalHarmonic::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the spherical harmonic sum.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>cartesian coordinate. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the spherical harmonic sum.</dd></dl>
-<p>This routine requires constant memory and thus never throws an exception. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic_8hpp_source.html#l00212">212</a> of file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5046d787c241c5216cfeb0062673cbd7"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic::operator()" ref="a5046d787c241c5216cfeb0062673cbd7" args="(real x, real y, real z, real &gradx, real &grady, real &gradz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalHarmonic::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>grady</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute a spherical harmonic sum and its gradient.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradx</td><td><em>x</em> component of the gradient </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">grady</td><td><em>y</em> component of the gradient </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradz</td><td><em>z</em> component of the gradient </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the spherical harmonic sum.</dd></dl>
-<p>This is the same as the previous function, except that the components of the gradients of the sum in the <em>x</em>, <em>y</em>, and <em>z</em> directions are computed. This routine requires constant memory and thus never throws an exception. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic_8hpp_source.html#l00245">245</a> of file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2b2b2ad35bba090a4956693ba5ef0f32"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic::Circle" ref="a2b2b2ad35bba090a4956693ba5ef0f32" args="(real p, real z, bool gradp) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a> GeographicLib::SphericalHarmonic::Circle </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>p</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>gradp</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Create a <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> to allow the efficient evaluation of several points on a circle of latitude.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">p</td><td>the radius of the circle. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>the height of the circle above the equatorial plane. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">gradp</td><td>if true the returned object will be able to compute the gradient of the sum. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> object.</dd></dl>
-<p><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a42480d85a81238f612a6178410bf97ff">SphericalHarmonic::operator()()</a> exchanges the order of the sums in the definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m = 0..N)[sum(n = m..N)[...]]. <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">SphericalHarmonic::Circle</a> performs the inner sum over degree <em>n</em> (which entails about <em>N</em><sup>2</sup> [...]
-<p>Here's an example of computing the spherical sum at a sequence of longitudes without using a <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> object </p>
-<div class="fragment"><pre class="fragment">  <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a6d97388f273d1511a8191d812e9bde3e">SphericalHarmonic</a> h(...);     <span class="comment">// Create the SphericalHarmonic object</span>
-  <span class="keywordtype">double</span> r = 2, lat = 33, lon0 = 44, dlon = 0.01;
-  <span class="keywordtype">double</span>
-    phi = lat * Math::degree<double>(),
-    z = r * sin(phi), p = r * cos(phi);
-  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= 100; ++i) {
-    <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-      lon = lon0 + i * dlon,
-      lam = lon * Math::degree<double>();
-    std::cout << lon << <span class="stringliteral">" "</span> << h(p * cos(lam), p * sin(lam), z) << <span class="stringliteral">"\n"</span>;
-  }
-</pre></div><p> Here is the same calculation done using a <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> object. This will be about <em>N</em>/2 times faster. </p>
-<div class="fragment"><pre class="fragment">  <a class="code" href="classGeographicLib_1_1SphericalHarmonic.html#a6d97388f273d1511a8191d812e9bde3e">SphericalHarmonic</a> h(...);     <span class="comment">// Create the SphericalHarmonic object</span>
-  <span class="keywordtype">double</span> r = 2, lat = 33, lon0 = 44, dlon = 0.01;
-  <span class="keywordtype">double</span>
-    phi = lat * Math::degree<double>(),
-    z = r * sin(phi), p = r * cos(phi);
-  CircularEngine c(h(p, z, <span class="keyword">false</span>)); <span class="comment">// Create the CircularEngine object</span>
-  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= 100; ++i) {
-    <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
-      lon = lon0 + i * dlon;
-    std::cout << lon << <span class="stringliteral">" "</span> << c(lon) << <span class="stringliteral">"\n"</span>;
-  }
-</pre></div> 
-<p>Definition at line <a class="el" href="SphericalHarmonic_8hpp_source.html#l00312">312</a> of file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00309">GeographicLib::GravityModel::Circle()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac8886de1d1400ecf6482f6441c76a8a0"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic::Coefficients" ref="ac8886de1d1400ecf6482f6441c76a8a0" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a>& GeographicLib::SphericalHarmonic::Coefficients </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the zeroth <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a> object. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic_8hpp_source.html#l00336">336</a> of file <a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00043">GeographicLib::GravityModel::GravityModel()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="SphericalHarmonic_8hpp_source.html">SphericalHarmonic.hpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalHarmonic1-members.html b/doc/html/classGeographicLib_1_1SphericalHarmonic1-members.html
deleted file mode 100644
index b9d7c7d..0000000
--- a/doc/html/classGeographicLib_1_1SphericalHarmonic1-members.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">SphericalHarmonic1</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalHarmonic1 Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a32dd4989c40181939d667298681625f6">Circle</a>(real tau, real p, real z, bool gradp) const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a67fe3c8ab08be94a300d07c98814aab0">Coefficients</a>() const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ad200e309790cd6e41bb79529d9076274">Coefficients1</a>() const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638">FULL</a> enum value</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916">normalization</a> enum name</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a43098674b6bb823ccbac8908a7831234">operator()</a>(real tau, real x, real y, real z) const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac732f25af07eee71ad0ca288a2e86fbd">operator()</a>(real tau, real x, real y, real z, real &gradx, real &grady, real &gradz) const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231">SCHMIDT</a> enum value</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#aeb3299ea40b0bedae55fd0a6f0c1fa40">SphericalHarmonic1</a>(const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, real a, unsigned norm=FULL)</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td><code> [inline]< [...]
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#aca472a143f7e000e232f4c261550b626">SphericalHarmonic1</a>(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, const std::vector< real > &C1, const std::vector< real > &S1, int N1, int nmx1, int mmx1, real a, unsigned norm=FULL)</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::Spherical [...]
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#aa976378e6eae1e85ce04976b631ccb5f">SphericalHarmonic1</a>()</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">GeographicLib::SphericalHarmonic1</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalHarmonic1.html b/doc/html/classGeographicLib_1_1SphericalHarmonic1.html
deleted file mode 100644
index c9305cf..0000000
--- a/doc/html/classGeographicLib_1_1SphericalHarmonic1.html
+++ /dev/null
@@ -1,603 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::SphericalHarmonic1 Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">SphericalHarmonic1</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalHarmonic1 Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::SphericalHarmonic1" -->
-<p>Spherical Harmonic series with a correction to the coefficients.  
- <a href="classGeographicLib_1_1SphericalHarmonic1.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="SphericalHarmonic1_8hpp_source.html">GeographicLib/SphericalHarmonic1.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1SphericalHarmonic1-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916">normalization</a> { <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638">FULL</a>, 
-<a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231">SCHMIDT</a>
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#aeb3299ea40b0bedae55fd0a6f0c1fa40">SphericalHarmonic1</a> (const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, real a, unsigned norm=FULL)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#aca472a143f7e000e232f4c261550b626">SphericalHarmonic1</a> (const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, const std::vector< real > &C1, const std::vector< real > &S1, int N1, int nmx1, int mmx1, real a, unsigned norm=FULL)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#aa976378e6eae1e85ce04976b631ccb5f">SphericalHarmonic1</a> ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a43098674b6bb823ccbac8908a7831234">operator()</a> (real tau, real x, real y, real z) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac732f25af07eee71ad0ca288a2e86fbd">operator()</a> (real tau, real x, real y, real z, real &gradx, real &grady, real &gradz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a32dd4989c40181939d667298681625f6">Circle</a> (real tau, real p, real z, bool gradp) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a67fe3c8ab08be94a300d07c98814aab0">Coefficients</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ad200e309790cd6e41bb79529d9076274">Coefficients1</a> () const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Spherical Harmonic series with a correction to the coefficients. </p>
-<p>This classes is similar to <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>, except that the coefficients <em>C<sub><em>nm</sub></em> are</em> replaced by <em>C<sub><em>nm</sub></em> +</em> <em>tau</em> C'<sub><em>nm</sub></em> (and similarly for <em>S<sub><em>nm</sub></em>)</em>.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::SphericalHarmonic1 class</span>
-<span class="comment">// $Id: 9d964d2e64c201179a88e51697b508414ff8c800 $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <vector></span>
-<span class="preprocessor">#include <<a class="code" href="SphericalHarmonic1_8hpp.html" title="Header for GeographicLib::SphericalHarmonic1 class.">GeographicLib/SphericalHarmonic1.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="keywordtype">int</span> N = 3, N1 = 2;                  <span class="comment">// The maxium degrees</span>
-    <span class="keywordtype">double</span> ca[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; <span class="comment">// cosine coefficients</span>
-    vector<double> C(ca, ca + (N + 1) * (N + 2) / 2);
-    <span class="keywordtype">double</span> sa[] = {6, 5, 4, 3, 2, 1}; <span class="comment">// sine coefficients</span>
-    vector<double> S(sa, sa + N * (N + 1) / 2);
-    <span class="keywordtype">double</span> cb[] = {1, 2, 3, 4, 5, 6};
-    vector<double> C1(cb, cb + (N1 + 1) * (N1 + 2) / 2);
-    <span class="keywordtype">double</span> sb[] = {3, 2, 1};
-    vector<double> S1(sb, sb + N1 * (N1 + 1) / 2);
-    <span class="keywordtype">double</span> a = 1;
-    <a class="code" href="classGeographicLib_1_1SphericalHarmonic1.html" title="Spherical Harmonic series with a correction to the coefficients.">SphericalHarmonic1</a> h(C, S, N, C1, S1, N1, a);
-    <span class="keywordtype">double</span> tau = 0.1, x = 2, y = 3, z = 1;
-    <span class="keywordtype">double</span> v, vx, vy, vz;
-    v = h(tau, x, y, z, vx, vy, vz);
-    cout << v << <span class="stringliteral">" "</span> << vx << <span class="stringliteral">" "</span> << vy << <span class="stringliteral">" "</span> << vz << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="ac4aaa81e0f753894ecef173c4d667916"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic1::normalization" ref="ac4aaa81e0f753894ecef173c4d667916" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916">GeographicLib::SphericalHarmonic1::normalization</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Supported normalizations for associate Legendre polynomials. </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638"></a><!-- doxytag: member="FULL" ref="ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638" args="" -->FULL</em> </td><td>
-<p>Fully normalized associated Legendre polynomials. See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">SphericalHarmonic::FULL</a> for documentation. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231"></a><!-- doxytag: member="SCHMIDT" ref="ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231" args="" -->SCHMIDT</em> </td><td>
-<p>Schmidt semi-normalized associated Legendre polynomials. See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">SphericalHarmonic::SCHMIDT</a> for documentation. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00037">37</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="aeb3299ea40b0bedae55fd0a6f0c1fa40"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic1::SphericalHarmonic1" ref="aeb3299ea40b0bedae55fd0a6f0c1fa40" args="(const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, real a, unsigned norm=FULL)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalHarmonic1::SphericalHarmonic1 </td>
-          <td>(</td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>norm</em> = <code>FULL</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with a full set of coefficients specified.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">C</td><td>the coefficients <em>C<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S</td><td>the coefficients <em>S<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the maximum degree and order of the sum </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">C1</td><td>the coefficients <em>C'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S1</td><td>the coefficients <em>S'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N1</td><td>the maximum degree and order of the correction coefficients <em>C'<sub><em>nm</sub></em> and</em> <em>S'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>the reference radius appearing in the definition of the sum. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">norm</td><td>the normalization for the associated Legendre polynomials, either <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638">SphericalHarmonic1::FULL</a> (the default) or <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231">SphericalHarmonic1::SCHMIDT</a>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> for the way the coefficients should be stored. <em>N1</em> should satisfy <em>N1</em> <= <em>N</em>.</p>
-<p>The class stores <em>pointers</em> to the first elements of <em>C</em>, <em>S</em>, <em>C'</em>, and <em>S'</em>. These arrays should not be altered or destroyed during the lifetime of a <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> object. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00089">89</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aca472a143f7e000e232f4c261550b626"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic1::SphericalHarmonic1" ref="aca472a143f7e000e232f4c261550b626" args="(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, const std::vector< real > &C1, const std::vector< real > &S1, int N1, int nmx1, int mmx1, real a, unsigned norm=FULL)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalHarmonic1::SphericalHarmonic1 </td>
-          <td>(</td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>nmx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>mmx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>nmx1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>mmx1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>norm</em> = <code>FULL</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with a subset of coefficients specified.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">C</td><td>the coefficients <em>C<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S</td><td>the coefficients <em>S<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the degree used to determine the layout of <em>C</em> and <em>S</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">nmx</td><td>the maximum degree used in the sum. The sum over <em>n</em> is from 0 thru <em>nmx</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">mmx</td><td>the maximum order used in the sum. The sum over <em>m</em> is from 0 thru min(<em>n</em>, <em>mmx</em>). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">C1</td><td>the coefficients <em>C'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S1</td><td>the coefficients <em>S'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N1</td><td>the degree used to determine the layout of <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">nmx1</td><td>the maximum degree used for <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">mmx1</td><td>the maximum order used for <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>the reference radius appearing in the definition of the sum. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">norm</td><td>the normalization for the associated Legendre polynomials, either <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638">SphericalHarmonic1::FULL</a> (the default) or <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231">SphericalHarmonic1::SCHMIDT</a>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The class stores <em>pointers</em> to the first elements of <em>C</em>, <em>S</em>, <em>C'</em>, and <em>S'</em>. These arrays should not be altered or destroyed during the lifetime of a <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> object. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00130">130</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa976378e6eae1e85ce04976b631ccb5f"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic1::SphericalHarmonic1" ref="aa976378e6eae1e85ce04976b631ccb5f" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalHarmonic1::SphericalHarmonic1 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor so that the object can be created when the constructor for another object is initialized. This default object can then be reset with the default copy assignment operator. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00152">152</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a43098674b6bb823ccbac8908a7831234"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic1::operator()" ref="a43098674b6bb823ccbac8908a7831234" args="(real tau, real x, real y, real z) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalHarmonic1::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>tau</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute a spherical harmonic sum with a correction term.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">tau</td><td>multiplier for correction coefficients <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>cartesian coordinate. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the spherical harmonic sum.</dd></dl>
-<p>This routine requires constant memory and thus never throws an exception. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00166">166</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac732f25af07eee71ad0ca288a2e86fbd"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic1::operator()" ref="ac732f25af07eee71ad0ca288a2e86fbd" args="(real tau, real x, real y, real z, real &gradx, real &grady, real &gradz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalHarmonic1::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>tau</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>grady</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute a spherical harmonic sum with a correction term and its gradient.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">tau</td><td>multiplier for correction coefficients <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradx</td><td><em>x</em> component of the gradient </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">grady</td><td><em>y</em> component of the gradient </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradz</td><td><em>z</em> component of the gradient </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the spherical harmonic sum.</dd></dl>
-<p>This is the same as the previous function, except that the components of the gradients of the sum in the <em>x</em>, <em>y</em>, and <em>z</em> directions are computed. This routine requires constant memory and thus never throws an exception. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00201">201</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a32dd4989c40181939d667298681625f6"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic1::Circle" ref="a32dd4989c40181939d667298681625f6" args="(real tau, real p, real z, bool gradp) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a> GeographicLib::SphericalHarmonic1::Circle </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>tau</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>p</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>gradp</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Create a <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> to allow the efficient evaluation of several points on a circle of latitude at a fixed value of <em>tau</em>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">tau</td><td>the multiplier for the correction coefficients. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">p</td><td>the radius of the circle. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>the height of the circle above the equatorial plane. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">gradp</td><td>if true the returned object will be able to compute the gradient of the sum. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> object.</dd></dl>
-<p><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a43098674b6bb823ccbac8908a7831234">SphericalHarmonic1::operator()()</a> exchanges the order of the sums in the definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m = 0..N)[sum(n = m..N)[...]]. <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a32dd4989c40181939d667298681625f6">SphericalHarmonic1::Circle</a> performs the inner sum over degree <em>n</em> (which entails about <em>N</em><sup>2</ [...]
-<p>See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">SphericalHarmonic::Circle</a> for an example of its use. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00240">240</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GravityModel_8cpp_source.html#l00309">GeographicLib::GravityModel::Circle()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a67fe3c8ab08be94a300d07c98814aab0"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic1::Coefficients" ref="a67fe3c8ab08be94a300d07c98814aab0" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a>& GeographicLib::SphericalHarmonic1::Coefficients </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the zeroth <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a> object. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00264">264</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad200e309790cd6e41bb79529d9076274"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic1::Coefficients1" ref="ad200e309790cd6e41bb79529d9076274" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a>& GeographicLib::SphericalHarmonic1::Coefficients1 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the first <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a> object. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic1_8hpp_source.html#l00269">269</a> of file <a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="SphericalHarmonic1_8hpp_source.html">SphericalHarmonic1.hpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalHarmonic2-members.html b/doc/html/classGeographicLib_1_1SphericalHarmonic2-members.html
deleted file mode 100644
index fb46ed1..0000000
--- a/doc/html/classGeographicLib_1_1SphericalHarmonic2-members.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">SphericalHarmonic2</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalHarmonic2 Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a3aa683a43a8e9232a16390b09c6be920">Circle</a>(real tau1, real tau2, real p, real z, bool gradp) const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a166338f0b4ccf89c48278bb9514046f0">Coefficients</a>() const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a51751279dc4e0b6e19886723f8e8b493">Coefficients1</a>() const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a676b4c36923744bf5057b24484d9cf60">Coefficients2</a>() const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946">FULL</a> enum value</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8be">normalization</a> enum name</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a48f85ac41417815e6735ff5aa7d74155">operator()</a>(real tau1, real tau2, real x, real y, real z) const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a762d48fc2c3dc902859286de4df7672c">operator()</a>(real tau1, real tau2, real x, real y, real z, real &gradx, real &grady, real &gradz) const </td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58">SCHMIDT</a> enum value</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a897f6b15b82812e874a2b0927cfc3912">SphericalHarmonic2</a>(const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, const std::vector< real > &C2, const std::vector< real > &S2, int N2, real a, unsigned norm=FULL)</td><td><a class="el" href="classGeographicLib_ [...]
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a19300de2d629c014883026bf0042b6f0">SphericalHarmonic2</a>(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, const std::vector< real > &C1, const std::vector< real > &S1, int N1, int nmx1, int mmx1, const std::vector< real > &C2, const std::vector< real > &S2, int N2, int nmx2, int mmx2, real a, unsigned  [...]
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a2fad42164df6175bc376e2f78e3e0c5a">SphericalHarmonic2</a>()</td><td><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">GeographicLib::SphericalHarmonic2</a></td><td><code> [inline]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1SphericalHarmonic2.html b/doc/html/classGeographicLib_1_1SphericalHarmonic2.html
deleted file mode 100644
index f2b8ef1..0000000
--- a/doc/html/classGeographicLib_1_1SphericalHarmonic2.html
+++ /dev/null
@@ -1,702 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::SphericalHarmonic2 Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">SphericalHarmonic2</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-methods">Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::SphericalHarmonic2 Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::SphericalHarmonic2" -->
-<p>Spherical Harmonic series with two corrections to the coefficients.  
- <a href="classGeographicLib_1_1SphericalHarmonic2.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="SphericalHarmonic2_8hpp_source.html">GeographicLib/SphericalHarmonic2.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1SphericalHarmonic2-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8be">normalization</a> { <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946">FULL</a>, 
-<a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58">SCHMIDT</a>
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a897f6b15b82812e874a2b0927cfc3912">SphericalHarmonic2</a> (const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, const std::vector< real > &C2, const std::vector< real > &S2, i [...]
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a19300de2d629c014883026bf0042b6f0">SphericalHarmonic2</a> (const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, const std::vector< real > &C1, const std::vector< real > &S1, int N1, int nmx1, int mmx1, const std::vector< real > &C2, cons [...]
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a2fad42164df6175bc376e2f78e3e0c5a">SphericalHarmonic2</a> ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a48f85ac41417815e6735ff5aa7d74155">operator()</a> (real tau1, real tau2, real x, real y, real z) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a762d48fc2c3dc902859286de4df7672c">operator()</a> (real tau1, real tau2, real x, real y, real z, real &gradx, real &grady, real &gradz) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a3aa683a43a8e9232a16390b09c6be920">Circle</a> (real tau1, real tau2, real p, real z, bool gradp) const </td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a166338f0b4ccf89c48278bb9514046f0">Coefficients</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a51751279dc4e0b6e19886723f8e8b493">Coefficients1</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a676b4c36923744bf5057b24484d9cf60">Coefficients2</a> () const   throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Spherical Harmonic series with two corrections to the coefficients. </p>
-<p>This classes is similar to <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>, except that the coefficients <em>C<sub><em>nm</sub></em> are</em> replaced by <em>C<sub><em>nm</sub></em> +</em> <em>tau'</em> C'<sub><em>nm</sub></em> + <em>tau''</em> C''<sub><em>nm</sub></em> (and similarly for <em>S<sub><em>nm</sub></em>)</em>.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::SphericalHarmonic2 class</span>
-<span class="comment">// $Id: 123fa26549f23444cf8b29d2381f2a6e5e672b5f $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <vector></span>
-<span class="preprocessor">#include <<a class="code" href="SphericalHarmonic2_8hpp.html" title="Header for GeographicLib::SphericalHarmonic2 class.">GeographicLib/SphericalHarmonic2.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="keywordtype">int</span> N = 3, N1 = 2, N2 = 1;                     <span class="comment">// The maxium degrees</span>
-    <span class="keywordtype">double</span> ca[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; <span class="comment">// cosine coefficients</span>
-    vector<double> C(ca, ca + (N + 1) * (N + 2) / 2);
-    <span class="keywordtype">double</span> sa[] = {6, 5, 4, 3, 2, 1}; <span class="comment">// sine coefficients</span>
-    vector<double> S(sa, sa + N * (N + 1) / 2);
-    <span class="keywordtype">double</span> cb[] = {1, 2, 3, 4, 5, 6};
-    vector<double> C1(cb, cb + (N1 + 1) * (N1 + 2) / 2);
-    <span class="keywordtype">double</span> sb[] = {3, 2, 1};
-    vector<double> S1(sb, sb + N1 * (N1 + 1) / 2);
-    <span class="keywordtype">double</span> cc[] = {2, 1};
-    vector<double> C2(cc, cc + (N2 + 1));
-    vector<double> S2;
-    <span class="keywordtype">double</span> a = 1;
-    <a class="code" href="classGeographicLib_1_1SphericalHarmonic2.html" title="Spherical Harmonic series with two corrections to the coefficients.">SphericalHarmonic2</a> h(C, S, N, N, N, C1, S1, N1, N1, N1,
-                         C2, S2, N2, N2, 0, a);
-    <span class="keywordtype">double</span> tau1 = 0.1, tau2 = 0.05, x = 2, y = 3, z = 1;
-    <span class="keywordtype">double</span> v, vx, vy, vz;
-    v = h(tau1, tau2, x, y, z, vx, vy, vz);
-    cout << v << <span class="stringliteral">" "</span> << vx << <span class="stringliteral">" "</span> << vy << <span class="stringliteral">" "</span> << vz << <span class="stringliteral">"\n"</span>;
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="adbdc59ce4e6f1e4ce0fc7169c760f8be"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::normalization" ref="adbdc59ce4e6f1e4ce0fc7169c760f8be" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8be">GeographicLib::SphericalHarmonic2::normalization</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Supported normalizations for associate Legendre polynomials. </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946"></a><!-- doxytag: member="FULL" ref="adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946" args="" -->FULL</em> </td><td>
-<p>Fully normalized associated Legendre polynomials. See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">SphericalHarmonic::FULL</a> for documentation. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58"></a><!-- doxytag: member="SCHMIDT" ref="adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58" args="" -->SCHMIDT</em> </td><td>
-<p>Schmidt semi-normalized associated Legendre polynomials. See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">SphericalHarmonic::SCHMIDT</a> for documentation. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00038">38</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a897f6b15b82812e874a2b0927cfc3912"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::SphericalHarmonic2" ref="a897f6b15b82812e874a2b0927cfc3912" args="(const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, const std::vector< real > &C2, const std::vector< real > &S2, int N2, real a, unsigned norm=FULL)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalHarmonic2::SphericalHarmonic2 </td>
-          <td>(</td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>norm</em> = <code>FULL</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with a full set of coefficients specified.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">C</td><td>the coefficients <em>C<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S</td><td>the coefficients <em>S<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the maximum degree and order of the sum </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">C1</td><td>the coefficients <em>C'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S1</td><td>the coefficients <em>S'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N1</td><td>the maximum degree and order of the first correction coefficients <em>C'<sub><em>nm</sub></em> and</em> <em>S'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">C2</td><td>the coefficients <em>C''<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S2</td><td>the coefficients <em>S''<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N2</td><td>the maximum degree and order of the second correction coefficients <em>C'<sub><em>nm</sub></em> and</em> <em>S'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>the reference radius appearing in the definition of the sum. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">norm</td><td>the normalization for the associated Legendre polynomials, either <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946">SphericalHarmonic2::FULL</a> (the default) or <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58">SphericalHarmonic2::SCHMIDT</a>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> for the way the coefficients should be stored. <em>N1</em> and <em>N2</em> should satisfy <em>N1</em> <= <em>N</em> and <em>N2</em> <= <em>N</em>.</p>
-<p>The class stores <em>pointers</em> to the first elements of <em>C</em>, <em>S</em>, <em>C'</em>, <em>S'</em>, <em>C''</em>, and <em>S''</em>. These arrays should not be altered or destroyed during the lifetime of a <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> object. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00094">94</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a19300de2d629c014883026bf0042b6f0"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::SphericalHarmonic2" ref="a19300de2d629c014883026bf0042b6f0" args="(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, const std::vector< real > &C1, const std::vector< real > &S1, int N1, int nmx1, int mmx1, const std::vector< real > &C2, const std::vector< real > &S2, int N2, in [...]
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalHarmonic2::SphericalHarmonic2 </td>
-          <td>(</td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>nmx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>mmx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>nmx1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>mmx1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>C2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const std::vector< real > & </td>
-          <td class="paramname"><em>S2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>N2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>nmx2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>mmx2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"><em>norm</em> = <code>FULL</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor with a subset of coefficients specified.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">C</td><td>the coefficients <em>C<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S</td><td>the coefficients <em>S<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N</td><td>the degree used to determine the layout of <em>C</em> and <em>S</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">nmx</td><td>the maximum degree used in the sum. The sum over <em>n</em> is from 0 thru <em>nmx</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">mmx</td><td>the maximum order used in the sum. The sum over <em>m</em> is from 0 thru min(<em>n</em>, <em>mmx</em>). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">C1</td><td>the coefficients <em>C'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S1</td><td>the coefficients <em>S'<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N1</td><td>the degree used to determine the layout of <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">nmx1</td><td>the maximum degree used for <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">mmx1</td><td>the maximum order used for <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">C2</td><td>the coefficients <em>C''<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">S2</td><td>the coefficients <em>S''<sub><em>nm</sub></em>.</em> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">N2</td><td>the degree used to determine the layout of <em>C''</em> and <em>S''</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">nmx2</td><td>the maximum degree used for <em>C''</em> and <em>S''</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">mmx2</td><td>the maximum order used for <em>C''</em> and <em>S''</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>the reference radius appearing in the definition of the sum. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">norm</td><td>the normalization for the associated Legendre polynomials, either <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946">SphericalHarmonic2::FULL</a> (the default) or <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58">SphericalHarmonic2::SCHMIDT</a>.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The class stores <em>pointers</em> to the first elements of <em>C</em>, <em>S</em>, <em>C'</em>, <em>S'</em>, <em>C''</em>, and <em>S''</em>. These arrays should not be altered or destroyed during the lifetime of a <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a> object. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00145">145</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a2fad42164df6175bc376e2f78e3e0c5a"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::SphericalHarmonic2" ref="a2fad42164df6175bc376e2f78e3e0c5a" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::SphericalHarmonic2::SphericalHarmonic2 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td><code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A default constructor so that the object can be created when the constructor for another object is initialized. This default object can then be reset with the default copy assignment operator. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00171">171</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a48f85ac41417815e6735ff5aa7d74155"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::operator()" ref="a48f85ac41417815e6735ff5aa7d74155" args="(real tau1, real tau2, real x, real y, real z) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalHarmonic2::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>tau1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>tau2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute a spherical harmonic sum with two correction terms.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">tau1</td><td>multiplier for correction coefficients <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">tau2</td><td>multiplier for correction coefficients <em>C''</em> and <em>S''</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>cartesian coordinate. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the spherical harmonic sum.</dd></dl>
-<p>This routine requires constant memory and thus never throws an exception. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00186">186</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a762d48fc2c3dc902859286de4df7672c"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::operator()" ref="a762d48fc2c3dc902859286de4df7672c" args="(real tau1, real tau2, real x, real y, real z, real &gradx, real &grady, real &gradz) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::SphericalHarmonic2::operator() </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>tau1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>tau2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>grady</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gradz</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute a spherical harmonic sum with two correction terms and its gradient.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">tau1</td><td>multiplier for correction coefficients <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">tau2</td><td>multiplier for correction coefficients <em>C''</em> and <em>S''</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>cartesian coordinate. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradx</td><td><em>x</em> component of the gradient </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">grady</td><td><em>y</em> component of the gradient </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradz</td><td><em>z</em> component of the gradient </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>V</em> the spherical harmonic sum.</dd></dl>
-<p>This is the same as the previous function, except that the components of the gradients of the sum in the <em>x</em>, <em>y</em>, and <em>z</em> directions are computed. This routine requires constant memory and thus never throws an exception. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00223">223</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3aa683a43a8e9232a16390b09c6be920"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::Circle" ref="a3aa683a43a8e9232a16390b09c6be920" args="(real tau1, real tau2, real p, real z, bool gradp) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a> GeographicLib::SphericalHarmonic2::Circle </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>tau1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>tau2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>p</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>gradp</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Create a <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> to allow the efficient evaluation of several points on a circle of latitude at fixed values of <em>tau1</em> and <em>tau2</em>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">tau1</td><td>multiplier for correction coefficients <em>C'</em> and <em>S'</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">tau2</td><td>multiplier for correction coefficients <em>C''</em> and <em>S''</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">p</td><td>the radius of the circle. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>the height of the circle above the equatorial plane. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">gradp</td><td>if true the returned object will be able to compute the gradient of the sum. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">CircularEngine</a> object.</dd></dl>
-<p><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a48f85ac41417815e6735ff5aa7d74155">SphericalHarmonic2::operator()()</a> exchanges the order of the sums in the definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m = 0..N)[sum(n = m..N)[...]]. <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a3aa683a43a8e9232a16390b09c6be920">SphericalHarmonic2::Circle</a> performs the inner sum over degree <em>n</em> (which entails about <em>N</em><sup>2</ [...]
-<p>See <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">SphericalHarmonic::Circle</a> for an example of its use. </p>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00263">263</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a166338f0b4ccf89c48278bb9514046f0"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::Coefficients" ref="a166338f0b4ccf89c48278bb9514046f0" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a>& GeographicLib::SphericalHarmonic2::Coefficients </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the zeroth <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a> object. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00288">288</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a51751279dc4e0b6e19886723f8e8b493"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::Coefficients1" ref="a51751279dc4e0b6e19886723f8e8b493" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a>& GeographicLib::SphericalHarmonic2::Coefficients1 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the first <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a> object. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00293">293</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a676b4c36923744bf5057b24484d9cf60"></a><!-- doxytag: member="GeographicLib::SphericalHarmonic2::Coefficients2" ref="a676b4c36923744bf5057b24484d9cf60" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a>& GeographicLib::SphericalHarmonic2::Coefficients2 </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>the second <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html" title="Package up coefficients for SphericalEngine.">SphericalEngine::coeff</a> object. </dd></dl>
-
-<p>Definition at line <a class="el" href="SphericalHarmonic2_8hpp_source.html#l00298">298</a> of file <a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="SphericalHarmonic2_8hpp_source.html">SphericalHarmonic2.hpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1TransverseMercator-members.html b/doc/html/classGeographicLib_1_1TransverseMercator-members.html
deleted file mode 100644
index afdbe5b..0000000
--- a/doc/html/classGeographicLib_1_1TransverseMercator-members.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1TransverseMercator.html">TransverseMercator</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::TransverseMercator Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a63876dc20e8765501ca62022f9a73432">CentralScale</a>() const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a6571ba8c59fd7e5e32c9994d37d4cdb5">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a07d73a6d94e2434cbb937978d61a5ae7">Forward</a>(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html#af689c212234963734354347d56bf12f6">Forward</a>(real lon0, real lat, real lon, real &x, real &y) const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a47e93a8cde548b6e8d7c4c076bac4be6">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a15611aee4e3707e155278bab02403a07">Reverse</a>(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html#ac3bd58646dd6c06731a9baadee11f7e5">Reverse</a>(real lon0, real x, real y, real &lat, real &lon) const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a9a4074c9d0ea35f0ebfc9c9f73bd3183">TransverseMercator</a>(real a, real f, real k0)</td><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html#aa25b52e35bc54c368e6c8b17e02b0542">UTM</a></td><td><a class="el" href="classGeographicLib_1_1TransverseMercator.html">GeographicLib::TransverseMercator</a></td><td><code> [static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1TransverseMercator.html b/doc/html/classGeographicLib_1_1TransverseMercator.html
deleted file mode 100644
index 7187db5..0000000
--- a/doc/html/classGeographicLib_1_1TransverseMercator.html
+++ /dev/null
@@ -1,531 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::TransverseMercator Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1TransverseMercator.html">TransverseMercator</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::TransverseMercator Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::TransverseMercator" -->
-<p>Transverse Mercator Projection.  
- <a href="classGeographicLib_1_1TransverseMercator.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="TransverseMercator_8hpp_source.html">GeographicLib/TransverseMercator.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1TransverseMercator-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a9a4074c9d0ea35f0ebfc9c9f73bd3183">TransverseMercator</a> (real a, real f, real k0)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a07d73a6d94e2434cbb937978d61a5ae7">Forward</a> (real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a15611aee4e3707e155278bab02403a07">Reverse</a> (real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html#af689c212234963734354347d56bf12f6">Forward</a> (real lon0, real lat, real lon, real &x, real &y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html#ac3bd58646dd6c06731a9baadee11f7e5">Reverse</a> (real lon0, real x, real y, real &lat, real &lon) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a47e93a8cde548b6e8d7c4c076bac4be6">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a6571ba8c59fd7e5e32c9994d37d4cdb5">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a63876dc20e8765501ca62022f9a73432">CentralScale</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <a class="el" href="classGeographicLib_1_1TransverseMercator.html">TransverseMercator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html#aa25b52e35bc54c368e6c8b17e02b0542">UTM</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Transverse Mercator Projection. </p>
-<p>This uses Krüger's method which evaluates the projection and its inverse in terms of a series. See</p>
-<ul>
-<li>L. Krüger, <a href="http://dx.doi.org/10.2312/GFZ.b103-krueger28">Konforme Abbildung des Erdellipsoids in der Ebene</a> (Conformal mapping of the ellipsoidal earth to the plane), Royal Prussian Geodetic Institute, New Series 52, 172 pp. (1912).</li>
-<li>C. F. F. Karney, <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">Transverse Mercator with an accuracy of a few nanometers,</a> J. Geodesy 85(8), 475-485 (Aug. 2011); preprint <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.</li>
-</ul>
-<p>Krüger's method has been extended from 4th to 6th order. The maximum error is 5 nm (5 nanometers), ground distance, for all positions within 35 degrees of the central meridian. The error in the convergence is 2e-15" and the relative error in the scale is 6e-12%%. See Sec. 4 of <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for details. The speed penalty in going to 6th order is only about 1%. <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" ti [...]
-<p>The ellipsoid parameters and the central scale are set in the constructor. The central meridian (which is a trivial shift of the longitude) is specified as the <em>lon0</em> argument of the <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a07d73a6d94e2434cbb937978d61a5ae7">TransverseMercator::Forward</a> and <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a15611aee4e3707e155278bab02403a07">TransverseMercator::Reverse</a> functions. The latitude of or [...]
-<p>See <a class="el" href="TransverseMercator_8cpp.html" title="Implementation for GeographicLib::TransverseMercator class.">TransverseMercator.cpp</a> for more information on the implementation.</p>
-<p>See <a class="el" href="transversemercator.html">Transverse Mercator projection</a> for a discussion of this projection.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::TransverseMercator class</span>
-<span class="comment">// $Id: c01651412c934220e2293c344258773ac3d7131c $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <string></span>
-<span class="preprocessor">#include <iomanip></span>
-<span class="preprocessor">#include <<a class="code" href="TransverseMercator_8hpp.html" title="Header for GeographicLib::TransverseMercator class.">GeographicLib/TransverseMercator.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a> proj(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>(),
-                            <a class="code" href="classGeographicLib_1_1Constants.html#ab5cc487ab160c0a213fdf8e12cde198a">Constants::UTM_k0</a>());
-    <span class="comment">// Alternatively: const TransverseMercator& proj = TransverseMercator::UTM;</span>
-    <span class="keywordtype">double</span> lon0 = -75;          <span class="comment">// Central meridian for UTM zone 18</span>
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 40.3, lon = -74.7; <span class="comment">// Princeton, NJ</span>
-      <span class="keywordtype">double</span> x, y;
-      proj.Forward(lon0, lat, lon, x, y);
-      cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">double</span> x = 25e3, y = 4461e3;
-      <span class="keywordtype">double</span> lat, lon;
-      proj.Reverse(lon0, x, y, lat, lon);
-      cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a> and <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a9a4074c9d0ea35f0ebfc9c9f73bd3183"></a><!-- doxytag: member="GeographicLib::TransverseMercator::TransverseMercator" ref="a9a4074c9d0ea35f0ebfc9c9f73bd3183" args="(real a, real f, real k0)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::TransverseMercator::TransverseMercator </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k0</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for a ellipsoid with</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. Setting <em>f</em> = 0 gives a sphere. Negative <em>f</em> gives a prolate ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k0</td><td>central scale factor.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>An exception is thrown if either of the axes of the ellipsoid or <em>k0</em> is not positive. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8cpp_source.html#l00060">60</a> of file <a class="el" href="TransverseMercator_8cpp_source.html">TransverseMercator.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>, <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>, and <a class="el" href="Constants_8hpp_source.html#l00025">STATIC_ASSERT</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a07d73a6d94e2434cbb937978d61a5ae7"></a><!-- doxytag: member="GeographicLib::TransverseMercator::Forward" ref="a07d73a6d94e2434cbb937978d61a5ae7" args="(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::TransverseMercator::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to transverse Mercator.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>central meridian of the projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>No false easting or northing is added. <em>lat</em> should be in the range [-90, 90]; <em>lon</em> and <em>lon0</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8cpp_source.html#l00217">217</a> of file <a class="el" href="TransverseMercator_8cpp_source.html">TransverseMercator.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>, <a class="el" href="Math_8hpp_source.html#l00256">GeographicLib::Math::asinh()</a>, and <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-<p>Referenced by <a class="el" href="UTMUPS_8cpp_source.html#l00073">GeographicLib::UTMUPS::Forward()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a15611aee4e3707e155278bab02403a07"></a><!-- doxytag: member="GeographicLib::TransverseMercator::Reverse" ref="a15611aee4e3707e155278bab02403a07" args="(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::TransverseMercator::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from transverse Mercator to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>central meridian of the projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>No false easting or northing is added. <em>lon0</em> should be in the range [-180, 360]. The value of <em>lon</em> returned is in the range [-180, 180). </p>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8cpp_source.html#l00387">387</a> of file <a class="el" href="TransverseMercator_8cpp_source.html">TransverseMercator.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00142">GeographicLib::Math::hypot()</a>, and <a class="el" href="Math_8hpp_source.html#l00130">GeographicLib::Math::sq()</a>.</p>
-
-<p>Referenced by <a class="el" href="UTMUPS_8cpp_source.html#l00124">GeographicLib::UTMUPS::Reverse()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="af689c212234963734354347d56bf12f6"></a><!-- doxytag: member="GeographicLib::TransverseMercator::Forward" ref="af689c212234963734354347d56bf12f6" args="(real lon0, real lat, real lon, real &x, real &y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::TransverseMercator::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a07d73a6d94e2434cbb937978d61a5ae7">TransverseMercator::Forward</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8hpp_source.html#l00153">153</a> of file <a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac3bd58646dd6c06731a9baadee11f7e5"></a><!-- doxytag: member="GeographicLib::TransverseMercator::Reverse" ref="ac3bd58646dd6c06731a9baadee11f7e5" args="(real lon0, real x, real y, real &lat, real &lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::TransverseMercator::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1TransverseMercator.html#a15611aee4e3707e155278bab02403a07">TransverseMercator::Reverse</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8hpp_source.html#l00162">162</a> of file <a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a47e93a8cde548b6e8d7c4c076bac4be6"></a><!-- doxytag: member="GeographicLib::TransverseMercator::MajorRadius" ref="a47e93a8cde548b6e8d7c4c076bac4be6" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::TransverseMercator::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8hpp_source.html#l00175">175</a> of file <a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6571ba8c59fd7e5e32c9994d37d4cdb5"></a><!-- doxytag: member="GeographicLib::TransverseMercator::Flattening" ref="a6571ba8c59fd7e5e32c9994d37d4cdb5" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::TransverseMercator::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8hpp_source.html#l00181">181</a> of file <a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a63876dc20e8765501ca62022f9a73432"></a><!-- doxytag: member="GeographicLib::TransverseMercator::CentralScale" ref="a63876dc20e8765501ca62022f9a73432" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::TransverseMercator::CentralScale </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>k0</em> central scale for the projection. This is the value of <em>k0</em> used in the constructor and is the scale on the central meridian. </dd></dl>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8hpp_source.html#l00195">195</a> of file <a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Data Documentation</h2>
-<a class="anchor" id="aa25b52e35bc54c368e6c8b17e02b0542"></a><!-- doxytag: member="GeographicLib::TransverseMercator::UTM" ref="aa25b52e35bc54c368e6c8b17e02b0542" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1TransverseMercator.html">TransverseMercator</a> <a class="el" href="classGeographicLib_1_1TransverseMercator.html#aa25b52e35bc54c368e6c8b17e02b0542">GeographicLib::TransverseMercator::UTM</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a> with the WGS84 ellipsoid and the UTM scale factor. However, unlike UTM, no false easting or northing is added. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercator_8hpp_source.html#l00203">203</a> of file <a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="TransverseMercator_8hpp_source.html">TransverseMercator.hpp</a></li>
-<li><a class="el" href="TransverseMercator_8cpp_source.html">TransverseMercator.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1TransverseMercatorExact-members.html b/doc/html/classGeographicLib_1_1TransverseMercatorExact-members.html
deleted file mode 100644
index 5f85f18..0000000
--- a/doc/html/classGeographicLib_1_1TransverseMercatorExact-members.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">TransverseMercatorExact</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::TransverseMercatorExact Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a355a827f45c194d56a465e0d4f91c3a3">CentralScale</a>() const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a4045ec4b01c99c4bb589b1b3e7e07ca4">Flattening</a>() const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a0dab8d1a275df9e4796d2d858f42f7e3">Forward</a>(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a39c294a3389af325c41a8de51fd9228a">Forward</a>(real lon0, real lat, real lon, real &x, real &y) const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a19083f16ecfc51f9020d7242b3ded43e">MajorRadius</a>() const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a350070780708de5a622d4f4c4757104c">Reverse</a>(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a56ff2f371d59e2ca0da8644571706169">Reverse</a>(real lon0, real x, real y, real &lat, real &lon) const </td><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td><code> [inline]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a72ffcc89eee6f30a6d1f4d061518a6f1">TransverseMercatorExact</a>(real a, real f, real k0, bool extendp=false)</td><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a68668637e754201897bddb82baaf634b">UTM</a></td><td><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">GeographicLib::TransverseMercatorExact</a></td><td><code> [static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1TransverseMercatorExact.html b/doc/html/classGeographicLib_1_1TransverseMercatorExact.html
deleted file mode 100644
index a50aa85..0000000
--- a/doc/html/classGeographicLib_1_1TransverseMercatorExact.html
+++ /dev/null
@@ -1,549 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::TransverseMercatorExact Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">TransverseMercatorExact</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
-<a href="#pub-static-attribs">Static Public Attributes</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::TransverseMercatorExact Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::TransverseMercatorExact" -->
-<p>An exact implementation of the Transverse Mercator Projection.  
- <a href="classGeographicLib_1_1TransverseMercatorExact.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="TransverseMercatorExact_8hpp_source.html">GeographicLib/TransverseMercatorExact.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1TransverseMercatorExact-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a72ffcc89eee6f30a6d1f4d061518a6f1">TransverseMercatorExact</a> (real a, real f, real k0, bool extendp=false)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a0dab8d1a275df9e4796d2d858f42f7e3">Forward</a> (real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a350070780708de5a622d4f4c4757104c">Reverse</a> (real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a39c294a3389af325c41a8de51fd9228a">Forward</a> (real lon0, real lat, real lon, real &x, real &y) const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a56ff2f371d59e2ca0da8644571706169">Reverse</a> (real lon0, real x, real y, real &lat, real &lon) const   throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a19083f16ecfc51f9020d7242b3ded43e">MajorRadius</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a4045ec4b01c99c4bb589b1b3e7e07ca4">Flattening</a> () const   throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a355a827f45c194d56a465e0d4f91c3a3">CentralScale</a> () const   throw ()</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static const <br class="typebreak"/>
-<a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">TransverseMercatorExact</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a68668637e754201897bddb82baaf634b">UTM</a></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>An exact implementation of the Transverse Mercator Projection. </p>
-<p>Implementation of the Transverse Mercator Projection given in</p>
-<ul>
-<li>L. P. Lee, <a href="http://dx.doi.org/10.3138/X687-1574-4325-WM62">Conformal Projections Based On Jacobian Elliptic Functions</a>, Part V of Conformal Projections Based on Elliptic Functions, (B. V. Gutsell, Toronto, 1976), 128pp., ISBN: 0919870163 (also appeared as: Monograph 16, Suppl. No. 1 to Canadian Cartographer, Vol 13).</li>
-<li>C. F. F. Karney, <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">Transverse Mercator with an accuracy of a few nanometers,</a> J. Geodesy 85(8), 475-485 (Aug. 2011); preprint <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.</li>
-</ul>
-<p>Lee gives the correct results for forward and reverse transformations subject to the branch cut rules (see the description of the <em>extendp</em> argument to the constructor). The maximum error is about 8 nm (8 nanometers), ground distance, for the forward and reverse transformations. The error in the convergence is 2e-15", the relative error in the scale is 7e-12%%. See Sec. 3 of <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for details. The method is "exact" in the s [...]
-<p>This algorithm is about 4.5 times slower than the 6th-order Krüger method, <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a>, taking about 11 us for a combined forward and reverse projection on a 2.66 GHz Intel machine (g++, version 4.3.0, -O3).</p>
-<p>The ellipsoid parameters and the central scale are set in the constructor. The central meridian (which is a trivial shift of the longitude) is specified as the <em>lon0</em> argument of the <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a0dab8d1a275df9e4796d2d858f42f7e3">TransverseMercatorExact::Forward</a> and <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a350070780708de5a622d4f4c4757104c">TransverseMercatorExact::Reverse</a> functions [...]
-<p>See <a href="http://geographiclib.sourceforge.net/tm-grid.kmz" type="application/vnd.google-earth.kmz">tm-grid.kmz</a>, for an illustration of the transverse Mercator grid in Google Earth.</p>
-<p>See <a class="el" href="TransverseMercatorExact_8cpp.html" title="Implementation for GeographicLib::TransverseMercatorExact class.">TransverseMercatorExact.cpp</a> for more information on the implementation.</p>
-<p>See <a class="el" href="transversemercator.html">Transverse Mercator projection</a> for a discussion of this projection.</p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::TransverseMercatorExact class</span>
-<span class="comment">// $Id: 047cbdcff7135fed1fecf5f50ff2195eda993fcb $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <string></span>
-<span class="preprocessor">#include <iomanip></span>
-<span class="preprocessor">#include <<a class="code" href="TransverseMercatorExact_8hpp.html" title="Header for GeographicLib::TransverseMercatorExact class.">GeographicLib/TransverseMercatorExact.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <a class="code" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a> proj(<a class="code" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">Constants::WGS84_a</a>(), <a class="code" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">Constants::WGS84_f</a>(),
-                                 <a class="code" href="classGeographicLib_1_1Constants.html#ab5cc487ab160c0a213fdf8e12cde198a">Constants::UTM_k0</a>());
-    <span class="comment">// Alternatively:</span>
-    <span class="comment">// const TransverseMercatorExact& proj = TransverseMercatorExact::UTM;</span>
-    <span class="keywordtype">double</span> lon0 = -75;          <span class="comment">// Central meridian for UTM zone 18</span>
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 40.3, lon = -74.7; <span class="comment">// Princeton, NJ</span>
-      <span class="keywordtype">double</span> x, y;
-      proj.Forward(lon0, lat, lon, x, y);
-      cout << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">double</span> x = 25e3, y = 4461e3;
-      <span class="keywordtype">double</span> lat, lon;
-      proj.Reverse(lon0, x, y, lat, lon);
-      cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p><a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a> is a command-line utility providing access to the functionality of <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a> and <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>. </p>
-</div><hr/><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" id="a72ffcc89eee6f30a6d1f4d061518a6f1"></a><!-- doxytag: member="GeographicLib::TransverseMercatorExact::TransverseMercatorExact" ref="a72ffcc89eee6f30a6d1f4d061518a6f1" args="(real a, real f, real k0, bool extendp=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">GeographicLib::TransverseMercatorExact::TransverseMercatorExact </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>k0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>extendp</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Constructor for a ellipsoid with</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>equatorial radius (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>flattening of ellipsoid. If <em>f</em> > 1, set flattening to 1/<em>f</em>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">k0</td><td>central scale factor. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">extendp</td><td>use extended domain.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The transverse Mercator projection has a branch point singularity at <em>lat</em> = 0 and <em>lon</em> - <em>lon0</em> = 90 (1 - <em>e</em>) or (for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a68668637e754201897bddb82baaf634b">TransverseMercatorExact::UTM</a>) x = 18381 km, y = 0m. The <em>extendp</em> argument governs where the branch cut is placed. With <em>extendp</em> = false, the "standard" convention is followed, namely the cut is placed along x >  [...]
-<p>With <em>extendp</em> = true, the branch cut is moved to the lower left quadrant. The various symmetries of the transverse Mercator projection can be used to explore the projection on any sheet. In this mode the domains of <em>lat</em>, <em>lon</em>, <em>x</em>, and <em>y</em> are restricted to</p>
-<ul>
-<li>the union of<ul>
-<li><em>lat</em> in [0, 90] and <em>lon</em> - <em>lon0</em> in [0, 90]</li>
-<li><em>lat</em> in (-90, 0] and <em>lon</em> - <em>lon0</em> in [90 (1 - <em>e</em>), 90]</li>
-</ul>
-</li>
-<li>the union of<ul>
-<li><em>x</em>/(<em>k0</em> <em>a</em>) in [0, inf) and <em>y</em>/(<em>k0</em> <em>a</em>) in [0, E(<em>e</em><sup>2</sup>)]</li>
-<li><em>x</em>/(<em>k0</em> <em>a</em>) in [K(1 - <em>e</em><sup>2</sup>) - E(1 - <em>e</em><sup>2</sup>), inf) and <em>y</em>/(<em>k0</em> <em>a</em>) in (-inf, 0]</li>
-</ul>
-</li>
-</ul>
-<p>See Sec. 5 of <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for a full discussion of the treatment of the branch cut.</p>
-<p>The method will work for all ellipsoids used in terrestrial geodesy. The method cannot be applied directly to the case of a sphere (<em>f</em> = 0) because some the constants characterizing this method diverge in that limit, and in practice, <em>f</em> should be larger than about numeric_limits< real >::epsilon(). However, <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator</a> treats the sphere exactly. A [...]
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8cpp_source.html#l00062">62</a> of file <a class="el" href="TransverseMercatorExact_8cpp_source.html">TransverseMercatorExact.cpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00330">GeographicLib::Math::isfinite()</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a0dab8d1a275df9e4796d2d858f42f7e3"></a><!-- doxytag: member="GeographicLib::TransverseMercatorExact::Forward" ref="a0dab8d1a275df9e4796d2d858f42f7e3" args="(real lon0, real lat, real lon, real &x, real &y, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::TransverseMercatorExact::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to transverse Mercator.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>central meridian of the projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>No false easting or northing is added. <em>lat</em> should be in the range [-90, 90]; <em>lon</em> and <em>lon0</em> should be in the range [-180, 360]. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8cpp_source.html#l00378">378</a> of file <a class="el" href="TransverseMercatorExact_8cpp_source.html">TransverseMercatorExact.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a350070780708de5a622d4f4c4757104c"></a><!-- doxytag: member="GeographicLib::TransverseMercatorExact::Reverse" ref="a350070780708de5a622d4f4c4757104c" args="(real lon0, real x, real y, real &lat, real &lon, real &gamma, real &k) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::TransverseMercatorExact::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()</td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from transverse Mercator to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon0</td><td>central meridian of the projection (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>No false easting or northing is added. <em>lon0</em> should be in the range [-180, 360]. The value of <em>lon</em> returned is in the range [-180, 180). </p>
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8cpp_source.html#l00439">439</a> of file <a class="el" href="TransverseMercatorExact_8cpp_source.html">TransverseMercatorExact.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a39c294a3389af325c41a8de51fd9228a"></a><!-- doxytag: member="GeographicLib::TransverseMercatorExact::Forward" ref="a39c294a3389af325c41a8de51fd9228a" args="(real lon0, real lat, real lon, real &x, real &y) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::TransverseMercatorExact::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a0dab8d1a275df9e4796d2d858f42f7e3">TransverseMercatorExact::Forward</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8hpp_source.html#l00217">217</a> of file <a class="el" href="TransverseMercatorExact_8hpp_source.html">TransverseMercatorExact.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a56ff2f371d59e2ca0da8644571706169"></a><!-- doxytag: member="GeographicLib::TransverseMercatorExact::Reverse" ref="a56ff2f371d59e2ca0da8644571706169" args="(real lon0, real x, real y, real &lat, real &lon) const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::TransverseMercatorExact::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a350070780708de5a622d4f4c4757104c">TransverseMercatorExact::Reverse</a> without returning the convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8hpp_source.html#l00227">227</a> of file <a class="el" href="TransverseMercatorExact_8hpp_source.html">TransverseMercatorExact.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a19083f16ecfc51f9020d7242b3ded43e"></a><!-- doxytag: member="GeographicLib::TransverseMercatorExact::MajorRadius" ref="a19083f16ecfc51f9020d7242b3ded43e" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::TransverseMercatorExact::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the ellipsoid (meters). This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8hpp_source.html#l00240">240</a> of file <a class="el" href="TransverseMercatorExact_8hpp_source.html">TransverseMercatorExact.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4045ec4b01c99c4bb589b1b3e7e07ca4"></a><!-- doxytag: member="GeographicLib::TransverseMercatorExact::Flattening" ref="a4045ec4b01c99c4bb589b1b3e7e07ca4" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::TransverseMercatorExact::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the ellipsoid. This is the value used in the constructor. </dd></dl>
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8hpp_source.html#l00246">246</a> of file <a class="el" href="TransverseMercatorExact_8hpp_source.html">TransverseMercatorExact.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a355a827f45c194d56a465e0d4f91c3a3"></a><!-- doxytag: member="GeographicLib::TransverseMercatorExact::CentralScale" ref="a355a827f45c194d56a465e0d4f91c3a3" args="() const " -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::TransverseMercatorExact::CentralScale </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td> const  throw ()<code> [inline]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>k0</em> central scale for the projection. This is the value of <em>k0</em> used in the constructor and is the scale on the central meridian. </dd></dl>
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8hpp_source.html#l00260">260</a> of file <a class="el" href="TransverseMercatorExact_8hpp_source.html">TransverseMercatorExact.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Data Documentation</h2>
-<a class="anchor" id="a68668637e754201897bddb82baaf634b"></a><!-- doxytag: member="GeographicLib::TransverseMercatorExact::UTM" ref="a68668637e754201897bddb82baaf634b" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">TransverseMercatorExact</a> <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a68668637e754201897bddb82baaf634b">GeographicLib::TransverseMercatorExact::UTM</a><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>A global instantiation of <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a> with the WGS84 ellipsoid and the UTM scale factor. However, unlike UTM, no false easting or northing is added. </p>
-
-<p>Definition at line <a class="el" href="TransverseMercatorExact_8hpp_source.html#l00268">268</a> of file <a class="el" href="TransverseMercatorExact_8hpp_source.html">TransverseMercatorExact.hpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="TransverseMercatorExact_8hpp_source.html">TransverseMercatorExact.hpp</a></li>
-<li><a class="el" href="TransverseMercatorExact_8cpp_source.html">TransverseMercatorExact.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1UTMUPS-members.html b/doc/html/classGeographicLib_1_1UTMUPS-members.html
deleted file mode 100644
index d823322..0000000
--- a/doc/html/classGeographicLib_1_1UTMUPS-members.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1UTMUPS.html">UTMUPS</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::UTMUPS Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#ad74d52d7ebeff195019745f791f30562">DecodeZone</a>(const std::string &zonestr, int &zone, bool &northp)</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a3410e1e221158962f34147255653818f">EncodeZone</a>(int zone, bool northp)</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a182de2e29f1181c55a266777039b8a9d">Flattening</a>()</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">Forward</a>(real lat, real lon, int &zone, bool &northp, real &x, real &y, real &gamma, real &k, int setzone=STANDARD, bool mgrslimits=false)</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#aa21ec1bc26f691e0a6f2ccc44debe6f0">Forward</a>(real lat, real lon, int &zone, bool &northp, real &x, real &y, int setzone=STANDARD, bool mgrslimits=false)</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0">INVALID</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a293aa30508096d49db77a23917ea1092">MajorRadius</a>()</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a9059a8e3b4721e27869e99ed1ae3d320">MATCH</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ac22db7e136b6e06fba7c3c06b5888362">MAXPSEUDOZONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ae8e04ab8df50a062c1fe277a6880bc19">MAXUTMZONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a">MAXZONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a058ac8a834bbc78ce73d9b37a1a5dfb9">MINPSEUDOZONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a1413e6cc83d4bf1eb4ad1c0f1d745eb6">MINUTMZONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1">MINZONE</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#aaf417ae6bed6da324aa03fc96ee0dda4">Reverse</a>(int zone, bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k, bool mgrslimits=false)</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#ac8cbfd7b15c96b52b876b54ce68f7b4d">Reverse</a>(int zone, bool northp, real x, real y, real &lat, real &lon, bool mgrslimits=false)</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">STANDARD</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a62623c295d1b43318a9fa762c3da94ea">StandardZone</a>(real lat, real lon, int setzone=STANDARD)</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42">UPS</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aacc8f89ac6144b1e445ca21cbe9a2533">UTM</a> enum value</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#abd70d3f90f5c79a09bdd217b67e6729b">UTMShift</a>()</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">zonespec</a> enum name</td><td><a class="el" href="classGeographicLib_1_1UTMUPS.html">GeographicLib::UTMUPS</a></td><td></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1UTMUPS.html b/doc/html/classGeographicLib_1_1UTMUPS.html
deleted file mode 100644
index f1f8426..0000000
--- a/doc/html/classGeographicLib_1_1UTMUPS.html
+++ /dev/null
@@ -1,751 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::UTMUPS Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1UTMUPS.html">UTMUPS</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-types">Public Types</a> |
-<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::UTMUPS Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::UTMUPS" -->
-<p>Convert between Geographic coordinates and UTM/UPS.  
- <a href="classGeographicLib_1_1UTMUPS.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="UTMUPS_8hpp_source.html">GeographicLib/UTMUPS.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1UTMUPS-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-types"></a>
-Public Types</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">zonespec</a> { <br/>
-  <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a058ac8a834bbc78ce73d9b37a1a5dfb9">MINPSEUDOZONE</a> =  -4, 
-<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0">INVALID</a> =  -4, 
-<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a9059a8e3b4721e27869e99ed1ae3d320">MATCH</a> =  -3, 
-<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aacc8f89ac6144b1e445ca21cbe9a2533">UTM</a> =  -2, 
-<br/>
-  <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">STANDARD</a> =  -1, 
-<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ac22db7e136b6e06fba7c3c06b5888362">MAXPSEUDOZONE</a> =  -1, 
-<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1">MINZONE</a> =  0, 
-<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42">UPS</a> =  0, 
-<br/>
-  <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a1413e6cc83d4bf1eb4ad1c0f1d745eb6">MINUTMZONE</a> =  1, 
-<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ae8e04ab8df50a062c1fe277a6880bc19">MAXUTMZONE</a> =  60, 
-<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a">MAXZONE</a> =  60
-<br/>
- }</td></tr>
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#a62623c295d1b43318a9fa762c3da94ea">StandardZone</a> (real lat, real lon, int setzone=STANDARD)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">Forward</a> (real lat, real lon, int &zone, bool &northp, real &x, real &y, real &gamma, real &k, int setzone=STANDARD, bool mgrslimits=false)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#aaf417ae6bed6da324aa03fc96ee0dda4">Reverse</a> (int zone, bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k, bool mgrslimits=false)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#aa21ec1bc26f691e0a6f2ccc44debe6f0">Forward</a> (real lat, real lon, int &zone, bool &northp, real &x, real &y, int setzone=STANDARD, bool mgrslimits=false)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#ac8cbfd7b15c96b52b876b54ce68f7b4d">Reverse</a> (int zone, bool northp, real x, real y, real &lat, real &lon, bool mgrslimits=false)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#ad74d52d7ebeff195019745f791f30562">DecodeZone</a> (const std::string &zonestr, int &zone, bool &northp)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#a3410e1e221158962f34147255653818f">EncodeZone</a> (int zone, bool northp)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#abd70d3f90f5c79a09bdd217b67e6729b">UTMShift</a> ()  throw ()</td></tr>
-<tr><td colspan="2"><div class="groupHeader">Inspector functions</div></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#a293aa30508096d49db77a23917ea1092">MajorRadius</a> ()  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html#a182de2e29f1181c55a266777039b8a9d">Flattening</a> ()  throw ()</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Convert between Geographic coordinates and UTM/UPS. </p>
-<p>UTM and UPS are defined</p>
-<ul>
-<li>J. W. Hager, J. F. Behensky, and B. W. Drew, <a href="http://earth-info.nga.mil/GandG/publications/tm8358.2/TM8358_2.pdf">The Universal Grids: Universal Transverse Mercator (UTM) and Universal Polar Stereographic (UPS)</a>, Defense Mapping Agency, Technical Manual TM8358.2 (1989).</li>
-</ul>
-<p>Section 2-3 defines UTM and section 3-2.4 defines UPS. This document also includes approximate algorithms for the computation of the underlying transverse Mercator and polar stereographic projections. Here we substitute much more accurate algorithms given by <a class="el" href="namespaceGeographicLib.html" title="Namespace for GeographicLib.">GeographicLib</a>:<a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">TransverseMercator< [...]
-<p>In this implementation, the conversions are closed, i.e., output from Forward is legal input for Reverse and vice versa. The error is about 5nm in each direction. However, the conversion from legal UTM/UPS coordinates to geographic coordinates and back might throw an error if the initial point is within 5nm of the edge of the allowed range for the UTM/UPS coordinates.</p>
-<p>The simplest way to guarantee the closed property is to define allowed ranges for the eastings and northings for UTM and UPS coordinates. The UTM boundaries are the same for all zones. (The only place the exceptional nature of the zone boundaries is evident is when converting to UTM/UPS coordinates requesting the standard zone.) The <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> lettering scheme imposes natural limits on UTM/UPS [...]
-<p>The <a href="http://www.nga.mil">NGA</a> software package <a href="http://earth-info.nga.mil/GandG/geotrans/index.html">geotrans</a> also provides conversions to and from UTM and UPS. Version 2.4.2 (and earlier) suffers from some drawbacks:</p>
-<ul>
-<li>Inconsistent rules are used to determine the whether a particular UTM or UPS coordinate is legal. A more systematic approach is taken here.</li>
-<li>The underlying projections are not very accurately implemented.</li>
-</ul>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::UTMUPS class</span>
-<span class="comment">// $Id: 83d5ba7eb8c9ce1963cb9499a6ee404329e74f3a $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <string></span>
-<span class="preprocessor">#include <iomanip></span>
-<span class="preprocessor">#include <<a class="code" href="UTMUPS_8hpp.html" title="Header for GeographicLib::UTMUPS class.">GeographicLib/UTMUPS.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="comment">// See also example-GeoCoords.cpp</span>
-    {
-      <span class="comment">// Sample forward calculation</span>
-      <span class="keywordtype">double</span> lat = 33.3, lon = 44.4; <span class="comment">// Baghdad</span>
-      <span class="keywordtype">int</span> zone;
-      <span class="keywordtype">bool</span> northp;
-      <span class="keywordtype">double</span> x, y;
-      <a class="code" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">UTMUPS::Forward</a>(lat, lon, zone, northp, x, y);
-      <span class="keywordtype">string</span> zonestr = <a class="code" href="classGeographicLib_1_1UTMUPS.html#a3410e1e221158962f34147255653818f">UTMUPS::EncodeZone</a>(zone, northp);
-      cout << fixed << setprecision(2)
-           << zonestr << <span class="stringliteral">" "</span> << x << <span class="stringliteral">" "</span> << y << <span class="stringliteral">"\n"</span>;
-    }
-    {
-      <span class="comment">// Sample reverse calculation</span>
-      <span class="keywordtype">string</span> zonestr = <span class="stringliteral">"38N"</span>;
-      <span class="keywordtype">int</span> zone;
-      <span class="keywordtype">bool</span> northp;
-      <a class="code" href="classGeographicLib_1_1UTMUPS.html#ad74d52d7ebeff195019745f791f30562">UTMUPS::DecodeZone</a>(zonestr, zone, northp);
-      <span class="keywordtype">double</span> x = 444e3, y = 3688e3;
-      <span class="keywordtype">double</span> lat, lon;
-      <a class="code" href="classGeographicLib_1_1UTMUPS.html#aaf417ae6bed6da324aa03fc96ee0dda4">UTMUPS::Reverse</a>(zone, northp, x, y, lat, lon);
-      cout << lat << <span class="stringliteral">" "</span> << lon << <span class="stringliteral">"\n"</span>;
-    }
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Enumeration Documentation</h2>
-<a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7"></a><!-- doxytag: member="GeographicLib::UTMUPS::zonespec" ref="a0c459615da18cc899a960bdc8c5b11b7" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">GeographicLib::UTMUPS::zonespec</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>In this class we bring together the UTM and UPS coordinates systems. The UTM divides the earth between latitudes -80 and 84 into 60 zones numbered 1 thru 60. Zone assign zone number 0 to the UPS regions, covering the two poles. Within <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">UTMUPS</a>, non-negative zone numbers refer to one of the "physical" zones, 0 for UPS and [1, 60] for UTM. Negative "pseudo-zone" numbers a [...]
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7a058ac8a834bbc78ce73d9b37a1a5dfb9"></a><!-- doxytag: member="MINPSEUDOZONE" ref="a0c459615da18cc899a960bdc8c5b11b7a058ac8a834bbc78ce73d9b37a1a5dfb9" args="" -->MINPSEUDOZONE</em> </td><td>
-<p>The smallest pseudo-zone number. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0"></a><!-- doxytag: member="INVALID" ref="a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0" args="" -->INVALID</em> </td><td>
-<p>A marker for an undefined or invalid zone. Equivalent to NaN. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7a9059a8e3b4721e27869e99ed1ae3d320"></a><!-- doxytag: member="MATCH" ref="a0c459615da18cc899a960bdc8c5b11b7a9059a8e3b4721e27869e99ed1ae3d320" args="" -->MATCH</em> </td><td>
-<p>If a coordinate already include zone information (e.g., it is an <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> coordinate), use that, otherwise apply the <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">UTMUPS::STANDARD</a> rules. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7aacc8f89ac6144b1e445ca21cbe9a2533"></a><!-- doxytag: member="UTM" ref="a0c459615da18cc899a960bdc8c5b11b7aacc8f89ac6144b1e445ca21cbe9a2533" args="" -->UTM</em> </td><td>
-<p>Apply the standard rules for UTM zone assigment extending the UTM zone to each pole to give a zone number in [1, 60]. For example, use UTM zone 38 for longitude in [42, 48). The rules include the Norway and Svalbard exceptions. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406"></a><!-- doxytag: member="STANDARD" ref="a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406" args="" -->STANDARD</em> </td><td>
-<p>Apply the standard rules for zone assignment to give a zone number in [0, 60]. If the latitude is not in [-80, 84), then use <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42">UTMUPS::UPS</a> = 0, otherwise apply the rules for <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aacc8f89ac6144b1e445ca21cbe9a2533">UTMUPS::UTM</a>. The tests on latitudes and longitudes are all closed [...]
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7ac22db7e136b6e06fba7c3c06b5888362"></a><!-- doxytag: member="MAXPSEUDOZONE" ref="a0c459615da18cc899a960bdc8c5b11b7ac22db7e136b6e06fba7c3c06b5888362" args="" -->MAXPSEUDOZONE</em> </td><td>
-<p>The largest pseudo-zone number. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1"></a><!-- doxytag: member="MINZONE" ref="a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1" args="" -->MINZONE</em> </td><td>
-<p>The smallest physical zone number. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42"></a><!-- doxytag: member="UPS" ref="a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42" args="" -->UPS</em> </td><td>
-<p>The zone number used for UPS </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7a1413e6cc83d4bf1eb4ad1c0f1d745eb6"></a><!-- doxytag: member="MINUTMZONE" ref="a0c459615da18cc899a960bdc8c5b11b7a1413e6cc83d4bf1eb4ad1c0f1d745eb6" args="" -->MINUTMZONE</em> </td><td>
-<p>The smallest UTM zone number. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7ae8e04ab8df50a062c1fe277a6880bc19"></a><!-- doxytag: member="MAXUTMZONE" ref="a0c459615da18cc899a960bdc8c5b11b7ae8e04ab8df50a062c1fe277a6880bc19" args="" -->MAXUTMZONE</em> </td><td>
-<p>The largest UTM zone number. </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a"></a><!-- doxytag: member="MAXZONE" ref="a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a" args="" -->MAXZONE</em> </td><td>
-<p>The largest physical zone number. </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="UTMUPS_8hpp_source.html#l00091">91</a> of file <a class="el" href="UTMUPS_8hpp_source.html">UTMUPS.hpp</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a62623c295d1b43318a9fa762c3da94ea"></a><!-- doxytag: member="GeographicLib::UTMUPS::StandardZone" ref="a62623c295d1b43318a9fa762c3da94ea" args="(real lat, real lon, int setzone=STANDARD)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int GeographicLib::UTMUPS::StandardZone </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>setzone</em> = <code>STANDARD</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>The standard zone.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">setzone</td><td>zone override (optional).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>This is exact. If the optional argument <em>setzone</em> is given then use that zone if it is non-negative, otherwise apply the rules given in <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">UTMUPS::zonespec</a>. Throws an error if <em>setzone</em> is outsize the range [<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a058ac8a834bbc78ce73d9b37a1a5dfb9">UTMUPS::MINPSEUDOZONE</a>, <a class="el" href="classGeo [...]
-
-<p>Definition at line <a class="el" href="UTMUPS_8cpp_source.html#l00049">49</a> of file <a class="el" href="UTMUPS_8cpp_source.html">UTMUPS.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoCoords_8hpp_source.html#l00299">GeographicLib::GeoCoords::SetAltZone()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a921d6c23e728e0b17651902d43fb56e8"></a><!-- doxytag: member="GeographicLib::UTMUPS::Forward" ref="a921d6c23e728e0b17651902d43fb56e8" args="(real lat, real lon, int &zone, bool &northp, real &x, real &y, real &gamma, real &k, int setzone=STANDARD, bool mgrslimits=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::UTMUPS::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool & </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>setzone</em> = <code>STANDARD</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>mgrslimits</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Forward projection, from geographic to UTM/UPS.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">zone</td><td>the UTM zone (zero means UPS). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">northp</td><td>hemisphere (true means north, false means south). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">setzone</td><td>zone override. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">mgrslimits</td><td>if true enforce the stricter <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> limits on the coordinates (default = false).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>The preferred zone for the result can be specified with <em>setzone</em>, see <a class="el" href="classGeographicLib_1_1UTMUPS.html#a62623c295d1b43318a9fa762c3da94ea">UTMUPS::StandardZone</a>. Throw error if the resulting easting or northing is outside the allowed range (see Reverse), in which case the arguments are unchanged. This also returns meridian convergence <em>gamma</em> (degrees) and scale <em>k</em>. The accuracy of the conversion is about 5nm. </p>
-
-<p>Definition at line <a class="el" href="UTMUPS_8cpp_source.html#l00073">73</a> of file <a class="el" href="UTMUPS_8cpp_source.html">UTMUPS.cpp</a>.</p>
-
-<p>References <a class="el" href="TransverseMercator_8cpp_source.html#l00217">GeographicLib::TransverseMercator::Forward()</a>, and <a class="el" href="PolarStereographic_8cpp_source.html#l00072">GeographicLib::PolarStereographic::Forward()</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoCoords_8hpp_source.html#l00208">GeographicLib::GeoCoords::Reset()</a>, and <a class="el" href="GeoCoords_8hpp_source.html#l00299">GeographicLib::GeoCoords::SetAltZone()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaf417ae6bed6da324aa03fc96ee0dda4"></a><!-- doxytag: member="GeographicLib::UTMUPS::Reverse" ref="aaf417ae6bed6da324aa03fc96ee0dda4" args="(int zone, bool northp, real x, real y, real &lat, real &lon, real &gamma, real &k, bool mgrslimits=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::UTMUPS::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>gamma</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>k</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>mgrslimits</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Reverse projection, from UTM/UPS to geographic.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">zone</td><td>the UTM zone (zero means UPS). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">northp</td><td>hemisphere (true means north, false means south). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>easting of point (meters). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>northing of point (meters). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lat</td><td>latitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">lon</td><td>longitude of point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gamma</td><td>meridian convergence at point (degrees). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">k</td><td>scale of projection at point. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">mgrslimits</td><td>if true enforce the stricter <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a> limits on the coordinates (default = false).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Throw error if easting or northing is outside the allowed range (see below), in which case the arguments are unchanged. The accuracy of the conversion is about 5nm.</p>
-<p>UTM eastings are allowed to be in the range [0km, 1000km], northings are allowed to be in in [0km, 9600km] for the northern hemisphere and in [900km, 10000km] for the southern hemisphere. (However UTM northings can be continued across the equator. So the actual limits on the northings are [-9100km, 9600km] for the "northern" hemisphere and [900km, 19600km] for the "southern" hemisphere.)</p>
-<p>UPS eastings and northings are allowed to be in the range [1200km, 2800km] in the northern hemisphere and in [700km, 3100km] in the southern hemisphere.</p>
-<p>These ranges are 100km larger than allowed for the conversions to <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">MGRS</a>. (100km is the maximum extra padding consistent with eastings remaining non-negative.) This allows generous overlaps between zones and UTM and UPS. If <em>mgrslimits</em> = true, then all the ranges are shrunk by 100km so that they agree with the stricter <a class="el" href="classGeographicLib_1_1MGRS.html" title="Con [...]
-
-<p>Definition at line <a class="el" href="UTMUPS_8cpp_source.html#l00124">124</a> of file <a class="el" href="UTMUPS_8cpp_source.html">UTMUPS.cpp</a>.</p>
-
-<p>References <a class="el" href="TransverseMercator_8cpp_source.html#l00387">GeographicLib::TransverseMercator::Reverse()</a>, and <a class="el" href="PolarStereographic_8cpp_source.html#l00095">GeographicLib::PolarStereographic::Reverse()</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoCoords_8hpp_source.html#l00223">GeographicLib::GeoCoords::Reset()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa21ec1bc26f691e0a6f2ccc44debe6f0"></a><!-- doxytag: member="GeographicLib::UTMUPS::Forward" ref="aa21ec1bc26f691e0a6f2ccc44debe6f0" args="(real lat, real lon, int &zone, bool &northp, real &x, real &y, int setzone=STANDARD, bool mgrslimits=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::UTMUPS::Forward </td>
-          <td>(</td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool & </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>setzone</em> = <code>STANDARD</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>mgrslimits</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">UTMUPS::Forward</a> without returning convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="UTMUPS_8hpp_source.html#l00231">231</a> of file <a class="el" href="UTMUPS_8hpp_source.html">UTMUPS.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac8cbfd7b15c96b52b876b54ce68f7b4d"></a><!-- doxytag: member="GeographicLib::UTMUPS::Reverse" ref="ac8cbfd7b15c96b52b876b54ce68f7b4d" args="(int zone, bool northp, real x, real y, real &lat, real &lon, bool mgrslimits=false)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::UTMUPS::Reverse </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lat</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">real & </td>
-          <td class="paramname"><em>lon</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>mgrslimits</em> = <code>false</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p><a class="el" href="classGeographicLib_1_1UTMUPS.html#aaf417ae6bed6da324aa03fc96ee0dda4">UTMUPS::Reverse</a> without returning convergence and scale. </p>
-
-<p>Definition at line <a class="el" href="UTMUPS_8hpp_source.html#l00241">241</a> of file <a class="el" href="UTMUPS_8hpp_source.html">UTMUPS.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad74d52d7ebeff195019745f791f30562"></a><!-- doxytag: member="GeographicLib::UTMUPS::DecodeZone" ref="ad74d52d7ebeff195019745f791f30562" args="(const std::string &zonestr, int &zone, bool &northp)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void GeographicLib::UTMUPS::DecodeZone </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>zonestr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool & </td>
-          <td class="paramname"><em>northp</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Decode a UTM/UPS zone string.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">zonestr</td><td>string representation of zone and hemisphere. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">zone</td><td>the UTM zone (zero means UPS). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">northp</td><td>hemisphere (true means north, false means south).</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>For UTM, <em>zonestr</em> has the form of a zone number in the range [<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a1413e6cc83d4bf1eb4ad1c0f1d745eb6">UTMUPS::MINUTMZONE</a>, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ae8e04ab8df50a062c1fe277a6880bc19">UTMUPS::MAXUTMZONE</a>] = [1, 60] followed by a hemisphere letter, N or S. For UPS, it consists just of the hemisphere letter. The returned value of <e [...]
-
-<p>Definition at line <a class="el" href="UTMUPS_8cpp_source.html#l00186">186</a> of file <a class="el" href="UTMUPS_8cpp_source.html">UTMUPS.cpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoConvert_8cpp_source.html#l00034">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3410e1e221158962f34147255653818f"></a><!-- doxytag: member="GeographicLib::UTMUPS::EncodeZone" ref="a3410e1e221158962f34147255653818f" args="(int zone, bool northp)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">std::string GeographicLib::UTMUPS::EncodeZone </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>zone</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>northp</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Encode a UTM/UPS zone string.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[out]</td><td class="paramname">zone</td><td>the UTM zone (zero means UPS). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">northp</td><td>hemisphere (true means north, false means south). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>string representation of zone and hemisphere.</dd></dl>
-<p><em>zone</em> must be in the range [<a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1">UTMUPS::MINZONE</a>, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a">UTMUPS::MAXZONE</a>] = [0, 60] with <em>zone</em> = <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42">UTMUPS::UPS</a [...]
-
-<p>Definition at line <a class="el" href="UTMUPS_8cpp_source.html#l00230">230</a> of file <a class="el" href="UTMUPS_8cpp_source.html">UTMUPS.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="abd70d3f90f5c79a09bdd217b67e6729b"></a><!-- doxytag: member="GeographicLib::UTMUPS::UTMShift" ref="abd70d3f90f5c79a09bdd217b67e6729b" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::UTMUPS::UTMShift </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd>shift (meters) necessary to align N and S halves of a UTM zone (10<sup>7</sup>). </dd></dl>
-
-<p>Definition at line <a class="el" href="UTMUPS_8cpp_source.html#l00243">243</a> of file <a class="el" href="UTMUPS_8cpp_source.html">UTMUPS.cpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a293aa30508096d49db77a23917ea1092"></a><!-- doxytag: member="GeographicLib::UTMUPS::MajorRadius" ref="a293aa30508096d49db77a23917ea1092" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::UTMUPS::MajorRadius </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>a</em> the equatorial radius of the WGS84 ellipsoid (meters).</dd></dl>
-<p>(The WGS84 value is returned because the UTM and UPS projections are based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="UTMUPS_8hpp_source.html#l00295">295</a> of file <a class="el" href="UTMUPS_8hpp_source.html">UTMUPS.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoCoords_8hpp_source.html#l00459">GeographicLib::GeoCoords::MajorRadius()</a>, and <a class="el" href="MGRS_8hpp_source.html#l00265">GeographicLib::MGRS::MajorRadius()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a182de2e29f1181c55a266777039b8a9d"></a><!-- doxytag: member="GeographicLib::UTMUPS::Flattening" ref="a182de2e29f1181c55a266777039b8a9d" args="()" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> GeographicLib::UTMUPS::Flattening </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl class="return"><dt><b>Returns:</b></dt><dd><em>f</em> the flattening of the WGS84 ellipsoid.</dd></dl>
-<p>(The WGS84 value is returned because the UTM and UPS projections are based on this ellipsoid.) </p>
-
-<p>Definition at line <a class="el" href="UTMUPS_8hpp_source.html#l00304">304</a> of file <a class="el" href="UTMUPS_8hpp_source.html">UTMUPS.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="GeoCoords_8hpp_source.html#l00467">GeographicLib::GeoCoords::Flattening()</a>, and <a class="el" href="MGRS_8hpp_source.html#l00273">GeographicLib::MGRS::Flattening()</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="UTMUPS_8hpp_source.html">UTMUPS.hpp</a></li>
-<li><a class="el" href="UTMUPS_8cpp_source.html">UTMUPS.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Utility-members.html b/doc/html/classGeographicLib_1_1Utility-members.html
deleted file mode 100644
index e2f5d5c..0000000
--- a/doc/html/classGeographicLib_1_1Utility-members.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Member List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Utility.html">Utility</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib::Utility Member List</div>  </div>
-</div>
-<div class="contents">
-This is the complete list of members for <a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a>, including all inherited members.<table>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#aa6955e745deebb79795b12ab139798e0">date</a>(int s, int &y, int &m, int &d)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a3b62cb71f8b7cafd49c1bf3389298525">date</a>(const std::string &s, int &y, int &m, int &d)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a877a58000a56bc84c354cf42b4b1cd99">day</a>(int y, int m=1, int d=1)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a0590e044fe0352adc10a58c46fa1e529">day</a>(int y, int m, int d, bool check)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a42a6f8679c068dcb06f1da26aa21dfb1">dow</a>(int y, int m, int d)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a4687c34e55dc7ccc135e31a72402f008">dow</a>(int s)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a46b13d9ce2893f7e0fe6e7da093f528f">fract</a>(const std::string &s)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a074607cb34326b7109532c8fdd07e38c">fractionalyear</a>(const std::string &s)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a9a47fdaaa00a92e9a42035e62bd98faa">lookup</a>(const std::string &s, char c)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#aa35f1f83c0543558a79b3cf42ddf50c8">num</a>(const std::string &s)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#ad0d89bfe63814bab5312306fe3ac2b43">nummatch</a>(const std::string &s)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a96252f445a912b77517bff04d4d6ea74">ParseLine</a>(const std::string &line, std::string &key, std::string &val)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a23e88040ceb60bd3fe28efc04f9119f8">readarray</a>(std::istream &str, IntT array[], size_t num)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a044796b4fc14a952abec27da27fc20be">readarray</a>(std::istream &str, std::vector< IntT > &array)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">str</a>(T x, int p=-1)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a276eb20ace49c5260e1878c7d8aefd31">writearray</a>(std::ostream &str, const IntT array[], size_t num)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-  <tr class="memlist"><td><a class="el" href="classGeographicLib_1_1Utility.html#a0621066e4aa146a2c100802375e70389">writearray</a>(std::ostream &str, std::vector< IntT > &array)</td><td><a class="el" href="classGeographicLib_1_1Utility.html">GeographicLib::Utility</a></td><td><code> [inline, static]</code></td></tr>
-</table></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classGeographicLib_1_1Utility.html b/doc/html/classGeographicLib_1_1Utility.html
deleted file mode 100644
index 609475b..0000000
--- a/doc/html/classGeographicLib_1_1Utility.html
+++ /dev/null
@@ -1,903 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib::Utility Class Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a>      </li>
-      <li class="navelem"><a class="el" href="classGeographicLib_1_1Utility.html">Utility</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib::Utility Class Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="GeographicLib::Utility" -->
-<p>Some utility routines for GeographicLib.  
- <a href="classGeographicLib_1_1Utility.html#details">More...</a></p>
-
-<p><code>#include <<a class="el" href="Utility_8hpp_source.html">GeographicLib/Utility.hpp</a>></code></p>
-
-<p><a href="classGeographicLib_1_1Utility-members.html">List of all members.</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a877a58000a56bc84c354cf42b4b1cd99">day</a> (int y, int m=1, int d=1)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a0590e044fe0352adc10a58c46fa1e529">day</a> (int y, int m, int d, bool check)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#aa6955e745deebb79795b12ab139798e0">date</a> (int s, int &y, int &m, int &d)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a3b62cb71f8b7cafd49c1bf3389298525">date</a> (const std::string &s, int &y, int &m, int &d)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a42a6f8679c068dcb06f1da26aa21dfb1">dow</a> (int y, int m, int d)  throw ()</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a4687c34e55dc7ccc135e31a72402f008">dow</a> (int s)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a074607cb34326b7109532c8fdd07e38c">fractionalyear</a> (const std::string &s)</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static std::string </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">str</a> (T x, int p=-1)</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#aa35f1f83c0543558a79b3cf42ddf50c8">num</a> (const std::string &s)</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#ad0d89bfe63814bab5312306fe3ac2b43">nummatch</a> (const std::string &s)</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a46b13d9ce2893f7e0fe6e7da093f528f">fract</a> (const std::string &s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a9a47fdaaa00a92e9a42035e62bd98faa">lookup</a> (const std::string &s, char c)  throw ()</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename ExtT , typename IntT , bool bigendp> </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a23e88040ceb60bd3fe28efc04f9119f8">readarray</a> (std::istream &str, IntT array[], size_t num)</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename ExtT , typename IntT , bool bigendp> </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a044796b4fc14a952abec27da27fc20be">readarray</a> (std::istream &str, std::vector< IntT > &array)</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename ExtT , typename IntT , bool bigendp> </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a276eb20ace49c5260e1878c7d8aefd31">writearray</a> (std::ostream &str, const IntT array[], size_t num)</td></tr>
-<tr><td class="memTemplParams" colspan="2">template<typename ExtT , typename IntT , bool bigendp> </td></tr>
-<tr><td class="memTemplItemLeft" align="right" valign="top">static void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a0621066e4aa146a2c100802375e70389">writearray</a> (std::ostream &str, std::vector< IntT > &array)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html#a96252f445a912b77517bff04d4d6ea74">ParseLine</a> (const std::string &line, std::string &key, std::string &val)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Some utility routines for GeographicLib. </p>
-<p>Example of use: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Example of using the GeographicLib::Utility class</span>
-<span class="comment">// $Id: 34856fc274a1db91814bb96768a6c8feee03dacc $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <exception></span>
-<span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keywordflow">try</span> {
-    <span class="keywordtype">int</span>
-      d1 = <a class="code" href="classGeographicLib_1_1Utility.html#a877a58000a56bc84c354cf42b4b1cd99">Utility::day</a>(1939, 9, 3),  <span class="comment">// Britain declares war on Germany</span>
-      d2 = <a class="code" href="classGeographicLib_1_1Utility.html#a877a58000a56bc84c354cf42b4b1cd99">Utility::day</a>(1945, 8, 15); <span class="comment">// Japan surrenders</span>
-    cout << d2 - d1 << <span class="stringliteral">"\n"</span>;          <span class="comment">// Length of Second World War for Britain</span>
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div> </div><hr/><h2>Member Function Documentation</h2>
-<a class="anchor" id="a877a58000a56bc84c354cf42b4b1cd99"></a><!-- doxytag: member="GeographicLib::Utility::day" ref="a877a58000a56bc84c354cf42b4b1cd99" args="(int y, int m=1, int d=1)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static int GeographicLib::Utility::day </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>m</em> = <code>1</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>d</em> = <code>1</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a date to the day numbering sequentially starting with 0001-01-01 as day 1.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>the year (must be positive). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>the month, Jan = 1, etc. (must be positive). Default = 1. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">d</td><td>the day of the month (must be positive). Default = 1. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the sequential day number. </dd></dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00055">55</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0590e044fe0352adc10a58c46fa1e529"></a><!-- doxytag: member="GeographicLib::Utility::day" ref="a0590e044fe0352adc10a58c46fa1e529" args="(int y, int m, int d, bool check)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static int GeographicLib::Utility::day </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>d</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">bool </td>
-          <td class="paramname"><em>check</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a date to the day numbering sequentially starting with 0001-01-01 as day 1.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>the year (must be positive). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>the month, Jan = 1, etc. (must be positive). Default = 1. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">d</td><td>the day of the month (must be positive). Default = 1. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">check</td><td>whether to check the date. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the sequential day number.</dd></dl>
-<p>If <em>check</em> is true and the date is invalid an exception is thrown. </p>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00119">119</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa6955e745deebb79795b12ab139798e0"></a><!-- doxytag: member="GeographicLib::Utility::date" ref="aa6955e745deebb79795b12ab139798e0" args="(int s, int &y, int &m, int &d)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::Utility::date </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>s</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>d</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Given a day (counting from 0001-01-01 as day 1), return the date.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>the sequential day number (must be positive) </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>the year. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m</td><td>the month, Jan = 1, etc. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">d</td><td>the day of the month. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00142">142</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3b62cb71f8b7cafd49c1bf3389298525"></a><!-- doxytag: member="GeographicLib::Utility::date" ref="a3b62cb71f8b7cafd49c1bf3389298525" args="(const std::string &s, int &y, int &m, int &d)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::Utility::date </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>s</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int & </td>
-          <td class="paramname"><em>d</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Given a date as a string in the format yyyy, yyyy-mm, or yyyy-mm-dd, return the numeric values for the year, month, and day. No checking is done on these values.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>the date in string format. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">y</td><td>the year. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">m</td><td>the month, Jan = 1, etc. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">d</td><td>the day of the month. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00173">173</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a42a6f8679c068dcb06f1da26aa21dfb1"></a><!-- doxytag: member="GeographicLib::Utility::dow" ref="a42a6f8679c068dcb06f1da26aa21dfb1" args="(int y, int m, int d)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static int GeographicLib::Utility::dow </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>d</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Given the date, return the day of the week.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>the year (must be positive). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>the month, Jan = 1, etc. (must be positive). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">d</td><td>the day of the month (must be positive). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the day of the week with Sunday, Monday - Saturday = 0, 1 - 6. </dd></dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00212">212</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-<p>References <a class="el" href="Utility_8hpp_source.html#l00212">dow()</a>.</p>
-
-<p>Referenced by <a class="el" href="Utility_8hpp_source.html#l00212">dow()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4687c34e55dc7ccc135e31a72402f008"></a><!-- doxytag: member="GeographicLib::Utility::dow" ref="a4687c34e55dc7ccc135e31a72402f008" args="(int s)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static int GeographicLib::Utility::dow </td>
-          <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Given the sequential day, return the day of the week.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>the sequential day (must be positive). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the day of the week with Sunday, Monday - Saturday = 0, 1 - 6. </dd></dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00220">220</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a074607cb34326b7109532c8fdd07e38c"></a><!-- doxytag: member="GeographicLib::Utility::fractionalyear" ref="a074607cb34326b7109532c8fdd07e38c" args="(const std::string &s)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Utility::fractionalyear </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a string representing a date to a fractional year.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>the string to be converted. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the fractional year.</dd></dl>
-<p>The string is first read as an ordinary number (e.g., 2010 or 2012.5); if this is successful, the value is returned. Otherwise the string should be of the form yyyy-mm or yyyy-mm-dd and this is converted to a number with 2010-01-01 giving 2010.0 and 2012-07-03 giving 2012.5. </p>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00236">236</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae87a7ae2bee75f724907af9f753f03b7"></a><!-- doxytag: member="GeographicLib::Utility::str" ref="ae87a7ae2bee75f724907af9f753f03b7" args="(T x, int p=-1)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static std::string GeographicLib::Utility::str </td>
-          <td>(</td>
-          <td class="paramtype">T </td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"><em>p</em> = <code>-1</code> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a object of type T to a string.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the argument. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>the value to be converted. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">p</td><td>the precision used (default -1). </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the string representation.</dd></dl>
-<p>If <em>p</em> >= 0, then the number fixed format is used with p bits of precision. With p < 0, there is no manipulation of the format. </p>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00259">259</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-<p>Referenced by <a class="el" href="MagneticField_8cpp_source.html#l00035">main()</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa35f1f83c0543558a79b3cf42ddf50c8"></a><!-- doxytag: member="GeographicLib::Utility::num" ref="aa35f1f83c0543558a79b3cf42ddf50c8" args="(const std::string &s)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Utility::num </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert a string to an object of type T.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the return value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>the string to be converted. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>object of type T </dd></dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00275">275</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad0d89bfe63814bab5312306fe3ac2b43"></a><!-- doxytag: member="GeographicLib::Utility::nummatch" ref="ad0d89bfe63814bab5312306fe3ac2b43" args="(const std::string &s)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Utility::nummatch </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Match "nan" and "inf" (and variants thereof) in a string.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the return value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>the string to be matched. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>appropriate special value (+/-inf, nan) or 0 is none is found. </dd></dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00304">304</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a46b13d9ce2893f7e0fe6e7da093f528f"></a><!-- doxytag: member="GeographicLib::Utility::fract" ref="a46b13d9ce2893f7e0fe6e7da093f528f" args="(const std::string &s)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename T > </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static T GeographicLib::Utility::fract </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Read a simple fraction, e.g., 3/4, from a string to an object of type T.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">T</td><td>the type of the return value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>the string to be converted. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>object of type T </dd></dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00334">334</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9a47fdaaa00a92e9a42035e62bd98faa"></a><!-- doxytag: member="GeographicLib::Utility::lookup" ref="a9a47fdaaa00a92e9a42035e62bd98faa" args="(const std::string &s, char c)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static int GeographicLib::Utility::lookup </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>s</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char </td>
-          <td class="paramname"><em>c</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td>  throw ()<code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Lookup up a character in a string.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">s</td><td>the string to be searched. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">c</td><td>the character to look for. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the index of the first occurrence character in the string or -1 is the character is not present.</dd></dl>
-<p><em>c</em> is converted to upper case before search <em>s</em>. Therefore, it is intended that <em>s</em> should not contain any lower case letters. </p>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00354">354</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a23e88040ceb60bd3fe28efc04f9119f8"></a><!-- doxytag: member="GeographicLib::Utility::readarray" ref="a23e88040ceb60bd3fe28efc04f9119f8" args="(std::istream &str, IntT array[], size_t num)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename ExtT , typename IntT , bool bigendp> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::Utility::readarray </td>
-          <td>(</td>
-          <td class="paramtype">std::istream & </td>
-          <td class="paramname"><em>str</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">IntT </td>
-          <td class="paramname"><em>array</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>num</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Read data of type ExtT from a binary stream to an array of type IntT. The data in the file is in (bigendp ? big : little)-endian format.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">ExtT</td><td>the type of the objects in the binary stream (external). </td></tr>
-    <tr><td class="paramname">IntT</td><td>the type of the objects in the array (internal). </td></tr>
-    <tr><td class="paramname">bigendp</td><td>true if the external storage format is big-endian. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>the input stream containing the data of type ExtT (external). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">array</td><td>the output array of type IntT (internal). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>the size of the array. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00372">372</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00099">GeographicLib::Math::bigendian</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a044796b4fc14a952abec27da27fc20be"></a><!-- doxytag: member="GeographicLib::Utility::readarray" ref="a044796b4fc14a952abec27da27fc20be" args="(std::istream &str, std::vector< IntT > &array)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename ExtT , typename IntT , bool bigendp> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::Utility::readarray </td>
-          <td>(</td>
-          <td class="paramtype">std::istream & </td>
-          <td class="paramname"><em>str</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::vector< IntT > & </td>
-          <td class="paramname"><em>array</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Read data of type ExtT from a binary stream to a vector array of type IntT. The data in the file is in (bigendp ? big : little)-endian format.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">ExtT</td><td>the type of the objects in the binary stream (external). </td></tr>
-    <tr><td class="paramname">IntT</td><td>the type of the objects in the array (internal). </td></tr>
-    <tr><td class="paramname">bigendp</td><td>true if the external storage format is big-endian. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>the input stream containing the data of type ExtT (external). </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">array</td><td>the output vector of type IntT (internal). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00418">418</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a276eb20ace49c5260e1878c7d8aefd31"></a><!-- doxytag: member="GeographicLib::Utility::writearray" ref="a276eb20ace49c5260e1878c7d8aefd31" args="(std::ostream &str, const IntT array[], size_t num)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename ExtT , typename IntT , bool bigendp> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::Utility::writearray </td>
-          <td>(</td>
-          <td class="paramtype">std::ostream & </td>
-          <td class="paramname"><em>str</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const IntT </td>
-          <td class="paramname"><em>array</em>[], </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">size_t </td>
-          <td class="paramname"><em>num</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Write data in an array of type IntT as type ExtT to a binary stream. The data in the file is in (bigendp ? big : little)-endian format.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">ExtT</td><td>the type of the objects in the binary stream (external). </td></tr>
-    <tr><td class="paramname">IntT</td><td>the type of the objects in the array (internal). </td></tr>
-    <tr><td class="paramname">bigendp</td><td>true if the external storage format is big-endian. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[out]</td><td class="paramname">str</td><td>the output stream for the data of type ExtT (external). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">array</td><td>the input array of type IntT (internal). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>the size of the array. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00435">435</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-<p>References <a class="el" href="Math_8hpp_source.html#l00099">GeographicLib::Math::bigendian</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0621066e4aa146a2c100802375e70389"></a><!-- doxytag: member="GeographicLib::Utility::writearray" ref="a0621066e4aa146a2c100802375e70389" args="(std::ostream &str, std::vector< IntT > &array)" -->
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template<typename ExtT , typename IntT , bool bigendp> </div>
-      <table class="memname">
-        <tr>
-          <td class="memname">static void GeographicLib::Utility::writearray </td>
-          <td>(</td>
-          <td class="paramtype">std::ostream & </td>
-          <td class="paramname"><em>str</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::vector< IntT > & </td>
-          <td class="paramname"><em>array</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Write data in an array of type IntT as type ExtT to a binary stream. The data in the file is in (bigendp ? big : little)-endian format.</p>
-<dl><dt><b>Template Parameters:</b></dt><dd>
-  <table class="">
-    <tr><td class="paramname">ExtT</td><td>the type of the objects in the binary stream (external). </td></tr>
-    <tr><td class="paramname">IntT</td><td>the type of the objects in the array (internal). </td></tr>
-    <tr><td class="paramname">bigendp</td><td>true if the external storage format is big-endian. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[out]</td><td class="paramname">str</td><td>the output stream for the data of type ExtT (external). </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">array</td><td>the input vector of type IntT (internal). </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="Utility_8hpp_source.html#l00476">476</a> of file <a class="el" href="Utility_8hpp_source.html">Utility.hpp</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a96252f445a912b77517bff04d4d6ea74"></a><!-- doxytag: member="GeographicLib::Utility::ParseLine" ref="a96252f445a912b77517bff04d4d6ea74" args="(const std::string &line, std::string &key, std::string &val)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool GeographicLib::Utility::ParseLine </td>
-          <td>(</td>
-          <td class="paramtype">const std::string & </td>
-          <td class="paramname"><em>line</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::string & </td>
-          <td class="paramname"><em>key</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">std::string & </td>
-          <td class="paramname"><em>val</em> </td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Parse a KEY VALUE line.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">line</td><td>the input line. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">key</td><td>the key. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">val</td><td>the value. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>whether a key was found.</dd></dl>
-<p>A # character and everything after it are discarded. If the results is just white space, the routine returns false (and <em>key</em> and <em>val</em> are not set). Otherwise the first token is taken to be the key and the rest of the line (trimmed of leading and trailing white space) is the value. </p>
-
-<p>Definition at line <a class="el" href="Utility_8cpp_source.html#l00022">22</a> of file <a class="el" href="Utility_8cpp_source.html">Utility.cpp</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following files:<ul>
-<li><a class="el" href="Utility_8hpp_source.html">Utility.hpp</a></li>
-<li><a class="el" href="Utility_8cpp_source.html">Utility.cpp</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/classes.html b/doc/html/classes.html
deleted file mode 100644
index d70c8b9..0000000
--- a/doc/html/classes.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Index</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Class Index</div>  </div>
-</div>
-<div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_L">L</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_N">N</a> | <a class="qindex" href="#letter_O">O</a> |& [...]
-<table style="margin: 10px;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
-<tr><td rowspan="2" valign="bottom"><a name="letter_A"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  A  </div></td></tr></table>
-</td><td rowspan="2" valign="bottom"><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  E  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="classGeographicLib_1_1GravityModel.html">GravityModel</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  O  </div></td></tr></table>
-</td><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  T  </div></td></tr></table>
-</td></tr>
-<tr><td rowspan="2" valign="bottom"><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  L  </div></td></tr></table>
-</td></tr>
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1EllipticFunction.html">EllipticFunction</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1OSGB.html">OSGB</a> (<a class="el" href="namespaceG [...]
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  G  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">LambertConformalConic</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  P  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">TransverseMercatorExact</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">AzimuthalEquidistant</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1LocalCartesian.html">LocalCartesian</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_U"></a><table border="0" cellspacing="0" cellpad [...]
-</td></tr>
-<tr><td rowspan="2" valign="bottom"><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  C  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  M  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="classGeographicLib_1_1PolarStereographic.html">PolarStereographic</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeoCoords</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1PolygonArea.html">PolygonArea</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1Utility.html">Utility</a> (<a class="el" href="namespaceGeographi [...]
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">CassiniSoldner</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1MagneticCircle.html">MagneticCircle</a> (<a class="el" href=" [...]
-</td><td valign="top"><a class="el" href="classGeographicLib_1_1UTMUPS.html">UTMUPS</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td></tr>
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeodesicLine</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1MagneticModel.html">MagneticModel</a> (<a class="el"  [...]
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html">SphericalEngine::coeff</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1GeographicErr.html">GeographicErr</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1Math.html">Math</a> (<a class="el [...]
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1Constants.html">Constants</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1Geoid.html">Geoid</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1MGRS.html">MGRS</a> (<a class="el" href="namespaceGeographicLib.html">Geograp [...]
-<tr><td rowspan="2" valign="bottom"><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  D  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="classGeographicLib_1_1Gnomonic.html">Gnomonic</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  N  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">SphericalHarmonic1</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1GravityCircle.html">GravityCircle</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td valign="top"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">SphericalHarmonic2</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classGeographicLib_1_1DMS.html">DMS</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td></td><td valign="top"><a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a> (<a class="el" href="namespaceGeographicLib.html">GeographicLib</a>)   </td><td></td><td></td></tr>
-<tr><td></td><td></td><td></td><td></td><td></td></tr>
-</table>
-<div class="qindex"><a class="qindex" href="#letter_A">A</a> | <a class="qindex" href="#letter_C">C</a> | <a class="qindex" href="#letter_D">D</a> | <a class="qindex" href="#letter_E">E</a> | <a class="qindex" href="#letter_G">G</a> | <a class="qindex" href="#letter_L">L</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_N">N</a> | <a class="qindex" href="#letter_O">O</a> |& [...]
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/closed.png b/doc/html/closed.png
deleted file mode 100644
index b7d4bd9..0000000
Binary files a/doc/html/closed.png and /dev/null differ
diff --git a/doc/html/dir_20dd3cf0f425f295158796088ceb05f4.html b/doc/html/dir_20dd3cf0f425f295158796088ceb05f4.html
deleted file mode 100644
index c7cc9fc..0000000
--- a/doc/html/dir_20dd3cf0f425f295158796088ceb05f4.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: src/ Directory Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">src Directory Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="files"></a>
-Files</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="AlbersEqualArea_8cpp.html">AlbersEqualArea.cpp</a> <a href="AlbersEqualArea_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="AzimuthalEquidistant_8cpp.html">AzimuthalEquidistant.cpp</a> <a href="AzimuthalEquidistant_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="CassiniSoldner_8cpp.html">CassiniSoldner.cpp</a> <a href="CassiniSoldner_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="CircularEngine_8cpp.html">CircularEngine.cpp</a> <a href="CircularEngine_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">GeographicLib::CircularEngine</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="DMS_8cpp.html">DMS.cpp</a> <a href="DMS_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="EllipticFunction_8cpp.html">EllipticFunction.cpp</a> <a href="EllipticFunction_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">GeographicLib::EllipticFunction</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Geocentric_8cpp.html">Geocentric.cpp</a> <a href="Geocentric_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GeoCoords_8cpp.html">GeoCoords.cpp</a> <a href="GeoCoords_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Geodesic_8cpp.html">Geodesic.cpp</a> <a href="Geodesic_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GeodesicLine_8cpp.html">GeodesicLine.cpp</a> <a href="GeodesicLine_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Geoid_8cpp.html">Geoid.cpp</a> <a href="Geoid_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Gnomonic_8cpp.html">Gnomonic.cpp</a> <a href="Gnomonic_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityCircle_8cpp.html">GravityCircle.cpp</a> <a href="GravityCircle_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityModel_8cpp.html">GravityModel.cpp</a> <a href="GravityModel_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="LambertConformalConic_8cpp.html">LambertConformalConic.cpp</a> <a href="LambertConformalConic_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="LocalCartesian_8cpp.html">LocalCartesian.cpp</a> <a href="LocalCartesian_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticCircle_8cpp.html">MagneticCircle.cpp</a> <a href="MagneticCircle_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticModel_8cpp.html">MagneticModel.cpp</a> <a href="MagneticModel_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="MGRS_8cpp.html">MGRS.cpp</a> <a href="MGRS_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="NormalGravity_8cpp.html">NormalGravity.cpp</a> <a href="NormalGravity_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="OSGB_8cpp.html">OSGB.cpp</a> <a href="OSGB_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">GeographicLib::OSGB</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="PolarStereographic_8cpp.html">PolarStereographic.cpp</a> <a href="PolarStereographic_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="PolygonArea_8cpp.html">PolygonArea.cpp</a> <a href="PolygonArea_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalEngine_8cpp.html">SphericalEngine.cpp</a> <a href="SphericalEngine_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercator_8cpp.html">TransverseMercator.cpp</a> <a href="TransverseMercator_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercatorExact_8cpp.html">TransverseMercatorExact.cpp</a> <a href="TransverseMercatorExact_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Utility_8cpp.html">Utility.cpp</a> <a href="Utility_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="UTMUPS_8cpp.html">UTMUPS.cpp</a> <a href="UTMUPS_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Implementation for <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> class. </p>
-<br/></td></tr>
-</table>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/dir_27ad12676aedce3065ab152db424ea04.html b/doc/html/dir_27ad12676aedce3065ab152db424ea04.html
deleted file mode 100644
index d493d15..0000000
--- a/doc/html/dir_27ad12676aedce3065ab152db424ea04.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: tools/ Directory Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">tools Directory Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="files"></a>
-Files</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="CartConvert_8cpp.html">CartConvert.cpp</a> <a href="CartConvert_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for geodetic to cartesian coordinate conversions. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="ConicProj_8cpp.html">ConicProj.cpp</a> <a href="ConicProj_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for conical projections. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GeoConvert_8cpp.html">GeoConvert.cpp</a> <a href="GeoConvert_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for geographic coordinate conversions. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Geod_8cpp.html">Geod.cpp</a> <a href="Geod_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for geodesic calculations. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GeodesicProj_8cpp.html">GeodesicProj.cpp</a> <a href="GeodesicProj_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for geodesic projections. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GeoidEval_8cpp.html">GeoidEval.cpp</a> <a href="GeoidEval_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for evaluating geoid heights. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Gravity_8cpp.html">Gravity.cpp</a> <a href="Gravity_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for evaluating gravity fields. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticField_8cpp.html">MagneticField.cpp</a> <a href="MagneticField_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for evaluating magnetic fields. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Planimeter_8cpp.html">Planimeter.cpp</a> <a href="Planimeter_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for measuring the area of geodesic polygons. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercatorProj_8cpp.html">TransverseMercatorProj.cpp</a> <a href="TransverseMercatorProj_8cpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Command line utility for transverse Mercator projections. </p>
-<br/></td></tr>
-</table>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/dir_addd23a7fcb542c6c8ac894d486b21be.html b/doc/html/dir_addd23a7fcb542c6c8ac894d486b21be.html
deleted file mode 100644
index cbbe5f9..0000000
--- a/doc/html/dir_addd23a7fcb542c6c8ac894d486b21be.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: include/ Directory Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">include Directory Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="subdirs"></a>
-Directories</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a></td></tr>
-</table>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/dir_b4d36717c8020107727c093197410e9d.html b/doc/html/dir_b4d36717c8020107727c093197410e9d.html
deleted file mode 100644
index de20d16..0000000
--- a/doc/html/dir_b4d36717c8020107727c093197410e9d.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: include/GeographicLib/ Directory Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="nav-path" class="navpath">
-    <ul>
-      <li class="navelem"><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a>      </li>
-      <li class="navelem"><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a>      </li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">GeographicLib Directory Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="files"></a>
-Files</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Accumulator_8hpp.html">Accumulator.hpp</a> <a href="Accumulator_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">GeographicLib::Accumulator</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="AlbersEqualArea_8hpp.html">AlbersEqualArea.hpp</a> <a href="AlbersEqualArea_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="AzimuthalEquidistant_8hpp.html">AzimuthalEquidistant.hpp</a> <a href="AzimuthalEquidistant_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="CassiniSoldner_8hpp.html">CassiniSoldner.hpp</a> <a href="CassiniSoldner_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="CircularEngine_8hpp.html">CircularEngine.hpp</a> <a href="CircularEngine_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">GeographicLib::CircularEngine</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Constants_8hpp.html">Constants.hpp</a> <a href="Constants_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">GeographicLib::Constants</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="DMS_8hpp.html">DMS.hpp</a> <a href="DMS_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="EllipticFunction_8hpp.html">EllipticFunction.hpp</a> <a href="EllipticFunction_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">GeographicLib::EllipticFunction</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Geocentric_8hpp.html">Geocentric.hpp</a> <a href="Geocentric_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GeoCoords_8hpp.html">GeoCoords.hpp</a> <a href="GeoCoords_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Geodesic_8hpp.html">Geodesic.hpp</a> <a href="Geodesic_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GeodesicLine_8hpp.html">GeodesicLine.hpp</a> <a href="GeodesicLine_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Geoid_8hpp.html">Geoid.hpp</a> <a href="Geoid_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Gnomonic_8hpp.html">Gnomonic.hpp</a> <a href="Gnomonic_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityCircle_8hpp.html">GravityCircle.hpp</a> <a href="GravityCircle_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="GravityModel_8hpp.html">GravityModel.hpp</a> <a href="GravityModel_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="LambertConformalConic_8hpp.html">LambertConformalConic.hpp</a> <a href="LambertConformalConic_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="LocalCartesian_8hpp.html">LocalCartesian.hpp</a> <a href="LocalCartesian_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticCircle_8hpp.html">MagneticCircle.hpp</a> <a href="MagneticCircle_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="MagneticModel_8hpp.html">MagneticModel.hpp</a> <a href="MagneticModel_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Math_8hpp.html">Math.hpp</a> <a href="Math_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="MGRS_8hpp.html">MGRS.hpp</a> <a href="MGRS_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="NormalGravity_8hpp.html">NormalGravity.hpp</a> <a href="NormalGravity_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="OSGB_8hpp.html">OSGB.hpp</a> <a href="OSGB_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">GeographicLib::OSGB</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="PolarStereographic_8hpp.html">PolarStereographic.hpp</a> <a href="PolarStereographic_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="PolygonArea_8hpp.html">PolygonArea.hpp</a> <a href="PolygonArea_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalEngine_8hpp.html">SphericalEngine.hpp</a> <a href="SphericalEngine_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalHarmonic_8hpp.html">SphericalHarmonic.hpp</a> <a href="SphericalHarmonic_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">GeographicLib::SphericalHarmonic</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalHarmonic1_8hpp.html">SphericalHarmonic1.hpp</a> <a href="SphericalHarmonic1_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html" title="Spherical Harmonic series with a correction to the coefficients.">GeographicLib::SphericalHarmonic1</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="SphericalHarmonic2_8hpp.html">SphericalHarmonic2.hpp</a> <a href="SphericalHarmonic2_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html" title="Spherical Harmonic series with two corrections to the coefficients.">GeographicLib::SphericalHarmonic2</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercator_8hpp.html">TransverseMercator.hpp</a> <a href="TransverseMercator_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="TransverseMercatorExact_8hpp.html">TransverseMercatorExact.hpp</a> <a href="TransverseMercatorExact_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="Utility_8hpp.html">Utility.hpp</a> <a href="Utility_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a> class. </p>
-<br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="UTMUPS_8hpp.html">UTMUPS.hpp</a> <a href="UTMUPS_8hpp_source.html">[code]</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Header for <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> class. </p>
-<br/></td></tr>
-</table>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/dirs.html b/doc/html/dirs.html
deleted file mode 100644
index 7114f05..0000000
--- a/doc/html/dirs.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Directories</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li class="current"><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Directories</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock">This directory hierarchy is sorted roughly, but not completely, alphabetically:</div><ul>
-<li><a class="el" href="dir_addd23a7fcb542c6c8ac894d486b21be.html">include</a><ul>
-<li><a class="el" href="dir_b4d36717c8020107727c093197410e9d.html">GeographicLib</a></li>
-</ul>
-</li>
-<li><a class="el" href="dir_20dd3cf0f425f295158796088ceb05f4.html">src</a></li>
-<li><a class="el" href="dir_27ad12676aedce3065ab152db424ea04.html">tools</a></li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/doxygen.css b/doc/html/doxygen.css
deleted file mode 100644
index 22c7b5c..0000000
--- a/doc/html/doxygen.css
+++ /dev/null
@@ -1,946 +0,0 @@
-/* The standard CSS for doxygen */
-
-body, table, div, p, dl {
-	font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
-	font-size: 12px;
-}
-
-/* @group Heading Levels */
-
-h1 {
-	font-size: 150%;
-}
-
-.title {
-	font-size: 150%;
-	font-weight: bold;
-	margin: 10px 2px;
-}
-
-h2 {
-	font-size: 120%;
-}
-
-h3 {
-	font-size: 100%;
-}
-
-dt {
-	font-weight: bold;
-}
-
-div.multicol {
-	-moz-column-gap: 1em;
-	-webkit-column-gap: 1em;
-	-moz-column-count: 3;
-	-webkit-column-count: 3;
-}
-
-p.startli, p.startdd, p.starttd {
-	margin-top: 2px;
-}
-
-p.endli {
-	margin-bottom: 0px;
-}
-
-p.enddd {
-	margin-bottom: 4px;
-}
-
-p.endtd {
-	margin-bottom: 2px;
-}
-
-/* @end */
-
-caption {
-	font-weight: bold;
-}
-
-span.legend {
-        font-size: 70%;
-        text-align: center;
-}
-
-h3.version {
-        font-size: 90%;
-        text-align: center;
-}
-
-div.qindex, div.navtab{
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
-	text-align: center;
-}
-
-div.qindex, div.navpath {
-	width: 100%;
-	line-height: 140%;
-}
-
-div.navtab {
-	margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
-	color: #3D578C;
-	font-weight: normal;
-	text-decoration: none;
-}
-
-.contents a:visited {
-	color: #4665A2;
-}
-
-a:hover {
-	text-decoration: underline;
-}
-
-a.qindex {
-	font-weight: bold;
-}
-
-a.qindexHL {
-	font-weight: bold;
-	background-color: #9CAFD4;
-	color: #ffffff;
-	border: 1px double #869DCA;
-}
-
-.contents a.qindexHL:visited {
-        color: #ffffff;
-}
-
-a.el {
-	font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code {
-	color: #4665A2;
-}
-
-a.codeRef {
-	color: #4665A2;
-}
-
-/* @end */
-
-dl.el {
-	margin-left: -1cm;
-}
-
-.fragment {
-	font-family: monospace, fixed;
-	font-size: 105%;
-}
-
-pre.fragment {
-	border: 1px solid #C4CFE5;
-	background-color: #FBFCFD;
-	padding: 4px 6px;
-	margin: 4px 8px 4px 2px;
-	overflow: auto;
-	word-wrap: break-word;
-	font-size:  9pt;
-	line-height: 125%;
-}
-
-div.ah {
-	background-color: black;
-	font-weight: bold;
-	color: #ffffff;
-	margin-bottom: 3px;
-	margin-top: 3px;
-	padding: 0.2em;
-	border: solid thin #333;
-	border-radius: 0.5em;
-	-webkit-border-radius: .5em;
-	-moz-border-radius: .5em;
-	box-shadow: 2px 2px 3px #999;
-	-webkit-box-shadow: 2px 2px 3px #999;
-	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
-	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
-}
-
-div.groupHeader {
-	margin-left: 16px;
-	margin-top: 12px;
-	font-weight: bold;
-}
-
-div.groupText {
-	margin-left: 16px;
-	font-style: italic;
-}
-
-body {
-	background-color: white;
-	color: black;
-        margin: 0;
-}
-
-div.contents {
-	margin-top: 10px;
-	margin-left: 8px;
-	margin-right: 8px;
-}
-
-td.indexkey {
-	background-color: #EBEFF6;
-	font-weight: bold;
-	border: 1px solid #C4CFE5;
-	margin: 2px 0px 2px 0;
-	padding: 2px 10px;
-}
-
-td.indexvalue {
-	background-color: #EBEFF6;
-	border: 1px solid #C4CFE5;
-	padding: 2px 10px;
-	margin: 2px 0px;
-}
-
-tr.memlist {
-	background-color: #EEF1F7;
-}
-
-p.formulaDsp {
-	text-align: center;
-}
-
-img.formulaDsp {
-	
-}
-
-img.formulaInl {
-	vertical-align: middle;
-}
-
-div.center {
-	text-align: center;
-        margin-top: 0px;
-        margin-bottom: 0px;
-        padding: 0px;
-}
-
-div.center img {
-	border: 0px;
-}
-
-address.footer {
-	text-align: right;
-	padding-right: 12px;
-}
-
-img.footer {
-	border: 0px;
-	vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
-	color: #008000
-}
-
-span.keywordtype {
-	color: #604020
-}
-
-span.keywordflow {
-	color: #e08000
-}
-
-span.comment {
-	color: #800000
-}
-
-span.preprocessor {
-	color: #806020
-}
-
-span.stringliteral {
-	color: #002080
-}
-
-span.charliteral {
-	color: #008080
-}
-
-span.vhdldigit { 
-	color: #ff00ff 
-}
-
-span.vhdlchar { 
-	color: #000000 
-}
-
-span.vhdlkeyword { 
-	color: #700070 
-}
-
-span.vhdllogic { 
-	color: #ff0000 
-}
-
-/* @end */
-
-/*
-.search {
-	color: #003399;
-	font-weight: bold;
-}
-
-form.search {
-	margin-bottom: 0px;
-	margin-top: 0px;
-}
-
-input.search {
-	font-size: 75%;
-	color: #000080;
-	font-weight: normal;
-	background-color: #e8eef2;
-}
-*/
-
-td.tiny {
-	font-size: 75%;
-}
-
-.dirtab {
-	padding: 4px;
-	border-collapse: collapse;
-	border: 1px solid #A3B4D7;
-}
-
-th.dirtab {
-	background: #EBEFF6;
-	font-weight: bold;
-}
-
-hr {
-	height: 0px;
-	border: none;
-	border-top: 1px solid #4A6AAA;
-}
-
-hr.footer {
-	height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
-	border-spacing: 0px;
-	padding: 0px;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
-	background-color: #F9FAFC;
-	border: none;
-	margin: 4px;
-	padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
-	padding: 0px 8px 4px 8px;
-	color: #555;
-}
-
-.memItemLeft, .memItemRight, .memTemplParams {
-	border-top: 1px solid #C4CFE5;
-}
-
-.memItemLeft, .memTemplItemLeft {
-        white-space: nowrap;
-}
-
-.memItemRight {
-	width: 100%;
-}
-
-.memTemplParams {
-	color: #4665A2;
-        white-space: nowrap;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtemplate {
-	font-size: 80%;
-	color: #4665A2;
-	font-weight: normal;
-	margin-left: 9px;
-}
-
-.memnav {
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
-	text-align: center;
-	margin: 2px;
-	margin-right: 15px;
-	padding: 2px;
-}
-
-.mempage {
-	width: 100%;
-}
-
-.memitem {
-	padding: 0;
-	margin-bottom: 10px;
-	margin-right: 5px;
-}
-
-.memname {
-        white-space: nowrap;
-        font-weight: bold;
-        margin-left: 6px;
-}
-
-.memproto, dl.reflist dt {
-        border-top: 1px solid #A8B8D9;
-        border-left: 1px solid #A8B8D9;
-        border-right: 1px solid #A8B8D9;
-        padding: 6px 0px 6px 0px;
-        color: #253555;
-        font-weight: bold;
-        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-        /* opera specific markup */
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        border-top-right-radius: 8px;
-        border-top-left-radius: 8px;
-        /* firefox specific markup */
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        -moz-border-radius-topright: 8px;
-        -moz-border-radius-topleft: 8px;
-        /* webkit specific markup */
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        -webkit-border-top-right-radius: 8px;
-        -webkit-border-top-left-radius: 8px;
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E2E8F2;
-
-}
-
-.memdoc, dl.reflist dd {
-        border-bottom: 1px solid #A8B8D9;      
-        border-left: 1px solid #A8B8D9;      
-        border-right: 1px solid #A8B8D9; 
-        padding: 2px 5px;
-        background-color: #FBFCFD;
-        border-top-width: 0;
-        /* opera specific markup */
-        border-bottom-left-radius: 8px;
-        border-bottom-right-radius: 8px;
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        /* firefox specific markup */
-        -moz-border-radius-bottomleft: 8px;
-        -moz-border-radius-bottomright: 8px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
-        /* webkit specific markup */
-        -webkit-border-bottom-left-radius: 8px;
-        -webkit-border-bottom-right-radius: 8px;
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
-}
-
-dl.reflist dt {
-        padding: 5px;
-}
-
-dl.reflist dd {
-        margin: 0px 0px 10px 0px;
-        padding: 5px;
-}
-
-.paramkey {
-	text-align: right;
-}
-
-.paramtype {
-	white-space: nowrap;
-}
-
-.paramname {
-	color: #602020;
-	white-space: nowrap;
-}
-.paramname em {
-	font-style: normal;
-}
-
-.params, .retval, .exception, .tparams {
-        border-spacing: 6px 2px;
-}       
-
-.params .paramname, .retval .paramname {
-        font-weight: bold;
-        vertical-align: top;
-}
-        
-.params .paramtype {
-        font-style: italic;
-        vertical-align: top;
-}       
-        
-.params .paramdir {
-        font-family: "courier new",courier,monospace;
-        vertical-align: top;
-}
-
-
-
-
-/* @end */
-
-/* @group Directory (tree) */
-
-/* for the tree view */
-
-.ftvtree {
-	font-family: sans-serif;
-	margin: 0px;
-}
-
-/* these are for tree view when used as main index */
-
-.directory {
-	font-size: 9pt;
-	font-weight: bold;
-	margin: 5px;
-}
-
-.directory h3 {
-	margin: 0px;
-	margin-top: 1em;
-	font-size: 11pt;
-}
-
-/*
-The following two styles can be used to replace the root node title
-with an image of your choice.  Simply uncomment the next two styles,
-specify the name of your image and be sure to set 'height' to the
-proper pixel height of your image.
-*/
-
-/*
-.directory h3.swap {
-	height: 61px;
-	background-repeat: no-repeat;
-	background-image: url("yourimage.gif");
-}
-.directory h3.swap span {
-	display: none;
-}
-*/
-
-.directory > h3 {
-	margin-top: 0;
-}
-
-.directory p {
-	margin: 0px;
-	white-space: nowrap;
-}
-
-.directory div {
-	display: none;
-	margin: 0px;
-}
-
-.directory img {
-	vertical-align: -30%;
-}
-
-/* these are for tree view when not used as main index */
-
-.directory-alt {
-	font-size: 100%;
-	font-weight: bold;
-}
-
-.directory-alt h3 {
-	margin: 0px;
-	margin-top: 1em;
-	font-size: 11pt;
-}
-
-.directory-alt > h3 {
-	margin-top: 0;
-}
-
-.directory-alt p {
-	margin: 0px;
-	white-space: nowrap;
-}
-
-.directory-alt div {
-	display: none;
-	margin: 0px;
-}
-
-.directory-alt img {
-	vertical-align: -30%;
-}
-
-/* @end */
-
-div.dynheader {
-        margin-top: 8px;
-}
-
-address {
-	font-style: normal;
-	color: #2A3D61;
-}
-
-table.doxtable {
-	border-collapse:collapse;
-}
-
-table.doxtable td, table.doxtable th {
-	border: 1px solid #2D4068;
-	padding: 3px 7px 2px;
-}
-
-table.doxtable th {
-	background-color: #374F7F;
-	color: #FFFFFF;
-	font-size: 110%;
-	padding-bottom: 4px;
-	padding-top: 5px;
-	text-align:left;
-}
-
-table.fieldtable {
-        width: 100%;
-        margin-bottom: 10px;
-        border: 1px solid #A8B8D9;
-        border-spacing: 0px;
-        -moz-border-radius: 4px;
-        -webkit-border-radius: 4px;
-        border-radius: 4px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
-        padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
-        white-space: nowrap;
-        border-right: 1px solid #A8B8D9;
-        border-bottom: 1px solid #A8B8D9;
-        vertical-align: top;
-}
-
-.fieldtable td.fielddoc {
-        border-bottom: 1px solid #A8B8D9;
-        width: 100%;
-}
-
-.fieldtable tr:last-child td {
-        border-bottom: none;
-}
-
-.fieldtable th {
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E2E8F2;
-        font-size: 90%;
-        color: #253555;
-        padding-bottom: 4px;
-        padding-top: 5px;
-        text-align:left;
-        -moz-border-radius-topleft: 4px;
-        -moz-border-radius-topright: 4px;
-        -webkit-border-top-left-radius: 4px;
-        -webkit-border-top-right-radius: 4px;
-        border-top-left-radius: 4px;
-        border-top-right-radius: 4px;
-        border-bottom: 1px solid #A8B8D9;
-}
-
-
-.tabsearch {
-	top: 0px;
-	left: 10px;
-	height: 36px;
-	background-image: url('tab_b.png');
-	z-index: 101;
-	overflow: hidden;
-	font-size: 13px;
-}
-
-.navpath ul
-{
-	font-size: 11px;
-	background-image:url('tab_b.png');
-	background-repeat:repeat-x;
-	height:30px;
-	line-height:30px;
-	color:#8AA0CC;
-	border:solid 1px #C2CDE4;
-	overflow:hidden;
-	margin:0px;
-	padding:0px;
-}
-
-.navpath li
-{
-	list-style-type:none;
-	float:left;
-	padding-left:10px;
-	padding-right:15px;
-	background-image:url('bc_s.png');
-	background-repeat:no-repeat;
-	background-position:right;
-	color:#364D7C;
-}
-
-.navpath li.navelem a
-{
-	height:32px;
-	display:block;
-	text-decoration: none;
-	outline: none;
-}
-
-.navpath li.navelem a:hover
-{
-	color:#6884BD;
-}
-
-.navpath li.footer
-{
-        list-style-type:none;
-        float:right;
-        padding-left:10px;
-        padding-right:15px;
-        background-image:none;
-        background-repeat:no-repeat;
-        background-position:right;
-        color:#364D7C;
-        font-size: 8pt;
-}
-
-
-div.summary
-{
-	float: right;
-	font-size: 8pt;
-	padding-right: 5px;
-	width: 50%;
-	text-align: right;
-}       
-
-div.summary a
-{
-	white-space: nowrap;
-}
-
-div.ingroups
-{
-	margin-left: 5px;
-	font-size: 8pt;
-	padding-left: 5px;
-	width: 50%;
-	text-align: left;
-}
-
-div.ingroups a
-{
-	white-space: nowrap;
-}
-
-div.header
-{
-        background-image:url('nav_h.png');
-        background-repeat:repeat-x;
-	background-color: #F9FAFC;
-	margin:  0px;
-	border-bottom: 1px solid #C4CFE5;
-}
-
-div.headertitle
-{
-	padding: 5px 5px 5px 7px;
-}
-
-dl
-{
-        padding: 0 0 0 10px;
-}
-
-dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
-{
-        border-left:4px solid;
-        padding: 0 0 0 6px;
-}
-
-dl.note
-{
-        border-color: #D0C000;
-}
-
-dl.warning, dl.attention
-{
-        border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant
-{
-        border-color: #00D000;
-}
-
-dl.deprecated
-{
-        border-color: #505050;
-}
-
-dl.todo
-{
-        border-color: #00C0E0;
-}
-
-dl.test
-{
-        border-color: #3030E0;
-}
-
-dl.bug
-{
-        border-color: #C08050;
-}
-
-#projectlogo
-{
-	text-align: center;
-	vertical-align: bottom;
-	border-collapse: separate;
-}
- 
-#projectlogo img
-{ 
-	border: 0px none;
-}
- 
-#projectname
-{
-	font: 300% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 2px 0px;
-}
-    
-#projectbrief
-{
-	font: 120% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#projectnumber
-{
-	font: 50% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#titlearea
-{
-	padding: 0px;
-	margin: 0px;
-	width: 100%;
-	border-bottom: 1px solid #5373B4;
-}
-
-.image
-{
-        text-align: center;
-}
-
-.dotgraph
-{
-        text-align: center;
-}
-
-.mscgraph
-{
-        text-align: center;
-}
-
-.caption
-{
-	font-weight: bold;
-}
-
-div.zoom
-{
-	border: 1px solid #90A5CE;
-}
-
-dl.citelist {
-        margin-bottom:50px;
-}
-
-dl.citelist dt {
-        color:#334975;
-        float:left;
-        font-weight:bold;
-        margin-right:10px;
-        padding:5px;
-}
-
-dl.citelist dd {
-        margin:2px 0;
-        padding:5px 0;
-}
-
- at media print
-{
-  #top { display: none; }
-  #side-nav { display: none; }
-  #nav-path { display: none; }
-  body { overflow:visible; }
-  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
-  .summary { display: none; }
-  .memitem { page-break-inside: avoid; }
-  #doc-content
-  {
-    margin-left:0 !important;
-    height:auto !important;
-    width:auto !important;
-    overflow:inherit;
-    display:inline;
-  }
-  pre.fragment
-  {
-    overflow: visible;
-    text-wrap: unrestricted;
-    white-space: -moz-pre-wrap; /* Moz */
-    white-space: -pre-wrap; /* Opera 4-6 */
-    white-space: -o-pre-wrap; /* Opera 7 */
-    white-space: pre-wrap; /* CSS3  */
-    word-wrap: break-word; /* IE 5.5+ */
-  }
-}
-
diff --git a/doc/html/doxygen.png b/doc/html/doxygen.png
deleted file mode 100644
index 635ed52..0000000
Binary files a/doc/html/doxygen.png and /dev/null differ
diff --git a/doc/html/ellint.mac b/doc/html/ellint.mac
deleted file mode 100644
index 6f611e1..0000000
--- a/doc/html/ellint.mac
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
-
-Written by Charles Karney <charles at karney.com>
-http://geographiclib.sourceforge.net/
-
-$Id: 23c6d3303abe67aa05500f9f794547c8f3f122a5 $
-
-*/
-
-/* Implementation of methods given in
-
-B. C. Carlson
-Computation of elliptic integrals
-Numerical Algorithms 10, 13-26 (1995)
-
-*/
-
-/* fpprec:120$  Should be set outside */
-etol:0.1b0^fpprec$ /* For Carlson */
-ca:sqrt(etol)$  /* For Bulirsch */
-eps:0.1b0^fpprec$ /* For eirx */
-pi:bfloat(%pi)$
-ratprint:false$
-rf(x,y,z) := block(
-  [a0:(x+y+z)/3, q,x0:x,y0:y,z0:z,an,ln,xx,yy,zz,n,e2,e3],
-  q:(3*etol)^(-1/6)*max(abs(a0-x),abs(a0-y),abs(a0-z)),
-  an:a0,
-  n:0,
-  while q >= abs(an) do (
-    n:n+1,
-    ln:sqrt(x0)*sqrt(y0)+sqrt(y0)*sqrt(z0)+sqrt(z0)*sqrt(x0),
-    an:(an+ln)/4,
-    x0:(x0+ln)/4,
-    y0:(y0+ln)/4,
-    z0:(z0+ln)/4,
-    q:q/4),
-  xx:(a0-x)/(4^n*an),
-  yy:(a0-y)/(4^n*an),
-  zz:-xx-yy,
-  e2:xx*yy-zz^2,
-  e3:xx*yy*zz,
-  (1-e2/10+e3/14+e2^2/24-3*e2*e3/44) / sqrt(an))$
-rd(x,y,z) := block(
-  [a0:(x+y+3*z)/5, q,x0:x,y0:y,z0:z,an,ln,xx,yy,zz,n,e2,e3,e4,e5,s],
-  q:(etol/4)^(-1/6)*max(abs(a0-x),abs(a0-y),abs(a0-z)),
-  an:a0,
-  n:0,
-  s:0,
-  while q >= abs(an) do (
-    ln:sqrt(x0)*sqrt(y0)+sqrt(y0)*sqrt(z0)+sqrt(z0)*sqrt(x0),
-    s:s+1/(4^n*sqrt(z0)*(z0+ln)),
-    n:n+1,
-    an:(an+ln)/4,
-    x0:(x0+ln)/4,
-    y0:(y0+ln)/4,
-    z0:(z0+ln)/4,
-    q:q/4),
-  xx:(a0-x)/(4^n*an),
-  yy:(a0-y)/(4^n*an),
-  zz:-(xx+yy)/3,
-  e2:xx*yy-6*zz^2,
-  e3:(3*xx*yy-8*zz^2)*zz,
-  e4:3*(xx*yy-zz^2)*zz^2,
-  e5:xx*yy*zz^3,
-  (1-3*e2/14+e3/6+9*e2^2/88-3*e4/22-9*e2*e3/52+3*e5/26)/(4^n*an*sqrt(an))
-  +3*s)$
-
-/* R_G(x,y,0) */
-rg0(x,y) := block(
-  [x0:sqrt(x),y0:sqrt(y),xn,yn,t,s,n],
-  xn:x0,
-  yn:y0,
-  n:0,
-  s:0,
-  while abs(xn-yn) >= 2.7b0 * sqrt(etol) * abs(xn) do (
-    t:(xn+yn)/2,
-    yn:sqrt(xn*yn),
-    xn:t,
-    n:n+1,
-    s:s+(xn-yn)^2*2^(n-2)),
-   ((x0+y0)^2/4 - s)*pi/(2*(xn+yn)) )$
-
-/* k^2 = m */
-ec(m):=2*rg0(1b0-m,1b0)$
-kc(m):=rf(0b0,1b0-m,1b0)$
-
-/* Implementation of methods given in
-
-Roland Bulirsch
-Numerical Calculation of Elliptic Integrals and Elliptic Functions
-Numericshe Mathematik 7, 78-90 (1965)
-
-*/
-
-sncndn(x,mc):=block([bo, a, b, c, d, l, sn, cn, dn, m, n],
-  local(m, n),
-  if mc # 0 then (
-    bo:is(mc < 0b0),
-    if bo then (
-      d:1-mc,
-      mc:-mc/d,
-      d:sqrt(d),
-      x:d*x),
-    dn:a:1,
-    for i:0 thru 12 do (
-      l:i,
-      m[i]:a,
-      n[i]:mc:sqrt(mc),
-      c:(a+mc)/2,
-      if abs(a-mc)<=ca*a then return(false),
-      mc:a*mc,
-      a:c
-      ),
-    x:c*x,
-    sn:sin(x),
-    cn:sin(pi/2-x),
-    if sn#0b0 then (
-      a:cn/sn,
-      c:a*c,
-      for i:l step -1 thru 0 do (
-        b:m[i],
-        a:c*a,
-        c:dn*c,
-        dn:(n[i]+a)/(b+a),
-        a:c/b
-        ),
-      a:1/sqrt(c*c+1b0),
-      sn:if sn<0b0 then -a else a,
-      cn:c*sn
-      ),
-    if bo then (
-      a:dn,
-      dn:cn,
-      cn:a,
-      sn:sn/d
-      )
-    ) else /* mc = 0 */ (
-    sn:tanh(x),
-    dn:cn:sech(x)
-/*    d:exp(x), a:1/d, b:a+d, cn:dn:2/b,
-    if x < 0.3b0 then (
-      d:x*x*x*x,
-      d:(d*(d*(d*(d+93024b0)+3047466240b0)+24135932620800b0)+
-        20274183401472000b0)/60822550204416000b0,
-      sn:cn*(x*x*x*d+sin(x))
-      ) else
-    sn:(d-a)/b */
-    ),
-  [sn,cn,dn]
-  )$
-
-/* Versions of incomplete functions in terms of Jacobi elliptic function
-with u = am(phi) real and in [0,K(m)] */
-eirx(sn,cn,dn,m,ec):=block([t],
-  t:if abs(sn) < eps then abs(sn) else
-  (rf((cn/sn)^2,(dn/sn)^2,1/sn^2)-m/3b0*rd((cn/sn)^2,(dn/sn)^2,1/sn^2)),
-  if cn < 0 then t:2*ec - t,
-  if sn < 0 then t:-t,
-  t)$
diff --git a/doc/html/files.html b/doc/html/files.html
deleted file mode 100644
index 653820e..0000000
--- a/doc/html/files.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: File List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="files.html"><span>File List</span></a></li>
-      <li><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">File List</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all files with brief descriptions:</div><table>
-  <tr><td class="indexkey"><a class="el" href="Accumulator_8hpp.html">Accumulator.hpp</a> <a href="Accumulator_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">GeographicLib::Accumulator</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="AlbersEqualArea_8cpp.html">AlbersEqualArea.cpp</a> <a href="AlbersEqualArea_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="AlbersEqualArea_8hpp.html">AlbersEqualArea.hpp</a> <a href="AlbersEqualArea_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="AzimuthalEquidistant_8cpp.html">AzimuthalEquidistant.cpp</a> <a href="AzimuthalEquidistant_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="AzimuthalEquidistant_8hpp.html">AzimuthalEquidistant.hpp</a> <a href="AzimuthalEquidistant_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="CartConvert_8cpp.html">CartConvert.cpp</a> <a href="CartConvert_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for geodetic to cartesian coordinate conversions </td></tr>
-  <tr><td class="indexkey"><a class="el" href="CassiniSoldner_8cpp.html">CassiniSoldner.cpp</a> <a href="CassiniSoldner_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="CassiniSoldner_8hpp.html">CassiniSoldner.hpp</a> <a href="CassiniSoldner_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="CircularEngine_8cpp.html">CircularEngine.cpp</a> <a href="CircularEngine_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">GeographicLib::CircularEngine</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="CircularEngine_8hpp.html">CircularEngine.hpp</a> <a href="CircularEngine_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">GeographicLib::CircularEngine</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="ConicProj_8cpp.html">ConicProj.cpp</a> <a href="ConicProj_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for conical projections </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Constants_8hpp.html">Constants.hpp</a> <a href="Constants_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">GeographicLib::Constants</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="DMS_8cpp.html">DMS.cpp</a> <a href="DMS_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="DMS_8hpp.html">DMS.hpp</a> <a href="DMS_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="EllipticFunction_8cpp.html">EllipticFunction.cpp</a> <a href="EllipticFunction_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">GeographicLib::EllipticFunction</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="EllipticFunction_8hpp.html">EllipticFunction.hpp</a> <a href="EllipticFunction_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">GeographicLib::EllipticFunction</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Geocentric_8cpp.html">Geocentric.cpp</a> <a href="Geocentric_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Geocentric_8hpp.html">Geocentric.hpp</a> <a href="Geocentric_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GeoConvert_8cpp.html">GeoConvert.cpp</a> <a href="GeoConvert_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for geographic coordinate conversions </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GeoCoords_8cpp.html">GeoCoords.cpp</a> <a href="GeoCoords_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GeoCoords_8hpp.html">GeoCoords.hpp</a> <a href="GeoCoords_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Geod_8cpp.html">Geod.cpp</a> <a href="Geod_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for geodesic calculations </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Geodesic_8cpp.html">Geodesic.cpp</a> <a href="Geodesic_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Geodesic_8hpp.html">Geodesic.hpp</a> <a href="Geodesic_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GeodesicLine_8cpp.html">GeodesicLine.cpp</a> <a href="GeodesicLine_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GeodesicLine_8hpp.html">GeodesicLine.hpp</a> <a href="GeodesicLine_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GeodesicProj_8cpp.html">GeodesicProj.cpp</a> <a href="GeodesicProj_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for geodesic projections </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Geoid_8cpp.html">Geoid.cpp</a> <a href="Geoid_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Geoid_8hpp.html">Geoid.hpp</a> <a href="Geoid_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GeoidEval_8cpp.html">GeoidEval.cpp</a> <a href="GeoidEval_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for evaluating geoid heights </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Gnomonic_8cpp.html">Gnomonic.cpp</a> <a href="Gnomonic_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Gnomonic_8hpp.html">Gnomonic.hpp</a> <a href="Gnomonic_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Gravity_8cpp.html">Gravity.cpp</a> <a href="Gravity_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for evaluating gravity fields </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GravityCircle_8cpp.html">GravityCircle.cpp</a> <a href="GravityCircle_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GravityCircle_8hpp.html">GravityCircle.hpp</a> <a href="GravityCircle_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GravityModel_8cpp.html">GravityModel.cpp</a> <a href="GravityModel_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="GravityModel_8hpp.html">GravityModel.hpp</a> <a href="GravityModel_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="LambertConformalConic_8cpp.html">LambertConformalConic.cpp</a> <a href="LambertConformalConic_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="LambertConformalConic_8hpp.html">LambertConformalConic.hpp</a> <a href="LambertConformalConic_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="LocalCartesian_8cpp.html">LocalCartesian.cpp</a> <a href="LocalCartesian_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="LocalCartesian_8hpp.html">LocalCartesian.hpp</a> <a href="LocalCartesian_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="MagneticCircle_8cpp.html">MagneticCircle.cpp</a> <a href="MagneticCircle_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="MagneticCircle_8hpp.html">MagneticCircle.hpp</a> <a href="MagneticCircle_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="MagneticField_8cpp.html">MagneticField.cpp</a> <a href="MagneticField_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for evaluating magnetic fields </td></tr>
-  <tr><td class="indexkey"><a class="el" href="MagneticModel_8cpp.html">MagneticModel.cpp</a> <a href="MagneticModel_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="MagneticModel_8hpp.html">MagneticModel.hpp</a> <a href="MagneticModel_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Math_8hpp.html">Math.hpp</a> <a href="Math_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="MGRS_8cpp.html">MGRS.cpp</a> <a href="MGRS_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="MGRS_8hpp.html">MGRS.hpp</a> <a href="MGRS_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="NormalGravity_8cpp.html">NormalGravity.cpp</a> <a href="NormalGravity_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="NormalGravity_8hpp.html">NormalGravity.hpp</a> <a href="NormalGravity_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="OSGB_8cpp.html">OSGB.cpp</a> <a href="OSGB_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">GeographicLib::OSGB</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="OSGB_8hpp.html">OSGB.hpp</a> <a href="OSGB_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">GeographicLib::OSGB</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Planimeter_8cpp.html">Planimeter.cpp</a> <a href="Planimeter_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for measuring the area of geodesic polygons </td></tr>
-  <tr><td class="indexkey"><a class="el" href="PolarStereographic_8cpp.html">PolarStereographic.cpp</a> <a href="PolarStereographic_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="PolarStereographic_8hpp.html">PolarStereographic.hpp</a> <a href="PolarStereographic_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="PolygonArea_8cpp.html">PolygonArea.cpp</a> <a href="PolygonArea_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="PolygonArea_8hpp.html">PolygonArea.hpp</a> <a href="PolygonArea_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="SphericalEngine_8cpp.html">SphericalEngine.cpp</a> <a href="SphericalEngine_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="SphericalEngine_8hpp.html">SphericalEngine.hpp</a> <a href="SphericalEngine_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="SphericalHarmonic_8hpp.html">SphericalHarmonic.hpp</a> <a href="SphericalHarmonic_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">GeographicLib::SphericalHarmonic</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="SphericalHarmonic1_8hpp.html">SphericalHarmonic1.hpp</a> <a href="SphericalHarmonic1_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html" title="Spherical Harmonic series with a correction to the coefficients.">GeographicLib::SphericalHarmonic1</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="SphericalHarmonic2_8hpp.html">SphericalHarmonic2.hpp</a> <a href="SphericalHarmonic2_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html" title="Spherical Harmonic series with two corrections to the coefficients.">GeographicLib::SphericalHarmonic2</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="TransverseMercator_8cpp.html">TransverseMercator.cpp</a> <a href="TransverseMercator_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="TransverseMercator_8hpp.html">TransverseMercator.hpp</a> <a href="TransverseMercator_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="TransverseMercatorExact_8cpp.html">TransverseMercatorExact.cpp</a> <a href="TransverseMercatorExact_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="TransverseMercatorExact_8hpp.html">TransverseMercatorExact.hpp</a> <a href="TransverseMercatorExact_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="TransverseMercatorProj_8cpp.html">TransverseMercatorProj.cpp</a> <a href="TransverseMercatorProj_8cpp_source.html">[code]</a></td><td class="indexvalue">Command line utility for transverse Mercator projections </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Utility_8cpp.html">Utility.cpp</a> <a href="Utility_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="Utility_8hpp.html">Utility.hpp</a> <a href="Utility_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="UTMUPS_8cpp.html">UTMUPS.cpp</a> <a href="UTMUPS_8cpp_source.html">[code]</a></td><td class="indexvalue">Implementation for <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> class </td></tr>
-  <tr><td class="indexkey"><a class="el" href="UTMUPS_8hpp.html">UTMUPS.hpp</a> <a href="UTMUPS_8hpp_source.html">[code]</a></td><td class="indexvalue">Header for <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> class </td></tr>
-</table>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions.html b/doc/html/functions.html
deleted file mode 100644
index 0ba75ec..0000000
--- a/doc/html/functions.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>Accumulator()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a6d30e4a792644ffc78546dda4b5d0022">GeographicLib::Accumulator</a>
-</li>
-<li>acre()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ae5aa419ea6c6ce121c912c8afea0a0b7">GeographicLib::Constants</a>
-</li>
-<li>AddPoint()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#acfec56f0e136a534192e1e71589299f1">GeographicLib::PolygonArea</a>
-</li>
-<li>AlbersEqualArea()
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a08edd228ba175a5ae71d783c4a712e50">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>ALL
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccabf2df1a904dc1c546a122ac0ebe1acd6">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a8e0e6b9a6d629d05f22f41996fe98068">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a30e0c9456c5df9e6ff23880014bd11e0">GeographicLib::Geodesic</a>
-</li>
-<li>AltConvergence()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a2b62e667ce462d8102fdfa6ece6ff50e">GeographicLib::GeoCoords</a>
-</li>
-<li>AltEasting()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#af4a5b63a1931973338f71ef2ec4e27fa">GeographicLib::GeoCoords</a>
-</li>
-<li>AltMGRSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#ad602893cd4a81ccc511daff76b411413">GeographicLib::GeoCoords</a>
-</li>
-<li>AltNorthing()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a2f5a9665712214ad34b061d35ce89659">GeographicLib::GeoCoords</a>
-</li>
-<li>AltScale()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a299131cd5383ad0adc5af92c84dc6afe">GeographicLib::GeoCoords</a>
-</li>
-<li>AltUTMUPSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a020732ccba257d7f5248692afd318b93">GeographicLib::GeoCoords</a>
-</li>
-<li>AltZone()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a590600b600395c7914e4854faee08f8e">GeographicLib::GeoCoords</a>
-</li>
-<li>AngularVelocity()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#aeb3d751ba7719e57e0266b65ee7d63d8">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#aefd6dfb7e6f806b63d099316dcc97f55">GeographicLib::NormalGravity</a>
-</li>
-<li>ArcDirect()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">GeographicLib::Geodesic</a>
-</li>
-<li>arcminute()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a8f8e6d3bd08abb72b686a0f4398b587b">GeographicLib::Constants</a>
-</li>
-<li>ArcPosition()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a2e0249a548d2dd9c882cb4a8de17d8eb">GeographicLib::GeodesicLine</a>
-</li>
-<li>arcsecond()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a04858f922295d2a04bb021eecac07179">GeographicLib::Constants</a>
-</li>
-<li>AREA
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14">GeographicLib::Geodesic</a>
-</li>
-<li>asinh()
-: <a class="el" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">GeographicLib::Math</a>
-</li>
-<li>atanh()
-: <a class="el" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">GeographicLib::Math</a>
-</li>
-<li>AZIMUTH
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24">GeographicLib::DMS</a>
-</li>
-<li>Azimuth()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a40707b9e989c95418b2559b271cc2699">GeographicLib::GeodesicLine</a>
-</li>
-<li>AzimuthalEqualAreaNorth
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae65fcb68843b36d206751527ebd08f44">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>AzimuthalEqualAreaSouth
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#aff0ff4e2f162107bd136310b44444cc1">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>AzimuthalEquidistant()
-: <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a125571cdeed68d10192611cc12e221ce">GeographicLib::AzimuthalEquidistant</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x62.html b/doc/html/functions_0x62.html
deleted file mode 100644
index e8b6664..0000000
--- a/doc/html/functions_0x62.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li class="current"><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
-<li>bigendian
-: <a class="el" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x63.html b/doc/html/functions_0x63.html
deleted file mode 100644
index 67160a9..0000000
--- a/doc/html/functions_0x63.html
+++ /dev/null
@@ -1,210 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li class="current"><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>Cache()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#ade5715c0d1428a409383b1acd2cbe9be">GeographicLib::Geoid</a>
-</li>
-<li>CacheAll()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">GeographicLib::Geoid</a>
-</li>
-<li>CacheArea()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a52b5dc2d976796046aaeb8765e4a9c0f">GeographicLib::Geoid</a>
-</li>
-<li>CacheClear()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#ad948f48545c9c40f1705f2892887cdab">GeographicLib::Geoid</a>
-</li>
-<li>CacheEast()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#acb34cfbcfb8be2794b16a3d18209dbbe">GeographicLib::Geoid</a>
-</li>
-<li>CacheNorth()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a26742332938bb8f22be23c979ffb02a1">GeographicLib::Geoid</a>
-</li>
-<li>CacheSouth()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#aa3db8f9639eb231539376e4617a3d59e">GeographicLib::Geoid</a>
-</li>
-<li>CacheWest()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#aa0d2e119f089ee4182987ddd3faaf62a">GeographicLib::Geoid</a>
-</li>
-<li>Capabilities()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a21d07549d1171ad05c7318533c4c8970">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#a08ecc2b31ca7d0ddc2d25950a6bc247f">GeographicLib::GravityCircle</a>
-</li>
-<li>CassiniSoldner()
-: <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a948f9d934615c4120eb23740635200bc">GeographicLib::CassiniSoldner</a>
-</li>
-<li>cbrt()
-: <a class="el" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">GeographicLib::Math</a>
-</li>
-<li>CentralScale()
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#af407e835eaf76895ee25ec9e7a9c090c">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a2298a4e48e550cfd7346cf5f2dd175ad">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#a65210bfdcac362f393a8f81f28259ad0">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#ad6f7bd8a35208d91706ac8c258387e6f">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a63876dc20e8765501ca62022f9a73432">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a355a827f45c194d56a465e0d4f91c3a3">GeographicLib::TransverseMercatorExact</a>
-</li>
-<li>chain()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ac4f3792bce075999b0c9b9485e4079d0">GeographicLib::Constants</a>
-</li>
-<li>Circle()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#aadafafc09b9b707d47606da1e413d54f">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1SphericalEngine.html#af6a5fa63535d47cf528b733bb6a97901">GeographicLib::SphericalEngine</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">GeographicLib::SphericalHarmonic</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a32dd4989c40181939d667298681625f6">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a3aa683a43a8e9232a16390b09c6be920">GeographicLib::SphericalHarmonic2</a>
-</li>
-<li>CircularEngine
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a0c689dbf7b6bf2fb4cffb109085b1d3b">GeographicLib::SphericalEngine</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#a91dd2b9cc408e35f8cb6482cdf3aadbf">GeographicLib::CircularEngine</a>
-</li>
-<li>Clear()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#a66198bec67036ad09aa58ec43166fe60">GeographicLib::PolygonArea</a>
-</li>
-<li>ClearRootTable()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#ab3fb8f933adb257df6b7537268d55a75">GeographicLib::SphericalEngine</a>
-</li>
-<li>coeff()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a98ee0fd797434667a8cb5093d7644af4">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>Coefficients()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#ac8886de1d1400ecf6482f6441c76a8a0">GeographicLib::SphericalHarmonic</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a166338f0b4ccf89c48278bb9514046f0">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a67fe3c8ab08be94a300d07c98814aab0">GeographicLib::SphericalHarmonic1</a>
-</li>
-<li>Coefficients1()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a51751279dc4e0b6e19886723f8e8b493">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ad200e309790cd6e41bb79529d9076274">GeographicLib::SphericalHarmonic1</a>
-</li>
-<li>Coefficients2()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a676b4c36923744bf5057b24484d9cf60">GeographicLib::SphericalHarmonic2</a>
-</li>
-<li>component
-: <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">GeographicLib::DMS</a>
-</li>
-<li>Compute()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#a60e1c288358818c849356c9921191215">GeographicLib::PolygonArea</a>
-</li>
-<li>Convergence()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#ad92c8fa1b34bd11dbd908dfffbb836a8">GeographicLib::GeoCoords</a>
-</li>
-<li>convertflag
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">GeographicLib::Geoid</a>
-</li>
-<li>ConvertHeight()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#adf98d0f0d881893a4f5ff711a3be0e04">GeographicLib::Geoid</a>
-</li>
-<li>Csize()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a8a126c9790a7a1609046fbae7934e587">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>Cv()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ad30081b2dfdee79652aacbc24bacb635">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>CylindricalEqualArea
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae643f7f82f5864f95da4cb14571ccf55">GeographicLib::AlbersEqualArea</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x64.html b/doc/html/functions_0x64.html
deleted file mode 100644
index 9e8a192..0000000
--- a/doc/html/functions_0x64.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li class="current"><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>date()
-: <a class="el" href="classGeographicLib_1_1Utility.html#aa6955e745deebb79795b12ab139798e0">GeographicLib::Utility</a>
-</li>
-<li>DateTime()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#acbed448c2423cd45e800d03fab059500">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a230648296f87ff6fc12a3e65ff01bc3b">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#a9cd7304b5df37001f4ad3c91cdbc56f4">GeographicLib::Geoid</a>
-</li>
-<li>day()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a877a58000a56bc84c354cf42b4b1cd99">GeographicLib::Utility</a>
-</li>
-<li>Decode()
-: <a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">GeographicLib::DMS</a>
-</li>
-<li>DecodeAngle()
-: <a class="el" href="classGeographicLib_1_1DMS.html#a868248d72f6b0bf2dae18a15d741ac43">GeographicLib::DMS</a>
-</li>
-<li>DecodeAzimuth()
-: <a class="el" href="classGeographicLib_1_1DMS.html#a0512cc1275e089138e1550efbee421d9">GeographicLib::DMS</a>
-</li>
-<li>DecodeLatLon()
-: <a class="el" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">GeographicLib::DMS</a>
-</li>
-<li>DecodeZone()
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#ad74d52d7ebeff195019745f791f30562">GeographicLib::UTMUPS</a>
-</li>
-<li>DefaultGeoidName()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a048865342b2b12ed2272e547209381fd">GeographicLib::Geoid</a>
-</li>
-<li>DefaultGeoidPath()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">GeographicLib::Geoid</a>
-</li>
-<li>DefaultGravityName()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#ad4a776d68b60e85275c0e580d3c7caba">GeographicLib::GravityModel</a>
-</li>
-<li>DefaultGravityPath()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">GeographicLib::GravityModel</a>
-</li>
-<li>DefaultMagneticName()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#ab2ac8cc598c0d9a6b448c9a45e9642d9">GeographicLib::MagneticModel</a>
-</li>
-<li>DefaultMagneticPath()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">GeographicLib::MagneticModel</a>
-</li>
-<li>degree()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a26ff02acd8141a815428cddf0ff3ff66">GeographicLib::Constants</a>
-, <a class="el" href="classGeographicLib_1_1Math.html#a0f3b4ea16cc2cb21557555fca3b1c201">GeographicLib::Math</a>
-</li>
-<li>DEGREE
-: <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a8ee59944227e74901b71f27410d70781">GeographicLib::DMS</a>
-</li>
-<li>Description()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a37d76bcfe0ddf9b84042d701c312e941">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#af2c1c74254e3193adb155987f6dd0a59">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a204e8d3c4ebf6f8c13eb9e1817921ea2">GeographicLib::MagneticModel</a>
-</li>
-<li>Direct()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#a65cf95dc7f5c0bfd427e963281e044f0">GeographicLib::Geodesic</a>
-</li>
-<li>DISTANCE
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184">GeographicLib::GeodesicLine</a>
-</li>
-<li>DISTANCE_IN
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ae20140cdf788fa0497df59630d3211ef">GeographicLib::Geodesic</a>
-</li>
-<li>DISTURBANCE
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a83daf366a2c7ab93495f0e6b4144d885">GeographicLib::GravityModel</a>
-</li>
-<li>Disturbance()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a2c3bde01c9d822b0cdd935314193a466">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a75cf57146334d9ce0856222a6814ae6f">GeographicLib::GravityModel</a>
-</li>
-<li>DISTURBING_POTENTIAL
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365abe1f6d891a721a4f544cd8a341abcb28">GeographicLib::GravityModel</a>
-</li>
-<li>DMSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#af6e9f9087a407b01dc24401df8610257">GeographicLib::GeoCoords</a>
-</li>
-<li>dow()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a42a6f8679c068dcb06f1da26aa21dfb1">GeographicLib::Utility</a>
-</li>
-<li>DynamicalFormFactor()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#aa52b03157eb0b199d331d6fca28a259a">GeographicLib::NormalGravity</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x65.html b/doc/html/functions_0x65.html
deleted file mode 100644
index e5bedf1..0000000
--- a/doc/html/functions_0x65.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li class="current"><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>E()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">GeographicLib::EllipticFunction</a>
-</li>
-<li>Earth()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#ab15ded1ab7ec9a30e8053fc330ed76ac">GeographicLib::NormalGravity</a>
-</li>
-<li>Easting()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a9a84801f0b383860b24cc1344e4015fb">GeographicLib::GeoCoords</a>
-</li>
-<li>EllipsoidArea()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#a0dde7d12d4bafedef63d371c5fe40f50">GeographicLib::Geodesic</a>
-</li>
-<li>ELLIPSOIDTOGEOID
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a4a1db06e9dcfa1ebb345c616151ab70d">GeographicLib::Geoid</a>
-</li>
-<li>EllipticFunction()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#ada122111b55eb0ab9c7b9fafb0a4b1e6">GeographicLib::EllipticFunction</a>
-</li>
-<li>Encode()
-: <a class="el" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">GeographicLib::DMS</a>
-</li>
-<li>EncodeZone()
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a3410e1e221158962f34147255653818f">GeographicLib::UTMUPS</a>
-</li>
-<li>EquatorialArc()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a308c7fb4f7c562a8c604453bf2ee2ca2">GeographicLib::GeodesicLine</a>
-</li>
-<li>EquatorialAzimuth()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad117912c4fc4ef29bf4050c9be3267f2">GeographicLib::GeodesicLine</a>
-</li>
-<li>EquatorialGravity()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a3610ec908c7b168b39f00946e2fc3fad">GeographicLib::NormalGravity</a>
-</li>
-<li>expm1()
-: <a class="el" href="classGeographicLib_1_1Math.html#a2fd4e8930d9dd953352d25fc184d843e">GeographicLib::Math</a>
-</li>
-<li>extended
-: <a class="el" href="classGeographicLib_1_1Math.html#a436f350a6a9539e176dda19d0e4811f8">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x66.html b/doc/html/functions_0x66.html
deleted file mode 100644
index 647febc..0000000
--- a/doc/html/functions_0x66.html
+++ /dev/null
@@ -1,192 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li class="current"><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>FalseEasting()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#ab27e19f7688f6b472d217b31aeae079c">GeographicLib::OSGB</a>
-</li>
-<li>FalseNorthing()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#a74072d4e62fcd4ca679b222716b6a6a1">GeographicLib::OSGB</a>
-</li>
-<li>fathom()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a51cf3e97984ac301b1f27b667b360be0">GeographicLib::Constants</a>
-</li>
-<li>FieldComponents()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#af553c42337b9a9a1d51b81fea7083ea2">GeographicLib::MagneticModel</a>
-</li>
-<li>flag
-: <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">GeographicLib::DMS</a>
-</li>
-<li>Flattening()
-: <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a3f300fcc10aeee9dc88ff93fb991f191">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#ad9bfc60d802b662ffc1a41566882b743">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#aa2316f6d328435417627d49046c45308">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a8d618d5abe71a49fc5ec4f2801d22555">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#abd47e48c75ed958f5aa91bcaa80ddc8c">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a99907eda4b863acbe8e7d159a6482abb">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a30ba434524b5836c9852d454e61d795f">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a4c3fc40a49332ddcd042e5cb41c3cb2a">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a38ad95b421f5fbce40abff5733421370">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1GeoCoords.html#a4d892f5e55df8cbb597d1a693da4783c">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1MGRS.html#a8eee27799bda8238d6d0525dffdddd4e">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#aba396954f43e623e755bdff7db7d850b">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#a7abba09bec76f8f97f1e3bc81a7456e2">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#aae688ebd8c126f22517eaa0a01d659f8">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3b08d03e475dae2c2a81c76420946942">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a42e1f97e3ed564f98b305450b0d04590">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1PolygonArea.html#aba3543baed0f014b64890d174b8c62a0">GeographicLib::PolygonArea</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a6571ba8c59fd7e5e32c9994d37d4cdb5">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a565c63954715204781ae458db0d6b1f7">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#abd2076cab3455b816e9477cdb410b187">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a4045ec4b01c99c4bb589b1b3e7e07ca4">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a182de2e29f1181c55a266777039b8a9d">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#a06b559fa72aa1e51da966c43d22b983d">GeographicLib::Gnomonic</a>
-</li>
-<li>foot()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ac69f40e7e56c71bc72011c7591f7bef9">GeographicLib::Constants</a>
-</li>
-<li>Forward()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#a92618eea9870908e11446875d80aab6b">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a39c294a3389af325c41a8de51fd9228a">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a68a13780a73bcf9c8e50a3ce4eae3086">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a54e09e4673ddbf99feeba81036c81345">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a8b4951b7c732f97aedeb8e869c9349d2">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a774332be14e894536f13b3cc7a8323c7">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#ac2fe4c9524ec35f8d05336555f96e1b1">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1MGRS.html#a37f9dd9b12dbc74381116d842be47ccd">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a07d73a6d94e2434cbb937978d61a5ae7">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a0dab8d1a275df9e4796d2d858f42f7e3">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a2bafb6c1a81d4b6cf04f172b9e96278c">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a87bf8d3b416bbfd8b7a2c5269245e693">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#aa21ec1bc26f691e0a6f2ccc44debe6f0">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#af689c212234963734354347d56bf12f6">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#a2c08cf2bad190ee9ab88f7d877223208">GeographicLib::Gnomonic</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a65320594cad8c03d28beaa409f3d6fae">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a6426e95f904f224eabedb8fcd17fe537">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#a0f705bee98c6669ca7a95394712fd758">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a37656c7551b10ad75a40758d0bba570d">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a14a3757d85e81488afe476f7ceb8a720">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#ab851ea19db5671f8d4a4151820bc6853">GeographicLib::Gnomonic</a>
-</li>
-<li>fract()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a46b13d9ce2893f7e0fe6e7da093f528f">GeographicLib::Utility</a>
-</li>
-<li>fractionalyear()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a074607cb34326b7109532c8fdd07e38c">GeographicLib::Utility</a>
-</li>
-<li>FULL
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">GeographicLib::SphericalHarmonic</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fac720ca87adfc478dbfc13a37f0cf8ba9">GeographicLib::SphericalEngine</a>
-</li>
-<li>furlong()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a824d39311cf43f916d4ac19e46da3713">GeographicLib::Constants</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x67.html b/doc/html/functions_0x67.html
deleted file mode 100644
index 0a3d0a1..0000000
--- a/doc/html/functions_0x67.html
+++ /dev/null
@@ -1,216 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li class="current"><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
-<li>GenDirect()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#acaef3032846a71fc730e1ea26ea32d20">GeographicLib::Geodesic</a>
-</li>
-<li>GenInverse()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#a84a3b9b457dd87b1059045b9d50303fd">GeographicLib::Geodesic</a>
-</li>
-<li>GenPosition()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad9522110fe6a5a0c7f912a6b1a23094d">GeographicLib::GeodesicLine</a>
-</li>
-<li>Geocentric()
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#a6527d3ab1df78de8277122581dbcdaff">GeographicLib::Geocentric</a>
-</li>
-<li>GeoCoords()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a7bde6a5cba74adf66d831788e6be8e65">GeographicLib::GeoCoords</a>
-</li>
-<li>Geodesic
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a088c26ef9558197029bbeb317f3104c0">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#a455300c36e6caa70968115416e1573a4">GeographicLib::Geodesic</a>
-</li>
-<li>GeodesicLine
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#ac4a8bd684285e00b12427c052697a106">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a5669be85b4a574258f4a136f12d3f1bb">GeographicLib::GeodesicLine</a>
-</li>
-<li>GEODESICSCALE
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e">GeographicLib::Geodesic</a>
-</li>
-<li>GeographicErr()
-: <a class="el" href="classGeographicLib_1_1GeographicErr.html#ae0f338af58f073657b012c8a9a64b006">GeographicLib::GeographicErr</a>
-</li>
-<li>Geoid()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#ac3556c755dad0d43c3be0913df08b395">GeographicLib::Geoid</a>
-</li>
-<li>GEOID_HEIGHT
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69">GeographicLib::GravityModel</a>
-</li>
-<li>GeoidDirectory()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a83b17b17045c49984bcdd032e637155e">GeographicLib::Geoid</a>
-</li>
-<li>GeoidFile()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a07e5f704f2684ce5acf824b7e0b17d30">GeographicLib::Geoid</a>
-</li>
-<li>GeoidHeight()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d5a577c99cf4649d9286f1b4afacab5">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a7e75bdba6b9c8e64cc64403335a6fba4">GeographicLib::GravityModel</a>
-</li>
-<li>GeoidName()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#aa244668a189e35ce5ff248fb8fa2e57b">GeographicLib::Geoid</a>
-</li>
-<li>GEOIDTOELLIPSOID
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473">GeographicLib::Geoid</a>
-</li>
-<li>GeoRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a79af2d72afdfeede78f2ba65b809d6b3">GeographicLib::GeoCoords</a>
-</li>
-<li>Gnomonic()
-: <a class="el" href="classGeographicLib_1_1Gnomonic.html#a2ac973ebbd7aaf18c451b152cd92db99">GeographicLib::Gnomonic</a>
-</li>
-<li>GRAVITY
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ae6a4573c13b932c98ab95e7f9dbd0952">GeographicLib::GravityModel</a>
-</li>
-<li>Gravity()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d8053ee66ae22217ae0b61e96194b64">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a2dc8bf4cfa3c1914f4c7e93a5a3b3eac">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#acfca8d6e44778501b54cd0b38dbbddde">GeographicLib::NormalGravity</a>
-</li>
-<li>GravityCircle
-: <a class="el" href="classGeographicLib_1_1CircularEngine.html#a243c90a7f9bf3f7aa96877a4b0667a89">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a243c90a7f9bf3f7aa96877a4b0667a89">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a243c90a7f9bf3f7aa96877a4b0667a89">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#a4a000e07f0856a130ab11f1b26c933ed">GeographicLib::GravityCircle</a>
-</li>
-<li>GravityFile()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a26a87d363713ba3d1aa1b16da2fc2f27">GeographicLib::GravityModel</a>
-</li>
-<li>GravityFlattening()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a7e9329f7b3120b7777a0c5be3ca424a7">GeographicLib::NormalGravity</a>
-</li>
-<li>GravityModel()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#ac351170c1104f41754d5c0b8371d3e15">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#ada1db1d9f480d8044753ed869c995519">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#ada1db1d9f480d8044753ed869c995519">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#ada1db1d9f480d8044753ed869c995519">GeographicLib::GravityCircle</a>
-</li>
-<li>GravityModelDirectory()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a17f2da4cd5abbb5f38f1b90d75975898">GeographicLib::GravityModel</a>
-</li>
-<li>GravityModelName()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a9ca1191e449bf7c04595ebd8a299af78">GeographicLib::GravityModel</a>
-</li>
-<li>GridReference()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#a0a79e8f2babae1eb0305a0e728fea8c8">GeographicLib::OSGB</a>
-</li>
-<li>GRS80
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a78cf6878967ad52adadbe06b5f7c4146">GeographicLib::NormalGravity</a>
-</li>
-<li>GRS80_a()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a9b955c3556dcfcebce6a2926bfeaf464">GeographicLib::Constants</a>
-</li>
-<li>GRS80_GM()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a7541474ca70cbec7fccb08d3e3fbfe31">GeographicLib::Constants</a>
-</li>
-<li>GRS80_J2()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a59c7a1d298eb72256119894b67470974">GeographicLib::Constants</a>
-</li>
-<li>GRS80_omega()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a9caea97ab2be0959c7972155141bfd1b">GeographicLib::Constants</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x68.html b/doc/html/functions_0x68.html
deleted file mode 100644
index 7b6e06b..0000000
--- a/doc/html/functions_0x68.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li class="current"><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
-<li>hectare()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a4cc4ae77e3136d7784cd7c69d6927adc">GeographicLib::Constants</a>
-</li>
-<li>Height()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a026b2b79ff3ae70b4fee5d9c4d1ffb70">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#aadd95eac0650f195e4d7acdc9819716b">GeographicLib::MagneticCircle</a>
-</li>
-<li>HeightOrigin()
-: <a class="el" href="classGeographicLib_1_1LocalCartesian.html#ac8e00f262d70da122f45afa15b9381e2">GeographicLib::LocalCartesian</a>
-</li>
-<li>Hemisphere()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a0764b9f389a6ce851f9c7c8317ecebb3">GeographicLib::GeoCoords</a>
-</li>
-<li>hypot()
-: <a class="el" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x69.html b/doc/html/functions_0x69.html
deleted file mode 100644
index b354b7d..0000000
--- a/doc/html/functions_0x69.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li class="current"><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>index()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a356d705a99ee15089d1faabd0c01084c">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>infinity()
-: <a class="el" href="classGeographicLib_1_1Math.html#a82ccc01be301f14061c681ee93a5120b">GeographicLib::Math</a>
-</li>
-<li>Init()
-: <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a3f71bb8b662438a7954be174315ce974">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a8ec84cd0b1d97b51464ec80d9e2dcf57">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#a1d96cafc362959215eaa553a712b6908">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a7d2e34d1be6009caf4576c6cc884a589">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#af7e248d7632f56cf7abc6eac4927a587">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#aee7b6c92dc9264345048a8ad7c230e4c">GeographicLib::GravityCircle</a>
-</li>
-<li>Interpolation()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a0ddfefaef196023486fc7642af45cf96">GeographicLib::Geoid</a>
-</li>
-<li>INVALID
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0">GeographicLib::UTMUPS</a>
-</li>
-<li>Inverse()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#ac668b5d0f82b28440dac5a44719fd61a">GeographicLib::Geodesic</a>
-</li>
-<li>isfinite()
-: <a class="el" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">GeographicLib::Math</a>
-</li>
-<li>isnan()
-: <a class="el" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x6b.html b/doc/html/functions_0x6b.html
deleted file mode 100644
index 16960c7..0000000
--- a/doc/html/functions_0x6b.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li class="current"><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
-<li>K()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#a6c6c8029d93946b32184ee964525938c">GeographicLib::EllipticFunction</a>
-</li>
-<li>KE()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#a12bcdf2c3fc7bcb165318822171328f7">GeographicLib::EllipticFunction</a>
-</li>
-<li>kilometer()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a4ec5a9d91ab0ccbd3bd921cda4bfc836">GeographicLib::Constants</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x6c.html b/doc/html/functions_0x6c.html
deleted file mode 100644
index 3fd68f1..0000000
--- a/doc/html/functions_0x6c.html
+++ /dev/null
@@ -1,162 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li class="current"><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>LambertConformalConic()
-: <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a21dc9fa160a5b96a1c11ab30af0eb129">GeographicLib::LambertConformalConic</a>
-</li>
-<li>LATITUDE
-: <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">GeographicLib::DMS</a>
-</li>
-<li>Latitude()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a00a291e94d0c688a168a58623a360659">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#a9628e97c53a2532959c5c8af75e1c14b">GeographicLib::GravityCircle</a>
-</li>
-<li>LATITUDE
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90">GeographicLib::Geodesic</a>
-</li>
-<li>Latitude()
-: <a class="el" href="classGeographicLib_1_1MagneticCircle.html#aaf14e89275bffd8253acdbe4840b65d0">GeographicLib::MagneticCircle</a>
-</li>
-<li>LATITUDE
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23">GeographicLib::GeodesicLine</a>
-</li>
-<li>Latitude()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a1bc1bb3a2377fa6b70be046dcf5d3e97">GeographicLib::GeoCoords</a>
-</li>
-<li>LatitudeOrigin()
-: <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a2aa51120af199603f57d54b8c9a0bdde">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#af4905164de5157c7ae2678f7716cbad7">GeographicLib::LocalCartesian</a>
-</li>
-<li>Line()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">GeographicLib::Geodesic</a>
-</li>
-<li>LocalCartesian()
-: <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a3474a0434b2ff8b258111fe6d8468f0d">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a8904c4eadcf94e3803743e8cd9ffbc1c">GeographicLib::Geocentric</a>
-</li>
-<li>log1p()
-: <a class="el" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">GeographicLib::Math</a>
-</li>
-<li>LONGITUDE
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b">GeographicLib::Geodesic</a>
-</li>
-<li>Longitude()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a7db5459efae411dfebec758a8244a95a">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac567ccf20c683319370f4c747f23966a">GeographicLib::GeodesicLine</a>
-</li>
-<li>LONGITUDE
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">GeographicLib::DMS</a>
-</li>
-<li>LongitudeOrigin()
-: <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#aeb5c42b5cb6202a2371ba84bf76e0161">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a45656227b4fff45249f1844bc6d233ad">GeographicLib::LocalCartesian</a>
-</li>
-<li>lookup()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a9a47fdaaa00a92e9a42035e62bd98faa">GeographicLib::Utility</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x6d.html b/doc/html/functions_0x6d.html
deleted file mode 100644
index 8ba9000..0000000
--- a/doc/html/functions_0x6d.html
+++ /dev/null
@@ -1,221 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li class="current"><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>m()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#aba29c348874db7880ab7b1065f03ff7c">GeographicLib::EllipticFunction</a>
-</li>
-<li>m1()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#ad1fbe801f6731285462d35d874a149ba">GeographicLib::EllipticFunction</a>
-</li>
-<li>MagneticCircle
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#a7294f6a1cc932f8fd1562a15602e9e86">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a49170460b1833722ad9bc45b92c86e5a">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#a7294f6a1cc932f8fd1562a15602e9e86">GeographicLib::CircularEngine</a>
-</li>
-<li>MagneticFile()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#aa072d202531c0cacdd7bca128d670705">GeographicLib::MagneticModel</a>
-</li>
-<li>MagneticModel
-: <a class="el" href="classGeographicLib_1_1MagneticCircle.html#af6619ebe4c078705fc49a0d9f950b431">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a84a020586d58c4da61ec6ffbc7b4fa37">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#af6619ebe4c078705fc49a0d9f950b431">GeographicLib::Geocentric</a>
-</li>
-<li>MagneticModelDirectory()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a2476aee96f07071de17c24dbbf80f521">GeographicLib::MagneticModel</a>
-</li>
-<li>MagneticModelName()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#ad500f0d76997b4026b75805fad71dbee">GeographicLib::MagneticModel</a>
-</li>
-<li>MajorRadius()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a897e6bbfb71f78b0646045bf47e09696">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a47e93a8cde548b6e8d7c4c076bac4be6">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a19083f16ecfc51f9020d7242b3ded43e">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#acd276bb113cfdf3fe59aa43fb3d7289b">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a293aa30508096d49db77a23917ea1092">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#af8953029b9985a3929fe406f7530143b">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#aada99465d9ddfc1b34ccf2ef3d86dbd7">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#a8598fe6d8c3896fa3fd58d24023f78ee">GeographicLib::Gnomonic</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#a19c5d003a9981cb3ece5b44ee836553a">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a07f361e231e1725a4f8e3c37a06cf304">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a21f9bc21f3f40c56d2f5d12fb4b7f75a">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a55d5ca45e7c80a96b3faf0094714ac59">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a795356c736f1170fe5ef075ebbf34354">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a78721d381d21f676152394dd576f2e77">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a42c4103265af804395b8b5260a4c25e0">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a0b55df676607204a2d44687ffafe8d9e">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1MGRS.html#a8942a1dfafa3ea845ccc5fafb6ca4dc2">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1PolygonArea.html#afcdd74fcb4a0f57aa193e5fd08239369">GeographicLib::PolygonArea</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#ab1746576356a2409f34d9527064adfdd">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a0019eeb70b5493de687c5cc36ae7f43c">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#a9155d22c5a64a7ef346ce7f590a6264f">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#a9bb3b0ff55a462ac2ebcd0cfd446d811">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#ae20c62c298f1724412fec581285cf269">GeographicLib::Geocentric</a>
-</li>
-<li>mask
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365">GeographicLib::GravityModel</a>
-</li>
-<li>MassConstant()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#aa63d1c6e71abfa9455df695f4a3e6bdd">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#a3c6693dc7efe04cdbed408b2510c69da">GeographicLib::NormalGravity</a>
-</li>
-<li>MATCH
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a9059a8e3b4721e27869e99ed1ae3d320">GeographicLib::UTMUPS</a>
-</li>
-<li>MaxError()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#aff538da14578a02c551b411a899e567a">GeographicLib::Geoid</a>
-</li>
-<li>MaxHeight()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">GeographicLib::MagneticModel</a>
-</li>
-<li>MAXPSEUDOZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ac22db7e136b6e06fba7c3c06b5888362">GeographicLib::UTMUPS</a>
-</li>
-<li>MaxTime()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">GeographicLib::MagneticModel</a>
-</li>
-<li>MAXUTMZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ae8e04ab8df50a062c1fe277a6880bc19">GeographicLib::UTMUPS</a>
-</li>
-<li>MAXZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a">GeographicLib::UTMUPS</a>
-</li>
-<li>Mercator
-: <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7fbb6973b77593245db52c9759740f9a">GeographicLib::LambertConformalConic</a>
-</li>
-<li>meter()
-: <a class="el" href="classGeographicLib_1_1Constants.html#afeffc10d6b8171b39a50949cac149063">GeographicLib::Constants</a>
-</li>
-<li>MGRSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a36594aaa4f293b0ddf00b1c78bb04595">GeographicLib::GeoCoords</a>
-</li>
-<li>mile()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a49cb7b828f7c85c36761d47b8db6518c">GeographicLib::Constants</a>
-</li>
-<li>MinHeight()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">GeographicLib::MagneticModel</a>
-</li>
-<li>MINPSEUDOZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a058ac8a834bbc78ce73d9b37a1a5dfb9">GeographicLib::UTMUPS</a>
-</li>
-<li>MinTime()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">GeographicLib::MagneticModel</a>
-</li>
-<li>MINUTE
-: <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a9884bea675fd214061e534e76a1c15d6">GeographicLib::DMS</a>
-</li>
-<li>MINUTMZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a1413e6cc83d4bf1eb4ad1c0f1d745eb6">GeographicLib::UTMUPS</a>
-</li>
-<li>MINZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1">GeographicLib::UTMUPS</a>
-</li>
-<li>mmx()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2a1ff83503433c64bd4399689a3e40f6">GeographicLib::SphericalEngine::coeff</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x6e.html b/doc/html/functions_0x6e.html
deleted file mode 100644
index 6032c50..0000000
--- a/doc/html/functions_0x6e.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li class="current"><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>N()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a38ab91101bb639963e094327a22fed59">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>NaN()
-: <a class="el" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">GeographicLib::Math</a>
-</li>
-<li>nauticalmile()
-: <a class="el" href="classGeographicLib_1_1Constants.html#afedc242aa3ee9b3bf9c72d6d81fc6740">GeographicLib::Constants</a>
-</li>
-<li>nmx()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a96467118f9c16c16259d4fbbed3917ff">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>NONE
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca0f2ec05e56540d908a326a872b9aa68f">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a677322ba74ea5494e67478c3dc1780d5">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365add4ee1aa94e38a8283826704105dc2e1">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1">GeographicLib::DMS</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ab10adfebcb73de5356c4787246f056af">GeographicLib::Geodesic</a>
-</li>
-<li>NormalGravity
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#ae7298549755c5982fe1be124d6631561">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#af625bbc7df2d36ba5c43c8f20f61c134">GeographicLib::NormalGravity</a>
-</li>
-<li>normalization
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949f">GeographicLib::SphericalEngine</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8be">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eb">GeographicLib::SphericalHarmonic</a>
-</li>
-<li>Northing()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#ac0202def9c16ce856f62485b5c249083">GeographicLib::GeoCoords</a>
-</li>
-<li>Northp()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a5bcf16f97750a6be77f72d50e304a007">GeographicLib::GeoCoords</a>
-</li>
-<li>num()
-: <a class="el" href="classGeographicLib_1_1Utility.html#aa35f1f83c0543558a79b3cf42ddf50c8">GeographicLib::Utility</a>
-</li>
-<li>NUMBER
-: <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">GeographicLib::DMS</a>
-</li>
-<li>nummatch()
-: <a class="el" href="classGeographicLib_1_1Utility.html#ad0d89bfe63814bab5312306fe3ac2b43">GeographicLib::Utility</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x6f.html b/doc/html/functions_0x6f.html
deleted file mode 100644
index 24ffa93..0000000
--- a/doc/html/functions_0x6f.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li class="current"><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
-<li>Offset()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#ac798950a643e4286aa8d3bb8cd9b0815">GeographicLib::Geoid</a>
-</li>
-<li>operator!=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a4102ce7aac36753c2b0390c4fc951a42">GeographicLib::Accumulator</a>
-</li>
-<li>operator()()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a1a2b7ac3fd3b067a1c9930cb02a102b2">GeographicLib::Accumulator</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#a88a0726718baa7b457c77b5681fabb0a">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a5046d787c241c5216cfeb0062673cbd7">GeographicLib::SphericalHarmonic</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a43098674b6bb823ccbac8908a7831234">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#accb63bfbbadae10af79b3a3028a3045a">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac732f25af07eee71ad0ca288a2e86fbd">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a48f85ac41417815e6735ff5aa7d74155">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#a8e39d83fcbed23df36ef4fefe2a86420">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#a3bb5740c3a38a77caeb5eabd54c77cbc">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a762d48fc2c3dc902859286de4df7672c">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a8669d47d20b03e9185d358440d3da9b1">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1Accumulator.html#af74ec2f9a77fcc82819111e6bb87b375">GeographicLib::Accumulator</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#a48d2327412e0c674285ff6bb85440054">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#ac715ae0394bd7f8c23288f80c406e5bc">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a550eb1739712fbbae1a167c2559d6dbc">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#aa15c408a0ff4cf17575e62edfeae77a6">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a11fed1ca7a45947f6f43f6ba7897250f">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a42480d85a81238f612a6178410bf97ff">GeographicLib::SphericalHarmonic</a>
-</li>
-<li>operator*=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a2b0bc40e9722e1ffac89ecfeb601fb23">GeographicLib::Accumulator</a>
-</li>
-<li>operator+=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#adc56d12f08b8a61b19dd78ce532285d4">GeographicLib::Accumulator</a>
-</li>
-<li>operator-=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#abf3e43f38791c48d1fa09e4fb569827b">GeographicLib::Accumulator</a>
-</li>
-<li>operator<()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a9a7299c02ec8805d951309fdae60e57f">GeographicLib::Accumulator</a>
-</li>
-<li>operator<=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#afb83bdb43b78e20f76e2a7e5e2440386">GeographicLib::Accumulator</a>
-</li>
-<li>operator=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a9cd31c9155208a2de0fdd9810f2a9dd8">GeographicLib::Accumulator</a>
-</li>
-<li>operator==()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a6ea5d769a36e01327f3633b39cd38290">GeographicLib::Accumulator</a>
-</li>
-<li>operator>()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#af0e4a35c09b0b179ebf1e2f6912ddeb3">GeographicLib::Accumulator</a>
-</li>
-<li>operator>=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#aeafc5d10683648d37fe18ec75725196b">GeographicLib::Accumulator</a>
-</li>
-<li>OriginLatitude()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#ad6bcef7e2dcc2992831e101bf0b05fa8">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7c589335b43b2274d3a68c0f68f29d77">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ad780e943e9a9ba168b350d809d0bfe08">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>OriginLongitude()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#a4eb3b20734af47c9661d40581555c345">GeographicLib::OSGB</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x70.html b/doc/html/functions_0x70.html
deleted file mode 100644
index 8761d5b..0000000
--- a/doc/html/functions_0x70.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li class="current"><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>ParseLine()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a96252f445a912b77517bff04d4d6ea74">GeographicLib::Utility</a>
-</li>
-<li>Phi()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a80477ccafa1049964ee0cef40ae2eea6">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#af0f50fd88d8b647a1b7bb209a4cfae0f">GeographicLib::NormalGravity</a>
-</li>
-<li>pi()
-: <a class="el" href="classGeographicLib_1_1Math.html#aca1580c771e7019bfe826512fba9b2f1">GeographicLib::Math</a>
-</li>
-<li>PolarGravity()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a3079310d3a7af97ccb50b91be01d5a50">GeographicLib::NormalGravity</a>
-</li>
-<li>PolarStereographic()
-: <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a170d21f9c7a2e922c57fc83a44ea3dfa">GeographicLib::PolarStereographic</a>
-</li>
-<li>PolygonArea()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#a060a1dc499bd079c62f62ed5cad929e5">GeographicLib::PolygonArea</a>
-</li>
-<li>Position()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a50feb9c64d66b6518c640584d25e9507">GeographicLib::GeodesicLine</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x72.html b/doc/html/functions_0x72.html
deleted file mode 100644
index 1565453..0000000
--- a/doc/html/functions_0x72.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li class="current"><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>readarray()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a23e88040ceb60bd3fe28efc04f9119f8">GeographicLib::Utility</a>
-</li>
-<li>readcoeffs()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2d545f589894683e7de297c42b7c995a">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>real
-: <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">GeographicLib::Math</a>
-</li>
-<li>REDUCEDLENGTH
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">GeographicLib::GeodesicLine</a>
-</li>
-<li>ReferenceEllipsoid()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">GeographicLib::GravityModel</a>
-</li>
-<li>ReferenceMassConstant()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a4e6b9d48f26544a45c5509a87eb334e7">GeographicLib::GravityModel</a>
-</li>
-<li>Reset()
-: <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#af9bdc7088bca547dcc191691b2737759">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1GeoCoords.html#a4a1e0a65a8a344dfe519fcbf25078e37">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a85b9c15b843cf6a84be08e0cc4de9122">GeographicLib::LocalCartesian</a>
-</li>
-<li>Reverse()
-: <a class="el" href="classGeographicLib_1_1MGRS.html#a066b79e78cd85bf4b50df50808bed7e3">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a7baa88b38b320d763f6cba3ece4f518d">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a1bffe1259895569e6834a4b1df9b22ab">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#a8700d59a1e244f8dd211e344587dfed3">GeographicLib::Gnomonic</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#aeddd854d52064bcb1f068052057edf2c">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#ac3bd58646dd6c06731a9baadee11f7e5">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a27a675e995d2c1fdd0ab4c0ab397e065">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a26d1b6fe3af8750babaeb60efdfec062">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a16572cc552eeb24ebf84319cdcd6652e">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a871246cba03145512f3f12ceb3e3e3a8">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a350070780708de5a622d4f4c4757104c">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a085d37693f5e95fd650b7f59f61ab744">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a15611aee4e3707e155278bab02403a07">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a1907735ce8f5f915a14a5f7a8b3adfea">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a6b86b19f2e1c773e028e386a0f5e00e0">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#aaf417ae6bed6da324aa03fc96ee0dda4">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a56ff2f371d59e2ca0da8644571706169">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#ab804929a4126ed390a40d35e837b4001">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#ac8cbfd7b15c96b52b876b54ce68f7b4d">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#ae006380e574858a81011752dd1d4af60">GeographicLib::OSGB</a>
-</li>
-<li>RMSError()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a207f98316d20a5b9d47846e559c5e2a2">GeographicLib::Geoid</a>
-</li>
-<li>RootTable()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a7fac63262c0a8bb18aee8c962a08d429">GeographicLib::SphericalEngine</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x73.html b/doc/html/functions_0x73.html
deleted file mode 100644
index f32a045..0000000
--- a/doc/html/functions_0x73.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li class="current"><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>Scale()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#aafd68e75d223b821abcbf20179c7a9e0">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#ab2346300c12ff7e70d35e08479ecede1">GeographicLib::Geoid</a>
-</li>
-<li>SCHMIDT
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">GeographicLib::SphericalHarmonic</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fa2e3db3efd68d118e3f357a97eb77a131">GeographicLib::SphericalEngine</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58">GeographicLib::SphericalHarmonic2</a>
-</li>
-<li>SECOND
-: <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a10c28c85ddfa71db5f1d46d362333075">GeographicLib::DMS</a>
-</li>
-<li>SetAltZone()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a7782c2d78462bde2ba6277b2b60af8f6">GeographicLib::GeoCoords</a>
-</li>
-<li>SetScale()
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a0c00022edeb6b67dcd4e00f087b412c4">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#aac6267f7f970b35043b17e12e4163ff2">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3f957214eb1d1248277a680e4c4ceed5">GeographicLib::PolarStereographic</a>
-</li>
-<li>sncndn()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#a0b8d63970c4276503d03d4133ee6c321">GeographicLib::EllipticFunction</a>
-</li>
-<li>SPHERICAL_ANOMALY
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ada02eebe918ebb3764a62b9323dceac9">GeographicLib::GravityModel</a>
-</li>
-<li>SphericalAnomaly()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#ac94672db5e450f4394e6df69eda99e69">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#aaf89eb4a9b7266f0aa2ef2c341fc264e">GeographicLib::GravityModel</a>
-</li>
-<li>SphericalEngine
-: <a class="el" href="classGeographicLib_1_1CircularEngine.html#ab89064f7f3c32a745c72d8c3188f7485">GeographicLib::CircularEngine</a>
-</li>
-<li>SphericalHarmonic
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#ae0383f6b1ce413d48e258750c3177f21">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#adb71d28aa60a813ca3384f9c58ef8fa1">GeographicLib::SphericalHarmonic</a>
-</li>
-<li>SphericalHarmonic1
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#accac7c5b7843a1e4fb2baf0c83cc24f0">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#aeb3299ea40b0bedae55fd0a6f0c1fa40">GeographicLib::SphericalHarmonic1</a>
-</li>
-<li>SphericalHarmonic2()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a19300de2d629c014883026bf0042b6f0">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a3eabc426b6edd718324c791ef3536360">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a897f6b15b82812e874a2b0927cfc3912">GeographicLib::SphericalHarmonic2</a>
-</li>
-<li>sq()
-: <a class="el" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">GeographicLib::Math</a>
-</li>
-<li>square_kilometer()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a1956824e4f2b22705d57566229a7c311">GeographicLib::Constants</a>
-</li>
-<li>square_meter()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a702b928c9a29dbcc7324b9d835b38d94">GeographicLib::Constants</a>
-</li>
-<li>square_mile()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ab7f473c27ad50da450b4192155cc92f9">GeographicLib::Constants</a>
-</li>
-<li>square_nauticalmile()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a5acf6b2c23d1c9ddf140a6b4e588e88a">GeographicLib::Constants</a>
-</li>
-<li>Ssize()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a98a75827d68247cf5ad1843d9d68b222">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>STANDARD
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">GeographicLib::UTMUPS</a>
-</li>
-<li>StandardZone()
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a62623c295d1b43318a9fa762c3da94ea">GeographicLib::UTMUPS</a>
-</li>
-<li>str()
-: <a class="el" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">GeographicLib::Utility</a>
-</li>
-<li>SurfaceGravity()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a019541fea3712f8ca73aec8a0b29c71c">GeographicLib::NormalGravity</a>
-</li>
-<li>SurfacePotential()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a5bc3756dd7dbc82c07ef4afd1a182372">GeographicLib::NormalGravity</a>
-</li>
-<li>surveyfoot()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a7faf6e7435791c0a8061296a79c0be08">GeographicLib::Constants</a>
-</li>
-<li>Sv()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ac93aaebb09086ab14330aafc0f105a17">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>swab()
-: <a class="el" href="classGeographicLib_1_1Math.html#aec7f95c2bb99422f1f047cb628a232f8">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x74.html b/doc/html/functions_0x74.html
deleted file mode 100644
index 00beebf..0000000
--- a/doc/html/functions_0x74.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li class="current"><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>T()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#afae12e4bbf17809f1dd6c32b41dfde03">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a690657dedac8ccea22052eda2829fea3">GeographicLib::GravityModel</a>
-</li>
-<li>TestCompute()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#ac46ac5567223b3db2ee11e6c4f72c257">GeographicLib::PolygonArea</a>
-</li>
-<li>ThreadSafe()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a286e947c13592f21e45cbdd404b283c7">GeographicLib::Geoid</a>
-</li>
-<li>Time()
-: <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a44783c9e44f16bbd48cc5061b30ce8e9">GeographicLib::MagneticCircle</a>
-</li>
-<li>TransverseMercator()
-: <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a9a4074c9d0ea35f0ebfc9c9f73bd3183">GeographicLib::TransverseMercator</a>
-</li>
-<li>TransverseMercatorExact()
-: <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a72ffcc89eee6f30a6d1f4d061518a6f1">GeographicLib::TransverseMercatorExact</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x75.html b/doc/html/functions_0x75.html
deleted file mode 100644
index 3f5f3a1..0000000
--- a/doc/html/functions_0x75.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li class="current"><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
-<li>U()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af368d4f9015e076e5cc57ad87b8a185f">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">GeographicLib::NormalGravity</a>
-</li>
-<li>UPS
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">GeographicLib::PolarStereographic</a>
-</li>
-<li>UPS_k0()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a3fe287ab1a0847f5392c1aaf9c5e635a">GeographicLib::Constants</a>
-</li>
-<li>UTM
-: <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a68668637e754201897bddb82baaf634b">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aacc8f89ac6144b1e445ca21cbe9a2533">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#aa25b52e35bc54c368e6c8b17e02b0542">GeographicLib::TransverseMercator</a>
-</li>
-<li>UTM_k0()
-: <a class="el" href="classGeographicLib_1_1Constants.html#aebbe37ebfb407a851f72caa95e5dc94f">GeographicLib::Constants</a>
-</li>
-<li>UTMShift()
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#abd70d3f90f5c79a09bdd217b67e6729b">GeographicLib::UTMUPS</a>
-</li>
-<li>UTMUPS
-: <a class="el" href="classGeographicLib_1_1MGRS.html#a6a0cfac496024eaf645c7a2f98a02a75">GeographicLib::MGRS</a>
-</li>
-<li>UTMUPSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a056efc42fe4c653aad40be5d5b865ea3">GeographicLib::GeoCoords</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x76.html b/doc/html/functions_0x76.html
deleted file mode 100644
index 89857b1..0000000
--- a/doc/html/functions_0x76.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li class="current"><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
-<li>V()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#aba5f3ec3cb7b620e13dafa6fa4e48ae0">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a7aec9ecfa959b257dd0a965331598368">GeographicLib::GravityModel</a>
-</li>
-<li>V0()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#aa656e36306bc396ac6d32dcdfc2069a2">GeographicLib::NormalGravity</a>
-</li>
-<li>Value()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a1157f59596dd15bf0a21b6a7fb99630b">GeographicLib::SphericalEngine</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x77.html b/doc/html/functions_0x77.html
deleted file mode 100644
index bfe32e1..0000000
--- a/doc/html/functions_0x77.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li class="current"><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>W()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a04ae0659ec2eb766ae360d3bcbe332c4">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#ab6767f3833caa34095a7ef83c43a46f0">GeographicLib::GravityModel</a>
-</li>
-<li>WGS84
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#a70c328a95e05964180106d89c2583b78">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">GeographicLib::Geocentric</a>
-</li>
-<li>WGS84_a()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ae12127984ac6713823746d917b4abfa7">GeographicLib::Constants</a>
-</li>
-<li>WGS84_f()
-: <a class="el" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">GeographicLib::Constants</a>
-</li>
-<li>WGS84_GM()
-: <a class="el" href="classGeographicLib_1_1Constants.html#af7806106d7bd289bb63d5290e79c87a6">GeographicLib::Constants</a>
-</li>
-<li>WGS84_omega()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a98c114d5a6ca42d3e4ece8595a0c2180">GeographicLib::Constants</a>
-</li>
-<li>WGS84_r()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a199810de7ff3351be6473d20ef045789">GeographicLib::Constants</a>
-</li>
-<li>writearray()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a276eb20ace49c5260e1878c7d8aefd31">GeographicLib::Utility</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x79.html b/doc/html/functions_0x79.html
deleted file mode 100644
index 1db1e62..0000000
--- a/doc/html/functions_0x79.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li class="current"><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
-<li>yard()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a00057328caa45bc216d18243786920c2">GeographicLib::Constants</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_0x7a.html b/doc/html/functions_0x7a.html
deleted file mode 100644
index 752a56a..0000000
--- a/doc/html/functions_0x7a.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
-      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
-      <li class="current"><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
-
-<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
-<li>Zone()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a3ce32259b53a9ea9a5346d9e418ad6a5">GeographicLib::GeoCoords</a>
-</li>
-<li>zonespec
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">GeographicLib::UTMUPS</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_enum.html b/doc/html/functions_enum.html
deleted file mode 100644
index 36f6588..0000000
--- a/doc/html/functions_enum.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Enumerations</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li class="current"><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- <ul>
-<li>component
-: <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09">GeographicLib::DMS</a>
-</li>
-<li>convertflag
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96">GeographicLib::Geoid</a>
-</li>
-<li>flag
-: <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869">GeographicLib::DMS</a>
-</li>
-<li>mask
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcc">GeographicLib::GeodesicLine</a>
-</li>
-<li>normalization
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949f">GeographicLib::SphericalEngine</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8be">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eb">GeographicLib::SphericalHarmonic</a>
-</li>
-<li>zonespec
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7">GeographicLib::UTMUPS</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_eval.html b/doc/html/functions_eval.html
deleted file mode 100644
index fbd1d7f..0000000
--- a/doc/html/functions_eval.html
+++ /dev/null
@@ -1,266 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Enumerator</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li class="current"><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="#index_a"><span>a</span></a></li>
-      <li><a href="#index_d"><span>d</span></a></li>
-      <li><a href="#index_e"><span>e</span></a></li>
-      <li><a href="#index_f"><span>f</span></a></li>
-      <li><a href="#index_g"><span>g</span></a></li>
-      <li><a href="#index_i"><span>i</span></a></li>
-      <li><a href="#index_l"><span>l</span></a></li>
-      <li><a href="#index_m"><span>m</span></a></li>
-      <li><a href="#index_n"><span>n</span></a></li>
-      <li><a href="#index_r"><span>r</span></a></li>
-      <li><a href="#index_s"><span>s</span></a></li>
-      <li><a href="#index_u"><span>u</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>ALL
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a30e0c9456c5df9e6ff23880014bd11e0">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccabf2df1a904dc1c546a122ac0ebe1acd6">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a8e0e6b9a6d629d05f22f41996fe98068">GeographicLib::GravityModel</a>
-</li>
-<li>AREA
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a9aea7d24f8e437d6ea38defbe4ec9b14">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca71c623894b3e6bb0864f3da89d1a1915">GeographicLib::GeodesicLine</a>
-</li>
-<li>AZIMUTH
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca654b16d956cdd16a70605a6b54a1228e">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa413d0b81ccb4b5302285b1a01f16c08">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a92264580521b3a1c1df2a7421b435e24">GeographicLib::DMS</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>DEGREE
-: <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a8ee59944227e74901b71f27410d70781">GeographicLib::DMS</a>
-</li>
-<li>DISTANCE
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a0fe3400fb8dcc92274fbac2839cc4e0d">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca6d8b294c13e0495120b9bfd6a9281184">GeographicLib::GeodesicLine</a>
-</li>
-<li>DISTANCE_IN
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca7929baa71a65e8399073f67382e4d0bc">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ae20140cdf788fa0497df59630d3211ef">GeographicLib::Geodesic</a>
-</li>
-<li>DISTURBANCE
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a83daf366a2c7ab93495f0e6b4144d885">GeographicLib::GravityModel</a>
-</li>
-<li>DISTURBING_POTENTIAL
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365abe1f6d891a721a4f544cd8a341abcb28">GeographicLib::GravityModel</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>ELLIPSOIDTOGEOID
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a4a1db06e9dcfa1ebb345c616151ab70d">GeographicLib::Geoid</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>FULL
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fac720ca87adfc478dbfc13a37f0cf8ba9">GeographicLib::SphericalEngine</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea4b8746ff0805a8a819130794c103e946">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aafd320d946e992459e0013da6b769638">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">GeographicLib::SphericalHarmonic</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
-<li>GEODESICSCALE
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828afb114302395314a68dfef3c14693ea2e">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca74f896572150d24be4667cf66ed696a6">GeographicLib::GeodesicLine</a>
-</li>
-<li>GEOID_HEIGHT
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365a0ac768bffe3f104069c3fd5af1ddaa69">GeographicLib::GravityModel</a>
-</li>
-<li>GEOIDTOELLIPSOID
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a96385bcbc41f3d933588f6d6a9868473">GeographicLib::Geoid</a>
-</li>
-<li>GRAVITY
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ae6a4573c13b932c98ab95e7f9dbd0952">GeographicLib::GravityModel</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>INVALID
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aeb6750fb82edce6e5b58178a38ee8bd0">GeographicLib::UTMUPS</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>LATITUDE
-: <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a6b5a0451ce4c199bd82f5d87d50b523b">GeographicLib::DMS</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7c1f4742e41ae5e75c8133ee7fb8fd90">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca34e259b158b7fa5441e91d32eae20c23">GeographicLib::GeodesicLine</a>
-</li>
-<li>LONGITUDE
-: <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a321624c1b510f7f1e392e7509a85914f">GeographicLib::DMS</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828aa1e019a4815f6c23ca30d4b3efcf6c6b">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccac41b1e2e1d73c8d323f92b94e57a0cc9">GeographicLib::GeodesicLine</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>MATCH
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a9059a8e3b4721e27869e99ed1ae3d320">GeographicLib::UTMUPS</a>
-</li>
-<li>MAXPSEUDOZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ac22db7e136b6e06fba7c3c06b5888362">GeographicLib::UTMUPS</a>
-</li>
-<li>MAXUTMZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7ae8e04ab8df50a062c1fe277a6880bc19">GeographicLib::UTMUPS</a>
-</li>
-<li>MAXZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a12dabceb6da15aa0fc94b9406aca921a">GeographicLib::UTMUPS</a>
-</li>
-<li>MINPSEUDOZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a058ac8a834bbc78ce73d9b37a1a5dfb9">GeographicLib::UTMUPS</a>
-</li>
-<li>MINUTE
-: <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a9884bea675fd214061e534e76a1c15d6">GeographicLib::DMS</a>
-</li>
-<li>MINUTMZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a1413e6cc83d4bf1eb4ad1c0f1d745eb6">GeographicLib::UTMUPS</a>
-</li>
-<li>MINZONE
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7af91adc987ae7295bfb6d3786b23c58e1">GeographicLib::UTMUPS</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>NONE
-: <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869adc80eee37727cca42f9805cfefb83fc1">GeographicLib::DMS</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828ab10adfebcb73de5356c4787246f056af">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365add4ee1aa94e38a8283826704105dc2e1">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#a58ddbd0fd48c25b361f45bdb70dadb96a677322ba74ea5494e67478c3dc1780d5">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbcca0f2ec05e56540d908a326a872b9aa68f">GeographicLib::GeodesicLine</a>
-</li>
-<li>NUMBER
-: <a class="el" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">GeographicLib::DMS</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>REDUCEDLENGTH
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aab966190e69651b86661fc2628d20828a7a27709e1377a8c34704cf1cec64db6c">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#adeec76cf92a8c30770e1199bdadacbccab6649103de9393f5f18a5d2e44624411">GeographicLib::GeodesicLine</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>SCHMIDT
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a5332d09191e018cbddc568c1fc71949fa2e3db3efd68d118e3f357a97eb77a131">GeographicLib::SphericalEngine</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">GeographicLib::SphericalHarmonic</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#adbdc59ce4e6f1e4ce0fc7169c760f8bea326a84d3094b558a1c43b4b61f9c2d58">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac4aaa81e0f753894ecef173c4d667916aa1959e3e2bdf7c01f596692757858231">GeographicLib::SphericalHarmonic1</a>
-</li>
-<li>SECOND
-: <a class="el" href="classGeographicLib_1_1DMS.html#ab9fa04b3a9156f36f18852eed9b7ce09a10c28c85ddfa71db5f1d46d362333075">GeographicLib::DMS</a>
-</li>
-<li>SPHERICAL_ANOMALY
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af8691d0f13d6d42278cd1e615903d365ada02eebe918ebb3764a62b9323dceac9">GeographicLib::GravityModel</a>
-</li>
-<li>STANDARD
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7adf96495ab4bfbf495f1fe31aebb9e406">GeographicLib::UTMUPS</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
-<li>UPS
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7a40256f9ab9f277957f8ab697bcd2fd42">GeographicLib::UTMUPS</a>
-</li>
-<li>UTM
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a0c459615da18cc899a960bdc8c5b11b7aacc8f89ac6144b1e445ca21cbe9a2533">GeographicLib::UTMUPS</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
deleted file mode 100644
index 48ae828..0000000
--- a/doc/html/functions_func.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li class="current"><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>Accumulator()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a6d30e4a792644ffc78546dda4b5d0022">GeographicLib::Accumulator</a>
-</li>
-<li>acre()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ae5aa419ea6c6ce121c912c8afea0a0b7">GeographicLib::Constants</a>
-</li>
-<li>AddPoint()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#acfec56f0e136a534192e1e71589299f1">GeographicLib::PolygonArea</a>
-</li>
-<li>AlbersEqualArea()
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a08edd228ba175a5ae71d783c4a712e50">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>AltConvergence()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a2b62e667ce462d8102fdfa6ece6ff50e">GeographicLib::GeoCoords</a>
-</li>
-<li>AltEasting()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#af4a5b63a1931973338f71ef2ec4e27fa">GeographicLib::GeoCoords</a>
-</li>
-<li>AltMGRSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#ad602893cd4a81ccc511daff76b411413">GeographicLib::GeoCoords</a>
-</li>
-<li>AltNorthing()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a2f5a9665712214ad34b061d35ce89659">GeographicLib::GeoCoords</a>
-</li>
-<li>AltScale()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a299131cd5383ad0adc5af92c84dc6afe">GeographicLib::GeoCoords</a>
-</li>
-<li>AltUTMUPSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a020732ccba257d7f5248692afd318b93">GeographicLib::GeoCoords</a>
-</li>
-<li>AltZone()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a590600b600395c7914e4854faee08f8e">GeographicLib::GeoCoords</a>
-</li>
-<li>AngularVelocity()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#aeb3d751ba7719e57e0266b65ee7d63d8">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#aefd6dfb7e6f806b63d099316dcc97f55">GeographicLib::NormalGravity</a>
-</li>
-<li>ArcDirect()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#abfb6553227e1534b451900240b39d058">GeographicLib::Geodesic</a>
-</li>
-<li>arcminute()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a8f8e6d3bd08abb72b686a0f4398b587b">GeographicLib::Constants</a>
-</li>
-<li>ArcPosition()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#af286d2071bdc59e68046dd2557115f21">GeographicLib::GeodesicLine</a>
-</li>
-<li>arcsecond()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a04858f922295d2a04bb021eecac07179">GeographicLib::Constants</a>
-</li>
-<li>asinh()
-: <a class="el" href="classGeographicLib_1_1Math.html#aba75669f9d52fc672a8faaf69261bd8a">GeographicLib::Math</a>
-</li>
-<li>atanh()
-: <a class="el" href="classGeographicLib_1_1Math.html#a372ac604592d9de9cf608cfdfc463447">GeographicLib::Math</a>
-</li>
-<li>Azimuth()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a40707b9e989c95418b2559b271cc2699">GeographicLib::GeodesicLine</a>
-</li>
-<li>AzimuthalEquidistant()
-: <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a125571cdeed68d10192611cc12e221ce">GeographicLib::AzimuthalEquidistant</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x63.html b/doc/html/functions_func_0x63.html
deleted file mode 100644
index 4c4ea58..0000000
--- a/doc/html/functions_func_0x63.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li class="current"><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>Cache()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#ade5715c0d1428a409383b1acd2cbe9be">GeographicLib::Geoid</a>
-</li>
-<li>CacheAll()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">GeographicLib::Geoid</a>
-</li>
-<li>CacheArea()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a52b5dc2d976796046aaeb8765e4a9c0f">GeographicLib::Geoid</a>
-</li>
-<li>CacheClear()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#ad948f48545c9c40f1705f2892887cdab">GeographicLib::Geoid</a>
-</li>
-<li>CacheEast()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#acb34cfbcfb8be2794b16a3d18209dbbe">GeographicLib::Geoid</a>
-</li>
-<li>CacheNorth()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a26742332938bb8f22be23c979ffb02a1">GeographicLib::Geoid</a>
-</li>
-<li>CacheSouth()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#aa3db8f9639eb231539376e4617a3d59e">GeographicLib::Geoid</a>
-</li>
-<li>CacheWest()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#aa0d2e119f089ee4182987ddd3faaf62a">GeographicLib::Geoid</a>
-</li>
-<li>Capabilities()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a21d07549d1171ad05c7318533c4c8970">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#a08ecc2b31ca7d0ddc2d25950a6bc247f">GeographicLib::GravityCircle</a>
-</li>
-<li>CassiniSoldner()
-: <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a948f9d934615c4120eb23740635200bc">GeographicLib::CassiniSoldner</a>
-</li>
-<li>cbrt()
-: <a class="el" href="classGeographicLib_1_1Math.html#a04b87b033b845f4812a5700661c64a2a">GeographicLib::Math</a>
-</li>
-<li>CentralScale()
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#af407e835eaf76895ee25ec9e7a9c090c">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a2298a4e48e550cfd7346cf5f2dd175ad">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#a65210bfdcac362f393a8f81f28259ad0">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#ad6f7bd8a35208d91706ac8c258387e6f">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a63876dc20e8765501ca62022f9a73432">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a355a827f45c194d56a465e0d4f91c3a3">GeographicLib::TransverseMercatorExact</a>
-</li>
-<li>chain()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ac4f3792bce075999b0c9b9485e4079d0">GeographicLib::Constants</a>
-</li>
-<li>Circle()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a32dd4989c40181939d667298681625f6">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#aadafafc09b9b707d47606da1e413d54f">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1SphericalEngine.html#af6a5fa63535d47cf528b733bb6a97901">GeographicLib::SphericalEngine</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a2b2b2ad35bba090a4956693ba5ef0f32">GeographicLib::SphericalHarmonic</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a3aa683a43a8e9232a16390b09c6be920">GeographicLib::SphericalHarmonic2</a>
-</li>
-<li>CircularEngine()
-: <a class="el" href="classGeographicLib_1_1CircularEngine.html#a91dd2b9cc408e35f8cb6482cdf3aadbf">GeographicLib::CircularEngine</a>
-</li>
-<li>Clear()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#a66198bec67036ad09aa58ec43166fe60">GeographicLib::PolygonArea</a>
-</li>
-<li>ClearRootTable()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#ab3fb8f933adb257df6b7537268d55a75">GeographicLib::SphericalEngine</a>
-</li>
-<li>coeff()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2f453e210345b33a364bf5a3bee84b7b">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>Coefficients()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#ac8886de1d1400ecf6482f6441c76a8a0">GeographicLib::SphericalHarmonic</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a67fe3c8ab08be94a300d07c98814aab0">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a166338f0b4ccf89c48278bb9514046f0">GeographicLib::SphericalHarmonic2</a>
-</li>
-<li>Coefficients1()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ad200e309790cd6e41bb79529d9076274">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a51751279dc4e0b6e19886723f8e8b493">GeographicLib::SphericalHarmonic2</a>
-</li>
-<li>Coefficients2()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a676b4c36923744bf5057b24484d9cf60">GeographicLib::SphericalHarmonic2</a>
-</li>
-<li>Compute()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#a60e1c288358818c849356c9921191215">GeographicLib::PolygonArea</a>
-</li>
-<li>Convergence()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#ad92c8fa1b34bd11dbd908dfffbb836a8">GeographicLib::GeoCoords</a>
-</li>
-<li>ConvertHeight()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#adf98d0f0d881893a4f5ff711a3be0e04">GeographicLib::Geoid</a>
-</li>
-<li>Csize()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a8a126c9790a7a1609046fbae7934e587">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>Cv()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#ad30081b2dfdee79652aacbc24bacb635">GeographicLib::SphericalEngine::coeff</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x64.html b/doc/html/functions_func_0x64.html
deleted file mode 100644
index 6f06d3f..0000000
--- a/doc/html/functions_func_0x64.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li class="current"><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>date()
-: <a class="el" href="classGeographicLib_1_1Utility.html#aa6955e745deebb79795b12ab139798e0">GeographicLib::Utility</a>
-</li>
-<li>DateTime()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#acbed448c2423cd45e800d03fab059500">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a230648296f87ff6fc12a3e65ff01bc3b">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#a9cd7304b5df37001f4ad3c91cdbc56f4">GeographicLib::Geoid</a>
-</li>
-<li>day()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a877a58000a56bc84c354cf42b4b1cd99">GeographicLib::Utility</a>
-</li>
-<li>Decode()
-: <a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">GeographicLib::DMS</a>
-</li>
-<li>DecodeAngle()
-: <a class="el" href="classGeographicLib_1_1DMS.html#a868248d72f6b0bf2dae18a15d741ac43">GeographicLib::DMS</a>
-</li>
-<li>DecodeAzimuth()
-: <a class="el" href="classGeographicLib_1_1DMS.html#a0512cc1275e089138e1550efbee421d9">GeographicLib::DMS</a>
-</li>
-<li>DecodeLatLon()
-: <a class="el" href="classGeographicLib_1_1DMS.html#a2d38adcfecb7a41865092e870e19730f">GeographicLib::DMS</a>
-</li>
-<li>DecodeZone()
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#ad74d52d7ebeff195019745f791f30562">GeographicLib::UTMUPS</a>
-</li>
-<li>DefaultGeoidName()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a048865342b2b12ed2272e547209381fd">GeographicLib::Geoid</a>
-</li>
-<li>DefaultGeoidPath()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">GeographicLib::Geoid</a>
-</li>
-<li>DefaultGravityName()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#ad4a776d68b60e85275c0e580d3c7caba">GeographicLib::GravityModel</a>
-</li>
-<li>DefaultGravityPath()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">GeographicLib::GravityModel</a>
-</li>
-<li>DefaultMagneticName()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#ab2ac8cc598c0d9a6b448c9a45e9642d9">GeographicLib::MagneticModel</a>
-</li>
-<li>DefaultMagneticPath()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">GeographicLib::MagneticModel</a>
-</li>
-<li>degree()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a26ff02acd8141a815428cddf0ff3ff66">GeographicLib::Constants</a>
-, <a class="el" href="classGeographicLib_1_1Math.html#a0f3b4ea16cc2cb21557555fca3b1c201">GeographicLib::Math</a>
-</li>
-<li>Description()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a37d76bcfe0ddf9b84042d701c312e941">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#af2c1c74254e3193adb155987f6dd0a59">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a204e8d3c4ebf6f8c13eb9e1817921ea2">GeographicLib::MagneticModel</a>
-</li>
-<li>Direct()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#a63f7681d1239902dc3f528ded0f90352">GeographicLib::Geodesic</a>
-</li>
-<li>Disturbance()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a75cf57146334d9ce0856222a6814ae6f">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#a2c3bde01c9d822b0cdd935314193a466">GeographicLib::GravityCircle</a>
-</li>
-<li>DMSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#af6e9f9087a407b01dc24401df8610257">GeographicLib::GeoCoords</a>
-</li>
-<li>dow()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a42a6f8679c068dcb06f1da26aa21dfb1">GeographicLib::Utility</a>
-</li>
-<li>DynamicalFormFactor()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#aa52b03157eb0b199d331d6fca28a259a">GeographicLib::NormalGravity</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x65.html b/doc/html/functions_func_0x65.html
deleted file mode 100644
index b6b35b2..0000000
--- a/doc/html/functions_func_0x65.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li class="current"><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>E()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">GeographicLib::EllipticFunction</a>
-</li>
-<li>Earth()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#ab15ded1ab7ec9a30e8053fc330ed76ac">GeographicLib::NormalGravity</a>
-</li>
-<li>Easting()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a9a84801f0b383860b24cc1344e4015fb">GeographicLib::GeoCoords</a>
-</li>
-<li>EllipsoidArea()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#a0dde7d12d4bafedef63d371c5fe40f50">GeographicLib::Geodesic</a>
-</li>
-<li>EllipticFunction()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#ada122111b55eb0ab9c7b9fafb0a4b1e6">GeographicLib::EllipticFunction</a>
-</li>
-<li>Encode()
-: <a class="el" href="classGeographicLib_1_1DMS.html#a1ae785976e5d7c6346cfb68863884b55">GeographicLib::DMS</a>
-</li>
-<li>EncodeZone()
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a3410e1e221158962f34147255653818f">GeographicLib::UTMUPS</a>
-</li>
-<li>EquatorialArc()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a308c7fb4f7c562a8c604453bf2ee2ca2">GeographicLib::GeodesicLine</a>
-</li>
-<li>EquatorialAzimuth()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad117912c4fc4ef29bf4050c9be3267f2">GeographicLib::GeodesicLine</a>
-</li>
-<li>EquatorialGravity()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a3610ec908c7b168b39f00946e2fc3fad">GeographicLib::NormalGravity</a>
-</li>
-<li>expm1()
-: <a class="el" href="classGeographicLib_1_1Math.html#a2fd4e8930d9dd953352d25fc184d843e">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x66.html b/doc/html/functions_func_0x66.html
deleted file mode 100644
index f423e51..0000000
--- a/doc/html/functions_func_0x66.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li class="current"><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>FalseEasting()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#ab27e19f7688f6b472d217b31aeae079c">GeographicLib::OSGB</a>
-</li>
-<li>FalseNorthing()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#a74072d4e62fcd4ca679b222716b6a6a1">GeographicLib::OSGB</a>
-</li>
-<li>fathom()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a51cf3e97984ac301b1f27b667b360be0">GeographicLib::Constants</a>
-</li>
-<li>FieldComponents()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#af553c42337b9a9a1d51b81fea7083ea2">GeographicLib::MagneticModel</a>
-</li>
-<li>Flattening()
-: <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a8d618d5abe71a49fc5ec4f2801d22555">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#aa2316f6d328435417627d49046c45308">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#abd47e48c75ed958f5aa91bcaa80ddc8c">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a30ba434524b5836c9852d454e61d795f">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a99907eda4b863acbe8e7d159a6482abb">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a4c3fc40a49332ddcd042e5cb41c3cb2a">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1GeoCoords.html#a4d892f5e55df8cbb597d1a693da4783c">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a38ad95b421f5fbce40abff5733421370">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1MGRS.html#a8eee27799bda8238d6d0525dffdddd4e">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#a7abba09bec76f8f97f1e3bc81a7456e2">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#aba396954f43e623e755bdff7db7d850b">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#aae688ebd8c126f22517eaa0a01d659f8">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a565c63954715204781ae458db0d6b1f7">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a42e1f97e3ed564f98b305450b0d04590">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3b08d03e475dae2c2a81c76420946942">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1PolygonArea.html#aba3543baed0f014b64890d174b8c62a0">GeographicLib::PolygonArea</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#abd2076cab3455b816e9477cdb410b187">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a6571ba8c59fd7e5e32c9994d37d4cdb5">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a4045ec4b01c99c4bb589b1b3e7e07ca4">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a3f300fcc10aeee9dc88ff93fb991f191">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#a06b559fa72aa1e51da966c43d22b983d">GeographicLib::Gnomonic</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a182de2e29f1181c55a266777039b8a9d">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#ad9bfc60d802b662ffc1a41566882b743">GeographicLib::GravityCircle</a>
-</li>
-<li>foot()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ac69f40e7e56c71bc72011c7591f7bef9">GeographicLib::Constants</a>
-</li>
-<li>Forward()
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#aac57f3a9c0c08fb897a1e37034d127c1">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a87bf8d3b416bbfd8b7a2c5269245e693">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a774332be14e894536f13b3cc7a8323c7">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#a2c08cf2bad190ee9ab88f7d877223208">GeographicLib::Gnomonic</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a07d73a6d94e2434cbb937978d61a5ae7">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a6426e95f904f224eabedb8fcd17fe537">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#a92618eea9870908e11446875d80aab6b">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#ac2fe4c9524ec35f8d05336555f96e1b1">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a14a3757d85e81488afe476f7ceb8a720">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a0dab8d1a275df9e4796d2d858f42f7e3">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a8b4951b7c732f97aedeb8e869c9349d2">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#aa21ec1bc26f691e0a6f2ccc44debe6f0">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a37656c7551b10ad75a40758d0bba570d">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a65320594cad8c03d28beaa409f3d6fae">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#ab851ea19db5671f8d4a4151820bc6853">GeographicLib::Gnomonic</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1MGRS.html#a37f9dd9b12dbc74381116d842be47ccd">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a2bafb6c1a81d4b6cf04f172b9e96278c">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#af689c212234963734354347d56bf12f6">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a950431c3d269fb82e9410f332c401786">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a54e09e4673ddbf99feeba81036c81345">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a68a13780a73bcf9c8e50a3ce4eae3086">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>fract()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a46b13d9ce2893f7e0fe6e7da093f528f">GeographicLib::Utility</a>
-</li>
-<li>fractionalyear()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a074607cb34326b7109532c8fdd07e38c">GeographicLib::Utility</a>
-</li>
-<li>furlong()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a824d39311cf43f916d4ac19e46da3713">GeographicLib::Constants</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x67.html b/doc/html/functions_func_0x67.html
deleted file mode 100644
index 798b52e..0000000
--- a/doc/html/functions_func_0x67.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li class="current"><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
-<li>GenDirect()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#acaef3032846a71fc730e1ea26ea32d20">GeographicLib::Geodesic</a>
-</li>
-<li>GenInverse()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#a84a3b9b457dd87b1059045b9d50303fd">GeographicLib::Geodesic</a>
-</li>
-<li>GenPosition()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad9522110fe6a5a0c7f912a6b1a23094d">GeographicLib::GeodesicLine</a>
-</li>
-<li>Geocentric()
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#a6527d3ab1df78de8277122581dbcdaff">GeographicLib::Geocentric</a>
-</li>
-<li>GeoCoords()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a7bde6a5cba74adf66d831788e6be8e65">GeographicLib::GeoCoords</a>
-</li>
-<li>Geodesic()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#a455300c36e6caa70968115416e1573a4">GeographicLib::Geodesic</a>
-</li>
-<li>GeodesicLine()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a5669be85b4a574258f4a136f12d3f1bb">GeographicLib::GeodesicLine</a>
-</li>
-<li>GeographicErr()
-: <a class="el" href="classGeographicLib_1_1GeographicErr.html#ae0f338af58f073657b012c8a9a64b006">GeographicLib::GeographicErr</a>
-</li>
-<li>Geoid()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#ac3556c755dad0d43c3be0913df08b395">GeographicLib::Geoid</a>
-</li>
-<li>GeoidDirectory()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a83b17b17045c49984bcdd032e637155e">GeographicLib::Geoid</a>
-</li>
-<li>GeoidFile()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a07e5f704f2684ce5acf824b7e0b17d30">GeographicLib::Geoid</a>
-</li>
-<li>GeoidHeight()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d5a577c99cf4649d9286f1b4afacab5">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a7e75bdba6b9c8e64cc64403335a6fba4">GeographicLib::GravityModel</a>
-</li>
-<li>GeoidName()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#aa244668a189e35ce5ff248fb8fa2e57b">GeographicLib::Geoid</a>
-</li>
-<li>GeoRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a79af2d72afdfeede78f2ba65b809d6b3">GeographicLib::GeoCoords</a>
-</li>
-<li>Gnomonic()
-: <a class="el" href="classGeographicLib_1_1Gnomonic.html#a2ac973ebbd7aaf18c451b152cd92db99">GeographicLib::Gnomonic</a>
-</li>
-<li>Gravity()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a5d8053ee66ae22217ae0b61e96194b64">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a2dc8bf4cfa3c1914f4c7e93a5a3b3eac">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#acfca8d6e44778501b54cd0b38dbbddde">GeographicLib::NormalGravity</a>
-</li>
-<li>GravityCircle()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a4a000e07f0856a130ab11f1b26c933ed">GeographicLib::GravityCircle</a>
-</li>
-<li>GravityFile()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a26a87d363713ba3d1aa1b16da2fc2f27">GeographicLib::GravityModel</a>
-</li>
-<li>GravityFlattening()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a7e9329f7b3120b7777a0c5be3ca424a7">GeographicLib::NormalGravity</a>
-</li>
-<li>GravityModel()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#ac351170c1104f41754d5c0b8371d3e15">GeographicLib::GravityModel</a>
-</li>
-<li>GravityModelDirectory()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a17f2da4cd5abbb5f38f1b90d75975898">GeographicLib::GravityModel</a>
-</li>
-<li>GravityModelName()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a9ca1191e449bf7c04595ebd8a299af78">GeographicLib::GravityModel</a>
-</li>
-<li>GridReference()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#a3693cfef49442747750e8393c81014aa">GeographicLib::OSGB</a>
-</li>
-<li>GRS80_a()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a9b955c3556dcfcebce6a2926bfeaf464">GeographicLib::Constants</a>
-</li>
-<li>GRS80_GM()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a7541474ca70cbec7fccb08d3e3fbfe31">GeographicLib::Constants</a>
-</li>
-<li>GRS80_J2()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a59c7a1d298eb72256119894b67470974">GeographicLib::Constants</a>
-</li>
-<li>GRS80_omega()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a9caea97ab2be0959c7972155141bfd1b">GeographicLib::Constants</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x68.html b/doc/html/functions_func_0x68.html
deleted file mode 100644
index 77cd80f..0000000
--- a/doc/html/functions_func_0x68.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li class="current"><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
-<li>hectare()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a4cc4ae77e3136d7784cd7c69d6927adc">GeographicLib::Constants</a>
-</li>
-<li>Height()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a026b2b79ff3ae70b4fee5d9c4d1ffb70">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#aadd95eac0650f195e4d7acdc9819716b">GeographicLib::MagneticCircle</a>
-</li>
-<li>HeightOrigin()
-: <a class="el" href="classGeographicLib_1_1LocalCartesian.html#ac8e00f262d70da122f45afa15b9381e2">GeographicLib::LocalCartesian</a>
-</li>
-<li>Hemisphere()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a0764b9f389a6ce851f9c7c8317ecebb3">GeographicLib::GeoCoords</a>
-</li>
-<li>hypot()
-: <a class="el" href="classGeographicLib_1_1Math.html#a62b6fca06c571481aafba3f1716a8bb2">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x69.html b/doc/html/functions_func_0x69.html
deleted file mode 100644
index aa5f1fa..0000000
--- a/doc/html/functions_func_0x69.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li class="current"><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>index()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a356d705a99ee15089d1faabd0c01084c">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>infinity()
-: <a class="el" href="classGeographicLib_1_1Math.html#a82ccc01be301f14061c681ee93a5120b">GeographicLib::Math</a>
-</li>
-<li>Init()
-: <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a3f71bb8b662438a7954be174315ce974">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a8ec84cd0b1d97b51464ec80d9e2dcf57">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#a1d96cafc362959215eaa553a712b6908">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a7d2e34d1be6009caf4576c6cc884a589">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#af7e248d7632f56cf7abc6eac4927a587">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#aee7b6c92dc9264345048a8ad7c230e4c">GeographicLib::GravityCircle</a>
-</li>
-<li>Interpolation()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a0ddfefaef196023486fc7642af45cf96">GeographicLib::Geoid</a>
-</li>
-<li>Inverse()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#aa6da95e73bec6443a03bf3928f401d19">GeographicLib::Geodesic</a>
-</li>
-<li>isfinite()
-: <a class="el" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">GeographicLib::Math</a>
-</li>
-<li>isnan()
-: <a class="el" href="classGeographicLib_1_1Math.html#a554d35e9f54bf304447833a21ee2047c">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x6b.html b/doc/html/functions_func_0x6b.html
deleted file mode 100644
index 5109fd9..0000000
--- a/doc/html/functions_func_0x6b.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li class="current"><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
-<li>K()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#a6c6c8029d93946b32184ee964525938c">GeographicLib::EllipticFunction</a>
-</li>
-<li>KE()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#a12bcdf2c3fc7bcb165318822171328f7">GeographicLib::EllipticFunction</a>
-</li>
-<li>kilometer()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a4ec5a9d91ab0ccbd3bd921cda4bfc836">GeographicLib::Constants</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x6c.html b/doc/html/functions_func_0x6c.html
deleted file mode 100644
index e079718..0000000
--- a/doc/html/functions_func_0x6c.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li class="current"><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>LambertConformalConic()
-: <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a21dc9fa160a5b96a1c11ab30af0eb129">GeographicLib::LambertConformalConic</a>
-</li>
-<li>Latitude()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a1bc1bb3a2377fa6b70be046dcf5d3e97">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a00a291e94d0c688a168a58623a360659">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#a9628e97c53a2532959c5c8af75e1c14b">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#aaf14e89275bffd8253acdbe4840b65d0">GeographicLib::MagneticCircle</a>
-</li>
-<li>LatitudeOrigin()
-: <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a2aa51120af199603f57d54b8c9a0bdde">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#af4905164de5157c7ae2678f7716cbad7">GeographicLib::LocalCartesian</a>
-</li>
-<li>Line()
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#a3ac241c18897bb9bec4b839d7e1a7c59">GeographicLib::Geodesic</a>
-</li>
-<li>LocalCartesian()
-: <a class="el" href="classGeographicLib_1_1LocalCartesian.html#ad277a6798293d5d66168c3c1438d10a2">GeographicLib::LocalCartesian</a>
-</li>
-<li>log1p()
-: <a class="el" href="classGeographicLib_1_1Math.html#a90eddd5a6d0c9dcc4a9f18dd647ac520">GeographicLib::Math</a>
-</li>
-<li>Longitude()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac567ccf20c683319370f4c747f23966a">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1GeoCoords.html#a7db5459efae411dfebec758a8244a95a">GeographicLib::GeoCoords</a>
-</li>
-<li>LongitudeOrigin()
-: <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a45656227b4fff45249f1844bc6d233ad">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#aeb5c42b5cb6202a2371ba84bf76e0161">GeographicLib::CassiniSoldner</a>
-</li>
-<li>lookup()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a9a47fdaaa00a92e9a42035e62bd98faa">GeographicLib::Utility</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x6d.html b/doc/html/functions_func_0x6d.html
deleted file mode 100644
index 6b09fcd..0000000
--- a/doc/html/functions_func_0x6d.html
+++ /dev/null
@@ -1,184 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li class="current"><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>m()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#aba29c348874db7880ab7b1065f03ff7c">GeographicLib::EllipticFunction</a>
-</li>
-<li>m1()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#ad1fbe801f6731285462d35d874a149ba">GeographicLib::EllipticFunction</a>
-</li>
-<li>MagneticCircle()
-: <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a49170460b1833722ad9bc45b92c86e5a">GeographicLib::MagneticCircle</a>
-</li>
-<li>MagneticFile()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#aa072d202531c0cacdd7bca128d670705">GeographicLib::MagneticModel</a>
-</li>
-<li>MagneticModel()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a84a020586d58c4da61ec6ffbc7b4fa37">GeographicLib::MagneticModel</a>
-</li>
-<li>MagneticModelDirectory()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a2476aee96f07071de17c24dbbf80f521">GeographicLib::MagneticModel</a>
-</li>
-<li>MagneticModelName()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#ad500f0d76997b4026b75805fad71dbee">GeographicLib::MagneticModel</a>
-</li>
-<li>MajorRadius()
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a55d5ca45e7c80a96b3faf0094714ac59">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#a8598fe6d8c3896fa3fd58d24023f78ee">GeographicLib::Gnomonic</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#a19c5d003a9981cb3ece5b44ee836553a">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a42c4103265af804395b8b5260a4c25e0">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a07f361e231e1725a4f8e3c37a06cf304">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a21f9bc21f3f40c56d2f5d12fb4b7f75a">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#a293aa30508096d49db77a23917ea1092">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a19083f16ecfc51f9020d7242b3ded43e">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a0019eeb70b5493de687c5cc36ae7f43c">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1PolygonArea.html#afcdd74fcb4a0f57aa193e5fd08239369">GeographicLib::PolygonArea</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#ab1746576356a2409f34d9527064adfdd">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a795356c736f1170fe5ef075ebbf34354">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a78721d381d21f676152394dd576f2e77">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#ae20c62c298f1724412fec581285cf269">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a0b55df676607204a2d44687ffafe8d9e">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1MGRS.html#a8942a1dfafa3ea845ccc5fafb6ca4dc2">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1GeoCoords.html#a897e6bbfb71f78b0646045bf47e09696">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#a9155d22c5a64a7ef346ce7f590a6264f">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#a9bb3b0ff55a462ac2ebcd0cfd446d811">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#acd276bb113cfdf3fe59aa43fb3d7289b">GeographicLib::Geodesic</a>
-, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#af8953029b9985a3929fe406f7530143b">GeographicLib::GeodesicLine</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a47e93a8cde548b6e8d7c4c076bac4be6">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#aada99465d9ddfc1b34ccf2ef3d86dbd7">GeographicLib::Geoid</a>
-</li>
-<li>MassConstant()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a3c6693dc7efe04cdbed408b2510c69da">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#aa63d1c6e71abfa9455df695f4a3e6bdd">GeographicLib::GravityModel</a>
-</li>
-<li>MaxError()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#aff538da14578a02c551b411a899e567a">GeographicLib::Geoid</a>
-</li>
-<li>MaxHeight()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a41e16617bc2cdd89ab7b7a02b4bd4dcf">GeographicLib::MagneticModel</a>
-</li>
-<li>MaxTime()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a5d538204401200c87b37cdc37509311a">GeographicLib::MagneticModel</a>
-</li>
-<li>meter()
-: <a class="el" href="classGeographicLib_1_1Constants.html#afeffc10d6b8171b39a50949cac149063">GeographicLib::Constants</a>
-</li>
-<li>MGRSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a36594aaa4f293b0ddf00b1c78bb04595">GeographicLib::GeoCoords</a>
-</li>
-<li>mile()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a49cb7b828f7c85c36761d47b8db6518c">GeographicLib::Constants</a>
-</li>
-<li>MinHeight()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a8a170290542bf8e694cda4b4d329c881">GeographicLib::MagneticModel</a>
-</li>
-<li>MinTime()
-: <a class="el" href="classGeographicLib_1_1MagneticModel.html#a1e8624990112edc3c6503c9c9acb9309">GeographicLib::MagneticModel</a>
-</li>
-<li>mmx()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2a1ff83503433c64bd4399689a3e40f6">GeographicLib::SphericalEngine::coeff</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x6e.html b/doc/html/functions_func_0x6e.html
deleted file mode 100644
index 336fe02..0000000
--- a/doc/html/functions_func_0x6e.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li class="current"><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>N()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a38ab91101bb639963e094327a22fed59">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>NaN()
-: <a class="el" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">GeographicLib::Math</a>
-</li>
-<li>nauticalmile()
-: <a class="el" href="classGeographicLib_1_1Constants.html#afedc242aa3ee9b3bf9c72d6d81fc6740">GeographicLib::Constants</a>
-</li>
-<li>nmx()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a96467118f9c16c16259d4fbbed3917ff">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>NormalGravity()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a55f749c3bb3e9d19626105041bf1b6fb">GeographicLib::NormalGravity</a>
-</li>
-<li>Northing()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#ac0202def9c16ce856f62485b5c249083">GeographicLib::GeoCoords</a>
-</li>
-<li>Northp()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a5bcf16f97750a6be77f72d50e304a007">GeographicLib::GeoCoords</a>
-</li>
-<li>num()
-: <a class="el" href="classGeographicLib_1_1Utility.html#aa35f1f83c0543558a79b3cf42ddf50c8">GeographicLib::Utility</a>
-</li>
-<li>nummatch()
-: <a class="el" href="classGeographicLib_1_1Utility.html#ad0d89bfe63814bab5312306fe3ac2b43">GeographicLib::Utility</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x6f.html b/doc/html/functions_func_0x6f.html
deleted file mode 100644
index fe2586a..0000000
--- a/doc/html/functions_func_0x6f.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li class="current"><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
-<li>Offset()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#ac798950a643e4286aa8d3bb8cd9b0815">GeographicLib::Geoid</a>
-</li>
-<li>operator!=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a4102ce7aac36753c2b0390c4fc951a42">GeographicLib::Accumulator</a>
-</li>
-<li>operator()()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a1a2b7ac3fd3b067a1c9930cb02a102b2">GeographicLib::Accumulator</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#a88a0726718baa7b457c77b5681fabb0a">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a5046d787c241c5216cfeb0062673cbd7">GeographicLib::SphericalHarmonic</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#a43098674b6bb823ccbac8908a7831234">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#accb63bfbbadae10af79b3a3028a3045a">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#ac732f25af07eee71ad0ca288a2e86fbd">GeographicLib::SphericalHarmonic1</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a48f85ac41417815e6735ff5aa7d74155">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#a8e39d83fcbed23df36ef4fefe2a86420">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#a3bb5740c3a38a77caeb5eabd54c77cbc">GeographicLib::Geoid</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a762d48fc2c3dc902859286de4df7672c">GeographicLib::SphericalHarmonic2</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a8669d47d20b03e9185d358440d3da9b1">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1Accumulator.html#af74ec2f9a77fcc82819111e6bb87b375">GeographicLib::Accumulator</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#a48d2327412e0c674285ff6bb85440054">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#ac715ae0394bd7f8c23288f80c406e5bc">GeographicLib::MagneticCircle</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a550eb1739712fbbae1a167c2559d6dbc">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#aa15c408a0ff4cf17575e62edfeae77a6">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1MagneticModel.html#a11fed1ca7a45947f6f43f6ba7897250f">GeographicLib::MagneticModel</a>
-, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a42480d85a81238f612a6178410bf97ff">GeographicLib::SphericalHarmonic</a>
-</li>
-<li>operator*=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a2b0bc40e9722e1ffac89ecfeb601fb23">GeographicLib::Accumulator</a>
-</li>
-<li>operator+=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#adc56d12f08b8a61b19dd78ce532285d4">GeographicLib::Accumulator</a>
-</li>
-<li>operator-=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#abf3e43f38791c48d1fa09e4fb569827b">GeographicLib::Accumulator</a>
-</li>
-<li>operator<()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a9a7299c02ec8805d951309fdae60e57f">GeographicLib::Accumulator</a>
-</li>
-<li>operator<=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#afb83bdb43b78e20f76e2a7e5e2440386">GeographicLib::Accumulator</a>
-</li>
-<li>operator=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a9cd31c9155208a2de0fdd9810f2a9dd8">GeographicLib::Accumulator</a>
-</li>
-<li>operator==()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#a6ea5d769a36e01327f3633b39cd38290">GeographicLib::Accumulator</a>
-</li>
-<li>operator>()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#af0e4a35c09b0b179ebf1e2f6912ddeb3">GeographicLib::Accumulator</a>
-</li>
-<li>operator>=()
-: <a class="el" href="classGeographicLib_1_1Accumulator.html#aeafc5d10683648d37fe18ec75725196b">GeographicLib::Accumulator</a>
-</li>
-<li>OriginLatitude()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#ad6bcef7e2dcc2992831e101bf0b05fa8">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7c589335b43b2274d3a68c0f68f29d77">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ad780e943e9a9ba168b350d809d0bfe08">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>OriginLongitude()
-: <a class="el" href="classGeographicLib_1_1OSGB.html#a4eb3b20734af47c9661d40581555c345">GeographicLib::OSGB</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x70.html b/doc/html/functions_func_0x70.html
deleted file mode 100644
index 4f08c58..0000000
--- a/doc/html/functions_func_0x70.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li class="current"><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>ParseLine()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a96252f445a912b77517bff04d4d6ea74">GeographicLib::Utility</a>
-</li>
-<li>Phi()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a80477ccafa1049964ee0cef40ae2eea6">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#af0f50fd88d8b647a1b7bb209a4cfae0f">GeographicLib::NormalGravity</a>
-</li>
-<li>pi()
-: <a class="el" href="classGeographicLib_1_1Math.html#aca1580c771e7019bfe826512fba9b2f1">GeographicLib::Math</a>
-</li>
-<li>PolarGravity()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a3079310d3a7af97ccb50b91be01d5a50">GeographicLib::NormalGravity</a>
-</li>
-<li>PolarStereographic()
-: <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a170d21f9c7a2e922c57fc83a44ea3dfa">GeographicLib::PolarStereographic</a>
-</li>
-<li>PolygonArea()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#a060a1dc499bd079c62f62ed5cad929e5">GeographicLib::PolygonArea</a>
-</li>
-<li>Position()
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a50feb9c64d66b6518c640584d25e9507">GeographicLib::GeodesicLine</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x72.html b/doc/html/functions_func_0x72.html
deleted file mode 100644
index d21bdd1..0000000
--- a/doc/html/functions_func_0x72.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li class="current"><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>readarray()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a23e88040ceb60bd3fe28efc04f9119f8">GeographicLib::Utility</a>
-</li>
-<li>readcoeffs()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a2d545f589894683e7de297c42b7c995a">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>ReferenceEllipsoid()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a0467e44598b65fb403109ba0d0fbf182">GeographicLib::GravityModel</a>
-</li>
-<li>ReferenceMassConstant()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#a4e6b9d48f26544a45c5509a87eb334e7">GeographicLib::GravityModel</a>
-</li>
-<li>Reset()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a0cbbebaa7bb77f91f3f8dbbadfd6532a">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a85b9c15b843cf6a84be08e0cc4de9122">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#af9bdc7088bca547dcc191691b2737759">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1GeoCoords.html#a4a1e0a65a8a344dfe519fcbf25078e37">GeographicLib::GeoCoords</a>
-</li>
-<li>Reverse()
-: <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">GeographicLib::PolarStereographic</a>
-, <a class="el" href="classGeographicLib_1_1OSGB.html#ab804929a4126ed390a40d35e837b4001">GeographicLib::OSGB</a>
-, <a class="el" href="classGeographicLib_1_1MGRS.html#a066b79e78cd85bf4b50df50808bed7e3">GeographicLib::MGRS</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#ac3bd58646dd6c06731a9baadee11f7e5">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#ac34878de3ae995e7d54f0347a1f34118">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a1bffe1259895569e6834a4b1df9b22ab">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a56ff2f371d59e2ca0da8644571706169">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#afccbed660a482ef73d33ad16406ee626">GeographicLib::Gnomonic</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#aeddd854d52064bcb1f068052057edf2c">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#a27a675e995d2c1fdd0ab4c0ab397e065">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a350070780708de5a622d4f4c4757104c">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1CassiniSoldner.html#aea917b790f577026184a0bb262102db4">GeographicLib::CassiniSoldner</a>
-, <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html#a6b86b19f2e1c773e028e386a0f5e00e0">GeographicLib::AzimuthalEquidistant</a>
-, <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a7baa88b38b320d763f6cba3ece4f518d">GeographicLib::LocalCartesian</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a577a9f43be8c1e238a4d56158acf8625">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1Gnomonic.html#a8700d59a1e244f8dd211e344587dfed3">GeographicLib::Gnomonic</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a1907735ce8f5f915a14a5f7a8b3adfea">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#aaf417ae6bed6da324aa03fc96ee0dda4">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a15611aee4e3707e155278bab02403a07">GeographicLib::TransverseMercator</a>
-, <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a871246cba03145512f3f12ceb3e3e3a8">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1UTMUPS.html#ac8cbfd7b15c96b52b876b54ce68f7b4d">GeographicLib::UTMUPS</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a16572cc552eeb24ebf84319cdcd6652e">GeographicLib::PolarStereographic</a>
-</li>
-<li>RMSError()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a207f98316d20a5b9d47846e559c5e2a2">GeographicLib::Geoid</a>
-</li>
-<li>RootTable()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a7fac63262c0a8bb18aee8c962a08d429">GeographicLib::SphericalEngine</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x73.html b/doc/html/functions_func_0x73.html
deleted file mode 100644
index 20a984f..0000000
--- a/doc/html/functions_func_0x73.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li class="current"><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>Scale()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#aafd68e75d223b821abcbf20179c7a9e0">GeographicLib::GeoCoords</a>
-, <a class="el" href="classGeographicLib_1_1Geoid.html#ab2346300c12ff7e70d35e08479ecede1">GeographicLib::Geoid</a>
-</li>
-<li>SetAltZone()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a7782c2d78462bde2ba6277b2b60af8f6">GeographicLib::GeoCoords</a>
-</li>
-<li>SetScale()
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#a0c00022edeb6b67dcd4e00f087b412c4">GeographicLib::AlbersEqualArea</a>
-, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#aac6267f7f970b35043b17e12e4163ff2">GeographicLib::LambertConformalConic</a>
-, <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3f957214eb1d1248277a680e4c4ceed5">GeographicLib::PolarStereographic</a>
-</li>
-<li>sncndn()
-: <a class="el" href="classGeographicLib_1_1EllipticFunction.html#a0b8d63970c4276503d03d4133ee6c321">GeographicLib::EllipticFunction</a>
-</li>
-<li>SphericalAnomaly()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#ac94672db5e450f4394e6df69eda99e69">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#aaf89eb4a9b7266f0aa2ef2c341fc264e">GeographicLib::GravityModel</a>
-</li>
-<li>SphericalHarmonic()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#adb71d28aa60a813ca3384f9c58ef8fa1">GeographicLib::SphericalHarmonic</a>
-</li>
-<li>SphericalHarmonic1()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html#aeb3299ea40b0bedae55fd0a6f0c1fa40">GeographicLib::SphericalHarmonic1</a>
-</li>
-<li>SphericalHarmonic2()
-: <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html#a897f6b15b82812e874a2b0927cfc3912">GeographicLib::SphericalHarmonic2</a>
-</li>
-<li>sq()
-: <a class="el" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">GeographicLib::Math</a>
-</li>
-<li>square_kilometer()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a1956824e4f2b22705d57566229a7c311">GeographicLib::Constants</a>
-</li>
-<li>square_meter()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ab92200b36f9d306a2710738c6d9bc705">GeographicLib::Constants</a>
-</li>
-<li>square_mile()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ab7f473c27ad50da450b4192155cc92f9">GeographicLib::Constants</a>
-</li>
-<li>square_nauticalmile()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a5acf6b2c23d1c9ddf140a6b4e588e88a">GeographicLib::Constants</a>
-</li>
-<li>Ssize()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a98a75827d68247cf5ad1843d9d68b222">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>StandardZone()
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#a62623c295d1b43318a9fa762c3da94ea">GeographicLib::UTMUPS</a>
-</li>
-<li>str()
-: <a class="el" href="classGeographicLib_1_1Utility.html#ae87a7ae2bee75f724907af9f753f03b7">GeographicLib::Utility</a>
-</li>
-<li>SurfaceGravity()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a019541fea3712f8ca73aec8a0b29c71c">GeographicLib::NormalGravity</a>
-</li>
-<li>SurfacePotential()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a5bc3756dd7dbc82c07ef4afd1a182372">GeographicLib::NormalGravity</a>
-</li>
-<li>surveyfoot()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a7faf6e7435791c0a8061296a79c0be08">GeographicLib::Constants</a>
-</li>
-<li>Sv()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine_1_1coeff.html#a4fc7e6c7faf3f5940ee8f3ab28216897">GeographicLib::SphericalEngine::coeff</a>
-</li>
-<li>swab()
-: <a class="el" href="classGeographicLib_1_1Math.html#aec7f95c2bb99422f1f047cb628a232f8">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x74.html b/doc/html/functions_func_0x74.html
deleted file mode 100644
index 4f5ecf8..0000000
--- a/doc/html/functions_func_0x74.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li class="current"><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>T()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#afae12e4bbf17809f1dd6c32b41dfde03">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a690657dedac8ccea22052eda2829fea3">GeographicLib::GravityModel</a>
-</li>
-<li>TestCompute()
-: <a class="el" href="classGeographicLib_1_1PolygonArea.html#ac46ac5567223b3db2ee11e6c4f72c257">GeographicLib::PolygonArea</a>
-</li>
-<li>ThreadSafe()
-: <a class="el" href="classGeographicLib_1_1Geoid.html#a286e947c13592f21e45cbdd404b283c7">GeographicLib::Geoid</a>
-</li>
-<li>Time()
-: <a class="el" href="classGeographicLib_1_1MagneticCircle.html#a44783c9e44f16bbd48cc5061b30ce8e9">GeographicLib::MagneticCircle</a>
-</li>
-<li>TransverseMercator()
-: <a class="el" href="classGeographicLib_1_1TransverseMercator.html#a9a4074c9d0ea35f0ebfc9c9f73bd3183">GeographicLib::TransverseMercator</a>
-</li>
-<li>TransverseMercatorExact()
-: <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a72ffcc89eee6f30a6d1f4d061518a6f1">GeographicLib::TransverseMercatorExact</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x75.html b/doc/html/functions_func_0x75.html
deleted file mode 100644
index eed4e5c..0000000
--- a/doc/html/functions_func_0x75.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li class="current"><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
-<li>U()
-: <a class="el" href="classGeographicLib_1_1GravityModel.html#af368d4f9015e076e5cc57ad87b8a185f">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#a258290ade5fd46c42fdc4199683cf563">GeographicLib::NormalGravity</a>
-</li>
-<li>UPS_k0()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a49d415263ee320d1a63a857f784439a3">GeographicLib::Constants</a>
-</li>
-<li>UTM_k0()
-: <a class="el" href="classGeographicLib_1_1Constants.html#ab5cc487ab160c0a213fdf8e12cde198a">GeographicLib::Constants</a>
-</li>
-<li>UTMShift()
-: <a class="el" href="classGeographicLib_1_1UTMUPS.html#abd70d3f90f5c79a09bdd217b67e6729b">GeographicLib::UTMUPS</a>
-</li>
-<li>UTMUPSRepresentation()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a056efc42fe4c653aad40be5d5b865ea3">GeographicLib::GeoCoords</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x76.html b/doc/html/functions_func_0x76.html
deleted file mode 100644
index 9af0378..0000000
--- a/doc/html/functions_func_0x76.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li class="current"><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
-<li>V()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#aba5f3ec3cb7b620e13dafa6fa4e48ae0">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a7aec9ecfa959b257dd0a965331598368">GeographicLib::GravityModel</a>
-</li>
-<li>V0()
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#aa656e36306bc396ac6d32dcdfc2069a2">GeographicLib::NormalGravity</a>
-</li>
-<li>Value()
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a1157f59596dd15bf0a21b6a7fb99630b">GeographicLib::SphericalEngine</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x77.html b/doc/html/functions_func_0x77.html
deleted file mode 100644
index 77a1d44..0000000
--- a/doc/html/functions_func_0x77.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li class="current"><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>W()
-: <a class="el" href="classGeographicLib_1_1GravityCircle.html#a04ae0659ec2eb766ae360d3bcbe332c4">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#ab6767f3833caa34095a7ef83c43a46f0">GeographicLib::GravityModel</a>
-</li>
-<li>WGS84_a()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a53f39f52837f47490fbdf7332a37dd8b">GeographicLib::Constants</a>
-</li>
-<li>WGS84_f()
-: <a class="el" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">GeographicLib::Constants</a>
-</li>
-<li>WGS84_GM()
-: <a class="el" href="classGeographicLib_1_1Constants.html#af7806106d7bd289bb63d5290e79c87a6">GeographicLib::Constants</a>
-</li>
-<li>WGS84_omega()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a98c114d5a6ca42d3e4ece8595a0c2180">GeographicLib::Constants</a>
-</li>
-<li>WGS84_r()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a199810de7ff3351be6473d20ef045789">GeographicLib::Constants</a>
-</li>
-<li>writearray()
-: <a class="el" href="classGeographicLib_1_1Utility.html#a0621066e4aa146a2c100802375e70389">GeographicLib::Utility</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x79.html b/doc/html/functions_func_0x79.html
deleted file mode 100644
index c68f9ff..0000000
--- a/doc/html/functions_func_0x79.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li class="current"><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
-<li>yard()
-: <a class="el" href="classGeographicLib_1_1Constants.html#a00057328caa45bc216d18243786920c2">GeographicLib::Constants</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_func_0x7a.html b/doc/html/functions_func_0x7a.html
deleted file mode 100644
index 6cae718..0000000
--- a/doc/html/functions_func_0x7a.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="functions_func.html#index_a"><span>a</span></a></li>
-      <li><a href="functions_func_0x63.html#index_c"><span>c</span></a></li>
-      <li><a href="functions_func_0x64.html#index_d"><span>d</span></a></li>
-      <li><a href="functions_func_0x65.html#index_e"><span>e</span></a></li>
-      <li><a href="functions_func_0x66.html#index_f"><span>f</span></a></li>
-      <li><a href="functions_func_0x67.html#index_g"><span>g</span></a></li>
-      <li><a href="functions_func_0x68.html#index_h"><span>h</span></a></li>
-      <li><a href="functions_func_0x69.html#index_i"><span>i</span></a></li>
-      <li><a href="functions_func_0x6b.html#index_k"><span>k</span></a></li>
-      <li><a href="functions_func_0x6c.html#index_l"><span>l</span></a></li>
-      <li><a href="functions_func_0x6d.html#index_m"><span>m</span></a></li>
-      <li><a href="functions_func_0x6e.html#index_n"><span>n</span></a></li>
-      <li><a href="functions_func_0x6f.html#index_o"><span>o</span></a></li>
-      <li><a href="functions_func_0x70.html#index_p"><span>p</span></a></li>
-      <li><a href="functions_func_0x72.html#index_r"><span>r</span></a></li>
-      <li><a href="functions_func_0x73.html#index_s"><span>s</span></a></li>
-      <li><a href="functions_func_0x74.html#index_t"><span>t</span></a></li>
-      <li><a href="functions_func_0x75.html#index_u"><span>u</span></a></li>
-      <li><a href="functions_func_0x76.html#index_v"><span>v</span></a></li>
-      <li><a href="functions_func_0x77.html#index_w"><span>w</span></a></li>
-      <li><a href="functions_func_0x79.html#index_y"><span>y</span></a></li>
-      <li class="current"><a href="functions_func_0x7a.html#index_z"><span>z</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
-<li>Zone()
-: <a class="el" href="classGeographicLib_1_1GeoCoords.html#a3ce32259b53a9ea9a5346d9e418ad6a5">GeographicLib::GeoCoords</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html
deleted file mode 100644
index 4466960..0000000
--- a/doc/html/functions_rela.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Related Functions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li class="current"><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- <ul>
-<li>CircularEngine
-: <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a0c689dbf7b6bf2fb4cffb109085b1d3b">GeographicLib::SphericalEngine</a>
-</li>
-<li>Geodesic
-: <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a088c26ef9558197029bbeb317f3104c0">GeographicLib::GeodesicLine</a>
-</li>
-<li>GeodesicLine
-: <a class="el" href="classGeographicLib_1_1Geodesic.html#ac4a8bd684285e00b12427c052697a106">GeographicLib::Geodesic</a>
-</li>
-<li>GravityCircle
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#a243c90a7f9bf3f7aa96877a4b0667a89">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1GravityModel.html#a243c90a7f9bf3f7aa96877a4b0667a89">GeographicLib::GravityModel</a>
-, <a class="el" href="classGeographicLib_1_1CircularEngine.html#a243c90a7f9bf3f7aa96877a4b0667a89">GeographicLib::CircularEngine</a>
-</li>
-<li>GravityModel
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#ada1db1d9f480d8044753ed869c995519">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1GravityCircle.html#ada1db1d9f480d8044753ed869c995519">GeographicLib::GravityCircle</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#ada1db1d9f480d8044753ed869c995519">GeographicLib::Geocentric</a>
-</li>
-<li>LocalCartesian
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#a8904c4eadcf94e3803743e8cd9ffbc1c">GeographicLib::Geocentric</a>
-</li>
-<li>MagneticCircle
-: <a class="el" href="classGeographicLib_1_1CircularEngine.html#a7294f6a1cc932f8fd1562a15602e9e86">GeographicLib::CircularEngine</a>
-, <a class="el" href="classGeographicLib_1_1Geocentric.html#a7294f6a1cc932f8fd1562a15602e9e86">GeographicLib::Geocentric</a>
-</li>
-<li>MagneticModel
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#af6619ebe4c078705fc49a0d9f950b431">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1MagneticCircle.html#af6619ebe4c078705fc49a0d9f950b431">GeographicLib::MagneticCircle</a>
-</li>
-<li>NormalGravity
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#ae7298549755c5982fe1be124d6631561">GeographicLib::Geocentric</a>
-</li>
-<li>SphericalEngine
-: <a class="el" href="classGeographicLib_1_1CircularEngine.html#ab89064f7f3c32a745c72d8c3188f7485">GeographicLib::CircularEngine</a>
-</li>
-<li>SphericalHarmonic
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#ae0383f6b1ce413d48e258750c3177f21">GeographicLib::Geocentric</a>
-</li>
-<li>SphericalHarmonic1
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#accac7c5b7843a1e4fb2baf0c83cc24f0">GeographicLib::Geocentric</a>
-</li>
-<li>SphericalHarmonic2
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#a3eabc426b6edd718324c791ef3536360">GeographicLib::Geocentric</a>
-</li>
-<li>UTMUPS
-: <a class="el" href="classGeographicLib_1_1MGRS.html#a6a0cfac496024eaf645c7a2f98a02a75">GeographicLib::MGRS</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_type.html b/doc/html/functions_type.html
deleted file mode 100644
index 8196146..0000000
--- a/doc/html/functions_type.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Typedefs</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li class="current"><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- <ul>
-<li>extended
-: <a class="el" href="classGeographicLib_1_1Math.html#a436f350a6a9539e176dda19d0e4811f8">GeographicLib::Math</a>
-</li>
-<li>real
-: <a class="el" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">GeographicLib::Math</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html
deleted file mode 100644
index eb72a85..0000000
--- a/doc/html/functions_vars.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Class Members - Variables</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="annotated.html"><span>Class List</span></a></li>
-      <li class="current"><a href="functions.html"><span>Class Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="functions.html"><span>All</span></a></li>
-      <li><a href="functions_func.html"><span>Functions</span></a></li>
-      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
-      <li><a href="functions_type.html"><span>Typedefs</span></a></li>
-      <li><a href="functions_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
-      <li><a href="functions_rela.html"><span>Related Functions</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- <ul>
-<li>AzimuthalEqualAreaNorth
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae65fcb68843b36d206751527ebd08f44">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>AzimuthalEqualAreaSouth
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#aff0ff4e2f162107bd136310b44444cc1">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>bigendian
-: <a class="el" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">GeographicLib::Math</a>
-</li>
-<li>CylindricalEqualArea
-: <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html#ae643f7f82f5864f95da4cb14571ccf55">GeographicLib::AlbersEqualArea</a>
-</li>
-<li>GRS80
-: <a class="el" href="classGeographicLib_1_1NormalGravity.html#a78cf6878967ad52adadbe06b5f7c4146">GeographicLib::NormalGravity</a>
-</li>
-<li>Mercator
-: <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a7fbb6973b77593245db52c9759740f9a">GeographicLib::LambertConformalConic</a>
-</li>
-<li>UPS
-: <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">GeographicLib::PolarStereographic</a>
-</li>
-<li>UTM
-: <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html#a68668637e754201897bddb82baaf634b">GeographicLib::TransverseMercatorExact</a>
-, <a class="el" href="classGeographicLib_1_1TransverseMercator.html#aa25b52e35bc54c368e6c8b17e02b0542">GeographicLib::TransverseMercator</a>
-</li>
-<li>WGS84
-: <a class="el" href="classGeographicLib_1_1Geocentric.html#a4762989f3d1d30bca597f644e8b2b52e">GeographicLib::Geocentric</a>
-, <a class="el" href="classGeographicLib_1_1NormalGravity.html#a70c328a95e05964180106d89c2583b78">GeographicLib::NormalGravity</a>
-, <a class="el" href="classGeographicLib_1_1Geodesic.html#ae918bb7e1555fba38483449cbbac0ca1">GeographicLib::Geodesic</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/geocentric.html b/doc/html/geocentric.html
deleted file mode 100644
index 91ede09..0000000
--- a/doc/html/geocentric.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geocentric coordinates</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geocentric coordinates </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="transversemercator.html">Transverse Mercator projection</a>. Forward to <a class="el" href="old.html">Old versions</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>The implementation of <a class="el" href="classGeographicLib_1_1Geocentric.html#a1907735ce8f5f915a14a5f7a8b3adfea">GeographicLib::Geocentric::Reverse</a> is adapted from</p>
-<ul>
-<li>H. Vermeille, <a href="http://dx.doi.org/10.1007/s00190-002-0273-6">Direct transformation from geocentric coordinates to geodetic coordinates</a>, J. Geodesy 76, 451–454 (2002).</li>
-</ul>
-<p>This provides a closed-form solution but can't directly be applied close to the center of the earth. Several changes have been made to remove this restriction and to improve the numerical accuracy. Now the method is accurate for all inputs (even if <em>h</em> is infinite). The changes are described in Appendix B of</p>
-<ul>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1102.1215v1">Geodesics on an ellipsoid of revolution</a>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.</li>
-</ul>
-<p>The problems encountered near the center of the ellipsoid are:</p>
-<ul>
-<li>There's a potential division by zero in the definition of <em>s</em>. The equations are easily reformulated to avoid this problem.</li>
-<li><em>t</em><sup>3</sup> may be negative. This is OK; we just take the real root.</li>
-<li>The solution for <em>t</em> may be complex. However this leads to 3 real roots for <em>u</em>/<em>r</em>. It's then just a matter of picking the one that computes the geodetic result which minimizes |<em>h|</em> and which avoids large round-off errors.</li>
-<li>Some of the equations result in a large loss of accuracy due to subtracting nearly equal quantities. E.g., <em>k=</em> sqrt(<em>u</em> + <em>v</em> + <em>w</em><sup>2</sup>) - <em>w</em> is inaccurate if <em>u</em> + <em>v</em> is small; we can fix this by writing <em>k</em> = (<em>u</em> + <em>v</em>)/(sqrt(<em>u</em> + <em>v</em> + <em>w</em><sup>2</sup>) + <em>w</em>).</li>
-</ul>
-<p>The error is computed as follows. Write a version of Geocentric::WGS84.Forward which uses long doubles (including using long doubles for the WGS84 parameters). Generate random (long double) geodetic coordinates (<em>lat0</em>, <em>lon0</em>, <em>h0</em>) and use the "long double" WGS84.Forward to obtain the corresponding (long double) geocentric coordinates (<em>x0</em>, <em>y0</em>, <em>z0</em>). [We restrict <em>h0</em> so that <em>h0</em> >= - <em>a</em> (1 - <em>e</em><sup>2</s [...]
-<p>Apply the double version of WGS84.Reverse to (<em>x0</em>, <em>y0</em>, <em>z0</em>) to compute the approximate geodetic coordinates (<em>lat1</em>, <em>lon1</em>, <em>h1</em>). Convert (<em>lat1</em> - <em>lat0</em>, <em>lon1</em> - <em>lon0</em>) to a distance, <em>ds</em>, on the surface of the ellipsoid and define <em>err</em> = hypot(<em>ds</em>, <em>h1</em> - <em>h0</em>). For |<em>h0|</em> < 5000 km, we have <em>err</em> < 7 nm (7 nanometers).</p>
-<p>This methodology is not very useful very far from the globe, because the absolute errors in the approximate geodetic height become large, or within 50 km of the center of the earth, because of errors in computing the approximate geodetic latitude. To illustrate the second issue, the maximum value of <em>err</em> for <em>h0</em> < 0 is about 80 mm. The error is maximum close to the circle given by geocentric coordinates satisfying hypot(<em>x</em>, <em>y</em>) = <em>a</em> <em>e</em [...]
-<p>To obtain a practical measure of the error for the general case we define</p>
-<ul>
-<li><em>err</em><sub>h</sub> = |<em>h1</em> - <em>h0|</em> / max(1, <em>h0</em> / <em>a</em>)</li>
-<li>for <em>h0</em> > 0, <em>err</em><sub>out</sub> = <em>ds</em> </li>
-<li>for <em>h0</em> < 0, apply the long double version of WGS84.Forward to (<em>lat1</em>, <em>lon1</em>, <em>h1</em>) to give (<em>x1</em>, <em>y1</em>, <em>z1</em>) and compute <em>err</em><sub>in</sub> = hypot(<em>x1</em> - <em>x0</em>, <em>y1</em> - <em>y0</em>, <em>z1</em> - <em>z0</em>).</li>
-</ul>
-<p>We then find <em>err</em><sub>h</sub> < 8 nm, <em>err</em><sub>out</sub> < 4 nm, and <em>err</em><sub>in</sub> < 7 nm. (1 nm = 1 nanometer.)</p>
-<p>The testing has been confined to the WGS84 ellipsoid. The method will work for all ellipsoids used in terrestrial geodesy. However, the central region, which leads to multiple real roots for the cubic equation in Reverse, pokes outside the ellipsoid (at the poles) for ellipsoids with <em>e</em> > 1/sqrt(2). Reverse has not been analyzed for this case. Similarly ellipsoids which are very nearly spherical near yield inaccurate results due to underflow; in the other hand, the case of  [...]
-<p>Other comparable methods are K. M. Borkowski, <a href="http://dx.doi.org/10.1007/BF00643807">Transformation of geocentric to geodetic coordinates without approximations</a>, Astrophys. Space Sci. 139, 1–4 (1987) (<a href="http://dx.doi.org/10.1007/BF00656995">erratum</a>) and T. Fukushima, <a href="http://dx.doi.org/10.1007/s001900050271">Fast transform from geocentric to geodetic coordinates</a>, J. Geodesy 73, 603–610 (2003). However the choice of independent variables i [...]
-<center> Back to <a class="el" href="transversemercator.html">Transverse Mercator projection</a>. Forward to <a class="el" href="old.html">Old versions</a>. Up to <a class="el" href="index.html#contents">Contents</a>.</center><center></center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/geod.mac b/doc/html/geod.mac
deleted file mode 100644
index 3a7d406..0000000
--- a/doc/html/geod.mac
+++ /dev/null
@@ -1,581 +0,0 @@
-/*
-
-Compute the series expansions for the spheroidal geodesic problem.
-
-Written by Charles Karney <charles at karney.com>
-http://geographiclib.sourceforge.net/
-
-$Id: 35d5f547992b5bd4e6a53ef7060f6fbfc23b2e25 $
-
-References:
-
-   Charles F. F. Karney,
-   Geodesics on an ellipsoid of revolution, Feb. 2011.
-   preprint http://arxiv.org/abs/1102.1215
-   resource page http://geographiclib.sf.net/geod.html
-
-   Charles F. F. Karney,
-   Algorithms for geodesics, Sept. 2011.
-   preprint http://arxiv.org/abs/1109.4448
-
-There are 4 sections in this file
-
-(1) Functions to compute the expansions
-(2) Functions to print C++ code
-(3) Functions to display the results
-(4) Calls to the above.
-
-Edit the section at the end, to modify what is done.  As distributed
-this code computes the 8th order series.  This takes less that 10 secs.
-To run the code, start Maxima and enter
-
-  load("geod.mac")$
-
-*/
-
-/* EXPANSIONS FOR INTEGRALS */
-
-taylordepth:5$
-ataylor(expr,var,ord):=expand(ratdisrep(taylor(expr,var,0,ord)))$
-jtaylor(expr,var1,var2,ord):=expand(subst([zz=1],
-    ratdisrep(taylor(subst([var1=zz*var1,var2=zz*var2],expr),zz,0,ord))))$
-
-/*
-
-Express
-
-    I1 = integrate( sqrt(1+k2*sin(sigma1)^2), sigma1, 0, sigma )
-
-as a series
-
-    A1 * ( sigma + sum(C1[l] * sin(2*l*sigma), l, 1, maxpow) )
-
-valid for k2 small.  It is convenient to write k2 = 4 * eps / (1 - eps)^2
-and to expand (1 - eps) * I1 retaining terms up to order eps^maxpow
-in A1 and C1[l].  This leads to a series where half the terms drop out.
-
-*/
-
-computeI1(maxpow):=block([sintegrand,sintegrandexp,s,sigma,tau1,k2,eps],
-  sintegrand:sqrt(1+k2*sin(sigma)^2),
-/* Multiplicative factor 1/(1-eps) */
-  sintegrandexp:ataylor(
-      (1-eps)*subst([k2=4*eps/(1-eps)^2],sintegrand),
-      eps,maxpow),
-  s:trigreduce(integrate(sintegrandexp,sigma)),
-  s:s-subst(sigma=0,s),
-  A1:expand(subst(sigma=2*%pi,s)/(2*%pi)),
-  tau1:ataylor(s/A1,eps,maxpow),
-  for i:1 thru maxpow do C1[i]:coeff(tau1,sin(2*i*sigma)),
-  if expand(tau1-sigma-sum(C1[i]*sin(2*i*sigma),i,1,maxpow)) # 0
-  then error("left over terms in B1"),
-  A1:A1/(1-eps),
-  'done)$
-
-/*
-
-Write
-
-    tau1 = sigma + sum(C1[l] * sin(2*l*sigma), l, 1, maxpow)
-
-and revert this to obtain
-
-    sigma = tau1 + sum(C1p[l] * sin(2*tau1), l, 1, maxpow)
-
-retaining terms up to order eps^maxpow in tp[l].
-
-Write
-
-  tau = sigma + B1(sigma)
-  sigma = tau + B1p(tau)
-  B1(sigma) = sum(C1[l] * sin(2*l*sigma), l, 1, inf)
-  B1p(tau) = sum(C1p[l] * sin(2*tau), l, 1, inf)
-
-Then the Lagrange Inversion Theorem
-
-   J. L. Lagrange, Nouvelle methode pour resoudre les equations
-   litterales par le moyen des series, Mem. de l'Acad. Roy. des Sciences
-   de Berlin 24, 251-326 (1768, publ. 1770), Sec. 16,
-   http://books.google.com/books?id=YywPAAAAIAAJ&pg=PA25
-
-gives
-
-  B1p(tau) = sum( (-1)^n/n! * diff( B1(tau)^n, tau, n-1 ),
-                         n, 1, inf)
-
-Call this after computeI1(maxpow)$
-
-*/
-
-revertI1(maxpow):=block([tau,eps,tauacc:1,sigacc:0],
-  for n:1 thru maxpow do (
-    tauacc:trigreduce(ataylor(
-          -sum(C1[j]*sin(2*j*tau),j,1,maxpow-n+1)*tauacc/n,
-          eps,maxpow)),
-    sigacc:sigacc+expand(diff(tauacc,tau,n-1))),
-  for i:1 thru maxpow do C1p[i]:coeff(sigacc,sin(2*i*tau)),
-  if expand(sigacc-sum(C1p[i]*sin(2*i*tau),i,1,maxpow)) # 0
-  then error("left over terms in B1p"),
-  'done)$
-
-/*
-
-Express
-
-    I2 = integrate( 1/sqrt(1+k2*sin(sigma1)^2), sigma1, 0, sigma )
-
-as a series
-
-    A2 * ( sigma + sum(C2[l] * sin(2*l*sigma), l, 1, maxpow) )
-
-valid for k2 small.  It is convenient to write k2 = 4 * eps / (1 - eps)^2
-and to expand 1/(1 - eps) * I2 retaining terms up to order eps^maxpow
-in A2 and C2[l].  This leads to a series where half the terms drop out.
-
-*/
-
-computeI2(maxpow):=block([sintegrand,sintegrandexp,s,sigma,tau1,k2,eps],
-  sintegrand:1/sqrt(1+k2*sin(sigma)^2),
-/* Multiplicative factor (1-eps) */
-  sintegrandexp:ataylor(
-      1/(1-eps)*subst([k2=4*eps/(1-eps)^2],sintegrand),
-      eps,maxpow),
-  s:trigreduce(integrate(sintegrandexp,sigma)),
-  s:s-subst(sigma=0,s),
-  A2:expand(subst(sigma=2*%pi,s)/(2*%pi)),
-  tau1:ataylor(s/A2,eps,maxpow),
-  for i:1 thru maxpow do C2[i]:coeff(tau1,sin(2*i*sigma)),
-  if expand(tau1-sigma-sum(C2[i]*sin(2*i*sigma),i,1,maxpow)) # 0
-  then error("left over terms in B2"),
-  A2:A2*(1-eps),
-  'done)$
-
-/*
-
-Express
-
-    I3 = integrate( (2-f)/(1+(1-f)*sqrt(1+k2*sin(sigma1)^2)), sigma1, 0, sigma )
-
-as a series
-
-    A3 * ( sigma + sum(C3[l] * sin(2*l*sigma), l, 1, maxpow-1) )
-
-valid for f and k2 small.  It is convenient to write k2 = 4 * eps / (1 -
-eps)^2 and f = 2*n/(1+n) and expand in eps and n.  This procedure leads
-to a series where the coefficients of eps^j are terminating series in n.
-
-*/
-
-computeI3(maxpow):=block([int,intexp,dlam,eta,del,eps,nu,f,z,n],
-  maxpow:maxpow-1,
-  int:subst([k2=4*eps/(1-eps)^2],
-    (2-f)/(1+(1-f)*sqrt(1+k2*sin(sigma)^2))),
-  int:subst([f=2*n/(1+n)],int),
-  intexp:jtaylor(int,n,eps,maxpow),
-  dlam:trigreduce(integrate(intexp,sigma)),
-  dlam:dlam-subst(sigma=0,dlam),
-  A3:expand(subst(sigma=2*%pi,dlam)/(2*%pi)),
-  eta:jtaylor(dlam/A3,n,eps,maxpow),
-  A3:jtaylor(A3,n,eps,maxpow),
-  for i:1 thru maxpow do C3[i]:coeff(eta,sin(2*i*sigma)),
-  if expand(eta-sigma-sum(C3[i]*sin(2*i*sigma),i,1,maxpow)) # 0
-  then error("left over terms in B3"),
-  'done)$
-
-/*
-
-Express
-
-    I4 = -integrate( (t(ep2) - t(k2*sin(sigma1)^2)) / (ep2 - k2*sin(sigma1)^2)
-      * sin(sigma1)/2, sigma1, pi/2, sigma )
-    where
-      t(x) = sqrt(1+1/x)*asinh(sqrt(x)) + x
-
-as a series
-
-    sum(C4[l] * cos((2*l+1)*sigma), l, 0, maxpow-1) )
-
-valid for ep2 and k2 small.
-
-*/
-
-computeI4(maxpow):=block([int,t,intexp,area, x,ep2,k2],
-  maxpow:maxpow-1,
-  t : sqrt(1+1/x) * asinh(sqrt(x)) + x,
-  int:-(tf(ep2) - tf(k2*sin(sigma)^2)) / (ep2 - k2*sin(sigma)^2)
-  * sin(sigma)/2,
-  int:subst([tf(ep2)=subst([x=ep2],t),
-    tf(k2*sin(sigma)^2)=subst([x=k2*sin(sigma)^2],t)],
-    int),
-  int:subst([abs(sin(sigma))=sin(sigma)],int),
-  intexp:jtaylor(int,ep2,k2,maxpow),
-  area:trigreduce(integrate(intexp,sigma)),
-  area:expand(area-subst(sigma=%pi/2,area)),
-  for i:0 thru maxpow do C4[i]:coeff(area,cos((2*i+1)*sigma)),
-  if expand(area-sum(C4[i]*cos((2*i+1)*sigma),i,0,maxpow)) # 0
-  then error("left over terms in I4"),
-  'done)$
-
-/* Call all of the above */
-computeall():=(
-  computeI1(maxpow), revertI1(maxpow),
-  computeI2(maxpow), computeI3(maxpow), computeI4(maxpow))$
-
-/* FORMAT FOR C++ */
-
-/* If nA1, nC1, nC1p, nA2, nA3, nC3 are compile-time constants
-indicating the required order, the compiler will include only the needed
-code.  STATIC_ASSERT is a macro to cause a compile-time error if the
-assertion is false.  */
-
-codeA1(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The scale factor A1-1 = mean value of I1-1
-  Math::real Geodesic::A1m1f(real eps) throw() {
-    real
-      eps2 = sq(eps),
-      t;
-    switch (nA1/2) {"),
-  for n:0 thru entier(maxpow/2) do block([
-    q:horner(ataylor(subst([eps=sqrt(eps2)],A1*(1-eps)-1),eps2,n)),
-    linel:600],
-    print(concat(tab2,"case ",string(n),":")),
-    print(concat(tab3,"t = ",string(q),";")),
-    print(concat(tab3,"break;"))),
-  print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nA1 >= ",string(0),
-      " && nA1 <= ",string(maxpow),", \"Bad value of nA1\");")),
-  print(concat(tab3,"t = 0;")),
-  print("    }
-    return (t + eps) / (1 - eps);
-  }"),
-'done)$
-
-codeC1(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The coefficients C1[l] in the Fourier expansion of B1
-  void Geodesic::C1f(real eps, real c[]) throw() {
-    real
-      eps2 = sq(eps),
-      d = eps;
-    switch (nC1) {"),
-  for n:0 thru maxpow do (
-    print(concat(tab2,"case ",string(n),":")),
-    for m:1 thru n do block([q:d*horner(
-        subst([eps=sqrt(eps2)],ataylor(C1[m],eps,n)/eps^m)),
-      linel:600],
-      if m>1 then print(concat(tab3,"d *= eps;")),
-      print(concat(tab3,"c[",string(m),"] = ",string(q),";"))),
-    print(concat(tab3,"break;"))),
-  print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC1 >= ",string(0),
-      " && nC1 <= ",string(maxpow),", \"Bad value of nC1\");")),
-  print("    }
-  }"),
-'done)$
-
-codeC1p(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The coefficients C1p[l] in the Fourier expansion of B1p
-  void Geodesic::C1pf(real eps, real c[]) throw() {
-    real
-      eps2 = sq(eps),
-      d = eps;
-    switch (nC1p) {"),
-  for n:0 thru maxpow do (
-    print(concat(tab2,"case ",string(n),":")),
-    for m:1 thru n do block([q:d*horner(
-        subst([eps=sqrt(eps2)],ataylor(C1p[m],eps,n)/eps^m)),
-      linel:600],
-      if m>1 then print(concat(tab3,"d *= eps;")),
-      print(concat(tab3,"c[",string(m),"] = ",string(q),";"))),
-    print(concat(tab3,"break;"))),
-  print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC1p >= ",string(0),
-      " && nC1p <= ",string(maxpow),", \"Bad value of nC1p\");")),
-  print("    }
-  }"),
-'done)$
-
-codeA2(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The scale factor A2-1 = mean value of I2-1
-  Math::real Geodesic::A2m1f(real eps) throw() {
-    real
-      eps2 = sq(eps),
-      t;
-    switch (nA2/2) {"),
-  for n:0 thru entier(maxpow/2) do block([
-    q:horner(ataylor(subst([eps=sqrt(eps2)],A2/(1-eps)-1),eps2,n)),
-    linel:600],
-    print(concat(tab2,"case ",string(n),":")),
-    print(concat(tab3,"t = ",string(q),";")),
-    print(concat(tab3,"break;"))),
-  print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nA2 >= ",string(0),
-      " && nA2 <= ",string(maxpow),", \"Bad value of nA2\");")),
-  print(concat(tab3,"t = 0;")),
-  print("    }
-    return t * (1 - eps) - eps;
-  }"),
-'done)$
-
-codeC2(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The coefficients C2[l] in the Fourier expansion of B2
-  void Geodesic::C2f(real eps, real c[]) throw() {
-    real
-      eps2 = sq(eps),
-      d = eps;
-    switch (nC2) {"),
-  for n:0 thru maxpow do (
-    print(concat(tab2,"case ",string(n),":")),
-    for m:1 thru n do block([q:d*horner(
-        subst([eps=sqrt(eps2)],ataylor(C2[m],eps,n)/eps^m)),
-      linel:600],
-      if m>1 then print(concat(tab3,"d *= eps;")),
-      print(concat(tab3,"c[",string(m),"] = ",string(q),";"))),
-    print(concat(tab3,"break;"))),
-  print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC2 >= ",string(0),
-      " && nC2 <= ",string(maxpow),", \"Bad value of nC2\");")),
-  print("    }
-  }"),
-'done)$
-
-codeA3(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The scale factor A3 = mean value of I3
-  void Geodesic::A3coeff() throw() {
-    switch (nA3) {"),
-  for nn:0 thru maxpow do block(
-    [q:if nn=0 then 0 else
-    jtaylor(subst([n=_n],A3),_n,eps,nn-1),
-    linel:600],
-    print(concat(tab2,"case ",string(nn),":")),
-    for i : 0 thru nn-1 do
-    print(concat(tab3,"_A3x[",i,"] = ",
-        string(horner(coeff(q,eps,i))),";")),
-    print(concat(tab3,"break;"))),
-  print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nA3 >= ",string(0),
-      " && nA3 <= ",string(maxpow),", \"Bad value of nA3\");")),
-  print("    }
-  }"),
-'done)$
-
-codeC3(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The coefficients C3[l] in the Fourier expansion of B3
-  void Geodesic::C3coeff() throw() {
-    switch (nC3) {"),
-  for nn:0 thru maxpow do block([c],
-    print(concat(tab2,"case ",string(nn),":")),
-    c:0,
-    for m:1 thru nn-1 do block(
-      [q:if nn = 0 then 0 else
-      jtaylor(subst([n=_n],C3[m]),_n,eps,nn-1),
-      linel:600],
-      for j:m thru nn-1 do (
-        print(concat(tab3,"_C3x[",c,"] = ",
-            string(horner(coeff(q,eps,j))),";")),
-        c:c+1)
-    ),
-    print(concat(tab3,"break;"))),
-  print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC3 >= ",string(0),
-      " && nC3 <= ",string(maxpow),", \"Bad value of nC3\");")),
-  print("    }
-  }"),
-'done)$
-
-codeC4(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The coefficients C4[l] in the Fourier expansion of I4
-  void Geodesic::C4coeff() throw() {
-    switch (nC4) {"),
-  for nn:0 thru maxpow do block([c],
-    print(concat(tab2,"case ",string(nn),":")),
-    c:0,
-    for m:0 thru nn-1 do block(
-      [q:jtaylor(subst([ep2=_ep2],C4[m]),_ep2,k2,nn-1),
-      linel:600],
-      for j:m thru nn-1 do (
-        print(concat(tab3,"_C4x[",c,"] = ",
-            string(horner(coeff(q,k2,j))),";")),
-        c:c+1)
-    ),
-    print(concat(tab3,"break;"))),
-  print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC3 >= ",string(0),
-      " && nC4 <= ",string(maxpow),", \"Bad value of nC4\");")),
-  print("    }
-  }"),
-'done)$
-
-printcode():=(
-  print(""),
-  print(concat("  // Generated by Maxima on ",timedate())),
-  print(""),
-  codeA1(maxpow),
-  print(""),
-  codeC1(maxpow),
-  print(""),
-  codeC1p(maxpow),
-  print(""),
-  codeA2(maxpow),
-  print(""),
-  codeC2(maxpow),
-  print(""),
-  codeA3(maxpow),
-  print(""),
-  codeC3(maxpow),
-  print(""),
-  codeC4(maxpow))$
-
-/* FORMAT FOR DISPLAY */
-
-dispA1(ord):=block(
-  [tt:ataylor(A1*(1-eps),eps,ord),ttt,linel:600],
-  for j:2 step 2 thru ord do (ttt:coeff(tt,eps,j),
-    print(concat(if j = 2 then "A1 = (1 " else "        ",
-        if ttt>0 then "+ " else "- ",
-        string(abs(ttt)), " * ", string(eps^j),
-        if j=ord or j = ord-1 then ") / (1 - eps);" else ""))))$
-
-dispC1(ord):=for i:1 thru ord do
-block([tt:ataylor(C1[i],eps,ord),ttt,linel:600],
-  print(),
-  for j:i step 2 thru ord do (ttt:coeff(tt,eps,j), print(concat(
-        if j = i then concat("C1[",string(i),"] = ") else "        ",
-        if ttt>0 then "+ " else "- ",
-        string(abs(ttt)), " * ", string(eps^j),
-        if j=ord or j=ord-1 then ";" else ""))))$
-
-dispC1p(ord):=for i:1 thru ord do
-block([tt:ataylor(C1p[i],eps,ord),ttt,linel:600],
-  print(),
-  for j:i step 2 thru ord do (ttt:coeff(tt,eps,j), print(concat(
-        if j = i then concat("C1p[",string(i),"] = ") else "         ",
-        if ttt>0 then "+ " else "- ",
-        string(abs(ttt)), " * ", string(eps^j),
-        if j=ord or j=ord-1 then ";" else ""))))$
-
-dispA2(ord):=block(
-  [tt:ataylor(A2/(1-eps),eps,ord),ttt,linel:600],
-  for j:2 step 2 thru ord do (ttt:coeff(tt,eps,j),
-    print(concat(if j = 2 then "A2 = (1 " else "        ",
-        if ttt>0 then "+ " else "- ",
-        string(abs(ttt)), " * ", string(eps^j),
-        if j=ord or j = ord-1 then ") * (1 - eps);" else ""))))$
-
-dispC2(ord):=for i:1 thru ord do
-block([tt:ataylor(C2[i],eps,ord),ttt,linel:600],
-  print(),
-  for j:i step 2 thru ord do (ttt:coeff(tt,eps,j), print(concat(
-        if j = i then concat("C2[",string(i),"] = ") else "        ",
-        if ttt>0 then "+ " else "- ",
-        string(abs(ttt)), " * ", string(eps^j),
-        if j=ord or j=ord-1 then ";" else ""))))$
-
-dispA3(ord):=(ord:ord-1,block(
-  [tt:jtaylor(A3,n,eps,ord),ttt,t4,linel:600,s],
-  for j:1 thru ord do (ttt:expand(coeff(tt,eps,j)),
-    if ttt # 0 then block([a:taylor(ttt+n^(ord+1),n,0,ord+1),paren,s],
-      paren : is(length(a) > 2),
-      s:if j=1 then "A3 = 1" else "      ",
-      if subst([n=1],part(a,1)) > 0 then s:concat(s," + ")
-      else (s:concat(s," - "), a:-a),
-      if paren then s:concat(s,"("),
-      for k:1 thru length(a)-1 do block([term:part(a,k),nn],
-        nn:subst([n=1],term),
-        term:term/nn,
-        if nn > 0 and k > 1 then s:concat(s," + ")
-        else if nn < 0 then (s:concat(s," - "), nn:-nn),
-        if lopow(term,n) = 0 then s:concat(s,string(nn))
-        else (
-          if nn # 1 then s:concat(s,string(nn)," * "),
-          s:concat(s,string(term))
-          )),
-      if paren then s:concat(s,")"),
-      s:concat(s," * ", string(eps^j)),
-      print(concat(s,if j = ord then ";" else ""))))))$
-
-dispC3(ord):=(ord:ord-1,for i:1 thru ord do
-block([tt:jtaylor(C3[i],eps,n,ord),
-  ttt,t4,linel:600],
-  for j:i thru ord do (
-    ttt:coeff(tt,eps,j),
-    if ttt # 0 then block([a:taylor(ttt+n^(ord+1),n,0,ord+1),paren,s],
-      paren : is(length(a) > 2),
-      s:if j = i then concat("C3[",i,"] = ") else "        ",
-      if subst([n=1],part(a,1)) > 0 then s:concat(s,"+ ")
-      else (s:concat(s,"- "), a:-a),
-      if paren then s:concat(s,"("),
-      for k:1 thru length(a)-1 do block([term:part(a,k),nn],
-        nn:subst([n=1],term),
-        term:term/nn,
-        if nn > 0 and k > 1 then s:concat(s," + ")
-        else if nn < 0 then (s:concat(s," - "), nn:-nn),
-        if lopow(term,n) = 0 then s:concat(s,string(nn))
-        else (
-          if nn # 1 then s:concat(s,string(nn)," * "),
-          s:concat(s,string(term))
-          )),
-      if paren then s:concat(s,")"),
-      s:concat(s," * ", string(eps^j)),
-      print(concat(s,if j = ord then ";" else ""))))))$
-
-dispC4(ord):=(ord:ord-1,for i:0 thru ord do
-block([tt:jtaylor(C4[i],ep2,k2,ord),
-  ttt,t4,linel:600],
-  tt:expand(subst([z=1],tt)),
-  for j:i thru ord do (
-    ttt:coeff(tt,k2,j),
-    if ttt # 0 then block([a:taylor(ttt+ep2^(ord+1),ep2,0,ord+1),paren,s],
-      paren : is(length(a) > 2),
-      s:if j = i then concat("C4[",i,"] = ") else "        ",
-      if subst([ep2=1],part(a,1)) > 0 then s:concat(s,"+ ")
-      else (s:concat(s,"- "), a:-a),
-      if paren then s:concat(s,"("),
-      for k:1 thru length(a)-1 do block([term:part(a,k),nn],
-        nn:subst([ep2=1],term),
-        term:term/nn,
-        if nn > 0 and k > 1 then s:concat(s," + ")
-        else if nn < 0 then (s:concat(s," - "), nn:-nn),
-        if lopow(term,ep2) = 0 then s:concat(s,string(nn))
-        else (
-          if nn # 1 then s:concat(s,string(nn)," * "),
-          s:concat(s,string(term))
-          )),
-      if paren then s:concat(s,")"),
-      if j>0 then s:concat(s," * ", string(k2^j)),
-      print(concat(s,if j = ord then ";" else ""))))))$
-
-dispseries():=(
-  print(""),
-  print(concat("// Generated by Maxima on ",timedate())),
-  print(""),
-  dispA1(maxpow),
-  print(""),
-  dispC1(maxpow),
-  print(""),
-  dispC1p(maxpow),
-  print(""),
-  dispA2(maxpow),
-  print(""),
-  dispC2(maxpow),
-  print(""),
-  dispA3(maxpow),
-  print(""),
-  dispC3(maxpow),
-  print(""),
-  dispC4(maxpow),
-  print(""))$
-
-/* CALL THE FUNCTIONS */
-
-/* Timings for computeall(n)
-   n   time(s)
-   8     4
-  10     8
-  12    16
-  20   128
-  30   771 (13m)
-  */
-maxpow:8$
-computeall()$
-printcode()$
-dispseries()$
diff --git a/doc/html/geodesic.html b/doc/html/geodesic.html
deleted file mode 100644
index 2b44c04..0000000
--- a/doc/html/geodesic.html
+++ /dev/null
@@ -1,393 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geodesics on the ellipsoid</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geodesics on the ellipsoid </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="magnetic.html">Magnetic models</a>. Forward to <a class="el" href="transversemercator.html">Transverse Mercator projection</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p><a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> and <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLin [...]
-<p>References</p>
-<ul>
-<li>F. W. Bessel, <a href="http://dx.doi.org/10.1002/asna.201011352">The calculation of longitude and latitude from geodesic measurements (1825)</a>, Astron. Nachr. 331(8), 852-861 (2010); translated by C. F. F. Karney and R. E. Deakin. Preprint: <a href="http://arxiv.org/abs/0908.1824">arXiv:0908.1824</a>.</li>
-<li>F. R. Helmert, <a href="http://geographiclib.sf.net/geodesic-papers/helmert80-en.pdf">Mathematical and Physical Theories of Higher Geodesy, Part 1 (1880)</a>, Aeronautical Chart and Information Center (St. Louis, 1964), Chaps. 5–7.</li>
-<li>J. Danielsen, The Area under the Geodesic, Survey Review 30 (232), 61–66 (1989).</li>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1102.1215v1">Geodesics on an ellipsoid of revolution</a>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>; resource page <a href="http://geographiclib.sf.net/geod.html">geod.html</a>.</li>
-<li>C. F. F. Karney, <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>, Sept. 2011, preprint <a href="http://arxiv.org/abs/1109.4448">arXiv:1109.4448</a>.</li>
-<li>A collection of some papers on geodesics is available at <a href="http://geographiclib.sourceforge.net/geodesic-papers/biblio.html">http://geographiclib.sourceforge.net/geodesic-papers/biblio.html</a></li>
-</ul>
-<h2><a class="anchor" id="testgeod"></a>
-Test data for geodesics</h2>
-<p>A test set a geodesics is available at</p>
-<ul>
-<li><a href="http://sf.net/projects/geographiclib/files/testdata/GeodTest.dat.gz/download">GeodTest.dat.gz</a></li>
-</ul>
-<p>This is about 39 MB (compressed). This consists of a set of geodesics for the WGS84 ellipsoid. A subset of this (consisting of 1/50 of the members — about 690 kB, compressed) is available at</p>
-<ul>
-<li><a href="http://sf.net/projects/geographiclib/files/testdata/GeodTest-short.dat.gz/download">GeodTest-short.dat.gz</a></li>
-</ul>
-<p>Each line of the test set gives 10 space delimited numbers</p>
-<ul>
-<li>latitude for point 1, <em>lat1</em> (degrees, exact)</li>
-<li>longitude for point 1, <em>lon1</em> (degrees, always 0)</li>
-<li>azimuth for point 1, <em>azi1</em> (clockwise from north in degrees, exact)</li>
-<li>latitude for point 2, <em>lat2</em> (degrees, accurate to 10<sup>-18</sup> deg)</li>
-<li>longitude for point 2, <em>lon2</em> (degrees, accurate to 10<sup>-18</sup> deg)</li>
-<li>azimuth for point 2, <em>azi2</em> (degrees, accurate to 10<sup>-18</sup> deg)</li>
-<li>geodesic distance from point 1 to point 2, <em>s12</em> (meters, exact)</li>
-<li>arc distance on the auxiliary sphere, <em>a12</em> (degrees, accurate to 10<sup>-18</sup> deg)</li>
-<li>reduced length of the geodesic, <em>m12</em> (meters, accurate to 0.1 pm)</li>
-<li>the area under the geodesic, <em>S12</em> (m<sup>2</sup>, accurate to 1 mm<sup>2</sup>)</li>
-</ul>
-<p>These are computed using as direct geodesic calculations with the given <em>lat1</em>, <em>lon1</em>, <em>azi1</em>, and <em>s12</em>. The distance <em>s12</em> always corresponds to an arc length <em>a12</em> <= 180<sup>o</sup>, so the given geodesics give the shortest paths from point 1 to point 2. For simplicity and without loss of generality, <em>lat1</em> is chosen in [0<sup>o</sup>, 90<sup>o</sup>], <em>lon1</em> is taken to be zero, <em>azi1</em> is chosen in [0<sup>o</sup>, [...]
-<p>The direct calculation uses an expansion of the geodesic equations accurate to <em>f</em><sup>30</sup> (approximately 1 part in 10<sup>50</sup>) and is computed with with <a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a>'s bfloats and fpprec set to 100 (so the errors in the data are probably 1/2 of the values quoted above).</p>
-<p>The contents of the file are as follows:</p>
-<ul>
-<li>100000 entries randomly distributed</li>
-<li>50000 entries which are nearly antipodal</li>
-<li>50000 entries with short distances</li>
-<li>50000 entries with one end near a pole</li>
-<li>50000 entries with both ends near opposite poles</li>
-<li>50000 entries which are nearly meridional</li>
-<li>50000 entries which are nearly equatorial</li>
-<li>50000 entries running between vertices (<em>azi1</em> = <em>azi2</em> = 90<sup>o</sup>)</li>
-<li>50000 entries ending close to vertices</li>
-</ul>
-<p>(a total of 500000 entries). The values for <em>s12</em> for the geodesics running between vertices are truncated to a multiple of 0.1 pm and this is used to determine point 2.</p>
-<p>This data can be fed to the <a href="Geod.1.html">Geod</a> utility as follows</p>
-<ul>
-<li>Direct from point 1: <div class="fragment"><pre class="fragment">
-  gunzip -c GeodTest.dat.gz | cut -d' ' -f1,2,3,7 | ./Geod
-</pre></div> This should yield columns 4, 5, 6, and 9 of the test set.</li>
-<li>Direct from point 2: <div class="fragment"><pre class="fragment">
-  gunzip -c GeodTest.dat.gz | cut -d' ' -f4,5,6,7 |
-  sed "s/ \([^ ]*$\)/ -\1/" | ./Geod
-</pre></div> (The sed command negates the distance.) This should yield columns 1, 2, and 3, and the negative of column 9 of the test set.</li>
-<li>Inverse between points 1 and 2: <div class="fragment"><pre class="fragment">
-  gunzip -c GeodTest.dat.gz | cut -d' ' -f1,2,4,5 | ./Geod -i
-</pre></div> This should yield columns 3, 6, 7, and 9 of the test set.</li>
-</ul>
-<p>Add, e.g., "-p 6", to the call to Geod to change the precision of the output. Adding "-f" causes Geod to print 12 fields specifying the geodesic; these include the 10 fields in the test set plus the geodesic scales <em>M12</em> and <em>M21</em> which are inserted between <em>m12</em> and <em>S12</em>.</p>
-<h2><a class="anchor" id="geodseries"></a>
-Expansions for geodesics</h2>
-<p>We give here the series expansions for the various geodesic integrals valid to order <em>f</em><sup>10</sup>. In this release of the code, we use a 6th-order expansions. This is sufficient to maintain accuracy for doubles for the SRMmax ellipsoid (<em>a</em> = 6400 km, <em>f</em> = 1/150). However, the preprocessor macro GEOD_ORD can be used to select any order up to 8. (If using long doubles, with a 64-bit fraction, the default order is 7.) The series expanded to order <em>f</em><sup [...]
-<p>In the formulas below ^ indicates exponentiation (<em>f^3</em> = <em>f*<em>f*<em>f</em>)</em> and</em> / indicates real division (3/5 = 0.6). The equations need to be converted to Horner form, but are here left in expanded form so that they can be easily truncated to lower order. These expansions were obtained using the Maxima code, <a href="geod.mac">geod.mac</a>.</p>
-<p>In the expansions below, we have</p>
-<ul>
-<li><em>alpha</em> is the azimuth</li>
-<li><em>alpha</em><sub>0</sub> is the azimuth at the equator crossing</li>
-<li><em>lambda</em> is the longitude measured from the equator crossing</li>
-<li><em>omega</em> is the spherical longitude</li>
-<li><em>sigma</em> is the spherical arc length</li>
-<li><em>a</em> is the equatorial radius</li>
-<li><em>b</em> is the polar semi-axis</li>
-<li><em>f</em> is the flattening</li>
-<li><em>e</em><sup>2</sup> = <em>f</em> (2 - <em>f</em>)</li>
-<li><em>e'</em><sup>2</sup> = <em>e</em><sup>2</sup>/(1 - <em>e</em><sup>2</sup>)</li>
-<li><em>k</em><sup>2</sup> = <em>e'</em><sup>2</sup> cos<sup>2</sup> <em>alpha</em><sub>0</sub> = 4 <em>eps</em> / (1 - <em>eps</em>)<sup>2</sup></li>
-<li><em>n</em> = <em>f</em> / (2 - <em>f</em>)</li>
-<li><em>c</em><sup>2</sup> = <em>a</em><sup>2</sup>/2 + <em>b</em><sup>2</sup>/2 (tanh<sup>-1</sup> <em>e</em>)/<em>e</em> </li>
-<li><em>ep2</em> = <em>e'</em><sup>2</sup></li>
-<li><em>k2</em> = <em>k</em><sup>2</sup></li>
-</ul>
-<p>The formula for distance is</p>
-<p>    <em>s</em>/<em>b</em> = <em>I1</em>(<em>sigma</em>)</p>
-<p>where</p>
-<p>    <em>I1</em>(<em>sigma</em>) = <em>A1</em> (<em>sigma</em> + <em>B1</em>(<em>sigma</em>))<br/>
-     <em>B1</em>(<em>sigma</em>) = sum<sub><em>j</em> = 1</sub> <em>C1<sub>j</sub></em> sin(2 <em>j</em> <em>sigma</em>)</p>
-<p>and</p>
-<div class="fragment"><pre class="fragment">
-A1 = (1 + 1/4 * eps^2
-        + 1/64 * eps^4
-        + 1/256 * eps^6
-        + 25/16384 * eps^8
-        + 49/65536 * eps^10) / (1 - eps);
-</pre></div><div class="fragment"><pre class="fragment">
-C1[1] = - 1/2 * eps
-        + 3/16 * eps^3
-        - 1/32 * eps^5
-        + 19/2048 * eps^7
-        - 3/4096 * eps^9;
-C1[2] = - 1/16 * eps^2
-        + 1/32 * eps^4
-        - 9/2048 * eps^6
-        + 7/4096 * eps^8
-        + 1/65536 * eps^10;
-C1[3] = - 1/48 * eps^3
-        + 3/256 * eps^5
-        - 3/2048 * eps^7
-        + 17/24576 * eps^9;
-C1[4] = - 5/512 * eps^4
-        + 3/512 * eps^6
-        - 11/16384 * eps^8
-        + 3/8192 * eps^10;
-C1[5] = - 7/1280 * eps^5
-        + 7/2048 * eps^7
-        - 3/8192 * eps^9;
-C1[6] = - 7/2048 * eps^6
-        + 9/4096 * eps^8
-        - 117/524288 * eps^10;
-C1[7] = - 33/14336 * eps^7
-        + 99/65536 * eps^9;
-C1[8] = - 429/262144 * eps^8
-        + 143/131072 * eps^10;
-C1[9] = - 715/589824 * eps^9;
-C1[10] = - 2431/2621440 * eps^10;
-</pre></div><p>The function <em>tau</em>(<em>sigma</em>) = <em>s</em>/(<em>b</em> <em>A1</em>) = <em>sigma</em> + <em>B1</em>(<em>sigma</em>) may be inverted by series reversion giving</p>
-<p>    <em>sigma</em>(<em>tau</em>) = <em>tau</em> + sum<sub><em>j</em> = 1</sub> <em>C1'<sub>j</sub></em> sin(2 <em>j</em> <em>tau</em>)</p>
-<p>where</p>
-<div class="fragment"><pre class="fragment">
-C1'[1] = + 1/2 * eps
-         - 9/32 * eps^3
-         + 205/1536 * eps^5
-         - 4879/73728 * eps^7
-         + 9039/327680 * eps^9;
-C1'[2] = + 5/16 * eps^2
-         - 37/96 * eps^4
-         + 1335/4096 * eps^6
-         - 86171/368640 * eps^8
-         + 4119073/28311552 * eps^10;
-C1'[3] = + 29/96 * eps^3
-         - 75/128 * eps^5
-         + 2901/4096 * eps^7
-         - 443327/655360 * eps^9;
-C1'[4] = + 539/1536 * eps^4
-         - 2391/2560 * eps^6
-         + 1082857/737280 * eps^8
-         - 2722891/1548288 * eps^10;
-C1'[5] = + 3467/7680 * eps^5
-         - 28223/18432 * eps^7
-         + 1361343/458752 * eps^9;
-C1'[6] = + 38081/61440 * eps^6
-         - 733437/286720 * eps^8
-         + 10820079/1835008 * eps^10;
-C1'[7] = + 459485/516096 * eps^7
-         - 709743/163840 * eps^9;
-C1'[8] = + 109167851/82575360 * eps^8
-         - 550835669/74317824 * eps^10;
-C1'[9] = + 83141299/41287680 * eps^9;
-C1'[10] = + 9303339907/2972712960 * eps^10;
-</pre></div><p>The reduced length is given by</p>
-<p>    <em>m</em>/<em>b</em> = sqrt(1 + <em>k</em><sup>2</sup> sin<sup>2</sup><em>sigma</em><sub>2</sub>) cos <em>sigma</em><sub>1</sub> sin <em>sigma</em><sub>2</sub><br/>
-             - sqrt(1 + <em>k</em><sup>2</sup> sin<sup>2</sup><em>sigma</em><sub>1</sub>) sin <em>sigma</em><sub>1</sub> cos <em>sigma</em><sub>2</sub><br/>
-             - cos <em>sigma</em><sub>1</sub> cos <em>sigma</em><sub>2</sub> (<em>J</em>(<em>sigma</em><sub>2</sub>) - <em>J</em>(<em>sigma</em><sub>1</sub>))</p>
-<p>where</p>
-<p>    <em>J</em>(<em>sigma</em>) = <em>I1</em>(<em>sigma</em>) - <em>I2</em>(<em>sigma</em>)<br/>
-     <em>I2</em>(<em>sigma</em>) = <em>A2</em> (<em>sigma</em> + <em>B2</em>(<em>sigma</em>))<br/>
-     <em>B2</em>(<em>sigma</em>) = sum<sub><em>j</em> = 1</sub> <em>C2<sub>j</sub></em> sin(2 <em>j</em> <em>sigma</em>)</p>
-<div class="fragment"><pre class="fragment">
-A2 = (1 + 1/4 * eps^2
-        + 9/64 * eps^4
-        + 25/256 * eps^6
-        + 1225/16384 * eps^8
-        + 3969/65536 * eps^10) * (1 - eps);
-</pre></div><div class="fragment"><pre class="fragment">
-C2[1] = + 1/2 * eps
-        + 1/16 * eps^3
-        + 1/32 * eps^5
-        + 41/2048 * eps^7
-        + 59/4096 * eps^9;
-C2[2] = + 3/16 * eps^2
-        + 1/32 * eps^4
-        + 35/2048 * eps^6
-        + 47/4096 * eps^8
-        + 557/65536 * eps^10;
-C2[3] = + 5/48 * eps^3
-        + 5/256 * eps^5
-        + 23/2048 * eps^7
-        + 191/24576 * eps^9;
-C2[4] = + 35/512 * eps^4
-        + 7/512 * eps^6
-        + 133/16384 * eps^8
-        + 47/8192 * eps^10;
-C2[5] = + 63/1280 * eps^5
-        + 21/2048 * eps^7
-        + 51/8192 * eps^9;
-C2[6] = + 77/2048 * eps^6
-        + 33/4096 * eps^8
-        + 2607/524288 * eps^10;
-C2[7] = + 429/14336 * eps^7
-        + 429/65536 * eps^9;
-C2[8] = + 6435/262144 * eps^8
-        + 715/131072 * eps^10;
-C2[9] = + 12155/589824 * eps^9;
-C2[10] = + 46189/2621440 * eps^10;
-</pre></div><p>The longitude is given in terms of the spherical longitude by</p>
-<p>    <em>lambda</em> = <em>omega</em> - <em>f</em> sin <em>alpha</em><sub>0</sub> <em>I3</em>(<em>sigma</em>)</p>
-<p>where</p>
-<p>    <em>I3</em>(<em>sigma</em>) = <em>A3</em> (<em>sigma</em> + <em>B3</em>(<em>sigma</em>))<br/>
-     <em>B3</em>(<em>sigma</em>) = sum<sub><em>j</em> = 1</sub> <em>C3<sub>j</sub></em> sin(2 <em>j</em> <em>sigma</em>)</p>
-<p>and</p>
-<div class="fragment"><pre class="fragment">
-A3 = 1 - (1/2 - 1/2 * n) * eps
-       - (1/4 + 1/8 * n - 3/8 * n^2) * eps^2
-       - (1/16 + 3/16 * n + 1/16 * n^2 - 5/16 * n^3) * eps^3
-       - (3/64 + 1/32 * n + 5/32 * n^2 + 5/128 * n^3 - 35/128 * n^4) * eps^4
-       - (3/128 + 5/128 * n + 5/256 * n^2 + 35/256 * n^3 + 7/256 * n^4) * eps^5
-       - (5/256 + 15/1024 * n + 35/1024 * n^2 + 7/512 * n^3) * eps^6
-       - (25/2048 + 35/2048 * n + 21/2048 * n^2) * eps^7
-       - (175/16384 + 35/4096 * n) * eps^8
-       - 245/32768 * eps^9;
-</pre></div><div class="fragment"><pre class="fragment">
-C3[1] = + (1/4 - 1/4 * n) * eps
-        + (1/8 - 1/8 * n^2) * eps^2
-        + (3/64 + 3/64 * n - 1/64 * n^2 - 5/64 * n^3) * eps^3
-        + (5/128 + 1/64 * n + 1/64 * n^2 - 1/64 * n^3 - 7/128 * n^4) * eps^4
-        + (3/128 + 11/512 * n + 3/512 * n^2 + 1/256 * n^3 - 7/512 * n^4) * eps^5
-        + (21/1024 + 5/512 * n + 13/1024 * n^2 + 1/512 * n^3) * eps^6
-        + (243/16384 + 189/16384 * n + 83/16384 * n^2) * eps^7
-        + (435/32768 + 109/16384 * n) * eps^8
-        + 345/32768 * eps^9;
-C3[2] = + (1/16 - 3/32 * n + 1/32 * n^2) * eps^2
-        + (3/64 - 1/32 * n - 3/64 * n^2 + 1/32 * n^3) * eps^3
-        + (3/128 + 1/128 * n - 9/256 * n^2 - 3/128 * n^3 + 7/256 * n^4) * eps^4
-        + (5/256 + 1/256 * n - 1/128 * n^2 - 7/256 * n^3 - 3/256 * n^4) * eps^5
-        + (27/2048 + 69/8192 * n - 39/8192 * n^2 - 47/4096 * n^3) * eps^6
-        + (187/16384 + 39/8192 * n + 31/16384 * n^2) * eps^7
-        + (287/32768 + 47/8192 * n) * eps^8
-        + 255/32768 * eps^9;
-C3[3] = + (5/192 - 3/64 * n + 5/192 * n^2 - 1/192 * n^3) * eps^3
-        + (3/128 - 5/192 * n - 1/64 * n^2 + 5/192 * n^3 - 1/128 * n^4) * eps^4
-        + (7/512 - 1/384 * n - 77/3072 * n^2 + 5/3072 * n^3 + 65/3072 * n^4) * eps^5
-        + (3/256 - 1/1024 * n - 71/6144 * n^2 - 47/3072 * n^3) * eps^6
-        + (139/16384 + 143/49152 * n - 383/49152 * n^2) * eps^7
-        + (243/32768 + 95/49152 * n) * eps^8
-        + 581/98304 * eps^9;
-C3[4] = + (7/512 - 7/256 * n + 5/256 * n^2 - 7/1024 * n^3 + 1/1024 * n^4) * eps^4
-        + (7/512 - 5/256 * n - 7/2048 * n^2 + 9/512 * n^3 - 21/2048 * n^4) * eps^5
-        + (9/1024 - 43/8192 * n - 129/8192 * n^2 + 39/4096 * n^3) * eps^6
-        + (127/16384 - 23/8192 * n - 165/16384 * n^2) * eps^7
-        + (193/32768 + 3/8192 * n) * eps^8
-        + 171/32768 * eps^9;
-C3[5] = + (21/2560 - 9/512 * n + 15/1024 * n^2 - 7/1024 * n^3 + 9/5120 * n^4) * eps^5
-        + (9/1024 - 15/1024 * n + 3/2048 * n^2 + 57/5120 * n^3) * eps^6
-        + (99/16384 - 91/16384 * n - 781/81920 * n^2) * eps^7
-        + (179/32768 - 55/16384 * n) * eps^8
-        + 141/32768 * eps^9;
-C3[6] = + (11/2048 - 99/8192 * n + 275/24576 * n^2 - 77/12288 * n^3) * eps^6
-        + (99/16384 - 275/24576 * n + 55/16384 * n^2) * eps^7
-        + (143/32768 - 253/49152 * n) * eps^8
-        + 33/8192 * eps^9;
-C3[7] = + (429/114688 - 143/16384 * n + 143/16384 * n^2) * eps^7
-        + (143/32768 - 143/16384 * n) * eps^8
-        + 429/131072 * eps^9;
-C3[8] = + (715/262144 - 429/65536 * n) * eps^8
-        + 429/131072 * eps^9;
-C3[9] = + 2431/1179648 * eps^9;
-</pre></div><p>The formula for area between the geodesic and the equator is given in Sec. 15 of <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a> in terms of <em>S</em>,</p>
-<p>    <em>S</em> = <em>c</em><sup>2</sup> <em>alpha</em> + <em>e</em><sup>2</sup> <em>a</em><sup>2</sup> cos <em>alpha</em><sub>0</sub> sin <em>alpha</em><sub>0</sub> <em>I4</em>(<em>sigma</em>)</p>
-<p>where</p>
-<p>    <em>I4</em>(<em>sigma</em>) = sum<sub><em>j</em> = 0</sub> <em>C4<sub>j</sub></em> cos((2<em>j</em> + 1) <em>sigma</em>)</p>
-<p>with</p>
-<div class="fragment"><pre class="fragment">
-C4[0] = + (2/3 - 1/15 * ep2 + 4/105 * ep2^2 - 8/315 * ep2^3 + 64/3465 * ep2^4 - 128/9009 * ep2^5 + 512/45045 * ep2^6 - 1024/109395 * ep2^7 + 16384/2078505 * ep2^8 - 32768/4849845 * ep2^9)
-        - (1/20 - 1/35 * ep2 + 2/105 * ep2^2 - 16/1155 * ep2^3 + 32/3003 * ep2^4 - 128/15015 * ep2^5 + 256/36465 * ep2^6 - 4096/692835 * ep2^7 + 8192/1616615 * ep2^8) * k2
-        + (1/42 - 1/63 * ep2 + 8/693 * ep2^2 - 80/9009 * ep2^3 + 64/9009 * ep2^4 - 128/21879 * ep2^5 + 2048/415701 * ep2^6 - 4096/969969 * ep2^7) * k2^2
-        - (1/72 - 1/99 * ep2 + 10/1287 * ep2^2 - 8/1287 * ep2^3 + 112/21879 * ep2^4 - 1792/415701 * ep2^5 + 512/138567 * ep2^6) * k2^3
-        + (1/110 - 1/143 * ep2 + 4/715 * ep2^2 - 56/12155 * ep2^3 + 896/230945 * ep2^4 - 768/230945 * ep2^5) * k2^4
-        - (1/156 - 1/195 * ep2 + 14/3315 * ep2^2 - 224/62985 * ep2^3 + 64/20995 * ep2^4) * k2^5
-        + (1/210 - 1/255 * ep2 + 16/4845 * ep2^2 - 32/11305 * ep2^3) * k2^6
-        - (1/272 - 1/323 * ep2 + 6/2261 * ep2^2) * k2^7
-        + (1/342 - 1/399 * ep2) * k2^8
-        - 1/420 * k2^9;
-C4[1] = + (1/180 - 1/315 * ep2 + 2/945 * ep2^2 - 16/10395 * ep2^3 + 32/27027 * ep2^4 - 128/135135 * ep2^5 + 256/328185 * ep2^6 - 4096/6235515 * ep2^7 + 8192/14549535 * ep2^8) * k2
-        - (1/252 - 1/378 * ep2 + 4/2079 * ep2^2 - 40/27027 * ep2^3 + 32/27027 * ep2^4 - 64/65637 * ep2^5 + 1024/1247103 * ep2^6 - 2048/2909907 * ep2^7) * k2^2
-        + (1/360 - 1/495 * ep2 + 2/1287 * ep2^2 - 8/6435 * ep2^3 + 112/109395 * ep2^4 - 1792/2078505 * ep2^5 + 512/692835 * ep2^6) * k2^3
-        - (1/495 - 2/1287 * ep2 + 8/6435 * ep2^2 - 112/109395 * ep2^3 + 1792/2078505 * ep2^4 - 512/692835 * ep2^5) * k2^4
-        + (5/3276 - 1/819 * ep2 + 2/1989 * ep2^2 - 32/37791 * ep2^3 + 64/88179 * ep2^4) * k2^5
-        - (1/840 - 1/1020 * ep2 + 4/4845 * ep2^2 - 8/11305 * ep2^3) * k2^6
-        + (7/7344 - 7/8721 * ep2 + 2/2907 * ep2^2) * k2^7
-        - (2/2565 - 4/5985 * ep2) * k2^8
-        + 1/1540 * k2^9;
-C4[2] = + (1/2100 - 1/3150 * ep2 + 4/17325 * ep2^2 - 8/45045 * ep2^3 + 32/225225 * ep2^4 - 64/546975 * ep2^5 + 1024/10392525 * ep2^6 - 2048/24249225 * ep2^7) * k2^2
-        - (1/1800 - 1/2475 * ep2 + 2/6435 * ep2^2 - 8/32175 * ep2^3 + 112/546975 * ep2^4 - 1792/10392525 * ep2^5 + 512/3464175 * ep2^6) * k2^3
-        + (1/1925 - 2/5005 * ep2 + 8/25025 * ep2^2 - 16/60775 * ep2^3 + 256/1154725 * ep2^4 - 1536/8083075 * ep2^5) * k2^4
-        - (1/2184 - 1/2730 * ep2 + 1/3315 * ep2^2 - 16/62985 * ep2^3 + 32/146965 * ep2^4) * k2^5
-        + (1/2520 - 1/3060 * ep2 + 4/14535 * ep2^2 - 8/33915 * ep2^3) * k2^6
-        - (7/20400 - 7/24225 * ep2 + 2/8075 * ep2^2) * k2^7
-        + (14/47025 - 4/15675 * ep2) * k2^8
-        - 1/3850 * k2^9;
-C4[3] = + (1/17640 - 1/24255 * ep2 + 2/63063 * ep2^2 - 8/315315 * ep2^3 + 16/765765 * ep2^4 - 256/14549535 * ep2^5 + 512/33948915 * ep2^6) * k2^3
-        - (1/10780 - 1/14014 * ep2 + 2/35035 * ep2^2 - 4/85085 * ep2^3 + 64/1616615 * ep2^4 - 384/11316305 * ep2^5) * k2^4
-        + (5/45864 - 1/11466 * ep2 + 1/13923 * ep2^2 - 16/264537 * ep2^3 + 32/617253 * ep2^4) * k2^5
-        - (1/8820 - 1/10710 * ep2 + 8/101745 * ep2^2 - 16/237405 * ep2^3) * k2^6
-        + (1/8976 - 1/10659 * ep2 + 2/24871 * ep2^2) * k2^7
-        - (1/9405 - 2/21945 * ep2) * k2^8
-        + 1/10010 * k2^9;
-C4[4] = + (1/124740 - 1/162162 * ep2 + 2/405405 * ep2^2 - 4/984555 * ep2^3 + 64/18706545 * ep2^4 - 128/43648605 * ep2^5) * k2^4
-        - (1/58968 - 1/73710 * ep2 + 1/89505 * ep2^2 - 16/1700595 * ep2^3 + 32/3968055 * ep2^4) * k2^5
-        + (1/41580 - 1/50490 * ep2 + 8/479655 * ep2^2 - 16/1119195 * ep2^3) * k2^6
-        - (7/242352 - 7/287793 * ep2 + 2/95931 * ep2^2) * k2^7
-        + (7/220077 - 2/73359 * ep2) * k2^8
-        - 1/30030 * k2^9;
-C4[5] = + (1/792792 - 1/990990 * ep2 + 1/1203345 * ep2^2 - 16/22863555 * ep2^3 + 32/53348295 * ep2^4) * k2^5
-        - (1/304920 - 1/370260 * ep2 + 4/1758735 * ep2^2 - 8/4103715 * ep2^3) * k2^6
-        + (7/1283568 - 7/1524237 * ep2 + 2/508079 * ep2^2) * k2^7
-        - (2/268983 - 4/627627 * ep2) * k2^8
-        + 1/110110 * k2^9;
-C4[6] = + (1/4684680 - 1/5688540 * ep2 + 4/27020565 * ep2^2 - 8/63047985 * ep2^3) * k2^6
-        - (1/1516944 - 1/1801371 * ep2 + 2/4203199 * ep2^2) * k2^7
-        + (2/1589445 - 4/3708705 * ep2) * k2^8
-        - 1/520520 * k2^9;
-C4[7] = + (1/26254800 - 1/31177575 * ep2 + 2/72747675 * ep2^2) * k2^7
-        - (1/7335900 - 1/8558550 * ep2) * k2^8
-        + 1/3403400 * k2^9;
-C4[8] = + (1/141338340 - 1/164894730 * ep2) * k2^8
-        - 1/34714680 * k2^9;
-C4[9] = + 1/737176440 * k2^9;
-</pre></div><center> Back to <a class="el" href="magnetic.html">Magnetic models</a>. Forward to <a class="el" href="transversemercator.html">Transverse Mercator projection</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/geodseries30.html b/doc/html/geodseries30.html
deleted file mode 100644
index 82f5f82..0000000
--- a/doc/html/geodseries30.html
+++ /dev/null
@@ -1,1715 +0,0 @@
-<html>
-  <head>
-    <!-- $Id: 257134e59663a19309d7799554235047d1b3381f $ -->
-    <title>
-      Series for geodesic calculations
-    </title>
-  <body>
-    <h2>
-      Series for geodesic calculations
-    </h2>
-This extends the series given
-<a href="geodesic.html#geodseries">here</a> to 30th order in the
-flattening.  See
-    <blockquote>
-      Charles F. F. Karney,
-      <a href="http://arxiv.org/abs/1102.1215">Geodesics
-        on an ellipsoid of revolution</a>,
-      Feb. 2011; preprint
-      <a href="http://arxiv.org/abs/1102.1215">arxiv:1102.1215</a>;
-      resource page
-      <a href="http://geographiclib.sf.net/geod.html">geod.html</a>.
-    </blockquote>
-
-    <pre>
-// Generated by Maxima on 2010-05-01 06:36:46-04:00
-
-A1 = (1 + 1/4 * eps^2
-        + 1/64 * eps^4
-        + 1/256 * eps^6
-        + 25/16384 * eps^8
-        + 49/65536 * eps^10
-        + 441/1048576 * eps^12
-        + 1089/4194304 * eps^14
-        + 184041/1073741824 * eps^16
-        + 511225/4294967296 * eps^18
-        + 5909761/68719476736 * eps^20
-        + 17631601/274877906944 * eps^22
-        + 863948449/17592186044416 * eps^24
-        + 2704312009/70368744177664 * eps^26
-        + 34493775625/1125899906842624 * eps^28
-        + 111759833025/4503599627370496 * eps^30) / (1 - eps);
-
-C1[1] = - 1/2 * eps
-        + 3/16 * eps^3
-        - 1/32 * eps^5
-        + 19/2048 * eps^7
-        - 3/4096 * eps^9
-        + 53/65536 * eps^11
-        + 29/131072 * eps^13
-        + 13827/67108864 * eps^15
-        + 17321/134217728 * eps^17
-        + 205579/2147483648 * eps^19
-        + 302847/4294967296 * eps^21
-        + 29656189/549755813888 * eps^23
-        + 46250107/1099511627776 * eps^25
-        + 588536103/17592186044416 * eps^27
-        + 951224759/35184372088832 * eps^29;
-C1[2] = - 1/16 * eps^2
-        + 1/32 * eps^4
-        - 9/2048 * eps^6
-        + 7/4096 * eps^8
-        + 1/65536 * eps^10
-        + 27/131072 * eps^12
-        + 5735/67108864 * eps^14
-        + 8995/134217728 * eps^16
-        + 96543/2147483648 * eps^18
-        + 142801/4294967296 * eps^20
-        + 13684121/549755813888 * eps^22
-        + 21112497/1099511627776 * eps^24
-        + 265707563/17592186044416 * eps^26
-        + 425659393/35184372088832 * eps^28
-        + 1417935787335/144115188075855872 * eps^30;
-C1[3] = - 1/48 * eps^3
-        + 3/256 * eps^5
-        - 3/2048 * eps^7
-        + 17/24576 * eps^9
-        + 3/65536 * eps^11
-        + 843/8388608 * eps^13
-        + 9719/201326592 * eps^15
-        + 9801/268435456 * eps^17
-        + 54189/2147483648 * eps^19
-        + 3873871/206158430208 * eps^21
-        + 7822227/549755813888 * eps^23
-        + 24333681/2199023255552 * eps^25
-        + 462823139/52776558133248 * eps^27
-        + 127352837355/18014398509481984 * eps^29;
-C1[4] = - 5/512 * eps^4
-        + 3/512 * eps^6
-        - 11/16384 * eps^8
-        + 3/8192 * eps^10
-        + 651/16777216 * eps^12
-        + 1009/16777216 * eps^14
-        + 16763/536870912 * eps^16
-        + 1569/67108864 * eps^18
-        + 2263733/137438953472 * eps^20
-        + 1698897/137438953472 * eps^22
-        + 41547591/4398046511104 * eps^24
-        + 16273415/2199023255552 * eps^26
-        + 212683932395/36028797018963968 * eps^28
-        + 172435304205/36028797018963968 * eps^30;
-C1[5] = - 7/1280 * eps^5
-        + 7/2048 * eps^7
-        - 3/8192 * eps^9
-        + 117/524288 * eps^11
-        + 253/8388608 * eps^13
-        + 13419/335544320 * eps^15
-        + 5855/268435456 * eps^17
-        + 70025/4294967296 * eps^19
-        + 800595/68719476736 * eps^21
-        + 4842105/549755813888 * eps^23
-        + 74591411/10995116277760 * eps^25
-        + 6021893805/1125899906842624 * eps^27
-        + 77302095005/18014398509481984 * eps^29;
-C1[6] = - 7/2048 * eps^6
-        + 9/4096 * eps^8
-        - 117/524288 * eps^10
-        + 467/3145728 * eps^12
-        + 1569/67108864 * eps^14
-        + 3813/134217728 * eps^16
-        + 206677/12884901888 * eps^18
-        + 103137/8589934592 * eps^20
-        + 4770087/549755813888 * eps^22
-        + 21782093/3298534883328 * eps^24
-        + 5765474835/1125899906842624 * eps^26
-        + 9142699905/2251799813685248 * eps^28
-        + 1415580640915/432345564227567616 * eps^30;
-C1[7] = - 33/14336 * eps^7
-        + 99/65536 * eps^9
-        - 77/524288 * eps^11
-        + 55/524288 * eps^13
-        + 1233/67108864 * eps^15
-        + 11345/536870912 * eps^17
-        + 52591/4294967296 * eps^19
-        + 552591/60129542144 * eps^21
-        + 3685111/549755813888 * eps^23
-        + 722278195/140737488355328 * eps^25
-        + 4507296795/1125899906842624 * eps^27
-        + 1795935355/562949953421312 * eps^29;
-C1[8] = - 429/262144 * eps^8
-        + 143/131072 * eps^10
-        - 429/4194304 * eps^12
-        + 325/4194304 * eps^14
-        + 31525/2147483648 * eps^16
-        + 8733/536870912 * eps^18
-        + 165251/17179869184 * eps^20
-        + 124411/17179869184 * eps^22
-        + 2996969235/562949953421312 * eps^24
-        + 1153418845/281474976710656 * eps^26
-        + 28941724625/9007199254740992 * eps^28
-        + 23168297355/9007199254740992 * eps^30;
-C1[9] = - 715/589824 * eps^9
-        + 429/524288 * eps^11
-        - 39/524288 * eps^13
-        + 11921/201326592 * eps^15
-        + 6399/536870912 * eps^17
-        + 55233/4294967296 * eps^19
-        + 199205/25769803776 * eps^21
-        + 25677825/4398046511104 * eps^23
-        + 608155005/140737488355328 * eps^25
-        + 33866001805/10133099161583616 * eps^27
-        + 1482164085/562949953421312 * eps^29;
-C1[10] = - 2431/2621440 * eps^10
-        + 663/1048576 * eps^12
-        - 3757/67108864 * eps^14
-        + 6239/134217728 * eps^16
-        + 42177/4294967296 * eps^18
-        + 446131/42949672960 * eps^20
-        + 27835817/4398046511104 * eps^22
-        + 42180321/8796093022208 * eps^24
-        + 4019599397/1125899906842624 * eps^26
-        + 6244603111/2251799813685248 * eps^28
-        + 316153750539/144115188075855872 * eps^30;
-C1[11] = - 4199/5767168 * eps^11
-        + 4199/8388608 * eps^13
-        - 2907/67108864 * eps^15
-        + 10013/268435456 * eps^17
-        + 35207/4294967296 * eps^19
-        + 4694805/549755813888 * eps^21
-        + 23148175/4398046511104 * eps^23
-        + 70365265/17592186044416 * eps^25
-        + 3370190355/1125899906842624 * eps^27
-        + 42049539055/18014398509481984 * eps^29;
-C1[12] = - 29393/50331648 * eps^12
-        + 6783/16777216 * eps^14
-        - 18411/536870912 * eps^16
-        + 6137/201326592 * eps^18
-        + 7611495/1099511627776 * eps^20
-        + 7835163/1099511627776 * eps^22
-        + 468146111/105553116266496 * eps^24
-        + 59462469/17592186044416 * eps^26
-        + 91557125181/36028797018963968 * eps^28
-        + 214950398465/108086391056891904 * eps^30;
-C1[13] = - 52003/109051904 * eps^13
-        + 22287/67108864 * eps^15
-        - 7429/268435456 * eps^17
-        + 869193/34359738368 * eps^19
-        + 3247347/549755813888 * eps^21
-        + 26486133/4398046511104 * eps^23
-        + 66500935/17592186044416 * eps^25
-        + 12703797/4398046511104 * eps^27
-        + 39283195529/18014398509481984 * eps^29;
-C1[14] = - 185725/469762048 * eps^14
-        + 37145/134217728 * eps^16
-        - 780045/34359738368 * eps^18
-        + 1461765/68719476736 * eps^20
-        + 22372215/4398046511104 * eps^22
-        + 45260895/8796093022208 * eps^24
-        + 57244355/17592186044416 * eps^26
-        + 306953515/123145302310912 * eps^28
-        + 272204273085/144115188075855872 * eps^30;
-C1[15] = - 22287/67108864 * eps^15
-        + 1002915/4294967296 * eps^17
-        - 648945/34359738368 * eps^19
-        + 1243265/68719476736 * eps^21
-        + 19425915/4398046511104 * eps^23
-        + 78089301/17592186044416 * eps^25
-        + 12427015/4398046511104 * eps^27
-        + 610648965/281474976710656 * eps^29;
-C1[16] = - 9694845/34359738368 * eps^16
-        + 1710855/8589934592 * eps^18
-        - 4372185/274877906944 * eps^20
-        + 4272135/274877906944 * eps^22
-        + 543781755/140737488355328 * eps^24
-        + 271745805/70368744177664 * eps^26
-        + 5567912565/2251799813685248 * eps^28
-        + 4284219735/2251799813685248 * eps^30;
-C1[17] = - 17678835/73014444032 * eps^17
-        + 5892945/34359738368 * eps^19
-        - 930465/68719476736 * eps^21
-        + 59239605/4398046511104 * eps^23
-        + 59859915/17592186044416 * eps^25
-        + 930465/274877906944 * eps^27
-        + 613284315/281474976710656 * eps^29;
-C1[18] = - 21607465/103079215104 * eps^18
-        + 10235115/68719476736 * eps^20
-        - 51175575/4398046511104 * eps^22
-        + 103488385/8796093022208 * eps^24
-        + 53036505/17592186044416 * eps^26
-        + 52551045/17592186044416 * eps^28
-        + 278415054335/144115188075855872 * eps^30;
-C1[19] = - 119409675/652835028992 * eps^19
-        + 71645805/549755813888 * eps^21
-        - 44352165/4398046511104 * eps^23
-        + 182060985/17592186044416 * eps^25
-        + 2953215/1099511627776 * eps^27
-        + 47776802115/18014398509481984 * eps^29;
-C1[20] = - 176726319/1099511627776 * eps^20
-        + 126233085/1099511627776 * eps^22
-        - 309844845/35184372088832 * eps^24
-        + 161159235/17592186044416 * eps^26
-        + 86652277095/36028797018963968 * eps^28
-        + 426519840213/180143985094819840 * eps^30;
-C1[21] = - 547010035/3848290697216 * eps^21
-        + 447553665/4398046511104 * eps^23
-        - 136211985/17592186044416 * eps^25
-        + 9182417465/1125899906842624 * eps^27
-        + 38976086565/18014398509481984 * eps^29;
-C1[22] = - 6116566755/48378511622144 * eps^22
-        + 797813055/8796093022208 * eps^24
-        - 7712192865/1125899906842624 * eps^26
-        + 16434948933/2251799813685248 * eps^28
-        + 281701652697/144115188075855872 * eps^30;
-C1[23] = - 11435320455/101155069755392 * eps^23
-        + 11435320455/140737488355328 * eps^25
-        - 6861192273/1125899906842624 * eps^27
-        + 3694488147/562949953421312 * eps^29;
-C1[24] = - 57176602275/562949953421312 * eps^24
-        + 20583576819/281474976710656 * eps^26
-        - 49083913953/9007199254740992 * eps^28
-        + 160153129039/27021597764222976 * eps^30;
-C1[25] = - 322476036831/3518437208883200 * eps^25
-        + 74417546961/1125899906842624 * eps^27
-        - 2756205443/562949953421312 * eps^29;
-C1[26] = - 1215486600363/14636698788954112 * eps^26
-        + 135054066707/2251799813685248 * eps^28
-        - 636683457333/144115188075855872 * eps^30;
-C1[27] = - 2295919134019/30399297484750848 * eps^27
-        + 983965343151/18014398509481984 * eps^29;
-C1[28] = - 2483341104143/36028797018963968 * eps^28
-        + 1798281489207/36028797018963968 * eps^30;
-C1[29] = - 32968493968795/522417556774977536 * eps^29;
-C1[30] = - 125280277081421/2161727821137838080 * eps^30;
-
-C1'[1] = + 1/2 * eps
-         - 9/32 * eps^3
-         + 205/1536 * eps^5
-         - 4879/73728 * eps^7
-         + 9039/327680 * eps^9
-         - 1050467/88473600 * eps^11
-         + 512031157/118908518400 * eps^13
-         - 1086005273/591900180480 * eps^15
-         + 4075676109451/7671026339020800 * eps^17
-         - 794840669327713/2761569482047488000 * eps^19
-         + 2239087029841367/77148607752437760000 * eps^21
-         - 40730402540905726093/641567822069272412160000 * eps^23
-         - 97668067278655185143/4927240873492012125388800 * eps^25
-         - 741941887011669089199917/28784819522671853552271360000 * eps^27
-         - 68324470839108426239947872773/3917038240645185831393086668800000 * eps^29;
-C1'[2] = + 5/16 * eps^2
-         - 37/96 * eps^4
-         + 1335/4096 * eps^6
-         - 86171/368640 * eps^8
-         + 4119073/28311552 * eps^10
-         - 18357853/220200960 * eps^12
-         + 167645485631/3805072588800 * eps^14
-         - 2133468723257/95887829237760 * eps^16
-         + 59947666093201/5682241732608000 * eps^18
-         - 29889474712770151/6075452860504473600 * eps^20
-         + 3112904386445139443/1458108686521073664000 * eps^22
-         - 4531132450329984761/4728107532256542720000 * eps^24
-         + 1671560053825711640749861/4483789194877731034103808000 * eps^26
-         - 1539092646053487110737563637/8743388930011575516502425600000 * eps^28
-         + 3620358411657954539738131669/69636235389247748113654874112000 * eps^30;
-C1'[3] = + 29/96 * eps^3
-         - 75/128 * eps^5
-         + 2901/4096 * eps^7
-         - 443327/655360 * eps^9
-         + 1152507/2097152 * eps^11
-         - 1170339447/2936012800 * eps^13
-         + 14896648073/56371445760 * eps^15
-         - 1719099273321/10522669875200 * eps^17
-         + 440255022166233/4629974745088000 * eps^19
-         - 4689329894241941/88895515105689600 * eps^21
-         + 4309464445273351209/154085559516528640000 * eps^23
-         - 77740899024366984327/5423811694981808128000 * eps^25
-         + 4025440507207669842667/569500227973089853440000 * eps^27
-         - 10783702637849849812840017/3158827931157405053747200000 * eps^29;
-C1'[4] = + 539/1536 * eps^4
-         - 2391/2560 * eps^6
-         + 1082857/737280 * eps^8
-         - 2722891/1548288 * eps^10
-         + 6190623251/3523215360 * eps^12
-         - 2198240553463/1426902220800 * eps^14
-         + 835898387989583/684913065984000 * eps^16
-         - 62186045114429/69759664128000 * eps^18
-         + 39435262997832698047/64804830512047718400 * eps^20
-         - 14876456230497799912553/37910825849547915264000 * eps^22
-         + 1136134446936925800945877/4717791661277073899520000 * eps^24
-         - 45093458223482404762480843/318450937136202488217600000 * eps^26
-         + 3448586228525796468187820868401/43044376270826217927396556800000 * eps^28
-         - 9267292123878690223760617403717/211395714574502092487880867840000 * eps^30;
-C1'[5] = + 3467/7680 * eps^5
-         - 28223/18432 * eps^7
-         + 1361343/458752 * eps^9
-         - 211942939/49545216 * eps^11
-         + 289319933243/57076088832 * eps^13
-         - 2641923029237/507343011840 * eps^15
-         + 164922300524827/34441342746624 * eps^17
-         - 326226244879987219/81006038140059648 * eps^19
-         + 905728657830831557/288021468942434304 * eps^21
-         - 78322584746542259177147/33968099961194932076544 * eps^23
-         + 13053248693785337495272007/8152343990686783698370560 * eps^25
-         - 1878086576945897568602243/1771373509087498680139776 * eps^27
-         + 39401408426156638969274880529/58540351728323656381259317248 * eps^29;
-C1'[6] = + 38081/61440 * eps^6
-         - 733437/286720 * eps^8
-         + 10820079/1835008 * eps^10
-         - 547525831/55050240 * eps^12
-         + 45741465549/3355443200 * eps^14
-         - 41464506827097/2583691264000 * eps^16
-         + 33307900611667019/1984274890752000 * eps^18
-         - 29549592050928009/1851989898035200 * eps^20
-         + 1510642276897435153959/107859891661570048000 * eps^22
-         - 3379725045215031439859/294163340895191040000 * eps^24
-         + 3068085809843886425921127/345151653317024153600000 * eps^26
-         - 120481724276440955567319861/18440959762938147635200000 * eps^28
-         + 5351579260607165516870592929/1166336466888888019845120000 * eps^30;
-C1'[7] = + 459485/516096 * eps^7
-         - 709743/163840 * eps^9
-         + 983638957/84934656 * eps^11
-         - 570327360331/25480396800 * eps^13
-         + 2524677004673/72477573120 * eps^15
-         - 3979901788209089/86103356866560 * eps^17
-         + 145501072048061969477/2686424734236672000 * eps^19
-         - 767257565495432565461/13372425343755878400 * eps^21
-         + 576429350583276368332877/10315870979468820480000 * eps^23
-         - 15049813241233902040230469/297097084208702029824000 * eps^25
-         + 1656087831553847819569877/38371513250126757888000 * eps^27
-         - 222870544090985685701249717628901/6400184226857542607280537600000 * eps^29;
-C1'[8] = + 109167851/82575360 * eps^8
-         - 550835669/74317824 * eps^10
-         + 29797006823/1321205760 * eps^12
-         - 13775344174277/280284364800 * eps^14
-         + 51602655250575029/602723498065920 * eps^16
-         - 229269121915303969/1813751267328000 * eps^18
-         + 83019178881141641377/506287738375372800 * eps^20
-         - 132324024533588768532907/691082762882383872000 * eps^22
-         + 396326201752354956063673999/1935504271293158522880000 * eps^24
-         - 703889408095319694872984797279/3464746196041883071807488000 * eps^26
-         + 673066976958864232412288090929279/3563738944500222588144844800000 * eps^28
-         - 3842435239091994304467908471778509/23172222559128113984248479744000 * eps^30;
-C1'[9] = + 83141299/41287680 * eps^9
-         - 1172993649/91750400 * eps^11
-         + 1409193884757/32296140800 * eps^13
-         - 8205463797521/77510737920 * eps^15
-         + 6267340235329209/30709016166400 * eps^17
-         - 9985904736500570067/30094835843072000 * eps^19
-         + 6818098564242858298663/14445521204674560000 * eps^21
-         - 81179814711559538793297/134824864576962560000 * eps^23
-         + 8228623619106009640781583/11735156212778821222400 * eps^25
-         - 10637423815896802535794719059/14082187455334585466880000 * eps^27
-         + 2713138463299280056775410984179/3567487488684761651609600000 * eps^29;
-C1'[10] = + 9303339907/2972712960 * eps^10
-         - 32258337779/1453326336 * eps^12
-         + 105458791111591/1255673954304 * eps^14
-         - 21991423000897853/97942568435712 * eps^16
-         + 440758100714976799/928640648871936 * eps^18
-         - 4436414286264685342183/5265392479103877120 * eps^20
-         + 11983230751430888047165/9190503236254040064 * eps^22
-         - 438407397616490706337835/243037752247606837248 * eps^24
-         + 503750725100748248754169576435/221743756546680516595679232 * eps^26
-         - 200204949675864221817037957885535/75836364738964736675722297344 * eps^28
-         + 15426622123776978643737455613179549/5392808159215270163606918922240 * eps^30;
-C1'[11] = + 230944143253/46714060800 * eps^11
-         - 13820996202863/356725555200 * eps^13
-         + 530891275077073/3297729576960 * eps^15
-         - 5861919724284516433/12465417800908800 * eps^17
-         + 25885301781901909490837/23933602177744896000 * eps^19
-         - 110706057667150724184229/53185782617210880000 * eps^21
-         + 2719521302806552306469953613/781192775081593405440000 * eps^23
-         - 233567275961905041708130573/44996703844699780153344 * eps^25
-         + 798884301221118236917664805229/113666887205034582343680000 * eps^27
-         - 9934805882969858378831722690837171/1133916936886434459864268800000 * eps^29;
-C1'[12] = + 306777964441/38755368960 * eps^12
-         - 57044595387963/839699660800 * eps^14
-         + 11568981229047951/37618544803840 * eps^16
-         - 687397289384966383/705347715072000 * eps^18
-         + 233327560280127272763/96303474697830400 * eps^20
-         - 3739229605202668172763/744163213574144000 * eps^22
-         + 65835782650063594518691/7289762092154880000 * eps^24
-         - 14792936433071373028889379/1024668970784915456000 * eps^26
-         + 74599042152248060866262559758871/3567487488684761651609600000 * eps^28
-         - 16680060316657855648846944446971/599337898099039957470412800 * eps^30;
-C1'[13] = + 2615671472444983/204047017574400 * eps^13
-         - 1167820427927323/9766352977920 * eps^15
-         + 24715664579918728243/42190644864614400 * eps^17
-         - 5067175041833532570683/2531438691876864000 * eps^19
-         + 93543614041472271515281/17487017757219225600 * eps^21
-         - 11792083140833533278156043493/991513906834330091520000 * eps^23
-         + 8268814159710166088320187726251/361704273213163617386496000 * eps^25
-         - 24380431693719066689532645995167/625167879627690202890240000 * eps^27
-         + 40946727771183021563590563999653687303/680582760477888662474430873600000 * eps^29;
-C1'[14] = + 34216519493594561/1632376140595200 * eps^14
-         - 1477329715340046517/6995897745408000 * eps^16
-         + 9229913663063228233/8291434364928000 * eps^18
-         - 18633370679636805385039/4566922048202342400 * eps^20
-         + 613651924549596407462456317/52610941995290984448000 * eps^22
-         - 30737516008559329681484121827/1110675442122809671680000 * eps^24
-         + 271813271604582464710892651024459/4798117909970537781657600000 * eps^26
-         - 20699812425639174189936631117519897/201520952218762586829619200000 * eps^28
-         + 1211662551734777607545609062337329843/7206133351721085009678827520000 * eps^30;
-C1'[15] = + 177298287500753/5129801564160 * eps^15
-         - 5627790514610829/15047417921536 * eps^17
-         + 17279798906736629091/8185795349315584 * eps^19
-         - 115931060832532759571/14032792027398144 * eps^21
-         + 2003356613292569725398363/79631417158142001152 * eps^23
-         - 101051987173195622011224471/1592628343162840023040 * eps^25
-         + 756303360522076489366917931/5488442290284248694784 * eps^27
-         - 5815559636408944974046175630559/21975722930298131773915136 * eps^29;
-C1'[16] = + 1259425185539653127243/21939135329599488000 * eps^16
-         - 2293308899647899314723/3453382412992512000 * eps^18
-         + 21460336637287899464532611/5370700328685954662400 * eps^20
-         - 25456489696915892609916529129/1530649593675497078784000 * eps^22
-         + 2553846684009183021840672953/47515526935735173120000 * eps^24
-         - 29538537350054556934382434071434011/205719305389986807388569600000 * eps^26
-         + 3770295466320560881269963263089000511/11433662446938214136964710400000 * eps^28
-         - 519676261197496743489350631148600190213/777234965004088823221667758080000 * eps^30;
-C1'[17] = + 1789450487559418666447/18648265030159564800 * eps^17
-         - 233343808292218091539949/197452217966395392000 * eps^19
-         + 20146628393835035886855197/2667798856079297740800 * eps^21
-         - 239929099187527215432793286501/7203056911414103900160000 * eps^23
-         + 62988069927933679012075753421807/553194770796603179532288000 * eps^25
-         - 3378232317776013495553552510617097/10517530210207023413329920000 * eps^27
-         + 7314657081705017862640836634319879174339/9405196215175528617136147660800000 * eps^29;
-C1'[18] = + 212221079284639273481/1315574252568576000 * eps^18
-         - 1260552943986821598063/598192737065369600 * eps^20
-         + 3546697789798651658576181/248848178619193753600 * eps^22
-         - 78517248057208956823851421/1182310350905671680000 * eps^24
-         + 1067601202019151639052958889147/4459359360855952064512000 * eps^26
-         - 40116098461444544658667493570308857/56410895914827793616076800000 * eps^28
-         + 392210563613343460551402383435826349/216617840312938727485734912000 * eps^30;
-C1'[19] = + 69532546869173713149501223/255108265612582846464000 * eps^19
-         - 112316728120020126447652781/29837224048255303680000 * eps^21
-         + 4848022300045341835150543297447/180455531043848076656640000 * eps^23
-         - 125642956497967669586988251237879/952805203911517844747059200 * eps^25
-         + 33298130071722823747096176158055463/66596830966654998455255040000 * eps^27
-         - 6563632449843987460043036353052098320209/4207587780473262802403013427200000 * eps^29;
-C1'[20] = + 5810177473683430838091097/12559176153234847825920 * eps^20
-         - 4618600293785993240609142923/685731017966622691295232 * eps^22
-         + 1356670146516048832626691899799/26819702036027909703991296 * eps^24
-         - 2172503519024023685991761815076867/8327517482186665963089297408 * eps^26
-         + 3793117143067735304052463936462682647/3654590529325348262658617376768 * eps^28
-         - 48227737126007159325773215007655970673/14212296502931909910339067576320 * eps^30;
-C1'[21] = + 80853671585727628548617/102547326354063360000 * eps^21
-         - 33710670766735229663452761/2793193841644011520000 * eps^23
-         + 7824467166805891507557010233/82231626697999699148800 * eps^25
-         - 12690496274820158383049352282653/24669488009399909744640000 * eps^27
-         + 56382836432185917384773311978295199/26314120543359903727616000000 * eps^29;
-C1'[22] = + 924898009889615635728755915083/685731017966622691295232000 * eps^22
-         - 34498885534979583771510062454227/1593112465983062818160640000 * eps^24
-         + 579153806014612787074377437506223/3238703930845567705625395200 * eps^26
-         - 1569950058036065954085485531335819511/1552386282642142415290368000000 * eps^28
-         + 13441093380769154612428393473490856259941/3053881893191980641891039313920000 * eps^30;
-C1'[23] = + 4016551943902862119978017069801911/1734899475455555408976936960000 * eps^23
-         - 7042743315770579684284446742015447/181032988743188390501941248000 * eps^25
-         + 600397969311873169056555916083822001/1787980135735193980266086400000 * eps^27
-         - 223977408534083722217209433995298286356287/112964584975749555673211338752000000 * eps^29;
-C1'[24] = + 33730424938117851020161782371647/8461634387224169042411520000 * eps^24
-         - 2466848731962947446637554898208789/35256809946767371010048000000 * eps^26
-         + 9241553981242966860439405699656735351/14666832937855226340179968000000 * eps^28
-         - 34121931746328650162120952716097657509/8800099762713135804107980800000 * eps^30;
-C1'[25] = + 251959060076566669691445659637541/36604472449172158079513395200 * eps^25
-         - 10775075917257378388661547627353189/85536969693571680015929573376 * eps^27
-         + 7072923673224417550895367212096744699801/5986219287034920454234815263145984 * eps^29;
-C1'[26] = + 18043464502912016496703680586663352917/1514094087670302902379872256000000 * eps^26
-         - 15705330809648579467084357186039173723679/69182452928935378770280316928000000 * eps^28
-         + 762509129435444486126998095414252687404107/344374876801811663212062022041600000 * eps^30;
-C1'[27] = + 819021838914972651233426418104059459/39600448932209111118485913600000 * eps^27
-         - 4425211305648392775905209005851207973/10807140059472272040132608000000 * eps^29;
-C1'[28] = + 137344334847260471742767128830849077140799/3817741892241658452955877081088000000 * eps^28
-         - 3056545074816755404384556140143837530441/4134995887021777596105338388480000 * eps^30;
-C1'[29] = + 2381352350093111938327626556685002210278872879/37975078602127776631552109325582336000000 * eps^29;
-C1'[30] = + 20034557328168749612075941075238883149/182929433787470496587153418485760 * eps^30;
-
-A2 = (1 + 1/4 * eps^2
-        + 9/64 * eps^4
-        + 25/256 * eps^6
-        + 1225/16384 * eps^8
-        + 3969/65536 * eps^10
-        + 53361/1048576 * eps^12
-        + 184041/4194304 * eps^14
-        + 41409225/1073741824 * eps^16
-        + 147744025/4294967296 * eps^18
-        + 2133423721/68719476736 * eps^20
-        + 7775536041/274877906944 * eps^22
-        + 457028729521/17592186044416 * eps^24
-        + 1690195005625/70368744177664 * eps^26
-        + 25145962430625/1125899906842624 * eps^28
-        + 93990019574025/4503599627370496 * eps^30) * (1 - eps);
-
-C2[1] = + 1/2 * eps
-        + 1/16 * eps^3
-        + 1/32 * eps^5
-        + 41/2048 * eps^7
-        + 59/4096 * eps^9
-        + 727/65536 * eps^11
-        + 1171/131072 * eps^13
-        + 498409/67108864 * eps^15
-        + 848479/134217728 * eps^17
-        + 11768921/2147483648 * eps^19
-        + 20705249/4294967296 * eps^21
-        + 2359256231/549755813888 * eps^23
-        + 4242171053/1099511627776 * eps^25
-        + 61534748221/17592186044416 * eps^27
-        + 112374407161/35184372088832 * eps^29;
-C2[2] = + 3/16 * eps^2
-        + 1/32 * eps^4
-        + 35/2048 * eps^6
-        + 47/4096 * eps^8
-        + 557/65536 * eps^10
-        + 875/131072 * eps^12
-        + 365987/67108864 * eps^14
-        + 615099/134217728 * eps^16
-        + 8448195/2147483648 * eps^18
-        + 14747697/4294967296 * eps^20
-        + 1669842701/549755813888 * eps^22
-        + 2986894505/1099511627776 * eps^24
-        + 43136495023/17592186044416 * eps^26
-        + 78481301201/35184372088832 * eps^28
-        + 294392827406755/144115188075855872 * eps^30;
-C2[3] = + 5/48 * eps^3
-        + 5/256 * eps^5
-        + 23/2048 * eps^7
-        + 191/24576 * eps^9
-        + 385/65536 * eps^11
-        + 39277/8388608 * eps^13
-        + 778613/201326592 * eps^15
-        + 879927/268435456 * eps^17
-        + 6084639/2147483648 * eps^19
-        + 512739193/206158430208 * eps^21
-        + 1215236729/549755813888 * eps^23
-        + 4364918719/2199023255552 * eps^25
-        + 94882584065/52776558133248 * eps^27
-        + 29549676515117/18014398509481984 * eps^29;
-C2[4] = + 35/512 * eps^4
-        + 7/512 * eps^6
-        + 133/16384 * eps^8
-        + 47/8192 * eps^10
-        + 73859/16777216 * eps^12
-        + 59533/16777216 * eps^14
-        + 1587387/536870912 * eps^16
-        + 169365/67108864 * eps^18
-        + 301539693/137438953472 * eps^20
-        + 265958173/137438953472 * eps^22
-        + 7594835095/4398046511104 * eps^24
-        + 3421780579/2199023255552 * eps^26
-        + 50930607972739/36028797018963968 * eps^28
-        + 46591933629593/36028797018963968 * eps^30;
-C2[5] = + 63/1280 * eps^5
-        + 21/2048 * eps^7
-        + 51/8192 * eps^9
-        + 2343/524288 * eps^11
-        + 29099/8388608 * eps^13
-        + 946609/335544320 * eps^15
-        + 635521/268435456 * eps^17
-        + 8729875/4294967296 * eps^19
-        + 122017589/68719476736 * eps^21
-        + 864489227/549755813888 * eps^23
-        + 15483449661/10995116277760 * eps^25
-        + 1433014740399/1125899906842624 * eps^27
-        + 20884832418219/18014398509481984 * eps^29;
-C2[6] = + 77/2048 * eps^6
-        + 33/4096 * eps^8
-        + 2607/524288 * eps^10
-        + 11363/3145728 * eps^12
-        + 189893/67108864 * eps^14
-        + 311117/134217728 * eps^16
-        + 25213345/12884901888 * eps^18
-        + 14502017/8589934592 * eps^20
-        + 814144243/549755813888 * eps^22
-        + 4341484325/3298534883328 * eps^24
-        + 1331147570487/1125899906842624 * eps^26
-        + 2412694071441/2251799813685248 * eps^28
-        + 422949801695839/432345564227567616 * eps^30;
-C2[7] = + 429/14336 * eps^7
-        + 429/65536 * eps^9
-        + 2145/524288 * eps^11
-        + 1573/524288 * eps^13
-        + 158899/67108864 * eps^15
-        + 1047631/536870912 * eps^17
-        + 7110437/4294967296 * eps^19
-        + 86245121/60129542144 * eps^21
-        + 694168021/549755813888 * eps^23
-        + 158428784829/140737488355328 * eps^25
-        + 1141580229945/1125899906842624 * eps^27
-        + 518508038199/562949953421312 * eps^29;
-C2[8] = + 6435/262144 * eps^8
-        + 715/131072 * eps^10
-        + 14443/4194304 * eps^12
-        + 10673/4194304 * eps^14
-        + 4339205/2147483648 * eps^16
-        + 898561/536870912 * eps^18
-        + 24498667/17179869184 * eps^20
-        + 21302303/17179869184 * eps^22
-        + 616428279683/562949953421312 * eps^24
-        + 275528165297/281474976710656 * eps^26
-        + 7960491282361/9007199254740992 * eps^28
-        + 7246735300607/9007199254740992 * eps^30;
-C2[9] = + 12155/589824 * eps^9
-        + 2431/524288 * eps^11
-        + 1547/524288 * eps^13
-        + 441779/201326592 * eps^15
-        + 940321/536870912 * eps^17
-        + 6258091/4294967296 * eps^19
-        + 32109515/25769803776 * eps^21
-        + 4780137299/4398046511104 * eps^23
-        + 135454151123/140737488355328 * eps^25
-        + 8739550412095/10133099161583616 * eps^27
-        + 439310252633/562949953421312 * eps^29;
-C2[10] = + 46189/2621440 * eps^10
-        + 4199/1048576 * eps^12
-        + 172159/67108864 * eps^14
-        + 257431/134217728 * eps^16
-        + 6604381/4294967296 * eps^18
-        + 55148051/42949672960 * eps^20
-        + 4844658589/4398046511104 * eps^22
-        + 8475408793/8796093022208 * eps^24
-        + 963016659745/1125899906842624 * eps^26
-        + 1729685026007/2251799813685248 * eps^28
-        + 100354915132471/144115188075855872 * eps^30;
-C2[11] = + 88179/5767168 * eps^11
-        + 29393/8388608 * eps^13
-        + 151487/67108864 * eps^15
-        + 455107/268435456 * eps^17
-        + 5860189/4294967296 * eps^19
-        + 628398115/549755813888 * eps^21
-        + 4324974541/4398046511104 * eps^23
-        + 15169948479/17592186044416 * eps^25
-        + 863724574545/1125899906842624 * eps^27
-        + 12434905703529/18014398509481984 * eps^29;
-C2[12] = + 676039/50331648 * eps^12
-        + 52003/16777216 * eps^14
-        + 1077205/536870912 * eps^16
-        + 304589/201326592 * eps^18
-        + 1343185487/1099511627776 * eps^20
-        + 1128482143/1099511627776 * eps^22
-        + 93435460751/105553116266496 * eps^24
-        + 13685462553/17592186044416 * eps^26
-        + 24983462965221/36028797018963968 * eps^28
-        + 67559103579581/108086391056891904 * eps^30;
-C2[13] = + 1300075/109051904 * eps^13
-        + 185725/67108864 * eps^15
-        + 482885/268435456 * eps^17
-        + 46765555/34359738368 * eps^19
-        + 605955125/549755813888 * eps^21
-        + 4083133535/4398046511104 * eps^23
-        + 14117902665/17592186044416 * eps^25
-        + 776981055/1099511627776 * eps^27
-        + 11367459987135/18014398509481984 * eps^29;
-C2[14] = + 5014575/469762048 * eps^14
-        + 334305/134217728 * eps^16
-        + 55828935/34359738368 * eps^18
-        + 84736485/68719476736 * eps^20
-        + 4403236035/4398046511104 * eps^22
-        + 7434490215/8796093022208 * eps^24
-        + 12878639895/17592186044416 * eps^26
-        + 79525490115/123145302310912 * eps^28
-        + 83239672976625/144115188075855872 * eps^30;
-C2[15] = + 646323/67108864 * eps^15
-        + 9694845/4294967296 * eps^17
-        + 50755365/34359738368 * eps^19
-        + 77241935/68719476736 * eps^21
-        + 4023100545/4398046511104 * eps^23
-        + 13613065131/17592186044416 * eps^25
-        + 738265615/1099511627776 * eps^27
-        + 166992644595/281474976710656 * eps^29;
-C2[16] = + 300540195/34359738368 * eps^16
-        + 17678835/8589934592 * eps^18
-        + 371255535/274877906944 * eps^20
-        + 283171515/274877906944 * eps^22
-        + 118236358635/140737488355328 * eps^24
-        + 50102128545/70368744177664 * eps^26
-        + 1393471517565/2251799813685248 * eps^28
-        + 1233068062875/2251799813685248 * eps^30;
-C2[17] = + 583401555/73014444032 * eps^17
-        + 64822395/34359738368 * eps^19
-        + 85292625/68719476736 * eps^21
-        + 4172515215/4398046511104 * eps^23
-        + 13636584885/17592186044416 * eps^25
-        + 2894056305/4398046511104 * eps^27
-        + 161224515885/281474976710656 * eps^29;
-C2[18] = + 756261275/103079215104 * eps^18
-        + 119409675/68719476736 * eps^20
-        + 5039088285/4398046511104 * eps^22
-        + 7718413945/8796093022208 * eps^24
-        + 12634163925/17592186044416 * eps^26
-        + 10741625085/17592186044416 * eps^28
-        + 76701028811195/144115188075855872 * eps^30;
-C2[19] = + 4418157975/652835028992 * eps^19
-        + 883631595/549755813888 * eps^21
-        + 4670624145/4398046511104 * eps^23
-        + 14333193015/17592186044416 * eps^25
-        + 2937289215/4398046511104 * eps^27
-        + 10243215614805/18014398509481984 * eps^29;
-C2[20] = + 6892326441/1099511627776 * eps^20
-        + 1641030105/1099511627776 * eps^22
-        + 34760001315/35184372088832 * eps^24
-        + 13355260815/17592186044416 * eps^26
-        + 22452476602335/36028797018963968 * eps^28
-        + 95701981543233/180143985094819840 * eps^30;
-C2[21] = + 22427411435/3848290697216 * eps^21
-        + 6116566755/4398046511104 * eps^23
-        + 16222198785/17592186044416 * eps^25
-        + 798965451635/1125899906842624 * eps^27
-        + 10507463872035/18014398509481984 * eps^29;
-C2[22] = + 263012370465/48378511622144 * eps^22
-        + 11435320455/8796093022208 * eps^24
-        + 972002238675/1125899906842624 * eps^26
-        + 1498026979605/2251799813685248 * eps^28
-        + 78899312939325/144115188075855872 * eps^30;
-C2[23] = + 514589420475/101155069755392 * eps^23
-        + 171529806825/140737488355328 * eps^25
-        + 912538572309/1125899906842624 * eps^27
-        + 352031942007/562949953421312 * eps^29;
-C2[24] = + 2687300306925/562949953421312 * eps^24
-        + 322476036831/281474976710656 * eps^26
-        + 6871220169399/9007199254740992 * eps^28
-        + 15922598844211/27021597764222976 * eps^30;
-C2[25] = + 15801325804719/3518437208883200 * eps^25
-        + 1215486600363/1125899906842624 * eps^27
-        + 405162200121/562949953421312 * eps^29;
-C2[26] = + 61989816618513/14636698788954112 * eps^26
-        + 2295919134019/2251799813685248 * eps^28
-        + 98068545867383/144115188075855872 * eps^30;
-C2[27] = + 121683714103007/30399297484750848 * eps^27
-        + 17383387729001/18014398509481984 * eps^29;
-C2[28] = + 136583760727865/36028797018963968 * eps^28
-        + 32968493968795/36028797018963968 * eps^30;
-C2[29] = + 1879204156221315/522417556774977536 * eps^29;
-C2[30] = + 7391536347803839/2161727821137838080 * eps^30;
-
-A3 = 1 - (1/2 - 1/2*n) * eps
-       - (1/4 + 1/8*n - 3/8*n^2) * eps^2
-       - (1/16 + 3/16*n + 1/16*n^2 - 5/16*n^3) * eps^3
-       - (3/64 + 1/32*n + 5/32*n^2 + 5/128*n^3 - 35/128*n^4) * eps^4
-       - (3/128 + 5/128*n + 5/256*n^2 + 35/256*n^3 + 7/256*n^4 - 63/256*n^5) * eps^5
-       - (5/256 + 15/1024*n + 35/1024*n^2 + 7/512*n^3 + 63/512*n^4 + 21/1024*n^5 - 231/1024*n^6) * eps^6
-       - (25/2048 + 35/2048*n + 21/2048*n^2 + 63/2048*n^3 + 21/2048*n^4 + 231/2048*n^5 + 33/2048*n^6 - 429/2048*n^7) * eps^7
-       - (175/16384 + 35/4096*n + 63/4096*n^2 + 63/8192*n^3 + 231/8192*n^4 + 33/4096*n^5 + 429/4096*n^6 + 429/32768*n^7 - 6435/32768*n^8) * eps^8
-       - (245/32768 + 315/32768*n + 105/16384*n^2 + 231/16384*n^3 + 99/16384*n^4 + 429/16384*n^5 + 429/65536*n^6 + 6435/65536*n^7 + 715/65536*n^8 - 12155/65536*n^9) * eps^9
-       - (441/65536 + 735/131072*n + 1155/131072*n^2 + 165/32768*n^3 + 429/32768*n^4 + 1287/262144*n^5 + 6435/262144*n^6 + 715/131072*n^7 + 12155/131072*n^8 + 2431/262144*n^9 - 46189/262144*n^10) * eps^10
-       - (1323/262144 + 1617/262144*n + 1155/262144*n^2 + 2145/262144*n^3 + 2145/524288*n^4 + 6435/524288*n^5 + 2145/524288*n^6 + 12155/524288*n^7 + 2431/524288*n^8 + 46189/524288*n^9 + 4199/524288*n^10 - 88179/524288*n^11) * eps^11
-       - (4851/1048576 + 2079/524288*n + 3003/524288*n^2 + 15015/4194304*n^3 + 32175/4194304*n^4 + 3575/1048576*n^5 + 12155/1048576*n^6 + 7293/2097152*n^7 + 46189/2097152*n^8 + 4199/1048576*n^9 + 88179/1048576*n^10 + 29393/4194304*n^11 - 676039/4194304*n^12) * eps^12
-       - (7623/2097152 + 9009/2097152*n + 27027/8388608*n^2 + 45045/8388608*n^3 + 25025/8388608*n^4 + 60775/8388608*n^5 + 12155/4194304*n^6 + 46189/4194304*n^7 + 12597/4194304*n^8 + 88179/4194304*n^9 + 29393/8388608*n^10 + 676039/8388608*n^11 + 52003/8388608*n^12 - 1300075/8388608*n^13) * eps^13
-       - (14157/4194304 + 99099/33554432*n + 135135/33554432*n^2 + 45045/16777216*n^3 + 85085/16777216*n^4 + 85085/33554432*n^5 + 230945/33554432*n^6 + 20995/8388608*n^7 + 88179/8388608*n^8 + 88179/33554432*n^9 + 676039/33554432*n^10 + 52003/16777216*n^11 + 1300075/16777216*n^12 + 185725/33554432*n^13 - 5014575/33554432*n^14) * eps^14
-       - (184041/67108864 + 212355/67108864*n + 165165/67108864*n^2 + 255255/67108864*n^3 + 153153/67108864*n^4 + 323323/67108864*n^5 + 146965/67108864*n^6 + 440895/67108864*n^7 + 146965/67108864*n^8 + 676039/67108864*n^9 + 156009/67108864*n^10 + 1300075/67108864*n^11 + 185725/67108864*n^12 + 5014575/67108864*n^13 + 334305/67108864*n^14) * eps^15
-       - (2760615/1073741824 + 306735/134217728*n + 401115/134217728*n^2 + 561561/268435456*n^3 + 969969/268435456*n^4 + 264537/134217728*n^5 + 617253/134217728*n^6 + 1028755/536870912*n^7 + 3380195/536870912*n^8 + 260015/134217728*n^9 + 1300075/134217728*n^10 + 557175/268435456*n^11 + 5014575/268435456*n^12 + 334305/134217728*n^13) * eps^16
-       - (4601025/2147483648 + 5214495/2147483648*n + 1042899/536870912*n^2 + 1524237/536870912*n^3 + 969969/536870912*n^4 + 1851759/536870912*n^5 + 1851759/1073741824*n^6 + 4732273/1073741824*n^7 + 1820105/1073741824*n^8 + 6500375/1073741824*n^9 + 928625/536870912*n^10 + 5014575/536870912*n^11 + 1002915/536870912*n^12) * eps^17
-       - (8690825/4294967296 + 15643485/8589934592*n + 19815081/8589934592*n^2 + 1801371/1073741824*n^3 + 2909907/1073741824*n^4 + 6789783/4294967296*n^5 + 14196819/4294967296*n^6 + 3276189/2147483648*n^7 + 9100525/2147483648*n^8 + 6500375/4294967296*n^9 + 25072875/4294967296*n^10 + 1671525/1073741824*n^11) * eps^18
-       - (29548805/17179869184 + 33025135/17179869184*n + 27020565/17179869184*n^2 + 37828791/17179869184*n^3 + 12609597/8589934592*n^4 + 22309287/8589934592*n^5 + 12012693/8589934592*n^6 + 27301575/8589934592*n^7 + 11700675/8589934592*n^8 + 35102025/8589934592*n^9 + 11700675/8589934592*n^10) * eps^19
-       - (112285459/68719476736 + 51038845/34359738368*n + 63047985/34359738368*n^2 + 189143955/137438953472*n^3 + 290020731/137438953472*n^4 + 22309287/17179869184*n^5 + 42902475/17179869184*n^6 + 42902475/34359738368*n^7 + 105306075/34359738368*n^8 + 21061215/17179869184*n^9) * eps^20
-       - (193947611/137438953472 + 214363149/137438953472*n + 357271915/274877906944*n^2 + 483367885/274877906944*n^3 + 334639305/274877906944*n^4 + 557732175/274877906944*n^5 + 79676025/68719476736*n^6 + 165480975/68719476736*n^7 + 77224455/68719476736*n^8) * eps^21
-       - (370263621/274877906944 + 1357633277/1099511627776*n + 1643450809/1099511627776*n^2 + 632096465/549755813888*n^3 + 929553625/549755813888*n^4 + 1195140375/1099511627776*n^5 + 2151252675/1099511627776*n^6 + 143416845/137438953472*n^7) * eps^22
-       - (2591845347/2199023255552 + 2838687761/2199023255552*n + 2401966567/2199023255552*n^2 + 3160482325/2199023255552*n^3 + 2257487375/2199023255552*n^4 + 3585421125/2199023255552*n^5 + 2151252675/2199023255552*n^6) * eps^23
-       - (19870814327/17592186044416 + 4585572537/4398046511104*n + 5459014925/4398046511104*n^2 + 8578452025/8796093022208*n^3 + 12190431825/8796093022208*n^4 + 4063477275/4398046511104*n^5) * eps^24
-       - (35156056117/35184372088832 + 38213104475/35184372088832*n + 16377044775/17592186044416*n^2 + 21056200425/17592186044416*n^3 + 15441213645/17592186044416*n^4) * eps^25
-       - (67607800225/70368744177664 + 125557343275/140737488355328*n + 147393402975/140737488355328*n^2 + 29478680595/35184372088832*n^3) * eps^26
-       - (241456429375/281474976710656 + 260772943725/281474976710656*n + 226003217895/281474976710656*n^2) * eps^27
-       - (931331941875/1125899906842624 + 434621572875/562949953421312*n) * eps^28
-       - 1676397495375/2251799813685248 * eps^29;
-
-C3[1] = + (1/4 - 1/4*n) * eps
-        + (1/8 - 1/8*n^2) * eps^2
-        + (3/64 + 3/64*n - 1/64*n^2 - 5/64*n^3) * eps^3
-        + (5/128 + 1/64*n + 1/64*n^2 - 1/64*n^3 - 7/128*n^4) * eps^4
-        + (3/128 + 11/512*n + 3/512*n^2 + 1/256*n^3 - 7/512*n^4 - 21/512*n^5) * eps^5
-        + (21/1024 + 5/512*n + 13/1024*n^2 + 1/512*n^3 - 1/1024*n^4 - 3/256*n^5 - 33/1024*n^6) * eps^6
-        + (243/16384 + 189/16384*n + 83/16384*n^2 + 127/16384*n^3 + 3/16384*n^4 - 51/16384*n^5 - 165/16384*n^6 - 429/16384*n^7) * eps^7
-        + (435/32768 + 109/16384*n + 1/128*n^2 + 45/16384*n^3 + 39/8192*n^4 - 11/16384*n^5 - 33/8192*n^6 - 143/16384*n^7 - 715/32768*n^8) * eps^8
-        + (345/32768 + 953/131072*n + 259/65536*n^2 + 365/65536*n^3 + 95/65536*n^4 + 47/16384*n^5 - 143/131072*n^6 - 143/32768*n^7 - 1001/131072*n^8 - 2431/131072*n^9) * eps^9
-        + (2511/262144 + 317/65536*n + 1355/262144*n^2 + 165/65536*n^3 + 531/131072*n^4 + 89/131072*n^5 + 107/65536*n^6 - 169/131072*n^7 - 1157/262144*n^8 - 221/32768*n^9 - 4199/262144*n^10) * eps^10
-        + (8401/1048576 + 5327/1048576*n + 807/262144*n^2 + 8243/2097152*n^3 + 3415/2097152*n^4 + 6235/2097152*n^5 + 429/2097152*n^6 + 845/1048576*n^7 - 2873/2097152*n^8 - 9061/2097152*n^9 - 12597/2097152*n^10 - 29393/2097152*n^11) * eps^11
-        + (15477/2097152 + 969/262144*n + 15445/4194304*n^2 + 2237/1048576*n^3 + 6429/2097152*n^4 + 2183/2097152*n^5 + 9169/4194304*n^6 - 197/2097152*n^7 + 1019/4194304*n^8 - 2907/2097152*n^9 - 8721/2097152*n^10 - 11305/2097152*n^11 - 52003/4194304*n^12) * eps^12
-        + (26789/4194304 + 63733/16777216*n + 40995/16777216*n^2 + 1517/524288*n^3 + 25475/16777216*n^4 + 40625/16777216*n^5 + 5365/8388608*n^6 + 839/524288*n^7 - 595/2097152*n^8 - 2431/16777216*n^9 - 22933/16777216*n^10 - 33269/8388608*n^11 - 81719/16777216*n^12 - 185725/16777216*n^13) * eps^13
-        + (199327/33554432 + 49237/16777216*n + 93101/33554432*n^2 + 29853/16777216*n^3 + 78579/33554432*n^4 + 285/262144*n^5 + 64637/33554432*n^6 + 3015/8388608*n^7 + 38843/33554432*n^8 - 6783/16777216*n^9 - 13889/33554432*n^10 - 22287/16777216*n^11 - 126293/33554432*n^12 - 37145/8388608*n^13 - 334305/33554432*n^14) * eps^14
-        + (5651931/1073741824 + 3197305/1073741824*n + 2129255/1073741824*n^2 + 2385073/1073741824*n^3 + 1438067/1073741824*n^4 + 2065081/1073741824*n^5 + 830627/1073741824*n^6 + 1651687/1073741824*n^7 + 172907/1073741824*n^8 + 879393/1073741824*n^9 - 515185/1073741824*n^10 - 645031/1073741824*n^11 - 1374365/1073741824*n^12 - 3825935/1073741824*n^13 - 4345965/1073741824*n^14) * eps^15
-        + (10594535/2147483648 + 2577049/1073741824*n + 2340339/1073741824*n^2 + 1599809/1073741824*n^3 + 1974139/1073741824*n^4 + 1095805/1073741824*n^5 + 855347/536870912*n^6 + 580477/1073741824*n^7 + 330109/268435456*n^8 + 20577/1073741824*n^9 + 598443/1073741824*n^10 - 564167/1073741824*n^11 - 783541/1073741824*n^12 - 1317555/1073741824*n^13) * eps^16
-        + (9550675/2147483648 + 20752127/8589934592*n + 7056899/4294967296*n^2 + 7580255/4294967296*n^3 + 4992507/4294967296*n^4 + 3321125/2147483648*n^5 + 3349163/4294967296*n^6 + 5700229/4294967296*n^7 + 1567945/4294967296*n^8 + 263547/268435456*n^9 - 355965/4294967296*n^10 + 1518119/4294967296*n^11 - 2366355/4294967296*n^12) * eps^17
-        + (72058593/17179869184 + 8629549/4294967296*n + 30360645/17179869184*n^2 + 5413229/4294967296*n^3 + 12734831/8589934592*n^4 + 3957093/4294967296*n^5 + 11280727/8589934592*n^6 + 2549757/4294967296*n^7 + 9531415/8589934592*n^8 + 993989/4294967296*n^9 + 6705875/8589934592*n^10 - 671807/4294967296*n^11) * eps^18
-        + (263253385/68719476736 + 138258975/68719476736*n + 23816915/17179869184*n^2 + 198093717/137438953472*n^3 + 69240987/68719476736*n^4 + 87088843/68719476736*n^5 + 50514007/68719476736*n^6 + 77115649/68719476736*n^7 + 30761115/68719476736*n^8 + 63886991/68719476736*n^9 + 8860067/68719476736*n^10) * eps^19
-        + (499116509/137438953472 + 29445517/17179869184*n + 403691887/274877906944*n^2 + 37063307/34359738368*n^3 + 336216217/274877906944*n^4 + 56373745/68719476736*n^5 + 9400419/8589934592*n^6 + 40361177/68719476736*n^7 + 4136725/4294967296*n^8 + 22806365/68719476736*n^9) * eps^20
-        + (921106197/274877906944 + 1880398291/1099511627776*n + 326574877/274877906944*n^2 + 661516723/549755813888*n^3 + 482354011/549755813888*n^4 + 1162954687/1099511627776*n^5 + 185209863/274877906944*n^6 + 261495221/274877906944*n^7 + 64353371/137438953472*n^8) * eps^21
-        + (7015755337/2199023255552 + 408123935/274877906944*n + 2737209361/2199023255552*n^2 + 128335869/137438953472*n^3 + 2262026963/2199023255552*n^4 + 100083329/137438953472*n^5 + 2032983351/2199023255552*n^6 + 152722157/274877906944*n^7) * eps^22
-        + (52217815849/17592186044416 + 25998927035/17592186044416*n + 18152051013/17592186044416*n^2 + 17993187773/17592186044416*n^3 + 13531950573/17592186044416*n^4 + 15783055573/17592186044416*n^5 + 1342789487/2199023255552*n^6) * eps^23
-        + (99797592861/35184372088832 + 22918110427/17592186044416*n + 9429859753/8796093022208*n^2 + 14370219019/17592186044416*n^3 + 15464224607/17592186044416*n^4 + 5696035625/8796093022208*n^5) * eps^24
-        + (93477766213/35184372088832 + 182178015931/140737488355328*n + 63784112813/70368744177664*n^2 + 15523581719/17592186044416*n^3 + 47802611279/70368744177664*n^4) * eps^25
-        + (716876091533/281474976710656 + 81306684531/70368744177664*n + 263375014467/281474976710656*n^2 + 50762313771/70368744177664*n^3) * eps^26
-        + (2701098070323/1125899906842624 + 1291014428313/1125899906842624*n + 905405918351/1125899906842624*n^2) * eps^27
-        + (5192918413211/2251799813685248 + 1164465998161/1125899906842624*n) * eps^28
-        + 4914956648311/2251799813685248 * eps^29;
-C3[2] = + (1/16 - 3/32*n + 1/32*n^2) * eps^2
-        + (3/64 - 1/32*n - 3/64*n^2 + 1/32*n^3) * eps^3
-        + (3/128 + 1/128*n - 9/256*n^2 - 3/128*n^3 + 7/256*n^4) * eps^4
-        + (5/256 + 1/256*n - 1/128*n^2 - 7/256*n^3 - 3/256*n^4 + 3/128*n^5) * eps^5
-        + (27/2048 + 69/8192*n - 39/8192*n^2 - 47/4096*n^3 - 41/2048*n^4 - 45/8192*n^5 + 165/8192*n^6) * eps^6
-        + (187/16384 + 39/8192*n + 31/16384*n^2 - 63/8192*n^3 - 185/16384*n^4 - 119/8192*n^5 - 33/16384*n^6 + 143/8192*n^7) * eps^7
-        + (287/32768 + 47/8192*n + 31/65536*n^2 - 3/2048*n^3 - 537/65536*n^4 - 41/4096*n^5 - 693/65536*n^6 + 1001/65536*n^8) * eps^8
-        + (255/32768 + 249/65536*n + 43/16384*n^2 - 119/65536*n^3 - 25/8192*n^4 - 507/65536*n^5 - 35/4096*n^6 - 507/65536*n^7 + 39/32768*n^8 + 221/16384*n^9) * eps^9
-        + (1675/262144 + 2127/524288*n + 753/524288*n^2 + 357/524288*n^3 - 3109/1048576*n^4 - 3873/1048576*n^5 - 1821/262144*n^6 - 1885/262144*n^7 - 2977/524288*n^8 + 1989/1048576*n^9 + 12597/1048576*n^10) * eps^10
-        + (6065/1048576 + 1551/524288*n + 75/32768*n^2 - 5/262144*n^3 - 1085/2097152*n^4 - 1815/524288*n^5 - 8057/2097152*n^6 - 1597/262144*n^7 - 12633/2097152*n^8 - 4369/1048576*n^9 + 4845/2097152*n^10 + 11305/1048576*n^11) * eps^11
-        + (10377/2097152 + 1585/524288*n + 12521/8388608*n^2 + 73/65536*n^3 - 7799/8388608*n^4 - 645/524288*n^5 - 1883/524288*n^6 - 7843/2097152*n^7 - 2769/524288*n^8 - 21165/4194304*n^9 - 25517/8388608*n^10 + 10659/4194304*n^11 + 81719/8388608*n^12) * eps^12
-        + (2381/524288 + 19679/8388608*n + 3951/2097152*n^2 + 4591/8388608*n^3 + 1267/4194304*n^4 - 6211/4194304*n^5 - 6839/4194304*n^6 - 3691/1048576*n^7 - 29513/8388608*n^8 - 38199/8388608*n^9 - 17765/4194304*n^10 - 18411/8388608*n^11 + 22287/8388608*n^12 + 37145/4194304*n^13) * eps^13
-        + (267955/67108864 + 1262293/536870912*n + 723929/536870912*n^2 + 300995/268435456*n^3 - 28407/268435456*n^4 - 136037/536870912*n^5 - 962677/536870912*n^6 - 122923/67108864*n^7 - 897497/268435456*n^8 - 1743367/536870912*n^9 - 2103053/536870912*n^10 - 957049/268435456*n^11 - 52003/33554432*n^12 + 1448655/536870912*n^13 + 4345965/536870912*n^14) * eps^14
-        + (3976491/1073741824 + 1022503/536870912*n + 1663043/1073741824*n^2 + 377461/536870912*n^3 + 604683/1073741824*n^4 - 298493/536870912*n^5 - 671633/1073741824*n^6 - 1045847/536870912*n^7 - 2047913/1073741824*n^8 - 1673607/536870912*n^9 - 3182937/1073741824*n^10 - 1808097/536870912*n^11 - 3232489/1073741824*n^12 - 565915/536870912*n^13 + 2890755/1073741824*n^14) * eps^15
-        + (7129743/2147483648 + 1015025/536870912*n + 5052845/4294967296*n^2 + 1096857/1073741824*n^3 + 1006901/4294967296*n^4 + 10157/67108864*n^5 - 3691453/4294967296*n^6 - 232785/268435456*n^7 - 8591613/4294967296*n^8 - 2045245/1073741824*n^9 - 12341583/4294967296*n^10 - 1443525/536870912*n^11 - 12440079/4294967296*n^12 - 2737805/1073741824*n^13) * eps^16
-        + (6667727/2147483648 + 6786587/4294967296*n + 2765703/2147483648*n^2 + 3065499/4294967296*n^3 + 1341327/2147483648*n^4 - 481047/4294967296*n^5 - 80463/536870912*n^6 - 4538443/4294967296*n^7 - 2183311/2147483648*n^8 - 8533921/4294967296*n^9 - 3983383/2147483648*n^10 - 11294905/4294967296*n^11 - 5218401/2147483648*n^12) * eps^17
-        + (48519273/17179869184 + 53624999/34359738368*n + 35043145/34359738368*n^2 + 31055675/34359738368*n^3 + 25399201/68719476736*n^4 + 10932099/34359738368*n^5 - 25183979/68719476736*n^6 - 12612269/34359738368*n^7 - 80897803/68719476736*n^8 - 37844017/34359738368*n^9 - 132790935/68719476736*n^10 - 61071857/34359738368*n^11) * eps^18
-        + (182709161/68719476736 + 45893303/34359738368*n + 37309115/34359738368*n^2 + 2893075/4294967296*n^3 + 21013705/34359738368*n^4 + 7175491/68719476736*n^5 + 2804597/34359738368*n^6 - 37828469/68719476736*n^7 - 17888297/34359738368*n^8 - 85404217/68719476736*n^9 - 39202063/34359738368*n^10) * eps^19
-        + (336130837/137438953472 + 180823959/137438953472*n + 487608355/549755813888*n^2 + 218243165/274877906944*n^3 + 227499107/549755813888*n^4 + 104333133/274877906944*n^5 - 13837431/137438953472*n^6 - 27388031/274877906944*n^7 - 93516413/137438953472*n^8 - 172126779/274877906944*n^9) * eps^20
-        + (636339537/274877906944 + 630601557/549755813888*n + 510119863/549755813888*n^2 + 339882125/549755813888*n^3 + 157181907/274877906944*n^4 + 57322697/274877906944*n^5 + 53319741/274877906944*n^6 - 35494201/137438953472*n^7 - 65167699/274877906944*n^8) * eps^21
-        + (4724647749/2199023255552 + 9924101863/8796093022208*n + 6828890391/8796093022208*n^2 + 3070661829/4398046511104*n^3 + 229152657/549755813888*n^4 + 3452592737/8796093022208*n^5 + 390195853/8796093022208*n^6 + 403726013/8796093022208*n^7) * eps^22
-        + (35940468233/17592186044416 + 8781999081/8796093022208*n + 14121810537/17592186044416*n^2 + 4938417863/8796093022208*n^3 + 9227803497/17592186044416*n^4 + 2245716697/8796093022208*n^5 + 2160045085/8796093022208*n^6) * eps^23
-        + (67197451821/35184372088832 + 8631642763/8796093022208*n + 48175476253/70368744177664*n^2 + 5424112681/8796093022208*n^3 + 28247205103/70368744177664*n^4 + 421237869/1099511627776*n^5) * eps^24
-        + (64142976365/35184372088832 + 61855152171/70368744177664*n + 385976459/549755813888*n^2 + 35768834103/70368744177664*n^3 + 16801928753/35184372088832*n^4) * eps^25
-        + (482598495517/281474976710656 + 486224128685/562949953421312*n + 342398306855/562949953421312*n^2 + 2408805385/4398046511104*n^3) * eps^26
-        + (1848743160243/1125899906842624 + 439979250473/562949953421312*n + 698099481901/1125899906842624*n^2) * eps^27
-        + (3494999262339/2251799813685248 + 1729207092437/2251799813685248*n) * eps^28
-        + 6713540223121/4503599627370496 * eps^29;
-C3[3] = + (5/192 - 3/64*n + 5/192*n^2 - 1/192*n^3) * eps^3
-        + (3/128 - 5/192*n - 1/64*n^2 + 5/192*n^3 - 1/128*n^4) * eps^4
-        + (7/512 - 1/384*n - 77/3072*n^2 + 5/3072*n^3 + 65/3072*n^4 - 9/1024*n^5) * eps^5
-        + (3/256 - 1/1024*n - 71/6144*n^2 - 47/3072*n^3 + 9/1024*n^4 + 25/1536*n^5 - 55/6144*n^6) * eps^6
-        + (139/16384 + 143/49152*n - 383/49152*n^2 - 179/16384*n^3 - 121/16384*n^4 + 547/49152*n^5 + 605/49152*n^6 - 143/16384*n^7) * eps^7
-        + (243/32768 + 95/49152*n - 41/16384*n^2 - 147/16384*n^3 - 389/49152*n^4 - 109/49152*n^5 + 557/49152*n^6 + 455/49152*n^7 - 273/32768*n^8) * eps^8
-        + (581/98304 + 377/131072*n - 33/16384*n^2 - 907/196608*n^3 - 515/65536*n^4 - 1937/393216*n^5 + 89/98304*n^6 + 2093/196608*n^7 + 455/65536*n^8 - 1547/196608*n^9) * eps^9
-        + (1383/262144 + 103/49152*n - 17/262144*n^2 - 127/32768*n^3 - 3853/786432*n^4 - 25/4096*n^5 - 2011/786432*n^6 + 265/98304*n^7 + 1895/196608*n^8 + 85/16384*n^9 - 969/131072*n^10) * eps^10
-        + (4649/1048576 + 7447/3145728*n - 77/393216*n^2 - 3663/2097152*n^3 - 9285/2097152*n^4 - 27433/6291456*n^5 - 27545/6291456*n^6 - 2627/3145728*n^7 + 22993/6291456*n^8 + 17969/2097152*n^9 + 8075/2097152*n^10 - 14535/2097152*n^11) * eps^11
-        + (8439/2097152 + 241/131072*n + 7829/12582912*n^2 - 1667/1048576*n^3 - 5295/2097152*n^4 - 26867/6291456*n^5 - 14817/4194304*n^6 - 18287/6291456*n^7 + 1505/4194304*n^8 + 25823/6291456*n^9 + 15827/2097152*n^10 + 17765/6291456*n^11 - 81719/12582912*n^12) * eps^12
-        + (58663/16777216 + 48239/25165824*n + 81155/201326592*n^2 - 108067/201326592*n^3 - 467735/201326592*n^4 - 550477/201326592*n^5 - 380633/100663296*n^6 - 269125/100663296*n^7 - 174181/100663296*n^8 + 9707/8388608*n^9 + 854981/201326592*n^10 + 444125/67108864*n^11 + 408595/201326592*n^12 - 408595/67108864*n^13) * eps^13
-        + (53929/16777216 + 313117/201326592*n + 317377/402653184*n^2 - 114511/201326592*n^3 - 62369/50331648*n^4 - 21877/8388608*n^5 - 1055003/402653184*n^6 - 106461/33554432*n^7 - 381119/201326592*n^8 - 55243/67108864*n^9 + 672619/402653184*n^10 + 846887/201326592*n^11 + 1166353/201326592*n^12 + 142025/100663296*n^13 - 766935/134217728*n^14) * eps^14
-        + (9205697/3221225472 + 1685361/1073741824*n + 631247/1073741824*n^2 - 12349/1073741824*n^3 - 1279425/1073741824*n^4 - 1722535/1073741824*n^5 - 8411347/3221225472*n^6 - 7543081/3221225472*n^7 - 2745069/1073741824*n^8 - 1319223/1073741824*n^9 - 150233/1073741824*n^10 + 6386185/3221225472*n^11 + 4360823/1073741824*n^12 + 16332875/3221225472*n^13 + 994175/1073741824*n^14) * eps^15
-        + (5698375/2147483648 + 1411153/1073741824*n + 633185/805306368*n^2 - 312125/3221225472*n^3 - 906475/1610612736*n^4 - 4985293/3221225472*n^5 - 1865903/1073741824*n^6 - 2632335/1073741824*n^7 - 2142387/1073741824*n^8 - 2132439/1073741824*n^9 - 137693/201326592*n^10 + 1176251/3221225472*n^11 + 3469849/1610612736*n^12 + 12431155/3221225472*n^13) * eps^16
-        + (5151335/2147483648 + 11221815/8589934592*n + 4004635/6442450944*n^2 + 352181/1610612736*n^3 - 7504877/12884901888*n^4 - 23563667/25769803776*n^5 - 7348445/4294967296*n^6 - 924507/536870912*n^7 - 4740015/2147483648*n^8 - 14053273/8589934592*n^9 - 2388169/1610612736*n^10 - 1600145/6442450944*n^11 + 9427907/12884901888*n^12) * eps^17
-        + (38568657/17179869184 + 2405303/2147483648*n + 12559943/17179869184*n^2 + 101021/805306368*n^3 - 3473571/17179869184*n^4 - 11685365/12884901888*n^5 - 57369983/51539607552*n^6 - 22445501/12884901888*n^7 - 27767351/17179869184*n^8 - 776185/402653184*n^9 - 22223933/17179869184*n^10 - 6776669/6442450944*n^11) * eps^18
-        + (141238745/68719476736 + 227781229/206158430208*n + 15439981/25769803776*n^2 + 129846877/412316860416*n^3 - 17007629/68719476736*n^4 - 34417161/68719476736*n^5 - 227700493/206158430208*n^6 - 82496459/68719476736*n^7 - 347760895/206158430208*n^8 - 100402157/68719476736*n^9 - 338650721/206158430208*n^10) * eps^19
-        + (266070741/137438953472 + 24865997/25769803776*n + 546610979/824633720832*n^2 + 23564155/103079215104*n^3 - 1988681/274877906944*n^4 - 35689789/68719476736*n^5 - 18022529/25769803776*n^6 - 82884377/68719476736*n^7 - 62369083/51539607552*n^8 - 108501709/68719476736*n^9) * eps^20
-        + (1476084109/824633720832 + 1042422451/1099511627776*n + 1838348957/3298534883328*n^2 + 1148287217/3298534883328*n^3 - 65602265/1099511627776*n^4 - 25911799/103079215104*n^5 - 1166561623/1649267441664*n^6 - 450241025/549755813888*n^7 - 4082983123/3298534883328*n^8) * eps^21
-        + (3727307793/2199023255552 + 2771727475/3298534883328*n + 1965618587/3298534883328*n^2 + 299691921/1099511627776*n^3 + 648655007/6597069766656*n^4 - 232283647/824633720832*n^5 - 1414792807/3298534883328*n^6 - 1364945647/1649267441664*n^7) * eps^22
-        + (27791243081/17592186044416 + 43484270377/52776558133248*n + 8988365213/17592186044416*n^2 + 6177195751/17592186044416*n^3 + 821647265/17592186044416*n^4 - 5244741905/52776558133248*n^5 - 5898760729/13194139533312*n^6) * eps^23
-        + (52866931869/35184372088832 + 13002628835/17592186044416*n + 28235801693/52776558133248*n^2 + 15115493921/52776558133248*n^3 + 1357399595/8796093022208*n^4 - 1176448685/8796093022208*n^5) * eps^24
-        + (49596004877/35184372088832 + 101897209187/140737488355328*n + 16392942713/35184372088832*n^2 + 35874509113/105553116266496*n^3 + 11256301655/105553116266496*n^4) * eps^25
-        + (378812456237/281474976710656 + 23082024431/35184372088832*n + 406385867693/844424930131968*n^2 + 30062357575/105553116266496*n^3) * eps^26
-        + (4287844495145/3377699720527872 + 723291681375/1125899906842624*n + 477936436199/1125899906842624*n^2) * eps^27
-        + (2738088177221/2251799813685248 + 1982787518731/3377699720527872*n) * eps^28
-        + 41515375436483/36028797018963968 * eps^29;
-C3[4] = + (7/512 - 7/256*n + 5/256*n^2 - 7/1024*n^3 + 1/1024*n^4) * eps^4
-        + (7/512 - 5/256*n - 7/2048*n^2 + 9/512*n^3 - 21/2048*n^4 + 1/512*n^5) * eps^5
-        + (9/1024 - 43/8192*n - 129/8192*n^2 + 39/4096*n^3 + 91/8192*n^4 - 91/8192*n^5 + 11/4096*n^6) * eps^6
-        + (127/16384 - 23/8192*n - 165/16384*n^2 - 47/8192*n^3 + 213/16384*n^4 + 11/2048*n^5 - 175/16384*n^6 + 13/4096*n^7) * eps^7
-        + (193/32768 + 3/8192*n - 505/65536*n^2 - 227/32768*n^3 + 75/65536*n^4 + 801/65536*n^5 + 165/131072*n^6 - 637/65536*n^7 + 455/131072*n^8) * eps^8
-        + (171/32768 + 25/65536*n - 259/65536*n^2 - 471/65536*n^3 - 351/131072*n^4 + 605/131072*n^5 + 41/4096*n^6 - 189/131072*n^7 - 1127/131072*n^8 + 119/32768*n^9) * eps^9
-        + (1121/262144 + 339/262144*n - 801/262144*n^2 - 2525/524288*n^3 - 2519/524288*n^4 + 73/131072*n^5 + 1539/262144*n^6 + 1989/262144*n^7 - 1633/524288*n^8 - 3927/524288*n^9 + 969/262144*n^10) * eps^10
-        + (2017/524288 + 273/262144*n - 1467/1048576*n^2 - 277/65536*n^3 - 4123/1048576*n^4 - 153/65536*n^5 + 1331/524288*n^6 + 1549/262144*n^7 + 5677/1048576*n^8 - 1071/262144*n^9 - 6783/1048576*n^10 + 969/262144*n^11) * eps^11
-        + (55215/16777216 + 11307/8388608*n - 2363/2097152*n^2 - 177843/67108864*n^3 - 268499/67108864*n^4 - 41907/16777216*n^5 - 6403/16777216*n^6 + 118801/33554432*n^7 + 179785/33554432*n^8 + 30345/8388608*n^9 - 154071/33554432*n^10 - 373065/67108864*n^11 + 245157/67108864*n^12) * eps^12
-        + (50365/16777216 + 2327/2097152*n - 47759/134217728*n^2 - 76829/33554432*n^3 - 383837/134217728*n^4 - 105473/33554432*n^5 - 74037/67108864*n^6 + 16197/16777216*n^7 + 260819/67108864*n^8 + 153431/33554432*n^9 + 294443/134217728*n^10 - 80465/16777216*n^11 - 639331/134217728*n^12 + 120175/33554432*n^13) * eps^13
-        + (2769/1048576 + 654529/536870912*n - 163129/536870912*n^2 - 372645/268435456*n^3 - 1430285/536870912*n^4 - 1335009/536870912*n^5 - 284489/134217728*n^6 + 987/33554432*n^7 + 482449/268435456*n^8 + 2057345/536870912*n^9 + 2007901/536870912*n^10 + 293645/268435456*n^11 - 2581359/536870912*n^12 - 2187185/536870912*n^13 + 937365/268435456*n^14) * eps^14
-        + (2615571/1073741824 + 552353/536870912*n + 90895/1073741824*n^2 - 652503/536870912*n^3 - 1983405/1073741824*n^4 - 680875/268435456*n^5 - 2001037/1073741824*n^6 - 156103/134217728*n^7 + 920027/1073741824*n^8 + 1204095/536870912*n^9 + 3815723/1073741824*n^10 + 1584867/536870912*n^11 + 278231/1073741824*n^12 - 315445/67108864*n^13 - 3736005/1073741824*n^14) * eps^15
-        + (4692619/2147483648 + 572057/536870912*n + 260179/4294967296*n^2 - 2984769/4294967296*n^3 - 3625809/2147483648*n^4 - 8162427/4294967296*n^5 - 18409849/8589934592*n^6 - 639067/536870912*n^7 - 3156661/8589934592*n^8 + 3027631/2147483648*n^9 + 162319/67108864*n^10 + 13593091/4294967296*n^11 + 9656343/4294967296*n^12 - 1568255/4294967296*n^13) * eps^16
-        + (4367867/2147483648 + 3942989/4294967296*n + 2323595/8589934592*n^2 - 2679169/4294967296*n^3 - 2473899/2147483648*n^4 - 15712829/8589934592*n^5 - 14665951/8589934592*n^6 - 14129447/8589934592*n^7 - 2450171/4294967296*n^8 + 529403/2147483648*n^9 + 14965037/8589934592*n^10 + 5189391/2147483648*n^11 + 5874821/2147483648*n^12) * eps^17
-        + (31803789/17179869184 + 31805471/34359738368*n + 7655783/34359738368*n^2 - 10716843/34359738368*n^3 - 18130187/17179869184*n^4 - 23156361/17179869184*n^5 - 60088211/34359738368*n^6 - 11928127/8589934592*n^7 - 9775259/8589934592*n^8 - 1657343/34359738368*n^9 + 23786693/34359738368*n^10 + 65561705/34359738368*n^11) * eps^18
-        + (119278493/68719476736 + 27869745/34359738368*n + 2944971/8589934592*n^2 - 10021441/34359738368*n^3 - 48412679/68719476736*n^4 - 43782451/34359738368*n^5 - 46594423/34359738368*n^6 - 52867989/34359738368*n^7 - 70453029/68719476736*n^8 - 23159185/34359738368*n^9 + 12551255/34359738368*n^10) * eps^19
-        + (109782837/68719476736 + 110884309/137438953472*n + 159981789/549755813888*n^2 - 106745493/1099511627776*n^3 - 717924527/1099511627776*n^4 - 15979315/17179869184*n^5 - 732221291/549755813888*n^6 - 21353761/17179869184*n^7 - 347832177/274877906944*n^8 - 732828227/1099511627776*n^9) * eps^20
-        + (414212295/274877906944 + 394066451/549755813888*n + 797767751/2199023255552*n^2 - 13938969/137438953472*n^3 - 922185663/2199023255552*n^4 - 241117663/274877906944*n^5 - 70260475/68719476736*n^6 - 702480169/549755813888*n^7 - 2332298309/2199023255552*n^8) * eps^21
-        + (3077054969/2199023255552 + 6225526419/8796093022208*n + 2760680993/8796093022208*n^2 + 107993597/4398046511104*n^3 - 3483012103/8796093022208*n^4 - 5569520181/8796093022208*n^5 - 4345994585/4398046511104*n^6 - 8944055483/8796093022208*n^7) * eps^22
-        + (23336011385/17592186044416 + 5594946455/8796093022208*n + 6303559381/17592186044416*n^2 + 78999975/8796093022208*n^3 - 4164504717/17592186044416*n^4 - 330002595/549755813888*n^5 - 3315820133/4398046511104*n^6) * eps^23
-        + (43652141925/35184372088832 + 5501899769/8796093022208*n + 22131275675/70368744177664*n^2 + 820267293/8796093022208*n^3 - 16179701905/70368744177664*n^4 - 1872775091/4398046511104*n^5) * eps^24
-        + (41556934973/35184372088832 + 39939504101/70368744177664*n + 753834291/2199023255552*n^2 + 5148539461/70368744177664*n^3 - 4176807933/35184372088832*n^4) * eps^25
-        + (312802619769/281474976710656 + 78374027619/140737488355328*n + 42845064993/140737488355328*n^2 + 18460662479/140737488355328*n^3) * eps^26
-        + (298867963845/281474976710656 + 71700391575/140737488355328*n + 45431388475/140737488355328*n^2) * eps^27
-        + (36174484487935/36028797018963968 + 8994085968251/18014398509481984*n) * eps^28
-        + 34671257326469/36028797018963968 * eps^29;
-C3[5] = + (21/2560 - 9/512*n + 15/1024*n^2 - 7/1024*n^3 + 9/5120*n^4 - 1/5120*n^5) * eps^5
-        + (9/1024 - 15/1024*n + 3/2048*n^2 + 57/5120*n^3 - 5/512*n^4 + 9/2560*n^5 - 1/2048*n^6) * eps^6
-        + (99/16384 - 91/16384*n - 781/81920*n^2 + 883/81920*n^3 + 319/81920*n^4 - 783/81920*n^5 + 387/81920*n^6 - 13/16384*n^7) * eps^7
-        + (179/32768 - 55/16384*n - 79/10240*n^2 - 27/81920*n^3 + 461/40960*n^4 - 139/81920*n^5 - 65/8192*n^6 + 441/81920*n^7 - 35/32768*n^8) * eps^8
-        + (141/32768 - 109/131072*n - 217/32768*n^2 - 219/65536*n^3 + 1559/327680*n^4 + 5431/655360*n^5 - 203/40960*n^6 - 1943/327680*n^7 + 369/65536*n^8 - 85/65536*n^9) * eps^9
-        + (1013/262144 - 15/32768*n - 5399/1310720*n^2 - 199/40960*n^3 + 1267/1310720*n^4 + 1007/163840*n^5 + 6277/1310720*n^6 - 527/81920*n^7 - 659/163840*n^8 + 459/81920*n^9 - 969/655360*n^10) * eps^10
-        + (6787/2097152 + 797/2097152*n - 34683/10485760*n^2 - 257/65536*n^3 - 7753/4194304*n^4 + 72641/20971520*n^5 + 115867/20971520*n^6 + 38817/20971520*n^7 - 142119/20971520*n^8 - 50133/20971520*n^9 + 113373/20971520*n^10 - 6783/4194304*n^11) * eps^11
-        + (12315/4194304 + 799/2097152*n - 41519/20971520*n^2 - 19671/5242880*n^3 - 93317/41943040*n^4 + 12949/20971520*n^5 + 18211/4194304*n^6 + 86317/20971520*n^7 - 2971/10485760*n^8 - 135789/20971520*n^9 - 11229/10485760*n^10 + 107217/20971520*n^11 - 14421/8388608*n^12) * eps^12
-        + (42753/16777216 + 11749/16777216*n - 534457/335544320*n^2 - 914519/335544320*n^3 - 953267/335544320*n^4 - 128591/335544320*n^5 + 354589/167772160*n^6 + 703457/167772160*n^7 + 433157/167772160*n^8 - 17697/10485760*n^9 - 1961579/335544320*n^10 - 2717/67108864*n^11 + 1600731/335544320*n^12 - 120175/67108864*n^13) * eps^13
-        + (78439/33554432 + 41589/67108864*n - 606887/671088640*n^2 - 813811/335544320*n^3 - 795669/335544320*n^4 - 126481/83886080*n^5 + 693943/671088640*n^6 + 92775/33554432*n^7 + 1181311/335544320*n^8 + 409551/335544320*n^9 - 1692661/671088640*n^10 - 1705561/335544320*n^11 + 124729/167772160*n^12 + 148005/33554432*n^13 - 246675/134217728*n^14) * eps^14
-        + (11153319/5368709120 + 806753/1073741824*n - 3945181/5368709120*n^2 - 9244317/5368709120*n^3 - 12780537/5368709120*n^4 - 8161927/5368709120*n^5 - 291353/1073741824*n^6 + 10250183/5368709120*n^7 + 15202259/5368709120*n^8 + 14255529/5368709120*n^9 + 710823/5368709120*n^10 - 3162357/1073741824*n^11 - 23067781/5368709120*n^12 + 1424137/1073741824*n^13 + 4351347/1073741824*n^14) * eps^15
-        + (4132007/2147483648 + 710105/1073741824*n - 969349/2684354560*n^2 - 1619999/1073741824*n^3 - 5011741/2684354560*n^4 - 9930299/5368709120*n^5 - 1564801/2684354560*n^6 + 3561709/5368709120*n^7 + 1553999/671088640*n^8 + 13695849/5368709120*n^9 + 4792721/2684354560*n^10 - 3635919/5368709120*n^11 - 8283611/2684354560*n^12 - 3808363/1073741824*n^13) * eps^16
-        + (3734859/2147483648 + 6155471/8589934592*n - 789297/2684354560*n^2 - 11355613/10737418240*n^3 - 37704683/21474836480*n^4 - 67981809/42949672960*n^5 - 4910633/4294967296*n^6 + 122353/536870912*n^7 + 13584809/10737418240*n^8 + 102204983/42949672960*n^9 + 22521571/10737418240*n^10 + 5393991/5368709120*n^11 - 26677631/21474836480*n^12) * eps^17
-        + (27894537/17179869184 + 341135/536870912*n - 6919577/85899345920*n^2 - 9962193/10737418240*n^3 - 116140263/85899345920*n^4 - 35024383/21474836480*n^5 - 93895333/85899345920*n^6 - 9724319/21474836480*n^7 + 71547201/85899345920*n^8 + 16957261/10737418240*n^9 + 38167643/17179869184*n^10 + 4254817/2684354560*n^11) * eps^18
-        + (102149077/68719476736 + 45149747/68719476736*n - 5268353/85899345920*n^2 - 438238873/687194767360*n^3 - 21374577/17179869184*n^4 - 229885771/171798691840*n^5 - 111314271/85899345920*n^6 - 190649511/343597383680*n^7 + 21780193/171798691840*n^8 + 42150359/34359738368*n^9 + 575291951/343597383680*n^10) * eps^19
-        + (191992897/137438953472 + 10102641/17179869184*n + 91038377/1374389534720*n^2 - 48406631/85899345920*n^3 - 1306192047/1374389534720*n^4 - 111829633/85899345920*n^5 - 775578061/687194767360*n^6 - 75280887/85899345920*n^7 - 41514599/687194767360*n^8 + 38659177/68719476736*n^9) * eps^20
-        + (355055163/274877906944 + 653193131/1099511627776*n + 347941049/5497558138880*n^2 - 2051760759/5497558138880*n^3 - 4780409067/5497558138880*n^4 - 2891926301/2748779069440*n^5 - 3246633917/2748779069440*n^6 - 2255299589/2748779069440*n^7 - 500938259/1099511627776*n^8) * eps^21
-        + (2684106857/2199023255552 + 589926107/1099511627776*n + 391603487/2748779069440*n^2 - 1831096049/5497558138880*n^3 - 7250179399/10995116277760*n^4 - 687030501/687194767360*n^5 - 2742957537/2748779069440*n^6 - 2629744457/2748779069440*n^7) * eps^22
-        + (20014266089/17592186044416 + 9415408371/17592186044416*n + 2280678869/17592186044416*n^2 - 18044662719/87960930222080*n^3 - 10627395203/17592186044416*n^4 - 70583370027/87960930222080*n^5 - 10917838539/10995116277760*n^6) * eps^23
-        + (38001723933/35184372088832 + 8573148395/17592186044416*n + 7931117147/43980465111040*n^2 - 16302072297/87960930222080*n^3 - 39871150043/87960930222080*n^4 - 33222569643/43980465111040*n^5) * eps^24
-        + (178265154501/175921860444160 + 67917412749/140737488355328*n + 7195977601/43980465111040*n^2 - 17107988587/175921860444160*n^3 - 73408496063/175921860444160*n^4) * eps^25
-        + (271858418651/281474976710656 + 3893205391/8796093022208*n + 277112865109/1407374883553280*n^2 - 1966777807/21990232555520*n^3) * eps^26
-        + (4103246283741/4503599627370496 + 1965390008631/4503599627370496*n + 4035517048233/22517998136852480*n^2) * eps^27
-        + (7848710341433/9007199254740992 + 1814136297259/4503599627370496*n) * eps^28
-        + 29752988542989/36028797018963968 * eps^29;
-C3[6] = + (11/2048 - 99/8192*n + 275/24576*n^2 - 77/12288*n^3 + 9/4096*n^4 - 11/24576*n^5 + 1/24576*n^6) * eps^6
-        + (99/16384 - 275/24576*n + 55/16384*n^2 + 167/24576*n^3 - 407/49152*n^4 + 35/8192*n^5 - 55/49152*n^6 + 1/8192*n^7) * eps^7
-        + (143/32768 - 253/49152*n - 1105/196608*n^2 + 481/49152*n^3 - 73/196608*n^4 - 169/24576*n^5 + 1067/196608*n^6 - 11/6144*n^7 + 15/65536*n^8) * eps^8
-        + (33/8192 - 221/65536*n - 23/4096*n^2 + 457/196608*n^3 + 267/32768*n^4 - 329/65536*n^5 - 69/16384*n^6 + 375/65536*n^7 - 77/32768*n^8 + 17/49152*n^9) * eps^9
-        + (1711/524288 - 4333/3145728*n - 16885/3145728*n^2 - 1343/1572864*n^3 + 17381/3145728*n^4 + 8519/2097152*n^5 - 42985/6291456*n^6 - 4885/3145728*n^7 + 8549/1572864*n^8 - 5797/2097152*n^9 + 969/2097152*n^10) * eps^10
-        + (6223/2097152 - 2827/3145728*n - 23731/6291456*n^2 - 8959/3145728*n^3 + 11937/4194304*n^4 + 32207/6291456*n^5 + 5071/12582912*n^6 - 42571/6291456*n^7 + 7489/12582912*n^8 + 10115/2097152*n^9 - 12749/4194304*n^10 + 1197/2097152*n^11) * eps^11
-        + (31829/12582912 - 647/4194304*n - 13305/4194304*n^2 - 23369/8388608*n^3 + 981/4194304*n^4 + 53003/12582912*n^5 + 161989/50331648*n^6 - 25313/12582912*n^7 - 288887/50331648*n^8 + 8937/4194304*n^9 + 204725/50331648*n^10 - 80465/25165824*n^11 + 33649/50331648*n^12) * eps^12
-        + (19409/8388608 - 143/4194304*n - 108221/50331648*n^2 - 37559/12582912*n^3 - 11319/16777216*n^4 + 110569/50331648*n^5 + 49103/12582912*n^6 + 19233/16777216*n^7 - 6811/2097152*n^8 - 73151/16777216*n^9 + 156973/50331648*n^10 + 165187/50331648*n^11 - 164197/50331648*n^12 + 6325/8388608*n^13) * eps^13
-        + (136403/67108864 + 149829/536870912*n - 951655/536870912*n^2 - 1940579/805306368*n^3 - 1290821/805306368*n^4 + 1817813/1610612736*n^5 + 4654573/1610612736*n^6 + 374953/134217728*n^7 - 210217/402653184*n^8 - 1945219/536870912*n^9 - 1593647/536870912*n^10 + 2958659/805306368*n^11 + 2038421/805306368*n^12 - 5245955/1610612736*n^13 + 444015/536870912*n^14) * eps^14
-        + (2013531/1073741824 + 153447/536870912*n - 3812959/3221225472*n^2 - 3623809/1610612736*n^3 - 1720969/1073741824*n^4 - 155419/1610612736*n^5 + 2321319/1073741824*n^6 + 1446653/536870912*n^7 + 4820965/3221225472*n^8 - 881605/536870912*n^9 - 11135251/3221225472*n^10 - 927839/536870912*n^11 + 12596617/3221225472*n^12 + 2976545/1610612736*n^13 - 3437005/1073741824*n^14) * eps^15
-        + (3610319/2147483648 + 689891/1610612736*n - 4192091/4294967296*n^2 - 5626007/3221225472*n^3 - 23482225/12884901888*n^4 - 63477/134217728*n^5 + 13148195/12884901888*n^6 + 2657655/1073741824*n^7 + 8738873/4294967296*n^8 + 89999/268435456*n^9 - 9718455/4294967296*n^10 - 9643399/3221225472*n^11 - 9027109/12884901888*n^12 + 1580215/402653184*n^13) * eps^16
-        + (3357815/2147483648 + 5140585/12884901888*n - 1357887/2147483648*n^2 - 20205383/12884901888*n^3 - 10165433/6442450944*n^4 - 12859795/12884901888*n^5 + 3376837/6442450944*n^6 + 20985541/12884901888*n^7 + 14739271/6442450944*n^8 + 5247007/4294967296*n^9 - 3621415/6442450944*n^10 - 32175059/12884901888*n^11 - 15465929/6442450944*n^12) * eps^17
-        + (73325191/51539607552 + 16029851/34359738368*n - 17954851/34359738368*n^2 - 124000031/103079215104*n^3 - 107691583/68719476736*n^4 - 26099447/25769803776*n^5 - 10228585/68719476736*n^6 + 124145675/103079215104*n^7 + 371070857/206158430208*n^8 + 11745371/6442450944*n^9 + 91139599/206158430208*n^10 - 30320905/25769803776*n^11) * eps^18
-        + (91563605/68719476736 + 44091817/103079215104*n - 10830499/34359738368*n^2 - 27517235/25769803776*n^3 - 268855985/206158430208*n^4 - 82123075/68719476736*n^5 - 69647705/206158430208*n^6 + 109205227/206158430208*n^7 + 319534237/206158430208*n^8 + 114455667/68719476736*n^9 + 64469791/51539607552*n^10) * eps^19
-        + (168518401/137438953472 + 189582913/412316860416*n - 142520949/549755813888*n^2 - 671006539/824633720832*n^3 - 2036680639/1649267441664*n^4 - 888938183/824633720832*n^5 - 275851423/412316860416*n^6 + 73762303/274877906944*n^7 + 200547467/206158430208*n^8 + 445330347/274877906944*n^9) * eps^20
-        + (317520693/274877906944 + 231509165/549755813888*n - 214107557/1649267441664*n^2 - 396525643/549755813888*n^3 - 278406799/274877906944*n^4 - 920067617/824633720832*n^5 - 564306103/824633720832*n^6 - 58960025/412316860416*n^7 + 595823299/824633720832*n^8) * eps^21
-        + (2358489413/2199023255552 + 11489787637/26388279066624*n - 908814505/8796093022208*n^2 - 2396614237/4398046511104*n^3 - 12411634453/13194139533312*n^4 - 8522185111/8796093022208*n^5 - 21849837611/26388279066624*n^6 - 2193761283/8796093022208*n^7) * eps^22
-        + (17864718441/17592186044416 + 10555835899/26388279066624*n - 1055263841/52776558133248*n^2 - 4259460285/8796093022208*n^3 - 40456260929/52776558133248*n^4 - 25125823283/26388279066624*n^5 - 20228133965/26388279066624*n^6) * eps^23
-        + (100244499991/105553116266496 + 7127188931/17592186044416*n - 2047769071/211106232532992*n^2 - 19029851431/52776558133248*n^3 - 49723762631/70368744177664*n^4 - 21473509045/26388279066624*n^5) * eps^24
-        + (7943510175/8796093022208 + 78919576567/211106232532992*n + 2396202703/52776558133248*n^2 - 67906408573/211106232532992*n^3 - 30263574227/52776558133248*n^4) * eps^25
-        + (956603287889/1125899906842624 + 2527332335909/6755399441055744*n + 105375782699/2251799813685248*n^2 - 394588464167/1688849860263936*n^3) * eps^26
-        + (3651975781065/4503599627370496 + 780981164949/2251799813685248*n + 378631414483/4503599627370496*n^2) * eps^27
-        + (6906351178529/9007199254740992 + 9311073056275/27021597764222976*n) * eps^28
-        + 13225333818489/18014398509481984 * eps^29;
-C3[7] = + (429/114688 - 143/16384*n + 143/16384*n^2 - 91/16384*n^3 + 39/16384*n^4 - 11/16384*n^5 + 13/114688*n^6 - 1/114688*n^7) * eps^7
-        + (143/32768 - 143/16384*n + 65/16384*n^2 + 65/16384*n^3 - 109/16384*n^4 + 507/114688*n^5 - 27/16384*n^6 + 39/114688*n^7 - 1/32768*n^8) * eps^8
-        + (429/131072 - 299/65536*n - 13/4096*n^2 + 269/32768*n^3 - 601/229376*n^4 - 989/229376*n^5 + 9475/1835008*n^6 - 4667/1835008*n^7 + 1157/1835008*n^8 - 17/262144*n^9) * eps^9
-        + (403/131072 - 13/4096*n - 521/131072*n^2 + 393/114688*n^3 + 1209/229376*n^4 - 11001/1835008*n^5 - 3979/3670016*n^6 + 8821/1835008*n^7 - 833/262144*n^8 + 429/458752*n^9 - 57/524288*n^10) * eps^10
-        + (5343/2097152 - 3345/2097152*n - 8863/2097152*n^2 + 2511/3670016*n^3 + 146613/29360128*n^4 + 27159/29360128*n^5 - 185267/29360128*n^6 + 47549/29360128*n^7 + 112179/29360128*n^8 - 103371/29360128*n^9 + 35815/29360128*n^10 - 665/4194304*n^11) * eps^11
-        + (9825/4194304 - 2337/2097152*n - 13661/4194304*n^2 - 1405/1048576*n^3 + 205965/58720256*n^4 + 98019/29360128*n^5 - 15733/7340032*n^6 - 145237/29360128*n^7 + 99087/29360128*n^8 + 76233/29360128*n^9 - 106087/29360128*n^10 + 6149/4194304*n^11 - 1771/8388608*n^12) * eps^12
-        + (2125/1048576 - 3903/8388608*n - 96259/33554432*n^2 - 410489/234881024*n^3 + 341577/234881024*n^4 + 441667/117440512*n^5 + 102545/117440512*n^6 - 411905/117440512*n^7 - 44531/14680064*n^8 + 996015/234881024*n^9 + 324603/234881024*n^10 - 118019/33554432*n^11 + 55913/33554432*n^12 - 8855/33554432*n^13) * eps^13
-        + (31337/16777216 - 9845/33554432*n - 141287/67108864*n^2 - 514903/234881024*n^3 + 213351/469762048*n^4 + 158209/58720256*n^5 + 299101/117440512*n^6 - 132045/117440512*n^7 - 1686973/469762048*n^8 - 284559/234881024*n^9 + 1041819/234881024*n^10 + 72061/234881024*n^11 - 773421/234881024*n^12 + 213785/117440512*n^13 - 148005/469762048*n^14) * eps^14
-        + (1780203/1073741824 + 2521/1073741824*n - 1916449/1073741824*n^2 - 14648021/7516192768*n^3 - 606289/1073741824*n^4 + 2068453/1073741824*n^5 + 19266365/7516192768*n^6 + 1015577/1073741824*n^7 - 17180199/7516192768*n^8 - 22143117/7516192768*n^9 + 1831549/7516192768*n^10 + 4498521/1073741824*n^11 - 4339571/7516192768*n^12 - 22471345/7516192768*n^13 + 14517945/7516192768*n^14) * eps^15
-        + (3302903/2147483648 + 61025/1073741824*n - 1392303/1073741824*n^2 - 14509913/7516192768*n^3 - 6298927/7516192768*n^4 + 6457051/7516192768*n^5 + 17971091/7516192768*n^6 + 12735795/7516192768*n^7 - 3219137/7516192768*n^8 - 20216205/7516192768*n^9 - 15046077/7516192768*n^10 + 9532867/7516192768*n^11 + 3961599/1073741824*n^12 - 9497345/7516192768*n^13) * eps^16
-        + (2983837/2147483648 + 1733855/8589934592*n - 4685403/4294967296*n^2 - 48201865/30064771072*n^3 - 36259515/30064771072*n^4 + 5527869/15032385536*n^5 + 1536743/939524096*n^6 + 63232859/30064771072*n^7 + 73671/117440512*n^8 - 1449355/1073741824*n^9 - 76937885/30064771072*n^10 - 30946235/30064771072*n^11 + 3570999/1879048192*n^12) * eps^17
-        + (22292529/17179869184 + 899355/4294967296*n - 13492583/17179869184*n^2 - 44700791/30064771072*n^3 - 70120189/60129542144*n^4 - 3471339/15032385536*n^5 + 72969301/60129542144*n^6 + 478067/268435456*n^7 + 85725937/60129542144*n^8 - 9546319/30064771072*n^9 - 109115611/60129542144*n^10 - 63656897/30064771072*n^11) * eps^18
-        + (81611253/68719476736 + 19508379/68719476736*n - 2837849/4294967296*n^2 - 1163707393/962072674304*n^3 - 75492929/60129542144*n^4 - 25075777/60129542144*n^5 + 141589169/240518168576*n^6 + 109200085/68719476736*n^7 + 51248003/34359738368*n^8 + 19485265/30064771072*n^9 - 68932559/68719476736*n^10) * eps^19
-        + (153351409/137438953472 + 1171063/4294967296*n - 128254133/274877906944*n^2 - 32936875/30064771072*n^3 - 2152615067/1924145348608*n^4 - 167428859/240518168576*n^5 + 297094515/962072674304*n^6 + 261663431/240518168576*n^7 + 1509210613/962072674304*n^8 + 472288869/481036337152*n^9) * eps^20
-        + (1984807995/1924145348608 + 342786907/1099511627776*n - 215809073/549755813888*n^2 - 3403522219/3848290697216*n^3 - 2125818367/1924145348608*n^4 - 5503162739/7696581394432*n^5 - 36779903/481036337152*n^6 + 1607563715/1924145348608*n^7 + 4856829545/3848290697216*n^8) * eps^21
-        + (2142375089/2199023255552 + 161430897/549755813888*n - 585488823/2199023255552*n^2 - 3056980555/3848290697216*n^3 - 14718114487/15393162788864*n^4 - 793901309/962072674304*n^5 - 3165663579/15393162788864*n^6 + 420223757/962072674304*n^7) * eps^22
-        + (15972732585/17592186044416 + 5524675807/17592186044416*n - 3921720195/17592186044416*n^2 - 78636170271/123145302310912*n^3 - 112176079097/123145302310912*n^4 - 94959230613/123145302310912*n^5 - 12796244065/30786325577728*n^6) * eps^23
-        + (30308424633/35184372088832 + 5175108963/17592186044416*n - 2441010467/17592186044416*n^2 - 70491037987/123145302310912*n^3 - 47936493201/61572651155456*n^4 - 49286431235/61572651155456*n^5) * eps^24
-        + (227458182793/281474976710656 + 85653158665/281474976710656*n - 16050121299/140737488355328*n^2 - 451259285829/985162418487296*n^3 - 718664673347/985162418487296*n^4) * eps^25
-        + (433302064951/562949953421312 + 40095993459/140737488355328*n - 31913675941/562949953421312*n^2 - 57834268753/140737488355328*n^3) * eps^26
-        + (3269693185065/4503599627370496 + 1302630681669/4503599627370496*n - 195127280595/4503599627370496*n^2) * eps^27
-        + (6249998138435/9007199254740992 + 1221397131411/4503599627370496*n) * eps^28
-        + 5922672166091/9007199254740992 * eps^29;
-C3[8] = + (715/262144 - 429/65536*n + 455/65536*n^2 - 637/131072*n^3 + 315/131072*n^4 - 55/65536*n^5 + 13/65536*n^6 - 15/524288*n^7 + 1/524288*n^8) * eps^8
-        + (429/131072 - 455/65536*n + 1053/262144*n^2 + 35/16384*n^3 - 1361/262144*n^4 + 69/16384*n^5 - 2095/1048576*n^6 + 77/131072*n^7 - 105/1048576*n^8 + 1/131072*n^9) * eps^9
-        + (663/262144 - 4173/1048576*n - 1717/1048576*n^2 + 3485/524288*n^3 - 3825/1048576*n^4 - 9469/4194304*n^5 + 18469/4194304*n^6 - 6137/2097152*n^7 + 4455/4194304*n^8 - 885/4194304*n^9 + 19/1048576*n^10) * eps^10
-        + (5057/2097152 - 3043/1048576*n - 5771/2097152*n^2 + 3893/1048576*n^3 + 25381/8388608*n^4 - 24103/4194304*n^5 + 8933/8388608*n^6 + 14179/4194304*n^7 - 28533/8388608*n^8 + 399/262144*n^9 - 2925/8388608*n^10 + 35/1048576*n^11) * eps^11
-        + (4269/2097152 - 3449/2097152*n - 27455/8388608*n^2 + 104101/67108864*n^3 + 268897/67108864*n^4 - 17303/16777216*n^5 - 162199/33554432*n^6 + 27987/8388608*n^7 + 61363/33554432*n^8 - 115233/33554432*n^9 + 127809/67108864*n^10 - 33495/67108864*n^11 + 1771/33554432*n^12) * eps^12
-        + (991/524288 - 10081/8388608*n - 365791/134217728*n^2 - 9717/33554432*n^3 + 465795/134217728*n^4 + 27547/16777216*n^5 - 106205/33554432*n^6 - 89529/33554432*n^7 + 289573/67108864*n^8 + 17427/67108864*n^9 - 420741/134217728*n^10 + 146465/67108864*n^11 - 87285/134217728*n^12 + 1265/16777216*n^13) * eps^13
-        + (55563/33554432 - 344251/536870912*n - 1348101/536870912*n^2 - 244277/268435456*n^3 + 1091783/536870912*n^4 + 1517573/536870912*n^5 - 219671/268435456*n^6 - 915171/268435456*n^7 - 65579/134217728*n^8 + 2300175/536870912*n^9 - 565193/536870912*n^10 - 705799/268435456*n^11 + 1263413/536870912*n^12 - 426075/536870912*n^13 + 13455/134217728*n^14) * eps^14
-        + (1650255/1073741824 - 242867/536870912*n - 2099405/1073741824*n^2 - 798587/536870912*n^3 + 1248445/1073741824*n^4 + 85085/33554432*n^5 + 1183963/1073741824*n^6 - 612017/268435456*n^7 - 2724453/1073741824*n^8 + 612213/536870912*n^9 + 3906577/1073741824*n^10 - 1079195/536870912*n^11 - 2173807/1073741824*n^12 + 651625/268435456*n^13 - 991575/1073741824*n^14) * eps^15
-        + (92379/67108864 - 96367/536870912*n - 7319885/4294967296*n^2 - 6313853/4294967296*n^3 + 429327/2147483648*n^4 + 9301893/4294967296*n^5 + 15031227/8589934592*n^6 - 2278773/4294967296*n^7 - 22903967/8589934592*n^8 - 2725917/2147483648*n^9 + 4500833/2147483648*n^10 + 11631693/4294967296*n^11 - 5617393/2147483648*n^12 - 12008165/8589934592*n^13) * eps^16
-        + (2756519/2147483648 - 430227/4294967296*n - 11245169/8589934592*n^2 - 6724689/4294967296*n^3 - 53143/268435456*n^4 + 11801191/8589934592*n^5 + 4420815/2147483648*n^6 + 4422845/8589934592*n^7 - 13431985/8589934592*n^8 - 1236311/536870912*n^9 - 519961/8589934592*n^10 + 5300279/2147483648*n^11 + 29579711/17179869184*n^12) * eps^17
-        + (20057037/17179869184 + 1437191/34359738368*n - 38619865/34359738368*n^2 - 47458715/34359738368*n^3 - 11051395/17179869184*n^4 + 31753819/34359738368*n^5 + 923369/536870912*n^6 + 22435517/17179869184*n^7 - 20287619/34359738368*n^8 - 16694191/8589934592*n^9 - 53676765/34359738368*n^10 + 60038145/68719476736*n^11) * eps^18
-        + (75219653/68719476736 + 2460657/34359738368*n - 3690307/4294967296*n^2 - 45693585/34359738368*n^3 - 12731745/17179869184*n^4 + 3014801/8589934592*n^5 + 102479649/68719476736*n^6 + 95223/67108864*n^7 + 12997523/34359738368*n^8 - 45081435/34359738368*n^9 - 250602523/137438953472*n^10) * eps^19
-        + (138411809/137438953472 + 20479031/137438953472*n - 404248825/549755813888*n^2 - 623123853/549755813888*n^3 - 249636485/274877906944*n^4 + 24599285/274877906944*n^5 + 278247109/274877906944*n^6 + 206754789/137438953472*n^7 + 433813329/549755813888*n^8 - 463032277/1099511627776*n^9) * eps^20
-        + (260886645/274877906944 + 85615081/549755813888*n - 614045309/1099511627776*n^2 - 577943525/549755813888*n^3 - 959520737/1099511627776*n^4 - 65018321/274877906944*n^5 + 412167595/549755813888*n^6 + 341178333/274877906944*n^7 + 2517056589/2199023255552*n^8) * eps^21
-        + (1937599123/2199023255552 + 875827069/4398046511104*n - 2101908333/4398046511104*n^2 - 1944837617/2199023255552*n^3 - 4013825043/4398046511104*n^4 - 1514642649/4398046511104*n^5 + 52220173/137438953472*n^6 + 9631735815/8796093022208*n^7) * eps^22
-        + (7338112607/8796093022208 + 858111205/4398046511104*n - 3151357309/8796093022208*n^2 - 3552063895/4398046511104*n^3 - 7304761733/8796093022208*n^4 - 1117242591/2199023255552*n^5 + 3576385429/17592186044416*n^6) * eps^23
-        + (439177896603/562949953421312 + 30926258881/140737488355328*n - 43123141703/140737488355328*n^2 - 190181338763/281474976710656*n^3 - 230252313827/281474976710656*n^4 - 74140886391/140737488355328*n^5) * eps^24
-        + (208758190031/281474976710656 + 29681117575/140737488355328*n - 126131044829/562949953421312*n^2 - 21573269697/35184372088832*n^3 - 409510620075/562949953421312*n^4) * eps^25
-        + (392781497985/562949953421312 + 506107726005/2251799813685248*n - 429816687963/2251799813685248*n^2 - 575742720763/1125899906842624*n^3) * eps^26
-        + (2997989980695/4503599627370496 + 481944654003/2251799813685248*n - 599801259897/4503599627370496*n^2) * eps^27
-        + (2834595204413/4503599627370496 + 997668129067/4503599627370496*n) * eps^28
-        + 2712992943545/4503599627370496 * eps^29;
-C3[9] = + (2431/1179648 - 663/131072*n + 1105/196608*n^2 - 833/196608*n^3 + 153/65536*n^4 - 187/196608*n^5 + 221/786432*n^6 - 15/262144*n^7 + 17/2359296*n^8 - 1/2359296*n^9) * eps^9
-        + (663/262144 - 1105/196608*n + 1003/262144*n^2 + 187/196608*n^3 - 391/98304*n^4 + 1003/262144*n^5 - 3425/1572864*n^6 + 1921/2359296*n^7 - 13/65536*n^8 + 17/589824*n^9 - 1/524288*n^10) * eps^10
-        + (4199/2097152 - 21743/6291456*n - 4199/6291456*n^2 + 33269/6291456*n^3 - 50065/12582912*n^4 - 9443/12582912*n^5 + 14573/4194304*n^6 - 112667/37748736*n^7 + 53599/37748736*n^8 - 15487/37748736*n^9 + 2567/37748736*n^10 - 21/4194304*n^11) * eps^11
-        + (8109/4194304 - 5491/2097152*n - 3893/2097152*n^2 + 11305/3145728*n^3 + 11799/8388608*n^4 - 187397/37748736*n^5 + 2753/1179648*n^6 + 24241/12582912*n^7 - 118771/37748736*n^8 + 73177/37748736*n^9 - 693/1048576*n^10 + 4675/37748736*n^11 - 253/25165824*n^12) * eps^12
-        + (6953/4194304 - 80971/50331648*n - 252263/100663296*n^2 + 199465/100663296*n^3 + 895717/301989888*n^4 - 52205/25165824*n^5 - 482759/150994944*n^6 + 591815/150994944*n^7 + 2911/37748736*n^8 - 277705/100663296*n^9 + 689963/301989888*n^10 - 276985/301989888*n^11 + 58259/301989888*n^12 - 575/33554432*n^13) * eps^13
-        + (52105/33554432 - 122417/100663296*n - 450521/201326592*n^2 + 40603/100663296*n^3 + 1865333/603979776*n^4 + 23971/75497472*n^5 - 972811/301989888*n^6 - 36503/50331648*n^7 + 811127/201326592*n^8 - 149813/100663296*n^9 - 153359/75497472*n^10 + 81805/33554432*n^11 - 43547/37748736*n^12 + 40885/150994944*n^13 - 1755/67108864*n^14) * eps^14
-        + (4429673/3221225472 - 788207/1073741824*n - 6941611/3221225472*n^2 - 897577/3221225472*n^3 + 2356975/1073741824*n^4 + 17574277/9663676416*n^5 - 17208913/9663676416*n^6 - 8196295/3221225472*n^7 + 3937649/3221225472*n^8 + 10299955/3221225472*n^9 - 2716857/1073741824*n^10 - 3753553/3221225472*n^11 + 23362279/9663676416*n^12 - 13084435/9663676416*n^13 + 379015/1073741824*n^14) * eps^15
-        + (2758463/2147483648 - 1758869/3221225472*n - 5672105/3221225472*n^2 - 973687/1073741824*n^3 + 14858035/9663676416*n^4 + 19887425/9663676416*n^5 - 32501/536870912*n^6 - 24418015/9663676416*n^7 - 5340461/4831838208*n^8 + 2428553/1073741824*n^9 + 19060745/9663676416*n^10 - 29342159/9663676416*n^11 - 2979365/9663676416*n^12 + 21844849/9663676416*n^13) * eps^16
-        + (2490257/2147483648 - 7674811/25769803776*n - 20315813/12884901888*n^2 - 4435023/4294967296*n^3 + 27370555/38654705664*n^4 + 26375911/12884901888*n^5 + 1831967/2147483648*n^6 - 54254453/38654705664*n^7 - 10497871/4831838208*n^8 + 3956369/12884901888*n^9 + 32001391/12884901888*n^10 + 28530035/38654705664*n^11 - 59974063/19327352832*n^12) * eps^17
-        + (18666393/17179869184 - 889513/4294967296*n - 21696367/17179869184*n^2 - 15580247/12884901888*n^3 + 3662981/12884901888*n^4 + 14977259/9663676416*n^5 + 9479491/6442450944*n^6 - 2887897/6442450944*n^7 - 73237177/38654705664*n^8 - 16269899/12884901888*n^9 + 50631997/38654705664*n^10 + 83059381/38654705664*n^11) * eps^18
-        + (68321333/68719476736 - 14723375/206158430208*n - 56990675/51539607552*n^2 - 155817437/137438953472*n^3 - 18588719/103079215104*n^4 + 41892585/34359738368*n^5 + 57054647/38654705664*n^6 + 283540243/618475290624*n^7 - 22561439/17179869184*n^8 - 174386747/103079215104*n^9 - 158151485/618475290624*n^10) * eps^19
-        + (128591121/137438953472 - 1479029/51539607552*n - 726294569/824633720832*n^2 - 305943/268435456*n^3 - 295907705/824633720832*n^4 + 113271359/154618822656*n^5 + 1807217413/1236950581248*n^6 + 32409209/38654705664*n^7 - 581666617/1236950581248*n^8 - 111277655/68719476736*n^9) * eps^20
-        + (713238475/824633720832 + 53664037/1099511627776*n - 1263187013/1649267441664*n^2 - 1670261267/1649267441664*n^3 - 474955129/824633720832*n^4 + 4600090009/9895604649984*n^5 + 1438755463/1236950581248*n^6 + 314620739/274877906944*n^7 + 247598477/4947802324992*n^8) * eps^21
-        + (1797792591/2199023255552 + 110680117/1649267441664*n - 4012013791/6597069766656*n^2 - 1590584081/1649267441664*n^3 - 1351592063/2199023255552*n^4 + 41953639/309237645312*n^5 + 19375684513/19791209299968*n^6 + 85456501/77309411328*n^7) * eps^22
-        + (26806607255/35184372088832 + 11900807335/105553116266496*n - 55739761391/105553116266496*n^2 - 88591049429/105553116266496*n^3 - 24583779341/35184372088832*n^4 - 1960568177/105553116266496*n^5 + 212797419253/316659348799488*n^6) * eps^23
-        + (50883408771/70368744177664 + 4164850661/35184372088832*n - 14681082863/35184372088832*n^2 - 82400553121/105553116266496*n^3 - 70910402069/105553116266496*n^4 - 67176278281/316659348799488*n^5) * eps^24
-        + (190930903235/281474976710656 + 15383945467/105553116266496*n - 38240500283/105553116266496*n^2 - 35530344527/52776558133248*n^3 - 437558257621/633318697598976*n^4) * eps^25
-        + (45468475229/70368744177664 + 15280317955/105553116266496*n - 19959778025/70368744177664*n^2 - 32689473503/52776558133248*n^3) * eps^26
-        + (24702973639945/40532396646334464 + 726357235713/4503599627370496*n - 3324932711075/13510798882111488*n^2) * eps^27
-        + (5246222852159/9007199254740992 + 706735196961/4503599627370496*n) * eps^28
-        + 310707493777/562949953421312 * eps^29;
-C3[10] = + (4199/2621440 - 4199/1048576*n + 4845/1048576*n^2 - 969/262144*n^3 + 2907/1310720*n^4 - 10659/10485760*n^5 + 741/2097152*n^6 - 95/1048576*n^7 + 17/1048576*n^8 - 19/10485760*n^9 + 1/10485760*n^10) * eps^10
-        + (4199/2097152 - 4845/1048576*n + 7429/2097152*n^2 + 969/5242880*n^3 - 12597/4194304*n^4 + 35397/10485760*n^5 - 9329/4194304*n^6 + 2087/2097152*n^7 - 6479/20971520*n^8 + 135/2097152*n^9 - 171/20971520*n^10 + 1/2097152*n^11) * eps^11
-        + (6783/4194304 - 12597/4194304*n - 2261/41943040*n^2 + 174743/41943040*n^3 - 164901/41943040*n^4 + 1539/5242880*n^5 + 214809/83886080*n^6 - 29519/10485760*n^7 + 139141/83886080*n^8 - 1631/2621440*n^9 + 12559/83886080*n^10 - 893/41943040*n^11 + 23/16777216*n^12) * eps^12
-        + (13243/8388608 - 19703/8388608*n - 101099/83886080*n^2 + 138073/41943040*n^3 + 24719/83886080*n^4 - 337423/83886080*n^5 + 12363/4194304*n^6 + 57103/83886080*n^7 - 27323/10485760*n^8 + 178529/83886080*n^9 - 81173/83886080*n^10 + 4485/16777216*n^11 - 3553/83886080*n^12 + 25/8388608*n^13) * eps^13
-        + (92055/67108864 - 822035/536870912*n - 1020015/536870912*n^2 + 574655/268435456*n^3 + 2734037/1342177280*n^4 - 6716637/2684354560*n^5 - 4712349/2684354560*n^6 + 158653/41943040*n^7 - 320995/268435456*n^8 - 4870931/2684354560*n^9 + 6209363/2684354560*n^10 - 1727177/1342177280*n^11 + 272823/671088640*n^12 - 38285/536870912*n^13 + 2925/536870912*n^14) * eps^14
-        + (1390515/1073741824 - 638609/536870912*n - 9739457/5368709120*n^2 + 2244193/2684354560*n^3 + 2762359/1073741824*n^4 - 1609109/2684354560*n^5 - 14885329/5368709120*n^6 + 1720321/2684354560*n^7 + 3362447/1073741824*n^8 - 6643351/2684354560*n^9 - 4107621/5368709120*n^10 + 5967063/2684354560*n^11 - 8268441/5368709120*n^12 + 1490177/2684354560*n^13 - 575757/5368709120*n^14) * eps^15
-        + (2486055/2147483648 - 416271/536870912*n - 39210607/21474836480*n^2 + 939667/5368709120*n^3 + 9060325/4294967296*n^4 + 2491453/2684354560*n^5 - 46473241/21474836480*n^6 - 3953531/2684354560*n^7 + 44317207/21474836480*n^8 + 9488381/5368709120*n^9 - 64785587/21474836480*n^10 + 739973/2684354560*n^11 + 41224629/21474836480*n^12 - 9171349/5368709120*n^13) * eps^16
-        + (2335727/2147483648 - 2563477/4294967296*n - 16701111/10737418240*n^2 - 9668041/21474836480*n^3 + 17992927/10737418240*n^4 + 31720101/21474836480*n^5 - 2271699/2684354560*n^6 - 47531759/21474836480*n^7 + 1536949/10737418240*n^8 + 10243175/4294967296*n^9 + 3586031/10737418240*n^10 - 63134341/21474836480*n^11 + 12279279/10737418240*n^12) * eps^17
-        + (16987677/17179869184 - 12817701/34359738368*n - 245571871/171798691840*n^2 - 113240313/171798691840*n^3 + 346569259/343597383680*n^4 + 74555269/42949672960*n^5 + 27207641/343597383680*n^6 - 297892471/171798691840*n^7 - 90518711/68719476736*n^8 + 56969301/42949672960*n^9 + 132544051/68719476736*n^10 - 17233729/21474836480*n^11) * eps^18
-        + (63952469/68719476736 - 9581357/34359738368*n - 203499591/171798691840*n^2 - 76181293/85899345920*n^3 + 212001921/343597383680*n^4 + 103062223/68719476736*n^5 + 287585989/343597383680*n^6 - 73169205/68719476736*n^7 - 114638241/68719476736*n^8 - 59443911/343597383680*n^9 + 159059379/85899345920*n^10) * eps^19
-        + (588367381/687194767360 - 20787795/137438953472*n - 2904705599/2748779069440*n^2 - 1224194119/1374389534720*n^3 + 476022861/2748779069440*n^4 + 1802954677/1374389534720*n^5 + 739674421/687194767360*n^6 - 326887271/1374389534720*n^7 - 530422339/343597383680*n^8 - 279426503/274877906944*n^9) * eps^20
-        + (222258195/274877906944 - 55829477/549755813888*n - 477453485/549755813888*n^2 - 2590977593/2748779069440*n^3 - 58684921/1374389534720*n^4 + 1291134563/1374389534720*n^5 + 1706006381/1374389534720*n^6 + 33790047/137438953472*n^7 - 1348338613/1374389534720*n^8) * eps^21
-        + (3301594169/4398046511104 - 453528367/17592186044416*n - 67434894591/87960930222080*n^2 - 38367823899/43980465111040*n^3 - 2503383779/8796093022208*n^4 + 62281465759/87960930222080*n^5 + 98226145519/87960930222080*n^6 + 5981539941/8796093022208*n^7) * eps^22
-        + (25036620431/35184372088832 - 3706957/17592186044416*n - 110515260937/175921860444160*n^2 - 75242715363/87960930222080*n^3 - 13113832313/35184372088832*n^4 + 35799902519/87960930222080*n^5 + 181849615997/175921860444160*n^6) * eps^23
-        + (46828608507/70368744177664 + 1623985719/35184372088832*n - 77781379687/140737488355328*n^2 - 135023615257/175921860444160*n^3 - 343735176087/703687441776640*n^4 + 21076200917/87960930222080*n^5) * eps^24
-        + (22273557181/35184372088832 + 8209167567/140737488355328*n - 79486039261/175921860444160*n^2 - 512388782813/703687441776640*n^3 - 35491170583/70368744177664*n^4) * eps^25
-        + (670564680061/1125899906842624 + 196582254575/2251799813685248*n - 4472224828261/11258999068426240*n^2 - 3626987174247/5629499534213120*n^3) * eps^26
-        + (2559941004369/4503599627370496 + 206983074593/2251799813685248*n - 7284964906539/22517998136852480*n^2) * eps^27
-        + (4841011900185/9007199254740992 + 992966911831/9007199254740992*n) * eps^28
-        + 9267877312991/18014398509481984 * eps^29;
-C3[11] = + (29393/23068672 - 6783/2097152*n + 8075/2097152*n^2 - 6783/2097152*n^3 + 8721/4194304*n^4 - 4389/4194304*n^5 + 1729/4194304*n^6 - 525/4194304*n^7 + 119/4194304*n^8 - 19/4194304*n^9 + 21/46137344*n^10 - 1/46137344*n^11) * eps^11
-        + (6783/4194304 - 8075/2097152*n + 6783/2097152*n^2 - 323/1048576*n^3 - 18753/8388608*n^4 + 12255/4194304*n^5 - 9135/4194304*n^6 + 4711/4194304*n^7 - 219/524288*n^8 + 5131/46137344*n^9 - 85/4194304*n^10 + 105/46137344*n^11 - 1/8388608*n^12) * eps^12
-        + (22287/16777216 - 5491/2097152*n + 22287/67108864*n^2 + 218937/67108864*n^3 - 247779/67108864*n^4 + 65849/67108864*n^5 + 58673/33554432*n^6 - 84249/33554432*n^7 + 655201/369098752*n^8 - 300367/369098752*n^9 + 187059/738197504*n^10 - 38619/738197504*n^11 + 4809/738197504*n^12 - 25/67108864*n^13) * eps^13
-        + (5491/4194304 - 141151/67108864*n - 98363/134217728*n^2 + 196213/67108864*n^3 - 29417/67108864*n^4 - 52095/16777216*n^5 + 419083/134217728*n^6 - 103155/369098752*n^7 - 718191/369098752*n^8 + 1557273/738197504*n^9 - 1788277/1476395008*n^10 + 325161/738197504*n^11 - 6875/67108864*n^12 + 5187/369098752*n^13 - 117/134217728*n^14) * eps^14
-        + (1235475/1073741824 - 1541223/1073741824*n - 1529937/1073741824*n^2 + 2296199/1073741824*n^3 + 1365211/1073741824*n^4 - 2738587/1073741824*n^5 - 7375295/11811160064*n^6 + 38530187/11811160064*n^7 - 23317551/11811160064*n^8 - 10011949/11811160064*n^9 + 24284837/11811160064*n^10 - 18010915/11811160064*n^11 + 7660305/11811160064*n^12 - 1998361/11811160064*n^13 + 300321/11811160064*n^14) * eps^15
-        + (2349103/2147483648 - 1224911/1073741824*n - 781795/536870912*n^2 + 1166537/1073741824*n^3 + 1094423/536870912*n^4 - 13807153/11811160064*n^5 - 25077685/11811160064*n^6 + 17157263/11811160064*n^7 + 24268865/11811160064*n^8 - 33106325/11811160064*n^9 + 2076575/5905580032*n^10 + 19838275/11811160064*n^11 - 10084007/5905580032*n^12 + 10078335/11811160064*n^13) * eps^16
-        + (2117379/2147483648 - 6739785/8589934592*n - 1646453/1073741824*n^2 + 261625/536870912*n^3 + 8131213/4294967296*n^4 + 20997261/94489280512*n^5 - 101979543/47244640256*n^6 - 530353/1073741824*n^7 + 828023/369098752*n^8 + 43716997/94489280512*n^9 - 65673747/23622320128*n^10 + 31841459/23622320128*n^11 + 52076665/47244640256*n^12) * eps^17
-        + (15999297/17179869184 - 665231/1073741824*n - 23300153/17179869184*n^2 - 221463/2147483648*n^3 + 28505205/17179869184*n^4 + 3924281/4294967296*n^5 - 243226535/188978561024*n^6 - 77376389/47244640256*n^7 + 188744355/188978561024*n^8 + 45186567/23622320128*n^9 - 160724471/188978561024*n^10 - 25713125/11811160064*n^11) * eps^18
-        + (58546741/68719476736 - 28776169/68719476736*n - 10980371/8589934592*n^2 - 48605103/137438953472*n^3 + 39670397/34359738368*n^4 + 31828611/23622320128*n^5 - 187541869/377957122048*n^6 - 115448809/68719476736*n^7 - 42158467/94489280512*n^8 + 82411933/47244640256*n^9 + 753396595/755914244096*n^10) * eps^19
-        + (110659725/137438953472 - 2797611/8589934592*n - 299770405/274877906944*n^2 - 10459603/17179869184*n^3 + 226651699/274877906944*n^4 + 497934925/377957122048*n^5 + 409147909/1511828488192*n^6 - 510313799/377957122048*n^7 - 1751353333/1511828488192*n^8 + 493141905/755914244096*n^9) * eps^20
-        + (818467293/1099511627776 - 56886273/274877906944*n - 2178023121/2199023255552*n^2 - 1468259459/2199023255552*n^3 + 936005777/2199023255552*n^4 + 30592744379/24189255811072*n^5 + 483964345/755914244096*n^6 - 2151235101/3023656976384*n^7 - 17107054983/12094627905536*n^8) * eps^21
-        + (96937173/137438953472 - 338878191/2199023255552*n - 3672830975/4398046511104*n^2 - 1657202547/2199023255552*n^3 + 445677205/2199023255552*n^4 + 12225739435/12094627905536*n^5 + 45022865775/48378511622144*n^6 - 743433509/3023656976384*n^7) * eps^22
-        + (23130670543/35184372088832 - 2857753463/35184372088832*n - 26305948157/35184372088832*n^2 - 25618373853/35184372088832*n^3 - 1549180705/35184372088832*n^4 + 324075281367/387028092977152*n^5 + 367058948627/387028092977152*n^6) * eps^23
-        + (43968565791/70368744177664 - 1805535203/35184372088832*n - 2760991455/4398046511104*n^2 - 25963357003/35184372088832*n^3 - 177189123/1099511627776*n^4 + 225673037041/387028092977152*n^5) * eps^24
-        + (41252640009/70368744177664 - 1485684057/281474976710656*n - 39333792359/70368744177664*n^2 - 95968855991/140737488355328*n^3 - 41727255371/140737488355328*n^4) * eps^25
-        + (314637345025/562949953421312 + 791327487/70368744177664*n - 263720191503/562949953421312*n^2 - 5813138145/8796093022208*n^3) * eps^26
-        + (2374498758045/4503599627370496 + 184441277827/4503599627370496*n - 1875159093121/4503599627370496*n^2) * eps^27
-        + (4540838699861/9007199254740992 + 223044732129/4503599627370496*n) * eps^28
-        + 17213216597955/36028797018963968 * eps^29;
-C3[12] = + (52003/50331648 - 22287/8388608*n + 81719/25165824*n^2 - 572033/201326592*n^3 + 129789/67108864*n^4 - 52877/50331648*n^5 + 23023/50331648*n^6 - 5313/33554432*n^7 + 4301/100663296*n^8 - 437/50331648*n^9 + 21/16777216*n^10 - 23/201326592*n^11 + 1/201326592*n^12) * eps^12
-        + (22287/16777216 - 81719/25165824*n + 393737/134217728*n^2 - 62491/100663296*n^3 - 658559/402653184*n^4 + 83743/33554432*n^5 - 417197/201326592*n^6 + 60467/50331648*n^7 - 34569/67108864*n^8 + 8287/50331648*n^9 - 15479/402653184*n^10 + 209/33554432*n^11 - 253/402653184*n^12 + 1/33554432*n^13) * eps^13
-        + (37145/33554432 - 3692213/1610612736*n + 919885/1610612736*n^2 + 2047345/805306368*n^3 - 1807685/536870912*n^4 + 2268145/1610612736*n^5 + 107525/100663296*n^6 - 287615/134217728*n^7 + 1439165/805306368*n^8 - 1554985/1610612736*n^9 + 196337/536870912*n^10 - 78625/805306368*n^11 + 28451/1610612736*n^12 - 3151/1610612736*n^13 + 27/268435456*n^14) * eps^14
-        + (1181211/1073741824 - 1011655/536870912*n - 1258123/3221225472*n^2 + 1368385/536870912*n^3 - 966345/1073741824*n^4 - 1845635/805306368*n^5 + 3249555/1073741824*n^6 - 32195/33554432*n^7 - 4125455/3221225472*n^8 + 1038315/536870912*n^9 - 1464041/1073741824*n^10 + 330167/536870912*n^11 - 602911/3221225472*n^12 + 5049/134217728*n^13 - 14651/3221225472*n^14) * eps^15
-        + (2097163/2147483648 - 716243/536870912*n - 13577935/12884901888*n^2 + 26345695/12884901888*n^3 + 539465/805306368*n^4 - 30721445/12884901888*n^5 + 1671665/8589934592*n^6 + 16667215/6442450944*n^7 - 60325345/25769803776*n^8 - 7435/2147483648*n^9 + 3478199/2147483648*n^10 - 20654597/12884901888*n^11 + 11205989/12884901888*n^12 - 1294237/4294967296*n^13) * eps^16
-        + (2006267/2147483648 - 4643355/4294967296*n - 29853701/25769803776*n^2 + 15623785/12884901888*n^3 + 19883891/12884901888*n^4 - 37991705/25769803776*n^5 - 12448665/8589934592*n^6 + 47094413/25769803776*n^7 + 6739069/6442450944*n^8 - 2864351/1073741824*n^9 + 30201445/25769803776*n^10 + 1058057/1073741824*n^11 - 10580051/6442450944*n^12) * eps^17
-        + (43720079/51539607552 - 26598603/34359738368*n - 43949251/34359738368*n^2 + 71325415/103079215104*n^3 + 6957895/4294967296*n^4 - 2536467/8589934592*n^5 - 198525719/103079215104*n^6 + 13878817/51539607552*n^7 + 34508611/17179869184*n^8 - 52928069/103079215104*n^9 - 220720771/103079215104*n^10 + 66852739/34359738368*n^11) * eps^18
-        + (55326431/68719476736 - 64299007/103079215104*n - 120784247/103079215104*n^2 + 15781747/103079215104*n^3 + 106472291/68719476736*n^4 + 14611239/34359738368*n^5 - 150547861/103079215104*n^6 - 103209593/103079215104*n^7 + 99804641/68719476736*n^8 + 123227375/103079215104*n^9 - 12788579/8589934592*n^10) * eps^19
-        + (814404171/1099511627776 - 732481345/1649267441664*n - 466819643/412316860416*n^2 - 734752241/6597069766656*n^3 + 2621301201/2199023255552*n^4 + 785792285/824633720832*n^5 - 1433859853/1649267441664*n^6 - 770153889/549755813888*n^7 + 432049963/1649267441664*n^8 + 5608251079/3298534883328*n^9) * eps^20
-        + (772604523/1099511627776 - 48760475/137438953472*n - 13077992689/13194139533312*n^2 - 1241891819/3298534883328*n^3 + 4110854519/4398046511104*n^4 + 3534181601/3298534883328*n^5 - 586500377/3298534883328*n^6 - 2275702691/1649267441664*n^7 - 3789336937/6597069766656*n^8) * eps^21
-        + (358745439/549755813888 - 12934264661/52776558133248*n - 48333688039/52776558133248*n^2 - 4146286613/8796093022208*n^3 + 31281974437/52776558133248*n^4 + 59718172567/52776558133248*n^5 + 2095950701/8796093022208*n^6 - 25516746833/26388279066624*n^7) * eps^22
-        + (21821485195/35184372088832 - 10108238849/52776558133248*n - 27769272537/35184372088832*n^2 - 10217136851/17592186044416*n^3 + 13447296309/35184372088832*n^4 + 2169033311/2199023255552*n^5 + 21069180867/35184372088832*n^6) * eps^23
-        + (122479921063/211106232532992 - 2150084801/17592186044416*n - 302356197395/422212465065984*n^2 - 62203620647/105553116266496*n^3 + 20409605765/140737488355328*n^4 + 370492702933/422212465065984*n^5) * eps^24
-        + (38901506935/70368744177664 - 12663469807/140737488355328*n - 43169763871/70368744177664*n^2 - 262080088265/422212465065984*n^3 + 4124183297/281474976710656*n^4) * eps^25
-        + (292863078097/562949953421312 - 1583046845/35184372088832*n - 29152993591/52776558133248*n^2 - 1996652856445/3377699720527872*n^3) * eps^26
-        + (69950118165/140737488355328 - 1807466357/70368744177664*n - 1063027613707/2251799813685248*n^2) * eps^27
-        + (16935196336601/36028797018963968 + 223223833507/54043195528445952*n) * eps^28
-        + 16221720992423/36028797018963968 * eps^29;
-C3[13] = + (185725/218103808 - 37145/16777216*n + 185725/67108864*n^2 - 168245/67108864*n^3 + 120175/67108864*n^4 - 69575/67108864*n^5 + 16445/33554432*n^6 - 6325/33554432*n^7 + 1955/33554432*n^8 - 475/33554432*n^9 + 175/67108864*n^10 - 23/67108864*n^11 + 25/872415232*n^12 - 1/872415232*n^13) * eps^13
-        + (37145/33554432 - 185725/67108864*n + 356155/134217728*n^2 - 54625/67108864*n^3 - 39215/33554432*n^4 + 8855/4194304*n^5 - 259325/134217728*n^6 + 41515/33554432*n^7 - 625/1048576*n^8 + 14765/67108864*n^9 - 8297/134217728*n^10 + 11225/872415232*n^11 - 63/33554432*n^12 + 75/436207616*n^13 - 1/134217728*n^14) * eps^14
-        + (1002915/1073741824 - 2165335/1073741824*n + 766935/1073741824*n^2 + 2116575/1073741824*n^3 - 3237825/1073741824*n^4 + 1772265/1073741824*n^5 + 558555/1073741824*n^6 - 1889505/1073741824*n^7 + 1846575/1073741824*n^8 - 1148355/1073741824*n^9 + 6621687/13958643712*n^10 - 2147433/13958643712*n^11 + 502623/13958643712*n^12 - 80975/13958643712*n^13 + 8075/13958643712*n^14) * eps^15
-        + (2008015/2147483648 - 1815735/1073741824*n - 76705/536870912*n^2 + 2357385/1073741824*n^3 - 19665/16777216*n^4 - 1726035/1073741824*n^5 + 1491465/536870912*n^6 - 1503195/1073741824*n^7 - 363375/536870912*n^8 + 23156505/13958643712*n^9 - 9914347/6979321856*n^10 + 10709897/13958643712*n^11 - 501361/1744830464*n^12 + 1052013/13958643712*n^13) * eps^16
-        + (1798255/2147483648 - 10601045/8589934592*n - 1641165/2147483648*n^2 + 4086755/2147483648*n^3 + 913905/4294967296*n^4 - 18130905/8589934592*n^5 + 3204135/4294967296*n^6 + 1017741/536870912*n^7 - 33577953/13958643712*n^8 + 73063651/111669149696*n^9 + 1928075/1744830464*n^10 - 10703707/6979321856*n^11 + 57707979/55834574848*n^12) * eps^17
-        + (13840365/17179869184 - 2184195/2147483648*n - 15684505/17179869184*n^2 + 1348605/1073741824*n^3 + 19080865/17179869184*n^4 - 6839475/4294967296*n^5 - 14431629/17179869184*n^6 + 105895953/55834574848*n^7 + 48950133/223338299392*n^8 - 7886043/3489660928*n^9 + 372503147/223338299392*n^10 + 8024167/27917287424*n^11) * eps^18
-        + (101195745/137438953472 - 103316805/137438953472*n - 145814825/137438953472*n^2 + 56137605/68719476736*n^3 + 45844365/34359738368*n^4 - 11127843/17179869184*n^5 - 176827545/111669149696*n^6 + 177367791/223338299392*n^7 + 43666839/27917287424*n^8 - 502109665/446676598784*n^9 - 608048583/446676598784*n^10) * eps^19
-        + (192942285/274877906944 - 84667255/137438953472*n - 276352515/274877906944*n^2 + 46276975/137438953472*n^3 + 190922955/137438953472*n^4 + 544527/17179869184*n^5 - 80867391/55834574848*n^6 - 46739031/111669149696*n^7 + 1413025611/893353197568*n^8 + 208444667/446676598784*n^9) * eps^20
-        + (713651475/1099511627776 - 500804215/1099511627776*n - 2189663055/2199023255552*n^2 + 166841355/2199023255552*n^3 + 2545633095/2199023255552*n^4 + 1301305233/2199023255552*n^5 - 73499007/68719476736*n^6 - 3649124073/3573412790272*n^7 + 10673011569/14293651161088*n^8) * eps^21
-        + (1358850675/2199023255552 - 816309985/2199023255552*n - 3925550751/4398046511104*n^2 - 411093181/2199023255552*n^3 + 1069809697/1099511627776*n^4 + 887786559/1099511627776*n^5 - 28489507799/57174604644352*n^6 - 4430888365/3573412790272*n^7) * eps^22
-        + (20273133015/35184372088832 - 9511268919/35184372088832*n - 29503243001/35184372088832*n^2 - 10679084579/35184372088832*n^3 + 24333880611/35184372088832*n^4 + 33531947513/35184372088832*n^5 - 43359239675/457396837154816*n^6) * eps^23
-        + (38647569279/70368744177664 - 7657024935/35184372088832*n - 25922041023/35184372088832*n^2 - 15045539631/35184372088832*n^3 + 17766942325/35184372088832*n^4 + 31659609403/35184372088832*n^5) * eps^24
-        + (36274342699/70368744177664 - 42850331919/281474976710656*n - 11911257957/17592186044416*n^2 - 64900868793/140737488355328*n^3 + 40343787423/140737488355328*n^4) * eps^25
-        + (277172296351/562949953421312 - 2094012549/17592186044416*n - 332189237881/562949953421312*n^2 - 35829993671/70368744177664*n^3) * eps^26
-        + (1046221099377/2251799813685248 - 170172833119/2251799813685248*n - 604554123131/1125899906842624*n^2) * eps^27
-        + (2003125009747/4503599627370496 - 61476552589/1125899906842624*n) * eps^28
-        + 15190705138949/36028797018963968 * eps^29;
-C3[14] = + (334305/469762048 - 1002915/536870912*n + 1278225/536870912*n^2 - 596505/268435456*n^3 + 444015/268435456*n^4 - 542685/536870912*n^5 + 1924065/3758096384*n^6 - 201825/939524096*n^7 + 9945/134217728*n^8 - 11115/536870912*n^9 + 2457/536870912*n^10 - 207/268435456*n^11 + 25/268435456*n^12 - 27/3758096384*n^13 + 1/3758096384*n^14) * eps^14
-        + (1002915/1073741824 - 1278225/536870912*n + 2576115/1073741824*n^2 - 497835/536870912*n^3 - 865605/1073741824*n^4 + 6660225/3758096384*n^5 - 1906125/1073741824*n^6 + 4658355/3758096384*n^7 - 707265/1073741824*n^8 + 146835/536870912*n^9 - 95481/1073741824*n^10 + 11985/536870912*n^11 - 31527/7516192768*n^12 + 299/536870912*n^13 - 351/7516192768*n^14) * eps^15
-        + (1710855/2147483648 - 478515/268435456*n + 3411705/4294967296*n^2 + 1630815/1073741824*n^3 - 80250105/30064771072*n^4 + 6633315/3758096384*n^5 + 2765295/30064771072*n^6 - 10456095/7516192768*n^7 + 48041487/30064771072*n^8 - 604737/536870912*n^9 + 2449717/4294967296*n^10 - 1624435/7516192768*n^11 + 1847371/30064771072*n^12 - 48169/3758096384*n^13) * eps^16
-        + (1723965/2147483648 - 6533265/4294967296*n + 76935/2147483648*n^2 + 56398185/30064771072*n^3 - 19759875/15032385536*n^4 - 31583175/30064771072*n^5 + 36921495/15032385536*n^6 - 49642983/30064771072*n^7 - 355569/2147483648*n^8 + 40109813/30064771072*n^9 - 20948701/15032385536*n^10 + 26526277/30064771072*n^11 - 5886663/15032385536*n^12) * eps^17
-        + (24894855/34359738368 - 78264285/68719476736*n - 36988485/68719476736*n^2 + 418581945/240518168576*n^3 - 60094815/481036337152*n^4 - 107991795/60129542144*n^5 + 522459795/481036337152*n^6 + 303630087/240518168576*n^7 - 1091940219/481036337152*n^8 + 33522753/30064771072*n^9 + 40499933/68719476736*n^10 - 324917351/240518168576*n^11) * eps^18
-        + (96292605/137438953472 - 65462715/68719476736*n - 97786455/137438953472*n^2 + 85607565/68719476736*n^3 + 359327175/481036337152*n^4 - 762768759/481036337152*n^5 - 159920877/481036337152*n^6 + 852547365/481036337152*n^7 - 189618327/481036337152*n^8 - 831922211/481036337152*n^9 + 903295221/481036337152*n^10) * eps^19
-        + (177052965/274877906944 - 198593385/274877906944*n - 120299805/137438953472*n^2 + 850632495/962072674304*n^3 + 255130545/240518168576*n^4 - 1668127191/1924145348608*n^5 - 2324152365/1924145348608*n^6 + 2128566621/1924145348608*n^7 + 2025323859/1924145348608*n^8 - 2724276899/1924145348608*n^9) * eps^20
-        + (338946975/549755813888 - 82552875/137438953472*n - 471549795/549755813888*n^2 + 446058513/962072674304*n^3 + 4645483323/3848290697216*n^4 - 514236729/1924145348608*n^5 - 2539636863/1924145348608*n^6 + 110256645/1924145348608*n^7 + 2860511727/1924145348608*n^8) * eps^21
-        + (2519012745/4398046511104 - 8042808615/17592186044416*n - 15323258283/17592186044416*n^2 + 13365078339/61572651155456*n^3 + 2371903421/2199023255552*n^4 + 34764704609/123145302310912*n^5 - 139920418129/123145302310912*n^6 - 38482766489/61572651155456*n^7) * eps^22
-        + (19248770055/35184372088832 - 6660671445/17592186044416*n - 28084233477/35184372088832*n^2 - 4351178653/123145302310912*n^3 + 236611923917/246290604621824*n^4 + 68150566051/123145302310912*n^5 - 172847147773/246290604621824*n^6) * eps^23
-        + (36031799979/70368744177664 - 5033314047/17592186044416*n - 107266336785/140737488355328*n^2 - 20083658499/123145302310912*n^3 + 727351416229/985162418487296*n^4 + 46669684549/61572651155456*n^5) * eps^24
-        + (34437446319/70368744177664 - 33102303575/140737488355328*n - 187327049/274877906944*n^2 - 290583351929/985162418487296*n^3 + 10224940189/17592186044416*n^4) * eps^25
-        + (259380435671/562949953421312 - 195750751369/1125899906842624*n - 713851834615/1125899906842624*n^2 - 2727777187263/7881299347898368*n^3) * eps^26
-        + (993200127657/2251799813685248 - 158323530281/1125899906842624*n - 631656315671/1125899906842624*n^2) * eps^27
-        + (13155294584639/31525197391593472 - 13930847115/140737488355328*n) * eps^28
-        + 112658685443/281474976710656 * eps^29;
-C3[15] = + (646323/1073741824 - 1710855/1073741824*n + 2217775/1073741824*n^2 - 2124395/1073741824*n^3 + 1638819/1073741824*n^4 - 1049191/1073741824*n^5 + 563615/1073741824*n^6 - 254475/1073741824*n^7 + 96135/1073741824*n^8 - 150423/5368709120*n^9 + 38367/5368709120*n^10 - 4669/3221225472*n^11 + 725/3221225472*n^12 - 27/1073741824*n^13 + 29/16106127360*n^14) * eps^15
-        + (1710855/2147483648 - 2217775/1073741824*n + 2331165/1073741824*n^2 - 1059863/1073741824*n^3 - 563615/1073741824*n^4 + 1586793/1073741824*n^5 - 1732315/1073741824*n^6 + 1306305/1073741824*n^7 - 3776409/5368709120*n^8 + 346173/1073741824*n^9 - 1902313/16106127360*n^10 + 36917/1073741824*n^11 - 25153/3221225472*n^12 + 21547/16106127360*n^13) * eps^16
-        + (5892945/8589934592 - 6800065/4294967296*n + 3577121/4294967296*n^2 + 4983157/4294967296*n^3 - 10069699/4294967296*n^4 + 7701733/4294967296*n^5 - 502541/2147483648*n^6 - 1414127/1342177280*n^7 + 968223/671088640*n^8 - 6128483/5368709120*n^9 + 41761247/64424509440*n^10 - 18009853/64424509440*n^11 + 5979931/64424509440*n^12) * eps^17
-        + (5972985/8589934592 - 5892945/4294967296*n + 22011/134217728*n^2 + 6844087/4294967296*n^3 - 5882157/4294967296*n^4 - 326337/536870912*n^5 + 18126537/8589934592*n^6 - 18908667/10737418240*n^7 + 2622383/10737418240*n^8 + 21415079/21474836480*n^9 - 55870711/42949672960*n^10 + 4095751/4294967296*n^11) * eps^18
-        + (86853405/137438953472 - 144315455/137438953472*n - 49728185/137438953472*n^2 + 108068645/68719476736*n^3 - 12628253/34359738368*n^4 - 25408437/17179869184*n^5 + 43573631/34359738368*n^6 + 24761157/34359738368*n^7 - 17319235/8589934592*n^8 + 240067131/171798691840*n^9 + 31601183/257698037760*n^10) * eps^19
-        + (168754335/274877906944 - 122304455/137438953472*n - 150252509/274877906944*n^2 + 165190351/137438953472*n^3 + 308731767/687194767360*n^4 - 257790947/171798691840*n^5 + 4546243/68719476736*n^6 + 264538841/171798691840*n^7 - 69252419/85899345920*n^8 - 101279697/85899345920*n^9) * eps^20
-        + (9748205/17179869184 - 2961915/4294967296*n - 789535179/1099511627776*n^2 + 2502565179/2748779069440*n^3 + 892979397/1099511627776*n^4 - 4058500961/4123168604160*n^5 - 348426329/412316860416*n^6 + 858120331/687194767360*n^7 + 2315189833/4123168604160*n^8) * eps^21
-        + (299705865/549755813888 - 638342925/1099511627776*n - 4003125229/5497558138880*n^2 + 3007831367/5497558138880*n^3 + 16848959603/16492674416640*n^4 - 1323821551/2748779069440*n^5 - 9300135223/8246337208320*n^6 + 169736315/412316860416*n^7) * eps^22
-        + (17894468415/35184372088832 - 15913542447/35184372088832*n - 133457144181/175921860444160*n^2 + 56414449099/175921860444160*n^3 + 514339794913/527765581332480*n^4 + 15799330939/527765581332480*n^5 - 116951809217/105553116266496*n^6) * eps^23
-        + (34289203599/70368744177664 - 13355533647/35184372088832*n - 37471080293/52776558133248*n^2 + 8836479539/105553116266496*n^3 + 80449237869/87960930222080*n^4 + 171417192913/527765581332480*n^5) * eps^24
-        + (32203691103/70368744177664 - 249040377061/844424930131968*n - 484768709513/703687441776640*n^2 - 100719650663/2111062325329920*n^3 + 525315006811/703687441776640*n^4) * eps^25
-        + (246854172911/562949953421312 - 104020069985/422212465065984*n - 5286374681359/8444249301319680*n^2 - 384367611317/2111062325329920*n^3) * eps^26
-        + (932306372777/2251799813685248 - 425703913753/2251799813685248*n - 3317960448433/5629499534213120*n^2) * eps^27
-        + (1788762256877/4503599627370496 - 528241493161/3377699720527872*n) * eps^28
-        + 3392857970671/9007199254740992 * eps^29;
-C3[16] = + (17678835/34359738368 - 5892945/4294967296*n + 7753875/4294967296*n^2 - 15197595/8589934592*n^3 + 12096045/8589934592*n^4 - 4032015/4294967296*n^5 + 2278965/4294967296*n^6 - 4382625/17179869184*n^7 + 1788111/17179869184*n^8 - 153729/4294967296*n^9 + 44051/4294967296*n^10 - 20677/8589934592*n^11 + 3875/8589934592*n^12 - 279/4294967296*n^13) * eps^16
-        + (5892945/8589934592 - 7753875/4294967296*n + 33806895/17179869184*n^2 - 2171085/2147483648*n^3 - 5272635/17179869184*n^4 + 2629575/2147483648*n^5 - 49961925/34359738368*n^6 + 315549/268435456*n^7 - 25144131/34359738368*n^8 + 97991/268435456*n^9 - 2539675/17179869184*n^10 + 104315/2147483648*n^11 - 220193/17179869184*n^12) * eps^17
-        + (10235115/17179869184 - 97078515/68719476736*n + 57998985/68719476736*n^2 + 30085035/34359738368*n^3 - 140769915/68719476736*n^4 + 242500755/137438953472*n^5 - 65388765/137438953472*n^6 - 51866007/68719476736*n^7 + 174649629/137438953472*n^8 - 154238733/137438953472*n^9 + 48486449/68719476736*n^10 - 11678227/34359738368*n^11) * eps^18
-        + (83431695/137438953472 - 85292625/68719476736*n + 35047515/137438953472*n^2 + 92601495/68719476736*n^3 - 375786495/274877906944*n^4 - 36110133/137438953472*n^5 + 486541497/274877906944*n^6 - 243255915/137438953472*n^7 + 153035871/274877906944*n^8 + 46310869/68719476736*n^9 - 319425953/274877906944*n^10) * eps^19
-        + (38149065/68719476736 - 133056495/137438953472*n - 123158505/549755813888*n^2 + 3098731635/2199023255552*n^3 - 1178980065/2199023255552*n^4 - 324619011/274877906944*n^5 + 183751105/137438953472*n^6 + 76834833/274877906944*n^7 - 937074355/549755813888*n^8 + 1685222465/1099511627776*n^9) * eps^20
-        + (4652325/8589934592 - 456372855/549755813888*n - 1811480505/4398046511104*n^2 + 1251405303/1099511627776*n^3 + 925958313/4398046511104*n^4 - 1506611625/1099511627776*n^5 + 99867213/274877906944*n^6 + 172997329/137438953472*n^7 - 2305540773/2199023255552*n^8) * eps^21
-        + (1106107125/2199023255552 - 11527530885/17592186044416*n - 10297013847/17592186044416*n^2 + 7988241603/8796093022208*n^3 + 10444117217/17592186044416*n^4 - 18068838281/17592186044416*n^5 - 4569806627/8796093022208*n^6 + 11141677047/8796093022208*n^7) * eps^22
-        + (17062152465/35184372088832 - 9812616465/17592186044416*n - 21645687783/35184372088832*n^2 + 10515729759/17592186044416*n^3 + 29676530299/35184372088832*n^4 - 2748637785/4398046511104*n^5 - 31988983111/35184372088832*n^6) * eps^23
-        + (63917467893/140737488355328 - 15585334599/35184372088832*n - 92640075585/140737488355328*n^2 + 55477610943/140737488355328*n^3 + 60444721971/70368744177664*n^4 - 23535121849/140737488355328*n^5) * eps^24
-        + (15353322477/35184372088832 - 52919675455/140737488355328*n - 176994259657/281474976710656*n^2 + 24691209499/140737488355328*n^3 + 119255343701/140737488355328*n^4) * eps^25
-        + (231447333341/562949953421312 - 336197745329/1125899906842624*n - 697975437421/1125899906842624*n^2 + 51290363939/1125899906842624*n^3) * eps^26
-        + (889178086077/2251799813685248 - 284507373851/1125899906842624*n - 644017953049/1125899906842624*n^2) * eps^27
-        + (1683573628847/4503599627370496 - 897506094655/4503599627370496*n) * eps^28
-        + 3236675038231/9007199254740992 * eps^29;
-C3[17] = + (64822395/146028888064 - 10235115/8589934592*n + 3411705/2147483648*n^2 - 3411705/2147483648*n^3 + 2791395/2147483648*n^4 - 1928355/2147483648*n^5 + 2278965/4294967296*n^6 - 1157013/4294967296*n^7 + 504339/4294967296*n^8 - 187891/4294967296*n^9 + 29667/2147483648*n^10 - 7843/2147483648*n^11 + 1705/2147483648*n^12) * eps^17
-        + (10235115/17179869184 - 3411705/2147483648*n + 30705345/17179869184*n^2 - 2171085/2147483648*n^3 - 148335/1073741824*n^4 + 4328685/4294967296*n^5 - 11184459/8589934592*n^6 + 4819539/4294967296*n^7 - 801009/1073741824*n^8 + 860343/2147483648*n^9 - 1518473/8589934592*n^10 + 138105/2147483648*n^11) * eps^18
-        + (71645805/137438953472 - 173996955/137438953472*n + 115067505/137438953472*n^2 + 89230245/137438953472*n^3 - 122538195/68719476736*n^4 + 116788191/68719476736*n^5 - 44648835/68719476736*n^6 - 34126939/68719476736*n^7 + 75175279/68719476736*n^8 - 73970743/68719476736*n^9 + 51014623/68719476736*n^10) * eps^19
-        + (146703315/274877906944 - 154767345/137438953472*n + 43785795/137438953472*n^2 + 156007965/137438953472*n^3 - 364998495/274877906944*n^4 + 115971/68719476736*n^5 + 24948149/17179869184*n^6 - 117523573/68719476736*n^7 + 53786953/68719476736*n^8 + 26103457/68719476736*n^9) * eps^20
-        + (134917425/274877906944 - 982018155/1099511627776*n - 128013105/1099511627776*n^2 + 172486635/137438953472*n^3 - 712641795/1099511627776*n^4 - 1003151847/1099511627776*n^5 + 365003889/274877906944*n^6 - 17906623/274877906944*n^7 - 94572227/68719476736*n^8) * eps^21
-        + (1057102635/2199023255552 - 850997895/1099511627776*n - 663815307/2199023255552*n^2 + 1169497413/1099511627776*n^3 + 49560971/2199023255552*n^4 - 669423269/549755813888*n^5 + 1259901225/2199023255552*n^6 + 266092003/274877906944*n^7) * eps^22
-        + (15777490455/35184372088832 - 21840324879/35184372088832*n - 16655962689/35184372088832*n^2 + 31191967407/35184372088832*n^3 + 14292320879/35184372088832*n^4 - 35796602007/35184372088832*n^5 - 8516465049/35184372088832*n^6) * eps^23
-        + (30518839359/70368744177664 - 18775799295/35184372088832*n - 9098510199/17592186044416*n^2 + 21950540481/35184372088832*n^3 + 93296577/137438953472*n^4 - 25028086871/35184372088832*n^5) * eps^24
-        + (28684124199/70368744177664 - 121237396839/281474976710656*n - 80108249325/140737488355328*n^2 + 62476546353/140737488355328*n^3 + 104269770907/140737488355328*n^4) * eps^25
-        + (221067686111/562949953421312 - 51971219667/140737488355328*n - 312369078125/562949953421312*n^2 + 34424571581/140737488355328*n^3) * eps^26
-        + (835594467657/2251799813685248 - 672205282129/2251799813685248*n - 9778893735/17592186044416*n^2) * eps^27
-        + (1608685463477/4503599627370496 - 1123143299/4398046511104*n) * eps^28
-        + 3053457067201/9007199254740992 * eps^29;
-C3[18] = + (39803225/103079215104 - 71645805/68719476736*n + 96664975/68719476736*n^2 - 12302815/8589934592*n^3 + 10316025/8589934592*n^4 - 29419775/34359738368*n^5 + 18079789/34359738368*n^6 - 4814145/17179869184*n^7 + 20005447/154618822656*n^8 - 15970735/309237645312*n^9 + 608685/34359738368*n^10 - 133331/25769803776*n^11) * eps^18
-        + (71645805/137438953472 - 96664975/68719476736*n + 223621755/137438953472*n^2 - 68391425/68719476736*n^3 - 534905/68719476736*n^4 + 28288833/34359738368*n^5 - 79700845/68719476736*n^6 + 328110727/309237645312*n^7 - 51427295/68719476736*n^8 + 132652751/309237645312*n^9 - 42045641/206158430208*n^10) * eps^19
-        + (126233085/274877906944 - 313153165/274877906944*n + 450214705/549755813888*n^2 + 128894125/274877906944*n^3 - 851033855/549755813888*n^4 + 27708079/17179869184*n^5 - 635023933/824633720832*n^6 - 10743949/38654705664*n^7 + 2277775685/2473901162496*n^8 - 39095495/38654705664*n^9) * eps^20
-        + (259599735/549755813888 - 563308905/549755813888*n + 6216585/17179869184*n^2 + 523725935/549755813888*n^3 - 696028275/549755813888*n^4 + 248241769/1236950581248*n^5 + 360205027/309237645312*n^6 - 1324703563/824633720832*n^7 + 578515831/618475290624*n^8) * eps^21
-        + (1919738085/4398046511104 - 14510296015/17592186044416*n - 571757707/17592186044416*n^2 + 9787185553/8796093022208*n^3 - 14198943547/19791209299968*n^4 - 35731280915/52776558133248*n^5 + 200707555277/158329674399744*n^6 - 1602798301/4947802324992*n^7) * eps^22
-        + (15095149455/35184372088832 - 12695123317/17592186044416*n - 7461993973/35184372088832*n^2 + 17320543045/17592186044416*n^3 - 38933502733/316659348799488*n^4 - 167508491351/158329674399744*n^5 + 225029316355/316659348799488*n^6) * eps^23
-        + (28276211939/70368744177664 - 10324749795/17592186044416*n - 160063685731/422212465065984*n^2 + 44977263973/52776558133248*n^3 + 34943975527/140737488355328*n^4 - 76982106281/79164837199872*n^5) * eps^24
-        + (27428616759/70368744177664 - 214928208341/422212465065984*n - 1901680771/4398046511104*n^2 + 266821592123/422212465065984*n^3 + 168025657159/316659348799488*n^4) * eps^25
-        + (206917174391/562949953421312 - 1407328813243/3377699720527872*n - 1656940587997/3377699720527872*n^2 + 1604700872215/3377699720527872*n^3) * eps^26
-        + (799328663817/2251799813685248 - 405743161697/1125899906842624*n - 17171897611/35184372088832*n^2) * eps^27
-        + (1514801868617/4503599627370496 - 1997506016729/6755399441055744*n) * eps^28
-        + 1461210130553/4503599627370496 * eps^29;
-C3[19] = + (883631595/2611340115968 - 126233085/137438953472*n + 172136025/137438953472*n^2 - 178123365/137438953472*n^3 + 76338585/68719476736*n^4 - 55981629/68719476736*n^5 + 35624673/68719476736*n^6 - 19791485/68719476736*n^7 + 9613007/68719476736*n^8 - 4075291/68719476736*n^9 + 1501423/68719476736*n^10) * eps^19
-        + (126233085/274877906944 - 172136025/137438953472*n + 204068505/137438953472*n^2 - 133218315/137438953472*n^3 + 25446195/274877906944*n^4 + 45803151/68719476736*n^5 - 70683875/68719476736*n^6 + 68421991/68719476736*n^7 - 12732847/17179869184*n^8 + 30944913/68719476736*n^9) * eps^20
-        + (447553665/1099511627776 - 282901815/274877906944*n + 1744810665/2199023255552*n^2 + 714788607/2199023255552*n^3 - 2949064317/2199023255552*n^4 + 3330058719/2199023255552*n^5 - 466513575/549755813888*n^6 - 52627801/549755813888*n^7 + 415894171/549755813888*n^8) * eps^21
-        + (231011535/549755813888 - 2056152345/2199023255552*n + 1715472699/4398046511104*n^2 + 1751396739/2199023255552*n^3 - 2620093247/2199023255552*n^4 + 381959029/1099511627776*n^5 + 4006284039/4398046511104*n^6 - 811840865/549755813888*n^7) * eps^22
-        + (13730467455/35184372088832 - 26834758935/35184372088832*n + 1154658519/35184372088832*n^2 + 34587765501/35184372088832*n^3 - 26560472237/35184372088832*n^4 - 16713828219/35184372088832*n^5 + 41375557803/35184372088832*n^6) * eps^23
-        + (27079840719/70368744177664 - 23683023159/35184372088832*n - 4885170495/35184372088832*n^2 + 31837181505/35184372088832*n^3 - 8213174937/35184372088832*n^4 - 31695410011/35184372088832*n^5) * eps^24
-        + (25457271579/70368744177664 - 156005632095/281474976710656*n - 10545202575/35184372088832*n^2 + 114004448877/140737488355328*n^3 + 16505168273/140737488355328*n^4) * eps^25
-        + (198096366191/562949953421312 - 17051245797/35184372088832*n - 202196269517/562949953421312*n^2 + 44120523793/70368744177664*n^3) * eps^26
-        + (749484543777/2251799813685248 - 904154339527/2251799813685248*n - 237166138569/562949953421312*n^2) * eps^27
-        + (1451001339947/4503599627370496 - 197052059395/562949953421312*n) * eps^28
-        + 11027253546199/36028797018963968 * eps^29;
-C3[20] = + (328206021/1099511627776 - 447553665/549755813888*n + 616197075/549755813888*n^2 - 2588027715/2199023255552*n^3 + 11313378297/10995116277760*n^4 - 1063650951/1374389534720*n^5 + 139671337/274877906944*n^6 - 161159235/549755813888*n^7 + 81876301/549755813888*n^8 - 91508807/1374389534720*n^9) * eps^20
-        + (447553665/1099511627776 - 616197075/549755813888*n + 5973868485/4398046511104*n^2 - 5151407547/5497558138880*n^3 + 745124463/4398046511104*n^4 + 2933098077/5497558138880*n^5 - 999187257/1099511627776*n^6 + 255261409/274877906944*n^7 - 3993414699/5497558138880*n^8) * eps^21
-        + (797813055/2199023255552 - 16416787335/17592186044416*n + 67175859231/87960930222080*n^2 + 9242357391/43980465111040*n^3 - 102015059749/87960930222080*n^4 + 124091978953/87960930222080*n^5 - 39356567111/43980465111040*n^6 + 592399119/10995116277760*n^7) * eps^22
-        + (13225535115/35184372088832 - 15052072971/17592186044416*n + 71611679859/175921860444160*n^2 + 58313997297/87960930222080*n^3 - 195393281759/175921860444160*n^4 + 4977760923/10995116277760*n^5 + 24290150905/35184372088832*n^6) * eps^23
-        + (24669936369/70368744177664 - 12424628601/17592186044416*n + 11746262979/140737488355328*n^2 + 30472467141/35184372088832*n^3 - 541082739303/703687441776640*n^4 - 214208596351/703687441776640*n^5) * eps^24
-        + (24401503959/70368744177664 - 88423598371/140737488355328*n - 27848548649/351843720888320*n^2 + 582032816309/703687441776640*n^3 - 443970412913/1407374883553280*n^4) * eps^25
-        + (184144866101/562949953421312 - 73617505285/140737488355328*n - 163863036307/703687441776640*n^2 + 4297898591023/5629499534213120*n^3) * eps^26
-        + (89787248319/281474976710656 - 64845907663/140737488355328*n - 3332997588781/11258999068426240*n^2) * eps^27
-        + (10901346434011/36028797018963968 - 6951464328397/18014398509481984*n) * eps^28
-        + 10575447871909/36028797018963968 * eps^29;
-C3[21] = + (2038855585/7696581394432 - 797813055/1099511627776*n + 2216147375/2199023255552*n^2 - 2357980807/2199023255552*n^3 + 2098862037/2199023255552*n^4 - 4845520999/6597069766656*n^5 + 5726524817/11544872091648*n^6 - 1139229075/3848290697216*n^7 + 258225257/1649267441664*n^8) * eps^21
-        + (797813055/2199023255552 - 2216147375/2199023255552*n + 5478316311/4398046511104*n^2 - 1981576699/2199023255552*n^3 + 751444433/3298534883328*n^4 + 3238984625/7696581394432*n^5 - 10556856095/13194139533312*n^6 + 9949267255/11544872091648*n^7) * eps^22
-        + (11435320455/35184372088832 - 29873666615/35184372088832*n + 25744131691/35184372088832*n^2 + 4163629499/35184372088832*n^3 - 739894554773/738871813865472*n^4 + 965405949493/738871813865472*n^5 - 677248006993/738871813865472*n^6) * eps^23
-        + (23774829039/70368744177664 - 27620697099/35184372088832*n + 10971634235/26388279066624*n^2 + 405631341473/738871813865472*n^3 - 126601433727/123145302310912*n^4 + 129456725059/246290604621824*n^5) * eps^24
-        + (22261029909/70368744177664 - 553102652395/844424930131968*n + 8620472343/70368744177664*n^2 + 2249783201615/2955487255461888*n^3 - 2263819350305/2955487255461888*n^4) * eps^25
-        + (176646720641/562949953421312 - 123911959597/211106232532992*n - 51597036833/1688849860263936*n^2 + 39733441489/52776558133248*n^3) * eps^26
-        + (1337288787659/4503599627370496 - 2222831651699/4503599627370496*n - 795233577023/4503599627370496*n^2) * eps^27
-        + (2614429242859/9007199254740992 - 5913700976995/13510798882111488*n) * eps^28
-        + 9945743757025/36028797018963968 * eps^29;
-C3[22] = + (11435320455/48378511622144 - 11435320455/17592186044416*n + 16009448637/17592186044416*n^2 - 8620472343/8796093022208*n^3 + 7799474977/8796093022208*n^4 - 12256317821/17592186044416*n^5 + 8491054039/17592186044416*n^6 - 653158003/2199023255552*n^7) * eps^22
-        + (11435320455/35184372088832 - 16009448637/17592186044416*n + 40287513603/35184372088832*n^2 - 15188451271/17592186044416*n^3 + 9558755047/35184372088832*n^4 + 5724737791/17592186044416*n^5 - 24704740937/35184372088832*n^6) * eps^23
-        + (20583576819/70368744177664 - 27268841085/35184372088832*n + 98343755913/140737488355328*n^2 + 1583352063/35184372088832*n^3 - 121489410719/140737488355328*n^4 + 21194269441/17592186044416*n^5) * eps^24
-        + (10731608427/35184372088832 - 101627745377/140737488355328*n + 14719309919/35184372088832*n^2 + 63574719679/140737488355328*n^3 - 66603916857/70368744177664*n^4) * eps^25
-        + (322710607507/1125899906842624 - 1370068675847/2251799813685248*n + 343057591489/2251799813685248*n^2 + 751691842047/1125899906842624*n^3) * eps^26
-        + (1283746667079/4503599627370496 - 1236043889089/2251799813685248*n + 40279424959/4503599627370496*n^2) * eps^27
-        + (2436782869279/9007199254740992 - 4195124656575/9007199254740992*n) * eps^28
-        + 4774615334345/18014398509481984 * eps^29;
-C3[23] = + (171529806825/809240558043136 - 20583576819/35184372088832*n + 29028121155/35184372088832*n^2 - 31608398591/35184372088832*n^3 + 29028121155/35184372088832*n^4 - 23244740695/35184372088832*n^5 + 16482634311/35184372088832*n^6) * eps^23
-        + (20583576819/70368744177664 - 29028121155/35184372088832*n + 37120809477/35184372088832*n^2 - 29028121155/35184372088832*n^3 + 10699253851/35184372088832*n^4 + 8608339377/35184372088832*n^5) * eps^24
-        + (74417546961/281474976710656 - 99868465307/140737488355328*n + 46855492531/70368744177664*n^2 - 475207835/35184372088832*n^3 - 26136430925/35184372088832*n^4) * eps^25
-        + (77818821763/281474976710656 - 46855492531/70368744177664*n + 117206473721/281474976710656*n^2 + 25946347791/70368744177664*n^3) * eps^26
-        + (1173967590711/4503599627370496 - 2549380838081/4503599627370496*n + 787609465729/4503599627370496*n^2) * eps^27
-        + (2340726177457/9007199254740992 - 2314357198017/4503599627370496*n) * eps^28
-        + 556913250205/2251799813685248 * eps^29;
-C3[24] = + (107492012277/562949953421312 - 74417546961/140737488355328*n + 316963625945/422212465065984*n^2 - 697319977079/844424930131968*n^3 + 216409648059/281474976710656*n^4 - 264500680961/422212465065984*n^5) * eps^24
-        + (74417546961/281474976710656 - 316963625945/422212465065984*n + 548484883157/562949953421312*n^2 - 41533164779/52776558133248*n^3 + 553046878373/1688849860263936*n^4) * eps^25
-        + (135054066707/562949953421312 - 4401660092471/6755399441055744*n + 4279816803577/6755399441055744*n^2 - 202913745545/3377699720527872*n^3) * eps^26
-        + (1132800437073/4503599627370496 - 1385801088427/2251799813685248*n + 1851694849861/4503599627370496*n^2) * eps^27
-        + (1071403584791/4503599627370496 - 7127072067763/13510798882111488*n) * eps^28
-        + 1045457237/4398046511104 * eps^29;
-C3[25] = + (1215486600363/7036874417766400 - 135054066707/281474976710656*n + 96467190505/140737488355328*n^2 - 107111846009/140737488355328*n^3 + 504955845471/703687441776640*n^4) * eps^25
-        + (135054066707/562949953421312 - 96467190505/140737488355328*n + 507617009347/562949953421312*n^2 - 527575738417/703687441776640*n^3) * eps^26
-        + (983965343151/4503599627370496 - 2701746625109/4503599627370496*n + 13560625821127/22517998136852480*n^2) * eps^27
-        + (2068389622621/9007199254740992 - 2567357849371/4503599627370496*n) * eps^28
-        + 1961943067581/9007199254740992 * eps^29;
-C3[26] = + (2295919134019/14636698788954112 - 983965343151/2251799813685248*n + 1413743309125/2251799813685248*n^2 - 395848126555/562949953421312*n^3) * eps^26
-        + (983965343151/4503599627370496 - 1413743309125/2251799813685248*n + 3766212175509/4503599627370496*n^2) * eps^27
-        + (1798281489207/9007199254740992 - 4987686394593/9007199254740992*n) * eps^28
-        + 3788832068455/18014398509481984 * eps^29;
-C3[27] = + (17383387729001/121597189939003392 - 1798281489207/4503599627370496*n + 7792553119897/13510798882111488*n^2) * eps^27
-        + (1798281489207/9007199254740992 - 7792553119897/13510798882111488*n) * eps^28
-        + 6593698793759/36028797018963968 * eps^29;
-C3[28] = + (4709784852685/36028797018963968 - 6593698793759/18014398509481984*n) * eps^28
-        + 6593698793759/36028797018963968 * eps^29;
-C3[29] = + 125280277081421/1044835113549955072 * eps^29;
-
-C4[0] = + (2/3 - 1/15*ep2 + 4/105*ep2^2 - 8/315*ep2^3 + 64/3465*ep2^4 - 128/9009*ep2^5 + 512/45045*ep2^6 - 1024/109395*ep2^7 + 16384/2078505*ep2^8 - 32768/4849845*ep2^9 + 131072/22309287*ep2^10 - 262144/50702925*ep2^11 + 2097152/456326325*ep2^12 - 4194304/1017958725*ep2^13 + 16777216/4508102925*ep2^14 - 33554432/9917826435*ep2^15 + 1073741824/347123925225*ep2^16 - 2147483648/755505013725*ep2^17 + 8589934592/3273855059475*ep2^18 - 17179869184/7064634602025*ep2^19 + 137438953472/6075585757 [...]
-        - (1/20 - 1/35*ep2 + 2/105*ep2^2 - 16/1155*ep2^3 + 32/3003*ep2^4 - 128/15015*ep2^5 + 256/36465*ep2^6 - 4096/692835*ep2^7 + 8192/1616615*ep2^8 - 32768/7436429*ep2^9 + 65536/16900975*ep2^10 - 524288/152108775*ep2^11 + 1048576/339319575*ep2^12 - 4194304/1502700975*ep2^13 + 8388608/3305942145*ep2^14 - 268435456/115707975075*ep2^15 + 536870912/251835004575*ep2^16 - 2147483648/1091285019825*ep2^17 + 4294967296/2354878200675*ep2^18 - 34359738368/20251952525805*ep2^19 + 68719476736/43397 [...]
-        + (1/42 - 1/63*ep2 + 8/693*ep2^2 - 80/9009*ep2^3 + 64/9009*ep2^4 - 128/21879*ep2^5 + 2048/415701*ep2^6 - 4096/969969*ep2^7 + 81920/22309287*ep2^8 - 32768/10140585*ep2^9 + 262144/91265265*ep2^10 - 524288/203591745*ep2^11 + 2097152/901620585*ep2^12 - 4194304/1983565287*ep2^13 + 134217728/69424785045*ep2^14 - 268435456/151101002745*ep2^15 + 1073741824/654771011895*ep2^16 - 2147483648/1412926920405*ep2^17 + 17179869184/12151171515483*ep2^18 - 34359738368/26038224676035*ep2^19 + 13743 [...]
-        - (1/72 - 1/99*ep2 + 10/1287*ep2^2 - 8/1287*ep2^3 + 112/21879*ep2^4 - 1792/415701*ep2^5 + 512/138567*ep2^6 - 10240/3187041*ep2^7 + 4096/1448655*ep2^8 - 32768/13037895*ep2^9 + 65536/29084535*ep2^10 - 1835008/901620585*ep2^11 + 3670016/1983565287*ep2^12 - 16777216/9917826435*ep2^13 + 33554432/21585857535*ep2^14 - 134217728/93538715985*ep2^15 + 268435456/201846702915*ep2^16 - 2147483648/1735881645069*ep2^17 + 30064771072/26038224676035*ep2^18 - 120259084288/111254232706695*ep2^19 +  [...]
-        + (1/110 - 1/143*ep2 + 4/715*ep2^2 - 56/12155*ep2^3 + 896/230945*ep2^4 - 768/230945*ep2^5 + 3072/1062347*ep2^6 - 6144/2414425*ep2^7 + 16384/7243275*ep2^8 - 32768/16158075*ep2^9 + 917504/500900325*ep2^10 - 1835008/1101980715*ep2^11 + 8388608/5509903575*ep2^12 - 16777216/11992143075*ep2^13 + 67108864/51965953325*ep2^14 - 134217728/112137057175*ep2^15 + 1073741824/964378691705*ep2^16 - 15032385536/14465680375575*ep2^17 + 60129542144/61807907059275*ep2^18 - 17179869184/18811102148475 [...]
-        - (1/156 - 1/195*ep2 + 14/3315*ep2^2 - 224/62985*ep2^3 + 64/20995*ep2^4 - 256/96577*ep2^5 + 5632/2414425*ep2^6 - 45056/21729825*ep2^7 + 90112/48474225*ep2^8 - 2523136/1502700975*ep2^9 + 458752/300540195*ep2^10 - 2097152/1502700975*ep2^11 + 4194304/3270584475*ep2^12 - 16777216/14172532725*ep2^13 + 33554432/30582833775*ep2^14 - 268435456/263012370465*ep2^15 + 3758096384/3945185556975*ep2^16 - 165356240896/185423721177825*ep2^17 + 47244640256/56433306445425*ep2^18 - 755914244096/959 [...]
-        + (1/210 - 1/255*ep2 + 16/4845*ep2^2 - 32/11305*ep2^3 + 128/52003*ep2^4 - 2816/1300075*ep2^5 + 22528/11700675*ep2^6 - 585728/339319575*ep2^7 + 2342912/1502700975*ep2^8 - 425984/300540195*ep2^9 + 13631488/10518906825*ep2^10 - 27262976/22894091325*ep2^11 + 8388608/7631363775*ep2^12 - 16777216/16467679725*ep2^13 + 134217728/141622045635*ep2^14 - 268435456/303475812075*ep2^15 + 11811160064/14263363167525*ep2^16 - 23622320128/30387165009075*ep2^17 + 377957122048/516581805154275*ep2^18 [...]
-        - (1/272 - 1/323*ep2 + 6/2261*ep2^2 - 120/52003*ep2^3 + 528/260015*ep2^4 - 1408/780045*ep2^5 + 36608/22621305*ep2^6 - 146432/100180065*ep2^7 + 26624/20036013*ep2^8 - 851968/701260455*ep2^9 + 1703936/1526272755*ep2^10 - 524288/508757585*ep2^11 + 1048576/1097845315*ep2^12 - 8388608/9441469709*ep2^13 + 16777216/20231720805*ep2^14 - 738197504/950890877835*ep2^15 + 1476395008/2025811000605*ep2^16 - 23622320128/34438787010285*ep2^17 + 236223201280/365051142309021*ep2^18 - 223338299392/ [...]
-        + (1/342 - 1/399*ep2 + 20/9177*ep2^2 - 88/45885*ep2^3 + 704/412965*ep2^4 - 18304/11975985*ep2^5 + 73216/53036505*ep2^6 - 13312/10607301*ep2^7 + 425984/371255535*ep2^8 - 14483456/13736454795*ep2^9 + 4456448/4578818265*ep2^10 - 8912896/9880607835*ep2^11 + 71303168/84973227381*ep2^12 - 142606336/182085487245*ep2^13 + 6274678784/8558017900515*ep2^14 - 12549357568/18232299005445*ep2^15 + 11811160064/18232299005445*ep2^16 - 118111600640/193262369457717*ep2^17 + 111669149696/19326236945 [...]
-        - (1/420 - 1/483*ep2 + 22/12075*ep2^2 - 176/108675*ep2^3 + 4576/3151575*ep2^4 - 18304/13956975*ep2^5 + 3328/2791395*ep2^6 - 106496/97698825*ep2^7 + 3620864/3614856525*ep2^8 - 1114112/1204952175*ep2^9 + 42336256/49403039175*ep2^10 - 338690048/424866136905*ep2^11 + 677380096/910427436225*ep2^12 - 29804724224/42790089502575*ep2^13 + 59609448448/91161495027225*ep2^14 - 56103010304/91161495027225*ep2^15 + 112206020608/193262369457717*ep2^16 - 530428461056/966311847288585*ep2^17 + 5583 [...]
-        + (1/506 - 1/575*ep2 + 8/5175*ep2^2 - 208/150075*ep2^3 + 5824/4652325*ep2^4 - 11648/10235115*ep2^5 + 53248/51175575*ep2^6 - 1810432/1893496275*ep2^7 + 557056/631165425*ep2^8 - 21168128/25877782425*ep2^9 + 169345024/222548928855*ep2^10 - 2370830336/3338233932825*ep2^11 + 9483321344/14263363167525*ep2^12 - 2709520384/4341023572725*ep2^13 + 2550136832/4341023572725*ep2^14 - 5100273664/9202969974177*ep2^15 + 265214230528/506163348579735*ep2^16 - 27917287424/56240372064415*ep2^17 + 22 [...]
-        - (1/600 - 1/675*ep2 + 26/19575*ep2^2 - 728/606825*ep2^3 + 1456/1335015*ep2^4 - 6656/6675075*ep2^5 + 226304/246977775*ep2^6 - 69632/82325925*ep2^7 + 2646016/3375362925*ep2^8 - 21168128/29028121155*ep2^9 + 296353792/435421817325*ep2^10 - 1185415168/1860438674025*ep2^11 + 7789871104/13023070718175*ep2^12 - 7331643392/13023070718175*ep2^13 + 14663286784/27608909922531*ep2^14 - 762490912768/1518490045739205*ep2^15 + 80262201344/168721116193245*ep2^16 - 642097610752/1422077979343065*e [...]
-        + (1/702 - 1/783*ep2 + 28/24273*ep2^2 - 280/267003*ep2^3 + 256/267003*ep2^4 - 8704/9879111*ep2^5 + 34816/42809481*ep2^6 - 1323008/1755188721*ep2^7 + 52920320/75473115003*ep2^8 - 148176896/226419345009*ep2^9 + 592707584/967428110493*ep2^10 - 3894935552/6771996773451*ep2^11 + 3665821696/6771996773451*ep2^12 - 183291084800/358915828992903*ep2^13 + 146632867840/303698009147841*ep2^14 - 15435038720/33744223238649*ep2^15 + 123480309760/284415595868613*ep2^16 - 246960619520/598253494758 [...]
-        - (1/812 - 1/899*ep2 + 10/9889*ep2^2 - 64/69223*ep2^3 + 2176/2561251*ep2^4 - 26112/33296263*ep2^5 + 992256/1365146783*ep2^6 - 39690240/58701311669*ep2^7 + 5292032/8385901667*ep2^8 - 21168128/35830670759*ep2^9 + 973733888/1755702867191*ep2^10 - 916455424/1755702867191*ep2^11 + 45822771200/93052251961123*ep2^12 - 36658216960/78736520890181*ep2^13 + 34728837120/78736520890181*ep2^14 - 277830696960/663636390360097*ep2^15 + 555661393920/1395924821102273*ep2^16) * k2^13
-        + (1/930 - 1/1023*ep2 + 32/35805*ep2^2 - 1088/1324785*ep2^3 + 4352/5740735*ep2^4 - 165376/235370135*ep2^5 + 1323008/2024183161*ep2^6 - 2646016/4337535345*ep2^7 + 10584064/18533105565*ep2^8 - 486866944/908122172685*ep2^9 + 458227712/908122172685*ep2^10 - 4582277120/9626095030461*ep2^11 + 3665821696/8145157333467*ep2^12 - 1157627904/2715052444489*ep2^13 + 9261023232/22884013460693*ep2^14 - 537139347456/1395924821102273*ep2^15) * k2^14
-        - (1/1056 - 1/1155*ep2 + 34/42735*ep2^2 - 136/185185*ep2^3 + 5168/7592585*ep2^4 - 41344/65296231*ep2^5 + 82688/139920495*ep2^6 - 330752/597842115*ep2^7 + 15214592/29294263635*ep2^8 - 14319616/29294263635*ep2^9 + 143196160/310519194531*ep2^10 - 114556928/262747010757*ep2^11 + 36175872/87582336919*ep2^12 - 289406976/738193982603*ep2^13 + 16785604608/45029832938783*ep2^14) * k2^15
-        + (1/1190 - 1/1295*ep2 + 12/16835*ep2^2 - 456/690235*ep2^3 + 3648/5936021*ep2^4 - 2432/4240015*ep2^5 + 107008/199280705*ep2^6 - 4922368/9764754545*ep2^7 + 78757888/166000827265*ep2^8 - 787578880/1759608769009*ep2^9 + 57278464/135354520693*ep2^10 - 54263808/135354520693*ep2^11 + 434110464/1140845245841*ep2^12 - 25178406912/69591559996301*ep2^13) * k2^16
-        - (1/1332 - 1/1443*ep2 + 38/59163*ep2^2 - 1520/2544009*ep2^3 + 4256/7632027*ep2^4 - 187264/358705269*ep2^5 + 1230592/2510936883*ep2^6 - 19689472/42685927011*ep2^7 + 984473600/2262354131583*ep2^8 - 71598080/174027240891*ep2^9 + 7536640/19336360099*ep2^10 - 60293120/162977892263*ep2^11 + 3497000960/9941651428043*ep2^12) * k2^17
-        + (1/1482 - 1/1599*ep2 + 40/68757*ep2^2 - 112/206271*ep2^3 + 4928/9694737*ep2^4 - 32384/67863159*ep2^5 + 518144/1153673703*ep2^6 - 25907200/61144706259*ep2^7 + 1884160/4703438943*ep2^8 - 3768320/9929482213*ep2^9 + 30146560/83691350081*ep2^10 - 1748500480/5105172354941*ep2^11) * k2^18
-        - (1/1640 - 1/1763*ep2 + 14/26445*ep2^2 - 616/1242915*ep2^3 + 4048/8700405*ep2^4 - 64768/147906885*ep2^5 + 647680/1567812981*ep2^6 - 612352/1567812981*ep2^7 + 3674112/9929482213*ep2^8 - 29392896/83691350081*ep2^9 + 1704787968/5105172354941*ep2^10) * k2^19
-        + (1/1806 - 1/1935*ep2 + 44/90945*ep2^2 - 2024/4456305*ep2^3 + 32384/75757185*ep2^4 - 323840/803026161*ep2^5 + 306176/803026161*ep2^6 - 612352/1695277451*ep2^7 + 4898816/14288767087*ep2^8 - 284131328/871614792307*ep2^9) * k2^20
-        - (1/1980 - 1/2115*ep2 + 46/103635*ep2^2 - 736/1761795*ep2^3 + 7360/18675027*ep2^4 - 76544/205425297*ep2^5 + 153088/433675627*ep2^6 - 1224704/3655265999*ep2^7 + 71032832/222971225939*ep2^8) * k2^21
-        + (1/2162 - 1/2303*ep2 + 16/39151*ep2^2 - 800/2075003*ep2^3 + 8320/22825033*ep2^4 - 149760/433675627*ep2^5 + 1198080/3655265999*ep2^6 - 69488640/222971225939*ep2^7) * k2^22
-        - (1/2352 - 1/2499*ep2 + 50/132447*ep2^2 - 520/1456917*ep2^3 + 3120/9227141*ep2^4 - 24960/77771617*ep2^5 + 1447680/4744068637*ep2^6) * k2^23
-        + (1/2550 - 1/2703*ep2 + 52/148665*ep2^2 - 312/941545*ep2^3 + 17472/55551155*ep2^4 - 1013376/3388620455*ep2^5) * k2^24
-        - (1/2756 - 1/2915*ep2 + 18/55385*ep2^2 - 1008/3267715*ep2^3 + 58464/199330615*ep2^4) * k2^25
-        + (1/2970 - 1/3135*ep2 + 56/184965*ep2^2 - 3248/11282865*ep2^3) * k2^26
-        - (1/3192 - 1/3363*ep2 + 58/205143*ep2^2) * k2^27
-        + (1/3422 - 1/3599*ep2) * k2^28
-        - 1/3660 * k2^29;
-C4[1] = + (1/180 - 1/315*ep2 + 2/945*ep2^2 - 16/10395*ep2^3 + 32/27027*ep2^4 - 128/135135*ep2^5 + 256/328185*ep2^6 - 4096/6235515*ep2^7 + 8192/14549535*ep2^8 - 32768/66927861*ep2^9 + 65536/152108775*ep2^10 - 524288/1368978975*ep2^11 + 1048576/3053876175*ep2^12 - 4194304/13524308775*ep2^13 + 8388608/29753479305*ep2^14 - 268435456/1041371775675*ep2^15 + 536870912/2266515041175*ep2^16 - 2147483648/9821565178425*ep2^17 + 4294967296/21193903806075*ep2^18 - 34359738368/182267572732245*ep2^19 + [...]
-        - (1/252 - 1/378*ep2 + 4/2079*ep2^2 - 40/27027*ep2^3 + 32/27027*ep2^4 - 64/65637*ep2^5 + 1024/1247103*ep2^6 - 2048/2909907*ep2^7 + 40960/66927861*ep2^8 - 16384/30421755*ep2^9 + 131072/273795795*ep2^10 - 262144/610775235*ep2^11 + 1048576/2704861755*ep2^12 - 2097152/5950695861*ep2^13 + 67108864/208274355135*ep2^14 - 134217728/453303008235*ep2^15 + 536870912/1964313035685*ep2^16 - 1073741824/4238780761215*ep2^17 + 8589934592/36453514546449*ep2^18 - 17179869184/78114674028105*ep2^19  [...]
-        + (1/360 - 1/495*ep2 + 2/1287*ep2^2 - 8/6435*ep2^3 + 112/109395*ep2^4 - 1792/2078505*ep2^5 + 512/692835*ep2^6 - 2048/3187041*ep2^7 + 4096/7243275*ep2^8 - 32768/65189475*ep2^9 + 65536/145422675*ep2^10 - 1835008/4508102925*ep2^11 + 3670016/9917826435*ep2^12 - 16777216/49589132175*ep2^13 + 33554432/107929287675*ep2^14 - 134217728/467693579925*ep2^15 + 268435456/1009233514575*ep2^16 - 2147483648/8679408225345*ep2^17 + 30064771072/130191123380175*ep2^18 - 120259084288/556271163533475* [...]
-        - (1/495 - 2/1287*ep2 + 8/6435*ep2^2 - 112/109395*ep2^3 + 1792/2078505*ep2^4 - 512/692835*ep2^5 + 2048/3187041*ep2^6 - 4096/7243275*ep2^7 + 32768/65189475*ep2^8 - 65536/145422675*ep2^9 + 1835008/4508102925*ep2^10 - 3670016/9917826435*ep2^11 + 16777216/49589132175*ep2^12 - 33554432/107929287675*ep2^13 + 134217728/467693579925*ep2^14 - 268435456/1009233514575*ep2^15 + 2147483648/8679408225345*ep2^16 - 30064771072/130191123380175*ep2^17 + 120259084288/556271163533475*ep2^18 - 343597 [...]
-        + (5/3276 - 1/819*ep2 + 2/1989*ep2^2 - 32/37791*ep2^3 + 64/88179*ep2^4 - 1280/2028117*ep2^5 + 5632/10140585*ep2^6 - 45056/91265265*ep2^7 + 90112/203591745*ep2^8 - 360448/901620585*ep2^9 + 65536/180324117*ep2^10 - 2097152/6311344095*ep2^11 + 4194304/13736454795*ep2^12 - 16777216/59524637445*ep2^13 + 33554432/128447901855*ep2^14 - 268435456/1104651955953*ep2^15 + 536870912/2367111334185*ep2^16 - 23622320128/111254232706695*ep2^17 + 47244640256/237019887070785*ep2^18 - 755914244096/ [...]
-        - (1/840 - 1/1020*ep2 + 4/4845*ep2^2 - 8/11305*ep2^3 + 32/52003*ep2^4 - 704/1300075*ep2^5 + 5632/11700675*ep2^6 - 146432/339319575*ep2^7 + 585728/1502700975*ep2^8 - 106496/300540195*ep2^9 + 3407872/10518906825*ep2^10 - 6815744/22894091325*ep2^11 + 2097152/7631363775*ep2^12 - 4194304/16467679725*ep2^13 + 33554432/141622045635*ep2^14 - 67108864/303475812075*ep2^15 + 2952790016/14263363167525*ep2^16 - 5905580032/30387165009075*ep2^17 + 94489280512/516581805154275*ep2^18 - 1889785610 [...]
-        + (7/7344 - 7/8721*ep2 + 2/2907*ep2^2 - 40/66861*ep2^3 + 176/334305*ep2^4 - 1408/3008745*ep2^5 + 36608/87253605*ep2^6 - 1025024/2704861755*ep2^7 + 186368/540972351*ep2^8 - 851968/2704861755*ep2^9 + 1703936/5887052055*ep2^10 - 524288/1962350685*ep2^11 + 1048576/4234546215*ep2^12 - 8388608/36417097449*ep2^13 + 117440512/546256461735*ep2^14 - 5167382528/25674053701545*ep2^15 + 1476395008/7813842430905*ep2^16 - 23622320128/132835321325385*ep2^17 + 236223201280/1408054406049081*ep2^18 [...]
-        - (2/2565 - 4/5985*ep2 + 16/27531*ep2^2 - 352/688275*ep2^3 + 2816/6194475*ep2^4 - 73216/179639775*ep2^5 + 292864/795547575*ep2^6 - 53248/159109515*ep2^7 + 1703936/5568833025*ep2^8 - 57933824/206046821925*ep2^9 + 17825792/68682273975*ep2^10 - 35651584/148209117525*ep2^11 + 285212672/1274598410715*ep2^12 - 570425344/2731282308675*ep2^13 + 25098715136/128370268507725*ep2^14 - 50197430272/273484485081675*ep2^15 + 47244640256/273484485081675*ep2^16 - 94489280512/579787108373151*ep2^17 [...]
-        + (1/1540 - 1/1771*ep2 + 2/4025*ep2^2 - 16/36225*ep2^3 + 416/1050525*ep2^4 - 1664/4652325*ep2^5 + 3328/10235115*ep2^6 - 106496/358229025*ep2^7 + 3620864/13254473925*ep2^8 - 1114112/4418157975*ep2^9 + 42336256/181144476975*ep2^10 - 338690048/1557842501985*ep2^11 + 677380096/3338233932825*ep2^12 - 2709520384/14263363167525*ep2^13 + 5419040768/30387165009075*ep2^14 - 5100273664/30387165009075*ep2^15 + 10200547328/64420789819239*ep2^16 - 530428461056/3543143440058145*ep2^17 + 5583457 [...]
-        - (5/9108 - 1/2070*ep2 + 4/9315*ep2^2 - 104/270135*ep2^3 + 2912/8374185*ep2^4 - 5824/18423207*ep2^5 + 26624/92116035*ep2^6 - 905216/3408293295*ep2^7 + 278528/1136097765*ep2^8 - 10584064/46580008365*ep2^9 + 84672512/400588071939*ep2^10 - 1185415168/6008821079085*ep2^11 + 4741660672/25674053701545*ep2^12 - 1354760192/7813842430905*ep2^13 + 1275068416/7813842430905*ep2^14 - 12750684160/82826729767593*ep2^15 + 132607115264/911094027443523*ep2^16 - 13958643712/101232669715947*ep2^17 + [...]
-        + (11/23400 - 11/26325*ep2 + 22/58725*ep2^2 - 616/1820475*ep2^3 + 112/364095*ep2^4 - 512/1820475*ep2^5 + 17408/67357575*ep2^6 - 69632/291882825*ep2^7 + 2646016/11967195825*ep2^8 - 21168128/102917884095*ep2^9 + 296353792/1543768261425*ep2^10 - 13039566848/72557108286975*ep2^11 + 85688582144/507899758008825*ep2^12 - 80648077312/507899758008825*ep2^13 + 161296154624/1076747486978709*ep2^14 - 58653147136/414133648837965*ep2^15 + 6174015488/46014849870885*ep2^16 - 49392123904/38783944 [...]
-        - (1/2457 - 2/5481*ep2 + 8/24273*ep2^2 - 80/267003*ep2^3 + 512/1869021*ep2^4 - 17408/69153777*ep2^5 + 69632/299666367*ep2^6 - 2646016/12286321047*ep2^7 + 105840640/528311805021*ep2^8 - 42336256/226419345009*ep2^9 + 169345024/967428110493*ep2^10 - 7789871104/47403977414157*ep2^11 + 7331643392/47403977414157*ep2^12 - 366582169600/2512410802950321*ep2^13 + 293265735680/2125886064034887*ep2^14 - 30870077440/236209562670543*ep2^15 + 246960619520/1990909171080291*ep2^16 - 493921239040/ [...]
-        + (13/36540 - 13/40455*ep2 + 26/89001*ep2^2 - 832/3115035*ep2^3 + 28288/115256295*ep2^4 - 8704/38418765*ep2^5 + 330752/1575169365*ep2^6 - 2646016/13546456539*ep2^7 + 5292032/29028121155*ep2^8 - 21168128/124029244935*ep2^9 + 973733888/6077433001815*ep2^10 - 916455424/6077433001815*ep2^11 + 9164554240/64420789819239*ep2^12 - 95311364096/708628688011629*ep2^13 + 10032775168/78736520890181*ep2^14 - 80262201344/663636390360097*ep2^15 + 160524402688/1395924821102273*ep2^16) * k2^13
-        - (7/22320 - 7/24552*ep2 + 4/15345*ep2^2 - 136/567765*ep2^3 + 544/2460315*ep2^4 - 20672/100872915*ep2^5 + 165376/867507069*ep2^6 - 2315264/13012606035*ep2^7 + 9261056/55599316695*ep2^8 - 60858368/389195216865*ep2^9 + 57278464/389195216865*ep2^10 - 572784640/4125469298769*ep2^11 + 458227712/3490781714343*ep2^12 - 48234496/387864634927*ep2^13 + 385875968/3269144780099*ep2^14 - 22380806144/199417831586039*ep2^15) * k2^14
-        + (5/17952 - 1/3927*ep2 + 2/8547*ep2^2 - 8/37037*ep2^3 + 304/1518517*ep2^4 - 12160/65296231*ep2^5 + 4864/27984099*ep2^6 - 19456/119568423*ep2^7 + 894976/5858852727*ep2^8 - 14319616/99600496359*ep2^9 + 715980800/5278826307027*ep2^10 - 572784640/4466699182869*ep2^11 + 180879360/1488899727623*ep2^12 - 1447034880/12549297704251*ep2^13 + 83928023040/765507159959311*ep2^14) * k2^15
-        - (4/16065 - 8/34965*ep2 + 32/151515*ep2^2 - 1216/6212115*ep2^3 + 9728/53424189*ep2^4 - 19456/114480405*ep2^5 + 856064/5380579035*ep2^6 - 39378944/263648372715*ep2^7 + 630063104/4482022336155*ep2^8 - 6300631040/47509436763243*ep2^9 + 458227712/3654572058711*ep2^10 - 48234496/406063562079*ep2^11 + 385875968/3422535737523*ep2^12 - 22380806144/208774679988903*ep2^13) * k2^16
-        + (17/75924 - 17/82251*ep2 + 34/177489*ep2^2 - 1360/7632027*ep2^3 + 3808/22896081*ep2^4 - 167552/1076115807*ep2^5 + 1101056/7532810649*ep2^6 - 1036288/7532810649*ep2^7 + 51814400/399238964397*ep2^8 - 3768320/30710689569*ep2^9 + 7536640/64833677979*ep2^10 - 60293120/546455285823*ep2^11 + 3497000960/33333772435203*ep2^12) * k2^17
-        - (1/4940 - 1/5330*ep2 + 4/22919*ep2^2 - 56/343785*ep2^3 + 2464/16157895*ep2^4 - 16192/113105265*ep2^5 + 259072/1922789505*ep2^6 - 2590720/20381568753*ep2^7 + 188416/1567812981*ep2^8 - 1130496/9929482213*ep2^9 + 9043968/83691350081*ep2^10 - 524550144/5105172354941*ep2^11) * k2^18
-        + (19/103320 - 19/111069*ep2 + 38/238005*ep2^2 - 1672/11186235*ep2^3 + 76912/548125515*ep2^4 - 1230592/9318133755*ep2^5 + 12305920/98772217803*ep2^6 - 11634688/98772217803*ep2^7 + 1224704/10974690867*ep2^8 - 9797632/92500965879*ep2^9 + 568262656/5642558918619*ep2^10) * k2^19
-        - (5/29799 - 2/12771*ep2 + 8/54567*ep2^2 - 368/2673783*ep2^3 + 5888/45454311*ep2^4 - 294400/2409078483*ep2^5 + 3061760/26499863313*ep2^6 - 6123520/55944155883*ep2^7 + 48988160/471529313871*ep2^8 - 2841313280/28763288146131*ep2^9) * k2^20
-        + (7/45540 - 7/48645*ep2 + 2/14805*ep2^2 - 32/251685*ep2^3 + 320/2667861*ep2^4 - 3328/29346471*ep2^5 + 6656/61953661*ep2^6 - 53248/522180857*ep2^7 + 3088384/31853032277*ep2^8) * k2^21
-        - (11/77832 - 11/82908*ep2 + 44/352359*ep2^2 - 2200/18675027*ep2^3 + 2080/18675027*ep2^4 - 4160/39425057*ep2^5 + 33280/332296909*ep2^6 - 1930240/20270111449*ep2^7) * k2^22
-        + (23/176400 - 23/187425*ep2 + 46/397341*ep2^2 - 2392/21853755*ep2^3 + 4784/46135705*ep2^4 - 38272/388858085*ep2^5 + 2219776/23720343185*ep2^6) * k2^23
-        - (2/16575 - 4/35139*ep2 + 16/148665*ep2^2 - 96/941545*ep2^3 + 5376/55551155*ep2^4 - 311808/3388620455*ep2^5) * k2^24
-        + (25/223236 - 5/47223*ep2 + 10/99693*ep2^2 - 560/5881887*ep2^3 + 32480/358795107*ep2^4) * k2^25
-        - (13/124740 - 13/131670*ep2 + 52/554895*ep2^2 - 3016/33848595*ep2^3) * k2^26
-        + (3/30856 - 3/32509*ep2 + 6/68381*ep2^2) * k2^27
-        - (7/76995 - 14/161955*ep2) * k2^28
-        + 29/340380 * k2^29;
-C4[2] = + (1/2100 - 1/3150*ep2 + 4/17325*ep2^2 - 8/45045*ep2^3 + 32/225225*ep2^4 - 64/546975*ep2^5 + 1024/10392525*ep2^6 - 2048/24249225*ep2^7 + 8192/111546435*ep2^8 - 16384/253514625*ep2^9 + 131072/2281631625*ep2^10 - 262144/5089793625*ep2^11 + 1048576/22540514625*ep2^12 - 2097152/49589132175*ep2^13 + 67108864/1735619626125*ep2^14 - 134217728/3777525068625*ep2^15 + 536870912/16369275297375*ep2^16 - 1073741824/35323173010125*ep2^17 + 8589934592/303779287887075*ep2^18 - 17179869184/650955 [...]
-        - (1/1800 - 1/2475*ep2 + 2/6435*ep2^2 - 8/32175*ep2^3 + 112/546975*ep2^4 - 1792/10392525*ep2^5 + 512/3464175*ep2^6 - 2048/15935205*ep2^7 + 4096/36216375*ep2^8 - 32768/325947375*ep2^9 + 65536/727113375*ep2^10 - 1835008/22540514625*ep2^11 + 3670016/49589132175*ep2^12 - 16777216/247945660875*ep2^13 + 33554432/539646438375*ep2^14 - 134217728/2338467899625*ep2^15 + 268435456/5046167572875*ep2^16 - 2147483648/43397041126725*ep2^17 + 30064771072/650955616900875*ep2^18 - 120259084288/278 [...]
-        + (1/1925 - 2/5005*ep2 + 8/25025*ep2^2 - 16/60775*ep2^3 + 256/1154725*ep2^4 - 1536/8083075*ep2^5 + 6144/37182145*ep2^6 - 12288/84504875*ep2^7 + 32768/253514625*ep2^8 - 65536/565532625*ep2^9 + 262144/2504501625*ep2^10 - 524288/5509903575*ep2^11 + 16777216/192846625125*ep2^12 - 33554432/419725007625*ep2^13 + 134217728/1818808366375*ep2^14 - 268435456/3924797001125*ep2^15 + 2147483648/33753254209675*ep2^16 - 4294967296/72328401877875*ep2^17 + 17179869184/309039535296375*ep2^18 - 343 [...]
-        - (1/2184 - 1/2730*ep2 + 1/3315*ep2^2 - 16/62985*ep2^3 + 32/146965*ep2^4 - 128/676039*ep2^5 + 2816/16900975*ep2^6 - 22528/152108775*ep2^7 + 45056/339319575*ep2^8 - 180224/1502700975*ep2^9 + 32768/300540195*ep2^10 - 1048576/10518906825*ep2^11 + 2097152/22894091325*ep2^12 - 8388608/99207729075*ep2^13 + 16777216/214079836425*ep2^14 - 134217728/1841086593255*ep2^15 + 268435456/3945185556975*ep2^16 - 11811160064/185423721177825*ep2^17 + 23622320128/395033145117975*ep2^18 - 37795712204 [...]
-        + (1/2520 - 1/3060*ep2 + 4/14535*ep2^2 - 8/33915*ep2^3 + 32/156009*ep2^4 - 704/3900225*ep2^5 + 5632/35102025*ep2^6 - 146432/1017958725*ep2^7 + 585728/4508102925*ep2^8 - 106496/901620585*ep2^9 + 3407872/31556720475*ep2^10 - 6815744/68682273975*ep2^11 + 2097152/22894091325*ep2^12 - 4194304/49403039175*ep2^13 + 33554432/424866136905*ep2^14 - 67108864/910427436225*ep2^15 + 2952790016/42790089502575*ep2^16 - 5905580032/91161495027225*ep2^17 + 94489280512/1549745415462825*ep2^18 - 1889 [...]
-        - (7/20400 - 7/24225*ep2 + 2/8075*ep2^2 - 8/37145*ep2^3 + 176/928625*ep2^4 - 1408/8357625*ep2^5 + 36608/242371125*ep2^6 - 1025024/7513504875*ep2^7 + 186368/1502700975*ep2^8 - 851968/7513504875*ep2^9 + 1703936/16352922375*ep2^10 - 524288/5450974125*ep2^11 + 1048576/11762628375*ep2^12 - 8388608/101158604025*ep2^13 + 117440512/1517379060375*ep2^14 - 5167382528/71316815837625*ep2^15 + 1476395008/21705117863625*ep2^16 - 23622320128/368987003681625*ep2^17 + 47244640256/782252447805045* [...]
-        + (14/47025 - 4/15675*ep2 + 16/72105*ep2^2 - 32/163875*ep2^3 + 256/1474875*ep2^4 - 6656/42771375*ep2^5 + 186368/1325912625*ep2^6 - 372736/2917007775*ep2^7 + 1703936/14585038875*ep2^8 - 57933824/539646438375*ep2^9 + 17825792/179882146125*ep2^10 - 35651584/388166736375*ep2^11 + 285212672/3338233932825*ep2^12 - 3992977408/50073508992375*ep2^13 + 15971909632/213950447512875*ep2^14 - 4563402752/65115353590875*ep2^15 + 4294967296/65115353590875*ep2^16 - 8589934592/138044549612655*ep2^1 [...]
-        - (1/3850 - 2/8855*ep2 + 4/20125*ep2^2 - 32/181125*ep2^3 + 832/5252625*ep2^4 - 3328/23261625*ep2^5 + 6656/51175575*ep2^6 - 212992/1791145125*ep2^7 + 7241728/66272369625*ep2^8 - 2228224/22090789875*ep2^9 + 84672512/905722384875*ep2^10 - 677380096/7789212509925*ep2^11 + 1354760192/16691169664125*ep2^12 - 5419040768/71316815837625*ep2^13 + 10838081536/151935825045375*ep2^14 - 10200547328/151935825045375*ep2^15 + 20401094656/322103949096195*ep2^16 - 1060856922112/17715717200290725*ep [...]
-        + (3/13156 - 3/14950*ep2 + 4/22425*ep2^2 - 8/50025*ep2^3 + 224/1550775*ep2^4 - 448/3411705*ep2^5 + 2048/17058525*ep2^6 - 69632/631165425*ep2^7 + 278528/2735050175*ep2^8 - 10584064/112137057175*ep2^9 + 84672512/964378691705*ep2^10 - 1185415168/14465680375575*ep2^11 + 4741660672/61807907059275*ep2^12 - 1354760192/18811102148475*ep2^13 + 1275068416/18811102148475*ep2^14 - 2550136832/39879536554767*ep2^15 + 10200547328/168721116193245*ep2^16 - 3221225472/56240372064415*ep2^17 + 25769 [...]
-        - (11/54600 - 11/61425*ep2 + 22/137025*ep2^2 - 88/606825*ep2^3 + 16/121365*ep2^4 - 512/4247775*ep2^5 + 17408/157167675*ep2^6 - 69632/681059925*ep2^7 + 2646016/27923456925*ep2^8 - 21168128/240141729555*ep2^9 + 42336256/514589420475*ep2^10 - 1862795264/24185702762325*ep2^11 + 85688582144/1185099435353925*ep2^12 - 80648077312/1185099435353925*ep2^13 + 161296154624/2512410802950321*ep2^14 - 58653147136/966311847288585*ep2^15 + 6174015488/107367983032065*ep2^16 - 49392123904/904958714 [...]
-        + (11/61425 - 22/137025*ep2 + 88/606825*ep2^2 - 16/121365*ep2^3 + 512/4247775*ep2^4 - 17408/157167675*ep2^5 + 69632/681059925*ep2^6 - 2646016/27923456925*ep2^7 + 21168128/240141729555*ep2^8 - 42336256/514589420475*ep2^9 + 1862795264/24185702762325*ep2^10 - 85688582144/1185099435353925*ep2^11 + 80648077312/1185099435353925*ep2^12 - 161296154624/2512410802950321*ep2^13 + 58653147136/966311847288585*ep2^14 - 6174015488/107367983032065*ep2^15 + 49392123904/904958714127405*ep2^16 - 98 [...]
-        - (13/81200 - 13/89900*ep2 + 13/98890*ep2^2 - 208/1730575*ep2^3 + 7072/64031275*ep2^4 - 6528/64031275*ep2^5 + 248064/2625282275*ep2^6 - 1984512/22577427565*ep2^7 + 1323008/16126733975*ep2^8 - 5292032/68905136075*ep2^9 + 243433472/3376351667675*ep2^10 - 229113856/3376351667675*ep2^11 + 458227712/7157865535471*ep2^12 - 23827841024/393682604450905*ep2^13 + 22573744128/393682604450905*ep2^14 - 180589953024/3318181951800485*ep2^15 + 361179906048/6979624105511365*ep2^16) * k2^13
-        + (91/632400 - 91/695640*ep2 + 52/434775*ep2^2 - 104/946275*ep2^3 + 32/315425*ep2^4 - 1216/12932425*ep2^5 + 9728/111218855*ep2^6 - 136192/1668282825*ep2^7 + 544768/7128117525*ep2^8 - 3579904/49896822675*ep2^9 + 57278464/848245985475*ep2^10 - 114556928/1798281489207*ep2^11 + 5956960256/98905481906385*ep2^12 - 1881145344/32968493968795*ep2^13 + 15049162752/277877306308415*ep2^14 - 872851439616/16950515684813315*ep2^15) * k2^14
-        - (7/53856 - 1/8415*ep2 + 2/18315*ep2^2 - 8/79365*ep2^3 + 304/3253965*ep2^4 - 2432/27984099*ep2^5 + 34048/419761485*ep2^6 - 136192/1793526345*ep2^7 + 894976/12554684415*ep2^8 - 14319616/213429635055*ep2^9 + 143196160/2262354131583*ep2^10 - 114556928/1914299649801*ep2^11 + 12058624/212699961089*ep2^12 - 96468992/1792756814893*ep2^13 + 5595201536/109358165708473*ep2^14) * k2^15
-        + (4/33915 - 8/73815*ep2 + 32/319865*ep2^2 - 64/690235*ep2^3 + 512/5936021*ep2^4 - 1024/12720045*ep2^5 + 45056/597842115*ep2^6 - 2072576/29294263635*ep2^7 + 33161216/498002481795*ep2^8 - 331612160/5278826307027*ep2^9 + 24117248/406063562079*ep2^10 - 144703488/2571735893167*ep2^11 + 1157627904/21676059670979*ep2^12 - 67142418432/1322239639929719*ep2^13) * k2^16
-        - (17/158175 - 68/685425*ep2 + 136/1479075*ep2^2 - 1088/12720045*ep2^3 + 15232/190800675*ep2^4 - 670208/8967631725*ep2^5 + 4404224/62773422075*ep2^6 - 4145152/62773422075*ep2^7 + 8290304/133079654799*ep2^8 - 3014656/51184482615*ep2^9 + 6029312/108056129965*ep2^10 - 48234496/910758809705*ep2^11 + 2797600768/55556287392005*ep2^12) * k2^17
-        + (17/172900 - 17/186550*ep2 + 68/802165*ep2^2 - 136/1718925*ep2^3 + 5984/80789475*ep2^4 - 275264/3958684275*ep2^5 + 259072/3958684275*ep2^6 - 518144/8392410663*ep2^7 + 188416/3227850255*ep2^8 - 1130496/20443051615*ep2^9 + 9043968/172305720755*ep2^10 - 524550144/10510648966055*ep2^11) * k2^18
-        - (57/631400 - 57/678755*ep2 + 38/484825*ep2^2 - 152/2071525*ep2^3 + 6992/101504725*ep2^4 - 111872/1725580325*ep2^5 + 223744/3658230289*ep2^6 - 11634688/201202665895*ep2^7 + 11022336/201202665895*ep2^8 - 88178688/1695851041115*ep2^9 + 5114363904/103446913508015*ep2^10) * k2^19
-        + (19/228459 - 38/489555*ep2 + 152/2091735*ep2^2 - 304/4456305*ep2^3 + 4864/75757185*ep2^4 - 48640/803026161*ep2^5 + 505856/8833287771*ep2^6 - 53248/981476419*ep2^7 + 425984/8272444103*ep2^8 - 24707072/504619090283*ep2^9) * k2^20
-        - (7/91080 - 7/97290*ep2 + 1/14805*ep2^2 - 16/251685*ep2^3 + 160/2667861*ep2^4 - 1664/29346471*ep2^5 + 3328/61953661*ep2^6 - 26624/522180857*ep2^7 + 1544192/31853032277*ep2^8) * k2^21
-        + (77/1081000 - 11/164500*ep2 + 44/699125*ep2^2 - 88/1482145*ep2^3 + 416/7410725*ep2^4 - 7488/140803775*ep2^5 + 59904/1186774675*ep2^6 - 3474432/72393255175*ep2^7) * k2^22
-        - (253/3822000 - 253/4060875*ep2 + 506/8609055*ep2^2 - 184/3311175*ep2^3 + 1104/20970775*ep2^4 - 8832/176753675*ep2^5 + 512256/10781974175*ep2^6) * k2^23
-        + (46/745875 - 92/1581255*ep2 + 368/6689925*ep2^2 - 736/14123175*ep2^3 + 41216/833267325*ep2^4 - 2390528/50829306825*ep2^5) * k2^24
-        - (5/86814 - 2/36729*ep2 + 4/77539*ep2^2 - 32/653543*ep2^3 + 1856/39866123*ep2^4) * k2^25
-        + (13/241164 - 13/254562*ep2 + 52/1072797*ep2^2 - 104/2256573*ep2^3) * k2^26
-        - (39/771400 - 39/812725*ep2 + 78/1709525*ep2^2) * k2^27
-        + (63/1326025 - 126/2789225*ep2) * k2^28
-        - 203/4538400 * k2^29;
-C4[3] = + (1/17640 - 1/24255*ep2 + 2/63063*ep2^2 - 8/315315*ep2^3 + 16/765765*ep2^4 - 256/14549535*ep2^5 + 512/33948915*ep2^6 - 2048/156165009*ep2^7 + 4096/354920475*ep2^8 - 32768/3194284275*ep2^9 + 65536/7125711075*ep2^10 - 262144/31556720475*ep2^11 + 524288/69424785045*ep2^12 - 16777216/2429867476575*ep2^13 + 33554432/5288535096075*ep2^14 - 134217728/22916985416325*ep2^15 + 268435456/49452442214175*ep2^16 - 2147483648/425291003041905*ep2^17 + 4294967296/911337863661225*ep2^18 - 1717986 [...]
-        - (1/10780 - 1/14014*ep2 + 2/35035*ep2^2 - 4/85085*ep2^3 + 64/1616615*ep2^4 - 384/11316305*ep2^5 + 1536/52055003*ep2^6 - 3072/118306825*ep2^7 + 8192/354920475*ep2^8 - 16384/791745675*ep2^9 + 65536/3506302275*ep2^10 - 131072/7713865005*ep2^11 + 4194304/269985275175*ep2^12 - 8388608/587615010675*ep2^13 + 33554432/2546331712925*ep2^14 - 67108864/5494715801575*ep2^15 + 536870912/47254555893545*ep2^16 - 1073741824/101259762629025*ep2^17 + 4294967296/432655349414925*ep2^18 - 8589934592 [...]
-        + (5/45864 - 1/11466*ep2 + 1/13923*ep2^2 - 16/264537*ep2^3 + 32/617253*ep2^4 - 640/14196819*ep2^5 + 2816/70984095*ep2^6 - 22528/638856855*ep2^7 + 45056/1425142215*ep2^8 - 180224/6311344095*ep2^9 + 32768/1262268819*ep2^10 - 1048576/44179408665*ep2^11 + 2097152/96155183565*ep2^12 - 8388608/416672462115*ep2^13 + 16777216/899135312985*ep2^14 - 134217728/7732563691671*ep2^15 + 268435456/16569779339295*ep2^16 - 11811160064/778779628946865*ep2^17 + 23622320128/1659139209495495*ep2^18 -  [...]
-        - (1/8820 - 1/10710*ep2 + 8/101745*ep2^2 - 16/237405*ep2^3 + 64/1092063*ep2^4 - 1408/27301575*ep2^5 + 11264/245714175*ep2^6 - 292864/7125711075*ep2^7 + 1171456/31556720475*ep2^8 - 212992/6311344095*ep2^9 + 6815744/220897043325*ep2^10 - 13631488/480775917825*ep2^11 + 4194304/160258639275*ep2^12 - 8388608/345821274225*ep2^13 + 67108864/2974062958335*ep2^14 - 134217728/6372992053575*ep2^15 + 5905580032/299530626518025*ep2^16 - 11811160064/638130465190575*ep2^17 + 188978561024/108482 [...]
-        + (1/8976 - 1/10659*ep2 + 2/24871*ep2^2 - 40/572033*ep2^3 + 16/260015*ep2^4 - 128/2340135*ep2^5 + 3328/67863915*ep2^6 - 13312/300540195*ep2^7 + 26624/661188429*ep2^8 - 851968/23141595015*ep2^9 + 1703936/50367000915*ep2^10 - 524288/16789000305*ep2^11 + 1048576/36228895395*ep2^12 - 8388608/311568500397*ep2^13 + 16777216/667646786565*ep2^14 - 67108864/2852672633505*ep2^15 + 134217728/6077433001815*ep2^16 - 2147483648/103316361030855*ep2^17 + 21474836480/1095153426927063*ep2^18 - 223 [...]
-        - (1/9405 - 2/21945*ep2 + 8/100947*ep2^2 - 16/229425*ep2^3 + 128/2064825*ep2^4 - 3328/59879925*ep2^5 + 13312/265182525*ep2^6 - 26624/583401555*ep2^7 + 851968/20419054425*ep2^8 - 28966912/755505013725*ep2^9 + 8912896/251835004575*ep2^10 - 17825792/543433430925*ep2^11 + 142606336/4673527505955*ep2^12 - 285212672/10014701798475*ep2^13 + 1140850688/42790089502575*ep2^14 - 2281701376/91161495027225*ep2^15 + 2147483648/91161495027225*ep2^16 - 4294967296/193262369457717*ep2^17 + 2233382 [...]
-        + (1/10010 - 2/23023*ep2 + 4/52325*ep2^2 - 32/470925*ep2^3 + 64/1050525*ep2^4 - 256/4652325*ep2^5 + 512/10235115*ep2^6 - 16384/358229025*ep2^7 + 557056/13254473925*ep2^8 - 2228224/57436053675*ep2^9 + 84672512/2354878200675*ep2^10 - 677380096/20251952525805*ep2^11 + 1354760192/43397041126725*ep2^12 - 5419040768/185423721177825*ep2^13 + 10838081536/395033145117975*ep2^14 - 10200547328/395033145117975*ep2^15 + 20401094656/837470267650107*ep2^16 - 81604378624/3543143440058145*ep2^17  [...]
-        - (15/161161 - 6/73255*ep2 + 16/219765*ep2^2 - 32/490245*ep2^3 + 128/2171085*ep2^4 - 256/4776387*ep2^5 + 8192/167173545*ep2^6 - 278528/6185421165*ep2^7 + 1114112/26803491715*ep2^8 - 42336256/1098943160315*ep2^9 + 338690048/9450911178709*ep2^10 - 677380096/20251952525805*ep2^11 + 2709520384/86531069882985*ep2^12 - 5419040768/184348801055055*ep2^13 + 5100273664/184348801055055*ep2^14 - 51002736640/1954097291183583*ep2^15 + 40802189312/1653466938693801*ep2^16 - 12884901888/551155646 [...]
-        + (11/127400 - 11/143325*ep2 + 22/319725*ep2^2 - 88/1415925*ep2^3 + 16/283185*ep2^4 - 512/9911475*ep2^5 + 17408/366724575*ep2^6 - 69632/1589139825*ep2^7 + 2646016/65154732825*ep2^8 - 21168128/560330702295*ep2^9 + 42336256/1200708647775*ep2^10 - 1862795264/56433306445425*ep2^11 + 85688582144/2765232015825825*ep2^12 - 80648077312/2765232015825825*ep2^13 + 161296154624/5862291873550749*ep2^14 - 58653147136/2254727643673365*ep2^15 + 6174015488/250525293741485*ep2^16 - 49392123904/211 [...]
-        - (11/137592 - 11/153468*ep2 + 11/169911*ep2^2 - 10/169911*ep2^3 + 64/1189377*ep2^4 - 2176/44006949*ep2^5 + 8704/190696779*ep2^6 - 330752/7818567939*ep2^7 + 13230080/336198421377*ep2^8 - 5292032/144085037733*ep2^9 + 232849408/6771996773451*ep2^10 - 10711072768/331827841899099*ep2^11 + 10081009664/331827841899099*ep2^12 - 504050483200/17586875620652247*ep2^13 + 36658216960/1352836586204019*ep2^14 - 3858759680/150315176244891*ep2^15 + 30870077440/1266942199778367*ep2^16 - 617401548 [...]
-        + (143/1932560 - 143/2139620*ep2 + 13/213962*ep2^2 - 208/3744335*ep2^3 + 416/8149435*ep2^4 - 384/8149435*ep2^5 + 14592/334126835*ep2^6 - 116736/2873490781*ep2^7 + 77824/2052493415*ep2^8 - 3424256/96467190505*ep2^9 + 157515776/4726892334745*ep2^10 - 2520252416/80357169690665*ep2^11 + 25202524160/851785998721049*ep2^12 - 23827841024/851785998721049*ep2^13 + 22573744128/851785998721049*ep2^14 - 180589953024/7179339132077413*ep2^15 + 361179906048/15101368519197317*ep2^16) * k2^13
-        - (13/189720 - 13/208692*ep2 + 104/1826055*ep2^2 - 208/3974355*ep2^3 + 64/1324785*ep2^4 - 2432/54316185*ep2^5 + 19456/467119191*ep2^6 - 38912/1000969695*ep2^7 + 155648/4276870515*ep2^8 - 7159808/209566655235*ep2^9 + 114556928/3562633138995*ep2^10 - 1145569280/37763911273347*ep2^11 + 11913920512/415403024006817*ep2^12 - 1254096896/46155891556313*ep2^13 + 10032775168/389028228831781*ep2^14 - 581900959744/23730721958738641*ep2^15) * k2^14
-        + (65/1023264 - 13/223839*ep2 + 26/487179*ep2^2 - 8/162393*ep2^3 + 16/350427*ep2^4 - 640/15068361*ep2^5 + 256/6457869*ep2^6 - 1024/27592713*ep2^7 + 47104/1352042937*ep2^8 - 753664/22984729929*ep2^9 + 37683200/1218190686237*ep2^10 - 391905280/13400097548607*ep2^11 + 783810560/28289094824837*ep2^12 - 6270484480/238436656380769*ep2^13 + 363688099840/14544636039226909*ep2^14) * k2^15
-        - (2/33915 - 4/73815*ep2 + 16/319865*ep2^2 - 32/690235*ep2^3 + 256/5936021*ep2^4 - 512/12720045*ep2^5 + 22528/597842115*ep2^6 - 1036288/29294263635*ep2^7 + 16580608/498002481795*ep2^8 - 165806080/5278826307027*ep2^9 + 12058624/406063562079*ep2^10 - 72351744/2571735893167*ep2^11 + 578813952/21676059670979*ep2^12 - 33571209216/1322239639929719*ep2^13) * k2^16
-        + (17/310023 - 68/1343433*ep2 + 136/2898987*ep2^2 - 5440/124656441*ep2^3 + 2176/53424189*ep2^4 - 95744/2510936883*ep2^5 + 4404224/123035907267*ep2^6 - 4145152/123035907267*ep2^7 + 207257600/6520903085151*ep2^8 - 15073280/501607929627*ep2^9 + 30146560/1058950073657*ep2^10 - 241172480/8925436335109*ep2^11 + 13988003840/544451616441649*ep2^12) * k2^17
-        - (34/665665 - 68/1436435*ep2 + 544/12353341*ep2^2 - 1088/26471445*ep2^3 + 4352/113105265*ep2^4 - 200192/5542157985*ep2^5 + 188416/5542157985*ep2^6 - 1884160/58746874641*ep2^7 + 1507328/49708893927*ep2^8 - 9043968/314822994871*ep2^9 + 72351744/2653508099627*ep2^10 - 4196401152/161863994077247*ep2^11) * k2^18
-        + (969/20331080 - 969/21855911*ep2 + 646/15611365*ep2^2 - 2584/66703105*ep2^3 + 5168/142106615*ep2^4 - 4864/142106615*ep2^5 + 48640/1506330119*ep2^6 - 505856/16569631309*ep2^7 + 479232/16569631309*ep2^8 - 3833856/139658321033*ep2^9 + 222363648/8519157583013*ep2^10) * k2^19
-        - (95/2132284 - 19/456918*ep2 + 38/976143*ep2^2 - 76/2079609*ep2^3 + 1216/35353353*ep2^4 - 60800/1873727709*ep2^5 + 632320/20611004799*ep2^6 - 199680/6870334933*ep2^7 + 1597440/57907108721*ep2^8 - 92651520/3532333631981*ep2^9) * k2^20
-        + (19/455400 - 19/486450*ep2 + 19/518175*ep2^2 - 304/8808975*ep2^3 + 608/18675027*ep2^4 - 31616/1027126485*ep2^5 + 3328/114125165*ep2^6 - 26624/961912105*ep2^7 + 1544192/58676638405*ep2^8) * k2^21
-        - (11/281060 - 11/299390*ep2 + 88/2544815*ep2^2 - 880/26975039*ep2^3 + 64/2075003*ep2^4 - 1152/39425057*ep2^5 + 9216/332296909*ep2^6 - 534528/20270111449*ep2^7) * k2^22
-        + (253/6879600 - 253/7309575*ep2 + 506/15496299*ep2^2 - 184/5960115*ep2^3 + 368/12582465*ep2^4 - 2944/106052205*ep2^5 + 170752/6469184505*ep2^6) * k2^23
-        - (253/7309575 - 506/15496299*ep2 + 184/5960115*ep2^2 - 368/12582465*ep2^3 + 2944/106052205*ep2^4 - 170752/6469184505*ep2^5) * k2^24
-        + (575/17623242 - 230/7455987*ep2 + 460/15740417*ep2^2 - 3680/132669229*ep2^3 + 7360/279062861*ep2^4) * k2^25
-        - (13/422037 - 26/890967*ep2 + 208/7509579*ep2^2 - 416/15796011*ep2^3) * k2^26
-        + (195/6695752 - 195/7054453*ep2 + 390/14838677*ep2^2) * k2^27
-        - (117/4243280 - 117/4462760*ep2) * k2^28
-        + 87/3328160 * k2^29;
-C4[4] = + (1/124740 - 1/162162*ep2 + 2/405405*ep2^2 - 4/984555*ep2^3 + 64/18706545*ep2^4 - 128/43648605*ep2^5 + 512/200783583*ep2^6 - 1024/456326325*ep2^7 + 8192/4106936925*ep2^8 - 16384/9161628525*ep2^9 + 65536/40572926325*ep2^10 - 131072/89260437915*ep2^11 + 4194304/3124115327025*ep2^12 - 8388608/6799545123525*ep2^13 + 33554432/29464695535275*ep2^14 - 67108864/63581711418225*ep2^15 + 536870912/546802718196735*ep2^16 - 1073741824/1171720110421575*ep2^17 + 4294967296/5006440471801275*ep2 [...]
-        - (1/58968 - 1/73710*ep2 + 1/89505*ep2^2 - 16/1700595*ep2^3 + 32/3968055*ep2^4 - 128/18253053*ep2^5 + 2816/456326325*ep2^6 - 22528/4106936925*ep2^7 + 45056/9161628525*ep2^8 - 180224/40572926325*ep2^9 + 32768/8114585265*ep2^10 - 1048576/284010484275*ep2^11 + 2097152/618140465775*ep2^12 - 8388608/2678608685025*ep2^13 + 16777216/5780155583475*ep2^14 - 134217728/49709338017885*ep2^15 + 268435456/106520010038325*ep2^16 - 11811160064/5006440471801275*ep2^17 + 23622320128/10665894918185 [...]
-        + (1/41580 - 1/50490*ep2 + 8/479655*ep2^2 - 16/1119195*ep2^3 + 64/5148297*ep2^4 - 128/11700675*ep2^5 + 1024/105306075*ep2^6 - 26624/3053876175*ep2^7 + 106496/13524308775*ep2^8 - 212992/29753479305*ep2^9 + 6815744/1041371775675*ep2^10 - 13631488/2266515041175*ep2^11 + 4194304/755505013725*ep2^12 - 8388608/1630300292775*ep2^13 + 67108864/14020582517865*ep2^14 - 134217728/30044105395425*ep2^15 + 536870912/128370268507725*ep2^16 - 1073741824/273484485081675*ep2^17 + 17179869184/46492 [...]
-        - (7/242352 - 7/287793*ep2 + 2/95931*ep2^2 - 40/2206413*ep2^3 + 16/1002915*ep2^4 - 128/9026235*ep2^5 + 3328/261760815*ep2^6 - 93184/8114585265*ep2^7 + 186368/17852087583*ep2^8 - 851968/89260437915*ep2^9 + 1703936/194272717815*ep2^10 - 524288/64757572605*ep2^11 + 1048576/139740025095*ep2^12 - 8388608/1201764215817*ep2^13 + 117440512/18026463237255*ep2^14 - 469762048/77022161104635*ep2^15 + 134217728/23441527292715*ep2^16 - 2147483648/398505963976155*ep2^17 + 21474836480/4224163218 [...]
-        + (7/220077 - 2/73359*ep2 + 40/1687257*ep2^2 - 16/766935*ep2^3 + 128/6902415*ep2^4 - 256/15397695*ep2^5 + 7168/477328545*ep2^6 - 14336/1050122799*ep2^7 + 65536/5250613995*ep2^8 - 2228224/194272717815*ep2^9 + 8912896/841848443865*ep2^10 - 17825792/1816620326235*ep2^11 + 142606336/15622934805621*ep2^12 - 1996488704/234344022084315*ep2^13 + 7985954816/1001288094360255*ep2^14 - 2281701376/304739854805295*ep2^15 + 2147483648/304739854805295*ep2^16 - 21474836480/3230242460936127*ep2^17 [...]
-        - (1/30030 - 2/69069*ep2 + 4/156975*ep2^2 - 32/1412775*ep2^3 + 64/3151575*ep2^4 - 256/13956975*ep2^5 + 512/30705345*ep2^6 - 16384/1074687075*ep2^7 + 557056/39763421775*ep2^8 - 2228224/172308161025*ep2^9 + 84672512/7064634602025*ep2^10 - 677380096/60755857577415*ep2^11 + 1354760192/130191123380175*ep2^12 - 5419040768/556271163533475*ep2^13 + 10838081536/1185099435353925*ep2^14 - 10200547328/1185099435353925*ep2^15 + 20401094656/2512410802950321*ep2^16 - 81604378624/106294303201744 [...]
-        + (1/29601 - 2/67275*ep2 + 16/605475*ep2^2 - 32/1350675*ep2^3 + 896/41870925*ep2^4 - 1792/92116035*ep2^5 + 8192/460580175*ep2^6 - 278528/17041466475*ep2^7 + 1114112/73846354725*ep2^8 - 42336256/3027700543725*ep2^9 + 338690048/26038224676035*ep2^10 - 4741660672/390573370140525*ep2^11 + 18966642688/1668813490600425*ep2^12 - 5419040768/507899758008825*ep2^13 + 5100273664/507899758008825*ep2^14 - 10200547328/1076747486978709*ep2^15 + 40802189312/4555470137217615*ep2^16 - 4294967296/5 [...]
-        - (11/327600 - 11/368550*ep2 + 11/411075*ep2^2 - 44/1820475*ep2^3 + 8/364095*ep2^4 - 256/12743325*ep2^5 + 8704/471503025*ep2^6 - 34816/2043179775*ep2^7 + 1323008/83770370775*ep2^8 - 10584064/720425188665*ep2^9 + 21168128/1543768261425*ep2^10 - 931397632/72557108286975*ep2^11 + 42844291072/3555298306061775*ep2^12 - 40324038656/3555298306061775*ep2^13 + 80648077312/7537232408850963*ep2^14 - 29326573568/2898935541865755*ep2^15 + 3087007744/322103949096195*ep2^16 - 24696061952/271487 [...]
-        + (11/334152 - 11/372708*ep2 + 11/412641*ep2^2 - 10/412641*ep2^3 + 64/2888487*ep2^4 - 128/6286707*ep2^5 + 512/27242397*ep2^6 - 19456/1116938277*ep2^7 + 778240/48028345911*ep2^8 - 311296/20583576819*ep2^9 + 13697024/967428110493*ep2^10 - 630063104/47403977414157*ep2^11 + 10081009664/805867616040669*ep2^12 - 504050483200/42710983650155457*ep2^13 + 36658216960/3285460280781189*ep2^14 - 3858759680/365051142309021*ep2^15 + 30870077440/3076859628033177*ep2^16 - 61740154880/647201507965 [...]
-        - (143/4472496 - 143/4951692*ep2 + 65/2475846*ep2^2 - 208/8665461*ep2^3 + 416/18860121*ep2^4 - 128/6286707*ep2^5 + 4864/257754987*ep2^6 - 194560/11083464441*ep2^7 + 77824/4750056189*ep2^8 - 3424256/223252640883*ep2^9 + 157515776/10939379403267*ep2^10 - 2520252416/185969449855539*ep2^11 + 126012620800/9856380842343567*ep2^12 - 119139205120/9856380842343567*ep2^13 + 12540968960/1095153426927063*ep2^14 - 100327751680/9230578884099531*ep2^15 + 200655503360/19416045238967979*ep2^16) * k2^13
-        + (1001/32442120 - 91/3244212*ep2 + 104/4055265*ep2^2 - 208/8826165*ep2^3 + 64/2942055*ep2^4 - 128/6348645*ep2^5 + 1024/54598347*ep2^6 - 14336/818975205*ep2^7 + 630784/38491834635*ep2^8 - 4145152/269442842445*ep2^9 + 66322432/4580528321565*ep2^10 - 663224320/48553600208589*ep2^11 + 627048448/48553600208589*ep2^12 - 1254096896/102502044884799*ep2^13 + 10032775168/863945806886163*ep2^14 - 581900959744/52700694220055943*ep2^15) * k2^14
-        - (91/3069792 - 13/479655*ep2 + 26/1043955*ep2^2 - 8/347985*ep2^3 + 16/750915*ep2^4 - 128/6457869*ep2^5 + 1792/96868035*ep2^6 - 7168/413890695*ep2^7 + 47104/2897234865*ep2^8 - 753664/49252992705*ep2^9 + 7536640/522081722673*ep2^10 - 78381056/5742898949403*ep2^11 + 156762112/12123897782073*ep2^12 - 1254096896/102187138448901*ep2^13 + 72737619968/6233415445382961*ep2^14) * k2^15
-        + (26/915705 - 52/1993005*ep2 + 16/664335*ep2^2 - 32/1433565*ep2^3 + 256/12328659*ep2^4 - 512/26418555*ep2^5 + 22528/1241672085*ep2^6 - 1036288/60841932165*ep2^7 + 16580608/1034312846805*ep2^8 - 165806080/10963716176133*ep2^9 + 156762112/10963716176133*ep2^10 - 313524224/23145623038503*ep2^11 + 2508193792/195084537038811*ep2^12 - 145475239936/11900156759367471*ep2^13) * k2^16
-        - (17/626373 - 68/2714283*ep2 + 136/5857137*ep2^2 - 5440/251856891*ep2^3 + 15232/755570673*ep2^4 - 60928/3228347421*ep2^5 + 400384/22598431947*ep2^6 - 376832/22598431947*ep2^7 + 18841600/1197716893191*ep2^8 - 15073280/1013452755777*ep2^9 + 30146560/2139511373307*ep2^10 - 241172480/18033024432159*ep2^11 + 13988003840/1100014490361699*ep2^12) * k2^17
-        + (34/1312311 - 68/2831829*ep2 + 2720/121768647*ep2^2 - 1088/52186563*ep2^3 + 4352/222978951*ep2^4 - 8704/475042113*ep2^5 + 8192/475042113*ep2^6 - 409600/25177231989*ep2^7 + 327680/21303811683*ep2^8 - 655360/44974713553*ep2^9 + 5242880/379072585661*ep2^10 - 304087040/23123427725321*ep2^11) * k2^18
-        - (323/13069980 - 646/28100457*ep2 + 1292/60215265*ep2^2 - 5168/257283405*ep2^3 + 10336/548125515*ep2^4 - 9728/548125515*ep2^5 + 97280/5810130459*ep2^6 - 1011712/63911435049*ep2^7 + 106496/7101270561*ep2^8 - 851968/59853566157*ep2^9 + 49414144/3651067535577*ep2^10) * k2^19
-        + (323/13707540 - 323/14686650*ep2 + 646/31376025*ep2^2 - 1292/66844575*ep2^3 + 1216/66844575*ep2^4 - 2432/141710499*ep2^5 + 126464/7794077445*ep2^6 - 13312/866008605*ep2^7 + 106496/7299215385*ep2^8 - 6176768/445252138485*ep2^9) * k2^20
-        - (133/5920200 - 133/6323850*ep2 + 19/962325*ep2^2 - 304/16359525*ep2^3 + 608/34682193*ep2^4 - 2432/146732355*ep2^5 + 256/16303595*ep2^6 - 2048/137416015*ep2^7 + 118784/8382376915*ep2^8) * k2^21
-        + (1463/68297580 - 209/10393110*ep2 + 1672/88341435*ep2^2 - 16720/936419211*ep2^3 + 1216/72032247*ep2^4 - 128/8003583*ep2^5 + 1024/67458771*ep2^6 - 59392/4114985031*ep2^7) * k2^22
-        - (253/12383280 - 253/13157235*ep2 + 2530/139466691*ep2^2 - 184/10728207*ep2^3 + 368/22648437*ep2^4 - 2944/190893969*ep2^5 + 170752/11644532109*ep2^6) * k2^23
-        + (253/12978225 - 506/27513837*ep2 + 184/10582245*ep2^2 - 368/22340295*ep2^3 + 20608/1318077405*ep2^4 - 41216/2772507645*ep2^5) * k2^24
-        - (1265/67975362 - 46/2614437*ep2 + 92/5519367*ep2^2 - 736/46520379*ep2^3 + 1472/97853211*ep2^4) * k2^25
-        + (299/16821189 - 598/35511399*ep2 + 4784/299310363*ep2^2 - 9568/629583867*ep2^3) * k2^26
-        - (65/3826144 - 65/4031116*ep2 + 65/4239622*ep2^2) * k2^27
-        + (455/28005648 - 455/29454216*ep2) * k2^28
-        - 2639/169736160 * k2^29;
-C4[5] = + (1/792792 - 1/990990*ep2 + 1/1203345*ep2^2 - 16/22863555*ep2^3 + 32/53348295*ep2^4 - 128/245402157*ep2^5 + 256/557732175*ep2^6 - 2048/5019589575*ep2^7 + 4096/11197545975*ep2^8 - 16384/49589132175*ep2^9 + 32768/109096090785*ep2^10 - 1048576/3818363177475*ep2^11 + 2097152/8310555150975*ep2^12 - 8388608/36012405654225*ep2^13 + 16777216/77710980622275*ep2^14 - 134217728/668314433351565*ep2^15 + 268435456/1432102357181925*ep2^16 - 1073741824/6118982798868225*ep2^17 + 2147483648/1303 [...]
-        - (1/304920 - 1/370260*ep2 + 4/1758735*ep2^2 - 8/4103715*ep2^3 + 32/18877089*ep2^4 - 64/42902475*ep2^5 + 512/386122275*ep2^6 - 13312/11197545975*ep2^7 + 53248/49589132175*ep2^8 - 106496/109096090785*ep2^9 + 3407872/3818363177475*ep2^10 - 6815744/8310555150975*ep2^11 + 2097152/2770185050325*ep2^12 - 4194304/5977767740175*ep2^13 + 33554432/51408802565505*ep2^14 - 67108864/110161719783225*ep2^15 + 268435456/470690984528325*ep2^16 - 536870912/1002776445299475*ep2^17 + 8589934592/1704 [...]
-        + (7/1283568 - 7/1524237*ep2 + 2/508079*ep2^2 - 40/11685817*ep2^3 + 16/5311735*ep2^4 - 128/47805615*ep2^5 + 256/106643295*ep2^6 - 7168/3305942145*ep2^7 + 14336/7273072719*ep2^8 - 65536/36365363595*ep2^9 + 131072/79148144295*ep2^10 - 524288/342975291945*ep2^11 + 1048576/740104577355*ep2^12 - 8388608/6364899365253*ep2^13 + 117440512/95473490478795*ep2^14 - 469762048/407932186591215*ep2^15 + 134217728/124153274179935*ep2^16 - 2147483648/2110605661058895*ep2^17 + 21474836480/22372420 [...]
-        - (2/268983 - 4/627627*ep2 + 80/14435421*ep2^2 - 32/6561555*ep2^3 + 256/59053995*ep2^4 - 512/131735835*ep2^5 + 2048/583401555*ep2^6 - 4096/1283483421*ep2^7 + 131072/44921919735*ep2^8 - 4456448/1662111030195*ep2^9 + 17825792/7202481130845*ep2^10 - 35651584/15542196124455*ep2^11 + 285212672/133662886670313*ep2^12 - 570425344/286420471436385*ep2^13 + 2281701376/1223796559773645*ep2^14 - 4563402752/2607218757778635*ep2^15 + 4294967296/2607218757778635*ep2^16 - 42949672960/27636518832 [...]
-        + (1/110110 - 2/253253*ep2 + 4/575575*ep2^2 - 32/5180175*ep2^3 + 64/11555775*ep2^4 - 256/51175575*ep2^5 + 512/112586265*ep2^6 - 16384/3940519275*ep2^7 + 557056/145799213175*ep2^8 - 2228224/631796590425*ep2^9 + 84672512/25903660207425*ep2^10 - 677380096/222771477783855*ep2^11 + 1354760192/477367452393975*ep2^12 - 5419040768/2039660932956075*ep2^13 + 10838081536/4345364596297725*ep2^14 - 10200547328/4345364596297725*ep2^15 + 20401094656/9212172944151177*ep2^16 - 81604378624/3897457 [...]
-        - (3/289432 - 3/328900*ep2 + 2/246675*ep2^2 - 4/550275*ep2^3 + 112/17058525*ep2^4 - 224/37528755*ep2^5 + 1024/187643775*ep2^6 - 34816/6942819675*ep2^7 + 139264/30085551925*ep2^8 - 5292032/1233507628925*ep2^9 + 42336256/10608165608755*ep2^10 - 592707584/159122484131325*ep2^11 + 2370830336/679886977652025*ep2^12 - 677380096/206922123633225*ep2^13 + 637534208/206922123633225*ep2^14 - 1275068416/438674902102437*ep2^15 + 5100273664/1855932278125695*ep2^16 - 1610612736/618644092708565* [...]
-        + (1/88400 - 1/99450*ep2 + 1/110925*ep2^2 - 28/3438675*ep2^3 + 56/7565085*ep2^4 - 256/37825425*ep2^5 + 512/82325925*ep2^6 - 2048/356745675*ep2^7 + 77824/14626572675*ep2^8 - 622592/125788525005*ep2^9 + 8716288/1886827875075*ep2^10 - 34865152/8061900920775*ep2^11 + 229113856/56433306445425*ep2^12 - 3665821696/959366209572225*ep2^13 + 7331643392/2033856364293117*ep2^14 - 29326573568/8604776925855495*ep2^15 + 3087007744/956086325095055*ep2^16 - 24696061952/8058441882944035*ep2^17 + 4 [...]
-        - (1/83538 - 1/93177*ep2 + 4/412641*ep2^2 - 40/4539051*ep2^3 + 256/31773357*ep2^4 - 512/69153777*ep2^5 + 2048/299666367*ep2^6 - 77824/12286321047*ep2^7 + 3112960/528311805021*ep2^8 - 1245184/226419345009*ep2^9 + 4980736/967428110493*ep2^10 - 229113856/47403977414157*ep2^11 + 3665821696/805867616040669*ep2^12 - 183291084800/42710983650155457*ep2^13 + 146632867840/36140063088593079*ep2^14 - 15435038720/4015562565399231*ep2^15 + 123480309760/33845455908364947*ep2^16 - 246960619520/7 [...]
-        + (13/1049104 - 13/1161508*ep2 + 65/6388294*ep2^2 - 208/22359029*ep2^3 + 416/48663769*ep2^4 - 384/48663769*ep2^5 + 768/105011291*ep2^6 - 30720/4515485513*ep2^7 + 4096/645069359*ep2^8 - 16384/2756205443*ep2^9 + 753664/135054066707*ep2^10 - 12058624/2295919134019*ep2^11 + 602931200/121683714103007*ep2^12 - 6270484480/1338520855133077*ep2^13 + 112868720640/25431896247528463*ep2^14 - 902949765120/214354554086311331*ep2^15 + 1805899530240/450883717216034179*ep2^16) * k2^13
-        - (91/7209360 - 91/7930296*ep2 + 52/4956435*ep2^2 - 104/10787535*ep2^3 + 32/3595845*ep2^4 - 64/7759455*ep2^5 + 512/66731313*ep2^6 - 7168/1000969695*ep2^7 + 28672/4276870515*ep2^8 - 188416/29938093605*ep2^9 + 3014656/508947591285*ep2^10 - 30146560/5394844467621*ep2^11 + 313524224/59343289143831*ep2^12 - 627048448/125280277081421*ep2^13 + 5016387584/1055933763971977*ep2^14 - 290950479872/64411959602290597*ep2^15) * k2^14
-        + (13/1023264 - 13/1119195*ep2 + 26/2435895*ep2^2 - 8/811965*ep2^3 + 16/1752135*ep2^4 - 128/15068361*ep2^5 + 256/32289345*ep2^6 - 1024/137963565*ep2^7 + 47104/6760214685*ep2^8 - 753664/114923649645*ep2^9 + 7536640/1218190686237*ep2^10 - 78381056/13400097548607*ep2^11 + 156762112/28289094824837*ep2^12 - 1254096896/238436656380769*ep2^13 + 72737619968/14544636039226909*ep2^14) * k2^15
-        - (52/4103715 - 104/8931615*ep2 + 32/2977205*ep2^2 - 64/6424495*ep2^3 + 512/55250657*ep2^4 - 1024/118394265*ep2^5 + 4096/505866405*ep2^6 - 188416/24787453845*ep2^7 + 3014656/421386715365*ep2^8 - 30146560/4466699182869*ep2^9 + 313524224/49133691011559*ep2^10 - 1881145344/311180043073207*ep2^11 + 15049162752/2622803220188459*ep2^12 - 872851439616/159990996431495999*ep2^13) * k2^16
-        + (221/17608041 - 68/5869347*ep2 + 136/12665433*ep2^2 - 5440/544613619*ep2^3 + 15232/1633840857*ep2^4 - 60928/6980956389*ep2^5 + 17408/2124638901*ep2^6 - 16384/2124638901*ep2^7 + 819200/112605861753*ep2^8 - 8519680/1238664479283*ep2^9 + 17039360/2614958345153*ep2^10 - 136314880/22040363194861*ep2^11 + 7906263040/1344462154886521*ep2^12) * k2^17
-        - (17/1374802 - 17/1483339*ep2 + 680/63783577*ep2^2 - 1904/191350731*ep2^3 + 7616/817589487*ep2^4 - 2176/248831583*ep2^5 + 2048/248831583*ep2^6 - 102400/13188073899*ep2^7 + 81920/11159139453*ep2^8 - 491520/70674549869*ep2^9 + 3932160/595685491753*ep2^10 - 228065280/36336814996933*ep2^11) * k2^18
-        + (969/79872100 - 1938/171725015*ep2 + 1292/122660725*ep2^2 - 5168/524095825*ep2^3 + 10336/1116551975*ep2^4 - 9728/1116551975*ep2^5 + 19456/2367090187*ep2^6 - 1011712/130189960285*ep2^7 + 958464/130189960285*ep2^8 - 7667712/1097315379545*ep2^9 + 444727296/66936238152245*ep2^10) * k2^19
-        - (646/54449395 - 1292/116677275*ep2 + 5168/498530175*ep2^2 - 10336/1062086025*ep2^3 + 9728/1062086025*ep2^4 - 19456/2251622373*ep2^5 + 77824/9526094655*ep2^6 - 24576/3175364885*ep2^7 + 196608/26763789745*ep2^8 - 11403264/1632591174445*ep2^9) * k2^20
-        + (2261/195366600 - 2261/208687050*ep2 + 323/31756725*ep2^2 - 304/31756725*ep2^3 + 608/67324257*ep2^4 - 2432/284833395*ep2^5 + 256/31648155*ep2^6 - 2048/266748735*ep2^7 + 118784/16271672835*ep2^8) * k2^21
-        - (19/1686360 - 19/1796340*ep2 + 76/7634445*ep2^2 - 760/80925117*ep2^3 + 608/68475099*ep2^4 - 192/22825033*ep2^5 + 1536/192382421*ep2^6 - 89088/11735327681*ep2^7) * k2^22
-        + (437/39901680 - 437/42395535*ep2 + 4370/449392671*ep2^2 - 3496/380255337*ep2^3 + 368/42250593*ep2^4 - 2944/356112141*ep2^5 + 5888/749063469*ep2^6) * k2^23
-        - (46/4326075 - 92/9171279*ep2 + 368/38801565*ep2^2 - 736/81914415*ep2^3 + 41216/4832950485*ep2^4 - 82432/10165861365*ep2^5) * k2^24
-        + (115/11149398 - 46/4717053*ep2 + 92/9958223*ep2^2 - 5152/587535157*ep2^3 + 10304/1235849813*ep2^4) * k2^25
-        - (299/29904336 - 299/31565688*ep2 + 299/33256707*ep2^2 - 598/69953763*ep2^3) * k2^26
-        + (4485/462963424 - 4485/487765036*ep2 + 4485/512994262*ep2^2) * k2^27
-        - (4095/436421348 - 4095/458994866*ep2) * k2^28
-        + 1131/124473184 * k2^29;
-C4[6] = + (1/4684680 - 1/5688540*ep2 + 4/27020565*ep2^2 - 8/63047985*ep2^3 + 32/290020731*ep2^4 - 64/659138025*ep2^5 + 512/5932242225*ep2^6 - 1024/13233463425*ep2^7 + 4096/58605338025*ep2^8 - 8192/128931743655*ep2^9 + 262144/4512611027925*ep2^10 - 524288/9821565178425*ep2^11 + 2097152/42560115773175*ep2^12 - 4194304/91840249826325*ep2^13 + 33554432/789826148506395*ep2^14 - 67108864/1692484603942275*ep2^15 + 268435456/7231525125935175*ep2^16 - 536870912/15406292659601025*ep2^17 + 85899345 [...]
-        - (1/1516944 - 1/1801371*ep2 + 2/4203199*ep2^2 - 40/96673577*ep2^3 + 16/43942535*ep2^4 - 128/395482815*ep2^5 + 256/882230895*ep2^6 - 1024/3907022535*ep2^7 + 2048/8595449577*ep2^8 - 65536/300840735195*ep2^9 + 131072/654771011895*ep2^10 - 524288/2837341051545*ep2^11 + 1048576/6122683321755*ep2^12 - 8388608/52655076567093*ep2^13 + 16777216/112832306929485*ep2^14 - 67108864/482101675062345*ep2^15 + 134217728/1027086177306735*ep2^16 - 2147483648/17460465014214495*ep2^17 + 21474836480/ [...]
-        + (2/1589445 - 4/3708705*ep2 + 16/17060043*ep2^2 - 32/38772825*ep2^3 + 256/348955425*ep2^4 - 512/778439025*ep2^5 + 2048/3447372825*ep2^6 - 4096/7584220215*ep2^7 + 131072/265447707525*ep2^8 - 4456448/9821565178425*ep2^9 + 17825792/42560115773175*ep2^10 - 35651584/91840249826325*ep2^11 + 285212672/789826148506395*ep2^12 - 570425344/1692484603942275*ep2^13 + 2281701376/7231525125935175*ep2^14 - 4563402752/15406292659601025*ep2^15 + 4294967296/15406292659601025*ep2^16 - 8589934592/32 [...]
-        - (1/520520 - 1/598598*ep2 + 1/680225*ep2^2 - 8/6122025*ep2^3 + 16/13656825*ep2^4 - 64/60480225*ep2^5 + 128/133056495*ep2^6 - 4096/4656977325*ep2^7 + 139264/172308161025*ep2^8 - 557056/746668697775*ep2^9 + 21168128/30613416608775*ep2^10 - 169345024/263275382835465*ep2^11 + 338690048/564161534647425*ep2^12 - 1354760192/2410508375311725*ep2^13 + 2709520384/5135430886533675*ep2^14 - 2550136832/5135430886533675*ep2^15 + 5100273664/10887113479451391*ep2^16 - 20401094656/46060864720755 [...]
-        + (15/5814952 - 3/1321580*ep2 + 2/991185*ep2^2 - 4/2211105*ep2^3 + 112/68544255*ep2^4 - 224/150797361*ep2^5 + 1024/753986805*ep2^6 - 2048/1641030105*ep2^7 + 8192/7111130455*ep2^8 - 311296/291556348655*ep2^9 + 2490368/2507384598433*ep2^10 - 34865152/37610768976495*ep2^11 + 139460608/160700558354115*ep2^12 - 39845888/48908865586035*ep2^13 + 637534208/831450714962595*ep2^14 - 6375342080/8813377578603507*ep2^15 + 5100273664/7457473335741429*ep2^16 - 1610612736/2485824445247143*ep2^17 [...]
-        - (11/3447600 - 11/3878550*ep2 + 11/4326075*ep2^2 - 308/134108325*ep2^3 + 56/26821665*ep2^4 - 256/134108325*ep2^5 + 512/291882825*ep2^6 - 2048/1264825575*ep2^7 + 77824/51857848575*ep2^8 - 622592/445977497745*ep2^9 + 8716288/6689662466175*ep2^10 - 383516672/314414135910225*ep2^11 + 2520252416/2200898951371575*ep2^12 - 40324038656/37415282173316775*ep2^13 + 80648077312/79320398207431563*ep2^14 - 29326573568/30507845464396755*ep2^15 + 3087007744/3389760607155195*ep2^16 - 24696061952 [...]
-        + (11/2947698 - 11/3287817*ep2 + 308/101922327*ep2^2 - 280/101922327*ep2^3 + 256/101922327*ep2^4 - 512/221830947*ep2^5 + 2048/961267437*ep2^6 - 4096/2074313943*ep2^7 + 163840/89195499549*ep2^8 - 458752/267586498647*ep2^9 + 20185088/12576565436409*ep2^10 - 132644864/88035958054863*ep2^11 + 2122317824/1496611286932671*ep2^12 - 106115891200/79320398207431563*ep2^13 + 7717519360/6101569092879351*ep2^14 - 15435038720/12881090307189741*ep2^15 + 123480309760/108569189732027817*ep2^16 -  [...]
-        - (11/2622760 - 11/2903770*ep2 + 1/290377*ep2^2 - 32/10163195*ep2^3 + 64/22119895*ep2^4 - 768/287558635*ep2^5 + 1536/620521265*ep2^6 - 12288/5336482879*ep2^7 + 8192/3811773485*ep2^8 - 360448/179153353795*ep2^9 + 16580608/8778514335955*ep2^10 - 265289728/149234743711235*ep2^11 + 2652897280/1581888283339091*ep2^12 - 192937984/121683714103007*ep2^13 + 3472883712/2311990567957133*ep2^14 - 27783069696/19486777644210121*ep2^15 + 55566139392/40989428837821289*ep2^16) * k2^13
-        + (11/2403120 - 1/240312*ep2 + 4/1051365*ep2^2 - 8/2288265*ep2^3 + 32/9915815*ep2^4 - 64/21397285*ep2^5 + 512/184016651*ep2^6 - 1024/394321395*ep2^7 + 45056/18533105565*ep2^8 - 2072576/908122172685*ep2^9 + 33161216/15438076935645*ep2^10 - 331612160/163643615517837*ep2^11 + 24117248/12587970424449*ep2^12 - 144703488/79723812688177*ep2^13 + 1157627904/671957849800349*ep2^14 - 67142418432/40989428837821289*ep2^15) * k2^14
-        - (5/1023264 - 1/223839*ep2 + 2/487179*ep2^2 - 8/2111109*ep2^3 + 16/4555551*ep2^4 - 640/195888693*ep2^5 + 256/83952297*ep2^6 - 1024/358705269*ep2^7 + 47104/17576558181*ep2^8 - 753664/298801489077*ep2^9 + 37683200/15836478921081*ep2^10 - 30146560/13400097548607*ep2^11 + 60293120/28289094824837*ep2^12 - 482344960/238436656380769*ep2^13 + 27976007680/14544636039226909*ep2^14) * k2^15
-        + (4/780045 - 8/1697745*ep2 + 32/7356895*ep2^2 - 64/15875405*ep2^3 + 512/136528483*ep2^4 - 1024/292561035*ep2^5 + 45056/13750368645*ep2^6 - 90112/29294263635*ep2^7 + 1441792/498002481795*ep2^8 - 14417920/5278826307027*ep2^9 + 1048576/406063562079*ep2^10 - 6291456/2571735893167*ep2^11 + 50331648/21676059670979*ep2^12 - 2919235584/1322239639929719*ep2^13) * k2^16
-        - (17/3201462 - 34/6936501*ep2 + 68/14968239*ep2^2 - 2720/643634277*ep2^3 + 7616/1930902831*ep2^4 - 30464/8250221187*ep2^5 + 8704/2510936883*ep2^6 - 8192/2510936883*ep2^7 + 409600/133079654799*ep2^8 - 327680/112605861753*ep2^9 + 655360/237723485923*ep2^10 - 5242880/2003669381351*ep2^11 + 304087040/122223832262411*ep2^12) * k2^17
-        + (17/3124550 - 17/3371225*ep2 + 136/28992535*ep2^2 - 1904/434888025*ep2^3 + 7616/1858157925*ep2^4 - 2176/565526325*ep2^5 + 2048/565526325*ep2^6 - 4096/1198915809*ep2^7 + 16384/5072336115*ep2^8 - 98304/32124795395*ep2^9 + 786432/270766132615*ep2^10 - 45613056/16516734089515*ep2^11) * k2^18
-        - (969/175303700 - 1938/376902955*ep2 + 9044/1884514775*ep2^2 - 36176/8052017675*ep2^3 + 10336/2450614075*ep2^4 - 9728/2450614075*ep2^5 + 19456/5195301839*ep2^6 - 77824/21980123165*ep2^7 + 73728/21980123165*ep2^8 - 589824/185261038105*ep2^9 + 34209792/11300923324405*ep2^10) * k2^19
-        + (646/115828713 - 1292/248204385*ep2 + 5168/1060509645*ep2^2 - 10336/2259346635*ep2^3 + 9728/2259346635*ep2^4 - 97280/23949074331*ep2^5 + 77824/20264601357*ep2^6 - 8192/2251622373*ep2^7 + 65536/18977960001*ep2^8 - 3801088/1157655560061*ep2^9) * k2^20
-        - (323/57721950 - 646/123315075*ep2 + 1292/262714725*ep2^2 - 1216/262714725*ep2^3 + 2432/556955217*ep2^4 - 9728/2356348995*ep2^5 + 1024/261816555*ep2^6 - 8192/2206739535*ep2^7 + 475136/134611111635*ep2^8) * k2^21
-        + (3553/635757720 - 3553/677220180*ep2 + 836/169305045*ep2^2 - 8360/1794633477*ep2^3 + 608/138048729*ep2^4 - 192/46016243*ep2^5 + 1536/387851191*ep2^6 - 3072/815824919*ep2^7) * k2^22
-        - (4807/864536400 - 4807/918569925*ep2 + 9614/1947368241*ep2^2 - 3496/748987785*ep2^3 + 368/83220865*ep2^4 - 2944/701433005*ep2^5 + 5888/1475428045*ep2^6) * k2^23
-        + (9614/1743408225 - 19228/3696025437*ep2 + 6992/1421548245*ep2^2 - 736/157949805*ep2^3 + 41216/9319038495*ep2^4 - 82432/19602115455*ep2^5) * k2^24
-        - (6325/1159537392 - 115/22298796*ep2 + 115/23537618*ep2^2 - 3220/694359731*ep2^3 + 6440/1460549779*ep2^4) * k2^25
-        + (23/4272048 - 23/4509384*ep2 + 161/33256707*ep2^2 - 322/69953763*ep2^3) * k2^26
-        - (345/65044448 - 345/68528972*ep2 + 345/72073574*ep2^2) * k2^27
-        + (207/39674668 - 207/41726806*ep2) * k2^28
-        - 29/5657872 * k2^29;
-C4[7] = + (1/26254800 - 1/31177575*ep2 + 2/72747675*ep2^2 - 8/334639305*ep2^3 + 16/760543875*ep2^4 - 128/6844894875*ep2^5 + 256/15269380875*ep2^6 - 1024/67621543875*ep2^7 + 2048/148767396525*ep2^8 - 65536/5206858878375*ep2^9 + 131072/11332575205875*ep2^10 - 524288/49107825892125*ep2^11 + 1048576/105969519030375*ep2^12 - 8388608/911337863661225*ep2^13 + 16777216/1952866850702625*ep2^14 - 67108864/8344067453002125*ep2^15 + 134217728/17776491530308875*ep2^16 - 2147483648/302200356015250875* [...]
-        - (1/7335900 - 1/8558550*ep2 + 2/19684665*ep2^2 - 4/44737875*ep2^3 + 32/402640875*ep2^4 - 64/898198875*ep2^5 + 256/3977737875*ep2^6 - 512/8751023325*ep2^7 + 16384/306285816375*ep2^8 - 557056/11332575205875*ep2^9 + 2228224/49107825892125*ep2^10 - 4456448/105969519030375*ep2^11 + 35651584/911337863661225*ep2^12 - 71303168/1952866850702625*ep2^13 + 285212672/8344067453002125*ep2^14 - 570425344/17776491530308875*ep2^15 + 536870912/17776491530308875*ep2^16 - 1073741824/376861620442548 [...]
-        + (1/3403400 - 1/3913910*ep2 + 1/4447625*ep2^2 - 8/40028625*ep2^3 + 16/89294625*ep2^4 - 64/395447625*ep2^5 + 128/869984775*ep2^6 - 4096/30449467125*ep2^7 + 8192/66272369625*ep2^8 - 32768/287180268375*ep2^9 + 1245184/11774391003375*ep2^10 - 9961472/101259762629025*ep2^11 + 19922944/216985205633625*ep2^12 - 79691776/927118605889125*ep2^13 + 159383552/1975165725589875*ep2^14 - 2550136832/33577817335027875*ep2^15 + 5100273664/71184972750259095*ep2^16 - 20401094656/301167192404942325* [...]
-        - (1/2012868 - 1/2287350*ep2 + 4/10293075*ep2^2 - 8/22961475*ep2^3 + 224/711805725*ep2^4 - 448/1565972595*ep2^5 + 2048/7829862975*ep2^6 - 4096/17041466475*ep2^7 + 16384/73846354725*ep2^8 - 622592/3027700543725*ep2^9 + 4980736/26038224676035*ep2^10 - 69730304/390573370140525*ep2^11 + 278921216/1668813490600425*ep2^12 - 79691776/507899758008825*ep2^13 + 1275068416/8634295886150025*ep2^14 - 2550136832/18304707278638053*ep2^15 + 10200547328/77442992332699455*ep2^16 - 1073741824/86047 [...]
-        + (11/15116400 - 11/17005950*ep2 + 11/18968175*ep2^2 - 308/588013425*ep2^3 + 56/117602685*ep2^4 - 256/588013425*ep2^5 + 512/1279793925*ep2^6 - 2048/5545773675*ep2^7 + 4096/11967195825*ep2^8 - 32768/102917884095*ep2^9 + 458752/1543768261425*ep2^10 - 20185088/72557108286975*ep2^11 + 132644864/507899758008825*ep2^12 - 2122317824/8634295886150025*ep2^13 + 4244635648/18304707278638053*ep2^14 - 1543503872/7040272030245405*ep2^15 + 3087007744/14862796508295855*ep2^16 - 24696061952/12527 [...]
-        - (11/11337300 - 11/12645450*ep2 + 154/196004475*ep2^2 - 28/39200895*ep2^3 + 128/196004475*ep2^4 - 256/426597975*ep2^5 + 1024/1848591225*ep2^6 - 2048/3989065275*ep2^7 + 16384/34305961365*ep2^8 - 229376/514589420475*ep2^9 + 10092544/24185702762325*ep2^10 - 66322432/169299919336275*ep2^11 + 1061158912/2878098628716675*ep2^12 - 2122317824/6101569092879351*ep2^13 + 771751936/2346757343415135*ep2^14 - 1543503872/4954265502765285*ep2^15 + 12348030976/41757380666164545*ep2^16 - 24696061 [...]
-        + (143/118024200 - 143/130669650*ep2 + 13/13066965*ep2^2 - 416/457343775*ep2^3 + 832/995395275*ep2^4 - 256/331798425*ep2^5 + 512/715986075*ep2^6 - 4096/6157480245*ep2^7 + 8192/13194600525*ep2^8 - 360448/620146224675*ep2^9 + 16580608/30387165009075*ep2^10 - 265289728/516581805154275*ep2^11 + 530579456/1095153426927063*ep2^12 - 2508193792/5475767134635315*ep2^13 + 5016387584/11559952839785665*ep2^14 - 40131100672/97433888221050605*ep2^15 + 80262201344/204947144189106445*ep2^16) * k2^13
-        - (13/9011700 - 13/9912870*ep2 + 208/173475225*ep2^2 - 416/377563725*ep2^3 + 128/125854575*ep2^4 - 256/271580925*ep2^5 + 2048/2335595955*ep2^6 - 4096/5004848475*ep2^7 + 16384/21384352575*ep2^8 - 753664/1047833276175*ep2^9 + 12058624/17813165694975*ep2^10 - 24117248/37763911273347*ep2^11 + 1254096896/2077015120034085*ep2^12 - 2508193792/4384809697849735*ep2^13 + 20065550336/36957681739019195*ep2^14 - 1163801919488/2254418586080170895*ep2^15) * k2^14
-        + (13/7845024 - 13/8580495*ep2 + 26/18675195*ep2^2 - 8/6225065*ep2^3 + 16/13433035*ep2^4 - 128/115524101*ep2^5 + 256/247551645*ep2^6 - 1024/1057720665*ep2^7 + 2048/2253404895*ep2^8 - 32768/38307883215*ep2^9 + 327680/406063562079*ep2^10 - 3407872/4466699182869*ep2^11 + 20447232/28289094824837*ep2^12 - 163577856/238436656380769*ep2^13 + 9487515648/14544636039226909*ep2^14) * k2^15
-        - (13/7020405 - 26/15279705*ep2 + 8/5093235*ep2^2 - 16/10990665*ep2^3 + 128/94519719*ep2^4 - 256/202542255*ep2^5 + 11264/9519485985*ep2^6 - 22528/20280644055*ep2^7 + 360448/344770948935*ep2^8 - 3604480/3654572058711*ep2^9 + 3407872/3654572058711*ep2^10 - 6815744/7715207679501*ep2^11 + 54525952/65028179012937*ep2^12 - 3162505216/3966718919789157*ep2^13) * k2^16
-        + (221/109140750 - 34/18190125*ep2 + 68/39252375*ep2^2 - 544/337570425*ep2^3 + 7616/5063556375*ep2^4 - 335104/237987149625*ep2^5 + 95744/72430871625*ep2^6 - 90112/72430871625*ep2^7 + 180224/153553447845*ep2^8 - 851968/767767239225*ep2^9 + 1703936/1620841949475*ep2^10 - 13631488/13661382145575*ep2^11 + 790626304/833344310880075*ep2^12) * k2^17
-        - (17/7811375 - 34/16856125*ep2 + 272/144962675*ep2^2 - 3808/2174440125*ep2^3 + 15232/9290789625*ep2^4 - 4352/2827631625*ep2^5 + 4096/2827631625*ep2^6 - 8192/5994579045*ep2^7 + 32768/25361680575*ep2^8 - 196608/160623976975*ep2^9 + 1572864/1353830663075*ep2^10 - 91226112/82583670447575*ep2^11) * k2^18
-        + (323/140035500 - 646/301076325*ep2 + 9044/4516144875*ep2^2 - 36176/19296255375*ep2^3 + 10336/5872773375*ep2^4 - 9728/5872773375*ep2^5 + 19456/12450279555*ep2^6 - 1011712/684765375525*ep2^7 + 106496/76085041725*ep2^8 - 851968/641288208825*ep2^9 + 49414144/39118580738325*ep2^10) * k2^19
-        - (323/133648515 - 646/286389675*ep2 + 2584/1223664975*ep2^2 - 5168/2606938425*ep2^3 + 4864/2606938425*ep2^4 - 9728/5526709461*ep2^5 + 38912/23382232335*ep2^6 - 4096/2598025815*ep2^7 + 32768/21897646155*ep2^8 - 1900544/1335756415455*ep2^9) * k2^20
-        + (323/128764350 - 646/275087475*ep2 + 1292/586055925*ep2^2 - 1216/586055925*ep2^3 + 2432/1242438561*ep2^4 - 9728/5256470835*ep2^5 + 1024/584052315*ep2^6 - 8192/4922726655*ep2^7 + 16384/10354700895*ep2^8) * k2^21
-        - (3553/1375437375 - 7106/2930279625*ep2 + 6688/2930279625*ep2^2 - 13376/6212192805*ep2^3 + 4864/2389304925*ep2^4 - 512/265478325*ep2^5 + 4096/2237603025*ep2^6 - 8192/4706682225*ep2^7) * k2^22
-        + (81719/30923802000 - 4807/1932737625*ep2 + 9614/4097403765*ep2^2 - 3496/1575924525*ep2^3 + 368/175102725*ep2^4 - 2944/1475865825*ep2^5 + 5888/3104407425*ep2^6) * k2^23
-        - (4807/1788111000 - 4807/1895397660*ep2 + 437/182249775*ep2^2 - 46/20249975*ep2^3 + 2576/1194748525*ep2^4 - 5152/2513091725*ep2^5) * k2^24
-        + (2185/802756656 - 437/169813908*ep2 + 23/9434106*ep2^2 - 644/278306127*ep2^3 + 1288/585402543*ep2^4) * k2^25
-        - (299/108937224 - 299/114989292*ep2 + 4186/1696092057*ep2^2 - 8372/3567641913*ep2^3) * k2^26
-        + (897/325222240 - 897/342644860*ep2 + 897/360367870*ep2^2) * k2^27
-        - (299/108203640 - 299/113800380*ep2) * k2^28
-        + 8671/3140118960 * k2^29;
-C4[8] = + (1/141338340 - 1/164894730*ep2 + 2/379257879*ep2^2 - 4/861949725*ep2^3 + 32/7757547525*ep2^4 - 64/17305298325*ep2^5 + 256/76637749725*ep2^6 - 512/168603049395*ep2^7 + 16384/5901106728825*ep2^8 - 32768/12843585233325*ep2^9 + 131072/55655536011075*ep2^10 - 262144/120098788234425*ep2^11 + 2097152/1032849578816055*ep2^12 - 4194304/2213249097462975*ep2^13 + 16777216/9456609780069075*ep2^14 - 33554432/20146690401016725*ep2^15 + 536870912/342493736817284325*ep2^16 - 1073741824/7260867 [...]
-        - (1/34714680 - 1/39921882*ep2 + 1/45365775*ep2^2 - 8/408291975*ep2^3 + 16/910805175*ep2^4 - 64/4033565775*ep2^5 + 128/8873844705*ep2^6 - 4096/310584564675*ep2^7 + 8192/675978170175*ep2^8 - 32768/2929238737425*ep2^9 + 1245184/120098788234425*ep2^10 - 9961472/1032849578816055*ep2^11 + 19922944/2213249097462975*ep2^12 - 79691776/9456609780069075*ep2^13 + 159383552/20146690401016725*ep2^14 - 2550136832/342493736817284325*ep2^15 + 5100273664/726086722052642769*ep2^16 - 20401094656/30 [...]
-        + (5/72239596 - 1/16418090*ep2 + 4/73881405*ep2^2 - 8/164812365*ep2^3 + 224/5109183315*ep2^4 - 448/11240203293*ep2^5 + 2048/56201016465*ep2^6 - 4096/122319859365*ep2^7 + 16384/530052723915*ep2^8 - 32768/1143797983185*ep2^9 + 262144/9836662655391*ep2^10 - 3670016/147549939830865*ep2^11 + 14680064/630440652004605*ep2^12 - 4194304/191873241914445*ep2^13 + 67108864/3261845112545565*ep2^14 - 671088640/34575558192982989*ep2^15 + 536870912/29256241547908683*ep2^16 - 1073741824/617631766 [...]
-        - (11/85659600 - 11/96367050*ep2 + 11/107486325*ep2^2 - 308/3332076075*ep2^3 + 56/666415215*ep2^4 - 256/3332076075*ep2^5 + 512/7252165575*ep2^6 - 2048/31426050825*ep2^7 + 4096/67814109675*ep2^8 - 32768/583201343205*ep2^9 + 458752/8748020148075*ep2^10 - 20185088/411156946959525*ep2^11 + 132644864/2878098628716675*ep2^12 - 2122317824/48927676688183475*ep2^13 + 4244635648/103726674578948967*ep2^14 - 1543503872/39894874838057295*ep2^15 + 3087007744/84222513547009845*ep2^16 - 24696061 [...]
-        + (11/53965548 - 11/60192342*ep2 + 22/133283043*ep2^2 - 20/133283043*ep2^3 + 128/932981301*ep2^4 - 256/2030606361*ep2^5 + 1024/8799294231*ep2^6 - 2048/18987950709*ep2^7 + 81920/816481880487*ep2^8 - 32768/349920805923*ep2^9 + 1441792/16446277878381*ep2^10 - 66322432/805867616040669*ep2^11 + 1061158912/13699749472691373*ep2^12 - 53057945600/726086722052642769*ep2^13 + 3858759680/55852824773280213*ep2^14 - 7717519360/117911518965813783*ep2^15 + 61740154880/993825659854716171*ep2^16  [...]
-        - (13/44586920 - 13/49364090*ep2 + 13/54300499*ep2^2 - 416/1900517465*ep2^3 + 832/4136420365*ep2^4 - 768/4136420365*ep2^5 + 1536/8925959735*ep2^6 - 12288/76763253721*ep2^7 + 8192/54830895515*ep2^8 - 32768/234277462655*ep2^9 + 1507328/11479595670095*ep2^10 - 24117248/195153126391615*ep2^11 + 241172480/2068623139751119*ep2^12 - 2508193792/22754854537262309*ep2^13 + 45147488256/432342236207983871*ep2^14 - 361179906048/3644027419467292627*ep2^15 + 722359812096/7665023192672581043*ep2 [...]
-        + (91/234904980 - 91/258395478*ep2 + 208/645988695*ep2^2 - 416/1405975395*ep2^3 + 128/468658465*ep2^4 - 256/1011315635*ep2^5 + 2048/8697314461*ep2^6 - 28672/130459716915*ep2^7 + 114688/557418790455*ep2^8 - 32768/169649197095*ep2^9 + 524288/2884036350615*ep2^10 - 5242880/30570785316519*ep2^11 + 54525952/336278638481709*ep2^12 - 327155712/2129764710384157*ep2^13 + 2617245696/17950873987523609*ep2^14 - 151800250368/1095003313238940149*ep2^15) * k2^14
-        - (65/133365408 - 13/29173683*ep2 + 26/63495663*ep2^2 - 8/21165221*ep2^3 + 16/45672319*ep2^4 - 640/1963909717*ep2^5 + 256/841675593*ep2^6 - 1024/3596250261*ep2^7 + 2048/7661576643*ep2^8 - 32768/130246802931*ep2^9 + 1638400/6903080555343*ep2^10 - 17039360/75933886108773*ep2^11 + 102236160/480914612022229*ep2^12 - 817889280/4053423158473073*ep2^13 + 47437578240/247258812666857453*ep2^14) * k2^15
-        + (13/22101275 - 26/48102775*ep2 + 24/48102775*ep2^2 - 48/103800725*ep2^3 + 384/892686235*ep2^4 - 256/637633025*ep2^5 + 11264/29968752175*ep2^6 - 22528/63846472025*ep2^7 + 360448/1085390024425*ep2^8 - 720896/2301026851781*ep2^9 + 3407872/11505134258905*ep2^10 - 61341696/218597550919195*ep2^11 + 490733568/1842465072033215*ep2^12 - 28462546944/112390369394026115*ep2^13) * k2^16
-        - (1/1455210 - 2/3152955*ep2 + 4/6803745*ep2^2 - 32/58512207*ep2^3 + 448/877683105*ep2^4 - 19712/41251105935*ep2^5 + 5632/12554684415*ep2^6 - 90112/213429635055*ep2^7 + 901120/2262354131583*ep2^8 - 65536/174027240891*ep2^9 + 131072/367390841881*ep2^10 - 1048576/3096579952997*ep2^11 + 60817408/188891377132817*ep2^12) * k2^17
-        + (1/1278225 - 2/2758275*ep2 + 16/23721165*ep2^2 - 224/355817475*ep2^3 + 9856/16723421325*ep2^4 - 2816/5089736925*ep2^5 + 45056/86525527725*ep2^6 - 90112/183434118777*ep2^7 + 32768/70551584145*ep2^8 - 65536/148942233195*ep2^9 + 524288/1255370251215*ep2^10 - 30408704/76577585324115*ep2^11) * k2^18
-        - (19/21783300 - 38/46834095*ep2 + 76/100358775*ep2^2 - 304/428805675*ep2^3 + 608/913542525*ep2^4 - 9728/15530222925*ep2^5 + 19456/32924072601*ep2^6 - 1011712/1810823993055*ep2^7 + 106496/201202665895*ep2^8 - 851968/1695851041115*ep2^9 + 49414144/103446913508015*ep2^10) * k2^19
-        + (19/19875933 - 38/42591285*ep2 + 152/181980945*ep2^2 - 304/387698535*ep2^3 + 4864/6590875095*ep2^4 - 48640/69863276007*ep2^5 + 505856/768496036077*ep2^6 - 53248/85388448453*ep2^7 + 425984/719702636961*ep2^8 - 851968/1513857270849*ep2^9) * k2^20
-        - (133/128764350 - 266/275087475*ep2 + 76/83722275*ep2^2 - 1216/1423278675*ep2^3 + 2432/3017350791*ep2^4 - 9728/12765714885*ep2^5 + 1024/1418412765*ep2^6 - 8192/11955193305*ep2^7 + 16384/25147130745*ep2^8) * k2^21
-        + (209/189504705 - 418/403727415*ep2 + 6688/6863366055*ep2^2 - 66880/72751680183*ep2^3 + 4864/5596283091*ep2^4 - 1536/1865427697*ep2^5 + 12288/15722890589*ep2^6 - 24576/33072287101*ep2^7) * k2^22
-        - (4807/4123173600 - 4807/4380871950*ep2 + 4807/4643724267*ep2^2 - 1748/1786047795*ep2^3 + 184/198449755*ep2^4 - 1472/1672647935*ep2^5 + 2944/3518328415*ep2^6) * k2^23
-        + (437/357622200 - 437/379079532*ep2 + 437/400949505*ep2^2 - 46/44549945*ep2^3 + 2576/2628446755*ep2^4 - 5152/5528801795*ep2^5) * k2^24
-        - (10925/8592469392 - 2185/1817637756*ep2 + 345/302939626*ep2^2 - 9660/8936718967*ep2^3 + 19320/18797926103*ep2^4) * k2^25
-        + (5681/4321176552 - 299/240065364*ep2 + 598/505852017*ep2^2 - 1196/1064033553*ep2^3) * k2^26
-        - (1495/1105755616 - 1495/1164992524*ep2 + 1495/1225250758*ep2^2) * k2^27
-        + (6279/4537339304 - 6279/4772029268*ep2) * k2^28
-        - 8671/6147020752 * k2^29;
-C4[9] = + (1/737176440 - 1/847752906*ep2 + 1/963355575*ep2^2 - 8/8670200175*ep2^3 + 16/19341215775*ep2^4 - 64/85653955575*ep2^5 + 128/188438702265*ep2^6 - 4096/6595354579275*ep2^7 + 8192/14354595260775*ep2^8 - 32768/62203246130025*ep2^9 + 65536/134228057438475*ep2^10 - 524288/1154361293970885*ep2^11 + 1048576/2473631344223325*ep2^12 - 4194304/10569152107136025*ep2^13 + 8388608/22516889271724575*ep2^14 - 134217728/382787117619317775*ep2^15 + 268435456/811508689352953683*ep2^16 - 107374182 [...]
-        - (1/161476744 - 1/183496300*ep2 + 2/412866675*ep2^2 - 4/921010275*ep2^3 + 112/28551318525*ep2^4 - 224/62812900755*ep2^5 + 1024/314064503775*ep2^6 - 2048/683552155275*ep2^7 + 8192/2962059339525*ep2^8 - 16384/6391812258975*ep2^9 + 131072/54969585427185*ep2^10 - 1835008/824543781407775*ep2^11 + 7340032/3523050702378675*ep2^12 - 2097152/1072232822463075*ep2^13 + 33554432/18227957981872275*ep2^14 - 67108864/38643270921569223*ep2^15 + 268435456/163490761591254405*ep2^16 - 536870912/34 [...]
-        + (11/670160400 - 11/753930450*ep2 + 11/840922425*ep2^2 - 44/3724085025*ep2^3 + 8/744817005*ep2^4 - 256/26068595175*ep2^5 + 512/56737530675*ep2^6 - 2048/245862632925*ep2^7 + 4096/530545681575*ep2^8 - 32768/4562692861545*ep2^9 + 65536/9777198989025*ep2^10 - 2883584/459528352484175*ep2^11 + 132644864/22516889271724575*ep2^12 - 2122317824/382787117619317775*ep2^13 + 4244635648/811508689352953683*ep2^14 - 1543503872/312118726674212955*ep2^15 + 3087007744/658917311867782905*ep2^16 - 2 [...]
-        - (1/30157218 - 1/33636897*ep2 + 4/148963401*ep2^2 - 40/1638597411*ep2^3 + 256/11470181877*ep2^4 - 512/24964513497*ep2^5 + 2048/108179558487*ep2^6 - 4096/233440099893*ep2^7 + 163840/10037924295399*ep2^8 - 65536/4301967555171*ep2^9 + 262144/18381134099367*ep2^10 - 12058624/900675570868983*ep2^11 + 192937984/15311484704772711*ep2^12 - 9646899200/811508689352953683*ep2^13 + 7717519360/686661198683268501*ep2^14 - 15435038720/1449618086109122391*ep2^15 + 123480309760/12218209582919745 [...]
-        + (13/229229224 - 13/253789498*ep2 + 65/1395842239*ep2^2 - 416/9770895673*ep2^3 + 832/21266067053*ep2^4 - 768/21266067053*ep2^5 + 1536/45889934167*ep2^6 - 61440/1973267169181*ep2^7 + 8192/281895309883*ep2^8 - 32768/1204461778591*ep2^9 + 65536/2566027267433*ep2^10 - 1048576/43622463546361*ep2^11 + 52428800/2311990567957133*ep2^12 - 545259520/25431896247528463*ep2^13 + 9814671360/483206028703040797*ep2^14 - 78517370880/4072736527639915289*ep2^15 + 157034741760/8566790627104649401*e [...]
-        - (91/1050163440 - 91/1155179784*ep2 + 52/721987365*ep2^2 - 104/1571384265*ep2^3 + 32/523794755*ep2^4 - 64/1130293945*ep2^5 + 512/9720527927*ep2^6 - 7168/145807918905*ep2^7 + 28672/622997471685*ep2^8 - 8192/189607926165*ep2^9 + 131072/3223334744805*ep2^10 - 1310720/34167348294933*ep2^11 + 13631488/375840831244263*ep2^12 - 81788928/2380325264546999*ep2^13 + 654311424/20062741515467563*ep2^14 - 37950062592/1223827232443521343*ep2^15) * k2^14
-        + (91/745277280 - 13/116449575*ep2 + 26/253449075*ep2^2 - 8/84483025*ep2^3 + 16/182305475*ep2^4 - 128/1567827085*ep2^5 + 1792/23517406275*ep2^6 - 7168/100483463175*ep2^7 + 2048/30581923575*ep2^8 - 32768/519892700775*ep2^9 + 65536/1102172525643*ep2^10 - 3407872/60619488910365*ep2^11 + 20447232/383923429765645*ep2^12 - 163577856/3235926050881865*ep2^13 + 9487515648/197391489103793765*ep2^14) * k2^15
-        - (4/24701425 - 8/53761925*ep2 + 96/698905025*ep2^2 - 192/1508163475*ep2^3 + 1536/12970205885*ep2^4 - 1024/9264432775*ep2^5 + 45056/435428340425*ep2^6 - 90112/927651681775*ep2^7 + 1441792/15770078590175*ep2^8 - 2883584/33432566611171*ep2^9 + 1048576/12858679465835*ep2^10 - 18874368/244314909850865*ep2^11 + 150994944/2059225668743005*ep2^12 - 8757706752/125612765793323305*ep2^13) * k2^16
-        + (17/82946970 - 34/179718435*ep2 + 68/387813465*ep2^2 - 544/3335195799*ep2^3 + 7616/50027936985*ep2^4 - 335104/2351313038295*ep2^5 + 95744/715617011655*ep2^6 - 90112/715617011655*ep2^7 + 901120/7585540323543*ep2^8 - 65536/583503101811*ep2^9 + 131072/1231839881601*ep2^10 - 1048576/10382650430637*ep2^11 + 60817408/633341676268857*ep2^12) * k2^17
-        - (17/68001570 - 17/73370115*ep2 + 136/630982989*ep2^2 - 272/1352106405*ep2^3 + 11968/63549001035*ep2^4 - 23936/135387002205*ep2^5 + 22528/135387002205*ep2^6 - 225280/1435102223373*ep2^7 + 16384/110392478721*ep2^8 - 32768/233050788411*ep2^9 + 262144/1964285216607*ep2^10 - 15204352/119821398213027*ep2^11) * k2^18
-        + (17/57428700 - 34/123471705*ep2 + 68/264582225*ep2^2 - 2992/12435364575*ep2^3 + 5984/26492733225*ep2^4 - 5632/26492733225*ep2^5 + 11264/56164594437*ep2^6 - 53248/280822972185*ep2^7 + 106496/592848496835*ep2^8 - 851968/4996865901895*ep2^9 + 1703936/10510648966055*ep2^10) * k2^19
-        - (34/99379665 - 68/212956425*ep2 + 272/909904725*ep2^2 - 544/1938492675*ep2^3 + 512/1938492675*ep2^4 - 1024/4109604471*ep2^5 + 53248/226028245905*ep2^6 - 106496/477170741355*ep2^7 + 851968/4021867677135*ep2^8 - 1703936/8459790631215*ep2^9) * k2^20
-        + (119/307053450 - 238/655977825*ep2 + 68/199645425*ep2^2 - 64/199645425*ep2^3 + 128/423248301*ep2^4 - 6656/23278656555*ep2^5 + 13312/49143830505*ep2^6 - 106496/414212285685*ep2^7 + 212992/871274118165*ep2^8) * k2^21
-        - (1309/3032075280 - 187/461402760*ep2 + 22/57675345*ep2^2 - 220/611358657*ep2^3 + 16/47027589*ep2^4 - 96/297841397*ep2^5 + 768/2510377489*ep2^6 - 1536/5280449201*ep2^7) * k2^22
-        + (391/824634720 - 23/51539670*ep2 + 115/273160251*ep2^2 - 92/231135597*ep2^3 + 184/487952927*ep2^4 - 1472/4112746099*ep2^5 + 2944/8650948691*ep2^6) * k2^23
-        - (23/44702775 - 46/94769883*ep2 + 184/400949505*ep2^2 - 368/846448955*ep2^3 + 20608/49940488345*ep2^4 - 41216/105047234105*ep2^5) * k2^24
-        + (115/208122096 - 23/44025828*ep2 + 69/139415122*ep2^2 - 276/587535157*ep2^3 + 552/1235849813*ep2^4) * k2^25
-        - (299/508373712 - 299/536616696*ep2 + 299/565364019*ep2^2 - 598/1189213971*ep2^3) * k2^26
-        + (1495/2406644576 - 1495/2535571964*ep2 + 1495/2666722238*ep2^2) * k2^27
-        - (31395/48175867316 - 31395/50667722522*ep2) * k2^28
-        + 4669/6870199664 * k2^29;
-C4[10] = + (1/3747960216 - 1/4259045700*ep2 + 2/9582852825*ep2^2 - 4/21377133225*ep2^3 + 16/94670161425*ep2^4 - 32/208274355135*ep2^5 + 1024/7289602429725*ep2^6 - 2048/15865605288225*ep2^7 + 8192/68750956248975*ep2^8 - 16384/148357326642525*ep2^9 + 131072/1275873009125715*ep2^10 - 262144/2734013590983675*ep2^11 + 1048576/11681694434202975*ep2^12 - 2097152/24887088142432425*ep2^13 + 33554432/423080498421351225*ep2^14 - 67108864/896930656653264597*ep2^15 + 268435456/3794706624302273295*ep2 [...]
-        - (1/740703600 - 1/833291550*ep2 + 1/929440575*ep2^2 - 4/4116093975*ep2^3 + 8/9055406745*ep2^4 - 256/316939236075*ep2^5 + 512/689808925575*ep2^6 - 2048/2989172010825*ep2^7 + 4096/6450318549675*ep2^8 - 32768/55472739527205*ep2^9 + 65536/118870156129725*ep2^10 - 262144/507899758008825*ep2^11 + 12058624/24887088142432425*ep2^12 - 192937984/423080498421351225*ep2^13 + 385875968/896930656653264597*ep2^14 - 1543503872/3794706624302273295*ep2^15 + 3087007744/8011047317971465845*ep2^16 - [...]
-        + (1/255542742 - 1/285028443*ep2 + 4/1262268819*ep2^2 - 40/13884957009*ep2^3 + 256/97194699063*ep2^4 - 512/211541403843*ep2^5 + 2048/916679416653*ep2^6 - 4096/1978097688567*ep2^7 + 163840/85058200608381*ep2^8 - 65536/36453514546449*ep2^9 + 262144/155755925789373*ep2^10 - 524288/331827841899099*ep2^11 + 8388608/5641073312284683*ep2^12 - 419430400/298976885551088199*ep2^13 + 335544320/252980441620151553*ep2^14 - 671088640/534069821198097723*ep2^15 + 5368709120/4501445635812537951*e [...]
-        - (13/1520151696 - 13/1683025092*ep2 + 65/9256638006*ep2^2 - 208/32398233021*ep2^3 + 416/70513801281*ep2^4 - 128/23504600427*ep2^5 + 256/50720453553*ep2^6 - 10240/2180979502779*ep2^7 + 4096/934705501191*ep2^8 - 16384/3993741686907*ep2^9 + 32768/8508406202541*ep2^10 - 524288/144642905443197*ep2^11 + 26214400/7666073988489441*ep2^12 - 272629760/84326813873383851*ep2^13 + 545259520/178023273732699241*ep2^14 - 4362076160/1500481878604179317*ep2^15 + 8724152320/3156186020512239253*ep2 [...]
-        + (13/829076400 - 13/911984040*ep2 + 52/3989930175*ep2^2 - 104/8683965675*ep2^3 + 32/2894655225*ep2^4 - 64/6246361275*ep2^5 + 512/53718706965*ep2^6 - 1024/115111514925*ep2^7 + 4096/491840109225*ep2^8 - 8192/1047833276175*ep2^9 + 131072/17813165694975*ep2^10 - 262144/37763911273347*ep2^11 + 13631488/2077015120034085*ep2^12 - 27262976/4384809697849735*ep2^13 + 218103808/36957681739019195*ep2^14 - 12650020864/2254418586080170895*ep2^15) * k2^14
-        - (1/39225120 - 1/42902475*ep2 + 2/93375975*ep2^2 - 8/404629225*ep2^3 + 16/873147275*ep2^4 - 128/7509066565*ep2^5 + 256/16090856925*ep2^6 - 1024/68751843225*ep2^7 + 2048/146471318175*ep2^8 - 32768/2490012408975*ep2^9 + 65536/5278826307027*ep2^10 - 262144/22333495914345*ep2^11 + 1572864/141445474124185*ep2^12 - 12582912/1192183281903845*ep2^13 + 729808896/72723180196134545*ep2^14) * k2^15
-        + (4/105306075 - 8/229195575*ep2 + 32/993180825*ep2^2 - 64/2143179675*ep2^3 + 512/18431345205*ep2^4 - 1024/39495739725*ep2^5 + 45056/1856299767075*ep2^6 - 90112/3954725590725*ep2^7 + 1441792/67230335042325*ep2^8 - 2883584/142528310289729*ep2^9 + 1048576/54818580880665*ep2^10 - 2097152/115728115192515*ep2^11 + 16777216/975422685194055*ep2^12 - 973078528/59500783796837355*ep2^13) * k2^16
-        - (17/320873805 - 68/1390453155*ep2 + 136/3000451545*ep2^2 - 1088/25803883287*ep2^3 + 2176/55294035615*ep2^4 - 95744/2598819673905*ep2^5 + 191488/5536615827015*ep2^6 - 180224/5536615827015*ep2^7 + 1802240/58688127766359*ep2^8 - 131072/4514471366643*ep2^9 + 262144/9530550662913*ep2^10 - 2097152/80328927015981*ep2^11 + 121634816/4900064547974841*ep2^12) * k2^17
-        + (17/242181030 - 17/261300585*ep2 + 136/2247185031*ep2^2 - 272/4815396495*ep2^3 + 11968/226323635265*ep2^4 - 23936/482167744695*ep2^5 + 22528/482167744695*ep2^6 - 225280/5110978093767*ep2^7 + 16384/393152161059*ep2^8 - 32768/829987895569*ep2^9 + 262144/6995612262653*ep2^10 - 524288/14714908552477*ep2^11) * k2^18
-        - (323/3618008100 - 646/7778717415*ep2 + 1292/16668680175*ep2^2 - 56848/783427968225*ep2^3 + 113696/1669042193175*ep2^4 - 107008/1669042193175*ep2^5 + 214016/3538369449531*ep2^6 - 1011712/17691847247655*ep2^7 + 106496/1965760805295*ep2^8 - 851968/16568555358915*ep2^9 + 1703936/34851099203235*ep2^10) * k2^19
-        + (646/5881469265 - 1292/12603148425*ep2 + 56848/592347975975*ep2^2 - 113696/1261958731425*ep2^3 + 107008/1261958731425*ep2^4 - 214016/2675352510621*ep2^5 + 1011712/13376762553105*ep2^6 - 106496/1486306950345*ep2^7 + 851968/12527444295765*ep2^8 - 1703936/26350831104885*ep2^9) * k2^20
-        - (323/2456427600 - 323/2623911300*ep2 + 323/2795035950*ep2^2 - 152/1397517975*ep2^3 + 304/2962738107*ep2^4 - 15808/162950595885*ep2^5 + 1664/18105621765*ep2^6 - 13312/152604526305*ep2^7 + 26624/320995727745*ep2^8) * k2^21
-        + (323/2099129040 - 323/2236028760*ep2 + 38/279503595*ep2^2 - 380/2962738107*ep2^3 + 3952/32590119177*ep2^4 - 416/3621124353*ep2^5 + 3328/30520905261*ep2^6 - 6656/64199145549*ep2^7) * k2^22
-        - (437/2473904160 - 437/2628523170*ep2 + 2185/13931172801*ep2^2 - 1748/11787915447*ep2^3 + 184/1309768383*ep2^4 - 1472/11039476371*ep2^5 + 2944/23220967539*ep2^6) * k2^23
-        + (437/2190435975 - 874/4643724267*ep2 + 3496/19646525745*ep2^2 - 368/2182947305*ep2^3 + 2944/18399127285*ep2^4 - 5888/38701612565*ep2^5) * k2^24
-        - (2185/9833769036 - 437/2080220373*ep2 + 46/231135597*ep2^2 - 368/1948142889*ep2^3 + 736/4097817801*ep2^4) * k2^25
-        + (5681/23235669072 - 299/1290870504*ep2 + 299/1360024281*ep2^2 - 598/2860740729*ep2^3) * k2^26
-        - (4485/16846512032 - 4485/17749003748*ep2 + 4485/18667055666*ep2^2) * k2^27
-        + (115/400353468 - 115/421061406*ep2) * k2^28
-        - 667/2169536736 * k2^29;
-C4[11] = + (1/18658676400 - 1/20991010950*ep2 + 1/23413050675*ep2^2 - 4/103686367275*ep2^3 + 8/228110008005*ep2^4 - 256/7983850280175*ep2^5 + 512/17376615315675*ep2^6 - 2048/75298666367925*ep2^7 + 4096/162486595846575*ep2^8 - 32768/1397384724280545*ep2^9 + 65536/2994395837744025*ep2^10 - 262144/12794236761269925*ep2^11 + 524288/27257287013140275*ep2^12 - 8388608/463373879223384675*ep2^13 + 16777216/982352623953575511*ep2^14 - 67108864/4156107255188204085*ep2^15 + 134217728/87740042053973 [...]
-        - (1/3358561752 - 1/3746088108*ep2 + 1/4147454691*ep2^2 - 10/45622001601*ep2^3 + 64/319354011207*ep2^4 - 128/695064612627*ep2^5 + 512/3011946654717*ep2^6 - 1024/6499463833863*ep2^7 + 40960/279476944856109*ep2^8 - 16384/119775833509761*ep2^9 + 65536/511769470450797*ep2^10 - 131072/1090291480525611*ep2^11 + 2097152/18534955168935387*ep2^12 - 104857600/982352623953575511*ep2^13 + 83886080/831221451037640817*ep2^14 - 167772160/1754800841079463947*ep2^15 + 1342177280/14790464231955481 [...]
-        + (13/13874400400 - 13/15360943300*ep2 + 13/16897037630*ep2^2 - 208/295698158525*ep2^3 + 416/643578345025*ep2^4 - 384/643578345025*ep2^5 + 768/1388774323475*ep2^6 - 6144/11943459181885*ep2^7 + 4096/8531042272775*ep2^8 - 16384/36450816983675*ep2^9 + 32768/77656088356525*ep2^10 - 524288/1320153502060925*ep2^11 + 1048576/2798725424369161*ep2^12 - 54525952/153929898340303855*ep2^13 + 981467136/2924668068465773245*ep2^14 - 7851737088/24650773719925803065*ep2^15 + 15703474176/518516274 [...]
-        - (7/3178126200 - 7/3495938820*ep2 + 8/4369923525*ep2^2 - 16/9511010025*ep2^3 + 64/41214376775*ep2^4 - 128/88936286725*ep2^5 + 1024/764852065835*ep2^6 - 14336/11472780987525*ep2^7 + 57344/49020064219425*ep2^8 - 16384/14919149979825*ep2^9 + 262144/253625549657025*ep2^10 - 524288/537686165272893*ep2^11 + 2097152/2274826083846855*ep2^12 - 12582912/14407231864363415*ep2^13 + 100663296/121432382856777355*ep2^14 - 5838471168/7407375354263418655*ep2^15) * k2^14
-        + (7/1623919968 - 1/253737495*ep2 + 2/552252195*ep2^2 - 8/2393092845*ep2^3 + 16/5164042455*ep2^4 - 128/44410765113*ep2^5 + 1792/666161476695*ep2^6 - 7168/2846326309515*ep2^7 + 2048/866273224635*ep2^8 - 32768/14726644818795*ep2^9 + 327680/156102435079227*ep2^10 - 262144/132086675836269*ep2^11 + 524288/278849648987679*ep2^12 - 4194304/2350304184324723*ep2^13 + 243269632/143368555243808103*ep2^14) * k2^15
-        - (2/269115525 - 4/585722025*ep2 + 16/2538128775*ep2^2 - 32/5477014725*ep2^3 + 256/47102326635*ep2^4 - 512/100933557075*ep2^5 + 22528/4743877182525*ep2^6 - 45056/10106520954075*ep2^7 + 720896/171810856219275*ep2^8 - 1441792/364239015184863*ep2^9 + 524288/140091928917255*ep2^10 - 1048576/295749627714205*ep2^11 + 8388608/2492746862162585*ep2^12 - 486539264/152057558591917685*ep2^13) * k2^16
-        + (17/1455937605 - 68/6309062955*ep2 + 136/13614293745*ep2^2 - 1088/117082926207*ep2^3 + 15232/1756243893105*ep2^4 - 670208/82543462975935*ep2^5 + 191488/25121923514415*ep2^6 - 180224/25121923514415*ep2^7 + 1802240/266292389252799*ep2^8 - 131072/20484029942523*ep2^9 + 262144/43244063211993*ep2^10 - 2097152/364485675643941*ep2^11 + 4194304/766676766009669*ep2^12) * k2^17
-        - (34/1989344175 - 68/4292795325*ep2 + 544/36918039795*ep2^2 - 1088/79110085275*ep2^3 + 47872/3718174007925*ep2^4 - 95744/7921327234275*ep2^5 + 90112/7921327234275*ep2^6 - 180224/16793213736663*ep2^7 + 65536/6458928360255*ep2^8 - 131072/13635515427205*ep2^9 + 1048576/114927915743585*ep2^10 - 2097152/241744926219265*ep2^11) * k2^18
-        + (323/13648887700 - 646/29345108555*ep2 + 1292/62882375475*ep2^2 - 56848/2955471647325*ep2^3 + 113696/6296439596475*ep2^4 - 107008/6296439596475*ep2^5 + 214016/13348451944527*ep2^6 - 1011712/66742259722635*ep2^7 + 319488/22247419907545*ep2^8 - 2555904/187513967792165*ep2^9 + 5111808/394425932252485*ep2^10) * k2^19
-        - (323/10306574712 - 323/11042758620*ep2 + 3553/129752413785*ep2^2 - 7106/276429055455*ep2^3 + 6688/276429055455*ep2^4 - 66880/2930147987823*ep2^5 + 63232/2930147987823*ep2^6 - 6656/325571998647*ep2^7 + 53248/2744106845739*ep2^8 - 106496/5772086813451*ep2^9) * k2^20
-        + (2261/56497834800 - 2261/60349959900*ep2 + 323/9183689550*ep2^2 - 152/4591844775*ep2^3 + 304/9734710923*ep2^4 - 15808/535409100765*ep2^5 + 1664/59489900085*ep2^6 - 13312/501414872145*ep2^7 + 26624/1054700248305*ep2^8) * k2^21
-        - (133/2682220440 - 19/408163980*ep2 + 76/1734696915*ep2^2 - 760/18387787299*ep2^3 + 7904/202265660289*ep2^4 - 2496/67421886763*ep2^5 + 19968/568270188431*ep2^6 - 39936/1195326948079*ep2^7) * k2^22
-        + (19/317167200 - 19/336990150*ep2 + 19/357209559*ep2^2 - 988/19646525745*ep2^3 + 104/2182947305*ep2^4 - 832/18399127285*ep2^5 + 1664/38701612565*ep2^6) * k2^23
-        - (19/268216650 - 19/284309649*ep2 + 76/1202848515*ep2^2 - 8/133649835*ep2^3 + 448/7885340265*ep2^4 - 896/16586405385*ep2^5) * k2^24
-        + (475/5775388164 - 95/1221716727*ep2 + 10/135746303*ep2^2 - 80/1144147411*ep2^3 + 160/2406654899*ep2^4) * k2^25
-        - (13/138307554 - 13/145991307*ep2 + 104/1230498159*ep2^2 - 208/2588289231*ep2^3) * k2^26
-        + (15/141567328 - 15/149151292*ep2 + 15/156866014*ep2^2) * k2^27
-        - (63/533804624 - 63/561415208*ep2) * k2^28
-        + 203/1560543968 * k2^29;
-C4[12] = + (1/91265265000 - 1/101795872500*ep2 + 1/112702573125*ep2^2 - 2/247945660875*ep2^3 + 64/8678098130625*ep2^4 - 128/18887625343125*ep2^5 + 512/81846376486875*ep2^6 - 1024/176615865050625*ep2^7 + 8192/1518896439435375*ep2^8 - 16384/3254778084504375*ep2^9 + 65536/13906779088336875*ep2^10 - 131072/29627485883848125*ep2^11 + 2097152/503667260025418125*ep2^12 - 4194304/1067774591253886425*ep2^13 + 16777216/4517507886074134875*ep2^14 - 33554432/9536961092823173625*ep2^15 + 268435456/80 [...]
-        - (1/15080870000 - 1/16696677500*ep2 + 1/18366345250*ep2^2 - 16/321411041875*ep2^3 + 32/699541679375*ep2^4 - 384/9094041831875*ep2^5 + 768/19623985005625*ep2^6 - 6144/168766271048375*ep2^7 + 4096/120547336463125*ep2^8 - 16384/515065892160625*ep2^9 + 32768/1097314291994375*ep2^10 - 524288/18654342963904375*ep2^11 + 1048576/39547207083477275*ep2^12 - 4194304/167315106891634625*ep2^13 + 75497472/3178987030941057875*ep2^14 - 603979776/26794319260788916375*ep2^15 + 1207959552/56360464 [...]
-        + (7/31090365000 - 7/34199401500*ep2 + 8/42749251875*ep2^2 - 16/93042489375*ep2^3 + 64/403184120625*ep2^4 - 128/870028891875*ep2^5 + 1024/7482248470125*ep2^6 - 14336/112233727051875*ep2^7 + 57344/479544106494375*ep2^8 - 16384/145948206324375*ep2^9 + 262144/2481119507514375*ep2^10 - 524288/5259973355930475*ep2^11 + 2097152/22253733428936625*ep2^12 - 4194304/46980103905532875*ep2^13 + 33554432/395975161489491375*ep2^14 - 1946157056/24154484850858973875*ep2^15) * k2^14
-        - (1/1765130400 - 1/1930611375*ep2 + 2/4201918875*ep2^2 - 8/18208315125*ep2^3 + 16/39291627375*ep2^4 - 128/337907995425*ep2^5 + 256/724088561625*ep2^6 - 1024/3093832945125*ep2^7 + 2048/6591209317875*ep2^8 - 32768/112050558403875*ep2^9 + 65536/237547183816215*ep2^10 - 262144/1005007316145525*ep2^11 + 524288/2121682111862775*ep2^12 - 4194304/17882749228557675*ep2^13 + 243269632/1090847702942018175*ep2^14) * k2^15
-        + (2/1696597875 - 4/3692595375*ep2 + 16/16001246625*ep2^2 - 32/34529005875*ep2^3 + 256/296949450525*ep2^4 - 512/636320251125*ep2^5 + 22528/29907051802875*ep2^6 - 45056/63715023406125*ep2^7 + 720896/1083155397904125*ep2^8 - 1441792/2296289443556745*ep2^9 + 524288/883188247521825*ep2^10 - 1048576/1864508522546075*ep2^11 + 8388608/15715143261459775*ep2^12 - 16777216/33055990998242975*ep2^13) * k2^16
-        - (17/7912704375 - 68/34288385625*ep2 + 136/73990726875*ep2^2 - 1088/636320251125*ep2^3 + 15232/9544803766875*ep2^4 - 670208/448605777043125*ep2^5 + 191488/136532193013125*ep2^6 - 180224/136532193013125*ep2^7 + 360448/289448249187825*ep2^8 - 131072/111326249687625*ep2^9 + 262144/235022082673875*ep2^10 - 2097152/1980900411108375*ep2^11 + 4194304/4166721554400375*ep2^12) * k2^17
-        + (34/9576035625 - 68/20664076875*ep2 + 544/177711061125*ep2^2 - 7616/2665665916875*ep2^3 + 335104/125286298093125*ep2^4 - 95744/38130612463125*ep2^5 + 90112/38130612463125*ep2^6 - 180224/80836898421825*ep2^7 + 65536/31091114777625*ep2^8 - 131072/65636797863875*ep2^9 + 1048576/553224439138375*ep2^10 - 2097152/1163678992670375*ep2^11) * k2^18
-        - (323/59342990000 - 323/63793714250*ep2 + 323/68350408125*ep2^2 - 14212/3212469181875*ep2^3 + 28424/6843956083125*ep2^4 - 26752/6843956083125*ep2^5 + 53504/14509186896225*ep2^6 - 252928/72545934481125*ep2^7 + 79872/24181978160375*ep2^8 - 638976/203819530208875*ep2^9 + 1277952/428723839404875*ep2^10) * k2^19
-        + (323/41076928200 - 323/44010994500*ep2 + 323/47011744125*ep2^2 - 646/100155454875*ep2^3 + 608/100155454875*ep2^4 - 1216/212329564335*ep2^5 + 63232/11678126038425*ep2^6 - 6656/1297569559825*ep2^7 + 53248/10936657718525*ep2^8 - 106496/23004693821725*ep2^9) * k2^20
-        - (133/12282138000 - 133/13119556500*ep2 + 19/1996454250*ep2^2 - 152/16969861125*ep2^3 + 304/35976105585*ep2^4 - 15808/1978685807175*ep2^5 + 1664/219853978575*ep2^6 - 13312/1853054962275*ep2^7 + 26624/3897805265475*ep2^8) * k2^21
-        + (209/14577285000 - 209/15527977500*ep2 + 836/65993904375*ep2^2 - 1672/139907077275*ep2^3 + 7904/699535386375*ep2^4 - 2496/233178462125*ep2^5 + 19968/1965361323625*ep2^6 - 39936/4134035887625*ep2^7) * k2^22
-        - (437/23787540000 - 437/25274261250*ep2 + 437/26790716925*ep2^2 - 22724/1473489430875*ep2^3 + 2392/163721047875*ep2^4 - 19136/1379934546375*ep2^5 + 38272/2902620942375*ep2^6) * k2^23
-        + (437/19084646250 - 437/20229725025*ep2 + 22724/1112634876375*ep2^2 - 2392/123626097375*ep2^3 + 133952/7293939745125*ep2^4 - 267904/15342424981125*ep2^5) * k2^24
-        - (23/825055452 - 23/872654805*ep2 + 46/1842271255*ep2^2 - 2576/108694004045*ep2^3 + 5152/228632215405*ep2^4) * k2^25
-        + (23/691537770 - 23/729956535*ep2 + 184/6152490795*ep2^2 - 368/12941446155*ep2^3) * k2^26
-        - (69/1769591600 - 69/1864391150*ep2 + 69/1960825175*ep2^2) * k2^27
-        + (1449/32185278800 - 1449/33850034600*ep2) * k2^28
-        - 2001/39013599200 * k2^29;
-C4[13] = + (1/439758169200 - 1/486875115900*ep2 + 1/535562627490*ep2^2 - 16/9372345981075*ep2^3 + 32/20398635370575*ep2^4 - 128/88394086605825*ep2^5 + 256/190745134254675*ep2^6 - 2048/1640408154590205*ep2^7 + 4096/3515160331264725*ep2^8 - 16384/15019321415403825*ep2^9 + 32768/31997684754555975*ep2^10 - 524288/543960640827451575*ep2^11 + 1048576/1153196558554197339*ep2^12 - 4194304/4878908516960065665*ep2^13 + 8388608/10299917980249027515*ep2^14 - 67108864/86813594404956089055*ep2^15 + 13 [...]
-        - (1/67155188400 - 1/73870707240*ep2 + 4/323184344175*ep2^2 - 8/703401219675*ep2^3 + 32/3048071951925*ep2^4 - 64/6577418422575*ep2^5 + 512/56565798434145*ep2^6 - 1024/121212425216025*ep2^7 + 4096/517907635013925*ep2^8 - 8192/1103368439812275*ep2^9 + 131072/18757263476808675*ep2^10 - 262144/39765398570834391*ep2^11 + 1048576/168238224722760885*ep2^12 - 2097152/355169585525828535*ep2^13 + 16777216/2993572220860554795*ep2^14 - 973078528/182607905472493842495*ep2^15) * k2^14
-        + (1/18427961376 - 1/20155582755*ep2 + 2/43868033055*ep2^2 - 8/190094809905*ep2^3 + 16/410204589795*ep2^4 - 128/3527759472237*ep2^5 + 256/7559484583365*ep2^6 - 1024/32299615947105*ep2^7 + 2048/68812225278615*ep2^8 - 32768/1169807829736455*ep2^9 + 327680/12399962995206423*ep2^10 - 262144/10492276380559281*ep2^11 + 524288/22150361247847371*ep2^12 - 4194304/186695901946142127*ep2^13 + 8388608/392705173059126543*ep2^14) * k2^15
-        - (4/27484885575 - 8/59820045075*ep2 + 32/259220195325*ep2^2 - 64/559369895175*ep2^3 + 512/4810581098505*ep2^4 - 1024/10308388068225*ep2^5 + 45056/484494239206575*ep2^6 - 90112/1032183379179225*ep2^7 + 1441792/17547117446046825*ep2^8 - 2883584/37199888985619269*ep2^9 + 1048576/14307649609853565*ep2^10 - 2097152/30205038065246415*ep2^11 + 16777216/254585320835648355*ep2^12 - 33554432/535507054171536195*ep2^13) * k2^16
-        + (17/52983468495 - 68/229595030145*ep2 + 136/495441907155*ep2^2 - 1088/4260800401533*ep2^3 + 15232/63912006022995*ep2^4 - 670208/3003864283080765*ep2^5 + 191488/914219564415885*ep2^6 - 180224/914219564415885*ep2^7 + 1802240/9690727382808381*ep2^8 - 131072/745440567908337*ep2^9 + 262144/1573707865584267*ep2^10 - 2097152/13264109152781679*ep2^11 + 4194304/27900367528264911*ep2^12) * k2^17
-        - (17/27578982600 - 17/29756270700*ep2 + 34/63975982005*ep2^2 - 476/959639730075*ep2^3 + 20944/45103067313525*ep2^4 - 5984/13727020486725*ep2^5 + 5632/13727020486725*ep2^6 - 11264/29101283431857*ep2^7 + 4096/11192801319945*ep2^8 - 8192/23629247230995*ep2^9 + 65536/199160798089815*ep2^10 - 131072/418924437361335*ep2^11) * k2^18
-        + (323/302140594800 - 323/324801139410*ep2 + 2261/2436008545575*ep2^2 - 9044/10408400149275*ep2^3 + 2584/3167773958475*ep2^4 - 2432/3167773958475*ep2^5 + 4864/6715680791967*ep2^6 - 252928/369362443558185*ep2^7 + 26624/41040271506465*ep2^8 - 212992/345910859840205*ep2^9 + 425984/727605601732845*ep2^10) * k2^19
-        - (19/11090770614 - 19/11882968515*ep2 + 76/50772683655*ep2^2 - 152/108167891265*ep2^3 + 2432/1838854151505*ep2^4 - 24320/19491854005953*ep2^5 + 252928/214410394065483*ep2^6 - 26624/23823377118387*ep2^7 + 212992/200797035712119*ep2^8 - 425984/422366178566871*ep2^9) * k2^20
-        + (19/7369282800 - 19/7871733900*ep2 + 19/8385107850*ep2^2 - 152/71273416725*ep2^3 + 304/151099643457*ep2^4 - 15808/8310480390135*ep2^5 + 1664/923386710015*ep2^6 - 13312/7782830841555*ep2^7 + 26624/16370782114995*ep2^8) * k2^21
-        - (209/56676484080 - 209/60372776520*ep2 + 418/128292150105*ep2^2 - 4180/1359896791113*ep2^3 + 3952/1359896791113*ep2^4 - 416/151099643457*ep2^5 + 3328/1273554137709*ep2^6 - 6656/2678855255181*ep2^7) * k2^22
-        + (4807/950550098400 - 4807/1009959479550*ep2 + 4807/1070557048323*ep2^2 - 22724/5352785241615*ep2^3 + 2392/594753915735*ep2^4 - 19136/5012925861195*ep2^5 + 38272/10544430259755*ep2^6) * k2^23
-        - (23/3435236325 - 46/7282701009*ep2 + 2392/400548555495*ep2^2 - 4784/845602506045*ep2^3 + 267904/49890547856655*ep2^4 - 535808/104942186870895*ep2^5) * k2^24
-        + (575/66829491612 - 115/14137007841*ep2 + 230/29844794331*ep2^2 - 12880/1760842865529*ep2^3 + 25760/3703841889561*ep2^4) * k2^25
-        - (23/2133887976 - 23/2252437308*ep2 + 322/33223450293*ep2^2 - 644/69883809237*ep2^3) * k2^26
-        + (115/8706390672 - 115/9172804458*ep2 + 115/9647259861*ep2^2) * k2^27
-        - (23/1448337546 - 23/1523251557*ep2) * k2^28
-        + 667/35525324448 * k2^29;
-C4[14] = + (1/2091759757200 - 1/2300935732920*ep2 + 4/10066593831525*ep2^2 - 8/21909645398025*ep2^3 + 32/94941796724775*ep2^4 - 64/204874403458725*ep2^5 + 512/1761919869745035*ep2^6 - 1024/3775542578025075*ep2^7 + 4096/16131863742470775*ep2^8 - 8192/34367883625263825*ep2^9 + 131072/584254021629485025*ep2^10 - 262144/1238618525854508253*ep2^11 + 1048576/5240309147845996455*ep2^12 - 2097152/11062874867674881405*ep2^13 + 16777216/93244231027545428985*ep2^14 - 33554432/196134416988974867865* [...]
-        - (1/296894933280 - 1/324728833275*ep2 + 2/706762754775*ep2^2 - 8/3062638604025*ep2^3 + 16/6608851724475*ep2^4 - 128/56836124830485*ep2^5 + 256/121791696065325*ep2^6 - 1024/520382701370025*ep2^7 + 2048/1108641407266575*ep2^8 - 32768/18846903923531775*ep2^9 + 65536/39955436317887363*ep2^10 - 262144/169042230575677305*ep2^11 + 524288/356866931215318755*ep2^12 - 4194304/3007878420243400935*ep2^13 + 8388608/6326916677063705415*ep2^14) * k2^15
-        + (4/305048297925 - 8/663928648425*ep2 + 32/2877024143175*ep2^2 - 64/6208315256325*ep2^3 + 512/53391511204395*ep2^4 - 1024/114410381152275*ep2^5 + 45056/5377287914156925*ep2^6 - 90112/11455961208421275*ep2^7 + 1441792/194751340543161675*ep2^8 - 2883584/412872841951502751*ep2^9 + 1048576/158797246904424135*ep2^10 - 2097152/335238632353784285*ep2^11 + 16777216/2825582758410467545*ep2^12 - 33554432/5943467181484086905*ep2^13) * k2^16
-        - (17/455265358920 - 17/493204138830*ep2 + 17/532141307685*ep2^2 - 136/4576415246091*ep2^3 + 1904/68646228691365*ep2^4 - 83776/3226372748494155*ep2^5 + 23936/981939532150395*ep2^6 - 22528/981939532150395*ep2^7 + 225280/10408559040794187*ep2^8 - 16384/800658387753399*ep2^9 + 32768/1690278818590509*ep2^10 - 262144/14246635756691433*ep2^11 + 524288/29967061419247497*ep2^12) * k2^17
-        + (17/195504343320 - 17/210938896740*ep2 + 34/453518627991*ep2^2 - 476/6802779419865*ep2^3 + 1904/29066421157605*ep2^4 - 544/8846302091445*ep2^5 + 512/8846302091445*ep2^6 - 5120/93770802169317*ep2^7 + 4096/79344524912499*ep2^8 - 8192/167505108148609*ep2^9 + 65536/1411828768681133*ep2^10 - 131072/2969708789294797*ep2^11) * k2^18
-        - (19/108173793200 - 19/116286827690*ep2 + 133/872151207675*ep2^2 - 532/3726464250975*ep2^3 + 152/1134141293775*ep2^4 - 2432/19280401994175*ep2^5 + 4864/40874452227651*ep2^6 - 252928/2248094872520805*ep2^7 + 79872/749364957506935*ep2^8 - 638976/6316076070415595*ep2^9 + 1277952/13285539320529355*ep2^10) * k2^19
-        + (19/59561545890 - 19/63815942025*ep2 + 76/272668115925*ep2^2 - 152/580901638275*ep2^3 + 2432/9875327850675*ep2^4 - 4864/20935695043431*ep2^5 + 252928/1151463227388705*ep2^6 - 26624/127940358598745*ep2^7 + 212992/1078354451046565*ep2^8 - 425984/2268262810822085*ep2^9) * k2^20
-        - (19/35618200200 - 19/38046713850*ep2 + 19/40528021275*ep2^2 - 304/688976361675*ep2^3 + 608/1460629886751*ep2^4 - 31616/80334643771305*ep2^5 + 3328/8926071530145*ep2^6 - 26624/75234031468365*ep2^7 + 53248/158250893778285*ep2^8) * k2^21
-        + (209/250262828880 - 209/266584317720*ep2 + 418/566491675155*ep2^2 - 4180/6004811756643*ep2^3 + 3952/6004811756643*ep2^4 - 1248/2001603918881*ep2^5 + 9984/16870661601997*ep2^6 - 19968/35486564059373*ep2^7) * k2^22
-        - (253/204192243360 - 253/216954258570*ep2 + 1265/1149857570421*ep2^2 - 1196/1149857570421*ep2^3 + 2392/2427477093111*ep2^4 - 19136/20460164070507*ep2^5 + 38272/43036896837963*ep2^6) * k2^23
-        + (253/143898232725 - 506/305064253377*ep2 + 184/117332405145*ep2^2 - 368/247701744195*ep2^3 + 20608/14614402907505*ep2^4 - 41216/30740640598545*ep2^5) * k2^24
-        - (115/47853216216 - 23/10122795738*ep2 + 23/10685173279*ep2^2 - 1288/630425223461*ep2^3 + 2576/1326066849349*ep2^4) * k2^25
-        + (299/93970103832 - 299/99190665156*ep2 + 4186/1463062311051*ep2^2 - 8372/3077475895659*ep2^3) * k2^26
-        - (345/84161776496 - 345/88670443094*ep2 + 345/93256845323*ep2^2) * k2^27
-        + (1035/200675213318 - 1035/211054965731*ep2) * k2^28
-        - 69/10854960248 * k2^29;
-C4[15] = + (1/9838483823520 - 1/10760841681975*ep2 + 2/23420655425475*ep2^2 - 8/101489506843725*ep2^3 + 16/219003672662775*ep2^4 - 128/1883431584899865*ep2^5 + 256/4035924824785425*ep2^6 - 1024/17244406069537725*ep2^7 + 2048/36738082495971675*ep2^8 - 32768/624547402431518475*ep2^9 + 65536/1324040493154819167*ep2^10 - 262144/5601709778731927245*ep2^11 + 524288/11825831755100735295*ep2^12 - 4194304/99674867650134768915*ep2^13 + 8388608/209660928505455893235*ep2^14) * k2^15
-        - (1/1304344446300 - 1/1419433662150*ep2 + 2/3075439601325*ep2^2 - 4/6636474929175*ep2^3 + 32/57073684390905*ep2^4 - 64/122300752266225*ep2^5 + 2816/5748135356512575*ep2^6 - 5632/12246027498657225*ep2^7 + 90112/208182467477172825*ep2^8 - 180224/441346831051606389*ep2^9 + 65536/169748781173694765*ep2^10 - 131072/358358538033355615*ep2^11 + 1048576/3020450534852568755*ep2^12 - 2097152/6353361469862299795*ep2^13) * k2^16
-        + (17/5353292668680 - 17/5799400391070*ep2 + 17/6257247790365*ep2^2 - 136/53812330997139*ep2^3 + 1904/807184964957085*ep2^4 - 7616/3448881213907545*ep2^5 + 2176/1049659499884905*ep2^6 - 2048/1049659499884905*ep2^7 + 20480/11126390698779993*ep2^8 - 16384/9414638283583071*ep2^9 + 32768/19875347487564261*ep2^10 - 262144/167520785966613057*ep2^11 + 524288/352371308412530913*ep2^12) * k2^17
-        - (1/104493700740 - 1/112743203430*ep2 + 4/484795774749*ep2^2 - 56/7271936621235*ep2^3 + 224/31071001927095*ep2^4 - 64/9456391890855*ep2^5 + 1024/160758662144535*ep2^6 - 10240/1704041818732071*ep2^7 + 8192/1441881538927137*ep2^8 - 16384/3043972137735067*ep2^9 + 131072/25656336589481279*ep2^10 - 262144/53966776964081311*ep2^11) * k2^18
-        + (19/809438383600 - 19/870146262370*ep2 + 19/932299566825*ep2^2 - 76/3983461785525*ep2^3 + 152/8486505543075*ep2^4 - 2432/144270594232275*ep2^5 + 4864/305853659772423*ep2^6 - 252928/16821951287483265*ep2^7 + 79872/5607317095827755*ep2^8 - 638976/47261672664833935*ep2^9 + 1277952/99412483881202415*ep2^10) * k2^19
-        - (19/382015432260 - 19/409302248850*ep2 + 38/874418440725*ep2^2 - 76/1862891460675*ep2^3 + 1216/31669154831475*ep2^4 - 2432/67138608242727*ep2^5 + 126464/3692623453349985*ep2^6 - 13312/410291494816665*ep2^7 + 106496/3458171170597605*ep2^8 - 212992/7274084186429445*ep2^9) * k2^20
-        + (133/1408761228600 - 133/1504813130550*ep2 + 19/228993302475*ep2^2 - 304/3892886142075*ep2^3 + 608/8252918621199*ep2^4 - 31616/453910524165945*ep2^5 + 3328/50434502685105*ep2^6 - 26624/425090808345885*ep2^7 + 53248/894156527899965*ep2^8) * k2^21
-        - (11/66880583580 - 11/71242360770*ep2 + 88/605560066545*ep2^2 - 880/6418936705377*ep2^3 + 832/6418936705377*ep2^4 - 4992/40653265800721*ep2^5 + 39936/342648954606077*ep2^6 - 79872/720744352792093*ep2^7) * k2^22
-        + (253/945856023840 - 253/1004972025330*ep2 + 1265/5326351734249*ep2^2 - 92/409719364173*ep2^3 + 184/864963102143*ep2^4 - 1472/7290403289491*ep2^5 + 2944/15334986229619*ep2^6) * k2^23
-        - (253/615288995100 - 253/652206334806*ep2 + 46/125424295155*ep2^2 - 92/264784623105*ep2^3 + 5152/15622292763195*ep2^4 - 10304/32860684777755*ep2^5) * k2^24
-        + (1265/2097290958984 - 23/40332518442*ep2 + 23/42573213911*ep2^2 - 1288/2511819620749*ep2^3 + 2576/5283482650541*ep2^4) * k2^25
-        - (299/351577802268 - 299/371109902394*ep2 + 1196/1563963160089*ep2^2 - 2392/3289715612601*ep2^3) * k2^26
-        + (4485/3868539588592 - 4485/4075782780838*ep2 + 4485/4286599131571*ep2^2) * k2^27
-        - (7245/4719327430444 - 7245/4963430573398*ep2) * k2^28
-        + 667/336503767688 * k2^29;
-C4[16] = + (1/45820358129700 - 1/49863330905850*ep2 + 2/108037216962675*ep2^2 - 4/233132941866825*ep2^3 + 32/2004943300054695*ep2^4 - 64/4296307071545775*ep2^5 + 256/18356948396604675*ep2^6 - 512/39108281366679525*ep2^7 + 8192/664840783233551925*ep2^8 - 16384/1409462460455130081*ep2^9 + 65536/5963110409617858035*ep2^10 - 131072/12588788642526589185*ep2^11 + 1048576/106105504272724108845*ep2^12 - 2097152/223187440021936918605*ep2^13) * k2^16
-        - (1/5698666389240 - 1/6173555255010*ep2 + 1/6660941196195*ep2^2 - 8/57284094287277*ep2^3 + 112/859261414309155*ep2^4 - 448/3671389679320935*ep2^5 + 128/1117379467619415*ep2^6 - 2048/18995450949530055*ep2^7 + 20480/201351780065018583*ep2^8 - 16384/170374583131938801*ep2^9 + 32768/359679675500759691*ep2^10 - 262144/3031585836363545967*ep2^11 + 524288/6376784000626769103*ep2^12) * k2^17
-        + (1/1297744347900 - 1/1400197849050*ep2 + 4/6020850750915*ep2^2 - 8/12901823037675*ep2^3 + 32/55125971160975*ep2^4 - 64/117442286386425*ep2^5 + 1024/1996518868569225*ep2^6 - 2048/4232620001366757*ep2^7 + 8192/17907238467320895*ep2^8 - 16384/37804170097677445*ep2^9 + 131072/318635147966138465*ep2^10 - 262144/670232552618429185*ep2^11) * k2^18
-        - (19/7754941933200 - 19/8336562578190*ep2 + 19/8932031333775*ep2^2 - 76/38164133880675*ep2^3 + 152/81306198267525*ep2^4 - 2432/1382205370547925*ep2^5 + 4864/2930275385561601*ep2^6 - 252928/161165146205888055*ep2^7 + 26624/17907238467320895*ep2^8 - 212992/150932438510276115*ep2^9 + 425984/317478577556098035*ep2^10) * k2^19
-        + (19/3009295759932 - 19/3224245457070*ep2 + 38/6888160749195*ep2^2 - 76/14674777248285*ep2^3 + 1216/249471213220845*ep2^4 - 12160/2644394860140957*ep2^5 + 126464/29088343461550527*ep2^6 - 13312/3232038162394503*ep2^7 + 106496/27241464511610811*ep2^8 - 212992/57301011558905499*ep2^9) * k2^20
-        - (7/499883016600 - 7/533965949550*ep2 + 1/81255687975*ep2^2 - 16/1381346695575*ep2^3 + 32/2928454994619*ep2^4 - 1664/161065024704045*ep2^5 + 3328/340026163264095*ep2^6 - 26624/2865934804654515*ep2^7 + 53248/6028345623583635*ep2^8) * k2^21
-        + (7/252420267060 - 1/38411779770*ep2 + 8/326500128045*ep2^2 - 80/3460901357277*ep2^3 + 64/2928454994619*ep2^4 - 128/6182293877529*ep2^5 + 1024/52107905539173*ep2^6 - 2048/109606284065157*ep2^7) * k2^22
-        - (23/457672269600 - 23/486276786450*ep2 + 23/515453393637*ep2^2 - 92/2180764357695*ep2^3 + 184/4603835866245*ep2^4 - 1472/38803759444065*ep2^5 + 2944/81621700899585*ep2^6) * k2^23
-        + (23/271256438700 - 23/287531825022*ep2 + 46/608240399085*ep2^2 - 92/1284063064735*ep2^3 + 5152/75759720819365*ep2^4 - 10304/159356654137285*ep2^5) * k2^24
-        - (575/4262236465032 - 115/901626944526*ep2 + 115/951717330333*ep2^2 - 920/8021617498521*ep2^3 + 1840/16873057496889*ep2^4) * k2^25
-        + (299/1463017306212 - 299/1544296045446*ep2 + 1196/6508104762951*ep2^2 - 2392/13689461742759*ep2^3) * k2^26
-        - (4485/15099783555472 - 4485/15908700531658*ep2 + 4485/16731564352261*ep2^2) * k2^27
-        + (2093/5023800167892 - 2093/5283651900714*ep2) * k2^28
-        - 203/358213688184 * k2^29;
-C4[17] = + (1/211541403843000 - 1/229169854163250*ep2 + 1/247262211070875*ep2^2 - 8/2126455015209525*ep2^3 + 16/4556689318306125*ep2^4 - 64/19469490723671625*ep2^5 + 128/41478480237387375*ep2^6 - 2048/705134164035585375*ep2^7 + 4096/1494884427755440995*ep2^8 - 16384/6324511040503788825*ep2^9 + 32768/13351745529952443075*ep2^10 - 262144/112536140895313448775*ep2^11 + 524288/236713951538417943975*ep2^12) * k2^17
-        - (1/24775119369000 - 1/26731049845500*ep2 + 2/57471757167825*ep2^2 - 4/123153765359625*ep2^3 + 16/526202451991125*ep2^4 - 32/1121040006415875*ep2^5 + 512/19057680109069875*ep2^6 - 1024/40402281831228135*ep2^7 + 4096/170932730824426725*ep2^8 - 8192/360857987296011975*ep2^9 + 65536/3041517321494958075*ep2^10 - 131072/6397674365903187675*ep2^11) * k2^18
-        + (19/101440907106000 - 19/109048975138950*ep2 + 19/116838187648875*ep2^2 - 76/499217710863375*ep2^3 + 152/1063550775317625*ep2^4 - 2432/18080363180399625*ep2^5 + 4864/38330369942447205*ep2^6 - 252928/2108170346834596275*ep2^7 + 26624/234241149648288475*ep2^8 - 212992/1974318261321288575*ep2^9 + 425984/4152876342779262175*ep2^10) * k2^19
-        - (1/1595838660570 - 1/1709827136325*ep2 + 4/7305625037025*ep2^2 - 8/15564157687575*ep2^3 + 128/264590680688775*ep2^4 - 256/560932243060203*ep2^5 + 13312/30851273368311165*ep2^6 - 26624/65130465999768015*ep2^7 + 212992/548956784855187555*ep2^8 - 425984/1154702202626428995*ep2^9) * k2^20
-        + (1/590770837800 - 1/631050667650*ep2 + 1/672206145975*ep2^2 - 16/11427504481575*ep2^3 + 32/24226309500939*ep2^4 - 128/102495924811665*ep2^5 + 256/216380285713515*ep2^6 - 2048/1823776693871055*ep2^7 + 4096/3836219942280495*ep2^8) * k2^21
-        - (11/2804669634000 - 11/2987582871000*ep2 + 22/6348613600875*ep2^2 - 44/13459060833855*ep2^3 + 16/5176561859175*ep2^4 - 96/32784891774775*ep2^5 + 768/276329802101675*ep2^6 - 1536/581245445800075*ep2^7) * k2^22
-        + (253/31274271756000 - 253/33228913740750*ep2 + 253/35222648565195*ep2^2 - 92/13547172525075*ep2^3 + 184/28599586441825*ep2^4 - 1472/241053657152525*ep2^5 + 2944/507043899527725*ep2^6) * k2^23
-        - (253/16614456870375 - 506/35222648565195*ep2 + 184/13547172525075*ep2^2 - 368/28599586441825*ep2^3 + 2944/241053657152525*ep2^4 - 5888/507043899527725*ep2^5) * k2^24
-        + (1265/47516043554616 - 23/913770068358*ep2 + 69/2893605216467*ep2^2 - 552/24388958253079*ep2^3 + 1104/51300912187511*ep2^4) * k2^25
-        - (299/6827414095656 - 299/7206714878748*ep2 + 598/15185577780219*ep2^2 - 1196/31942077399771*ep2^3) * k2^26
-        + (299/4367705987120 - 299/4601690236430*ep2 + 299/4839708696935*ep2^2) * k2^27
-        - (39/380590921810 - 39/400276659145*ep2) * k2^28
-        + 377/2550915658280 * k2^29;
-C4[18] = + (1/969061097604600 - 1/1045565921099700*ep2 + 2/2247966730364355*ep2^2 - 4/4817071565066475*ep2^3 + 16/20582033050738575*ep2^4 - 32/43848679108095225*ep2^5 + 512/745427544837618825*ep2^6 - 1024/1580306395055751909*ep2^7 + 4096/6685911671389719615*ep2^8 - 8192/14114702417378296965*ep2^9 + 65536/118966777517902788705*ep2^10 - 131072/250240463054898969345*ep2^11) * k2^18
-        - (1/107237530369200 - 1/115280345146890*ep2 + 1/123514655514525*ep2^2 - 4/527744437198425*ep2^3 + 8/1124325105335775*ep2^4 - 128/19113526790708175*ep2^5 + 256/40520676796301331*ep2^6 - 13312/2228637223796573205*ep2^7 + 26624/4704900805792765655*ep2^8 - 212992/39655592505967596235*ep2^9 + 425984/83413487684966323115*ep2^10) * k2^19
-        + (1/21931382735262 - 1/23497910073495*ep2 + 4/100400161223115*ep2^2 - 8/213895995649245*ep2^3 + 128/3636231926037165*ep2^4 - 1280/38544058415993949*ep2^5 + 1024/32614203275071803*ep2^6 - 2048/68852206914040473*ep2^7 + 16384/580325743989769701*ep2^8 - 32768/1220685185633653509*ep2^9) * k2^20
-        - (7/43717041997200 - 7/46697749406100*ep2 + 1/7106179257450*ep2^2 - 8/60402523688325*ep2^3 + 16/128053350219249*ep2^4 - 64/541764174004515*ep2^5 + 128/1143724367342865*ep2^6 - 1024/9639962524747005*ep2^7 + 2048/20277162552054045*ep2^8) * k2^21
-        + (77/170187353391120 - 11/25898075516040*ep2 + 22/55033410471585*ep2^2 - 220/583354150998801*ep2^3 + 16/44873396230677*ep2^4 - 96/284198176127621*ep2^5 + 768/2395384627361377*ep2^6 - 1536/5038567664449793*ep2^7) * k2^22
-        - (253/231429610994400 - 253/245893961681550*ep2 + 253/260647599382443*ep2^2 - 92/100249076685555*ep2^3 + 184/211636939669505*ep2^4 - 1472/1783797062928685*ep2^5 + 2944/3752124856505165*ep2^6) * k2^23
-        + (253/107892248492925 - 506/228731566805001*ep2 + 184/87973679540385*ep2^2 - 368/185722212363035*ep2^3 + 20608/10957610529419065*ep2^4 - 41216/23048766975674585*ep2^5) * k2^24
-        - (575/125578115108628 - 115/26564601272979*ep2 + 690/168242474728867*ep2^2 - 5520/1418043715571879*ep2^3 + 11040/2982781608616711*ep2^4) * k2^25
-        + (299/36087760219896 - 299/38092635787668*ep2 + 598/80266625409729*ep2^2 - 1196/168836694827361*ep2^3) * k2^26
-        - (65/4617289186384 - 65/4864643964226*ep2 + 65/5116263479617*ep2^2) * k2^27
-        + (273/12033592964138 - 273/12656020186421*ep2) * k2^28
-        - 2639/75507103485088 * k2^29;
-C4[19] = + (1/4408331991663600 - 1/4738956891038370*ep2 + 1/5077453811826825*ep2^2 - 4/21694575377805525*ep2^3 + 8/46218877978803075*ep2^4 - 128/785720925639652275*ep2^5 + 256/1665728362356062823*ep2^6 - 1024/7047312302275650405*ep2^7 + 2048/14877659304804150855*ep2^8 - 16384/125397414140492128635*ep2^9 + 32768/263766974571379994715*ep2^10) * k2^19
-        - (1/462337257662280 - 1/495361347495300*ep2 + 1/529135984824525*ep2^2 - 2/1127289706800075*ep2^3 + 32/19163925015601275*ep2^4 - 64/40627521033074703*ep2^5 + 256/171885665909162205*ep2^6 - 512/362869739141564655*ep2^7 + 4096/3058473515621759235*ep2^8 - 8192/6433340843204390115*ep2^9) * k2^20
-        + (7/629761713094800 - 7/672700011714900*ep2 + 1/102367393087050*ep2^2 - 8/870122841239925*ep2^3 + 16/1844660423428641*ep2^4 - 64/7804332560659635*ep2^5 + 128/16475813183614785*ep2^6 - 1024/138867568261896045*ep2^7 + 2048/292100747033643405*ep2^8) * k2^21
-        - (11/269080004685960 - 11/286628700643740*ep2 + 44/1218171977735895*ep2^2 - 440/12912622964000487*ep2^3 + 32/993278689538499*ep2^4 - 64/2096921677914609*ep2^5 + 512/17674054142423133*ep2^6 - 1024/37176458713372797*ep2^7) * k2^22
-        + (253/2097878149392480 - 253/2228995533729510*ep2 + 1265/11813676328766403*ep2^2 - 92/908744332982031*ep2^3 + 184/1918460258517621*ep2^4 - 1472/16169879321791377*ep2^5 + 2944/34012504780319793*ep2^6) * k2^23
-        - (23/75816174616650 - 23/80365145093649*ep2 + 92/340006383088515*ep2^2 - 184/717791253186865*ep2^3 + 10304/42349683938025035*ep2^4 - 20608/89080369662742315*ep2^5) * k2^24
-        + (115/170185013139492 - 23/36000675856431*ep2 + 46/76001426808021*ep2^2 - 2576/4484084181673239*ep2^3 + 5152/9432039140760951*ep2^4) * k2^25
-        - (1/731508653106 - 1/772148022723*ep2 + 8/6508104762951*ep2^2 - 16/13689461742759*ep2^3) * k2^26
-        + (15/5865205182704 - 15/6179412603206*ep2 + 15/6499037393027*ep2^2) * k2^27
-        - (35/7805573814576 - 35/8209310391192*ep2) * k2^28
-        + 29/3895943914464 * k2^29;
-C4[20] = + (1/19927921285392120 - 1/21351344234348700*ep2 + 1/22807117704872475*ep2^2 - 2/48589076849510925*ep2^3 + 32/826014306441685725*ep2^4 - 64/1751150329656373737*ep2^5 + 256/7408712933161581195*ep2^6 - 512/15640616192230004745*ep2^7 + 4096/131828050763081468565*ep2^8 - 8192/277293486087861020085*ep2^9) * k2^20
-        - (1/1986171556683600 - 1/2121592344639300*ep2 + 1/2259957062767950*ep2^2 - 8/19209635033527575*ep2^3 + 16/40724426271078459*ep2^4 - 64/172295649608408865*ep2^5 + 128/363735260284418715*ep2^6 - 1024/3065768622397243455*ep2^7 + 2048/6448685722973512095*ep2^8) * k2^21
-        + (11/4054598703088440 - 11/4319029053289860*ep2 + 44/18355873476481905*ep2^2 - 440/194572258850708193*ep2^3 + 32/14967096834669861*ep2^4 - 192/94791613286242453*ep2^5 + 1536/798957883412614961*ep2^6 - 3072/1680566582350672849*ep2^7) * k2^22
-        - (23/2205461644233120 - 23/2343302996997690*ep2 + 115/12419505884087757*ep2^2 - 92/10508812671151179*ep2^3 + 184/22185271194652489*ep2^4 - 1472/186990142926356693*ep2^5 + 2944/393324093741646837*ep2^6) * k2^23
-        + (23/717337652142150 - 23/760377911270679*ep2 + 92/3216983470760565*ep2^2 - 184/6791409549383415*ep2^3 + 10304/400693163413621485*ep2^4 - 20608/842837343732100365*ep2^5) * k2^24
-        - (5/59637483236916 - 1/12615621453963*ep2 + 2/26632978625033*ep2^2 - 112/1571345738876947*ep2^3 + 224/3305244485223923*ep2^4) * k2^25
-        + (13/67124627358822 - 13/70853773323201*ep2 + 728/4180372626068859*ep2^2 - 1456/8793197592765531*ep2^3) * k2^26
-        - (195/480946824981728 - 195/506711833462892*ep2 + 195/532921066228214*ep2^2) * k2^27
-        + (585/746733228261104 - 585/785357360757368*ep2) * k2^28
-        - 377/266222834155040 * k2^29;
-C4[21] = + (1/89571492885560400 - 1/95678640127757700*ep2 + 1/101918551440437550*ep2^2 - 8/866307687243719175*ep2^3 + 16/1836572296956684651*ep2^4 - 64/7770113564047511985*ep2^5 + 128/16403573079655858635*ep2^6 - 1024/138258687385670808495*ep2^7 + 2048/290819997604342045455*ep2^8) * k2^21
-        - (1/8504768011356240 - 1/9059426794705560*ep2 + 2/19251281938749315*ep2^2 - 20/204063588550742739*ep2^3 + 16/172669190312166933*ep2^4 - 96/1093571538643723909*ep2^5 + 768/9217245825711387233*ep2^6 - 1536/19387999840289469697*ep2^7) * k2^22
-        + (23/34695677086106400 - 23/36864156903988050*ep2 + 23/39076006318227333*ep2^2 - 92/165321565192500255*ep2^3 + 184/349012193184167205*ep2^4 - 1472/2941674199695123585*ep2^5 + 2944/6187659523496639265*ep2^6) * k2^23
-        - (1/376164866367225 - 2/797469516698517*ep2 + 8/3373909493724495*ep2^2 - 16/7122697820085045*ep2^3 + 896/420239171385017655*ep2^4 - 1792/883951360499519895*ep2^5) * k2^24
-        + (25/2939691551751396 - 5/621857828255103*ep2 + 10/1312810970760773*ep2^2 - 560/77455847274885607*ep2^3 + 1120/162924368405793863*ep2^4) * k2^25
-        - (13/563191995400848 - 13/594480439589784*ep2 + 91/4384293241974657*ep2^2 - 182/9222134060705313*ep2^3) * k2^26
-        + (195/3530853519987808 - 195/3720006387130012*ep2 + 195/3912420510602254*ep2^2) * k2^27
-        - (117/978949049244740 - 117/1029584344895330*ep2) * k2^28
-        + 1131/4746558335788640 * k2^29;
-C4[22] = + (1/400515237744102000 - 1/426635796727413000*ep2 + 2/906601068045752625*ep2^2 - 4/1921994264256995565*ep2^3 + 16/8131514194933442775*ep2^4 - 32/17166529967081712525*ep2^5 + 256/144689324008260148425*ep2^6 - 512/304346509120823070825*ep2^7) * k2^22
-        - (1/36309429508716000 - 1/38578768853010750*ep2 + 1/40893494984191395*ep2^2 - 4/173010940317732825*ep2^3 + 8/365245318448547075*ep2^4 - 64/3078496255494896775*ep2^5 + 128/6475457640868575975*ep2^6) * k2^23
-        + (1/6167354204392875 - 2/13074790913312895*ep2 + 8/55316423094785325*ep2^2 - 16/116779115422324575*ep2^3 + 896/6889967809917149925*ep2^4 - 1792/14492690910515384325*ep2^5) * k2^24
-        - (5/7383411339282576 - 1/1561875475617468*ep2 + 1/1648646335373994*ep2^2 - 28/48635066893532823*ep2^3 + 56/102301347603638007*ep2^4) * k2^25
-        + (13/5775992324924976 - 13/6096880787420808*ep2 + 13/6423499401032637*ep2^2 - 26/13511498740103133*ep2^3) * k2^26
-        - (13/2052821813946400 - 13/2162794411122100*ep2 + 13/2274663087559450*ep2^2) * k2^27
-        + (13/829342217798700 - 13/872239229064150*ep2) * k2^28
-        - 29/827888081823600 * k2^29;
-C4[23] = + (1/1782389550772303200 - 1/1893788897695572150*ep2 + 1/2007416231557306479*ep2^2 - 4/8492914825819373565*ep2^3 + 8/17929486854507566415*ep2^4 - 64/151119960630849488355*ep2^5 + 128/317873020637304096195*ep2^6) * k2^23
-        - (1/154595012056781400 - 1/163870712780188284*ep2 + 1/173324792363660685*ep2^2 - 2/365907894989950335*ep2^3 + 112/21588565804407069765*ep2^4 - 224/45410431519614870885*ep2^5) * k2^24
-        + (25/629777641272880464 - 5/133222193346186252*ep2 + 5/140623426309863266*ep2^2 - 20/592627296591566621*ep2^3 + 40/1246560865244329789*ep2^4) * k2^25
-        - (13/75408788686520520 - 13/79598165835771660*ep2 + 26/167724706582518855*ep2^2 - 52/352800244880470695*ep2^3) * k2^26
-        + (39/65608185173726944 - 39/69122909379462316*ep2 + 39/72698232278400022*ep2^2) * k2^27
-        - (9/5197211231538520 - 9/5466032502135340*ep2) * k2^28
-        + 87/19640659160215120 * k2^29;
-C4[24] = + (1/7897502637198556200 - 1/8371352795430469572*ep2 + 1/8854315456705304355*ep2^2 - 2/18692443741933420305*ep2^3 + 16/157550597253438828285*ep2^4 - 32/331399532153785121565*ep2^5) * k2^24
-        - (1/656576689837683888 - 1/694456114251396420*ep2 + 1/733037009487585110*ep2^2 - 4/3089227397126251535*ep2^3 + 8/6498030042231080815*ep2^4) * k2^25
-        + (13/1336500446295140280 - 13/1410750471089314740*ep2 + 26/2972652778366770345*ep2^2 - 52/6252821361392172105*ep2^3) * k2^26
-        - (3/68400022840694048 - 3/72064309778588372*ep2 + 3/75791774077480874*ep2^2) * k2^27
-        + (9/57434713056619304 - 9/60405474076789268*ep2) * k2^28
-        - 29/61429295671311120 * k2^29;
-C4[25] = + (1/34852162658526852912 - 1/36862864350364940580*ep2 + 1/38910801258718548390*ep2^2 - 4/163981233876028168215*ep2^3 + 8/344926043670266146935*ep2^4) * k2^25
-        - (1/2782102969838863440 - 1/2936664245941022520*ep2 + 1/3093985544830720155*ep2^2 - 2/6508038559816342395*ep2^3) * k2^26
-        + (3/1257722868968680352 - 3/1325100879806288228*ep2 + 3/1393640580485923826*ep2^2) * k2^27
-        - (1/89668480588395444 - 1/94306505446415898*ep2) * k2^28
-        + 29/703302752481745680 * k2^29;
-C4[26] = + (1/153233867495634654960 - 1/161746860134281024680*ep2 + 1/170411870498617508145*ep2^2 - 2/358452555186747172305*ep2^3) * k2^26
-        - (1/11763408009765892704 - 1/12393590581717636956*ep2 + 1/13034638370427169902*ep2^2) * k2^27
-        + (1/1708389679184135420 - 1/1796754662590211390*ep2) * k2^28
-        - 29/10232365536106966560 * k2^29;
-C4[27] = + (1/671402060934751423200 - 1/707370028484827392300*ep2 + 1/743958133406456395350*ep2^2) * k2^27
-        - (1/49640001998935255600 - 1/52207588309225010200*ep2) * k2^28
-        + 29/201751358211920378400 * k2^29;
-C4[28] = + (1/2932370299900739008080 - 1/3084044625757673784360*ep2) * k2^28
-        - 1/209087771237808392160 * k2^29;
-C4[29] = + 1/12769026871558087949280 * k2^29;
-    </pre>
-  </body>
-</html>
diff --git a/doc/html/geoid.html b/doc/html/geoid.html
deleted file mode 100644
index f452d01..0000000
--- a/doc/html/geoid.html
+++ /dev/null
@@ -1,287 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geoid height</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geoid height </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="other.html">Other interfaces (Javascript, Python, Matlab, Octave)</a>. Forward to <a class="el" href="gravity.html">Gravity models</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>The gravitational equipotential surface approximately coinciding with mean sea level is called the geoid. The <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib:: [...]
-<p>The geoid is usually approximated by an "earth gravity model" (EGM). The models published by the NGA are:</p>
-<ul>
-<li><b>EGM84</b>: <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html</a></li>
-<li><b>EGM96</b>: <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html</a></li>
-<li><b>EGM2008</b>: <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008</a></li>
-</ul>
-<p><a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> offers a uniform way to handle all 3 geoids at a variety of grid resolutions. (In contrast, the software tools that NGA offers are different for each geoid, and the interpolation programs are different for each grid resolution. In addition these tools are written in Fortran with is nowadays difficult to integrate with other software.)</p>
-<p>Unlike other components of GeographicLib, there is a appreciable error in the results obtained (at best, the RMS error is 1 mm). However the class provides methods to report the maximum and RMS errors in the results. The class also returns the gradient of the geoid. This can be used to estimate the direction of a plumb line relative to the WGS84 ellipsoid.</p>
-<p>The <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> class calculates geoid heights using the underlying gravity model. This is slower then <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> but considerably more accurate. This class also can accurately compute all the components of the acceleration due to gravity (and henc [...]
-<p>Go to</p>
-<ul>
-<li><a class="el" href="geoid.html#geoidinst">Installing the geoid datasets</a></li>
-<li><a class="el" href="geoid.html#geoidformat">The format of the geoid data files</a></li>
-<li><a class="el" href="geoid.html#geoidinterp">Interpolating the geoid data</a></li>
-<li><a class="el" href="geoid.html#geoidcache">Caching the geoid data</a></li>
-<li><a class="el" href="geoid.html#testgeoid">Test data for geoids</a></li>
-</ul>
-<h2><a class="anchor" id="geoidinst"></a>
-Installing the geoid datasets</h2>
-<p>The geoid heights are computed using interpolation into a rectangular grid. The grids are read from data files which have been are computed using the NGA synthesis programs in the case of the EGM84 and EGM96 models and using the NGA binary gridded data files in the case of EGM2008. These data files are available for download: </p>
-<center> <table class="doxtable">
-<caption align="bottom">Available geoid data files</caption>
-<tr>
-<th rowspan="2">name </th><th rowspan="2">geoid </th><th rowspan="2">grid </th><th rowspan="2">size<br/>
-(MB) </th><th colspan="3"><center>Download Links (size, MB)</center> </th></tr>
-<tr>
-<th>tar file </th><th>Windows<br/>
- installer </th><th>zip file </th></tr>
-<tr>
-<td>egm84-30 </td><td>EGM84 </td><td><center>30'</center> </td><td><center>0.6</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-30.tar.bz2/download">link</a> (0.5)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-30.exe/download">link</a> (0.8)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-30.zip/download">link</a> (0.5)</center> </td></tr>
-<tr>
-<td>egm84-15 </td><td>EGM84 </td><td><center>15'</center> </td><td><center>2.1</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-15.tar.bz2/download">link</a> (1.5)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-15.exe/download">link</a> (1.9)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm84-15.zip/download">link</a> (2.0)</center> </td></tr>
-<tr>
-<td>egm96-15 </td><td>EGM96 </td><td><center>15'</center> </td><td><center>2.1</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-15.tar.bz2/download">link</a> (1.5)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-15.exe/download">link</a> (1.9)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-15.zip/download">link</a> (2.0)</center> </td></tr>
-<tr>
-<td>egm96-5 </td><td>EGM96 </td><td><center>5'</center> </td><td><center> 19</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-5.tar.bz2/download">link</a> (11)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-5.exe/download">link</a> (11)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm96-5.zip/download">link</a> (17)</center> </td></tr>
-<tr>
-<td>egm2008-5 </td><td>EGM2008 </td><td><center>5'</center> </td><td><center> 19</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-5.tar.bz2/download">link</a> (11)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-5.exe/download">link</a> (11)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-5.zip/download">link</a> (17)</center> </ [...]
-<tr>
-<td>egm2008-2_5 </td><td>EGM2008 </td><td><center>2.5'</center> </td><td><center> 75</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-2_5.tar.bz2/download">link</a> (35)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-2_5.exe/download">link</a> (33)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-2_5.zip/download">link</a> (65)</ [...]
-<tr>
-<td>egm2008-1 </td><td>EGM2008 </td><td><center>1'</center> </td><td><center>470</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-1.tar.bz2/download">link</a> (170)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-1.exe/download">link</a> (130)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/geoids-distrib/egm2008-1.zip/download">link</a> (390)</center> [...]
-</table>
-</center><p> The "size" column is the size of the uncompressed data and it also gives the memory requirements for caching the entire dataset using the <a class="el" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">GeographicLib::Geoid::CacheAll</a> method. At a minimum you should install egm96-5 and either egm2008-1 or egm2008-2_5. Many applications use the EGM96 geoid, however the use of EGM2008 is growing. (EGM84 is rarely used now.)</p>
-<p>For Linux and Unix systems, GeographicLib provides a shell script geographiclib-get-geoids (typically installed in /usr/local/sbin) which automates the process of downloading and installing the geoid data. For example </p>
-<div class="fragment"><pre class="fragment">
-   geographiclib-get-geoids best # to install egm84-15, egm96-5, egm2008-1
-   geographiclib-get-geoids -h   # for help
-</pre></div><p> This script should be run as a user with write access to the installation directory, which is typically /usr/local/share/GeographicLib (this can be overridden with the -p flag), and the data will then be placed in the "geoids" subdirectory.</p>
-<p>Windows users should download and run the Windows installers. These will prompt for an installation directory with the default being one of </p>
-<div class="fragment"><pre class="fragment">
-   C:/Documents and Settings/All Users/Application Data/GeographicLib
-   C:/ProgramData/GeographicLib
-</pre></div><p> (which you probably should not change) and the data is installed in the "geoids" sub-directory. (The second directory name is an alternate name that Windows 7 for the "Application Data" directory.)</p>
-<p>Otherwise download <em>either</em> the tar.bz2 file <em>or</em> the zip file (they have the same contents). If possible use the tar.bz2 files, since these are compressed about 2 times better than the zip file. To unpack these, run, for example </p>
-<div class="fragment"><pre class="fragment">
-   mkdir -p /usr/local/share/GeographicLib
-   tar xofjC egm96-5.tar.bz2 /usr/local/share/GeographicLib
-   tar xofjC egm2008-2_5.tar.bz2 /usr/local/share/GeographicLib
-   etc.
-</pre></div><p> and, again, the data will be placed in the "geoids" subdirectory.</p>
-<p>However you install the geoid data, all the datasets should be installed in the same directory. <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> and <a href="GeoidEval.1.html">GeoidEval</a> uses a compile time default to locate the datasets. This is</p>
-<ul>
-<li>/usr/local/share/GeographicLib/geoids, for non-Windows systems</li>
-<li>C:/Documents and Settings/All Users/Application Data/GeographicLib/geoids, for Windows systems</li>
-</ul>
-<p>consistent with the examples above. This may be overridden at run-time by defining the GEOID_PATH or the GEOGRAPHIC_DATA environment variables; see <a class="el" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">GeographicLib::Geoid::DefaultGeoidPath()</a> for details. Finally, the path may be set using the optional second argument to the <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> c [...]
-<h2><a class="anchor" id="geoidformat"></a>
-The format of the geoid data files</h2>
-<p>The gridded data used by the <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> class is stored in 16-bit PGM files. Thus the data for egm96-5 might be stored in the file</p>
-<ul>
-<li>/usr/local/share/GeographicLib/geoids/egm96-5.pgm</li>
-</ul>
-<p>PGM simple graphic format with the following properties</p>
-<ul>
-<li>it is well documented <a href="http://netpbm.sf.net/doc/pgm.html">here</a>;</li>
-<li>there are no separate "little-endian" and "big-endian" versions;</li>
-<li>it uses 1 or 2 bytes per pixel;</li>
-<li>pixels can be randomly accessed;</li>
-<li>comments can be added to the file header;</li>
-<li>it is sufficiently simple that it can be easily read without using the <a href="http://netpbm.sf.net/doc/libnetpbm.html">libnetpbm</a> library (and thus we avoid adding a software dependency to GeographicLib).</li>
-</ul>
-<p>The major drawback of this format is that since there are only 65535 possible pixel values, the height must be quantized to 3 mm. However, the resulting quantization error (up to 1.5 mm) is typically smaller than the linear interpolation errors. The comments in the header for egm96-5 are </p>
-<div class="fragment"><pre class="fragment">
-   # Geoid file in PGM format for the GeographicLib::Geoid class
-   # Description WGS84 EGM96, 5-minute grid
-   # URL http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html
-   # DateTime 2009-08-29 18:45:03
-   # MaxBilinearError 0.140
-   # RMSBilinearError 0.005
-   # MaxCubicError 0.003
-   # RMSCubicError 0.001
-   # Offset -108
-   # Scale 0.003
-   # Origin 90N 0E
-   # AREA_OR_POINT Point
-   # Vertical_Datum WGS84
-</pre></div><p> Of these lines, the Scale and Offset lines are required and define the conversion from pixel value to height (in meters) using <em>height</em> = <em>offset</em> + <em>scale</em> <em>pixel</em>. The Geoid constructor also reads the Description, DateTime, and error lines (if present) and stores the resulting data so that it can be returned by <a class="el" href="classGeographicLib_1_1Geoid.html#a37d76bcfe0ddf9b84042d701c312e941">GeographicLib::Geoid::Description</a>, <a cla [...]
-<p>You can use gdal_translate to convert the data files to a standard GeoTiff, e.g., with </p>
-<div class="fragment"><pre class="fragment">
-   gdal_translate -ot Float32 -scale 0 65000 -108 87 egm96-5.pgm egm96-5.tif
-</pre></div><p> The arguments to -scale here are specific to the Offset and Scale parameters used in the pgm file (note 65000 * 0.003 - 108 = 87). You can check these by running <a href="GeoidEval.1.html">GeoidEval</a> with the "-v" option.</p>
-<p>Here is a sample script which uses GDAL to create a 1-degree squared grid of geoid heights at 3" resolution (matching DTED1) by bilinear interpolation. </p>
-<div class="fragment"><pre class="fragment">
-   #! /bin/sh
-   lat=37
-   lon=067
-   res=3                           # resolution in seconds
-   TEMP=`mktemp junkXXXXXXXXXX`    # temporary file for GDAL
-   gdalwarp -q -te `echo $lon $lat $res | awk '{
-       lon = $1; lat = $2; res = $3;
-       printf "%.14f %.14f %.14f %.14f",
-           lon  -0.5*res/3600, lat  -0.5*res/3600,
-           lon+1+0.5*res/3600, lat+1+0.5*res/3600;
-   }'` -ts $((3600/res+1)) $((3600/res+1)) -r bilinear egm96-5.tif $TEMP
-   gdal_translate -quiet \
-       -mo AREA_OR_POINT=Point \
-       -mo Description="WGS84 EGM96, $res-second grid" \
-       -mo Vertical_Datum=WGS84 \
-       -mo Tie_Point_Location=pixel_corner \
-       $TEMP e$lon-n$lat.tif
-   rm -f $TEMP
-</pre></div><p>Because the pgm files are uncompressed, they can take up a lot of disk space. Some compressed formats compress in tiles and so might be compatible with the requirement that the data can be randomly accessed. In particular gdal_translate can be used to convert the pgm files to compressed tiff files with </p>
-<div class="fragment"><pre class="fragment">
-gdal_translate -co COMPRESS=LZW -co PREDICTOR=2 \
-   -co TILED=YES -co BLOCKXSIZE=256 -co BLOCKYSIZE=256 \
-   egmyy-g.pgm egmyy-g.tif
-</pre></div><p> The resulting files sizes are </p>
-<div class="fragment"><pre class="fragment">
-                  pgm      tif
-    egm84-30      0.6 MB   0.5 MB
-    egm84-15      2.1 MB   1.4 MB
-    egm96-15      2.1 MB   1.5 MB
-    egm96-5        19 MB   8.5 MB
-    egm2008-5      19 MB   9.8 MB
-    egm2008-2_5    75 MB    28 MB
-    egm2008-1     470 MB    97 MB
-</pre></div><p> Currently, there are no plans for GeographicLib to support this compressed format.</p>
-<h2><a class="anchor" id="geoidinterp"></a>
-Interpolating the geoid data</h2>
-<p><a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> evaluates the geoid height using bilinear or cubic interpolation. The gradient of the geoid height is obtained by differentiating the interpolated height and referencing the result to distance on the WGS84 ellipsoid.</p>
-<p><b>WARNING</b>: Although <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> computes the gradient of the geoid height, this is subject to large quantization errors as a result of the way that the geoid data is stored. This is particularly acute for fine grids, at high latitudes, and for the easterly gradient. If you need to compute the direction of the acceleration due to gravity accurately, you should use <a clas [...]
-<p>The bilinear interpolation is based on the values at the 4 corners of the enclosing cell. The interpolated height is a continuous function of position; however the gradient has discontinuities are cell boundaries. The quantization of the data files exacerbates the errors in the gradients.</p>
-<p>The cubic interpolation is a least-squares fit to the values on a 12-point stencil with weights as follows: </p>
-<div class="fragment"><pre class="fragment">
-   . 1 1 .
-   1 2 2 1
-   1 2 2 1
-   . 1 1 .
-</pre></div><p> The cubic is constrained to be independent of longitude when evaluating the height at one of the poles. Cubic interpolation is considerably more accurate than bilinear interpolation; however, in this implementation there are small discontinuities in the heights are cell boundaries. The over-constrained cubic fit slightly reduces the quantization errors on average.</p>
-<p>The algorithm for the least squares fit is taken from, F. H. Lesh, Multi-dimensional least-squares polynomial curve fitting, CACM 2, 29-30 (1959). This algorithm is not part of <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a>; instead it is implemented as <a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a> code which is used to precompute the matrices to convert the function values on the stencil [...]
-<p>The interpolation methods are quick and give good accuracy. Here is a summary of the combined quantization and interpolation errors for the heights. </p>
-<center><table class="doxtable">
-<caption align="bottom">Interpolation and quantization errors for geoid heights</caption>
-<tr>
-<th rowspan="2">name </th><th rowspan="2">geoid </th><th rowspan="2">grid </th><th colspan="2"><center>bilinear error</center> </th><th colspan="2"><center>cubic error</center> </th></tr>
-<tr>
-<th><center>max</center></th><th><center>rms</center> </th><th><center>max</center></th><th><center>rms</center> </th></tr>
-<tr>
-<td>egm84-30 </td><td>EGM84 </td><td><center>30' </center> </td><td><center>1.546 m</center></td><td><center>70 mm</center> </td><td><center>0.274 m</center></td><td><center>14 mm</center> </td></tr>
-<tr>
-<td>egm84-15 </td><td>EGM84 </td><td><center>15' </center> </td><td><center>0.413 m</center></td><td><center>18 mm</center> </td><td><center>0.021 m</center></td><td><center>1.2 mm</center> </td></tr>
-<tr>
-<td>egm96-15 </td><td>EGM96 </td><td><center>15' </center> </td><td><center>1.152 m</center></td><td><center>40 mm</center> </td><td><center>0.169 m</center></td><td><center>7.0 mm</center> </td></tr>
-<tr>
-<td>egm96-5 </td><td>EGM96 </td><td><center> 5' </center> </td><td><center>0.140 m</center></td><td><center>4.6 mm</center> </td><td><center>0.0032 m</center></td><td><center>0.7 mm</center> </td></tr>
-<tr>
-<td>egm2008-5 </td><td>EGM2008</td><td><center> 5' </center> </td><td><center>0.478 m</center></td><td><center>12 mm</center> </td><td><center>0.294 m</center></td><td><center>4.5 mm</center> </td></tr>
-<tr>
-<td>egm2008-2_5</td><td>EGM2008</td><td><center> 2.5'</center> </td><td><center>0.135 m</center></td><td><center>3.2 mm</center> </td><td><center>0.031 m</center></td><td><center>0.8 mm</center> </td></tr>
-<tr>
-<td>egm2008-1 </td><td>EGM2008</td><td><center> 1' </center> </td><td><center>0.025 m</center></td><td><center>0.8 mm</center> </td><td><center>0.0022 m</center></td><td><center>0.7 mm</center> </td></tr>
-</table>
-</center><p> The errors are with respect to the specific NGA earth gravity model (not to any "real" geoid). The RMS values are obtained using 5 million uniformly distributed random points. The maximum values are obtained by evaluating the errors using a different grid with points at the centers of the original grid. (The RMS difference between EGM96 and EGM2008 is about 0.5 m. The RMS difference between EGM84 and EGM96 is about 1.5 m.)</p>
-<p>The errors in the table above include the quantization errors that arise because the height data that <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> uses are quantized to 3 mm. If, instead, <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> were to use data files without such quantization artifacts, the overall error would be reduced <em>b [...]
-<center><table class="doxtable">
-<caption align="bottom">Interpolation (only!) errors for geoid heights</caption>
-<tr>
-<th rowspan="2">name </th><th rowspan="2">geoid </th><th rowspan="2">grid </th><th colspan="2"><center>bilinear error</center> </th><th colspan="2"><center>cubic error</center> </th></tr>
-<tr>
-<th><center>max</center></th><th><center>rms</center> </th><th><center>max</center></th><th><center>rms</center> </th></tr>
-<tr>
-<td>egm96-5 </td><td>EGM96 </td><td><center> 5' </center> </td><td><center>0.140 m</center></td><td><center>4.6 mm</center> </td><td><center><b>0.0026 m</b></center></td><td><center><b>0.1 mm</b></center> </td></tr>
-<tr>
-<td>egm2008-2_5</td><td>EGM2008</td><td><center> 2.5'</center> </td><td><center>0.135 m</center></td><td><center>3.2 mm</center> </td><td><center>0.031 m</center></td><td><center><b>0.4 mm</b></center> </td></tr>
-<tr>
-<td>egm2008-1 </td><td>EGM2008</td><td><center> 1' </center> </td><td><center>0.025 m</center></td><td><center><b>0.6 mm</b></center> </td><td><center><b>0.0010 m</b></center></td><td><center><b>0.011 mm</b></center> </td></tr>
-</table>
-</center><h2><a class="anchor" id="geoidcache"></a>
-Caching the geoid data</h2>
-<p>A simple way of calling Geoid is as follows </p>
-<div class="fragment"><pre class="fragment"><span class="preprocessor">   #include <<a class="code" href="Geoid_8hpp.html" title="Header for GeographicLib::Geoid class.">GeographicLib/Geoid.hpp</a>></span>
-<span class="preprocessor">   #include <iostream></span>
-   ...
-   GeographicLib::Geoid g(<span class="stringliteral">"egm96-5"</span>);
-   <span class="keywordtype">double</span> lat, lon;
-   <span class="keywordflow">while</span> (std::cin >> lat >> lon)
-      std::cout << g(lat, lon) << <span class="stringliteral">"\n"</span>;
-   ...
-</pre></div><p>The first call to g(lat, lon) causes the data for the stencil points (4 points for bilinear interpolation and 12 for cubic interpolation) to be read and the interpolated value returned. A simple 0th-order caching scheme is provided by default, so that, if the second and subsequent points falls within the same grid cell, the data values are not reread from the file. This is adequate for most interactive use and also minimizes disk accesses for the case when a continuous tra [...]
-<p>If a large quantity of geoid calculations are needed, the calculation can be sped up by preloading the data for a rectangular block with <a class="el" href="classGeographicLib_1_1Geoid.html#a52b5dc2d976796046aaeb8765e4a9c0f">GeographicLib::Geoid::CacheArea</a> or the entire dataset with <a class="el" href="classGeographicLib_1_1Geoid.html#a482c6482d5ab4c5d661210327848170e">GeographicLib::Geoid::CacheAll</a>. If the requested points lie within the cached area, the cached data values ar [...]
-<p>The use of caching does not affect the values returned. Because of the caching and the random file access, this class is <em>not</em> normally thread safe; i.e., a single instantiation cannot be safely used by multiple threads. If multiple threads need to calculate geoid heights, there are two alternatives:</p>
-<ul>
-<li>they should all construct thread-local instantiations.</li>
-<li><a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> should be constructed with <em>threadsafe</em> = true. This causes all the data to be read at the time of construction (and if this fails, an exception is thrown), the data file to be closed and the single-cell caching to be turned off. The resulting object may then be shared safely between threads.</li>
-</ul>
-<h2><a class="anchor" id="testgeoid"></a>
-Test data for geoids</h2>
-<p>A test set for the geoid models is available at</p>
-<ul>
-<li><a href="http://sf.net/projects/geographiclib/files/testdata/GeoidHeights.dat.gz/download">GeoidHeights.dat.gz</a></li>
-</ul>
-<p>This is about 11 MB (compressed). This test set consists of a set of 500000 geographic coordinates together with the corresponding geoid heights according to various earth gravity models.</p>
-<p>Each line of the test set gives 6 space delimited numbers</p>
-<ul>
-<li>latitude (degrees, exact)</li>
-<li>longitude (degrees, exact)</li>
-<li>EGM84 height (meters, accurate to 1 um)</li>
-<li>EGM96 height (meters, accurate to 1 um)</li>
-<li>EGM2008 height (meters, accurate to 1 um)</li>
-</ul>
-<p>The latitude and longitude are all multiples of 10<sup>-6</sup> deg and should be regarded as exact. The geoid heights are computed using the harmonic NGA synthesis programs, where the programs were compiled (with gfortran) and run under Linux. In the case of the EGM2008 program, a <code>SAVE</code> statement needed to be added to subroutine <code>latf</code>, in order for the program to compile correctly with a stack-based compiler. Similarly the EGM96 code requires a <code>SAVE</cod [...]
-<center> Back to <a class="el" href="other.html">Other interfaces (Javascript, Python, Matlab, Octave)</a>. Forward to <a class="el" href="gravity.html">Gravity models</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/globals.html b/doc/html/globals.html
deleted file mode 100644
index af72cc0..0000000
--- a/doc/html/globals.html
+++ /dev/null
@@ -1,388 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: File Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li class="current"><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="globals.html"><span>All</span></a></li>
-      <li><a href="globals_func.html"><span>Functions</span></a></li>
-      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
-      <li><a href="globals_defs.html"><span>Defines</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="#index_a"><span>a</span></a></li>
-      <li><a href="#index_d"><span>d</span></a></li>
-      <li><a href="#index_g"><span>g</span></a></li>
-      <li><a href="#index_l"><span>l</span></a></li>
-      <li><a href="#index_m"><span>m</span></a></li>
-      <li><a href="#index_p"><span>p</span></a></li>
-      <li><a href="#index_r"><span>r</span></a></li>
-      <li><a href="#index_s"><span>s</span></a></li>
-      <li><a href="#index_t"><span>t</span></a></li>
-      <li><a href="#index_w"><span>w</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all file members with links to the files they belong to:</div>
-
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>AzimuthString()
-: <a class="el" href="Geod_8cpp.html#adeb84b4732b410c9fdccf799037ef245">Geod.cpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>DistanceStrings()
-: <a class="el" href="Geod_8cpp.html#a600021136749afe8d757335563b5b544">Geod.cpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
-<li>GEOD_ORD
-: <a class="el" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">Geodesic.hpp</a>
-</li>
-<li>GEOGRAPHIC_EXPORT
-: <a class="el" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">Constants.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_ACCUMULATOR_HPP
-: <a class="el" href="Accumulator_8hpp.html#af2ea0de968b20eb37534fa6baedcba54">Accumulator.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_ALBERSEQUALAREA_CPP
-: <a class="el" href="AlbersEqualArea_8cpp.html#a0cbf05d716ed87a0d1bc3cc16e6adb2a">AlbersEqualArea.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_ALBERSEQUALAREA_HPP
-: <a class="el" href="AlbersEqualArea_8hpp.html#aa9494d369d907d2b285fcb2f45b4689c">AlbersEqualArea.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP
-: <a class="el" href="AzimuthalEquidistant_8cpp.html#a66c8226c0b34ef5b0138d44829f5c394">AzimuthalEquidistant.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP
-: <a class="el" href="AzimuthalEquidistant_8hpp.html#a70d20e83eaef9177a9dbc4503fae17b7">AzimuthalEquidistant.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_CASSINISOLDNER_CPP
-: <a class="el" href="CassiniSoldner_8cpp.html#a91edbe2e2eaf2776b80aecf2107909d4">CassiniSoldner.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_CASSINISOLDNER_HPP
-: <a class="el" href="CassiniSoldner_8hpp.html#ab674f10f5e4e3b25dc68c65fa408e315">CassiniSoldner.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_CIRCULARENGINE_CPP
-: <a class="el" href="CircularEngine_8cpp.html#af686808d87a6f2cd0b1305f1aeac536d">CircularEngine.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_CIRCULARENGINE_HPP
-: <a class="el" href="CircularEngine_8hpp.html#abfcea264d0e3f7a45c8ff8de7f2e539f">CircularEngine.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_CONSTANTS_HPP
-: <a class="el" href="Constants_8hpp.html#a16d93570265d8037f7dc7d5d026b2aa4">Constants.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_CPLUSPLUS11_MATH
-: <a class="el" href="Math_8hpp.html#a2769cdfa2277e2728e4e157ec3f6318b">Math.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_DATA
-: <a class="el" href="MagneticModel_8cpp.html#a45687ef771d809c1c369daea074cc109">MagneticModel.cpp</a>
-, <a class="el" href="Geoid_8cpp.html#a45687ef771d809c1c369daea074cc109">Geoid.cpp</a>
-, <a class="el" href="GravityModel_8cpp.html#a45687ef771d809c1c369daea074cc109">GravityModel.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_DMS_CPP
-: <a class="el" href="DMS_8cpp.html#a6ef96ce6d2929e11dc6ec87433f4d7d1">DMS.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_DMS_HPP
-: <a class="el" href="DMS_8hpp.html#a844e4c8afc70c59c842f4553ce40b9c6">DMS.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP
-: <a class="el" href="EllipticFunction_8cpp.html#a7843c8be162380a81bdd1c48d00a475b">EllipticFunction.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP
-: <a class="el" href="EllipticFunction_8hpp.html#a94cb49e5d48fa1a0399e4303f1ad162a">EllipticFunction.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOCENTRIC_CPP
-: <a class="el" href="Geocentric_8cpp.html#a290e33302d7c35b9465d73f33dcb0774">Geocentric.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOCENTRIC_HPP
-: <a class="el" href="Geocentric_8hpp.html#a29517663058dd79a39541248f58db55f">Geocentric.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOCOORDS_CPP
-: <a class="el" href="GeoCoords_8cpp.html#a8ca6643c26cc3909b0935409c1dbc403">GeoCoords.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOCOORDS_HPP
-: <a class="el" href="GeoCoords_8hpp.html#a20841ff1ac217be34150ce32c5ad4bb8">GeoCoords.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEODESIC_CPP
-: <a class="el" href="Geodesic_8cpp.html#a61dcde881d6a80b561fc2b4c4b327883">Geodesic.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEODESIC_HPP
-: <a class="el" href="Geodesic_8hpp.html#ab538cb707d6ff36056dd372c7e9e6d7e">Geodesic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEODESICLINE_CPP
-: <a class="el" href="GeodesicLine_8cpp.html#a8c325bf3ebfa8126888b62b16495d64e">GeodesicLine.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEODESICLINE_HPP
-: <a class="el" href="GeodesicLine_8hpp.html#a45305d595b59bfb061a5a0c6e1044485">GeodesicLine.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOID_CPP
-: <a class="el" href="Geoid_8cpp.html#ad2cadd66a2a8fe0322579f4a1922a907">Geoid.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOID_HPP
-: <a class="el" href="Geoid_8hpp.html#a81966978f2fe7fad1effabc667a99820">Geoid.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GNOMONIC_CPP
-: <a class="el" href="Gnomonic_8cpp.html#ad62c02d3264b4069476f2f1aa21f223e">Gnomonic.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GNOMONIC_HPP
-: <a class="el" href="Gnomonic_8hpp.html#af85f3f443620d568666f526ee193308a">Gnomonic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GRAVITYCIRCLE_CPP
-: <a class="el" href="GravityCircle_8cpp.html#a57d7b0412922810faed5fb35173f561c">GravityCircle.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GRAVITYCIRCLE_HPP
-: <a class="el" href="GravityCircle_8hpp.html#a07d4fadabf913f2115556a6de80f6115">GravityCircle.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GRAVITYMODEL_CPP
-: <a class="el" href="GravityModel_8cpp.html#a65e1bf85112eafa00622f95531afc180">GravityModel.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GRAVITYMODEL_HPP
-: <a class="el" href="GravityModel_8hpp.html#ace85f3a4d35d4657064e289e2bf57dab">GravityModel.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP
-: <a class="el" href="LambertConformalConic_8cpp.html#adf8d4ab2a5f0e2571915d27d31758930">LambertConformalConic.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP
-: <a class="el" href="LambertConformalConic_8hpp.html#aac2fbd995d5b75016781c58b97093c67">LambertConformalConic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_LOCALCARTESIAN_CPP
-: <a class="el" href="LocalCartesian_8cpp.html#a0917de4aed4abb985b1e2830077aea45">LocalCartesian.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_LOCALCARTESIAN_HPP
-: <a class="el" href="LocalCartesian_8hpp.html#a628d4dcde137e8249cb7fdbcaab30acd">LocalCartesian.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_MAGNETICCIRCLE_CPP
-: <a class="el" href="MagneticCircle_8cpp.html#a0ca864788d9c9fdd4987afdc16db17ac">MagneticCircle.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_MAGNETICCIRCLE_HPP
-: <a class="el" href="MagneticCircle_8hpp.html#a5bc784ff412658d1c422828506b424da">MagneticCircle.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_MAGNETICMODEL_CPP
-: <a class="el" href="MagneticModel_8cpp.html#ac744ec56ccbc33cff2c75c204b4c7ae1">MagneticModel.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_MAGNETICMODEL_HPP
-: <a class="el" href="MagneticModel_8hpp.html#a8f9f091785b789fbe080c650bc0b8654">MagneticModel.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_MATH_HPP
-: <a class="el" href="Math_8hpp.html#afb2818ef5e2f2bed96dcaa151b3edca4">Math.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_MGRS_CPP
-: <a class="el" href="MGRS_8cpp.html#a7882927f72a62a7131868e387edd4dac">MGRS.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_MGRS_HPP
-: <a class="el" href="MGRS_8hpp.html#a1c5e778121820c6ec16b6180ffab51ac">MGRS.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_NORMALGRAVITY_CPP
-: <a class="el" href="NormalGravity_8cpp.html#ae09694799ad8f72c9b216b9729848655">NormalGravity.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_NORMALGRAVITY_HPP
-: <a class="el" href="NormalGravity_8hpp.html#a3f83059dc418514a79fa4e6c94869b58">NormalGravity.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_OSGB_CPP
-: <a class="el" href="OSGB_8cpp.html#af7fa9aa83a3be95cccc572fc3b399b58">OSGB.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_OSGB_HPP
-: <a class="el" href="OSGB_8hpp.html#a786c5942146679103feb716bea66a0a7">OSGB.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP
-: <a class="el" href="PolarStereographic_8cpp.html#a2887f1d8fd2633373698a2d1468befc2">PolarStereographic.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP
-: <a class="el" href="PolarStereographic_8hpp.html#a7450566a6ed1475dc10f7c0dc85f5dd9">PolarStereographic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_POLYGONAREA_CPP
-: <a class="el" href="PolygonArea_8cpp.html#adda27aeacbbca888326b0f4cd9577254">PolygonArea.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_POLYGONAREA_HPP
-: <a class="el" href="PolygonArea_8hpp.html#a284051319ec399ec9363ace180fc1203">PolygonArea.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_PREC
-: <a class="el" href="Math_8hpp.html#a8df061fdb3d6e90d150d4fdd749f96b1">Math.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALENGINE_CPP
-: <a class="el" href="SphericalEngine_8cpp.html#acbb0476075cd231855709ab48c95fa7e">SphericalEngine.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALENGINE_HPP
-: <a class="el" href="SphericalEngine_8hpp.html#a46e29e0e930e205c8f9a059ae458b44e">SphericalEngine.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP
-: <a class="el" href="SphericalHarmonic1_8hpp.html#a16f04a6cf043288bc2d78f51d9c42186">SphericalHarmonic1.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP
-: <a class="el" href="SphericalHarmonic2_8hpp.html#a15f930b306cf77dee059d32d2bb417ad">SphericalHarmonic2.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALHARMONIC_HPP
-: <a class="el" href="SphericalHarmonic_8hpp.html#ab6742c760b0220c0a0d6423bed5b8bf8">SphericalHarmonic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP
-: <a class="el" href="TransverseMercator_8cpp.html#ab09ba83d5531a4ca91dc8ce82ae98084">TransverseMercator.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP
-: <a class="el" href="TransverseMercator_8hpp.html#abbbe2faaff284db3183ddf3afcbf5623">TransverseMercator.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP
-: <a class="el" href="TransverseMercatorExact_8cpp.html#a019dc2a5f6ac9aa9ba03ad8dd974e438">TransverseMercatorExact.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP
-: <a class="el" href="TransverseMercatorExact_8hpp.html#a33c80ffd2f74ea9ed9dd4c11bf9e1198">TransverseMercatorExact.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_UTILITY_CPP
-: <a class="el" href="Utility_8cpp.html#a572751ca8465c95b9e157dc20175f6bc">Utility.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_UTILITY_HPP
-: <a class="el" href="Utility_8hpp.html#aba45651243cd7449a073dd2c8b11a88a">Utility.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_UTMUPS_CPP
-: <a class="el" href="UTMUPS_8cpp.html#af7026e1ac5bb37428765d957f2f14a6b">UTMUPS.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_UTMUPS_HPP
-: <a class="el" href="UTMUPS_8hpp.html#aab4dce5d203c0d98ae740800332ed9d9">UTMUPS.hpp</a>
-</li>
-<li>GEOID_DEFAULT_NAME
-: <a class="el" href="Geoid_8cpp.html#a2999d90c0556a04490ea239ddcb052b8">Geoid.cpp</a>
-</li>
-<li>GRAVITY_DEFAULT_NAME
-: <a class="el" href="GravityModel_8cpp.html#a05d4f5b688275acf184933e85a0063bd">GravityModel.cpp</a>
-</li>
-<li>GRAVITY_DEFAULT_PATH
-: <a class="el" href="GravityCircle_8cpp.html#a21f239249a382b864294a231061d97d4">GravityCircle.cpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>LatLonString()
-: <a class="el" href="Geod_8cpp.html#a8c3a2a4c039b4d0118416afd97a45fcf">Geod.cpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>MAGNETIC_DEFAULT_NAME
-: <a class="el" href="MagneticModel_8cpp.html#a302055ff69e445c8103c09913de840ff">MagneticModel.cpp</a>
-</li>
-<li>MAGNETIC_DEFAULT_PATH
-: <a class="el" href="MagneticCircle_8cpp.html#adda468b8dc758dd6d082ccf33c5e1b75">MagneticCircle.cpp</a>
-</li>
-<li>main()
-: <a class="el" href="Planimeter_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">Planimeter.cpp</a>
-, <a class="el" href="MagneticField_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">MagneticField.cpp</a>
-, <a class="el" href="Gravity_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">Gravity.cpp</a>
-, <a class="el" href="GeoidEval_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">GeoidEval.cpp</a>
-, <a class="el" href="GeodesicProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">GeodesicProj.cpp</a>
-, <a class="el" href="Geod_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">Geod.cpp</a>
-, <a class="el" href="GeoConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">GeoConvert.cpp</a>
-, <a class="el" href="ConicProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">ConicProj.cpp</a>
-, <a class="el" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">CartConvert.cpp</a>
-, <a class="el" href="TransverseMercatorProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">TransverseMercatorProj.cpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>PGM_PIXEL_WIDTH
-: <a class="el" href="Geoid_8hpp.html#aa34d236045b829973cbc0d958d3ed139">Geoid.hpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>RCSID_DECL
-: <a class="el" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">Constants.hpp</a>
-</li>
-<li>ReadDistance()
-: <a class="el" href="Geod_8cpp.html#a01ac56deedd203bd66c8c7328654b7e9">Geod.cpp</a>
-</li>
-<li>real
-: <a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">Geod.cpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>STATIC_ASSERT
-: <a class="el" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">Constants.hpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>TM_TX_MAXPOW
-: <a class="el" href="TransverseMercator_8hpp.html#a823820984cba9dabe0517925bf18c77b">TransverseMercator.hpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>WORDS_BIGENDIAN
-: <a class="el" href="Math_8hpp.html#a82e69009d3cd108c8aad8afe44fb1132">Math.hpp</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/globals_defs.html b/doc/html/globals_defs.html
deleted file mode 100644
index 1c19969..0000000
--- a/doc/html/globals_defs.html
+++ /dev/null
@@ -1,346 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: File Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li class="current"><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="globals.html"><span>All</span></a></li>
-      <li><a href="globals_func.html"><span>Functions</span></a></li>
-      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
-      <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="#index_g"><span>g</span></a></li>
-      <li><a href="#index_m"><span>m</span></a></li>
-      <li><a href="#index_p"><span>p</span></a></li>
-      <li><a href="#index_r"><span>r</span></a></li>
-      <li><a href="#index_s"><span>s</span></a></li>
-      <li><a href="#index_t"><span>t</span></a></li>
-      <li><a href="#index_w"><span>w</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
-<li>GEOD_ORD
-: <a class="el" href="Geodesic_8hpp.html#a1927ca941a173c95631417cbd8cc8e0c">Geodesic.hpp</a>
-</li>
-<li>GEOGRAPHIC_EXPORT
-: <a class="el" href="Constants_8hpp.html#a59a204dcc2942f86d7b24b4233aad719">Constants.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_ACCUMULATOR_HPP
-: <a class="el" href="Accumulator_8hpp.html#af2ea0de968b20eb37534fa6baedcba54">Accumulator.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_ALBERSEQUALAREA_CPP
-: <a class="el" href="AlbersEqualArea_8cpp.html#a0cbf05d716ed87a0d1bc3cc16e6adb2a">AlbersEqualArea.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_ALBERSEQUALAREA_HPP
-: <a class="el" href="AlbersEqualArea_8hpp.html#aa9494d369d907d2b285fcb2f45b4689c">AlbersEqualArea.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP
-: <a class="el" href="AzimuthalEquidistant_8cpp.html#a66c8226c0b34ef5b0138d44829f5c394">AzimuthalEquidistant.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP
-: <a class="el" href="AzimuthalEquidistant_8hpp.html#a70d20e83eaef9177a9dbc4503fae17b7">AzimuthalEquidistant.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_CASSINISOLDNER_CPP
-: <a class="el" href="CassiniSoldner_8cpp.html#a91edbe2e2eaf2776b80aecf2107909d4">CassiniSoldner.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_CASSINISOLDNER_HPP
-: <a class="el" href="CassiniSoldner_8hpp.html#ab674f10f5e4e3b25dc68c65fa408e315">CassiniSoldner.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_CIRCULARENGINE_CPP
-: <a class="el" href="CircularEngine_8cpp.html#af686808d87a6f2cd0b1305f1aeac536d">CircularEngine.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_CIRCULARENGINE_HPP
-: <a class="el" href="CircularEngine_8hpp.html#abfcea264d0e3f7a45c8ff8de7f2e539f">CircularEngine.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_CONSTANTS_HPP
-: <a class="el" href="Constants_8hpp.html#a16d93570265d8037f7dc7d5d026b2aa4">Constants.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_CPLUSPLUS11_MATH
-: <a class="el" href="Math_8hpp.html#a2769cdfa2277e2728e4e157ec3f6318b">Math.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_DATA
-: <a class="el" href="MagneticModel_8cpp.html#a45687ef771d809c1c369daea074cc109">MagneticModel.cpp</a>
-, <a class="el" href="Geoid_8cpp.html#a45687ef771d809c1c369daea074cc109">Geoid.cpp</a>
-, <a class="el" href="GravityModel_8cpp.html#a45687ef771d809c1c369daea074cc109">GravityModel.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_DMS_CPP
-: <a class="el" href="DMS_8cpp.html#a6ef96ce6d2929e11dc6ec87433f4d7d1">DMS.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_DMS_HPP
-: <a class="el" href="DMS_8hpp.html#a844e4c8afc70c59c842f4553ce40b9c6">DMS.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP
-: <a class="el" href="EllipticFunction_8cpp.html#a7843c8be162380a81bdd1c48d00a475b">EllipticFunction.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP
-: <a class="el" href="EllipticFunction_8hpp.html#a94cb49e5d48fa1a0399e4303f1ad162a">EllipticFunction.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOCENTRIC_CPP
-: <a class="el" href="Geocentric_8cpp.html#a290e33302d7c35b9465d73f33dcb0774">Geocentric.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOCENTRIC_HPP
-: <a class="el" href="Geocentric_8hpp.html#a29517663058dd79a39541248f58db55f">Geocentric.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOCOORDS_CPP
-: <a class="el" href="GeoCoords_8cpp.html#a8ca6643c26cc3909b0935409c1dbc403">GeoCoords.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOCOORDS_HPP
-: <a class="el" href="GeoCoords_8hpp.html#a20841ff1ac217be34150ce32c5ad4bb8">GeoCoords.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEODESIC_CPP
-: <a class="el" href="Geodesic_8cpp.html#a61dcde881d6a80b561fc2b4c4b327883">Geodesic.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEODESIC_HPP
-: <a class="el" href="Geodesic_8hpp.html#ab538cb707d6ff36056dd372c7e9e6d7e">Geodesic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEODESICLINE_CPP
-: <a class="el" href="GeodesicLine_8cpp.html#a8c325bf3ebfa8126888b62b16495d64e">GeodesicLine.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEODESICLINE_HPP
-: <a class="el" href="GeodesicLine_8hpp.html#a45305d595b59bfb061a5a0c6e1044485">GeodesicLine.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOID_CPP
-: <a class="el" href="Geoid_8cpp.html#ad2cadd66a2a8fe0322579f4a1922a907">Geoid.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GEOID_HPP
-: <a class="el" href="Geoid_8hpp.html#a81966978f2fe7fad1effabc667a99820">Geoid.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GNOMONIC_CPP
-: <a class="el" href="Gnomonic_8cpp.html#ad62c02d3264b4069476f2f1aa21f223e">Gnomonic.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GNOMONIC_HPP
-: <a class="el" href="Gnomonic_8hpp.html#af85f3f443620d568666f526ee193308a">Gnomonic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GRAVITYCIRCLE_CPP
-: <a class="el" href="GravityCircle_8cpp.html#a57d7b0412922810faed5fb35173f561c">GravityCircle.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GRAVITYCIRCLE_HPP
-: <a class="el" href="GravityCircle_8hpp.html#a07d4fadabf913f2115556a6de80f6115">GravityCircle.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_GRAVITYMODEL_CPP
-: <a class="el" href="GravityModel_8cpp.html#a65e1bf85112eafa00622f95531afc180">GravityModel.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_GRAVITYMODEL_HPP
-: <a class="el" href="GravityModel_8hpp.html#ace85f3a4d35d4657064e289e2bf57dab">GravityModel.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP
-: <a class="el" href="LambertConformalConic_8cpp.html#adf8d4ab2a5f0e2571915d27d31758930">LambertConformalConic.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP
-: <a class="el" href="LambertConformalConic_8hpp.html#aac2fbd995d5b75016781c58b97093c67">LambertConformalConic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_LOCALCARTESIAN_CPP
-: <a class="el" href="LocalCartesian_8cpp.html#a0917de4aed4abb985b1e2830077aea45">LocalCartesian.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_LOCALCARTESIAN_HPP
-: <a class="el" href="LocalCartesian_8hpp.html#a628d4dcde137e8249cb7fdbcaab30acd">LocalCartesian.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_MAGNETICCIRCLE_CPP
-: <a class="el" href="MagneticCircle_8cpp.html#a0ca864788d9c9fdd4987afdc16db17ac">MagneticCircle.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_MAGNETICCIRCLE_HPP
-: <a class="el" href="MagneticCircle_8hpp.html#a5bc784ff412658d1c422828506b424da">MagneticCircle.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_MAGNETICMODEL_CPP
-: <a class="el" href="MagneticModel_8cpp.html#ac744ec56ccbc33cff2c75c204b4c7ae1">MagneticModel.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_MAGNETICMODEL_HPP
-: <a class="el" href="MagneticModel_8hpp.html#a8f9f091785b789fbe080c650bc0b8654">MagneticModel.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_MATH_HPP
-: <a class="el" href="Math_8hpp.html#afb2818ef5e2f2bed96dcaa151b3edca4">Math.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_MGRS_CPP
-: <a class="el" href="MGRS_8cpp.html#a7882927f72a62a7131868e387edd4dac">MGRS.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_MGRS_HPP
-: <a class="el" href="MGRS_8hpp.html#a1c5e778121820c6ec16b6180ffab51ac">MGRS.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_NORMALGRAVITY_CPP
-: <a class="el" href="NormalGravity_8cpp.html#ae09694799ad8f72c9b216b9729848655">NormalGravity.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_NORMALGRAVITY_HPP
-: <a class="el" href="NormalGravity_8hpp.html#a3f83059dc418514a79fa4e6c94869b58">NormalGravity.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_OSGB_CPP
-: <a class="el" href="OSGB_8cpp.html#af7fa9aa83a3be95cccc572fc3b399b58">OSGB.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_OSGB_HPP
-: <a class="el" href="OSGB_8hpp.html#a786c5942146679103feb716bea66a0a7">OSGB.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP
-: <a class="el" href="PolarStereographic_8cpp.html#a2887f1d8fd2633373698a2d1468befc2">PolarStereographic.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP
-: <a class="el" href="PolarStereographic_8hpp.html#a7450566a6ed1475dc10f7c0dc85f5dd9">PolarStereographic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_POLYGONAREA_CPP
-: <a class="el" href="PolygonArea_8cpp.html#adda27aeacbbca888326b0f4cd9577254">PolygonArea.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_POLYGONAREA_HPP
-: <a class="el" href="PolygonArea_8hpp.html#a284051319ec399ec9363ace180fc1203">PolygonArea.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_PREC
-: <a class="el" href="Math_8hpp.html#a8df061fdb3d6e90d150d4fdd749f96b1">Math.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALENGINE_CPP
-: <a class="el" href="SphericalEngine_8cpp.html#acbb0476075cd231855709ab48c95fa7e">SphericalEngine.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALENGINE_HPP
-: <a class="el" href="SphericalEngine_8hpp.html#a46e29e0e930e205c8f9a059ae458b44e">SphericalEngine.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP
-: <a class="el" href="SphericalHarmonic1_8hpp.html#a16f04a6cf043288bc2d78f51d9c42186">SphericalHarmonic1.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP
-: <a class="el" href="SphericalHarmonic2_8hpp.html#a15f930b306cf77dee059d32d2bb417ad">SphericalHarmonic2.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_SPHERICALHARMONIC_HPP
-: <a class="el" href="SphericalHarmonic_8hpp.html#ab6742c760b0220c0a0d6423bed5b8bf8">SphericalHarmonic.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP
-: <a class="el" href="TransverseMercator_8cpp.html#ab09ba83d5531a4ca91dc8ce82ae98084">TransverseMercator.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP
-: <a class="el" href="TransverseMercator_8hpp.html#abbbe2faaff284db3183ddf3afcbf5623">TransverseMercator.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP
-: <a class="el" href="TransverseMercatorExact_8cpp.html#a019dc2a5f6ac9aa9ba03ad8dd974e438">TransverseMercatorExact.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP
-: <a class="el" href="TransverseMercatorExact_8hpp.html#a33c80ffd2f74ea9ed9dd4c11bf9e1198">TransverseMercatorExact.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_UTILITY_CPP
-: <a class="el" href="Utility_8cpp.html#a572751ca8465c95b9e157dc20175f6bc">Utility.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_UTILITY_HPP
-: <a class="el" href="Utility_8hpp.html#aba45651243cd7449a073dd2c8b11a88a">Utility.hpp</a>
-</li>
-<li>GEOGRAPHICLIB_UTMUPS_CPP
-: <a class="el" href="UTMUPS_8cpp.html#af7026e1ac5bb37428765d957f2f14a6b">UTMUPS.cpp</a>
-</li>
-<li>GEOGRAPHICLIB_UTMUPS_HPP
-: <a class="el" href="UTMUPS_8hpp.html#aab4dce5d203c0d98ae740800332ed9d9">UTMUPS.hpp</a>
-</li>
-<li>GEOID_DEFAULT_NAME
-: <a class="el" href="Geoid_8cpp.html#a2999d90c0556a04490ea239ddcb052b8">Geoid.cpp</a>
-</li>
-<li>GRAVITY_DEFAULT_NAME
-: <a class="el" href="GravityModel_8cpp.html#a05d4f5b688275acf184933e85a0063bd">GravityModel.cpp</a>
-</li>
-<li>GRAVITY_DEFAULT_PATH
-: <a class="el" href="GravityCircle_8cpp.html#a21f239249a382b864294a231061d97d4">GravityCircle.cpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>MAGNETIC_DEFAULT_NAME
-: <a class="el" href="MagneticModel_8cpp.html#a302055ff69e445c8103c09913de840ff">MagneticModel.cpp</a>
-</li>
-<li>MAGNETIC_DEFAULT_PATH
-: <a class="el" href="MagneticCircle_8cpp.html#adda468b8dc758dd6d082ccf33c5e1b75">MagneticCircle.cpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>PGM_PIXEL_WIDTH
-: <a class="el" href="Geoid_8hpp.html#aa34d236045b829973cbc0d958d3ed139">Geoid.hpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>RCSID_DECL
-: <a class="el" href="Constants_8hpp.html#af90fa899707a2ac513d5e4c76853bbf5">Constants.hpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>STATIC_ASSERT
-: <a class="el" href="Constants_8hpp.html#a8f24445c1bccd69b63e365aa5d5bb129">Constants.hpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>TM_TX_MAXPOW
-: <a class="el" href="TransverseMercator_8hpp.html#a823820984cba9dabe0517925bf18c77b">TransverseMercator.hpp</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>WORDS_BIGENDIAN
-: <a class="el" href="Math_8hpp.html#a82e69009d3cd108c8aad8afe44fb1132">Math.hpp</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html
deleted file mode 100644
index e88f5cc..0000000
--- a/doc/html/globals_func.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: File Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li class="current"><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="globals.html"><span>All</span></a></li>
-      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
-      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
-      <li><a href="globals_defs.html"><span>Defines</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- <ul>
-<li>AzimuthString()
-: <a class="el" href="Geod_8cpp.html#adeb84b4732b410c9fdccf799037ef245">Geod.cpp</a>
-</li>
-<li>DistanceStrings()
-: <a class="el" href="Geod_8cpp.html#a600021136749afe8d757335563b5b544">Geod.cpp</a>
-</li>
-<li>LatLonString()
-: <a class="el" href="Geod_8cpp.html#a8c3a2a4c039b4d0118416afd97a45fcf">Geod.cpp</a>
-</li>
-<li>main()
-: <a class="el" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">CartConvert.cpp</a>
-, <a class="el" href="TransverseMercatorProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">TransverseMercatorProj.cpp</a>
-, <a class="el" href="Planimeter_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">Planimeter.cpp</a>
-, <a class="el" href="MagneticField_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">MagneticField.cpp</a>
-, <a class="el" href="Gravity_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">Gravity.cpp</a>
-, <a class="el" href="GeoidEval_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">GeoidEval.cpp</a>
-, <a class="el" href="GeodesicProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">GeodesicProj.cpp</a>
-, <a class="el" href="Geod_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">Geod.cpp</a>
-, <a class="el" href="GeoConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">GeoConvert.cpp</a>
-, <a class="el" href="ConicProj_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">ConicProj.cpp</a>
-</li>
-<li>ReadDistance()
-: <a class="el" href="Geod_8cpp.html#a01ac56deedd203bd66c8c7328654b7e9">Geod.cpp</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/globals_type.html b/doc/html/globals_type.html
deleted file mode 100644
index 3127035..0000000
--- a/doc/html/globals_type.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: File Members</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li class="current"><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="files.html"><span>File List</span></a></li>
-      <li class="current"><a href="globals.html"><span>File Members</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="globals.html"><span>All</span></a></li>
-      <li><a href="globals_func.html"><span>Functions</span></a></li>
-      <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
-      <li><a href="globals_defs.html"><span>Defines</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
- <ul>
-<li>real
-: <a class="el" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">Geod.cpp</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:17 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/gravity.html b/doc/html/gravity.html
deleted file mode 100644
index 7ff3f99..0000000
--- a/doc/html/gravity.html
+++ /dev/null
@@ -1,356 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Gravity models</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Gravity models </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="geoid.html">Geoid height</a>. Forward to <a class="el" href="magnetic.html">Magnetic models</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>GeographicLib can compute the earth's gravitational field with an earth gravity model using the <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> and <a class="el" href="c [...]
-<p>The supported models are</p>
-<ul>
-<li><b>egm84</b>, the <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">Earth Gravity Model 1984</a>, which includes terms up to degree 180.</li>
-<li><b>egm96</b>, the <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">Earth Gravity Model 1996</a>, which includes terms up to degree 360.</li>
-<li><b>egm2008</b>, the <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">Earth Gravity Model 2008</a>, which includes terms up to degree 2190.</li>
-<li><b>wgs84</b>, the <a href="http://earth-info.nga.mil/GandG/publications/tr8350.2/tr8350_2.html">WGS84 Reference Ellipsoid</a>. This is just reproduces the normal gravitational field for the reference ellipsoid. Usually <a class="el" href="classGeographicLib_1_1NormalGravity.html#a70c328a95e05964180106d89c2583b78">GeographicLib::NormalGravity::WGS84</a> should be used instead.</li>
-</ul>
-<p>See</p>
-<ul>
-<li>W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San Francisco, 1967).</li>
-</ul>
-<p>for more information.</p>
-<p><b>Acknowledgment:</b> I would like to thank Mathieu Peyréga for sharing EGM_Geoid_CalculatorClass from his Geo library with me. His implementation was the first I could easily understand and he and I together worked through some of the issues with overflow and underflow the occur while performing high-degree spherical harmonic sums.</p>
-<p>Go to</p>
-<ul>
-<li><a class="el" href="gravity.html#gravityinst">Installing the gravity models</a></li>
-<li><a class="el" href="gravity.html#gravityformat">The format of the gravity model files</a></li>
-<li><a class="el" href="gravity.html#gravitynga">Comments on the NGA harmonic synthesis code</a></li>
-<li><a class="el" href="gravity.html#gravitygeoid">Details of the geoid height and anomaly calculations</a></li>
-<li><a class="el" href="gravity.html#gravityatmos">The effect of the mass of the atmosphere</a></li>
-<li><a class="el" href="gravity.html#gravityparallel">Geoid heights on a multi-processor system</a></li>
-</ul>
-<h2><a class="anchor" id="gravityinst"></a>
-Installing the gravity models</h2>
-<p>These gravity models are available for download: </p>
-<center> <table class="doxtable">
-<caption align="bottom">Available gravity models</caption>
-<tr>
-<th rowspan="2">name </th><th rowspan="2">max<br/>
- degree </th><th rowspan="2">size<br/>
-(kB) </th><th colspan="3"><center>Download Links (size, kB)</center> </th></tr>
-<tr>
-<th>tar file </th><th>Windows<br/>
- installer </th><th>zip file </th></tr>
-<tr>
-<td>egm84 </td><td><center>180</center> </td><td><center>27</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm84.tar.bz2/download">link</a> (26)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm84.exe/download">link</a> (55)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm84.zip/download">link</a> (26)</center> </td></tr>
-<tr>
-<td>egm96 </td><td><center>360</center> </td><td><center>2100</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm96.tar.bz2/download">link</a> (2100)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm96.exe/download">link</a> (2300)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm96.zip/download">link</a> (2100)</center> </td></tr>
-<tr>
-<td>egm2008 </td><td><center>2190</center> </td><td><center>76000</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm2008.tar.bz2/download">link</a> (75000)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm2008.exe/download">link</a> (72000)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/egm2008.zip/download">link</a> (73000)</center> </td></tr>
-<tr>
-<td>wgs84 </td><td><center>20</center> </td><td><center>1</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/wgs84.tar.bz2/download">link</a> (1)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/wgs84.exe/download">link</a> (30)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/gravity-distrib/wgs84.zip/download">link</a> (1)</center> </td></tr>
-</table>
-</center><p> The "size" column is the size of the uncompressed data.</p>
-<p>For Linux and Unix systems, GeographicLib provides a shell script geographiclib-get-gravity (typically installed in /usr/local/sbin) which automates the process of downloading and installing the gravity models. For example </p>
-<div class="fragment"><pre class="fragment">
-   geographiclib-get-gravity all  # to install egm84, egm96, egm2008, wgs84
-   geographiclib-get-gravity -h   # for help
-</pre></div><p> This script should be run as a user with write access to the installation directory, which is typically /usr/local/share/GeographicLib (this can be overridden with the -p flag), and the data will then be placed in the "gravity" subdirectory.</p>
-<p>Windows users should download and run the Windows installers. These will prompt for an installation directory with the default being one of </p>
-<div class="fragment"><pre class="fragment">
-   C:/Documents and Settings/All Users/Application Data/GeographicLib
-   C:/ProgramData/GeographicLib
-</pre></div><p> (which you probably should not change) and the data is installed in the "gravity" sub-directory. (The second directory name is an alternate name that Windows 7 for the "Application Data" directory.)</p>
-<p>Otherwise download <em>either</em> the tar.bz2 file <em>or</em> the zip file (they have the same contents). To unpack these, run, for example </p>
-<div class="fragment"><pre class="fragment">
-   mkdir -p /usr/local/share/GeographicLib
-   tar xofjC egm96.tar.bz2 /usr/local/share/GeographicLib
-   tar xofjC egm2008.tar.bz2 /usr/local/share/GeographicLib
-   etc.
-</pre></div><p> and, again, the data will be placed in the "gravity" subdirectory.</p>
-<p>However you install the gravity models, all the datasets should be installed in the same directory. <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> and <a href="Gravity.1.html">Gravity</a> uses a compile time default to locate the datasets. This is</p>
-<ul>
-<li>/usr/local/share/GeographicLib/gravity, for non-Windows systems</li>
-<li>C:/Documents and Settings/All Users/Application Data/GeographicLib/gravity, for Windows systems</li>
-</ul>
-<p>consistent with the examples above. This may be overridden at run-time by defining the GRAVITY_PATH or the GEOGRAPHIC_DATA environment variables; see <a class="el" href="classGeographicLib_1_1GravityModel.html#a0fdf62e41828ae7ae183d9e876f37954">GeographicLib::GravityModel::DefaultGravityPath()</a> for details. Finally, the path may be set using the optional second argument to the <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field [...]
-<h2><a class="anchor" id="gravityformat"></a>
-The format of the gravity model files</h2>
-<p>The constructor for <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> reads a file called NAME.egm which specifies various properties for the gravity model. It then opens a binary file NAME.egm.cof to obtain the coefficients of the spherical harmonic sum.</p>
-<p>The first line of the .egm file must consist of "EGMF-v" where EGMF stands for "Earth Gravity Model Format" and v is the version number of the format (currently "1").</p>
-<p>The rest of the File is read a line at a time. A # character and everything after it are discarded. If the result is just white space it is discarded. The remaining lines are of the form "KEY WHITESPACE
-VALUE". In general, the KEY and the VALUE are case-sensitive.</p>
-<p><a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> only pays attention to the following keywords</p>
-<ul>
-<li>keywords that affect the field calculation, namely:<ul>
-<li><b>ModelRadius</b> (required), the normalizing radius for the model in meters.</li>
-<li><b>ReferenceRadius</b> (required), the major radius <em>a</em> for the reference ellipsoid meters.</li>
-<li><b>ModelMass</b> (required), the mass constant <em>GM</em> for the model in meters<sup>3</sup>/seconds<sup>2</sup>.</li>
-<li><b>ReferenceMass</b> (required), the mass constant <em>GM</em> for the reference ellipsoid in meters<sup>3</sup>/seconds<sup>2</sup>.</li>
-<li><b>AngularVelocity</b> (required), the angular velocity <em>omega</em> for the model <em>and</em> the reference ellipsoid in rad seconds<sup>-1</sup>.</li>
-<li><b>Flattening</b>, the flattening of the reference ellipsoid; this can be given a fraction, e.g., 1/298.257223563. One of <b>Flattening</b> and <b>DynamicalFormFactor</b> is required.</li>
-<li><b>DynamicalFormFactor</b>, the dynamical form factor <em>J</em><sub>2</sub> for the reference ellipsoid. One of <b>Flattening</b> and <b>DynamicalFormFactor</b> is required.</li>
-<li><b>HeightOffset</b> (default 0), the constant height offset (meters) added to obtain the geoid height.</li>
-<li><b>CorrectionMultiplier</b> (default 1), the multiplier for the "zeta-to-N" correction terms for the geoid height to convert them to meters.</li>
-<li><b>Normalization</b> (default full), the normalization used for the associated Legendre functions (full or schmidt).</li>
-<li><b>ID</b> (required), 8 printable characters which serve as a signature for the .egm.cof file (they must appear as the first 8 bytes of this file).</li>
-</ul>
-The parameters <b>ModelRadius</b>, <b>ModelMass</b>, and <b>AngularVelocity</b> apply to the gravity model, while <b>ReferenceRadius</b>, <b>ReferenceMass</b>, <b>AngularVelocity</b>, and either <b>Flattening</b> or <b>DynamicalFormFactor</b> characterize the reference ellipsoid. <b>AngularVelocity</b> (because it can be measured precisely) is the same for the gravity model and the reference ellipsoid. <b>ModelRadius</b> is merely a scaling parameter for the gravity model and there's no  [...]
-<li>keywords that store data that the user can query:<ul>
-<li><b>Name</b>, the name of the model.</li>
-<li><b>Description</b>, a more descriptive name of the model.</li>
-<li><b>ReleaseDate</b>, when the model was created.</li>
-</ul>
-</li>
-<li>keywords that are examined to verify that their values are valid:<ul>
-<li><b>ByteOrder</b> (default little), the order of bytes in the .egm.cof file. Only little endian is supported at present.</li>
-</ul>
-</li>
-</ul>
-<p>Other keywords are ignored.</p>
-<p>The coefficient file NAME.egm.cof is a binary file in little endian order. The first 8 bytes of this file must match the ID given in NAME.egm. This is followed by 2 sets of spherical harmonic coefficients. The first of these gives the gravity potential and the second gives the zeta-to-N corrections to the geoid height. The format for each set of coefficients is:</p>
-<ul>
-<li><em>N</em>, the maximum degree of the sum stored as a 4-byte signed integer. This must satisfy <em>N</em> >= -1.</li>
-<li><em>M</em>, the maximum order of the sum stored as a 4-byte signed integer. This must satisfy <em>N</em> >= <em>M</em> >= -1.</li>
-<li><em>C<sub><em>nm</sub></em>,</em> the coefficients of the cosine coefficients of the sum in column (i.e., <em>m</em>) major order. There are (<em>M</em> + 1) (2<em>N</em> - <em>M</em> + 2) / 2 elements which are stored as IEEE doubles (8 bytes). For example for <em>N</em> = <em>M</em> = 3, there are 10 coefficients arranged as <em>C</em><sub>00</sub>, <em>C</em><sub>10</sub>, <em>C</em><sub>20</sub>, <em>C</em><sub>30</sub>, <em>C</em><sub>11</sub>, <em>C</em><sub>21</sub>, <em>C</em [...]
-<li><em>S<sub><em>nm</sub></em>,</em> the coefficients of the sine coefficients of the sum in column (i.e., <em>m</em>) major order starting at <em>m</em> = 1. There are <em>M</em> (2<em>N</em> - <em>M</em> + 1) / 2 elements which are stored as IEEE doubles (8 bytes). For example for <em>N</em> = <em>M</em> = 3, there are 6 coefficients arranged as <em>S</em><sub>11</sub>, <em>S</em><sub>21</sub>, <em>S</em><sub>31</sub>, <em>S</em><sub>22</sub>, <em>S</em><sub>32</sub>, <em>S</em><sub>3 [...]
-</ul>
-<p>Although the coefficient file is in little endian order, GeographicLib can read it on big endian machines. It can only be read on machines which store doubles in IEEE format.</p>
-<p>As an illustration, here is egm2008.egm: </p>
-<div class="fragment"><pre class="fragment">
-EGMF-1
-# An Earth Gravity Model (Format 1) file.  For documentation on the
-# format of this file see
-# http://geographiclib.sf.net/html/gravity.html#gravityformat
-Name            egm2008
-Publisher       National Geospatial Intelligence Agency
-Description     Earth Gravity Model 2008
-URL             http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
-ReleaseDate     2008-06-01
-ConversionDate  2011-11-19
-DataVersion     1
-ModelRadius     6378136.3
-ModelMass       3986004.415e8
-AngularVelocity 7292115e-11
-ReferenceRadius 6378137
-ReferenceMass   3986004.418e8
-Flattening      1/298.257223563
-HeightOffset    -0.41
-
-# Gravitational and correction coefficients taken from
-# EGM2008_to2190_TideFree and Zeta-to-N_to2160_egm2008 from
-# the egm2008 distribution.
-ID              EGM2008A
-</pre></div><h2><a class="anchor" id="gravitynga"></a>
-Comments on the NGA harmonic synthesis code</h2>
-<p><a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> attempts to reproduce the results of NGA's harmonic synthesis code for EGM2008, hsynth_WGS84.f. Listed here are issues that I encountered using the NGA code:</p>
-<ol type="1">
-<li>A compiler which allocates local variables on the stack produces an executable with just returns NaNs. The problem here is a missing <code>SAVE</code> statement in subroutine <code>latf</code>.</li>
-<li>Because the model and references masses for egm2008 differ (by about 1 part in 10<sup>9</sup>), there should be a 1/<em>r</em> contribution to the disturbing potential <em>T</em>. However, this term is set to zero in hsynth_WGS84 (effectively altering the normal potential). This shifts the surface <em>W</em> = <em>U</em><sub>0</sub> outward by about 5 mm. Note too that the reference ellipsoid is no longer a level surface of the effective normal potential.</li>
-<li>Subroutine <code>radgrav</code> computes the ellipsoidal coordinate <em>beta</em> incorrectly. This leads to small errors in the deflection of the vertical, <em>xi</em> and <em>eta</em>, when the height above the ellipsoid, <em>h</em>, is non-zero (about 1e-7 arcsec at <em>h</em> = 400 km).</li>
-<li>There are several expressions which will return inaccurate results due to cancellation. For example, subroutine <code>grs</code> computes the flattening using <em>f</em> = 1 - sqrt(1 - <em>e</em><sup>2</sup>). Much better is to use <em>f</em> = <em>e</em><sup>2</sup>/(1 + sqrt(1 - <em>e</em><sup>2</sup>)). The expressions for <em>q</em> and <em>q'</em> in <code>grs</code> and <code>radgrav</code> suffer from similar problems. The resulting errors are tiny (about 50 pm in the geoid he [...]
-<li>hsynth_WGS84 returns an "undefined" value for <em>xi</em> and <em>eta</em> at the poles. Better would be to return the value obtained by taking the limit <em>lat</em> -> +/- 90<sup>o</sup>.</li>
-</ol>
-<p>Issues 1–4 have been reported to the authors of hsynth_WGS84. Issue 1 is peculiar to Fortran and is not encountered in C++ code and <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> corrects issues 3–5. On issue 2, <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> neglects the 1/<em>r</em> term [...]
-<h2><a class="anchor" id="gravitygeoid"></a>
-Details of the geoid height and anomaly calculations</h2>
-<p>Ideally, the geoid represents a surface of constant gravitational potential which approximates mean sea level. In reality some approximations are taken in determining this surface. The steps taking by <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> in computing the geoid height are described here (in the context of EGM2008). This mimics NGA's code hsynth_WGS84 closely because most users of EGM [...]
-<ul>
-<li>The model potential is band limited; the minimum wavelength that is represented is 360<sup>o</sup>/2160 = 10' (i.e., about 10NM or 18.5km). The maximum degree for the spherical harmonic sum is 2190; however the model was derived using ellipsoidal harmonics of degree and order 2160 and the degree was increased to 2190 in order to capture the ellipsoidal harmonics faithfully with spherical harmonics.</li>
-<li>The 1/<em>r</em> term is omitted from the <em>T</em> (this is issue 2 in <a class="el" href="gravity.html#gravitynga">Comments on the NGA harmonic synthesis code</a>). This moves the equipotential surface by about 5mm.</li>
-<li>The surface <em>W</em> = <em>U</em><sub>0</sub> is determined by Bruns' formula, which is roughly equivalent to a single iteration of Newton's method. The RMS error in this approximation is about 1.5mm with a maximum error of about 10 mm.</li>
-<li>The model potential is only valid above the earth's surface. A correction therefore needs to be included where the geoid lies beneath the terrain. This is NGA's "zeta-to-N" correction, which is represented by a spherical harmonic sum of degree and order 2160 (and so it misses short wavelength terrain variations). In addition, it entails estimating the isostatic equilibrium of the earth's crust. The correction lies in the range [-5.05 m, 0.05 m], however for 99.9% of the earth's surfa [...]
-<li>The resulting surface lies above the observed mean sea level, so -0.41m is added to the geoid height. (Better would be to change the potential used to define the geoid; but this would only change the result by about 2mm.)</li>
-</ul>
-<p>A useful discussion of the problems with defining a geoid is given by Dru A. Smith in <a href="http://www.ngs.noaa.gov/PUBS_LIB/EGM96_GEOID_PAPER/egm96_geoid_paper.html">There is no such thing as "The" EGM96 geoid: Subtle points on the use of a global geopotential model</a>, IGeS Bulletin No. 8, International Geoid Service, Milan, Italy, pp. 17–28 (1998).</p>
-<p><a class="el" href="classGeographicLib_1_1GravityModel.html#a7e75bdba6b9c8e64cc64403335a6fba4">GeographicLib::GravityModel::GeoidHeight</a> reproduces the results of the several NGA codes for harmonic synthesis with the following maximum discrepancies:</p>
-<ul>
-<li>egm84 = 1.1mm. This is probably due to inconsistent parameters for the reference ellipsoid in the NGA code. (In particular, the value of mass constant excludes the atmosphere; however, it's not clear whether the other parameters have been correspondingly adjusted.) Note that geoid heights predicted by egm84 differ from those of more recent gravity models by about 1 meter.</li>
-<li>egm96 = 23nm.</li>
-<li>egm2008 = 78pm. After addressing some of the issues alluded to in issue 4 in <a class="el" href="gravity.html#gravitynga">Comments on the NGA harmonic synthesis code</a>, the maximum discrepancy becomes 23pm.</li>
-</ul>
-<p>The formula for the gravity anomaly vector involves computing gravity and normal gravity at two different points (with the displacement between the points unknown <em>ab initio</em>). Since the gravity anomaly is already a small quantity it is sometimes acceptable to employ approximations that change the quantities by <em>O</em>(<em>f</em>). The NGA code uses the spherical approximation described by Heiskanen and Moritz, Sec. 2-14 and <a class="el" href="classGeographicLib_1_1GravityM [...]
-<ul>
-<li>gravity anomaly, <em>Dg01</em> = <em>deltaz</em> - 2<em>T</em>/<em>R</em>, where <em>R</em> distance to the center of the earth;</li>
-<li>northerly component of the deflection of the vertical, <em>xi</em> = - <em>deltay</em>/<em>gamma</em>, where <em>gamma</em> is the magnitude of the normal gravity;</li>
-<li>easterly component of the deflection of the vertical, <em>eta</em> = - <em>deltax</em>/<em>gamma</em>.</li>
-</ul>
-<p><a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> computes the normal gravity accurately and avoids issue 3 of <a class="el" href="gravity.html#gravitynga">Comments on the NGA harmonic synthesis code</a>. Thus while <a class="el" href="classGeographicLib_1_1GravityModel.html#aaf89eb4a9b7266f0aa2ef2c341fc264e">GeographicLib::GravityModel::SphericalAnomaly</a> reproduces the results for <em>xi</em> and [...]
-<h2><a class="anchor" id="gravityatmos"></a>
-The effect of the mass of the atmosphere</h2>
-<p>All of the supported models use WGS84 for the reference ellipsoid. This has (see <a href="http://earth-info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf">TR8350.2</a>, table 3.1)</p>
-<ul>
-<li><em>a</em> = 6378137 m</li>
-<li><em>f</em> = 1/298.257223563</li>
-<li><em>omega</em> = 7292115e-11 rad s<sup>-1</sup></li>
-<li><em>GM</em> = 3986004.418e8 m<sup>3</sup>/s<sup>2</sup>.</li>
-</ul>
-<p>The value of <em>GM</em> includes the mass of the atmosphere and so strictly only applies above the earth's atmosphere. Near the surface of the earth, the value of <em>g</em> will be less (in absolute value) than the value predicted by these models by about <em>delta</em> <em>g</em> = (4 <em>pi</em> <em>G</em>/<em>g</em>) <em>A</em> = 8.552e-11 <em>A</em> m<sup>2</sup>/kg, where <em>G</em> is the gravitational constant, <em>g</em> is the earth's gravity, and <em>A</em> is the pressure [...]
-<h2><a class="anchor" id="gravityparallel"></a>
-Geoid heights on a multi-processor system</h2>
-<p>The egm2008 model includes many terms (over 2 million spherical harmonics). For that reason computations using this model may be slow; for example it takes about 78 ms to compute the geoid height at a single point. There are two ways to speed up this computation:</p>
-<ul>
-<li>Use a <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> to compute the geoid height at several points on a circle of latitude. This reduces the cost per point to about 92 us (a reduction by a factor of over 800).</li>
-<li>Compute the values on several circles of latitude in parallel. One of the simplest ways of doing this is with <a href="http://openmp.org">OpenMP</a>; on an 8-processor system, this can speed up the computation by another factor of 8.</li>
-</ul>
-<p>Both of these techniques are illustrated by the following code, which computes a table of geoid heights on a regular grid and writes on the result in a <a href="http://vdatum.noaa.gov/dev/gtx_info.html#dev_gtx_binary">.gtx</a> file. On an 8-processor Intel 2.66 GHz machine using OpenMP (-DHAVE_OPENMP=1), it takes about 40 minutes of elapsed time to compute the geoid height for EGM2008 on a 1' gride. (Without these optimizations, the computation would have taken about 200 days!) </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Write out a gtx file of geoid heights.  For egm2008 at 1' resolution this</span>
-<span class="comment">// takes about 40 mins on a 8-processor Intel 2.66 GHz machine using OpenMP</span>
-<span class="comment">// (-DHAVE_OPENMP=1).</span>
-<span class="comment">//</span>
-<span class="comment">// For the format of gtx files, see</span>
-<span class="comment">// http://vdatum.noaa.gov/dev/gtx_info.html#dev_gtx_binary</span>
-<span class="comment">//</span>
-<span class="comment">// data is binary big-endian:</span>
-<span class="comment">//   south latitude edge (degrees double)</span>
-<span class="comment">//   west longitude edge (degrees double)</span>
-<span class="comment">//   delta latitude (degrees double)</span>
-<span class="comment">//   delta longitude (degrees double)</span>
-<span class="comment">//   nlat = number of latitude rows (integer)</span>
-<span class="comment">//   nlong = number of longitude columns (integer)</span>
-<span class="comment">//   nlat * nlong geoid heights (meters float)</span>
-
-<span class="preprocessor">#include <vector></span>
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <fstream></span>
-<span class="preprocessor">#include <string></span>
-<span class="preprocessor">#include <algorithm></span>
-
-<span class="preprocessor">#if HAVE_OPENMP</span>
-<span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span>
-<span class="preprocessor">#endif</span>
-<span class="preprocessor"></span>
-<span class="preprocessor">#include <<a class="code" href="GravityModel_8hpp.html" title="Header for GeographicLib::GravityModel class.">GeographicLib/GravityModel.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="GravityCircle_8hpp.html" title="Header for GeographicLib::GravityCircle class.">GeographicLib/GravityCircle.hpp</a>></span>
-<span class="preprocessor">#include <<a class="code" href="Utility_8hpp.html" title="Header for GeographicLib::Utility class.">GeographicLib/Utility.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
-  <span class="comment">// Hardwired for 3 args:</span>
-  <span class="comment">// 1 = the gravity model (e.g., egm2008)</span>
-  <span class="comment">// 2 = intervals per degree</span>
-  <span class="comment">// 3 = output GTX file</span>
-  <span class="keywordflow">if</span> (argc != 4) {
-    cerr << <span class="stringliteral">"Usage: "</span> << argv[0]
-         << <span class="stringliteral">" gravity-model intervals-per-degree output.gtx\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">try</span> {
-    <span class="keywordtype">string</span> model(argv[1]);
-    <span class="comment">// Number of intervals per degree</span>
-    <span class="keywordtype">int</span> ndeg = <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::num<int>(string(argv[2]));
-    <span class="keywordtype">string</span> filename(argv[3]);
-    <a class="code" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GravityModel</a> g(model);
-    <span class="keywordtype">int</span>
-      nlat = 180 * ndeg + 1,
-      nlon = 360 * ndeg;
-    <span class="keywordtype">double</span>
-      delta = 1 / double(ndeg), <span class="comment">// Grid spacing</span>
-      latorg = -90,
-      lonorg = -180;
-    <span class="comment">// Write results as floats in binary mode</span>
-    ofstream file(filename.c_str(), ios::binary);
-
-    <span class="comment">// Write header</span>
-    {
-      <span class="keywordtype">double</span> transform[] = {latorg, lonorg, delta, delta};
-      <span class="keywordtype">unsigned</span> sizes[] = {nlat, nlon};
-      <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::writearray<double, double, true>(file, transform, 4);
-      <a class="code" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">Utility</a>::writearray<unsigned, unsigned, true>(file, sizes, 2);
-    }
-
-    <span class="comment">// Compute and store results for nbatch latitudes at a time</span>
-    <span class="keyword">const</span> <span class="keywordtype">int</span> nbatch = 64;
-    vector< vector<float> > N(nbatch, vector<float>(nlon));
-
-    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> ilat0 = 0; ilat0 < nlat; ilat0 += nbatch) { <span class="comment">// Loop over batches</span>
-      <span class="keywordtype">int</span> nlat0 = min(nlat, ilat0 + nbatch);
-
-<span class="preprocessor">#if HAVE_OPENMP</span>
-<span class="preprocessor"></span><span class="preprocessor">#pragma omp parallel for</span>
-<span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<span class="preprocessor"></span>      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> ilat = ilat0; ilat < nlat0; ++ilat) { <span class="comment">// Loop over latitudes</span>
-        <span class="keywordtype">double</span>
-          lat = latorg + (ilat / ndeg) + delta * (ilat - ndeg * (ilat / ndeg)),
-          h = 0;
-        <a class="code" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GravityCircle</a> c(g.Circle(lat, h, GravityModel::GEOID_HEIGHT));
-        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> ilon = 0; ilon < nlon; ++ilon) { <span class="comment">// Loop over longitudes</span>
-          <span class="keywordtype">double</span> lon = lonorg
-            + (ilon / ndeg) + delta * (ilon - ndeg * (ilon / ndeg));
-          N[ilat - ilat0][ilon] = float(c.GeoidHeight(lon));
-        } <span class="comment">// longitude loop</span>
-      }   <span class="comment">// latitude loop -- end of parallel section</span>
-
-      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> ilat = ilat0; ilat < nlat0; ++ilat) <span class="comment">// write out data</span>
-        Utility::writearray<float, float, true>(file, N[ilat - ilat0]);
-    } <span class="comment">// batch loop</span>
-  }
-  <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception& e) {
-    cerr << <span class="stringliteral">"Caught exception: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">catch</span> (...) {
-    cerr << <span class="stringliteral">"Caught unknown exception\n"</span>;
-    <span class="keywordflow">return</span> 1;
-  }
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p>This example is built if cmake is invoked with <code>-D GEOGRAPHICLIB_EXAMPLES=ON</code>. cmake will add in support for OpenMP, if it is available.</p>
-<center> Back to <a class="el" href="geoid.html">Geoid height</a>. Forward to <a class="el" href="magnetic.html">Magnetic models</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/index.html b/doc/html/index.html
deleted file mode 100644
index 50b43c4..0000000
--- a/doc/html/index.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Geographic library</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li class="current"><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Geographic library </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><dl class="author"><dt><b>Author:</b></dt><dd>Charles Karney <<a href="mailto:charles at karney.com">charles at karney.com</a>> </dd></dl>
-<dl class="version"><dt><b>Version:</b></dt><dd>1.21 </dd></dl>
-<dl class="date"><dt><b>Date:</b></dt><dd>2012-04-25</dd></dl>
-<h2><a class="anchor" id="abstract"></a>
-Abstract</h2>
-<p>GeographicLib is a small set of <a href="annotated.html">C++ classes</a> for performing conversions between geographic, UTM, UPS, MGRS, geocentric, and local cartesian coordinates, for gravity (e.g., EGM2008), geoid height and geomagnetic field (e.g., WMM2010) calculations, and for solving geodesic problems. The emphasis is on returning accurate results with errors close to round-off (about 5–15 nanometers). New accurate algorithms for <a class="el" href="geodesic.html">Geodesic [...]
-<p>This library is <em>not</em> a general purpose projection library; use <a href="http://trac.osgeo.org/proj/">proj.4</a> for that. On the other hand, it does provide the core functionality offered by <a href="http://earth-info.nima.mil/GandG/geotrans/">geotrans</a> and it cures several of the defects of that package.</p>
-<h2><a class="anchor" id="download"></a>
-Download</h2>
-<p>The main project page is at</p>
-<ul>
-<li><a href="http://sourceforge.net/projects/geographiclib">http://sourceforge.net/projects/geographiclib </a></li>
-</ul>
-<p>The code is available for download at</p>
-<ul>
-<li><a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.21.tar.gz/download">GeographicLib-1.21.tar.gz</a></li>
-<li><a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.21.zip/download">GeographicLib-1.21.zip</a></li>
-</ul>
-<p>as either a compressed tar file (tar.gz) or a zip file. (The two archives have identical contents.) Alternatively you can get the latest stable release using git </p>
-<div class="fragment"><pre class="fragment">
-  git clone git://geographiclib.git.sf.net/gitroot/geographiclib/geographiclib-release geographiclib
-  cd geographiclib; git checkout stable
-</pre></div><p> There are also a binary installers for Windows available at</p>
-<ul>
-<li><a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win32.exe/download">GeographicLib-1.21-win32.exe</a></li>
-<li><a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win64.exe/download">GeographicLib-1.21-win64.exe</a></li>
-</ul>
-<p>It is licensed under the <a href="http://www.opensource.org/licenses/MIT">MIT/X11 License</a>; see <a href="LICENSE.txt">LICENSE.txt</a> for the terms. For more information, see <a href="http://geographiclib.sourceforge.net/.">http://geographiclib.sourceforge.net/.</a></p>
-<h2><a class="anchor" id="contents"></a>
-Contents</h2>
-<ul>
-<li><a class="el" href="intro.html">Introduction</a></li>
-<li><a class="el" href="install.html">Installing GeographicLib</a></li>
-<li><a class="el" href="start.html">Getting started</a></li>
-<li><a class="el" href="utilities.html">Utility programs</a></li>
-<li><a class="el" href="organization.html">Code organization</a></li>
-<li><a class="el" href="other.html">Other interfaces (Javascript, Python, Matlab, Octave)</a></li>
-<li><a class="el" href="geoid.html">Geoid height</a></li>
-<li><a class="el" href="gravity.html">Gravity models</a></li>
-<li><a class="el" href="magnetic.html">Magnetic models</a></li>
-<li><a class="el" href="geodesic.html">Geodesics on the ellipsoid</a></li>
-<li><a class="el" href="transversemercator.html">Transverse Mercator projection</a></li>
-<li><a class="el" href="geocentric.html">Geocentric coordinates</a></li>
-<li><a class="el" href="old.html">Old versions</a></li>
-</ul>
-<center> Forward to <a class="el" href="intro.html">Introduction</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/install.html b/doc/html/install.html
deleted file mode 100644
index 2e726c7..0000000
--- a/doc/html/install.html
+++ /dev/null
@@ -1,232 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Installing %GeographicLib</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Installing GeographicLib </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="intro.html">Introduction</a>. Forward to <a class="el" href="start.html">Getting started</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>GeographicLib has been developed under Linux with the g++ compiler (versions 4.0 and later) and under Windows with Visual Studio 2005, 2008, and 2010. Earlier versions were tested also under Darwin and Solaris. It should compile on a wide range of other systems. Fi [...]
-<ul>
-<li><a class="el" href="install.html#cmake">Installation with cmake</a>. This is the preferred installation method as it will work on the widest range of platforms. However it requires that you have <a href="http://www.cmake.org">cmake</a> installed.</li>
-<li><a class="el" href="install.html#autoconf">Installation using the autoconfigure tools</a>. This method works for most Unix-like systems, including Linux and Mac OS X.</li>
-<li><a class="el" href="install.html#gnu">Installation with GNU compiler and Make</a>. This is a simple installation method that works with g++ and GNU make on Linux and many Unix platforms.</li>
-<li><a class="el" href="install.html#windows">Installation on Windows</a>. This is a simple installation method that works with Visual Studio 2005, 2008, and 2010 under Windows.</li>
-<li><a class="el" href="install.html#windowsbin">Using a binary installer for Windows</a>. Use this installation method if you only need to use the <a class="el" href="utilities.html">Utility programs</a> supplied with GeographicLib. (This method also installs the header files and the static library for use by Visual Studio 2010.)</li>
-<li><a class="el" href="install.html#qt">Building the library for use with Qt</a>. How to compile GeographicLib so that it can be used by Qt programs.</li>
-<li><a class="el" href="install.html#maintainer">Maintainer tasks</a>. This describes addition tasks of interest only to the maintainers of this code.</li>
-</ul>
-<p>This section documents only how to install the <em>software</em>. If you wish to use GeographicLib to evaluate geoid heights or the earth's gravitational or magnetic fields, then you must also install the relevant data files. See <a class="el" href="geoid.html#geoidinst">Installing the geoid datasets</a>, <a class="el" href="gravity.html#gravityinst">Installing the gravity models</a>, and <a class="el" href="magnetic.html#magneticinst">Installing the magnetic field models</a> for inst [...]
-<p>The first two installation methods use two important techniques which make software maintanence simpler</p>
-<ul>
-<li><b>Out-of-source builds:</b> This means that you create a separate directory for compiling the code. In the description here the directories are called BUILD and are located in the top-level of the source tree. You might want to use a suffix to denote the type of build, e.g., BUILD-vc9 for Visual Studio 9, or BUILD-shared for a build which creates a shared library. The advantages of out-of-source builds are:<ul>
-<li>You don't mess up the source tree, so it's easy to "clean up". Indeed the source tree might be on a read-only file system.</li>
-<li>Builds for multiple platforms or compilers don't interfere with each other.</li>
-</ul>
-</li>
-<li><b>The library is installed:</b> After compilation, there is a separate <em>install</em> step which copies the headers, libraries, tools, and documentation to a "central" location. You may at this point delete the source and build directories. If you have administrative privileges, you can install GeographicLib for the use of all users (e.g., in /usr/local). Otherwise, you can install it for your personal use (e.g., in $HOME/packages).</li>
-</ul>
-<h2><a class="anchor" id="cmake"></a>
-Installation with cmake</h2>
-<p>This is the recommended method of installation; however it requires that <a href="http://www.cmake.org">cmake</a> be installed on your system. This permits GeographicLib to be built either as a shared or a static library on a wide variety of systems. cmake can also determine the capabilities of your system and adjust the compilation of the libraries and examples appropriately.</p>
-<p>cmake is available for most computer platforms. On Linux systems cmake will typically one of the standard packages and can be installed by a command like </p>
-<div class="fragment"><pre class="fragment">
-  yum install cmake </pre></div><p> (executed as root). On other systems, download a binary installer from <a href="http://www.cmake.org">http://www.cmake.org</a> click on download, and save and run the appropriate installer. Run the cmake command with no arguments to get help. Other useful tools are ccmake and cmake-gui which offer curses and graphical interfaces to cmake. Building under cmake depends on whether it is targeting an IDE (interactive development environment) or generating  [...]
-<p>Here are the steps to compile and install GeographicLib:</p>
-<ul>
-<li>Unpack the source, running one of <div class="fragment"><pre class="fragment">
-  tar xfpz GeographicLib-1.21.tar.gz
-  unzip -q GeographicLib-1.21.zip </pre></div> then enter the directory created with one of <div class="fragment"><pre class="fragment">
-  cd GeographicLib-1.21 </pre></div></li>
-<li>Create a separate build directory and enter it, for example, <div class="fragment"><pre class="fragment">
-  mkdir BUILD
-  cd BUILD</pre></div></li>
-<li>Run cmake, pointing it to the source directory (..). On Linux, Unix, and MacOSX systems, the command is <div class="fragment"><pre class="fragment">
-  cmake .. </pre></div> For Windows, the command is typically one of <div class="fragment"><pre class="fragment">
-  cmake -G "Visual Studio 10" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10/GeographicLib ..
-  cmake -G "Visual Studio 9 2008" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc9/GeographicLib ..
-  cmake -G "Visual Studio 8 2005" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc8/GeographicLib ..
-</pre></div> Instead of setting CMAKE_INSTALL_PREFIX, you can (on Windows) set CMAKE_PREFIX_PATH to point to its parent directory, e.g., <div class="fragment"><pre class="fragment">
-  cmake -G "Visual Studio 10" -D CMAKE_PREFIX_PATH=C:/pkg-vc10 ..
-</pre></div> The definitions of CMAKE_INSTALL_PREFIX are optional (see below). The settings given above are recommended to ensure that packages that use GeographicLib use the version compiled with the right compiler. If you need to rerun cmake, use <div class="fragment"><pre class="fragment">
-  cmake . </pre></div> possibly including some options via <code>-D</code> (see the next step).</li>
-<li>cmake allows you to configure how GeographicLib is built and installed by supplying options, for example <div class="fragment"><pre class="fragment">
-  cmake -D CMAKE_INSTALL_PREFIX=/tmp/geographic . </pre></div> The options you might need to change are<ul>
-<li><code>CMAKE_INSTALL_PREFIX</code> (default: /usr/local on non-Windows systems, C:/Program Files/GeographicLib on Windows systems) specifies where the library will be installed. For windows systems, it is recommended to use a prefix which includes the compiler version, as shown above (and also, possibly, whether this is a 64-bit build, e.g., <code>cmake -G "Visual Studio 10 Win64" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10-x64/GeographicLib ..</code>) If you just want to try the library to s [...]
-<li><code>GEOGRAPHICLIB_DATA</code> (default: /usr/local/share/GeographicLib for non-Windows systems, C:/Documents and Settings/All Users/Application Data/GeographicLib for Windows systems) specifies the default location for the various datasets for use by <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a>, <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">Ge [...]
-<li><code>GEOGRAPHIC_SHARED_LIB</code> (default: ON for non-Windows systems, OFF for Windows systems) determines whether a shared or static library is built. The default is OFF for Windows because there's no standard place to install the dlls.</li>
-<li><code>CMAKE_BUILD_TYPE</code> (default: Release). This flags only affects non-IDE compile environments (like make + g++). The default is actually blank, but this is treated as Release. Choose one of <div class="fragment"><pre class="fragment">
-  Debug
-  Release
-  RelWithDebInfo
-  MinSizeRel
-</pre></div> (With IDE compile environments, you get to select the build type in the IDE.)</li>
-<li><code>MATLAB_COMPILER</code> (default: OFF). Set this to either "mex" (for Matlab) or "mkoctfile" (for Octave) to specify the compiler to use for the Matlab/Octave interface. See <a class="el" href="other.html#matlab">Matlab and Octave interfaces</a> for more information.</li>
-<li><code>MAINTAINER</code> (default: ON for non-Windows environments provided doxygen, pod2man, and pod2html are found). This affects whether the targets for creating source packages are activated. See <a class="el" href="install.html#maintainer">Maintainer tasks</a> for details.</li>
-<li><code>GEOGRAPHICLIB_EXAMPLES</code> (default: ON for the maintainer and OFF otherwise). If set to ON, then the short example programs in the <code>examples</code> directory are built.</li>
-</ul>
-</li>
-<li>Build and install the software. In non-IDE environments, run <div class="fragment"><pre class="fragment">
-  make         # compile the library and the examples
-  make test    # run some tests
-  make install # as root, if CMAKE_INSTALL_PREFIX is a system directory
-</pre></div> On IDE environments, run your IDE (e.g., Visual Studio), load GeographicLib.sln, pick the build type (e.g., Release), and select "Build
-  Solution". If this succeeds, select "RUN_TESTS" to build. Finally, select "INSTALL" to build.</li>
-<li>The headers, library, and utilities are installed in the include/GeographicLib, lib, and bin directories under <code>CMAKE_INSTALL_PREFIX</code>. (dll dynamic libraries are installed in bin.) The Matlab/Octave interface is installed in libexec/GeographicLib/matlab. For documentation, open <a href="index.html">share/doc/GeographicLib/html/index.html</a> in a web browser.</li>
-</ul>
-<h2><a class="anchor" id="autoconf"></a>
-Installation using the autoconfigure tools</h2>
-<p>The method works on most Unix-like systems including Linux and Mac OS X. Here are the steps to compile and install GeographicLib:</p>
-<ul>
-<li>Unpack the source, running <div class="fragment"><pre class="fragment">
-  tar xfpz GeographicLib-1.21.tar.gz </pre></div> then enter the directory created <div class="fragment"><pre class="fragment">
-  cd GeographicLib-1.21 </pre></div></li>
-<li>Create a separate build directory and enter it, for example, <div class="fragment"><pre class="fragment">
-  mkdir BUILD
-  cd BUILD</pre></div></li>
-<li>Configure the software, specifing the path of the source directory, with <div class="fragment"><pre class="fragment">
-  ../configure </pre></div></li>
-<li>By default GeographicLib will be installed under /usr/local. You can change this with, for example <div class="fragment"><pre class="fragment">
-  ../configure --prefix=/tmp/geographic </pre></div></li>
-<li>Compile and install the software with <div class="fragment"><pre class="fragment">
-  make
-  make install </pre></div></li>
-<li>The headers, library, and utilities are installed in the include/GeographicLib, lib, and bin directories under <code>prefix</code>. This installation method does not compile the Matlab/Octave interface; however the source for the interface is installed in libexec/GeographicLib/matlab, see <a class="el" href="other.html#matlab">Matlab and Octave interfaces</a> of instructions on compiling the interface. For documentation, open <a href="index.html">share/doc/GeographicLib/html/index.ht [...]
-</ul>
-<h2><a class="anchor" id="gnu"></a>
-Installation with GNU compiler and Make</h2>
-<p>This method requires the standard GNU suite of tools, in particular make and g++. This builds a static library and the examples.</p>
-<p>Here are the steps to compile and install GeographicLib:</p>
-<ul>
-<li>Unpack the source, running <div class="fragment"><pre class="fragment">
-  tar xfpz GeographicLib-1.21.tar.gz </pre></div> then enter the directory created <div class="fragment"><pre class="fragment">
-  cd GeographicLib-1.21 </pre></div></li>
-<li>Edit <div class="fragment"><pre class="fragment">
-  include/GeographicLib/Config.h </pre></div> If your C++ compiler does not recognize the long double type (unlikely), insert <div class="fragment"><pre class="fragment"><span class="preprocessor">  #undef HAVE_LONG_DOUBLE </span>
-</pre></div> If you machine using big endian ordering, then insert <div class="fragment"><pre class="fragment"><span class="preprocessor">  #define WORDS_BIGENDIAN 1 </span>
-</pre></div></li>
-<li>Build and install the software: <div class="fragment"><pre class="fragment">
-  make             # compile the library and the examples
-  make install     # as root </pre></div> The installation is in directories under /usr/local. You can specify a different installation directory with, for example, <div class="fragment"><pre class="fragment">
-  make PREFIX=/tmp/geographic install </pre></div></li>
-<li>The headers, library, and utilities are installed in the include/GeographicLib, lib, and bin directories under <code>PREFIX</code>. This installation method does not compile the Matlab/Octave interface; however the source for the interface is installed in libexec/GeographicLib/matlab, see <a class="el" href="other.html#matlab">Matlab and Octave interfaces</a> of instructions on compiling the interface. For documentation, open <a href="index.html">share/doc/GeographicLib/html/index.ht [...]
-</ul>
-<h2><a class="anchor" id="windows"></a>
-Installation on Windows</h2>
-<p>This method requires Visual Studio 2005, 2008, or 2010. This builds a static library and the utilities. If you only have Visual Studio 2003, use cmake to create the necessary solution file, see <a class="el" href="install.html#cmake">Installation with cmake</a>. (cmake is needed to build the Matlab interface and to run the tests.)</p>
-<ul>
-<li>Unpack the source, running <div class="fragment"><pre class="fragment">
-  unzip -q GeographicLib-1.21.zip </pre></div></li>
-<li>Open GeographicLib-1.21/windows/GeographicLib-vc10.sln in Visual Studio 2010 (for Visual Studio 2005 and 2008, replace -vc10 by -vc8 or -vc9).</li>
-<li>Pick the build type (e.g., Release), and select "Build Solution".</li>
-<li>The library and the compiled examples are in the windows/Release.</li>
-<li>Copy the library windows/Release/Geographic.lib and the headers in include/GeographicLib somewhere convenient. The headers should remain in a directory named GeographicLib. If you expect to use the Matlab/Octave interface, copy matlab/*.m and matlab/*.cpp to a directory in your matlab/octave path, see <a class="el" href="other.html#matlab">Matlab and Octave interfaces</a> for instructions on compiling the interface. For documentation, open <a href="index.html">doc/html/index.html</a> [...]
-</ul>
-<h2><a class="anchor" id="windowsbin"></a>
-Using a binary installer for Windows</h2>
-<p>Use this method if you only need to use the GeographicLib utilities. The header files and static library are provided, but can only be used by Visual Studio 2010 in release mode. However, if you plan to use the library, it is advisable to build it with the compiler you are using for your own code using either <a class="el" href="install.html#cmake">Installation with cmake</a> or <a class="el" href="install.html#windows">Installation on Windows</a>.</p>
-<p>Download and run <a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win32.exe/download">GeographicLib-1.21-win32.exe</a> or <a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.21-win64.exe/download">GeographicLib-1.21-win64.exe</a>:</p>
-<ul>
-<li>read the MIT/X11 License agreement,</li>
-<li>select whether you want your PATH modified,</li>
-<li>select the installation folder, by default C:\pkg-vc10\GeographicLib-1.21 or C:\pkg-vc10-x64\GeographicLib-1.21,</li>
-<li>select the start menu folder,</li>
-<li>and install.</li>
-</ul>
-<p>(Note that the default installation folder adheres the the convention given in <a class="el" href="install.html#cmake">Installation with cmake</a>.) The start menu will now include links to the documentation for the library and for the utilities (and a link for uninstalling the library). If you ask for your PATH to be modified, it will include C:/pkg-vc10/GeographicLib-1.21/bin where the utilities are installed. The headers and library are installed in the include/GeographicLib and li [...]
-<h2><a class="anchor" id="qt"></a>
-Building the library for use with Qt</h2>
-<p>If Qt is using a standard compiler, then build GeographicLib with that same compiler (and optimization flags) as Qt.</p>
-<p>If you are using the mingw compiler on Windows for Qt, then you need to build GeographicLib with mingw. You can accomplish this with cmake under cygwin with, for example, </p>
-<div class="fragment"><pre class="fragment">
-  export PATH="`cygpath -m c:/QtSDK/mingw/bin`:$PATH"
-  mkdir BUILD
-  cd BUILD
-  cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=C:/pkg-mingw/GeographicLib ..
-  mingw32-make
-  mingw32-make install </pre></div><p> If cmake complains that sh mustn't be in your path, invoke cmake with </p>
-<div class="fragment"><pre class="fragment">
-  env PATH="$( echo $PATH | tr : '\n' |
-  while read d; do test -f "$d/sh.exe" || echo -n "$d:"; done |
-  sed 's/:$//' )" cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=C:/pkg-mingw/GeographicLib ..
-</pre></div><p> If cmake is not available, there is a simple project file that compiles the GeographicLib library <em>only</em> with the Qt compiler: </p>
-<div class="fragment"><pre class="fragment">
-  cd src
-  qmake Geographic.pro   # configure the project
-  make                   # build the library </pre></div><p> The library will be in the src directory (or the src/release or src/debug directory under Windows). The headers are in include/GeographicLib.</p>
-<h2><a class="anchor" id="maintainer"></a>
-Maintainer tasks</h2>
-<p>Check the code out of git with </p>
-<div class="fragment"><pre class="fragment">
-  git clone git://geographiclib.git.sf.net/gitroot/geographiclib/geographiclib
-</pre></div><p> The autoconf configuration script, the html version of the documentation, and the formatted man pages not checked into git. In order to create the autoconf configuration script, run </p>
-<div class="fragment"><pre class="fragment">
-  sh autogen.sh </pre></div><p> in the top level directory. Provided you are running on a system with doxygen, pod2man, and pod2html installed, then you can create the documentation and the man pages by building the system using cmake (the <code>MAINTAINER</code> configuration variable set to ON, if the necessary tools are found) or configure.</p>
-<p>In the case of cmake, you then run </p>
-<div class="fragment"><pre class="fragment">
-  make dist </pre></div><p> which will copy the documentation and man pages from the build directory back into the source tree and package the resulting source tree for distribution as </p>
-<div class="fragment"><pre class="fragment">
-  GeographicLib-1.21.tar.gz
-  GeographicLib-1.21.zip </pre></div><p> Finally, </p>
-<div class="fragment"><pre class="fragment">
-  make package </pre></div><p> or building PACKAGE in Visual Studio will create a binary installer for GeographicLib. For Windows, this requires in the installation of <a href="http://nsis.sourceforge.net">NSIS</a>.</p>
-<p>With configure, run </p>
-<div class="fragment"><pre class="fragment">
-  make dist-gzip </pre></div><p> which will create the additional files and packages the results ready for distribution as </p>
-<div class="fragment"><pre class="fragment">
-  geographiclib-1.21.tar.gz </pre></div><center> Back to <a class="el" href="intro.html">Introduction</a>. Forward to <a class="el" href="start.html">Getting started</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/intro.html b/doc/html/intro.html
deleted file mode 100644
index bacc17b..0000000
--- a/doc/html/intro.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Introduction</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Introduction </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Forward to <a class="el" href="install.html">Installing GeographicLib</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>GeographicLib offers a C++ interfaces to a small (but important!) set of geographic transformations. It grew out of a desire to improve on the <a href="http://earth-info.nima.mil/GandG/geotrans/">geotrans</a> package for transforming between geographic and MGRS coordinates. At present, GeographicLib provides UT [...]
-<p>The goals of GeographicLib are:</p>
-<ul>
-<li>Accuracy. In most applications the accuracy is close to round-off, about 5 nm (5 nanometers). Even though in many geographic applications 1 cm is considered "accurate enough", there is little penalty in providing much better accuracy. If situations where a faster approximate algorithm is necessary, GeographicLib offers an accurate benchmark to guide the development.</li>
-<li>Completeness. For each of the projections included, an attempt is made to provide a complete solution. For example, <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">GeographicLib::Geodesic::Inverse</a> works for anti-podal points. Similarly, <a class="el" href="classGeographicLib_1_1Geocentric.html#a1907735ce8f5f915a14a5f7a8b3adfea">GeographicLib::Geocentric.Reverse</a> will return accurate geodetic coordinates even for points close to the ce [...]
-<li>C++ interface. For the projection methods, this allows encapsulation of the ellipsoid parameters.</li>
-<li>Emphasis on projections necessary for analyzing military data.</li>
-<li>Uniform treatment of UTM/UPS. The <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> class treats UPS as zone 0. This simplifies conversions between UTM and UPS coordinates, etc.</li>
-<li>Well defined and stable conventions for the conversion between UTM/UPS to MGRS coordinates.</li>
-<li>Detailed internal documentation on the algorithms. For the most part GeographicLib uses published algorithms and references are given. If changes have been made (usually to improve the numerical accuracy), these are described in the code.</li>
-</ul>
-<p>Various <a class="el" href="utilities.html">Utility programs</a> are provided with the library. These illustrate the use of the library and are useful in their own right. This library and the utilities have been tested with g++ 4.4 under Linux, with g++ 4.2 under Mac OS X, and with MS Visual Studio 2008 and 2010.</p>
-<p>Matlab, Javascript, and Python interfaces are provided to portions of GeographicLib; see <a class="el" href="other.html">Other interfaces (Javascript, Python, Matlab, Octave)</a>.</p>
-<p>The section <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a> documents the method of solving the geodesic problem.</p>
-<p>The section <a class="el" href="transversemercator.html">Transverse Mercator projection</a> documents various properties of this projection.</p>
-<p>Undoubtedly, bugs lurk in this code and in the documentation. Please report any you find to <<a href="mailto:charles at karney.com">charles at karney.com</a>>.</p>
-<center> Forward to <a class="el" href="install.html">Installing GeographicLib</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/jquery.js b/doc/html/jquery.js
deleted file mode 100644
index c052173..0000000
--- a/doc/html/jquery.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * jQuery JavaScript Library v1.3.2
- * http://jquery.com/
- *
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
- *
- * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
- * Revision: 6246
- */
-(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return [...]
-var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([ [...]
-/*
- * Sizzle CSS Selector Engine - v0.9.3
- *  Copyright 2009, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[ [...]
-{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.no [...]
-{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"oldd [...]
-/*
- * jQuery UI 1.7.2
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI
- */
-jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentP [...]
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- *	ui.core.js
- */
-(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.o [...]
-{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relativ [...]
-/**
- * jQuery.ScrollTo - Easy element scrolling using jQuery.
- * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
- * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).
- * Date: 2/8/2008
- * @author Ariel Flesler
- * @version 1.3.2
- */
-;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':i [...]
-
diff --git a/doc/html/magnetic.html b/doc/html/magnetic.html
deleted file mode 100644
index 597ff27..0000000
--- a/doc/html/magnetic.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Magnetic models</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Magnetic models </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="gravity.html">Gravity models</a>. Forward to <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>GeographicLib can compute the earth's magnetic field by a magnetic model using the <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> and <a class="el" hr [...]
-Warning"</a> this is provided with igrf11. Although the advice is specific to igrf11, many of the comments apply to all magnetic field models.</p>
-<p>The supported models are</p>
-<ul>
-<li><b>wmm2010</b>, the <a href="http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml">World Magnetic Model 2010</a>, which approximates the main magnetic field for the period 2010–2015.</li>
-<li><b>igrf11</b>, the <a href="http://ngdc.noaa.gov/IAGA/vmod/igrf.html">International Geomagnetic Reference Field (11th generation)</a>, which approximates the main magnetic field for the period 1900–2015.</li>
-<li><b>emm2010</b>, the <a href="http://ngdc.noaa.gov/geomag/EMM/index.html">Enhanced Magnetic Model 2010</a>, which approximates the main and crustal magnetic fields for the period 2010–2015.</li>
-</ul>
-<p>Go to</p>
-<ul>
-<li><a class="el" href="magnetic.html#magneticinst">Installing the magnetic field models</a></li>
-<li><a class="el" href="magnetic.html#magneticformat">The format of the magnetic model files</a></li>
-</ul>
-<h2><a class="anchor" id="magneticinst"></a>
-Installing the magnetic field models</h2>
-<p>These magnetic models are available for download: </p>
-<center> <table class="doxtable">
-<caption align="bottom">Available magnetic models</caption>
-<tr>
-<th rowspan="2">name </th><th rowspan="2">max<br/>
- degree </th><th rowspan="2">time<br/>
- interval </th><th rowspan="2">size<br/>
-(kB) </th><th colspan="3"><center>Download Links (size, kB)</center> </th></tr>
-<tr>
-<th>tar file </th><th>Windows<br/>
- installer </th><th>zip file </th></tr>
-<tr>
-<td>wmm2010 </td><td><center>12</center> </td><td><center>2010–2015</center> </td><td><center>3</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/wmm2010.tar.bz2/download">link</a> (2)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/wmm2010.exe/download">link</a> (300)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/wmm2010.zip/download">link [...]
-<tr>
-<td>igrf11 </td><td><center>13</center> </td><td><center>1900–2015</center> </td><td><center>25</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/igrf11.tar.bz2/download">link</a> (7)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/igrf11.exe/download">link</a> (310)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/igrf11.zip/download">link</a [...]
-<tr>
-<td>emm2010 </td><td><center>739</center> </td><td><center>2010–2015</center> </td><td><center>4400</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/emm2010.tar.bz2/download">link</a> (3700)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/emm2010.exe/download">link</a> (3000)</center> </td><td><center> <a href="http://sf.net/projects/geographiclib/files/magnetic-distrib/emm2010.zip/downlo [...]
-</table>
-</center><p> The "size" column is the size of the uncompressed data.</p>
-<p>For Linux and Unix systems, GeographicLib provides a shell script geographiclib-get-magnetic (typically installed in /usr/local/sbin) which automates the process of downloading and installing the magnetic models. For example </p>
-<div class="fragment"><pre class="fragment">
-   geographiclib-get-magnetic all  # to install wmm2010, igrf11, emm2010
-   geographiclib-get-magnetic -h   # for help
-</pre></div><p> This script should be run as a user with write access to the installation directory, which is typically /usr/local/share/GeographicLib (this can be overridden with the -p flag), and the data will then be placed in the "magnetic" subdirectory.</p>
-<p>Windows users should download and run the Windows installers. These will prompt for an installation directory with the default being one of </p>
-<div class="fragment"><pre class="fragment">
-   C:/Documents and Settings/All Users/Application Data/GeographicLib
-   C:/ProgramData/GeographicLib
-</pre></div><p> (which you probably should not change) and the data is installed in the "magnetic" sub-directory. (The second directory name is an alternate name that Windows 7 for the "Application Data" directory.)</p>
-<p>Otherwise download <em>either</em> the tar.bz2 file <em>or</em> the zip file (they have the same contents). To unpack these, run, for example </p>
-<div class="fragment"><pre class="fragment">
-   mkdir -p /usr/local/share/GeographicLib
-   tar xofjC wmm2010.tar.bz2 /usr/local/share/GeographicLib
-   tar xofjC emm2010.tar.bz2 /usr/local/share/GeographicLib
-   etc.
-</pre></div><p> and, again, the data will be placed in the "magnetic" subdirectory.</p>
-<p>However you install the magnetic models, all the datasets should be installed in the same directory. <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> and <a href="MagneticField.1.html">MagneticField</a> uses a compile time default to locate the datasets. This is</p>
-<ul>
-<li>/usr/local/share/GeographicLib/magnetic, for non-Windows systems</li>
-<li>C:/Documents and Settings/All Users/Application Data/GeographicLib/magnetic, for Windows systems</li>
-</ul>
-<p>consistent with the examples above. This may be overridden at run-time by defining the MAGNETIC_PATH or the GEOGRAPHIC_DATA environment variables; see <a class="el" href="classGeographicLib_1_1MagneticModel.html#a469db97d257876c1abafa3da3c5f0f7e">GeographicLib::MagneticModel::DefaultMagneticPath()</a> for details. Finally, the path may be set using the optional second argument to the <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic [...]
-<h2><a class="anchor" id="magneticformat"></a>
-The format of the magnetic model files</h2>
-<p>The constructor for <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> reads a file called NAME.wmm which specifies various properties for the magnetic model. It then opens a binary file NAME.wmm.cof to obtain the coefficients of the spherical harmonic sum.</p>
-<p>The first line of the .wmm file must consist of "WMMF-v" where WMMF stands for "World Magnetic Model Format" and v is the version number of the format (currently "1").</p>
-<p>The rest of the File is read a line at a time. A # character and everything after it are discarded. If the result is just white space it is discarded. The remaining lines are of the form "KEY WHITESPACE
-VALUE". In general, the KEY and the VALUE are case-sensitive.</p>
-<p><a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> only pays attention to the following keywords</p>
-<ul>
-<li>keywords that affect the field calculation, namely:<ul>
-<li><b>Radius</b> (required), the normalizing radius of the model in meters.</li>
-<li><b>NumModels</b> (default 1), the number of models. WMM2010 consists of a single model giving the magnetic field and its time variation at 2010. IGRF11 consists of 23 models for 1900 thru 2010 at 5 year intervals. The time variation is given only for the last model to allow extrapolation beyond 2010. For dates prior to 2010, linear interpolation is used.</li>
-<li><b>Epoch</b> (required), the time origin (in fractional years) for the first model.</li>
-<li><b>DeltaEpoch</b> (default 1), the interval between models in years (only relevant for NumModels > 1).</li>
-<li><b>Normalization</b> (default schmidt), the normalization used for the associated Legendre functions (schmidt or full).</li>
-<li><b>ID</b> (required), 8 printable characters which serve as a signature for the .wmm.cof file (they must appear as the first 8 bytes of this file).</li>
-</ul>
-</li>
-<li>keywords that store data that the user can query:<ul>
-<li><b>Name</b>, the name of the model.</li>
-<li><b>Description</b>, a more descriptive name of the model.</li>
-<li><b>ReleaseDate</b>, when the model was created.</li>
-<li><b>MinTime</b>, the minimum date at which the model should be used.</li>
-<li><b>MaxTime</b>, the maximum date at which the model should be used.</li>
-<li><b>MinHeight</b>, the minimum height above the ellipsoid for which the model should be used.</li>
-<li><b>MaxHeight</b>, the maximum height above the ellipsoid for which the model should be used.</li>
-</ul>
-<a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> does not enforce the restrictions implied by last four quantities. However, <a href="MagneticField.1.html">MagneticField</a> issues a warning if these limits are exceeded.</li>
-<li>keywords that are examined to verify that their values are valid:<ul>
-<li><b>Type</b> (default linear), the type of the model. "linear" means that the time variation is piece-wise linear (either using interpolation between the field at two dates or using the field and its first derivative with respect to time). This is the only type of model supported at present.</li>
-<li><b>ByteOrder</b> (default little), the order of bytes in the .wmm.cof file. Only little endian is supported at present.</li>
-</ul>
-</li>
-</ul>
-<p>Other keywords are ignored.</p>
-<p>The coefficient file NAME.wmm.cof is a binary file in little endian order. The first 8 bytes of this file must match the ID given in NAME.wmm. This is followed by NumModels + 1 sets of spherical harmonic coefficients. The first NumModels of these model the magnetic field at Epoch + <em>i</em> * DeltaEpoch for 0 <= <em>i</em> < NumModels. The last set of coefficients model the rate of change of the magnetic field at Epoch + (NumModels - 1) * DeltaEpoch. The format for each set of [...]
-<ul>
-<li><em>N</em>, the maximum degree of the sum stored as a 4-byte signed integer. This must satisfy <em>N</em> >= -1.</li>
-<li><em>M</em>, the maximum order of the sum stored as a 4-byte signed integer. This must satisfy <em>N</em> >= <em>M</em> >= -1.</li>
-<li><em>C<sub><em>nm</sub></em>,</em> the coefficients of the cosine coefficients of the sum in column (i.e., <em>m</em>) major order. There are (<em>M</em> + 1) (2<em>N</em> - <em>M</em> + 2) / 2 elements which are stored as IEEE doubles (8 bytes). For example for <em>N</em> = <em>M</em> = 3, there are 10 coefficients arranged as <em>C</em><sub>00</sub>, <em>C</em><sub>10</sub>, <em>C</em><sub>20</sub>, <em>C</em><sub>30</sub>, <em>C</em><sub>11</sub>, <em>C</em><sub>21</sub>, <em>C</em [...]
-<li><em>S<sub><em>nm</sub></em>,</em> the coefficients of the sine coefficients of the sum in column (i.e., <em>m</em>) major order starting at <em>m</em> = 1. There are <em>M</em> (2<em>N</em> - <em>M</em> + 1) / 2 elements which are stored as IEEE doubles (8 bytes). For example for <em>N</em> = <em>M</em> = 3, there are 6 coefficients arranged as <em>S</em><sub>11</sub>, <em>S</em><sub>21</sub>, <em>S</em><sub>31</sub>, <em>S</em><sub>22</sub>, <em>S</em><sub>32</sub>, <em>S</em><sub>3 [...]
-</ul>
-<p>Although the coefficient file is in little endian order, GeographicLib can read it on big endian machines. It can only be read on machines which store doubles in IEEE format.</p>
-<p>As an illustration, here is igrf11.wmm: </p>
-<div class="fragment"><pre class="fragment">
-WMMF-1
-# A World Magnetic Model (Format 1) file.  For documentation on the
-# format of this file see
-# http://geographiclib.sf.net/html/magnetic.html#magneticformat
-Name            igrf11
-Description     International Geomagnetic Reference Field 11th Generation
-URL             http://ngdc.noaa.gov/IAGA/vmod/igrf.html
-Publisher       National Oceanic and Atmospheric Administration
-ReleaseDate     2009-12-15
-DataCutOff      2009-10-01
-ConversionDate  2011-11-04
-DataVersion     1
-Radius          6371200
-NumModels       23
-Epoch           1900
-DeltaEpoch      5
-MinTime         1900
-MaxTime         2015
-MinHeight       -1000
-MaxHeight       600000
-
-# The coefficients are stored in a file obtained by appending ".cof" to
-# the name of this file.  The coefficients were obtained from IGRF11.COF
-# in the geomag70 distribution.
-ID              IGRF11-A
-</pre></div><center> Back to <a class="el" href="gravity.html">Gravity models</a>. Forward to <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/namespaceGeographicLib.html b/doc/html/namespaceGeographicLib.html
deleted file mode 100644
index 8cd0653..0000000
--- a/doc/html/namespaceGeographicLib.html
+++ /dev/null
@@ -1,151 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: GeographicLib Namespace Reference</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li><a href="namespaces.html"><span>Namespace List</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Classes</a>  </div>
-  <div class="headertitle">
-<div class="title">GeographicLib Namespace Reference</div>  </div>
-</div>
-<div class="contents">
-
-<p>Namespace for GeographicLib.  
-<a href="#details">More...</a></p>
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Accumulator.html">Accumulator</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An accumulator for sums.  <a href="classGeographicLib_1_1Accumulator.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AlbersEqualArea.html">AlbersEqualArea</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Albers Equal Area Conic Projection.  <a href="classGeographicLib_1_1AlbersEqualArea.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html">AzimuthalEquidistant</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Azimuthal Equidistant Projection.  <a href="classGeographicLib_1_1AzimuthalEquidistant.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CassiniSoldner.html">CassiniSoldner</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Cassini-Soldner Projection.  <a href="classGeographicLib_1_1CassiniSoldner.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1CircularEngine.html">CircularEngine</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spherical Harmonic sums for a circle.  <a href="classGeographicLib_1_1CircularEngine.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Constants.html">Constants</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constants needed by GeographicLib  <a href="classGeographicLib_1_1Constants.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeographicErr.html">GeographicErr</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception handling for GeographicLib.  <a href="classGeographicLib_1_1GeographicErr.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1DMS.html">DMS</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert between degrees and DMS representation.  <a href="classGeographicLib_1_1DMS.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1EllipticFunction.html">EllipticFunction</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Elliptic functions needed for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">TransverseMercatorExact</a>.  <a href="classGeographicLib_1_1EllipticFunction.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geocentric.html">Geocentric</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Geocentric coordinates  <a href="classGeographicLib_1_1Geocentric.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeoCoords.html">GeoCoords</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Conversion between geographic coordinates.  <a href="classGeographicLib_1_1GeoCoords.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geodesic.html">Geodesic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Geodesic calculations  <a href="classGeographicLib_1_1Geodesic.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GeodesicLine.html">GeodesicLine</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A geodesic line.  <a href="classGeographicLib_1_1GeodesicLine.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Geoid.html">Geoid</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Looking up the height of the geoid.  <a href="classGeographicLib_1_1Geoid.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Gnomonic.html">Gnomonic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Gnomonic Projection.  <a href="classGeographicLib_1_1Gnomonic.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityCircle.html">GravityCircle</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Gravity on a circle of latitude.  <a href="classGeographicLib_1_1GravityCircle.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1GravityModel.html">GravityModel</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Model of the earth's gravity field.  <a href="classGeographicLib_1_1GravityModel.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LambertConformalConic.html">LambertConformalConic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Lambert Conformal Conic Projection.  <a href="classGeographicLib_1_1LambertConformalConic.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1LocalCartesian.html">LocalCartesian</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Local Cartesian coordinates.  <a href="classGeographicLib_1_1LocalCartesian.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticCircle.html">MagneticCircle</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Geomagnetic field on a circle of latitude.  <a href="classGeographicLib_1_1MagneticCircle.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MagneticModel.html">MagneticModel</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Model of the earth's magnetic field.  <a href="classGeographicLib_1_1MagneticModel.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Math.html">Math</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Mathematical functions needed by GeographicLib.  <a href="classGeographicLib_1_1Math.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1MGRS.html">MGRS</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert between UTM/UPS and MGRS.  <a href="classGeographicLib_1_1MGRS.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1NormalGravity.html">NormalGravity</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The normal gravity of the earth.  <a href="classGeographicLib_1_1NormalGravity.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1OSGB.html">OSGB</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Ordnance Survey grid system for Great Britain.  <a href="classGeographicLib_1_1OSGB.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolarStereographic.html">PolarStereographic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Polar Stereographic Projection.  <a href="classGeographicLib_1_1PolarStereographic.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1PolygonArea.html">PolygonArea</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Polygon Areas.  <a href="classGeographicLib_1_1PolygonArea.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalEngine.html">SphericalEngine</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The evaluation engine for <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">SphericalHarmonic</a>.  <a href="classGeographicLib_1_1SphericalEngine.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic.html">SphericalHarmonic</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spherical Harmonic series.  <a href="classGeographicLib_1_1SphericalHarmonic.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic1.html">SphericalHarmonic1</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spherical Harmonic series with a correction to the coefficients.  <a href="classGeographicLib_1_1SphericalHarmonic1.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html">SphericalHarmonic2</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spherical Harmonic series with two corrections to the coefficients.  <a href="classGeographicLib_1_1SphericalHarmonic2.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercator.html">TransverseMercator</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Transverse Mercator Projection.  <a href="classGeographicLib_1_1TransverseMercator.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html">TransverseMercatorExact</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An exact implementation of the Transverse Mercator Projection.  <a href="classGeographicLib_1_1TransverseMercatorExact.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1Utility.html">Utility</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Some utility routines for GeographicLib.  <a href="classGeographicLib_1_1Utility.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classGeographicLib_1_1UTMUPS.html">UTMUPS</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert between Geographic coordinates and UTM/UPS.  <a href="classGeographicLib_1_1UTMUPS.html#details">More...</a><br/></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Namespace for GeographicLib. </p>
-<p>All of GeographicLib is defined within the <a class="el" href="namespaceGeographicLib.html" title="Namespace for GeographicLib.">GeographicLib</a> namespace. In addition all the header files are included via GeographicLib/filename. This minimizes the likelihood of conflicts with other packages. </p>
-</div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html
deleted file mode 100644
index 2e60e1e..0000000
--- a/doc/html/namespaces.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Namespace List</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="pages.html"><span>Related Pages</span></a></li>
-      <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow2" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="namespaces.html"><span>Namespace List</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Namespace List</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all namespaces with brief descriptions:</div><table>
-  <tr><td class="indexkey"><a class="el" href="namespaceGeographicLib.html">GeographicLib</a></td><td class="indexvalue">Namespace for GeographicLib </td></tr>
-</table>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/nav_f.png b/doc/html/nav_f.png
deleted file mode 100644
index 1b07a16..0000000
Binary files a/doc/html/nav_f.png and /dev/null differ
diff --git a/doc/html/nav_h.png b/doc/html/nav_h.png
deleted file mode 100644
index 01f5fa6..0000000
Binary files a/doc/html/nav_h.png and /dev/null differ
diff --git a/doc/html/old.html b/doc/html/old.html
deleted file mode 100644
index fa830a7..0000000
--- a/doc/html/old.html
+++ /dev/null
@@ -1,591 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Old versions</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Old versions </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="geocentric.html">Geocentric coordinates</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>List of versions in reverse chronological order together with a brief list of changes. (Note: Old versions of the library use a year-month style of numbering. Now, the library uses a major and minor version number.) Recent versions of GeographicLib are available at <a href="http://sf.net/projects/geographiclib/fi [...]
-<ul>
-<li>Version 1.21 (released 2012-04-25)<ul>
-<li>Support colon-separated DMS output:<ul>
-<li><a class="el" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">GeographicLib::DMS::Encode</a> and <a class="el" href="classGeographicLib_1_1GeoCoords.html#af6e9f9087a407b01dc24401df8610257">GeographicLib::GeoCoords::DMSRepresentation</a> generalized;</li>
-<li><a href="GeoConvert.1.html">GeoConvert</a> and <a href="Geod.1.html">Geod</a> now accept a -: option.</li>
-</ul>
-</li>
-<li><a href="GeoidEval.1.html">GeoidEval</a> does not print the gradient of the geoid height by default (because it's subject to large errors); give the -g option to get the gradient printed.</li>
-<li>Work around optimization BUG in <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">GeographicLib::Geodesic::Inverse</a> with tdm mingw g++ version 4.6.1.</li>
-<li>autoconf fixed to ensure that that out-of-sources builds work; document this as the preferred method of using autoconf.</li>
-<li>cmake tweaks:<ul>
-<li>simplify the configuration of doxygen;</li>
-<li>allow the Matlab compiler to be specified with the MATLAB_COMPILER option.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.20 (released 2012-03-23)<ul>
-<li>cmake tweaks:<ul>
-<li>improve find_package's matching of compiler versions;</li>
-<li>CMAKE_INSTALL_PREFIX set from CMAKE_PREFIX_PATH if available;</li>
-<li>add "x64" to the package name for the 64-bit binary installer;</li>
-<li>fix cmake warning with Visual Studio Express.</li>
-</ul>
-</li>
-<li>Fix <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a> to deal with aggessive iterator checking by Visual Studio.</li>
-<li>Fix transcription BUG is Geodesic.js.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.19 (released 2012-03-13)<ul>
-<li>Slight improvement in <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">GeographicLib::Geodesic::Inverse</a> for very short lines.</li>
-<li>Fix argument checking tests in <a class="el" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">GeographicLib::MGRS::Forward</a>.</li>
-<li>Add --comment-delimiter and --line-separator options to the <a class="el" href="utilities.html">Utility programs</a>.</li>
-<li>Add installer for 64-bit Windows; the compiled Matlab interface is supplied with the Windows 64-bit installer only.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.18 (released 2012-02-18)<ul>
-<li>Improve documentation on configuration with cmake.</li>
-<li>cmake's find_package ensures that the compiler versions match on Windows.</li>
-<li>Improve documentation on compiling Matlab interface.</li>
-<li>Binary installer for Windows installs under C:/pkg-vc10 by default.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.17 (released 2012-01-21)<ul>
-<li>Work around optimization BUG in <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">GeographicLib::Geodesic::Inverse</a> with g++ version 4.4.0 (mingw).</li>
-<li>Fix BUG in argument checking with <a class="el" href="classGeographicLib_1_1OSGB.html#a0a79e8f2babae1eb0305a0e728fea8c8">GeographicLib::OSGB::GridReference</a>.</li>
-<li>Fix missing include file in <a class="el" href="classGeographicLib_1_1SphericalHarmonic2.html" title="Spherical Harmonic series with two corrections to the coefficients.">GeographicLib::SphericalHarmonic2</a>.</li>
-<li>Add simple examples of usage for each class.</li>
-<li>Add internal documentation to the cmake configuration files.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.16 (released 2011-12-07)<ul>
-<li>Add calculation of the earth's gravitational field:<ul>
-<li>add <a class="el" href="classGeographicLib_1_1NormalGravity.html" title="The normal gravity of the earth.">GeographicLib::NormalGravity</a> <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> and <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a> classes;</li>
-<li>add command line utility <a href="Gravity.1.html">Gravity</a>;</li>
-<li>add <a class="el" href="gravity.html">Gravity models</a>;</li>
-<li>add <a class="el" href="classGeographicLib_1_1Constants.html#af7806106d7bd289bb63d5290e79c87a6">GeographicLib::Constants::WGS84_GM()</a>, <a class="el" href="classGeographicLib_1_1Constants.html#a98c114d5a6ca42d3e4ece8595a0c2180">GeographicLib::Constants::WGS84_omega()</a>, and similarly for GRS80.</li>
-</ul>
-</li>
-<li>Build uses GEOGRAPHICLIB_DATA to specify a common parent directory for geoid, gravity, and magnetic data (instead of GEOGRAPHICLIB_GEOID_PATH, etc.); similarly, <a href="GeoidEval.1.html">GeoidEval</a>, <a href="Gravity.1.html">Gravity</a>, and <a href="MagneticField.1.html">MagneticField</a>, look at the environment variable GEOGRAPHICLIB_DATA to locate the data.</li>
-<li>Spherical harmonic software changes:<ul>
-<li>capitalize enums <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104ebaee7040963f955b45b5a8ab0ea325c782">GeographicLib::SphericalHarmonic::FULL</a> and <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html#a889791c67edc32865996842c600104eba014c2f3300abd50ff65ea8d73ef3c69e">GeographicLib::SphericalHarmonic::SCHMIDT</a> (the lower case names are retained but deprecated);</li>
-<li>optimize the sum by using a static table of square roots which is updated by <a class="el" href="classGeographicLib_1_1SphericalEngine.html#a7fac63262c0a8bb18aee8c962a08d429">GeographicLib::SphericalEngine::RootTable</a>;</li>
-<li>avoid overflow for high degree models.</li>
-</ul>
-</li>
-<li>Magnetic software fixes:<ul>
-<li>fix documentation BUG in <a class="el" href="classGeographicLib_1_1MagneticModel.html#ae4275d73128fc2c6c62f53677ce70bd5">GeographicLib::MagneticModel::Circle</a>;</li>
-<li>make <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> constructor explicit;</li>
-<li>provide default <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> constructor;</li>
-<li>add additional inspector functions to <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a>;</li>
-<li>add -c option to <a href="MagneticField.1.html">MagneticField</a>;</li>
-<li>default height to zero in <a href="MagneticField.1.html">MagneticField</a>.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.15 (released 2011-11-08)<ul>
-<li>Add calculation of the earth's magnetic field:<ul>
-<li>add <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> and <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a> classes;</li>
-<li>add command line utility <a href="MagneticField.1.html">MagneticField</a>;</li>
-<li>add <a class="el" href="magnetic.html">Magnetic models</a>;</li>
-<li>add <a class="el" href="magnetic.html#magneticinst">Installing the magnetic field models</a>;</li>
-<li>add <a class="el" href="magnetic.html#magneticformat">The format of the magnetic model files</a>;</li>
-<li>add classes <a class="el" href="classGeographicLib_1_1SphericalEngine.html" title="The evaluation engine for SphericalHarmonic.">GeographicLib::SphericalEngine</a>, <a class="el" href="classGeographicLib_1_1CircularEngine.html" title="Spherical Harmonic sums for a circle.">GeographicLib::CircularEngine</a>, <a class="el" href="classGeographicLib_1_1SphericalHarmonic.html" title="Spherical Harmonic series.">GeographicLib::SphericalHarmonic</a>, <a class="el" href="classGeographicLib_1 [...]
-</ul>
-</li>
-<li>Add <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a> class to support I/O and date manipulation.</li>
-<li>Cmake configuration includes a _d suffix on the library built in debug mode.</li>
-<li>For the Python package, include manifest and readme files; don't install setup.py for non-Windows systems.</li>
-<li>Include Doxygen tag file in distribution as doc/html/Geographic.tag.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.14 (released 2011-09-30)<ul>
-<li>Ensure that geographiclib-config.cmake is relocatable.</li>
-<li>Allow more unicode symbols to be used in <a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">GeographicLib::DMS::Decode</a>.</li>
-<li>Modify <a href="GeoidEval.1.html">GeoidEval</a> so that it can be used to convert the height datum for LIDAR data.</li>
-<li>Modest speed-up of Geodesic::Inverse.</li>
-<li>Changes in python interface:<ul>
-<li>FIX BUG in transcription of Geodesic::Inverse;</li>
-<li>include setup.py for easy installation;</li>
-<li>python only distribution is available at <a href="http://pypi.python.org/pypi/geographiclib">http://pypi.python.org/pypi/geographiclib</a></li>
-</ul>
-</li>
-<li>Supply a minimal Qt qmake project file for library src/Geographic.pro.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.13 (released 2011-08-13)<ul>
-<li>Changes to I/O:<ul>
-<li>allow : (colon) to be used as a DMS separator in <a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">GeographicLib::DMS::Decode(const std::string&, flag&)</a>;</li>
-<li>also accept Unicode symbols for degrees, minutes, and seconds (coded as UTF-8);</li>
-<li>provide optional <em>swaplatlong</em> argument to various <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> and <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> functions to make longitude precede latitude;</li>
-<li><a href="GeoConvert.1.html">GeoConvert</a> now has a -w option to make longitude precede latitude on input and output;</li>
-<li>include a Javascript version of <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a>.</li>
-</ul>
-</li>
-<li>Slight improvement in starting guess for solution of geographic latitude in terms of conformal latitude in TransverseMercator, TransverseMercatorExact, and LambertConformalConic.</li>
-<li>For most classes, get rid of const member variables so that the default copy assignment works.</li>
-<li>Put <a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a> and <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">GeographicLib::Accumulator</a> in their own header files.</li>
-<li>Remove unused "fast" <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">GeographicLib::Accumulator</a> method.</li>
-<li>Reorganize the <a class="el" href="other.html#python">Python interface</a>.</li>
-<li>Withdraw some deprecated routines.</li>
-<li>cmake changes:<ul>
-<li>include FindGeographic.cmake in distribution;</li>
-<li>building with cmake creates and installs geographiclib-config.cmake;</li>
-<li>better support for building a shared library under Windows.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.12 (released 2011-07-21)<ul>
-<li>Change license to MIT/X11.</li>
-<li>Add <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a> class and equivalent Matlab function.</li>
-<li>Provide Javascript and Python implementations of geodesic routines.</li>
-<li>Fix Windows installer to include runtime dlls for Matlab.</li>
-<li>Fix (innocuous) unassigned variable in Geodesic::GenInverse.</li>
-<li>Geodesic routines in Matlab return a12 as first column of aux return value (incompatible change).</li>
-<li>A couple of code changes to enable compilation with Visual Studio 2003.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.11 (released 2011-06-27)<ul>
-<li>Changes to <a href="Planimeter.1.html">Planimeter</a>:<ul>
-<li>add -l flag to <a href="Planimeter.1.html">Planimeter</a> for polyline calculations;</li>
-<li>trim precision of area to 3 decimal places;</li>
-<li>FIX BUG with pole crossing edges (due to compiler optimization).</li>
-</ul>
-</li>
-<li><a href="Geod.1.html">Geod</a> no longer reports the reduced length by default; however the -f flag still reports this and in addition gives the geodesic scales and the geodesic area.</li>
-<li>FIX BUGS (compiler-specific) in inverse geodesic calculations.</li>
-<li>FIX BUG: accommodate tellg() returning -1 at end of string.</li>
-<li>Change way flattening of the ellipsoid is specified:<ul>
-<li>constructors take <em>f</em> argument which is taken to be the flattening if <em>f</em> < 1 and the inverse flattening otherwise (this is a compatible change for spheres and oblate ellipsoids, but it is an INCOMPATIBLE change for prolate ellipsoids);</li>
-<li>the -e arguments to the <a class="el" href="utilities.html">Utility programs</a> are handled similarly; in addition, simple fractions, e.g., 1/297, can be used for the flattening;</li>
-<li>introduce <a class="el" href="classGeographicLib_1_1Constants.html#acc5244425bb484594be51b27d56cd335">GeographicLib::Constants::WGS84_f()</a> for the WGS84 flattening (and deprecate Constants::WGS84_r() for the inverse flattening);</li>
-<li>most classes have a Flattening() member function;</li>
-<li>InverseFlattening() has been deprecated (and now returns inf for a sphere, instead of 0).</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.10 (released 2011-06-11)<ul>
-<li>Improvements to Matlab/Octave interface:<ul>
-<li>add {geocentric,localcartesian}{forward,reverse};</li>
-<li>make geographiclibinterface more general;</li>
-<li>install the source for the interface;</li>
-<li>cmake compiles the interface if ENABLE_MATLAB=ON;</li>
-<li>include compiled interface with Windows binary installer.</li>
-</ul>
-</li>
-<li>Fix various configuration issues<ul>
-<li>autoconf did not install Config.h;</li>
-<li>cmake installed in man/man1 instead of share/man/man1;</li>
-<li>cmake did not set the rpath on the tools.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.9 (released 2011-05-28)<ul>
-<li>FIX BUG in area returned by <a href="Planimeter.1.html">Planimeter</a> for pole encircling polygons.</li>
-<li>FIX BUG in error message reported when DMS::Decode reads the string "5d.".</li>
-<li>FIX BUG in AlbersEqualArea::Reverse (lon0 not being used).</li>
-<li>Ensure that all exceptions thrown in the <a class="el" href="utilities.html">Utility programs</a> are caught.</li>
-<li>Avoid using catch within <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a>.</li>
-<li>Move <a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">GeographicLib::Accumulator</a> class from <a class="el" href="Planimeter_8cpp.html" title="Command line utility for measuring the area of geodesic polygons.">Planimeter.cpp</a> to <a class="el" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">Constants.hpp</a>.</li>
-<li>Add <a class="el" href="classGeographicLib_1_1Math.html#a6a092f38e231c80a1f144814c90f1895">GeographicLib::Math::sq<T></a>.</li>
-<li>Simplify <a class="el" href="geoid.html#geoidinst">Installing the geoid datasets</a><ul>
-<li>add geographiclib-get-geoids for Unix-like systems;</li>
-<li>add installers for Windows.</li>
-</ul>
-</li>
-<li>Provide cmake support:<ul>
-<li>build binary installer for Windows;</li>
-<li>include regression tests;</li>
-<li>add --input-string, --input-file, --output-file options to the <a class="el" href="utilities.html">Utility programs</a> to support tests.</li>
-</ul>
-</li>
-<li>Rename utility EquidistantTest as <a href="GeodesicProj.1.html">GeodesicProj</a> and TransverseMercatorTest as <a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a>.</li>
-<li>Add <a href="ConicProj.1.html">ConicProj</a>.</li>
-<li>Reverse the initial sense of the -s option for <a href="Planimeter.1.html">Planimeter</a>.</li>
-<li>Migrate source from subversion to <a href="http://geographiclib.git.sf.net/git/gitweb-index.cgi">git</a>.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.8 (released 2011-02-22)<ul>
-<li>Optionally return rotation matrix from <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> and <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a>.</li>
-<li>For the <a class="el" href="utilities.html">Utility programs</a>, supply man pages, -h prints the synopsis, --help prints the man page, --version prints the version.</li>
-<li>Use accurate summation in <a href="Planimeter.1.html">Planimeter</a>.</li>
-<li>Add 64-bit targets for Visual Studio 2010.</li>
-<li>Use templates for defining math functions and some constants.</li>
-<li><a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> updates<ul>
-<li>Add <a class="el" href="classGeographicLib_1_1Geoid.html#a2daf81f5c648cf190a83981f441ab08f">GeographicLib::Geoid::DefaultGeoidPath</a> and <a class="el" href="classGeographicLib_1_1Geoid.html#a048865342b2b12ed2272e547209381fd">GeographicLib::Geoid::DefaultGeoidName</a>;</li>
-<li><a href="GeoidEval.1.html">GeoidEval</a> uses environment variable GEOID_NAME as the default geoid;</li>
-<li>Add --msltohae and --haetomsl as <a href="GeoidEval.1.html">GeoidEval</a> options (and don't document the single hyphen versions).</li>
-</ul>
-</li>
-<li>Remove documentation that duplicates papers on transverse Mercator and geodesics.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.7 (released 2010-12-21)<ul>
-<li>FIX BUG in scale returned by <a class="el" href="classGeographicLib_1_1LambertConformalConic.html#a085d37693f5e95fd650b7f59f61ab744">GeographicLib::LambertConformalConic::Reverse</a>.</li>
-<li>Add <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a> projection.</li>
-<li>Library created by Visual Studio is Geographic.lib instead of GeographicLib.lib (compatible with makefiles).</li>
-<li>Make classes NaN aware.</li>
-<li>Use cell arrays for MGRS strings in Matlab.</li>
-<li>Add solution/project files for Visual Studio 2010 (32-bit only).</li>
-<li>Use C++11 static_assert and math functions, if available.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.6 (released 2010-11-23)<ul>
-<li>FIX BUG introduced in <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> in version 1.5 (found by Dave Edwards).</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.5 (released 2010-11-19)<ul>
-<li>Improve area calculations for small polygons.</li>
-<li>Add -s and -r flags to <a href="Planimeter.1.html">Planimeter</a>.</li>
-<li>Improve the accuracy of <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> using divided differences.</li>
-<li>FIX BUG in meridian convergence returned by LambertConformalConic::Forward.</li>
-<li>Add optional threadsafe parameter to <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> constructor. WARNING: This changes may break binary compatibility with previous versions of GeographicLib. However, the library is source compatible.</li>
-<li>Add <a class="el" href="classGeographicLib_1_1OSGB.html" title="Ordnance Survey grid system for Great Britain.">GeographicLib::OSGB</a>.</li>
-<li>Matlab and Octave interfaces to <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a>, <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a>, <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a>, <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodes [...]
-<li>Minor changes<ul>
-<li>explicitly turn on optimization in Visual Studio 2008 projects;</li>
-<li>add missing dependencies in some Makefiles;</li>
-<li>move pi() and degree() from <a class="el" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">GeographicLib::Constants</a> to <a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a>;</li>
-<li>introduce <a class="el" href="classGeographicLib_1_1Math.html#a436f350a6a9539e176dda19d0e4811f8">GeographicLib::Math::extended</a> type to aid testing;</li>
-<li>add GeographicLib::Math::epi() and GeographicLib::Math::edegree().</li>
-<li>fixes to compile under cygwin;</li>
-<li>tweak expression used to find latitude from conformal latitude.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.4 (released 2010-09-12)<ul>
-<li>Changes to <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> and <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a>:<ul>
-<li>FIX BUG in Geodesic::Inverse with prolate ellipsoids;</li>
-<li>add area computations to Geodesic::Direct and Geodesic::Inverse;</li>
-<li>add geodesic areas to geodesic test set;</li>
-<li>make GeodesicLine constructor public;</li>
-<li>change longitude series in Geodesic into Helmert-like form;</li>
-<li>ensure that equatorial geodesics have cos(alpha0) = 0 identically;</li>
-<li>generalize interface for Geodesic and GeodesicLine;</li>
-<li>split GeodesicLine and Geodesic into different files;</li>
-<li>signal convergence failure in Geodesic::Inverse with NaNs;</li>
-<li>deprecate one function in Geodesic and two functions in GeodesicLine;</li>
-<li>deprecate -n option for <a href="Geod.1.html">Geod</a>.</li>
-</ul>
-WARNING: These changes may break binary compatibility with previous versions of GeographicLib. However, the library is source compatible (with the proviso that <a class="el" href="GeodesicLine_8hpp.html" title="Header for GeographicLib::GeodesicLine class.">GeographicLib/GeodesicLine.hpp</a> may now need to be included).</li>
-<li>Add the <a href="Planimeter.1.html">Planimeter</a> utility for computing the areas of geodesic polygons.</li>
-<li>Improve iterative solution of <a class="el" href="classGeographicLib_1_1Gnomonic.html#afccbed660a482ef73d33ad16406ee626">GeographicLib::Gnomonic::Reverse</a>.</li>
-<li>Add <a class="el" href="classGeographicLib_1_1Geoid.html#adf98d0f0d881893a4f5ff711a3be0e04">GeographicLib::Geoid::ConvertHeight</a>.</li>
-<li>Add -msltohae, -haetomsl, and -z options to <a href="GeoidEval.1.html">GeoidEval</a>.</li>
-<li>Constructors check that minor radius is positive.</li>
-<li>Add overloaded Forward and Reverse functions to the projection classes which don't return the convergence (or azimuth) and scale.</li>
-<li>Document function parameters and return values consistently.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.3 (released 2010-07-21)<ul>
-<li>Add <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a>, the ellipsoid generalization of the gnomonic projection.</li>
-<li>Add -g and -e options to <a href="GeodesicProj.1.html">EquidistantTest</a>.</li>
-<li>Use fixed-point notation for output from <a href="CartConvert.1.html">CartConvert</a>, <a href="GeodesicProj.1.html">EquidistantTest</a>, <a href="TransverseMercatorProj.1.html">TransverseMercatorTest</a>.</li>
-<li>PolarStereographic:<ul>
-<li>Improved conversion to conformal coordinates;</li>
-<li>Fix bug with scale at opposite pole;</li>
-<li>Complain if latitude out of range in SetScale.</li>
-</ul>
-</li>
-<li>Add <a class="el" href="classGeographicLib_1_1Math.html#ad1dc13a367125d3f8d291eaa98339186">GeographicLib::Math::NaN()</a>.</li>
-<li>Add long double version of hypot for Windows.</li>
-<li>Add EllipticFunction::E(real).</li>
-<li>Update references to Geotrans in MGRS documentation.</li>
-<li>Speed up tmseries.mac.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.2 (released 2010-05-21)<ul>
-<li>FIX BUGS in <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a>,<ul>
-<li>wrong azimuth returned by Direct if point 2 is on a pole;</li>
-<li>Inverse sometimes fails with very close points.</li>
-</ul>
-</li>
-<li>Improve calculation of scale in <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a>,<ul>
-<li>add GeographicLib::GeodesicLine::Scale, <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ad117912c4fc4ef29bf4050c9be3267f2">GeographicLib::GeodesicLine::EquatorialAzimuth</a>, and <a class="el" href="classGeographicLib_1_1GeodesicLine.html#a308c7fb4f7c562a8c604453bf2ee2ca2">GeographicLib::GeodesicLine::EquatorialArc</a>;</li>
-<li>break friend connection between CassiniSoldner and Geodesic.</li>
-</ul>
-</li>
-<li>Add <a class="el" href="classGeographicLib_1_1DMS.html#a868248d72f6b0bf2dae18a15d741ac43">GeographicLib::DMS::DecodeAngle</a> and <a class="el" href="classGeographicLib_1_1DMS.html#a0512cc1275e089138e1550efbee421d9">GeographicLib::DMS::DecodeAzimuth</a>. Extend <a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">GeographicLib::DMS::Decode</a> and <a class="el" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">GeographicLib::DMS: [...]
-<li>Code and documentation changes in <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> and <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> for consistency with the forthcoming paper on geodesics.</li>
-<li>Increase order of series using in <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> to 6 (full accuracy maintained for ellipsoid flattening < 0.01).</li>
-<li>Macro __NO_LONG_DOUBLE_MATH to disable use of long double.</li>
-<li>Correct declaration of <a class="el" href="classGeographicLib_1_1Math.html#af61f7360e67c35131d80083e7b53dda8">GeographicLib::Math::isfinite</a> to return a bool.</li>
-<li>Changes in the <a class="el" href="utilities.html">Utility programs</a>,<ul>
-<li>improve error reporting when parsing command line arguments;</li>
-<li>accept latitudes and longitudes in decimal degrees or degrees, minutes, and seconds, with optional hemisphere designators;</li>
-<li><a href="GeoConvert.1.html">GeoConvert</a> -z accepts zone or zone+hemisphere;</li>
-<li><a href="GeoidEval.1.html">GeoidEval</a> accepts any of the input formats used by <a href="GeoConvert.1.html">GeoConvert</a>;</li>
-<li><a href="CartConvert.1.html">CartConvert</a> allows the ellipsoid to be specified with -e.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.1 (released 2010-02-09)<ul>
-<li>FIX BUG (introduced in 2009-03) in EllipticFunction::E(sn,cn,dn).</li>
-<li>Increase accuracy of scale calculation in TransverseMercator and TransverseMercatorExact.</li>
-<li>Code and documentation changes for consistency with <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a></li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 1.0 (released 2010-01-07)<ul>
-<li>Add autoconf configuration files.</li>
-<li>BUG FIX: Improve initial guess for Newton's method in PolarStereographic::Reverse. (Previously this failed to converge when the co-latitude exceeded about 130 deg.)</li>
-<li>Constructors for TransverseMercator, TransverseMercatorExact, PolarStereographic, Geocentric, and Geodesic now check for obvious problems with their arguments and throw an exception if necessary.</li>
-<li>Most classes now include inspector functions such as MajorRadius() so that you can determine how instances were constructed.</li>
-<li>Add <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> class.</li>
-<li>Add <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a3f957214eb1d1248277a680e4c4ceed5">GeographicLib::PolarStereographic::SetScale</a> to allow the latitude of true scale to be specified.</li>
-<li>Add solution and project files for Visual Studio 2008.</li>
-<li>Add <a class="el" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicLib::GeographicErr</a> for exceptions.</li>
-<li><a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> changes:<ul>
-<li>BUG FIX: fix typo in <a class="el" href="classGeographicLib_1_1Geoid.html#ade5715c0d1428a409383b1acd2cbe9be">GeographicLib::Geoid::Cache</a> which could cause a segmentation fault in some cases when the cached area spanned the prime meridian.</li>
-<li>Include sufficient edge data to allow heights to be returned for cached area without disk reads;</li>
-<li>Add inspector functions to query the extent of the cache.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-11<ul>
-<li>Allow specification of "closest UTM zone" in <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> and <a href="GeoConvert.1.html">GeoConvert</a> (via -t option).</li>
-<li>Utilities now complain is there are too many tokens on input lines.</li>
-<li>Include real-to-real versions of <a class="el" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">GeographicLib::DMS::Decode</a> and <a class="el" href="classGeographicLib_1_1DMS.html#a0777e26ef4507f8123549723bf3cb56f">GeographicLib::DMS::Encode</a>.</li>
-<li>More house-cleaning changes:<ul>
-<li>Ensure that functions which return results through reference arguments do not alter the arguments when an exception is thrown.</li>
-<li>Improve accuracy of <a class="el" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">GeographicLib::MGRS::Forward</a>.</li>
-<li>Include more information in some error messages.</li>
-<li>Improve accuracy of inverse hyperbolic functions.</li>
-<li>Fix the way <a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a> functions handle different precisions.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-10<ul>
-<li>Change web site to <a href="http://geographiclib.sourceforge.net">http://geographiclib.sourceforge.net</a></li>
-<li>Several house-cleaning changes:<ul>
-<li>Change from the a flat directory structure to a more easily maintained one.</li>
-<li>Introduce Math class for common mathematical functions (in <a class="el" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">Constants.hpp</a>).</li>
-<li>Use Math::real as the type for all real quantities. By default this is typedef'ed to double; and the library should be installed this way.</li>
-<li>Eliminate const reference members of AzimuthalEquidistant, CassiniSoldner and LocalCartesian so that they may be copied.</li>
-<li>Make several constructors explicit. Disallow some constructors. Disallow copy constructor/assignment for Geoid.</li>
-<li>Document least squares formulas in <a class="el" href="Geoid_8cpp.html" title="Implementation for GeographicLib::Geoid class.">Geoid.cpp</a>.</li>
-<li>Use unsigned long long for files positions of geoid files in Geoid.</li>
-<li>Introduce optional mgrslimits argument in UTMUPS::Forward and UTMUPS::Reverse to enforce stricter MGRS limits on eastings and northings.</li>
-<li>Add 64-bit targets in Visual Studio project files.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-09<ul>
-<li>Add <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> and <a href="GeoidEval.1.html">GeoidEval</a> utility.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-08<ul>
-<li>Add <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::CassiniSoldner</a> class and <a href="GeodesicProj.1.html">EquidistantTest</a> utility.</li>
-<li>Fix bug in <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">GeographicLib::Geodesic::Inverse</a> where NaNs were sometimes returned.</li>
-<li>INCOMPATIBLE CHANGE: AzimuthalEquidistant now returns the reciprocal of the azimuthal scale instead of the reduced length.</li>
-<li>Add -n option to <a href="GeoConvert.1.html">GeoConvert</a>.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-07<ul>
-<li>Speed up the series inversion code in tmseries.mac and geod.mac.</li>
-<li>Reference Borkowski in section on <a class="el" href="geocentric.html">Geocentric coordinates</a>.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-06<ul>
-<li>Add routines to decode and encode zone+hemisphere to <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a>.</li>
-<li>Clean up code in <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a>.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-05<ul>
-<li>Improvements to <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a>:<ul>
-<li>more economical series expansions,</li>
-<li>return reduced length (as does the <a href="Geod.1.html">Geod</a> utility),</li>
-<li>improved calculation of starting point for inverse method,</li>
-<li>use reduced length to give derivative for Newton's method.</li>
-</ul>
-</li>
-<li>Add <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a> class.</li>
-<li>Make <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a>, <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a>, and <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a> classes work with prolate ellipsoids.</li>
-<li><a href="CartConvert.1.html">CartConvert</a> checks its inputs more carefully.</li>
-<li>Remove reference to defunct Constants.cpp from GeographicLib.vcproj.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-04<ul>
-<li>Use compile-time constants to select the order of series in <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a>.</li>
-<li>2x unroll of Clenshaw summation to avoid data shuffling.</li>
-<li>Simplification of <a class="el" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">GeographicLib::EllipticFunction::E</a>.</li>
-<li>Use STATIC_ASSERT for compile-time checking of constants.</li>
-<li>Improvements to <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a>:<ul>
-<li>compile-time option to change order of series used,</li>
-<li>post Maxima code for generating the series,</li>
-<li>tune the order of series for double,</li>
-<li>improvements in the selection of starting points for Newton's method,</li>
-<li>accept and return spherical arc lengths,</li>
-<li>works with both oblate and prolate ellipsoids,</li>
-<li>add -a, -e, -b options to the <a href="Geod.1.html">Geod</a> utility.</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-03<ul>
-<li>Add <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> and the <a href="Geod.1.html">Geod</a> utility.</li>
-<li>Declare when no exceptions are thrown by functions.</li>
-<li>Minor changes to <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a> class.</li>
-<li>Use invf = 0 to mean a sphere in constructors to some classes.</li>
-<li>The makefile creates a library and includes an install target.</li>
-<li>Rename GeographicLib::ECEF to <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a>, ECEFConvert to <a href="CartConvert.1.html">CartConvert</a>.</li>
-<li>Use inline functions to define constant doubles in <a class="el" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">Constants.hpp</a>.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-02<ul>
-<li>Fix documentation of constructors (flattening -> inverse flattening).</li>
-<li>Use std versions of math functions.</li>
-<li>Add GeographicLib::ECEF and <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> classes and the ECEFConvert utility.</li>
-<li>Gather the documentation on the <a class="el" href="utilities.html">Utility programs</a> onto one page.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2009-01<ul>
-<li>First proper release of library.</li>
-<li>More robust <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a>:<ul>
-<li>Introduce <em>extendp</em> version of constructor,</li>
-<li>Test against extended test data,</li>
-<li>Optimize starting positions for Newton's method,</li>
-<li>Fix behavior near all singularities,</li>
-<li>Fix order dependence in C++ start-up code,</li>
-<li>Improved method of computing scale and convergence.</li>
-</ul>
-</li>
-<li>Documentation on transverse Mercator projection.</li>
-<li>Add <a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a>, <a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a>, etc.</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li>Version 2008-09<ul>
-<li>Ad hoc posting of information on the transverse Mercator projection.</li>
-</ul>
-</li>
-</ul>
-<center> Back to <a class="el" href="geocentric.html">Geocentric coordinates</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/open.png b/doc/html/open.png
deleted file mode 100644
index 7b35d2c..0000000
Binary files a/doc/html/open.png and /dev/null differ
diff --git a/doc/html/organization.html b/doc/html/organization.html
deleted file mode 100644
index 3e1999b..0000000
--- a/doc/html/organization.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Code organization</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Code organization </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="utilities.html">Utility programs</a>. Forward to <a class="el" href="other.html">Other interfaces (Javascript, Python, Matlab, Octave)</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>Here is a brief description of the relationship between the various components of GeographicLib. All of these are defined in the <a class="el" href="namespaceGeographicLib.html" title="Namespace for GeographicLib.">Geog [...]
-<p><a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a>, <a class="el" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">GeographicLib::PolarStereographic</a>, <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a>, and <a class="el" href="classGeographicLi [...]
-<p><a class="el" href="classGeographicLib_1_1TransverseMercator.html#aa25b52e35bc54c368e6c8b17e02b0542">GeographicLib::TransverseMercator::UTM</a> and <a class="el" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">GeographicLib::PolarStereographic::UPS</a> are const static instantiations specific for the WGS84 ellipsoid with the UTM and UPS scale factors. (These do <em>not</em> add the standard false eastings or false northings for UTM and UPS.) Simi [...]
-<p><a class="el" href="classGeographicLib_1_1UTMUPS.html" title="Convert between Geographic coordinates and UTM/UPS.">GeographicLib::UTMUPS</a> uses TransverseMercator::UTM and PolarStereographic::UPS to perform the UTM and UPS projections. The class offers a uniform interface to UTM and UPS by treating UPS as UTM zone 0. This class stores no internal state and the forward and reverse projections are provided via static member functions. The forward projection offers the ability to overr [...]
-<p><a class="el" href="classGeographicLib_1_1MGRS.html" title="Convert between UTM/UPS and MGRS.">GeographicLib::MGRS</a> transforms between UTM/UPS coordinates and MGRS. UPS coordinates are handled as UTM zone 0. This class stores no internal state and the forward (UTM/UPS to MGRS) and reverse (MGRS to UTM/UPS) conversions are provided via static member functions.</p>
-<p><a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a> holds a single geographic location which may be specified as latitude and longitude, UTM or UPS, or MGRS. Member functions are provided to convert between coordinate systems and to provide formatted representations of them. <a href="GeoConvert.1.html">GeoConvert</a> is a simple command line utility to provide access to the GeoCoords class.</p>
-<p><a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> is a drop in replacement for TransverseMercator which uses the exact formulas, based on elliptic functions, for the projection as given by Lee. <a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a> is a simple command line utility to test to the TransverseMercator and TransverseMercatorExact.</p>
-<p><a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> and <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a> perform geodesic calculations. The constructor for <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> specifies the ellipsoid and the direct and inverse calculations are implemented as con [...]
-<p><a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> and <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a> convert between geodetic and geocentric or a local cartesian system. The constructor for specifies the ellipsoid and the forward and reverse projections are implemented as const member functions. <a class="el" href="classGeographic [...]
-<p><a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a> evaluates geoid heights by interpolation. This is provided by the operator() member function. <a href="GeoidEval.1.html">GeoidEval</a> is a simple command line utility to provide access to this class. This class requires installation of data files for the various geoid models; see <a class="el" href="geoid.html#geoidinst">Installing the geoid datasets</a> for deta [...]
-<p><a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> evaluates the earth's gravitational field using a particular gravity model. Various member functions return the gravitational field, the gravity disturbance, the gravity anomaly, and the geoid height <a href="Gravity.1.html">Gravity</a> is a simple command line utility to provide access to this class. If the field several points on a circle of la [...]
-<p><a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> evaluates the earth's magnetic field using a particular magnetic model. The field is provided by the operator() member function. <a href="MagneticField.1.html">MagneticField</a> is a simple command line utility to provide access to this class. If the field several points on a circle of latitude are sought then use <a class="el" href="classGeog [...]
-<p><a class="el" href="classGeographicLib_1_1Constants.html" title="Constants needed by GeographicLib">GeographicLib::Constants</a>, <a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a>, <a class="el" href="classGeographicLib_1_1Utility.html" title="Some utility routines for GeographicLib.">GeographicLib::Utility</a>, <a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS r [...]
-<p>In general, the constructors for the classes in GeographicLib check their arguments and throw <a class="el" href="classGeographicLib_1_1GeographicErr.html" title="Exception handling for GeographicLib.">GeographicLib::GeographicErr</a> exceptions with a explanatory message if these are illegal. The member functions, e.g., the projections implemented by TransverseMercator and PolarStereographic, the solutions to the geodesic problem, etc., typically do <em>not</em> check their arguments [...]
-<p>GeographicLib attempts to act sensibly with NaNs. NaNs in constructors typically throw errors (an exception is GeodesicLine). However, calling the class functions with NaNs as arguments is not an error; NaNs are returned as appropriate. "INV" is treated as an invalid zone designation by UTMUPS. "INVALID" is the corresponding invalid MGRS string. NaNs allow the projection of polylines which are separated by NaNs; in this format they can be easily plotted in Matlab.</p>
-<p>A note about portability. For the most part, the code uses standard C++ and should be able to be deployed on any system with a modern C++ compiler. System dependencies come into</p>
-<ul>
-<li><a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a> -- <a class="el" href="namespaceGeographicLib.html" title="Namespace for GeographicLib.">GeographicLib</a> needs to define functions such as atanh for systems that lack them. The system dependence will disappear with the adoption of C++11 because the needed functions are part of that standard.</li>
-<li>use of long double -- the type is used only for testing. On systems which lack this data type the cmake and autoconf configuration methods should detect its absence and omit the code that depends on it.</li>
-<li><a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a>, <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a>, and <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> -- these class uses system-dependent default paths for looking up the resp [...]
-<li><a class="el" href="classGeographicLib_1_1Utility.html#a23e88040ceb60bd3fe28efc04f9119f8">GeographicLib::Utility::readarray</a> reads numerical data from binary files. This assumes that floating point numbers are in IEEE format. It attempts to handled the "endianness" of the target platform using the WORDS_BIGENDIAN macro (which sets the compile-time constant <a class="el" href="classGeographicLib_1_1Math.html#ab14e512a1867b98ecb38e9175426596c">GeographicLib::Math::bigendian</a>).</li>
-</ul>
-<center> Back to <a class="el" href="utilities.html">Utility programs</a>. Forward to <a class="el" href="other.html">Other interfaces (Javascript, Python, Matlab, Octave)</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/other.html b/doc/html/other.html
deleted file mode 100644
index 8c09539..0000000
--- a/doc/html/other.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Other interfaces (Javascript, Python, Matlab, Octave)</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Other interfaces (Javascript, Python, Matlab, Octave) </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="organization.html">Code organization</a>. Forward to <a class="el" href="geoid.html">Geoid height</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>Interfaces to subsets of GeographicLib are available in other languages</p>
-<ul>
-<li><a class="el" href="other.html#javascript">Javascript interface</a>.</li>
-<li><a class="el" href="other.html#python">Python interface</a>.</li>
-<li><a class="el" href="other.html#matlab">Matlab and Octave interfaces</a>.</li>
-</ul>
-<h2><a class="anchor" id="javascript"></a>
-Javascript interface</h2>
-<p>The directory doc/scripts/GeographicLib contains the classes</p>
-<ul>
-<li><a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a></li>
-<li><a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">GeographicLib::Accumulator</a></li>
-<li><a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a></li>
-<li><a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a></li>
-<li><a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a></li>
-<li><a class="el" href="classGeographicLib_1_1DMS.html" title="Convert between degrees and DMS representation.">GeographicLib::DMS</a></li>
-</ul>
-<p>translated into Javascript. See Interface.js for a simple Javascript interface to these routines (documented near the top of the file). Examples of using this interface are</p>
-<ul>
-<li>a <a href="../scripts/geod-calc.html">geodesic calculator</a> showing the solution of direct and inverse geodesic problem, finding intermediate points on a geodesic line, and computing the area of a geodesic polygon.</li>
-<li><a href="../scripts/geod-google.html">displaying geodesics in Google Maps</a> which shows the geodesic, the geodesic circle, and various geodesic envelopes.</li>
-</ul>
-<p>These examples include a "stripped" version of the Javascript code, </p>
-<div class="fragment"><pre class="fragment"><script type=<span class="stringliteral">"text/javascript"</span>
-        src=<span class="stringliteral">"http://geographiclib.sf.net/scripts/geographiclib.js"</span>>
-</script>
-</pre></div><p> which loads faster.</p>
-<h2><a class="anchor" id="python"></a>
-Python interface</h2>
-<p>A python implementation of the geodesic routines from <a class="el" href="namespaceGeographicLib.html" title="Namespace for GeographicLib.">GeographicLib</a> are provided in the python/geographiclib directory (which is installed as PREFIX/lib/python/site-packages/geographiclib). This contains implementations of the classes</p>
-<ul>
-<li><a class="el" href="classGeographicLib_1_1Math.html" title="Mathematical functions needed by GeographicLib.">GeographicLib::Math</a></li>
-<li><a class="el" href="classGeographicLib_1_1Accumulator.html" title="An accumulator for sums.">GeographicLib::Accumulator</a></li>
-<li><a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a></li>
-<li><a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a></li>
-<li><a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a></li>
-</ul>
-<p>You can also download the python interface independent of the rest of GeographicLib from</p>
-<ul>
-<li><a href="http://pypi.python.org/pypi/geographiclib">http://pypi.python.org/pypi/geographiclib</a></li>
-</ul>
-<p>and then unpack the .tar.gz or .zip file.</p>
-<p>You can "install" these routines, so that they are in python's default path with, for example </p>
-<div class="fragment"><pre class="fragment">
-  cd geographiclib-1.16
-  python setup.py install
-</pre></div><p> (this will require root privileges). Or else you can set the path within python using </p>
-<div class="fragment"><pre class="fragment">>>> <span class="keyword">import</span> sys
->>> sys.path.append(<span class="stringliteral">"/usr/local/lib/python/site-packages"</span>);
-</pre></div><p>An example of using this interface is </p>
-<div class="fragment"><pre class="fragment">>>> from geographiclib.geodesic <span class="keyword">import</span> Geodesic
->>> # The geodesic inverse problem
-... Geodesic.WGS84.Inverse(-41.32, 174.81, 40.96, -5.50)
->>> # The geodesic direct problem
-... Geodesic.WGS84.Direct(40.6, -73.8, 45, 10000e3)
->>> # How to obtain several points along a geodesic
-... line = Geodesic.WGS84.Line(40.6, -73.8, 45)
->>> line.Position( 5000e3)
->>> line.Position(10000e3)
->>> # Computing the area of a geodesic polygon
-... def p(lat,lon): return {<span class="stringliteral">'lat'</span>: lat, <span class="stringliteral">'lon'</span>: lon}
-...
->>> Geodesic.WGS84.Area([p(0, 0), p(0, 90), p(90, 0)])
->>> # Introductory help
-... help(Geodesic)
-</pre></div><p>(Note: The initial version of setup.py was provided by Andrew MacIntyre of the Australian Communications and Media Authority.)</p>
-<h2><a class="anchor" id="matlab"></a>
-Matlab and Octave interfaces</h2>
-<p>The matlab directory contains interface code so that some GeographicLib classes can be accessed from Matlab or Octave. There are two ways of compiling this code: (1) using cmake and (2) invoking the compiler from Matlab.</p>
-<ul>
-<li><b>Using cmake:</b> Before running cmake, configure MATLAB on Windows to use the same compiler that you're going to use for compiling GeographicLib. For example <div class="fragment"><pre class="fragment">
-   mex.bat -setup
-
-   Please choose your compiler for building external interface (MEX) files:
-   Would you like mex to locate installed compilers [y]/n? y
-   Select a compiler:
-   [1] Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2010b\sys\lcc
-   [2] Microsoft Visual C++ 2010 in C:\Program Files\Microsoft Visual Studio 10.0
-   [0] None
-
-   Compiler: 2
-   etc. </pre></div> (This will require that mex.bat is in your PATH. With Linux, use <code>mex -setup</code>.) Then configure cmake with, for example <div class="fragment"><pre class="fragment">
-   cmake -G "Visual Studio 10" -D MATLAB_COMPILER=mex .. </pre></div> If you are running a 64-bit version of Matlab, be sure to select a 64-bit generator with cmake, e.g., "Visual Studio 10 Win64". Finally compile GeographicLib with Visual Studio. (The binary installer for 64-bit Windows includes the compiled interface built with Visual Studio 10 and Matlab R2010b 64-bit).<br/>
- On Linux systems, you can compile the interface for use with octave instead by using <div class="fragment"><pre class="fragment">
-   cmake -D MATLAB_COMPILER=mkoctfile .. </pre></div></li>
-<li><b>Invoking the compiler from Matlab or Octave:</b> Start Matlab or Octave and run, e.g., <div class="fragment"><pre class="fragment">   mex -setup
-   cd <span class="stringliteral">'C:/pkg-vc10-x64/GeographicLib-1.21/libexec/GeographicLib/matlab'</span>
-   help geographiclibinterface
-   geographiclibinterface(<span class="stringliteral">'C:/pkg-vc10/GeographicLib-1.21'</span>);
-   addpath(pwd);
-</pre></div> The first command allows you to select the compiler to use (which should be the same as that used to compile GeographicLib).</li>
-</ul>
-<p>To use the interface routines for GeographicLib, run one of (for example) </p>
-<div class="fragment"><pre class="fragment">
-  addpath /usr/local/libexec/GeographicLib/matlab
-  addpath 'C:/pkg-vc10-x64/GeographicLib-1.21/libexec/GeographicLib/matlab'
-</pre></div><p> in Octave or Matlab. The available functions are:</p>
-<ul>
-<li>geodesicdirect: solve direct geodesic problem (see <a class="el" href="classGeographicLib_1_1Geodesic.html#a6e31d7655895a61a49258de00fd14603">GeographicLib::Geodesic::Direct</a>)</li>
-<li>geodesicinverse: solve inverse geodesic problem (see <a class="el" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">GeographicLib::Geodesic::Inverse</a>)</li>
-<li>geodesicline: compute points along a geodesic (see <a class="el" href="classGeographicLib_1_1GeodesicLine.html#ac9843cbfff45e8163b78e184a3126d82">GeographicLib::GeodesicLine::Position</a>)</li>
-<li>polygonarea: compute area of a geodesic polygon (see <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a>)</li>
-<li>utmupsforward: convert geographic coordinates to UTM/UPS (see <a class="el" href="classGeographicLib_1_1UTMUPS.html#a921d6c23e728e0b17651902d43fb56e8">GeographicLib::UTMUPS::Forward</a>)</li>
-<li>utmupsreverse: convert UTM/UPS coordinates to geographic (see <a class="el" href="classGeographicLib_1_1UTMUPS.html#aaf417ae6bed6da324aa03fc96ee0dda4">GeographicLib::UTMUPS::Reverse</a>)</li>
-<li>mgrsforward: convert UTM/UPS coordinates to MGRS (see <a class="el" href="classGeographicLib_1_1MGRS.html#a91de10ebde478dbb85b3c7d057ff97b9">GeographicLib::MGRS::Forward</a>)</li>
-<li>mgrsreverse: convert MGRS coordinates to UTM/UPS (see <a class="el" href="classGeographicLib_1_1MGRS.html#a066b79e78cd85bf4b50df50808bed7e3">GeographicLib::MGRS::Reverse</a>)</li>
-<li>geoidheight: compute geoid height (see <a class="el" href="classGeographicLib_1_1Geoid.html#accb63bfbbadae10af79b3a3028a3045a">GeographicLib::Geoid::operator()()</a>)</li>
-<li>geocentricforward: convert geographic coordinates to geocentric (see <a class="el" href="classGeographicLib_1_1Geocentric.html#a65320594cad8c03d28beaa409f3d6fae">GeographicLib::Geocentric::Forward</a>)</li>
-<li>geocentricreverse: convert geocentric coordinates to geographic (see <a class="el" href="classGeographicLib_1_1Geocentric.html#a1907735ce8f5f915a14a5f7a8b3adfea">GeographicLib::Geocentric::Reverse</a>)</li>
-<li>localcartesianforward: convert geographic coordinates to local cartesian (see <a class="el" href="classGeographicLib_1_1LocalCartesian.html#a6426e95f904f224eabedb8fcd17fe537">GeographicLib::LocalCartesian::Forward</a>)</li>
-<li>localcartesianreverse: convert local cartesian coordinates to geographic (see <a class="el" href="classGeographicLib_1_1LocalCartesian.html#ac34878de3ae995e7d54f0347a1f34118">GeographicLib::LocalCartesian::Reverse</a>)</li>
-</ul>
-<p>These routines just offer a simple interface to the corresponding C++ class. Use the help function to get documentation, e.g., </p>
-<div class="fragment"><pre class="fragment">  help geodesicdirect 
-</pre></div><p> Unfortunately, the help function does not work for compiled functions in Octave; in this case, just list the .m file, e.g., </p>
-<div class="fragment"><pre class="fragment">  type geodesicdirect 
-</pre></div><p> Other useful functions, e.g., to convert from geographic coordinates to MGRS can easily be written with Matlab code.</p>
-<p>Note that geoidheight, when compiled with Visual Studio 2008 causes Matlab to crash. (The problem does not occur with Visual Studio 2005 or Visual Studio 2010.)</p>
-<center> Back to <a class="el" href="organization.html">Code organization</a>. Forward to <a class="el" href="geoid.html">Geoid height</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/pages.html b/doc/html/pages.html
deleted file mode 100644
index 023db83..0000000
--- a/doc/html/pages.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Related Pages</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Related Pages</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock">Here is a list of all related documentation pages:</div><ul>
-<li><a class="el" href="intro.html">Introduction</a>
-</li>
-<li><a class="el" href="install.html">Installing GeographicLib</a>
-</li>
-<li><a class="el" href="start.html">Getting started</a>
-</li>
-<li><a class="el" href="utilities.html">Utility programs</a>
-</li>
-<li><a class="el" href="organization.html">Code organization</a>
-</li>
-<li><a class="el" href="other.html">Other interfaces (Javascript, Python, Matlab, Octave)</a>
-</li>
-<li><a class="el" href="geoid.html">Geoid height</a>
-</li>
-<li><a class="el" href="gravity.html">Gravity models</a>
-</li>
-<li><a class="el" href="magnetic.html">Magnetic models</a>
-</li>
-<li><a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>
-</li>
-<li><a class="el" href="transversemercator.html">Transverse Mercator projection</a>
-</li>
-<li><a class="el" href="geocentric.html">Geocentric coordinates</a>
-</li>
-<li><a class="el" href="old.html">Old versions</a>
-</li>
-</ul>
-</div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:15 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/start.html b/doc/html/start.html
deleted file mode 100644
index 63c30e6..0000000
--- a/doc/html/start.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Getting started</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Getting started </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="install.html">Installing GeographicLib</a>. Forward to <a class="el" href="utilities.html">Utility programs</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>Much (but not all!) of the useful functionality of GeographicLib is available via simple command line utilities. Interfaces to some of them are available via the web. See <a class="el" href="utilities.html">Utility programs</a> for documentation  [...]
-<p>In order to use GeographicLib from C++ code, you will need to</p>
-<ul>
-<li>Include the header files for the GeographicLib classes in your code. E.g., <div class="fragment"><pre class="fragment"><span class="preprocessor">  #include <<a class="code" href="LambertConformalConic_8hpp.html" title="Header for GeographicLib::LambertConformalConic class.">GeographicLib/LambertConformalConic.hpp</a>></span> 
-</pre></div></li>
-<li>Include the <a class="el" href="namespaceGeographicLib.html" title="Namespace for GeographicLib.">GeographicLib</a>:: namespace prefix to the GeographicLib classes, or include <div class="fragment"><pre class="fragment">  <span class="keyword">using namespace </span>GeographicLib; 
-</pre></div> in your code.</li>
-<li>Tell the compiler where to find the header files. With g++ and with /usr/local specified as the installation directory, this is accomplished with <div class="fragment"><pre class="fragment">
-  g++ -c -g -O3 -I/usr/local/include testprogram.cpp
-</pre></div> With Visual Studio, specify the include directory in the IDE via, e.g., <div class="fragment"><pre class="fragment">
-C/C++ -> General -> Additional Include Directories = C:\pkg-vc10\GeographicLib\include
-</pre></div></li>
-<li>Tell the linker the name, Geographic, and location of the library. Using g++ as the linker, you would use <div class="fragment"><pre class="fragment">
-  g++ -g -o testprogram testprogram.o -L/usr/local/lib -lGeographic
-</pre></div> With Visual Studio, you supply this information in the IDE via, e.g., <div class="fragment"><pre class="fragment">
-Linker -> Input -> Additional Dependencies = Geographic.lib
-Linker -> General -> Additional Library Directories = C:\pkg-vc10\GeographicLib\lib
-</pre></div> Note that the library name is <b>Geographic</b> and not GeographicLib. If the library was configured and built with cmake, then the debug version of the library is called Geographic_d.lib.</li>
-<li>Tell the runtime environment where to find the shared library (assuming you compiled GeographicLib as a shared library). With g++, this is accomplished by modifying the link line above to read <div class="fragment"><pre class="fragment">
-  g++ -g -o testprogram testprogram.o -Wl,-rpath=/usr/local/lib -L/usr/local/lib -lGeographic
-</pre></div> (There are two other ways to specify the location of shared libraries at runtime: (1) define the environment variable <code>LD_LIBRARY_PATH</code> to be a colon-separated list of directories to search; (2) as <b>root</b>, specify /usr/local/lib as a directory searched by ldconfig(8).) On Windows, you need to ensure that Geographic.dll is in the same directory as your executable or else include the directory containing the dll in your <code>PATH</code>.</li>
-<li>If you're using cmake to configure and build your project, then instead of the previous three steps, insert <div class="fragment"><pre class="fragment">
-  # Put in your top-level CMakeLists.txt
-  find_package (GeographicLib 1.9 REQUIRED)
-  # In the top-level CMakeLists.txt or wherever your code is compiled
-  include_directories (${GeographicLib_INCLUDE_DIRS})
-  # In the CMakeLists.txt where you define your executable targets
-  target_link_libraries (program1 ${GeographicLib_LIBRARIES})
-  target_link_libraries (program2 ${GeographicLib_LIBRARIES}) </pre></div> in your CMakeLists.txt files (as noted). find_package command should find the library and set the required cmake variables (including <code>GEOGRAPHICLIB_FOUND = TRUE</code>). For find_package to be able to locate GeographicLib, it may be necessary for GeographicLib to be built and installed with cmake (see <a class="el" href="install.html#cmake">Installation with cmake</a>) instead of using some other installatio [...]
-  cmake -G "Visual Studio 10" -D CMAKE_PREFIX_PATH=C:/pkg-vc10 -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10/XYZProject ..
-</pre></div> (If you used some other method of installing GeographicLib, you can try copying cmake/FindGeographicLib.cmake to somewhere in your <code>CMAKE_MODULE_PATH</code> in order for find_package to work. However, this method has not been thoroughly tested.)</li>
-<li>For Windows, ensure that you build the library with the same version of the compiler and you use for your code. In addition, you have to build a separate debug version of the library when you can compiling your code in debug mode. The configuration of cmake described above ensures that the right version of the compiler is used and, assuming you built and installed GeographicLib in debug mode, the debug version of the library Geographic_d.lib will be used.</li>
-</ul>
-<p>Here is a very simple test code, which uses the <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> class: </p>
-<div class="fragment"><pre class="fragment"><span class="comment">// Small example of using the GeographicLib::Geodesic class</span>
-<span class="comment">// $Id: 23959b26e8023e42f76afabf7a2d7b593666a71a $</span>
-
-<span class="preprocessor">#include <iostream></span>
-<span class="preprocessor">#include <<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>></span>
-
-<span class="keyword">using namespace </span>std;
-<span class="keyword">using namespace </span>GeographicLib;
-
-<span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>() {
-  <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>& geod = <a class="code" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">Geodesic</a>::WGS84;
-  <span class="comment">// Distance from JFK to LHR</span>
-  <span class="keywordtype">double</span>
-    lat1 = 40.6, lon1 = -73.8, <span class="comment">// JFK Airport</span>
-    lat2 = 51.6, lon2 = -0.5;  <span class="comment">// LHR Airport</span>
-  <span class="keywordtype">double</span> s12;
-  geod.<a class="code" href="classGeographicLib_1_1Geodesic.html#ad7e59a242125a35a95c96cdb20573081">Inverse</a>(lat1, lon1, lat2, lon2, s12);
-  cout << s12 / 1000 << <span class="stringliteral">" km\n"</span>;
-  <span class="keywordflow">return</span> 0;
-}
-</pre></div><p> This example is <code>examples/example-Geodesic-small.cpp</code>. If you compile, link, and run it according to the instructions above, it should print out </p>
-<div class="fragment"><pre class="fragment">
-  5551.76 km
-</pre></div><p>The next steps are:</p>
-<ul>
-<li>Learn about and run the <a class="el" href="utilities.html">Utility programs</a>.</li>
-<li>Read the section, <a class="el" href="organization.html">Code organization</a>, for an overview of the library.</li>
-<li>Browse the <a href="annotated.html">Class List</a> for full documentation on the classes in the library.</li>
-<li>Look at the example code in the examples directory. Each file provides a very simple standalone example of using one GeographicLib class. These are included in the descriptions of the classes.</li>
-<li>Look at the source code for the utilities in the tools directory for more examples of using GeographicLib from C++ code, e.g., <a class="el" href="GeodesicProj_8cpp.html" title="Command line utility for geodesic projections.">GeodesicProj.cpp</a> is a program to performing various geodesic projections.</li>
-</ul>
-<p>Here's a list of some of the abbreviations used here with links to the corresponding Wikipedia articles:</p>
-<ul>
-<li><a href="http://en.wikipedia.org/wiki/WGS84">WGS84</a>, World Geodetic System 1984.</li>
-<li><a href="http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system">UTM</a>, Universal Transverse Mercator coordinate system.</li>
-<li><a href="http://en.wikipedia.org/wiki/Universal_Polar_Stereographic">UPS</a>, Universal Polar Stereographic coordinate system.</li>
-<li><a href="http://en.wikipedia.org/wiki/Military_grid_reference_system">MGRS</a>, Military Grid Reference System.</li>
-<li><a href="http://en.wikipedia.org/wiki/Geoid">EGM</a>, Earth Gravity Model.</li>
-<li><a href="http://en.wikipedia.org/wiki/World_Magnetic_Model">WMM</a>, World Magnetic Model.</li>
-<li><a href="http://en.wikipedia.org/wiki/IGRF">IGRF</a>, International Geomagnetic Reference Field.</li>
-</ul>
-<center> Back to <a class="el" href="install.html">Installing GeographicLib</a>. Forward to <a class="el" href="utilities.html">Utility programs</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/tab_a.png b/doc/html/tab_a.png
deleted file mode 100644
index 2d99ef2..0000000
Binary files a/doc/html/tab_a.png and /dev/null differ
diff --git a/doc/html/tab_b.png b/doc/html/tab_b.png
deleted file mode 100644
index b2c3d2b..0000000
Binary files a/doc/html/tab_b.png and /dev/null differ
diff --git a/doc/html/tab_h.png b/doc/html/tab_h.png
deleted file mode 100644
index c11f48f..0000000
Binary files a/doc/html/tab_h.png and /dev/null differ
diff --git a/doc/html/tab_s.png b/doc/html/tab_s.png
deleted file mode 100644
index 978943a..0000000
Binary files a/doc/html/tab_s.png and /dev/null differ
diff --git a/doc/html/tabs.css b/doc/html/tabs.css
deleted file mode 100644
index 2192056..0000000
--- a/doc/html/tabs.css
+++ /dev/null
@@ -1,59 +0,0 @@
-.tabs, .tabs2, .tabs3 {
-    background-image: url('tab_b.png');
-    width: 100%;
-    z-index: 101;
-    font-size: 13px;
-}
-
-.tabs2 {
-    font-size: 10px;
-}
-.tabs3 {
-    font-size: 9px;
-}
-
-.tablist {
-    margin: 0;
-    padding: 0;
-    display: table;
-}
-
-.tablist li {
-    float: left;
-    display: table-cell;
-    background-image: url('tab_b.png');
-    line-height: 36px;
-    list-style: none;
-}
-
-.tablist a {
-    display: block;
-    padding: 0 20px;
-    font-weight: bold;
-    background-image:url('tab_s.png');
-    background-repeat:no-repeat;
-    background-position:right;
-    color: #283A5D;
-    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-    text-decoration: none;
-    outline: none;
-}
-
-.tabs3 .tablist a {
-    padding: 0 10px;
-}
-
-.tablist a:hover {
-    background-image: url('tab_h.png');
-    background-repeat:repeat-x;
-    color: #fff;
-    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
-    text-decoration: none;
-}
-
-.tablist li.current a {
-    background-image: url('tab_a.png');
-    background-repeat:repeat-x;
-    color: #fff;
-    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
-}
diff --git a/doc/html/tm.mac b/doc/html/tm.mac
deleted file mode 100644
index ef4eef3..0000000
--- a/doc/html/tm.mac
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
-
-Arbitrary precision Transverse Mercator Projection
-
-Written by Charles Karney <charles at karney.com>
-http://geographiclib.sourceforge.net/
-
-$Id: 688c810de1f36d1e2239f39a973835acfc5a8649 $
-
-Reference:
-
-   Charles F. F. Karney,
-   Transverse Mercator with an accuracy of a few nanometers,
-   J. Geodesy 85(8), 475-485 (Aug. 2011).
-   DOI 10.1007/s00190-011-0445-3
-   preprint http://arxiv.org/abs/1002.1417
-   resource page http://geographiclib.sf.net/tm.html
-
-The parameters for the transformation are set by
-
-setparams(a,invf,k0)$
-    sets the major radius, inverse flattening, and central scale
-    factor. The default is
-      setparams(6378137b0, 298.257223563b0, 0.9996b0)$
-    appropriate for UTM applications.
-
-tm(lat,lon);
-    takes lat and lon args (in degrees) and returns
-      [x, y, convergence, scale]
-    [x, y] do not include false eastings/northings but do include the
-    scale factor k0.  convergence is in degrees.
-
-ll(x,y);
-    takes x and y args (in meters) and returns
-      [lat, lon, convergence, scale].
-
-Example:
-
-$ maxima
-Maxima 5.15.0 http://maxima.sourceforge.net
-Using Lisp CLISP 2.43 (2007-11-18)
-Distributed under the GNU Public License. See the file COPYING.
-Dedicated to the memory of William Schelter.
-The function bug_report() provides bug reporting information.
-(%i1) load("tm.mac")$
-(%i2) tm(10b0,20b0);
-(%o2) [2.235209504622466691587930831718465965864199221939781808953597771095103\
-6690000464b6, 1.17529734503138466792126931904154130080533935727351398258511134\
-68541970512119385b6, 3.6194756227592979778565787394402350354250845160819430786\
-093514889500602612857052b0, 1.062074627142564335518604915718789933200854739344\
-8664109599248189291146283796933b0]
-(%i3) ll(%[1],%[2]);
-(%o3) [1.0b1, 2.0b1, 3.6194756227592979778565787394402350354250845160819430786\
-093514889500602612857053b0, 1.062074627142564335518604915718789933200854739344\
-8664109599248189291146283796933b0]
-(%i4) float(%o2);
-(%o4) [2235209.504622467, 1175297.345031385, 3.619475622759298,
-                                                             1.062074627142564]
-(%i5) float(%o3);
-(%o5)         [10.0, 20.0, 3.619475622759298, 1.062074627142564]
-
-This implements GeographicLib::TransverseMercatorExact (i.e., Lee, 1976)
-using bfloats.  However fewer changes from Lee 1976 have been made since
-we rely more heavily on the high precision to deal with problem cases.
-
-To change the precision, change fpprec below and reload.
-
-*/
-
-fpprec:80$
-load("ellint.mac")$ /* Load elliptic functions */
-
-tol:0.1b0^fpprec$
-tol1:0.1b0*sqrt(tol)$ /* For Newton's method */
-tol2:sqrt(0.01*tol*tol1)$ /* Also for Newton's method but more conservative */
-ahypover:log(10b0^fpprec)+2$
-
-pi:bfloat(%pi)$
-degree:pi/180$
-ratprint:false$
-debugprint:false$
-setparams(a1,invf,k1):=(a:bfloat(a1),f:1/bfloat(invf),k0:bfloat(k1),
-  e2:f*(2-f),
-  e:sqrt(e2),
-  kcu:kc(e2),
-  kcv:kc(1-e2),
-  ecu:ec(e2),
-  ecv:ec(1-e2),
-  n:f/(2-f),
-  'done)$
-setparams(6378137b0, 298.257223563b0, 0.9996b0)$  /* WGS 84 */
-/* setparams(6378388b0, 297b0, 0.9996b0)$ International */
-/* setparams(1/ec(0.01b0), 30*sqrt(11b0)+100, 1b0)$ testing, eps = 0.1*/
-
-/*
-Interpret x_y(y) as x <- y, i.e., "transform quantity y to quantity x"
-
-Let
-
-phi = geodetic latitude
-psi = isometric latitude ( + i * lambda )
-sigma = TM coords
-thom = Thompson coords
-
-*/
-
-/* sqrt(x^2 + y^2) -- Real only */
-hypot(x,y):=sqrt(x^2 + y^2)$
-
-/* log(1 + x) -- Real only */
-log1p(x) := block([y : 1b0+x],
-  if y = 1b0 then x else x*log(y)/(y - 1))$
-
-/* Real only */
-/* Some versions of Maxima have a buggy atanh
-atnh(x) := block([y : abs(x)],
-  y : log1p(2 * y/(1 - y))/2,
-  if x < 0 then -y else y)$ */
-atnh(x) := atanh(x)$
-
-/* exp(x)-1 -- Real only */
-expm1(x) := block([y : exp(bfloat(x)),z],
-  z : y - 1b0,
-  if abs(x) > 1b0 then z else if z = 0b0 then x else x * z/log(y))$
-
-/* Real only */
-/* Some versions of Maxima have a buggy sinh */
-snh(x) := block([u : expm1(x)],
-  (u / (u + 1)) * (u + 2) /2);
-
-/* Real only */
-psi_phi(phi):=block([s:sin(phi)],
-  asinh(s/max(cos(phi),0.1b0*tol)) - e * atnh(e * s))$
-
-/* Real only */
-phi_psi(psi):=block([q:psi,t,dq],
-  for i do (
-    t:tanh(q),
-    dq : -(q - e * atnh(e * t) - psi) * (1 - e2 * t^2) / (1 - e2),
-    q : q + dq,
-    if debugprint then print(float(q), float(dq)),
-    if abs(dq) < tol1 then return(false)),
-  atan(snh(q)))$
-
-psi_thom_comb(w):=block([jacr:sncndn(bfloat(realpart(w)),1-e2),
-  jaci:sncndn(bfloat(imagpart(w)),e2),d,d1,d2],
-  d:(1-e2)*(jaci[2]^2 + e2 * (jacr[1] * jaci[1])^2)^2,
-  d1:sqrt(jacr[2]^2 + (1-e2) * (jacr[1] * jaci[1])^2),
-  d2:sqrt(e2 * jacr[2]^2 + (1-e2) * jaci[2]^2),
-[
-  (if d1 > 0b0 then asinh(jacr[1]*jaci[3]/ d1) else signnum(snu) * ahypover)
-  - (if d2 > 0b0 then e * asinh(e * jacr[1] / d2) else signnum(snu) * ahypover)
-  + %i * (if d1 > 0b0 and d2 > 0b0 then
-    atan2(jacr[3]*jaci[1],jacr[2]*jaci[2])
-    - e * atan2(e*jacr[2]*jaci[1],jacr[3]*jaci[2]) else 0),
-  jacr[2]*jacr[3]*jaci[3]*(jaci[2]^2-e2*(jacr[1]*jaci[1])^2)/d
-  -%i * jacr[1]*jaci[1]*jaci[2]*((jacr[3]*jaci[3])^2+e2*jacr[2]^2)/d]
-)$
-
-psi_thom(w):=block([tt:psi_thom_comb(w)],tt[1])$
-inv_diff_psi_thom(w):=block([tt:psi_thom_comb(w)],tt[2])$
-
-w0a(psi):=block([lam:bfloat(imagpart(psi)),psia:bfloat(realpart(psi))],
-  rectform(kcu/(pi/2)*( atan2(snh(psia),cos(lam))
-      +%i*asinh(sin(lam)/sqrt(cos(lam)^2 + snh(psia)^2)))))$
-
-w0c(psi):=block([m,a,dlam],
-  dlam:bfloat(imagpart(psi))-pi/2*(1-e),
-  psi:bfloat(realpart(psi)),
-  m:sqrt(psi^2+dlam^2)*3/(1-e2)/e,
-  a:if m = 0b0 then 0 else atan2(dlam-psi, psi+dlam) - 0.75b0*pi,
-  m:m^(1/3), a:a/3,
-  m*cos(a)+%i*(m*sin(a)+kcv))$
-
-w0d(psi):=block([psir:-realpart(psi)/e+1b0,lam:(pi/2-imagpart(psi))/e,uu,vv],
-  uu:asinh(sin(lam)/sqrt(cos(lam)^2+snh(psir)^2))*(1+e2/2),
-  vv:atan2(cos(lam), snh(psir)) *(1+e2/2),
-  (-uu+kcu) + %i * (-vv+kcv))$
-
-w0m(psi):=if realpart(psi)<-e/2*pi/2 and
-imagpart(psi)>pi/2*(1-2*e) and
-realpart(psi) < imagpart(psi)-(pi/2*(1-e)) then w0d(psi) else
-if realpart(psi)<e*pi/2 and imagpart(psi)>pi/2*(1-2*e)
-then w0c(psi) else w0a(psi)$
-w0(psi):=w0m(psi)$
-
-thom_psi(psi):=block([w:w0(psi),dw,v,vv],
-if not(abs(psi-pi/2*(1-e)*%i) < e * tol^0.6b0) then
-  for i do (
-    if i > 100 then error("too many iterations"),
-    vv:psi_thom_comb(w),
-    v:vv[1],
-    dw:-rectform((v-psi)*vv[2]),
-    w:w+dw,
-    dw:abs(dw),
-    if debugprint then print(float(w),float(dw)),
-    /* error is approx dw^2/2 */
-    if dw < tol2 then return(false)
-    ),
-  w
-  )$
-
-sigma_thom_comb(w):=block([u:bfloat(realpart(w)),v:bfloat(imagpart(w)),
-  jacr,jaci,phi,iu,iv,den,den1,er,ei,dnr,dni],
-  jacr:sncndn(u,1-e2),jaci:sncndn(v,e2),
-  er:eirx(jacr[1],jacr[2],jacr[3],e2,ecu),
-  ei:eirx(jaci[1],jaci[2],jaci[3],1-e2,ecv),
-  den:e2*jacr[2]^2+(1-e2)*jaci[2]^2,
-  den1:(1-e2)*(jaci[2]^2 + e2 * (jacr[1] * jaci[1])^2)^2,
-  dnr:jacr[3]*jaci[2]*jaci[3],
-  dni:-e2*jacr[1]*jacr[2]*jaci[1],
-[  er - e2*jacr[1]*jacr[2]*jacr[3]/den
-  + %i*(v - ei + (1-e2)*jaci[1]*jaci[2]*jaci[3]/den),
-  (dnr^2-dni^2)/den1 + %i * 2*dnr*dni/den1])$
-
-sigma_thom(w):=block([tt:sigma_thom_comb(w)],tt[1])$
-inv_diff_sigma_thom(w):=block([tt:sigma_thom_comb(w)],tt[2])$
-
-wx0a(sigma):=rectform(sigma*kcu/ecu)$
-wx0b(sigma):=block([m,aa],
-  sigma:rectform(sigma-%i*(kcv-ecv)),
-  m:abs(sigma)*3/(1-e2),
-  aa:atan2(imagpart(sigma),realpart(sigma)),
-  if aa<-pi/2 then aa:aa+2*pi,
-  aa:aa-pi,
-  rectform(m^(1/3)*(cos(aa/3b0)+%i*sin(aa/3b0))+%i*kcv))$
-wx0c(sigma):=rectform(1/(sigma-(ecu+%i*(kcv-ecv))) + kcu+%i*kcv)$
-wx0m(sigma):=block([eta:bfloat(imagpart(sigma)),
-  xi:bfloat(realpart(sigma))],
-  if eta > 1.25b0 * (kcv-ecv) or (xi < -0.25*ecu and xi < eta-(kcv-ecv)) then
-  wx0c(sigma) else
-  if (eta > 0.75b0 * (kcv-ecv) and xi < 0.25b0 * ecu) or
-  eta > kcv-ecv or xi < 0 then wx0b(sigma) else wx0a(sigma))$
-wx0(sigma):=wx0m(sigma)$
-thom_sigma(sigma):=block([w:wx0(sigma),dw,v,vv],
-  for i do (
-    if i > 100 then error("too many iterations"),
-    vv:sigma_thom_comb(w),
-    v:vv[1],
-    dw:-rectform((v-sigma)*vv[2]),
-    w:w+dw,
-    dw:abs(dw),
-    if debugprint then print(float(w),float(dw)),
-    /* error is approx dw^2/2 */
-    if dw < tol2 then return(false)
-    ),
-  w
-  )$
-
-/* Lee/Thompson's method forward */
-
-tm(phi,lam):=block([psi,thom,jacr,jaci,sigma,gam,scale,c],
-  phi:phi*degree,
-  lam:lam*degree,
-  psi:psi_phi(phi),
-  thom:thom_psi(psi+%i*lam),
-  jacr:sncndn(bfloat(realpart(thom)),1-e2),
-  jaci:sncndn(bfloat(imagpart(thom)),e2),
-  sigma:sigma_thom(thom),
-  c:cos(phi),
-  if c > tol1 then (
-    gam:atan2((1-e2)*jacr[1]*jaci[1]*jaci[2],
-      jacr[2]*jacr[3]*jaci[3]),
-    scale:sqrt(1-e2 + e2 * c^2)/c*
-    sqrt(((1-e2)*jaci[1]^2 + (jacr[2]*jaci[3])^2)/
-      (e2*jacr[2]^2 + (1-e2)*jaci[2]^2)))
-  else (gam : lam, scale : 1b0),
-  [imagpart(sigma)*k0*a,realpart(sigma)*k0*a,gam/degree,k0*scale])$
-
-/* Lee/Thompson's method reverse */
-
-ll(x,y):=block([sigma,thom,jacr,jaci,psi,lam,phi,gam,scale,c],
-  sigma:y/(a*k0)+%i*x/(a*k0),
-  thom:thom_sigma(sigma),
-  jacr:sncndn(bfloat(realpart(thom)),1-e2),
-  jaci:sncndn(bfloat(imagpart(thom)),e2),
-  psi:psi_thom(thom),
-  lam:bfloat(imagpart(psi)),
-  psi:bfloat(realpart(psi)),
-  phi:phi_psi(psi),
-  c:cos(phi),
-  if c > tol1 then (
-    gam:atan2((1-e2)*jacr[1]*jaci[1]*jaci[2],
-      jacr[2]*jacr[3]*jaci[3]),
-    scale:sqrt(1-e2 + e2 * c^2)/c*
-    sqrt(((1-e2)*jaci[1]^2 + (jacr[2]*jaci[3])^2)/
-      (e2*jacr[2]^2 + (1-e2)*jaci[2]^2)))
-  else (gam : lam, scale : 1b0),
-  [phi/degree,lam/degree,gam/degree,k0*scale])$
-
-/* Return lat/lon/x/y for a point specified in Thompson coords */
-/* Pick u in [0, kcu] and v in [0, kcv] */
-lltm(u,v):=block([jacr,jaci,psi,lam,phi,c,gam,scale,sigma,x,y],
-  u:bfloat(u), v:bfloat(v),
-  jacr:sncndn(u,1-e2),
-  jaci:sncndn(v,e2),
-  psi:psi_thom(u+%i*v),
-  sigma:sigma_thom(u+%i*v),
-  x:imagpart(sigma)*k0*a,y:realpart(sigma)*k0*a,
-  lam:bfloat(imagpart(psi)),
-  psi:bfloat(realpart(psi)),
-  phi:phi_psi(psi),
-  c:cos(phi),
-  if c > tol1 then (
-    gam:atan2((1-e2)*jacr[1]*jaci[1]*jaci[2],
-      jacr[2]*jacr[3]*jaci[3]),
-    scale:sqrt(1-e2 + e2 * c^2)/c*
-    sqrt(((1-e2)*jaci[1]^2 + (jacr[2]*jaci[3])^2)/
-      (e2*jacr[2]^2 + (1-e2)*jaci[2]^2)))
-  else (gam : lam, scale : 1b0),
-  [phi/degree,lam/degree,x,y,gam/degree,k0*scale])$
-
-/* Gauss-Krueger series to order n^i forward
-
-Uses the array functions
-
- a1_a[i](n), zeta_a[i](z,n), zeta_d[i](z,n), zetap_a[i](s,n), zetap_d[i](s,n),
-
-defined in tmseries.mac.
-*/
-
-tms(phi,lam,i):=block([psi,xip,etap,z,sigma,sp,gam,k,b1],
-  phi:phi*degree,
-  lam:lam*degree,
-  psi:psi_phi(phi),
-  xip:atan2(snh(psi), cos(lam)),
-  etap:asinh(sin(lam)/hypot(snh(psi),cos(lam))),
-  k:sqrt(1 - e2*sin(phi)^2)/(cos(phi)*hypot(snh(psi),cos(lam))),
-  gam:atan(tan(xip)*tanh(etap)),
-  z:xip+%i*etap,
-  b1:a1_a[i](n),
-  sigma:rectform(b1*zeta_a[i](z,n)),
-  sp:rectform(zeta_d[i](z,n)),
-  gam : gam - atan2(imagpart(sp),realpart(sp)),
-  k : k * b1 * cabs(sp),
-  [imagpart(sigma)*k0*a,realpart(sigma)*k0*a,gam/degree,k*k0])$
-
-/* Gauss-Krueger series to order n^i reverse */
-
-lls(x,y,i):=block([sigma,b1,s,z,zp,xip,etap,s,c,r,gam,k,lam,psi,phi],
-  sigma:y/(a*k0)+%i*x/(a*k0),
-  b1:a1_a[i](n),
-  s:rectform(sigma/b1),
-  z:rectform(zetap_a[i](s,n)),
-  zp:rectform(zetap_d[i](s,n)),
-  gam : atan2(imagpart(zp), realpart(zp)),
-  k : b1 / cabs(zp),
-  xip:realpart(z),
-  etap:imagpart(z),
-  s:snh(etap),
-  c:cos(xip),
-  r:hypot(s, c),
-  lam:atan2(s, c),
-  psi : asinh(sin(xip)/r),
-  phi :phi_psi(psi),
-  k : k * sqrt(1 - e2*sin(phi)^2) * r/cos(phi),
-  gam : gam + atan(tan(xip) * tanh(etap)),
-  [phi/degree,lam/degree,gam/degree,k*k0])$
-
-/* Approx geodesic distance valid for small displacements */
-
-dist(phi0,lam0,phi,lam):=block([dphi,dlam,nn,hlon,hlat],
-  dphi:(phi-phi0)*degree,
-  dlam:(lam-lam0)*degree,
-  phi0:phi0*degree,
-  lam0:lam0*degree,
-  nn : 1/sqrt(1 - e2 * sin(phi0)^2),
-  hlon : cos(phi0) * nn,
-  hlat : (1 - e2) * nn^3,
-  a * hypot(dphi*hlat, dlam*hlon))$
-
-/* Compute truncation errors for all truncation levels */
-
-check(phi,lam):=block([vv,x,y,gam,k,vf,vb,errf,errr,err2,errlist],
-  phi:min(90-0.01b0,phi),
-  lam:min(90-0.01b0,lam),
-  vv:tm(phi,lam),
-  errlist:[],
-  x:vv[1], y:vv[2], gam:vv[3], k:vv[4],
-  for i:1 thru maxpow do (
-    vf:tms(phi,lam,i),
-    errf:hypot(vf[1]-x,vf[2]-y)/k,
-    errfg:abs(vf[3]-gam),
-    errfk:abs((vf[4]-k)/k),
-    vb:lls(x,y,i),
-    errr:dist(phi,lam,vb[1],vb[2]),
-    errrg:abs(vb[3]-gam),
-    errrk:abs((vb[4]-k)/k),
-    errlist:append(errlist,
-      [max(errf, errr), max(errfg, errrg), max(errfk, errrk)])),
-  errlist)$
-
-/* Max of output of check over a set of points */
-
-checka(lst):=block([errlist:[],errx],
-  for i:1 thru 3*maxpow do errlist:cons(0b0,errlist),
-  for vv in lst do (
-    errx:check(vv[1],vv[2]),
-    for i:1 thru 3*maxpow do errlist[i]:max(errlist[i],errx[i])),
-  errlist)$
diff --git a/doc/html/tmseries.mac b/doc/html/tmseries.mac
deleted file mode 100644
index 0a83431..0000000
--- a/doc/html/tmseries.mac
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-
-Compute series approximations for Transverse Mercator Projection
-
-Written by Charles Karney <charles at karney.com>
-http://geographiclib.sourceforge.net/
-
-$Id: c790f624c09d809837ba853444e8f82db01a1665 $
-
-Reference:
-
-   Charles F. F. Karney,
-   Transverse Mercator with an accuracy of a few nanometers,
-   J. Geodesy 85(8), 475-485 (Aug. 2011).
-   DOI 10.1007/s00190-011-0445-3
-   preprint http://arxiv.org/abs/1002.1417
-   resource page http://geographiclib.sf.net/tm.html
-
-Compute coefficient for forward and inverse trigonometric series for
-conversion from conformal latitude to rectifying latitude.  This prints
-out assignments which with minor editing are suitable for insertion into
-C++ code.  (N.B. n^3 in the output means n*n*n; 3/5 means 0.6.)
-
-To run, start maxima and enter
-
-    writefile("tmseries.out")$
-    load("tmseries.mac")$
-    closefile()$
-
-With maxpow = 6, the output (after about 5 secs) is
-
-A=a/(n+1)*(1+n^2/4+n^4/64+n^6/256);
-alpha[1]=n/2-2*n^2/3+5*n^3/16+41*n^4/180-127*n^5/288+7891*n^6/37800;
-alpha[2]=13*n^2/48-3*n^3/5+557*n^4/1440+281*n^5/630-1983433*n^6/1935360;
-alpha[3]=61*n^3/240-103*n^4/140+15061*n^5/26880+167603*n^6/181440;
-alpha[4]=49561*n^4/161280-179*n^5/168+6601661*n^6/7257600;
-alpha[5]=34729*n^5/80640-3418889*n^6/1995840;
-alpha[6]=+212378941*n^6/319334400;
-beta[1]=n/2-2*n^2/3+37*n^3/96-n^4/360-81*n^5/512+96199*n^6/604800;
-beta[2]=n^2/48+n^3/15-437*n^4/1440+46*n^5/105-1118711*n^6/3870720;
-beta[3]=17*n^3/480-37*n^4/840-209*n^5/4480+5569*n^6/90720;
-beta[4]=4397*n^4/161280-11*n^5/504-830251*n^6/7257600;
-beta[5]=4583*n^5/161280-108847*n^6/3991680;
-beta[6]=+20648693*n^6/638668800;
-
-Notation of output matches that of
-
- L. Krueger,
- Konforme Abbildung des Erdellipsoids in der Ebene
- Royal Prussian Geodetic Institute, New Series 52, 172 pp. (1912).
-
-with gamma replaced by alpha.
-
-Alter maxpow to generate more or less terms for the series
-approximations to the forward and reverse projections.  This has been
-tested out to maxpow = 30; but this takes a long time (see below).
-
-*/
-
-/* Timing:
-  maxpow  time
-    4      2s
-    6      5s
-    8     11s
-   10     24s
-   12     52s
-   20    813s = 14m
-   30  13535s = 226m
-*/
-
-maxpow:6$ /* Max power for forward and reverse projections */
-/* Notation
-
-   e = eccentricity
-   e2 = e^2 = f*(2-f)
-   n = third flattening = f/(2-f)
-   phi = (complex) geodetic latitude
-   zetap = Gauss-Schreiber TM = complex conformal latitude
-   psi = Mercator = complex isometric latitude
-   zeta = scaled UTM projection = complex rectifying latitude
-*/
-
-taylordepth:6$
-triginverses:'all$
-/*
-    revert
-       var2 = expr(var1) = series in eps
-    to
-       var1 = revertexpr(var2) = series in eps
-
-Require that expr(var1) = var1 to order eps^0.  This throws in a
-trigreduce to convert to multiple angle trig functions.
-*/
-reverta(expr,var1,var2,eps,pow):=block([tauacc:1,sigacc:0,dsig],
-  dsig:ratdisrep(taylor(expr-var1,eps,0,pow)),
-  dsig:subst([var1=var2],dsig),
-  for n:1 thru pow do (tauacc:trigreduce(ratdisrep(taylor(
-    -dsig*tauacc/n,eps,0,pow))),
-    sigacc:sigacc+expand(diff(tauacc,var2,n-1))),
-  var2+sigacc)$
-
-
-/* Expansion for atan(x+eps) for small eps.  Equivalent to
-   taylor(atan(x + eps), eps, 0, maxpow) but tidied up a bit.
- */
-atanexp(x,eps):=''(ratdisrep(taylor(atan(x+eps),eps,0,maxpow)))$
-
-/* Convert from n to e^2 */
-e2:4*n/(1+n)^2$
-
-/* zetap in terms of phi.  The expansion of
-   atan(sinh( asinh(tan(phi)) + e * atanh(e * sin(phi)) ))
-*/
-zetap_phi:block([psiv,tanzetap,zetapv,qq,e],
-    /* Here qq = atanh(sin(phi)) = asinh(tan(phi)) */
-    psiv:qq-e*atanh(e*tanh(qq)),
-    psiv:subst([e=sqrt(e2),qq=atanh(sin(phi))],
-      ratdisrep(taylor(psiv,e,0,2*maxpow)))
-    +asinh(sin(phi)/cos(phi))-atanh(sin(phi)),
-    tanzetap:subst([abs(cos(phi))=cos(phi),sqrt(sin(phi)^2+cos(phi)^2)=1],
-      ratdisrep(taylor(sinh(psiv),n,0,maxpow)))+tan(phi)-sin(phi)/cos(phi),
-    zetapv:atanexp(tan(phi),tanzetap-tan(phi)),
-    zetapv:subst([cos(phi)=sqrt(1-sin(phi)^2),
-      tan(phi)=sin(phi)/sqrt(1-sin(phi)^2)],
-      (zetapv-phi)/cos(phi))*cos(phi)+phi,
-    zetapv:ratdisrep(taylor(zetapv,n,0,maxpow)),
-    expand(trigreduce(zetapv)))$
-
-/* phi in terms of zetap */
-phi_zetap:reverta(zetap_phi,phi,zetap,n,maxpow)$
-
-/* Mean radius of meridian */
-a1:expand(integrate(
-      ratdisrep(taylor((1+n)*(1-e2)/(1-e2*sin(phi)^2)^(3/2),
-          n,0,maxpow)),
-      phi, 0, %pi/2)/(%pi/2))/(1+n)$
-
-/* zeta in terms of phi.  The expansion of
-   zeta = pi/(2*a1) * int( (1-e^2)/(1-e^2*sin(phi)^2)^(3/2) )
-*/
-zeta_phi:block([zetav],
-    zetav:integrate(trigreduce(ratdisrep(taylor(
-            (1-e2)/(1-e2*sin(phi)^2)^(3/2)/a1,
-            n,0,maxpow))),phi),
-    expand(zetav))$
-
-/* phi in terms of zeta */
-phi_zeta:reverta(zeta_phi,phi,zeta,n,maxpow)$
-
-/* zeta in terms of zetap */
-/* This is slow.  The next version speeds it up a little.
-zeta_zetap:expand(trigreduce(ratdisrep(
-        taylor(subst([phi=phi_zetap],zeta_phi),n,0,maxpow))))$
-*/
-zeta_zetap:block([phiv:phi_zetap,zetav:expand(zeta_phi),acc:0],
-    for i:0 thru maxpow do (
-      phiv:ratdisrep(taylor(phiv,n,0,maxpow-i)),
-      acc:acc + expand(n^i * trigreduce(ratdisrep(taylor(
-              subst([phi=phiv],coeff(zetav,n,i)),n,0,maxpow-i))))),
-    acc)$
-
-/* zetap in terms of zeta */
-/* This is slow.  The next version speeds it up a little.
-zetap_zeta:expand(trigreduce(ratdisrep(
-        taylor(subst([phi=phi_zeta],zetap_phi),n,0,maxpow))))$
-*/
-zetap_zeta:block([phiv:phi_zeta,zetapv:expand(zetap_phi),acc:0],
-    for i:0 thru maxpow do (
-      phiv:ratdisrep(taylor(phiv,n,0,maxpow-i)),
-      acc:acc + expand(n^i * trigreduce(ratdisrep(taylor(
-              subst([phi=phiv],coeff(zetapv,n,i)),n,0,maxpow-i))))),
-    acc)$
-
-printa1():=block([],
-  print(concat("A=",string(a/(n+1)),"*(",
-      string(taylor(a1*(1+n),n,0,maxpow)),");")),
-  0)$
-printtxf():=block([alpha:zeta_zetap,t],
-  for i:1 thru maxpow do (t:coeff(alpha,sin(2*i*zetap)),
-    print(concat("alpha[",i,"]=",string(taylor(t,n,0,maxpow)),";")),
-    alpha:alpha-expand(t*sin(2*i*zetap))),
-/* should return zero */
-  alpha:alpha-zetap)$
-printtxr():=block([beta:zetap_zeta,t],
-  for i:1 thru maxpow do (t:coeff(beta,sin(2*i*zeta)),
-    print(concat("beta[",i,"]=",string(taylor(-t,n,0,maxpow)),";")),
-    beta:beta-expand(t*sin(2*i*zeta))),
-/* should return zero */
-  beta:beta-zeta)$
-
-printseries():=[printa1(),printtxf(),printtxr()]$
-
-/* Define array functions which are be read by tm.mac */
-defarrayfuns():=block([aa:a1*(1+n),alpha:zeta_zetap,beta:zetap_zeta,t],
-  for i:1 thru maxpow do (
-    define(a1_a[i](n),ratdisrep(taylor(aa,n,0,i))/(1+n)),
-    t:expand(ratdisrep(taylor(alpha,n,0,i))),
-    define(zeta_a[i](zp,n),
-      zp+sum(coeff(t,sin(2*k*zetap))*sin(2*k*zp),k,1,i)),
-    t:diff(t,zetap),
-    define(zeta_d[i](zp,n),
-      1+sum(coeff(t,cos(2*k*zetap))*cos(2*k*zp),k,1,i)),
-    t:expand(ratdisrep(taylor(beta,n,0,i))),
-    define(zetap_a[i](z,n),
-      z+sum(coeff(t,sin(2*k*zeta))*sin(2*k*z),k,1,i)),
-    t:diff(t,zeta),
-    define(zetap_d[i](z,n),
-      1+sum(coeff(t,cos(2*k*zeta))*cos(2*k*z),k,1,i))))$
-
-printseries()$
-/*
-defarrayfuns()$
-save("tmseries.lsp",maxpow,arrays)$
-*/
diff --git a/doc/html/tmseries30.html b/doc/html/tmseries30.html
deleted file mode 100644
index 290982c..0000000
--- a/doc/html/tmseries30.html
+++ /dev/null
@@ -1,1047 +0,0 @@
-<html>
-  <head>
-    <!-- $Id: f66f5f1afd6043861a344d5379cdee276154c5d2 $ -->
-    <title>
-      Krueger's series for the transverse Mercator projection
-    </title>
-  <body>
-    <h2>
-      Krueger's series for the transverse Mercator projection
-    </h2>
-    This extends Krueger's series for the transverse Mercator projection
-    given in <a href="transversemercator.html#tmseries">here</a> to 30th
-    order in the flattening.  See
-    <blockquote>
-      Louis Krueger,
-      <a href="http://dx.doi.org/10.2312/GFZ.b103-krueger28">
-        Konforme Abbildung des Erdellipsoids in der Ebene</a>,
-      Royal Prussian Geodetic Institute, New Series 52, 172 pp. (1912),
-      DOI:
-      <a href="http://dx.doi.org/10.2312/GFZ.b103-krueger28">
-        10.2312/GFZ.b103-krueger28</a>
-    </blockquote>
-    and
-    <blockquote>
-      Charles F. F. Karney,
-      <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
-        Transverse Mercator with an accuracy of a few nanometers</a>,
-      J. Geodesy 85(8), 475–485 (Aug. 2011); preprint
-      <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>;
-      resource page
-      <a href="http://geographiclib.sf.net/tm.html">tm.html</a>.
-    </blockquote>
-    <pre>
-
-Krueger, p. 12, Eq. (5)
-A = a/(n + 1) * (1 + 1/4 * n^2
-                   + 1/64 * n^4
-                   + 1/256 * n^6
-                   + 25/16384 * n^8
-                   + 49/65536 * n^10
-                   + 441/1048576 * n^12
-                   + 1089/4194304 * n^14
-                   + 184041/1073741824 * n^16
-                   + 511225/4294967296 * n^18
-                   + 5909761/68719476736 * n^20
-                   + 17631601/274877906944 * n^22
-                   + 863948449/17592186044416 * n^24
-                   + 2704312009/70368744177664 * n^26
-                   + 34493775625/1125899906842624 * n^28
-                   + 111759833025/4503599627370496 * n^30);
-
-Krueger's gamma[j], p. 21, Eq. (41)
-alpha[1]
-   = 1/2 * n
-   - 2/3 * n^2
-   + 5/16 * n^3
-   + 41/180 * n^4
-   - 127/288 * n^5
-   + 7891/37800 * n^6
-   + 72161/387072 * n^7
-   - 18975107/50803200 * n^8
-   + 60193001/290304000 * n^9
-   + 134592031/1026432000 * n^10
-   - 1043934033787/3218890752000 * n^11
-   + 1107802529272207/5178390497280000 * n^12
-   + 142419537515471/2027901173760000 * n^13
-   - 20550145413484373/80782891757568000 * n^14
-   + 2101511170951245259/11421139410616320000 * n^15
-   + 6871484604164555073473/152001089131039948800000 * n^16
-   - 316612189636291463036929/1590165240140110233600000 * n^17
-   + 311760891443585845069947023/2276285401141473705984000000 * n^18
-   + 347174131720182892842402053/5544999731500337332224000000 * n^19
-   - 10268774819324130983842267351303/53283288669919616509673472000000 * n^20
-   + 464746136644252720151415143064067/3701786370752310199619420160000000 * n^21
-   + 2064362591952186950153454576839857/30080838421836438047733841920000000 * n^22
-   - 371073254699693809696179501698840034443/1863568101909611009933206974627840000000 * n^23
-   + 5346008647175289889016543194428866601311819/37129264970421612359156732460741427200000000 * n^24
-   + 6137137281591956159684411551066421423706607/167888850301036855884882616344222105600000000 * n^25
-   - 5694433253276142746311340663687118018405227/34071560796386891341343825081621544960000000 * n^26
-   + 1499618325109985269858805780437308686284756403/11441314242737326475117926447161802752000000000 * n^27
-   + 28163788993539415131077859632876464031084037436421/1310187798864261519640035449688674889891840000000000 * n^28
-   - 1382954166683887199687110280755185774160434238372379/10481502390914092157120283597509399119134720000000000 * n^29
-   + 115342138314917862218900682540434301181025997372394740949/1236751772737919661464211462733624662313402368000000000000 * n^30;
-alpha[2]
-   = 13/48 * n^2
-   - 3/5 * n^3
-   + 557/1440 * n^4
-   + 281/630 * n^5
-   - 1983433/1935360 * n^6
-   + 13769/28800 * n^7
-   + 148003883/174182400 * n^8
-   - 705286231/465696000 * n^9
-   + 1703267974087/3218890752000 * n^10
-   + 490493610499/373621248000 * n^11
-   - 1975809888712343/976396861440000 * n^12
-   + 1116592309932851/2013818526720000 * n^13
-   + 802251814098377521231/445424437014036480000 * n^14
-   - 25718419234005720100069/10254041727093964800000 * n^15
-   + 10411677743818269012186343/20672148121821433036800000 * n^16
-   + 58069234404819345427642159/24548175894662951731200000 * n^17
-   - 1619780216513490679161882727/538657116774318483701760000 * n^18
-   + 15210374203334956573188013/39416197422363181056000000 * n^19
-   + 1350424643880191120787483875017417/444214364490277223954330419200000 * n^20
-   - 363512649110052773321859331443938611/101105040251172472327105413120000000 * n^21
-   + 110501360211107135866854552436284378043/372713620381922201986641394925568000000 * n^22
-   + 435725651868235317320938241439343987241/116473006369350688120825435914240000000 * n^23
-   - 236785644303962703650496588593815148631118759/55962950100345618628294205448074035200000000 * n^24
-   + 29951219608236318375984513968969852637391/119180356695180484115811733824602112000000 * n^25
-   + 62685650245065205952020811520018086774286032497/14257637748641899145916185264924708044800000000 * n^26
-   - 4483003054643316539810052609365683886313161406697/933182192923263190626805875846634536960000000000 * n^27
-   + 1345853871818243074858148169703931833087859724988709/10481502390914092157120283597509399119134720000000000 * n^28
-   + 645835710031983279557286116276652061340439304187459/126360334379353222116394530036641089380679680000000 * n^29
-   - 6417447834385545863906095749619028053009319834823545892863/1194396760656532610281735373146342851007532236800000000000 * n^30;
-alpha[3]
-   = 61/240 * n^3
-   - 103/140 * n^4
-   + 15061/26880 * n^5
-   + 167603/181440 * n^6
-   - 67102379/29030400 * n^7
-   + 79682431/79833600 * n^8
-   + 6304945039/2128896000 * n^9
-   - 6601904925257/1307674368000 * n^10
-   + 35472608886503/41845579776000 * n^11
-   + 7660808256523559/1098446469120000 * n^12
-   - 388334559174821269/43261891706880000 * n^13
-   - 121304505560337904991/236631732163706880000 * n^14
-   + 171473290780515481554677/12620359048731033600000 * n^15
-   - 132727036454031241642633/9465269286548275200000 * n^16
-   - 30639039363651602964664613/7934763925547620761600000 * n^17
-   + 41628755176036445034328803761/1767468664415732524646400000 * n^18
-   - 62731007539014996251923219444381/3110744849371689243377664000000 * n^19
-   - 4253576948330492615223590251863457/425705432636515672956233318400000 * n^20
-   + 21109173608034038907290057857778161/560369142096606397967892480000000 * n^21
-   - 228353389351527744252835451931600005809/8319500454953620580058959708160000000 * n^22
-   - 36528815353507244513448437301156996025493/1863568101909611009933206974627840000000 * n^23
-   + 179949541301186621467483604212502389572317467/3179713073883273785698534400458752000000000 * n^24
-   - 6667459517369124611809567288843679508075480287/186543167001152062094314018160246784000000000 * n^25
-   - 236468538717455606379697014767782772375800752929/7057680450680141777849792338335891456000000000 * n^26
-   + 2724615431989937919395302944576209366322330213709/33653452487089882156338604087632199680000000000 * n^27
-   - 326200170759406656773108233662108528251650506200184011/7290019291116532045176607502113909002731520000000000 * n^28
-   - 36898523581280468039266697831389451828857036025105495411081/698722104984071577014815193290610567839406358528000000000 * n^29
-   + 48301814797856398208935403861888385264392898018206796432963809/432334302458894288277916900848565288850632684339200000000000 * n^30;
-alpha[4]
-   = 49561/161280 * n^4
-   - 179/168 * n^5
-   + 6601661/7257600 * n^6
-   + 97445/49896 * n^7
-   - 40176129013/7664025600 * n^8
-   + 138471097/66528000 * n^9
-   + 48087451385201/5230697472000 * n^10
-   - 634613396309/40864824000 * n^11
-   + 152161926556090753/1124809184378880000 * n^12
-   + 797541596189032241/27161585418240000 * n^13
-   - 670034891213941619/19612057573785600 * n^14
-   - 797738204370016183711/62444484876533760000 * n^15
-   + 1262572420740885661534720343/17264651178664053964800000 * n^16
-   - 1504688538793152003510638173/24548175894662951731200000 * n^17
-   - 4908380662744446707535585282187/97210776542865288855552000000 * n^18
-   + 21617826231307521472044305870999/139740491280368852729856000000 * n^19
-   - 9011412074161616811750466480987610329/96159344783777657891290349568000000 * n^20
-   - 5712764954291035029425456603013754181/42570543263651567295623331840000000 * n^21
-   + 13285505291912233404719867451738427771511/45538318279746133701375358402560000000 * n^22
-   - 179649231017237416866042466928297549711/1455912579616883601510317948928000000 * n^23
-   - 29884145110494866094058551866948880229303499503/101750818364264761142353100814680064000000000 * n^24
-   + 2382017529810135366707938471482990925184741/4716709930568539119450511386869760000000 * n^25
-   - 188545346993373372341522235835513997267194575937/1391079045351448234474741678280697446400000000 * n^26
-   - 77189939882994048469559094011678147843496599936029/135603037409161682387957728833964081152000000000 * n^27
-   + 5055292347375802605991447871089890508241922361424571717527/6177914279257927294560700205929359574176890880000000000 * n^28
-   - 896129405773425784164009625079521008114002654837731749413/8398102223366244916043451842435223171146711040000000000 * n^29
-   - 4583499403987764386036616357058392174411208549700462493009598039/4522881933416124861984361424261913791052772697702400000000000 * n^30;
-alpha[5]
-   = 34729/80640 * n^5
-   - 3418889/1995840 * n^6
-   + 14644087/9123840 * n^7
-   + 2605413599/622702080 * n^8
-   - 31015475399/2583060480 * n^9
-   + 5820486440369/1307674368000 * n^10
-   + 98568244458947/3678732288000 * n^11
-   - 1367520624030470251/29877743960064000 * n^12
-   - 11234223222165655787/1912175613444096000 * n^13
-   + 2982454477844692970369/27248502491578368000 * n^14
-   - 869190895988598534264203/7266267331087564800000 * n^15
-   - 2458295530839889742624897/30213139562662094438400 * n^16
-   + 20076007526718092337920372531/60426279125324188876800000 * n^17
-   - 92612134608258706595931646307/396778679766797097369600000 * n^18
-   - 3111621093870597339292256540131/8985511024872697343508480000 * n^19
-   + 618939899724538734690312503581728709/751244881123262952275705856000000 * n^20
-   - 349880405493459820104679463829848683211/1041726235157591293822312120320000000 * n^21
-   - 207806888296724735724043450497658236815707/199230142473889334943517193011200000000 * n^22
-   + 1022460523953867701806308301182024494003729/579578596287678065290231834214400000000 * n^23
-   - 383432658756943317231248322200166817451364947/1418641217578691381311653809435443200000000 * n^24
-   - 763997490849414433043000164958612268471750563033/295077373256367807312823992362572185600000000 * n^25
-   + 69453259794643484263302719504607020126095692449473/20581646784631654560069473467289409945600000000 * n^26
-   + 3526475778372639978202920400355285382983253400925713433/11591583469104547848231127456777395681361920000000000 * n^27
-   - 3386844879506808385587873157467763778147265832357828657961/599864444526160351145960845888230226510479360000000000 * n^28
-   + 8975715445112376764326365404354369942872021811244023950781587/1522855869837079078109212600761587135034603601920000000000 * n^29
-   + 1141689688674260410162806230731137824563608969465073820136479347/565360241677015607748045178032739223881596587212800000000000 * n^30;
-alpha[6]
-   = 212378941/319334400 * n^6
-   - 30705481/10378368 * n^7
-   + 175214326799/58118860800 * n^8
-   + 870492877/96096000 * n^9
-   - 1328004581729009/47823519744000 * n^10
-   + 3512873113922087/355687428096000 * n^11
-   + 986615629722639449/13133074268160000 * n^12
-   - 186591382609938512501/1419192838103040000 * n^13
-   - 11945326540608489526613/373693748455931904000 * n^14
-   + 4125626927677466366821/10899400996631347200 * n^15
-   - 4011823062707782237989439819/10071046520887364812800000 * n^16
-   - 5594107510292126787316683247/14477129373775586918400000 * n^17
-   + 14982221707493385549304025695646893/11007251005469054245797888000000 * n^18
-   - 7291595279883773582199320279582809/8943391441943606574710784000000 * n^19
-   - 8513492703227656510956084303336491/4584255567495120990240768000000 * n^20
-   + 157105326583313971040653100185655846951/40692431060843409914934067200000000 * n^21
-   - 342420444562433578699362565080425434441037/375021444656732865776032363315200000000 * n^22
-   - 6663996141625951282430738551524458085888493/1050486205771416493338545199513600000000 * n^23
-   + 1065943196304789336567113254479304136821982769941/116477910495934660781377891722067968000000000 * n^24
-   + 282615555043864261481140961100818513817314366357/285856205342106313334298242601241804800000000 * n^25
-   - 2234022131193996792575080782842298020429068641824778623/126453637844776885617066844983026134705766400000000 * n^26
-   + 1670315644839955612203042568472364219380574770260571/89166026685419598832547134282903043702784000000 * n^27
-   + 10801933283402577517707581324454394034794780353978810731521/1182341513848663880519575000591294359498915840000000000 * n^28
-   - 16737951977035205802462496054004751707736362520790525486549/392219059882489460364666706926919763487621120000000000 * n^29
-   + 608596584899951573523771478197765351237552575059720715257651893101/18091527733664499447937445697047655164211090790809600000000000 * n^30;
-alpha[7]
-   = 1522256789/1383782400 * n^7
-   - 16759934899/3113510400 * n^8
-   + 1315149374443/221405184000 * n^9
-   + 71809987837451/3629463552000 * n^10
-   - 52653013293696143/812999835648000 * n^11
-   + 101784256296129577/4455864483840000 * n^12
-   + 4323558791348929159/21064086650880000 * n^13
-   - 4743350772552838010233/12772735542927360000 * n^14
-   - 29903451511253057978977829/239786821925889638400000 * n^15
-   + 15436840428957043227623443109/12408968034664788787200000 * n^16
-   - 510180710084169862809596281619/397086977109273241190400000 * n^17
-   - 25997085578966927070281529664931/16379837805757521199104000000 * n^18
-   + 35427299825029861083061489601504459/6814012527195128818827264000000 * n^19
-   - 41290529970653089580171330206559029/15331528186189039842361344000000 * n^20
-   - 5636751993648050664276890397282425312669/651078896973494558638945075200000000 * n^21
-   + 141025630513942054689154210633777771281593/8496579605504103990238233231360000000 * n^22
-   - 5083353505162393632768455472240415265887349/3625207298348417702501646178713600000000 * n^23
-   - 2146307295003485715426155323634480307223656521293/64478843310249544361119904346144768000000000 * n^24
-   + 2825817217957521232544774598978333849050291610759191/66026335549695533425786782050452242432000000000 * n^25
-   + 1121526321726686366084998741747165637003373989067391/71050078471954976186444471989073608704000000000 * n^26
-   - 24751330931089944559270444413306567745123372815680765867/240606738674941774627508140128468530626560000000000 * n^27
-   + 283315570304624430111229930361091346970544306955451389315961/3103646473852742686363884376552147693684654080000000000 * n^28
-   + 4800340784447363734591990355494651667081994231886256711/55232397096636431665504905041636298326016000000000 * n^29
-   - 5883627608079327862661606773104442557734582970571316091093779/21654584826138278971716016135829556194222643609600000000 * n^30;
-alpha[8]
-   = 1424729850961/743921418240 * n^8
-   - 256783708069/25204608000 * n^9
-   + 2468749292989891/203249958912000 * n^10
-   + 117880637749661/2707556544000 * n^11
-   - 5921832934345276446697/38926432130826240000 * n^12
-   + 58559280970406047561/1064394628577280000 * n^13
-   + 707308930074513293534401/1284572260317265920000 * n^14
-   - 174465694566990976559029/168307400643782400000 * n^15
-   - 4693110873155601006258565965271/11118435359059650753331200000 * n^16
-   + 676391985485095809371733839/171665565696943718400000 * n^17
-   - 2198445417091794111397602386175901/542023723754157974224896000000 * n^18
-   - 53363941504564359044259819052979/8957723800023644405760000000 * n^19
-   + 3980756637943323854029497343795084553/210875756104775565551075328000000 * n^20
-   - 57605246865079073769101876100784936151/6705002845252607315528908800000000 * n^21
-   - 131556990309544385502695007449463535506251/3577507202317517469573992939520000000 * n^22
-   + 16563201841502261061487372612686514822354259/246931844784963022216298653286400000000 * n^23
-   + 3716622905750730591889081511594229480962791354087/1091129684472639151636059353184731136000000000 * n^24
-   - 2213908725034918327552841712951816333387504312678259/14018459110275430350511715674314768384000000000 * n^25
-   + 17011573703835625757730804229750060144161108086423592979/91512501071878009328140479921926808010752000000000 * n^26
-   + 682892898514410238829628389193295165408986121549166351/5831466588978968792019684149065332817920000000000 * n^27
-   - 155436494065578924089463413379949231968540857163058763243101/289553023799672787066018367491745557428305920000000000 * n^28
-   + 165551112077463450636444122527612450331221233114708176183743/410124712616255283555227578330105230951186432000000000 * n^29
-   + 1403124695221106030113716236806514839242351489435235474477081785401/2304047825501112882590584116852264779065289280061440000000000 * n^30;
-alpha[9]
-   = 21091646195357/6080126976000 * n^9
-   - 67196182138355857/3379030566912000 * n^10
-   + 395018924202597949/15446996877312000 * n^11
-   + 91220875613845291081/946128558735360000 * n^12
-   - 4988552993547340999703/13876552194785280000 * n^13
-   + 2274808037645071351151/16571805601849344000 * n^14
-   + 535711648203373741428799361/367673126953030778880000 * n^15
-   - 27678709003769097826752781127/9651419582517057945600000 * n^16
-   - 5280108162364963042999830777751/4014990546327096105369600000 * n^17
-   + 1174431699627195631670489145666649/96789950670385352540160000000 * n^18
-   - 1183738252014628519027860764867029/93856921862191857008640000000 * n^19
-   - 40137685403486395923628481749776837043/1911061539699528562806620160000000 * n^20
-   + 287333201658715623813482736998287053515959/4357220310514925123199093964800000000 * n^21
-   - 106257838315599820564882015419176890518173209/3950909516559408355460778452582400000000 * n^22
-   - 90892763520143573996692682431035087078662489897/622420206916436023998744174683750400000000 * n^23
-   + 201524866709123266853440470935579547318921733655003/778803283904190575028428648573042688000000000 * n^24
-   + 10814621264427896099430746759393142670689600538379/246140297135151589144787325968764108800000000 * n^25
-   - 530693286808080774017187055905756612819533423821542721/762604175598983411067837332682723400089600000000 * n^26
-   + 528646912311960943475639104830106896257711233429178692933/691427785876411626034839181632335882747904000000000 * n^27
-   + 1238335239482617295952056865714588188866564716732256454849533/1822776500516690149134344792578245470894161920000000000 * n^28
-   - 65933487212841390272205814518074033193900839255445948294377851/25518871007233662087880827096095436592518266880000000000 * n^29
-   + 162727413247772587683519571850133568153397325055616238461382829/98282138338670185068189671924151343633347379200000000000 * n^30;
-alpha[10]
-   = 77911515623232821/12014330904576000 * n^10
-   - 268897530802721453/6758061133824000 * n^11
-   + 8257746726303249815683/149866763703681024000 * n^12
-   + 323404376453879141969/1506527781986304000 * n^13
-   - 565045774309646240886321061/661811628515455401984000 * n^14
-   + 606966182513981199158868163/1723467782592331776000000 * n^15
-   + 75743290339815584481785361977/19854348855463662059520000 * n^16
-   - 22241327027192487028642722150343/2823040227886239449088000000 * n^17
-   - 1526410847130700516846978043440307/394199071821205799436288000000 * n^18
-   + 1980853898587532814589028918136701/54202372375415797422489600000 * n^19
-   - 32336501755791644291373778373511296903/833917762777976100133797888000000 * n^20
-   - 9178264588912399043908657569412179727459/129878682332656421941511454720000000 * n^21
-   + 1806166894952081193938559978698482758385827197/8083379310603065246736937333555200000000 * n^22
-   - 361654991248988355171855093660297726396047881/4322362548030805722213501213081600000000 * n^23
-   - 105020035995730778911321036642305474913412418767240671/190651043899745852766959333170680850022400000000 * n^24
-   + 2294386994267351811538453796616269131419043757692511/2383138048746823159586991664633510625280000000 * n^25
-   + 2743769449547669368889674700489658732983220398593193929/10458571551071772494644626276791635201228800000000 * n^26
-   - 23157882459582328183252760859500524302121767786137065570859/7994633774196009426027828037623883644272640000000000 * n^27
-   + 89430614800491857673988760128056842290692364119137870498038657/29634817943884252747216444369659216688085729280000000000 * n^28
-   + 2567130086431563482452599790796650371294900574502194735538864809/746426976961584616070514192560791520331159306240000000000 * n^29
-   - 509038828002331582891050965787949294310918940649244811719555481648577/43567449791293770870803772391388279458689106386616320000000000 * n^30;
-alpha[11]
-   = 12809767642647461/1029799791820800 * n^11
-   - 5303630969873795374429/65282870552739840000 * n^12
-   + 505329992704194411750631/4178103715375349760000 * n^13
-   + 902773043678795981447423/1880146671918907392000 * n^14
-   - 52457275102567933937177869/25762220537492275200000 * n^15
-   + 67595745292234822704267032563/73325720204837388288000000 * n^16
-   + 81338369151994478217697814085661/8212480662941787488256000000 * n^17
-   - 19217318226298386878750945280512161/893107272094919389347840000000 * n^18
-   - 1873245185945872710662470867765863817/171476596242224522754785280000000 * n^19
-   + 476337982883129731566963871315011795997/4406497269224532801843363840000000 * n^20
-   - 8440994919935476843536233253371860518791717/71444009058360425160553739059200000000 * n^21
-   - 33526203318350561460792162793779755990401717/146245349369463351503464326758400000000 * n^22
-   + 710399978033562118273811779126576411439704335403/961922137961764764361695542693068800000000 * n^23
-   - 34930525249908548784563565768397098265832106510929/133733897236073129045285727532744704000000000 * n^24
-   - 23048480004933480948529688590232835511983254849209969/11554608721196718349512686858829142425600000000 * n^25
-   + 3343638043167525209592261539785084441516908110518987/960960215823802999597333847150375731200000000 * n^26
-   + 3245082101525034287044377973345367353808255099669736817511/2599324777920413759906374035762203880062976000000000 * n^27
-   - 1563650841338021630530049879900135725592709642522865259185153573/135713995811197202921911671374689367332938055680000000000 * n^28
-   + 100228142507845651554674218817828912081709008921929406668291104191/8685695731916620987002346967980119509308035563520000000000 * n^29
-   + 1348681612012517778664036601950009019623074500848299186242899657141/84859828283817488489232796254889378316274578227200000000000 * n^30;
-alpha[12]
-   = 2240624428311897034834681/91918281738257694720000 * n^12
-   - 1694308924283012695547/10043518546575360000 * n^13
-   + 2898270966023179721324929303/10754438963376150282240000 * n^14
-   + 5049523426723058614103389/4683336365740032000000 * n^15
-   - 293488823111024724225343654073741/60224858194906441580544000000 * n^16
-   + 15397766080743841984369762728863/6297551277592380309504000000 * n^17
-   + 5863952550107110495571900519504737/229656155681550700118016000000 * n^18
-   - 1430933931370883795713846515020911423/24472734089815246481326080000000 * n^19
-   - 1870907814706500734631241404968509423277611/62870727971357174141287290372096000000 * n^20
-   + 85087672018039782610988182307863449111159229/270147659251925357638343825817600000000 * n^21
-   - 17181221423420856035067255437638564537594025459/48096106898088238218084777134653440000000 * n^22
-   - 29840743030792811125826874514052113793829046631/41332591865544579718666605350092800000000 * n^23
-   + 233752394874908577315877184530185132629657928559209871/97769766102433770649722734959323512832000000000 * n^24
-   - 201646398092527015113891771761912798737265288328930229/244933632787867935846440809976221925376000000000 * n^25
-   - 1478405663522054837879701822965363491041325865689756503513/211622658728717896571324859819455743524864000000000 * n^26
-   + 321386243763712289433592425205485189709512429739435078423/26177282004203385643588361566208718274560000000000 * n^27
-   + 2818199590151532790384019625468928958215697625600921714777625549/535252958269371601439920541444153022982568017920000000000 * n^28
-   - 11378071070442404926793965546213173776855685042822972281764801951/257713735203578688495924900168357493335389739417600000000 * n^29
-   + 26391837116130703226086300212905604518448450453630780847639554556493/613134590884340253673783066835327045013588110475264000000000 * n^30;
-alpha[13]
-   = 1987049611350093295679/40852569661447864320 * n^13
-   - 49990807275475500894703/140691247558557696000 * n^14
-   + 620844046443235040902108541/1021314241536196608000000 * n^15
-   + 30593679475357306372670316797813/12595102555184760619008000000 * n^16
-   - 785749129848932618333134357025453/67173880294318723301376000000 * n^17
-   + 275581708051003997988541817255279573/42168403354758578552438784000000 * n^18
-   + 642193387846955979009281483738217042761/9813737508016541917658480640000000 * n^19
-   - 10379707152495210640484367519099555203413/65622913178605350033605787648000000 * n^20
-   - 28662530127283669901885121584468088960326233/364665822910787579541585710284800000000 * n^21
-   + 4609055620394562855489493272499773205216196129/5087088229605486734605120658472960000000 * n^22
-   - 873057563036453343326459102080494704028393390097/813934116736877877536819305355673600000000 * n^23
-   - 19289084079854993646765928794776984023563835229561783/8695868619687619024133993253593677824000000000 * n^24
-   + 1182490481385670104330958793922877551368861956689593353/155502591787355069608043173476028121088000000000 * n^25
-   - 293417158736416271896554762676460700877470285796817656847/111689736551267778745977009349157197971456000000000 * n^26
-   - 39859038349761443605955883817872550236932196068750468867903/1675346048269016681189655140237357969571840000000000 * n^27
-   + 26244234609643418748414712844720424679053976070350152552610637/618202691811267155358982746747585090772008960000000000 * n^28
-   + 2077245025145718452430941958359096421872386057259172217716184873/101286329026358010734015733227124341272085948006400000000 * n^29
-   - 191207856187024789574592797220884621637003872633248259491607835405551/1166134827662716367083406640577189322150843540884684800000000 * n^30;
-alpha[14]
-   = 10469176753142937388346729/106216681119764447232000 * n^14
-   - 2524263545672345614192283257/3332037713011841433600000 * n^15
-   + 28798233421533175181823218687239/20791915329193890545664000000 * n^16
-   + 13912456133127892258104161571997/2535377787082646618112000000 * n^17
-   - 5642793384271167571209335562965961618499/200480637663766499175023247360000000 * n^18
-   + 2416612854960792848747357744110015450361/137830438393839468182828482560000000 * n^19
-   + 37531174405336506824031127490381559959133931/224939275458746012074376083537920000000 * n^20
-   - 2616330145733138560090205392154735810050979/6139719528452849037235086950400000000 * n^21
-   - 68829610700469773329308127037458237442895425239/341327210244497174450924224826572800000000 * n^22
-   + 63069353283833076130495586379466422512525299809581/24468894384402391193450630367254937600000000 * n^23
-   - 714098347019839680389819042844541592537678056730181857/223156316785749807684269748949365030912000000000 * n^24
-   - 2661752462851196865891091928419385880894607083642023593/398891916254527781235632176246989992755200000000 * n^25
-   + 5961320530838574206567558505826389702787945152445692779/250285123924409588226279012547130975846400000000 * n^26
-   - 94590092745211556049112510107228668331259876881195561421/11150842204387935702723354017813583888384000000000 * n^27
-   - 17802000569076164486140040573046212865608178116650965279535007359/225025779819301244550669719816120973041011261440000000000 * n^28
-   + 6231272989222159551881242282050573601231377672788471696790420989/43196913090312292480708919428987508217694126080000000000 * n^29
-   + 422268052780700950950541531621666843181077037988763165839750231840343627/5605286734647678672031164692522288170338508448622182400000000000 * n^30;
-alpha[15]
-   = 100206984674719544740861653301/495045603076045012992000000 * n^15
-   - 36822741875265270244508239254871/22559228132175371242045440000 * n^16
-   + 179792631498449481362046446075850677/56496153931013103632252928000000 * n^17
-   + 1198746750769645158859022771229488225047/96481306875687627727979937792000000 * n^18
-   - 712415136407467601227112286139274196716669/10497166188074813896804217231769600000 * n^19
-   + 4324780012493436320334302458159540323213361/91850204145654621597036900777984000000 * n^20
-   + 1555975364258875353541471977713778721787643043/3674008165826184863881476031119360000000 * n^21
-   - 1749084094448959255650030230541491009564819115959/1529305899025149449590664397953433600000000 * n^22
-   - 3736902111701391887100479481424584566863791566838269/7438543892858326922808991631645501030400000000 * n^23
-   + 160288079478771431803467565454719360005157928068793941/22073070464677426629639725167817628057600000000 * n^24
-   - 205505625990694957725950514798454096070237493947357149/21661039816003447999219783631351699000524800000 * n^25
-   - 12495724210779737453458596500764106334450954721020624496477/634054042883350928573315637689830862330265600000000 * n^26
-   + 5055693252244555496228110569294083881781629217112771929053811/68689187979029683928775860749731676752445440000000000 * n^27
-   - 3183992173345900271685562628167128755396195058359564971811781053/115191768240832779948557118477300021913851002880000000000 * n^28
-   - 5698640861911756799224037518645406078168295920245835514736969952989/22116819502239893750122966747641604207459392552960000000000 * n^29
-   + 142278670225215087706896520822001994673082990276889571404960221414791/294749152212543199400677229925300609918641519984640000000000 * n^30;
-alpha[16]
-   = 7712781743942384637654934879373/18338215136419449195724800000 * n^16
-   - 2402063456298622602221186822696471/676776843965261137261363200000 * n^17
-   + 7668107436276322919714287100049904599403/1041385534531231537381370757120000000 * n^18
-   + 361303680860095904135414295125524607/12819051189903224347361280000000 * n^19
-   - 7227390188103426658110578949868094476645931431/44088097989914218366577712373432320000000 * n^20
-   + 12901408373363616730918554960524450439118853/102117113984051111751513381273600000000 * n^21
-   + 497747383538267321534956030212997835594308172021801/464908993303645432675561976977843814400000000 * n^22
-   - 252499664598382602456303781455085911751340300461/82547761595107498699496089662259200000000 * n^23
-   - 131281534185888595153825331846748525760537617955805958541/108305199080017239996098918156758495002624000000000 * n^24
-   + 1426262784250791324747799093000080956187589936714029719/70320626514158153080237367679905483980800000000 * n^25
-   - 23170473116883805794188278794166757632616659619691851519/828740273599081251646377980227632916070400000000 * n^26
-   - 44044500279817699335584829646278793104954720796019992410409/769175802890176148160771357353766171967488000000000 * n^27
-   + 62420418657558519149643437875852556019705678659537976085016650961/277762254345241993722109472497853742008909168640000000000 * n^28
-   - 109511822578379305705407097075954475716527637153298910483976431823/1209513566528744189459849744011650230095435530240000000000 * n^29
-   - 168398596910687560076596170666837371522448204565539850254693515405079907/204359412200696618251136212748208422876924787189350400000000000 * n^30;
-alpha[17]
-   = 136336614071421552738346511544707/154416107000986498341273600000 * n^17
-   - 27801197719443334715141091692509100501/3573381736136578804739997696000000 * n^18
-   + 576392411336288932474450636964598560303/33631828104814859338729390080000000 * n^19
-   + 556540535711605007979630683151193569919453/8691707297670641941407583961088000000 * n^20
-   - 301243011881263087198414763542811432614781470369/759655217816414105679022838199091200000000 * n^21
-   + 989789926631181163755007364622407618669102051/2925597777633984541291825940398080000000 * n^22
-   + 2103270728132227977532547099652140536893417990637/779966854656425178023381737616179200000000 * n^23
-   - 149750803535199564120198336297627481136417850061461067253/18366093042521305863309053676398844051456000000000 * n^24
-   - 827633945205212562322541676028753996760694367358637422131/293857488680340893812944858822381504823296000000000 * n^25
-   + 10871559511195696848205970321319912766271482873182818466013/193406204284510078070764728510649051643904000000000 * n^26
-   - 1185910777714920025608418139877185236744968114328617926870881/14478603348520962788908637314894422060564480000000000 * n^27
-   - 1794514783827843337644294958827668476221297946256830260008605439/10945824131481847868414929810060183077786746880000000000 * n^28
-   + 128661408285411985453738219706261617148768669184661116871488103229/189555919076956236027138549181277523417671663616000000000 * n^29
-   - 1855414703915628112302305459595288498254055876861869243258846990726549/6247526147877631344159452657828430574942185943203840000000000 * n^30;
-alpha[18]
-   = 67752028110741493306780180177177973987/36222105548912401300221591552000000 * n^18
-   - 5545658735018547601364002065686581343/322869656256540697864175616000000 * n^19
-   + 6903145472582253547590916629983711429839564343/172188516038387197287245176658460672000000 * n^20
-   + 2594359997714507009889054556821919665165991039/17814495239540271366199495675084800000000 * n^21
-   - 2653661574489733699865151526666294107005175728022119/2762887731633092857043339748896900382720000000 * n^22
-   + 223899545504288463905906021765274294443981546647858717/247796493430843015616074533729190753075200000000 * n^23
-   + 144506895392063363464005464205241390539753389057581011317/21348620972503398268461805982822587957248000000000 * n^24
-   - 199508703723852397940714471767792646467211904185547826559/9208240064528857740794868475615606996992000000000 * n^25
-   - 123747223374921892225259794899435553979183207374624389411529/19856370306543034681931845460426635968774144000000000 * n^26
-   + 74365730590824979951370872254622112553384627249684845833999/480734876806360092600482098346103857479680000000000 * n^27
-   - 453806568576657850636481186180714169477831867390896126354437393759/1902140993515290007355661135881569592628719124480000000000 * n^28
-   - 129377367350744075863584786744687343612005128384626716428469495967/279376958422558219830362729332605533917343121408000000000 * n^29
-   + 9812276168495581890730160638055577559800537496316269869797927437190396177/4833641563655724730627900082998991975493047684412997632000000000 * n^30;
-alpha[19]
-   = 471824901393496747102665687245792177081/118103493571358059411833618432000000 * n^19
-   - 50561675675044750669650971499055765086319/1324934718670261598085912408883200000 * n^20
-   + 67251111238362727892454291277989954473027123753/714019364752482795768480796350873600000000 * n^21
-   + 240180124848943302649869868199872368699919588928959/724551150382581917006065888097048985600000000 * n^22
-   - 485940263706654462038872744309833664639315267073048459/208670731310183592097746975771950107852800000000 * n^23
-   + 1699999199365185300098132938338874634674993023922086094213/706611263899109188740995696707766052716544000000000 * n^24
-   + 18316002921325135783401359443916180813949011876130693396319/1081422456054288845377523848874494132853145600000000 * n^25
-   - 1070798289679403964467272203329695220087675802370874334174677/18654537366936482582762286393085023791716761600000000 * n^26
-   - 66905570444410496337928253364613460714163911189816744933/5208993291563945942641955456499557439897600000000 * n^27
-   + 639717024183652714810791734101835747576462370463927529907834770743/1512416617024375325397452369319368303913436446720000000000 * n^28
-   - 121315610544001063260669429484399550327396846073348792749387872304069/175562790458797122792695361672570558744154047774720000000000 * n^29
-   - 2310657553908327208643487025983368468395539176694805984465325989447845451/1788765381287069184854074866241403280404499554264678400000000000 * n^30;
-alpha[20]
-   = 202399116895368048088234707551711981612353729/23547147492429018432443784842182656000000 * n^20
-   - 3365095273417630466576291762515903066833421003/39463570282275703540635396955176960000000 * n^21
-   + 2717825461890719651841152458000965236132994648134207/12236863873128050153880223887861271756800000000 * n^22
-   + 167575736694631175164505551372730340638238831166089517/221984358698463534822733436465733382963200000000 * n^23
-   - 1780457197357285934359849612457829809553519546045920132315603/315054408863816150286651947972102624037883084800000000 * n^24
-   + 31433611667605561414091907198192986558131456317053607536179/4922725138497127348228936687064103500591923200000000 * n^25
-   + 81043708724580147220822100302291795209006507032171545390245907/1918125371612057150274616271477213034583582310400000000 * n^26
-   - 1577108197581107731425828348589622362098940512581130343622369/10399988029071674998896733424633161124413440000000000 * n^27
-   - 5514916654831738928837454570878277449201710700255298388849026950313581/235404621606609970647462666379821037767518556059074560000000000 * n^28
-   + 2277087194186373183792618936007821692864753094815436081352010122233691/1980567729863305041505094548868686615832487851458560000000000 * n^29
-   - 143439353635410339941300281453638717803865413230045426199413290694870693/72062639267329582851264081544843174826791394711961600000000000 * n^30;
-alpha[21]
-   = 7593597428771861155598510033855442354788700917369/407895462437601671796007462928709058560000000 * n^21
-   - 45805642625336613066067381416091711616993807717957/239175066611139162098568012353652129792000000 * n^22
-   + 1990618787705329951428358040285346629497792311202946171/3788533055120444327641317315681849735905280000000 * n^23
-   + 930144112851858298709480062321695584642393218056377949791/540958806428255752552630405171879505559552000000000 * n^24
-   - 752902102022542070422923926458337877174355061465216481203/54858440486545321043175068539316832105922560000000 * n^25
-   + 24990276016004332532181513229852654837023995611735929270423877/1479326420770302763580519691998352523776334233600000000 * n^26
-   + 1273703517934435922639076948106483178914355724092343511679304023/12119166110998363411723475629310149719087906816000000000 * n^27
-   - 387147736345336231749751695652681175080211230836264638568453074861881/968987437728821283747116150252959580864281690767360000000000 * n^28
-   - 26472588474688318840378923145456844687860042284441254323438583079847087/823916175623134897266119332329373632186314946206760960000000000 * n^29
-   + 489733176366105123100315909250683812497390264686335645655218001765029594209/157573968587924549102145322307992707155632733462043033600000000000 * n^30;
-alpha[22]
-   = 2439323846938124516749950544509820877337338687175781/60135445319372132184782814534632535490560000000 * n^22
-   - 34073601205416895076590748626649694428085903921401/78848923058617306186341102973731471360000000 * n^23
-   + 114050797567384263375075461734480044074661222373269471907217/91493073281158730512537813173716671122112512000000000 * n^24
-   + 137273833008580661426413574856400098350445610433824603561993/35055769925661361419206064286668615837548544000000000 * n^25
-   - 45059179088074031893922072777375249940924991766835661888221084641/1351036625382288628601140188130286029427907231744000000000 * n^26
-   + 206898006671113514273360240583654940027344524273411544491451421031/4644188399751617160816419396697858226158431109120000000000 * n^27
-   + 2440824507911814657571898799746797396009020312235697337059397039885469/9362683813899260196205901503742882183935397115985920000000000 * n^28
-   - 696311481675417712820466561405304148537325788366564328711011454870887/663190103484530930564584689848454154695423962382336000000000 * n^29
-   - 6924245472208385163375477930704649011923426449727911613839020300441563381/3208778996699554454443686563362760582078339299590694502400000000000 * n^30;
-alpha[23]
-   = 7474565215206746325580483864591180104671541156913/84105517929191793265430509838646902784000000 * n^23
-   - 16782060552985470049913293468183373087712600299046298630661/17138376408101110027167409206815767742801510400000000 * n^24
-   + 6503735528674785551831538506800050725715065676154256817241867/2193712180236942083477428378472418271078593331200000000 * n^25
-   + 43999179965065941867057377378097709899255133565469268235339039/4935852405533119687824213851562941109926834995200000000 * n^26
-   - 320196265269217417773345496488501328010142269670188589023798556437/3948681924426495750259371081250352887941467996160000000000 * n^27
-   + 123832182350468652680214620379816199199842965715033754557125222024173/1057259585265194237131946607004781985746328055971840000000000 * n^28
-   + 223366335034930390488779600823060385213901770612295015887755022091478569/346358240132877632084425708454766578530497071136374784000000000 * n^29
-   - 5683975145729510214638167363294386038771152028333168572495195332205249204543/2065161006792282881303388286661545724488088786650634649600000000000 * n^30;
-alpha[24]
-   = 39494178711472476796003427487122912293893944185276935843160849/201821520581798671679923410819462480939230586470400000000 * n^24
-   - 76348957557716638341723622087037389639067389665177807014579/34276752816202220054334818413631535485603020800000000 * n^25
-   + 4701748482852793217057834734347787548724108110072753226999643/665345672247687928615132123580645541557903032320000000 * n^26
-   + 679403733200977595115362734887022205196905112342852746889825923/33505525877837670103112284999324825937176952832000000000 * n^27
-   - 1551880057739501281928982393705767292741074023417989103820403149655498881/7867890886969072136238806216750253141927340875196661760000000000 * n^28
-   + 40509752985115825377187326802004288703338863504362380792112685460851409119/131940842100618072972160918314487643508961228036012769280000000000 * n^29
-   + 930119149078652355869135614976346780332901622265792177140238904719349791424829/584599423461200077168959145762652943547397441144179654656000000000000 * n^30;
-alpha[25]
-   = 8740098043964194699013511747075939410275887707894105297617/20190228149439643025202422050766554715809382400000000 * n^25
-   - 560970870667805373435462259322216583674714967329353232405989/110325175245152335101998949063117245411386982400000000 * n^26
-   + 37599914809270379883026138747614917048973558104768871252051312999/2227899902526348973090063625929131283095402577920000000000 * n^27
-   + 62112464645162326712991624734748037976412787406014636486771832698244341/1348054580849226799204709254809580010308671550814945280000000000 * n^28
-   - 337728148943314333204134420372420356729249456410758236907291010482662683997/703684491203296389184858231010600765381126549525401436160000000000 * n^29
-   + 9318731629311992919328873307373838077895502043140333484055412345740103859247/11610794104854390421550160811674912628788588067169123696640000000000 * n^30;
-alpha[26]
-   = 981053882391585426104317525561993317308039476510023968359/1020137843340108279168122377301889080377737216000000 * n^26
-   - 804535427693867223518181752525105894684868959294094526147221449/69088598041109651665505696484929975427905303347200000000 * n^27
-   + 1850220524749669257030657681847129002392911081379585567459419325323237/45823979891138552002269970273380595222214183119277260800000000 * n^28
-   + 4964057679773584492591452849477564911024827566211763096636472333282359/47482084426673170660246844197746340444070617376882688000000000 * n^29
-   - 4451537474316831472817032033079424859226655324781227836739835901181143999400077/3810722167747081984508770727934330298679331468199097008128000000000000 * n^30;
-alpha[27]
-   = 219796242799180006558858282267295702822729406335181729959735197/102474606956438773279014366383959253494644552499200000000 * n^27
-   - 1991862922927036259097631233677478784353889919238496520767270708775317/74463967323100147003688701694243467236098047568825548800000000 * n^28
-   + 6916252182087743491582730686935092456222021350509646835638283740939656053/71485408630176141123541153626473728546654125666072526848000000000 * n^29
-   + 4178831185325638216557225776185254600956561244767568179257086044280129070299149/17648407039378673440756244433745867195758653862097068018892800000000000 * n^30;
-alpha[28]
-   = 215719482708468448409738976464239418783926747463596671692384366197697/44929100822557395094481533143462725012487441496072519680000000 * n^28
-   - 278069851593691889742988308687280247895937313870882245850732354899927/4512967716551524060829618284499604074915033185989427200000000 * n^29
-   + 10456333895529602975165309445620837322364136333954987435106098028819923116751/45038779803274177894987830782750235833811918467990185574400000000000 * n^30;
-alpha[29]
-   = 27323334865827529185376977771399500293634233810796735936299404584293/2533595911046469648185048861473461936794404595643187200000000 * n^29
-   - 52262641147658201267292303345886757439639836488719164781023668387608491790413/367286072424459165080994152236686477795330009828475136901120000000000 * n^30;
-alpha[30]
-   = 138503251037159093918050273397984791664345186887370360837473296764761046660471/5699690220901306106942517947753261728997763363224497107763200000000000 * n^30;
-
-Krueger, p. 18, Eq. (26*)
-beta[1]
-   = 1/2 * n
-   - 2/3 * n^2
-   + 37/96 * n^3
-   - 1/360 * n^4
-   - 81/512 * n^5
-   + 96199/604800 * n^6
-   - 5406467/38707200 * n^7
-   + 7944359/67737600 * n^8
-   - 7378753979/97542144000 * n^9
-   + 25123531261/804722688000 * n^10
-   - 9280258847/6437781504000 * n^11
-   - 1628053924171/99584432640000 * n^12
-   + 171201246542931467/6186450514083840000 * n^13
-   - 5718183564876629179/180953677536952320000 * n^14
-   + 644468750008654952687/23162070724729896960000 * n^15
-   - 212771552062192641437497/10336074060910716518400000 * n^16
-   + 490410367787088228908921/33923525122989018316800000 * n^17
-   - 17113867364186490261786648857/1602504922403597489012736000000 * n^18
-   + 395980314414341959891853827859/51280157516915119648407552000000 * n^19
-   - 19481411440513215539899023606263/5115195712312283184928653312000000 * n^20
-   - 135570116300721989060886034459593007/108032933444035420865693157949440000000 * n^21
-   + 11080348232555971953029572642513796537/1863568101909611009933206974627840000000 * n^22
-   - 250868515348150853528597220771122960249/29817089630553776158931311594045440000000 * n^23
-   + 961059950401200029458005065879527529605493/118813647905349159549301543874372567040000000 * n^24
-   - 4018789334131226157542250009395235956239124497/659019700381670004966792563356519838515200000000 * n^25
-   + 2391844895236730308938558863293259934461956219/570305509945675965836647410596988321792000000000 * n^26
-   - 1573270095968198180509050797007198841027307027401/474494184274802403576090645616694283730944000000000 * n^27
-   + 2061253330556904530218418240686914940538061818436749/670816153018501898055698150240601543624622080000000000 * n^28
-   - 2710857345655764890042245118743890636519888766789337/1100826507517541576296530297830730738255790080000000000 * n^29
-   + 455119247458368582897233478322666951033511063680152518561/460521387375865357577946377396084237894154190848000000000000 * n^30;
-beta[2]
-   = 1/48 * n^2
-   + 1/15 * n^3
-   - 437/1440 * n^4
-   + 46/105 * n^5
-   - 1118711/3870720 * n^6
-   + 51841/1209600 * n^7
-   + 24749483/348364800 * n^8
-   - 115295683/1397088000 * n^9
-   + 5487737251099/51502252032000 * n^10
-   - 5845886411021/41845579776000 * n^11
-   + 6339155669701909/46867049349120000 * n^12
-   - 3825933403819459/36248733480960000 * n^13
-   + 1576089193435485637/19579096132485120000 * n^14
-   - 796020536210393262877/13672055636125286400000 * n^15
-   + 2472784862443506933077081/82688592487285732147200000 * n^16
-   - 1031884087773262337231/259769057086380441600000 * n^17
-   - 3043575175820301204619799099/301647985393618350872985600000 * n^18
-   + 1240087853302816440305681741/76309758209695118524416000000 * n^19
-   - 162802157643900956474519187209659/7107429831844435583269286707200000 * n^20
-   + 12816799444007020333086273455167501/404420161004689889308421652480000000 * n^21
-   - 8434093090274924630876141677262180833/219243306107013059992141997015040000000 * n^22
-   + 4577121708190925068719017020286339507/116473006369350688120825435914240000000 * n^23
-   - 3765607524414111763649498176471170518355049/111925900200691237256588410896148070400000000 * n^24
-   + 1131301743028144854789954188008691387730629/46411581213027015448945915575926784000000000 * n^25
-   - 460026540064989874633511523684594620842417879/29318721223109392213055526792924758016000000000 * n^26
-   + 604271886240145180390884566623502375996747842517/59723660347088844200115576054184610365440000000000 * n^27
-   - 935636652514721565914189601103950324131311023910747/134163230603700379611139630048120308724924416000000000 * n^28
-   + 13991916555135286064709925920796585055379160510097/3716480422922153591658662648136502628843520000000000 * n^29
-   + 551187495544637127580837409130179426064488050021383801799/558977683987257261611852154632488454271525086822400000000000 * n^30;
-beta[3]
-   = 17/480 * n^3
-   - 37/840 * n^4
-   - 209/4480 * n^5
-   + 5569/90720 * n^6
-   + 9261899/58060800 * n^7
-   - 6457463/17740800 * n^8
-   + 2473691167/9289728000 * n^9
-   - 852549456029/20922789888000 * n^10
-   - 2673218294321/191294078976000 * n^11
-   - 1619588070701683/35150287011840000 * n^12
-   + 799518679601909/34085126799360000 * n^13
-   + 29003748875152374779/473263464327413760000 * n^14
-   - 1018892483578870404121/11218096932205363200000 * n^15
-   + 481644368636077473383677/6234457370073130598400000 * n^16
-   - 723295134325860384163989341/8379110705378287524249600000 * n^17
-   + 18449123896439664237491327/175105254678958021017600000 * n^18
-   - 9545551652020360064000248463489/99543835179894055788085248000000 * n^19
-   + 1624734283470807394728668252816369/22704289740614169224332443648000000 * n^20
-   - 2700625783869782207997557873010304073/43592236301979204910718291804160000000 * n^21
-   + 115833584495328576175632817607784109681/1863568101909611009933206974627840000000 * n^22
-   - 80331805706465175347621476210358062805003/1550488660788796360264428202890362880000000 * n^23
-   + 521874000525184838244754419829212765128887/18500148793502683844064200148123648000000000 * n^24
-   - 381143434387098814023111575357004480524467771/143265152256884783688433165947069530112000000000 * n^25
-   - 3524924454475074760191004058569251720124879785757/215005177249519839120416073795064597315584000000000 * n^26
-   + 38831080481512203835364300143596202089804731885903/1433367848330132260802773825300430648770560000000000 * n^27
-   - 8744571180068348778510935237066929988537179992179467/279936740778874830534781728081174105704890368000000000 * n^28
-   + 924277626444402405054252433779774364643696474585704740403/27948884199362863080592607731624422713576254341120000000000 * n^29
-   - 126306569153879537470902727265265301493989903234598946584327/3458674419671154306223335206788522310805061474713600000000000 * n^30;
-beta[4]
-   = 4397/161280 * n^4
-   - 11/504 * n^5
-   - 830251/7257600 * n^6
-   + 466511/2494800 * n^7
-   + 324154477/7664025600 * n^8
-   - 937932223/3891888000 * n^9
-   - 89112264211/5230697472000 * n^10
-   + 12003335387/32691859200 * n^11
-   - 537877266968267441/2249618368757760000 * n^12
-   - 63357208977773989/597554879201280000 * n^13
-   + 887398150788484759/8825425908203520000 * n^14
-   + 2384026112354539199/18578524426076160000 * n^15
-   - 367013781018742745596861/2656100181332931379200000 * n^16
-   - 116368807092865455691/7292981549216563200000 * n^17
-   + 13509292858664313453220237223/388843106171461155422208000000 * n^18
-   + 12614093798238667596568634093/279480982560737705459712000000 * n^19
-   - 42830094113304502651660706556769109/1538549516540442526260645593088000000 * n^20
-   - 1668094745107834360626912832785989/31436708871619618925998768128000000 * n^21
-   + 324878397379290831787720619212058141009/5100291647331566974554040141086720000000 * n^22
-   - 83347374922531563076841834327924641529/3028298165603117891141461333770240000000 * n^23
-   + 61194082538219225945927920756047806920251343/1628013093828236178277649613034881024000000000 * n^24
-   - 98047007466353520331537046826194116951241/1156259299593917740254012509257728000000000 * n^25
-   + 1493069566723126691789414021618816357112902099/14163713916305654751015551633403464908800000000 * n^26
-   - 428919341299773794465717432164006775623731672469/4733778760465280548815978897476564287488000000000 * n^27
-   + 17024219401413321980501656137013731587720179574723869633/238879352131306522056347074629268570201506447360000000000 * n^28
-   - 1999391624298578429684484594521785906724957573844027707/33592408893464979664173807369740892684586844160000000000 * n^29
-   + 11744245649394563850890264467671937396646650052934109768653353/235189860537638492823186794061619517134744180280524800000000000 * n^30;
-beta[5]
-   = 4583/161280 * n^5
-   - 108847/3991680 * n^6
-   - 8005831/63866880 * n^7
-   + 22894433/124540416 * n^8
-   + 112731569449/557941063680 * n^9
-   - 5391039814733/10461394944000 * n^10
-   + 4863559943251/167382319104000 * n^11
-   + 37588208648677/67596705792000 * n^12
-   - 940430600213372183/7648702453776384000 * n^13
-   - 3291872437542629663/5190190950776832000 * n^14
-   + 189272332747364970877559/523171247838304665600000 * n^15
-   + 502532269819919668347149/1208525582506483777536000 * n^16
-   - 949451228897166389540897/2708180577045341798400000 * n^17
-   - 1784576325496520253476120683753/7154713153554885259768627200000 * n^18
-   + 524830142025358848902662672939/2071953130441233740385484800000 * n^19
-   + 2016209403231616185652826723458583/12019918097972207236411293696000000 * n^20
-   - 16096897691007333935470338878197156361/100005718575128764206941963550720000000 * n^21
-   - 76250060255013791707276485885487883543/490412658397266055245580782796800000000 * n^22
-   + 9252161795915253082728155240170650043693/58289047398075051137760458755276800000000 * n^23
-   + 7020751793938461613149395590976276678732551/107300863002315566295572360859117158400000000 * n^24
-   - 579414190481675218910106244870862973300742643/8393311950403350963564771338313164390400000000 * n^25
-   - 14173007029062232289088502554662276328011078147/150540045053305816210793863075031112744960000000 * n^26
-   + 772937441939971334194668845837513587924053359303309/7321000085750240746251238393754144640860160000000000 * n^27
-   + 49025366795674025628029223704689793073534968814712031/2399457778104641404583843383552920906041917440000000000 * n^28
-   - 669686609255507094686692239475289306509135059892997117053/9137135219022474468655275604569522810207621611520000000000 * n^29
-   + 40227222695357598417206145371640258351589316954641039386851/1130720483354031215496090356065478447763193174425600000000000 * n^30;
-beta[6]
-   = 20648693/638668800 * n^6
-   - 16363163/518918400 * n^7
-   - 2204645983/12915302400 * n^8
-   + 4543317553/18162144000 * n^9
-   + 54894890298749/167382319104000 * n^10
-   - 132058444054073/177843714048000 * n^11
-   - 21678380925301381/85364982743040000 * n^12
-   + 12818665941423773/9855505820160000 * n^13
-   - 4808615626581842484821/26158562391915233280000 * n^14
-   - 17463465220672744627/12110445551812608000 * n^15
-   + 165202773463857304705337/353370053364468940800000 * n^16
-   + 812997634361998476236143/536189976806503219200000 * n^17
-   - 154619327801320908736885805799083/176116016087504867932766208000000 * n^18
-   - 161959155482489360388164840926603/143094263071097705195372544000000 * n^19
-   + 9349367148014299101273724109539769/10684371642641961987921149952000000 * n^20
-   + 131732029936307954433180838298519269/162769724243373639659736268800000000 * n^21
-   - 8489365993766826694602346374698947667527/12000686229015451704833035626086400000000 * n^22
-   - 235155180584267064004207367582121161331463/369771144431538605655167910228787200000000 * n^23
-   + 10739171442634029743650624432194704913120097/17833938449138321267962165239742464000000000 * n^24
-   + 1762807308141499286674865995442897164018384597/4035617016594442070601857542605766656000000000 * n^25
-   - 558496189945509263731011585527531303192423984003189/1264536378447768856170668449830261347057664000000000 * n^26
-   - 97808507187022352611022156010465649331807161947569/289789586727613696205778186419434892034048000000000 * n^27
-   + 32615652758302709344528899560237170963687405836157/90059147187314916442820962074212161290240000000000 * n^28
-   + 943749252435341852900014209629694019211039392602319/4138675144863930994107684407508081919918080000000000 * n^29
-   - 2396490245787484054215780490518037472472963419615505648060407/7617485361542947135973661346125328490194143490867200000000000 * n^30;
-beta[7]
-   = 219941297/5535129600 * n^7
-   - 497323811/12454041600 * n^8
-   - 79431132943/332107776000 * n^9
-   + 4346429528407/12703122432000 * n^10
-   + 947319776978297/1625999671296000 * n^11
-   - 139564766909992667/115852476579840000 * n^12
-   - 3704835620812833323/5560918875832320000 * n^13
-   + 498841790610177443141/204363768686837760000 * n^14
-   + 39982484505071686289633/174390415946101555200000 * n^15
-   - 356813950170946951528704559/99271744277318310297600000 * n^16
-   + 15060663961223625760663/21138232235891097600000 * n^17
-   + 38394769836703949013594096271/9359907317575726399488000000 * n^18
-   - 175303180605302340156213620047457/109024200435122061101236224000000 * n^19
-   - 4999297133725717096793715285507829/1226522254895123187388907520000000 * n^20
-   + 130827473840213685129346417144165899127/55558732541738202337189979750400000000 * n^21
-   + 36940598630244479002168059481052336008621/10875621895045253107504938536140800000000 * n^22
-   - 526486046546475419696035545214440337907/215492198539596346402574633533440000000 * n^23
-   - 181704492729012922104603484325333564859103969/66558805997676949017930223841181696000000000 * n^24
-   + 16251647159655239438323473490445618080618846399/7202872969057694555540376223685699174400000000 * n^25
-   + 341205978466077200076092703065430429896507462203/161292905414256231654421996151819049369600000000 * n^26
-   - 897269639413978000885629059505489580735895982361633/465305593801127068287908304050096166666240000000000 * n^27
-   - 399121663633099371655729890858867495172854098268708589/248291717908219414909110750124171815494772326400000000 * n^28
-   + 40132241906468687661336733055001237954868039321697804833/25223285628771496117750933345947613002643537920000000000 * n^29
-   + 1896891499373733290268263706761724164585169669418091941816783/1593777443203777332318298787597055335894786569666560000000000 * n^30;
-beta[8]
-   = 191773887257/3719607091200 * n^8
-   - 17822319343/336825216000 * n^9
-   - 497155444501631/1422749712384000 * n^10
-   + 4081516004323/8281937664000 * n^11
-   + 3016420810780677019/2994340933140480000 * n^12
-   - 41961075720314059/21502921789440000 * n^13
-   - 14085528104367162867569/8992005822220861440000 * n^14
-   + 10746171896356804622543/2308215780257587200000 * n^15
-   + 13662158833536453560398591327/11118435359059650753331200000 * n^16
-   - 57341614923409542539239823/7238564686887793459200000 * n^17
-   + 144453057736406779924709655689/542023723754157974224896000000 * n^18
-   + 887382930255915812302412329/81992895194724433920000000 * n^19
-   - 2060398135313747799783225762752903/741970252961247360272302080000000 * n^20
-   - 10832617062792890567329480261903684747/885060375573344165649815961600000000 * n^21
-   + 10495965053853858396700728872356351447/2011024758699196210707274137600000000 * n^22
-   + 2827633829976426948425669998692889423/232406442150553432674163438387200000 * n^23
-   - 413070973425124733081767504737914466664159819031/59317777392239837516214863018588110848000000000 * n^24
-   - 192169586323003861221251799348718483715643402161/17652874435161653033977716034322300928000000000 * n^25
-   + 1383590112272607978551162261646356694508727283546677/183025002143756018656280959843853616021504000000000 * n^26
-   + 42340030181859331179384696226318556087021301196292587/4618521538471343283279589846059743591792640000000000 * n^27
-   - 41375761937244157344578465659087922365834839154673258123/5675239266473586626493960002838212925594796032000000000 * n^28
-   - 20325331939679357943380416802660356668728866279500649633/2734164750775035223701517188867368206341242880000000000 * n^29
-   + 26392423128042468212590130065257380662845826882235929755361/4017520183960092210271288782654341375876703191040000000000 * n^30;
-beta[9]
-   = 11025641854267/158083301376000 * n^9
-   - 492293158444691/6758061133824000 * n^10
-   - 3340781295639871/6360528125952000 * n^11
-   + 230755947172792843/315376186245120000 * n^12
-   + 2325760279413600365521/1332149010699386880000 * n^13
-   - 348782269044368632301/108224036583505920000 * n^14
-   - 136098374245460277375071/40852569661447864320000 * n^15
-   + 239596529464231037411713/27496921887512985600000 * n^16
-   + 35364463403763955482475445281/9177121248747648240844800000 * n^17
-   - 184592588983229841779643912853103/10840474475083159484497920000000 * n^18
-   - 104873550118556639023307009752009/57815863867110183917322240000000 * n^19
-   + 7665339074386065543669975721317792709/290481354034328341546606264320000000 * n^20
-   - 138062270900799459529491732714711746071/42901861518916185828421848268800000000 * n^21
-   - 17357777314150207521711937000950161082441881/505716418119604269498979641930547200000000 * n^22
-   + 4926642534361691999909217208854551999460491/475968393524333430116686721816985600000000 * n^23
-   + 10015652615289525910183306384331679276443744239/259601094634730191676142882857680896000000000 * n^24
-   - 116738227431164324545575763544019189664534311289453/6778703783102074765047442957179763556352000000000 * n^25
-   - 84974069676491141925432663367251874389066142853087/2178869073139952603050963807664924000256000000000 * n^26
-   + 3976320059916609695369389466291419325879319135434479/178432977000364290589635917840602808451072000000000 * n^27
-   + 1586328506886857290329263116615881138694586692983247121/43790426438839402982206481503381272574033920000000000 * n^28
-   - 80406545804397163817501103989422456991161536019523815972843/3266415488925908747248745868300215883842338160640000000000 * n^29
-   - 96019711772725383787880372103741416386264796387585150918847311/3025517346617622977139150860513074962408965721292800000000000 * n^30;
-beta[10]
-   = 7028504530429621/72085985427456000 * n^10
-   - 1396721719354981/13516122267648000 * n^11
-   - 242069739433316973869/299733527407362048000 * n^12
-   + 19998425063839930261/17952789402003456000 * n^13
-   + 2005763449529247335066903/661811628515455401984000 * n^14
-   - 1210830366517042702115957/224800145555521536000000 * n^15
-   - 1753821857771614575775682513/258106535121027606773760000 * n^16
-   + 332272605573163585761859289/20456813245552459776000000 * n^17
-   + 344973470391758976060874801536373/34689518320266110350393344000000 * n^18
-   - 2237438243573786540754649786424759/62874751955482325010087936000000 * n^19
-   - 1109701881606701094584605721502811981/126755499942252367220337278976000000 * n^20
-   + 627358150977452113555749190570504329703/10130537221947200911437893468160000000 * n^21
-   - 9310014587788716960656374062579608860273/311210103458218011999372087341875200000000 * n^22
-   - 446788868484797840813986816673961950907461/4958004099211806563715486685593600000000 * n^23
-   + 1592669172541355914905142337333376652510632300857/95325521949872926383479666585340425011200000000 * n^24
-   + 112875421374453323075239925362172217825744049933/992974186977842983161246526930629427200000000 * n^25
-   - 11164164940636962806588613537158861808945650584917881/292840003430009629850049535750165785634406400000000 * n^26
-   - 36738853303604438684911490335783868504502367676508134849/287806815871056339337001809354459811193815040000000000 * n^27
-   + 216582649507727909201718946529683408391594400595766366243093/3674717425041647340654839101837742869322630430720000000000 * n^28
-   + 4070973538524250670523695550641268121153963563101596930691/31101124040066025669604758023366313347131637760000000000 * n^29
-   - 2373100737803367912157154987764399515404306692774646531223199381/31685418030031833360584561739191475969955713735720960000000000 * n^30;
-beta[11]
-   = 20180430688893997/144171970854912000 * n^11
-   - 39227670225311092139/261131482210959360000 * n^12
-   - 15850794471105785046511/12534311146126049280000 * n^13
-   + 250199410574189500301/144626667070685184000 * n^14
-   + 137588598842474725924656737/26071367183942182502400000 * n^15
-   - 2668119315218475090518868331/293302880819349553152000000 * n^16
-   - 147889032611857077276756370409/10949974217255716651008000000 * n^17
-   + 107809340048140291312939137043109/3572429088379677557391360000000 * n^18
-   + 6793119291340068971080115425271339/288802688407957090955427840000000 * n^19
-   - 6754847041326342703335830346240936391/92384494472017791155888455680000000 * n^20
-   - 64145623999655583749753779305277081997/2304645453495497585824314163200000000 * n^21
-   + 2737268880658025692322671196199068915388587/19450631466138625749960755458867200000000 * n^22
-   + 63226986025671434632048293692546868186915331/3847688551847059057446782170772275200000000 * n^23
-   - 1090700244153262995408297323217157326170412252281/4814420300498632645630286191178809344000000000 * n^24
-   + 55625038880876569156054733788858925319816102829/3136997842858837560953670640406102016000000000 * n^25
-   + 6071056974043791221702396204511472430847588724030069/19238423520792536051938623619950522138624000000000 * n^26
-   - 1146269064361582904187395791106052397722761459105729423/15595948667522482559438244214573223280377856000000000 * n^27
-   - 106019806434003656675170902610826150161372006096027080991357/271427991622394405843823342749378734665876111360000000000 * n^28
-   + 261700017996377874094049879699967368736409082839966183897/1848807094916266706471338222217990529865482240000000000 * n^29
-   + 5564919878581209713189603625962524384371461254179337341860987383/12686544328430714529140303040105962058283049444966400000000000 * n^30;
-beta[12]
-   = 170866240186706518133/831839653739888640000 * n^12
-   - 213377450872182833497/957482101440184320000 * n^13
-   - 6175888888953945958057483/3072696846678900080640000 * n^14
-   + 1699533901862334396426791/622363365936119808000000 * n^15
-   + 1110507543583378006712775869269/120449716389812883161088000000 * n^16
-   - 410039885606415108766607293/26460299485682270208000000 * n^17
-   - 1868368333536354056091172181516467/70734095949917615636348928000000 * n^18
-   + 38905214964730326413906323913167/694966079629641887907840000000 * n^19
-   + 2767874903566891102867927978915243454399/52392273309464311784406075310080000000 * n^20
-   - 20032373737511717465214006054179506710383/135073829625962678819171912908800000000 * n^21
-   - 100577682847890502637160841018962740658759229/1322642939697426550997331371202969600000000 * n^22
-   + 135919298571923883567006460953143491460279/435079914374153470722806372106240000000 * n^23
-   + 3510216107422604000609260948095627318487208075137/48884883051216885324861367479661756416000000000 * n^24
-   - 101070009063831782999779504525998847565124914603267/183700224590900951884830607482166444032000000000 * n^25
-   - 290915990038543653257693921668246116917159442076793/22092475361789230960742705145987138060288000000000 * n^26
-   + 87749504586448696585237158790684148758827946213899707/104709128016813542574353446264834873098240000000000 * n^27
-   - 24637643848282085933220710334515754322900635607050021800141/214101183307748640575968216577661209193027207168000000000 * n^28
-   - 21317214475850887868873427382826252613387447653666787141648689/18832926803338442620856050396918432205278480957440000000000 * n^29
-   + 3923499613488828643584115055056306377586308324262330823616543131/12820086900308932576815464124738656395738660491755520000000000 * n^30;
-beta[13]
-   = 18814610183483742537419/61278854492171796480000 * n^13
-   - 46368551984271450700489/137877422607386542080000 * n^14
-   - 23268635133649915499415221/7193604657776689152000000 * n^15
-   + 445607162860807165073496089/101984636074370531328000000 * n^16
-   + 133255376497039560923384901787/8246409857103065776128000000 * n^17
-   - 17940677571433980181912441444683151/674694453676137256839020544000000 * n^18
-   - 2757949059159666555325445738852023379/53975556294090980547121643520000000 * n^19
-   + 24878591848279833324547251174969715273/239776028921827240507405762560000000 * n^20
-   + 15564548980094931213936099440270052236488729/135655686122812979589469884225945600000000 * n^21
-   - 30311212070549573455862406697198244599608233/101741764592109734692102413169459200000000 * n^22
-   - 62329425035966782423701548637355352965648981/325573646694751151014727722142269440000000 * n^23
-   + 623169776009883975758448302456707372300199400409/915354591546065160435157184588808192000000000 * n^24
-   + 9796262122721002376057350329922999007473366798297439/42296704966160578933387743185479648935936000000000 * n^25
-   - 6972722553962255796263966532090565610961098085631862003/5361107354460853379806896448759545502629888000000000 * n^26
-   - 204621385793344479983894287397851209945711725896319703509/1286665765070604811153655147702290920631173120000000000 * n^27
-   + 16994612718512721017891137595235443147803252876143561437699/7912994455184219588594979158369089161881714688000000000 * n^28
-   - 2017139943063547149336991050682980115243753114376812382829593/20257265805271602146803146645424868254417189601280000000000 * n^29
-   - 38559351426567355385426086606064720807546966166200767527984103843/12275103449081224916667438321865150759482563588259840000000000 * n^30;
-beta[14]
-   = 8913139575903156465851797/19119002601557600501760000 * n^14
-   - 267685764482874813822622157/519797883229847263641600000 * n^15
-   - 1312607511537430955013430449229/249502983950326686547968000000 * n^16
-   + 394441446207451421108383701253/55778311315818225598464000000 * n^17
-   + 23930383074197527389616417665944303/842355620435993694012702720000000 * n^18
-   - 3163985271870363313136985965093069527/68915219196919734091414241280000000 * n^19
-   - 11031130611852394131866851413708829814267/112469637729373006037188041768960000000 * n^20
-   + 82762604768504677943482108437799827136297/430547831932756038736110472396800000000 * n^21
-   + 5150460631556395571372500982024919497071310731/21162287035158824815957301939247513600000000 * n^22
-   - 29066497085581091842637088116335089148411714769/48937788768804782386901260734509875200000000 * n^23
-   - 18574016067923889310355562046347950371431867757801/40573875779227237760776317990793641984000000000 * n^24
-   + 2915644146751542300994700670854893964155460634998359/1994459581272638906178160881234949963776000000000 * n^25
-   + 44136416359780678842389174803925334595468092209791307/67329448721643370547025387111579849326592000000000 * n^26
-   - 19779807925985904471082228799863307496144797516514281/6575618800968119560003273400983467589632000000000 * n^27
-   - 9437414987664054735309211086890504857237214217749919547327367/14401649908435279651242862068231742274624720732160000000000 * n^28
-   + 10935173238809263052452436833453551042581316812365555123043/2044824288298806744648942931549704531015106560000000000 * n^29
-   + 9844133982291098741335196902427881991238566220082170652715161789559/44842293877181429376249317540178305362708067588977459200000000000 * n^30;
-beta[15]
-   = 602749854274775522930992007/840077387038136991744000000 * n^15
-   - 432388677389347815771203181653/541421475172208909809090560000 * n^16
-   - 509985088489059649186381056338807/59064160927877335615537152000000 * n^17
-   + 557542563821291613858429695152674917/48240653437843813863989968896000000 * n^18
-   + 228594885325983207294554048445139632797/4563985299162962563827920535552000000 * n^19
-   - 4879838474674757743673587551351918389761/61233469430436414398024600518656000000 * n^20
-   - 2751159808671003044739048717767661132425533/14696032663304739455525904124477440000000 * n^21
-   + 128125601507169052141729932672077247523358897/359836682123564576374273975989043200000000 * n^22
-   + 30192393359192032330697554623405270813965905808153/59508351142866615382471933053164008243200000000 * n^23
-   - 4779918733110943106587948891017151456334707858595371/4061444965500646499853709430878443562598400000000 * n^24
-   - 43635999640355928220666371208517025763949804332853/41311582611576823901881341954262617292800000000 * n^25
-   + 1093615732500524413310474447806551664943154712853580337/352628986416409072575533830586857805787955200000000 * n^26
-   + 12242342315633438381845240050057352332923530458934703251/7112724086411810733447920053364873798615040000000000 * n^27
-   - 201490867217252848518061423700123290704826593788569337593504193/29489092669653191666830622330188805609945856737280000000000 * n^28
-   - 177101515631733926913192960801449153246340895052913001485847913/83263320479020776471051168932297804075141242552320000000000 * n^29
-   + 3188424179872321062468258619737006762022989524905745242529616829657/245231294640835941901363455297850107452309744627220480000000000 * n^30;
-beta[16]
-   = 258111286167289650792323028754789/231006496073475801518545305600000 * n^16
-   - 5263782718468783726282279549/4203582881771808305971200000 * n^17
-   - 5480008133286071057255185152124708229/383668354827295829561557647360000000 * n^18
-   + 3254656358469551348762078052918542501/170852314259030174101631139840000000 * n^19
-   + 3903418284121815685136619157954211820691189/44088097989914218366577712373432320000000 * n^20
-   - 1475869269349982196110739285641411486418113/10620179854341315622157391652454400000000 * n^21
-   - 165406053235626113240302780087909075941876233947/464908993303645432675561976977843814400000000 * n^22
-   + 31141324189381440915034448751509805569920381009/47217319632401489256111763286812262400000000 * n^23
-   + 3425331498104147467678431771772144489569980472050747/3281975729697492121093906610810863484928000000000 * n^24
-   - 181114801957939134097279485499338367321177700348427827/78055895430715549919063478124695087218688000000000 * n^25
-   - 20329880662120223623532772221831681492746536794968375279/8563846812969934619691535885680832426278912000000000 * n^26
-   + 15514402521245792750246961997116209460024931536101177881/2381963776692158394304324203418114597060608000000000 * n^27
-   + 58528872092571805627208033537162293354868952581483996308205593/13610350462916857692383364152394833358436549263360000000000 * n^28
-   - 2739294316618535857897844520835697665418072257962762663947501/179187195041295435475533295409133367421546004480000000000 * n^29
-   - 28963918619355858559987610778078259702157647632421717394029814967389/4700266480616022219776132893208793726169270105355059200000000000 * n^30;
-beta[17]
-   = 5972486266662395092991359700731/3397154354021702963508019200000 * n^17
-   - 14169262403755308738265442730293527/7146763472273157609479995392000000 * n^18
-   - 1407123059162889531671157095700694121/59145628736053718147420651520000000 * n^19
-   + 31616271318862027601140911742786459816003/999546339232123823261872155525120000000 * n^20
-   + 33847994330735322699501662950595147934349517/215760061865017024098184001381990400000000 * n^21
-   - 86502185255596416338989303038079495440176441813/355518641938081801457782688277174681600000000 * n^22
-   - 1381419926651852376155125702746693024900887647/2049837214778129305702530815291817984000000 * n^23
-   + 2039800582062773533252062008847436810010590704673393/1669644822047391442119004879672622186496000000000 * n^24
-   + 6658940828673534449931395737435432548555706698080023117/3134479879256969534004745160772069384781824000000000 * n^25
-   - 1381470469487772782735900360391332279866899387998419366549/303260928318111802414959094304697712977641472000000000 * n^26
-   - 1395295684620560872662304928419977863449010608559002595498087/266869616919938386125164002988133987420324495360000000000 * n^27
-   + 3800355884806913283793161651067966638660881579408061104605403/280213097765935305431422203137540686791340720128000000000 * n^28
-   + 14254272866295825003590094337320088635299910217415520581006075573/1374912266371522565316844943394866303189511800094720000000000 * n^29
-   - 702046212944594816164772022402471437675208441448777951843503358652627/20791767020136757113362658445253016953407594818982379520000000000 * n^30;
-beta[18]
-   = 32561519486094387080527719588034341533/11663517986749793218671352479744000000 * n^18
-   - 729907719647457582367271201256463879/230528934567170058275021389824000000 * n^19
-   - 2367236104332471655932050118751689811238261/59375350358064550788705233330503680000000 * n^20
-   + 277337936278972764824727659347223162007380783/5246368848044609917345751476312473600000000 * n^21
-   + 2072215526282883572284838680097819963389051894913/7438543892858326922808991631645501030400000000 * n^22
-   - 21187399770302239981520985962108187969123956327017/49559298686168603123214906745838150615040000000 * n^23
-   - 117781246505279918774486020036924169110810872979542077/92510690880848059163334492592231214481408000000000 * n^24
-   + 15346233021039229146148984542248316965482710596146903/6780613138425795245494403150226037879603200000000 * n^25
-   + 23577648358032142021574052998960694124312121496108401309501/5499131500168427350457924910058518528661232025600000000 * n^26
-   - 25523104372278110417409133482492688317169934216303321881481/2864130989671055911696835890655478400344391680000000000 * n^27
-   - 4904614526502535650801519867527379473641587091534278367071269/432842750524368215007154889587272725078179640770560000000 * n^28
-   + 21605254007739675177136169588021592098439361907000904630780859/770695057717401985738931667124429059082325852160000000000 * n^29
-   + 587901467817860255311504068569140875259033445501764848866062463918953/24168207818278623653139500414994959877465238422064988160000000000 * n^30;
-beta[19]
-   = 428624286990709813412232185601376712413/95900036779942744242408898166784000000 * n^19
-   - 7696493507391194218978151080255673578313/1510425579284098221817940146126848000000 * n^20
-   - 527610184507500637130291508233596994938727387/7854213012277310753453288759859609600000000 * n^21
-   + 11361451298084078444421426214576116338438506193/127861967714573279471658686134773350400000000 * n^22
-   + 413731746541624122896290630838483865650422207002637/834682925240734368390987903087800431411200000000 * n^23
-   - 193620425636569480838170976533462900238070466349524697/256949550508766977723998435166460382806016000000000 * n^24
-   - 132662492287173341243380190879466905201764211256445800247/55272703309441429874851218942474144568049664000000000 * n^25
-   + 13146789691243844636190690725166722508695370878744595367/3135216364191005476094501914804205679280128000000000 * n^26
-   + 37750506608225008520506075562486792560657544757045773087576929/4393516640660880377892173691299384803425131692032000000000 * n^27
-   - 708261955363343231843730776055545581965081551994723487001141417/40755647785077903505447137531132451137035761090560000000000 * n^28
-   - 41215834581264644962808643579846154211341882270808962207078377401/1700549382091093699207676640514703059208080384327680000000000 * n^29
-   + 205978745011375578132532475847110147598943760061270638697653240745727/3577530762574138369708149732482806560808999108529356800000000000 * n^30;
-beta[20]
-   = 4413022171315891282875633078306076423077823/612225834803154479243538405896749056000000 * n^20
-   - 20372356369389063598321199048537111545322489/2467109651840332692314561267713966080000000 * n^21
-   - 8350441420653344994230757754481656794198878169653/73421183238768300923281343327167630540800000000 * n^22
-   + 3602842136240118426653037995310224523478929843329/23998309048482544305160371509809014374400000000 * n^23
-   + 556742892772424708949943649093699359972707482370822028429/630108817727632300573303895944205248075766169600000000 * n^24
-   - 19669578953730635368229268600445326314943118813499628227/14768175415491382044686810061192310501775769600000000 * n^25
-   - 58913853325627285400915530112249848640529228986228560671583/13043252526961988621867390646045048635168359710720000000 * n^26
-   + 6202219939216563039972447651959676151814355411005403328908487/798219881207309199515322083807444382620980346880000000000 * n^27
-   + 4029539464888473312146356584746881268371745066400450670075103971919/235404621606609970647462666379821037767518556059074560000000000 * n^28
-   - 96689844226844260169337694369507826490314199510140141134776628313/2860820054246996171062914348365880667313593563217920000000000 * n^29
-   - 1267431993370297356535644841552515784699654333219083107594851764271651/24717485268694046917983579969881208965589448386202828800000000000 * n^30;
-beta[21]
-   = 6364309775760426912861320334716314963236880099/543860616583468895728009950571612078080000000 * n^21
-   - 163511162729184839208619679935376666925954633509/12142734151027065152696529857954646589440000000 * n^22
-   - 293082088716477537348152181351392414509711063444079/1515413222048177731056526926272739894362112000000 * n^23
-   + 3584068349124466527596686906788906996841447765124034119/14064928967134649566368390534468867144548352000000000 * n^24
-   + 65325328354812776334115933271141213585155594697569614279619/41407150879244408323388541733476344873550348288000000000 * n^25
-   - 295262389665020199502850268061912716873799689551659695461801/125108748728002748005666808237574956296512838041600000000 * n^26
-   - 198220070520799681801810036957883626038127951175197474869802841/23353633095893846294391137537680658508682396434432000000000 * n^27
-   + 9203041943910402313157326557559771543787851843067288847306443759/639119373821137442471502141656207383123249625825280000000000 * n^28
-   + 223639420140739590352779061494286234859561093634481454398610059052269/6591329404985079178128954658634989057490519569654087680000000000 * n^29
-   - 7514702451752062815378233648033968164404526829002371317311008928464377/114599249882126944801560234405812877931369260699667660800000000000 * n^30;
-beta[22]
-   = 4597258274619973879852787439286345056927543926539/240541781277488528739131258138530141962240000000 * n^22
-   - 90547738027796418205837133798540945489664737617/4100143999048099921689737354634036510720000000 * n^23
-   - 120833998747258442540330733531559589117031890572073705423/365972293124634922050151252694866684488450048000000000 * n^24
-   + 700385303317244963533430016841479945264946535743006370213/1612565416580422625283478957186756328527233024000000000 * n^25
-   + 41927528317378886896874815834318257768184011744864991769792173/14861402879205174914612542069433146323706979549184000000000 * n^26
-   - 1883738571943229874285781147684391885621206162239253551981097/449437587072737144595137360970760473499203010560000000000 * n^27
-   - 1193194903894549620369066288907357112160028172942643483767868101/74901470511194081569647212029943057471483176927887360000000 * n^28
-   + 16593315611956986881113970672924159996956254881446619306408644351/621740722016747747404298146732925770026959964733440000000000 * n^29
-   + 11172709187913729666978241526344191734961305583177742422182451010341965837/166856507828376831631071701294863550268073643578716114124800000000000 * n^30;
-beta[23]
-   = 105692798364122771092494104410403169316822970007103/3367584937884839402347837613939421987471360000000 * n^23
-   - 4991587424316475527559827056175081831817518759624141283/137107011264808880217339273654526141942412083200000000 * n^24
-   - 1094971199704775675327145588577419573356229203017369297031/1935628394326713603068319157475663180363464704000000000 * n^25
-   + 55016459854774144990504572561411573956468991982011620879183/74037786082996795317363207773444116648902524928000000000 * n^26
-   + 239397211441168562919535061028225053930721123237942287411752901/47384183093117949003112452975004234655297615953920000000000 * n^27
-   - 3785206531097832093379025924494221733602175663051851724063493677/507484600927293233823334371362295353158237466866483200000000 * n^28
-   - 2878530207214341630613762260409649820059076958972834659710423583641/96377945080452906319144544961326352286747011098817331200000000 * n^29
-   + 4793620231717494054901024202427349307198672366940440795548189424277463/96899050172071924049425843362418567717916189402962329600000000000 * n^30;
-beta[24]
-   = 674454707484204643577912579775944698106967657841301509703/13020743263341849785801510375449192318660037836800000000 * n^24
-   - 14426118473738594318758580084527169080893428452291501/239224795864861496358580131547117377080524800000000 * n^25
-   - 8831250255802996377564597692702488675170603573810490306068589/9081968426180940225596553486875811642265376391168000000000 * n^26
-   + 8524975532343064334059520385109401209472880856691153037771/6682542557352665505329874016485837860046372864000000000 * n^27
-   + 3849014409982539112685345447510980453367887363991057306125975552515257/424866107896329895356895535704513669664076407260619735040000000000 * n^28
-   - 7018181262756669326759909066253824968190524410099850934366975116824761/527763368402472291888643673257950574035844912144051077120000000000 * n^29
-   - 850361604060552572056063294333220546778996672875303006775383312452755647779/15199585009991202006392937789828976532232333469748671021056000000000000 * n^30;
-beta[25]
-   = 199227752516955126043105919223151730212773157895262123371/2319787592894237605516361043901867597002650419200000000 * n^25
-   - 1168128087731386349278531921296393465205853015166911689601/11643549264334538750764812162661296977263303065600000000 * n^26
-   - 27390759516798680521492333486028666245475773964938356987895799/16337932618526559135993799923480296076032952238080000000000 * n^27
-   + 16623553892978221252992741635428809183176541795604885967233054812289/7566499905411789131019980978608610380442220962638725120000000000 * n^28
-   + 1391206775167565949946814294410548218174156897307634862471204069769203/85538095796791963737570611176977111081466475155984220160000000000 * n^29
-   - 309601436775289074939542822961271536740569529708755160589227851116770297/13036681100187385736477373542933235232324028706996910817280000000000 * n^30;
-beta[26]
-   = 20988866881167764922693397699209941026240719371894993737321/146779287695853579403580662414154531592167699251200000000 * n^26
-   - 20776782371826844247557167727961747229906685936639469810900161/123982629575591320352462040782956155904259153461248000000000 * n^27
-   - 56519161473334888467049876826142477266800694645666348046158762501/19499565911122788086072327775906636264771992816713728000000000 * n^28
-   + 713184336250531653186104175190769152673340166708863511978540935479/187949917522247967196810424949412597591112860450160640000000000 * n^29
-   + 222786377756937595153775101581958876025910578503920819534055082789529097879/7621444335494163969017541455868660597358662936398194016256000000000000 * n^30;
-beta[27]
-   = 1159063206283901297028135487345019691847337244400674181558705769/4849098401178682751562959817288951875366580224262144000000000 * n^27
-   - 836866364429699038099446680535614249403163042061868319644600230131/2978558692924005880147548067769738689443921902753021952000000000 * n^28
-   - 276258332981610143691601963914139654258026350011955431757944008776431/54988775869366262402723964328056714266657019743132712960000000000 * n^29
-   + 231942644768785218497452105692225263551992039422426853153865797716482578787/35296814078757346881512488867491734391517307724194136037785600000000000 * n^30;
-beta[28]
-   = 4820642953919212694667891843709465549522940845258602976903974801919/12021570220089681390145058868115702097935828940841025536000000000 * n^28
-   - 1407966726686721532660580475865160144206500909159825439202238905333/2978558692924005880147548067769738689443921902753021952000000000 * n^29
-   - 2269078966250518419628311750199082816400532696920651885729048451938814396007/259963837024498554809869759278034361232762393397239351135436800000000000 * n^30;
-beta[29]
-   = 2257448691193994841515777396189088185825275740674810644118087064739/3344346602581339935604264497144969756568614066249007104000000000 * n^29
-   - 190079826774799091739713735364123004573671877623337777048243884284125889/238239614545595134106590801450823661272646492861713602314240000000000 * n^30;
-beta[30]
-   = 46619651201884945136956267547124218081125978370322440448000334604980392416839/40900977025187772623419508793077406167287949894498991245308723200000000000 * n^30;
-    </pre>
-  </body>
-</html>
diff --git a/doc/html/transversemercator.html b/doc/html/transversemercator.html
deleted file mode 100644
index fe4459a..0000000
--- a/doc/html/transversemercator.html
+++ /dev/null
@@ -1,236 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Transverse Mercator projection</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Transverse Mercator projection </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>. Forward to <a class="el" href="geocentric.html">Geocentric coordinates</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p><a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> and <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact [...]
-<p>References</p>
-<ul>
-<li>L. Krüger, <a href="http://dx.doi.org/10.2312/GFZ.b103-krueger28">Konforme Abbildung des Erdellipsoids in der Ebene</a> (Conformal mapping of the ellipsoidal earth to the plane), Royal Prussian Geodetic Institute, New Series 52, 172 pp. (1912).</li>
-<li>L. P. Lee, Conformal Projections Based on Elliptic Functions, (B. V. Gutsell, Toronto, 1976), 128pp., ISBN: 0919870163 (Also appeared as: Monograph 16, Suppl. No. 1 to Canadian Cartographer, Vol 13). Part V, pp. 67–101, <a href="http://dx.doi.org/10.3138/X687-1574-4325-WM62">Conformal Projections Based On Jacobian Elliptic Functions</a>.</li>
-<li>C. F. F. Karney, <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">Transverse Mercator with an accuracy of a few nanometers,</a> J. Geodesy 85(8), 475–485 (Aug. 2011); preprint <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>; resource page <a href="http://geographiclib.sf.net/tm.html">tm.html</a>.</li>
-</ul>
-<p>The algorithm for <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> is based on Krüger (1912); that for <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> is based on Lee (1976).</p>
-<p>See <a href="http://geographiclib.sourceforge.net/tm-grid.kmz" type="application/vnd.google-earth.kmz">tm-grid.kmz</a>, for an illustration of the exact transverse Mercator grid in Google Earth.</p>
-<h2><a class="anchor" id="testmerc"></a>
-Test data for the transverse Mercator projection</h2>
-<p>A test set for the transverse Mercator projection is available at</p>
-<ul>
-<li><a href="http://sf.net/projects/geographiclib/files/testdata/TMcoords.dat.gz/download">TMcoords.dat.gz</a></li>
-</ul>
-<p>This is about 17 MB (compressed). This test set consists of a set of geographic coordinates together with the corresponding transverse Mercator coordinates. The WGS84 ellipsoid is used, with central meridian 0<sup>o</sup>, central scale factor 0.9996 (the UTM value), false easting = false northing = 0 m.</p>
-<p>Each line of the test set gives 6 space delimited numbers</p>
-<ul>
-<li>latitude (degrees, exact)</li>
-<li>longitude (degrees, exact — see below)</li>
-<li>easting (meters, accurate to 0.1 pm)</li>
-<li>northing (meters, accurate to 0.1 pm)</li>
-<li>meridian convergence (degrees, accurate to 10<sup>-18</sup> deg)</li>
-<li>scale (accurate to 10<sup>-20</sup>)</li>
-</ul>
-<p>The latitude and longitude are all multiples of 10<sup>-12</sup> deg and should be regarded as exact, except that longitude = 82.63627282416406551 should be interpreted as exactly 90 (1 - <em>e</em>) degrees. These results are computed using Lee's formulas with <a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a>'s bfloats and fpprec set to 80 (so the errors in the data are probably 1/2 of the values quoted above). The Maxima code, <a href="tm.mac">tm.mac</a> and <a hre [...]
-<p>The contents of the file are as follows:</p>
-<ul>
-<li>250000 entries randomly distributed in lat in [0, 90], lon in [0, 90];</li>
-<li>1000 entries randomly distributed on lat in [0, 90], lon = 0;</li>
-<li>1000 entries randomly distributed on lat = 0, lon in [0, 90];</li>
-<li>1000 entries randomly distributed on lat in [0, 90], lon = 90;</li>
-<li>1000 entries close to lat = 90 with lon in [0, 90];</li>
-<li>1000 entries close to lat = 0, lon = 0 with lat >= 0, lon >= 0;</li>
-<li>1000 entries close to lat = 0, lon = 90 with lat >= 0, lon <= 90;</li>
-<li>2000 entries close to lat = 0, lon = 90 (1 - <em>e</em>) with lat >= 0;</li>
-<li>25000 entries randomly distributed in lat in [-89, 0], lon in [90 (1 - <em>e</em>), 90];</li>
-<li>1000 entries randomly distributed on lat in [-89, 0], lon = 90;</li>
-<li>1000 entries randomly distributed on lat in [-89, 0], lon = 90 (1 - <em>e</em>);</li>
-<li>1000 entries close to lat = 0, lon = 90 (lat < 0, lon <= 90);</li>
-<li>1000 entries close to lat = 0, lon = 90 (1 - <em>e</em>) (lat < 0, lon <= 90 (1 - <em>e</em>));</li>
-</ul>
-<p>(a total of 287000 entries). The entries for lat < 0<sup>o</sup> and lon in [90<sup>o</sup> (1 - <em>e</em>), 90<sup>o</sup>] use the "extended" domain for the transverse Mercator projection explained in Sec. 5 of <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>. The first 258000 entries have lat >= 0<sup>o</sup> and are suitable for testing implementations following the standard convention.</p>
-<h2><a class="anchor" id="tmseries"></a>
-Series approximation for transverse Mercator</h2>
-<p>Krüger (1912) gives a 4th-order approximation to the transverse Mercator projection. This is accurate to about 200 nm (200 nanometers) within the UTM domain. Here we present the series extended to 10th order. By default, <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a> uses the 6th-order approximation. The preprocessor variable TM_TX_MAXPOW can be used to select an order from 4 thru 8. [...]
-<p>In the formulas below ^ indicates exponentiation (<em>n^3</em> = <em>n*<em>n*<em>n</em>)</em> and</em> / indicates real division (3/5 = 0.6). The equations need to be converted to Horner form, but are here left in expanded form so that they can be easily truncated to lower order in <em>n</em>. Some of the integers here are not representable as 32-bit integers and will need to be included as double literals.</p>
-<p><em>A</em> in Krüger, p. 12, eq. (5) </p>
-<div class="fragment"><pre class="fragment">
-  A = a/(n + 1) * (1 + 1/4 * n^2
-                     + 1/64 * n^4
-                     + 1/256 * n^6
-                     + 25/16384 * n^8
-                     + 49/65536 * n^10);
-</pre></div><p><em>gamma</em> in Krüger, p. 21, eq. (41) </p>
-<div class="fragment"><pre class="fragment">
-alpha[1] =   1/2 * n
-           - 2/3 * n^2
-           + 5/16 * n^3
-           + 41/180 * n^4
-           - 127/288 * n^5
-           + 7891/37800 * n^6
-           + 72161/387072 * n^7
-           - 18975107/50803200 * n^8
-           + 60193001/290304000 * n^9
-           + 134592031/1026432000 * n^10;
-alpha[2] =   13/48 * n^2
-           - 3/5 * n^3
-           + 557/1440 * n^4
-           + 281/630 * n^5
-           - 1983433/1935360 * n^6
-           + 13769/28800 * n^7
-           + 148003883/174182400 * n^8
-           - 705286231/465696000 * n^9
-           + 1703267974087/3218890752000 * n^10;
-alpha[3] =   61/240 * n^3
-           - 103/140 * n^4
-           + 15061/26880 * n^5
-           + 167603/181440 * n^6
-           - 67102379/29030400 * n^7
-           + 79682431/79833600 * n^8
-           + 6304945039/2128896000 * n^9
-           - 6601904925257/1307674368000 * n^10;
-alpha[4] =   49561/161280 * n^4
-           - 179/168 * n^5
-           + 6601661/7257600 * n^6
-           + 97445/49896 * n^7
-           - 40176129013/7664025600 * n^8
-           + 138471097/66528000 * n^9
-           + 48087451385201/5230697472000 * n^10;
-alpha[5] =   34729/80640 * n^5
-           - 3418889/1995840 * n^6
-           + 14644087/9123840 * n^7
-           + 2605413599/622702080 * n^8
-           - 31015475399/2583060480 * n^9
-           + 5820486440369/1307674368000 * n^10;
-alpha[6] =   212378941/319334400 * n^6
-           - 30705481/10378368 * n^7
-           + 175214326799/58118860800 * n^8
-           + 870492877/96096000 * n^9
-           - 1328004581729009/47823519744000 * n^10;
-alpha[7] =   1522256789/1383782400 * n^7
-           - 16759934899/3113510400 * n^8
-           + 1315149374443/221405184000 * n^9
-           + 71809987837451/3629463552000 * n^10;
-alpha[8] =   1424729850961/743921418240 * n^8
-           - 256783708069/25204608000 * n^9
-           + 2468749292989891/203249958912000 * n^10;
-alpha[9] =   21091646195357/6080126976000 * n^9
-           - 67196182138355857/3379030566912000 * n^10;
-alpha[10]=   77911515623232821/12014330904576000 * n^10;
-</pre></div><p><em>beta</em> in Krüger, p. 18, eq. (26*) </p>
-<div class="fragment"><pre class="fragment">
- beta[1] =   1/2 * n
-           - 2/3 * n^2
-           + 37/96 * n^3
-           - 1/360 * n^4
-           - 81/512 * n^5
-           + 96199/604800 * n^6
-           - 5406467/38707200 * n^7
-           + 7944359/67737600 * n^8
-           - 7378753979/97542144000 * n^9
-           + 25123531261/804722688000 * n^10;
- beta[2] =   1/48 * n^2
-           + 1/15 * n^3
-           - 437/1440 * n^4
-           + 46/105 * n^5
-           - 1118711/3870720 * n^6
-           + 51841/1209600 * n^7
-           + 24749483/348364800 * n^8
-           - 115295683/1397088000 * n^9
-           + 5487737251099/51502252032000 * n^10;
- beta[3] =   17/480 * n^3
-           - 37/840 * n^4
-           - 209/4480 * n^5
-           + 5569/90720 * n^6
-           + 9261899/58060800 * n^7
-           - 6457463/17740800 * n^8
-           + 2473691167/9289728000 * n^9
-           - 852549456029/20922789888000 * n^10;
- beta[4] =   4397/161280 * n^4
-           - 11/504 * n^5
-           - 830251/7257600 * n^6
-           + 466511/2494800 * n^7
-           + 324154477/7664025600 * n^8
-           - 937932223/3891888000 * n^9
-           - 89112264211/5230697472000 * n^10;
- beta[5] =   4583/161280 * n^5
-           - 108847/3991680 * n^6
-           - 8005831/63866880 * n^7
-           + 22894433/124540416 * n^8
-           + 112731569449/557941063680 * n^9
-           - 5391039814733/10461394944000 * n^10;
- beta[6] =   20648693/638668800 * n^6
-           - 16363163/518918400 * n^7
-           - 2204645983/12915302400 * n^8
-           + 4543317553/18162144000 * n^9
-           + 54894890298749/167382319104000 * n^10;
- beta[7] =   219941297/5535129600 * n^7
-           - 497323811/12454041600 * n^8
-           - 79431132943/332107776000 * n^9
-           + 4346429528407/12703122432000 * n^10;
- beta[8] =   191773887257/3719607091200 * n^8
-           - 17822319343/336825216000 * n^9
-           - 497155444501631/1422749712384000 * n^10;
- beta[9] =   11025641854267/158083301376000 * n^9
-           - 492293158444691/6758061133824000 * n^10;
- beta[10]=   7028504530429621/72085985427456000 * n^10;
-</pre></div><p>The high-order expansions for <em>alpha</em> and <em>beta</em> were produced by the Maxima program <a href="tmseries.mac">tmseries.mac</a> (included in the distribution). To run, start Maxima and enter </p>
-<div class="fragment"><pre class="fragment">
-  load("tmseries.mac")$
-</pre></div><p> Further instructions are included at the top of the file.</p>
-<center> Back to <a class="el" href="geodesic.html">Geodesics on the ellipsoid</a>. Forward to <a class="el" href="geocentric.html">Geocentric coordinates</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/html/utilities.html b/doc/html/utilities.html
deleted file mode 100644
index e2c9ef0..0000000
--- a/doc/html/utilities.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>GeographicLib: Utility programs</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  
-  
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">GeographicLib
-    <span id="projectnumber">1.21</span>
-   </div>
-   
-  </td>
-  
-  
-  
- </tr>
- </tbody>
-</table>
-</div>
-
-<!-- Generated by Doxygen 1.7.5 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
-      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
-      <li><a href="annotated.html"><span>Classes</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-      <li><a href="dirs.html"><span>Directories</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Utility programs </div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><center> Back to <a class="el" href="start.html">Getting started</a>. Forward to <a class="el" href="organization.html">Code organization</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center><p>Various utility programs are provided with GeographicLib. These should be installed in a directory included in your PATH (e.g., /usr/local/bin). These programs are wrapper programs that invoke the underlying functionality provided by the library.</p>
-<p>The utilities are</p>
-<ul>
-<li><a href="GeoConvert.1.html"><b>GeoConvert</b></a>: convert geographic coordinates using <a class="el" href="classGeographicLib_1_1GeoCoords.html" title="Conversion between geographic coordinates.">GeographicLib::GeoCoords</a>.</li>
-<li><a href="Geod.1.html"><b>Geod</b></a>: perform geodesic calculations using <a class="el" href="classGeographicLib_1_1Geodesic.html" title="Geodesic calculations">GeographicLib::Geodesic</a> and <a class="el" href="classGeographicLib_1_1GeodesicLine.html" title="A geodesic line.">GeographicLib::GeodesicLine</a>.</li>
-<li><a href="Planimeter.1.html"><b>Planimeter</b></a>: compute the area of geodesic polygons using <a class="el" href="classGeographicLib_1_1PolygonArea.html" title="Polygon Areas.">GeographicLib::PolygonArea</a>.</li>
-<li><a href="TransverseMercatorProj.1.html"><b>TransverseMercatorProj</b></a>: convert between geographic and transverse Mercator. This is for testing <a class="el" href="classGeographicLib_1_1TransverseMercatorExact.html" title="An exact implementation of the Transverse Mercator Projection.">GeographicLib::TransverseMercatorExact</a> and <a class="el" href="classGeographicLib_1_1TransverseMercator.html" title="Transverse Mercator Projection.">GeographicLib::TransverseMercator</a>.</li>
-<li><a href="CartConvert.1.html"><b>CartConvert</b></a>: convert geodetic coordinates to geocentric or local cartesian using <a class="el" href="classGeographicLib_1_1Geocentric.html" title="Geocentric coordinates">GeographicLib::Geocentric</a> and <a class="el" href="classGeographicLib_1_1LocalCartesian.html" title="Local Cartesian coordinates.">GeographicLib::LocalCartesian</a>.</li>
-<li><a href="GeodesicProj.1.html"><b>GeodesicProj</b></a>: perform projections based on geodesics using <a class="el" href="classGeographicLib_1_1AzimuthalEquidistant.html" title="Azimuthal Equidistant Projection.">GeographicLib::AzimuthalEquidistant</a>, <a class="el" href="classGeographicLib_1_1Gnomonic.html" title="Gnomonic Projection.">GeographicLib::Gnomonic</a>, and <a class="el" href="classGeographicLib_1_1CassiniSoldner.html" title="Cassini-Soldner Projection.">GeographicLib::Cas [...]
-<li><a href="ConicProj.1.html"><b>ConicProj</b></a>: perform conic projections using <a class="el" href="classGeographicLib_1_1LambertConformalConic.html" title="Lambert Conformal Conic Projection.">GeographicLib::LambertConformalConic</a> and <a class="el" href="classGeographicLib_1_1AlbersEqualArea.html" title="Albers Equal Area Conic Projection.">GeographicLib::AlbersEqualArea</a>.</li>
-<li><a href="GeoidEval.1.html"><b>GeoidEval</b></a>: look up geoid heights using <a class="el" href="classGeographicLib_1_1Geoid.html" title="Looking up the height of the geoid.">GeographicLib::Geoid</a>.</li>
-<li><a href="Gravity.1.html"><b>Gravity</b></a>: compute the earth's gravitational field using <a class="el" href="classGeographicLib_1_1GravityModel.html" title="Model of the earth's gravity field.">GeographicLib::GravityModel</a> and <a class="el" href="classGeographicLib_1_1GravityCircle.html" title="Gravity on a circle of latitude.">GeographicLib::GravityCircle</a>.</li>
-<li><a href="MagneticField.1.html"><b>MagneticField</b></a>: compute the earth's magnetic field using <a class="el" href="classGeographicLib_1_1MagneticModel.html" title="Model of the earth's magnetic field.">GeographicLib::MagneticModel</a> and <a class="el" href="classGeographicLib_1_1MagneticCircle.html" title="Geomagnetic field on a circle of latitude.">GeographicLib::MagneticCircle</a>.</li>
-</ul>
-<p>The documentation for these utilities is in the form of man pages. This documentation can be accessed by clicking on the utility name in the list above, running the man command on Unix-like systems, or by invoking the utility with the --help option. A brief summary of usage is given by invoking the utility with the -h option. The version of the utility is given by the --version option.</p>
-<p>The utilities all accept data on standard input, transform it in some way, and print the results on standard output. This makes the utilities easy to use within scripts to transform tabular data; however they can also be used interactively, often with the input supplied via a pipe, e.g.,</p>
-<ul>
-<li>echo 38SMB4488 | GeoConvert -d</li>
-</ul>
-<p>Online versions of three of these utilities are provided:</p>
-<ul>
-<li><a href="http://geographiclib.sf.net/cgi-bin/GeoConvert">GeoConvert</a></li>
-<li><a href="http://geographiclib.sf.net/cgi-bin/Geod">Geod</a></li>
-<li><a href="http://geographiclib.sf.net/cgi-bin/Planimeter">Planimeter</a></li>
-<li><a href="http://geographiclib.sf.net/cgi-bin/GeoidEval">GeoidEval</a></li>
-</ul>
-<center> Back to <a class="el" href="start.html">Getting started</a>. Forward to <a class="el" href="organization.html">Code organization</a>. Up to <a class="el" href="index.html#contents">Contents</a>. </center> </div></div>
-
-
-<hr class="footer"/><address class="footer"><small>
-Generated on Tue Apr 24 2012 17:54:16 for GeographicLib by  <a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.7.5
-</small></address>
-
-</body>
-</html>
diff --git a/doc/index.html.in b/doc/index.html.in
new file mode 100644
index 0000000..828a358
--- /dev/null
+++ b/doc/index.html.in
@@ -0,0 +1,24 @@
+<html>
+  <head>
+    <title>GeographicLib- at PROJECT_VERSION@ documentation</title>
+    <meta HTTP-EQUIV="Refresh"
+	  CONTENT="0; URL=http://geographiclib.sourceforge.net/@PROJECT_VERSION@/index.html">
+  </head>
+  <body topmargin=10 leftmargin=10>
+    <h3>
+      <blockquote>
+	<em>
+	  Online documentation for GeographicLib version
+	  @PROJECT_VERSION@ is available at
+	  <center>
+	    <a href="http://geographiclib.sourceforge.net/@PROJECT_VERSION@/index.html">
+	      http://geographiclib.sourceforge.net/@PROJECT_VERSION@/index.html</a>.
+	  </center>
+	  <br>
+	  You will be redirected there.  Click on the link to go there
+	  directly.
+	</em>
+      </blockquote>
+    </h3>
+  </body>
+</html>
diff --git a/doc/meridian-measures.png b/doc/meridian-measures.png
new file mode 100644
index 0000000..f18deae
Binary files /dev/null and b/doc/meridian-measures.png differ
diff --git a/doc/scripts/GeographicLib/DMS.js b/doc/scripts/GeographicLib/DMS.js
index 763560c..e2f339f 100644
--- a/doc/scripts/GeographicLib/DMS.js
+++ b/doc/scripts/GeographicLib/DMS.js
@@ -1,6 +1,6 @@
 /**
  * DMS.js
- * Transcription of DMS.[ch]pp into javascript.
+ * Transcription of DMS.[ch]pp into JavaScript.
  *
  * See the documentation for the C++ class.  The conversion is a literal
  * conversion from C++.
@@ -8,14 +8,13 @@
  * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
- *
- * $Id: 520532eb8c214268d66f3a9d3fa0640e10dcce94 $
  **********************************************************************/
 
 GeographicLib.DMS = {};
 
 (function() {
   var d = GeographicLib.DMS;
+  var m = GeographicLib.Math;
   d.lookup = function(s, c) {
     return s.indexOf(c.toUpperCase());
   }
@@ -47,9 +46,12 @@ GeographicLib.DMS = {};
     dmsa = dmsa.replace(/\u00b0/g, 'd');
     dmsa = dmsa.replace(/\u00ba/g, 'd');
     dmsa = dmsa.replace(/\u2070/g, 'd');
+    dmsa = dmsa.replace(/\u02da/g, 'd');
     dmsa = dmsa.replace(/\u2032/g, '\'');
     dmsa = dmsa.replace(/\u00b4/g, '\'');
+    dmsa = dmsa.replace(/\u2019/g, '\'');
     dmsa = dmsa.replace(/\u2033/g, '"');
+    dmsa = dmsa.replace(/\u201d/g, '"');
     dmsa = dmsa.replace(/''/g, '"');
     dmsa = dmsa.replace(/^\s+/, "");
     dmsa = dmsa.replace(/\s+$/, "");
@@ -101,14 +103,17 @@ GeographicLib.DMS = {};
       var ncurrent = 0, p = beg;
       var pointseen = false;
       var digcount = 0;
+      var intcount = 0;
       while (p < end) {
         var x = dmsa.charAt(p++);
         if ((k = d.lookup(d.digits_, x)) >= 0) {
           ++ncurrent;
           if (digcount > 0)
             ++digcount;         // Count of decimal digits
-          else
+          else {
             icurrent = 10 * icurrent + k;
+            ++intcount;
+          }
         } else if (x == '.') {
           if (pointseen) {
             errormsg = "Multiple decimal points in "
@@ -142,14 +147,16 @@ GeographicLib.DMS = {};
             break;
           }
           if (digcount > 1) {
-            fcurrent = parseFloat(dmsa.substr(p - digcount - 1, digcount));
+            fcurrent = parseFloat(dmsa.substr(p - intcount - digcount - 1,
+                                              intcount + digcount));
+            icurrent = 0;
           }
           ipieces[k] = icurrent;
           fpieces[k] = icurrent + fcurrent;
           if (p < end) {
             npiece = k + 1;
             icurrent = fcurrent = 0;
-            ncurrent = digcount = 0;
+            ncurrent = digcount = intcount = 0;
           }
         } else if (d.lookup(d.signs_, x) >= 0) {
           errormsg = "Internal sign in DMS string "
@@ -175,7 +182,9 @@ GeographicLib.DMS = {};
           break;
         }
         if (digcount > 1) {
-          fcurrent = parseFloat(dmsa.substr(p - digcount, digcount));
+          fcurrent = parseFloat(dmsa.substr(p - intcount - digcount,
+                                            intcount + digcount));
+          icurrent = 0;
         }
         ipieces[npiece] = icurrent;
         fpieces[npiece] = icurrent + fcurrent;
@@ -248,12 +257,11 @@ GeographicLib.DMS = {};
                       + strb + " interpreted as "
                       + (ia == d.LATITUDE ? "latitudes" : "longitudes"));
     var lat = ia == d.LATITUDE ? a : b, lon = ia == d.LATITUDE ? b : a;
-    if (lat < -90 || lat > 90)
+    if (Math.abs(lat) > 90)
       throw new Error("Latitude " + lat + "d not in [-90d, 90d]");
-    if (lon < -180 || lon > 360)
-      throw new Error("Latitude " + lon + "d not in [-180d, 360d]");
-    if (lon >= 180)
-      lon -= 360;
+    if (lon < -540 || lon >= 540)
+      throw new Error("Latitude " + lon + "d not in [-540d, 540d)");
+    lon = m.AngNormalize(lon);
     vals.lat = lat;
     vals.lon = lon;
     return vals;
@@ -274,9 +282,9 @@ GeographicLib.DMS = {};
     if (ind == d.LATITUDE)
       throw new Error("Azimuth " + azistr
                       + " has a latitude hemisphere, N/S");
-    if (azi < -180 || azi > 360)
-      throw new Error("Azimuth " + azistr + " not in range [-180d, 360d]");
-    if (azi >= 180) azi -= 360;
+    if (azi < -540 || azi >= 540)
+      throw new Error("Azimuth " + azistr + " not in range [-540d, 540d)");
+    azi = m.AngNormalize(azi);
     return azi;
   }
 
diff --git a/doc/scripts/GeographicLib/Geodesic.js b/doc/scripts/GeographicLib/Geodesic.js
index 8ad5461..09d2259 100644
--- a/doc/scripts/GeographicLib/Geodesic.js
+++ b/doc/scripts/GeographicLib/Geodesic.js
@@ -1,15 +1,20 @@
 /**
  * Geodesic.js
- * Transcription of Geodesic.[ch]pp into javascript.
+ * Transcription of Geodesic.[ch]pp into JavaScript.
  *
  * See the documentation for the C++ class.  The conversion is a literal
  * conversion from C++.
  *
- * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed
+ * The algorithms are derived in
+ *
+ *    Charles F. F. Karney,
+ *    Algorithms for geodesics, J. Geodesy 87, 43-55 (2013);
+ *    http://dx.doi.org/10.1007/s00190-012-0578-z
+ *    Addenda: http://geographiclib.sf.net/geod-addenda.html
+ *
+ * Copyright (c) Charles Karney (2011-2013) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
- *
- * $Id: d9a7879a3ff27db0b34f6c9fe3d8eaf8f90d1e29 $
  **********************************************************************/
 
 // Load AFTER Math.js
@@ -21,23 +26,25 @@ GeographicLib.GeodesicLine = {};
   var m = GeographicLib.Math;
   var g = GeographicLib.Geodesic;
   var l = GeographicLib.GeodesicLine;
-  g.GEOD_ORD = 6;
-  g.nA1_ = g.GEOD_ORD;
-  g.nC1_ = g.GEOD_ORD;
-  g.nC1p_ = g.GEOD_ORD;
-  g.nA2_ = g.GEOD_ORD;
-  g.nC2_ = g.GEOD_ORD;
-  g.nA3_ = g.GEOD_ORD;
+  g.GEOGRAPHICLIB_GEODESIC_ORDER = 6;
+  g.nA1_ = g.GEOGRAPHICLIB_GEODESIC_ORDER;
+  g.nC1_ = g.GEOGRAPHICLIB_GEODESIC_ORDER;
+  g.nC1p_ = g.GEOGRAPHICLIB_GEODESIC_ORDER;
+  g.nA2_ = g.GEOGRAPHICLIB_GEODESIC_ORDER;
+  g.nC2_ = g.GEOGRAPHICLIB_GEODESIC_ORDER;
+  g.nA3_ = g.GEOGRAPHICLIB_GEODESIC_ORDER;
   g.nA3x_ = g.nA3_;
-  g.nC3_ = g.GEOD_ORD;
+  g.nC3_ = g.GEOGRAPHICLIB_GEODESIC_ORDER;
   g.nC3x_ = (g.nC3_ * (g.nC3_ - 1)) / 2;
-  g.nC4_ = g.GEOD_ORD;
+  g.nC4_ = g.GEOGRAPHICLIB_GEODESIC_ORDER;
   g.nC4x_ = (g.nC4_ * (g.nC4_ + 1)) / 2;
-  g.maxit_ = 50;
+  g.maxit1_ = 20;
+  g.maxit2_ = g.maxit1_ + m.digits + 10;
   g.tiny_ = Math.sqrt(Number.MIN_VALUE);
   g.tol0_ = m.epsilon;
   g.tol1_ = 200 * g.tol0_;
-  g.tol2_ = Math.sqrt(m.epsilon);
+  g.tol2_ = Math.sqrt(g.tol0_);
+  g.tolb_ = g.tol0_ * g.tol1_;
   g.xthresh_ = 1000 * g.tol2_;
 
   g.CAP_NONE = 0;
@@ -62,7 +69,7 @@ GeographicLib.GeodesicLine = {};
   g.SinCosSeries = function(sinp, sinx, cosx, c, n) {
     // Evaluate
     // y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :
-    //            sum(c[i] * cos((2*i+1) * x), i, 0, n-1) :
+    //            sum(c[i] * cos((2*i+1) * x), i, 0, n-1)
     // using Clenshaw summation.  N.B. c[0] is unused for sin series
     // Approx operation count = (n + 5) mult and (2 * n + 2) add
     var k = n + (sinp ? 1 : 0); // Point to one beyond last element
@@ -81,11 +88,6 @@ GeographicLib.GeodesicLine = {};
             : cosx * (y0 - y1));   // cos(x) * (y0 - y1)
   }
 
-  g.AngNormalize = function(x) {
-    // Place angle in [-180, 180).  Assumes x is in [-540, 540).
-    return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x);
-  }
-
   g.AngRound = function(x) {
     // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
     // for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
@@ -232,8 +234,18 @@ GeographicLib.GeodesicLine = {};
                  (this._e2 > 0 ? m.atanh(Math.sqrt(this._e2)) :
                   Math.atan(Math.sqrt(-this._e2))) /
                  Math.sqrt(Math.abs(this._e2))))/2;
-    // The sig12 threshold for "really short"
-    this._etol2 = 10 * g.tol2_ / Math.max(0.1, Math.sqrt(Math.abs(this._e2)));
+    // The sig12 threshold for "really short".  Using the auxiliary sphere
+    // solution with dnm computed at (bet1 + bet2) / 2, the relative error in
+    // the azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2.
+    // (Error measured for 1/100 < b/a < 100 and abs(f) >= 1/1000.  For a given
+    // f and sig12, the max error occurs for lines near the pole.  If the old
+    // rule for computing dnm = (dn1 + dn2)/2 is used, then the error increases
+    // by a factor of 2.)  Setting this equal to epsilon gives sig12 = etol2.
+    // Here 0.1 is a safety factor (error decreased by 100) and max(0.001,
+    // abs(f)) stops etol2 getting too large in the nearly spherical case.
+    this._etol2 = 0.1 * g.tol2_ /
+      Math.sqrt( Math.max(0.001, Math.abs(this._f)) *
+                 Math.min(1.0, 1 - this._f/2) / 2 );
     if (!(isFinite(this._a) && this._a > 0))
       throw new Error("Major radius is not positive");
     if (!(isFinite(this._b) && this._b > 0))
@@ -276,33 +288,32 @@ GeographicLib.GeodesicLine = {};
   }
 
   g.Geodesic.prototype.C4coeff = function() {
-    var _ep2 = this._ep2;
-    this._C4x[0] = (_ep2*(_ep2*(_ep2*((832-640*_ep2)*_ep2-1144)+1716)-3003)+
-                    30030)/45045;
-    this._C4x[1] = (_ep2*(_ep2*((832-640*_ep2)*_ep2-1144)+1716)-3003)/60060;
-    this._C4x[2] = (_ep2*((208-160*_ep2)*_ep2-286)+429)/18018;
-    this._C4x[3] = ((104-80*_ep2)*_ep2-143)/10296;
-    this._C4x[4] = (13-10*_ep2)/1430;
-    this._C4x[5] = -1/156;
-    this._C4x[6] = (_ep2*(_ep2*(_ep2*(640*_ep2-832)+1144)-1716)+3003)/540540;
-    this._C4x[7] = (_ep2*(_ep2*(160*_ep2-208)+286)-429)/108108;
-    this._C4x[8] = (_ep2*(80*_ep2-104)+143)/51480;
-    this._C4x[9] = (10*_ep2-13)/6435;
-    this._C4x[10] = 5/3276;
-    this._C4x[11] = (_ep2*((208-160*_ep2)*_ep2-286)+429)/900900;
-    this._C4x[12] = ((104-80*_ep2)*_ep2-143)/257400;
-    this._C4x[13] = (13-10*_ep2)/25025;
-    this._C4x[14] = -1/2184;
-    this._C4x[15] = (_ep2*(80*_ep2-104)+143)/2522520;
-    this._C4x[16] = (10*_ep2-13)/140140;
-    this._C4x[17] = 5/45864;
-    this._C4x[18] = (13-10*_ep2)/1621620;
-    this._C4x[19] = -1/58968;
-    this._C4x[20] = 1/792792;
+    var _n = this._n;
+    this._C4x[0] = (_n*(_n*(_n*(_n*(100*_n+208)+572)+3432)-12012)+30030)/45045;
+    this._C4x[1] = (_n*(_n*(_n*(64*_n+624)-4576)+6864)-3003)/15015;
+    this._C4x[2] = (_n*((14144-10656*_n)*_n-4576)-858)/45045;
+    this._C4x[3] = ((-224*_n-4784)*_n+1573)/45045;
+    this._C4x[4] = (1088*_n+156)/45045;
+    this._C4x[5] = 97/15015.0;
+    this._C4x[6] = (_n*(_n*((-64*_n-624)*_n+4576)-6864)+3003)/135135;
+    this._C4x[7] = (_n*(_n*(5952*_n-11648)+9152)-2574)/135135;
+    this._C4x[8] = (_n*(5792*_n+1040)-1287)/135135;
+    this._C4x[9] = (468-2944*_n)/135135;
+    this._C4x[10] = 1/9009.0;
+    this._C4x[11] = (_n*((4160-1440*_n)*_n-4576)+1716)/225225;
+    this._C4x[12] = ((4992-8448*_n)*_n-1144)/225225;
+    this._C4x[13] = (1856*_n-936)/225225;
+    this._C4x[14] = 8/10725.0;
+    this._C4x[15] = (_n*(3584*_n-3328)+1144)/315315;
+    this._C4x[16] = (1024*_n-208)/105105;
+    this._C4x[17] = -136/63063.0;
+    this._C4x[18] = (832-2560*_n)/405405;
+    this._C4x[19] = -128/135135.0;
+    this._C4x[20] = 128/99099.0;
   }
 
   g.Geodesic.prototype.A3f = function(eps) {
-    // Evaluation sum(_A3c[k] * eps^k, k, 0, nA3x_-1) by Horner's method
+    // Evaluate sum(_A3x[k] * eps^k, k, 0, nA3x_-1) by Horner's method
     var v = 0;
     for (var i = g.nA3x_; i; )
       v = eps * v + this._A3x[--i];
@@ -310,7 +321,7 @@ GeographicLib.GeodesicLine = {};
   }
 
   g.Geodesic.prototype.C3f = function(eps, c) {
-    // Evaluation C3 coeffs by Horner's method
+    // Evaluate C3 coeffs by Horner's method
     // Elements c[1] thru c[nC3_ - 1] are set
     for (var j = g.nC3x_, k = g.nC3_ - 1; k; ) {
       var t = 0;
@@ -326,30 +337,30 @@ GeographicLib.GeodesicLine = {};
     }
   }
 
-  g.Geodesic.prototype.C4f = function(k2, c) {
-    // Evaluation C4 coeffs by Horner's method
+  g.Geodesic.prototype.C4f = function(eps, c) {
+    // Evaluate C4 coeffs by Horner's method
     // Elements c[0] thru c[nC4_ - 1] are set
     for (var j = g.nC4x_, k = g.nC4_; k; ) {
       var t = 0;
       for (var i = g.nC4_ - k + 1; i; --i)
-        t = k2 * t + this._C4x[--j];
+        t = eps * t + this._C4x[--j];
       c[--k] = t;
     }
 
     var mult = 1;
     for (var k = 1; k < g.nC4_; ) {
-      mult *= k2;
+      mult *= eps;
       c[k++] *= mult;
     }
   }
 
-  // return s12b, m12a, m0, M12, M21
+  // return s12b, m12b, m0, M12, M21
   g.Geodesic.prototype.Lengths = function(eps, sig12,
-                                          ssig1, csig1, ssig2, csig2,
+                                          ssig1, csig1, dn1, ssig2, csig2, dn2,
                                           cbet1, cbet2, scalep,
                                           C1a, C2a) {
     var vals = {};
-    // Return m12a = (reduced length)/_a; also calculate s12b =
+    // Return m12b = (reduced length)/_b; also calculate s12b =
     // distance/_b, and m0 = coefficient of secular term in
     // expression for reduced length.
     g.C1f(eps, C1a);
@@ -360,39 +371,29 @@ GeographicLib.GeodesicLine = {};
                         g.SinCosSeries(true, ssig1, csig1, C1a, g.nC1_)),
     A2m1 = g.A2m1f(eps),
     AB2 = (1 + A2m1) * (g.SinCosSeries(true, ssig2, csig2, C2a, g.nC2_) -
-                        g.SinCosSeries(true, ssig1, csig1, C2a, g.nC2_)),
-    cbet1sq = m.sq(cbet1),
-    cbet2sq = m.sq(cbet2),
-    w1 = Math.sqrt(1 - this._e2 * cbet1sq),
-    w2 = Math.sqrt(1 - this._e2 * cbet2sq),
-    // Make sure it's OK to have repeated dummy arguments
-    m0x = A1m1 - A2m1,
-    J12 = m0x * sig12 + (AB1 - AB2);
-    vals.m0 = m0x;
-    // Missing a factor of _a.
+                        g.SinCosSeries(true, ssig1, csig1, C2a, g.nC2_));
+    vals.m0 = A1m1 - A2m1;
+    var J12 = vals.m0 * sig12 + (AB1 - AB2);
+    // Missing a factor of _b.
     // Add parens around (csig1 * ssig2) and (ssig1 * csig2) to
     // ensure accurate cancellation in the case of coincident
     // points.
-    vals.m12a = (w2 * (csig1 * ssig2) - w1 * (ssig1 * csig2))
-      - this._f1 * csig1 * csig2 * J12;
+    vals.m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2)
+      - csig1 * csig2 * J12;
     // Missing a factor of _b
     vals.s12b = (1 + A1m1) * sig12 + AB1;
     if (scalep) {
       var csig12 = csig1 * csig2 + ssig1 * ssig2;
-      J12 *= this._f1;
-      vals.M12 = csig12 +
-        (this._e2 * (cbet1sq - cbet2sq) * ssig2 / (w1 + w2)
-         - csig2 * J12) * ssig1 / w1;
-      vals.M21 = csig12 -
-        (this._e2 * (cbet1sq - cbet2sq) * ssig1 / (w1 + w2)
-         - csig1 * J12) * ssig2 / w2;
+      var t = this._ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2);
+      vals.M12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1;
+      vals.M21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2;
     }
       return vals;
   }
 
-  // return sig12, salp1, calp1, salp2, calp2
-  g.Geodesic.prototype.InverseStart = function(sbet1, cbet1,
-                                               sbet2, cbet2, lam12,
+  // return sig12, salp1, calp1, salp2, calp2, dnm
+  g.Geodesic.prototype.InverseStart = function(sbet1, cbet1, dn1,
+                                               sbet2, cbet2, dn2, lam12,
                                                C1a, C2a) {
     // Return a starting point for Newton's method in salp1 and calp1
     // (function value is -1).  If Newton's method doesn't need to be
@@ -412,12 +413,17 @@ GeographicLib.GeodesicLine = {};
     var sbet12a = sbet2 * cbet1;
     sbet12a += cbet2 * sbet1;
 
-    var shortline = cbet12 >= 0 && sbet12 < 0.5 &&
-      lam12 <= Math.PI / 6;
-    var
-    omg12 = (!shortline ? lam12 :
-             lam12 / Math.sqrt(1 - this._e2 * m.sq((cbet1 + cbet2) / 2))),
-    somg12 = Math.sin(omg12), comg12 = Math.cos(omg12);
+    var shortline = cbet12 >= 0 && sbet12 < 0.5 && cbet2 * lam12 < 0.5;
+    var omg12 = lam12;
+    if (shortline) {
+      var sbetm2 = m.sq(sbet1 + sbet2);
+      // sin((bet1+bet2)/2)^2
+      // =  (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2)
+      sbetm2 /= sbetm2 + m.sq(cbet1 + cbet2);
+      vals.dnm = Math.sqrt(1 + this._ep2 * sbetm2);
+      omg12 /= this._f1 * vals.dnm;
+    }
+    var somg12 = Math.sin(omg12), comg12 = Math.cos(omg12);
 
     vals.salp1 = cbet2 * somg12;
     vals.calp1 = comg12 >= 0 ?
@@ -431,13 +437,15 @@ GeographicLib.GeodesicLine = {};
     if (shortline && ssig12 < this._etol2) {
       // really short lines
       vals.salp2 = cbet1 * somg12;
-      vals.calp2 = sbet12 - cbet1 * sbet2 * m.sq(somg12) / (1 + comg12);
+      vals.calp2 = sbet12 - cbet1 * sbet2 *
+        (comg12 >= 0 ? m.sq(somg12) / (1 + comg12) : 1 - comg12);
       // SinCosNorm(vals.salp2, vals.calp2);
       var t = m.hypot(vals.salp2, vals.calp2); vals.salp2 /= t; vals.calp2 /= t;
       // Set return value
       vals.sig12 = Math.atan2(ssig12, csig12);
-    } else if (csig12 >= 0 ||
-               ssig12 >= 3 * Math.abs(this._f) * Math.PI * m.sq(cbet1)) {
+    } else if (Math.abs(this._n) > 0.1 || // Skip astroid calc if too eccentric
+               csig12 >= 0 ||
+               ssig12 >= 6 * Math.abs(this._n) * Math.PI * m.sq(cbet1)) {
       // Nothing to do, zeroth order spherical approximation is OK
     } else {
       // Scale lam12 and bet2 to x, y coordinate system where antipodal
@@ -464,14 +472,14 @@ GeographicLib.GeodesicLine = {};
         var
         cbet12a = cbet2 * cbet1 - sbet2 * sbet1,
         bet12a = Math.atan2(sbet12a, cbet12a);
-        var m12a, m0;
+        var m12b, m0;
         // In the case of lon12 = 180, this repeats a calculation made
         // in Inverse.
         var nvals = this.Lengths(this._n, Math.PI + bet12a,
-                                 sbet1, -cbet1, sbet2, cbet2,
+                                 sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
                                  cbet1, cbet2, false, C1a, C2a);
-        m12a = nvals.m12a; m0 = nvals.m0;
-        x = -1 + m12a/(this._f1 * cbet1 * cbet2 * m0 * Math.PI);
+        m12b = nvals.m12b; m0 = nvals.m0;
+        x = -1 + m12b / (cbet1 * cbet2 * m0 * Math.PI);
         betscale = x < -0.01 ? sbet12a / x :
           -this._f * m.sq(cbet1) * Math.PI;
         lamscale = betscale / cbet1;
@@ -524,8 +532,8 @@ GeographicLib.GeodesicLine = {};
         // Because omg12 is near pi, estimate work with omg12a = pi - omg12
         var k = g.Astroid(x, y);
         var
-        omg12a = lamscale * ( this._f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k ),
-        somg12 = Math.sin(omg12a), comg12 = -Math.cos(omg12a);
+        omg12a = lamscale * ( this._f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k );
+        somg12 = Math.sin(omg12a); comg12 = -Math.cos(omg12a);
         // Update spherical estimate of alp1 using omg12 instead of
         // lam12
         vals.salp1 = cbet2 * somg12;
@@ -533,14 +541,18 @@ GeographicLib.GeodesicLine = {};
           cbet2 * sbet1 * m.sq(somg12) / (1 - comg12);
       }
     }
-    // SinCosNorm(vals.salp1, vals.calp1);
-    var t = m.hypot(vals.salp1, vals.calp1); vals.salp1 /= t; vals.calp1 /= t;
+    if (vals.salp1 > 0) {       // Sanity check on starting guess
+      // SinCosNorm(vals.salp1, vals.calp1);
+      var t = m.hypot(vals.salp1, vals.calp1); vals.salp1 /= t; vals.calp1 /= t;
+    } else {
+      vals.salp1 = 1; vals.calp1 = 0;
+    }
     return vals;
   }
 
   // return lam12, salp2, calp2, sig12, ssig1, csig1, ssig2, csig2, eps,
   // domg12, dlam12,
-  g.Geodesic.prototype.Lambda12 = function(sbet1, cbet1, sbet2, cbet2,
+  g.Geodesic.prototype.Lambda12 = function(sbet1, cbet1, dn1, sbet2, cbet2, dn2,
                                            salp1, calp1, diffp,
                                            C1a, C2a, C3a) {
     var vals = {};
@@ -605,14 +617,14 @@ GeographicLib.GeodesicLine = {};
 
     if (diffp) {
       if (vals.calp2 == 0)
-        vals.dlam12 =
-        - 2 * Math.sqrt(1 - this._e2 * m.sq(cbet1)) / sbet1;
+        vals.dlam12 = - 2 * this._f1 * dn1 / sbet1;
       else {
         var nvals = this.Lengths(vals.eps, vals.sig12,
-                                 vals.ssig1, vals.csig1, vals.ssig2, vals.csig2,
+                                 vals.ssig1, vals.csig1, dn1,
+                                 vals.ssig2, vals.csig2, dn2,
                                  cbet1, cbet2, false, C1a, C2a);
-        vals.dlam12 = nvals.m12a;
-        vals.dlam12 /= vals.calp2 * cbet2;
+        vals.dlam12 = nvals.m12b;
+        vals.dlam12 *= this._f1 / (vals.calp2 * cbet2);
       }
     }
     return vals;
@@ -622,16 +634,15 @@ GeographicLib.GeodesicLine = {};
   g.Geodesic.prototype.GenInverse = function(lat1, lon1, lat2, lon2, outmask) {
     var vals = {};
     outmask &= g.OUT_ALL;
-    lon1 = g.AngNormalize(lon1);
-    var lon12 = g.AngNormalize(g.AngNormalize(lon2) - lon1);
-    // If very close to being on the same meridian, then make it so.
-    // Not sure this is necessary...
+    // Compute longitude difference (AngDiff does this carefully).  Result is
+    // in [-180, 180] but -180 is only for west-going geodesics.  180 is for
+    // east-going and meridional geodesics.
+    var lon12 = m.AngDiff(m.AngNormalize(lon1), m.AngNormalize(lon2));
+    // If very close to being on the same half-meridian, then make it so.
     lon12 = g.AngRound(lon12);
     // Make longitude difference positive.
     var lonsign = lon12 >= 0 ? 1 : -1;
     lon12 *= lonsign;
-    if (lon12 == 180)
-      lonsign = 1;
     // If really close to the equator, treat as on equator.
     lat1 = g.AngRound(lat1);
     lat2 = g.AngRound(lat2);
@@ -655,10 +666,10 @@ GeographicLib.GeodesicLine = {};
     //     lat1 <= lat2 <= -lat1
     //
     // longsign, swapp, latsign register the transformation to bring the
-    // coordinates to this canonical form.  In all cases, 1 means no
-    // change was made.  We make these transformations so that there are
-    // few cases to check, e.g., on verifying quadrants in atan2.  In
-    // addition, this enforces some symmetries in the results returned.
+    // coordinates to this canonical form.  In all cases, 1 means no change was
+    // made.  We make these transformations so that there are few cases to
+    // check, e.g., on verifying quadrants in atan2.  In addition, this
+    // enforces some symmetries in the results returned.
 
     var phi, sbet1, cbet1, sbet2, cbet2, s12x, m12x;
 
@@ -676,12 +687,11 @@ GeographicLib.GeodesicLine = {};
     // SinCosNorm(sbet2, cbet2);
     var t = m.hypot(sbet2, cbet2); sbet2 /= t; cbet2 /= t;
 
-    // If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of
-    // the |bet1| - |bet2|.  Alternatively (cbet1 >= -sbet1), abs(sbet2)
-    // + sbet1 is a better measure.  This logic is used in assigning
-    // calp2 in Lambda12.  Sometimes these quantities vanish and in that
-    // case we force bet2 = +/- bet1 exactly.  An example where is is
-    // necessary is the inverse problem
+    // If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of the
+    // |bet1| - |bet2|.  Alternatively (cbet1 >= -sbet1), abs(sbet2) + sbet1 is
+    // a better measure.  This logic is used in assigning calp2 in Lambda12.
+    // Sometimes these quantities vanish and in that case we force bet2 = +/-
+    // bet1 exactly.  An example where is is necessary is the inverse problem
     // 48.522876735459 0 -48.52287673545898293 179.599720456223079643
     // which failed with Visual Studio 10 (Release and Debug)
 
@@ -694,6 +704,10 @@ GeographicLib.GeodesicLine = {};
     }
 
     var
+    dn1 = Math.sqrt(1 + this._ep2 * m.sq(sbet1)),
+    dn2 = Math.sqrt(1 + this._ep2 * m.sq(sbet2));
+
+    var
     lam12 = lon12 * m.degree,
     slam12 = lon12 == 180 ? 0 : Math.sin(lam12),
     clam12 = Math.cos(lam12);   // lon12 == 90 isn't interesting
@@ -724,11 +738,12 @@ GeographicLib.GeodesicLine = {};
       sig12 = Math.atan2(Math.max(csig1 * ssig2 - ssig1 * csig2, 0),
                          csig1 * csig2 + ssig1 * ssig2);
       {
-        var nvals = this.Lengths(this._n, sig12, ssig1, csig1, ssig2, csig2,
+        var nvals = this.Lengths(this._n, sig12,
+                                 ssig1, csig1, dn1, ssig2, csig2, dn2,
                                  cbet1, cbet2, (outmask & g.GEODESICSCALE) != 0,
                                  C1a, C2a);
         s12x = nvals.s12b;
-        m12x = nvals.m12a;
+        m12x = nvals.m12b;
         // Ignore m0
         if ((outmask & g.GEODESICSCALE) != 0) {
           vals.M12 = nvals.M12;
@@ -743,7 +758,7 @@ GeographicLib.GeodesicLine = {};
       // In fact, we will have sig12 > pi/2 for meridional geodesic
       // which is not a shortest path.
       if (sig12 < 1 || m12x >= 0) {
-        m12x *= this._a;
+        m12x *= this._b;
         s12x *= this._b;
         vals.a12 = sig12 / m.degree;
       } else
@@ -760,11 +775,11 @@ GeographicLib.GeodesicLine = {};
       // Geodesic runs along equator
       calp1 = calp2 = 0; salp1 = salp2 = 1;
       s12x = this._a * lam12;
-      m12x = this._b * Math.sin(lam12 / this._f1);
+      sig12 = omg12 = lam12 / this._f1;
+      m12x = this._b * Math.sin(sig12);
       if (outmask & g.GEODESICSCALE)
-        vals.M12 = vals.M21 = Math.cos(lam12 / this._f1);
+        vals.M12 = vals.M21 = Math.cos(sig12);
       vals.a12 = lon12 / this._f1;
-      sig12 = omg12 = lam12 / this._f1;
 
     } else if (!meridian) {
 
@@ -772,7 +787,7 @@ GeographicLib.GeodesicLine = {};
       // meridian and geodesic is neither meridional or equatorial.
 
       // Figure a starting point for Newton's method
-      var nvals = this.InverseStart(sbet1, cbet1, sbet2, cbet2, lam12,
+      var nvals = this.InverseStart(sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12,
                                     C1a, C2a);
       sig12 = nvals.sig12;
       salp1 = nvals.salp1;
@@ -781,24 +796,39 @@ GeographicLib.GeodesicLine = {};
       if (sig12 >= 0) {
         salp2 = nvals.salp2;
         calp2 = nvals.calp2;
-        // Short lines (InverseStart sets salp2, calp2)
-        var wm = Math.sqrt(1 - this._e2 * m.sq((cbet1 + cbet2) / 2));
-        s12x = sig12 * this._a * wm;
-        m12x = m.sq(wm) * this._a / this._f1 * Math.sin(sig12 * this._f1 / wm);
+        // Short lines (InverseStart sets salp2, calp2, dnm)
+
+        var dnm = nvals.dnm;
+        s12x = sig12 * this._b * dnm;
+        m12x = m.sq(dnm) * this._b * Math.sin(sig12 / dnm);
         if (outmask & g.GEODESICSCALE)
-          vals.M12 = vals.M21 = Math.cos(sig12 * this._f1 / wm);
+          vals.M12 = vals.M21 = Math.cos(sig12 / dnm);
         vals.a12 = sig12 / m.degree;
-        omg12 = lam12 / wm;
+        omg12 = lam12 / (this._f1 * dnm);
       } else {
 
-        // Newton's method
+        // Newton's method.  This is a straightforward solution of f(alp1) =
+        // lambda12(alp1) - lam12 = 0 with one wrinkle.  f(alp) has exactly one
+        // root in the interval (0, pi) and its derivative is positive at the
+        // root.  Thus f(alp) is positive for alp > alp1 and negative for alp <
+        // alp1.  During the course of the iteration, a range (alp1a, alp1b) is
+        // maintained which brackets the root and with each evaluation of
+        // f(alp) the range is shrunk if possible.  Newton's method is
+        // restarted whenever the derivative of f is negative (because the new
+        // value of alp1 is then further from the solution) or if the new
+        // estimate of alp1 lies outside (0,pi); in this case, the new starting
+        // guess is taken to be (alp1a + alp1b) / 2.
         var ssig1, csig1, ssig2, csig2, eps;
-        var ov = 0;
         var numit = 0;
-        for (var trip = 0; numit < g.maxit_; ++numit) {
+        // Bracketing range
+        var salp1a = g.tiny_, calp1a = 1, salp1b = g.tiny_, calp1b = -1;
+        for (var tripn = false, tripb = false; numit < g.maxit2_; ++numit) {
+          // the WGS84 test set: mean = 1.47, sd = 1.25, max = 16
+          // WGS84 and random input: mean = 2.85, sd = 0.60
           var dv;
-          var nvals = this.Lambda12(sbet1, cbet1, sbet2, cbet2, salp1, calp1,
-                                    trip < 1, C1a, C2a, C3a);
+          var nvals = this.Lambda12(sbet1, cbet1, dn1, sbet2, cbet2, dn2,
+                                    salp1, calp1, numit < g.maxit1_,
+                                    C1a, C2a, C3a);
           var v = nvals.lam12 - lam12;
           salp2 = nvals.salp2;
           calp2 = nvals.calp2;
@@ -809,63 +839,68 @@ GeographicLib.GeodesicLine = {};
           csig2 = nvals.csig2;
           eps = nvals.eps;
           omg12 = nvals.domg12;
-          if (trip < 1) dv = nvals.dlam12;
+          dv = nvals.dlam12;
 
-          if (!(Math.abs(v) > g.tiny_) || !(trip < 1)) {
-            if (!(Math.abs(v) <= Math.max(g.tol1_, ov)))
-              numit = g.maxit_;
+          // 2 * tol0 is approximately 1 ulp for a number in [0, pi].
+          // Reversed test to allow escape with NaNs
+          if (tripb || !(Math.abs(v) >= (tripn ? 8 : 2) * g.tol0_))
             break;
+          // Update bracketing values
+          if (v > 0 && (numit < g.maxit1_ || calp1/salp1 > calp1b/salp1b)) {
+              salp1b = salp1; calp1b = calp1;
+          } else if (v < 0 &&
+                     (numit < g.maxit1_ || calp1/salp1 < calp1a/salp1a)) {
+            salp1a = salp1; calp1a = calp1;
           }
-          var
-          dalp1 = -v/dv;
-          var
-          sdalp1 = Math.sin(dalp1), cdalp1 = Math.cos(dalp1),
-          nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
-          calp1 = calp1 * cdalp1 - salp1 * sdalp1;
-          salp1 = Math.max(0, nsalp1);
+          if (numit < g.maxit1_ && dv > 0) {
+            var
+            dalp1 = -v/dv;
+            var
+            sdalp1 = Math.sin(dalp1), cdalp1 = Math.cos(dalp1),
+            nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
+            if (nsalp1 > 0 && Math.abs(dalp1) < Math.PI) {
+              calp1 = calp1 * cdalp1 - salp1 * sdalp1;
+              salp1 = Math.max(0, nsalp1);
+              // SinCosNorm(salp1, calp1);
+              var t = m.hypot(salp1, calp1); salp1 /= t; calp1 /= t;
+              // In some regimes we don't get quadratic convergence because
+              // slope -> 0.  So use convergence conditions based on epsilon
+              // instead of sqrt(epsilon).
+              tripn = Math.abs(v) <= 16 * g.tol0_;
+              continue;
+            }
+          }
+          // Either dv was not postive or updated value was outside legal
+          // range.  Use the midpoint of the bracket as the next estimate.
+          // This mechanism is not needed for the WGS84 ellipsoid, but it does
+          // catch problems with more eccentric ellipsoids.  Its efficacy is
+          // such for the WGS84 test set with the starting guess set to alp1 =
+          // 90deg:
+          // the WGS84 test set: mean = 5.21, sd = 3.93, max = 24
+          // WGS84 and random input: mean = 4.74, sd = 0.99
+          salp1 = (salp1a + salp1b)/2;
+          calp1 = (calp1a + calp1b)/2;
           // SinCosNorm(salp1, calp1);
           var t = m.hypot(salp1, calp1); salp1 /= t; calp1 /= t;
-          // In some regimes we don't get quadratic convergence because
-          // slope -> 0.  So use convergence conditions based on epsilon
-          // instead of sqrt(epsilon).  The first criterion is a test on
-          // abs(v) against 100 * epsilon.  The second takes credit for
-          // an anticipated reduction in abs(v) by v/ov (due to the
-          // latest update in alp1) and checks this against epsilon.
-          if (!(Math.abs(v) >= g.tol1_ && m.sq(v) >= ov * g.tol0_))
-            ++trip;
-          ov = Math.abs(v);
+          tripn = false;
+          tripb = (Math.abs(salp1a - salp1) + (calp1a - calp1) < g.tolb_ ||
+                   Math.abs(salp1 - salp1b) + (calp1 - calp1b) < g.tolb_);
         }
-
-        if (numit >= g.maxit_) {
-          // Signal failure.
-          if (outmask & g.DISTANCE)
-            vals.s12 = Number.NaN;
-          if (outmask & g.AZIMUTH)
-            vals.azi1 = vals.azi2 = Number.NaN;
-          if (outmask & g.REDUCEDLENGTH)
-            vals.m12 = Number.NaN;
-          if (outmask & g.GEODESICSCALE)
-            vals.M12 = vals.M21 = Number.NaN;
-          if (outmask & g.AREA)
-            vals.S12 = Number.NaN;
-          vals.a12 = Number.NaN;
-          return vals;
-        }
-
         {
-          var nvals = this.Lengths(eps, sig12, ssig1, csig1, ssig2, csig2,
+          var nvals = this.Lengths(eps, sig12,
+                                   ssig1, csig1, dn1, ssig2, csig2, dn2,
                                    cbet1, cbet2,
                                    (outmask & g.GEODESICSCALE) != 0,
                                    C1a, C2a);
           s12x = nvals.s12b;
-          m12x = nvals.m12a;
+          m12x = nvals.m12b;
           // Ignore m0
           if ((outmask & g.GEODESICSCALE) != 0) {
             vals.M12 = nvals.M12;
             vals.M21 = nvals.M21;
           }
         }
-        m12x *= this._a;
+        m12x *= this._b;
         s12x *= this._b;
         vals.a12 = sig12 / m.degree;
         omg12 = lam12 - omg12;
@@ -890,6 +925,7 @@ GeographicLib.GeodesicLine = {};
         ssig1 = sbet1, csig1 = calp1 * cbet1,
         ssig2 = sbet2, csig2 = calp2 * cbet2,
         k2 = m.sq(calp0) * this._ep2,
+        eps = k2 / (2 * (1 + Math.sqrt(1 + k2)) + k2);
         // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0).
         A4 = m.sq(this._a) * calp0 * salp0 * this._e2;
         // SinCosNorm(ssig1, csig1);
@@ -897,7 +933,7 @@ GeographicLib.GeodesicLine = {};
         // SinCosNorm(ssig2, csig2);
         var t = m.hypot(ssig2, csig2); ssig2 /= t; csig2 /= t;
         var C4a = new Array(g.nC4_);
-        this.C4f(k2, C4a);
+        this.C4f(eps, C4a);
         var
         B41 = g.SinCosSeries(false, ssig1, csig1, C4a, g.nC4_),
         B42 = g.SinCosSeries(false, ssig2, csig2, C4a, g.nC4_);
@@ -921,10 +957,10 @@ GeographicLib.GeodesicLine = {};
         var
         salp12 = salp2 * calp1 - calp2 * salp1,
         calp12 = calp2 * calp1 + salp2 * salp1;
-        // The right thing appears to happen if alp1 = +/-180 and alp2 =
-        // 0, viz salp12 = -0 and alp12 = -180.  However this depends on
-        // the sign being attached to 0 correctly.  The following
-        // ensures the correct behavior.
+        // The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+        // salp12 = -0 and alp12 = -180.  However this depends on the sign
+        // being attached to 0 correctly.  The following ensures the correct
+        // behavior.
         if (salp12 == 0 && calp12 < 0) {
           salp12 = g.tiny_ * calp1;
           calp12 = -1;
diff --git a/doc/scripts/GeographicLib/GeodesicLine.js b/doc/scripts/GeographicLib/GeodesicLine.js
index 0571999..b2df9c1 100644
--- a/doc/scripts/GeographicLib/GeodesicLine.js
+++ b/doc/scripts/GeographicLib/GeodesicLine.js
@@ -1,15 +1,20 @@
 /**
  * GeodesicLine.js
- * Transcription of GeodesicLine.[ch]pp into javascript.
+ * Transcription of GeodesicLine.[ch]pp into JavaScript.
  *
  * See the documentation for the C++ class.  The conversion is a literal
  * conversion from C++.
  *
- * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
+ * The algorithms are derived in
+ *
+ *    Charles F. F. Karney,
+ *    Algorithms for geodesics, J. Geodesy 87, 43-55 (2013);
+ *    http://dx.doi.org/10.1007/s00190-012-0578-z
+ *    Addenda: http://geographiclib.sf.net/geod-addenda.html
+ *
+ * Copyright (c) Charles Karney (2011-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
- *
- * $Id: fd75e359445d86b9e2c8b27708e1ad35687a92d0 $
  **********************************************************************/
 
 // Load AFTER GeographicLib/Math.js and GeographicLib/Geodesic.js
@@ -26,10 +31,9 @@
     this._c2 = geod._c2;
     this._f1 = geod._f1;
     this._caps = !caps ? g.ALL : (caps | g.LATITUDE | g.AZIMUTH);
-    azi1 = g.AngNormalize(azi1);
-    // Guard against underflow in salp0
-    azi1 = g.AngRound(azi1);
-    lon1 = g.AngNormalize(lon1);
+
+    azi1 = g.AngRound(m.AngNormalize(azi1));
+    lon1 = m.AngNormalize(lon1);
     this._lat1 = lat1;
     this._lon1 = lon1;
     this._azi1 = azi1;
@@ -46,6 +50,7 @@
     cbet1 = Math.abs(lat1) == 90 ? g.tiny_ : Math.cos(phi);
     // SinCosNorm(sbet1, cbet1);
     var t = m.hypot(sbet1, cbet1); sbet1 /= t; cbet1 /= t;
+    this._dn1 = Math.sqrt(1 + geod._ep2 * m.sq(sbet1));
 
     // Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0),
     this._salp0 = this._salp1 * cbet1; // alp0 in [0, pi/2 - |bet1|]
@@ -67,9 +72,7 @@
     // SinCosNorm(this._ssig1, this._csig1); // sig1 in (-pi, pi]
     var t = m.hypot(this._ssig1, this._csig1);
     this._ssig1 /= t; this._csig1 /= t;
-    // SinCosNorm(this._somg1, this._comg1);
-    var t = m.hypot(this._somg1, this._comg1);
-    this._somg1 /= t; this._comg1 /= t;
+    // SinCosNorm(this._somg1, this._comg1); -- don't need to normalize!
 
     this._k2 = m.sq(this._calp0) * geod._ep2;
     var eps = this._k2 / (2 * (1 + Math.sqrt(1 + this._k2)) + this._k2);
@@ -111,7 +114,7 @@
 
     if (this._caps & g.CAP_C4) {
       this._C4a = new Array(g.nC4_); // all the elements of _C4a are used
-      geod.C4f(this._k2, this._C4a);
+      geod.C4f(eps, this._C4a);
       // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0)
       this._A4 = m.sq(this._a) * this._calp0 * this._salp0 * geod._e2;
       this._B41 = g.SinCosSeries(false, this._ssig1, this._csig1,
@@ -126,7 +129,7 @@
     outmask &= this._caps & g.OUT_ALL;
     if (!( arcmode || (this._caps & g.DISTANCE_IN & g.OUT_ALL) )) {
       // Uninitialized or impossible distance calculation requested
-      vals.a12 = Number.NaN();
+      vals.a12 = Number.NaN;
       return vals;
     }
 
@@ -146,12 +149,44 @@
       s = Math.sin(tau12),
       c = Math.cos(tau12);
       // tau2 = tau1 + tau12
-      B12 = - g.SinCosSeries(true, this._stau1 * c + this._ctau1 * s,
-                                   this._ctau1 * c - this._stau1 * s,
-                                   this._C1pa, g.nC1p_);
+      B12 = - g.SinCosSeries(true,
+                             this._stau1 * c + this._ctau1 * s,
+                             this._ctau1 * c - this._stau1 * s,
+                             this._C1pa, g.nC1p_);
       sig12 = tau12 - (B12 - this._B11);
-      ssig12 = Math.sin(sig12);
-      csig12 = Math.cos(sig12);
+      ssig12 = Math.sin(sig12); csig12 = Math.cos(sig12);
+      if (Math.abs(this._f) > 0.01) {
+        // Reverted distance series is inaccurate for |f| > 1/100, so correct
+        // sig12 with 1 Newton iteration.  The following table shows the
+        // approximate maximum error for a = WGS_a() and various f relative to
+        // GeodesicExact.
+        //     erri = the error in the inverse solution (nm)
+        //     errd = the error in the direct solution (series only) (nm)
+        //     errda = the error in the direct solution (series + 1 Newton) (nm)
+        //
+        //       f     erri  errd errda
+        //     -1/5    12e6 1.2e9  69e6
+        //     -1/10  123e3  12e6 765e3
+        //     -1/20   1110 108e3  7155
+        //     -1/50  18.63 200.9 27.12
+        //     -1/100 18.63 23.78 23.37
+        //     -1/150 18.63 21.05 20.26
+        //      1/150 22.35 24.73 25.83
+        //      1/100 22.35 25.03 25.31
+        //      1/50  29.80 231.9 30.44
+        //      1/20   5376 146e3  10e3
+        //      1/10  829e3  22e6 1.5e6
+        //      1/5   157e6 3.8e9 280e6
+        var
+          ssig2 = this._ssig1 * csig12 + this._csig1 * ssig12,
+          csig2 = this._csig1 * csig12 - this._ssig1 * ssig12;
+        B12 = g.SinCosSeries(true, ssig2, csig2, this._C1a, g.nC1_);
+        var serr = (1 + this._A1m1) * (sig12 + (B12 - this._B11)) -
+          s12_a12 / this._b;
+        sig12 = sig12 - serr / Math.sqrt(1 + this._k2 * m.sq(ssig2));
+        ssig12 = Math.sin(sig12); csig12 = Math.cos(sig12);
+        // Update B12 below
+      }
     }
 
     var omg12, lam12, lon12;
@@ -159,8 +194,9 @@
     // sig2 = sig1 + sig12
     ssig2 = this._ssig1 * csig12 + this._csig1 * ssig12;
     csig2 = this._csig1 * csig12 - this._ssig1 * ssig12;
+    var dn2 = Math.sqrt(1 + this._k2 * m.sq(ssig2));
     if (outmask & (g.DISTANCE | g.REDUCEDLENGTH | g.GEODESICSCALE)) {
-      if (arcmode)
+      if (arcmode || Math.abs(this._f) > 0.01)
         B12 = g.SinCosSeries(true, ssig2, csig2, this._C1a, g.nC1_);
       AB1 = (1 + this._A1m1) * (B12 - this._B11);
     }
@@ -187,10 +223,9 @@
         ( sig12 + (g.SinCosSeries(true, ssig2, csig2, this._C3a, g.nC3_-1)
                    - this._B31));
       lon12 = lam12 / m.degree;
-      // Can't use AngNormalize because longitude might have wrapped multiple
-      // times.
-      lon12 = lon12 - 360 * Math.floor(lon12/360 + 0.5);
-      vals.lon2 = g.AngNormalize(this._lon1 + lon12);
+      // Use AngNormalize2 because longitude might have wrapped multiple times.
+      lon12 = m.AngNormalize2(lon12);
+      vals.lon2 = m.AngNormalize(this._lon1 + lon12);
     }
 
     if (outmask & g.LATITUDE)
@@ -202,25 +237,20 @@
 
     if (outmask & (g.REDUCEDLENGTH | g.GEODESICSCALE)) {
       var
-      ssig1sq = m.sq(this._ssig1),
-      ssig2sq = m.sq( ssig2),
-      w1 = Math.sqrt(1 + this._k2 * ssig1sq),
-      w2 = Math.sqrt(1 + this._k2 * ssig2sq),
       B22 = g.SinCosSeries(true, ssig2, csig2, this._C2a, g.nC2_),
       AB2 = (1 + this._A2m1) * (B22 - this._B21),
       J12 = (this._A1m1 - this._A2m1) * sig12 + (AB1 - AB2);
       if (outmask & g.REDUCEDLENGTH)
         // Add parens around (_csig1 * ssig2) and (_ssig1 * csig2) to ensure
         // accurate cancellation in the case of coincident points.
-        vals.m12 = this._b * ((w2 * (this._csig1 * ssig2) -
-                               w1 * (this._ssig1 * csig2))
+        vals.m12 = this._b * ((      dn2 * (this._csig1 * ssig2) -
+                               this._dn1 * (this._ssig1 * csig2))
                               - this._csig1 * csig2 * J12);
       if (outmask & g.GEODESICSCALE) {
-        vals.M12 = csig12 + (this._k2 * (ssig2sq - ssig1sq) * ssig2 / (w1 + w2)
-                             - csig2 * J12) * this._ssig1 / w1;
-        vals.M21 = csig12 - (this._k2 * (ssig2sq - ssig1sq) * this._ssig1 /
-                             (w1 + w2)
-                             - this._csig1 * J12) * ssig2 / w2;
+        var t = this._k2 * (ssig2 - this._ssig1) * (ssig2 + this._ssig1) /
+          (this._dn1 + dn2);
+        vals.M12 = csig12 + (t * ssig2 - csig2 * J12) * this._ssig1 / this._dn1;
+        vals.M21 = csig12 - (t * this._ssig1 - this._csig1 * J12) * ssig2 / dn2;
       }
     }
 
diff --git a/doc/scripts/GeographicLib/Interface.js b/doc/scripts/GeographicLib/Interface.js
index 328c147..55a2308 100644
--- a/doc/scripts/GeographicLib/Interface.js
+++ b/doc/scripts/GeographicLib/Interface.js
@@ -1,11 +1,11 @@
 /**
  * Interface.js
- * Javascript interface routines for the geodesic routines GeographicLib.
+ * JavaScript interface routines for the geodesic routines GeographicLib.
  *
- * This provides javascript-style interfaces to Math.js, Geodesic.js,
+ * This provides JavaScript-style interfaces to Math.js, Geodesic.js,
  * GeodesicLine.js, and PolygonArea.js which, in turn, are rather
  * literal translations of the following classes from GeographicLib:
- * Math, Accumulator, Geodesic, GeodesicLib, PolygonArea.  See the
+ * Math, Accumulator, Geodesic, GeodesicLine, PolygonArea.  See the
  * documentation for the C++ class for more information at
  *
  *    http://geographiclib.sourceforge.net/html/annotated.html
@@ -13,13 +13,9 @@
  * The algorithms are derived in
  *
  *    Charles F. F. Karney,
- *    Geodesics on an ellipsoid of revolution, Feb. 2011,
- *    http://arxiv.org/abs/1102.1215
- *    errata: http://geographiclib.sourceforge.net/geod-errata.html
- *
- *    Charles F. F. Karney,
- *    Algorithms for geodesics, Sept. 2011,
- *    http://arxiv.org/abs/1109.4448
+ *    Algorithms for geodesics, J. Geodesy 87, 43-55 (2013);
+ *    http://dx.doi.org/10.1007/s00190-012-0578-z
+ *    Addenda: http://geographiclib.sf.net/geod-addenda.html
  *
  * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
@@ -97,8 +93,6 @@
  * There is no need to "close" the polygon.  If polyline (default =
  * false) is true, then the points denote a polyline and its length is
  * returned as the perimeter (and the area is not calculated).
- *
- * $Id: 4fd0ab19a40a653c3e232cb9eddfb0a117dcfbde $
  **********************************************************************/
 
 (function() {
@@ -109,15 +103,15 @@
   g.Geodesic.CheckPosition = function(lat, lon) {
     if (!(Math.abs(lat) <= 90))
       throw new Error("latitude " + lat + " not in [-90, 90]");
-    if (!(lon >= -180 && lon <= 360))
-      throw new Error("longitude " + lon + " not in [-180, 360]");
-    return g.AngNormalize(lon);
+    if (!(lon >= -540 && lon < 540))
+      throw new Error("longitude " + lon + " not in [-540, 540)");
+    return m.AngNormalize(lon);
   }
 
   g.Geodesic.CheckAzimuth = function(azi) {
-    if (!(azi >= -180 && azi <= 360))
-      throw new Error("longitude " + azi + " not in [-180, 360]");
-    return g.AngNormalize(azi);
+    if (!(azi >= -540 && azi < 540))
+      throw new Error("longitude " + azi + " not in [-540, 540)");
+    return m.AngNormalize(azi);
   }
 
   g.Geodesic.CheckDistance = function(s) {
@@ -203,14 +197,14 @@
   g.Geodesic.prototype.Circle = function(lat1, lon1, azi1, s12, k) {
     if (!(Math.abs(lat1) <= 90))
       throw new Error("lat1 must be in [-90, 90]");
-    if (!(lon1 >= -180 && lon1 <= 360))
-      throw new Error("lon1 must be in [-180, 360]");
-    if (!(azi1 >= -180 && azi1 <= 360))
-      throw new Error("azi1 must be in [-180, 360]");
+    if (!(lon1 >= -540 && lon1 < 540))
+      throw new Error("lon1 must be in [-540, 540)");
+    if (!(azi1 >= -540 && azi1 < 540))
+      throw new Error("azi1 must be in [-540, 540)");
     if (!(isFinite(s12)))
       throw new Error("s12 must be a finite number");
-    if (lon1 >= 180) lon1 -= 360;
-    if (azi1 >= 180) azi1 -= 360;
+    lon1 = m.AngNormalize(lon1);
+    azi1 = m.AngNormalize(azi1);
     if (!k || k < 4) k = 24;
     var points = new Array(k + 1);
     var vals;
@@ -227,9 +221,9 @@
   g.Geodesic.prototype.Envelope = function(lat1, lon1, k, ord) {
     if (!(Math.abs(lat1) <= 90))
       throw new Error("lat1 must be in [-90, 90]");
-    if (!(lon1 >= -180 && lon1 <= 360))
-      throw new Error("lon1 must be in [-180, 360]");
-    if (lon1 >= 180) lon1 -= 360;
+    if (!(lon1 >= -540 && lon1 < 540))
+      throw new Error("lon1 must be in [-540, 540)");
+    lon1 = m.AngNormalize(lon1);
     if (!k || k < 4) k = 24;
     if (!ord) ord = 1;
     var points = new Array(k + 1);
diff --git a/doc/scripts/GeographicLib/Math.js b/doc/scripts/GeographicLib/Math.js
index 3bbac35..c13dd2c 100644
--- a/doc/scripts/GeographicLib/Math.js
+++ b/doc/scripts/GeographicLib/Math.js
@@ -1,13 +1,11 @@
 /**
  * Math.js
  * Transcription of Math.hpp, Constants.hpp, and Accumulator.hpp into
- * javascript.
+ * JavaScript.
  *
  * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
- *
- * $Id: d8f72fdee7b661e6ba3f08bb7ecfe9f0673e8132 $
  **********************************************************************/
 
 var GeographicLib; if (!GeographicLib) GeographicLib = {};
@@ -45,8 +43,51 @@ GeographicLib.Math.atanh = function(x) {
   return x < 0 ? -y : y;
 }
 
+GeographicLib.Math.sum = function(u, v) {
+  var
+  s = u + v,
+  up = s - v,
+  vpp = s - up;
+  up -= u;
+  vpp -= v;
+  t = -(up + vpp);
+  // u + v =       s      + t
+  //       = round(u + v) + t
+  return {s: s, t: t};
+}
+
+GeographicLib.Math.AngNormalize = function(x) {
+  // Place angle in [-180, 180).  Assumes x is in [-540, 540).
+  return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x);
+}
+
+GeographicLib.Math.AngNormalize2 = function(x) {
+  // Place arbitrary angle in [-180, 180).
+  return GeographicLib.Math.AngNormalize(x % 360);
+}
+
+GeographicLib.Math.AngDiff = function(x, y) {
+  // Compute y - x and reduce to [-180,180] accurately.
+  // This is the same logic as the Accumulator class uses.
+  var
+  d = y - x,
+  yp = d + x,
+  xpp = yp - d;
+  yp -= y;
+  xpp -= x;
+  var t =  xpp - yp;
+  // y - x =       d      + t
+  //       = round(y - x) + t
+  if ((d - 180) + t > 0)        // y - x > 180
+    d -= 360;                   // exact
+  else if ((d + 180) + t <= 0)  // y - x <= -180
+    d += 360;                   // exact
+  return d + t;
+}
+
 GeographicLib.Math.epsilon = Math.pow(0.5, 52);
 GeographicLib.Math.degree = Math.PI/180;
+GeographicLib.Math.digits = 53;
 
 GeographicLib.Constants = {};
 GeographicLib.Constants.WGS84 = { a: 6378137, f: 1/298.257223563 };
@@ -54,6 +95,7 @@ GeographicLib.Constants.WGS84 = { a: 6378137, f: 1/298.257223563 };
 GeographicLib.Accumulator = {};
 (function() {
   a = GeographicLib.Accumulator;
+  var m = GeographicLib.Math;
 
   a.Accumulator = function(y) {
     this.Set(y);
@@ -70,24 +112,11 @@ GeographicLib.Accumulator = {};
     }
   }
 
-  // Error free transformation of a sum.  Note that t can be the same as one
-  // of the first two arguments.
-  a.sum = function(u, v) {
-    var
-    s = u + v,
-    up = s - v,
-    vpp = s - up;
-    up -= u;
-    vpp -= v;
-    var t = -(up + vpp);
-    return {s: s, t: t};
-  }
-
   a.Accumulator.prototype.Add = function(y) {
     // Here's Shewchuk's solution...
     // Accumulate starting at least significant end
-    var u = a.sum(y, this._t);
-    var v = a.sum(u.s, this._s);
+    var u = m.sum(y, this._t);
+    var v = m.sum(u.s, this._s);
     u = u.t;
     this._s = v.s;
     this._t = v.t;
diff --git a/doc/scripts/GeographicLib/PolygonArea.js b/doc/scripts/GeographicLib/PolygonArea.js
index 54fc94b..e1e07f6 100644
--- a/doc/scripts/GeographicLib/PolygonArea.js
+++ b/doc/scripts/GeographicLib/PolygonArea.js
@@ -1,15 +1,20 @@
 /**
  * PolygonArea.js
- * Transcription of PolygonArea.[ch]pp into javascript.
+ * Transcription of PolygonArea.[ch]pp into JavaScript.
  *
  * See the documentation for the C++ class.  The conversion is a literal
  * conversion from C++.
  *
- * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
+ * The algorithms are derived in
+ *
+ *    Charles F. F. Karney,
+ *    Algorithms for geodesics, J. Geodesy 87, 43-55 (2013);
+ *    http://dx.doi.org/10.1007/s00190-012-0578-z
+ *    Addenda: http://geographiclib.sf.net/geod-addenda.html
+ *
+ * Copyright (c) Charles Karney (2011-2013) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
- *
- * $Id: cefb3a6e48907fbda0f01e8ee7d549447f46e29a $
  **********************************************************************/
 
 // Load AFTER GeographicLib/Math.js and GeographicLib/Geodesic.js
@@ -25,10 +30,10 @@ GeographicLib.PolygonArea = {};
   p.transit = function(lon1, lon2) {
     // Return 1 or -1 if crossing prime meridian in east or west direction.
     // Otherwise return zero.
-    lon1 = g.AngNormalize(lon1);
-    lon2 = g.AngNormalize(lon2);
-    // treat lon12 = -180 as an eastward geodesic, so convert to 180.
-    var lon12 = -g.AngNormalize(lon1 - lon2); // In (-180, 180]
+    // Compute lon12 the same way as Geodesic::Inverse.
+    lon1 = m.AngNormalize(lon1);
+    lon2 = m.AngNormalize(lon2);
+    var lon12 = m.AngDiff(lon1, lon2);
     var cross =
       lon1 < 0 && lon2 >= 0 && lon12 > 0 ? 1 :
       (lon2 < 0 && lon1 >= 0 && lon12 < 0 ? -1 : 0);
@@ -39,7 +44,8 @@ GeographicLib.PolygonArea = {};
     this._earth = earth;
     this._area0 = 4 * Math.PI * earth._c2;
     this._polyline = !polyline ? false : polyline;
-    this._mask = g.DISTANCE | (this._polyline ? 0 : g.AREA);
+    this._mask = g.LATITUDE | g.LONGITUDE | g.DISTANCE |
+          (this._polyline ? g.NONE : g.AREA);
     if (!this._polyline)
       this._areasum = new a.Accumulator(0);
     this._perimetersum = new a.Accumulator(0);
@@ -52,7 +58,7 @@ GeographicLib.PolygonArea = {};
     if (!this._polyline)
       this._areasum.Set(0);
     this._perimetersum.Set(0);
-    this._lat0 = this._lon0 = this._lat1 = this._lon1 = 0;
+    this._lat0 = this._lon0 = this._lat1 = this._lon1 = Number.NaN;
   }
 
   p.PolygonArea.prototype.AddPoint = function(lat, lon) {
@@ -72,6 +78,20 @@ GeographicLib.PolygonArea = {};
     ++this._num;
   }
 
+  p.PolygonArea.prototype.AddEdge = function(azi, s) {
+    if (this._num) {
+      var t = this._earth.Direct(this._lat1, this._lon1, azi, s, this._mask);
+      this._perimetersum.Add(s);
+      if (!this._polyline) {
+        this._areasum.Add(t.S12);
+        this._crossings += p.transit(this._lon1, t.lon2);
+      }
+      this._lat1 = t.lat2;
+      this._lon1 = t.lon2;
+    }
+    ++this._num;
+  }
+
   // return number, perimeter, area
   p.PolygonArea.prototype.Compute = function(reverse, sign) {
     var vals = {number: this._num};
@@ -114,7 +134,7 @@ GeographicLib.PolygonArea = {};
   }
 
   // return number, perimeter, area
-  p.TestCompute = function(lat, lon, reverse, sign) {
+  p.PolygonArea.prototype.TestPoint = function(lat, lon, reverse, sign) {
     var vals = {number: this._num + 1};
     if (this._num == 0) {
       vals.perimeter = 0;
@@ -164,6 +184,53 @@ GeographicLib.PolygonArea = {};
     return vals;
   }
 
+  // return number, perimeter, area
+  p.PolygonArea.prototype.TestEdge = function(azi, s, reverse, sign) {
+    var vals = {number: this._num ? this._num + 1 : 0};
+    if (this._num == 0)
+      return vals;
+    vals.perimeter = this._perimetersum.Sum() + s;
+    if (this._polyline)
+      return vals;
+
+    var tempsum = this._areasum.Sum();
+    var crossings = this._crossings;
+    var t;
+    t = this._earth.Direct(this._lat1, this._lon1, azi, s, this._mask);
+    tempsum += t.S12;
+    crossings += p.transit(this._lon1, t.lon2);
+    t = this._earth(t.lat2, t.lon2, this._lat0, this._lon0, this._mask);
+    perimeter += t.s12;
+    tempsum += t.S12;
+    crossings += p.transit(t.lon2, this._lon0);
+
+    if (crossings & 1)
+      tempsum += (tempsum < 0 ? 1 : -1) * this._area0/2;
+    // area is with the clockwise sense.  If !reverse convert to
+    // counter-clockwise convention.
+    if (!reverse)
+      tempsum *= -1;
+    // If sign put area in (-area0/2, area0/2], else put area in [0, area0)
+    if (sign) {
+      if (tempsum > this._area0/2)
+        tempsum -= this._area0;
+      else if (tempsum <= -this._area0/2)
+        tempsum += this._area0;
+    } else {
+      if (tempsum >= this._area0)
+        tempsum -= this._area0;
+      else if (tempsum < 0)
+        tempsum += this._area0;
+    }
+    vals.area = tempsum;
+    return vals;
+  }
+
+  p.PolygonArea.prototype.CurrentPoint = function() {
+    var vals = {lat: this._lat1, lon: this._lon1};
+    return vals;
+  }
+
   p.Area = function(earth, points, polyline) {
     var poly = new p.PolygonArea(earth, polyline);
     for (var i = 0; i < points.length; ++i)
diff --git a/doc/scripts/geod-calc.html b/doc/scripts/geod-calc.html
index 245cc9c..a6e0b09 100644
--- a/doc/scripts/geod-calc.html
+++ b/doc/scripts/geod-calc.html
@@ -1,7 +1,6 @@
 <!DOCTYPE html>
 <html>
   <head>
-    <!-- $Id: fe8c0438651b5d5f6df3cc69fee713c842fce127 $ -->
     <title>Geodesic calculations for an ellipsoid done right</title>
     <meta name="description"
 	  content="Geodesic calculations for an ellipsoid done right" />
@@ -146,7 +145,7 @@ function GeodesicArea(input, polyline) {
     result.area = t.number + " " +
       t.perimeter.toFixed(8);
     if (!polyline)
-      result.area += " " + t.area.toFixed(3);
+      result.area += " " + t.area.toFixed(2);
   }
   catch (e) {
     result.status = "ERROR: " + e.message;
@@ -164,28 +163,23 @@ function GeodesicArea(input, polyline) {
     <p>
       This page illustrates the geodesic routines available in
       <a href="http://geographiclib.sourceforge.net">GeographicLib</a>.
-      The C++ code has been converted to Javascript so the calculations
+      The C++ code has been converted to JavaScript so the calculations
       are carried out on the client.  The algorithms are considerably
       more accurate than Vincenty's method, and offer more functionality
       (an inverse method which never fails to converge, differential
       properties of the geodesic, and the area under a geodesic).  The
       algorithms are derived in
       <blockquote>
-	Charles F. F. Karney,
-	<a href="http://arxiv.org/abs/1102.1215">
-	<i>Geodesics on an ellipsoid of revolution</i></a>,<br>
-	Feb. 2011,
-	<a href="http://arxiv.org/abs/1102.1215">arXiv:1102.1215</a>
-	(<a href="http://arxiv.org/pdf/1102.1215">pdf</a>),
-	<a href="http://geographiclib.sourceforge.net/geod-errata.html">
-	  <b>errata</b></a>.
-	<br>
-	Charles F. F. Karney,
-	<a href="http://arxiv.org/abs/1109.4448">
-	<i>Algorithms for geodesics</i></a>,<br>
-	Sept. 2011,
-	<a href="http://arxiv.org/abs/1109.4448">arXiv:1109.4448</a>
-	(<a href="http://arxiv.org/pdf/1109.4448">pdf</a>).
+	Charles F. F. Karney,<br>
+	<a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+	  <i>Algorithms for geodesics</i></a>,<br>
+	J. Geodesy <b>87</b>(1), 43–55 (Jan. 2013);<br>
+	DOI:
+	<a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+	  10.1007/s00190-012-0578-z</a>
+	(<a href="http://dx.doi.org/10.1007/s00190-012-0578-z">pdf</a>);
+	addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+	  geod-addenda.html</a>.
       </blockquote>
       This page just provides a basic interface.  Enter latitudes,
       longitudes, and azimuths as degrees and distances as meters using
@@ -245,6 +239,7 @@ function GeodesicArea(input, polyline) {
 	  <option value='6'> 1um 0.0000001"</option>
 	  <option value='7'> 100nm 0.00000001"</option>
 	  <option value='8'> 10nm 0.000000001"</option>
+	  <option value='9'> 1nm 0.0000000001"</option>
 	</select>
       </p>
       <p>
@@ -308,6 +303,7 @@ function GeodesicArea(input, polyline) {
 	  <option value='6'> 1um 0.0000001"</option>
 	  <option value='7'> 100nm 0.00000001"</option>
 	  <option value='8'> 10nm 0.000000001"</option>
+	  <option value='9'> 1nm 0.0000000001"</option>
 	</select>
       </p>
       <p>
@@ -375,6 +371,7 @@ function GeodesicArea(input, polyline) {
 	  <option value='6'> 1um 0.0000001"</option>
 	  <option value='7'> 100nm 0.00000001"</option>
 	  <option value='8'> 10nm 0.000000001"</option>
+	  <option value='9'> 1nm 0.0000000001"</option>
 	</select>
       </p>
       <p>
diff --git a/doc/scripts/geod-google-instructions.html b/doc/scripts/geod-google-instructions.html
index 548f442..8d6f25c 100644
--- a/doc/scripts/geod-google-instructions.html
+++ b/doc/scripts/geod-google-instructions.html
@@ -1,7 +1,6 @@
 <!DOCTYPE html>
 <html>
   <head>
-    <!-- $Id: 63ddd76c3efcbb6ad8f6463737d873a411a1734d $ -->
     <title>
       Geodesic lines, circles, envelopes in Google Maps (instructions)
     </title>
@@ -77,7 +76,7 @@
     <p>
       The precision of output for the geodesic is 0.1" or 1 m.
       A text-only <a href="geod-calc.html">geodesic calculator</a> based
-      on the same Javascript library is also available; this calculator
+      on the same JavaScript library is also available; this calculator
       solves the inverse and direct geodesic problems, computes
       intermediate points on a geodesic, and finds the area of a
       geodesic polygon; it allows you to specify the precision of the
@@ -89,21 +88,16 @@
       <a href="http://geographiclib.sourceforge.net/">GeographicLib</a>.
       The algorithms are derived in
       <blockquote>
-	Charles F. F. Karney,
-	<a href="http://arxiv.org/abs/1102.1215">
-	<i>Geodesics on an ellipsoid of revolution</i></a>,<br>
-	Feb. 2011,
-	<a href="http://arxiv.org/abs/1102.1215">arXiv:1102.1215</a>
-	(<a href="http://arxiv.org/pdf/1102.1215">pdf</a>),
-	<a href="http://geographiclib.sourceforge.net/geod-errata.html">
-	  <b>errata</b></a>.
-	<br>
-	Charles F. F. Karney,
-	<a href="http://arxiv.org/abs/1109.4448">
-	<i>Algorithms for geodesics</i></a>,<br>
-	Sept. 2011,
-	<a href="http://arxiv.org/abs/1109.4448">arXiv:1109.4448</a>
-	(<a href="http://arxiv.org/pdf/1109.4448">pdf</a>).
+	Charles F. F. Karney,<br>
+	<a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+	  <i>Algorithms for geodesics</i></a>,<br>
+	J. Geodesy <b>87</b>(1), 43–55 (Jan. 2013);<br>
+	DOI:
+	<a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+	  10.1007/s00190-012-0578-z</a>
+	(<a href="http://dx.doi.org/10.1007/s00190-012-0578-z">pdf</a>);<br>
+	addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+	  geod-addenda.html</a>.
       </blockquote>
       In putting together this Google Maps demonstration, I started with
       the sample code
diff --git a/doc/scripts/geod-google.html b/doc/scripts/geod-google.html
index 33f6814..35576cf 100644
--- a/doc/scripts/geod-google.html
+++ b/doc/scripts/geod-google.html
@@ -1,7 +1,6 @@
 <!DOCTYPE html>
 <html>
   <head>
-    <!-- $Id: 941643e8e28fe900e50ec54c7460e39eca64588e $ -->
     <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
     <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
     <title>Geodesic lines, circles, envelopes in Google Maps</title>
diff --git a/doc/thompson-tm-graticule-a.png b/doc/thompson-tm-graticule-a.png
new file mode 100644
index 0000000..b3740ea
Binary files /dev/null and b/doc/thompson-tm-graticule-a.png differ
diff --git a/doc/thompson-tm-graticule.png b/doc/thompson-tm-graticule.png
new file mode 100644
index 0000000..ba60e4d
Binary files /dev/null and b/doc/thompson-tm-graticule.png differ
diff --git a/doc/tmseries30.html b/doc/tmseries30.html
index 290982c..26b1f93 100644
--- a/doc/tmseries30.html
+++ b/doc/tmseries30.html
@@ -1,6 +1,5 @@
 <html>
   <head>
-    <!-- $Id: f66f5f1afd6043861a344d5379cdee276154c5d2 $ -->
     <title>
       Krueger's series for the transverse Mercator projection
     </title>
diff --git a/doc/utilities.html.in b/doc/utilities.html.in
new file mode 100644
index 0000000..adadcb9
--- /dev/null
+++ b/doc/utilities.html.in
@@ -0,0 +1,24 @@
+<html>
+  <head>
+    <title>GeographicLib- at PROJECT_VERSION@ utilities</title>
+    <meta HTTP-EQUIV="Refresh"
+	  CONTENT="0; URL=http://geographiclib.sourceforge.net/@PROJECT_VERSION@/utilities.html">
+  </head>
+  <body topmargin=10 leftmargin=10>
+    <h3>
+      <blockquote>
+	<em>
+	  Online documentation for utilities for GeographicLib version
+	  @PROJECT_VERSION@ is available at
+	  <center>
+	    <a href="http://geographiclib.sourceforge.net/@PROJECT_VERSION@/utilities.html">
+	      http://geographiclib.sourceforge.net/@PROJECT_VERSION@/utilities.html</a>.
+	  </center>
+	  <br>
+	  You will be redirected there.  Click on the link to go there
+	  directly.
+	</em>
+      </blockquote>
+    </h3>
+  </body>
+</html>
diff --git a/dotnet/NETGeographicLib/Accumulator.cpp b/dotnet/NETGeographicLib/Accumulator.cpp
new file mode 100644
index 0000000..fda88f6
--- /dev/null
+++ b/dotnet/NETGeographicLib/Accumulator.cpp
@@ -0,0 +1,99 @@
+/**
+ * \file NETGeographicLib/Accumulator.cpp
+ * \brief Implementation for NETGeographicLib::Accumulator class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/Accumulator.hpp"
+#include "Accumulator.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+Accumulator::!Accumulator(void)
+{
+    if ( m_pAccumulator != NULL )
+    {
+        delete m_pAccumulator;
+        m_pAccumulator = NULL;
+    }
+}
+
+//*****************************************************************************
+Accumulator::Accumulator(void)
+{
+    try
+    {
+        m_pAccumulator = new GeographicLib::Accumulator<double>();
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr("Failed to allocate memory for a GeogrpicLib::Accumulator");
+    }
+}
+
+//*****************************************************************************
+void Accumulator::Assign( double a )
+{
+    m_pAccumulator->operator=( a);
+}
+
+//*****************************************************************************
+double Accumulator::Result()
+{
+    return m_pAccumulator->operator()();
+}
+
+//*****************************************************************************
+void Accumulator::Sum( double a )
+{
+    m_pAccumulator->operator+=( a );
+}
+
+//*****************************************************************************
+void Accumulator::Multiply( int i )
+{
+    m_pAccumulator->operator*=( i );
+}
+
+//*****************************************************************************
+bool Accumulator::operator == ( Accumulator^ lhs, double a )
+{
+    return lhs->m_pAccumulator->operator==( a );
+}
+
+//*****************************************************************************
+bool Accumulator::operator != ( Accumulator^ lhs, double a )
+{
+    return lhs->m_pAccumulator->operator!=( a );
+}
+
+//*****************************************************************************
+bool Accumulator::operator < ( Accumulator^ lhs, double a )
+{
+    return lhs->m_pAccumulator->operator<( a );
+}
+
+//*****************************************************************************
+bool Accumulator::operator <= ( Accumulator^ lhs, double a )
+{
+    return lhs->m_pAccumulator->operator<=( a );
+}
+
+//*****************************************************************************
+bool Accumulator::operator > ( Accumulator^ lhs, double a )
+{
+    return lhs->m_pAccumulator->operator>( a );
+}
+
+//*****************************************************************************
+bool Accumulator::operator >= ( Accumulator^ lhs, double a )
+{
+    return lhs->m_pAccumulator->operator>=( a );
+}
diff --git a/dotnet/NETGeographicLib/Accumulator.h b/dotnet/NETGeographicLib/Accumulator.h
new file mode 100644
index 0000000..825306f
--- /dev/null
+++ b/dotnet/NETGeographicLib/Accumulator.h
@@ -0,0 +1,116 @@
+#pragma once
+/**
+ * \file NETGeographicLib/Accumulator.h
+ * \brief Header for NETGeographicLib::Accumulator class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    /*!
+    \brief .NET wrapper for GeographicLib::Accumulator.
+
+    This class allows .NET applications to access GeographicLib::Accumulator<double>.
+
+    This allow many numbers of floating point type \e double to be added together
+    with twice the normal precision.  The effective
+    precision of the sum is 106 bits or about 32 decimal places.
+
+    The implementation follows J. R. Shewchuk,
+    <a href="http://dx.doi.org/10.1007/PL00009321"> Adaptive Precision
+    Floating-Point Arithmetic and Fast Robust Geometric Predicates</a>,
+    Discrete & Computational Geometry 18(3) 305--363 (1997).
+
+    C# Example:
+    \include example-Accumulator.cs
+    Managed C++ Example:
+    \include example-Accumulator.cpp
+    Visual Basic Example:
+    \include example-Accumulator.vb
+
+    <B>INTERFACE DIFFERENCES:</B><BR>
+    Since assignment operators (=,+=,-=,*=) are not supported in managed classes;
+    - the Assign() method replaces the = operator,
+    - the Sum() method replaces the += and -= operators, and
+    - the Multiply() method replaces the *= operator,
+
+    Use Result() instead of the () operator to obtain the summed value from the accumulator.
+    */
+    public ref class Accumulator
+    {
+    private:
+        // Pointer to the unmanaged GeographicLib::Accumulator.
+        GeographicLib::Accumulator<double>* m_pAccumulator;
+        // The finalizer releases the unmanaged object when this class is destroyrd.
+        !Accumulator(void);
+    public:
+        //! \brief Constructor.
+        Accumulator(void);
+        //! \brief Destructor calls the finalizer.
+        ~Accumulator() { this->!Accumulator(); }
+        /*!
+        \brief Assigns a value to an accumulator.
+        \param[in] a The value to be assigned.
+        */
+        void Assign( double a );
+        //! \brief Returns the accumulated value.
+        double Result();
+        /*!
+        \brief Adds a value to the accumulator.
+        \param[in] a The value to be added.
+        */
+        void Sum( double a );
+        /*!
+        \brief Multiplication by an integer
+        \param[in] i The multiplier.
+        */
+        void Multiply( int i );
+        /*!
+        \brief Equality operator.
+        \param[in] lhs The accumulator.
+        \param[in] a The value to be compared to.
+        \return true if the accumulated value is equal to a.
+        */
+        static bool operator == ( Accumulator^ lhs, double a );
+        /*!
+        \brief Inequality operator.
+        \param[in] lhs The accumulator.
+        \param[in] a The value to be compared to.
+        \return true if the accumulated value is not equal to a.
+        */
+        static bool operator != ( Accumulator^ lhs, double a );
+        /*!
+        \brief Less than operator.
+        \param[in] lhs The accumulator.
+        \param[in] a The value to be compared to.
+        \return true if the accumulated value is less than a.
+        */
+        static bool operator < ( Accumulator^ lhs, double a );
+        /*!
+        \brief Less than or equal to operator.
+        \param[in] lhs The accumulator.
+        \param[in] a The value to be compared to.
+        \return true if the accumulated value is less than or equal to a.
+        */
+        static bool operator <= ( Accumulator^ lhs, double a );
+        /*!
+        \brief Greater than operator.
+        \param[in] lhs The accumulator.
+        \param[in] a The value to be compared to.
+        \return true if the accumulated value is greater than a.
+        */
+        static bool operator > ( Accumulator^ lhs, double a );
+        /*!
+        \brief Greater than or equal to operator.
+        \param[in] lhs The accumulator.
+        \param[in] a The value to be compared to.
+        \return true if the accumulated value is greater than or equal to a.
+        */
+        static bool operator >= ( Accumulator^ lhs, double a );
+    };
+} //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/AlbersEqualArea.cpp b/dotnet/NETGeographicLib/AlbersEqualArea.cpp
new file mode 100644
index 0000000..87a3160
--- /dev/null
+++ b/dotnet/NETGeographicLib/AlbersEqualArea.cpp
@@ -0,0 +1,186 @@
+/**
+ * \file NETGeographicLib/AlbersEqualArea.cpp
+ * \brief Implementation for NETGeographicLib::AlbersEqualArea class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/AlbersEqualArea.hpp"
+#include "AlbersEqualArea.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+AlbersEqualArea::!AlbersEqualArea()
+{
+    if ( m_pAlbersEqualArea != NULL )
+    {
+        delete m_pAlbersEqualArea;
+        m_pAlbersEqualArea = NULL;
+    }
+}
+
+//*****************************************************************************
+AlbersEqualArea::AlbersEqualArea( StandardTypes type )
+{
+    try
+    {
+        switch ( type )
+        {
+        case StandardTypes::CylindricalEqualArea:
+            m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( GeographicLib::AlbersEqualArea::CylindricalEqualArea );
+            break;
+        case StandardTypes::AzimuthalEqualAreaNorth:
+            m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( GeographicLib::AlbersEqualArea::AzimuthalEqualAreaNorth );
+            break;
+        case StandardTypes::AzimuthalEqualAreaSouth:
+            m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( GeographicLib::AlbersEqualArea::AzimuthalEqualAreaSouth );
+            break;
+        }
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a GeographicLib::AlbersEqualArea" );
+    }
+}
+
+//*****************************************************************************
+AlbersEqualArea::AlbersEqualArea(double a, double f, double stdlat1, double stdlat2, double k1)
+{
+    try
+    {
+        m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( a, f, stdlat1, stdlat2, k1 );
+    }
+    catch ( GeographicLib::GeographicErr err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a GeographicLib::AlbersEqualArea" );
+    }
+}
+
+//*****************************************************************************
+AlbersEqualArea::AlbersEqualArea(double a, double f, double stdlat, double k0)
+{
+    try
+    {
+        m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( a, f, stdlat, k0 );
+    }
+    catch ( GeographicLib::GeographicErr err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a GeographicLib::AlbersEqualArea" );
+    }
+}
+
+//*****************************************************************************
+AlbersEqualArea::AlbersEqualArea(double a, double f,
+                        double sinlat1, double coslat1,
+                        double sinlat2, double coslat2,
+                        double k1)
+{
+    try
+    {
+        m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea(
+            a, f, sinlat1, coslat1, sinlat2, coslat2, k1 );
+    }
+    catch ( GeographicLib::GeographicErr err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a GeographicLib::AlbersEqualArea" );
+    }
+}
+
+//*****************************************************************************
+void AlbersEqualArea::SetScale(double lat, double k)
+{
+    try
+    {
+        m_pAlbersEqualArea->SetScale( lat, k );
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+}
+
+//*****************************************************************************
+void AlbersEqualArea::Forward(double lon0, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y,
+                [System::Runtime::InteropServices::Out] double% gamma,
+                [System::Runtime::InteropServices::Out] double% k)
+{
+    double lx, ly, lgamma, lk;
+    m_pAlbersEqualArea->Forward( lon0, lat, lon, lx, ly, lgamma, lk );
+    x = lx;
+    y = ly;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void AlbersEqualArea::Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k)
+{
+    double llat, llon, lgamma, lk;
+    m_pAlbersEqualArea->Reverse( lon0, x, y, llat, llon, lgamma, lk );
+    lat = llat;
+    lon = llon;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void AlbersEqualArea::Forward(double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y)
+{
+    double lx, ly, lgamma, lk;
+    m_pAlbersEqualArea->Forward( lon0, lat, lon, lx, ly, lgamma, lk );
+    x = lx;
+    y = ly;
+}
+
+//*****************************************************************************
+void AlbersEqualArea::Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon, lgamma, lk;
+    m_pAlbersEqualArea->Reverse( lon0, x, y, llat, llon, lgamma, lk );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double AlbersEqualArea::MajorRadius::get()
+{ return m_pAlbersEqualArea->MajorRadius(); }
+
+//*****************************************************************************
+double AlbersEqualArea::Flattening::get()
+{ return m_pAlbersEqualArea->Flattening(); }
+
+//*****************************************************************************
+double AlbersEqualArea::OriginLatitude::get()
+{ return m_pAlbersEqualArea->OriginLatitude(); }
+
+//*****************************************************************************
+double AlbersEqualArea::CentralScale::get()
+{ return m_pAlbersEqualArea->CentralScale(); }
diff --git a/dotnet/NETGeographicLib/AlbersEqualArea.h b/dotnet/NETGeographicLib/AlbersEqualArea.h
new file mode 100644
index 0000000..c110517
--- /dev/null
+++ b/dotnet/NETGeographicLib/AlbersEqualArea.h
@@ -0,0 +1,269 @@
+#pragma once
+/**
+ * \file NETGeographicLib/AlbersEqualArea.h
+ * \brief Header for NETGeographicLib::AlbersEqualArea class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET Wrapper for GeographicLib::AlbersEqualArea.
+   *
+   * This class allows .NET applications to access
+   * GeographicLib::AlbersEqualArea
+   *
+   * Implementation taken from the report,
+   * - J. P. Snyder,
+   *   <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"> Map Projections: A
+   *   Working Manual</a>, USGS Professional Paper 1395 (1987),
+   *   pp. 101--102.
+   *
+   * This is a implementation of the equations in Snyder except that divided
+   * differences will be [have been] used to transform the expressions into
+   * ones which may be evaluated accurately.  [In this implementation, the
+   * projection correctly becomes the cylindrical equal area or the azimuthal
+   * equal area projection when the standard latitude is the equator or a
+   * pole.]
+   *
+   * The ellipsoid parameters, the standard parallels, and the scale on the
+   * standard parallels are set in the constructor.  Internally, the case with
+   * two standard parallels is converted into a single standard parallel, the
+   * latitude of minimum azimuthal scale, with an azimuthal scale specified on
+   * this parallel.  This latitude is also used as the latitude of origin which
+   * is returned by AlbersEqualArea::OriginLatitude.  The azimuthal scale on
+   * the latitude of origin is given by AlbersEqualArea::CentralScale.  The
+   * case with two standard parallels at opposite poles is singular and is
+   * disallowed.  The central meridian (which is a trivial shift of the
+   * longitude) is specified as the \e lon0 argument of the
+   * AlbersEqualArea::Forward and AlbersEqualArea::Reverse functions.
+   * AlbersEqualArea::Forward and AlbersEqualArea::Reverse also return the
+   * meridian convergence, γ, and azimuthal scale, \e k.  A small square
+   * aligned with the cardinal directions is projected to a rectangle with
+   * dimensions \e k (in the E-W direction) and 1/\e k (in the N-S direction).
+   * The E-W sides of the rectangle are oriented γ degrees
+   * counter-clockwise from the \e x axis.  There is no provision in this class
+   * for specifying a false easting or false northing or a different latitude
+   * of origin.
+   *
+   * C# Example:
+   * \include example-AlbersEqualArea.cs
+   * Managed C++ Example:
+   * \include example-AlbersEqualArea.cpp
+   * Visual Basic Example:
+   * \include example-AlbersEqualArea.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A constructor has been provided that creates the standard projections.
+   *
+   * The MajorRadius, Flattening, OriginLatitude, and CentralScale functions
+   * are implemented as properties.
+   **********************************************************************/
+    public ref class AlbersEqualArea
+    {
+    private:
+        // pointer to the unmanaged GeographicLib::AlbersEqualArea
+        GeographicLib::AlbersEqualArea* m_pAlbersEqualArea;
+
+        // Frees the unmanaged m_pAlbersEqualArea when object is destroyed.
+        !AlbersEqualArea();
+    public:
+        /**
+         Standard AlbersEqualAreaProjections that assume the WGS84 ellipsoid.
+         *********************************************************************/
+        enum class StandardTypes
+        {
+            CylindricalEqualArea,       //!< cylindrical equal area projection (stdlat = 0, and \e k0 = 1)
+            AzimuthalEqualAreaNorth,    //!< Lambert azimuthal equal area projection (stdlat = 90°, and \e k0 = 1)
+            AzimuthalEqualAreaSouth     //!< Lambert azimuthal equal area projection (stdlat = −90°, and \e k0 = 1)
+        };
+
+        //! \brief Destructor
+        ~AlbersEqualArea() { this->!AlbersEqualArea(); }
+
+        /**!
+         * Constructor for one of the standard types.
+         * @param[in] type The desired standard type.
+         **********************************************************************/
+        AlbersEqualArea( StandardTypes type );
+
+        /**
+         * Constructor with a single standard parallel.
+         *
+         * @param[in] a equatorial radius of ellipsoid (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @param[in] stdlat standard parallel (degrees), the circle of tangency.
+         * @param[in] k0 azimuthal scale on the standard parallel.
+         * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+         *   not positive.
+         * @exception GeographicErr if \e stdlat is not in [−90°,
+         *   90°].
+         **********************************************************************/
+        AlbersEqualArea(double a, double f, double stdlat, double k0);
+
+        /**
+         * Constructor with two standard parallels.
+         *
+         * @param[in] a equatorial radius of ellipsoid (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @param[in] stdlat1 first standard parallel (degrees).
+         * @param[in] stdlat2 second standard parallel (degrees).
+         * @param[in] k1 azimuthal scale on the standard parallels.
+         * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+         *   not positive.
+         * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
+         *   [−90°, 90°], or if \e stdlat1 and \e stdlat2 are
+         *   opposite poles.
+         **********************************************************************/
+        AlbersEqualArea(double a, double f, double stdlat1, double stdlat2, double k1);
+
+        /**
+         * Constructor with two standard parallels specified by sines and cosines.
+         *
+         * @param[in] a equatorial radius of ellipsoid (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @param[in] sinlat1 sine of first standard parallel.
+         * @param[in] coslat1 cosine of first standard parallel.
+         * @param[in] sinlat2 sine of second standard parallel.
+         * @param[in] coslat2 cosine of second standard parallel.
+         * @param[in] k1 azimuthal scale on the standard parallels.
+         * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+         *   not positive.
+         * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
+         *   [−90°, 90°], or if \e stdlat1 and \e stdlat2 are
+         *   opposite poles.
+         *
+         * This allows parallels close to the poles to be specified accurately.
+         * This routine computes the latitude of origin and the azimuthal scale at
+         * this latitude.  If \e dlat = abs(\e lat2 − \e lat1) ≤ 160°,
+         * then the error in the latitude of origin is less than 4.5 ×
+         * 10<sup>−14</sup>d;.
+         **********************************************************************/
+        AlbersEqualArea(double a, double f,
+                        double sinlat1, double coslat1,
+                        double sinlat2, double coslat2,
+                        double k1);
+
+        /**
+         * Set the azimuthal scale for the projection.
+         *
+         * @param[in] lat (degrees).
+         * @param[in] k azimuthal scale at latitude \e lat (default 1).
+         * @exception GeographicErr \e k is not positive.
+         * @exception GeographicErr if \e lat is not in (−90°,
+         *   90°).
+         *
+         * This allows a "latitude of conformality" to be specified.
+         **********************************************************************/
+        void SetScale(double lat, double k);
+
+        /**
+         * Forward projection, from geographic to Lambert conformal conic.
+         *
+         * @param[in] lon0 central meridian longitude (degrees).
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k azimuthal scale of projection at point; the radial
+         *   scale is the 1/\e k.
+         *
+         * The latitude origin is given by AlbersEqualArea::LatitudeOrigin().  No
+         * false easting or northing is added and \e lat should be in the range
+         * [−90°, 90°]; \e lon and \e lon0 should be in the
+         * range [−540°, 540°).  The values of \e x and \e y
+         * returned for points which project to infinity (i.e., one or both of the
+         * poles) will be large but finite.
+         **********************************************************************/
+        void Forward(double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * Reverse projection, from Lambert conformal conic to geographic.
+         *
+         * @param[in] lon0 central meridian longitude (degrees).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k azimuthal scale of projection at point; the radial
+         *   scale is the 1/\e k.
+         *
+         * The latitude origin is given by AlbersEqualArea::LatitudeOrigin().  No
+         * false easting or northing is added.  \e lon0 should be in the range
+         * [−540°, 540°).  The value of \e lon returned is in
+         * the range [−180°, 180°).  The value of \e lat
+         * returned is in the range [−90°, 90°].  If the
+         * input point is outside the legal projected space the nearest pole is
+         * returned.
+         **********************************************************************/
+        void Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * AlbersEqualArea::Forward without returning the convergence and
+         * scale.
+         **********************************************************************/
+        void Forward(double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y);
+
+        /**
+         * AlbersEqualArea::Reverse without returning the convergence and
+         * scale.
+         **********************************************************************/
+        void Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value used in
+         *   the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return latitude of the origin for the projection (degrees).
+         *
+         * This is the latitude of minimum azimuthal scale and equals the \e stdlat
+         * in the 1-parallel constructor and lies between \e stdlat1 and \e stdlat2
+         * in the 2-parallel constructors.
+         **********************************************************************/
+        property double OriginLatitude { double get(); }
+
+        /**
+         * @return central scale for the projection.  This is the azimuthal scale
+         *   on the latitude of origin.
+         **********************************************************************/
+        property double CentralScale { double get(); }
+        ///@}
+    };
+} // namespace NETGeographic
diff --git a/dotnet/NETGeographicLib/AssemblyInfo.cpp b/dotnet/NETGeographicLib/AssemblyInfo.cpp
new file mode 100644
index 0000000..579e0f9
--- /dev/null
+++ b/dotnet/NETGeographicLib/AssemblyInfo.cpp
@@ -0,0 +1,43 @@
+#include "stdafx.h"
+
+using namespace System;
+using namespace System::Reflection;
+using namespace System::Runtime::CompilerServices;
+using namespace System::Runtime::InteropServices;
+using namespace System::Security::Permissions;
+
+//
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly:AssemblyTitleAttribute("NETGeographic")];
+[assembly:AssemblyDescriptionAttribute(".NET Interface for GeographicLib")];
+[assembly:AssemblyConfigurationAttribute("1.33")];
+[assembly:AssemblyCompanyAttribute("Open Source")];
+[assembly:AssemblyProductAttribute("NETGeographic")];
+[assembly:AssemblyCopyrightAttribute("GeographicLib copyright (c) Charles Karney 2013\nNETGeographicLib copyright (c) Scott Heiman 2013")];
+[assembly:AssemblyTrademarkAttribute("")];
+[assembly:AssemblyCultureAttribute("")];
+
+//
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the value or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+
+[assembly:AssemblyVersionAttribute("1.33.*")];
+
+[assembly:ComVisible(false)];
+
+[assembly:CLSCompliantAttribute(true)];
+
+#if _MSC_VER < 1800
+// RequestMinium marked as obsolete in Visual Studio 12 (2013)
+[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
+#endif
diff --git a/dotnet/NETGeographicLib/AzimuthalEquidistant.cpp b/dotnet/NETGeographicLib/AzimuthalEquidistant.cpp
new file mode 100644
index 0000000..5279ee9
--- /dev/null
+++ b/dotnet/NETGeographicLib/AzimuthalEquidistant.cpp
@@ -0,0 +1,110 @@
+/**
+ * \file NETGeographicLib/AzimuthalEquidistant.cpp
+ * \brief Implementation for NETGeographicLib::AzimuthalEquidistant class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/AzimuthalEquidistant.hpp"
+#include "AzimuthalEquidistant.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::AzimuthalEquidistant";
+
+//*****************************************************************************
+AzimuthalEquidistant::!AzimuthalEquidistant()
+{
+    if ( m_pAzimuthalEquidistant != NULL )
+    {
+        delete m_pAzimuthalEquidistant;
+        m_pAzimuthalEquidistant = NULL;
+    }
+}
+
+//*****************************************************************************
+AzimuthalEquidistant::AzimuthalEquidistant(void)
+{
+    try
+    {
+        m_pAzimuthalEquidistant = new GeographicLib::AzimuthalEquidistant( GeographicLib::Geodesic::WGS84 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+AzimuthalEquidistant::AzimuthalEquidistant( Geodesic^ g )
+{
+    try
+    {
+        const GeographicLib::Geodesic* pGeodesic =
+            reinterpret_cast<const GeographicLib::Geodesic*>(
+                g->GetUnmanaged()->ToPointer() );
+        m_pAzimuthalEquidistant = new GeographicLib::AzimuthalEquidistant( *pGeodesic );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void AzimuthalEquidistant::Forward(double lat0, double lon0, double lat, double lon,
+                double% x, double% y, double% azi, double% rk)
+{
+    double lx, ly, lazi, lrk;
+    m_pAzimuthalEquidistant->Forward( lat0, lon0, lat, lon,
+            lx, ly, lazi, lrk );
+    x = lx;
+    y = ly;
+    azi = lazi;
+    rk = lrk;
+}
+
+//*****************************************************************************
+void AzimuthalEquidistant::Reverse(double lat0, double lon0, double x, double y,
+                double% lat, double% lon, double% azi, double% rk)
+{
+    double llat, llon, lazi, lrk;
+    m_pAzimuthalEquidistant->Reverse(lat0, lon0, x, y,
+            llat, llon, lazi, lrk);
+    lat = llat;
+    lon = llon;
+    azi = lazi;
+    rk = lrk;
+}
+//*****************************************************************************
+void AzimuthalEquidistant::Forward(double lat0, double lon0, double lat, double lon,
+                double% x, double% y)
+{
+    double azi, rk, lx, ly;
+    m_pAzimuthalEquidistant->Forward(lat0, lon0, lat, lon, lx, ly, azi, rk);
+    x = lx;
+    y = ly;
+}
+
+//*****************************************************************************
+void AzimuthalEquidistant::Reverse(double lat0, double lon0, double x, double y,
+                double% lat, double% lon)
+{
+    double azi, rk, llat, llon;
+    m_pAzimuthalEquidistant->Reverse(lat0, lon0, x, y, llat, llon, azi, rk);
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double AzimuthalEquidistant::MajorRadius::get()
+{ return m_pAzimuthalEquidistant->MajorRadius(); }
+
+//*****************************************************************************
+double AzimuthalEquidistant::Flattening::get()
+{ return m_pAzimuthalEquidistant->Flattening(); }
diff --git a/dotnet/NETGeographicLib/AzimuthalEquidistant.h b/dotnet/NETGeographicLib/AzimuthalEquidistant.h
new file mode 100644
index 0000000..ab0643f
--- /dev/null
+++ b/dotnet/NETGeographicLib/AzimuthalEquidistant.h
@@ -0,0 +1,161 @@
+/**
+ * \file NETGeographicLib/AzimuthalEquidistant.h
+ * \brief Header for NETGeographicLib::AzimuthalEquidistant class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+#include "Geodesic.h"
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::AzimuthalEquidistant.
+   *
+   * This class allows .NET applications to access GeographicLib::AzimuthalEquidistant.
+   *
+   * Azimuthal equidistant projection centered at an arbitrary position on the
+   * ellipsoid.  For a point in projected space (\e x, \e y), the geodesic
+   * distance from the center position is hypot(\e x, \e y) and the azimuth of
+   * the geodesic from the center point is atan2(\e x, \e y).  The Forward and
+   * Reverse methods also return the azimuth \e azi of the geodesic at (\e x,
+   * \e y) and reciprocal scale \e rk in the azimuthal direction which,
+   * together with the basic properties of the projection, serve to specify
+   * completely the local affine transformation between geographic and
+   * projected coordinates.
+   *
+   * The conversions all take place using a Geodesic object (by default
+   * Geodesic::WGS84).  For more information on geodesics see \ref geodesic.
+   *
+   * C# Example:
+   * \include example-AzimuthalEquidistant.cs
+   * Managed C++ Example:
+   * \include example-AzimuthalEquidistant.cpp
+   * Visual Basic Example:
+   * \include example-AzimuthalEquidistant.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor is provided that assumes a WGS84 ellipsoid.
+   *
+   * The MajorRadius and Flattening functions are implemented as
+   * properties.
+   **********************************************************************/
+    public ref class AzimuthalEquidistant
+    {
+    private:
+        // Pointer to the unmanaged GeographicLib::AzimuthalEquidistant
+        const GeographicLib::AzimuthalEquidistant* m_pAzimuthalEquidistant;
+
+        // Frees the unmanaged memory when the object is destroyed.
+        !AzimuthalEquidistant();
+    public:
+        /**
+         * Default Constructor for AzimuthalEquidistant.
+         * Assumes WGS84 Geodesic
+         **********************************************************************/
+        AzimuthalEquidistant(void);
+
+        /**
+         * Constructor for AzimuthalEquidistant.
+         *
+         * @param[in] earth the Geodesic object to use for geodesic calculations.
+         **********************************************************************/
+        AzimuthalEquidistant( Geodesic^ earth );
+
+        /**
+         * Destructor
+         *
+         * frees unmanaged memory.
+         **********************************************************************/
+        ~AzimuthalEquidistant()
+        { this->!AzimuthalEquidistant(); }
+
+        /**
+         * Forward projection, from geographic to azimuthal equidistant.
+         *
+         * @param[in] lat0 latitude of center point of projection (degrees).
+         * @param[in] lon0 longitude of center point of projection (degrees).
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] azi azimuth of geodesic at point (degrees).
+         * @param[out] rk reciprocal of azimuthal scale at point.
+         *
+         * \e lat0 and \e lat should be in the range [−90°,
+         * 90°] and \e lon0 and \e lon should be in the range
+         * [−540°, 540°).  The scale of the projection is 1
+         * in the "radial" direction, \e azi clockwise from true north, and is 1/\e
+         * rk in the direction perpendicular to this.  A call to Forward followed
+         * by a call to Reverse will return the original (\e lat, \e lon) (to
+         * within roundoff).
+         **********************************************************************/
+        void Forward(double lat0, double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y,
+                     [System::Runtime::InteropServices::Out] double% azi,
+                     [System::Runtime::InteropServices::Out] double% rk);
+
+        /**
+         * Reverse projection, from azimuthal equidistant to geographic.
+         *
+         * @param[in] lat0 latitude of center point of projection (degrees).
+         * @param[in] lon0 longitude of center point of projection (degrees).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] azi azimuth of geodesic at point (degrees).
+         * @param[out] rk reciprocal of azimuthal scale at point.
+         *
+         * \e lat0 should be in the range [−90°, 90°] and \e
+         * lon0 should be in the range [−540°, 540°).  \e lat
+         * will be in the range [−90°, 90°] and \e lon will
+         * be in the range [−180°, 180°).  The scale of the
+         * projection is 1 in the "radial" direction, \e azi clockwise from true
+         * north, and is 1/\e rk in the direction perpendicular to this.  A call to
+         * Reverse followed by a call to Forward will return the original (\e x, \e
+         * y) (to roundoff) only if the geodesic to (\e x, \e y) is a shortest
+         * path.
+         **********************************************************************/
+        void Reverse(double lat0, double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     [System::Runtime::InteropServices::Out] double% azi,
+                     [System::Runtime::InteropServices::Out] double% rk);
+
+        /**
+         * AzimuthalEquidistant::Forward without returning the azimuth and scale.
+         **********************************************************************/
+        void Forward(double lat0, double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y);
+
+        /**
+         * AzimuthalEquidistant::Reverse without returning the azimuth and scale.
+         **********************************************************************/
+        void Reverse(double lat0, double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/CMakeLists.txt b/dotnet/NETGeographicLib/CMakeLists.txt
new file mode 100644
index 0000000..664b1bc
--- /dev/null
+++ b/dotnet/NETGeographicLib/CMakeLists.txt
@@ -0,0 +1,42 @@
+# Build the .NET library...
+
+# Include all the .cpp files in the library.
+file (GLOB SOURCES [A-Za-z]*.cpp)
+file (GLOB HEADERS [A-Za-z]*.h)
+
+add_library (${NETGEOGRAPHICLIB_LIBRARIES} SHARED ${SOURCES} ${HEADERS})
+set_target_properties (${NETGEOGRAPHICLIB_LIBRARIES}
+  PROPERTIES COMPILE_FLAGS "/clr")
+
+string (REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+string (REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+
+add_definitions (${PROJECT_DEFINITIONS})
+target_link_libraries (${NETGEOGRAPHICLIB_LIBRARIES} ${PROJECT_LIBRARIES})
+
+# Set the version number on the library
+set_target_properties (${NETGEOGRAPHICLIB_LIBRARIES} PROPERTIES
+  VERSION "${LIBVERSIONFULL}" OUTPUT_NAME ${NETLIBNAME}
+  PDB_NAME ${NETLIBNAME}${CMAKE_DEBUG_POSTFIX})
+
+# Specify where the library is installed, adding it to the export depends
+install (TARGETS ${NETGEOGRAPHICLIB_LIBRARIES}
+  EXPORT depends
+  RUNTIME DESTINATION bin)
+
+if (PACKAGE_DEBUG_LIBS)
+  install (PROGRAMS
+    "${CMAKE_CURRENT_BINARY_DIR}/Debug/${NETLIBNAME}${CMAKE_DEBUG_POSTFIX}.dll"
+    DESTINATION bin CONFIGURATIONS Release)
+endif ()
+
+# Install pdb file in debug mode.
+get_target_property (_P ${NETGEOGRAPHICLIB_LIBRARIES} LOCATION_DEBUG)
+get_filename_component (_P ${_P} PATH)
+get_target_property (_N ${NETGEOGRAPHICLIB_LIBRARIES} PDB_NAME)
+set (_PDB ${_P}/${_N}.pdb)
+install (FILES ${_PDB} DESTINATION bin
+  RENAME ${NETLIBNAME}${CMAKE_DEBUG_POSTFIX}.pdb CONFIGURATIONS Debug)
+
+# Put all the library into a folder in the IDE
+set_property (TARGET ${NETGEOGRAPHICLIB_LIBRARIES} PROPERTY FOLDER library)
diff --git a/dotnet/NETGeographicLib/CassiniSoldner.cpp b/dotnet/NETGeographicLib/CassiniSoldner.cpp
new file mode 100644
index 0000000..cfaa96a
--- /dev/null
+++ b/dotnet/NETGeographicLib/CassiniSoldner.cpp
@@ -0,0 +1,134 @@
+/**
+ * \file NETGeographicLib/CassiniSoldner.cpp
+ * \brief Implementation for NETGeographicLib::CassiniSoldner class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/CassiniSoldner.hpp"
+#include "Geodesic.h"
+#include "CassiniSoldner.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::CassiniSoldner";
+
+//*****************************************************************************
+CassiniSoldner::!CassiniSoldner()
+{
+    if ( m_pCassiniSoldner != NULL )
+    {
+        delete m_pCassiniSoldner;
+        m_pCassiniSoldner = NULL;
+    }
+}
+
+//*****************************************************************************
+CassiniSoldner::CassiniSoldner(double lat0, double lon0)
+{
+    try
+    {
+        m_pCassiniSoldner = new GeographicLib::CassiniSoldner( GeographicLib::Geodesic::WGS84 );
+        m_pCassiniSoldner->Reset(lat0, lon0);
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+CassiniSoldner::CassiniSoldner(double lat0, double lon0,
+                Geodesic^ earth )
+{
+    try
+    {
+        const GeographicLib::Geodesic* pGeodesic =
+            reinterpret_cast<const GeographicLib::Geodesic*>(
+                earth->GetUnmanaged()->ToPointer() );
+        m_pCassiniSoldner = new GeographicLib::CassiniSoldner( *pGeodesic );
+        m_pCassiniSoldner->Reset(lat0, lon0);
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void CassiniSoldner::Reset(double lat0, double lon0)
+{
+    m_pCassiniSoldner->Reset(lat0, lon0);
+}
+
+//*****************************************************************************
+void CassiniSoldner::Forward(double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y,
+                [System::Runtime::InteropServices::Out] double% azi,
+                [System::Runtime::InteropServices::Out] double% rk)
+{
+    double lx, ly, lazi, lrk;
+    m_pCassiniSoldner->Forward(lat, lon, lx, ly, lazi, lrk);
+    x = lx;
+    y = ly;
+    azi = lazi;
+    rk = lrk;
+}
+
+//*****************************************************************************
+void CassiniSoldner::Reverse(double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon,
+                [System::Runtime::InteropServices::Out] double% azi,
+                [System::Runtime::InteropServices::Out] double% rk)
+{
+    double llat, llon, lazi, lrk;
+    m_pCassiniSoldner->Reverse( x, y, llat, llon, lazi, lrk );
+    lat = llat;
+    lon = llon;
+    azi = lazi;
+    rk = lrk;
+}
+//*****************************************************************************
+void CassiniSoldner::Forward(double lat, double lon,
+    [System::Runtime::InteropServices::Out] double% x,
+    [System::Runtime::InteropServices::Out] double% y)
+{
+    double lx, ly, azi, rk;
+    m_pCassiniSoldner->Forward(lat, lon, lx, ly, azi, rk);
+    x = lx;
+    y = ly;
+}
+
+//*****************************************************************************
+void CassiniSoldner::Reverse(double x, double y,
+    [System::Runtime::InteropServices::Out] double% lat,
+    [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon, lazi, lrk;
+    m_pCassiniSoldner->Reverse( x, y, llat, llon, lazi, lrk );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double CassiniSoldner::LatitudeOrigin::get()
+{ return m_pCassiniSoldner->LatitudeOrigin(); }
+
+//*****************************************************************************
+double CassiniSoldner::LongitudeOrigin::get()
+{ return m_pCassiniSoldner->LongitudeOrigin(); }
+
+//*****************************************************************************
+double CassiniSoldner::MajorRadius::get()
+{ return m_pCassiniSoldner->MajorRadius(); }
+
+//*****************************************************************************
+double CassiniSoldner::Flattening::get()
+{ return m_pCassiniSoldner->Flattening(); }
diff --git a/dotnet/NETGeographicLib/CassiniSoldner.h b/dotnet/NETGeographicLib/CassiniSoldner.h
new file mode 100644
index 0000000..7150da0
--- /dev/null
+++ b/dotnet/NETGeographicLib/CassiniSoldner.h
@@ -0,0 +1,201 @@
+/**
+ * \file NETGeographicLib/CassiniSoldner.h
+ * \brief Header for NETGeographicLib::CassiniSoldner class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::CassiniSoldner.
+   *
+   * This class allows .NET applications to access GeographicLib::CassiniSoldner.
+   *
+   * Cassini-Soldner projection centered at an arbitrary position, \e lat0, \e
+   * lon0, on the ellipsoid.  This projection is a transverse cylindrical
+   * equidistant projection.  The projection from (\e lat, \e lon) to easting
+   * and northing (\e x, \e y) is defined by geodesics as follows.  Go north
+   * along a geodesic a distance \e y from the central point; then turn
+   * clockwise 90° and go a distance \e x along a geodesic.
+   * (Although the initial heading is north, this changes to south if the pole
+   * is crossed.)  This procedure uniquely defines the reverse projection.  The
+   * forward projection is constructed as follows.  Find the point (\e lat1, \e
+   * lon1) on the meridian closest to (\e lat, \e lon).  Here we consider the
+   * full meridian so that \e lon1 may be either \e lon0 or \e lon0 +
+   * 180°.  \e x is the geodesic distance from (\e lat1, \e lon1) to
+   * (\e lat, \e lon), appropriately signed according to which side of the
+   * central meridian (\e lat, \e lon) lies.  \e y is the shortest distance
+   * along the meridian from (\e lat0, \e lon0) to (\e lat1, \e lon1), again,
+   * appropriately signed according to the initial heading.  [Note that, in the
+   * case of prolate ellipsoids, the shortest meridional path from (\e lat0, \e
+   * lon0) to (\e lat1, \e lon1) may not be the shortest path.]  This procedure
+   * uniquely defines the forward projection except for a small class of points
+   * for which there may be two equally short routes for either leg of the
+   * path.
+   *
+   * Because of the properties of geodesics, the (\e x, \e y) grid is
+   * orthogonal.  The scale in the easting direction is unity.  The scale, \e
+   * k, in the northing direction is unity on the central meridian and
+   * increases away from the central meridian.  The projection routines return
+   * \e azi, the true bearing of the easting direction, and \e rk = 1/\e k, the
+   * reciprocal of the scale in the northing direction.
+   *
+   * The conversions all take place using a Geodesic object (by default
+   * Geodesic::WGS84).  For more information on geodesics see \ref geodesic.
+   * The determination of (\e lat1, \e lon1) in the forward projection is by
+   * solving the inverse geodesic problem for (\e lat, \e lon) and its twin
+   * obtained by reflection in the meridional plane.  The scale is found by
+   * determining where two neighboring geodesics intersecting the central
+   * meridian at \e lat1 and \e lat1 + \e dlat1 intersect and taking the ratio
+   * of the reduced lengths for the two geodesics between that point and,
+   * respectively, (\e lat1, \e lon1) and (\e lat, \e lon).
+   *
+   * C# Example:
+   * \include example-CassiniSoldner.cs
+   * Managed C++ Example:
+   * \include example-CassiniSoldner.cpp
+   * Visual Basic Example:
+   * \include example-CassiniSoldner.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The LatitudeOrigin, LongitudeOrigin, MajorRadius and Flattening
+   * functions are implimented as properties.
+   **********************************************************************/
+    public ref class CassiniSoldner
+    {
+        private:
+        // A pointer to the unmanaged GeographicLib::CassiniSoldner
+        GeographicLib::CassiniSoldner* m_pCassiniSoldner;
+
+        // The finalizer frees the unmanaged memory when the object is destroyed.
+        !CassiniSoldner();
+    public:
+        /**
+         * Constructor for CassiniSoldner specifying a center point and
+         * assuming the WGS84 ellipsoid.
+         *
+         * @param[in] lat0 latitude of center point of projection (degrees).
+         * @param[in] lon0 longitude of center point of projection (degrees).
+         **********************************************************************/
+        CassiniSoldner(double lat0, double lon0);
+
+        /**
+         * Constructor for CassiniSoldner specifying a center point.
+         *
+         * @param[in] lat0 latitude of center point of projection (degrees).
+         * @param[in] lon0 longitude of center point of projection (degrees).
+         * @param[in] earth the Geodesic object to use for geodesic calculations.
+         *   By default this uses the WGS84 ellipsoid.
+         *
+         * \e lat0 should be in the range [−90°, 90°] and \e
+         * lon0 should be in the range [−540°, 540°).
+         **********************************************************************/
+        CassiniSoldner(double lat0, double lon0, Geodesic^ earth );
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~CassiniSoldner()
+        { this->!CassiniSoldner(); }
+
+        /**
+         * Set the central point of the projection
+         *
+         * @param[in] lat0 latitude of center point of projection (degrees).
+         * @param[in] lon0 longitude of center point of projection (degrees).
+         *
+         * \e lat0 should be in the range [−90°, 90°] and \e
+         * lon0 should be in the range [−540°, 540°).
+         **********************************************************************/
+        void Reset(double lat0, double lon0);
+
+        /**
+         * Forward projection, from geographic to Cassini-Soldner.
+         *
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] azi azimuth of easting direction at point (degrees).
+         * @param[out] rk reciprocal of azimuthal northing scale at point.
+         *
+         * \e lat should be in the range [−90°, 90°] and \e
+         * lon should be in the range [−540°, 540°).  A call
+         * to Forward followed by a call to Reverse will return the original (\e
+         * lat, \e lon) (to within roundoff).  The routine does nothing if the
+         * origin has not been set.
+         **********************************************************************/
+        void Forward(double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y,
+                     [System::Runtime::InteropServices::Out] double% azi,
+                     [System::Runtime::InteropServices::Out] double% rk);
+
+        /**
+         * Reverse projection, from Cassini-Soldner to geographic.
+         *
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] azi azimuth of easting direction at point (degrees).
+         * @param[out] rk reciprocal of azimuthal northing scale at point.
+         *
+         * A call to Reverse followed by a call to Forward will return the original
+         * (\e x, \e y) (to within roundoff), provided that \e x and \e y are
+         * sufficiently small not to "wrap around" the earth.  The routine does
+         * nothing if the origin has not been set.
+         **********************************************************************/
+        void Reverse(double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     [System::Runtime::InteropServices::Out] double% azi,
+                     [System::Runtime::InteropServices::Out] double% rk);
+
+        /**
+         * CassiniSoldner::Forward without returning the azimuth and scale.
+         **********************************************************************/
+        void Forward(double lat, double lon,
+            [System::Runtime::InteropServices::Out] double% x,
+            [System::Runtime::InteropServices::Out] double% y);
+
+        /**
+         * CassiniSoldner::Reverse without returning the azimuth and scale.
+         **********************************************************************/
+        void Reverse(double x, double y,
+            [System::Runtime::InteropServices::Out] double% lat,
+            [System::Runtime::InteropServices::Out] double% lon);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e lat0 the latitude of origin (degrees).
+         **********************************************************************/
+        property double LatitudeOrigin { double get(); }
+
+        /**
+         * @return \e lon0 the longitude of origin (degrees).
+         **********************************************************************/
+        property double LongitudeOrigin { double get(); }
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/CircularEngine.cpp b/dotnet/NETGeographicLib/CircularEngine.cpp
new file mode 100644
index 0000000..37aae21
--- /dev/null
+++ b/dotnet/NETGeographicLib/CircularEngine.cpp
@@ -0,0 +1,83 @@
+/**
+ * \file NETGeographicLib/CircularEngine.cpp
+ * \brief Implementation for NETGeographicLib::CircularEngine class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/CircularEngine.hpp"
+#include "CircularEngine.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+CircularEngine::CircularEngine(const GeographicLib::CircularEngine& c)
+{
+    try
+    {
+        m_pCircularEngine = new GeographicLib::CircularEngine( c );
+    }
+    catch ( GeographicLib::GeographicErr err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a GeographicLib::CircularEngine" );
+    }
+}
+
+//*****************************************************************************
+CircularEngine::!CircularEngine()
+{
+    if ( m_pCircularEngine != NULL )
+    {
+        delete m_pCircularEngine;
+        m_pCircularEngine = NULL;
+    }
+}
+
+//*****************************************************************************
+double CircularEngine::LongitudeSum(double coslon, double sinlon)
+{
+    return m_pCircularEngine->operator()( coslon, sinlon );
+}
+
+//*****************************************************************************
+double CircularEngine::LongitudeSum(double lon)
+{
+    return m_pCircularEngine->operator()( lon );
+}
+
+//*****************************************************************************
+double CircularEngine::LongitudeSum(double coslon, double sinlon,
+                        [System::Runtime::InteropServices::Out] double% gradx,
+                        [System::Runtime::InteropServices::Out] double% grady,
+                        [System::Runtime::InteropServices::Out] double% gradz)
+{
+    double lgradx, lgrady, lgradz;
+    double output = m_pCircularEngine->operator()( coslon, sinlon, lgradx, lgrady, lgradz );
+    gradx = lgradx;
+    grady = lgrady;
+    gradz = lgradz;
+    return output;
+}
+
+//*****************************************************************************
+double CircularEngine::LongitudeSum(double lon,
+                        [System::Runtime::InteropServices::Out] double% gradx,
+                        [System::Runtime::InteropServices::Out] double% grady,
+                        [System::Runtime::InteropServices::Out] double% gradz)
+{
+    double lgradx, lgrady, lgradz;
+    double output = m_pCircularEngine->operator()( lon, lgradx, lgrady, lgradz );
+    gradx = lgradx;
+    grady = lgrady;
+    gradz = lgradz;
+    return output;
+}
diff --git a/dotnet/NETGeographicLib/CircularEngine.h b/dotnet/NETGeographicLib/CircularEngine.h
new file mode 100644
index 0000000..febed2b
--- /dev/null
+++ b/dotnet/NETGeographicLib/CircularEngine.h
@@ -0,0 +1,142 @@
+/**
+ * \file NETGeographicLib/CircularEngine.h
+ * \brief Header for NETGeographicLib::CircularEngine class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::CircularEngine.
+   *
+   * This class allows .NET applications to access GeographicLib::CircularEngine.
+   *
+   * The class is a companion to SphericalEngine.  If the results of a
+   * spherical harmonic sum are needed for several points on a circle of
+   * constant latitude \e lat and height \e h, then SphericalEngine::Circle can
+   * compute the inner sum, which is independent of longitude \e lon, and
+   * produce a CircularEngine object.  CircularEngine::LongitudeSum() can
+   * then be used to perform the outer sum for particular values of \e lon.
+   * This can lead to substantial improvements in computational speed for high
+   * degree sum (approximately by a factor of \e N / 2 where \e N is the
+   * maximum degree).
+   *
+   * CircularEngine is tightly linked to the internals of SphericalEngine.  For
+   * that reason, the constructor for this class is for internal use only.  Use
+   * SphericalHarmonic::Circle, SphericalHarmonic1::Circle, and
+   * SphericalHarmonic2::Circle to create instances of this class.
+   *
+   * CircularEngine stores the coefficients needed to allow the summation over
+   * order to be performed in 2 or 6 vectors of length \e M + 1 (depending on
+   * whether gradients are to be calculated).  For this reason the constructor
+   * may throw a GeographicErr exception.
+   *
+   * C# Example:
+   * \include example-CircularEngine.cs
+   * Managed C++ Example:
+   * \include example-CircularEngine.cpp
+   * Visual Basic Example:
+   * \include example-CircularEngine.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The () operator has been replaced with with LongitudeSum.
+   *
+   * This class does not have a constructor that can be used in a .NET
+   * application.  Use SphericalHarmonic::Circle, SphericalHarmonic1::Circle or
+   * SphericalHarmonic2::Circle to create instances of this class.
+   **********************************************************************/
+    public ref class CircularEngine
+    {
+        private:
+        // pointer to the unmanaged GeographicLib::CircularEngine
+        const GeographicLib::CircularEngine* m_pCircularEngine;
+
+        // The finalizer frees the unmanaged memory when the object is destroyed.
+        !CircularEngine();
+    public:
+        /**
+         * The constructor.
+         *
+         * This constructor should not be used in .NET applications.
+         * Use SphericalHarmonic::Circle, SphericalHarmonic1::Circle or
+         * SphericalHarmonic2::Circle to create instances of this class.
+         *
+         * @param[in] c The unmanaged CircularEngine to be copied.
+         **********************************************************************/
+        CircularEngine( const GeographicLib::CircularEngine& c );
+
+        /**
+         * The destructor calls the finalizer
+         **********************************************************************/
+        ~CircularEngine()
+        { this->!CircularEngine(); }
+
+        /**
+         * Evaluate the sum for a particular longitude given in terms of its
+         * cosine and sine.
+         *
+         * @param[in] coslon the cosine of the longitude.
+         * @param[in] sinlon the sine of the longitude.
+         * @return \e V the value of the sum.
+         *
+         * The arguments must satisfy <i>coslon</i><sup>2</sup> +
+         * <i>sinlon</i><sup>2</sup> = 1.
+         **********************************************************************/
+        double LongitudeSum(double coslon, double sinlon);
+
+        /**
+         * Evaluate the sum for a particular longitude.
+         *
+         * @param[in] lon the longitude (degrees).
+         * @return \e V the value of the sum.
+         **********************************************************************/
+        double LongitudeSum(double lon);
+
+        /**
+         * Evaluate the sum and its gradient for a particular longitude given in
+         * terms of its cosine and sine.
+         *
+         * @param[in] coslon the cosine of the longitude.
+         * @param[in] sinlon the sine of the longitude.
+         * @param[out] gradx \e x component of the gradient.
+         * @param[out] grady \e y component of the gradient.
+         * @param[out] gradz \e z component of the gradient.
+         * @return \e V the value of the sum.
+         *
+         * The gradients will only be computed if the CircularEngine object was
+         * created with this capability (e.g., via \e gradp = true in
+         * SphericalHarmonic::Circle).  If not, \e gradx, etc., will not be
+         * touched.  The arguments must satisfy <i>coslon</i><sup>2</sup> +
+         * <i>sinlon</i><sup>2</sup> = 1.
+         **********************************************************************/
+        double LongitudeSum(double coslon, double sinlon,
+                        [System::Runtime::InteropServices::Out] double% gradx,
+                        [System::Runtime::InteropServices::Out] double% grady,
+                        [System::Runtime::InteropServices::Out] double% gradz);
+
+        /**
+         * Evaluate the sum and its gradient for a particular longitude.
+         *
+         * @param[in] lon the longitude (degrees).
+         * @param[out] gradx \e x component of the gradient.
+         * @param[out] grady \e y component of the gradient.
+         * @param[out] gradz \e z component of the gradient.
+         * @return \e V the value of the sum.
+         *
+         * The gradients will only be computed if the CircularEngine object was
+         * created with this capability (e.g., via \e gradp = true in
+         * SphericalHarmonic::Circle).  If not, \e gradx, etc., will not be
+         * touched.
+         **********************************************************************/
+        double LongitudeSum(double lon,
+                    [System::Runtime::InteropServices::Out] double% gradx,
+                    [System::Runtime::InteropServices::Out] double% grady,
+                    [System::Runtime::InteropServices::Out] double% gradz);
+    };
+} //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/DMS.cpp b/dotnet/NETGeographicLib/DMS.cpp
new file mode 100644
index 0000000..8271b7f
--- /dev/null
+++ b/dotnet/NETGeographicLib/DMS.cpp
@@ -0,0 +1,130 @@
+/**
+ * \file NETGeographicLib/DMS.cpp
+ * \brief Implementation for NETGeographicLib::DMS class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/DMS.hpp"
+#include "DMS.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+double DMS::Decode( System::String^ dms,
+    [System::Runtime::InteropServices::Out] Flag% ind)
+{
+    try
+    {
+        GeographicLib::DMS::flag lind;
+        double out =  GeographicLib::DMS::Decode( StringConvert::ManagedToUnmanaged(dms), lind );
+        ind = static_cast<Flag>(lind);
+        return out;
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+}
+
+//*****************************************************************************
+double DMS::Decode(System::String^ str)
+{
+    try
+    {
+        return GeographicLib::DMS::Decode(StringConvert::ManagedToUnmanaged(str));
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+}
+
+//*****************************************************************************
+void DMS::DecodeLatLon(System::String^ dmsa, System::String^ dmsb,
+                        [System::Runtime::InteropServices::Out] double% lat,
+                        [System::Runtime::InteropServices::Out] double% lon,
+                        bool swaplatlong )
+{
+    try
+    {
+        double llat, llon;
+        GeographicLib::DMS::DecodeLatLon( StringConvert::ManagedToUnmanaged( dmsa ),
+            StringConvert::ManagedToUnmanaged( dmsb ), llat, llon, swaplatlong );
+        lat = llat;
+        lon = llon;
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+}
+
+//*****************************************************************************
+double DMS::DecodeAngle(System::String^ angstr)
+{
+    try
+    {
+        return GeographicLib::DMS::DecodeAngle(StringConvert::ManagedToUnmanaged( angstr ));
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+}
+
+//*****************************************************************************
+double DMS::DecodeAzimuth(System::String^ azistr)
+{
+    try
+    {
+        return GeographicLib::DMS::DecodeAzimuth(StringConvert::ManagedToUnmanaged( azistr ));
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+}
+
+//*****************************************************************************
+System::String^ DMS::Encode(double angle, Component trailing, unsigned prec,
+                            Flag ind, char dmssep)
+{
+    try
+    {
+        return StringConvert::UnmanagedToManaged(
+            GeographicLib::DMS::Encode( angle,
+                static_cast<GeographicLib::DMS::component>(trailing),
+                prec,
+                static_cast<GeographicLib::DMS::flag>(ind),
+                dmssep )
+            );
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+}
+//*****************************************************************************
+System::String^ DMS::Encode(double angle, unsigned prec, Flag ind,
+                            char dmssep )
+{
+    try
+    {
+        return StringConvert::UnmanagedToManaged(
+            GeographicLib::DMS::Encode( angle,
+                prec,
+                static_cast<GeographicLib::DMS::flag>(ind),
+                dmssep )
+            );
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+}
diff --git a/dotnet/NETGeographicLib/DMS.h b/dotnet/NETGeographicLib/DMS.h
new file mode 100644
index 0000000..a0c37fe
--- /dev/null
+++ b/dotnet/NETGeographicLib/DMS.h
@@ -0,0 +1,326 @@
+/**
+ * \file NETGeographicLib/DMS.h
+ * \brief Header for NETGeographicLib::DMS class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::DMS.
+   *
+   * Parse a string representing degree, minutes, and seconds and return the
+   * angle in degrees and format an angle in degrees as degree, minutes, and
+   * seconds.  In addition, handle NANs and infinities on input and output.
+   *
+   * C# Example:
+   * \include example-DMS.cs
+   * Managed C++ Example:
+   * \include example-DMS.cpp
+   * Visual Basic Example:
+   * \include example-DMS.vb
+   **********************************************************************/
+public ref class DMS
+{
+public:
+    /**
+     * Indicator for presence of hemisphere indicator (N/S/E/W) on latitudes
+     * and longitudes.
+     **********************************************************************/
+    enum class Flag {
+      /**
+       * No indicator present.
+       * @hideinitializer
+       **********************************************************************/
+      NONE = 0,
+      /**
+       * Latitude indicator (N/S) present.
+       * @hideinitializer
+       **********************************************************************/
+      LATITUDE = 1,
+      /**
+       * Longitude indicator (E/W) present.
+       * @hideinitializer
+       **********************************************************************/
+      LONGITUDE = 2,
+      /**
+       * Used in Encode to indicate output of an azimuth in [000, 360) with no
+       * letter indicator.
+       * @hideinitializer
+       **********************************************************************/
+      AZIMUTH = 3,
+      /**
+       * Used in Encode to indicate output of a plain number.
+       * @hideinitializer
+       **********************************************************************/
+      NUMBER = 4,
+    };
+
+    /**
+     * Indicator for trailing units on an angle.
+     **********************************************************************/
+    enum class Component {
+      /**
+       * Trailing unit is degrees.
+       * @hideinitializer
+       **********************************************************************/
+      DEGREE = 0,
+      /**
+       * Trailing unit is arc minutes.
+       * @hideinitializer
+       **********************************************************************/
+      MINUTE = 1,
+      /**
+       * Trailing unit is arc seconds.
+       * @hideinitializer
+       **********************************************************************/
+      SECOND = 2,
+    };
+
+    /**
+     * Convert a string in DMS to an angle.
+     *
+     * @param[in] dms string input.
+     * @param[out] ind a DMS::flag value signaling the presence of a
+     *   hemisphere indicator.
+     * @exception GeographicErr if \e dms is malformed (see below).
+     * @return angle (degrees).
+     *
+     * Degrees, minutes, and seconds are indicated by the characters d, '
+     * (single quote), " (double quote), and these components may only be
+     * given in this order.  Any (but not all) components may be omitted and
+     * other symbols (e.g., the ° symbol for degrees and the unicode
+     * prime and double prime symbols for minutes and seconds) may be
+     * substituted.  The last component indicator may be omitted and is assumed
+     * to be the next smallest unit (thus 33d10 is interpreted as 33d10').  The
+     * final component may be a decimal fraction but the non-final components
+     * must be integers.  Instead of using d, ', and " to indicate
+     * degrees, minutes, and seconds, : (colon) may be used to <i>separate</i>
+     * these components (numbers must appear before and after each colon); thus
+     * 50d30'10.3" may be written as 50:30:10.3, 5.5' may be written
+     * 0:5.5, and so on.  The integer parts of the minutes and seconds
+     * components must be less than 60.  A single leading sign is permitted.  A
+     * hemisphere designator (N, E, W, S) may be added to the beginning or end
+     * of the string.  The result is multiplied by the implied sign of the
+     * hemisphere designator (negative for S and W).  In addition \e ind is set
+     * to DMS::LATITUDE if N or S is present, to DMS::LONGITUDE if E or W is
+     * present, and to DMS::NONE otherwise.  Throws an error on a malformed
+     * string.  No check is performed on the range of the result.  Examples of
+     * legal and illegal strings are
+     * - <i>LEGAL</i> (all the entries on each line are equivalent)
+     *   - -20.51125, 20d30'40.5"S, -20°30'40.5, -20d30.675,
+     *     N-20d30'40.5", -20:30:40.5
+     *   - 4d0'9, 4d9", 4d9'', 4:0:9, 004:00:09, 4.0025, 4.0025d, 4d0.15,
+     *     04:.15
+     * - <i>ILLEGAL</i> (the exception thrown explains the problem)
+     *   - 4d5"4', 4::5, 4:5:, :4:5, 4d4.5'4", -N20.5, 1.8e2d, 4:60,
+     *     4d-5'
+     *
+     * <b>NOTE:</b> At present, all the string handling in the C++
+     * implementation %GeographicLib is with 8-bit characters.  The support for
+     * unicode symbols for degrees, minutes, and seconds is therefore via the
+     * <a href="http://en.wikipedia.org/wiki/UTF-8">UTF-8</a> encoding.  (The
+     * JavaScript implementation of this class uses unicode natively, of
+     * course.)
+     *
+     * Here is the list of Unicode symbols supported for degrees, minutes,
+     * seconds:
+     * - degrees:
+     *   - d, D lower and upper case letters
+     *   - U+00b0 degree symbol (°)
+     *   - U+00ba masculine ordinal indicator
+     *   - U+2070 superscript zero
+     *   - U+02da ring above
+     * - minutes:
+     *   - ' apostrophe
+     *   - U+2032 prime (′)
+     *   - U+00b4 acute accent
+     *   - U+2019 right single quote (’)
+     * - seconds:
+     *   - " quotation mark
+     *   - U+2033 double prime (″)
+     *   - U+201d right double quote (”)
+     *   - ' ' any two consecutive symbols for minutes
+     * .
+     * The codes with a leading zero byte, e.g., U+00b0, are accepted in their
+     * UTF-8 coded form 0xc2 0xb0 and as a single byte 0xb0.
+     **********************************************************************/
+    static double Decode(System::String^ dms,
+        [System::Runtime::InteropServices::Out] Flag% ind);
+
+    /**
+     * Convert DMS to an angle.
+     *
+     * @param[in] d degrees.
+     * @param[in] m arc minutes.
+     * @param[in] s arc seconds.
+     * @return angle (degrees)
+     *
+     * This does not propagate the sign on \e d to the other components, so
+     * -3d20' would need to be represented as - DMS::Decode(3.0, 20.0) or
+     * DMS::Decode(-3.0, -20.0).
+     **********************************************************************/
+    static double Decode(double d, double m, double s )
+    { return d + (m + s/double(60))/double(60); }
+
+    /// \cond SKIP
+    /**
+     * <b>DEPRECATED</b> (use Utility::num, instead).
+     * Convert a string to a double number.
+     *
+     * @param[in] str string input.
+     * @exception GeographicErr if \e str is malformed.
+     * @return decoded number.
+     **********************************************************************/
+    static double Decode(System::String^ str);
+    /// \endcond
+
+    /**
+     * Convert a pair of strings to latitude and longitude.
+     *
+     * @param[in] dmsa first string.
+     * @param[in] dmsb second string.
+     * @param[out] lat latitude.
+     * @param[out] lon longitude reduced to the range [−180°,
+     *   180°).
+     * @param[in] swaplatlong if true assume longitude is given before latitude
+     *   in the absence of hemisphere designators (default false).
+     * @exception GeographicErr if \e dmsa or \e dmsb is malformed.
+     * @exception GeographicErr if \e dmsa and \e dmsb are both interpreted as
+     *   latitudes.
+     * @exception GeographicErr if \e dmsa and \e dmsb are both interpreted as
+     *   longitudes.
+     * @exception GeographicErr if decoded latitude is not in [−90°,
+     *   90°].
+     * @exception GeographicErr if decoded longitude is not in
+     *   [−540°, 540°).
+     *
+     * By default, the \e lat (resp., \e lon) is assigned to the results of
+     * decoding \e dmsa (resp., \e dmsb).  However this is overridden if either
+     * \e dmsa or \e dmsb contain a latitude or longitude hemisphere designator
+     * (N, S, E, W).  If an exception is thrown, \e lat and \e lon are
+     * unchanged.
+     **********************************************************************/
+    static void DecodeLatLon(System::String^ dmsa, System::String^ dmsb,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     bool swaplatlong );
+
+    /**
+     * Convert a string to an angle in degrees.
+     *
+     * @param[in] angstr input string.
+     * @exception GeographicErr if \e angstr is malformed.
+     * @exception GeographicErr if \e angstr includes a hemisphere designator.
+     * @return angle (degrees)
+     *
+     * No hemisphere designator is allowed and no check is done on the range of
+     * the result.
+     **********************************************************************/
+    static double DecodeAngle(System::String^ angstr);
+
+    /**
+     * Convert a string to an azimuth in degrees.
+     *
+     * @param[in] azistr input string.
+     * @exception GeographicErr if \e azistr is malformed.
+     * @exception GeographicErr if \e azistr includes a N/S designator.
+     * @exception GeographicErr if decoded azimuth is not in
+     *   [−540°, 540°).
+     * @return azimuth (degrees) reduced to the range [−180°,
+     *   180°).
+     *
+     * A hemisphere designator E/W can be used; the result is multiplied by
+     * −1 if W is present.
+     **********************************************************************/
+    static double DecodeAzimuth(System::String^ azistr);
+
+    /**
+     * Convert angle (in degrees) into a DMS string (using d, ', and ").
+     *
+     * @param[in] angle input angle (degrees)
+     * @param[in] trailing DMS::component value indicating the trailing units
+     *   on the string and this is given as a decimal number if necessary.
+     * @param[in] prec the number of digits after the decimal point for the
+     *   trailing component.
+     * @param[in] ind DMS::flag value indicated additional formatting.
+     * @param[in] dmssep if non-null, use as the DMS separator character
+     *   (instead of d, ', " delimiters).
+     * @exception GeographicErr if memory for the string can't be allocated.
+     * @return formatted string
+     *
+     * The interpretation of \e ind is as follows:
+     * - ind == DMS::NONE, signed result no leading zeros on degrees except in
+     *   the units place, e.g., -8d03'.
+     * - ind == DMS::LATITUDE, trailing N or S hemisphere designator, no sign,
+     *   pad degrees to 2 digits, e.g., 08d03'S.
+     * - ind == DMS::LONGITUDE, trailing E or W hemisphere designator, no
+     *   sign, pad degrees to 3 digits, e.g., 008d03'W.
+     * - ind == DMS::AZIMUTH, convert to the range [0, 360°), no
+     *   sign, pad degrees to 3 digits, , e.g., 351d57'.
+     * .
+     * The integer parts of the minutes and seconds components are always given
+     * with 2 digits.
+     **********************************************************************/
+    static System::String^ Encode(double angle, Component trailing, unsigned prec,
+                              Flag ind, char dmssep );
+
+    /**
+     * Convert angle into a DMS string (using d, ', and ") selecting the
+     * trailing component based on the precision.
+     *
+     * @param[in] angle input angle (degrees)
+     * @param[in] prec the precision relative to 1 degree.
+     * @param[in] ind DMS::flag value indicated additional formatting.
+     * @param[in] dmssep if non-null, use as the DMS separator character
+     *   (instead of d, ', " delimiters).
+     * @exception std::bad_alloc if memory for the string can't be allocated.
+     * @return formatted string
+     *
+     * \e prec indicates the precision relative to 1 degree, e.g., \e prec = 3
+     * gives a result accurate to 0.1' and \e prec = 4 gives a result accurate
+     * to 1".  \e ind is interpreted as in DMS::Encode with the additional
+     * facility that DMS::NUMBER represents \e angle as a number in fixed
+     * format with precision \e prec.
+     **********************************************************************/
+    static System::String^ Encode(double angle, unsigned prec, Flag ind,
+                              char dmssep );
+
+    /**
+     * Split angle into degrees and minutes
+     *
+     * @param[in] ang angle (degrees)
+     * @param[out] d degrees (an integer returned as a double)
+     * @param[out] m arc minutes.
+     **********************************************************************/
+    static void Encode(double ang,
+        [System::Runtime::InteropServices::Out] double% d,
+        [System::Runtime::InteropServices::Out] double% m)
+    {
+      d = int(ang); m = 60 * (ang - d);
+    }
+
+    /**
+     * Split angle into degrees and minutes and seconds.
+     *
+     * @param[in] ang angle (degrees)
+     * @param[out] d degrees (an integer returned as a double)
+     * @param[out] m arc minutes (an integer returned as a double)
+     * @param[out] s arc seconds.
+     **********************************************************************/
+    static void Encode(double ang,
+        [System::Runtime::InteropServices::Out] double% d,
+        [System::Runtime::InteropServices::Out] double% m,
+        [System::Runtime::InteropServices::Out] double% s)
+    {
+      d = int(ang); ang = 60 * (ang - d);
+      m = int(ang); s = 60 * (ang - m);
+    }
+};
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/Ellipsoid.cpp b/dotnet/NETGeographicLib/Ellipsoid.cpp
new file mode 100644
index 0000000..8f5acd6
--- /dev/null
+++ b/dotnet/NETGeographicLib/Ellipsoid.cpp
@@ -0,0 +1,270 @@
+/**
+ * \file NETGeographicLib/Ellipsoid.cpp
+ * \brief Implementation for NETGeographicLib::Ellipsoid class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/Ellipsoid.hpp"
+#include "Ellipsoid.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::Ellipsoid";
+
+//*****************************************************************************
+Ellipsoid::!Ellipsoid(void)
+{
+    if ( m_pEllipsoid != NULL )
+    {
+        delete m_pEllipsoid;
+        m_pEllipsoid = NULL;
+    }
+}
+
+//*****************************************************************************
+Ellipsoid::Ellipsoid()
+{
+    try
+    {
+        m_pEllipsoid = new GeographicLib::Ellipsoid( GeographicLib::Ellipsoid::WGS84 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+Ellipsoid::Ellipsoid(double a, double f)
+{
+    try
+    {
+        m_pEllipsoid = new GeographicLib::Ellipsoid( a, f );
+    }
+    catch ( std::bad_alloc err )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+double Ellipsoid::ParametricLatitude(double phi)
+{
+    return m_pEllipsoid->ParametricLatitude( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::InverseParametricLatitude(double beta)
+{
+    return m_pEllipsoid->InverseParametricLatitude( beta );
+}
+
+//*****************************************************************************
+double Ellipsoid::GeocentricLatitude(double phi)
+{
+    return m_pEllipsoid->GeocentricLatitude( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::InverseGeocentricLatitude(double theta)
+{
+    return m_pEllipsoid->InverseGeocentricLatitude( theta );
+}
+
+//*****************************************************************************
+double Ellipsoid::RectifyingLatitude(double phi)
+{
+    return m_pEllipsoid->RectifyingLatitude( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::InverseRectifyingLatitude(double mu)
+{
+    return m_pEllipsoid->InverseRectifyingLatitude( mu );
+}
+
+//*****************************************************************************
+double Ellipsoid::AuthalicLatitude(double phi)
+{
+    return m_pEllipsoid->AuthalicLatitude( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::InverseAuthalicLatitude(double xi)
+{
+    return m_pEllipsoid->InverseAuthalicLatitude( xi );
+}
+
+//*****************************************************************************
+double Ellipsoid::ConformalLatitude(double phi)
+{
+    return m_pEllipsoid->ConformalLatitude( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::InverseConformalLatitude(double chi)
+{
+    return m_pEllipsoid->InverseConformalLatitude( chi );
+}
+
+//*****************************************************************************
+double Ellipsoid::IsometricLatitude(double phi)
+{
+    return m_pEllipsoid->IsometricLatitude( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::InverseIsometricLatitude(double psi)
+{
+    return m_pEllipsoid->InverseIsometricLatitude( psi );
+}
+
+//*****************************************************************************
+double Ellipsoid::CircleRadius(double phi)
+{
+    return m_pEllipsoid->CircleRadius( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::CircleHeight(double phi)
+{
+    return m_pEllipsoid->CircleHeight( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::MeridianDistance(double phi)
+{
+    return m_pEllipsoid->MeridianDistance( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::MeridionalCurvatureRadius(double phi)
+{
+    return m_pEllipsoid->MeridionalCurvatureRadius( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::TransverseCurvatureRadius(double phi)
+{
+    return m_pEllipsoid->TransverseCurvatureRadius( phi );
+}
+
+//*****************************************************************************
+double Ellipsoid::NormalCurvatureRadius(double phi, double azi)
+{
+    return m_pEllipsoid->NormalCurvatureRadius( phi, azi );
+}
+
+//*****************************************************************************
+double Ellipsoid::SecondFlatteningToFlattening(double fp)
+{
+    return GeographicLib::Ellipsoid::SecondFlatteningToFlattening( fp );
+}
+
+//*****************************************************************************
+double Ellipsoid::FlatteningToSecondFlattening(double f)
+{
+    return GeographicLib::Ellipsoid::FlatteningToSecondFlattening( f );
+}
+
+//*****************************************************************************
+double Ellipsoid::ThirdFlatteningToFlattening(double n)
+{
+    return GeographicLib::Ellipsoid::ThirdFlatteningToFlattening( n );
+}
+
+//*****************************************************************************
+double Ellipsoid::FlatteningToThirdFlattening(double f)
+{
+    return GeographicLib::Ellipsoid::FlatteningToThirdFlattening( f );
+}
+
+//*****************************************************************************
+double Ellipsoid::EccentricitySqToFlattening(double e2)
+{
+    return GeographicLib::Ellipsoid::EccentricitySqToFlattening( e2 );
+}
+
+//*****************************************************************************
+double Ellipsoid::FlatteningToEccentricitySq(double f)
+{
+    return GeographicLib::Ellipsoid::FlatteningToEccentricitySq( f );
+}
+
+//*****************************************************************************
+double Ellipsoid::SecondEccentricitySqToFlattening(double ep2)
+{
+    return GeographicLib::Ellipsoid::SecondEccentricitySqToFlattening( ep2 );
+}
+
+//*****************************************************************************
+double Ellipsoid::FlatteningToSecondEccentricitySq(double f)
+{
+    return GeographicLib::Ellipsoid::FlatteningToSecondEccentricitySq( f );
+}
+
+//*****************************************************************************
+double Ellipsoid::ThirdEccentricitySqToFlattening(double epp2)
+{
+    return GeographicLib::Ellipsoid::ThirdEccentricitySqToFlattening( epp2 );
+}
+
+//*****************************************************************************
+double Ellipsoid::FlatteningToThirdEccentricitySq(double f)
+{
+    return GeographicLib::Ellipsoid::FlatteningToThirdEccentricitySq( f );
+}
+
+//*****************************************************************************
+double Ellipsoid::MajorRadius::get()
+{ return m_pEllipsoid->MajorRadius(); }
+
+//*****************************************************************************
+double Ellipsoid::MinorRadius::get()
+{ return m_pEllipsoid->MinorRadius(); }
+
+//*****************************************************************************
+double Ellipsoid::QuarterMeridian::get()
+{ return m_pEllipsoid->QuarterMeridian(); }
+
+//*****************************************************************************
+double Ellipsoid::Area::get()
+{ return m_pEllipsoid->Area(); }
+
+//*****************************************************************************
+double Ellipsoid::Volume::get()
+{ return m_pEllipsoid->Volume(); }
+
+//*****************************************************************************
+double Ellipsoid::Flattening::get()
+{ return m_pEllipsoid->Flattening(); }
+
+//*****************************************************************************
+double Ellipsoid::SecondFlattening::get()
+{ return m_pEllipsoid->SecondFlattening(); }
+
+//*****************************************************************************
+double Ellipsoid::ThirdFlattening::get()
+{ return m_pEllipsoid->ThirdFlattening(); }
+
+//*****************************************************************************
+double Ellipsoid::EccentricitySq::get()
+{ return m_pEllipsoid->EccentricitySq(); }
+
+//*****************************************************************************
+double Ellipsoid::SecondEccentricitySq::get()
+{ return m_pEllipsoid->SecondEccentricitySq(); }
+
+//*****************************************************************************
+double Ellipsoid::ThirdEccentricitySq::get()
+{ return m_pEllipsoid->ThirdEccentricitySq(); }
diff --git a/dotnet/NETGeographicLib/Ellipsoid.h b/dotnet/NETGeographicLib/Ellipsoid.h
new file mode 100644
index 0000000..751bf6c
--- /dev/null
+++ b/dotnet/NETGeographicLib/Ellipsoid.h
@@ -0,0 +1,521 @@
+/**
+ * \file NETGeographicLib/Ellipsoid.h
+ * \brief Header for NETGeographicLib::Ellipsoid class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::Ellipsoid.
+   *
+   * This class allows .NET applications to access GeographicLib::Ellipsoid.
+   *
+   * This class returns various properties of the ellipsoid and converts
+   * between various types of latitudes.  The latitude conversions are also
+   * possible using the various projections supported by %GeographicLib; but
+   * Ellipsoid provides more direct access (sometimes using private functions
+   * of the projection classes).  Ellipsoid::RectifyingLatitude,
+   * Ellipsoid::InverseRectifyingLatitude, and Ellipsoid::MeridianDistance
+   * provide functionality which can be provided by the Geodesic class.
+   * However Geodesic uses a series approximation (valid for abs \e f < 1/150),
+   * whereas Ellipsoid computes these quantities using EllipticFunction which
+   * provides accurate results even when \e f is large.  Use of this class
+   * should be limited to −3 < \e f < 3/4 (i.e., 1/4 < b/a < 4).
+   *
+   * C# Example:
+   * \include example-Ellipsoid.cs
+   * Managed C++ Example:
+   * \include example-Ellipsoid.cpp
+   * Visual Basic Example:
+   * \include example-Ellipsoid.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor has been provided that assumes a WGS84 ellipsoid.
+   *
+   * The following functions are implemented as properties:
+   * MajorRadius, MinorRadius, QuarterMeridian, Area, Volume, Flattening,
+   * SecondFlattening, ThirdFlattening, EccentricitySq, SecondEccentricitySq,
+   * and ThirdEccentricitySq.
+   **********************************************************************/
+    public ref class Ellipsoid
+    {
+        private:
+        // A pointer to the unmanaged GeographicLib::Ellipsoid
+        GeographicLib::Ellipsoid* m_pEllipsoid;
+
+        // Th efinalizer frees the unmanaged memory when the object is destroyed.
+        !Ellipsoid();
+    public:
+        /** \name Constructor
+         **********************************************************************/
+        ///@{
+
+        /**
+         * Constructor for a WGS84 ellipsoid
+         **********************************************************************/
+        Ellipsoid();
+
+        /**
+         * Constructor for a ellipsoid with
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+         *   positive.
+         **********************************************************************/
+        Ellipsoid(double a, double f);
+        ///@}
+
+        /** The destructor calls the finalizer.
+         **********************************************************************/
+        ~Ellipsoid()
+        { this->!Ellipsoid(); }
+
+        /** \name %Ellipsoid dimensions.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e b the polar semi-axis (meters).
+         **********************************************************************/
+        property double MinorRadius { double get(); }
+
+        /**
+         * @return \e L the distance between the equator and a pole along a
+         *   meridian (meters).  For a sphere \e L = (π/2) \e a.  The radius
+         *   of a sphere with the same meridian length is \e L / (π/2).
+         **********************************************************************/
+        property double QuarterMeridian { double get(); }
+
+        /**
+         * @return \e A the total area of the ellipsoid (meters<sup>2</sup>).  For
+         *   a sphere \e A = 4π <i>a</i><sup>2</sup>.  The radius of a sphere
+         *   with the same area is sqrt(\e A / (4π)).
+         **********************************************************************/
+        property double Area { double get(); }
+
+        /**
+         * @return \e V the total volume of the ellipsoid (meters<sup>3</sup>).
+         *   For a sphere \e V = (4π / 3) <i>a</i><sup>3</sup>.  The radius of
+         *   a sphere with the same volume is cbrt(\e V / (4π/3)).
+         **********************************************************************/
+        property double Volume { double get(); }
+        ///@}
+
+        /** \name %Ellipsoid shape
+         **********************************************************************/
+        ///@{
+
+        /**
+         * @return \e f = (\e a − \e b) / \e a, the flattening of the
+         *   ellipsoid.  This is the value used in the constructor.  This is zero,
+         *   positive, or negative for a sphere, oblate ellipsoid, or prolate
+         *   ellipsoid.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return \e f ' = (\e a − \e b) / \e b, the second flattening of
+         *   the ellipsoid.  This is zero, positive, or negative for a sphere,
+         *   oblate ellipsoid, or prolate ellipsoid.
+         **********************************************************************/
+        property double SecondFlattening { double get(); }
+
+        /**
+         * @return \e n = (\e a − \e b) / (\e a + \e b), the third flattening
+         *   of the ellipsoid.  This is zero, positive, or negative for a sphere,
+         *   oblate ellipsoid, or prolate ellipsoid.
+         **********************************************************************/
+        property double ThirdFlattening { double get(); }
+
+        /**
+         * @return <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> −
+         *   <i>b</i><sup>2</sup>) / <i>a</i><sup>2</sup>, the eccentricity squared
+         *   of the ellipsoid.  This is zero, positive, or negative for a sphere,
+         *   oblate ellipsoid, or prolate ellipsoid.
+         **********************************************************************/
+        property double EccentricitySq { double get(); }
+
+        /**
+         * @return <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+         *   <i>b</i><sup>2</sup>) / <i>b</i><sup>2</sup>, the second eccentricity
+         *   squared of the ellipsoid.  This is zero, positive, or negative for a
+         *   sphere, oblate ellipsoid, or prolate ellipsoid.
+         **********************************************************************/
+        property double SecondEccentricitySq { double get(); }
+
+        /**
+         * @return <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+         *   <i>b</i><sup>2</sup>) / (<i>a</i><sup>2</sup> + <i>b</i><sup>2</sup>),
+         *   the third eccentricity squared of the ellipsoid.  This is zero,
+         *   positive, or negative for a sphere, oblate ellipsoid, or prolate
+         *   ellipsoid.
+         **********************************************************************/
+        property double ThirdEccentricitySq { double get(); }
+        ///@}
+
+        /** \name Latitude conversion.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return β the parametric latitude (degrees).
+         *
+         * The geographic latitude, φ, is the angle beween the equatorial
+         * plane and a vector normal to the surface of the ellipsoid.
+         *
+         * The parametric latitude (also called the reduced latitude), β,
+         * allows the cartesian coordinated of a meridian to be expressed
+         * conveniently in parametric form as
+         * - \e R = \e a cos β
+         * - \e Z = \e b sin β
+         * .
+         * where \e a and \e b are the equatorial radius and the polar semi-axis.
+         * For a sphere β = φ.
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * β lies in [−90°, 90°].
+         **********************************************************************/
+        double ParametricLatitude(double phi);
+
+        /**
+         * @param[in] beta the parametric latitude (degrees).
+         * @return φ the geographic latitude (degrees).
+         *
+         * β must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * φ lies in [−90°, 90°].
+         **********************************************************************/
+        double InverseParametricLatitude(double beta);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return θ the geocentric latitude (degrees).
+         *
+         * The geocentric latitude, θ, is the angle beween the equatorial
+         * plane and a line between the center of the ellipsoid and a point on the
+         * ellipsoid.  For a sphere θ = φ.
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * θ lies in [−90°, 90°].
+         **********************************************************************/
+        double GeocentricLatitude(double phi);
+
+        /**
+         * @param[in] theta the geocentric latitude (degrees).
+         * @return φ the geographic latitude (degrees).
+         *
+         * θ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * φ lies in [−90°, 90°].
+         **********************************************************************/
+        double InverseGeocentricLatitude(double theta);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return μ the rectifying latitude (degrees).
+         *
+         * The rectifying latitude, μ, has the property that the distance along
+         * a meridian of the ellipsoid between two points with rectifying latitudes
+         * μ<sub>1</sub> and μ<sub>2</sub> is equal to
+         * (μ<sub>2</sub> - μ<sub>1</sub>) \e L / 90°,
+         * where \e L = QuarterMeridian().  For a sphere μ = φ.
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * μ lies in [−90°, 90°].
+         **********************************************************************/
+        double RectifyingLatitude(double phi);
+
+        /**
+         * @param[in] mu the rectifying latitude (degrees).
+         * @return φ the geographic latitude (degrees).
+         *
+         * μ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * φ lies in [−90°, 90°].
+         **********************************************************************/
+        double InverseRectifyingLatitude(double mu);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return ξ the authalic latitude (degrees).
+         *
+         * The authalic latitude, ξ, has the property that the area of the
+         * ellipsoid between two circles with authalic latitudes
+         * ξ<sub>1</sub> and ξ<sub>2</sub> is equal to (sin
+         * ξ<sub>2</sub> - sin ξ<sub>1</sub>) \e A / 2, where \e A
+         * = Area().  For a sphere ξ = φ.
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * ξ lies in [−90°, 90°].
+         **********************************************************************/
+        double AuthalicLatitude(double phi);
+
+        /**
+         * @param[in] xi the authalic latitude (degrees).
+         * @return φ the geographic latitude (degrees).
+         *
+         * ξ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * φ lies in [−90°, 90°].
+         **********************************************************************/
+        double InverseAuthalicLatitude(double xi);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return χ the conformal latitude (degrees).
+         *
+         * The conformal latitude, χ, gives the mapping of the ellipsoid to a
+         * sphere which which is conformal (angles are preserved) and in which the
+         * equator of the ellipsoid maps to the equator of the sphere.  For a
+         * sphere χ = φ.
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * χ lies in [−90°, 90°].
+         **********************************************************************/
+        double ConformalLatitude(double phi);
+
+        /**
+         * @param[in] chi the conformal latitude (degrees).
+         * @return φ the geographic latitude (degrees).
+         *
+         * χ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.  The returned value
+         * φ lies in [−90°, 90°].
+         **********************************************************************/
+        double InverseConformalLatitude(double chi);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return ψ the isometric latitude (degrees).
+         *
+         * The isometric latitude gives the mapping of the ellipsoid to a plane
+         * which which is conformal (angles are preserved) and in which the equator
+         * of the ellipsoid maps to a straight line of constant scale; this mapping
+         * defines the Mercator projection.  For a sphere ψ =
+         * sinh<sup>−1</sup> tan φ.
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.
+         **********************************************************************/
+        double IsometricLatitude(double phi);
+
+        /**
+         * @param[in] psi the isometric latitude (degrees).
+         * @return φ the geographic latitude (degrees).
+         *
+         * The returned value φ lies in [−90°, 90°].
+         **********************************************************************/
+        double InverseIsometricLatitude(double psi);
+        ///@}
+
+        /** \name Other quantities.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return \e R = \e a cos β the radius of a circle of latitude
+         *   φ (meters).  \e R (π/180°) gives meters per degree
+         *   longitude measured along a circle of latitude.
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.
+         **********************************************************************/
+        double CircleRadius(double phi);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return \e Z = \e b sin β the distance of a circle of latitude
+         *   φ from the equator measured parallel to the ellipsoid axis
+         *   (meters).
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.
+         **********************************************************************/
+        double CircleHeight(double phi);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return \e s the distance along a meridian
+         *   between the equator and a point of latitude φ (meters).  \e s is
+         *   given by \e s = μ \e L / 90°, where \e L =
+         *   QuarterMeridian()).
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.
+         **********************************************************************/
+        double MeridianDistance(double phi);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return ρ the meridional radius of curvature of the ellipsoid at
+         *   latitude φ (meters); this is the curvature of the meridian.  \e
+         *   rho is given by ρ = (180°/π) d\e s / dφ,
+         *   where \e s = MeridianDistance(); thus ρ (π/180°)
+         *   gives meters per degree latitude measured along a meridian.
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.
+         **********************************************************************/
+        double MeridionalCurvatureRadius(double phi);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @return ν the transverse radius of curvature of the ellipsoid at
+         *   latitude φ (meters); this is the curvature of a curve on the
+         *   ellipsoid which also lies in a plane perpendicular to the ellipsoid
+         *   and to the meridian.  ν is related to \e R = CircleRadius() by \e
+         *   R = ν cos φ.
+         *
+         * φ must lie in the range [−90°, 90°]; the
+         * result is undefined if this condition does not hold.
+         **********************************************************************/
+        double TransverseCurvatureRadius(double phi);
+
+        /**
+         * @param[in] phi the geographic latitude (degrees).
+         * @param[in] azi the angle between the meridian and the normal section
+         *   (degrees).
+         * @return the radius of curvature of the ellipsoid in the normal
+         *   section at latitude φ inclined at an angle \e azi to the
+         *   meridian (meters).
+         *
+         * φ must lie in the range [−90°, 90°] and \e
+         * azi must lie in the range [−540°, 540°); the
+         * result is undefined if either of conditions does not hold.
+         **********************************************************************/
+        double NormalCurvatureRadius(double phi, double azi);
+        ///@}
+
+        /** \name Eccentricity conversions.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * @param[in] fp = \e f ' = (\e a − \e b) / \e b, the second
+         *   flattening.
+         * @return \e f = (\e a − \e b) / \e a, the flattening.
+         *
+         * \e f ' should lie in (−1, ∞).
+         * The returned value \e f lies in (−∞, 1).
+         **********************************************************************/
+        static double SecondFlatteningToFlattening(double fp);
+
+        /**
+         * @param[in] f = (\e a − \e b) / \e a, the flattening.
+         * @return \e f ' = (\e a − \e b) / \e b, the second flattening.
+         *
+         * \e f should lie in (−∞, 1).
+         * The returned value \e f ' lies in (−1, ∞).
+         **********************************************************************/
+        static double FlatteningToSecondFlattening(double f);
+
+        /**
+         * @param[in] n = (\e a − \e b) / (\e a + \e b), the third
+         *   flattening.
+         * @return \e f = (\e a − \e b) / \e a, the flattening.
+         *
+         * \e n should lie in (−1, 1).
+         * The returned value \e f lies in (−∞, 1).
+         **********************************************************************/
+        static double ThirdFlatteningToFlattening(double n);
+
+        /**
+         * @param[in] f = (\e a − \e b) / \e a, the flattening.
+         * @return \e n = (\e a − \e b) / (\e a + \e b), the third
+         *   flattening.
+         *
+         * \e f should lie in (−∞, 1).
+         * The returned value \e n lies in (−1, 1).
+         **********************************************************************/
+        static double FlatteningToThirdFlattening(double f);
+
+        /**
+         * @param[in] e2 = <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> −
+         *   <i>b</i><sup>2</sup>) / <i>a</i><sup>2</sup>, the eccentricity
+         *   squared.
+         * @return \e f = (\e a − \e b) / \e a, the flattening.
+         *
+         * <i>e</i><sup>2</sup> should lie in (−∞, 1).
+         * The returned value \e f lies in (−∞, 1).
+         **********************************************************************/
+        static double EccentricitySqToFlattening(double e2);
+
+        /**
+         * @param[in] f = (\e a − \e b) / \e a, the flattening.
+         * @return <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> −
+         *   <i>b</i><sup>2</sup>) / <i>a</i><sup>2</sup>, the eccentricity
+         *   squared.
+         *
+         * \e f should lie in (−∞, 1).
+         * The returned value <i>e</i><sup>2</sup> lies in (−∞, 1).
+         **********************************************************************/
+        static double FlatteningToEccentricitySq(double f);
+
+        /**
+         * @param[in] ep2 = <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+         *   <i>b</i><sup>2</sup>) / <i>b</i><sup>2</sup>, the second eccentricity
+         *   squared.
+         * @return \e f = (\e a − \e b) / \e a, the flattening.
+         *
+         * <i>e'</i> <sup>2</sup> should lie in (−1, ∞).
+         * The returned value \e f lies in (−∞, 1).
+         **********************************************************************/
+        static double SecondEccentricitySqToFlattening(double ep2);
+
+        /**
+         * @param[in] f = (\e a − \e b) / \e a, the flattening.
+         * @return <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+         *   <i>b</i><sup>2</sup>) / <i>b</i><sup>2</sup>, the second eccentricity
+         *   squared.
+         *
+         * \e f should lie in (−∞, 1).
+         * The returned value <i>e'</i> <sup>2</sup> lies in (−1, ∞).
+         **********************************************************************/
+        static double FlatteningToSecondEccentricitySq(double f);
+
+        /**
+         * @param[in] epp2 = <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup>
+         *   − <i>b</i><sup>2</sup>) / (<i>a</i><sup>2</sup> +
+         *   <i>b</i><sup>2</sup>), the third eccentricity squared.
+         * @return \e f = (\e a − \e b) / \e a, the flattening.
+         *
+         * <i>e''</i> <sup>2</sup> should lie in (−1, 1).
+         * The returned value \e f lies in (−∞, 1).
+         **********************************************************************/
+        static double ThirdEccentricitySqToFlattening(double epp2);
+
+        /**
+         * @param[in] f = (\e a − \e b) / \e a, the flattening.
+         * @return <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+         *   <i>b</i><sup>2</sup>) / (<i>a</i><sup>2</sup> + <i>b</i><sup>2</sup>),
+         *   the third eccentricity squared.
+         *
+         * \e f should lie in (−∞, 1).
+         * The returned value <i>e''</i> <sup>2</sup> lies in (−1, 1).
+         **********************************************************************/
+        static double FlatteningToThirdEccentricitySq(double f);
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/EllipticFunction.cpp b/dotnet/NETGeographicLib/EllipticFunction.cpp
new file mode 100644
index 0000000..1a05b8a
--- /dev/null
+++ b/dotnet/NETGeographicLib/EllipticFunction.cpp
@@ -0,0 +1,311 @@
+/**
+ * \file NETGeographicLib/EllipticFunction.cpp
+ * \brief Implementation for NETGeographicLib::EllipticFunction class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/EllipticFunction.hpp"
+#include "EllipticFunction.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for the GeographicLib::EllipticFunction.";
+
+//*****************************************************************************
+EllipticFunction::EllipticFunction(double k2, double alpha2)
+{
+    try
+    {
+        m_pEllipticFunction = new GeographicLib::EllipticFunction( k2, alpha2 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+EllipticFunction::EllipticFunction(double k2, double alpha2, double kp2, double alphap2)
+{
+    try
+    {
+        m_pEllipticFunction = new GeographicLib::EllipticFunction( k2, alpha2, kp2, alphap2 );
+    }
+    catch ( std::bad_alloc err )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+EllipticFunction::!EllipticFunction()
+{
+    if ( m_pEllipticFunction != NULL )
+    {
+        delete m_pEllipticFunction;
+        m_pEllipticFunction = NULL;
+    }
+}
+
+//*****************************************************************************
+void EllipticFunction::Reset(double k2, double alpha2 )
+{
+    m_pEllipticFunction->Reset( k2, alpha2 );
+}
+
+//*****************************************************************************
+void EllipticFunction::Reset(double k2, double alpha2, double kp2, double alphap2)
+{
+    m_pEllipticFunction->Reset( k2, alpha2, kp2, alphap2 );
+}
+
+//*****************************************************************************
+double EllipticFunction::K()
+{
+    return m_pEllipticFunction->K();
+}
+
+//*****************************************************************************
+double EllipticFunction::E()
+{
+    return m_pEllipticFunction->E();
+}
+
+//*****************************************************************************
+double EllipticFunction::D()
+{
+    return m_pEllipticFunction->D();
+}
+
+//*****************************************************************************
+double EllipticFunction::KE()
+{
+    return m_pEllipticFunction->KE();
+}
+
+//*****************************************************************************
+double EllipticFunction::Pi()
+{
+    return m_pEllipticFunction->Pi();
+}
+
+//*****************************************************************************
+double EllipticFunction::G()
+{
+    return m_pEllipticFunction->G();
+}
+
+//*****************************************************************************
+double EllipticFunction::H()
+{
+    return m_pEllipticFunction->H();
+}
+
+//*****************************************************************************
+double EllipticFunction::F(double phi)
+{
+    return m_pEllipticFunction->F( phi );
+}
+
+//*****************************************************************************
+double EllipticFunction::E(double phi)
+{
+    return m_pEllipticFunction->E( phi );
+}
+
+//*****************************************************************************
+double EllipticFunction::Ed(double ang)
+{
+    return m_pEllipticFunction->Ed(ang);
+}
+
+//*****************************************************************************
+double EllipticFunction::Einv(double x)
+{
+    return m_pEllipticFunction->Einv(x);
+}
+
+//*****************************************************************************
+double EllipticFunction::Pi(double phi)
+{
+    return m_pEllipticFunction->Pi(phi);
+}
+
+//*****************************************************************************
+double EllipticFunction::D(double phi)
+{
+    return m_pEllipticFunction->D(phi);
+}
+
+//*****************************************************************************
+double EllipticFunction::G(double phi)
+{
+    return m_pEllipticFunction->G(phi);
+}
+
+//*****************************************************************************
+double EllipticFunction::H(double phi)
+{
+    return m_pEllipticFunction->H(phi);
+}
+
+//*****************************************************************************
+double EllipticFunction::F(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->F( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::E(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->E( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::Pi(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->Pi( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::D(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->D( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::G(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->G( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::H(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->H( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::deltaF(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->deltaF( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::deltaE(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->deltaE( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::deltaEinv(double stau, double ctau)
+{
+    return m_pEllipticFunction->deltaEinv( stau, ctau );
+}
+
+//*****************************************************************************
+double EllipticFunction::deltaPi(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->deltaPi( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::deltaD(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->deltaD( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::deltaG(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->deltaG( sn, cn, dn );
+}
+
+//*****************************************************************************
+double EllipticFunction::deltaH(double sn, double cn, double dn)
+{
+    return m_pEllipticFunction->deltaH( sn, cn, dn );
+}
+
+//*****************************************************************************
+void EllipticFunction::sncndn(double x,
+    [System::Runtime::InteropServices::Out] double% sn,
+    [System::Runtime::InteropServices::Out] double% cn,
+    [System::Runtime::InteropServices::Out] double% dn)
+{
+    double lsn, lcn, ldn;
+    m_pEllipticFunction->sncndn( x, lsn, lcn, ldn );
+    sn = lsn;
+    cn = lcn;
+    dn = ldn;
+}
+
+//*****************************************************************************
+double EllipticFunction::Delta(double sn, double cn)
+{
+    return m_pEllipticFunction->Delta( sn, cn );
+}
+
+//*****************************************************************************
+double EllipticFunction::RF(double x, double y, double z)
+{
+    return GeographicLib::EllipticFunction::RF( x, y, z );
+}
+
+//*****************************************************************************
+double EllipticFunction::RF(double x, double y)
+{
+    return GeographicLib::EllipticFunction::RF( x, y );
+}
+
+//*****************************************************************************
+double EllipticFunction::RC(double x, double y)
+{
+    return GeographicLib::EllipticFunction::RC( x, y );
+}
+
+//*****************************************************************************
+double EllipticFunction::RG(double x, double y, double z)
+{
+    return GeographicLib::EllipticFunction::RG( x, y, z );
+}
+
+//*****************************************************************************
+double EllipticFunction::RG(double x, double y)
+{
+    return GeographicLib::EllipticFunction::RG( x, y );
+}
+
+//*****************************************************************************
+double EllipticFunction::RJ(double x, double y, double z, double p)
+{
+    return GeographicLib::EllipticFunction::RJ( x, y, z, p );
+}
+
+//*****************************************************************************
+double EllipticFunction::RD(double x, double y, double z)
+{
+    return GeographicLib::EllipticFunction::RD( x, y, z );
+}
+
+//*****************************************************************************
+double EllipticFunction::k2::get()
+{ return m_pEllipticFunction->k2(); }
+
+//*****************************************************************************
+double EllipticFunction::kp2::get()
+{ return m_pEllipticFunction->kp2(); }
+
+//*****************************************************************************
+double EllipticFunction::alpha2::get()
+{ return m_pEllipticFunction->alpha2(); }
+
+//*****************************************************************************
+double EllipticFunction::alphap2::get()
+{ return m_pEllipticFunction->alpha2(); }
diff --git a/dotnet/NETGeographicLib/EllipticFunction.h b/dotnet/NETGeographicLib/EllipticFunction.h
new file mode 100644
index 0000000..e62442a
--- /dev/null
+++ b/dotnet/NETGeographicLib/EllipticFunction.h
@@ -0,0 +1,698 @@
+/**
+ * \file NETGeographicLib/EllipticFunction.h
+ * \brief Header for NETGeographicLib::EllipticFunction class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::EllipticFunction.
+   *
+   * This class allows .NET applications to access GeographicLib::EllipticFunction.
+   *
+   * This provides the elliptic functions and integrals needed for Ellipsoid,
+   * GeodesicExact, and TransverseMercatorExact.  Two categories of function
+   * are provided:
+   * - \e static functions to compute symmetric elliptic integrals
+   *   (http://dlmf.nist.gov/19.16.i)
+   * - \e member functions to compute Legrendre's elliptic
+   *   integrals (http://dlmf.nist.gov/19.2.ii) and the
+   *   Jacobi elliptic functions (http://dlmf.nist.gov/22.2).
+   * .
+   * In the latter case, an object is constructed giving the modulus \e k (and
+   * optionally the parameter α<sup>2</sup>).  The modulus is always
+   * passed as its square <i>k</i><sup>2</sup> which allows \e k to be pure
+   * imaginary (<i>k</i><sup>2</sup> < 0).  (Confusingly, Abramowitz and
+   * Stegun call \e m = <i>k</i><sup>2</sup> the "parameter" and \e n =
+   * α<sup>2</sup> the "characteristic".)
+   *
+   * In geodesic applications, it is convenient to separate the incomplete
+   * integrals into secular and periodic components, e.g.,
+   * \f[
+   *   E(\phi, k) = (2 E(\phi) / \pi) [ \phi + \delta E(\phi, k) ]
+   * \f]
+   * where δ\e E(φ, \e k) is an odd periodic function with period
+   * π.
+   *
+   * The computation of the elliptic integrals uses the algorithms given in
+   * - B. C. Carlson,
+   *   <a href="http://dx.doi.org/10.1007/BF02198293"> Computation of real or
+   *   complex elliptic integrals</a>, Numerical Algorithms 10, 13--26 (1995)
+   * .
+   * with the additional optimizations given in http://dlmf.nist.gov/19.36.i.
+   * The computation of the Jacobi elliptic functions uses the algorithm given
+   * in
+   * - R. Bulirsch,
+   *   <a href="http://dx.doi.org/10.1007/BF01397975"> Numerical Calculation of
+   *   Elliptic Integrals and Elliptic Functions</a>, Numericshe Mathematik 7,
+   *   78--90 (1965).
+   * .
+   * The notation follows http://dlmf.nist.gov/19 and http://dlmf.nist.gov/22
+   *
+   * C# Example:
+   * \include example-EllipticFunction.cs
+   * Managed C++ Example:
+   * \include example-EllipticFunction.cpp
+   * Visual Basic Example:
+   * \include example-EllipticFunction.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The k2, kp2, alpha2, and alphap2 functions are implemented as properties.
+   **********************************************************************/
+    public ref class EllipticFunction
+    {
+    private:
+        // a pointer to the unmanaged GeographicLib::EllipticFunction.
+        GeographicLib::EllipticFunction* m_pEllipticFunction;
+
+        // The finalizer frees the unmanaged memory.
+        !EllipticFunction();
+    public:
+        /** \name Constructor
+         **********************************************************************/
+        ///@{
+        /**
+         * Constructor specifying the modulus and parameter.
+         *
+         * @param[in] k2 the square of the modulus <i>k</i><sup>2</sup>.
+         *   <i>k</i><sup>2</sup> must lie in (-∞, 1).  (No checking is
+         *   done.)
+         * @param[in] alpha2 the parameter α<sup>2</sup>.
+         *   α<sup>2</sup> must lie in (-∞, 1).  (No checking is done.)
+         *
+         * If only elliptic integrals of the first and second kinds are needed,
+         * then set α<sup>2</sup> = 0 (the default value); in this case, we
+         * have Π(φ, 0, \e k) = \e F(φ, \e k), \e G(φ, 0, \e k) = \e
+         * E(φ, \e k), and \e H(φ, 0, \e k) = \e F(φ, \e k) - \e
+         * D(φ, \e k).
+         **********************************************************************/
+        EllipticFunction(double k2, double alpha2 );
+
+        /**
+         * Constructor specifying the modulus and parameter and their complements.
+         *
+         * @param[in] k2 the square of the modulus <i>k</i><sup>2</sup>.
+         *   <i>k</i><sup>2</sup> must lie in (-∞, 1).  (No checking is
+         *   done.)
+         * @param[in] alpha2 the parameter α<sup>2</sup>.
+         *   α<sup>2</sup> must lie in (-∞, 1).  (No checking is done.)
+         * @param[in] kp2 the complementary modulus squared <i>k'</i><sup>2</sup> =
+         *   1 − <i>k</i><sup>2</sup>.
+         * @param[in] alphap2 the complementary parameter α'<sup>2</sup> = 1
+         *   − α<sup>2</sup>.
+         *
+         * The arguments must satisfy \e k2 + \e kp2 = 1 and \e alpha2 + \e alphap2
+         * = 1.  (No checking is done that these conditions are met.)  This
+         * constructor is provided to enable accuracy to be maintained, e.g., when
+         * \e k is very close to unity.
+         **********************************************************************/
+        EllipticFunction(double k2, double alpha2, double kp2, double alphap2);
+
+        /**
+         * Destructor calls the finalizer.
+         **********************************************************************/
+        ~EllipticFunction()
+        { this->!EllipticFunction(); }
+
+        /**
+         * Reset the modulus and parameter.
+         *
+         * @param[in] k2 the new value of square of the modulus
+         *   <i>k</i><sup>2</sup> which must lie in (-∞, 1).  (No checking is
+         *   done.)
+         * @param[in] alpha2 the new value of parameter α<sup>2</sup>.
+         *   α<sup>2</sup> must lie in (-∞, 1).  (No checking is done.)
+         **********************************************************************/
+        void Reset(double k2, double alpha2 );
+
+        /**
+         * Reset the modulus and parameter supplying also their complements.
+         *
+         * @param[in] k2 the square of the modulus <i>k</i><sup>2</sup>.
+         *   <i>k</i><sup>2</sup> must lie in (-∞, 1).  (No checking is
+         *   done.)
+         * @param[in] alpha2 the parameter α<sup>2</sup>.
+         *   α<sup>2</sup> must lie in (-∞, 1).  (No checking is done.)
+         * @param[in] kp2 the complementary modulus squared <i>k'</i><sup>2</sup> =
+         *   1 − <i>k</i><sup>2</sup>.
+         * @param[in] alphap2 the complementary parameter α'<sup>2</sup> = 1
+         *   − α<sup>2</sup>.
+         *
+         * The arguments must satisfy \e k2 + \e kp2 = 1 and \e alpha2 + \e alphap2
+         * = 1.  (No checking is done that these conditions are met.)  This
+         * constructor is provided to enable accuracy to be maintained, e.g., when
+         * is very small.
+         **********************************************************************/
+        void Reset(double k2, double alpha2, double kp2, double alphap2);
+
+        ///@}
+
+        /** \name Inspector functions.
+         **********************************************************************/
+        ///@{
+        /**
+         * @return the square of the modulus <i>k</i><sup>2</sup>.
+         **********************************************************************/
+        property double k2 { double get(); }
+
+        /**
+         * @return the square of the complementary modulus <i>k'</i><sup>2</sup> =
+         *   1 − <i>k</i><sup>2</sup>.
+         **********************************************************************/
+        property double kp2 { double get(); }
+
+        /**
+         * @return the parameter α<sup>2</sup>.
+         **********************************************************************/
+        property double alpha2 { double get(); }
+
+        /**
+         * @return the complementary parameter α'<sup>2</sup> = 1 −
+         *   α<sup>2</sup>.
+         **********************************************************************/
+        property double alphap2 { double get(); }
+        ///@}
+
+        /** \name Complete elliptic integrals.
+         **********************************************************************/
+        ///@{
+        /**
+         * The complete integral of the first kind.
+         *
+         * @return \e K(\e k).
+         *
+         * \e K(\e k) is defined in http://dlmf.nist.gov/19.2.E4
+         * \f[
+         *   K(k) = \int_0^{\pi/2} \frac1{\sqrt{1-k^2\sin^2\phi}}\,d\phi.
+         * \f]
+         **********************************************************************/
+        double K();
+
+        /**
+         * The complete integral of the second kind.
+         *
+         * @return \e E(\e k)
+         *
+         * \e E(\e k) is defined in http://dlmf.nist.gov/19.2.E5
+         * \f[
+         *   E(k) = \int_0^{\pi/2} \sqrt{1-k^2\sin^2\phi}\,d\phi.
+         * \f]
+         **********************************************************************/
+        double E();
+
+        /**
+         * Jahnke's complete integral.
+         *
+         * @return \e D(\e k).
+         *
+         * \e D(\e k) is defined in http://dlmf.nist.gov/19.2.E6
+         * \f[
+         *   D(k) = \int_0^{\pi/2} \frac{\sin^2\phi}{\sqrt{1-k^2\sin^2\phi}}\,d\phi.
+         * \f]
+         **********************************************************************/
+        double D();
+
+        /**
+         * The difference between the complete integrals of the first and second
+         * kinds.
+         *
+         * @return \e K(\e k) − \e E(\e k).
+         **********************************************************************/
+        double KE();
+
+        /**
+         * The complete integral of the third kind.
+         *
+         * @return Π(α<sup>2</sup>, \e k)
+         *
+         * Π(α<sup>2</sup>, \e k) is defined in
+         * http://dlmf.nist.gov/19.2.E7
+         * \f[
+         *   \Pi(\alpha^2, k) = \int_0^{\pi/2}
+         *     \frac1{\sqrt{1-k^2\sin^2\phi}(1 - \alpha^2\sin^2\phi_)}\,d\phi.
+         * \f]
+         **********************************************************************/
+        double Pi();
+
+        /**
+         * Legendre's complete geodesic longitude integral.
+         *
+         * @return \e G(α<sup>2</sup>, \e k)
+         *
+         * \e G(α<sup>2</sup>, \e k) is given by
+         * \f[
+         *   G(\alpha^2, k) = \int_0^{\pi/2}
+         *     \frac{\sqrt{1-k^2\sin^2\phi}}{1 - \alpha^2\sin^2\phi}\,d\phi.
+         * \f]
+         **********************************************************************/
+        double G();
+
+        /**
+         * Cayley's complete geodesic longitude difference integral.
+         *
+         * @return \e H(α<sup>2</sup>, \e k)
+         *
+         * \e H(α<sup>2</sup>, \e k) is given by
+         * \f[
+         *   H(\alpha^2, k) = \int_0^{\pi/2}
+         *     \frac{\cos^2\phi}{(1-\alpha^2\sin^2\phi)\sqrt{1-k^2\sin^2\phi}}
+         *     \,d\phi.
+         * \f]
+         **********************************************************************/
+        double H();
+        ///@}
+
+        /** \name Incomplete elliptic integrals.
+         **********************************************************************/
+        ///@{
+        /**
+         * The incomplete integral of the first kind.
+         *
+         * @param[in] phi
+         * @return \e F(φ, \e k).
+         *
+         * \e F(φ, \e k) is defined in http://dlmf.nist.gov/19.2.E4
+         * \f[
+         *   F(\phi, k) = \int_0^\phi \frac1{\sqrt{1-k^2\sin^2\theta}}\,d\theta.
+         * \f]
+         **********************************************************************/
+        double F(double phi);
+
+        /**
+         * The incomplete integral of the second kind.
+         *
+         * @param[in] phi
+         * @return \e E(φ, \e k).
+         *
+         * \e E(φ, \e k) is defined in http://dlmf.nist.gov/19.2.E5
+         * \f[
+         *   E(\phi, k) = \int_0^\phi \sqrt{1-k^2\sin^2\theta}\,d\theta.
+         * \f]
+         **********************************************************************/
+        double E(double phi);
+
+        /**
+         * The incomplete integral of the second kind with the argument given in
+         * degrees.
+         *
+         * @param[in] ang in <i>degrees</i>.
+         * @return \e E(π <i>ang</i>/180, \e k).
+         **********************************************************************/
+        double Ed(double ang);
+
+        /**
+         * The inverse of the incomplete integral of the second kind.
+         *
+         * @param[in] x
+         * @return φ = <i>E</i><sup>−1</sup>(\e x, \e k); i.e., the
+         *   solution of such that \e E(φ, \e k) = \e x.
+         **********************************************************************/
+        double Einv(double x);
+
+        /**
+         * The incomplete integral of the third kind.
+         *
+         * @param[in] phi
+         * @return Π(φ, α<sup>2</sup>, \e k).
+         *
+         * Π(φ, α<sup>2</sup>, \e k) is defined in
+         * http://dlmf.nist.gov/19.2.E7
+         * \f[
+         *   \Pi(\phi, \alpha^2, k) = \int_0^\phi
+         *     \frac1{\sqrt{1-k^2\sin^2\theta}(1 - \alpha^2\sin^2\theta_)}\,d\theta.
+         * \f]
+         **********************************************************************/
+        double Pi(double phi);
+
+        /**
+         * Jahnke's incomplete elliptic integral.
+         *
+         * @param[in] phi
+         * @return \e D(φ, \e k).
+         *
+         * \e D(φ, \e k) is defined in http://dlmf.nist.gov/19.2.E4
+         * \f[
+         *   D(\phi, k) = \int_0^\phi
+         *    \frac{\sin^2\theta}{\sqrt{1-k^2\sin^2\theta}}\,d\theta.
+         * \f]
+         **********************************************************************/
+        double D(double phi);
+
+        /**
+         * Legendre's geodesic longitude integral.
+         *
+         * @param[in] phi
+         * @return \e G(φ, α<sup>2</sup>, \e k).
+         *
+         * \e G(φ, α<sup>2</sup>, \e k) is defined by
+         * \f[
+         *   \begin{aligned}
+         *   G(\phi, \alpha^2, k) &=
+         *   \frac{k^2}{\alpha^2} F(\phi, k) +
+         *      \biggl(1 - \frac{k^2}{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\
+         *    &= \int_0^\phi
+         *     \frac{\sqrt{1-k^2\sin^2\theta}}{1 - \alpha^2\sin^2\theta}\,d\theta.
+         *   \end{aligned}
+         * \f]
+         *
+         * Legendre expresses the longitude of a point on the geodesic in terms of
+         * this combination of elliptic integrals in Exercices de Calcul
+         * Intégral, Vol. 1 (1811), p. 181,
+         * http://books.google.com/books?id=riIOAAAAQAAJ&pg=PA181.
+         *
+         * See \ref geodellip for the expression for the longitude in terms of this
+         * function.
+         **********************************************************************/
+        double G(double phi);
+
+        /**
+         * Cayley's geodesic longitude difference integral.
+         *
+         * @param[in] phi
+         * @return \e H(φ, α<sup>2</sup>, \e k).
+         *
+         * \e H(φ, α<sup>2</sup>, \e k) is defined by
+         * \f[
+         *   \begin{aligned}
+         *   H(\phi, \alpha^2, k) &=
+         *   \frac1{\alpha^2} F(\phi, k) +
+         *        \biggl(1 - \frac1{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\
+         *   &= \int_0^\phi
+         *     \frac{\cos^2\theta}{(1-\alpha^2\sin^2\theta)\sqrt{1-k^2\sin^2\theta}}
+         *     \,d\theta.
+         *   \end{aligned}
+         * \f]
+         *
+         * Cayley expresses the longitude difference of a point on the geodesic in
+         * terms of this combination of elliptic integrals in Phil. Mag. <b>40</b>
+         * (1870), p. 333, http://books.google.com/books?id=Zk0wAAAAIAAJ&pg=PA333.
+         *
+         * See \ref geodellip for the expression for the longitude in terms of this
+         * function.
+         **********************************************************************/
+        double H(double phi);
+        ///@}
+
+        /** \name Incomplete integrals in terms of Jacobi elliptic functions.
+         **********************************************************************/
+        /**
+         * The incomplete integral of the first kind in terms of Jacobi elliptic
+         * functions.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return \e F(φ, \e k) as though φ ∈ (−π, π].
+         **********************************************************************/
+        double F(double sn, double cn, double dn);
+
+        /**
+         * The incomplete integral of the second kind in terms of Jacobi elliptic
+         * functions.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return \e E(φ, \e k) as though φ ∈ (−π, π].
+         **********************************************************************/
+        double E(double sn, double cn, double dn);
+
+        /**
+         * The incomplete integral of the third kind in terms of Jacobi elliptic
+         * functions.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return Π(φ, α<sup>2</sup>, \e k) as though φ ∈
+         *   (−π, π].
+         **********************************************************************/
+        double Pi(double sn, double cn, double dn);
+
+        /**
+         * Jahnke's incomplete elliptic integral in terms of Jacobi elliptic
+         * functions.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return \e D(φ, \e k) as though φ ∈ (−π, π].
+         **********************************************************************/
+        double D(double sn, double cn, double dn);
+
+        /**
+         * Legendre's geodesic longitude integral in terms of Jacobi elliptic
+         * functions.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return \e G(φ, α<sup>2</sup>, \e k) as though φ ∈
+         *   (−π, π].
+         **********************************************************************/
+        double G(double sn, double cn, double dn);
+
+        /**
+         * Cayley's geodesic longitude difference integral in terms of Jacobi
+         * elliptic functions.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return \e H(φ, α<sup>2</sup>, \e k) as though φ ∈
+         *   (−π, π].
+         **********************************************************************/
+        double H(double sn, double cn, double dn);
+        ///@}
+
+        /** \name Periodic versions of incomplete elliptic integrals.
+         **********************************************************************/
+        ///@{
+        /**
+         * The periodic incomplete integral of the first kind.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return the periodic function π \e F(φ, \e k) / (2 \e K(\e k)) -
+         *   φ
+         **********************************************************************/
+        double deltaF(double sn, double cn, double dn);
+
+        /**
+         * The periodic incomplete integral of the second kind.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return the periodic function π \e E(φ, \e k) / (2 \e E(\e k)) -
+         *   φ
+         **********************************************************************/
+        double deltaE(double sn, double cn, double dn);
+
+        /**
+         * The periodic inverse of the incomplete integral of the second kind.
+         *
+         * @param[in] stau = sinτ
+         * @param[in] ctau = sinτ
+         * @return the periodic function <i>E</i><sup>−1</sup>(τ (2 \e
+         *   E(\e k)/π), \e k) - τ
+         **********************************************************************/
+        double deltaEinv(double stau, double ctau);
+
+        /**
+         * The periodic incomplete integral of the third kind.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return the periodic function π Π(φ, \e k) / (2 Π(\e k)) -
+         *   φ
+         **********************************************************************/
+        double deltaPi(double sn, double cn, double dn);
+
+        /**
+         * The periodic Jahnke's incomplete elliptic integral.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return the periodic function π \e D(φ, \e k) / (2 \e D(\e k)) -
+         *   φ
+         **********************************************************************/
+        double deltaD(double sn, double cn, double dn);
+
+        /**
+         * Legendre's periodic geodesic longitude integral.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return the periodic function π \e G(φ, \e k) / (2 \e G(\e k)) -
+         *   φ
+         **********************************************************************/
+        double deltaG(double sn, double cn, double dn);
+
+        /**
+         * Cayley's periodic geodesic longitude difference integral.
+         *
+         * @param[in] sn = sinφ
+         * @param[in] cn = cosφ
+         * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         * @return the periodic function π \e H(φ, \e k) / (2 \e H(\e k)) -
+         *   φ
+         **********************************************************************/
+        double deltaH(double sn, double cn, double dn);
+        ///@}
+
+        /** \name Elliptic functions.
+         **********************************************************************/
+        ///@{
+        /**
+         * The Jacobi elliptic functions.
+         *
+         * @param[in] x the argument.
+         * @param[out] sn sn(\e x, \e k).
+         * @param[out] cn cn(\e x, \e k).
+         * @param[out] dn dn(\e x, \e k).
+         **********************************************************************/
+        void sncndn(double x,
+            [System::Runtime::InteropServices::Out] double% sn,
+            [System::Runtime::InteropServices::Out] double% cn,
+            [System::Runtime::InteropServices::Out] double% dn);
+
+        /**
+         * The Δ amplitude function.
+         *
+         * @param[in] sn sinφ
+         * @param[in] cn cosφ
+         * @return Δ = sqrt(1 − <i>k</i><sup>2</sup>
+         *   sin<sup>2</sup>φ)
+         **********************************************************************/
+        double Delta(double sn, double cn);
+        ///@}
+
+        /** \name Symmetric elliptic integrals.
+         **********************************************************************/
+        ///@{
+        /**
+         * Symmetric integral of the first kind <i>R<sub>F</sub></i>.
+         *
+         * @param[in] x
+         * @param[in] y
+         * @param[in] z
+         * @return <i>R<sub>F</sub></i>(\e x, \e y, \e z)
+         *
+         * <i>R<sub>F</sub></i> is defined in http://dlmf.nist.gov/19.16.E1
+         * \f[ R_F(x, y, z) = \frac12
+         *       \int_0^\infty\frac1{\sqrt{(t + x) (t + y) (t + z)}}\, dt \f]
+         * If one of the arguments is zero, it is more efficient to call the
+         * two-argument version of this function with the non-zero arguments.
+         **********************************************************************/
+        static double RF(double x, double y, double z);
+
+        /**
+         * Complete symmetric integral of the first kind, <i>R<sub>F</sub></i> with
+         * one argument zero.
+         *
+         * @param[in] x
+         * @param[in] y
+         * @return <i>R<sub>F</sub></i>(\e x, \e y, 0)
+         **********************************************************************/
+        static double RF(double x, double y);
+
+        /**
+         * Degenerate symmetric integral of the first kind <i>R<sub>C</sub></i>.
+         *
+         * @param[in] x
+         * @param[in] y
+         * @return <i>R<sub>C</sub></i>(\e x, \e y) = <i>R<sub>F</sub></i>(\e x, \e
+         *   y, \e y)
+         *
+         * <i>R<sub>C</sub></i> is defined in http://dlmf.nist.gov/19.2.E17
+         * \f[ R_C(x, y) = \frac12
+         *       \int_0^\infty\frac1{\sqrt{t + x}(t + y)}\,dt \f]
+         **********************************************************************/
+        static double RC(double x, double y);
+
+        /**
+         * Symmetric integral of the second kind <i>R<sub>G</sub></i>.
+         *
+         * @param[in] x
+         * @param[in] y
+         * @param[in] z
+         * @return <i>R<sub>G</sub></i>(\e x, \e y, \e z)
+         *
+         * <i>R<sub>G</sub></i> is defined in Carlson, eq 1.5
+         * \f[ R_G(x, y, z) = \frac14
+         *       \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2}
+         *        \biggl(
+         *             \frac x{t + x} + \frac y{t + y} + \frac z{t + z}
+         *        \biggr)t\,dt \f]
+         * See also http://dlmf.nist.gov/19.16.E3.
+         * If one of the arguments is zero, it is more efficient to call the
+         * two-argument version of this function with the non-zero arguments.
+         **********************************************************************/
+        static double RG(double x, double y, double z);
+
+        /**
+         * Complete symmetric integral of the second kind, <i>R<sub>G</sub></i>
+         * with one argument zero.
+         *
+         * @param[in] x
+         * @param[in] y
+         * @return <i>R<sub>G</sub></i>(\e x, \e y, 0)
+         **********************************************************************/
+        static double RG(double x, double y);
+
+        /**
+         * Symmetric integral of the third kind <i>R<sub>J</sub></i>.
+         *
+         * @param[in] x
+         * @param[in] y
+         * @param[in] z
+         * @param[in] p
+         * @return <i>R<sub>J</sub></i>(\e x, \e y, \e z, \e p)
+         *
+         * <i>R<sub>J</sub></i> is defined in http://dlmf.nist.gov/19.16.E2
+         * \f[ R_J(x, y, z, p) = \frac32
+         *       \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2} (t + p)^{-1}\, dt \f]
+         **********************************************************************/
+        static double RJ(double x, double y, double z, double p);
+
+        /**
+         * Degenerate symmetric integral of the third kind <i>R<sub>D</sub></i>.
+         *
+         * @param[in] x
+         * @param[in] y
+         * @param[in] z
+         * @return <i>R<sub>D</sub></i>(\e x, \e y, \e z) = <i>R<sub>J</sub></i>(\e
+         *   x, \e y, \e z, \e z)
+         *
+         * <i>R<sub>D</sub></i> is defined in http://dlmf.nist.gov/19.16.E5
+         * \f[ R_D(x, y, z) = \frac32
+         *       \int_0^\infty[(t + x) (t + y)]^{-1/2} (t + z)^{-3/2}\, dt \f]
+         **********************************************************************/
+        static double RD(double x, double y, double z);
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/GeoCoords.cpp b/dotnet/NETGeographicLib/GeoCoords.cpp
new file mode 100644
index 0000000..a060068
--- /dev/null
+++ b/dotnet/NETGeographicLib/GeoCoords.cpp
@@ -0,0 +1,243 @@
+/**
+ * \file NETGeographicLib/GeoCoords.cpp
+ * \brief Implementation for NETGeographicLib::GeoCoords class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/GeoCoords.hpp"
+#include "GeoCoords.h"
+#include "UTMUPS.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::GeoCoords";
+
+//*****************************************************************************
+GeoCoords::!GeoCoords(void)
+{
+    if ( m_pGeoCoords != NULL )
+    {
+        delete m_pGeoCoords;
+        m_pGeoCoords = NULL;
+    }
+}
+
+//*****************************************************************************
+GeoCoords::GeoCoords()
+{
+    try
+    {
+        m_pGeoCoords = new GeographicLib::GeoCoords();
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+GeoCoords::GeoCoords(System::String^ s, bool centerp, bool swaplatlong )
+{
+    try
+    {
+        m_pGeoCoords = new GeographicLib::GeoCoords(StringConvert::ManagedToUnmanaged(s), centerp, swaplatlong);
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+GeoCoords::GeoCoords(double latitude, double longitude, int zone )
+{
+    try
+    {
+        m_pGeoCoords = new GeographicLib::GeoCoords(latitude, longitude, zone);
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+GeoCoords::GeoCoords(int zone, bool northp, double easting, double northing)
+{
+    try
+    {
+        m_pGeoCoords = new GeographicLib::GeoCoords(zone, northp, easting, northing);
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void GeoCoords::Reset( System::String^ s, bool centerp, bool swaplatlong )
+{
+    try
+    {
+        m_pGeoCoords->Reset(StringConvert::ManagedToUnmanaged(s), centerp, swaplatlong);
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void GeoCoords::Reset(double latitude, double longitude, int zone)
+{
+    try
+    {
+        m_pGeoCoords->Reset(latitude, longitude, zone);
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void GeoCoords::Reset(int zone, bool northp, double easting, double northing)
+{
+    try
+    {
+        m_pGeoCoords->Reset(zone, northp, easting, northing);
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void GeoCoords::AltZone::set( int zone )
+{
+    try
+    {
+        m_pGeoCoords->SetAltZone(zone);
+    }
+    catch ( GeographicLib::GeographicErr err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+int GeoCoords::AltZone::get() { return m_pGeoCoords->AltZone(); }
+
+//*****************************************************************************
+double GeoCoords::Latitude::get() { return m_pGeoCoords->Latitude(); }
+
+//*****************************************************************************
+double GeoCoords::Longitude::get() { return m_pGeoCoords->Longitude(); }
+
+//*****************************************************************************
+double GeoCoords::Easting::get() { return m_pGeoCoords->Easting(); }
+
+//*****************************************************************************
+double GeoCoords::Northing::get() { return m_pGeoCoords->Northing(); }
+
+//*****************************************************************************
+double GeoCoords::Convergence::get() { return m_pGeoCoords->Convergence(); }
+
+//*****************************************************************************
+double GeoCoords::Scale::get() { return m_pGeoCoords->Scale(); }
+
+//*****************************************************************************
+bool GeoCoords::Northp::get() { return m_pGeoCoords->Northp(); }
+
+//*****************************************************************************
+char GeoCoords::Hemisphere::get() { return m_pGeoCoords->Hemisphere(); }
+
+//*****************************************************************************
+int GeoCoords::Zone::get() { return m_pGeoCoords->Zone(); }
+
+//*****************************************************************************
+double GeoCoords::AltEasting::get() { return m_pGeoCoords->AltEasting(); }
+
+//*****************************************************************************
+double GeoCoords::AltNorthing::get() { return m_pGeoCoords->AltNorthing(); }
+
+//*****************************************************************************
+double GeoCoords::AltConvergence::get()
+{ return m_pGeoCoords->AltConvergence(); }
+
+//*****************************************************************************
+double GeoCoords::AltScale::get() { return m_pGeoCoords->AltScale(); }
+
+//*****************************************************************************
+double GeoCoords::MajorRadius::get() { return UTMUPS::MajorRadius(); }
+
+//*****************************************************************************
+double GeoCoords::Flattening::get() { return UTMUPS::Flattening(); }
+
+//*****************************************************************************
+System::String^ GeoCoords::GeoRepresentation(int prec, bool swaplatlong )
+{
+    return gcnew System::String( m_pGeoCoords->GeoRepresentation(prec, swaplatlong).c_str() );
+}
+
+//*****************************************************************************
+System::String^ GeoCoords::DMSRepresentation(int prec, bool swaplatlong,
+                                char dmssep )
+{
+    return gcnew System::String( m_pGeoCoords->DMSRepresentation(prec, swaplatlong, dmssep).c_str() );
+}
+
+//*****************************************************************************
+System::String^ GeoCoords::MGRSRepresentation(int prec)
+{
+    return gcnew System::String( m_pGeoCoords->MGRSRepresentation(prec).c_str() );
+}
+
+//*****************************************************************************
+System::String^ GeoCoords::UTMUPSRepresentation(int prec)
+{
+    return gcnew System::String( m_pGeoCoords->UTMUPSRepresentation(prec).c_str() );
+}
+
+//*****************************************************************************
+System::String^ GeoCoords::UTMUPSRepresentation(bool northp, int prec)
+{
+    return gcnew System::String( m_pGeoCoords->UTMUPSRepresentation(northp, prec).c_str() );
+}
+
+//*****************************************************************************
+System::String^ GeoCoords::AltMGRSRepresentation(int prec)
+{
+    return gcnew System::String( m_pGeoCoords->AltMGRSRepresentation(prec).c_str() );
+}
+
+//*****************************************************************************
+System::String^ GeoCoords::AltUTMUPSRepresentation(int prec)
+{
+    return gcnew System::String( m_pGeoCoords->AltUTMUPSRepresentation(prec).c_str() );
+}
+
+//*****************************************************************************
+System::String^ GeoCoords::AltUTMUPSRepresentation(bool northp, int prec)
+{
+    return gcnew System::String( m_pGeoCoords->AltUTMUPSRepresentation(northp, prec).c_str() );
+}
diff --git a/dotnet/NETGeographicLib/GeoCoords.h b/dotnet/NETGeographicLib/GeoCoords.h
new file mode 100644
index 0000000..bbc012a
--- /dev/null
+++ b/dotnet/NETGeographicLib/GeoCoords.h
@@ -0,0 +1,474 @@
+/**
+ * \file NETGeographicLib/GeoCoords.h
+ * \brief Header for NETGeographicLib::GeoCoords class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::GeoCoords.
+   *
+   * This class allows .NET applications to access GeographicLib::GeoCoords.
+   *
+   * This class stores a geographic position which may be set via the
+   * constructors or Reset via
+   * - latitude and longitude
+   * - UTM or UPS coordinates
+   * - a string representation of these or an MGRS coordinate string
+   *
+   * The state consists of the latitude and longitude and the supplied UTM or
+   * UPS coordinates (possibly derived from the MGRS coordinates).  If latitude
+   * and longitude were given then the UTM/UPS coordinates follows the standard
+   * conventions.
+   *
+   * The mutable state consists of the UTM or UPS coordinates for a alternate
+   * zone.  A method SetAltZone is provided to set the alternate UPS/UTM zone.
+   *
+   * Methods are provided to return the geographic coordinates, the input UTM
+   * or UPS coordinates (and associated meridian convergence and scale), or
+   * alternate UTM or UPS coordinates (and their associated meridian
+   * convergence and scale).
+   *
+   * Once the input string has been parsed, you can print the result out in any
+   * of the formats, decimal degrees, degrees minutes seconds, MGRS, UTM/UPS.
+   *
+   * C# Example:
+   * \include example-GeoCoords.cs
+   * Managed C++ Example:
+   * \include example-GeoCoords.cpp
+   * Visual Basic Example:
+   * \include example-GeoCoords.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The following functions are implemented as properties: MajorRadius,
+   * Flattening, Latitude, Longitude, Easting, Northing, Convergence,
+   * Scale, Northp, Hemisphere, Zone, AltZone, AltEasting, AltNorthing,
+   * AltConvergence, and AltScale.
+   **********************************************************************/
+    public ref class GeoCoords
+    {
+        private:
+        // pointer to the unmanaged  GeographicLib::GeoCoords
+        GeographicLib::GeoCoords* m_pGeoCoords;
+
+        // The finalizer frees unmanaged memory when the object is destroyed.
+        !GeoCoords();
+    public:
+        /** \name Initializing the GeoCoords object
+         **********************************************************************/
+        ///@{
+        /**
+         * The default constructor is equivalent to \e latitude = 90°,
+         * \e longitude = 0°.
+         **********************************************************************/
+        GeoCoords();
+
+        /**
+         * Construct from a string.
+         *
+         * @param[in] s 1-element, 2-element, or 3-element string representation of
+         *   the position.
+         * @param[in] centerp governs the interpretation of MGRS coordinates (see
+         *   below).
+         * @param[in] swaplatlong governs the interpretation of geographic
+         *   coordinates (see below).
+         * @exception GeographicErr if the \e s is malformed (see below).
+         *
+         * Parse as a string and interpret it as a geographic position.  The input
+         * string is broken into space (or comma) separated pieces and Basic
+         * decision on which format is based on number of components
+         * -# MGRS
+         * -# "Lat Long" or "Long Lat"
+         * -# "Zone Easting Northing" or "Easting Northing Zone"
+         *
+         * The following inputs are approximately the same (Ar Ramadi Bridge, Iraq)
+         * - Latitude and Longitude
+         *   -  33.44      43.27
+         *   -  N33d26.4'  E43d16.2'
+         *   -  43d16'12"E 33d26'24"N
+         *   -  43:16:12E  33:26:24
+         * - MGRS
+         *   -  38SLC301
+         *   -  38SLC391014
+         *   -  38SLC3918701405
+         *   -  37SHT9708
+         * - UTM
+         *   -  38N 339188 3701405
+         *   -  897039 3708229 37N
+         *
+         * <b>Latitude and Longitude parsing</b>: Latitude precedes longitude,
+         * unless a N, S, E, W hemisphere designator is used on one or both
+         * coordinates.  If \e swaplatlong = true (default is false), then
+         * longitude precedes latitude in the absence of a hemisphere designator.
+         * Thus (with \e swaplatlong = false)
+         * - 40 -75
+         * - N40 W75
+         * - -75 N40
+         * - 75W 40N
+         * - E-75 -40S
+         * .
+         * are all the same position.  The coordinates may be given in
+         * decimal degrees, degrees and decimal minutes, degrees, minutes,
+         * seconds, etc.  Use d, ', and " to mark off the degrees,
+         * minutes and seconds.  Various alternative symbols for degrees, minutes,
+         * and seconds are allowed.  Alternatively, use : to separate these
+         * components.  (See DMS::Decode for details.)  Thus
+         * - 40d30'30"
+         * - 40d30'30
+         * - 40°30'30
+         * - 40d30.5'
+         * - 40d30.5
+         * - 40:30:30
+         * - 40:30.5
+         * - 40.508333333
+         * .
+         * all specify the same angle.  The leading sign applies to all components
+         * so -1d30 is -(1+30/60) = -1.5.  Latitudes must be in the range
+         * [−90°, 90°] and longitudes in the range
+         * [−540°, 540°).  Internally longitudes are reduced
+         * to the range [−180°, 180°).
+         *
+         * <b>UTM/UPS parsing</b>: For UTM zones (−80° ≤ Lat <
+         * 84°), the zone designator is made up of a zone number (for 1 to 60)
+         * and a hemisphere letter (N or S), e.g., 38N.  The latitude zone designer
+         * ([C--M] in the southern hemisphere and [N--X] in the northern) should
+         * NOT be used.  (This is part of the MGRS coordinate.)  The zone
+         * designator for the poles (where UPS is employed) is a hemisphere letter
+         * by itself, i.e., N or S.
+         *
+         * <b>MGRS parsing</b> interprets the grid references as square area at the
+         * specified precision (1m, 10m, 100m, etc.).  If \e centerp = true (the
+         * default), the center of this square is then taken to be the precise
+         * position; thus:
+         * - 38SMB           = 38N 450000 3650000
+         * - 38SMB4484       = 38N 444500 3684500
+         * - 38SMB44148470   = 38N 444145 3684705
+         * .
+         * Otherwise, the "south-west" corner of the square is used, i.e.,
+         * - 38SMB           = 38N 400000 3600000
+         * - 38SMB4484       = 38N 444000 3684000
+         * - 38SMB44148470   = 38N 444140 3684700
+         **********************************************************************/
+        GeoCoords(System::String^ s, bool centerp, bool swaplatlong );
+
+        /**
+         * Construct from geographic coordinates.
+         *
+         * @param[in] latitude (degrees).
+         * @param[in] longitude (degrees).
+         * @param[in] zone if specified, force the UTM/UPS representation to use a
+         *   specified zone using the rules given in UTMUPS::zonespec.
+         * @exception GeographicErr if \e latitude is not in [−90°,
+         *   90°].
+         * @exception GeographicErr if \e longitude is not in [−540°,
+         *   540°).
+         * @exception GeographicErr if \e zone cannot be used for this location.
+         **********************************************************************/
+        GeoCoords(double latitude, double longitude, int zone );
+
+        /**
+         * Construct from UTM/UPS coordinates.
+         *
+         * @param[in] zone UTM zone (zero means UPS).
+         * @param[in] northp hemisphere (true means north, false means south).
+         * @param[in] easting (meters).
+         * @param[in] northing (meters).
+         * @exception GeographicErr if \e zone, \e easting, or \e northing is
+         *   outside its allowed range.
+         **********************************************************************/
+        GeoCoords(int zone, bool northp, double easting, double northing);
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~GeoCoords() { this->!GeoCoords(); }
+
+        /**
+         * Reset the location from a string.  See
+         * GeoCoords(const std::string& s, bool centerp, bool swaplatlong).
+         *
+         * @param[in] s 1-element, 2-element, or 3-element string representation of
+         *   the position.
+         * @param[in] centerp governs the interpretation of MGRS coordinates.
+         * @param[in] swaplatlong governs the interpretation of geographic
+         *   coordinates.
+         * @exception GeographicErr if the \e s is malformed.
+         **********************************************************************/
+        void Reset( System::String^ s, bool centerp, bool swaplatlong);
+
+        /**
+         * Reset the location in terms of geographic coordinates.  See
+         * GeoCoords(double latitude, double longitude, int zone).
+         *
+         * @param[in] latitude (degrees).
+         * @param[in] longitude (degrees).
+         * @param[in] zone if specified, force the UTM/UPS representation to use a
+         *   specified zone using the rules given in UTMUPS::zonespec.
+         * @exception GeographicErr if \e latitude is not in [−90°,
+         *   90°].
+         * @exception GeographicErr if \e longitude is not in [−540°,
+         *   540°).
+         * @exception GeographicErr if \e zone cannot be used for this location.
+         **********************************************************************/
+        void Reset(double latitude, double longitude, int zone ) ;
+
+        /**
+         * Reset the location in terms of UPS/UPS coordinates.  See
+         * GeoCoords(int zone, bool northp, double easting, double northing).
+         *
+         * @param[in] zone UTM zone (zero means UPS).
+         * @param[in] northp hemisphere (true means north, false means south).
+         * @param[in] easting (meters).
+         * @param[in] northing (meters).
+         * @exception GeographicErr if \e zone, \e easting, or \e northing is
+         *   outside its allowed range.
+         **********************************************************************/
+        void Reset(int zone, bool northp, double easting, double northing);
+        ///@}
+
+        /** \name Querying the GeoCoords object
+         **********************************************************************/
+        ///@{
+        /**
+         * @return latitude (degrees)
+         **********************************************************************/
+        property double Latitude { double get(); }
+
+        /**
+         * @return longitude (degrees)
+         **********************************************************************/
+        property double Longitude { double get(); }
+
+        /**
+         * @return easting (meters)
+         **********************************************************************/
+        property double Easting { double get(); }
+
+        /**
+         * @return northing (meters)
+         **********************************************************************/
+        property double Northing { double get(); }
+
+        /**
+         * @return meridian convergence (degrees) for the UTM/UPS projection.
+         **********************************************************************/
+        property double Convergence { double get(); }
+
+        /**
+         * @return scale for the UTM/UPS projection.
+         **********************************************************************/
+        property double Scale { double get(); }
+
+        /**
+         * @return hemisphere (false means south, true means north).
+         **********************************************************************/
+        property bool Northp { bool get(); }
+
+        /**
+         * @return hemisphere letter N or S.
+         **********************************************************************/
+        property char Hemisphere { char get(); }
+
+        /**
+         * @return the zone corresponding to the input (return 0 for UPS).
+         **********************************************************************/
+        property int Zone { int get(); }
+
+        /**
+         * Gets/Sets the current alternate zone (0 = UPS).
+         * @exception GeographicErr if \e zone cannot be used for this location.
+         *
+         * See UTMUPS::zonespec for more information on the interpretation of \e
+         * zone.  Note that \e zone == UTMUPS::STANDARD (the default) use the
+         * standard UPS or UTM zone, UTMUPS::MATCH does nothing retaining the
+         * existing alternate representation.  Before this is called the alternate
+         * zone is the input zone.
+         **********************************************************************/
+        property int AltZone
+        {
+            int get();
+            void set( int zone );
+        }
+        ///@}
+
+        /**
+         * @return easting (meters) for alternate zone.
+         **********************************************************************/
+        property double AltEasting { double get(); }
+
+        /**
+         * @return northing (meters) for alternate zone.
+         **********************************************************************/
+        property double AltNorthing { double get(); }
+
+        /**
+         * @return meridian convergence (degrees) for alternate zone.
+         **********************************************************************/
+        property double AltConvergence { double get(); }
+
+        /**
+         * @return scale for alternate zone.
+         **********************************************************************/
+        property double AltScale { double get(); }
+        ///@}
+
+        /** \name String representations of the GeoCoords object
+         **********************************************************************/
+        ///@{
+        /**
+         * String representation with latitude and longitude as signed decimal
+         * degrees.
+         *
+         * @param[in] prec precision (relative to about 1m).
+         * @param[in] swaplatlong if true give longitude first (default = false)
+         * @exception std::bad_alloc if memory for the string can't be allocated.
+         * @return decimal latitude/longitude string representation.
+         *
+         * Precision specifies accuracy of representation as follows:
+         * - prec = −5 (min), 1°
+         * - prec = 0, 10<sup>−5</sup>° (about 1m)
+         * - prec = 3, 10<sup>−8</sup>°
+         * - prec = 9 (max), 10<sup>−14</sup>°
+         **********************************************************************/
+        System::String^ GeoRepresentation(int prec, bool swaplatlong );
+
+        /**
+         * String representation with latitude and longitude as degrees, minutes,
+         * seconds, and hemisphere.
+         *
+         * @param[in] prec precision (relative to about 1m)
+         * @param[in] swaplatlong if true give longitude first (default = false)
+         * @param[in] dmssep if non-null, use as the DMS separator character
+         *   (instead of d, ', " delimiters).
+         * @exception std::bad_alloc if memory for the string can't be allocated.
+         * @return DMS latitude/longitude string representation.
+         *
+         * Precision specifies accuracy of representation as follows:
+         * - prec = −5 (min), 1°
+         * - prec = −4, 0.1°
+         * - prec = −3, 1'
+         * - prec = −2, 0.1'
+         * - prec = −1, 1"
+         * - prec = 0, 0.1" (about 3m)
+         * - prec = 1, 0.01"
+         * - prec = 10 (max), 10<sup>−11</sup>"
+         **********************************************************************/
+        System::String^ DMSRepresentation(int prec, bool swaplatlong,
+                                      char dmssep );
+
+        /**
+         * MGRS string.
+         *
+         * @param[in] prec precision (relative to about 1m).
+         * @exception std::bad_alloc if memory for the string can't be allocated.
+         * @return MGRS string.
+         *
+         * This gives the coordinates of the enclosing grid square with size given
+         * by the precision.  Thus 38N 444180 3684790 converted to a MGRS
+         * coordinate at precision −2 (100m) is 38SMB441847 and not
+         * 38SMB442848.  \e prec specifies the precision of the MGRS string as
+         * follows:
+         * - prec = −5 (min), 100km
+         * - prec = −4, 10km
+         * - prec = −3, 1km
+         * - prec = −2, 100m
+         * - prec = −1, 10m
+         * - prec = 0, 1m
+         * - prec = 1, 0.1m
+         * - prec = 6 (max), 1μm
+         **********************************************************************/
+        System::String^ MGRSRepresentation(int prec);
+
+        /**
+         * UTM/UPS string.
+         *
+         * @param[in] prec precision (relative to about 1m)
+         * @exception std::bad_alloc if memory for the string can't be allocated.
+         * @return UTM/UPS string representation: zone designator, easting, and
+         *   northing.
+         *
+         * Precision specifies accuracy of representation as follows:
+         * - prec = −5 (min), 100km
+         * - prec = −3, 1km
+         * - prec = 0, 1m
+         * - prec = 3, 1mm
+         * - prec = 6, 1μm
+         * - prec = 9 (max), 1nm
+         **********************************************************************/
+        System::String^ UTMUPSRepresentation(int prec);
+
+        /**
+         * UTM/UPS string with hemisphere override.
+         *
+         * @param[in] prec precision (relative to about 1m)
+         * @param[in] northp hemisphere override
+         * @exception GeographicErr if the hemisphere override attempts to change
+         *   UPS N to UPS S or vice verse.
+         * @exception std::bad_alloc if memory for the string can't be allocated.
+         * @return UTM/UPS string representation: zone designator, easting, and
+         *   northing.
+         **********************************************************************/
+        System::String^ UTMUPSRepresentation(bool northp, int prec);
+
+        /**
+         * MGRS string for the alternate zone.  See GeoCoords::MGRSRepresentation.
+         *
+         * @param[in] prec precision (relative to about 1m).
+         * @exception std::bad_alloc if memory for the string can't be allocated.
+         * @return MGRS string.
+         **********************************************************************/
+        System::String^ AltMGRSRepresentation(int prec);
+
+        /**
+         * UTM/UPS string for the alternate zone.  See
+         * GeoCoords::UTMUPSRepresentation.
+         *
+         * @param[in] prec precision (relative to about 1m)
+         * @exception std::bad_alloc if memory for the string can't be allocated.
+         * @return UTM/UPS string representation: zone designator, easting, and
+         *   northing.
+         **********************************************************************/
+        System::String^ AltUTMUPSRepresentation(int prec);
+
+        /**
+         * UTM/UPS string for the alternate zone, with hemisphere override.
+         *
+         * @param[in] prec precision (relative to about 1m)
+         * @param[in] northp hemisphere override
+         * @exception GeographicErr if the hemisphere override attempts to change
+         *   UPS N to UPS S or vice verse.
+         * @exception std::bad_alloc if memory for the string can't be allocated.
+         * @return UTM/UPS string representation: zone designator, easting, and
+         *   northing.
+         **********************************************************************/
+        System::String^ AltUTMUPSRepresentation(bool northp, int prec);
+        ///@}
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the WGS84 ellipsoid (meters).
+         *
+         * (The WGS84 value is returned because the UTM and UPS projections are
+         * based on this ellipsoid.)
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the WGS84 ellipsoid.
+         *
+         * (The WGS84 value is returned because the UTM and UPS projections are
+         * based on this ellipsoid.)
+         **********************************************************************/
+        property double Flattening { double get(); }
+        ///@}
+    };
+} //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/Geocentric.cpp b/dotnet/NETGeographicLib/Geocentric.cpp
new file mode 100644
index 0000000..2bbfade
--- /dev/null
+++ b/dotnet/NETGeographicLib/Geocentric.cpp
@@ -0,0 +1,151 @@
+/**
+ * \file NETGeographicLib/Geocentric.cpp
+ * \brief Implementation for NETGeographicLib::Geocentric class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/Geocentric.hpp"
+#include "Geocentric.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Unable to allocate memory for a GeographicLib::Geocentric";
+
+//*****************************************************************************
+Geocentric::!Geocentric()
+{
+    if ( m_pGeocentric != NULL )
+    {
+        delete m_pGeocentric;
+        m_pGeocentric = NULL;
+    }
+}
+
+//*****************************************************************************
+Geocentric::Geocentric(void)
+{
+    try
+    {
+        m_pGeocentric = new GeographicLib::Geocentric(
+            GeographicLib::Geocentric::WGS84 );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+Geocentric::Geocentric(double a, double f)
+{
+    try
+    {
+        m_pGeocentric = new GeographicLib::Geocentric( a, f );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch (std::exception err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+Geocentric::Geocentric( const GeographicLib::Geocentric& g )
+{
+    try
+    {
+        m_pGeocentric = new GeographicLib::Geocentric( g );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void Geocentric::Forward(double lat, double lon, double h,
+    [System::Runtime::InteropServices::Out] double% X,
+    [System::Runtime::InteropServices::Out] double% Y,
+    [System::Runtime::InteropServices::Out] double% Z)
+{
+    double lX, lY, lZ;
+    m_pGeocentric->Forward( lat, lon, h, lX, lY, lZ);
+    X = lX;
+    Y = lY;
+    Z = lZ;
+}
+
+//*****************************************************************************
+void Geocentric::Forward(double lat, double lon, double h,
+    [System::Runtime::InteropServices::Out] double% X,
+    [System::Runtime::InteropServices::Out] double% Y,
+    [System::Runtime::InteropServices::Out] double% Z,
+    [System::Runtime::InteropServices::Out] array<double,2>^% M)
+{
+    double lX, lY, lZ;
+    std::vector<double> lM(9);
+    m_pGeocentric->Forward( lat, lon, h, lX, lY, lZ, lM);
+    X = lX;
+    Y = lY;
+    Z = lZ;
+    M = gcnew array<double,2>( 3, 3 );
+    for ( int i = 0; i < 3; i++ )
+        for ( int j = 0; j < 3; j++ )
+            M[i,j] = lM[3*i+j];
+}
+
+//*****************************************************************************
+void Geocentric::Reverse(double X, double Y, double Z,
+    [System::Runtime::InteropServices::Out] double% lat,
+    [System::Runtime::InteropServices::Out] double% lon,
+    [System::Runtime::InteropServices::Out] double% h)
+{
+    double llat, llon, lh;
+    m_pGeocentric->Reverse(X, Y, Z, llat, llon, lh);
+    lat = llat;
+    lon = llon;
+    h = lh;
+}
+
+//*****************************************************************************
+void Geocentric::Reverse(double X, double Y, double Z,
+    [System::Runtime::InteropServices::Out] double% lat,
+    [System::Runtime::InteropServices::Out] double% lon,
+    [System::Runtime::InteropServices::Out] double% h,
+    [System::Runtime::InteropServices::Out] array<double,2>^% M)
+{
+    std::vector<double> lM(9);
+    double llat, llon, lh;
+    m_pGeocentric->Reverse(X, Y, Z, llat, llon, lh, lM);
+    lat = llat;
+    lon = llon;
+    h = lh;
+    M = gcnew array<double,2>( 3, 3 );
+    for ( int i = 0; i < 3; i++ )
+        for ( int j = 0; j < 3; j++ )
+            M[i,j] = lM[3*i+j];
+}
+
+//*****************************************************************************
+System::IntPtr^ Geocentric::GetUnmanaged()
+{
+    return gcnew System::IntPtr( const_cast<void*>(
+        reinterpret_cast<const void*>(m_pGeocentric) ) );
+}
+
+//*****************************************************************************
+double Geocentric::MajorRadius::get()
+{ return m_pGeocentric->MajorRadius(); }
+
+//*****************************************************************************
+double Geocentric::Flattening::get()
+{ return m_pGeocentric->Flattening(); }
diff --git a/dotnet/NETGeographicLib/Geocentric.h b/dotnet/NETGeographicLib/Geocentric.h
new file mode 100644
index 0000000..2052ac4
--- /dev/null
+++ b/dotnet/NETGeographicLib/Geocentric.h
@@ -0,0 +1,227 @@
+/**
+ * \file NETGeographicLib/Geocentric.h
+ * \brief Header for NETGeographicLib::Geocentric class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::Geocentric.
+   *
+   * This class allows .NET applications to access GeographicLib::Geocentric.
+   *
+   * Convert between geodetic coordinates latitude = \e lat, longitude = \e
+   * lon, height = \e h (measured vertically from the surface of the ellipsoid)
+   * to geocentric coordinates (\e X, \e Y, \e Z).  The origin of geocentric
+   * coordinates is at the center of the earth.  The \e Z axis goes thru the
+   * north pole, \e lat = 90°.  The \e X axis goes thru \e lat = 0,
+   * \e lon = 0.  %Geocentric coordinates are also known as earth centered,
+   * earth fixed (ECEF) coordinates.
+   *
+   * The conversion from geographic to geocentric coordinates is
+   * straightforward.  For the reverse transformation we use
+   * - H. Vermeille,
+   *   <a href="http://dx.doi.org/10.1007/s00190-002-0273-6"> Direct
+   *   transformation from geocentric coordinates to geodetic coordinates</a>,
+   *   J. Geodesy 76, 451--454 (2002).
+   * .
+   * Several changes have been made to ensure that the method returns accurate
+   * results for all finite inputs (even if \e h is infinite).  The changes are
+   * described in Appendix B of
+   * - C. F. F. Karney,
+   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
+   *   on an ellipsoid of revolution</a>,
+   *   Feb. 2011;
+   *   preprint
+   *   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.
+   * .
+   * See \ref geocentric for more information.
+   *
+   * The errors in these routines are close to round-off.  Specifically, for
+   * points within 5000 km of the surface of the ellipsoid (either inside or
+   * outside the ellipsoid), the error is bounded by 7 nm (7 nanometers) for
+   * the WGS84 ellipsoid.  See \ref geocentric for further information on the
+   * errors.
+   *
+   * C# Example:
+   * \include example-Geocentric.cs
+   * Managed C++ Example:
+   * \include example-Geocentric.cpp
+   * Visual Basic Example:
+   * \include example-Geocentric.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor is provided that assumes WGS84 parameters.
+   *
+   * The MajorRadius and Flattening functions are implemented as properties.
+   *
+   * The Forward and Reverse functions return rotation matrices as 2D,
+   * 3 × 3 arrays rather than vectors.
+   **********************************************************************/
+    public ref class Geocentric
+    {
+    private:
+        // pointer to the unmanaged GeographicLib::Geocentric
+        const GeographicLib::Geocentric* m_pGeocentric;
+
+        // The finalizer frees unmanaged memory when the object is destroyed.
+        !Geocentric();
+    public:
+        /**
+         * Constructor for a ellipsoid with
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+         *   positive.
+         **********************************************************************/
+        Geocentric(double a, double f);
+
+        /**
+         * A default constructor which assumes WGS84.
+         **********************************************************************/
+        Geocentric();
+
+        /**
+         * A constructor that is initialized from an unmanaged
+         * GeographicLib::Geocentric.  For internal use only.
+         * @param[in] g An existing GeographicLib::Geocentric.
+         **********************************************************************/
+        Geocentric( const GeographicLib::Geocentric& g );
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~Geocentric()
+        { this->!Geocentric(); }
+
+        /**
+         * Convert from geodetic to geocentric coordinates.
+         *
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[in] h height of point above the ellipsoid (meters).
+         * @param[out] X geocentric coordinate (meters).
+         * @param[out] Y geocentric coordinate (meters).
+         * @param[out] Z geocentric coordinate (meters).
+         *
+         * \e lat should be in the range [−90°, 90°]; \e lon
+         * should be in the range [−540°, 540°).
+         **********************************************************************/
+        void Forward(double lat, double lon, double h,
+            [System::Runtime::InteropServices::Out] double% X,
+            [System::Runtime::InteropServices::Out] double% Y,
+            [System::Runtime::InteropServices::Out] double% Z);
+
+        /**
+         * Convert from geodetic to geocentric coordinates and return rotation
+         * matrix.
+         *
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[in] h height of point above the ellipsoid (meters).
+         * @param[out] X geocentric coordinate (meters).
+         * @param[out] Y geocentric coordinate (meters).
+         * @param[out] Z geocentric coordinate (meters).
+         * @param[out] M a 3 × 3 rotation matrix.
+         *
+         * Let \e v be a unit vector located at (\e lat, \e lon, \e h).  We can
+         * express \e v as \e column vectors in one of two ways
+         * - in east, north, up coordinates (where the components are relative to a
+         *   local coordinate system at (\e lat, \e lon, \e h)); call this
+         *   representation \e v1.
+         * - in geocentric \e X, \e Y, \e Z coordinates; call this representation
+         *   \e v0.
+         * .
+         * Then we have \e v0 = \e M ⋅ \e v1.
+         **********************************************************************/
+        void Forward(double lat, double lon, double h,
+            [System::Runtime::InteropServices::Out] double% X,
+            [System::Runtime::InteropServices::Out] double% Y,
+            [System::Runtime::InteropServices::Out] double% Z,
+            [System::Runtime::InteropServices::Out] array<double,2>^% M);
+
+        /**
+         * Convert from geocentric to geodetic to coordinates.
+         *
+         * @param[in] X geocentric coordinate (meters).
+         * @param[in] Y geocentric coordinate (meters).
+         * @param[in] Z geocentric coordinate (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] h height of point above the ellipsoid (meters).
+         *
+         * In general there are multiple solutions and the result which maximizes
+         * \e h is returned.  If there are still multiple solutions with different
+         * latitudes (applies only if \e Z = 0), then the solution with \e lat > 0
+         * is returned.  If there are still multiple solutions with different
+         * longitudes (applies only if \e X = \e Y = 0) then \e lon = 0 is
+         * returned.  The value of \e h returned satisfies \e h ≥ − \e a
+         * (1 − <i>e</i><sup>2</sup>) / sqrt(1 − <i>e</i><sup>2</sup>
+         * sin<sup>2</sup>\e lat).  The value of \e lon returned is in the range
+         * [−180°, 180°).
+         **********************************************************************/
+        void Reverse(double X, double Y, double Z,
+            [System::Runtime::InteropServices::Out] double% lat,
+            [System::Runtime::InteropServices::Out] double% lon,
+            [System::Runtime::InteropServices::Out] double% h);
+
+        /**
+         * Convert from geocentric to geodetic to coordinates.
+         *
+         * @param[in] X geocentric coordinate (meters).
+         * @param[in] Y geocentric coordinate (meters).
+         * @param[in] Z geocentric coordinate (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] h height of point above the ellipsoid (meters).
+         * @param[out] M a 3 × 3 rotation matrix.
+         *
+         * Let \e v be a unit vector located at (\e lat, \e lon, \e h).  We can
+         * express \e v as \e column vectors in one of two ways
+         * - in east, north, up coordinates (where the components are relative to a
+         *   local coordinate system at (\e lat, \e lon, \e h)); call this
+         *   representation \e v1.
+         * - in geocentric \e X, \e Y, \e Z coordinates; call this representation
+         *   \e v0.
+         * .
+         * Then we have \e v1 = \e M<sup>T</sup> ⋅ \e v0, where \e
+         * M<sup>T</sup> is the transpose of \e M.
+         **********************************************************************/
+        void Reverse(double X, double Y, double Z,
+            [System::Runtime::InteropServices::Out] double% lat,
+            [System::Runtime::InteropServices::Out] double% lon,
+            [System::Runtime::InteropServices::Out] double% h,
+            [System::Runtime::InteropServices::Out] array<double,2>^% M);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return a pointer to the unmanaged GeographicLib::Geocentric.
+         **********************************************************************/
+        System::IntPtr^ GetUnmanaged();
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the  flattening of the ellipsoid.  This is the
+         *   value used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/Geodesic.cpp b/dotnet/NETGeographicLib/Geodesic.cpp
new file mode 100644
index 0000000..dadd022
--- /dev/null
+++ b/dotnet/NETGeographicLib/Geodesic.cpp
@@ -0,0 +1,483 @@
+/**
+ * \file NETGeographicLib/Geodesic.cpp
+ * \brief Implementation for NETGeographicLib::Geodesic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include <GeographicLib/Geodesic.hpp>
+#include "Geodesic.h"
+#include "GeodesicLine.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::Geodesic";
+
+//*****************************************************************************
+Geodesic::!Geodesic()
+{
+    if ( m_pGeodesic != NULL )
+    {
+        delete m_pGeodesic;
+        m_pGeodesic = NULL;
+    }
+}
+
+//*****************************************************************************
+Geodesic::Geodesic(double a, double f)
+{
+    try
+    {
+        m_pGeodesic = new GeographicLib::Geodesic( a, f );
+    }
+    catch ( std::bad_alloc err )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( GeographicLib::GeographicErr err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+Geodesic::Geodesic()
+{
+    try
+    {
+        m_pGeodesic = new GeographicLib::Geodesic( GeographicLib::Geodesic::WGS84 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+double Geodesic::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21,
+                    [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesic->Direct(lat1, lon1, azi1, s12,
+                    llat2, llon2, lazi2, lm12, lM12, lM21, lS12);
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double llat2, llon2;
+    double out = m_pGeodesic->Direct(lat1, lon1, azi1, s12,
+                    llat2, llon2 );
+    lat2 = llat2;
+    lon2 = llon2;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double llat2, llon2, lazi2;
+    double out = m_pGeodesic->Direct(lat1, lon1, azi1, s12,
+                    llat2, llon2, lazi2 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12)
+{
+    double llat2, llon2, lazi2, lm12;
+    double out = m_pGeodesic->Direct(lat1, lon1, azi1, s12,
+                    llat2, llon2, lazi2, lm12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, lM12, lM21;
+    double out = m_pGeodesic->Direct(lat1, lon1, azi1, s12,
+                    llat2, llon2, lazi2, lM12, lM21);
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, lm12, lM12, lM21;
+    double out = m_pGeodesic->Direct(lat1, lon1, azi1, s12,
+                    llat2, llon2, lazi2, lm12, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+void Geodesic::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% m12,
+                [System::Runtime::InteropServices::Out] double% M12,
+                [System::Runtime::InteropServices::Out] double% M21,
+                [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12;
+    m_pGeodesic->ArcDirect(lat1, lon1, azi1, a12,
+            llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12);
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+}
+
+//*****************************************************************************
+void Geodesic::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double llat2, llon2;
+    m_pGeodesic->ArcDirect(lat1, lon1, azi1, a12, llat2, llon2 );
+    lat2 = llat2;
+    lon2 = llon2;
+}
+
+//*****************************************************************************
+void Geodesic::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                   [System::Runtime::InteropServices::Out] double% lat2,
+                   [System::Runtime::InteropServices::Out] double% lon2,
+                   [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double llat2, llon2, lazi2;
+    m_pGeodesic->ArcDirect(lat1, lon1, azi1, a12, llat2, llon2, lazi2 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+}
+
+//*****************************************************************************
+void Geodesic::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12)
+{
+    double llat2, llon2, lazi2, ls12;
+    m_pGeodesic->ArcDirect(lat1, lon1, azi1, a12,
+            llat2, llon2, lazi2, ls12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+}
+
+//*****************************************************************************
+void Geodesic::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% m12)
+{
+    double llat2, llon2, lazi2, ls12, lm12;
+    m_pGeodesic->ArcDirect(lat1, lon1, azi1, a12,
+            llat2, llon2, lazi2, ls12, lm12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+}
+
+//*****************************************************************************
+void Geodesic::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% M12,
+                [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, ls12, lM12, lM21;
+    m_pGeodesic->ArcDirect(lat1, lon1, azi1, a12,
+            llat2, llon2, lazi2, ls12, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    M12 = lM12;
+    M21 = lM21;
+}
+
+//*****************************************************************************
+void Geodesic::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% m12,
+                [System::Runtime::InteropServices::Out] double% M12,
+                [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21;
+    m_pGeodesic->ArcDirect(lat1, lon1, azi1, a12,
+            llat2, llon2, lazi2, ls12, lm12, lM12, lM21);
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    s12 = ls12;
+    M12 = lM12;
+    M21 = lM21;
+}
+
+//*****************************************************************************
+double Geodesic::GenDirect(double lat1, double lon1, double azi1,
+                        bool arcmode, double s12_a12,
+                        NETGeographicLib::Mask outmask,
+                        [System::Runtime::InteropServices::Out] double% lat2,
+                        [System::Runtime::InteropServices::Out] double% lon2,
+                        [System::Runtime::InteropServices::Out] double% azi2,
+                        [System::Runtime::InteropServices::Out] double% s12,
+                        [System::Runtime::InteropServices::Out] double% m12,
+                        [System::Runtime::InteropServices::Out] double% M12,
+                        [System::Runtime::InteropServices::Out] double% M21,
+                        [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, lm12, lM12, lM21, ls12, lS12;
+    double out = m_pGeodesic->GenDirect(lat1, lon1, azi1, arcmode, s12_a12,
+                    static_cast<unsigned>(outmask),
+                    llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12);
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    s12 = ls12;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21,
+                    [System::Runtime::InteropServices::Out] double% S12)
+{
+    double ls12, lazi1, lazi2, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesic->Inverse(lat1, lon1, lat2, lon2,
+                    ls12, lazi1, lazi2, lm12, lM12, lM21, lS12);
+    s12 = ls12;
+    azi1 = lazi1;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12)
+{
+    double ls12;
+    double out = m_pGeodesic->Inverse(lat1, lon1, lat2, lon2, ls12 );
+    s12 = ls12;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double lazi1, lazi2;
+    double out = m_pGeodesic->Inverse(lat1, lon1, lat2, lon2, lazi1, lazi2);
+    azi1 = lazi1;
+    azi2 = lazi2;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double ls12, lazi1, lazi2;
+    double out = m_pGeodesic->Inverse(lat1, lon1, lat2, lon2,
+                    ls12, lazi1, lazi2 );
+    azi1 = lazi1;
+    azi2 = lazi2;
+    s12 = ls12;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12)
+{
+    double ls12, lazi1, lazi2, lm12;
+    double out = m_pGeodesic->Inverse(lat1, lon1, lat2, lon2,
+                ls12, lazi1, lazi2, lm12 );
+    azi1 = lazi1;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double ls12, lazi1, lazi2, lM12, lM21;
+    double out = m_pGeodesic->Inverse(lat1, lon1, lat2, lon2,
+                    ls12, lazi1, lazi2, lM12, lM21 );
+    azi1 = lazi1;
+    azi2 = lazi2;
+    s12 = ls12;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double ls12, lazi1, lazi2, lm12, lM12, lM21;
+    double out = m_pGeodesic->Inverse(lat1, lon1, lat2, lon2,
+                    ls12, lazi1, lazi2, lm12, lM12, lM21 );
+    azi1 = lazi1;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+double Geodesic::GenInverse(double lat1, double lon1, double lat2, double lon2,
+                        NETGeographicLib::Mask outmask,
+                        [System::Runtime::InteropServices::Out] double% s12,
+                        [System::Runtime::InteropServices::Out] double% azi1,
+                        [System::Runtime::InteropServices::Out] double% azi2,
+                        [System::Runtime::InteropServices::Out] double% m12,
+                        [System::Runtime::InteropServices::Out] double% M12,
+                        [System::Runtime::InteropServices::Out] double% M21,
+                        [System::Runtime::InteropServices::Out] double% S12)
+{
+    double ls12, lazi1, lazi2, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesic->GenInverse(lat1, lon1, lat2, lon2,
+                    static_cast<unsigned>(outmask),
+                    ls12, lazi1, lazi2, lm12, lM12, lM21, lS12);
+    azi1 = lazi1;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+System::IntPtr^ Geodesic::GetUnmanaged()
+{
+    return gcnew System::IntPtr( const_cast<void*>(reinterpret_cast<const void*>(m_pGeodesic)) );
+}
+
+//*****************************************************************************
+GeodesicLine^ Geodesic::Line(double lat1, double lon1, double azi1,
+                             NETGeographicLib::Mask caps )
+{
+    return gcnew GeodesicLine( this, lat1, lon1, azi1, caps );
+}
+
+//*****************************************************************************
+double Geodesic::MajorRadius::get() { return m_pGeodesic->MajorRadius(); }
+
+//*****************************************************************************
+double Geodesic::Flattening::get() { return m_pGeodesic->Flattening(); }
+
+//*****************************************************************************
+double Geodesic::EllipsoidArea::get() { return m_pGeodesic->EllipsoidArea(); }
diff --git a/dotnet/NETGeographicLib/Geodesic.h b/dotnet/NETGeographicLib/Geodesic.h
new file mode 100644
index 0000000..aba97e1
--- /dev/null
+++ b/dotnet/NETGeographicLib/Geodesic.h
@@ -0,0 +1,688 @@
+/**
+ * \file NETGeographicLib/Geodesic.h
+ * \brief Header for NETGeographicLib::Geodesic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+#include "NETGeographicLib.h"
+
+namespace NETGeographicLib
+{
+    ref class GeodesicLine;
+  /**
+   * \brief .NET wrapper for GeographicLib::Geodesic.
+   *
+   * This class allows .NET applications to access GeographicLib::Geodesic.
+   *
+   * The shortest path between two points on a ellipsoid at (\e lat1, \e lon1)
+   * and (\e lat2, \e lon2) is called the geodesic.  Its length is \e s12 and
+   * the geodesic from point 1 to point 2 has azimuths \e azi1 and \e azi2 at
+   * the two end points.  (The azimuth is the heading measured clockwise from
+   * north.  \e azi2 is the "forward" azimuth, i.e., the heading that takes you
+   * beyond point 2 not back to point 1.)
+   *
+   * Given \e lat1, \e lon1, \e azi1, and \e s12, we can determine \e lat2, \e
+   * lon2, and \e azi2.  This is the \e direct geodesic problem and its
+   * solution is given by the function Geodesic::Direct.  (If \e s12 is
+   * sufficiently large that the geodesic wraps more than halfway around the
+   * earth, there will be another geodesic between the points with a smaller \e
+   * s12.)
+   *
+   * Given \e lat1, \e lon1, \e lat2, and \e lon2, we can determine \e azi1, \e
+   * azi2, and \e s12.  This is the \e inverse geodesic problem, whose solution
+   * is given by Geodesic::Inverse.  Usually, the solution to the inverse
+   * problem is unique.  In cases where there are multiple solutions (all with
+   * the same \e s12, of course), all the solutions can be easily generated
+   * once a particular solution is provided.
+   *
+   * The standard way of specifying the direct problem is the specify the
+   * distance \e s12 to the second point.  However it is sometimes useful
+   * instead to specify the arc length \e a12 (in degrees) on the auxiliary
+   * sphere.  This is a mathematical construct used in solving the geodesic
+   * problems.  The solution of the direct problem in this form is provided by
+   * Geodesic::ArcDirect.  An arc length in excess of 180° indicates that
+   * the geodesic is not a shortest path.  In addition, the arc length between
+   * an equatorial crossing and the next extremum of latitude for a geodesic is
+   * 90°.
+   *
+   * This class can also calculate several other quantities related to
+   * geodesics.  These are:
+   * - <i>reduced length</i>.  If we fix the first point and increase \e azi1
+   *   by \e dazi1 (radians), the second point is displaced \e m12 \e dazi1 in
+   *   the direction \e azi2 + 90°.  The quantity \e m12 is called
+   *   the "reduced length" and is symmetric under interchange of the two
+   *   points.  On a curved surface the reduced length obeys a symmetry
+   *   relation, \e m12 + \e m21 = 0.  On a flat surface, we have \e m12 = \e
+   *   s12.  The ratio <i>s12</i>/\e m12 gives the azimuthal scale for an
+   *   azimuthal equidistant projection.
+   * - <i>geodesic scale</i>.  Consider a reference geodesic and a second
+   *   geodesic parallel to this one at point 1 and separated by a small
+   *   distance \e dt.  The separation of the two geodesics at point 2 is \e
+   *   M12 \e dt where \e M12 is called the "geodesic scale".  \e M21 is
+   *   defined similarly (with the geodesics being parallel at point 2).  On a
+   *   flat surface, we have \e M12 = \e M21 = 1.  The quantity 1/\e M12 gives
+   *   the scale of the Cassini-Soldner projection.
+
+   * - <i>area</i>.  The area between the geodesic from point 1 to point 2 and
+   *   the equation is represented by \e S12; it is the area, measured
+   *   counter-clockwise, of the geodesic quadrilateral with corners
+   *   (<i>lat1</i>,<i>lon1</i>), (0,<i>lon1</i>), (0,<i>lon2</i>), and
+   *   (<i>lat2</i>,<i>lon2</i>).  It can be used to compute the area of any
+   *   simple geodesic polygon.
+   *
+   * Overloaded versions of Geodesic::Direct, Geodesic::ArcDirect, and
+   * Geodesic::Inverse allow these quantities to be returned.  In addition
+   * there are general functions Geodesic::GenDirect, and Geodesic::GenInverse
+   * which allow an arbitrary set of results to be computed.  The quantities \e
+   * m12, \e M12, \e M21 which all specify the behavior of nearby geodesics
+   * obey addition rules.  If points 1, 2, and 3 all lie on a single geodesic,
+   * then the following rules hold:
+   * - \e s13 = \e s12 + \e s23
+   * - \e a13 = \e a12 + \e a23
+   * - \e S13 = \e S12 + \e S23
+   * - \e m13 = \e m12 \e M23 + \e m23 \e M21
+   * - \e M13 = \e M12 \e M23 − (1 − \e M12 \e M21) \e m23 / \e m12
+   * - \e M31 = \e M32 \e M21 − (1 − \e M23 \e M32) \e m12 / \e m23
+   *
+   * Additional functionality is provided by the GeodesicLine class, which
+   * allows a sequence of points along a geodesic to be computed.
+   *
+   * The shortest distance returned by the solution of the inverse problem is
+   * (obviously) uniquely defined.  However, in a few special cases there are
+   * multiple azimuths which yield the same shortest distance.  Here is a
+   * catalog of those cases:
+   * - \e lat1 = −\e lat2 (with neither at a pole).  If \e azi1 = \e
+   *   azi2, the geodesic is unique.  Otherwise there are two geodesics and the
+   *   second one is obtained by setting [\e azi1, \e azi2] = [\e azi2, \e
+   *   azi1], [\e M12, \e M21] = [\e M21, \e M12], \e S12 = −\e S12.
+   *   (This occurs when the longitude difference is near ±180° for
+   *   oblate ellipsoids.)
+   * - \e lon2 = \e lon1 ± 180° (with neither at a pole).  If \e
+   *   azi1 = 0° or ±180°, the geodesic is unique.  Otherwise
+   *   there are two geodesics and the second one is obtained by setting [\e
+   *   azi1, \e azi2] = [−\e azi1, −\e azi2], \e S12 = −\e
+   *   S12.  (This occurs when the \e lat2 is near −\e lat1 for prolate
+   *   ellipsoids.)
+   * - Points 1 and 2 at opposite poles.  There are infinitely many geodesics
+   *   which can be generated by setting [\e azi1, \e azi2] = [\e azi1, \e
+   *   azi2] + [\e d, −\e d], for arbitrary \e d.  (For spheres, this
+   *   prescription applies when points 1 and 2 are antipodal.)
+   * - s12 = 0 (coincident points).  There are infinitely many geodesics which
+   *   can be generated by setting [\e azi1, \e azi2] = [\e azi1, \e azi2] +
+   *   [\e d, \e d], for arbitrary \e d.
+   *
+   * The calculations are accurate to better than 15 nm (15 nanometers) for the
+   * WGS84 ellipsoid.  See Sec. 9 of
+   * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for
+   * details.  The algorithms used by this class are based on series expansions
+   * using the flattening \e f as a small parameter.  These are only accurate
+   * for |<i>f</i>| < 0.02; however reasonably accurate results will be
+   * obtained for |<i>f</i>| < 0.2.  Here is a table of the approximate
+   * maximum error (expressed as a distance) for an ellipsoid with the same
+   * major radius as the WGS84 ellipsoid and different values of the
+   * flattening.<pre>
+   *     |f|      error
+   *     0.01     25 nm
+   *     0.02     30 nm
+   *     0.05     10 um
+   *     0.1     1.5 mm
+   *     0.2     300 mm
+   * </pre>
+   * For very eccentric ellipsoids, use GeodesicExact instead.
+   *
+   * The algorithms are described in
+   * - C. F. F. Karney,
+   *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   Algorithms for geodesics</a>,
+   *   J. Geodesy <b>87</b>, 43--55 (2013);
+   *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   10.1007/s00190-012-0578-z</a>;
+   *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   *   geod-addenda.html</a>.
+   * .
+   * For more information on geodesics see \ref geodesic.
+   *
+   * C# Example:
+   * \include example-Geodesic.cs
+   * Managed C++ Example:
+   * \include example-Geodesic.cpp
+   * Visual Basic Example:
+   * \include example-Geodesic.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor has been provided that assumes WGS84 parameters.
+   *
+   * The MajorRadius, Flattening, and EllipsoidArea functions are
+   * implemented as properties.
+   *
+   * The GenDirect, GenInverse, and Line functions accept the
+   * "capabilities mask" as a NETGeographicLib::Mask rather than an
+   * unsigned.
+   **********************************************************************/
+    public ref class Geodesic
+    {
+        private:
+        // The pointer to the unmanaged GeographicLib::Geodesic.
+        const GeographicLib::Geodesic* m_pGeodesic;
+
+        // Frees the unmanaged memory when this object is destroyed.
+        !Geodesic();
+    public:
+        /** \name Constructor
+         **********************************************************************/
+        ///@{
+        /**
+         * Constructor for a ellipsoid with
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+         *   positive.
+         **********************************************************************/
+        Geodesic(double a, double f);
+
+        /**
+         * Constructor for the WGS84 ellipsoid.
+         **********************************************************************/
+        Geodesic();
+        ///@}
+
+        /**
+         * \brief the destructor calls the finalizer.
+         **********************************************************************/
+        ~Geodesic() { this->!Geodesic(); }
+
+        /** \name Direct geodesic problem specified in terms of distance.
+         **********************************************************************/
+        ///@{
+        /**
+         * Solve the direct geodesic problem where the length of the geodesic
+         * is specified in terms of distance.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+         *   negative.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+         * azi1 should be in the range [−540°, 540°).  The values of
+         * \e lon2 and \e azi2 returned are in the range [−180°,
+         * 180°).
+         *
+         * If either point is at a pole, the azimuth is defined by keeping the
+         * longitude fixed, writing \e lat = ±(90° − ε),
+         * and taking the limit ε → 0+.  An arc length greater that
+         * 180° signifies a geodesic which is not a shortest path.  (For a
+         * prolate ellipsoid, an additional condition is necessary for a shortest
+         * path: the longitudinal extent must not exceed of 180°.)
+         *
+         * The following functions are overloaded versions of Geodesic::Direct
+         * which omit some of the output parameters.  Note, however, that the arc
+         * length is always computed and returned as the function value.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2,
+                          [System::Runtime::InteropServices::Out] double% m12,
+                          [System::Runtime::InteropServices::Out] double% M12,
+                          [System::Runtime::InteropServices::Out] double% M21,
+                          [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for Geodesic::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2);
+
+        /**
+         * See the documentation for Geodesic::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for Geodesic::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2,
+                          [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for Geodesic::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2,
+                          [System::Runtime::InteropServices::Out] double% M12,
+                          [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for Geodesic::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2,
+                          [System::Runtime::InteropServices::Out] double% m12,
+                          [System::Runtime::InteropServices::Out] double% M12,
+                          [System::Runtime::InteropServices::Out] double% M21);
+        ///@}
+
+        /** \name Direct geodesic problem specified in terms of arc length.
+         **********************************************************************/
+        ///@{
+        /**
+         * Solve the direct geodesic problem where the length of the geodesic
+         * is specified in terms of arc length.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
+         *   be negative.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         *
+         * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+         * azi1 should be in the range [−540°, 540°).  The values of
+         * \e lon2 and \e azi2 returned are in the range [−180°,
+         * 180°).
+         *
+         * If either point is at a pole, the azimuth is defined by keeping the
+         * longitude fixed, writing \e lat = ±(90° − ε),
+         * and taking the limit ε → 0+.  An arc length greater that
+         * 180° signifies a geodesic which is not a shortest path.  (For a
+         * prolate ellipsoid, an additional condition is necessary for a shortest
+         * path: the longitudinal extent must not exceed of 180°.)
+         *
+         * The following functions are overloaded versions of Geodesic::Direct
+         * which omit some of the output parameters.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12,
+                       [System::Runtime::InteropServices::Out] double% m12,
+                       [System::Runtime::InteropServices::Out] double% M12,
+                       [System::Runtime::InteropServices::Out] double% M21,
+                       [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for Geodesic::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2);
+
+        /**
+         * See the documentation for Geodesic::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for Geodesic::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12);
+
+        /**
+         * See the documentation for Geodesic::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12,
+                       [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for Geodesic::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12,
+                       [System::Runtime::InteropServices::Out] double% M12,
+                       [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for Geodesic::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12,
+                       [System::Runtime::InteropServices::Out] double% m12,
+                       [System::Runtime::InteropServices::Out] double% M12,
+                       [System::Runtime::InteropServices::Out] double% M21);
+        ///@}
+
+        /** \name General version of the direct geodesic solution.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * The general direct geodesic problem.  Geodesic::Direct and
+         * Geodesic::ArcDirect are defined in terms of this function.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] arcmode boolean flag determining the meaning of the \e
+         *   s12_a12.
+         * @param[in] s12_a12 if \e arcmode is false, this is the distance between
+         *   point 1 and point 2 (meters); otherwise it is the arc length between
+         *   point 1 and point 2 (degrees); it can be negative.
+         * @param[in] outmask a bitor'ed combination of NETGeographicLib::Mask values
+         *   specifying which of the following parameters should be set.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * The NETGeographicLib::Mask values possible for \e outmask are
+         * - \e outmask |= NETGeographicLib::Mask::LATITUDE for the latitude \e lat2;
+         * - \e outmask |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
+         * - \e outmask |= NETGeographicLib::Mask::AZIMUTH for the latitude \e azi2;
+         * - \e outmask |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
+         * - \e outmask |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e
+         *   m12;
+         * - \e outmask |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e
+         *   M12 and \e M21;
+         * - \e outmask |= NETGeographicLib::Mask::AREA for the area \e S12;
+         * - \e outmask |= NETGeographicLib::Mask::ALL for all of the above.
+         * .
+         * The function value \e a12 is always computed and returned and this
+         * equals \e s12_a12 is \e arcmode is true.  If \e outmask includes
+         * NETGeographicLib::Mask::DISTANCE and \e arcmode is false, then
+         * \e s12 = \e s12_a12.  It is not necessary to include
+         * NETGeographicLib::Mask::DISTANCE_IN in \e outmask; this is
+         * automatically included is \e arcmode is false.
+         **********************************************************************/
+        double GenDirect(double lat1, double lon1, double azi1,
+                        bool arcmode, double s12_a12,
+                        NETGeographicLib::Mask outmask,
+                        [System::Runtime::InteropServices::Out] double% lat2,
+                        [System::Runtime::InteropServices::Out] double% lon2,
+                        [System::Runtime::InteropServices::Out] double% azi2,
+                        [System::Runtime::InteropServices::Out] double% s12,
+                        [System::Runtime::InteropServices::Out] double% m12,
+                        [System::Runtime::InteropServices::Out] double% M12,
+                        [System::Runtime::InteropServices::Out] double% M21,
+                        [System::Runtime::InteropServices::Out] double% S12);
+        ///@}
+
+        /** \name Inverse geodesic problem.
+         **********************************************************************/
+        ///@{
+        /**
+         * Solve the inverse geodesic problem.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] lat2 latitude of point 2 (degrees).
+         * @param[in] lon2 longitude of point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters).
+         * @param[out] azi1 azimuth at point 1 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * \e lat1 and \e lat2 should be in the range [−90°, 90°]; \e
+         * lon1 and \e lon2 should be in the range [−540°, 540°).
+         * The values of \e azi1 and \e azi2 returned are in the range
+         * [−180°, 180°).
+         *
+         * If either point is at a pole, the azimuth is defined by keeping the
+         * longitude fixed, writing \e lat = ±(90° − ε),
+         * and taking the limit ε → 0+.
+         *
+         * The solution to the inverse problem is found using Newton's method.  If
+         * this fails to converge (this is very unlikely in geodetic applications
+         * but does occur for very eccentric ellipsoids), then the bisection method
+         * is used to refine the solution.
+         *
+         * The following functions are overloaded versions of Geodesic::Inverse
+         * which omit some of the output parameters.  Note, however, that the arc
+         * length is always computed and returned as the function value.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% s12,
+                           [System::Runtime::InteropServices::Out] double% azi1,
+                           [System::Runtime::InteropServices::Out] double% azi2,
+                           [System::Runtime::InteropServices::Out] double% m12,
+                           [System::Runtime::InteropServices::Out] double% M12,
+                           [System::Runtime::InteropServices::Out] double% M21,
+                           [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for Geodesic::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% s12);
+
+        /**
+         * See the documentation for Geodesic::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% azi1,
+                           [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for Geodesic::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% s12,
+                           [System::Runtime::InteropServices::Out] double% azi1,
+                           [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for Geodesic::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% s12,
+                           [System::Runtime::InteropServices::Out] double% azi1,
+                           [System::Runtime::InteropServices::Out] double% azi2,
+                           [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for Geodesic::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% s12,
+                           [System::Runtime::InteropServices::Out] double% azi1,
+                           [System::Runtime::InteropServices::Out] double% azi2,
+                           [System::Runtime::InteropServices::Out] double% M12,
+                           [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for Geodesic::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% s12,
+                           [System::Runtime::InteropServices::Out] double% azi1,
+                           [System::Runtime::InteropServices::Out] double% azi2,
+                           [System::Runtime::InteropServices::Out] double% m12,
+                           [System::Runtime::InteropServices::Out] double% M12,
+                           [System::Runtime::InteropServices::Out] double% M21);
+        ///@}
+
+        /** \name General version of inverse geodesic solution.
+         **********************************************************************/
+        ///@{
+        /**
+         * The general inverse geodesic calculation.  Geodesic::Inverse is defined
+         * in terms of this function.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] lat2 latitude of point 2 (degrees).
+         * @param[in] lon2 longitude of point 2 (degrees).
+         * @param[in] outmask a bitor'ed combination of Geodesic::mask values
+         *   specifying which of the following parameters should be set.
+         * @param[out] s12 distance between point 1 and point 2 (meters).
+         * @param[out] azi1 azimuth at point 1 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * The Geodesic::mask values possible for \e outmask are
+         * - \e outmask |= Geodesic::DISTANCE for the distance \e s12;
+         * - \e outmask |= Geodesic::AZIMUTH for the latitude \e azi2;
+         * - \e outmask |= Geodesic::REDUCEDLENGTH for the reduced length \e
+         *   m12;
+         * - \e outmask |= Geodesic::GEODESICSCALE for the geodesic scales \e
+         *   M12 and \e M21;
+         * - \e outmask |= Geodesic::AREA for the area \e S12;
+         * - \e outmask |= Geodesic::ALL for all of the above.
+         * .
+         * The arc length is always computed and returned as the function value.
+         **********************************************************************/
+        double GenInverse(double lat1, double lon1, double lat2, double lon2,
+                        NETGeographicLib::Mask outmask,
+                        [System::Runtime::InteropServices::Out] double% s12,
+                        [System::Runtime::InteropServices::Out] double% azi1,
+                        [System::Runtime::InteropServices::Out] double% azi2,
+                        [System::Runtime::InteropServices::Out] double% m12,
+                        [System::Runtime::InteropServices::Out] double% M12,
+                        [System::Runtime::InteropServices::Out] double% M21,
+                        [System::Runtime::InteropServices::Out] double% S12);
+        ///@}
+
+        /** \name Interface to GeodesicLine.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * Set up to compute several points on a single geodesic.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] caps bitor'ed combination of NETGeographicLib::Mask values
+         *   specifying the capabilities the GeodesicLine object should possess,
+         *   i.e., which quantities can be returned in calls to
+         *   GeodesicLine::Position.
+         * @return a GeodesicLine object.
+         *
+         * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+         * azi1 should be in the range [−540°, 540°).
+         *
+         * The NETGeographicLib::Mask values are
+         * - \e caps |= NETGeographicLib::Mask::LATITUDE for the latitude \e lat2; this is
+         *   added automatically;
+         * - \e caps |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
+         * - \e caps |= NETGeographicLib::Mask::AZIMUTH for the azimuth \e azi2; this is
+         *   added automatically;
+         * - \e caps |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
+         * - \e caps |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e m12;
+         * - \e caps |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e M12
+         *   and \e M21;
+         * - \e caps |= NETGeographicLib::Mask::AREA for the area \e S12;
+         * - \e caps |= NETGeographicLib::Mask::DISTANCE_IN permits the length of the
+         *   geodesic to be given in terms of \e s12; without this capability the
+         *   length can only be specified in terms of arc length;
+         * - \e caps |= NETGeographicLib::Mask::ALL for all of the above.
+         * .
+         *
+         * If the point is at a pole, the azimuth is defined by keeping \e lon1
+         * fixed, writing \e lat1 = ±(90 − ε), and taking the
+         * limit ε → 0+.
+         **********************************************************************/
+        GeodesicLine^ Line(double lat1, double lon1, double azi1,
+                           NETGeographicLib::Mask caps );
+
+        ///@}
+
+        /** \name Inspector functions.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the  flattening of the ellipsoid.  This is the
+         *   value used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return total area of ellipsoid in meters<sup>2</sup>.  The area of a
+         *   polygon encircling a pole can be found by adding
+         *   Geodesic::EllipsoidArea()/2 to the sum of \e S12 for each side of the
+         *   polygon.
+         **********************************************************************/
+        property double EllipsoidArea { double get(); }
+
+        /**
+         * %return The unmanaged pointer to the GeographicLib::Geodesic.
+         *
+         * This function is for internal use only.
+         **********************************************************************/
+        System::IntPtr^ GetUnmanaged();
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/GeodesicExact.cpp b/dotnet/NETGeographicLib/GeodesicExact.cpp
new file mode 100644
index 0000000..aa45347
--- /dev/null
+++ b/dotnet/NETGeographicLib/GeodesicExact.cpp
@@ -0,0 +1,489 @@
+/**
+ * \file NETGeographicLib/GeodesicExact.cpp
+ * \brief Implementation for NETGeographicLib::GeodesicExact class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/GeodesicExact.hpp"
+#include "GeodesicExact.h"
+#include "GeodesicLineExact.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::GeodesicExact";
+
+//*****************************************************************************
+GeodesicExact::!GeodesicExact(void)
+{
+    if ( m_pGeodesicExact != NULL )
+    {
+        delete m_pGeodesicExact;
+        m_pGeodesicExact = NULL;
+    }
+}
+
+//*****************************************************************************
+GeodesicExact::GeodesicExact()
+{
+    try
+    {
+        m_pGeodesicExact = new GeographicLib::GeodesicExact( GeographicLib::GeodesicExact::WGS84 );
+    }
+    catch ( std::bad_alloc err )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+GeodesicExact::GeodesicExact(double a, double f)
+{
+    try
+    {
+        m_pGeodesicExact = new GeographicLib::GeodesicExact( a, f );
+    }
+    catch ( std::bad_alloc err )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( GeographicLib::GeographicErr err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+double GeodesicExact::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21,
+                    [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesicExact->Direct( lat1, lon1, azi1, s12,
+                llat2, llon2, lazi2, lm12, lM12, lM21, lS12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double llat2, llon2;
+    double out = m_pGeodesicExact->Direct( lat1, lon1, azi1, s12,
+                llat2, llon2 );
+    lat2 = llat2;
+    lon2 = llon2;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double llat2, llon2, lazi2;
+    double out = m_pGeodesicExact->Direct( lat1, lon1, azi1, s12,
+                llat2, llon2, lazi2 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12)
+{
+    double llat2, llon2, lazi2, lm12;
+    double out = m_pGeodesicExact->Direct( lat1, lon1, azi1, s12,
+                llat2, llon2, lazi2, lm12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, lM12, lM21;
+    double out = m_pGeodesicExact->Direct( lat1, lon1, azi1, s12,
+                llat2, llon2, lazi2, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Direct(double lat1, double lon1, double azi1, double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, lm12, lM12, lM21;
+    double out = m_pGeodesicExact->Direct( lat1, lon1, azi1, s12,
+                llat2, llon2, lazi2, lm12, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+void GeodesicExact::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% m12,
+                [System::Runtime::InteropServices::Out] double% M12,
+                [System::Runtime::InteropServices::Out] double% M21,
+                [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12;
+    m_pGeodesicExact->ArcDirect( lat1, lon1, azi1, a12,
+                llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+}
+
+//*****************************************************************************
+void GeodesicExact::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double llat2, llon2;
+    m_pGeodesicExact->ArcDirect( lat1, lon1, azi1, a12,
+                llat2, llon2 );
+    lat2 = llat2;
+    lon2 = llon2;
+}
+
+//*****************************************************************************
+void GeodesicExact::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double llat2, llon2, lazi2;
+    m_pGeodesicExact->ArcDirect( lat1, lon1, azi1, a12,
+                llat2, llon2, lazi2 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+}
+
+//*****************************************************************************
+void GeodesicExact::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12)
+{
+    double llat2, llon2, lazi2, ls12;
+    m_pGeodesicExact->ArcDirect( lat1, lon1, azi1, a12,
+                llat2, llon2, lazi2, ls12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+}
+
+//*****************************************************************************
+void GeodesicExact::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% m12)
+{
+    double llat2, llon2, lazi2, ls12, lm12;
+    m_pGeodesicExact->ArcDirect( lat1, lon1, azi1, a12,
+                llat2, llon2, lazi2, ls12, lm12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+}
+
+//*****************************************************************************
+void GeodesicExact::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% M12,
+                [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, ls12, lM12, lM21;
+    m_pGeodesicExact->ArcDirect( lat1, lon1, azi1, a12,
+                llat2, llon2, lazi2, ls12, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    M12 = lM12;
+    M21 = lM21;
+}
+
+//*****************************************************************************
+void GeodesicExact::ArcDirect(double lat1, double lon1, double azi1, double a12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% m12,
+                [System::Runtime::InteropServices::Out] double% M12,
+                [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21;
+    m_pGeodesicExact->ArcDirect( lat1, lon1, azi1, a12,
+                llat2, llon2, lazi2, ls12, lm12, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+}
+
+//*****************************************************************************
+double GeodesicExact::GenDirect(double lat1, double lon1, double azi1,
+                        bool arcmode, double s12_a12,
+                        NETGeographicLib::Mask outmask,
+                        [System::Runtime::InteropServices::Out] double% lat2,
+                        [System::Runtime::InteropServices::Out] double% lon2,
+                        [System::Runtime::InteropServices::Out] double% azi2,
+                        [System::Runtime::InteropServices::Out] double% s12,
+                        [System::Runtime::InteropServices::Out] double% m12,
+                        [System::Runtime::InteropServices::Out] double% M12,
+                        [System::Runtime::InteropServices::Out] double% M21,
+                        [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesicExact->GenDirect( lat1, lon1, azi1, arcmode, s12_a12,
+                static_cast<unsigned>(outmask), llat2, llon2, lazi2, ls12, lm12, lM12,
+                lM21, lS12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21,
+                    [System::Runtime::InteropServices::Out] double% S12)
+{
+    double ls12, lazi1, lazi2, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesicExact->Inverse( lat1, lon1, lat2, lon2,
+                ls12, lazi1, lazi2, lm12, lM12, lM21, lS12 );
+    s12 = ls12;
+    azi1 = lazi1;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12)
+{
+    double ls12;
+    double out = m_pGeodesicExact->Inverse( lat1, lon1, lat2, lon2, ls12 );
+    s12 = ls12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double lazi1, lazi2;
+    double out = m_pGeodesicExact->Inverse( lat1, lon1, lat2, lon2,
+                lazi1, lazi2 );
+    azi1 = lazi1;
+    azi2 = lazi2;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double ls12, lazi1, lazi2;
+    double out = m_pGeodesicExact->Inverse( lat1, lon1, lat2, lon2,
+                ls12, lazi1, lazi2 );
+    s12 = ls12;
+    azi1 = lazi1;
+    azi2 = lazi2;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12)
+{
+    double ls12, lazi1, lazi2, lm12;
+    double out = m_pGeodesicExact->Inverse( lat1, lon1, lat2, lon2,
+                ls12, lazi1, lazi2, lm12 );
+    s12 = ls12;
+    azi1 = lazi1;
+    azi2 = lazi2;
+    m12 = lm12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double ls12, lazi1, lazi2, lM12, lM21;
+    double out = m_pGeodesicExact->Inverse( lat1, lon1, lat2, lon2,
+                ls12, lazi1, lazi2, lM12, lM21 );
+    s12 = ls12;
+    azi1 = lazi1;
+    azi2 = lazi2;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double ls12, lazi1, lazi2, lm12, lM12, lM21;
+    double out = m_pGeodesicExact->Inverse( lat1, lon1, lat2, lon2,
+                ls12, lazi1, lazi2, lm12, lM12, lM21 );
+    s12 = ls12;
+    azi1 = lazi1;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicExact::GenInverse(double lat1, double lon1, double lat2, double lon2,
+                        NETGeographicLib::Mask outmask,
+                        [System::Runtime::InteropServices::Out] double% s12,
+                        [System::Runtime::InteropServices::Out] double% azi1,
+                        [System::Runtime::InteropServices::Out] double% azi2,
+                        [System::Runtime::InteropServices::Out] double% m12,
+                        [System::Runtime::InteropServices::Out] double% M12,
+                        [System::Runtime::InteropServices::Out] double% M21,
+                        [System::Runtime::InteropServices::Out] double% S12)
+{
+    double ls12, lazi1, lazi2, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesicExact->GenInverse( lat1, lon1, lat2, lon2,
+                static_cast<unsigned>(outmask), ls12, lazi1, lazi2, lm12, lM12,
+                lM21, lS12 );
+    s12 = ls12;
+    azi1 = lazi1;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+System::IntPtr^ GeodesicExact::GetUnmanaged()
+{
+    return gcnew System::IntPtr( const_cast<void*>(
+        reinterpret_cast<const void*>(m_pGeodesicExact) ) );
+}
+
+//*****************************************************************************
+GeodesicLineExact^ GeodesicExact::Line(double lat1, double lon1, double azi1,
+    NETGeographicLib::Mask caps )
+{
+    return gcnew GeodesicLineExact( this, lat1, lon1, azi1, caps );
+}
+
+//*****************************************************************************
+double GeodesicExact::MajorRadius::get()
+{ return m_pGeodesicExact->MajorRadius(); }
+
+//*****************************************************************************
+double GeodesicExact::Flattening::get()
+{ return m_pGeodesicExact->Flattening(); }
+
+//*****************************************************************************
+double GeodesicExact::EllipsoidArea::get()
+{ return m_pGeodesicExact->EllipsoidArea(); }
diff --git a/dotnet/NETGeographicLib/GeodesicExact.h b/dotnet/NETGeographicLib/GeodesicExact.h
new file mode 100644
index 0000000..f52a0eb
--- /dev/null
+++ b/dotnet/NETGeographicLib/GeodesicExact.h
@@ -0,0 +1,603 @@
+#pragma once
+/**
+ * \file NETGeographicLib/GeodesicExact.h
+ * \brief Header for NETGeographicLib::GeodesicExact class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "NETGeographicLib.h"
+
+namespace NETGeographicLib
+{
+    ref class GeodesicLineExact;
+    /*!
+    \brief .NET wrapper for GeographicLib::GeodesicExact.
+
+    This class allows .NET applications to access GeographicLib::GeodesicExact.
+    */
+  /**
+   * \brief .NET wrapper for GeographicLib::GeodesicExact.
+   *
+   * This class allows .NET applications to access GeographicLib::GeodesicExact.
+   *
+   * The equations for geodesics on an ellipsoid can be expressed in terms of
+   * incomplete elliptic integrals.  The Geodesic class expands these integrals
+   * in a series in the flattening \e f and this provides an accurate solution
+   * for \e f &isin [-0.01, 0.01].  The GeodesicExact class computes the
+   * ellitpic integrals directly and so provides a solution which is valid for
+   * all \e f.  However, in practice, its use should be limited to about \e
+   * b/\e a ∈ [0.01, 100] or \e f ∈ [-99, 0.99].
+   *
+   * For the WGS84 ellipsoid, these classes are 2--3 times \e slower than the
+   * series solution and 2--3 times \e less \e accurate (because it's less easy
+   * to control round-off errors with the elliptic integral formulation); i.e.,
+   * the error is about 40 nm (40 nanometers) instead of 15 nm.  However the
+   * error in the series solution scales as <i>f</i><sup>7</sup> while the
+   * error in the elliptic integral solution depends weakly on \e f.  If the
+   * quarter meridian distance is 10000 km and the ratio \e b/\e a = 1 −
+   * \e f is varied then the approximate maximum error (expressed as a
+   * distance) is <pre>
+   *       1 - f  error (nm)
+   *       1/128     387
+   *       1/64      345
+   *       1/32      269
+   *       1/16      210
+   *       1/8       115
+   *       1/4        69
+   *       1/2        36
+   *         1        15
+   *         2        25
+   *         4        96
+   *         8       318
+   *        16       985
+   *        32      2352
+   *        64      6008
+   *       128     19024
+   * </pre>
+   *
+   * The computation of the area in these classes is via a 30th order series.
+   * This gives accurate results for \e b/\e a ∈ [1/2, 2]; the accuracy is
+   * about 8 decimal digits for \e b/\e a ∈ [1/4, 4].
+   *
+   * See \ref geodellip for the formulation.  See the documentation on the
+   * Geodesic class for additional information on the geodesics problems.
+   *
+   * C# Example:
+   * \include example-GeodesicExact.cs
+   * Managed C++ Example:
+   * \include example-GeodesicExact.cpp
+   * Visual Basic Example:
+   * \include example-GeodesicExact.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor is provided that assumes WGS84 parameters.
+   *
+   * The MajorRadius, Flattening, and EllipsoidArea functions are
+   * implemented as properties.
+   *
+   * The GenDirect, GenInverse, and Line functions accept the
+   * "capabilities mask" as a NETGeographicLib::Mask rather than an
+   * unsigned.
+   **********************************************************************/
+    public ref class GeodesicExact
+    {
+        private:
+        // pointer to the unmanaged GeographicLib::GeodesicExact.
+        const GeographicLib::GeodesicExact* m_pGeodesicExact;
+
+        // the finalizer deletes the unmanaged memory.
+        !GeodesicExact();
+    public:
+        /** \name Constructor
+         **********************************************************************/
+        ///@{
+        /**
+         * Constructor for a WGS84 ellipsoid
+         **********************************************************************/
+        GeodesicExact();
+
+        /**
+         * Constructor for a ellipsoid with
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+         *   positive.
+         **********************************************************************/
+        GeodesicExact(double a, double f);
+        ///@}
+
+        /**
+         * The desstructor calls the finalizer.
+         **********************************************************************/
+        ~GeodesicExact()
+        { this->!GeodesicExact(); }
+
+        /** \name Direct geodesic problem specified in terms of distance.
+         **********************************************************************/
+        ///@{
+        /**
+         * Perform the direct geodesic calculation where the length of the geodesic
+         * is specified in terms of distance.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+         *   signed.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+         * azi1 should be in the range [−540°, 540°).  The values of
+         * \e lon2 and \e azi2 returned are in the range [−180°,
+         * 180°).
+         *
+         * If either point is at a pole, the azimuth is defined by keeping the
+         * longitude fixed, writing \e lat = ±(90° − ε),
+         * and taking the limit ε → 0+.  An arc length greater that
+         * 180° signifies a geodesic which is not a shortest path.  (For a
+         * prolate ellipsoid, an additional condition is necessary for a shortest
+         * path: the longitudinal extent must not exceed of 180°.)
+         *
+         * The following functions are overloaded versions of GeodesicExact::Direct
+         * which omit some of the output parameters.  Note, however, that the arc
+         * length is always computed and returned as the function value.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2,
+                          [System::Runtime::InteropServices::Out] double% m12,
+                          [System::Runtime::InteropServices::Out] double% M12,
+                          [System::Runtime::InteropServices::Out] double% M21,
+                          [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for GeodesicExact::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2);
+
+        /**
+         * See the documentation for GeodesicExact::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for GeodesicExact::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2,
+                          [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for GeodesicExact::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2,
+                          [System::Runtime::InteropServices::Out] double% M12,
+                          [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for GeodesicExact::Direct.
+         **********************************************************************/
+        double Direct(double lat1, double lon1, double azi1, double s12,
+                          [System::Runtime::InteropServices::Out] double% lat2,
+                          [System::Runtime::InteropServices::Out] double% lon2,
+                          [System::Runtime::InteropServices::Out] double% azi2,
+                          [System::Runtime::InteropServices::Out] double% m12,
+                          [System::Runtime::InteropServices::Out] double% M12,
+                          [System::Runtime::InteropServices::Out] double% M21);
+        ///@}
+
+        /** \name Direct geodesic problem specified in terms of arc length.
+         **********************************************************************/
+        ///@{
+        /**
+         * Perform the direct geodesic calculation where the length of the geodesic
+         * is specified in terms of arc length.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
+         *   be signed.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         *
+         * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+         * azi1 should be in the range [−540°, 540°).  The values of
+         * \e lon2 and \e azi2 returned are in the range [−180°,
+         * 180°).
+         *
+         * If either point is at a pole, the azimuth is defined by keeping the
+         * longitude fixed, writing \e lat = ±(90° − ε),
+         * and taking the limit ε → 0+.  An arc length greater that
+         * 180° signifies a geodesic which is not a shortest path.  (For a
+         * prolate ellipsoid, an additional condition is necessary for a shortest
+         * path: the longitudinal extent must not exceed of 180°.)
+         *
+         * The following functions are overloaded versions of GeodesicExact::Direct
+         * which omit some of the output parameters.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12,
+                       [System::Runtime::InteropServices::Out] double% m12,
+                       [System::Runtime::InteropServices::Out] double% M12,
+                       [System::Runtime::InteropServices::Out] double% M21,
+                       [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for GeodesicExact::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2);
+
+        /**
+         * See the documentation for GeodesicExact::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for GeodesicExact::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12);
+
+        /**
+         * See the documentation for GeodesicExact::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12,
+                       [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for GeodesicExact::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12,
+                       [System::Runtime::InteropServices::Out] double% M12,
+                       [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for GeodesicExact::ArcDirect.
+         **********************************************************************/
+        void ArcDirect(double lat1, double lon1, double azi1, double a12,
+                       [System::Runtime::InteropServices::Out] double% lat2,
+                       [System::Runtime::InteropServices::Out] double% lon2,
+                       [System::Runtime::InteropServices::Out] double% azi2,
+                       [System::Runtime::InteropServices::Out] double% s12,
+                       [System::Runtime::InteropServices::Out] double% m12,
+                       [System::Runtime::InteropServices::Out] double% M12,
+                       [System::Runtime::InteropServices::Out] double% M21);
+        ///@}
+
+        /** \name General version of the direct geodesic solution.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * The general direct geodesic calculation.  GeodesicExact::Direct and
+         * GeodesicExact::ArcDirect are defined in terms of this function.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] arcmode boolean flag determining the meaning of the second
+         *   parameter.
+         * @param[in] s12_a12 if \e arcmode is false, this is the distance between
+         *   point 1 and point 2 (meters); otherwise it is the arc length between
+         *   point 1 and point 2 (degrees); it can be signed.
+         * @param[in] outmask a bitor'ed combination of  NETGeographicLib::Mask values
+         *   specifying which of the following parameters should be set.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * The  NETGeographicLib::Mask values possible for \e outmask are
+         * - \e outmask |= NETGeographicLib::Mask::LATITUDE for the latitude \e lat2;
+         * - \e outmask |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
+         * - \e outmask |= NETGeographicLib::Mask::AZIMUTH for the latitude \e azi2;
+         * - \e outmask |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
+         * - \e outmask |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e
+         *   m12;
+         * - \e outmask |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e
+         *   M12 and \e M21;
+         * - \e outmask |= NETGeographicLib::Mask::AREA for the area \e S12;
+         * - \e outmask |= NETGeographicLib::Mask::ALL for all of the above.
+         * .
+         * The function value \e a12 is always computed and returned and this
+         * equals \e s12_a12 is \e arcmode is true.  If \e outmask includes
+         * GeodesicExact::DISTANCE and \e arcmode is false, then \e s12 = \e
+         * s12_a12.  It is not necessary to include  NETGeographicLib::Mask::DISTANCE_IN in
+         * \e outmask; this is automatically included is \e arcmode is false.
+         **********************************************************************/
+        double GenDirect(double lat1, double lon1, double azi1,
+                        bool arcmode, double s12_a12, NETGeographicLib::Mask outmask,
+                        [System::Runtime::InteropServices::Out] double% lat2,
+                        [System::Runtime::InteropServices::Out] double% lon2,
+                        [System::Runtime::InteropServices::Out] double% azi2,
+                        [System::Runtime::InteropServices::Out] double% s12,
+                        [System::Runtime::InteropServices::Out] double% m12,
+                        [System::Runtime::InteropServices::Out] double% M12,
+                        [System::Runtime::InteropServices::Out] double% M21,
+                        [System::Runtime::InteropServices::Out] double% S12);
+        ///@}
+
+        /** \name Inverse geodesic problem.
+         **********************************************************************/
+        ///@{
+        /**
+         * Perform the inverse geodesic calculation.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] lat2 latitude of point 2 (degrees).
+         * @param[in] lon2 longitude of point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters).
+         * @param[out] azi1 azimuth at point 1 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * \e lat1 and \e lat2 should be in the range [−90°, 90°]; \e
+         * lon1 and \e lon2 should be in the range [−540°, 540°).
+         * The values of \e azi1 and \e azi2 returned are in the range
+         * [−180°, 180°).
+         *
+         * If either point is at a pole, the azimuth is defined by keeping the
+         * longitude fixed, writing \e lat = ±(90° − ε),
+         * and taking the limit ε → 0+.
+         *
+         * The following functions are overloaded versions of GeodesicExact::Inverse
+         * which omit some of the output parameters.  Note, however, that the arc
+         * length is always computed and returned as the function value.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% s12,
+                           [System::Runtime::InteropServices::Out] double% azi1,
+                           [System::Runtime::InteropServices::Out] double% azi2,
+                           [System::Runtime::InteropServices::Out] double% m12,
+                           [System::Runtime::InteropServices::Out] double% M12,
+                           [System::Runtime::InteropServices::Out] double% M21,
+                           [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for GeodesicExact::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% s12);
+
+        /**
+         * See the documentation for GeodesicExact::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                           [System::Runtime::InteropServices::Out] double% azi1,
+                           [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for GeodesicExact::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for GeodesicExact::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for GeodesicExact::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for GeodesicExact::Inverse.
+         **********************************************************************/
+        double Inverse(double lat1, double lon1, double lat2, double lon2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% azi1,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21);
+        ///@}
+
+        /** \name General version of inverse geodesic solution.
+         **********************************************************************/
+        ///@{
+        /**
+         * The general inverse geodesic calculation.  GeodesicExact::Inverse is
+         * defined in terms of this function.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] lat2 latitude of point 2 (degrees).
+         * @param[in] lon2 longitude of point 2 (degrees).
+         * @param[in] outmask a bitor'ed combination of  NETGeographicLib::Mask values
+         *   specifying which of the following parameters should be set.
+         * @param[out] s12 distance between point 1 and point 2 (meters).
+         * @param[out] azi1 azimuth at point 1 (degrees).
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] m12 reduced length of geodesic (meters).
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless).
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless).
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * The NETGeographicLib::Mask values possible for \e outmask are
+         * - \e outmask |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
+         * - \e outmask |= NETGeographicLib::Mask::AZIMUTH for the latitude \e azi2;
+         * - \e outmask |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e
+         *   m12;
+         * - \e outmask |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e
+         *   M12 and \e M21;
+         * - \e outmask |= NETGeographicLib::Mask::AREA for the area \e S12;
+         * - \e outmask |= NETGeographicLib::Mask::ALL for all of the above.
+         * .
+         * The arc length is always computed and returned as the function value.
+         **********************************************************************/
+        double GenInverse(double lat1, double lon1, double lat2, double lon2,
+                        NETGeographicLib::Mask outmask,
+                        [System::Runtime::InteropServices::Out] double% s12,
+                        [System::Runtime::InteropServices::Out] double% azi1,
+                        [System::Runtime::InteropServices::Out] double% azi2,
+                        [System::Runtime::InteropServices::Out] double% m12,
+                        [System::Runtime::InteropServices::Out] double% M12,
+                        [System::Runtime::InteropServices::Out] double% M21,
+                        [System::Runtime::InteropServices::Out] double% S12);
+        ///@}
+
+        /** \name Interface to GeodesicLineExact.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * Set up to compute several points on a single geodesic.
+         *
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] caps bitor'ed combination of NETGeographicLib::Mask values
+         *   specifying the capabilities the GeodesicLineExact object should
+         *   possess, i.e., which quantities can be returned in calls to
+         *   GeodesicLineExact::Position.
+         * @return a GeodesicLineExact object.
+         *
+         * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+         * azi1 should be in the range [−540°, 540°).
+         *
+         * The GeodesicExact::mask values are
+         * - \e caps |= NETGeographicLib::Mask::LATITUDE for the latitude \e lat2; this is
+         *   added automatically;
+         * - \e caps |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
+         * - \e caps |= NETGeographicLib::Mask::AZIMUTH for the azimuth \e azi2; this is
+         *   added automatically;
+         * - \e caps |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
+         * - \e caps |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e m12;
+         * - \e caps |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e M12
+         *   and \e M21;
+         * - \e caps |= NETGeographicLib::Mask::AREA for the area \e S12;
+         * - \e caps |= NETGeographicLib::Mask::DISTANCE_IN permits the length of the
+         *   geodesic to be given in terms of \e s12; without this capability the
+         *   length can only be specified in terms of arc length;
+         * - \e caps |= GeodesicExact::ALL for all of the above.
+         * .
+         * The default value of \e caps is GeodesicExact::ALL which turns on all
+         * the capabilities.
+         *
+         * If the point is at a pole, the azimuth is defined by keeping \e lon1
+         * fixed, writing \e lat1 = ±(90 − ε), and taking the
+         * limit ε → 0+.
+         **********************************************************************/
+        GeodesicLineExact^ Line(double lat1, double lon1, double azi1,
+            NETGeographicLib::Mask caps );
+
+        ///@}
+
+        /** \name Inspector functions.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the  flattening of the ellipsoid.  This is the
+         *   value used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return total area of ellipsoid in meters<sup>2</sup>.  The area of a
+         *   polygon encircling a pole can be found by adding
+         *   GeodesicExact::EllipsoidArea()/2 to the sum of \e S12 for each side of
+         *   the polygon.
+         **********************************************************************/
+        property double EllipsoidArea { double get(); }
+        ///@}
+
+        /**
+         * @return A pointer to the unmanaged GeographicLib::GeodesicExact.
+         *
+         * This function is for internal use only.
+         **********************************************************************/
+        System::IntPtr^ GetUnmanaged();
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/GeodesicLine.cpp b/dotnet/NETGeographicLib/GeodesicLine.cpp
new file mode 100644
index 0000000..2c6d683
--- /dev/null
+++ b/dotnet/NETGeographicLib/GeodesicLine.cpp
@@ -0,0 +1,350 @@
+/**
+ * \file NETGeographicLib/GeodesicLine.cpp
+ * \brief Implementation for NETGeographicLib::GeodesicLine class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/GeodesicLine.hpp"
+#include "Geodesic.h"
+#include "GeodesicLine.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::GeodesicLine";
+
+//*****************************************************************************
+GeodesicLine::!GeodesicLine(void)
+{
+    if ( m_pGeodesicLine != NULL )
+    {
+        delete m_pGeodesicLine;
+        m_pGeodesicLine = NULL;
+    }
+}
+
+//*****************************************************************************
+GeodesicLine::GeodesicLine( Geodesic^ g, double lat1, double lon1, double azi1,
+                NETGeographicLib::Mask caps )
+{
+    try
+    {
+        const GeographicLib::Geodesic* pGeodesic =
+            reinterpret_cast<const GeographicLib::Geodesic*>(
+                g->GetUnmanaged()->ToPointer() );
+        m_pGeodesicLine = new GeographicLib::GeodesicLine( *pGeodesic,
+            lat1, lon1, azi1, static_cast<unsigned>(caps) );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+GeodesicLine::GeodesicLine(double lat1, double lon1, double azi1,
+                           NETGeographicLib::Mask caps)
+{
+    try
+    {
+        m_pGeodesicLine = new GeographicLib::GeodesicLine(
+            GeographicLib::Geodesic::WGS84, lat1, lon1, azi1,
+            static_cast<unsigned>(caps) );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+double GeodesicLine::Position(double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21,
+                    [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesicLine->Position( s12, llat2, llon2, lazi2, lm12,
+        lM12, lM21, lS12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLine::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double llat2, llon2;
+    double out = m_pGeodesicLine->Position( s12, llat2, llon2);
+    lat2 = llat2;
+    lon2 = llon2;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLine::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double llat2, llon2, lazi2;
+    double out = m_pGeodesicLine->Position( s12, llat2, llon2, lazi2 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLine::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% m12)
+{
+    double llat2, llon2, lazi2, lm12;
+    double out = m_pGeodesicLine->Position( s12, llat2, llon2, lazi2,
+                                            lm12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLine::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, lM12, lM21;
+    double out = m_pGeodesicLine->Position( s12, llat2, llon2, lazi2,
+        lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLine::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% m12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, lm12, lM12, lM21;
+    double out = m_pGeodesicLine->Position( s12, llat2, llon2, lazi2, lm12,
+        lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+void GeodesicLine::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% m12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21,
+    [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12;
+    m_pGeodesicLine->ArcPosition( a12, llat2, llon2, lazi2,
+        ls12, lm12, lM12, lM21, lS12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+}
+
+//*****************************************************************************
+void GeodesicLine::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double llat2, llon2;
+    m_pGeodesicLine->ArcPosition( a12, llat2, llon2 );
+    lat2 = llat2;
+    lon2 = llon2;
+}
+
+//*****************************************************************************
+void GeodesicLine::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double llat2, llon2, lazi2;
+    m_pGeodesicLine->ArcPosition( a12, llat2, llon2, lazi2 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+}
+
+//*****************************************************************************
+void GeodesicLine::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12)
+{
+    double llat2, llon2, lazi2, ls12;
+    m_pGeodesicLine->ArcPosition( a12, llat2, llon2, lazi2, ls12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+}
+
+//*****************************************************************************
+void GeodesicLine::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% m12)
+{
+    double llat2, llon2, lazi2, ls12, lm12;
+    m_pGeodesicLine->ArcPosition( a12, llat2, llon2, lazi2, ls12, lm12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+}
+
+//*****************************************************************************
+void GeodesicLine::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, ls12, lM12, lM21;
+    m_pGeodesicLine->ArcPosition( a12, llat2, llon2, lazi2,
+        ls12, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    M12 = lM12;
+    M21 = lM21;
+}
+
+//*****************************************************************************
+void GeodesicLine::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% m12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21;
+    m_pGeodesicLine->ArcPosition( a12, llat2, llon2, lazi2,
+        ls12, lm12, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+}
+
+//*****************************************************************************
+double GeodesicLine::GenPosition(bool arcmode, double s12_a12,
+    NETGeographicLib::Mask outmask,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% m12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21,
+    [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesicLine->GenPosition( arcmode, s12_a12,
+        static_cast<unsigned>(outmask),
+        llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLine::Latitude::get() { return m_pGeodesicLine->Latitude(); }
+
+//*****************************************************************************
+double GeodesicLine::Longitude::get() { return m_pGeodesicLine->Longitude(); }
+
+//*****************************************************************************
+double GeodesicLine::Azimuth::get() { return m_pGeodesicLine->Azimuth(); }
+
+//*****************************************************************************
+double GeodesicLine::EquatorialAzimuth::get()
+{ return m_pGeodesicLine->EquatorialAzimuth(); }
+
+//*****************************************************************************
+double GeodesicLine::EquatorialArc::get()
+{ return m_pGeodesicLine->EquatorialArc(); }
+
+//*****************************************************************************
+double GeodesicLine::MajorRadius::get()
+{ return m_pGeodesicLine->MajorRadius(); }
+
+//*****************************************************************************
+double GeodesicLine::Flattening::get()
+{ return m_pGeodesicLine->Flattening(); }
+
+//*****************************************************************************
+NETGeographicLib::Mask GeodesicLine::Capabilities()
+{ return static_cast<NETGeographicLib::Mask>(m_pGeodesicLine->Capabilities()); }
+
+//*****************************************************************************
+bool GeodesicLine::Capabilities(NETGeographicLib::Mask testcaps)
+{ return m_pGeodesicLine->Capabilities( static_cast<unsigned>(testcaps) ); }
diff --git a/dotnet/NETGeographicLib/GeodesicLine.h b/dotnet/NETGeographicLib/GeodesicLine.h
new file mode 100644
index 0000000..b2a916c
--- /dev/null
+++ b/dotnet/NETGeographicLib/GeodesicLine.h
@@ -0,0 +1,471 @@
+#pragma once
+/**
+ * \file NETGeographicLib/GeodesicLine.h
+ * \brief Header for NETGeographicLib::GeodesicLine class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "NETGeographicLib.h"
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::GeodesicLine.
+   *
+   * This class allows .NET applications to access GeographicLib::GeodesicLine.
+   *
+   * GeodesicLine facilitates the determination of a series of points on a
+   * single geodesic.  The starting point (\e lat1, \e lon1) and the azimuth \e
+   * azi1 are specified in the constructor.  GeodesicLine.Position returns the
+   * location of point 2 a distance \e s12 along the geodesic.  Alternatively
+   * GeodesicLine.ArcPosition gives the position of point 2 an arc length \e
+   * a12 along the geodesic.
+   *
+   * The default copy constructor and assignment operators work with this
+   * class.  Similarly, a vector can be used to hold GeodesicLine objects.
+   *
+   * The calculations are accurate to better than 15 nm (15 nanometers).  See
+   * Sec. 9 of
+   * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for
+   * details.  The algorithms used by this class are based on series expansions
+   * using the flattening \e f as a small parameter.  These are only accurate
+   * for |<i>f</i>| < 0.02; however reasonably accurate results will be
+   * obtained for |<i>f</i>| < 0.2.  For very eccentric ellipsoids, use
+   * GeodesicLineExact instead.
+   *
+   * The algorithms are described in
+   * - C. F. F. Karney,
+   *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   Algorithms for geodesics</a>,
+   *   J. Geodesy <b>87</b>, 43--55 (2013);
+   *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   10.1007/s00190-012-0578-z</a>;
+   *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   *   geod-addenda.html</a>.
+   * .
+   * For more information on geodesics see \ref geodesic.
+   *
+   * C# Example:
+   * \include example-GeodesicLine.cs
+   * Managed C++ Example:
+   * \include example-GeodesicLine.cpp
+   * Visual Basic Example:
+   * \include example-GeodesicLine.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A constructor has been provided which assumes WGS84 parameters.
+   *
+   * The following functions are implemented as properties:
+   * Latitude, Longitude, Azimuth, EquatorialAzimuth, EquatorialArc,
+   * MajorRadius, and Flattening.
+   *
+   * The constructors, Capabilities, and GenPosition functions accept the
+   * "capabilities mask" as a NETGeographicLib::Mask rather than an
+   * unsigned.  The Capabilities function returns a  NETGeographicLib::Mask
+   * rather than an unsigned.
+   **********************************************************************/
+    public ref class GeodesicLine
+    {
+        private:
+        // pointer to the unmanaged GeographicLib::GeodesicLine.
+        const GeographicLib::GeodesicLine* m_pGeodesicLine;
+
+        // The finalizer frees the unmanaged memory when this object is destroyed.
+        !GeodesicLine(void);
+    public:
+        /** \name Constructors
+         **********************************************************************/
+        ///@{
+
+        /**
+         * Constructor for a geodesic line staring at latitude \e lat1, longitude
+         * \e lon1, and azimuth \e azi1 (all in degrees).
+         *
+         * @param[in] g A Geodesic object used to compute the necessary information
+         *   about the GeodesicLine.
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] caps bitor'ed combination of NETGeographicLib::Mask values
+         *   specifying the capabilities the GeodesicLine object should possess,
+         *   i.e., which quantities can be returned in calls to
+         *   GeodesicLine::Position.
+         *
+         * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+         * azi1 should be in the range [−540°, 540°).
+         *
+         * The NETGeographicLib::Mask values are
+         * - \e caps |= GeodesicLine::LATITUDE for the latitude \e lat2; this is
+         *   added automatically;
+         * - \e caps |= GeodesicLine::LONGITUDE for the latitude \e lon2;
+         * - \e caps |= GeodesicLine::AZIMUTH for the latitude \e azi2; this is
+         *   added automatically;
+         * - \e caps |= GeodesicLine::DISTANCE for the distance \e s12;
+         * - \e caps |= GeodesicLine::REDUCEDLENGTH for the reduced length \e m12;
+         * - \e caps |= GeodesicLine::GEODESICSCALE for the geodesic scales \e M12
+         *   and \e M21;
+         * - \e caps |= GeodesicLine::AREA for the area \e S12;
+         * - \e caps |= GeodesicLine::DISTANCE_IN permits the length of the
+         *   geodesic to be given in terms of \e s12; without this capability the
+         *   length can only be specified in terms of arc length;
+         * - \e caps |= GeodesicLine::ALL for all of the above.
+         * .
+         * The default value of \e caps is GeodesicLine::ALL.
+         *
+         * If the point is at a pole, the azimuth is defined by keeping \e lon1
+         * fixed, writing \e lat1 = ±(90° − ε), and taking
+         * the limit ε → 0+.
+         **********************************************************************/
+        GeodesicLine( Geodesic^ g, double lat1, double lon1, double azi1,
+                      NETGeographicLib::Mask caps );
+
+        /**
+         * A constructor which assumes the WGS84 ellipsoid.
+         **********************************************************************/
+        GeodesicLine(double lat1, double lon1, double azi1,
+                     NETGeographicLib::Mask caps);
+        ///@}
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~GeodesicLine()
+        { this->!GeodesicLine(); }
+
+        /** \name Position in terms of distance
+         **********************************************************************/
+        ///@{
+
+        /**
+         * Compute the position of point 2 which is a distance \e s12 (meters) from
+         * point 1.
+         *
+         * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+         *   negative.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees); requires that the
+         *   GeodesicLine object was constructed with \e caps |=
+         *   GeodesicLine::LONGITUDE.
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] m12 reduced length of geodesic (meters); requires that the
+         *   GeodesicLine object was constructed with \e caps |=
+         *   GeodesicLine::REDUCEDLENGTH.
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless); requires that the GeodesicLine object was constructed
+         *   with \e caps |= GeodesicLine::GEODESICSCALE.
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless); requires that the GeodesicLine object was constructed
+         *   with \e caps |= GeodesicLine::GEODESICSCALE.
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
+         *   that the GeodesicLine object was constructed with \e caps |=
+         *   GeodesicLine::AREA.
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * The values of \e lon2 and \e azi2 returned are in the range
+         * [−180°, 180°).
+         *
+         * The GeodesicLine object \e must have been constructed with \e caps |=
+         * GeodesicLine::DISTANCE_IN; otherwise Math::NaN() is returned and no
+         * parameters are set.  Requesting a value which the GeodesicLine object is
+         * not capable of computing is not an error; the corresponding argument
+         * will not be altered.
+         *
+         * The following functions are overloaded versions of
+         * GeodesicLine::Position which omit some of the output parameters.  Note,
+         * however, that the arc length is always computed and returned as the
+         * function value.
+         **********************************************************************/
+        double Position(double s12,
+                        [System::Runtime::InteropServices::Out] double% lat2,
+                        [System::Runtime::InteropServices::Out] double% lon2,
+                        [System::Runtime::InteropServices::Out] double% azi2,
+                        [System::Runtime::InteropServices::Out] double% m12,
+                        [System::Runtime::InteropServices::Out] double% M12,
+                        [System::Runtime::InteropServices::Out] double% M21,
+                        [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for GeodesicLine::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2);
+
+        /**
+         * See the documentation for GeodesicLine::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for GeodesicLine::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for GeodesicLine::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for GeodesicLine::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% m12,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21);
+
+        ///@}
+
+        /** \name Position in terms of arc length
+         **********************************************************************/
+        ///@{
+
+        /**
+         * Compute the position of point 2 which is an arc length \e a12 (degrees)
+         * from point 1.
+         *
+         * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
+         *   be negative.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees); requires that the
+         *   GeodesicLine object was constructed with \e caps |=
+         *   NETGeographicLib::Mask::LONGITUDE.
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters); requires
+         *   that the GeodesicLine object was constructed with \e caps |=
+         *   NETGeographicLib::Mask::DISTANCE.
+         * @param[out] m12 reduced length of geodesic (meters); requires that the
+         *   GeodesicLine object was constructed with \e caps |=
+         *   NETGeographicLib::Mask::REDUCEDLENGTH.
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless); requires that the GeodesicLine object was constructed
+         *   with \e caps |= NETGeographicLib::Mask::GEODESICSCALE.
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless); requires that the GeodesicLine object was constructed
+         *   with \e caps |= NETGeographicLib::Mask::GEODESICSCALE.
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
+         *   that the GeodesicLine object was constructed with \e caps |=
+         *   NETGeographicLib::Mask::AREA.
+         *
+         * The values of \e lon2 and \e azi2 returned are in the range
+         * [−180°, 180°).
+         *
+         * Requesting a value which the GeodesicLine object is not capable of
+         * computing is not an error; the corresponding argument will not be
+         * altered.
+         *
+         * The following functions are overloaded versions of
+         * GeodesicLine::ArcPosition which omit some of the output parameters.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12,
+            [System::Runtime::InteropServices::Out] double% m12,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21,
+            [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for GeodesicLine::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2);
+
+        /**
+         * See the documentation for GeodesicLine::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for GeodesicLine::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12);
+
+        /**
+         * See the documentation for GeodesicLine::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12,
+            [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for GeodesicLine::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for GeodesicLine::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12,
+            [System::Runtime::InteropServices::Out] double% m12,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21);
+        ///@}
+
+        /** \name The general position function.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * The general position function.  GeodesicLine::Position and
+         * GeodesicLine::ArcPosition are defined in terms of this function.
+         *
+         * @param[in] arcmode boolean flag determining the meaning of the second
+         *   parameter; if arcmode is false, then the GeodesicLine object must have
+         *   been constructed with \e caps |= GeodesicLine::DISTANCE_IN.
+         * @param[in] s12_a12 if \e arcmode is false, this is the distance between
+         *   point 1 and point 2 (meters); otherwise it is the arc length between
+         *   point 1 and point 2 (degrees); it can be negative.
+         * @param[in] outmask a bitor'ed combination of NETGeographicLib::Mask values
+         *   specifying which of the following parameters should be set.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees); requires that the
+         *   GeodesicLine object was constructed with \e caps |=
+         *   NETGeographicLib::Mask::LONGITUDE.
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters); requires
+         *   that the GeodesicLine object was constructed with \e caps |=
+         *   NETGeographicLib::Mask::DISTANCE.
+         * @param[out] m12 reduced length of geodesic (meters); requires that the
+         *   GeodesicLine object was constructed with \e caps |=
+         *   NETGeographicLib::Mask::REDUCEDLENGTH.
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless); requires that the GeodesicLine object was constructed
+         *   with \e caps |= NETGeographicLib::Mask::GEODESICSCALE.
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless); requires that the GeodesicLine object was constructed
+         *   with \e caps |= NETGeographicLib::Mask::GEODESICSCALE.
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
+         *   that the GeodesicLine object was constructed with \e caps |=
+         *   NETGeographicLib::Mask::AREA.
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * The GeodesicLine::mask values possible for \e outmask are
+         * - \e outmask |= NETGeographicLib::Mask::LATITUDE for the latitude \e lat2;
+         * - \e outmask |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
+         * - \e outmask |= NETGeographicLib::Mask::AZIMUTH for the latitude \e azi2;
+         * - \e outmask |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
+         * - \e outmask |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e
+         *   m12;
+         * - \e outmask |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e
+         *   M12 and \e M21;
+         * - \e outmask |= NETGeographicLib::Mask::AREA for the area \e S12;
+         * - \e outmask |= NETGeographicLib::Mask::ALL for all of the above.
+         * .
+         * Requesting a value which the GeodesicLine object is not capable of
+         * computing is not an error; the corresponding argument will not be
+         * altered.  Note, however, that the arc length is always computed and
+         * returned as the function value.
+         **********************************************************************/
+        double GenPosition(bool arcmode, double s12_a12,
+                    NETGeographicLib::Mask outmask,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% s12,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21,
+                    [System::Runtime::InteropServices::Out] double% S12);
+
+        ///@}
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+
+        /**
+         * @return \e lat1 the latitude of point 1 (degrees).
+         **********************************************************************/
+        property double Latitude { double get(); }
+
+        /**
+         * @return \e lon1 the longitude of point 1 (degrees).
+         **********************************************************************/
+        property double Longitude { double get(); }
+
+        /**
+         * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
+         **********************************************************************/
+        property double Azimuth { double get(); }
+
+        /**
+         * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
+         *   the equator in a northward direction.
+         **********************************************************************/
+        property double EquatorialAzimuth { double get(); }
+
+        /**
+         * @return \e a1 the arc length (degrees) between the northward equatorial
+         *   crossing and point 1.
+         **********************************************************************/
+        property double EquatorialArc { double get(); }
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return \e caps the computational capabilities that this object was
+         *   constructed with.  LATITUDE and AZIMUTH are always included.
+         **********************************************************************/
+        NETGeographicLib::Mask Capabilities();
+
+        /**
+         * @param[in] testcaps a set of bitor'ed GeodesicLine::mask values.
+         * @return true if the GeodesicLine object has all these capabilities.
+         **********************************************************************/
+        bool Capabilities(NETGeographicLib::Mask testcaps);
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/GeodesicLineExact.cpp b/dotnet/NETGeographicLib/GeodesicLineExact.cpp
new file mode 100644
index 0000000..fb8ab72
--- /dev/null
+++ b/dotnet/NETGeographicLib/GeodesicLineExact.cpp
@@ -0,0 +1,354 @@
+/**
+ * \file NETGeographicLib/GeodesicLineExact.cpp
+ * \brief Implementation for NETGeographicLib::GeodesicLineExact class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/GeodesicLineExact.hpp"
+#include "GeodesicLineExact.h"
+#include "GeodesicExact.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::GeodesicLineExact";
+
+//*****************************************************************************
+GeodesicLineExact::!GeodesicLineExact(void)
+{
+    if ( m_pGeodesicLineExact != NULL )
+    {
+        delete m_pGeodesicLineExact;
+        m_pGeodesicLineExact = NULL;
+    }
+}
+
+//*****************************************************************************
+GeodesicLineExact::GeodesicLineExact(GeodesicExact^ g, double lat1,
+    double lon1, double azi1, NETGeographicLib::Mask caps )
+{
+    try
+    {
+        const GeographicLib::GeodesicExact* pGeodesicExact=
+            reinterpret_cast<const GeographicLib::GeodesicExact*>(
+                g->GetUnmanaged()->ToPointer() );
+        m_pGeodesicLineExact = new GeographicLib::GeodesicLineExact(
+            *pGeodesicExact, lat1, lon1, azi1, static_cast<unsigned>(caps) );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+GeodesicLineExact::GeodesicLineExact(double lat1, double lon1, double azi1,
+                                     NETGeographicLib::Mask caps)
+{
+    try
+    {
+        m_pGeodesicLineExact = new GeographicLib::GeodesicLineExact(
+            GeographicLib::GeodesicExact::WGS84, lat1, lon1, azi1,
+            static_cast<unsigned>(caps) );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+double GeodesicLineExact::Position(double s12,
+        [System::Runtime::InteropServices::Out] double% lat2,
+        [System::Runtime::InteropServices::Out] double% lon2,
+        [System::Runtime::InteropServices::Out] double% azi2,
+        [System::Runtime::InteropServices::Out] double% m12,
+        [System::Runtime::InteropServices::Out] double% M12,
+        [System::Runtime::InteropServices::Out] double% M21,
+        [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesicLineExact->Position( s12, llat2, llon2, lazi2,
+        lm12, lM12, lM21, lS12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLineExact::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double llat2, llon2;
+    double out = m_pGeodesicLineExact->Position( s12, llat2, llon2);
+    lat2 = llat2;
+    lon2 = llon2;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLineExact::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double llat2, llon2, lazi2;
+    double out = m_pGeodesicLineExact->Position( s12, llat2, llon2, lazi2);
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLineExact::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% m12)
+{
+    double llat2, llon2, lazi2, lm12;
+    double out = m_pGeodesicLineExact->Position( s12, llat2, llon2, lazi2,
+        lm12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLineExact::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, lM12, lM21;
+    double out = m_pGeodesicLineExact->Position( s12, llat2, llon2, lazi2,
+        lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLineExact::Position(double s12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% m12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, lm12, lM12, lM21;
+    double out = m_pGeodesicLineExact->Position( s12, llat2, llon2, lazi2,
+        lm12, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    return out;
+}
+
+//*****************************************************************************
+void GeodesicLineExact::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% m12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21,
+    [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12;
+    m_pGeodesicLineExact->ArcPosition( a12, llat2, llon2, lazi2, ls12,
+        lm12, lM12, lM21, lS12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+}
+
+//*****************************************************************************
+void GeodesicLineExact::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double llat2, llon2;
+    m_pGeodesicLineExact->ArcPosition( a12, llat2, llon2 );
+    lat2 = llat2;
+    lon2 = llon2;
+}
+
+//*****************************************************************************
+void GeodesicLineExact::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2)
+{
+    double llat2, llon2, lazi2;
+    m_pGeodesicLineExact->ArcPosition( a12, llat2, llon2, lazi2 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+}
+
+//*****************************************************************************
+void GeodesicLineExact::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12)
+{
+    double llat2, llon2, lazi2, ls12;
+    m_pGeodesicLineExact->ArcPosition( a12, llat2, llon2, lazi2, ls12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+}
+
+//*****************************************************************************
+void GeodesicLineExact::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% m12)
+{
+    double llat2, llon2, lazi2, ls12, lm12;
+    m_pGeodesicLineExact->ArcPosition( a12, llat2, llon2, lazi2, ls12,
+        lm12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+}
+
+//*****************************************************************************
+void GeodesicLineExact::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, ls12, lM12, lM21;
+    m_pGeodesicLineExact->ArcPosition( a12, llat2, llon2, lazi2, ls12,
+        lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    M12 = lM12;
+    M21 = lM21;
+}
+
+//*****************************************************************************
+void GeodesicLineExact::ArcPosition(double a12,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% m12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21;
+    m_pGeodesicLineExact->ArcPosition( a12, llat2, llon2, lazi2, ls12,
+        lm12, lM12, lM21 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+}
+
+//*****************************************************************************
+double GeodesicLineExact::GenPosition(bool arcmode, double s12_a12,
+    NETGeographicLib::Mask outmask,
+    [System::Runtime::InteropServices::Out] double% lat2,
+    [System::Runtime::InteropServices::Out] double% lon2,
+    [System::Runtime::InteropServices::Out] double% azi2,
+    [System::Runtime::InteropServices::Out] double% s12,
+    [System::Runtime::InteropServices::Out] double% m12,
+    [System::Runtime::InteropServices::Out] double% M12,
+    [System::Runtime::InteropServices::Out] double% M21,
+    [System::Runtime::InteropServices::Out] double% S12)
+{
+    double llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12;
+    double out = m_pGeodesicLineExact->GenPosition( arcmode, s12_a12,
+        static_cast<unsigned>(outmask),
+        llat2, llon2, lazi2, ls12, lm12, lM12, lM21, lS12 );
+    lat2 = llat2;
+    lon2 = llon2;
+    azi2 = lazi2;
+    s12 = ls12;
+    m12 = lm12;
+    M12 = lM12;
+    M21 = lM21;
+    S12 = lS12;
+    return out;
+}
+
+//*****************************************************************************
+double GeodesicLineExact::Latitude::get()
+{ return m_pGeodesicLineExact->Latitude(); }
+
+//*****************************************************************************
+double GeodesicLineExact::Longitude::get()
+{ return m_pGeodesicLineExact->Longitude(); }
+
+//*****************************************************************************
+double GeodesicLineExact::Azimuth::get()
+{ return m_pGeodesicLineExact->Azimuth(); }
+
+//*****************************************************************************
+double GeodesicLineExact::EquatorialAzimuth::get()
+{ return m_pGeodesicLineExact->EquatorialAzimuth(); }
+
+//*****************************************************************************
+double GeodesicLineExact::EquatorialArc::get()
+{ return m_pGeodesicLineExact->EquatorialArc(); }
+
+//*****************************************************************************
+double GeodesicLineExact::MajorRadius::get()
+{ return m_pGeodesicLineExact->MajorRadius(); }
+
+//*****************************************************************************
+double GeodesicLineExact::Flattening::get()
+{ return m_pGeodesicLineExact->Flattening(); }
+
+//*****************************************************************************
+NETGeographicLib::Mask GeodesicLineExact::Capabilities()
+{ return static_cast<NETGeographicLib::Mask>(m_pGeodesicLineExact->Capabilities()); }
+
+//*****************************************************************************
+bool GeodesicLineExact::Capabilities(NETGeographicLib::Mask testcaps)
+{ return m_pGeodesicLineExact->Capabilities(static_cast<unsigned>(testcaps)); }
diff --git a/dotnet/NETGeographicLib/GeodesicLineExact.h b/dotnet/NETGeographicLib/GeodesicLineExact.h
new file mode 100644
index 0000000..750bf8a
--- /dev/null
+++ b/dotnet/NETGeographicLib/GeodesicLineExact.h
@@ -0,0 +1,448 @@
+#pragma once
+/**
+ * \file NETGeographicLib/GeodesicLineExact.h
+ * \brief Header for NETGeographicLib::GeodesicLineExact class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "NETGeographicLib.h"
+
+namespace NETGeographicLib
+{
+    ref class GeodesicExact;
+  /**
+   * \brief .NET wrapper for GeographicLib::GeodesicLineExact.
+   *
+   * This class allows .NET applications to access GeographicLib::GeodesicLineExact.
+   *
+   * GeodesicLineExact facilitates the determination of a series of points on a
+   * single geodesic.  This is a companion to the GeodesicExact class.  For
+   * additional information on this class see the documentation on the
+   * GeodesicLine class.
+   *
+   * C# Example:
+   * \include example-GeodesicLineExact.cs
+   * Managed C++ Example:
+   * \include example-GeodesicLineExact.cpp
+   * Visual Basic Example:
+   * \include example-GeodesicLineExact.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A constructor has been provided that assumes WGS84 parameters.
+   *
+   * The following functions are implemented as properties:
+   * Latitude, Longitude, Azimuth, EquatorialAzimuth, EquatorialArc,
+   * MajorRadius, and Flattening.
+   *
+   * The constructors, GenPosition, and Capabilities functions accept the
+   * "capabilities mask" as a NETGeographicLib::Mask rather than an
+   * unsigned.  The Capabilities function returns a NETGeographicLib::Mask
+   * rather than an unsigned.
+   **********************************************************************/
+    public ref class GeodesicLineExact
+    {
+        private:
+        // a pointer to the GeographicLib::GeodesicLineExact.
+        const GeographicLib::GeodesicLineExact* m_pGeodesicLineExact;
+
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !GeodesicLineExact(void);
+    public:
+
+        /** \name Constructors
+         **********************************************************************/
+        ///@{
+
+        /**
+         * Constructor for a geodesic line staring at latitude \e lat1, longitude
+         * \e lon1, and azimuth \e azi1 (all in degrees).
+         *
+         * @param[in] g A GeodesicExact object used to compute the necessary
+         *   information about the GeodesicLineExact.
+         * @param[in] lat1 latitude of point 1 (degrees).
+         * @param[in] lon1 longitude of point 1 (degrees).
+         * @param[in] azi1 azimuth at point 1 (degrees).
+         * @param[in] caps bitor'ed combination of NETGeographicLib::Mask values
+         *   specifying the capabilities the GeodesicLineExact object should
+         *   possess, i.e., which quantities can be returned in calls to
+         *   GeodesicLine::Position.
+         *
+         * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+         * azi1 should be in the range [−540°, 540°).
+         *
+         * The NETGeographicLib::Mask values are
+         * - \e caps |= GeodesicLineExact::LATITUDE for the latitude \e lat2; this
+         *   is added automatically;
+         * - \e caps |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
+         * - \e caps |= NETGeographicLib::Mask::AZIMUTH for the latitude \e azi2; this is
+         *   added automatically;
+         * - \e caps |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
+         * - \e caps |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e
+             m12;
+         * - \e caps |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e
+         *   M12 and \e M21;
+         * - \e caps |= NETGeographicLib::Mask::AREA for the area \e S12;
+         * - \e caps |= NETGeographicLib::Mask::DISTANCE_IN permits the length of the
+         *   geodesic to be given in terms of \e s12; without this capability the
+         *   length can only be specified in terms of arc length;
+         * - \e caps |= NETGeographicLib::Mask::ALL for all of the above.
+         * .
+         *
+         * If the point is at a pole, the azimuth is defined by keeping \e lon1
+         * fixed, writing \e lat1 = ±(90° − ε), and taking
+         * the limit ε → 0+.
+         **********************************************************************/
+        GeodesicLineExact(GeodesicExact^ g, double lat1, double lon1, double azi1,
+                          NETGeographicLib::Mask caps );
+
+        /**
+         * A default constructor which assumes the WGS84 ellipsoid.  See
+         * constructor comments for details.
+         **********************************************************************/
+        GeodesicLineExact(double lat1, double lon1, double azi1,
+                          NETGeographicLib::Mask caps);
+        ///@}
+
+        /**
+         * The destructor calls the finalizer
+         **********************************************************************/
+        ~GeodesicLineExact()
+        { this->!GeodesicLineExact(); }
+
+        /** \name Position in terms of distance
+         **********************************************************************/
+        ///@{
+
+        /**
+         * Compute the position of point 2 which is a distance \e s12 (meters)
+         * from point 1.
+         *
+         * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+         *   signed.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees); requires that the
+         *   GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::LONGITUDE.
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] m12 reduced length of geodesic (meters); requires that the
+         *   GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::REDUCEDLENGTH.
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless); requires that the GeodesicLineExact object was
+         *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless); requires that the GeodesicLineExact object was
+         *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
+         *   that the GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::AREA.
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * The values of \e lon2 and \e azi2 returned are in the range
+         * [−180°, 180°).
+         *
+         * The GeodesicLineExact object \e must have been constructed with \e caps
+         * |= GeodesicLineExact::DISTANCE_IN; otherwise Math::NaN() is returned and
+         * no parameters are set.  Requesting a value which the GeodesicLineExact
+         * object is not capable of computing is not an error; the corresponding
+         * argument will not be altered.
+         *
+         * The following functions are overloaded versions of
+         * GeodesicLineExact::Position which omit some of the output parameters.
+         * Note, however, that the arc length is always computed and returned as
+         * the function value.
+         **********************************************************************/
+        double Position(double s12,
+                    [System::Runtime::InteropServices::Out] double% lat2,
+                    [System::Runtime::InteropServices::Out] double% lon2,
+                    [System::Runtime::InteropServices::Out] double% azi2,
+                    [System::Runtime::InteropServices::Out] double% m12,
+                    [System::Runtime::InteropServices::Out] double% M12,
+                    [System::Runtime::InteropServices::Out] double% M21,
+                    [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for GeodesicLineExact::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2);
+
+        /**
+         * See the documentation for GeodesicLineExact::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for GeodesicLineExact::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for GeodesicLineExact::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for GeodesicLineExact::Position.
+         **********************************************************************/
+        double Position(double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% m12,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21);
+
+        ///@}
+
+        /** \name Position in terms of arc length
+         **********************************************************************/
+        ///@{
+
+        /**
+         * Compute the position of point 2 which is an arc length \e a12 (degrees)
+         * from point 1.
+         *
+         * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
+         *   be signed.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees); requires that the
+         *   GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::LONGITUDE.
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters); requires
+         *   that the GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::DISTANCE.
+         * @param[out] m12 reduced length of geodesic (meters); requires that the
+         *   GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::REDUCEDLENGTH.
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless); requires that the GeodesicLineExact object was
+         *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless); requires that the GeodesicLineExact object was
+         *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
+         *   that the GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::AREA.
+         *
+         * The values of \e lon2 and \e azi2 returned are in the range
+         * [−180°, 180°).
+         *
+         * Requesting a value which the GeodesicLineExact object is not capable of
+         * computing is not an error; the corresponding argument will not be
+         * altered.
+         *
+         * The following functions are overloaded versions of
+         * GeodesicLineExact::ArcPosition which omit some of the output parameters.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12,
+            [System::Runtime::InteropServices::Out] double% m12,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21,
+            [System::Runtime::InteropServices::Out] double% S12);
+
+        /**
+         * See the documentation for GeodesicLineExact::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2);
+
+        /**
+         * See the documentation for GeodesicLineExact::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2);
+
+        /**
+         * See the documentation for GeodesicLineExact::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12);
+
+        /**
+         * See the documentation for GeodesicLineExact::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12,
+            [System::Runtime::InteropServices::Out] double% m12);
+
+        /**
+         * See the documentation for GeodesicLineExact::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21);
+
+        /**
+         * See the documentation for GeodesicLineExact::ArcPosition.
+         **********************************************************************/
+        void ArcPosition(double a12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2,
+            [System::Runtime::InteropServices::Out] double% azi2,
+            [System::Runtime::InteropServices::Out] double% s12,
+            [System::Runtime::InteropServices::Out] double% m12,
+            [System::Runtime::InteropServices::Out] double% M12,
+            [System::Runtime::InteropServices::Out] double% M21);
+        ///@}
+
+        /** \name The general position function.
+         **********************************************************************/
+        ///@{
+
+        /**
+         * The general position function.  GeodesicLineExact::Position and
+         * GeodesicLineExact::ArcPosition are defined in terms of this function.
+         *
+         * @param[in] arcmode boolean flag determining the meaning of the second
+         *   parameter; if arcmode is false, then the GeodesicLineExact object must
+         *   have been constructed with \e caps |= GeodesicLineExact::DISTANCE_IN.
+         * @param[in] s12_a12 if \e arcmode is false, this is the distance between
+         *   point 1 and point 2 (meters); otherwise it is the arc length between
+         *   point 1 and point 2 (degrees); it can be signed.
+         * @param[in] outmask a bitor'ed combination of NETGeographicLib::Mask
+         *   values specifying which of the following parameters should be set.
+         * @param[out] lat2 latitude of point 2 (degrees).
+         * @param[out] lon2 longitude of point 2 (degrees); requires that the
+         *   GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::LONGITUDE.
+         * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+         * @param[out] s12 distance between point 1 and point 2 (meters); requires
+         *   that the GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::DISTANCE.
+         * @param[out] m12 reduced length of geodesic (meters); requires that the
+         *   GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::REDUCEDLENGTH.
+         * @param[out] M12 geodesic scale of point 2 relative to point 1
+         *   (dimensionless); requires that the GeodesicLineExact object was
+         *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+         * @param[out] M21 geodesic scale of point 1 relative to point 2
+         *   (dimensionless); requires that the GeodesicLineExact object was
+         *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+         * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
+         *   that the GeodesicLineExact object was constructed with \e caps |=
+         *   GeodesicLineExact::AREA.
+         * @return \e a12 arc length of between point 1 and point 2 (degrees).
+         *
+         * The NETGeographicLib::Mask values possible for \e outmask are
+         * - \e outmask |= NETGeographicLib::Mask::LATITUDE for the latitude \e lat2;
+         * - \e outmask |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
+         * - \e outmask |= NETGeographicLib::Mask::AZIMUTH for the latitude \e azi2;
+         * - \e outmask |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
+         * - \e outmask |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length
+         *   \e m12;
+         * - \e outmask |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales
+         *   \e M12 and \e M21;
+         * - \e outmask |= NETGeographicLib::Mask::AREA for the area \e S12;
+         * - \e outmask |= NETGeographicLib::Mask::ALL for all of the above.
+         * .
+         * Requesting a value which the GeodesicLineExact object is not capable of
+         * computing is not an error; the corresponding argument will not be
+         * altered.  Note, however, that the arc length is always computed and
+         * returned as the function value.
+         **********************************************************************/
+        double GenPosition(bool arcmode, double s12_a12,
+                NETGeographicLib::Mask outmask,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2,
+                [System::Runtime::InteropServices::Out] double% azi2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% m12,
+                [System::Runtime::InteropServices::Out] double% M12,
+                [System::Runtime::InteropServices::Out] double% M21,
+                [System::Runtime::InteropServices::Out] double% S12);
+
+        ///@}
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e lat1 the latitude of point 1 (degrees).
+         **********************************************************************/
+        property double Latitude { double get(); }
+
+        /**
+         * @return \e lon1 the longitude of point 1 (degrees).
+         **********************************************************************/
+        property double Longitude { double get(); }
+
+        /**
+         * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
+         **********************************************************************/
+        property double Azimuth { double get(); }
+
+        /**
+         * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
+         * the equator in a northward direction.
+         **********************************************************************/
+        property double EquatorialAzimuth { double get(); }
+
+        /**
+         * @return \e a1 the arc length (degrees) between the northward equatorial
+         * crossing and point 1.
+         **********************************************************************/
+        property double EquatorialArc { double get(); }
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value inherited from the GeodesicExact object used in the
+         *   constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the GeodesicExact object used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return \e caps the computational capabilities that this object was
+         *   constructed with.  LATITUDE and AZIMUTH are always included.
+         **********************************************************************/
+        NETGeographicLib::Mask Capabilities();
+
+        /**
+         * @param[in] testcaps a set of bitor'ed GeodesicLineExact::mask values.
+         * @return true if the GeodesicLineExact object has all these capabilities.
+         **********************************************************************/
+        bool Capabilities(NETGeographicLib::Mask testcaps);
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/Geohash.cpp b/dotnet/NETGeographicLib/Geohash.cpp
new file mode 100644
index 0000000..08c31c8
--- /dev/null
+++ b/dotnet/NETGeographicLib/Geohash.cpp
@@ -0,0 +1,84 @@
+/**
+ * \file NETGeographicLib/Geohash.cpp
+ * \brief Implementation for NETGeographicLib::Geohash class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/Geohash.hpp"
+#include "Geohash.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+void Geohash::Forward(double lat, double lon, int len, System::String^% geohash)
+{
+    try
+    {
+        std::string l;
+        GeographicLib::Geohash::Forward( lat, lon, len, l );
+        geohash = gcnew System::String( l.c_str() );
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+}
+
+//*****************************************************************************
+void Geohash::Reverse(System::String^ geohash,
+    [System::Runtime::InteropServices::Out] double% lat,
+    [System::Runtime::InteropServices::Out] double% lon,
+    [System::Runtime::InteropServices::Out] int% len,
+    bool centerp )
+{
+    try
+    {
+        double llat, llon;
+        int llen;
+        GeographicLib::Geohash::Reverse( StringConvert::ManagedToUnmanaged( geohash ),
+            llat, llon, llen, centerp );
+        lat = llat;
+        lon = llon;
+        len = llen;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+double Geohash::LatitudeResolution(int len)
+{
+    return GeographicLib::Geohash::LatitudeResolution( len );
+}
+
+//*****************************************************************************
+double Geohash::LongitudeResolution(int len)
+{
+    return GeographicLib::Geohash::LongitudeResolution( len );
+}
+
+//*****************************************************************************
+int Geohash::GeohashLength(double res)
+{
+    return GeographicLib::Geohash::GeohashLength( res );
+}
+
+//*****************************************************************************
+int Geohash::GeohashLength(double latres, double lonres)
+{
+    return GeographicLib::Geohash::GeohashLength( latres, lonres );
+}
+
+//*****************************************************************************
+int Geohash::DecimalPrecision(int len)
+{
+    return GeographicLib::Geohash::DecimalPrecision( len );
+}
diff --git a/dotnet/NETGeographicLib/Geohash.h b/dotnet/NETGeographicLib/Geohash.h
new file mode 100644
index 0000000..c198776
--- /dev/null
+++ b/dotnet/NETGeographicLib/Geohash.h
@@ -0,0 +1,139 @@
+#pragma once
+/**
+ * \file NETGeographicLib/Geohash.h
+ * \brief Header for NETGeographicLib::Geohash class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::Geohash.
+   *
+   * Geohashes are described in
+   * - http://en.wikipedia.org/wiki/Geohash
+   * - http://geohash.org/
+   * .
+   * They provide a compact string representation of a particular geographic
+   * location (expressed as latitude and longitude), with the property that if
+   * trailing characters are dropped from the string the geographic location
+   * remains nearby.
+   *
+   * C# Example:
+   * \include example-Geohash.cs
+   * Managed C++ Example:
+   * \include example-Geohash.cpp
+   * Visual Basic Example:
+   * \include example-Geohash.vb
+   **********************************************************************/
+    public ref class Geohash
+    {
+        private:
+        // hide the constructor since all members of this class are static.
+        Geohash() {}
+    public:
+
+        /**
+         * Convert from geographic coordinates to a geohash.
+         *
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[in] len the length of the resulting geohash.
+         * @param[out] geohash the geohash.
+         * @exception GeographicErr if \e la is not in [−90°,
+         *   90°].
+         * @exception GeographicErr if \e lon is not in [−540°,
+         *   540°).
+         * @exception std::bad_alloc if memory for \e geohash can't be allocated.
+         *
+         * Internally, \e len is first put in the range [0, 18].
+         *
+         * If \e lat or \e lon is NaN, the returned geohash is "nan".
+         **********************************************************************/
+        static void Forward(double lat, double lon, int len,
+            [System::Runtime::InteropServices::Out] System::String^% geohash);
+
+        /**
+         * Convert from a geohash to geographic coordinates.
+         *
+         * @param[in] geohash the geohash.
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] len the length of the geohash.
+         * @param[in] centerp if true (the default) return the center of the
+         *   geohash location, otherwise return the south-west corner.
+         * @exception GeographicErr if \e geohash contains illegal characters.
+         *
+         * Only the first 18 characters for \e geohash are considered.  The case of
+         * the letters in \e geohash is ignored.
+         *
+         * If the first three characters in \e geohash are "nan", then \e lat and
+         * \e lon are set to NaN.
+         **********************************************************************/
+        static void Reverse(System::String^ geohash,
+            [System::Runtime::InteropServices::Out] double% lat,
+            [System::Runtime::InteropServices::Out] double% lon,
+            [System::Runtime::InteropServices::Out] int% len,
+            bool centerp);
+
+        /**
+         * The latitude resolution of a geohash.
+         *
+         * @param[in] len the length of the geohash.
+         * @return the latitude resolution (degrees).
+         *
+         * Internally, \e len is first put in the range [0, 18].
+         **********************************************************************/
+        static double LatitudeResolution(int len);
+
+        /**
+         * The longitude resolution of a geohash.
+         *
+         * @param[in] len the length of the geohash.
+         * @return the longitude resolution (degrees).
+         *
+         * Internally, \e len is first put in the range [0, 18].
+         **********************************************************************/
+        static double LongitudeResolution(int len);
+
+        /**
+         * The geohash length required to meet a given geographic resolution.
+         *
+         * @param[in] res the minimum of resolution in latitude and longitude
+         *   (degrees).
+         * @return geohash length.
+         *
+         * The returned length is in the range [0, 18].
+         **********************************************************************/
+        static int GeohashLength(double res);
+
+        /**
+         * The geohash length required to meet a given geographic resolution.
+         *
+         * @param[in] latres the resolution in latitude (degrees).
+         * @param[in] lonres the resolution in longitude (degrees).
+         * @return geohash length.
+         *
+         * The returned length is in the range [0, 18].
+         **********************************************************************/
+        static int GeohashLength(double latres, double lonres);
+
+        /**
+         * The decimal geographic precision required to match a given geohash
+         * length.  This is the number of digits needed after decimal point in a
+         * decimal degrees representation.
+         *
+         * @param[in] len the length of the geohash.
+         * @return the decimal precision (may be negative).
+         *
+         * Internally, \e len is first put in the range [0, 18].  The returned
+         * decimal precision is in the range [−2, 12].
+         **********************************************************************/
+        static int DecimalPrecision(int len);
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/Geoid.cpp b/dotnet/NETGeographicLib/Geoid.cpp
new file mode 100644
index 0000000..9814d16
--- /dev/null
+++ b/dotnet/NETGeographicLib/Geoid.cpp
@@ -0,0 +1,215 @@
+/**
+ * \file NETGeographicLib/Geoid.cpp
+ * \brief Implementation for NETGeographicLib::Geoid class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/Geoid.hpp"
+#include "Geoid.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+Geoid::!Geoid(void)
+{
+    if ( m_pGeoid != NULL )
+    {
+        delete m_pGeoid;
+        m_pGeoid = NULL;
+    }
+}
+
+//*****************************************************************************
+Geoid::Geoid(System::String^ name, System::String^ path,
+                bool cubic, bool threadsafe)
+{
+    if ( name == nullptr ) throw gcnew GeographicErr("name cannot be a null pointer.");
+    if ( path == nullptr ) throw gcnew GeographicErr("path cannot be a null pointer.");
+    try
+    {
+        m_pGeoid = new GeographicLib::Geoid(
+            StringConvert::ManagedToUnmanaged( name ),
+            StringConvert::ManagedToUnmanaged( path ),
+            cubic, threadsafe );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a GeographicLib::Geoid" );
+    }
+    catch ( const GeographicLib::GeographicErr& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+//*****************************************************************************
+void Geoid::CacheArea(double south, double west, double north, double east)
+{
+    try
+    {
+        m_pGeoid->CacheArea( south, west, north, east );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void Geoid::CacheAll()
+{
+    try
+    {
+        m_pGeoid->CacheAll();
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void Geoid::CacheClear()
+{
+    m_pGeoid->CacheClear();
+}
+
+//*****************************************************************************
+double Geoid::Height(double lat, double lon)
+{
+    try
+    {
+        return m_pGeoid->operator()( lat, lon );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+double Geoid::Height(double lat, double lon,
+    [System::Runtime::InteropServices::Out] double% gradn,
+    [System::Runtime::InteropServices::Out] double% grade)
+{
+    try
+    {
+        double lgradn, lgrade;
+        double out = m_pGeoid->operator()( lat, lon, lgradn, lgrade );
+        gradn = lgradn;
+        grade = lgrade;
+        return out;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+double Geoid::ConvertHeight(double lat, double lon, double h,
+                            ConvertFlag d)
+{
+    try
+    {
+        return m_pGeoid->ConvertHeight( lat, lon, h,
+            static_cast<GeographicLib::Geoid::convertflag>(d) );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+System::String^ Geoid::DefaultGeoidPath()
+{
+    try
+    {
+        return StringConvert::UnmanagedToManaged(
+            GeographicLib::Geoid::DefaultGeoidPath() );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+System::String^ Geoid::DefaultGeoidName()
+{
+    try
+    {
+        return StringConvert::UnmanagedToManaged(
+            GeographicLib::Geoid::DefaultGeoidName() );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+System::String^ Geoid::Description::get()
+{ return StringConvert::UnmanagedToManaged(m_pGeoid->Description()); }
+
+//*****************************************************************************
+System::String^ Geoid::DateTime::get()
+{ return StringConvert::UnmanagedToManaged(m_pGeoid->DateTime()); }
+
+//*****************************************************************************
+System::String^ Geoid::GeoidFile::get()
+{ return StringConvert::UnmanagedToManaged(m_pGeoid->GeoidFile()); }
+
+//*****************************************************************************
+System::String^ Geoid::GeoidName::get()
+{ return StringConvert::UnmanagedToManaged(m_pGeoid->GeoidName()); }
+
+//*****************************************************************************
+System::String^ Geoid::GeoidDirectory::get()
+{ return StringConvert::UnmanagedToManaged(m_pGeoid->GeoidDirectory()); }
+
+//*****************************************************************************
+System::String^ Geoid::Interpolation::get()
+{ return StringConvert::UnmanagedToManaged(m_pGeoid->Interpolation()); }
+
+//*****************************************************************************
+double Geoid::MaxError::get() { return m_pGeoid->MaxError(); }
+
+//*****************************************************************************
+double Geoid::RMSError::get() { return m_pGeoid->RMSError(); }
+
+//*****************************************************************************
+double Geoid::Offset::get() { return m_pGeoid->Offset(); }
+
+//*****************************************************************************
+double Geoid::Scale::get() { return m_pGeoid->Scale(); }
+
+//*****************************************************************************
+bool Geoid::ThreadSafe::get() { return m_pGeoid->ThreadSafe(); }
+
+//*****************************************************************************
+bool Geoid::Cache::get() { return m_pGeoid->Cache(); }
+
+//*****************************************************************************
+double Geoid::CacheWest::get() { return m_pGeoid->CacheWest(); }
+
+//*****************************************************************************
+double Geoid::CacheEast::get() { return m_pGeoid->CacheEast(); }
+
+//*****************************************************************************
+double Geoid::CacheNorth::get() { return m_pGeoid->CacheNorth(); }
+
+//*****************************************************************************
+double Geoid::CacheSouth::get() { return m_pGeoid->CacheSouth(); }
+
+//*****************************************************************************
+double Geoid::MajorRadius::get() { return m_pGeoid->MajorRadius(); }
+
+//*****************************************************************************
+double Geoid::Flattening::get() { return m_pGeoid->Flattening(); }
diff --git a/dotnet/NETGeographicLib/Geoid.h b/dotnet/NETGeographicLib/Geoid.h
new file mode 100644
index 0000000..a3b9b81
--- /dev/null
+++ b/dotnet/NETGeographicLib/Geoid.h
@@ -0,0 +1,379 @@
+#pragma once
+/**
+ * \file NETGeographicLib/Geoid.h
+ * \brief Header for NETGeographicLib::Geoid class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::Geoid.
+   *
+   * This class allows .NET applications to access GeographicLib::Geoid.
+   *
+   * This class evaluated the height of one of the standard geoids, EGM84,
+   * EGM96, or EGM2008 by bilinear or cubic interpolation into a rectangular
+   * grid of data.  These geoid models are documented in
+   * - EGM84:
+   *   http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html
+   * - EGM96:
+   *   http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html
+   * - EGM2008:
+   *   http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
+   *
+   * The geoids are defined in terms of spherical harmonics.  However in order
+   * to provide a quick and flexible method of evaluating the geoid heights,
+   * this class evaluates the height by interpolation into a grid of
+   * precomputed values.
+   *
+   * See \ref geoid for details of how to install the data sets, the data
+   * format, estimates of the interpolation errors, and how to use caching.
+   *
+   * In addition to returning the geoid height, the gradient of the geoid can
+   * be calculated.  The gradient is defined as the rate of change of the geoid
+   * as a function of position on the ellipsoid.  This uses the parameters for
+   * the WGS84 ellipsoid.  The gradient defined in terms of the interpolated
+   * heights.  As a result of the way that the geoid data is stored, the
+   * calculation of gradients can result in large quantization errors.  This is
+   * particularly acute for fine grids, at high latitudes, and for the easterly
+   * gradient.
+   *
+   * This class is typically \e not thread safe in that a single instantiation
+   * cannot be safely used by multiple threads because of the way the object
+   * reads the data set and because it maintains a single-cell cache.  If
+   * multiple threads need to calculate geoid heights they should all construct
+   * thread-local instantiations.  Alternatively, set the optional \e
+   * threadsafe parameter to true in the constructor.  This causes the
+   * constructor to read all the data into memory and to turn off the
+   * single-cell caching which results in a Geoid object which \e is thread
+   * safe.
+   *
+   * C# Example:
+   * \include example-Geoid.cs
+   * Managed C++ Example:
+   * \include example-Geoid.cpp
+   * Visual Basic Example:
+   * \include example-Geoid.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The () operator has been replaced with Height method.
+   *
+   * The following functions are implemented as properties:
+   * Description, DateTime, GeoidFile, GeoidName, GeoidDirectory,
+   * Interpolation, MaxError, RMSError, Offset, Scale, ThreadSafe,
+   * Cache, CacheWest, CacheEast, CacheNorth, CacheSouth, MajorRadius,
+   * and Flattening.
+   **********************************************************************/
+    public ref class Geoid
+    {
+        private:
+        // a pointer to the unmanaged GeographicLib::Geoid.
+        const GeographicLib::Geoid* m_pGeoid;
+
+        // the finalizer frees hthe unmanaged memory when the object is destroyed.
+        !Geoid(void);
+    public:
+        /**
+         * Flags indicating conversions between heights above the geoid and heights
+         * above the ellipsoid.
+         **********************************************************************/
+        enum class ConvertFlag {
+          /**
+           * The multiplier for converting from heights above the geoid to heights
+           * above the ellipsoid.
+           **********************************************************************/
+          ELLIPSOIDTOGEOID = -1,
+          /**
+           * No conversion.
+           **********************************************************************/
+          NONE = 0,
+          /**
+           * The multiplier for converting from heights above the ellipsoid to
+           * heights above the geoid.
+           **********************************************************************/
+          GEOIDTOELLIPSOID = 1,
+        };
+
+        /** \name Setting up the geoid
+         **********************************************************************/
+        ///@{
+        /**
+         * Construct a geoid.
+         *
+         * @param[in] name the name of the geoid.
+         * @param[in] path (optional) directory for data file.
+         * @param[in] cubic (optional) interpolation method; false means bilinear,
+         *   true (the default) means cubic.
+         * @param[in] threadsafe (optional), if true, construct a thread safe
+         *   object.  The default is false
+         * @exception GeographicErr if the data file cannot be found, is
+         *   unreadable, or is corrupt.
+         * @exception GeographicErr if \e threadsafe is true but the memory
+         *   necessary for caching the data can't be allocated.
+         *
+         * The data file is formed by appending ".pgm" to the name.  If \e path is
+         * specified (and is non-empty), then the file is loaded from directory, \e
+         * path.  Otherwise the path is given by DefaultGeoidPath().  If the \e
+         * threadsafe parameter is true, the data set is read into memory, the data
+         * file is closed, and single-cell caching is turned off; this results in a
+         * Geoid object which \e is thread safe.
+         **********************************************************************/
+        Geoid(System::String^ name, System::String^ path,
+                       bool cubic, bool threadsafe);
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~Geoid()
+        { this->!Geoid(); }
+
+        /**
+         * Set up a cache.
+         *
+         * @param[in] south latitude (degrees) of the south edge of the cached area.
+         * @param[in] west longitude (degrees) of the west edge of the cached area.
+         * @param[in] north latitude (degrees) of the north edge of the cached area.
+         * @param[in] east longitude (degrees) of the east edge of the cached area.
+         * @exception GeographicErr if the memory necessary for caching the data
+         *   can't be allocated (in this case, you will have no cache and can try
+         *   again with a smaller area).
+         * @exception GeographicErr if there's a problem reading the data.
+         * @exception GeographicErr if this is called on a threadsafe Geoid.
+         *
+         * Cache the data for the specified "rectangular" area bounded by the
+         * parallels \e south and \e north and the meridians \e west and \e east.
+         * \e east is always interpreted as being east of \e west, if necessary by
+         * adding 360° to its value.  \e south and \e north should be in
+         * the range [−90°, 90°]; \e west and \e east should
+         * be in the range [−540°, 540°).
+         **********************************************************************/
+        void CacheArea(double south, double west, double north, double east);
+
+        /**
+         * Cache all the data.
+         *
+         * @exception GeographicErr if the memory necessary for caching the data
+         *   can't be allocated (in this case, you will have no cache and can try
+         *   again with a smaller area).
+         * @exception GeographicErr if there's a problem reading the data.
+         * @exception GeographicErr if this is called on a threadsafe Geoid.
+         *
+         * On most computers, this is fast for data sets with grid resolution of 5'
+         * or coarser.  For a 1' grid, the required RAM is 450MB; a 2.5' grid needs
+         * 72MB; and a 5' grid needs 18MB.
+         **********************************************************************/
+        void CacheAll();
+
+        /**
+         * Clear the cache.  This never throws an error.  (This does nothing with a
+         * thread safe Geoid.)
+         **********************************************************************/
+        void CacheClear();
+
+        ///@}
+
+        /** \name Compute geoid heights
+         **********************************************************************/
+        ///@{
+        /**
+         * Compute the geoid height at a point
+         *
+         * @param[in] lat latitude of the point (degrees).
+         * @param[in] lon longitude of the point (degrees).
+         * @exception GeographicErr if there's a problem reading the data; this
+         *   never happens if (\e lat, \e lon) is within a successfully cached area.
+         * @return geoid height (meters).
+         *
+         * The latitude should be in [−90°, 90°] and
+         * longitude should be in [−540°, 540°).
+         **********************************************************************/
+        double Height(double lat, double lon);
+
+        /**
+         * Compute the geoid height and gradient at a point
+         *
+         * @param[in] lat latitude of the point (degrees).
+         * @param[in] lon longitude of the point (degrees).
+         * @param[out] gradn northerly gradient (dimensionless).
+         * @param[out] grade easterly gradient (dimensionless).
+         * @exception GeographicErr if there's a problem reading the data; this
+         *   never happens if (\e lat, \e lon) is within a successfully cached area.
+         * @return geoid height (meters).
+         *
+         * The latitude should be in [−90°, 90°] and
+         * longitude should be in [−540°, 540°).  As a result
+         * of the way that the geoid data is stored, the calculation of gradients
+         * can result in large quantization errors.  This is particularly acute for
+         * fine grids, at high latitudes, and for the easterly gradient.  If you
+         * need to compute the direction of the acceleration due to gravity
+         * accurately, you should use GravityModel::Gravity.
+         **********************************************************************/
+        double Height(double lat, double lon,
+            [System::Runtime::InteropServices::Out] double% gradn,
+            [System::Runtime::InteropServices::Out] double% grade);
+
+        /**
+         * Convert a height above the geoid to a height above the ellipsoid and
+         * vice versa.
+         *
+         * @param[in] lat latitude of the point (degrees).
+         * @param[in] lon longitude of the point (degrees).
+         * @param[in] h height of the point (degrees).
+         * @param[in] d a Geoid::convertflag specifying the direction of the
+         *   conversion; Geoid::GEOIDTOELLIPSOID means convert a height above the
+         *   geoid to a height above the ellipsoid; Geoid::ELLIPSOIDTOGEOID means
+         *   convert a height above the ellipsoid to a height above the geoid.
+         * @exception GeographicErr if there's a problem reading the data; this
+         *   never happens if (\e lat, \e lon) is within a successfully cached area.
+         * @return converted height (meters).
+         **********************************************************************/
+        double ConvertHeight(double lat, double lon, double h,
+                                 ConvertFlag d);
+
+        ///@}
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return geoid description, if available, in the data file; if
+         *   absent, return "NONE".
+         **********************************************************************/
+        property System::String^ Description { System::String^ get(); }
+
+        /**
+         * @return date of the data file; if absent, return "UNKNOWN".
+         **********************************************************************/
+        property System::String^ DateTime { System::String^ get(); }
+
+        /**
+         * @return full file name used to load the geoid data.
+         **********************************************************************/
+        property System::String^ GeoidFile { System::String^ get(); }
+
+        /**
+         * @return "name" used to load the geoid data (from the first argument of
+         *   the constructor).
+         **********************************************************************/
+        property System::String^ GeoidName { System::String^ get(); }
+
+        /**
+         * @return directory used to load the geoid data.
+         **********************************************************************/
+        property System::String^ GeoidDirectory { System::String^ get(); }
+
+        /**
+         * @return interpolation method ("cubic" or "bilinear").
+         **********************************************************************/
+        property System::String^ Interpolation { System::String^ get(); }
+
+        /**
+         * @return estimate of the maximum interpolation and quantization error
+         *   (meters).
+         *
+         * This relies on the value being stored in the data file.  If the value is
+         * absent, return −1.
+         **********************************************************************/
+        property double MaxError { double get(); }
+
+        /**
+         * @return estimate of the RMS interpolation and quantization error
+         *   (meters).
+         *
+         * This relies on the value being stored in the data file.  If the value is
+         * absent, return −1.
+         **********************************************************************/
+        property double RMSError { double get(); }
+
+        /**
+         * @return offset (meters).
+         *
+         * This in used in converting from the pixel values in the data file to
+         * geoid heights.
+         **********************************************************************/
+        property double Offset { double get(); }
+
+        /**
+         * @return scale (meters).
+         *
+         * This in used in converting from the pixel values in the data file to
+         * geoid heights.
+         **********************************************************************/
+        property double Scale { double get(); }
+
+        /**
+         * @return true if the object is constructed to be thread safe.
+         **********************************************************************/
+        property bool ThreadSafe { bool get(); }
+
+        /**
+         * @return true if a data cache is active.
+         **********************************************************************/
+        property bool Cache { bool get(); }
+
+        /**
+         * @return west edge of the cached area; the cache includes this edge.
+         **********************************************************************/
+        property double CacheWest { double get(); }
+
+        /**
+         * @return east edge of the cached area; the cache excludes this edge.
+         **********************************************************************/
+        property double CacheEast { double get(); }
+
+        /**
+         * @return north edge of the cached area; the cache includes this edge.
+         **********************************************************************/
+        property double CacheNorth { double get(); }
+
+        /**
+         * @return south edge of the cached area; the cache excludes this edge
+         *   unless it's the south pole.
+         **********************************************************************/
+        property double CacheSouth { double get(); }
+
+        /**
+         * @return \e a the equatorial radius of the WGS84 ellipsoid (meters).
+         *
+         * (The WGS84 value is returned because the supported geoid models are all
+         * based on this ellipsoid.)
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the WGS84 ellipsoid.
+         *
+         * (The WGS84 value is returned because the supported geoid models are all
+         * based on this ellipsoid.)
+         **********************************************************************/
+        property double Flattening { double get(); }
+        ///@}
+
+        /**
+         * @return the default path for geoid data files.
+         *
+         * This is the value of the environment variable GEOID_PATH, if set;
+         * otherwise, it is $GEOGRAPHICLIB_DATA/geoids if the environment variable
+         * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default
+         * (/usr/local/share/GeographicLib/geoids on non-Windows systems and
+         * C:/Documents and Settings/All Users/Application
+         * Data/GeographicLib/geoids on Windows systems).
+         **********************************************************************/
+        static System::String^ DefaultGeoidPath();
+
+        /**
+         * @return the default name for the geoid.
+         *
+         * This is the value of the environment variable GEOID_NAME, if set,
+         * otherwise, it is "egm96-5".  The Geoid class does not use this function;
+         * it is just provided as a convenience for a calling program when
+         * constructing a Geoid object.
+         **********************************************************************/
+        static System::String^ DefaultGeoidName();
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/Gnomonic.cpp b/dotnet/NETGeographicLib/Gnomonic.cpp
new file mode 100644
index 0000000..5cfee28
--- /dev/null
+++ b/dotnet/NETGeographicLib/Gnomonic.cpp
@@ -0,0 +1,116 @@
+/**
+ * \file NETGeographicLib/Gnomonic.cpp
+ * \brief Implementation for NETGeographicLib::Gnomonic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/Gnomonic.hpp"
+#include "Gnomonic.h"
+#include "Geodesic.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::Gnomonic";
+
+//*****************************************************************************
+Gnomonic::!Gnomonic(void)
+{
+    if ( m_pGnomonic != NULL )
+    {
+        delete m_pGnomonic;
+        m_pGnomonic = NULL;
+    }
+}
+
+//*****************************************************************************
+Gnomonic::Gnomonic( Geodesic^ earth )
+{
+    try
+    {
+        const GeographicLib::Geodesic* pGeodesic =
+            reinterpret_cast<const GeographicLib::Geodesic*>(
+                earth->GetUnmanaged()->ToPointer() );
+        m_pGnomonic = new GeographicLib::Gnomonic( *pGeodesic );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+Gnomonic::Gnomonic()
+{
+    try
+    {
+        m_pGnomonic = new GeographicLib::Gnomonic( GeographicLib::Geodesic::WGS84 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void Gnomonic::Forward(double lat0, double lon0, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y,
+                [System::Runtime::InteropServices::Out] double% azi,
+                [System::Runtime::InteropServices::Out] double% rk)
+{
+    double lx, ly, lazi, lrk;
+    m_pGnomonic->Forward( lat0, lon0, lat, lon, lx, ly, lazi, lrk );
+    x = lx;
+    y = ly;
+    azi = lazi;
+    rk = lrk;
+}
+
+//*****************************************************************************
+void Gnomonic::Reverse(double lat0, double lon0, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon,
+                [System::Runtime::InteropServices::Out] double% azi,
+                [System::Runtime::InteropServices::Out] double% rk)
+{
+    double llat, llon, lazi, lrk;
+    m_pGnomonic->Reverse( lat0, lon0, x, y, llat, llon, lazi, lrk );
+    lat = llat;
+    lon = llon;
+    azi = lazi;
+    rk = lrk;
+}
+
+//*****************************************************************************
+void Gnomonic::Forward(double lat0, double lon0, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y)
+{
+    double lx, ly;
+    m_pGnomonic->Forward( lat0, lon0, lat, lon, lx, ly );
+    x = lx;
+    y = ly;
+}
+
+//*****************************************************************************
+void Gnomonic::Reverse(double lat0, double lon0, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon;
+    m_pGnomonic->Reverse( lat0, lon0, x, y, llat, llon );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double Gnomonic::MajorRadius::get() { return m_pGnomonic->MajorRadius(); }
+
+//*****************************************************************************
+double Gnomonic::Flattening::get() { return m_pGnomonic->Flattening(); }
diff --git a/dotnet/NETGeographicLib/Gnomonic.h b/dotnet/NETGeographicLib/Gnomonic.h
new file mode 100644
index 0000000..67ef1a7
--- /dev/null
+++ b/dotnet/NETGeographicLib/Gnomonic.h
@@ -0,0 +1,219 @@
+#pragma once
+/**
+ * \file NETGeographicLib/Gnomonic.h
+ * \brief Header for NETGeographicLib::Gnomonic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    ref class Geodesic;
+  /**
+   * \brief .NET wrapper for GeographicLib::Gnomonic.
+   *
+   * This class allows .NET applications to access GeographicLib::Gnomonic.
+   *
+   * %Gnomonic projection centered at an arbitrary position \e C on the
+   * ellipsoid.  This projection is derived in Section 8 of
+   * - C. F. F. Karney,
+   *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   Algorithms for geodesics</a>,
+   *   J. Geodesy <b>87</b>, 43--55 (2013);
+   *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   10.1007/s00190-012-0578-z</a>;
+   *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   *   geod-addenda.html</a>.
+   * .
+   * The projection of \e P is defined as follows: compute the geodesic line
+   * from \e C to \e P; compute the reduced length \e m12, geodesic scale \e
+   * M12, and ρ = <i>m12</i>/\e M12; finally \e x = ρ sin \e azi1; \e
+   * y = ρ cos \e azi1, where \e azi1 is the azimuth of the geodesic at \e
+   * C.  The Gnomonic::Forward and Gnomonic::Reverse methods also return the
+   * azimuth \e azi of the geodesic at \e P and reciprocal scale \e rk in the
+   * azimuthal direction.  The scale in the radial direction if
+   * 1/<i>rk</i><sup>2</sup>.
+   *
+   * For a sphere, ρ is reduces to \e a tan(<i>s12</i>/<i>a</i>), where \e
+   * s12 is the length of the geodesic from \e C to \e P, and the gnomonic
+   * projection has the property that all geodesics appear as straight lines.
+   * For an ellipsoid, this property holds only for geodesics interesting the
+   * centers.  However geodesic segments close to the center are approximately
+   * straight.
+   *
+   * Consider a geodesic segment of length \e l.  Let \e T be the point on the
+   * geodesic (extended if necessary) closest to \e C the center of the
+   * projection and \e t be the distance \e CT.  To lowest order, the maximum
+   * deviation (as a true distance) of the corresponding gnomonic line segment
+   * (i.e., with the same end points) from the geodesic is<br>
+   * <br>
+   * (<i>K</i>(<i>T</i>) - <i>K</i>(<i>C</i>))
+   * <i>l</i><sup>2</sup> \e t / 32.<br>
+   * <br>
+   * where \e K is the Gaussian curvature.
+   *
+   * This result applies for any surface.  For an ellipsoid of revolution,
+   * consider all geodesics whose end points are within a distance \e r of \e
+   * C.  For a given \e r, the deviation is maximum when the latitude of \e C
+   * is 45°, when endpoints are a distance \e r away, and when their
+   * azimuths from the center are ± 45° or ± 135°.
+   * To lowest order in \e r and the flattening \e f, the deviation is \e f
+   * (<i>r</i>/2<i>a</i>)<sup>3</sup> \e r.
+   *
+   * The conversions all take place using a Geodesic object (by default
+   * Geodesic::WGS84).  For more information on geodesics see \ref geodesic.
+   *
+   * <b>CAUTION:</b> The definition of this projection for a sphere is
+   * standard.  However, there is no standard for how it should be extended to
+   * an ellipsoid.  The choices are:
+   * - Declare that the projection is undefined for an ellipsoid.
+   * - Project to a tangent plane from the center of the ellipsoid.  This
+   *   causes great ellipses to appear as straight lines in the projection;
+   *   i.e., it generalizes the spherical great circle to a great ellipse.
+   *   This was proposed by independently by Bowring and Williams in 1997.
+   * - Project to the conformal sphere with the constant of integration chosen
+   *   so that the values of the latitude match for the center point and
+   *   perform a central projection onto the plane tangent to the conformal
+   *   sphere at the center point.  This causes normal sections through the
+   *   center point to appear as straight lines in the projection; i.e., it
+   *   generalizes the spherical great circle to a normal section.  This was
+   *   proposed by I. G. Letoval'tsev, Generalization of the %Gnomonic
+   *   Projection for a Spheroid and the Principal Geodetic Problems Involved
+   *   in the Alignment of Surface Routes, Geodesy and Aerophotography (5),
+   *   271--274 (1963).
+   * - The projection given here.  This causes geodesics close to the center
+   *   point to appear as straight lines in the projection; i.e., it
+   *   generalizes the spherical great circle to a geodesic.
+   *
+   * C# Example:
+   * \include example-Gnomonic.cs
+   * Managed C++ Example:
+   * \include example-Gnomonic.cpp
+   * Visual Basic Example:
+   * \include example-Gnomonic.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor has been provided that assumes WGS84 parameters.
+   *
+   * The MajorRadius and Flattening functions are implemented as properties.
+   **********************************************************************/
+    public ref class Gnomonic
+    {
+        private:
+        // the pointer to the unmanaged GeographicLib::Gnomonic.
+        const GeographicLib::Gnomonic* m_pGnomonic;
+
+        // The finalizer frees the unmanaged memory when the object is destroyed.
+        !Gnomonic(void);
+    public:
+        /**
+         * Constructor for Gnomonic.
+         *
+         * @param[in] earth the Geodesic object to use for geodesic calculations.
+         **********************************************************************/
+        Gnomonic( Geodesic^ earth );
+
+        /**
+         * The default constructor assumes a WGS84 ellipsoid..
+         **********************************************************************/
+        Gnomonic();
+
+        /**
+         * The destructor calls the finalizer
+         **********************************************************************/
+        ~Gnomonic()
+        { this->!Gnomonic(); }
+
+        /**
+         * Forward projection, from geographic to gnomonic.
+         *
+         * @param[in] lat0 latitude of center point of projection (degrees).
+         * @param[in] lon0 longitude of center point of projection (degrees).
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] azi azimuth of geodesic at point (degrees).
+         * @param[out] rk reciprocal of azimuthal scale at point.
+         *
+         * \e lat0 and \e lat should be in the range [−90°, 90°] and
+         * \e lon0 and \e lon should be in the range [−540°, 540°).
+         * The scale of the projection is 1/<i>rk</i><sup>2</sup> in the "radial"
+         * direction, \e azi clockwise from true north, and is 1/\e rk in the
+         * direction perpendicular to this.  If the point lies "over the horizon",
+         * i.e., if \e rk ≤ 0, then NaNs are returned for \e x and \e y (the
+         * correct values are returned for \e azi and \e rk).  A call to Forward
+         * followed by a call to Reverse will return the original (\e lat, \e lon)
+         * (to within roundoff) provided the point in not over the horizon.
+         **********************************************************************/
+        void Forward(double lat0, double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y,
+                     [System::Runtime::InteropServices::Out] double% azi,
+                     [System::Runtime::InteropServices::Out] double% rk);
+
+        /**
+         * Reverse projection, from gnomonic to geographic.
+         *
+         * @param[in] lat0 latitude of center point of projection (degrees).
+         * @param[in] lon0 longitude of center point of projection (degrees).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] azi azimuth of geodesic at point (degrees).
+         * @param[out] rk reciprocal of azimuthal scale at point.
+         *
+         * \e lat0 should be in the range [−90°, 90°] and \e
+         * lon0 should be in the range [−540°, 540°).  \e lat
+         * will be in the range [−90°, 90°] and \e lon will
+         * be in the range [−180°, 180°).  The scale of the
+         * projection is 1/\e rk<sup>2</sup> in the "radial" direction, \e azi
+         * clockwise from true north, and is 1/\e rk in the direction perpendicular
+         * to this.  Even though all inputs should return a valid \e lat and \e
+         * lon, it's possible that the procedure fails to converge for very large
+         * \e x or \e y; in this case NaNs are returned for all the output
+         * arguments.  A call to Reverse followed by a call to Forward will return
+         * the original (\e x, \e y) (to roundoff).
+         **********************************************************************/
+        void Reverse(double lat0, double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     [System::Runtime::InteropServices::Out] double% azi,
+                     [System::Runtime::InteropServices::Out] double% rk);
+
+        /**
+         * Gnomonic::Forward without returning the azimuth and scale.
+         **********************************************************************/
+        void Forward(double lat0, double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y);
+
+        /**
+         * Gnomonic::Reverse without returning the azimuth and scale.
+         **********************************************************************/
+        void Reverse(double lat0, double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/GravityCircle.cpp b/dotnet/NETGeographicLib/GravityCircle.cpp
new file mode 100644
index 0000000..3b155cd
--- /dev/null
+++ b/dotnet/NETGeographicLib/GravityCircle.cpp
@@ -0,0 +1,178 @@
+/**
+ * \file NETGeographicLib/GravityCircle.cpp
+ * \brief Implementation for NETGeographicLib::GravityCircle class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/GravityCircle.hpp"
+#include "GravityModel.h"
+#include "GravityCircle.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+GravityCircle::!GravityCircle(void)
+{
+    if ( m_pGravityCircle != NULL )
+    {
+        delete m_pGravityCircle;
+        m_pGravityCircle = NULL;
+    }
+}
+
+//*****************************************************************************
+GravityCircle::GravityCircle( const GeographicLib::GravityCircle& gc )
+{
+    try
+    {
+        m_pGravityCircle = new GeographicLib::GravityCircle(gc);
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a GeographicLib::GravityCircle" );
+    }
+}
+
+//*****************************************************************************
+double GravityCircle::Gravity(double lon,
+    [System::Runtime::InteropServices::Out] double% gx,
+    [System::Runtime::InteropServices::Out] double% gy,
+    [System::Runtime::InteropServices::Out] double% gz)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityCircle->Gravity( lon, lgx, lgy, lgz );
+    gx = lgx;
+    gy = lgy;
+    gz = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityCircle::Disturbance(double lon,
+    [System::Runtime::InteropServices::Out] double% deltax,
+    [System::Runtime::InteropServices::Out] double% deltay,
+    [System::Runtime::InteropServices::Out] double% deltaz)
+{
+    double ldeltax, ldeltay, ldeltaz;
+    double out = m_pGravityCircle->Disturbance( lon, ldeltax, ldeltay, ldeltaz );
+    deltax = ldeltax;
+    deltay = ldeltay;
+    deltaz = ldeltaz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityCircle::GeoidHeight(double lon)
+{
+    return m_pGravityCircle->GeoidHeight( lon );
+}
+
+//*****************************************************************************
+void GravityCircle::SphericalAnomaly(double lon,
+    [System::Runtime::InteropServices::Out] double% Dg01,
+    [System::Runtime::InteropServices::Out] double% xi,
+    [System::Runtime::InteropServices::Out] double% eta)
+{
+    double lDg01, lxi, leta;
+    m_pGravityCircle->SphericalAnomaly( lon, lDg01, lxi, leta );
+    Dg01 = lDg01;
+    xi = lxi;
+    eta = leta;
+}
+
+//*****************************************************************************
+double GravityCircle::W(double lon,
+    [System::Runtime::InteropServices::Out] double% gX,
+    [System::Runtime::InteropServices::Out] double% gY,
+    [System::Runtime::InteropServices::Out] double% gZ)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityCircle->W( lon, lgx, lgy, lgz );
+    gX = lgx;
+    gY = lgy;
+    gZ = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityCircle::V(double lon,
+    [System::Runtime::InteropServices::Out] double% GX,
+    [System::Runtime::InteropServices::Out] double% GY,
+    [System::Runtime::InteropServices::Out] double% GZ)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityCircle->V( lon, lgx, lgy, lgz );
+    GX = lgx;
+    GY = lgy;
+    GZ = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityCircle::T(double lon,
+    [System::Runtime::InteropServices::Out] double% deltaX,
+    [System::Runtime::InteropServices::Out] double% deltaY,
+    [System::Runtime::InteropServices::Out] double% deltaZ)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityCircle->T( lon, lgx, lgy, lgz );
+    deltaX = lgx;
+    deltaY = lgy;
+    deltaZ = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityCircle::T(double lon)
+{
+    return m_pGravityCircle->T( lon );
+}
+
+//*****************************************************************************
+double GravityCircle::MajorRadius::get()
+{
+    if ( m_pGravityCircle->Init() )
+        return m_pGravityCircle->MajorRadius();
+    throw gcnew GeographicErr("GravityCircle::MajorRadius failed because the GravityCircle is not initialized.");
+}
+
+//*****************************************************************************
+double GravityCircle::Flattening::get()
+{
+    if ( m_pGravityCircle->Init() )
+        return m_pGravityCircle->Flattening();
+    throw gcnew GeographicErr("GravityCircle::Flattening failed because the GravityCircle is not initialized.");
+}
+
+//*****************************************************************************
+double GravityCircle::Latitude::get()
+{
+    if ( m_pGravityCircle->Init() )
+        return m_pGravityCircle->Latitude();
+    throw gcnew GeographicErr("GravityCircle::Latitude failed because the GravityCircle is not initialized.");
+}
+
+//*****************************************************************************
+double GravityCircle::Height::get()
+{
+    if ( m_pGravityCircle->Init() )
+        return m_pGravityCircle->Height();
+    throw gcnew GeographicErr("GravityCircle::Height failed because the GravityCircle is not initialized.");
+}
+
+//*****************************************************************************
+bool GravityCircle::Init::get() { return m_pGravityCircle->Init(); }
+
+//*****************************************************************************
+GravityModel::Mask GravityCircle::Capabilities()
+{ return static_cast<GravityModel::Mask>(m_pGravityCircle->Capabilities()); }
+
+//*****************************************************************************
+bool GravityCircle::Capabilities(GravityModel::Mask testcaps)
+{ return m_pGravityCircle->Capabilities( (unsigned int)testcaps ); }
diff --git a/dotnet/NETGeographicLib/GravityCircle.h b/dotnet/NETGeographicLib/GravityCircle.h
new file mode 100644
index 0000000..8a789f6
--- /dev/null
+++ b/dotnet/NETGeographicLib/GravityCircle.h
@@ -0,0 +1,256 @@
+#pragma once
+/**
+ * \file NETGeographicLib/GravityCircle.h
+ * \brief Header for NETGeographicLib::GravityCircle class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::GravityCircle.
+   *
+   * This class allows .NET applications to access GeographicLib::GravityCircle.
+   *
+   * Evaluate the earth's gravity field on a circle of constant height and
+   * latitude.  This uses a CircularEngine to pre-evaluate the inner sum of the
+   * spherical harmonic sum, allowing the values of the field at several
+   * different longitudes to be evaluated rapidly.
+   *
+   * Use GravityModel::Circle to create a GravityCircle object.  (The
+   * constructor for this class is for internal use only.)
+   *
+   * C# Example:
+   * \include example-GravityCircle.cs
+   * Managed C++ Example:
+   * \include example-GravityCircle.cpp
+   * Visual Basic Example:
+   * \include example-GravityCircle.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The following functions are implemented as properties:
+   * Init, MajorRadius, Flattening, Latitude, and Height.
+   *
+   * The Capabilities functions accept and return the "capabilities mask"
+   * as a NETGeographicLib::GravityModel::Mask rather than an unsigned.
+   **********************************************************************/
+    public ref class GravityCircle
+    {
+        private:
+        // the pointer to the unmanaged GeographicLib::GravityCircle.
+        const GeographicLib::GravityCircle* m_pGravityCircle;
+
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !GravityCircle(void);
+    public:
+        /**
+         * A constructor that is initialized from an unmanaged
+         * GeographicLib::GravityCircle.  For internal use only.  Developers
+         * should use GravityModel::Circle to create a GavityCircle object.
+         **********************************************************************/
+        GravityCircle( const GeographicLib::GravityCircle& gc );
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~GravityCircle()
+        { this->!GravityCircle(); }
+
+        /** \name Compute the gravitational field
+         **********************************************************************/
+        ///@{
+        /**
+         * Evaluate the gravity.
+         *
+         * @param[in] lon the geographic longitude (degrees).
+         * @param[out] gx the easterly component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gy the northerly component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gz the upward component of the acceleration
+         *   (m s<sup>−2</sup>); this is usually negative.
+         * @return \e W the sum of the gravitational and centrifugal potentials.
+         *
+         * The function includes the effects of the earth's rotation.
+         **********************************************************************/
+        double Gravity(double lon,
+            [System::Runtime::InteropServices::Out] double% gx,
+            [System::Runtime::InteropServices::Out] double% gy,
+            [System::Runtime::InteropServices::Out] double% gz);
+
+        /**
+         * Evaluate the gravity disturbance vector.
+         *
+         * @param[in] lon the geographic longitude (degrees).
+         * @param[out] deltax the easterly component of the disturbance vector
+         *   (m s<sup>−2</sup>).
+         * @param[out] deltay the northerly component of the disturbance vector
+         *   (m s<sup>−2</sup>).
+         * @param[out] deltaz the upward component of the disturbance vector
+         *   (m s<sup>−2</sup>).
+         * @return \e T the corresponding disturbing potential.
+         **********************************************************************/
+        double Disturbance(double lon,
+            [System::Runtime::InteropServices::Out] double% deltax,
+            [System::Runtime::InteropServices::Out] double% deltay,
+            [System::Runtime::InteropServices::Out] double% deltaz);
+
+        /**
+         * Evaluate the geoid height.
+         *
+         * @param[in] lon the geographic longitude (degrees).
+         * @return \e N the height of the geoid above the reference ellipsoid
+         *   (meters).
+         *
+         * Some approximations are made in computing the geoid height so that the
+         * results of the NGA codes are reproduced accurately.  Details are given
+         * in \ref gravitygeoid.
+         **********************************************************************/
+        double GeoidHeight(double lon);
+
+        /**
+         * Evaluate the components of the gravity anomaly vector using the
+         * spherical approximation.
+         *
+         * @param[in] lon the geographic longitude (degrees).
+         * @param[out] Dg01 the gravity anomaly (m s<sup>−2</sup>).
+         * @param[out] xi the northerly component of the deflection of the vertical
+         *  (degrees).
+         * @param[out] eta the easterly component of the deflection of the vertical
+         *  (degrees).
+         *
+         * The spherical approximation (see Heiskanen and Moritz, Sec 2-14) is used
+         * so that the results of the NGA codes are reproduced accurately.
+         * approximations used here.  Details are given in \ref gravitygeoid.
+         **********************************************************************/
+        void SphericalAnomaly(double lon,
+            [System::Runtime::InteropServices::Out] double% Dg01,
+            [System::Runtime::InteropServices::Out] double% xi,
+            [System::Runtime::InteropServices::Out] double% eta);
+
+        /**
+         * Evaluate the components of the acceleration due to gravity and the
+         * centrifugal acceleration in geocentric coordinates.
+         *
+         * @param[in] lon the geographic longitude (degrees).
+         * @param[out] gX the \e X component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gY the \e Y component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gZ the \e Z component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @return \e W = \e V + Φ the sum of the gravitational and
+         *   centrifugal potentials (m<sup>2</sup> s<sup>−2</sup>).
+         **********************************************************************/
+        double W(double lon,
+            [System::Runtime::InteropServices::Out] double% gX,
+            [System::Runtime::InteropServices::Out] double% gY,
+            [System::Runtime::InteropServices::Out] double% gZ);
+
+        /**
+         * Evaluate the components of the acceleration due to gravity in geocentric
+         * coordinates.
+         *
+         * @param[in] lon the geographic longitude (degrees).
+         * @param[out] GX the \e X component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] GY the \e Y component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] GZ the \e Z component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @return \e V = \e W - Φ the gravitational potential
+         *   (m<sup>2</sup> s<sup>−2</sup>).
+         **********************************************************************/
+        double V(double lon,
+            [System::Runtime::InteropServices::Out] double% GX,
+            [System::Runtime::InteropServices::Out] double% GY,
+            [System::Runtime::InteropServices::Out] double% GZ);
+
+        /**
+         * Evaluate the components of the gravity disturbance in geocentric
+         * coordinates.
+         *
+         * @param[in] lon the geographic longitude (degrees).
+         * @param[out] deltaX the \e X component of the gravity disturbance
+         *   (m s<sup>−2</sup>).
+         * @param[out] deltaY the \e Y component of the gravity disturbance
+         *   (m s<sup>−2</sup>).
+         * @param[out] deltaZ the \e Z component of the gravity disturbance
+         *   (m s<sup>−2</sup>).
+         * @return \e T = \e W - \e U the disturbing potential (also called the
+         *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
+         **********************************************************************/
+        double T(double lon,
+            [System::Runtime::InteropServices::Out] double% deltaX,
+            [System::Runtime::InteropServices::Out] double% deltaY,
+            [System::Runtime::InteropServices::Out] double% deltaZ);
+
+        /**
+         * Evaluate disturbing potential in geocentric coordinates.
+         *
+         * @param[in] lon the geographic longitude (degrees).
+         * @return \e T = \e W - \e U the disturbing potential (also called the
+         *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
+         **********************************************************************/
+        double T(double lon);
+
+        ///@}
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return true if the object has been initialized.
+         **********************************************************************/
+        property bool Init { bool get(); }
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value inherited from the GravityModel object used in the
+         *   constructor.
+         *   This property throws an exception if the GravityCircles has not
+         *   been initialized.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the GravityModel object used in the constructor.
+         *   This property throws an exception if the GravityCircles has not
+         *   been initialized.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return the latitude of the circle (degrees).
+         *   This property throws an exception if the GravityCircles has not
+         *   been initialized.
+         **********************************************************************/
+        property double Latitude { double get(); }
+
+        /**
+         * @return the height of the circle (meters).
+         *   This property throws an exception if the GravityCircles has not
+         *   been initialized.
+         **********************************************************************/
+        property double Height { double get(); }
+
+        /**
+         * @return \e caps the computational capabilities that this object was
+         *   constructed with.
+         **********************************************************************/
+        GravityModel::Mask Capabilities();
+
+        /**
+         * @param[in] testcaps a set of bitor'ed GeodesicLine::mask values.
+         * @return true if the GeodesicLine object has all these capabilities.
+         **********************************************************************/
+        bool Capabilities(GravityModel::Mask testcaps);
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/GravityModel.cpp b/dotnet/NETGeographicLib/GravityModel.cpp
new file mode 100644
index 0000000..7504a9d
--- /dev/null
+++ b/dotnet/NETGeographicLib/GravityModel.cpp
@@ -0,0 +1,266 @@
+/**
+ * \file NETGeographicLib/GravityModel.cpp
+ * \brief Implementation for NETGeographicLib::GravityModel class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/GravityModel.hpp"
+#include "GravityModel.h"
+#include "GeographicLib/GravityCircle.hpp"
+#include "GravityCircle.h"
+#include "NormalGravity.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+GravityModel::!GravityModel(void)
+{
+    if ( m_pGravityModel != NULL )
+    {
+        delete m_pGravityModel;
+        m_pGravityModel = NULL;
+    }
+}
+
+//*****************************************************************************
+GravityModel::GravityModel(System::String^ name, System::String^ path)
+{
+    if ( name == nullptr ) throw gcnew GeographicErr("name cannot be a null pointer.");
+    if ( path == nullptr ) throw gcnew GeographicErr("path cannot be a null pointer.");
+    try
+    {
+        m_pGravityModel = new GeographicLib::GravityModel(
+            StringConvert::ManagedToUnmanaged( name ),
+            StringConvert::ManagedToUnmanaged( path ));
+    }
+    catch ( std::bad_alloc err )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a GeographicLib::GravityModel" );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+double GravityModel::Gravity(double lat, double lon, double h,
+                    [System::Runtime::InteropServices::Out] double% gx,
+                    [System::Runtime::InteropServices::Out] double% gy,
+                    [System::Runtime::InteropServices::Out] double% gz)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityModel->Gravity( lat, lon, h, lgx, lgy, lgz );
+    gx = lgx;
+    gy = lgy;
+    gz = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityModel::Disturbance(double lat, double lon, double h,
+        [System::Runtime::InteropServices::Out] double% deltax,
+        [System::Runtime::InteropServices::Out] double% deltay,
+        [System::Runtime::InteropServices::Out] double% deltaz)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityModel->Disturbance( lat, lon, h, lgx, lgy, lgz );
+    deltax = lgx;
+    deltay = lgy;
+    deltaz = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityModel::GeoidHeight(double lat, double lon)
+{
+    return m_pGravityModel->GeoidHeight( lat, lon );
+}
+
+//*****************************************************************************
+void GravityModel::SphericalAnomaly(double lat, double lon, double h,
+        [System::Runtime::InteropServices::Out] double% Dg01,
+        [System::Runtime::InteropServices::Out] double% xi,
+        [System::Runtime::InteropServices::Out] double% eta)
+{
+    double lgx, lgy, lgz;
+    m_pGravityModel->SphericalAnomaly( lat, lon, h, lgx, lgy, lgz );
+    Dg01 = lgx;
+    xi = lgy;
+    eta = lgz;
+}
+
+//*****************************************************************************
+double GravityModel::W(double X, double Y, double Z,
+                [System::Runtime::InteropServices::Out] double% gX,
+                [System::Runtime::InteropServices::Out] double% gY,
+                [System::Runtime::InteropServices::Out] double% gZ)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityModel->W( X, Y, Z, lgx, lgy, lgz );
+    gX = lgx;
+    gY = lgy;
+    gZ = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityModel::V(double X, double Y, double Z,
+                [System::Runtime::InteropServices::Out] double% GX,
+                [System::Runtime::InteropServices::Out] double% GY,
+                [System::Runtime::InteropServices::Out] double% GZ)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityModel->V( X, Y, Z, lgx, lgy, lgz );
+    GX = lgx;
+    GY = lgy;
+    GZ = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityModel::T(double X, double Y, double Z,
+                [System::Runtime::InteropServices::Out] double% deltaX,
+                [System::Runtime::InteropServices::Out] double% deltaY,
+                [System::Runtime::InteropServices::Out] double% deltaZ)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityModel->T( X, Y, Z, lgx, lgy, lgz );
+    deltaX = lgx;
+    deltaY = lgy;
+    deltaZ = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityModel::T(double X, double Y, double Z)
+{
+    return m_pGravityModel->T( X, Y, Z );
+}
+
+//*****************************************************************************
+double GravityModel::U(double X, double Y, double Z,
+                [System::Runtime::InteropServices::Out] double% gammaX,
+                [System::Runtime::InteropServices::Out] double% gammaY,
+                [System::Runtime::InteropServices::Out] double% gammaZ)
+{
+    double lgx, lgy, lgz;
+    double out = m_pGravityModel->U( X, Y, Z, lgx, lgy, lgz );
+    gammaX = lgx;
+    gammaY = lgy;
+    gammaZ = lgz;
+    return out;
+}
+
+//*****************************************************************************
+double GravityModel::Phi(double X, double Y,
+    [System::Runtime::InteropServices::Out] double% fX,
+    [System::Runtime::InteropServices::Out] double% fY)
+{
+    double lgx, lgy;
+    double out = m_pGravityModel->Phi( X, Y, lgx, lgy );
+    fX = lgx;
+    fY = lgy;
+    return out;
+}
+
+//*****************************************************************************
+GravityCircle^ GravityModel::Circle(double lat, double h, Mask caps )
+{
+    try
+    {
+        return gcnew GravityCircle( m_pGravityModel->Circle( lat, h, (unsigned)caps ) );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+System::String^ GravityModel::Description::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pGravityModel->Description() );
+}
+
+//*****************************************************************************
+System::String^ GravityModel::DateTime::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pGravityModel->DateTime() );
+}
+
+//*****************************************************************************
+System::String^ GravityModel::GravityFile::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pGravityModel->GravityFile() );
+}
+
+//*****************************************************************************
+System::String^ GravityModel::GravityModelName::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pGravityModel->GravityModelName() );
+}
+
+//*****************************************************************************
+System::String^ GravityModel::GravityModelDirectory::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pGravityModel->GravityModelDirectory() );
+}
+
+//*****************************************************************************
+System::String^ GravityModel::DefaultGravityPath()
+{
+    try
+    {
+        return StringConvert::UnmanagedToManaged( GeographicLib::GravityModel::DefaultGravityPath() );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+System::String^ GravityModel::DefaultGravityName()
+{
+    try
+    {
+        return StringConvert::UnmanagedToManaged( GeographicLib::GravityModel::DefaultGravityName() );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+NormalGravity^ GravityModel::ReferenceEllipsoid()
+{
+    return gcnew NormalGravity( m_pGravityModel->ReferenceEllipsoid() );
+}
+
+//*****************************************************************************
+double GravityModel::MajorRadius::get()
+{ return m_pGravityModel->MajorRadius(); }
+
+//*****************************************************************************
+double GravityModel::MassConstant::get()
+{ return m_pGravityModel->MassConstant(); }
+
+//*****************************************************************************
+double GravityModel::ReferenceMassConstant::get()
+{ return m_pGravityModel->ReferenceMassConstant(); }
+
+//*****************************************************************************
+double GravityModel::AngularVelocity::get()
+{ return m_pGravityModel->AngularVelocity(); }
+
+//*****************************************************************************
+double GravityModel::Flattening::get()
+{ return m_pGravityModel->Flattening(); }
diff --git a/dotnet/NETGeographicLib/GravityModel.h b/dotnet/NETGeographicLib/GravityModel.h
new file mode 100644
index 0000000..b56d5f0
--- /dev/null
+++ b/dotnet/NETGeographicLib/GravityModel.h
@@ -0,0 +1,513 @@
+#pragma once
+/**
+ * \file NETGeographicLib/GravityModel.h
+ * \brief Header for NETGeographicLib::GravityModel class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    ref class GravityCircle;
+    ref class NormalGravity;
+  /**
+   * \brief .NET wrapper for GeographicLib::GravityModel.
+   *
+   * This class allows .NET applications to access GeographicLib::GravityModel.
+   *
+   * Evaluate the earth's gravity field according to a model.  The supported
+   * models treat only the gravitational field exterior to the mass of the
+   * earth.  When computing the field at points near (but above) the surface of
+   * the earth a small correction can be applied to account for the mass of the
+   * atomsphere above the point in question; see \ref gravityatmos.
+   * Determining the geoid height entails correcting for the mass of the earth
+   * above the geoid.  The egm96 and egm2008 include separate correction terms
+   * to account for this mass.
+   *
+   * Definitions and terminology (from Heiskanen and Moritz, Sec 2-13):
+   * - \e V = gravitational potential;
+   * - Φ = rotational potential;
+   * - \e W = \e V + Φ = \e T + \e U = total potential;
+   * - <i>V</i><sub>0</sub> = normal gravitation potential;
+   * - \e U = <i>V</i><sub>0</sub> + Φ = total normal potential;
+   * - \e T = \e W − \e U = \e V − <i>V</i><sub>0</sub> = anomalous
+   *   or disturbing potential;
+   * - <b>g</b> = ∇\e W = <b>γ</b> + <b>δ</b>;
+   * - <b>f</b> = ∇Φ;
+   * - <b>Γ</b> = ∇<i>V</i><sub>0</sub>;
+   * - <b>γ</b> = ∇\e U;
+   * - <b>δ</b> = ∇\e T = gravity disturbance vector
+   *   = <b>g</b><sub><i>P</i></sub> − <b>γ</b><sub><i>P</i></sub>;
+   * - δ\e g = gravity disturbance = \e g<sub><i>P</i></sub> −
+   *   γ<sub><i>P</i></sub>;
+   * - Δ<b>g</b> = gravity anomaly vector = <b>g</b><sub><i>P</i></sub>
+   *   − <b>γ</b><sub><i>Q</i></sub>; here the line \e PQ is
+   *   perpendicular to ellipsoid and the potential at \e P equals the normal
+   *   potential at \e Q;
+   * - Δ\e g = gravity anomaly = \e g<sub><i>P</i></sub> −
+   *   γ<sub><i>Q</i></sub>;
+   * - (ξ, η) deflection of the vertical, the difference in
+   *   directions of <b>g</b><sub><i>P</i></sub> and
+   *   <b>γ</b><sub><i>Q</i></sub>, ξ = NS, η = EW.
+   * - \e X, \e Y, \e Z, geocentric coordinates;
+   * - \e x, \e y, \e z, local cartesian coordinates used to denote the east,
+   *   north and up directions.
+   *
+   * See \ref gravity for details of how to install the gravity model and the
+   * data format.
+   *
+   * References:
+   * - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San
+   *   Francisco, 1967).
+   *
+   * C# Example:
+   * \include example-GravityModel.cs
+   * Managed C++ Example:
+   * \include example-GravityModel.cpp
+   * Visual Basic Example:
+   * \include example-GravityModel.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The following functions are implemented as properties:
+   * Description, DateTime, GravityFile, GravityModelName,
+   * GravityModelDirectory, MajorRadius, MassConstant,
+   * ReferenceMassConstant, AngularVelocity, and Flattening.
+   *
+   * The Circle function accepts the "capabilities mask" as a
+   * NETGeographicLib::GravityModel::Mask rather than an unsigned.
+   **********************************************************************/
+    public ref class GravityModel
+    {
+        private:
+        // pointer to the unmanaged GeographicLib::GravityModel.
+        const GeographicLib::GravityModel* m_pGravityModel;
+
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !GravityModel(void);
+
+        enum class CapType {
+          CAP_NONE   = 0U,
+          CAP_G      = 1U<<0,       // implies potentials W and V
+          CAP_T      = 1U<<1,
+          CAP_DELTA  = 1U<<2 | CapType::CAP_T, // delta implies T?
+          CAP_C      = 1U<<3,
+          CAP_GAMMA0 = 1U<<4,
+          CAP_GAMMA  = 1U<<5,
+          CAP_ALL    = 0x3FU,
+        };
+
+    public:
+
+        /**
+         * Bit masks for the capabilities to be given to the GravityCircle object
+         * produced by Circle.
+         **********************************************************************/
+        enum class Mask {
+          /**
+           * No capabilities.
+           * @hideinitializer
+           **********************************************************************/
+          NONE = 0U,
+          /**
+           * Allow calls to GravityCircle::Gravity, GravityCircle::W, and
+           * GravityCircle::V.
+           * @hideinitializer
+           **********************************************************************/
+          GRAVITY = CapType::CAP_G,
+          /**
+           * Allow calls to GravityCircle::Disturbance and GravityCircle::T.
+           * @hideinitializer
+           **********************************************************************/
+          DISTURBANCE = CapType::CAP_DELTA,
+          /**
+           * Allow calls to GravityCircle::T(double lon) (i.e., computing the
+           * disturbing potential and not the gravity disturbance vector).
+           * @hideinitializer
+           **********************************************************************/
+          DISTURBING_POTENTIAL = CapType::CAP_T,
+          /**
+           * Allow calls to GravityCircle::SphericalAnomaly.
+           * @hideinitializer
+           **********************************************************************/
+          SPHERICAL_ANOMALY = CapType::CAP_DELTA | CapType::CAP_GAMMA,
+          /**
+           * Allow calls to GravityCircle::GeoidHeight.
+           * @hideinitializer
+           **********************************************************************/
+          GEOID_HEIGHT = CapType::CAP_T | CapType::CAP_C | CapType::CAP_GAMMA0,
+          /**
+           * All capabilities.
+           * @hideinitializer
+           **********************************************************************/
+          ALL = CapType::CAP_ALL,
+        };
+        /** \name Setting up the gravity model
+         **********************************************************************/
+        ///@{
+        /**
+         * Construct a gravity model.
+         *
+         * @param[in] name the name of the model.
+         * @param[in] path (optional) directory for data file.
+         * @exception GeographicErr if the data file cannot be found, is
+         *   unreadable, or is corrupt.
+         * @exception std::bad_alloc if the memory necessary for storing the model
+         *   can't be allocated.
+         *
+         * A filename is formed by appending ".egm" (World Gravity Model) to the
+         * name.  If \e path is specified (and is non-empty), then the file is
+         * loaded from directory, \e path.  Otherwise the path is given by
+         * DefaultGravityPath().
+         *
+         * This file contains the metadata which specifies the properties of the
+         * model.  The coefficients for the spherical harmonic sums are obtained
+         * from a file obtained by appending ".cof" to metadata file (so the
+         * filename ends in ".egm.cof").
+         **********************************************************************/
+        GravityModel(System::String^ name, System::String^ path);
+        ///@}
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~GravityModel()
+        { this->!GravityModel(); }
+
+        /** \name Compute gravity in geodetic coordinates
+         **********************************************************************/
+        ///@{
+        /**
+         * Evaluate the gravity at an arbitrary point above (or below) the
+         * ellipsoid.
+         *
+         * @param[in] lat the geographic latitude (degrees).
+         * @param[in] lon the geographic longitude (degrees).
+         * @param[in] h the height above the ellipsoid (meters).
+         * @param[out] gx the easterly component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gy the northerly component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gz the upward component of the acceleration
+         *   (m s<sup>−2</sup>); this is usually negative.
+         * @return \e W the sum of the gravitational and centrifugal potentials.
+         *
+         * The function includes the effects of the earth's rotation.
+         **********************************************************************/
+        double Gravity(double lat, double lon, double h,
+                [System::Runtime::InteropServices::Out] double% gx,
+                [System::Runtime::InteropServices::Out] double% gy,
+                [System::Runtime::InteropServices::Out] double% gz);
+
+        /**
+         * Evaluate the gravity disturbance vector at an arbitrary point above (or
+         * below) the ellipsoid.
+         *
+         * @param[in] lat the geographic latitude (degrees).
+         * @param[in] lon the geographic longitude (degrees).
+         * @param[in] h the height above the ellipsoid (meters).
+         * @param[out] deltax the easterly component of the disturbance vector
+         *   (m s<sup>−2</sup>).
+         * @param[out] deltay the northerly component of the disturbance vector
+         *   (m s<sup>−2</sup>).
+         * @param[out] deltaz the upward component of the disturbance vector
+         *   (m s<sup>−2</sup>).
+         * @return \e T the corresponding disturbing potential.
+         **********************************************************************/
+        double Disturbance(double lat, double lon, double h,
+            [System::Runtime::InteropServices::Out] double% deltax,
+            [System::Runtime::InteropServices::Out] double% deltay,
+            [System::Runtime::InteropServices::Out] double% deltaz);
+
+        /**
+         * Evaluate the geoid height.
+         *
+         * @param[in] lat the geographic latitude (degrees).
+         * @param[in] lon the geographic longitude (degrees).
+         * @return \e N the height of the geoid above the ReferenceEllipsoid()
+         *   (meters).
+         *
+         * This calls NormalGravity::U for ReferenceEllipsoid().  Some
+         * approximations are made in computing the geoid height so that the
+         * results of the NGA codes are reproduced accurately.  Details are given
+         * in \ref gravitygeoid.
+         **********************************************************************/
+        double GeoidHeight(double lat, double lon);
+
+        /**
+         * Evaluate the components of the gravity anomaly vector using the
+         * spherical approximation.
+         *
+         * @param[in] lat the geographic latitude (degrees).
+         * @param[in] lon the geographic longitude (degrees).
+         * @param[in] h the height above the ellipsoid (meters).
+         * @param[out] Dg01 the gravity anomaly (m s<sup>−2</sup>).
+         * @param[out] xi the northerly component of the deflection of the vertical
+         *  (degrees).
+         * @param[out] eta the easterly component of the deflection of the vertical
+         *  (degrees).
+         *
+         * The spherical approximation (see Heiskanen and Moritz, Sec 2-14) is used
+         * so that the results of the NGA codes are reproduced accurately.
+         * approximations used here.  Details are given in \ref gravitygeoid.
+         **********************************************************************/
+        void SphericalAnomaly(double lat, double lon, double h,
+            [System::Runtime::InteropServices::Out] double% Dg01,
+            [System::Runtime::InteropServices::Out] double% xi,
+            [System::Runtime::InteropServices::Out] double% eta);
+        ///@}
+
+        /** \name Compute gravity in geocentric coordinates
+         **********************************************************************/
+        ///@{
+        /**
+         * Evaluate the components of the acceleration due to gravity and the
+         * centrifugal acceleration in geocentric coordinates.
+         *
+         * @param[in] X geocentric coordinate of point (meters).
+         * @param[in] Y geocentric coordinate of point (meters).
+         * @param[in] Z geocentric coordinate of point (meters).
+         * @param[out] gX the \e X component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gY the \e Y component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gZ the \e Z component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @return \e W = \e V + Φ the sum of the gravitational and
+         *   centrifugal potentials (m<sup>2</sup> s<sup>−2</sup>).
+         *
+         * This calls NormalGravity::U for  ReferenceEllipsoid().
+         **********************************************************************/
+        double W(double X, double Y, double Z,
+                     [System::Runtime::InteropServices::Out] double% gX,
+                     [System::Runtime::InteropServices::Out] double% gY,
+                     [System::Runtime::InteropServices::Out] double% gZ);
+
+        /**
+         * Evaluate the components of the acceleration due to gravity in geocentric
+         * coordinates.
+         *
+         * @param[in] X geocentric coordinate of point (meters).
+         * @param[in] Y geocentric coordinate of point (meters).
+         * @param[in] Z geocentric coordinate of point (meters).
+         * @param[out] GX the \e X component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] GY the \e Y component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] GZ the \e Z component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @return \e V = \e W - Φ the gravitational potential
+         *   (m<sup>2</sup> s<sup>−2</sup>).
+         **********************************************************************/
+        double V(double X, double Y, double Z,
+                     [System::Runtime::InteropServices::Out] double% GX,
+                     [System::Runtime::InteropServices::Out] double% GY,
+                     [System::Runtime::InteropServices::Out] double% GZ);
+
+        /**
+         * Evaluate the components of the gravity disturbance in geocentric
+         * coordinates.
+         *
+         * @param[in] X geocentric coordinate of point (meters).
+         * @param[in] Y geocentric coordinate of point (meters).
+         * @param[in] Z geocentric coordinate of point (meters).
+         * @param[out] deltaX the \e X component of the gravity disturbance
+         *   (m s<sup>−2</sup>).
+         * @param[out] deltaY the \e Y component of the gravity disturbance
+         *   (m s<sup>−2</sup>).
+         * @param[out] deltaZ the \e Z component of the gravity disturbance
+         *   (m s<sup>−2</sup>).
+         * @return \e T = \e W - \e U the disturbing potential (also called the
+         *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
+         **********************************************************************/
+        double T(double X, double Y, double Z,
+                     [System::Runtime::InteropServices::Out] double% deltaX,
+                     [System::Runtime::InteropServices::Out] double% deltaY,
+                     [System::Runtime::InteropServices::Out] double% deltaZ);
+
+        /**
+         * Evaluate disturbing potential in geocentric coordinates.
+         *
+         * @param[in] X geocentric coordinate of point (meters).
+         * @param[in] Y geocentric coordinate of point (meters).
+         * @param[in] Z geocentric coordinate of point (meters).
+         * @return \e T = \e W - \e U the disturbing potential (also called the
+         *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
+         **********************************************************************/
+        double T(double X, double Y, double Z);
+
+        /**
+         * Evaluate the components of the acceleration due to normal gravity and
+         * the centrifugal acceleration in geocentric coordinates.
+         *
+         * @param[in] X geocentric coordinate of point (meters).
+         * @param[in] Y geocentric coordinate of point (meters).
+         * @param[in] Z geocentric coordinate of point (meters).
+         * @param[out] gammaX the \e X component of the normal acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gammaY the \e Y component of the normal acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gammaZ the \e Z component of the normal acceleration
+         *   (m s<sup>−2</sup>).
+         * @return \e U = <i>V</i><sub>0</sub> + Φ the sum of the
+         *   normal gravitational and centrifugal potentials
+         *   (m<sup>2</sup> s<sup>−2</sup>).
+         *
+         * This calls NormalGravity::U for  ReferenceEllipsoid().
+         **********************************************************************/
+        double U(double X, double Y, double Z,
+                     [System::Runtime::InteropServices::Out] double% gammaX,
+                     [System::Runtime::InteropServices::Out] double% gammaY,
+                     [System::Runtime::InteropServices::Out] double% gammaZ);
+
+        /**
+         * Evaluate the centrifugal acceleration in geocentric coordinates.
+         *
+         * @param[in] X geocentric coordinate of point (meters).
+         * @param[in] Y geocentric coordinate of point (meters).
+         * @param[out] fX the \e X component of the centrifugal acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] fY the \e Y component of the centrifugal acceleration
+         *   (m s<sup>−2</sup>).
+         * @return Φ the centrifugal potential (m<sup>2</sup>
+         * s<sup>−2</sup>).
+         *
+         * This calls NormalGravity::Phi for  ReferenceEllipsoid().
+         **********************************************************************/
+        double Phi(double X, double Y,
+            [System::Runtime::InteropServices::Out] double% fX,
+            [System::Runtime::InteropServices::Out] double% fY);
+        ///@}
+
+        /** \name Compute gravity on a circle of constant latitude
+         **********************************************************************/
+        ///@{
+        /**
+         * Create a GravityCircle object to allow the gravity field at many points
+         * with constant \e lat and \e h and varying \e lon to be computed
+         * efficiently.
+         *
+         * @param[in] lat latitude of the point (degrees).
+         * @param[in] h the height of the point above the ellipsoid (meters).
+         * @param[in] caps bitor'ed combination of GravityModel::mask values
+         *   specifying the capabilities of the resulting GravityCircle object.
+         * @exception std::bad_alloc if the memory necessary for creating a
+         *   GravityCircle can't be allocated.
+         * @return a GravityCircle object whose member functions computes the
+         *   gravitational field at a particular values of \e lon.
+         *
+         * The GravityModel::mask values are
+         * - \e caps |= GravityModel::GRAVITY
+         * - \e caps |= GravityModel::DISTURBANCE
+         * - \e caps |= GravityModel::DISTURBING_POTENTIAL
+         * - \e caps |= GravityModel::SPHERICAL_ANOMALY
+         * - \e caps |= GravityModel::GEOID_HEIGHT
+         * .
+         * The default value of \e caps is GravityModel::ALL which turns on all the
+         * capabilities.  If an unsupported function is invoked, it will return
+         * NaNs.  Note that GravityModel::GEOID_HEIGHT will only be honored if \e h
+         * = 0.
+         *
+         * If the field at several points on a circle of latitude need to be
+         * calculated then creating a GravityCircle object and using its member
+         * functions will be substantially faster, especially for high-degree
+         * models.  See \ref gravityparallel for an example of using GravityCircle
+         * (together with OpenMP) to speed up the computation of geoid heights.
+         **********************************************************************/
+        GravityCircle^ Circle(double lat, double h, Mask caps );
+        ///@}
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+
+        /**
+         * @return the NormalGravity object for the reference ellipsoid.
+         **********************************************************************/
+        NormalGravity^ ReferenceEllipsoid();
+
+        /**
+         * @return the description of the gravity model, if available, in the data
+         *   file; if absent, return "NONE".
+         **********************************************************************/
+        property System::String^ Description { System::String^ get(); }
+
+        /**
+         * @return date of the model; if absent, return "UNKNOWN".
+         **********************************************************************/
+        property System::String^ DateTime { System::String^ get(); }
+
+        /**
+         * @return full file name used to load the gravity model.
+         **********************************************************************/
+        property System::String^ GravityFile { System::String^ get(); }
+
+        /**
+         * @return "name" used to load the gravity model (from the first argument
+         *   of the constructor, but this may be overridden by the model file).
+         **********************************************************************/
+        property System::String^ GravityModelName { System::String^ get(); }
+
+        /**
+         * @return directory used to load the gravity model.
+         **********************************************************************/
+        property System::String^ GravityModelDirectory
+        { System::String^ get(); }
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e GM the mass constant of the model (m<sup>3</sup>
+         *   s<sup>−2</sup>); this is the product of \e G the gravitational
+         *   constant and \e M the mass of the earth (usually including the mass of
+         *   the earth's atmosphere).
+         **********************************************************************/
+        property double MassConstant { double get(); }
+
+        /**
+         * @return \e GM the mass constant of the ReferenceEllipsoid()
+         *   (m<sup>3</sup> s<sup>−2</sup>).
+         **********************************************************************/
+        property double ReferenceMassConstant { double get(); }
+
+        /**
+         * @return ω the angular velocity of the model and the
+         *   ReferenceEllipsoid() (rad s<sup>−1</sup>).
+         **********************************************************************/
+        property double AngularVelocity { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.
+         **********************************************************************/
+        property double Flattening { double get(); }
+        ///@}
+
+        /**
+         * @return the default path for gravity model data files.
+         *
+         * This is the value of the environment variable GRAVITY_PATH, if set;
+         * otherwise, it is $GEOGRAPHICLIB_DATA/gravity if the environment variable
+         * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default
+         * (/usr/local/share/GeographicLib/gravity on non-Windows systems and
+         * C:/Documents and Settings/All Users/Application
+         * Data/GeographicLib/gravity on Windows systems).
+         **********************************************************************/
+        static System::String^ DefaultGravityPath();
+
+        /**
+         * @return the default name for the gravity model.
+         *
+         * This is the value of the environment variable GRAVITY_NAME, if set,
+         * otherwise, it is "egm96".  The GravityModel class does not use
+         * this function; it is just provided as a convenience for a calling
+         * program when constructing a GravityModel object.
+         **********************************************************************/
+        static System::String^ DefaultGravityName();
+    };
+} //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/LambertConformalConic.cpp b/dotnet/NETGeographicLib/LambertConformalConic.cpp
new file mode 100644
index 0000000..42fd4cb
--- /dev/null
+++ b/dotnet/NETGeographicLib/LambertConformalConic.cpp
@@ -0,0 +1,183 @@
+/**
+ * \file NETGeographicLib/LambertConformalConic.cpp
+ * \brief Implementation for NETGeographicLib::LambertConformalConic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/LambertConformalConic.hpp"
+#include "LambertConformalConic.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocte memory for a GeographicLib::LambertConformalConic";
+
+//*****************************************************************************
+LambertConformalConic::!LambertConformalConic(void)
+{
+    if ( m_pLambertConformalConic != NULL )
+    {
+        delete m_pLambertConformalConic;
+        m_pLambertConformalConic = NULL;
+    }
+}
+
+//*****************************************************************************
+LambertConformalConic::LambertConformalConic(double a, double f, double stdlat,
+                                             double k0)
+{
+    try
+    {
+        m_pLambertConformalConic =
+            new GeographicLib::LambertConformalConic( a, f, stdlat, k0 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+LambertConformalConic::LambertConformalConic(double a, double f,
+    double stdlat1, double stdlat2, double k1)
+{
+    try
+    {
+        m_pLambertConformalConic =
+            new GeographicLib::LambertConformalConic( a, f, stdlat1, stdlat2, k1 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+LambertConformalConic::LambertConformalConic(double a, double f,
+                        double sinlat1, double coslat1,
+                        double sinlat2, double coslat2,
+                        double k1)
+{
+    try
+    {
+        m_pLambertConformalConic =
+            new GeographicLib::LambertConformalConic( a, f, sinlat1, coslat1,
+                        sinlat2, coslat2, k1 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+LambertConformalConic::LambertConformalConic()
+{
+    try
+    {
+        m_pLambertConformalConic = new GeographicLib::LambertConformalConic(
+            GeographicLib::LambertConformalConic::Mercator );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void LambertConformalConic::SetScale(double lat, double k)
+{
+    try
+    {
+        m_pLambertConformalConic->SetScale( lat, k );
+    }
+    catch ( std::exception err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void LambertConformalConic::Forward(double lon0, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y,
+                [System::Runtime::InteropServices::Out] double% gamma,
+                [System::Runtime::InteropServices::Out] double% k)
+{
+    double lx, ly, lgamma, lk;
+    m_pLambertConformalConic->Forward( lon0, lat, lon, lx, ly, lgamma, lk );
+    x = lx;
+    y = ly;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void LambertConformalConic::Reverse(double lon0, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon,
+                [System::Runtime::InteropServices::Out] double% gamma,
+                [System::Runtime::InteropServices::Out] double% k)
+{
+    double llat, llon, lgamma, lk;
+    m_pLambertConformalConic->Reverse( lon0, x, y, llat, llon, lgamma, lk );
+    lat = llat;
+    lon = llon;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void LambertConformalConic::Forward(double lon0, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y)
+{
+    double lx, ly;
+    m_pLambertConformalConic->Forward( lon0, lat, lon, lx, ly );
+    x = lx;
+    y = ly;
+}
+
+//*****************************************************************************
+void LambertConformalConic::Reverse(double lon0, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon;
+    m_pLambertConformalConic->Reverse( lon0, x, y, llat, llon );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double LambertConformalConic::MajorRadius::get()
+{ return m_pLambertConformalConic->MajorRadius(); }
+
+//*****************************************************************************
+double LambertConformalConic::Flattening::get()
+{ return m_pLambertConformalConic->Flattening(); }
+
+//*****************************************************************************
+double LambertConformalConic::OriginLatitude::get()
+{ return m_pLambertConformalConic->OriginLatitude(); }
+
+//*****************************************************************************
+double LambertConformalConic::CentralScale::get()
+{ return m_pLambertConformalConic->CentralScale(); }
diff --git a/dotnet/NETGeographicLib/LambertConformalConic.h b/dotnet/NETGeographicLib/LambertConformalConic.h
new file mode 100644
index 0000000..63fa877
--- /dev/null
+++ b/dotnet/NETGeographicLib/LambertConformalConic.h
@@ -0,0 +1,263 @@
+#pragma once
+/**
+ * \file NETGeographicLib/LambertConformalConic.h
+ * \brief Header for NETGeographicLib::LambertConformalConic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::LambertConformalConic.
+   *
+   * This class allows .NET applications to access GeographicLib::LambertConformalConic.
+   *
+   * Implementation taken from the report,
+   * - J. P. Snyder,
+   *   <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"> Map Projections: A
+   *   Working Manual</a>, USGS Professional Paper 1395 (1987),
+   *   pp. 107--109.
+   *
+   * This is a implementation of the equations in Snyder except that divided
+   * differences have been used to transform the expressions into ones which
+   * may be evaluated accurately and that Newton's method is used to invert the
+   * projection.  In this implementation, the projection correctly becomes the
+   * Mercator projection or the polar stereographic projection when the
+   * standard latitude is the equator or a pole.  The accuracy of the
+   * projections is about 10 nm (10 nanometers).
+   *
+   * The ellipsoid parameters, the standard parallels, and the scale on the
+   * standard parallels are set in the constructor.  Internally, the case with
+   * two standard parallels is converted into a single standard parallel, the
+   * latitude of tangency (also the latitude of minimum scale), with a scale
+   * specified on this parallel.  This latitude is also used as the latitude of
+   * origin which is returned by LambertConformalConic::OriginLatitude.  The
+   * scale on the latitude of origin is given by
+   * LambertConformalConic::CentralScale.  The case with two distinct standard
+   * parallels where one is a pole is singular and is disallowed.  The central
+   * meridian (which is a trivial shift of the longitude) is specified as the
+   * \e lon0 argument of the LambertConformalConic::Forward and
+   * LambertConformalConic::Reverse functions.  There is no provision in this
+   * class for specifying a false easting or false northing or a different
+   * latitude of origin.  However these are can be simply included by the
+   * calling function.  For example the Pennsylvania South state coordinate
+   * system (<a href="http://www.spatialreference.org/ref/epsg/3364/">
+   * EPSG:3364</a>) is obtained by:
+   * C# Example:
+   * \include example-LambertConformalConic.cs
+   * Managed C++ Example:
+   * \include example-LambertConformalConic.cpp
+   * Visual Basic Example:
+   * \include example-LambertConformalConic.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor has been provided that assumes a Mercator
+   * projection.
+   *
+   * The MajorRadius, Flattening, OriginLatitude, and CentralScale
+   * functions are implemented as properties.
+   **********************************************************************/
+    public ref class LambertConformalConic
+    {
+        private:
+        // Pointer to the unmanaged GeographicLib::LambertConformalConic.
+        GeographicLib::LambertConformalConic* m_pLambertConformalConic;
+
+        // the finalizer frres the unmanaged memory when the object is destroyed.
+        !LambertConformalConic(void);
+    public:
+
+        /**
+         * Constructor with a single standard parallel.
+         *
+         * @param[in] a equatorial radius of ellipsoid (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @param[in] stdlat standard parallel (degrees), the circle of tangency.
+         * @param[in] k0 scale on the standard parallel.
+         * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+         *   not positive.
+         * @exception GeographicErr if \e stdlat is not in [−90°,
+         *   90°].
+         **********************************************************************/
+        LambertConformalConic(double a, double f, double stdlat, double k0);
+
+        /**
+         * Constructor with two standard parallels.
+         *
+         * @param[in] a equatorial radius of ellipsoid (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @param[in] stdlat1 first standard parallel (degrees).
+         * @param[in] stdlat2 second standard parallel (degrees).
+         * @param[in] k1 scale on the standard parallels.
+         * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+         *   not positive.
+         * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
+         *   [−90°, 90°], or if either \e stdlat1 or \e
+         *   stdlat2 is a pole and \e stdlat1 is not equal \e stdlat2.
+         **********************************************************************/
+        LambertConformalConic(double a, double f, double stdlat1, double stdlat2, double k1);
+
+        /**
+         * Constructor with two standard parallels specified by sines and cosines.
+         *
+         * @param[in] a equatorial radius of ellipsoid (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @param[in] sinlat1 sine of first standard parallel.
+         * @param[in] coslat1 cosine of first standard parallel.
+         * @param[in] sinlat2 sine of second standard parallel.
+         * @param[in] coslat2 cosine of second standard parallel.
+         * @param[in] k1 scale on the standard parallels.
+         * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+         *   not positive.
+         * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
+         *   [−90°, 90°], or if either \e stdlat1 or \e
+         *   stdlat2 is a pole and \e stdlat1 is not equal \e stdlat2.
+         *
+         * This allows parallels close to the poles to be specified accurately.
+         * This routine computes the latitude of origin and the scale at this
+         * latitude.  In the case where \e lat1 and \e lat2 are different, the
+         * errors in this routines are as follows: if \e dlat = abs(\e lat2 −
+         * \e lat1) ≤ 160° and max(abs(\e lat1), abs(\e lat2)) ≤ 90
+         * − min(0.0002, 2.2 × 10<sup>−6</sup>(180 − \e
+         * dlat), 6 &times 10<sup>−8</sup> <i>dlat</i><sup>2</sup>) (in
+         * degrees), then the error in the latitude of origin is less than 4.5
+         * × 10<sup>−14</sup>d and the relative error in the scale is
+         * less than 7 × 10<sup>−15</sup>.
+         **********************************************************************/
+        LambertConformalConic(double a, double f,
+                              double sinlat1, double coslat1,
+                              double sinlat2, double coslat2,
+                              double k1);
+
+        /**
+         * The default constructor assumes a Mercator projection.
+         **********************************************************************/
+        LambertConformalConic();
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~LambertConformalConic()
+        { this->!LambertConformalConic(); }
+
+        /**
+         * Set the scale for the projection.
+         *
+         * @param[in] lat (degrees).
+         * @param[in] k scale at latitude \e lat (default 1).
+         * @exception GeographicErr \e k is not positive.
+         * @exception GeographicErr if \e lat is not in [−90°,
+         *   90°].
+         **********************************************************************/
+        void SetScale(double lat, double k);
+
+        /**
+         * Forward projection, from geographic to Lambert conformal conic.
+         *
+         * @param[in] lon0 central meridian longitude (degrees).
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * The latitude origin is given by LambertConformalConic::LatitudeOrigin().
+         * No false easting or northing is added and \e lat should be in the range
+         * [−90°, 90°]; \e lon and \e lon0 should be in the
+         * range [−540°, 540°).  The error in the projection
+         * is less than about 10 nm (10 nanometers), true distance, and the errors
+         * in the meridian convergence and scale are consistent with this.  The
+         * values of \e x and \e y returned for points which project to infinity
+         * (i.e., one or both of the poles) will be large but finite.
+         **********************************************************************/
+        void Forward(double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * Reverse projection, from Lambert conformal conic to geographic.
+         *
+         * @param[in] lon0 central meridian longitude (degrees).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * The latitude origin is given by LambertConformalConic::LatitudeOrigin().
+         * No false easting or northing is added.  \e lon0 should be in the range
+         * [−540°, 540°).  The value of \e lon returned is in
+         * the range [−180°, 180°).  The error in the
+         * projection is less than about 10 nm (10 nanometers), true distance, and
+         * the errors in the meridian convergence and scale are consistent with
+         * this.
+         **********************************************************************/
+        void Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * LambertConformalConic::Forward without returning the convergence and
+         * scale.
+         **********************************************************************/
+        void Forward(double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y);
+
+        /**
+         * LambertConformalConic::Reverse without returning the convergence and
+         * scale.
+         **********************************************************************/
+        void Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the
+         *   value used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return latitude of the origin for the projection (degrees).
+         *
+         * This is the latitude of minimum scale and equals the \e stdlat in the
+         * 1-parallel constructor and lies between \e stdlat1 and \e stdlat2 in the
+         * 2-parallel constructors.
+         **********************************************************************/
+        property double OriginLatitude { double get(); }
+
+        /**
+         * @return central scale for the projection.  This is the scale on the
+         *   latitude of origin.
+         **********************************************************************/
+        property double CentralScale { double get(); }
+        ///@}
+    };
+} //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/LocalCartesian.cpp b/dotnet/NETGeographicLib/LocalCartesian.cpp
new file mode 100644
index 0000000..0bcb37b
--- /dev/null
+++ b/dotnet/NETGeographicLib/LocalCartesian.cpp
@@ -0,0 +1,180 @@
+/**
+ * \file NETGeographicLib/LocalCartesian.cpp
+ * \brief Implementation for NETGeographicLib::LocalCartesian class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/LocalCartesian.hpp"
+#include "LocalCartesian.h"
+#include "Geocentric.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::LocalCartesian";
+
+//*****************************************************************************
+LocalCartesian::!LocalCartesian(void)
+{
+    if ( m_pLocalCartesian != NULL )
+    {
+        delete m_pLocalCartesian;
+        m_pLocalCartesian = NULL;
+    }
+}
+
+//*****************************************************************************
+LocalCartesian::LocalCartesian(double lat0, double lon0, double h0,
+                Geocentric^ earth )
+{
+    try
+    {
+        const GeographicLib::Geocentric* pGeocentric =
+            reinterpret_cast<const GeographicLib::Geocentric*>(
+                earth->GetUnmanaged()->ToPointer() );
+        m_pLocalCartesian = new GeographicLib::LocalCartesian( lat0, lon0, h0, *pGeocentric );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+LocalCartesian::LocalCartesian(double lat0, double lon0, double h0 )
+{
+    try
+    {
+        m_pLocalCartesian = new GeographicLib::LocalCartesian( lat0, lon0, h0,
+            GeographicLib::Geocentric::WGS84 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+LocalCartesian::LocalCartesian(Geocentric^ earth)
+{
+    try
+    {
+        const GeographicLib::Geocentric* pGeocentric =
+            reinterpret_cast<const GeographicLib::Geocentric*>(
+                earth->GetUnmanaged()->ToPointer() );
+        m_pLocalCartesian = new GeographicLib::LocalCartesian( *pGeocentric );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+LocalCartesian::LocalCartesian()
+{
+    try
+    {
+        m_pLocalCartesian = new GeographicLib::LocalCartesian(
+            GeographicLib::Geocentric::WGS84 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void LocalCartesian::Reset(double lat0, double lon0, double h0 )
+{
+    m_pLocalCartesian->Reset( lat0, lon0, h0 );
+}
+
+//*****************************************************************************
+void LocalCartesian::Forward(double lat, double lon, double h,
+    [System::Runtime::InteropServices::Out] double% x,
+    [System::Runtime::InteropServices::Out] double% y,
+    [System::Runtime::InteropServices::Out] double% z)
+{
+    double lx, ly, lz;
+    m_pLocalCartesian->Forward( lat, lon, h, lx, ly, lz );
+    x = lx;
+    y = ly;
+    z = lz;
+}
+
+//*****************************************************************************
+void LocalCartesian::Forward(double lat, double lon, double h,
+    [System::Runtime::InteropServices::Out] double% x,
+    [System::Runtime::InteropServices::Out] double% y,
+    [System::Runtime::InteropServices::Out] double% z,
+    [System::Runtime::InteropServices::Out] array<double,2>^% M)
+{
+    double lx, ly, lz;
+    std::vector<double> lM(9);
+    m_pLocalCartesian->Forward( lat, lon, h, lx, ly, lz, lM );
+    x = lx;
+    y = ly;
+    z = lz;
+    M = gcnew array<double,2>(3,3);
+    for ( int i = 0; i < 3; i++ )
+        for ( int j = 0; j < 3; j++ )
+            M[i,j] = lM[3*i+j];
+}
+
+//*****************************************************************************
+void LocalCartesian::Reverse(double x, double y, double z,
+    [System::Runtime::InteropServices::Out] double% lat,
+    [System::Runtime::InteropServices::Out] double% lon,
+    [System::Runtime::InteropServices::Out] double% h)
+{
+    double llat, llon, lh;
+    m_pLocalCartesian->Reverse( x, y, z, llat, llon, lh );
+    lat = llat;
+    lon = llon;
+    h = lh;
+}
+
+//*****************************************************************************
+void LocalCartesian::Reverse(double x, double y, double z,
+    [System::Runtime::InteropServices::Out] double% lat,
+    [System::Runtime::InteropServices::Out] double% lon,
+    [System::Runtime::InteropServices::Out] double% h,
+    [System::Runtime::InteropServices::Out] array<double,2>^% M)
+{
+    double llat, llon, lh;
+    std::vector<double> lM(9);
+    m_pLocalCartesian->Reverse( x, y, z, llat, llon, lh, lM );
+    lat = llat;
+    lon = llon;
+    h = lh;
+    M = gcnew array<double,2>(3,3);
+    for ( int i = 0; i < 3; i++ )
+        for ( int j = 0; j < 3; j++ )
+            M[i,j] = lM[3*i+j];
+}
+
+//*****************************************************************************
+double LocalCartesian::LatitudeOrigin::get()
+{ return m_pLocalCartesian->LatitudeOrigin(); }
+
+//*****************************************************************************
+double LocalCartesian::LongitudeOrigin::get()
+{ return m_pLocalCartesian->LongitudeOrigin(); }
+
+//*****************************************************************************
+double LocalCartesian::HeightOrigin::get()
+{ return m_pLocalCartesian->HeightOrigin(); }
+
+//*****************************************************************************
+double LocalCartesian::MajorRadius::get()
+{ return m_pLocalCartesian->MajorRadius(); }
+
+//*****************************************************************************
+double LocalCartesian::Flattening::get()
+{ return m_pLocalCartesian->Flattening(); }
diff --git a/dotnet/NETGeographicLib/LocalCartesian.h b/dotnet/NETGeographicLib/LocalCartesian.h
new file mode 100644
index 0000000..6f7c313
--- /dev/null
+++ b/dotnet/NETGeographicLib/LocalCartesian.h
@@ -0,0 +1,250 @@
+#pragma once
+/**
+ * \file NETGeographicLib/LocalCartesian.h
+ * \brief Header for NETGeographicLib::LocalCartesian class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    ref class Geocentric;
+  /**
+   * \brief .NET wrapper for GeographicLib::LocalCartesian.
+   *
+   * This class allows .NET applications to access GeographicLib::LocalCartesian.
+   *
+   * Convert between geodetic coordinates latitude = \e lat, longitude = \e
+   * lon, height = \e h (measured vertically from the surface of the ellipsoid)
+   * to local cartesian coordinates (\e x, \e y, \e z).  The origin of local
+   * cartesian coordinate system is at \e lat = \e lat0, \e lon = \e lon0, \e h
+   * = \e h0. The \e z axis is normal to the ellipsoid; the \e y axis points
+   * due north.  The plane \e z = - \e h0 is tangent to the ellipsoid.
+   *
+   * The conversions all take place via geocentric coordinates using a
+   * Geocentric object.
+   *
+   * C# Example:
+   * \include example-LocalCartesian.cs
+   * Managed C++ Example:
+   * \include example-LocalCartesian.cpp
+   * Visual Basic Example:
+   * \include example-LocalCartesian.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * Constructors have been provided that assume WGS84 parameters.
+   *
+   * The following functions are implemented as properties:
+   * LatitudeOrigin, LongitudeOrigin, HeightOrigin, MajorRadius,
+   * and Flattening.
+   *
+   * The rotation matrices returned by the Forward and Reverse functions
+   * are 2D, 3 × 3 arrays rather than vectors.
+   **********************************************************************/
+    public ref class LocalCartesian
+    {
+        private:
+        // the pointer to the GeographicLib::LocalCartesian.
+        GeographicLib::LocalCartesian* m_pLocalCartesian;
+
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !LocalCartesian(void);
+    public:
+
+        /**
+         * Constructor setting the origin.
+         *
+         * @param[in] lat0 latitude at origin (degrees).
+         * @param[in] lon0 longitude at origin (degrees).
+         * @param[in] h0 height above ellipsoid at origin (meters); default 0.
+         * @param[in] earth Geocentric object for the transformation; default
+         *   Geocentric::WGS84.
+         *
+         * \e lat0 should be in the range [−90°, 90°]; \e
+         * lon0 should be in the range [−540°, 540°).
+         **********************************************************************/
+        LocalCartesian(double lat0, double lon0, double h0,
+                       Geocentric^ earth );
+
+        /**
+         * Constructor setting the origin and assuming a WGS84 ellipsoid.
+         *
+         * @param[in] lat0 latitude at origin (degrees).
+         * @param[in] lon0 longitude at origin (degrees).
+         * @param[in] h0 height above ellipsoid at origin (meters); default 0.
+         *
+         * \e lat0 should be in the range [−90°, 90°]; \e
+         * lon0 should be in the range [−540°, 540°).
+         **********************************************************************/
+        LocalCartesian(double lat0, double lon0, double h0 );
+
+        /**
+         * Constructor that uses the provided ellipsoid.
+         *
+         * @param[in] earth Geocentric object for the transformation; default
+         *   Geocentric::WGS84.
+         *
+         * Sets \e lat0 = 0, \e lon0 = 0, \e h0 = 0.
+         **********************************************************************/
+        LocalCartesian(Geocentric^ earth);
+
+        /**
+         * The default constructor assumes the WGS84 ellipsoid.
+         *
+         * Sets \e lat0 = 0, \e lon0 = 0, \e h0 = 0.
+         **********************************************************************/
+        LocalCartesian();
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~LocalCartesian()
+        { this->!LocalCartesian(); }
+
+        /**
+         * Reset the origin.
+         *
+         * @param[in] lat0 latitude at origin (degrees).
+         * @param[in] lon0 longitude at origin (degrees).
+         * @param[in] h0 height above ellipsoid at origin (meters); default 0.
+         *
+         * \e lat0 should be in the range [−90°, 90°]; \e
+         * lon0 should be in the range [−540°, 540°).
+         **********************************************************************/
+        void Reset(double lat0, double lon0, double h0 );
+
+        /**
+         * Convert from geodetic to local cartesian coordinates.
+         *
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[in] h height of point above the ellipsoid (meters).
+         * @param[out] x local cartesian coordinate (meters).
+         * @param[out] y local cartesian coordinate (meters).
+         * @param[out] z local cartesian coordinate (meters).
+         *
+         * \e lat should be in the range [−90°, 90°]; \e lon
+         * should be in the range [−540°, 540°).
+         **********************************************************************/
+        void Forward(double lat, double lon, double h,
+            [System::Runtime::InteropServices::Out] double% x,
+            [System::Runtime::InteropServices::Out] double% y,
+            [System::Runtime::InteropServices::Out] double% z);
+
+        /**
+         * Convert from geodetic to local cartesian coordinates and return rotation
+         * matrix.
+         *
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[in] h height of point above the ellipsoid (meters).
+         * @param[out] x local cartesian coordinate (meters).
+         * @param[out] y local cartesian coordinate (meters).
+         * @param[out] z local cartesian coordinate (meters).
+         * @param[out] M a 3 × 3 rotation matrix.
+         *
+         * \e lat should be in the range [−90°, 90°]; \e lon
+         * should be in the range [−540°, 540°).
+         *
+         * Let \e v be a unit vector located at (\e lat, \e lon, \e h).  We can
+         * express \e v as \e column vectors in one of two ways
+         * - in east, north, up coordinates (where the components are relative to a
+         *   local coordinate system at (\e lat, \e lon, \e h)); call this
+         *   representation \e v1.
+         * - in \e x, \e y, \e z coordinates (where the components are relative to
+         *   the local coordinate system at (\e lat0, \e lon0, \e h0)); call this
+         *   representation \e v0.
+         * .
+         * Then we have \e v0 = \e M ⋅ \e v1.
+         **********************************************************************/
+        void Forward(double lat, double lon, double h,
+            [System::Runtime::InteropServices::Out] double% x,
+            [System::Runtime::InteropServices::Out] double% y,
+            [System::Runtime::InteropServices::Out] double% z,
+            [System::Runtime::InteropServices::Out] array<double,2>^% M);
+
+        /**
+         * Convert from local cartesian to geodetic coordinates.
+         *
+         * @param[in] x local cartesian coordinate (meters).
+         * @param[in] y local cartesian coordinate (meters).
+         * @param[in] z local cartesian coordinate (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] h height of point above the ellipsoid (meters).
+         *
+         * The value of \e lon returned is in the range [−180°,
+         * 180°).
+         **********************************************************************/
+        void Reverse(double x, double y, double z,
+            [System::Runtime::InteropServices::Out] double% lat,
+            [System::Runtime::InteropServices::Out] double% lon,
+            [System::Runtime::InteropServices::Out] double% h);
+
+        /**
+         * Convert from local cartesian to geodetic coordinates and return rotation
+         * matrix.
+         *
+         * @param[in] x local cartesian coordinate (meters).
+         * @param[in] y local cartesian coordinate (meters).
+         * @param[in] z local cartesian coordinate (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] h height of point above the ellipsoid (meters).
+         * @param[out] M a 3 × 3 rotation matrix.
+         *
+         * Let \e v be a unit vector located at (\e lat, \e lon, \e h).  We can
+         * express \e v as \e column vectors in one of two ways
+         * - in east, north, up coordinates (where the components are relative to a
+         *   local coordinate system at (\e lat, \e lon, \e h)); call this
+         *   representation \e v1.
+         * - in \e x, \e y, \e z coordinates (where the components are relative to
+         *   the local coordinate system at (\e lat0, \e lon0, \e h0)); call this
+         *   representation \e v0.
+         * .
+         * Then we have \e v1 = \e M<sup>T</sup> ⋅ \e v0, where \e
+         * M<sup>T</sup> is the transpose of \e M.
+         **********************************************************************/
+        void Reverse(double x, double y, double z,
+            [System::Runtime::InteropServices::Out] double% lat,
+            [System::Runtime::InteropServices::Out] double% lon,
+            [System::Runtime::InteropServices::Out] double% h,
+            [System::Runtime::InteropServices::Out] array<double,2>^% M);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return latitude of the origin (degrees).
+         **********************************************************************/
+        property double LatitudeOrigin { double get(); }
+
+        /**
+         * @return longitude of the origin (degrees).
+         **********************************************************************/
+        property double LongitudeOrigin { double get(); }
+
+        /**
+         * @return height of the origin (meters).
+         **********************************************************************/
+        property double HeightOrigin { double get(); }
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value of \e a inherited from the Geocentric object used in the
+         *   constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the Geocentric object used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/MGRS.cpp b/dotnet/NETGeographicLib/MGRS.cpp
new file mode 100644
index 0000000..753a7f1
--- /dev/null
+++ b/dotnet/NETGeographicLib/MGRS.cpp
@@ -0,0 +1,83 @@
+/**
+ * \file NETGeographicLib/MGRS.cpp
+ * \brief Implementation for NETGeographicLib::MGRS class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/MGRS.hpp"
+#include "MGRS.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+void MGRS::Forward(int zone, bool northp, double x, double y,
+                int prec,
+                [System::Runtime::InteropServices::Out] System::String^% mgrs)
+{
+    try
+    {
+        std::string lmgrs;
+        GeographicLib::MGRS::Forward( zone, northp, x, y, prec, lmgrs );
+        mgrs = gcnew System::String( lmgrs.c_str() );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void MGRS::Forward(int zone, bool northp, double x, double y, double lat,
+                int prec, System::String^% mgrs)
+{
+    try
+    {
+        std::string lmgrs;
+        GeographicLib::MGRS::Forward( zone, northp, x, y, lat, prec, lmgrs );
+        mgrs = gcnew System::String( lmgrs.c_str() );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void MGRS::Reverse(System::String^ mgrs,
+                [System::Runtime::InteropServices::Out] int% zone,
+                [System::Runtime::InteropServices::Out] bool% northp,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y,
+                [System::Runtime::InteropServices::Out] int% prec,
+                bool centerp )
+{
+    try
+    {
+        double lx, ly;
+        int lzone, lprec;
+        bool lnorthp;
+        GeographicLib::MGRS::Reverse( StringConvert::ManagedToUnmanaged( mgrs ),
+            lzone, lnorthp, lx, ly, lprec, centerp );
+        x = lx;
+        y = ly;
+        zone = lzone;
+        prec = lprec;
+        northp = lnorthp;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+double MGRS::MajorRadius() { return GeographicLib::UTMUPS::MajorRadius(); }
+
+//*****************************************************************************
+double MGRS::Flattening() { return GeographicLib::UTMUPS::Flattening(); }
diff --git a/dotnet/NETGeographicLib/MGRS.h b/dotnet/NETGeographicLib/MGRS.h
new file mode 100644
index 0000000..e3c0a61
--- /dev/null
+++ b/dotnet/NETGeographicLib/MGRS.h
@@ -0,0 +1,235 @@
+#pragma once
+/**
+ * \file NETGeographicLib/MGRS.h
+ * \brief Header for NETGeographicLib::MGRS class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::MGRS.
+   *
+   * This class allows .NET applications to access GeographicLib::MGRS.
+   *
+   * MGRS is defined in Chapter 3 of
+   * - J. W. Hager, L. L. Fry, S. S. Jacks, D. R. Hill,
+   *   <a href="http://earth-info.nga.mil/GandG/publications/tm8358.1/pdf/TM8358_1.pdf">
+
+   *   Datums, Ellipsoids, Grids, and Grid Reference Systems</a>,
+   *   Defense Mapping Agency, Technical Manual TM8358.1 (1990).
+   *
+   * This implementation has the following properties:
+   * - The conversions are closed, i.e., output from Forward is legal input for
+   *   Reverse and vice versa.  Conversion in both directions preserve the
+   *   UTM/UPS selection and the UTM zone.
+   * - Forward followed by Reverse and vice versa is approximately the
+   *   identity.  (This is affected in predictable ways by errors in
+   *   determining the latitude band and by loss of precision in the MGRS
+   *   coordinates.)
+   * - All MGRS coordinates truncate to legal 100 km blocks.  All MGRS
+   *   coordinates with a legal 100 km block prefix are legal (even though the
+   *   latitude band letter may now belong to a neighboring band).
+   * - The range of UTM/UPS coordinates allowed for conversion to MGRS
+   *   coordinates is the maximum consistent with staying within the letter
+   *   ranges of the MGRS scheme.
+   * - All the transformations are implemented as static methods in the MGRS
+   *   class.
+   *
+   * The <a href="http://www.nga.mil">NGA</a> software package
+   * <a href="http://earth-info.nga.mil/GandG/geotrans/index.html">geotrans</a>
+   * also provides conversions to and from MGRS.  Version 3.0 (and earlier)
+   * suffers from some drawbacks:
+   * - Inconsistent rules are used to determine the whether a particular MGRS
+   *   coordinate is legal.  A more systematic approach is taken here.
+   * - The underlying projections are not very accurately implemented.
+   *
+   * C# Example:
+   * \include example-MGRS.cs
+   * Managed C++ Example:
+   * \include example-MGRS.cpp
+   * Visual Basic Example:
+   * \include example-MGRS.vb
+   *
+   **********************************************************************/
+    public ref class MGRS
+    {
+        private:
+        // Hide the constructor since all members are static.
+        MGRS(void) {}
+    public:
+
+        /**
+         * Convert UTM or UPS coordinate to an MGRS coordinate.
+         *
+         * @param[in] zone UTM zone (zero means UPS).
+         * @param[in] northp hemisphere (true means north, false means south).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[in] prec precision relative to 100 km.
+         * @param[out] mgrs MGRS string.
+         * @exception GeographicErr if \e zone, \e x, or \e y is outside its
+         *   allowed range.
+         * @exception GeographicErr if the memory for the MGRS string can't be
+         *   allocated.
+         *
+         * \e prec specifies the precision of the MGRS string as follows:
+         * - prec = 0 (min), 100 km
+         * - prec = 1, 10 km
+         * - prec = 2, 1 km
+         * - prec = 3, 100 m
+         * - prec = 4, 10 m
+         * - prec = 5, 1 m
+         * - prec = 6, 0.1 m
+         * - prec = 11 (max), 1 μm
+         *
+         * UTM eastings are allowed to be in the range [100 km, 900 km], northings
+         * are allowed to be in in [0 km, 9500 km] for the northern hemisphere and
+         * in [1000 km, 10000 km] for the southern hemisphere.  (However UTM
+         * northings can be continued across the equator.  So the actual limits on
+         * the northings are [−9000 km, 9500 km] for the "northern"
+         * hemisphere and [1000 km, 19500 km] for the "southern" hemisphere.)
+         *
+         * UPS eastings/northings are allowed to be in the range [1300 km, 2700 km]
+         * in the northern hemisphere and in [800 km, 3200 km] in the southern
+         * hemisphere.
+         *
+         * The ranges are 100 km more restrictive that for the conversion between
+         * geographic coordinates and UTM and UPS given by UTMUPS.  These
+         * restrictions are dictated by the allowed letters in MGRS coordinates.
+         * The choice of 9500 km for the maximum northing for northern hemisphere
+         * and of 1000 km as the minimum northing for southern hemisphere provide
+         * at least 0.5 degree extension into standard UPS zones.  The upper ends
+         * of the ranges for the UPS coordinates is dictated by requiring symmetry
+         * about the meridians 0E and 90E.
+         *
+         * All allowed UTM and UPS coordinates may now be converted to legal MGRS
+         * coordinates with the proviso that eastings and northings on the upper
+         * boundaries are silently reduced by about 4 nm (4 nanometers) to place
+         * them \e within the allowed range.  (This includes reducing a southern
+         * hemisphere northing of 10000 km by 4 nm so that it is placed in latitude
+         * band M.)  The UTM or UPS coordinates are truncated to requested
+         * precision to determine the MGRS coordinate.  Thus in UTM zone 38N, the
+         * square area with easting in [444 km, 445 km) and northing in [3688 km,
+         * 3689 km) maps to MGRS coordinate 38SMB4488 (at \e prec = 2, 1 km),
+         * Khulani Sq., Baghdad.
+         *
+         * The UTM/UPS selection and the UTM zone is preserved in the conversion to
+         * MGRS coordinate.  Thus for \e zone > 0, the MGRS coordinate begins with
+         * the zone number followed by one of [C--M] for the southern
+         * hemisphere and [N--X] for the northern hemisphere.  For \e zone =
+         * 0, the MGRS coordinates begins with one of [AB] for the southern
+         * hemisphere and [XY] for the northern hemisphere.
+         *
+         * The conversion to the MGRS is exact for prec in [0, 5] except that a
+         * neighboring latitude band letter may be given if the point is within 5nm
+         * of a band boundary.  For prec in [6, 11], the conversion is accurate to
+         * roundoff.
+         *
+         * If \e x or \e y is NaN or if \e zone is UTMUPS::INVALID, the returned
+         * MGRS string is "INVALID".
+         *
+         * Return the result via a reference argument to avoid the overhead of
+         * allocating a potentially large number of small strings.  If an error is
+         * thrown, then \e mgrs is unchanged.
+         **********************************************************************/
+        static void Forward(int zone, bool northp, double x, double y,
+                            int prec,
+                [System::Runtime::InteropServices::Out] System::String^% mgrs);
+
+        /**
+         * Convert UTM or UPS coordinate to an MGRS coordinate when the latitude is
+         * known.
+         *
+         * @param[in] zone UTM zone (zero means UPS).
+         * @param[in] northp hemisphere (true means north, false means south).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[in] lat latitude (degrees).
+         * @param[in] prec precision relative to 100 km.
+         * @param[out] mgrs MGRS string.
+         * @exception GeographicErr if \e zone, \e x, or \e y is outside its
+         *   allowed range.
+         * @exception GeographicErr if \e lat is inconsistent with the given UTM
+         *   coordinates.
+         *
+         * The latitude is ignored for \e zone = 0 (UPS); otherwise the latitude is
+         * used to determine the latitude band and this is checked for consistency
+         * using the same tests as Reverse.
+         **********************************************************************/
+        static void Forward(int zone, bool northp, double x, double y, double lat,
+                int prec,
+                [System::Runtime::InteropServices::Out] System::String^% mgrs);
+
+        /**
+         * Convert a MGRS coordinate to UTM or UPS coordinates.
+         *
+         * @param[in] mgrs MGRS string.
+         * @param[out] zone UTM zone (zero means UPS).
+         * @param[out] northp hemisphere (true means north, false means south).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] prec precision relative to 100 km.
+         * @param[in] centerp if true (default), return center of the MGRS square,
+         *   else return SW (lower left) corner.
+         * @exception GeographicErr if \e mgrs is illegal.
+         *
+         * All conversions from MGRS to UTM/UPS are permitted provided the MGRS
+         * coordinate is a possible result of a conversion in the other direction.
+         * (The leading 0 may be dropped from an input MGRS coordinate for UTM
+         * zones 1--9.)  In addition, MGRS coordinates with a neighboring
+         * latitude band letter are permitted provided that some portion of the
+         * 100 km block is within the given latitude band.  Thus
+         *   - 38VLS and 38WLS are allowed (latitude 64N intersects the square
+         *     38[VW]LS); but 38VMS is not permitted (all of 38VMS is north of 64N)
+         *   - 38MPE and 38NPF are permitted (they straddle the equator); but 38NPE
+         *     and 38MPF are not permitted (the equator does not intersect either
+         *     block).
+         *   - Similarly ZAB and YZB are permitted (they straddle the prime
+         *     meridian); but YAB and ZZB are not (the prime meridian does not
+         *     intersect either block).
+         *
+         * The UTM/UPS selection and the UTM zone is preserved in the conversion
+         * from MGRS coordinate.  The conversion is exact for prec in [0, 5].  With
+         * centerp = true the conversion from MGRS to geographic and back is
+         * stable.  This is not assured if \e centerp = false.
+         *
+         * If the first 3 characters of \e mgrs are "INV", then \e x and \e y are
+         * set to NaN and \e zone is set to UTMUPS::INVALID.
+         *
+         * If an exception is thrown, then the arguments are unchanged.
+         **********************************************************************/
+        static void Reverse(System::String^ mgrs,
+                        [System::Runtime::InteropServices::Out] int% zone,
+                        [System::Runtime::InteropServices::Out] bool% northp,
+                        [System::Runtime::InteropServices::Out] double% x,
+                        [System::Runtime::InteropServices::Out] double% y,
+                        [System::Runtime::InteropServices::Out] int% prec,
+                        bool centerp );
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the WGS84 ellipsoid (meters).
+         *
+         * (The WGS84 value is returned because the UTM and UPS projections are
+         * based on this ellipsoid.)
+         **********************************************************************/
+        static double MajorRadius();
+
+        /**
+         * @return \e f the flattening of the WGS84 ellipsoid.
+         *
+         * (The WGS84 value is returned because the UTM and UPS projections are
+         * based on this ellipsoid.)
+         **********************************************************************/
+        static double Flattening();
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/MagneticCircle.cpp b/dotnet/NETGeographicLib/MagneticCircle.cpp
new file mode 100644
index 0000000..bef0ff0
--- /dev/null
+++ b/dotnet/NETGeographicLib/MagneticCircle.cpp
@@ -0,0 +1,114 @@
+/**
+ * \file NETGeographicLib/MagneticCircle.cpp
+ * \brief Implementation for NETGeographicLib::MagneticCircle class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/MagneticCircle.hpp"
+#include "MagneticCircle.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+MagneticCircle::!MagneticCircle(void)
+{
+    if ( m_pMagneticCircle != NULL )
+    {
+        delete m_pMagneticCircle;
+        m_pMagneticCircle = NULL;
+    }
+}
+
+//*****************************************************************************
+MagneticCircle::MagneticCircle( const GeographicLib::MagneticCircle& c )
+{
+    try
+    {
+        m_pMagneticCircle = new GeographicLib::MagneticCircle( c );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a GeographicLib::MagneticCircle" );
+    }
+}
+
+//*****************************************************************************
+void MagneticCircle::Field(double lon,
+    [System::Runtime::InteropServices::Out] double% Bx,
+    [System::Runtime::InteropServices::Out] double% By,
+    [System::Runtime::InteropServices::Out] double% Bz)
+{
+    double lx, ly, lz;
+    m_pMagneticCircle->operator()( lon, lx, ly, lz );
+    Bx = lx;
+    By = ly;
+    Bz = lz;
+}
+
+//*****************************************************************************
+void MagneticCircle::Field(double lon,
+    [System::Runtime::InteropServices::Out] double% Bx,
+    [System::Runtime::InteropServices::Out] double% By,
+    [System::Runtime::InteropServices::Out] double% Bz,
+    [System::Runtime::InteropServices::Out] double% Bxt,
+    [System::Runtime::InteropServices::Out] double% Byt,
+    [System::Runtime::InteropServices::Out] double% Bzt)
+{
+    double lx, ly, lz, lxt, lyt, lzt;
+    m_pMagneticCircle->operator()( lon, lx, ly, lz, lxt, lyt, lzt );
+    Bx = lx;
+    By = ly;
+    Bz = lz;
+    Bxt = lxt;
+    Byt = lyt;
+    Bzt = lzt;
+}
+
+//*****************************************************************************
+double MagneticCircle::MajorRadius::get()
+{
+    if ( m_pMagneticCircle->Init() )
+        return m_pMagneticCircle->MajorRadius();
+    throw  gcnew GeographicErr("MagneticCircle::MajorRadius failed because the MagneticCircle is not initialized.");
+}
+
+//*****************************************************************************
+double MagneticCircle::Flattening::get()
+{
+    if ( m_pMagneticCircle->Init() )
+        return m_pMagneticCircle->Flattening();
+    throw  gcnew GeographicErr("MagneticCircle::Flattening failed because the MagneticCircle is not initialized.");
+}
+
+//*****************************************************************************
+double MagneticCircle::Latitude::get()
+{
+    if ( m_pMagneticCircle->Init() )
+        return m_pMagneticCircle->Latitude();
+    throw  gcnew GeographicErr("MagneticCircle::Latitude failed because the MagneticCircle is not initialized.");
+}
+
+//*****************************************************************************
+double MagneticCircle::Height::get()
+{
+    if ( m_pMagneticCircle->Init() )
+        return m_pMagneticCircle->Height();
+    throw  gcnew GeographicErr("MagneticCircle::Height failed because the MagneticCircle is not initialized.");
+}
+
+//*****************************************************************************
+double MagneticCircle::Time::get()
+{
+    if ( m_pMagneticCircle->Init() )
+        return m_pMagneticCircle->Height();
+    throw  gcnew GeographicErr("MagneticCircle::Height failed because the MagneticCircle is not initialized.");
+}
+
+//*****************************************************************************
+bool MagneticCircle::Init::get() { return m_pMagneticCircle->Init(); }
diff --git a/dotnet/NETGeographicLib/MagneticCircle.h b/dotnet/NETGeographicLib/MagneticCircle.h
new file mode 100644
index 0000000..a60298e
--- /dev/null
+++ b/dotnet/NETGeographicLib/MagneticCircle.h
@@ -0,0 +1,147 @@
+#pragma once
+/**
+ * \file NETGeographicLib/MagneticCircle.h
+ * \brief Header for NETGeographicLib::MagneticCircle class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::MagneticCircle.
+   *
+   * This class allows .NET applications to access GeographicLib::MagneticCircle.
+   *
+   * Evaluate the earth's magnetic field on a circle of constant height and
+   * latitude.  This uses a CircularEngine to pre-evaluate the inner sum of the
+   * spherical harmonic sum, allowing the values of the field at several
+   * different longitudes to be evaluated rapidly.
+   *
+   * Use MagneticModel::Circle to create a MagneticCircle object.  (The
+   * constructor for this class is for internal use only.)
+   *
+   * C# Example:
+   * \include example-MagneticCircle.cs
+   * Managed C++ Example:
+   * \include example-MagneticCircle.cpp
+   * Visual Basic Example:
+   * \include example-MagneticCircle.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The () operator has been replaced with Field.
+   *
+   * The following functions are implemented as properties:
+   * Init, MajorRadius, Flattening, Latitude, Height, and Time.
+   **********************************************************************/
+    public ref class MagneticCircle
+    {
+        private:
+        // pointer to the unmanaged GeographicLib::MagneticCircle.
+        const GeographicLib::MagneticCircle* m_pMagneticCircle;
+
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !MagneticCircle(void);
+    public:
+
+        /**
+         * %brief A constructor that is initialized from an unmanaged
+         * GeographicLib::MagneticCircle. This is for internal use only.
+         *
+         * Developers should use MagneticModel::Circle to create a
+         * MagneticCircle.
+         **********************************************************************/
+        MagneticCircle( const GeographicLib::MagneticCircle& c );
+
+        /**
+         * %brief The destructor calls the finalizer.
+         **********************************************************************/
+        ~MagneticCircle()
+        { this->!MagneticCircle(); }
+
+        /** \name Compute the magnetic field
+         **********************************************************************/
+        ///@{
+        /**
+         * %brief Evaluate the components of the geomagnetic field at a
+         * particular longitude.
+         *
+         * @param[in] lon longitude of the point (degrees).
+         * @param[out] Bx the easterly component of the magnetic field (nanotesla).
+         * @param[out] By the northerly component of the magnetic field (nanotesla).
+         * @param[out] Bz the vertical (up) component of the magnetic field
+         *   (nanotesla).
+         **********************************************************************/
+        void Field(double lon,
+            [System::Runtime::InteropServices::Out] double% Bx,
+            [System::Runtime::InteropServices::Out] double% By,
+            [System::Runtime::InteropServices::Out] double% Bz);
+
+        /**
+         * Evaluate the components of the geomagnetic field and their time
+         * derivatives at a particular longitude.
+         *
+         * @param[in] lon longitude of the point (degrees).
+         * @param[out] Bx the easterly component of the magnetic field (nanotesla).
+         * @param[out] By the northerly component of the magnetic field (nanotesla).
+         * @param[out] Bz the vertical (up) component of the magnetic field
+         *   (nanotesla).
+         * @param[out] Bxt the rate of change of \e Bx (nT/yr).
+         * @param[out] Byt the rate of change of \e By (nT/yr).
+         * @param[out] Bzt the rate of change of \e Bz (nT/yr).
+         **********************************************************************/
+        void Field(double lon,
+            [System::Runtime::InteropServices::Out] double% Bx,
+            [System::Runtime::InteropServices::Out] double% By,
+            [System::Runtime::InteropServices::Out] double% Bz,
+            [System::Runtime::InteropServices::Out] double% Bxt,
+            [System::Runtime::InteropServices::Out] double% Byt,
+            [System::Runtime::InteropServices::Out] double% Bzt);
+        ///@}
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return true if the object has been initialized.
+         **********************************************************************/
+        property bool Init { bool get(); }
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value inherited from the MagneticModel object used in the
+         *   constructor.  This property throws a GeographicErr exception if
+         *   the object is not initialized.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the MagneticModel object used in the constructor.
+         *   This property throws a GeographicErr exception if the object is
+         *   not initialized.
+         **********************************************************************/
+        property double Flattening { double get(); }
+        /**
+         * @return the latitude of the circle (degrees).
+         *   This property throws a GeographicErr exception if the object is
+         *   not initialized.
+         **********************************************************************/
+        property double Latitude { double get(); }
+        /**
+         * @return the height of the circle (meters).
+         *   This property throws a GeographicErr exception if the object is
+         *   not initialized.
+         **********************************************************************/
+        property double Height { double get(); }
+        /**
+         * @return the time (fractional years).
+         *   This property throws a GeographicErr exception if the object is
+         *   not initialized.
+         **********************************************************************/
+        property double Time { double get(); }
+        ///@}
+    };
+} //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/MagneticModel.cpp b/dotnet/NETGeographicLib/MagneticModel.cpp
new file mode 100644
index 0000000..cfa1cb9
--- /dev/null
+++ b/dotnet/NETGeographicLib/MagneticModel.cpp
@@ -0,0 +1,234 @@
+/**
+ * \file NETGeographicLib/MagneticModel.cpp
+ * \brief Implementation for NETGeographicLib::MagneticModel class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/MagneticModel.hpp"
+#include "MagneticModel.h"
+#include "GeographicLib/MagneticCircle.hpp"
+#include "MagneticCircle.h"
+#include "Geocentric.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::MagneticModel";
+
+//*****************************************************************************
+MagneticModel::!MagneticModel(void)
+{
+    if ( m_pMagneticModel != NULL )
+    {
+        delete m_pMagneticModel;
+        m_pMagneticModel = NULL;
+    }
+}
+
+//*****************************************************************************
+MagneticModel::MagneticModel(System::String^ name,
+                System::String^ path,
+                Geocentric^ earth)
+{
+    if ( name == nullptr ) throw gcnew GeographicErr("name cannot be a null pointer.");
+    if ( path == nullptr ) throw gcnew GeographicErr("path cannot be a null pointer.");
+    if ( earth == nullptr ) throw gcnew GeographicErr("earth cannot be a null pointer.");
+
+    try
+    {
+        const GeographicLib::Geocentric* pGeocentric =
+            reinterpret_cast<const GeographicLib::Geocentric*>(
+                earth->GetUnmanaged()->ToPointer() );
+
+        m_pMagneticModel = new GeographicLib::MagneticModel(
+            StringConvert::ManagedToUnmanaged( name ),
+            StringConvert::ManagedToUnmanaged( path ),
+            *pGeocentric );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch (const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+MagneticModel::MagneticModel(System::String^ name,
+                System::String^ path)
+{
+    if ( name == nullptr ) throw gcnew GeographicErr("name cannot be a null pointer.");
+    if ( path == nullptr ) throw gcnew GeographicErr("path cannot be a null pointer.");
+
+    try
+    {
+        m_pMagneticModel = new GeographicLib::MagneticModel(
+            StringConvert::ManagedToUnmanaged( name ),
+            StringConvert::ManagedToUnmanaged( path ),
+            GeographicLib::Geocentric::WGS84 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch (const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void MagneticModel::Field(double t, double lat, double lon, double h,
+                [System::Runtime::InteropServices::Out] double% Bx,
+                [System::Runtime::InteropServices::Out] double% By,
+                [System::Runtime::InteropServices::Out] double% Bz)
+{
+    double lx, ly, lz;
+    m_pMagneticModel->operator()( t, lat, lon, h, lx, ly, lz );
+    Bx = lx;
+    By = ly;
+    Bz = lz;
+}
+
+//*****************************************************************************
+void MagneticModel::Field(double t, double lat, double lon, double h,
+                [System::Runtime::InteropServices::Out] double% Bx,
+                [System::Runtime::InteropServices::Out] double% By,
+                [System::Runtime::InteropServices::Out] double% Bz,
+                [System::Runtime::InteropServices::Out] double% Bxt,
+                [System::Runtime::InteropServices::Out] double% Byt,
+                [System::Runtime::InteropServices::Out] double% Bzt)
+{
+    double lx, ly, lz, lxt, lyt, lzt;
+    m_pMagneticModel->operator()( t, lat, lon, h, lx, ly, lz, lxt, lyt, lzt );
+    Bx = lx;
+    By = ly;
+    Bz = lz;
+    Bxt = lxt;
+    Byt = lyt;
+    Bzt = lzt;
+}
+
+//*****************************************************************************
+MagneticCircle^ MagneticModel::Circle(double t, double lat, double h)
+{
+    try
+    {
+        return gcnew MagneticCircle( m_pMagneticModel->Circle( t, lat, h ) );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr("Failed to allocate memory for a MagneticCircle in MagneticModel::Circle");
+    }
+}
+
+//*****************************************************************************
+void MagneticModel::FieldComponents(double Bx, double By, double Bz,
+                            [System::Runtime::InteropServices::Out] double% H,
+                            [System::Runtime::InteropServices::Out] double% F,
+                            [System::Runtime::InteropServices::Out] double% D,
+                            [System::Runtime::InteropServices::Out] double% I)
+{
+    double lh, lf, ld, li;
+    GeographicLib::MagneticModel::FieldComponents(Bx, By, Bz, lh, lf, ld, li);
+    H = lh;
+    F = lf;
+    D = ld;
+    I = li;
+}
+
+//*****************************************************************************
+void MagneticModel::FieldComponents(double Bx, double By, double Bz,
+                            double Bxt, double Byt, double Bzt,
+                    [System::Runtime::InteropServices::Out] double% H,
+                    [System::Runtime::InteropServices::Out] double% F,
+                    [System::Runtime::InteropServices::Out] double% D,
+                    [System::Runtime::InteropServices::Out] double% I,
+                    [System::Runtime::InteropServices::Out] double% Ht,
+                    [System::Runtime::InteropServices::Out] double% Ft,
+                    [System::Runtime::InteropServices::Out] double% Dt,
+                    [System::Runtime::InteropServices::Out] double% It)
+{
+    double lh, lf, ld, li, lht, lft, ldt, lit;
+    GeographicLib::MagneticModel::FieldComponents(Bx, By, Bz, Bxt, Byt, Bzt,
+        lh, lf, ld, li, lht, lft, ldt, lit);
+    H = lh;
+    F = lf;
+    D = ld;
+    I = li;
+    Ht = lht;
+    Ft = lft;
+    Dt = ldt;
+    It = lit;
+}
+
+//*****************************************************************************
+System::String^ MagneticModel::Description::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pMagneticModel->Description() );
+}
+
+//*****************************************************************************
+System::String^ MagneticModel::DateTime::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pMagneticModel->DateTime() );
+}
+
+//*****************************************************************************
+System::String^ MagneticModel::MagneticFile::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pMagneticModel->MagneticFile() );
+}
+
+//*****************************************************************************
+System::String^ MagneticModel::MagneticModelName::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pMagneticModel->MagneticModelName() );
+}
+
+//*****************************************************************************
+System::String^ MagneticModel::MagneticModelDirectory::get()
+{
+    return StringConvert::UnmanagedToManaged( m_pMagneticModel->MagneticModelDirectory() );
+}
+
+//*****************************************************************************
+System::String^ MagneticModel::DefaultMagneticPath()
+{
+    return StringConvert::UnmanagedToManaged( GeographicLib::MagneticModel::DefaultMagneticPath() );
+}
+
+//*****************************************************************************
+System::String^ MagneticModel::DefaultMagneticName()
+{
+    return StringConvert::UnmanagedToManaged( GeographicLib::MagneticModel::DefaultMagneticName() );
+}
+
+//*****************************************************************************
+double MagneticModel::MinHeight::get()
+{ return m_pMagneticModel->MinHeight(); }
+
+//*****************************************************************************
+double MagneticModel::MaxHeight::get()
+{ return m_pMagneticModel->MaxHeight(); }
+
+//*****************************************************************************
+double MagneticModel::MinTime::get() { return m_pMagneticModel->MinTime(); }
+
+//*****************************************************************************
+double MagneticModel::MaxTime::get() { return m_pMagneticModel->MaxTime(); }
+
+//*****************************************************************************
+double MagneticModel::MajorRadius::get()
+{ return m_pMagneticModel->MajorRadius(); }
+
+//*****************************************************************************
+double MagneticModel::Flattening::get()
+{ return m_pMagneticModel->Flattening(); }
diff --git a/dotnet/NETGeographicLib/MagneticModel.h b/dotnet/NETGeographicLib/MagneticModel.h
new file mode 100644
index 0000000..ff2d74e
--- /dev/null
+++ b/dotnet/NETGeographicLib/MagneticModel.h
@@ -0,0 +1,365 @@
+#pragma once
+/**
+ * \file NETGeographicLib/MagneticModel.h
+ * \brief Header for NETGeographicLib::MagneticModel class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    ref class MagneticCircle;
+    ref class Geocentric;
+  /**
+   * \brief .NET wrapper for GeographicLib::MagneticModel.
+   *
+   * This class allows .NET applications to access GeographicLib::MagneticModel.
+   *
+   * Evaluate the earth's magnetic field according to a model.  At present only
+   * internal magnetic fields are handled.  These are due to the earth's code
+   * and crust; these vary slowly (over many years).  Excluded are the effects
+   * of currents in the ionosphere and magnetosphere which have daily and
+   * annual variations.
+   *
+   * See \ref magnetic for details of how to install the magnetic model and the
+   * data format.
+   *
+   * See
+   * - General information:
+   *   - http://geomag.org/models/index.html
+   * - WMM2010:
+   *   - http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml
+   *   - http://ngdc.noaa.gov/geomag/WMM/data/WMM2010/WMM2010COF.zip
+   * - IGRF11:
+   *   - http://ngdc.noaa.gov/IAGA/vmod/igrf.html
+   *   - http://ngdc.noaa.gov/IAGA/vmod/igrf11coeffs.txt
+   *   - http://ngdc.noaa.gov/IAGA/vmod/geomag70_linux.tar.gz
+   * - EMM2010:
+   *   - http://ngdc.noaa.gov/geomag/EMM/index.html
+   *   - http://ngdc.noaa.gov/geomag/EMM/data/geomag/EMM2010_Sph_Windows_Linux.zip
+   *
+   * C# Example:
+   * \include example-MagneticModel.cs
+   * Managed C++ Example:
+   * \include example-MagneticModel.cpp
+   * Visual Basic Example:
+   * \include example-MagneticModel.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The () operator has been replaced with Field.
+   *
+   * The following functions are implemented as properties:
+   * Description, DateTime, MagneticFile, MagneticModelName,
+   * MagneticModelDirectory, MinHeight, MaxHeight, MinTime, MaxTime,
+   * MajorRadius, and Flattening.
+   **********************************************************************/
+    public ref class MagneticModel
+    {
+        private:
+        // The pointer to the unmanaged GeographicLib::MagneticModel.
+        const GeographicLib::MagneticModel* m_pMagneticModel;
+
+        // The finalizer frees the unmanaged memory when the object is destroyed.
+        !MagneticModel(void);
+    public:
+
+        /** \name Setting up the magnetic model
+         **********************************************************************/
+        ///@{
+        /**
+         * Construct a magnetic model.
+         *
+         * @param[in] name the name of the model.
+         * @param[in] path (optional) directory for data file.
+         * @param[in] earth (optional) Geocentric object for converting
+         *   coordinates.
+         * @exception GeographicErr if the data file cannot be found, is
+         *   unreadable, or is corrupt.
+         * @exception std::bad_alloc if the memory necessary for storing the model
+         *   can't be allocated.
+         *
+         * A filename is formed by appending ".wmm" (World Magnetic Model) to the
+         * name.  If \e path is specified (and is non-empty), then the file is
+         * loaded from directory, \e path.  Otherwise the path is given by the
+         * DefaultMagneticPath().
+         *
+         * This file contains the metadata which specifies the properties of the
+         * model.  The coefficients for the spherical harmonic sums are obtained
+         * from a file obtained by appending ".cof" to metadata file (so the
+         * filename ends in ".wwm.cof").
+         *
+         * The model is not tied to a particular ellipsoidal model of the earth.
+         * The final earth argument to the constructor specifies an ellipsoid to
+         * allow geodetic coordinates to the transformed into the spherical
+         * coordinates used in the spherical harmonic sum.
+         **********************************************************************/
+        MagneticModel(System::String^ name,
+                      System::String^ path,
+                      Geocentric^ earth);
+        /**
+         * Construct a magnetic model that assumes the WGS84 ellipsoid.
+         *
+         * @param[in] name the name of the model.
+         * @param[in] path (optional) directory for data file.
+         * @exception GeographicErr if the data file cannot be found, is
+         *   unreadable, or is corrupt.
+         * @exception GeographicErr if the memory necessary for storing the model
+         *   can't be allocated.
+         *
+         * A filename is formed by appending ".wmm" (World Magnetic Model) to the
+         * name.  If \e path is specified (and is non-empty), then the file is
+         * loaded from directory, \e path.  Otherwise the path is given by the
+         * DefaultMagneticPath().
+         *
+         * This file contains the metadata which specifies the properties of the
+         * model.  The coefficients for the spherical harmonic sums are obtained
+         * from a file obtained by appending ".cof" to metadata file (so the
+         * filename ends in ".wwm.cof").
+         *
+         * The model is not tied to a particular ellipsoidal model of the earth.
+         * The final earth argument to the constructor specifies an ellipsoid to
+         * allow geodetic coordinates to the transformed into the spherical
+         * coordinates used in the spherical harmonic sum.
+         **********************************************************************/
+        MagneticModel(System::String^ name,
+                      System::String^ path);
+
+        ///@}
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~MagneticModel()
+        { this->!MagneticModel(); }
+
+        /** \name Compute the magnetic field
+         **********************************************************************/
+        ///@{
+        /**
+         * Evaluate the components of the geomagnetic field.
+         *
+         * @param[in] t the time (years).
+         * @param[in] lat latitude of the point (degrees).
+         * @param[in] lon longitude of the point (degrees).
+         * @param[in] h the height of the point above the ellipsoid (meters).
+         * @param[out] Bx the easterly component of the magnetic field (nanotesla).
+         * @param[out] By the northerly component of the magnetic field (nanotesla).
+         * @param[out] Bz the vertical (up) component of the magnetic field
+         *   (nanotesla).
+         **********************************************************************/
+        void Field(double t, double lat, double lon, double h,
+                        [System::Runtime::InteropServices::Out] double% Bx,
+                        [System::Runtime::InteropServices::Out] double% By,
+                        [System::Runtime::InteropServices::Out] double% Bz);
+
+        /**
+         * Evaluate the components of the geomagnetic field and their time
+         * derivatives
+         *
+         * @param[in] t the time (years).
+         * @param[in] lat latitude of the point (degrees).
+         * @param[in] lon longitude of the point (degrees).
+         * @param[in] h the height of the point above the ellipsoid (meters).
+         * @param[out] Bx the easterly component of the magnetic field (nanotesla).
+         * @param[out] By the northerly component of the magnetic field (nanotesla).
+         * @param[out] Bz the vertical (up) component of the magnetic field
+         *   (nanotesla).
+         * @param[out] Bxt the rate of change of \e Bx (nT/yr).
+         * @param[out] Byt the rate of change of \e By (nT/yr).
+         * @param[out] Bzt the rate of change of \e Bz (nT/yr).
+         **********************************************************************/
+        void Field(double t, double lat, double lon, double h,
+                        [System::Runtime::InteropServices::Out] double% Bx,
+                        [System::Runtime::InteropServices::Out] double% By,
+                        [System::Runtime::InteropServices::Out] double% Bz,
+                        [System::Runtime::InteropServices::Out] double% Bxt,
+                        [System::Runtime::InteropServices::Out] double% Byt,
+                        [System::Runtime::InteropServices::Out] double% Bzt);
+
+        /**
+         * Create a MagneticCircle object to allow the geomagnetic field at many
+         * points with constant \e lat, \e h, and \e t and varying \e lon to be
+         * computed efficiently.
+         *
+         * @param[in] t the time (years).
+         * @param[in] lat latitude of the point (degrees).
+         * @param[in] h the height of the point above the ellipsoid (meters).
+         * @exception std::bad_alloc if the memory necessary for creating a
+         *   MagneticCircle can't be allocated.
+         * @return a MagneticCircle object whose MagneticCircle::Field(double
+         *   lon) member function computes the field at particular values of \e
+         *   lon.
+         *
+         * If the field at several points on a circle of latitude need to be
+         * calculated then creating a MagneticCircle and using its member functions
+         * will be substantially faster, especially for high-degree models.
+         **********************************************************************/
+        MagneticCircle^ Circle(double t, double lat, double h);
+
+        /**
+         * Compute various quantities dependent on the magnetic field.
+         *
+         * @param[in] Bx the \e x (easterly) component of the magnetic field (nT).
+         * @param[in] By the \e y (northerly) component of the magnetic field (nT).
+         * @param[in] Bz the \e z (vertical, up positive) component of the magnetic
+         *   field (nT).
+         * @param[out] H the horizontal magnetic field (nT).
+         * @param[out] F the total magnetic field (nT).
+         * @param[out] D the declination of the field (degrees east of north).
+         * @param[out] I the inclination of the field (degrees down from
+         *   horizontal).
+         **********************************************************************/
+        static void FieldComponents(double Bx, double By, double Bz,
+                        [System::Runtime::InteropServices::Out] double% H,
+                        [System::Runtime::InteropServices::Out] double% F,
+                        [System::Runtime::InteropServices::Out] double% D,
+                        [System::Runtime::InteropServices::Out] double% I);
+
+        /**
+         * Compute various quantities dependent on the magnetic field and its rate
+         * of change.
+         *
+         * @param[in] Bx the \e x (easterly) component of the magnetic field (nT).
+         * @param[in] By the \e y (northerly) component of the magnetic field (nT).
+         * @param[in] Bz the \e z (vertical, up positive) component of the magnetic
+         *   field (nT).
+         * @param[in] Bxt the rate of change of \e Bx (nT/yr).
+         * @param[in] Byt the rate of change of \e By (nT/yr).
+         * @param[in] Bzt the rate of change of \e Bz (nT/yr).
+         * @param[out] H the horizontal magnetic field (nT).
+         * @param[out] F the total magnetic field (nT).
+         * @param[out] D the declination of the field (degrees east of north).
+         * @param[out] I the inclination of the field (degrees down from
+         *   horizontal).
+         * @param[out] Ht the rate of change of \e H (nT/yr).
+         * @param[out] Ft the rate of change of \e F (nT/yr).
+         * @param[out] Dt the rate of change of \e D (degrees/yr).
+         * @param[out] It the rate of change of \e I (degrees/yr).
+         **********************************************************************/
+        static void FieldComponents(double Bx, double By, double Bz,
+                                    double Bxt, double Byt, double Bzt,
+                        [System::Runtime::InteropServices::Out] double% H,
+                        [System::Runtime::InteropServices::Out] double% F,
+                        [System::Runtime::InteropServices::Out] double% D,
+                        [System::Runtime::InteropServices::Out] double% I,
+                        [System::Runtime::InteropServices::Out] double% Ht,
+                        [System::Runtime::InteropServices::Out] double% Ft,
+                        [System::Runtime::InteropServices::Out] double% Dt,
+                        [System::Runtime::InteropServices::Out] double% It);
+        ///@}
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return the description of the magnetic model, if available, from the
+         *   Description file in the data file; if absent, return "NONE".
+         **********************************************************************/
+        property System::String^ Description { System::String^ get(); }
+
+        /**
+         * @return date of the model, if available, from the ReleaseDate field in
+         *   the data file; if absent, return "UNKNOWN".
+         **********************************************************************/
+        property System::String^ DateTime { System::String^ get(); }
+
+        /**
+         * @return full file name used to load the magnetic model.
+         **********************************************************************/
+        property System::String^ MagneticFile { System::String^ get(); }
+
+        /**
+         * @return "name" used to load the magnetic model (from the first argument
+         *   of the constructor, but this may be overridden by the model file).
+         **********************************************************************/
+        property System::String^ MagneticModelName { System::String^ get(); }
+
+        /**
+         * @return directory used to load the magnetic model.
+         **********************************************************************/
+        property System::String^ MagneticModelDirectory { System::String^ get(); }
+
+        /**
+         * @return the minimum height above the ellipsoid (in meters) for which
+         *   this MagneticModel should be used.
+         *
+         * Because the model will typically provide useful results
+         * slightly outside the range of allowed heights, no check of \e t
+         * argument is made by MagneticModel::Field() or
+         * MagneticModel::Circle.
+         **********************************************************************/
+        property double MinHeight { double get(); }
+
+        /**
+         * @return the maximum height above the ellipsoid (in meters) for which
+         *   this MagneticModel should be used.
+         *
+         * Because the model will typically provide useful results
+         * slightly outside the range of allowed heights, no check of \e t
+         * argument is made by MagneticModel::Field() or
+         * MagneticModel::Circle.
+         **********************************************************************/
+        property double MaxHeight { double get(); }
+
+        /**
+         * @return the minimum time (in years) for which this MagneticModel should
+         *   be used.
+         *
+         * Because the model will typically provide useful results
+         * slightly outside the range of allowed times, no check of \e t
+         * argument is made by MagneticModel::Field() or
+         * MagneticModel::Circle.
+         **********************************************************************/
+        property double MinTime { double get(); }
+
+        /**
+         * @return the maximum time (in years) for which this MagneticModel should
+         *   be used.
+         *
+         * Because the model will typically provide useful results
+         * slightly outside the range of allowed times, no check of \e t
+         * argument is made by MagneticModel::Field() or
+         * MagneticModel::Circle.
+         **********************************************************************/
+        property double MaxTime { double get(); }
+
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value of \e a inherited from the Geocentric object used in the
+         *   constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the Geocentric object used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+        ///@}
+
+        /**
+         * @return the default path for magnetic model data files.
+         *
+         * This is the value of the environment variable MAGNETIC_PATH, if set;
+         * otherwise, it is $GEOGRAPHICLIB_DATA/magnetic if the environment
+         * variable GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time
+         * default (/usr/local/share/GeographicLib/magnetic on non-Windows systems
+         * and C:/Documents and Settings/All Users/Application
+         * Data/GeographicLib/magnetic on Windows systems).
+         **********************************************************************/
+        static System::String^ DefaultMagneticPath();
+
+        /**
+         * @return the default name for the magnetic model.
+         *
+         * This is the value of the environment variable MAGNETIC_NAME, if set,
+         * otherwise, it is "wmm2010".  The MagneticModel class does not use this
+         * function; it is just provided as a convenience for a calling program
+         * when constructing a MagneticModel object.
+         **********************************************************************/
+        static System::String^ DefaultMagneticName();
+    };
+} //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/NETGeographicLib.cpp b/dotnet/NETGeographicLib/NETGeographicLib.cpp
new file mode 100644
index 0000000..001109a
--- /dev/null
+++ b/dotnet/NETGeographicLib/NETGeographicLib.cpp
@@ -0,0 +1,49 @@
+/**
+ * \file NETGeographicLib/NETGeographicLib.cpp
+ * \brief Implementation for NETGeographicLib Utility functions.
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/Config.h"
+#include "NETGeographicLib.h"
+
+using namespace System::Runtime::InteropServices;
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+std::string StringConvert::ManagedToUnmanaged( System::String^ s )
+{
+    System::IntPtr buffer = Marshal::StringToHGlobalAnsi(s);
+    std::string output( reinterpret_cast<const char*>(buffer.ToPointer()) );
+    Marshal::FreeHGlobal(buffer);
+    return output;
+}
+
+//*****************************************************************************
+System::String^ VersionInfo::GetString()
+{
+    return gcnew System::String(GEOGRAPHICLIB_VERSION_STRING);
+}
+
+//*****************************************************************************
+int VersionInfo::MajorVersion()
+{
+    return GEOGRAPHICLIB_VERSION_MAJOR;
+}
+
+//*****************************************************************************
+int VersionInfo::MinorVersion()
+{
+    return GEOGRAPHICLIB_VERSION_MINOR;
+}
+
+//*****************************************************************************
+int VersionInfo::Patch()
+{
+    return GEOGRAPHICLIB_VERSION_PATCH;
+}
diff --git a/dotnet/NETGeographicLib/NETGeographicLib.h b/dotnet/NETGeographicLib/NETGeographicLib.h
new file mode 100644
index 0000000..720af11
--- /dev/null
+++ b/dotnet/NETGeographicLib/NETGeographicLib.h
@@ -0,0 +1,256 @@
+#pragma once
+/**
+ * \file NETGeographicLib/NETGeographicLib.h
+ * \brief Header for NETGeographicLib::NETGeographicLib objects
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include <string>
+
+using namespace System;
+
+namespace NETGeographicLib
+{
+    enum class captype {
+      CAP_NONE = 0U,
+      CAP_C1   = 1U<<0,
+      CAP_C1p  = 1U<<1,
+      CAP_C2   = 1U<<2,
+      CAP_C3   = 1U<<3,
+      CAP_C4   = 1U<<4,
+      CAP_ALL  = 0x1FU,
+      OUT_ALL  = 0x7F80U,
+    };
+
+    /**
+     * Bit masks for what calculations to do.  These masks do double duty.
+     * They signify to the GeodesicLine::GeodesicLine constructor and to
+     * Geodesic::Line what capabilities should be included in the GeodesicLine
+     * object.  They also specify which results to return in the general
+     * routines Geodesic::GenDirect and Geodesic::GenInverse routines.
+     **********************************************************************/
+    public enum class Mask {
+      /**
+       * No capabilities, no output.
+       * @hideinitializer
+       **********************************************************************/
+      NONE          = 0U,
+      /**
+       * Calculate latitude \e lat2.  (It's not necessary to include this as a
+       * capability to GeodesicLine because this is included by default.)
+       * @hideinitializer
+       **********************************************************************/
+      LATITUDE      = 1U<<7  | unsigned(captype::CAP_NONE),
+      /**
+       * Calculate longitude \e lon2.
+       * @hideinitializer
+       **********************************************************************/
+      LONGITUDE     = 1U<<8  | unsigned(captype::CAP_C3),
+      /**
+       * Calculate azimuths \e azi1 and \e azi2.  (It's not necessary to
+       * include this as a capability to GeodesicLine because this is included
+       * by default.)
+       * @hideinitializer
+       **********************************************************************/
+      AZIMUTH       = 1U<<9  | unsigned(captype::CAP_NONE),
+      /**
+       * Calculate distance \e s12.
+       * @hideinitializer
+       **********************************************************************/
+      DISTANCE      = 1U<<10 | unsigned(captype::CAP_C1),
+      /**
+       * Allow distance \e s12 to be used as input in the direct geodesic
+       * problem.
+       * @hideinitializer
+       **********************************************************************/
+      DISTANCE_IN   = 1U<<11 | unsigned(captype::CAP_C1) |
+                          unsigned(captype::CAP_C1p),
+      /**
+       * Calculate reduced length \e m12.
+       * @hideinitializer
+       **********************************************************************/
+      REDUCEDLENGTH = 1U<<12 | unsigned(captype::CAP_C1) |
+                          unsigned(captype::CAP_C2),
+      /**
+       * Calculate geodesic scales \e M12 and \e M21.
+       * @hideinitializer
+       **********************************************************************/
+      GEODESICSCALE = 1U<<13 | unsigned(captype::CAP_C1) |
+                          unsigned(captype::CAP_C2),
+      /**
+       * Calculate area \e S12.
+       * @hideinitializer
+       **********************************************************************/
+      AREA          = 1U<<14 | unsigned(captype::CAP_C4),
+      /**
+       * All capabilities, calculate everything.
+       * @hideinitializer
+       **********************************************************************/
+      ALL           = unsigned(captype::OUT_ALL) | unsigned(captype::CAP_ALL),
+    };
+
+    /**
+     * @brief The version information.
+     **********************************************************************/
+    public ref class VersionInfo
+    {
+    private:
+        VersionInfo() {}
+    public:
+        /**
+         * @return The version string.
+         *******************************************************************/
+        static System::String^ GetString();
+        /**
+         * @return The major version.
+         *******************************************************************/
+        static int MajorVersion();
+        /**
+         * @return The minor version.
+         *******************************************************************/
+        static int MinorVersion();
+        /**
+         * @return The patch number.
+         *******************************************************************/
+        static int Patch();
+    };
+
+    /**
+     * @brief Exception class for NETGeographicLib
+     **********************************************************************/
+    public ref class GeographicErr : public System::Exception
+    {
+    public:
+        /**
+         * @brief Creates an exception using an unmanaged string.
+         * @param[in] msg The error string.
+         ******************************************************************/
+        GeographicErr( const char* msg ) :
+            System::Exception( gcnew System::String( msg ) ) {}
+        /**
+         * @brief Creates an exception using a managed string.
+         * @param[in] msg The error string.
+         ******************************************************************/
+        GeographicErr( System::String^ msg ) : System::Exception( msg ) {}
+    };
+
+    ref class StringConvert
+    {
+        StringConvert() {}
+    public:
+        static std::string ManagedToUnmanaged( System::String^ s );
+        static System::String^ UnmanagedToManaged( const std::string& s )
+        {   return gcnew System::String( s.c_str() ); }
+    };
+
+    /**
+     * @brief Physical constants
+     *
+     * References:<br>
+     * http://www.orekit.org/static/apidocs/org/orekit/utils/Constants.html<br>
+     * A COMPENDIUM OF EARTH CONSTANTS RELEVANT TO AUSTRALIAN GEODETIC SCIENCE<br>
+     * http://espace.library.curtin.edu.au/R?func=dbin-jump-full&local_base=gen01-era02&object_id=146669
+     **********************************************************************/
+    public ref class Constants
+    {
+    private:
+        Constants() {}
+    public:
+
+        /**
+         * @brief WGS72 Parameters
+         **********************************************************************/
+        ref class WGS72
+        {
+        private:
+            WGS72() {}
+            // The equatorial radius in meters.
+            static const double m_MajorRadius = 6378135.0;
+            // The flattening of the ellipsoid
+            static const double m_Flattening = 1.0 / 298.26;
+            // The gravitational constant in meters<sup>3</sup>/second<sup>2</sup>.
+            static const double m_GravitationalConstant = 3.986008e+14;
+            // The spin rate of the Earth in radians/second.
+            static const double m_EarthRate = 7.292115147e-5;
+            // dynamical form factor
+            static const double m_J2 = 1.0826158e-3;
+        public:
+            //! The equatorial radius in meters.
+            static property double MajorRadius { double get() { return m_MajorRadius; } }
+            //! The flattening of the ellipsoid
+            static property double Flattening { double get() { return m_Flattening; } }
+            //! The gravitational constant in meters<sup>3</sup>/second<sup>2</sup>.
+            static property double GravitationalConstant { double get() { return m_GravitationalConstant; } }
+            //! The spin rate of the Earth in radians/second.
+            static property double EarthRate { double get() { return m_EarthRate; } }
+            //! The dynamical form factor (J2).
+            static property double J2 { double get() { return m_J2; } }
+        };
+
+        /**
+         * @brief WGS84 Parameters
+         **********************************************************************/
+        ref class WGS84
+        {
+        private:
+            WGS84() {}
+            // The equatorial radius in meters.
+            static const double m_MajorRadius = 6378137.0;
+            // The flattening of the ellipsoid
+            static const double m_Flattening = 1.0 / 298.257223563;
+            // The gravitational constant in meters<sup>3</sup>/second<sup>2</sup>.
+            // I have also seen references that set this value to 3.986004418e+14.
+            // The following value is used to maintain consistency with GeographicLib.
+            static const double m_GravitationalConstant = 3.986005e+14;
+            // The spin rate of the Earth in radians/second.
+            static const double m_EarthRate = 7.292115e-5;
+            // dynamical form factor
+            static const double m_J2 = 1.08263e-3;
+        public:
+            //! The equatorial radius in meters.
+            static property double MajorRadius { double get() { return m_MajorRadius; } }
+            //! The flattening of the ellipsoid
+            static property double Flattening { double get() { return m_Flattening; } }
+            //! The gravitational constant in meters<sup>3</sup>/second<sup>2</sup>.
+            static property double GravitationalConstant { double get() { return m_GravitationalConstant; } }
+            //! The spin rate of the Earth in radians/second.
+            static property double EarthRate { double get() { return m_EarthRate; } }
+            //! The dynamical form factor (J2).
+            static property double J2 { double get() { return m_J2; } }
+        };
+
+        /**
+         * @brief GRS80 Parameters
+         **********************************************************************/
+        ref class GRS80
+        {
+        private:
+            GRS80() {}
+            // The equatorial radius in meters.
+            static const double m_MajorRadius = 6378137.0;
+            // The flattening of the ellipsoid
+            static const double m_Flattening = 1.0 / 298.257222100882711;
+            // The gravitational constant in meters<sup>3</sup>/second<sup>2</sup>.
+            static const double m_GravitationalConstant = 3.986005e+14;
+            // The spin rate of the Earth in radians/second.
+            static const double m_EarthRate = 7.292115e-5;
+            // dynamical form factor
+            static const double m_J2 = 1.08263e-3;
+        public:
+            //! The equatorial radius in meters.
+            static property double MajorRadius { double get() { return m_MajorRadius; } }
+            //! The flattening of the ellipsoid
+            static property double Flattening { double get() { return m_Flattening; } }
+            //! The gravitational constant in meters<sup>3</sup>/second<sup>2</sup>.
+            static property double GravitationalConstant { double get() { return m_GravitationalConstant; } }
+            //! The spin rate of the Earth in radians/second.
+            static property double EarthRate { double get() { return m_EarthRate; } }
+            //! The dynamical form factor (J2).
+            static property double J2 { double get() { return m_J2; } }
+        };
+    };
+}  // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/NormalGravity.cpp b/dotnet/NETGeographicLib/NormalGravity.cpp
new file mode 100644
index 0000000..b693eea
--- /dev/null
+++ b/dotnet/NETGeographicLib/NormalGravity.cpp
@@ -0,0 +1,174 @@
+/**
+ * \file NETGeographicLib/NormalGravity.cpp
+ * \brief Implementation for NETGeographicLib::NormalGravity class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/NormalGravity.hpp"
+#include "NormalGravity.h"
+#include "Geocentric.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::NormalGravity";
+
+//*****************************************************************************
+NormalGravity::!NormalGravity(void)
+{
+    if ( m_pNormalGravity != NULL )
+    {
+        delete m_pNormalGravity;
+        m_pNormalGravity = NULL;
+    }
+}
+
+//*****************************************************************************
+NormalGravity::NormalGravity(double a, double GM, double omega, double f, double J2)
+{
+    try
+    {
+        m_pNormalGravity = new GeographicLib::NormalGravity( a, GM, omega, f, J2 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+NormalGravity::NormalGravity(StandardModels model)
+{
+    try
+    {
+        m_pNormalGravity = model == StandardModels::WGS84 ?
+            new GeographicLib::NormalGravity( GeographicLib::NormalGravity::WGS84 ) :
+            new GeographicLib::NormalGravity( GeographicLib::NormalGravity::GRS80 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+NormalGravity::NormalGravity( const GeographicLib::NormalGravity& g)
+{
+    try
+    {
+        m_pNormalGravity = new GeographicLib::NormalGravity( g );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+double NormalGravity::SurfaceGravity(double lat)
+{
+    return m_pNormalGravity->SurfaceGravity( lat );
+}
+
+//*****************************************************************************
+double NormalGravity::Gravity(double lat, double h,
+    [System::Runtime::InteropServices::Out] double% gammay,
+    [System::Runtime::InteropServices::Out] double% gammaz)
+{
+    double ly, lz;
+    double out = m_pNormalGravity->Gravity( lat, h, ly, lz );
+    gammay = ly;
+    gammaz = lz;
+    return out;
+}
+
+//*****************************************************************************
+double NormalGravity::U(double X, double Y, double Z,
+                [System::Runtime::InteropServices::Out] double% gammaX,
+                [System::Runtime::InteropServices::Out] double% gammaY,
+                [System::Runtime::InteropServices::Out] double% gammaZ)
+{
+    double lx, ly, lz;
+    double out = m_pNormalGravity->U( X, Y, Z, lx, ly, lz );
+    gammaX = lx;
+    gammaY = ly;
+    gammaZ = lz;
+    return out;
+}
+
+//*****************************************************************************
+double NormalGravity::V0(double X, double Y, double Z,
+                [System::Runtime::InteropServices::Out] double% GammaX,
+                [System::Runtime::InteropServices::Out] double% GammaY,
+                [System::Runtime::InteropServices::Out] double% GammaZ)
+{
+    double lx, ly, lz;
+    double out = m_pNormalGravity->V0( X, Y, Z, lx, ly, lz );
+    GammaX = lx;
+    GammaY = ly;
+    GammaZ = lz;
+    return out;
+}
+
+//*****************************************************************************
+double NormalGravity::Phi(double X, double Y,
+    [System::Runtime::InteropServices::Out] double% fX,
+    [System::Runtime::InteropServices::Out] double% fY)
+{
+    double lx, ly;
+    double out = m_pNormalGravity->Phi( X, Y, lx, ly );
+    fX = lx;
+    fY = ly;
+    return out;
+}
+
+//*****************************************************************************
+Geocentric^ NormalGravity::Earth()
+{
+    return gcnew Geocentric( m_pNormalGravity->Earth() );
+}
+
+//*****************************************************************************
+double NormalGravity::MajorRadius::get()
+{ return m_pNormalGravity->MajorRadius(); }
+
+//*****************************************************************************
+double NormalGravity::MassConstant::get()
+{ return m_pNormalGravity->MassConstant(); }
+
+//*****************************************************************************
+double NormalGravity::DynamicalFormFactor(int n)
+{ return m_pNormalGravity->DynamicalFormFactor(n); }
+
+//*****************************************************************************
+double NormalGravity::AngularVelocity::get()
+{ return m_pNormalGravity->AngularVelocity(); }
+
+//*****************************************************************************
+double NormalGravity::Flattening::get()
+{ return m_pNormalGravity->Flattening(); }
+
+//*****************************************************************************
+double NormalGravity::EquatorialGravity::get()
+{ return m_pNormalGravity->EquatorialGravity(); }
+
+//*****************************************************************************
+double NormalGravity::PolarGravity::get()
+{ return m_pNormalGravity->PolarGravity(); }
+
+//*****************************************************************************
+double NormalGravity::GravityFlattening::get()
+{ return m_pNormalGravity->GravityFlattening(); }
+
+//*****************************************************************************
+double NormalGravity::SurfacePotential::get()
+{ return m_pNormalGravity->SurfacePotential(); }
diff --git a/dotnet/NETGeographicLib/NormalGravity.h b/dotnet/NETGeographicLib/NormalGravity.h
new file mode 100644
index 0000000..2deeecb
--- /dev/null
+++ b/dotnet/NETGeographicLib/NormalGravity.h
@@ -0,0 +1,319 @@
+#pragma once
+/**
+ * \file NETGeographicLib/NormalGravity.h
+ * \brief Header for NETGeographicLib::NormalGravity class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    ref class Geocentric;
+  /**
+   * \brief .NET wrapper for GeographicLib::NormalGravity.
+   *
+   * This class allows .NET applications to access GeographicLib::NormalGravity.
+   *
+   * "Normal" gravity refers to an idealization of the earth which is modeled
+   * as an rotating ellipsoid.  The eccentricity of the ellipsoid, the rotation
+   * speed, and the distribution of mass within the ellipsoid are such that the
+   * surface of the ellipsoid is a surface of constant potential (gravitational
+   * plus centrifugal).  The acceleration due to gravity is therefore
+   * perpendicular to the surface of the ellipsoid.
+   *
+   * There is a closed solution to this problem which is implemented here.
+   * Series "approximations" are only used to evaluate certain combinations of
+   * elementary functions where use of the closed expression results in a loss
+   * of accuracy for small arguments due to cancellation of the two leading
+   * terms.  However these series include sufficient terms to give full machine
+   * precision.
+   *
+   * Definitions:
+   * - <i>V</i><sub>0</sub>, the gravitational contribution to the normal
+   *   potential;
+   * - Φ, the rotational contribution to the normal potential;
+   * - \e U = <i>V</i><sub>0</sub> + Φ, the total
+   *   potential;
+   * - <b>Γ</b> = ∇<i>V</i><sub>0</sub>, the acceleration due to
+   *   mass of the earth;
+   * - <b>f</b> = ∇Φ, the centrifugal acceleration;
+   * - <b>γ</b> = ∇\e U = <b>Γ</b> + <b>f</b>, the normal
+   *   acceleration;
+   * - \e X, \e Y, \e Z, geocentric coordinates;
+   * - \e x, \e y, \e z, local cartesian coordinates used to denote the east,
+   *   north and up directions.
+   *
+   * References:
+   * - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San
+   *   Francisco, 1967), Secs. 1-19, 2-7, 2-8 (2-9, 2-10), 6-2 (6-3).
+   * - H. Moritz, Geodetic Reference System 1980, J. Geodesy 54(3), 395-405
+   *   (1980) http://dx.doi.org/10.1007/BF02521480
+   *
+   * C# Example:
+   * \include example-NormalGravity.cs
+   * Managed C++ Example:
+   * \include example-NormalGravity.cpp
+   * Visual Basic Example:
+   * \include example-NormalGravity.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A constructor has been provided for creating standard WGS84 and GRS80
+   * gravity models.
+   *
+   * The following functions are implemented as properties:
+   * MajorRadius, MassConstant, AngularVelocity, Flattening,
+   * EquatorialGravity, PolarGravity, GravityFlattening, SurfacePotential.
+   **********************************************************************/
+    public ref class NormalGravity
+    {
+        private:
+        // a pointer to the unmanaged GeographicLib::NormalGravity.
+        const GeographicLib::NormalGravity* m_pNormalGravity;
+
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !NormalGravity(void);
+    public:
+        //! The enumerated standard gravity models.
+        enum class StandardModels
+        {
+            WGS84,  //!< WGS84 gravity model.
+            GRS80   //!< GRS80 gravity model.
+        };
+
+        /** \name Setting up the normal gravity
+         **********************************************************************/
+        ///@{
+        /**
+         * Constructor for the normal gravity.
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] GM mass constant of the ellipsoid
+         *   (meters<sup>3</sup>/seconds<sup>2</sup>); this is the product of \e G
+         *   the gravitational constant and \e M the mass of the earth (usually
+         *   including the mass of the earth's atmosphere).
+         * @param[in] omega the angular velocity (rad s<sup>−1</sup>).
+         * @param[in] f the flattening of the ellipsoid.
+         * @param[in] J2 dynamical form factor.
+         * @exception if \e a is not positive or the other constants are
+         *   inconsistent (see below).
+         *
+         * Exactly one of \e f and \e J2 should be positive and this will be used
+         * to define the ellipsoid.  The shape of the ellipsoid can be given in one
+         * of two ways:
+         * - geometrically, the ellipsoid is defined by the flattening \e f = (\e a
+         *   − \e b) / \e a, where \e a and \e b are the equatorial radius
+         *   and the polar semi-axis.
+         * - physically, the ellipsoid is defined by the dynamical form factor
+         *   <i>J</i><sub>2</sub> = (\e C − \e A) / <i>Ma</i><sup>2</sup>,
+         *   where \e A and \e C are the equatorial and polar moments of inertia
+         *   and \e M is the mass of the earth.
+         **********************************************************************/
+        NormalGravity(double a, double GM, double omega, double f, double J2);
+
+        /**
+         * A constructor for creating standard gravity models..
+         * @param[in] model Specifies the desired model.
+         **********************************************************************/
+        NormalGravity(StandardModels model);
+
+        /**
+         * A constructor that accepts a GeographicLib::NormalGravity.
+         * For internal use only.
+         * @param g An existing GeographicLib::NormalGravity.
+         **********************************************************************/
+        NormalGravity( const GeographicLib::NormalGravity& g);
+        ///@}
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~NormalGravity()
+        { this->!NormalGravity(); }
+
+        /** \name Compute the gravity
+         **********************************************************************/
+        ///@{
+        /**
+         * Evaluate the gravity on the surface of the ellipsoid.
+         *
+         * @param[in] lat the geographic latitude (degrees).
+         * @return γ the acceleration due to gravity, positive downwards
+         *   (m s<sup>−2</sup>).
+         *
+         * Due to the axial symmetry of the ellipsoid, the result is independent of
+         * the value of the longitude.  This acceleration is perpendicular to the
+         * surface of the ellipsoid.  It includes the effects of the earth's
+         * rotation.
+         **********************************************************************/
+        double SurfaceGravity(double lat);
+
+        /**
+         * Evaluate the gravity at an arbitrary point above (or below) the
+         * ellipsoid.
+         *
+         * @param[in] lat the geographic latitude (degrees).
+         * @param[in] h the height above the ellipsoid (meters).
+         * @param[out] gammay the northerly component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gammaz the upward component of the acceleration
+         *   (m s<sup>−2</sup>); this is usually negative.
+         * @return \e U the corresponding normal potential.
+         *
+         * Due to the axial symmetry of the ellipsoid, the result is independent of
+         * the value of the longitude and the easterly component of the
+         * acceleration vanishes, \e gammax = 0.  The function includes the effects
+         * of the earth's rotation.  When \e h = 0, this function gives \e gammay =
+         * 0 and the returned value matches that of NormalGravity::SurfaceGravity.
+         **********************************************************************/
+        double Gravity(double lat, double h,
+            [System::Runtime::InteropServices::Out] double% gammay,
+            [System::Runtime::InteropServices::Out] double% gammaz);
+
+        /**
+         * Evaluate the components of the acceleration due to gravity and the
+         * centrifugal acceleration in geocentric coordinates.
+         *
+         * @param[in] X geocentric coordinate of point (meters).
+         * @param[in] Y geocentric coordinate of point (meters).
+         * @param[in] Z geocentric coordinate of point (meters).
+         * @param[out] gammaX the \e X component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gammaY the \e Y component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] gammaZ the \e Z component of the acceleration
+         *   (m s<sup>−2</sup>).
+         * @return \e U = <i>V</i><sub>0</sub> + Φ the sum of the
+         *   gravitational and centrifugal potentials
+         *   (m<sup>2</sup> s<sup>−2</sup>).
+         *
+         * The acceleration given by <b>γ</b> = ∇\e U =
+         * ∇<i>V</i><sub>0</sub> + ∇Φ = <b>Γ</b> + <b>f</b>.
+         **********************************************************************/
+        double U(double X, double Y, double Z,
+                     [System::Runtime::InteropServices::Out] double% gammaX,
+                     [System::Runtime::InteropServices::Out] double% gammaY,
+                     [System::Runtime::InteropServices::Out] double% gammaZ);
+
+        /**
+         * Evaluate the components of the acceleration due to gravity alone in
+         * geocentric coordinates.
+         *
+         * @param[in] X geocentric coordinate of point (meters).
+         * @param[in] Y geocentric coordinate of point (meters).
+         * @param[in] Z geocentric coordinate of point (meters).
+         * @param[out] GammaX the \e X component of the acceleration due to gravity
+         *   (m s<sup>−2</sup>).
+         * @param[out] GammaY the \e Y component of the acceleration due to gravity
+         *   (m s<sup>−2</sup>).
+         * @param[out] GammaZ the \e Z component of the acceleration due to gravity
+         *   (m s<sup>−2</sup>).
+         * @return <i>V</i><sub>0</sub> the gravitational potential
+         *   (m<sup>2</sup> s<sup>−2</sup>).
+         *
+         * This function excludes the centrifugal acceleration and is appropriate
+         * to use for space applications.  In terrestrial applications, the
+         * function NormalGravity::U (which includes this effect) should usually be
+         * used.
+         **********************************************************************/
+        double V0(double X, double Y, double Z,
+                      [System::Runtime::InteropServices::Out] double% GammaX,
+                      [System::Runtime::InteropServices::Out] double% GammaY,
+                      [System::Runtime::InteropServices::Out] double% GammaZ);
+
+        /**
+         * Evaluate the centrifugal acceleration in geocentric coordinates.
+         *
+         * @param[in] X geocentric coordinate of point (meters).
+         * @param[in] Y geocentric coordinate of point (meters).
+         * @param[out] fX the \e X component of the centrifugal acceleration
+         *   (m s<sup>−2</sup>).
+         * @param[out] fY the \e Y component of the centrifugal acceleration
+         *   (m s<sup>−2</sup>).
+         * @return Φ the centrifugal potential (m<sup>2</sup>
+         *   s<sup>−2</sup>).
+         *
+         * Φ is independent of \e Z, thus \e fZ = 0.  This function
+         * NormalGravity::U sums the results of NormalGravity::V0 and
+         * NormalGravity::Phi.
+         **********************************************************************/
+        double Phi(double X, double Y,
+            [System::Runtime::InteropServices::Out] double% fX,
+            [System::Runtime::InteropServices::Out] double% fY);
+        ///@}
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e GM the mass constant of the ellipsoid
+         *   (m<sup>3</sup> s<sup>−2</sup>).  This is the value used in the
+         *   constructor.
+         **********************************************************************/
+        property double MassConstant { double get(); }
+
+        /**
+         * @return \e J<sub>n</sub> the dynamical form factors of the ellipsoid.
+         *
+         * If \e n = 2 (the default), this is the value of <i>J</i><sub>2</sub>
+         * used in the constructor.  Otherwise it is the zonal coefficient of the
+         * Legendre harmonic sum of the normal gravitational potential.  Note that
+         * \e J<sub>n</sub> = 0 if \e n is odd.  In most gravity applications,
+         * fully normalized Legendre functions are used and the corresponding
+         * coefficient is <i>C</i><sub><i>n</i>0</sub> = −\e J<sub>n</sub> /
+         * sqrt(2 \e n + 1).
+         **********************************************************************/
+        double DynamicalFormFactor(int n);
+
+        /**
+         * @return ω the angular velocity of the ellipsoid (rad
+         *   s<sup>−1</sup>).  This is the value used in the constructor.
+         **********************************************************************/
+        property double AngularVelocity { double get(); }
+
+        /**
+         * @return <i>f</i> the flattening of the ellipsoid (\e a − \e b)/\e
+         *   a.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return γ<sub>e</sub> the normal gravity at equator (m
+         *   s<sup>−2</sup>).
+         **********************************************************************/
+        property double EquatorialGravity { double get(); }
+
+        /**
+         * @return γ<sub>p</sub> the normal gravity at poles (m
+         *   s<sup>−2</sup>).
+         **********************************************************************/
+        property double PolarGravity { double get(); }
+
+        /**
+         * @return <i>f*</i> the gravity flattening (γ<sub>p</sub> −
+         *   γ<sub>e</sub>) / γ<sub>e</sub>.
+         **********************************************************************/
+        property double GravityFlattening { double get(); }
+
+        /**
+         * @return <i>U</i><sub>0</sub> the constant normal potential for the
+         *   surface of the ellipsoid (m<sup>2</sup> s<sup>−2</sup>).
+         **********************************************************************/
+        property double SurfacePotential { double get(); }
+
+        /**
+         * @return the Geocentric object used by this instance.
+         **********************************************************************/
+        Geocentric^ Earth();
+        ///@}
+    };
+} //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/OSGB.cpp b/dotnet/NETGeographicLib/OSGB.cpp
new file mode 100644
index 0000000..766398b
--- /dev/null
+++ b/dotnet/NETGeographicLib/OSGB.cpp
@@ -0,0 +1,134 @@
+/**
+ * \file NETGeographicLib/OSGB.cpp
+ * \brief Implementation for NETGeographicLib::OSGB class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/OSGB.hpp"
+#include "OSGB.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+void OSGB::Forward(double lat, double lon,
+                    [System::Runtime::InteropServices::Out] double% x,
+                    [System::Runtime::InteropServices::Out] double% y,
+                    [System::Runtime::InteropServices::Out] double% gamma,
+                    [System::Runtime::InteropServices::Out] double% k)
+{
+    double lx, ly, lgamma, lk;
+    GeographicLib::OSGB::Forward( lat, lon, lx, ly, lgamma, lk );
+    x = lx;
+    y = ly;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void OSGB::Reverse(double x, double y,
+                    [System::Runtime::InteropServices::Out] double% lat,
+                    [System::Runtime::InteropServices::Out] double% lon,
+                    [System::Runtime::InteropServices::Out] double% gamma,
+                    [System::Runtime::InteropServices::Out] double% k)
+{
+    double llat, llon, lgamma, lk;
+    GeographicLib::OSGB::Reverse( x, y, llat, llon, lgamma, lk );
+    lat = llat;
+    lon = llon;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void OSGB::Forward(double lat, double lon,
+    [System::Runtime::InteropServices::Out] double% x,
+    [System::Runtime::InteropServices::Out] double% y)
+{
+    double lx, ly;
+    GeographicLib::OSGB::Forward( lat, lon, lx, ly );
+    x = lx;
+    y = ly;
+}
+
+//*****************************************************************************
+void OSGB::Reverse(double x, double y,
+    [System::Runtime::InteropServices::Out] double% lat,
+    [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon;
+    GeographicLib::OSGB::Reverse( x, y, llat, llon );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+void OSGB::GridReference(double x, double y, int prec,
+    [System::Runtime::InteropServices::Out] System::String^% gridref)
+{
+    try
+    {
+        std::string lgridref;
+        GeographicLib::OSGB::GridReference( x, y, prec, lgridref );
+        gridref = gcnew System::String( lgridref.c_str() );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Memory allocation error in OSGB::GridReference" );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void OSGB::GridReference(System::String^ gridref,
+                    [System::Runtime::InteropServices::Out] double% x,
+                    [System::Runtime::InteropServices::Out] double% y,
+                    [System::Runtime::InteropServices::Out] int% prec,
+                    bool centerp )
+{
+    try
+    {
+        double lx, ly;
+        int lprec;
+        GeographicLib::OSGB::GridReference(
+            StringConvert::ManagedToUnmanaged( gridref ),
+            lx, ly, lprec, centerp );
+        x = lx;
+        y = ly;
+        prec = lprec;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+double OSGB::MajorRadius() { return GeographicLib::OSGB::MajorRadius(); }
+
+//*****************************************************************************
+double OSGB::Flattening() { return GeographicLib::OSGB::Flattening(); }
+
+//*****************************************************************************
+double OSGB::CentralScale() { return GeographicLib::OSGB::CentralScale(); }
+
+//*****************************************************************************
+double OSGB::OriginLatitude() { return GeographicLib::OSGB::OriginLatitude(); }
+
+//*****************************************************************************
+double OSGB::OriginLongitude()
+{ return GeographicLib::OSGB::OriginLongitude(); }
+
+//*****************************************************************************
+double OSGB::FalseNorthing() { return GeographicLib::OSGB::FalseNorthing(); }
+
+//*****************************************************************************
+double OSGB::FalseEasting() { return GeographicLib::OSGB::FalseEasting(); }
diff --git a/dotnet/NETGeographicLib/OSGB.h b/dotnet/NETGeographicLib/OSGB.h
new file mode 100644
index 0000000..6dcc754
--- /dev/null
+++ b/dotnet/NETGeographicLib/OSGB.h
@@ -0,0 +1,200 @@
+/**
+ * \file NETGeographicLib/OSGB.h
+ * \brief Header for NETGeographicLib::OSGB class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#pragma once
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::OSGB.
+   *
+   * This class allows .NET applications to access GeographicLib::OSGB.
+   *
+   * The class implements the coordinate system used by the Ordnance Survey for
+   * maps of Great Britain and conversions to the grid reference system.
+   *
+   * See
+   * - <a href="http://www.ordnancesurvey.co.uk/docs/support/guide-coordinate-systems-great-britain.pdf">
+   *   A guide to coordinate systems in Great Britain</a>
+   * - <a href="http://www.ordnancesurvey.co.uk/docs/support/national-grid.pdf">
+   *   Guide to the National Grid</a>
+   *
+   * \b WARNING: the latitudes and longitudes for the Ordnance Survey grid
+   * system do not use the WGS84 datum.  Do not use the values returned by this
+   * class in the UTMUPS, MGRS, or Geoid classes without first converting the
+   * datum (and vice versa).
+   *
+   * C# Example:
+   * \include example-OSGB.cs
+   * Managed C++ Example:
+   * \include example-OSGB.cpp
+   * Visual Basic Example:
+   * \include example-OSGB.vb
+   **********************************************************************/
+    public ref class OSGB
+    {
+        private:
+        // hide the constructor since all member are static
+        OSGB(void) {}
+    public:
+
+        /**
+         * Forward projection, from geographic to OSGB coordinates.
+         *
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * \e lat should be in the range [−90°, 90°]; \e lon
+         * should be in the range [−540°, 540°).
+         **********************************************************************/
+        static void Forward(double lat, double lon,
+                    [System::Runtime::InteropServices::Out] double% x,
+                    [System::Runtime::InteropServices::Out] double% y,
+                    [System::Runtime::InteropServices::Out] double% gamma,
+                    [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * Reverse projection, from OSGB coordinates to geographic.
+         *
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * The value of \e lon returned is in the range [−180°,
+         * 180°).
+         **********************************************************************/
+
+        static void Reverse(double x, double y,
+                    [System::Runtime::InteropServices::Out] double% lat,
+                    [System::Runtime::InteropServices::Out] double% lon,
+                    [System::Runtime::InteropServices::Out] double% gamma,
+                    [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * OSGB::Forward without returning the convergence and scale.
+         **********************************************************************/
+        static void Forward(double lat, double lon,
+            [System::Runtime::InteropServices::Out] double% x,
+            [System::Runtime::InteropServices::Out] double% y);
+
+        /**
+         * OSGB::Reverse without returning the convergence and scale.
+         **********************************************************************/
+        static void Reverse(double x, double y,
+            [System::Runtime::InteropServices::Out] double% lat,
+            [System::Runtime::InteropServices::Out] double% lon);
+
+        /**
+         * Convert OSGB coordinates to a grid reference.
+         *
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[in] prec precision relative to 100 km.
+         * @param[out] gridref National Grid reference.
+         * @exception GeographicErr if \e prec, \e x, or \e y is outside its
+         *   allowed range.
+         * @exception std::bad_alloc if the memory for \e gridref can't be
+         *   allocatied.
+         *
+         * \e prec specifies the precision of the grid reference string as follows:
+         * - prec = 0 (min), 100km
+         * - prec = 1, 10km
+         * - prec = 2, 1km
+         * - prec = 3, 100m
+         * - prec = 4, 10m
+         * - prec = 5, 1m
+         * - prec = 6, 0.1m
+         * - prec = 11 (max), 1μm
+         *
+         * The easting must be in the range [−1000 km, 1500 km) and the
+         * northing must be in the range [−500 km, 2000 km).  These bounds
+         * are consistent with rules for the letter designations for the grid
+         * system.
+         **********************************************************************/
+        static void GridReference(double x, double y, int prec,
+            [System::Runtime::InteropServices::Out] System::String^% gridref);
+
+        /**
+         * Convert OSGB coordinates to a grid reference.
+         *
+         * @param[in] gridref National Grid reference.
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] prec precision relative to 100 km.
+         * @param[in] centerp if true (default), return center of the grid square,
+         *   else return SW (lower left) corner.
+         * @exception GeographicErr if \e gridref is illegal.
+         *
+         * The grid reference must be of the form: two letters (not including I)
+         * followed by an even number of digits (up to 22).
+         **********************************************************************/
+        static void GridReference(System::String^ gridref,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y,
+                [System::Runtime::InteropServices::Out] int% prec,
+                bool centerp );
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the Airy 1830 ellipsoid (meters).
+         *
+         * This is 20923713 ft converted to meters using the rule 1 ft =
+         * 10<sup>9.48401603−10</sup> m.  (The Airy 1830 value is returned
+         * because the OSGB projection is based on this ellipsoid.)
+         **********************************************************************/
+        static double MajorRadius();
+
+        /**
+         * @return \e f the inverse flattening of the Airy 1830 ellipsoid.
+         *
+         * For the Airy 1830 ellipsoid, \e a = 20923713 ft and \e b = 20853810 ft;
+         * thus the flattening = (20923713 − 20853810)/20923713 =
+         * 7767/2324857 = 1/299.32496459...  (The Airy 1830 value is returned
+         * because the OSGB projection is based on this ellipsoid.)
+         **********************************************************************/
+        static double Flattening();
+
+        /**
+         * @return \e k0 central scale for the OSGB projection (0.9996012717).
+         **********************************************************************/
+        static double CentralScale();
+
+        /**
+         * @return latitude of the origin for the OSGB projection (49 degrees).
+         **********************************************************************/
+        static double OriginLatitude();
+
+        /**
+         * @return longitude of the origin for the OSGB projection (−2
+         *   degrees).
+         **********************************************************************/
+        static double OriginLongitude();
+
+        /**
+         * @return false northing the OSGB projection (−100000 meters).
+         **********************************************************************/
+        static double FalseNorthing();
+
+        /**
+         * @return false easting the OSGB projection (400000 meters).
+         **********************************************************************/
+        static double FalseEasting();
+        ///@}
+    };
+} //
diff --git a/dotnet/NETGeographicLib/PolarStereographic.cpp b/dotnet/NETGeographicLib/PolarStereographic.cpp
new file mode 100644
index 0000000..f81b6ec
--- /dev/null
+++ b/dotnet/NETGeographicLib/PolarStereographic.cpp
@@ -0,0 +1,138 @@
+/**
+ * \file NETGeographicLib/PolarStereographic.cpp
+ * \brief Implementation for NETGeographicLib::PolarStereographic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/PolarStereographic.hpp"
+#include "PolarStereographic.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::PolarStereographic";
+
+//*****************************************************************************
+PolarStereographic::!PolarStereographic(void)
+{
+    if ( m_pPolarStereographic != NULL )
+    {
+        delete m_pPolarStereographic;
+        m_pPolarStereographic = NULL;
+    }
+}
+
+//*****************************************************************************
+PolarStereographic::PolarStereographic(double a, double f, double k0)
+{
+    try
+    {
+        m_pPolarStereographic = new GeographicLib::PolarStereographic( a, f, k0 );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+PolarStereographic::PolarStereographic()
+{
+    try
+    {
+        m_pPolarStereographic = new GeographicLib::PolarStereographic(
+            GeographicLib::PolarStereographic::UPS );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void PolarStereographic::SetScale(double lat, double k)
+{
+    try
+    {
+        m_pPolarStereographic->SetScale( lat, k );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void PolarStereographic::Forward(bool northp, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y,
+                [System::Runtime::InteropServices::Out] double% gamma,
+                [System::Runtime::InteropServices::Out] double% k)
+{
+    double lx, ly, lgamma, lk;
+    m_pPolarStereographic->Forward( northp, lat, lon,
+            lx, ly, lgamma, lk );
+    x = lx;
+    y = ly;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void PolarStereographic::Reverse(bool northp, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon,
+                [System::Runtime::InteropServices::Out] double% gamma,
+                [System::Runtime::InteropServices::Out] double% k)
+{
+    double llat, llon, lgamma, lk;
+    m_pPolarStereographic->Reverse( northp, x, y,
+            llat, llon, lgamma, lk );
+    lat = llat;
+    lon = llon;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void PolarStereographic::Forward(bool northp, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y)
+{
+    double lx, ly;
+    m_pPolarStereographic->Forward( northp, lat, lon, lx, ly );
+    x = lx;
+    y = ly;
+}
+
+//*****************************************************************************
+void PolarStereographic::Reverse(bool northp, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon;
+    m_pPolarStereographic->Reverse( northp, x, y, llat, llon );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double PolarStereographic::MajorRadius::get()
+{ return m_pPolarStereographic->MajorRadius(); }
+
+//*****************************************************************************
+double PolarStereographic::Flattening::get()
+{ return m_pPolarStereographic->Flattening(); }
+
+//*****************************************************************************
+double PolarStereographic::CentralScale::get()
+{ return m_pPolarStereographic->CentralScale(); }
diff --git a/dotnet/NETGeographicLib/PolarStereographic.h b/dotnet/NETGeographicLib/PolarStereographic.h
new file mode 100644
index 0000000..2dba46c
--- /dev/null
+++ b/dotnet/NETGeographicLib/PolarStereographic.h
@@ -0,0 +1,175 @@
+#pragma once
+/**
+ * \file NETGeographicLib/PolarStereographic.h
+ * \brief Header for NETGeographicLib::PolarStereographic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    /*!
+    \brief .NET wrapper for GeographicLib::PolarStereographic.
+
+    This class allows .NET applications to access GeographicLib::PolarStereographic.
+    */
+  /**
+   * \brief .NET wrapper for GeographicLib::PolarStereographic.
+   *
+   * This class allows .NET applications to access GeographicLib::PolarStereographic.
+   *
+   * Implementation taken from the report,
+   * - J. P. Snyder,
+   *   <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"> Map Projections: A
+   *   Working Manual</a>, USGS Professional Paper 1395 (1987),
+   *   pp. 160--163.
+   *
+   * This is a straightforward implementation of the equations in Snyder except
+   * that Newton's method is used to invert the projection.
+   *
+   * C# Example:
+   * \include example-PolarStereographic.cs
+   * Managed C++ Example:
+   * \include example-PolarStereographic.cpp
+   * Visual Basic Example:
+   * \include example-PolarStereographic.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor is provided that assumes WGS84 parameters and
+   * a UPS scale factor.
+   *
+   * The MajorRadius, Flattening, and CentralScale functions are
+   * implemented as properties.
+   **********************************************************************/
+    public ref class PolarStereographic
+    {
+        private:
+        // pointer to the unmanaged GeographicLib::PolarStereographic
+        GeographicLib::PolarStereographic* m_pPolarStereographic;
+
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !PolarStereographic(void);
+    public:
+
+        /**
+         * Constructor for a ellipsoid with
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @param[in] k0 central scale factor.
+         * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+         *   not positive.
+         **********************************************************************/
+        PolarStereographic(double a, double f, double k0);
+
+        /**
+         * An instantiation of PolarStereographic with the WGS84 ellipsoid
+         * and the UPS scale factor.
+         **********************************************************************/
+        PolarStereographic();
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~PolarStereographic()
+        { this->!PolarStereographic(); }
+
+        /**
+         * Set the scale for the projection.
+         *
+         * @param[in] lat (degrees) assuming \e northp = true.
+         * @param[in] k scale at latitude \e lat
+         * @exception GeographicErr \e k is not positive.
+         * @exception GeographicErr if \e lat is not in (−90°,
+         *   90°] or this object was created with the default constructor.
+         **********************************************************************/
+        void SetScale(double lat, double k);
+
+        /**
+         * Forward projection, from geographic to polar stereographic.
+         *
+         * @param[in] northp the pole which is the center of projection (true means
+         *   north, false means south).
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * No false easting or northing is added.  \e lat should be in the range
+         * (−90°, 90°] for \e northp = true and in the range
+         * [−90°, 90°) for \e northp = false; \e lon should
+         * be in the range [−540°, 540°).
+         **********************************************************************/
+        void Forward(bool northp, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * Reverse projection, from polar stereographic to geographic.
+         *
+         * @param[in] northp the pole which is the center of projection (true means
+         *   north, false means south).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * No false easting or northing is added.  The value of \e lon returned is
+         * in the range [−180°, 180°).
+         **********************************************************************/
+        void Reverse(bool northp, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * PolarStereographic::Forward without returning the convergence and scale.
+         **********************************************************************/
+        void Forward(bool northp, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y);
+
+        /**
+         * PolarStereographic::Reverse without returning the convergence and scale.
+         **********************************************************************/
+        void Reverse(bool northp, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value used in
+         *   the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * The central scale for the projection.  This is the value of \e k0 used
+         * in the constructor and is the scale at the pole unless overridden by
+         * PolarStereographic::SetScale.
+         **********************************************************************/
+        property double CentralScale { double get(); }
+        ///@}
+    };
+} //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/PolygonArea.cpp b/dotnet/NETGeographicLib/PolygonArea.cpp
new file mode 100644
index 0000000..2a824c9
--- /dev/null
+++ b/dotnet/NETGeographicLib/PolygonArea.cpp
@@ -0,0 +1,128 @@
+/**
+ * \file NETGeographicLib/PolygonArea.cpp
+ * \brief Implementation for NETGeographicLib::PolygonArea class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/PolygonArea.hpp"
+#include "PolygonArea.h"
+#include "Geodesic.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::PolygonArea";
+
+//*****************************************************************************
+PolygonArea::!PolygonArea(void)
+{
+    if ( m_pPolygonArea != NULL )
+    {
+        delete m_pPolygonArea;
+        m_pPolygonArea = NULL;
+    }
+}
+
+//*****************************************************************************
+PolygonArea::PolygonArea(Geodesic^ earth, bool polyline )
+{
+    try
+    {
+        const GeographicLib::Geodesic* pGeodesic =
+            reinterpret_cast<const GeographicLib::Geodesic*>(
+                earth->GetUnmanaged()->ToPointer() );
+        m_pPolygonArea = new GeographicLib::PolygonArea( *pGeodesic, polyline );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+PolygonArea::PolygonArea(const bool polyline )
+{
+    try
+    {
+        m_pPolygonArea = new GeographicLib::PolygonArea(
+            GeographicLib::Geodesic::WGS84, polyline );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void PolygonArea::Clear() { m_pPolygonArea->Clear(); }
+
+//*****************************************************************************
+void PolygonArea::AddPoint(double lat, double lon)
+{
+    m_pPolygonArea->AddPoint( lat, lon );
+}
+
+//*****************************************************************************
+void PolygonArea::AddEdge(double azi, double s)
+{
+    m_pPolygonArea->AddEdge( azi, s );
+}
+
+//*****************************************************************************
+unsigned PolygonArea::Compute(bool reverse, bool sign,
+                    [System::Runtime::InteropServices::Out] double% perimeter,
+                    [System::Runtime::InteropServices::Out] double% area)
+{
+    double lperimeter, larea;
+    unsigned out = m_pPolygonArea->Compute( reverse, sign, lperimeter, larea );
+    perimeter = lperimeter;
+    area = larea;
+    return out;
+}
+
+//*****************************************************************************
+unsigned PolygonArea::TestPoint(double lat, double lon, bool reverse, bool sign,
+                    [System::Runtime::InteropServices::Out] double% perimeter,
+                    [System::Runtime::InteropServices::Out] double% area)
+{
+    double lperimeter, larea;
+    unsigned out = m_pPolygonArea->TestPoint( lat, lon, reverse, sign, lperimeter, larea );
+    perimeter = lperimeter;
+    area = larea;
+    return out;
+}
+
+//*****************************************************************************
+unsigned PolygonArea::TestEdge(double azi, double s, bool reverse, bool sign,
+                    [System::Runtime::InteropServices::Out] double% perimeter,
+                    [System::Runtime::InteropServices::Out] double% area)
+{
+    double lperimeter, larea;
+    unsigned out = m_pPolygonArea->TestEdge( azi, s, reverse, sign, lperimeter, larea );
+    perimeter = lperimeter;
+    area = larea;
+    return out;
+}
+
+//*****************************************************************************
+void PolygonArea::CurrentPoint(
+    [System::Runtime::InteropServices::Out] double% lat,
+    [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon;
+    m_pPolygonArea->CurrentPoint( llat, llon );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double PolygonArea::MajorRadius::get()
+{ return m_pPolygonArea->MajorRadius(); }
+
+//*****************************************************************************
+double PolygonArea::Flattening::get() { return m_pPolygonArea->Flattening(); }
diff --git a/dotnet/NETGeographicLib/PolygonArea.h b/dotnet/NETGeographicLib/PolygonArea.h
new file mode 100644
index 0000000..febad88
--- /dev/null
+++ b/dotnet/NETGeographicLib/PolygonArea.h
@@ -0,0 +1,215 @@
+#pragma once
+/**
+ * \file NETGeographicLib/PolygonArea.h
+ * \brief Header for NETGeographicLib::PolygonArea class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    ref class Geodesic;
+  /**
+   * \brief .NET wrapper for GeographicLib::PolygonArea.
+   *
+   * This class allows .NET applications to access GeographicLib::PolygonArea.
+   *
+   * This computes the area of a geodesic polygon using the method given
+   * Section 6 of
+   * - C. F. F. Karney,
+   *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   Algorithms for geodesics</a>,
+   *   J. Geodesy <b>87</b>, 43--55 (2013);
+   *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   10.1007/s00190-012-0578-z</a>;
+   *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   *   geod-addenda.html</a>.
+   *
+   * This class lets you add vertices one at a time to the polygon.  The area
+   * and perimeter are accumulated in two times the standard floating point
+   * precision to guard against the loss of accuracy with many-sided polygons.
+   * At any point you can ask for the perimeter and area so far.  There's an
+   * option to treat the points as defining a polyline instead of a polygon; in
+   * that case, only the perimeter is computed.
+   *
+   * C# Example:
+   * \include example-PolygonArea.cs
+   * Managed C++ Example:
+   * \include example-PolygonArea.cpp
+   * Visual Basic Example:
+   * \include example-PolygonArea.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The MajorRadius and Flattening functions are implemented as properties.
+   **********************************************************************/
+    public ref class PolygonArea
+    {
+        private:
+        // a pointer to the unmanaged GeographicLib::PolygonArea
+        GeographicLib::PolygonArea* m_pPolygonArea;
+
+        // the finalize frees the unmanaged memory when the object is destroyed.
+        !PolygonArea(void);
+    public:
+
+        /**
+         * Constructor for PolygonArea.
+         *
+         * @param[in] earth the Geodesic object to use for geodesic calculations.
+         * @param[in] polyline if true that treat the points as defining a polyline
+         *   instead of a polygon.
+         **********************************************************************/
+        PolygonArea(Geodesic^ earth, bool polyline );
+
+        /**
+         * Constructor for PolygonArea that assumes a WGS84 ellipsoid.
+         *
+         * @param[in] polyline if true that treat the points as defining a polyline
+         *   instead of a polygon.
+         **********************************************************************/
+        PolygonArea(const bool polyline );
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~PolygonArea()
+        { this->!PolygonArea(); }
+
+        /**
+         * Clear PolygonArea, allowing a new polygon to be started.
+         **********************************************************************/
+        void Clear();
+
+        /**
+         * Add a point to the polygon or polyline.
+         *
+         * @param[in] lat the latitude of the point (degrees).
+         * @param[in] lon the longitude of the point (degrees).
+         *
+         * \e lat should be in the range [−90°, 90°] and \e
+         * lon should be in the range [−540°, 540°).
+         **********************************************************************/
+        void AddPoint(double lat, double lon);
+
+        /**
+         * Add an edge to the polygon or polyline.
+         *
+         * @param[in] azi azimuth at current point (degrees).
+         * @param[in] s distance from current point to next point (meters).
+         *
+         * \e azi should be in the range [−540°, 540°).  This does
+         * nothing if no points have been added yet.  Use PolygonArea::CurrentPoint
+         * to determine the position of the new vertex.
+         **********************************************************************/
+        void AddEdge(double azi, double s);
+
+        /**
+         * Return the results so far.
+         *
+         * @param[in] reverse if true then clockwise (instead of counter-clockwise)
+         *   traversal counts as a positive area.
+         * @param[in] sign if true then return a signed result for the area if
+         *   the polygon is traversed in the "wrong" direction instead of returning
+         *   the area for the rest of the earth.
+         * @param[out] perimeter the perimeter of the polygon or length of the
+         *   polyline (meters).
+         * @param[out] area the area of the polygon (meters<sup>2</sup>); only set
+         *   if \e polyline is false in the constructor.
+         * @return the number of points.
+         **********************************************************************/
+        unsigned Compute(bool reverse, bool sign,
+                [System::Runtime::InteropServices::Out] double% perimeter,
+                [System::Runtime::InteropServices::Out] double% area);
+
+        /**
+         * Return the results assuming a tentative final test point is added;
+         * however, the data for the test point is not saved.  This lets you report
+         * a running result for the perimeter and area as the user moves the mouse
+         * cursor.  Ordinary floating point arithmetic is used to accumulate the
+         * data for the test point; thus the area and perimeter returned are less
+         * accurate than if PolygonArea::AddPoint and PolygonArea::Compute are
+         * used.
+         *
+         * @param[in] lat the latitude of the test point (degrees).
+         * @param[in] lon the longitude of the test point (degrees).
+         * @param[in] reverse if true then clockwise (instead of counter-clockwise)
+         *   traversal counts as a positive area.
+         * @param[in] sign if true then return a signed result for the area if
+         *   the polygon is traversed in the "wrong" direction instead of returning
+         *   the area for the rest of the earth.
+         * @param[out] perimeter the approximate perimeter of the polygon or length
+         *   of the polyline (meters).
+         * @param[out] area the approximate area of the polygon
+         *   (meters<sup>2</sup>); only set if polyline is false in the
+         *   constructor.
+         * @return the number of points.
+         *
+         * \e lat should be in the range [−90°, 90°] and \e
+         * lon should be in the range [−540°, 540°).
+         **********************************************************************/
+        unsigned TestPoint(double lat, double lon, bool reverse, bool sign,
+                [System::Runtime::InteropServices::Out] double% perimeter,
+                [System::Runtime::InteropServices::Out] double% area);
+
+        /**
+         * Return the results assuming a tentative final test point is added via an
+         * azimuth and distance; however, the data for the test point is not saved.
+         * This lets you report a running result for the perimeter and area as the
+         * user moves the mouse cursor.  Ordinary floating point arithmetic is used
+         * to accumulate the data for the test point; thus the area and perimeter
+         * returned are less accurate than if PolygonArea::AddEdge and
+         * PolygonArea::Compute are used.
+         *
+         * @param[in] azi azimuth at current point (degrees).
+         * @param[in] s distance from current point to final test point (meters).
+         * @param[in] reverse if true then clockwise (instead of counter-clockwise)
+         *   traversal counts as a positive area.
+         * @param[in] sign if true then return a signed result for the area if
+         *   the polygon is traversed in the "wrong" direction instead of returning
+         *   the area for the rest of the earth.
+         * @param[out] perimeter the approximate perimeter of the polygon or length
+         *   of the polyline (meters).
+         * @param[out] area the approximate area of the polygon
+         *   (meters<sup>2</sup>); only set if polyline is false in the
+         *   constructor.
+         * @return the number of points.
+         *
+         * \e azi should be in the range [−540°, 540°).
+         **********************************************************************/
+        unsigned TestEdge(double azi, double s, bool reverse, bool sign,
+                [System::Runtime::InteropServices::Out] double% perimeter,
+                [System::Runtime::InteropServices::Out] double% area);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * Report the previous vertex added to the polygon or polyline.
+         *
+         * @param[out] lat the latitude of the point (degrees).
+         * @param[out] lon the longitude of the point (degrees).
+         *
+         * If no points have been added, then NaNs are returned.  Otherwise, \e lon
+         * will be in the range [−180°, 180°).
+         **********************************************************************/
+        void CurrentPoint([System::Runtime::InteropServices::Out] double% lat,
+                          [System::Runtime::InteropServices::Out] double% lon);
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/ReadMe.txt b/dotnet/NETGeographicLib/ReadMe.txt
new file mode 100644
index 0000000..53a4ef4
--- /dev/null
+++ b/dotnet/NETGeographicLib/ReadMe.txt
@@ -0,0 +1,38 @@
+========================================================================
+    DYNAMIC LINK LIBRARY : NETGeographic Project Overview
+========================================================================
+
+AppWizard has created this NETGeographic DLL for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your NETGeographic application.
+
+NETGeographic.vcxproj
+    This is the main project file for VC++ projects generated using an Application Wizard.
+    It contains information about the version of Visual C++ that generated the file, and
+    information about the platforms, configurations, and project features selected with the
+    Application Wizard.
+
+NETGeographic.vcxproj.filters
+    This is the filters file for VC++ projects generated using an Application Wizard.
+    It contains information about the association between the files in your project
+    and the filters. This association is used in the IDE to show grouping of files with
+    similar extensions under a specific node (for e.g. ".cpp" files are associated with the
+    "Source Files" filter).
+
+NETGeographic.cpp
+    This is the main DLL source file.
+
+NETGeographic.h
+    This file contains a class declaration.
+
+AssemblyInfo.cpp
+    Contains custom attributes for modifying assembly metadata.
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/dotnet/NETGeographicLib/SphericalCoefficients.cpp b/dotnet/NETGeographicLib/SphericalCoefficients.cpp
new file mode 100644
index 0000000..ec834ff
--- /dev/null
+++ b/dotnet/NETGeographicLib/SphericalCoefficients.cpp
@@ -0,0 +1,30 @@
+/**
+ * \file NETGeographicLib/SphericalCoefficients.cpp
+ * \brief Implementation for NETGeographicLib::SphericalCoefficients class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/SphericalEngine.hpp"
+#include "SphericalCoefficients.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+SphericalCoefficients::SphericalCoefficients(const GeographicLib::SphericalEngine::coeff& c)
+{
+    m_N = c.N();
+    m_nmx = c.nmx();
+    m_mmx = c.mmx();
+    int csize = Csize( c.nmx(), c.mmx() );
+    int ssize = Ssize( c.nmx(), c.mmx() );
+    int offset = csize - ssize;
+    m_C = gcnew array<double>( csize );
+    m_S = gcnew array<double>( ssize );
+    for ( int i = 0; i < csize; i++ ) m_C[i] = c.Cv(i);
+    for ( int i = 0; i < ssize; i++ ) m_S[i] = c.Sv(i+offset);
+}
diff --git a/dotnet/NETGeographicLib/SphericalCoefficients.h b/dotnet/NETGeographicLib/SphericalCoefficients.h
new file mode 100644
index 0000000..c2727c6
--- /dev/null
+++ b/dotnet/NETGeographicLib/SphericalCoefficients.h
@@ -0,0 +1,140 @@
+#pragma once
+/**
+ * \file NETGeographicLib/SphericalCoefficients.h
+ * \brief Header for NETGeographicLib::SphericalCoefficients class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    /*!
+    \brief .NET wrapper for GeographicLib::SphericalEngine::coeff.
+
+    This class allows .NET applications to access GeographicLib::SphericalEngine::coeff.
+
+    The SphericalHarmonic classes provide accessor functions that allow
+    you to examine the coefficients.  These accessor functions export a
+    GeographicLib::SphericalEngine::coeff object.  The GeographicLib::SphericalEngine
+    class is not implemented in NETGeographicLib.  SphericalCoefficients is provided as
+    a substitute for GeographicLib::SphericalEngine::coeff allowing you to examine the
+    coefficients in .NET applications.
+
+    Use SphericalHarmonic::Coefficients, SphericalHarmonic1::Coefficient*,
+    or SphericalHarmonic2::Coefficient* to obtain an instance of this
+    class.
+
+    <B>INTERFACE DIFFERENCES:</B><BR>
+    This class does not implement readcoeffs.
+    */
+    public ref class SphericalCoefficients
+    {
+        private:
+        // The cosine coefficients.
+        array<double>^ m_C; // size = Csize(m_nmx,m_mmx)
+        // The sine coefficients
+        array<double>^ m_S; // size = Ssize(m_nmx,m_mmx)
+        // The dimension of the coefficients
+        int m_N;
+        int m_nmx;
+        int m_mmx;
+    public:
+        /*!
+        \brief Constructor.
+        \param[in] c A reference to a GeographicLib::SphericalEngine::coeff object.
+        This constructor is for internal use only.  Developers should
+        not create an instance of SphericalCoefficients.  Use
+        SphericalHarmonic::Coefficients, SphericalHarmonic1::Coefficient*,
+        or SphericalHarmonic2::Coefficient* to obtain an instance of this
+        class.
+        */
+        SphericalCoefficients( const GeographicLib::SphericalEngine::coeff& c );
+
+        /**
+        * @return \e N the degree giving storage layout for \e C and \e S.
+        **********************************************************************/
+        property int N { int get() { return m_N; } }
+        /**
+        * @return \e nmx the maximum degree to be used.
+        **********************************************************************/
+        property int nmx { int get() { return m_nmx; } }
+        /**
+        * @return \e mmx the maximum order to be used.
+        **********************************************************************/
+        property int mmx { int get() { return m_mmx; } }
+        /**
+        * The one-dimensional index into \e C and \e S.
+        *
+        * @param[in] n the degree.
+        * @param[in] m the order.
+        * @return the one-dimensional index.
+        **********************************************************************/
+        int index(int n, int m)
+        { return m * m_N - m * (m - 1) / 2 + n; }
+        /**
+        * An element of \e C.
+        *
+        * @param[in] k the one-dimensional index.
+        * @return the value of the \e C coefficient.
+        **********************************************************************/
+        double Cv(int k) { return m_C[k]; }
+        /**
+        * An element of \e S.
+        *
+        * @param[in] k the one-dimensional index.
+        * @return the value of the \e S coefficient.
+        **********************************************************************/
+        double Sv(int k) { return m_S[k - (m_N + 1)]; }
+        /**
+        * An element of \e C with checking.
+        *
+        * @param[in] k the one-dimensional index.
+        * @param[in] n the requested degree.
+        * @param[in] m the requested order.
+        * @param[in] f a multiplier.
+        * @return the value of the \e C coefficient multiplied by \e f in \e n
+        *   and \e m are in range else 0.
+        **********************************************************************/
+        double Cv(int k, int n, int m, double f)
+        { return m > m_mmx || n > m_nmx ? 0 : m_C[k] * f; }
+        /**
+        * An element of \e S with checking.
+        *
+        * @param[in] k the one-dimensional index.
+        * @param[in] n the requested degree.
+        * @param[in] m the requested order.
+        * @param[in] f a multiplier.
+        * @return the value of the \e S coefficient multiplied by \e f in \e n
+        *   and \e m are in range else 0.
+        **********************************************************************/
+        double Sv(int k, int n, int m, double f)
+        { return m > m_mmx || n > m_nmx ? 0 : m_S[k - (m_N + 1)] * f; }
+
+        /**
+        * The size of the coefficient vector for the cosine terms.
+        *
+        * @param[in] N the maximum degree.
+        * @param[in] M the maximum order.
+        * @return the size of the vector of cosine terms as stored in column
+        *   major order.
+        **********************************************************************/
+        static int Csize(int N, int M)
+        { return (M + 1) * (2 * N - M + 2) / 2; }
+
+        /**
+        * The size of the coefficient vector for the sine terms.
+        *
+        * @param[in] N the maximum degree.
+        * @param[in] M the maximum order.
+        * @return the size of the vector of cosine terms as stored in column
+        *   major order.
+        **********************************************************************/
+        static int Ssize(int N, int M)
+        { return Csize(N, M) - (N + 1); }
+
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/SphericalHarmonic.cpp b/dotnet/NETGeographicLib/SphericalHarmonic.cpp
new file mode 100644
index 0000000..964609a
--- /dev/null
+++ b/dotnet/NETGeographicLib/SphericalHarmonic.cpp
@@ -0,0 +1,127 @@
+/**
+ * \file NETGeographicLib/SphericalHarmonic.cpp
+ * \brief Implementation for NETGeographicLib::SphericalHarmonic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/SphericalHarmonic.hpp"
+#include "SphericalHarmonic.h"
+#include "CircularEngine.h"
+#include "SphericalCoefficients.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::SphericalHarmonic";
+
+//*****************************************************************************
+SphericalHarmonic::!SphericalHarmonic(void)
+{
+    if ( m_pSphericalHarmonic != NULL )
+    {
+        delete m_pSphericalHarmonic;
+        m_pSphericalHarmonic = NULL;
+    }
+    if ( m_C != NULL )
+    {
+        delete m_C;
+        m_C = NULL;
+    }
+    if ( m_S != NULL )
+    {
+        delete m_S;
+        m_S = NULL;
+    }
+}
+
+//*****************************************************************************
+SphericalHarmonic::SphericalHarmonic(array<double>^ C,
+                    array<double>^ S,
+                    int N, double a, Normalization norm )
+{
+    try
+    {
+        m_C = new std::vector<double>();
+        m_S = new std::vector<double>();
+        for each ( double x in C ) m_C->push_back(x);
+        for each ( double x in S ) m_S->push_back(x);
+        m_pSphericalHarmonic = new GeographicLib::SphericalHarmonic(
+            *m_C, *m_S, N, a, static_cast<unsigned>(norm) );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+    catch ( System::Exception^ sxpt )
+    {
+        throw gcnew GeographicErr( sxpt->Message );
+    }
+}
+
+//*****************************************************************************
+SphericalHarmonic::SphericalHarmonic(array<double>^ C,
+                    array<double>^ S,
+                    int N, int nmx, int mmx,
+                    double a, Normalization norm)
+{
+    try
+    {
+        m_C = new std::vector<double>();
+        m_S = new std::vector<double>();
+        for each ( double x in C ) m_C->push_back(x);
+        for each ( double x in S ) m_S->push_back(x);
+        m_pSphericalHarmonic = new GeographicLib::SphericalHarmonic(
+            *m_C, *m_S, N, nmx, mmx, a, static_cast<unsigned>(norm) );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& xcpt )
+    {
+        throw gcnew GeographicErr( xcpt.what() );
+    }
+    catch ( System::Exception^ sxpt )
+    {
+        throw gcnew GeographicErr( sxpt->Message );
+    }
+}
+
+//*****************************************************************************
+double SphericalHarmonic::HarmonicSum(double x, double y, double z)
+{
+    return m_pSphericalHarmonic->operator()( x, y, z );
+}
+
+//*****************************************************************************
+double SphericalHarmonic::HarmonicSum(double x, double y, double z,
+                        double% gradx, double% grady, double% gradz)
+{
+    double lx, ly, lz;
+    double out = m_pSphericalHarmonic->operator()( x, y, z, lx, ly, lz );
+    gradx = lx;
+    grady = ly;
+    gradz = lz;
+    return out;
+}
+
+//*****************************************************************************
+CircularEngine^ SphericalHarmonic::Circle(double p, double z, bool gradp)
+{
+    return gcnew CircularEngine( m_pSphericalHarmonic->Circle( p, z, gradp ) );
+}
+
+//*****************************************************************************
+SphericalCoefficients^ SphericalHarmonic::Coefficients()
+{
+    return gcnew SphericalCoefficients( m_pSphericalHarmonic->Coefficients() );
+}
diff --git a/dotnet/NETGeographicLib/SphericalHarmonic.h b/dotnet/NETGeographicLib/SphericalHarmonic.h
new file mode 100644
index 0000000..6bacb3a
--- /dev/null
+++ b/dotnet/NETGeographicLib/SphericalHarmonic.h
@@ -0,0 +1,271 @@
+#pragma once
+/**
+ * \file NETGeographicLib/SphericalHarmonic.h
+ * \brief Header for NETGeographicLib::SphericalHarmonic class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    ref class CircularEngine;
+    ref class SphericalCoefficients;
+  /**
+   * \brief .NET wrapper for GeographicLib::SphericalHarmonic.
+   *
+   * This class allows .NET applications to access GeographicLib::SphericalHarmonic.
+   *
+   * This class evaluates the spherical harmonic sum \verbatim
+   V(x, y, z) = sum(n = 0..N)[ q^(n+1) * sum(m = 0..n)[
+     (C[n,m] * cos(m*lambda) + S[n,m] * sin(m*lambda)) *
+     P[n,m](cos(theta)) ] ]
+   \endverbatim
+   * where
+   * - <i>p</i><sup>2</sup> = <i>x</i><sup>2</sup> + <i>y</i><sup>2</sup>,
+   * - <i>r</i><sup>2</sup> = <i>p</i><sup>2</sup> + <i>z</i><sup>2</sup>,
+   * - \e q = <i>a</i>/<i>r</i>,
+   * - θ = atan2(\e p, \e z) = the spherical \e colatitude,
+   * - λ = atan2(\e y, \e x) = the longitude.
+   * - P<sub>\e nm</sub>(\e t) is the associated Legendre polynomial of degree
+   *   \e n and order \e m.
+   *
+   * Two normalizations are supported for P<sub>\e nm</sub>
+   * - fully normalized denoted by SphericalHarmonic::FULL.
+   * - Schmidt semi-normalized denoted by SphericalHarmonic::SCHMIDT.
+   *
+   * Clenshaw summation is used for the sums over both \e n and \e m.  This
+   * allows the computation to be carried out without the need for any
+   * temporary arrays.  See GeographicLib::SphericalEngine.cpp for more
+   * information on the implementation.
+   *
+   * References:
+   * - C. W. Clenshaw, A note on the summation of Chebyshev series,
+   *   %Math. Tables Aids Comput. 9(51), 118--120 (1955).
+   * - R. E. Deakin, Derivatives of the earth's potentials, Geomatics
+   *   Research Australasia 68, 31--60, (June 1998).
+   * - W. A. Heiskanen and H. Moritz, Physical Geodesy, (Freeman, San
+   *   Francisco, 1967).  (See Sec. 1-14, for a definition of Pbar.)
+   * - S. A. Holmes and W. E. Featherstone, A unified approach to the Clenshaw
+   *   summation and the recursive computation of very high degree and order
+   *   normalised associated Legendre functions, J. Geodesy 76(5),
+   *   279--299 (2002).
+   * - C. C. Tscherning and K. Poder, Some geodetic applications of Clenshaw
+   *   summation, Boll. Geod. Sci. Aff. 41(4), 349--375 (1982).
+   *
+   * C# Example:
+   * \include example-SphericalHarmonic.cs
+   * Managed C++ Example:
+   * \include example-SphericalHarmonic.cpp
+   * Visual Basic Example:
+   * \include example-SphericalHarmonic.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * This class replaces the GeographicLib::SphericalHarmonic::operator() with
+   * HarmonicSum.
+   *
+   * Coefficients returns a SphericalCoefficients object.
+   *
+   * The Normalization parameter in the constructors is passed in as an
+   * enumeration rather than an unsigned.
+   **********************************************************************/
+    public ref class SphericalHarmonic
+    {
+        private:
+        // a pointer to the unmanaged GeographicLib::SphericalHarmonic
+        const GeographicLib::SphericalHarmonic* m_pSphericalHarmonic;
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !SphericalHarmonic();
+        // local containers for the cosine and sine coefficients.  The
+        // GeographicLib::SphericalEngine::coeffs class uses a
+        // std::vector::iterator to access these vectors.
+        std::vector<double> *m_C, *m_S;
+    public:
+        /**
+         * Supported normalizations for the associated Legendre polynomials.
+         **********************************************************************/
+        enum class Normalization {
+          /**
+           * Fully normalized associated Legendre polynomials.
+           *
+           * These are defined by <i>P</i><sub><i>nm</i></sub><sup>full</sup>(\e z)
+           * = (−1)<sup><i>m</i></sup> sqrt(\e k (2\e n + 1) (\e n − \e
+           * m)! / (\e n + \e m)!)
+           * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z), where
+           * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers
+           * function (also known as the Legendre function on the cut or the
+           * associated Legendre polynomial) http://dlmf.nist.gov/14.7.E10 and \e k
+           * = 1 for \e m = 0 and \e k = 2 otherwise.
+           *
+           * The mean squared value of
+           * <i>P</i><sub><i>nm</i></sub><sup>full</sup>(cosθ)
+           * cos(<i>m</i>λ) and
+           * <i>P</i><sub><i>nm</i></sub><sup>full</sup>(cosθ)
+           * sin(<i>m</i>λ) over the sphere is 1.
+           *
+           * @hideinitializer
+           **********************************************************************/
+          FULL = GeographicLib::SphericalEngine::FULL,
+          /**
+           * Schmidt semi-normalized associated Legendre polynomials.
+           *
+           * These are defined by <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(\e
+           * z) = (−1)<sup><i>m</i></sup> sqrt(\e k (\e n − \e m)! /
+           * (\e n + \e m)!)  <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z),
+           * where <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers
+           * function (also known as the Legendre function on the cut or the
+           * associated Legendre polynomial) http://dlmf.nist.gov/14.7.E10 and \e k
+           * = 1 for \e m = 0 and \e k = 2 otherwise.
+           *
+           * The mean squared value of
+           * <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(cosθ)
+           * cos(<i>m</i>λ) and
+           * <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(cosθ)
+           * sin(<i>m</i>λ) over the sphere is 1/(2\e n + 1).
+           *
+           * @hideinitializer
+           **********************************************************************/
+          SCHMIDT = GeographicLib::SphericalEngine::SCHMIDT,
+        };
+
+        /**
+         * Constructor with a full set of coefficients specified.
+         *
+         * @param[in] C the coefficients \e C<sub>\e nm</sub>.
+         * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+         * @param[in] N the maximum degree and order of the sum
+         * @param[in] a the reference radius appearing in the definition of the
+         *   sum.
+         * @param[in] norm the normalization for the associated Legendre
+         *   polynomials, either SphericalHarmonic::full (the default) or
+         *   SphericalHarmonic::schmidt.
+         * @exception GeographicErr if \e N does not satisfy \e N ≥ −1.
+         * @exception GeographicErr if \e C or \e S is not big enough to hold the
+         *   coefficients.
+         *
+         * The coefficients \e C<sub>\e nm</sub> and \e S<sub>\e nm</sub> are
+         * stored in the one-dimensional vectors \e C and \e S which must contain
+         * (\e N + 1)(\e N + 2)/2 and N (\e N + 1)/2 elements, respectively, stored
+         * in "column-major" order.  Thus for \e N = 3, the order would be:
+         * <i>C</i><sub>00</sub>,
+         * <i>C</i><sub>10</sub>,
+         * <i>C</i><sub>20</sub>,
+         * <i>C</i><sub>30</sub>,
+         * <i>C</i><sub>11</sub>,
+         * <i>C</i><sub>21</sub>,
+         * <i>C</i><sub>31</sub>,
+         * <i>C</i><sub>22</sub>,
+         * <i>C</i><sub>32</sub>,
+         * <i>C</i><sub>33</sub>.
+         * In general the (\e n,\e m) element is at index \e m \e N − \e m
+         * (\e m − 1)/2 + \e n.  The layout of \e S is the same except that
+         * the first column is omitted (since the \e m = 0 terms never contribute
+         * to the sum) and the 0th element is <i>S</i><sub>11</sub>
+         *
+         * The class stores <i>pointers</i> to the first elements of \e C and \e S.
+         * These arrays should not be altered or destroyed during the lifetime of a
+         * SphericalHarmonic object.
+         **********************************************************************/
+        SphericalHarmonic(array<double>^ C,
+                          array<double>^ S,
+                          int N, double a, Normalization norm );
+
+        /**
+         * Constructor with a subset of coefficients specified.
+         *
+         * @param[in] C the coefficients \e C<sub>\e nm</sub>.
+         * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+         * @param[in] N the degree used to determine the layout of \e C and \e S.
+         * @param[in] nmx the maximum degree used in the sum.  The sum over \e n is
+         *   from 0 thru \e nmx.
+         * @param[in] mmx the maximum order used in the sum.  The sum over \e m is
+         *   from 0 thru min(\e n, \e mmx).
+         * @param[in] a the reference radius appearing in the definition of the
+         *   sum.
+         * @param[in] norm the normalization for the associated Legendre
+         *   polynomials, either SphericalHarmonic::FULL (the default) or
+         *   SphericalHarmonic::SCHMIDT.
+         * @exception GeographicErr if \e N, \e nmx, and \e mmx do not satisfy
+         *   \e N ≥ \e nmx ≥ \e mmx ≥ −1.
+         * @exception GeographicErr if \e C or \e S is not big enough to hold the
+         *   coefficients.
+         *
+         * The class stores <i>pointers</i> to the first elements of \e C and \e S.
+         * These arrays should not be altered or destroyed during the lifetime of a
+         * SphericalHarmonic object.
+         **********************************************************************/
+        SphericalHarmonic(array<double>^ C,
+                          array<double>^ S,
+                          int N, int nmx, int mmx,
+                          double a, Normalization norm);
+
+        /**
+         * The destructor calls the finalizer
+         **********************************************************************/
+        ~SphericalHarmonic() { this->!SphericalHarmonic(); }
+
+        /**
+         * Compute the spherical harmonic sum.
+         *
+         * @param[in] x cartesian coordinate.
+         * @param[in] y cartesian coordinate.
+         * @param[in] z cartesian coordinate.
+         * @return \e V the spherical harmonic sum.
+         *
+         * This routine requires constant memory and thus never throws an
+         * exception.
+         **********************************************************************/
+        double HarmonicSum(double x, double y, double z);
+
+        /**
+         * Compute a spherical harmonic sum and its gradient.
+         *
+         * @param[in] x cartesian coordinate.
+         * @param[in] y cartesian coordinate.
+         * @param[in] z cartesian coordinate.
+         * @param[out] gradx \e x component of the gradient
+         * @param[out] grady \e y component of the gradient
+         * @param[out] gradz \e z component of the gradient
+         * @return \e V the spherical harmonic sum.
+         *
+         * This is the same as the previous function, except that the components of
+         * the gradients of the sum in the \e x, \e y, and \e z directions are
+         * computed.  This routine requires constant memory and thus never throws
+         * an exception.
+         **********************************************************************/
+        double HarmonicSum(double x, double y, double z,
+            [System::Runtime::InteropServices::Out] double% gradx,
+            [System::Runtime::InteropServices::Out] double% grady,
+            [System::Runtime::InteropServices::Out] double% gradz);
+
+        /**
+         * Create a CircularEngine to allow the efficient evaluation of several
+         * points on a circle of latitude.
+         *
+         * @param[in] p the radius of the circle.
+         * @param[in] z the height of the circle above the equatorial plane.
+         * @param[in] gradp if true the returned object will be able to compute the
+         *   gradient of the sum.
+         * @exception std::bad_alloc if the memory for the CircularEngine can't be
+         *   allocated.
+         * @return the CircularEngine object.
+         *
+         * SphericalHarmonic::operator()() exchanges the order of the sums in the
+         * definition, i.e., ∑<sub>n = 0..N</sub> ∑<sub>m = 0..n</sub>
+         * becomes ∑<sub>m = 0..N</sub> ∑<sub>n = m..N</sub>.
+         * SphericalHarmonic::Circle performs the inner sum over degree \e n (which
+         * entails about <i>N</i><sup>2</sup> operations).  Calling
+         * CircularEngine::operator()() on the returned object performs the outer
+         * sum over the order \e m (about \e N operations).
+         **********************************************************************/
+        CircularEngine^ Circle(double p, double z, bool gradp);
+
+        /**
+        * @return the zeroth SphericalCoefficients object.
+        **********************************************************************/
+        SphericalCoefficients^ Coefficients();
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/SphericalHarmonic1.cpp b/dotnet/NETGeographicLib/SphericalHarmonic1.cpp
new file mode 100644
index 0000000..4308591
--- /dev/null
+++ b/dotnet/NETGeographicLib/SphericalHarmonic1.cpp
@@ -0,0 +1,168 @@
+/**
+ * \file NETGeographicLib/SphericalHarmonic1.cpp
+ * \brief Implementation for NETGeographicLib::SphericalHarmonic1 class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/SphericalHarmonic1.hpp"
+#include "SphericalHarmonic1.h"
+#include "CircularEngine.h"
+#include "SphericalCoefficients.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::SphericalHarmonic1";
+
+//*****************************************************************************
+SphericalHarmonic1::!SphericalHarmonic1(void)
+{
+    if ( m_pSphericalHarmonic1 != NULL )
+    {
+        delete m_pSphericalHarmonic1;
+        m_pSphericalHarmonic1 = NULL;
+    }
+
+    if ( m_C != NULL )
+    {
+        for ( int i = 0; i < m_numCoeffVectors; i++ )
+            if ( m_C[i] != NULL )
+                delete m_C[i];
+        delete [] m_C;
+        m_C = NULL;
+    }
+
+    if ( m_S != NULL )
+    {
+        for ( int i = 0; i < m_numCoeffVectors; i++ )
+            if ( m_S[i] != NULL )
+                delete m_S[i];
+        delete [] m_S;
+        m_S = NULL;
+    }
+}
+
+//*****************************************************************************
+SphericalHarmonic1::SphericalHarmonic1( array<double>^ C,
+                                        array<double>^ S,
+                                        int N,
+                                        array<double>^ C1,
+                                        array<double>^ S1,
+                                        int N1,
+                                        double a,
+                                        Normalization norm )
+{
+    try
+    {
+        m_C = new std::vector<double>*[m_numCoeffVectors];
+        for ( int i = 0; i < m_numCoeffVectors; i++ ) m_C[i] = new std::vector<double>();
+        m_S = new std::vector<double>*[m_numCoeffVectors];
+        for ( int i = 0; i < m_numCoeffVectors; i++ ) m_S[i] = new std::vector<double>();
+        for each ( double x in C ) m_C[0]->push_back( x );
+        for each ( double x in S ) m_S[0]->push_back( x );
+        for each ( double x in C1 ) m_C[1]->push_back( x );
+        for each ( double x in S1 ) m_S[1]->push_back( x );
+        m_pSphericalHarmonic1 = new GeographicLib::SphericalHarmonic1(
+            *m_C[0], *m_S[0], N, *m_C[1], *m_S[1], N1, a, (unsigned)norm );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+    catch ( System::Exception^ sxpt )
+    {
+        throw gcnew GeographicErr( sxpt->Message );
+    }
+}
+
+//*****************************************************************************
+SphericalHarmonic1::SphericalHarmonic1( array<double>^ C,
+                                        array<double>^ S,
+                                        int N, int nmx, int mmx,
+                                        array<double>^ C1,
+                                        array<double>^ S1,
+                                        int N1, int nmx1, int mmx1,
+                                        double a,
+                                        Normalization norm )
+{
+    try
+    {
+        m_C = new std::vector<double>*[m_numCoeffVectors];
+        for ( int i = 0; i < m_numCoeffVectors; i++ ) m_C[i] = new std::vector<double>();
+        m_S = new std::vector<double>*[m_numCoeffVectors];
+        for ( int i = 0; i < m_numCoeffVectors; i++ ) m_S[i] = new std::vector<double>();
+        for each ( double x in C ) m_C[0]->push_back( x );
+        for each ( double x in S ) m_S[0]->push_back( x );
+        for each ( double x in C1 ) m_C[1]->push_back( x );
+        for each ( double x in S1 ) m_S[1]->push_back( x );
+        m_pSphericalHarmonic1 = new GeographicLib::SphericalHarmonic1(
+            *m_C[0], *m_S[0], N, nmx, mmx, *m_C[1], *m_S[1], N1, nmx1, mmx1, a,
+            (unsigned)norm );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+    catch ( System::Exception^ sxpt )
+    {
+        throw gcnew GeographicErr( sxpt->Message );
+    }
+}
+
+//*****************************************************************************
+double SphericalHarmonic1::HarmonicSum(double tau, double x, double y, double z)
+{
+    return m_pSphericalHarmonic1->operator()( tau, x, y, z );
+}
+
+//*****************************************************************************
+double SphericalHarmonic1::HarmonicSum(double tau, double x, double y, double z,
+                        [System::Runtime::InteropServices::Out] double% gradx,
+                        [System::Runtime::InteropServices::Out] double% grady,
+                        [System::Runtime::InteropServices::Out] double% gradz)
+{
+    double lgradx, lgrady, lgradz;
+    double out = m_pSphericalHarmonic1->operator()( tau, x, y, z, lgradx, lgrady, lgradz );
+    gradx = lgradx;
+    grady = lgrady;
+    gradz = lgradz;
+    return out;
+}
+
+//*****************************************************************************
+CircularEngine^ SphericalHarmonic1::Circle(double tau, double p, double z, bool gradp)
+{
+    try
+    {
+        return gcnew CircularEngine( m_pSphericalHarmonic1->Circle( tau, p, z, gradp ) );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Failed to allocate memory for a CircularEngine in SphericalHarmonic1::Circle" );
+    }
+}
+
+//*****************************************************************************
+SphericalCoefficients^ SphericalHarmonic1::Coefficients()
+{
+    return gcnew SphericalCoefficients( m_pSphericalHarmonic1->Coefficients() );
+}
+
+//*****************************************************************************
+SphericalCoefficients^ SphericalHarmonic1::Coefficients1()
+{
+    return gcnew SphericalCoefficients( m_pSphericalHarmonic1->Coefficients1() );
+}
diff --git a/dotnet/NETGeographicLib/SphericalHarmonic1.h b/dotnet/NETGeographicLib/SphericalHarmonic1.h
new file mode 100644
index 0000000..c05a1b8
--- /dev/null
+++ b/dotnet/NETGeographicLib/SphericalHarmonic1.h
@@ -0,0 +1,226 @@
+#pragma once
+/**
+ * \file NETGeographicLib/SphericalHarmonic1.h
+ * \brief Header for NETGeographicLib::SphericalHarmonic1 class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    ref class SphericalCoefficients;
+    ref class CircularEngine;
+  /**
+   * \brief .NET wrapper for GeographicLib::SphericalHarmonic1.
+   *
+   * This class allows .NET applications to access GeographicLib::SphericalHarmonic1.
+   *
+   * This class is similar to SphericalHarmonic, except that the coefficients
+   * \e C<sub>\e nm</sub> are replaced by \e C<sub>\e nm</sub> + \e tau
+   * C'<sub>\e nm</sub> (and similarly for \e S<sub>\e nm</sub>).
+   *
+   * C# Example:
+   * \include example-SphericalHarmonic1.cs
+   * Managed C++ Example:
+   * \include example-SphericalHarmonic1.cpp
+   * Visual Basic Example:
+   * \include example-SphericalHarmonic1.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * This class replaces the () operator with HarmonicSum().
+   *
+   * Coefficients returns a SphericalCoefficients object.
+   **********************************************************************/
+    public ref class SphericalHarmonic1
+    {
+        private:
+        // pointer to the unmanaged GeographicLib::SphericalHarmonic1.
+        const GeographicLib::SphericalHarmonic1* m_pSphericalHarmonic1;
+
+        // the finalizer destroys the unmanaged memory when the object is destroyed.
+        !SphericalHarmonic1(void);
+        // the number of coefficient vectors.
+        static const int m_numCoeffVectors = 2;
+        // local containers for the cosine and sine coefficients.  The
+        // GeographicLib::SphericalEngine::coeffs class uses a
+        // std::vector::iterator to access these vectors.
+        std::vector<double> **m_C, **m_S;
+    public:
+        /**
+         * Supported normalizations for associate Legendre polynomials.
+         **********************************************************************/
+        enum class Normalization {
+          /**
+           * Fully normalized associated Legendre polynomials.  See
+           * SphericalHarmonic::FULL for documentation.
+           *
+           * @hideinitializer
+           **********************************************************************/
+          FULL = GeographicLib::SphericalEngine::FULL,
+          /**
+           * Schmidt semi-normalized associated Legendre polynomials.  See
+           * SphericalHarmonic::SCHMIDT for documentation.
+           *
+           * @hideinitializer
+           **********************************************************************/
+          SCHMIDT = GeographicLib::SphericalEngine::SCHMIDT,
+        };
+
+        /**
+         * Constructor with a full set of coefficients specified.
+         *
+         * @param[in] C the coefficients \e C<sub>\e nm</sub>.
+         * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+         * @param[in] N the maximum degree and order of the sum
+         * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.
+         * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.
+         * @param[in] N1 the maximum degree and order of the correction
+         *   coefficients \e C'<sub>\e nm</sub> and \e S'<sub>\e nm</sub>.
+         * @param[in] a the reference radius appearing in the definition of the
+         *   sum.
+         * @param[in] norm the normalization for the associated Legendre
+         *   polynomials, either SphericalHarmonic1::FULL (the default) or
+         *   SphericalHarmonic1::SCHMIDT.
+         * @exception GeographicErr if \e N and \e N1 do not satisfy \e N ≥
+         *   \e N1 ≥ −1.
+         * @exception GeographicErr if any of the vectors of coefficients is not
+         *   large enough.
+         *
+         * See SphericalHarmonic for the way the coefficients should be stored.
+         *
+         * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e
+         * C', and \e S'.  These arrays should not be altered or destroyed during
+         * the lifetime of a SphericalHarmonic object.
+         **********************************************************************/
+        SphericalHarmonic1(array<double>^ C,
+                           array<double>^ S,
+                           int N,
+                           array<double>^ C1,
+                           array<double>^ S1,
+                           int N1,
+                           double a,
+                           Normalization norm );
+
+        /**
+         * Constructor with a subset of coefficients specified.
+         *
+         * @param[in] C the coefficients \e C<sub>\e nm</sub>.
+         * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+         * @param[in] N the degree used to determine the layout of \e C and \e S.
+         * @param[in] nmx the maximum degree used in the sum.  The sum over \e n is
+         *   from 0 thru \e nmx.
+         * @param[in] mmx the maximum order used in the sum.  The sum over \e m is
+         *   from 0 thru min(\e n, \e mmx).
+         * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.
+         * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.
+         * @param[in] N1 the degree used to determine the layout of \e C' and \e
+         *   S'.
+         * @param[in] nmx1 the maximum degree used for \e C' and \e S'.
+         * @param[in] mmx1 the maximum order used for \e C' and \e S'.
+         * @param[in] a the reference radius appearing in the definition of the
+         *   sum.
+         * @param[in] norm the normalization for the associated Legendre
+         *   polynomials, either SphericalHarmonic1::FULL (the default) or
+         *   SphericalHarmonic1::SCHMIDT.
+         * @exception GeographicErr if the parameters do not satisfy \e N ≥ \e
+         *   nmx ≥ \e mmx ≥ −1; \e N1 ≥ \e nmx1 ≥ \e mmx1 ≥
+         *   −1; \e N ≥ \e N1; \e nmx ≥ \e nmx1; \e mmx ≥ \e mmx1.
+         * @exception GeographicErr if any of the vectors of coefficients is not
+         *   large enough.
+         *
+         * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e
+         * C', and \e S'.  These arrays should not be altered or destroyed during
+         * the lifetime of a SphericalHarmonic object.
+         **********************************************************************/
+        SphericalHarmonic1(array<double>^ C,
+                           array<double>^ S,
+                           int N, int nmx, int mmx,
+                           array<double>^ C1,
+                           array<double>^ S1,
+                           int N1, int nmx1, int mmx1,
+                           double a,
+                           Normalization norm );
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~SphericalHarmonic1()
+        { this->!SphericalHarmonic1(); }
+
+        /**
+         * Compute a spherical harmonic sum with a correction term.
+         *
+         * @param[in] tau multiplier for correction coefficients \e C' and \e S'.
+         * @param[in] x cartesian coordinate.
+         * @param[in] y cartesian coordinate.
+         * @param[in] z cartesian coordinate.
+         * @return \e V the spherical harmonic sum.
+         *
+         * This routine requires constant memory and thus never throws
+         * an exception.
+         **********************************************************************/
+        double HarmonicSum(double tau, double x, double y, double z);
+
+        /**
+         * Compute a spherical harmonic sum with a correction term and its
+         * gradient.
+         *
+         * @param[in] tau multiplier for correction coefficients \e C' and \e S'.
+         * @param[in] x cartesian coordinate.
+         * @param[in] y cartesian coordinate.
+         * @param[in] z cartesian coordinate.
+         * @param[out] gradx \e x component of the gradient
+         * @param[out] grady \e y component of the gradient
+         * @param[out] gradz \e z component of the gradient
+         * @return \e V the spherical harmonic sum.
+         *
+         * This is the same as the previous function, except that the components of
+         * the gradients of the sum in the \e x, \e y, and \e z directions are
+         * computed.  This routine requires constant memory and thus never throws
+         * an exception.
+         **********************************************************************/
+        double HarmonicSum(double tau, double x, double y, double z,
+                    [System::Runtime::InteropServices::Out] double% gradx,
+                    [System::Runtime::InteropServices::Out] double% grady,
+                    [System::Runtime::InteropServices::Out] double% gradz);
+
+        /**
+         * Create a CircularEngine to allow the efficient evaluation of several
+         * points on a circle of latitude at a fixed value of \e tau.
+         *
+         * @param[in] tau the multiplier for the correction coefficients.
+         * @param[in] p the radius of the circle.
+         * @param[in] z the height of the circle above the equatorial plane.
+         * @param[in] gradp if true the returned object will be able to compute the
+         *   gradient of the sum.
+         * @exception std::bad_alloc if the memory for the CircularEngine can't be
+         *   allocated.
+         * @return the CircularEngine object.
+         *
+         * SphericalHarmonic1::operator()() exchanges the order of the sums in the
+         * definition, i.e., ∑<sub>n = 0..N</sub> ∑<sub>m = 0..n</sub>
+         * becomes ∑<sub>m = 0..N</sub> ∑<sub>n = m..N</sub>.
+         * SphericalHarmonic1::Circle performs the inner sum over degree \e n
+         * (which entails about <i>N</i><sup>2</sup> operations).  Calling
+         * CircularEngine::operator()() on the returned object performs the outer
+         * sum over the order \e m (about \e N operations).
+         *
+         * See SphericalHarmonic::Circle for an example of its use.
+         **********************************************************************/
+        CircularEngine^ Circle(double tau, double p, double z, bool gradp);
+
+        /**
+        * @return the zeroth SphericalCoefficients object.
+        **********************************************************************/
+        SphericalCoefficients^ Coefficients();
+
+        /**
+        * @return the first SphericalCoefficients object.
+        **********************************************************************/
+        SphericalCoefficients^ Coefficients1();
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/SphericalHarmonic2.cpp b/dotnet/NETGeographicLib/SphericalHarmonic2.cpp
new file mode 100644
index 0000000..b529359
--- /dev/null
+++ b/dotnet/NETGeographicLib/SphericalHarmonic2.cpp
@@ -0,0 +1,186 @@
+/**
+ * \file NETGeographicLib/SphericalHarmonic2.cpp
+ * \brief Implementation for NETGeographicLib::SphericalHarmonic2 class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/SphericalHarmonic2.hpp"
+#include "SphericalHarmonic2.h"
+#include "CircularEngine.h"
+#include "SphericalCoefficients.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::SphericalHarmonic2";
+
+//*****************************************************************************
+SphericalHarmonic2::!SphericalHarmonic2(void)
+{
+    if ( m_pSphericalHarmonic2 != NULL )
+    {
+        delete m_pSphericalHarmonic2;
+        m_pSphericalHarmonic2 = NULL;
+    }
+
+    if ( m_C != NULL )
+    {
+        for ( int i = 0; i < m_numCoeffVectors; i++ )
+            if ( m_C[i] != NULL )
+                delete m_C[i];
+        delete [] m_C;
+        m_C = NULL;
+    }
+
+    if ( m_S != NULL )
+    {
+        for ( int i = 0; i < m_numCoeffVectors; i++ )
+            if ( m_S[i] != NULL )
+                delete m_S[i];
+        delete [] m_S;
+        m_S = NULL;
+    }
+}
+
+//*****************************************************************************
+SphericalHarmonic2::SphericalHarmonic2(array<double>^ C,
+                                        array<double>^ S,
+                                        int N,
+                                        array<double>^ C1,
+                                        array<double>^ S1,
+                                        int N1,
+                                        array<double>^ C2,
+                                        array<double>^ S2,
+                                        int N2,
+                                        double a,
+                                        Normalization norm )
+{
+    try
+    {
+        m_C = new std::vector<double>*[m_numCoeffVectors];
+        for ( int i = 0; i < m_numCoeffVectors; i++ ) m_C[i] = new std::vector<double>();
+        m_S = new std::vector<double>*[m_numCoeffVectors];
+        for ( int i = 0; i < m_numCoeffVectors; i++ ) m_S[i] = new std::vector<double>();
+        for each ( double x in C ) m_C[0]->push_back( x );
+        for each ( double x in S ) m_S[0]->push_back( x );
+        for each ( double x in C1 ) m_C[1]->push_back( x );
+        for each ( double x in S1 ) m_S[1]->push_back( x );
+        for each ( double x in C2 ) m_C[2]->push_back( x );
+        for each ( double x in S2 ) m_S[2]->push_back( x );
+        m_pSphericalHarmonic2 = new GeographicLib::SphericalHarmonic2( *m_C[0], *m_S[0], N,
+            *m_C[1], *m_S[1], N1, *m_C[2], *m_S[2], N2, a, (unsigned)norm);
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+    catch ( System::Exception^ sxpt )
+    {
+        throw gcnew GeographicErr( sxpt->Message );
+    }
+}
+
+//*****************************************************************************
+SphericalHarmonic2::SphericalHarmonic2(array<double>^ C,
+                                        array<double>^ S,
+                                        int N, int nmx, int mmx,
+                                        array<double>^ C1,
+                                        array<double>^ S1,
+                                        int N1, int nmx1, int mmx1,
+                                        array<double>^ C2,
+                                        array<double>^ S2,
+                                        int N2, int nmx2, int mmx2,
+                                        double a,
+                                        Normalization norm )
+{
+    try
+    {
+        m_C = new std::vector<double>*[m_numCoeffVectors];
+        for ( int i = 0; i < m_numCoeffVectors; i++ ) m_C[i] = new std::vector<double>();
+        m_S = new std::vector<double>*[m_numCoeffVectors];
+        for ( int i = 0; i < m_numCoeffVectors; i++ ) m_S[i] = new std::vector<double>();
+        for each ( double x in C ) m_C[0]->push_back( x );
+        for each ( double x in S ) m_S[0]->push_back( x );
+        for each ( double x in C1 ) m_C[1]->push_back( x );
+        for each ( double x in S1 ) m_S[1]->push_back( x );
+        for each ( double x in C2 ) m_C[2]->push_back( x );
+        for each ( double x in S2 ) m_S[2]->push_back( x );
+        m_pSphericalHarmonic2 = new GeographicLib::SphericalHarmonic2( *m_C[0], *m_S[0], N,
+            nmx, mmx, *m_C[1], *m_S[1], N1, nmx1, mmx1, *m_C[2], *m_S[2], N2, nmx2, mmx2, a,
+            (unsigned)norm );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+    catch ( System::Exception^ sxpt )
+    {
+        throw gcnew GeographicErr( sxpt->Message );
+    }
+}
+
+//*****************************************************************************
+double SphericalHarmonic2::HarmonicSum(double tau1, double tau2, double x, double y, double z)
+{
+    return m_pSphericalHarmonic2->operator()( tau1, tau2, x, y, z );
+}
+
+//*****************************************************************************
+double SphericalHarmonic2::HarmonicSum(double tau1, double tau2, double x, double y, double z,
+                        [System::Runtime::InteropServices::Out] double% gradx,
+                        [System::Runtime::InteropServices::Out] double% grady,
+                        [System::Runtime::InteropServices::Out] double% gradz)
+{
+    double lgradx, lgrady, lgradz;
+    double out = m_pSphericalHarmonic2->operator()( tau1, tau2, x, y, z,
+        lgradx, lgrady, lgradz );
+    gradx = lgradx;
+    grady = lgrady;
+    gradz = lgradz;
+    return out;
+}
+
+//*****************************************************************************
+CircularEngine^ SphericalHarmonic2::Circle(double tau1, double tau2, double p,
+    double z, bool gradp)
+{
+    try
+    {
+        return gcnew CircularEngine( m_pSphericalHarmonic2->Circle( tau1, tau2, p, z, gradp ) );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew GeographicErr( "Memory allocation error in SphericalHarmonic2::Circle" );
+    }
+}
+
+//*****************************************************************************
+SphericalCoefficients^ SphericalHarmonic2::Coefficients()
+{
+    return gcnew SphericalCoefficients( m_pSphericalHarmonic2->Coefficients() );
+}
+
+//*****************************************************************************
+SphericalCoefficients^ SphericalHarmonic2::Coefficients1()
+{
+    return gcnew SphericalCoefficients( m_pSphericalHarmonic2->Coefficients1() );
+}
+
+//*****************************************************************************
+SphericalCoefficients^ SphericalHarmonic2::Coefficients2()
+{
+    return gcnew SphericalCoefficients( m_pSphericalHarmonic2->Coefficients2() );
+}
diff --git a/dotnet/NETGeographicLib/SphericalHarmonic2.h b/dotnet/NETGeographicLib/SphericalHarmonic2.h
new file mode 100644
index 0000000..faffcae
--- /dev/null
+++ b/dotnet/NETGeographicLib/SphericalHarmonic2.h
@@ -0,0 +1,251 @@
+#pragma once
+/**
+ * \file NETGeographicLib/SphericalHarmonic2.h
+ * \brief Header for NETGeographicLib::SphericalHarmonic2 class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+    ref class CircularEngine;
+    ref class SphericalCoefficients;
+  /**
+   * \brief .NET wrapper for GeographicLib::SphericalHarmonic2.
+   *
+   * This class allows .NET applications to access GeographicLib::SphericalHarmonic2.
+   *
+   * This class is similar to SphericalHarmonic, except that the coefficients
+   * \e C<sub>\e nm</sub> are replaced by \e C<sub>\e nm</sub> + \e tau'
+   * C'<sub>\e nm</sub> + \e tau'' C''<sub>\e nm</sub> (and similarly for \e
+   * S<sub>\e nm</sub>).
+   *
+   * C# Example:
+   * \include example-SphericalHarmonic2.cs
+   * Managed C++ Example:
+   * \include example-SphericalHarmonic2.cpp
+   * Visual Basic Example:
+   * \include example-SphericalHarmonic2.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * This class replaces the () operator with HarmonicSum().
+   *
+   * Coefficients, Coefficients1, and Coefficients2 return a SphericalCoefficients
+   * object.
+   **********************************************************************/
+    public ref class SphericalHarmonic2
+    {
+        private:
+        // pointer to the unmanaged GeographicLib::SphericalHarmonic2
+        const GeographicLib::SphericalHarmonic2* m_pSphericalHarmonic2;
+        // the finalizer destroys the unmanaged memory when the object is destroyed.
+        !SphericalHarmonic2(void);
+        // the number of coefficient vectors.
+        static const int m_numCoeffVectors = 3;
+        // local containers for the cosine and sine coefficients.  The
+        // GeographicLib::SphericalEngine::coeffs class uses a
+        // std::vector::iterator to access these vectors.
+        std::vector<double> **m_C, **m_S;
+    public:
+        /**
+         * Supported normalizations for associate Legendre polynomials.
+         **********************************************************************/
+        enum class Normalization {
+          /**
+           * Fully normalized associated Legendre polynomials.  See
+           * SphericalHarmonic::FULL for documentation.
+           *
+           * @hideinitializer
+           **********************************************************************/
+          FULL = GeographicLib::SphericalEngine::FULL,
+          /**
+           * Schmidt semi-normalized associated Legendre polynomials.  See
+           * SphericalHarmonic::SCHMIDT for documentation.
+           *
+           * @hideinitializer
+           **********************************************************************/
+          SCHMIDT = GeographicLib::SphericalEngine::SCHMIDT
+        };
+
+        /**
+         * Constructor with a full set of coefficients specified.
+         *
+         * @param[in] C the coefficients \e C<sub>\e nm</sub>.
+         * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+         * @param[in] N the maximum degree and order of the sum
+         * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.
+         * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.
+         * @param[in] N1 the maximum degree and order of the first correction
+         *   coefficients \e C'<sub>\e nm</sub> and \e S'<sub>\e nm</sub>.
+         * @param[in] C2 the coefficients \e C''<sub>\e nm</sub>.
+         * @param[in] S2 the coefficients \e S''<sub>\e nm</sub>.
+         * @param[in] N2 the maximum degree and order of the second correction
+         *   coefficients \e C'<sub>\e nm</sub> and \e S'<sub>\e nm</sub>.
+         * @param[in] a the reference radius appearing in the definition of the
+         *   sum.
+         * @param[in] norm the normalization for the associated Legendre
+         *   polynomials, either SphericalHarmonic2::FULL (the default) or
+         *   SphericalHarmonic2::SCHMIDT.
+         * @exception GeographicErr if \e N and \e N1 do not satisfy \e N ≥
+         *   \e N1 ≥ −1, and similarly for \e N2.
+         * @exception GeographicErr if any of the vectors of coefficients is not
+         *   large enough.
+         *
+         * See SphericalHarmonic for the way the coefficients should be stored.  \e
+         * N1 and \e N2 should satisfy \e N1 ≤ \e N and \e N2 ≤ \e N.
+         *
+         * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e
+         * C', \e S', \e C'', and \e S''.  These arrays should not be altered or
+         * destroyed during the lifetime of a SphericalHarmonic object.
+         **********************************************************************/
+        SphericalHarmonic2(array<double>^ C,
+                           array<double>^ S,
+                           int N,
+                           array<double>^ C1,
+                           array<double>^ S1,
+                           int N1,
+                           array<double>^ C2,
+                           array<double>^ S2,
+                           int N2,
+                           double a,
+                           Normalization norm );
+
+        /**
+         * Constructor with a subset of coefficients specified.
+         *
+         * @param[in] C the coefficients \e C<sub>\e nm</sub>.
+         * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+         * @param[in] N the degree used to determine the layout of \e C and \e S.
+         * @param[in] nmx the maximum degree used in the sum.  The sum over \e n is
+         *   from 0 thru \e nmx.
+         * @param[in] mmx the maximum order used in the sum.  The sum over \e m is
+         *   from 0 thru min(\e n, \e mmx).
+         * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.
+         * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.
+         * @param[in] N1 the degree used to determine the layout of \e C' and \e
+         *   S'.
+         * @param[in] nmx1 the maximum degree used for \e C' and \e S'.
+         * @param[in] mmx1 the maximum order used for \e C' and \e S'.
+         * @param[in] C2 the coefficients \e C''<sub>\e nm</sub>.
+         * @param[in] S2 the coefficients \e S''<sub>\e nm</sub>.
+         * @param[in] N2 the degree used to determine the layout of \e C'' and \e
+         *   S''.
+         * @param[in] nmx2 the maximum degree used for \e C'' and \e S''.
+         * @param[in] mmx2 the maximum order used for \e C'' and \e S''.
+         * @param[in] a the reference radius appearing in the definition of the
+         *   sum.
+         * @param[in] norm the normalization for the associated Legendre
+         *   polynomials, either SphericalHarmonic2::FULL (the default) or
+         *   SphericalHarmonic2::SCHMIDT.
+         * @exception GeographicErr if the parameters do not satisfy \e N ≥ \e
+         *   nmx ≥ \e mmx ≥ −1; \e N1 ≥ \e nmx1 ≥ \e mmx1 ≥
+         *   −1; \e N ≥ \e N1; \e nmx ≥ \e nmx1; \e mmx ≥ \e mmx1;
+         *   and similarly for \e N2, \e nmx2, and \e mmx2.
+         * @exception GeographicErr if any of the vectors of coefficients is not
+         *   large enough.
+         *
+         * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e
+         * C', \e S', \e C'', and \e S''.  These arrays should not be altered or
+         * destroyed during the lifetime of a SphericalHarmonic object.
+         **********************************************************************/
+        SphericalHarmonic2(array<double>^ C,
+                           array<double>^ S,
+                           int N, int nmx, int mmx,
+                           array<double>^ C1,
+                           array<double>^ S1,
+                           int N1, int nmx1, int mmx1,
+                           array<double>^ C2,
+                           array<double>^ S2,
+                           int N2, int nmx2, int mmx2,
+                           double a,
+                           Normalization norm );
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~SphericalHarmonic2()
+        { this->!SphericalHarmonic2(); }
+
+        /**
+         * Compute a spherical harmonic sum with two correction terms.
+         *
+         * @param[in] tau1 multiplier for correction coefficients \e C' and \e S'.
+         * @param[in] tau2 multiplier for correction coefficients \e C'' and \e S''.
+         * @param[in] x cartesian coordinate.
+         * @param[in] y cartesian coordinate.
+         * @param[in] z cartesian coordinate.
+         * @return \e V the spherical harmonic sum.
+         *
+         * This routine requires constant memory and thus never throws an
+         * exception.
+         **********************************************************************/
+        double HarmonicSum(double tau1, double tau2, double x, double y, double z);
+
+        /**
+         * Compute a spherical harmonic sum with two correction terms and its
+         * gradient.
+         *
+         * @param[in] tau1 multiplier for correction coefficients \e C' and \e S'.
+         * @param[in] tau2 multiplier for correction coefficients \e C'' and \e S''.
+         * @param[in] x cartesian coordinate.
+         * @param[in] y cartesian coordinate.
+         * @param[in] z cartesian coordinate.
+         * @param[out] gradx \e x component of the gradient
+         * @param[out] grady \e y component of the gradient
+         * @param[out] gradz \e z component of the gradient
+         * @return \e V the spherical harmonic sum.
+         *
+         * This is the same as the previous function, except that the components of
+         * the gradients of the sum in the \e x, \e y, and \e z directions are
+         * computed.  This routine requires constant memory and thus never throws
+         * an exception.
+         **********************************************************************/
+        double HarmonicSum(double tau1, double tau2, double x, double y, double z,
+                        [System::Runtime::InteropServices::Out] double% gradx,
+                        [System::Runtime::InteropServices::Out] double% grady,
+                        [System::Runtime::InteropServices::Out] double% gradz);
+
+        /**
+         * Create a CircularEngine to allow the efficient evaluation of several
+         * points on a circle of latitude at fixed values of \e tau1 and \e tau2.
+         *
+         * @param[in] tau1 multiplier for correction coefficients \e C' and \e S'.
+         * @param[in] tau2 multiplier for correction coefficients \e C'' and \e S''.
+         * @param[in] p the radius of the circle.
+         * @param[in] z the height of the circle above the equatorial plane.
+         * @param[in] gradp if true the returned object will be able to compute the
+         *   gradient of the sum.
+         * @exception std::bad_alloc if the memory for the CircularEngine can't be
+         *   allocated.
+         * @return the CircularEngine object.
+         *
+         * SphericalHarmonic2::operator()() exchanges the order of the sums in the
+         * definition, i.e., ∑<sub>n = 0..N</sub> ∑<sub>m = 0..n</sub>
+         * becomes ∑<sub>m = 0..N</sub> ∑<sub>n = m..N</sub>..
+         * SphericalHarmonic2::Circle performs the inner sum over degree \e n
+         * (which entails about <i>N</i><sup>2</sup> operations).  Calling
+         * CircularEngine::operator()() on the returned object performs the outer
+         * sum over the order \e m (about \e N operations).
+         *
+         * See SphericalHarmonic::Circle for an example of its use.
+         **********************************************************************/
+        CircularEngine^ Circle(double tau1, double tau2, double p, double z, bool gradp);
+
+        /**
+        * @return the zeroth SphericalCoefficients object.
+        **********************************************************************/
+        SphericalCoefficients^ Coefficients();
+        /**
+        * @return the first SphericalCoefficients object.
+        **********************************************************************/
+        SphericalCoefficients^ Coefficients1();
+        /**
+        * @return the second SphericalCoefficients object.
+        **********************************************************************/
+        SphericalCoefficients^ Coefficients2();
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/TransverseMercator.cpp b/dotnet/NETGeographicLib/TransverseMercator.cpp
new file mode 100644
index 0000000..ea559bc
--- /dev/null
+++ b/dotnet/NETGeographicLib/TransverseMercator.cpp
@@ -0,0 +1,123 @@
+/**
+ * \file NETGeographicLib/TransverseMercator.cpp
+ * \brief Implementation for NETGeographicLib::TransverseMercator class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/TransverseMercator.hpp"
+#include "TransverseMercator.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Failed to allocate memory for a GeographicLib::TransverseMercator";
+
+//*****************************************************************************
+TransverseMercator::!TransverseMercator(void)
+{
+    if ( m_pTransverseMercator != NULL )
+    {
+        delete m_pTransverseMercator;
+        m_pTransverseMercator = NULL;
+    }
+}
+
+//*****************************************************************************
+TransverseMercator::TransverseMercator(double a, double f, double k0)
+{
+    try
+    {
+        m_pTransverseMercator = new GeographicLib::TransverseMercator( a, f, k0 );
+    }
+    catch (std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch (std::exception err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+TransverseMercator::TransverseMercator()
+{
+    try
+    {
+        m_pTransverseMercator = new GeographicLib::TransverseMercator(
+            GeographicLib::TransverseMercator::UTM );
+    }
+    catch (std::bad_alloc )
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void TransverseMercator::Forward(double lon0, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y,
+                [System::Runtime::InteropServices::Out] double% gamma,
+                [System::Runtime::InteropServices::Out] double% k)
+{
+    double lx, ly, lgamma, lk;
+    m_pTransverseMercator->Forward( lon0, lat, lon, lx, ly, lgamma, lk );
+    x = lx;
+    y = ly;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void TransverseMercator::Reverse(double lon0, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon,
+                [System::Runtime::InteropServices::Out] double% gamma,
+                [System::Runtime::InteropServices::Out] double% k)
+{
+    double llat, llon, lgamma, lk;
+    m_pTransverseMercator->Reverse( lon0, x, y, llat, llon, lgamma, lk );
+    lat = llat;
+    lon = llon;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void TransverseMercator::Forward(double lon0, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y)
+{
+    double lx, ly;
+    m_pTransverseMercator->Forward( lon0, lat, lon, lx, ly );
+    x = lx;
+    y = ly;
+}
+
+//*****************************************************************************
+void TransverseMercator::Reverse(double lon0, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon;
+    m_pTransverseMercator->Reverse( lon0, x, y, llat, llon );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double TransverseMercator::MajorRadius::get()
+{ return m_pTransverseMercator->MajorRadius(); }
+
+//*****************************************************************************
+double TransverseMercator::Flattening::get()
+{ return m_pTransverseMercator->Flattening(); }
+
+//*****************************************************************************
+double TransverseMercator::CentralScale::get()
+{ return m_pTransverseMercator->CentralScale(); }
diff --git a/dotnet/NETGeographicLib/TransverseMercator.h b/dotnet/NETGeographicLib/TransverseMercator.h
new file mode 100644
index 0000000..a18147c
--- /dev/null
+++ b/dotnet/NETGeographicLib/TransverseMercator.h
@@ -0,0 +1,188 @@
+#pragma once
+/**
+ * \file NETGeographicLib/TransverseMercator.h
+ * \brief Header for NETGeographicLib::TransverseMercator class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::TransverseMercator.
+   *
+   * This class allows .NET applications to access GeographicLib::TransverseMercator.
+   *
+   * This uses Krüger's method which evaluates the projection and its
+   * inverse in terms of a series.  See
+   *  - L. Krüger,
+   *    <a href="http://dx.doi.org/10.2312/GFZ.b103-krueger28"> Konforme
+   *    Abbildung des Erdellipsoids in der Ebene</a> (Conformal mapping of the
+   *    ellipsoidal earth to the plane), Royal Prussian Geodetic Institute, New
+   *    Series 52, 172 pp. (1912).
+   *  - C. F. F. Karney,
+   *    <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
+   *    Transverse Mercator with an accuracy of a few nanometers,</a>
+   *    J. Geodesy 85(8), 475--485 (Aug. 2011);
+   *    preprint
+   *    <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.
+   *
+   * Krüger's method has been extended from 4th to 6th order.  The maximum
+   * error is 5 nm (5 nanometers), ground distance, for all positions within 35
+   * degrees of the central meridian.  The error in the convergence is 2
+   * × 10<sup>−15</sup>" and the relative error in the scale
+   * is 6 − 10<sup>−12</sup>%%.  See Sec. 4 of
+   * <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for details.
+   * The speed penalty in going to 6th order is only about 1%.
+   * TransverseMercatorExact is an alternative implementation of the projection
+   * using exact formulas which yield accurate (to 8 nm) results over the
+   * entire ellipsoid.
+   *
+   * The ellipsoid parameters and the central scale are set in the constructor.
+   * The central meridian (which is a trivial shift of the longitude) is
+   * specified as the \e lon0 argument of the TransverseMercator::Forward and
+   * TransverseMercator::Reverse functions.  The latitude of origin is taken to
+   * be the equator.  There is no provision in this class for specifying a
+   * false easting or false northing or a different latitude of origin.
+   * However these are can be simply included by the calling function.  For
+   * example, the UTMUPS class applies the false easting and false northing for
+   * the UTM projections.  A more complicated example is the British National
+   * Grid (<a href="http://www.spatialreference.org/ref/epsg/7405/">
+   * EPSG:7405</a>) which requires the use of a latitude of origin.  This is
+   * implemented by the GeographicLib::OSGB class.
+   *
+   * See GeographicLib::TransverseMercator.cpp for more information on the
+   * implementation.
+   *
+   * See \ref transversemercator for a discussion of this projection.
+   *
+   * C# Example:
+   * \include example-TransverseMercator.cs
+   * Managed C++ Example:
+   * \include example-TransverseMercator.cpp
+   * Visual Basic Example:
+   * \include example-TransverseMercator.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor is provided that assumes WGS84 parameters and
+   * a UTM scale factor.
+   *
+   * The MajorRadius, Flattening, and CentralScale functions are
+   * implemented as properties.
+   **********************************************************************/
+    public ref class TransverseMercator
+    {
+        private:
+        // pointer to the unmanaged GeographicLib::TransverseMercator.
+        const GeographicLib::TransverseMercator* m_pTransverseMercator;
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !TransverseMercator(void);
+    public:
+        /**
+         * Constructor for a ellipsoid with
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+         *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @param[in] k0 central scale factor.
+         * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+         *   not positive.
+         **********************************************************************/
+        TransverseMercator(double a, double f, double k0);
+
+        /**
+         * The default constructor assumes a WGS84 ellipsoid and a UTM scale
+         * factor.
+         **********************************************************************/
+        TransverseMercator();
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~TransverseMercator()
+        { this->!TransverseMercator(); }
+
+        /**
+         * Forward projection, from geographic to transverse Mercator.
+         *
+         * @param[in] lon0 central meridian of the projection (degrees).
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * No false easting or northing is added. \e lat should be in the range
+         * [−90°, 90°]; \e lon and \e lon0 should be in the
+         * range [−540°, 540°).
+         **********************************************************************/
+        void Forward(double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * Reverse projection, from transverse Mercator to geographic.
+         *
+         * @param[in] lon0 central meridian of the projection (degrees).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * No false easting or northing is added.  \e lon0 should be in the range
+         * [−540°, 540°).  The value of \e lon returned is in
+         * the range [−180°, 180°).
+         **********************************************************************/
+        void Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * TransverseMercator::Forward without returning the convergence and scale.
+         **********************************************************************/
+        void Forward(double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y);
+
+        /**
+         * TransverseMercator::Reverse without returning the convergence and scale.
+         **********************************************************************/
+        void Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value used in
+         *   the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return \e k0 central scale for the projection.  This is the value of \e
+         *   k0 used in the constructor and is the scale on the central meridian.
+         **********************************************************************/
+        property double CentralScale { double get(); }
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/TransverseMercatorExact.cpp b/dotnet/NETGeographicLib/TransverseMercatorExact.cpp
new file mode 100644
index 0000000..733c6d1
--- /dev/null
+++ b/dotnet/NETGeographicLib/TransverseMercatorExact.cpp
@@ -0,0 +1,128 @@
+/**
+ * \file NETGeographicLib/TransverseMercatorExact.cpp
+ * \brief Implementation for NETGeographicLib::TransverseMercatorExact class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/TransverseMercatorExact.hpp"
+#include "TransverseMercatorExact.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+const char BADALLOC[] = "Unable to allocate memory for a GeographicLib::TransverseMercatorExact";
+
+//*****************************************************************************
+TransverseMercatorExact::!TransverseMercatorExact(void)
+{
+    if ( m_pTransverseMercatorExact != NULL )
+    {
+        delete m_pTransverseMercatorExact;
+        m_pTransverseMercatorExact = NULL;
+    }
+}
+
+//*****************************************************************************
+TransverseMercatorExact::TransverseMercatorExact(double a, double f, double k0,
+    bool extendp)
+{
+    try
+    {
+        m_pTransverseMercatorExact = new GeographicLib::TransverseMercatorExact(
+            a, f, k0, extendp );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+    catch ( std::exception err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+TransverseMercatorExact::TransverseMercatorExact()
+{
+    try
+    {
+        m_pTransverseMercatorExact =
+            new GeographicLib::TransverseMercatorExact(
+                GeographicLib::TransverseMercatorExact::UTM );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void TransverseMercatorExact::Forward(double lon0, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y,
+                [System::Runtime::InteropServices::Out] double% gamma,
+                [System::Runtime::InteropServices::Out] double% k)
+{
+    double lx, ly, lgamma, lk;
+    m_pTransverseMercatorExact->Forward( lon0, lat, lon, lx, ly,
+                                            lgamma, lk );
+    x = lx;
+    y = ly;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void TransverseMercatorExact::Reverse(double lon0, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon,
+                [System::Runtime::InteropServices::Out] double% gamma,
+                [System::Runtime::InteropServices::Out] double% k)
+{
+    double llat, llon, lgamma, lk;
+    m_pTransverseMercatorExact->Reverse( lon0, x, y, llat, llon,
+                                            lgamma, lk );
+    lat = llat;
+    lon = llon;
+    gamma = lgamma;
+    k = lk;
+}
+
+//*****************************************************************************
+void TransverseMercatorExact::Forward(double lon0, double lat, double lon,
+                [System::Runtime::InteropServices::Out] double% x,
+                [System::Runtime::InteropServices::Out] double% y)
+{
+    double lx, ly;
+    m_pTransverseMercatorExact->Forward( lon0, lat, lon, lx, ly );
+    x = lx;
+    y = ly;
+}
+
+//*****************************************************************************
+void TransverseMercatorExact::Reverse(double lon0, double x, double y,
+                [System::Runtime::InteropServices::Out] double% lat,
+                [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon;
+    m_pTransverseMercatorExact->Reverse( lon0, x, y, llat, llon );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double TransverseMercatorExact::MajorRadius::get()
+{ return m_pTransverseMercatorExact->MajorRadius(); }
+
+//*****************************************************************************
+double TransverseMercatorExact::Flattening::get()
+{ return m_pTransverseMercatorExact->Flattening(); }
+
+//*****************************************************************************
+double TransverseMercatorExact::CentralScale::get()
+{ return m_pTransverseMercatorExact->CentralScale(); }
diff --git a/dotnet/NETGeographicLib/TransverseMercatorExact.h b/dotnet/NETGeographicLib/TransverseMercatorExact.h
new file mode 100644
index 0000000..26ebe58
--- /dev/null
+++ b/dotnet/NETGeographicLib/TransverseMercatorExact.h
@@ -0,0 +1,236 @@
+#pragma once
+/**
+ * \file NETGeographicLib/TransverseMercatorExact.h
+ * \brief Header for NETGeographicLib::TransverseMercatorExact class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::TransverseMercatorExact.
+   *
+   * This class allows .NET applications to access GeographicLib::TransverseMercatorExact.
+   *
+   * Implementation of the Transverse Mercator Projection given in
+   *  - L. P. Lee,
+   *    <a href="http://dx.doi.org/10.3138/X687-1574-4325-WM62"> Conformal
+   *    Projections Based On Jacobian Elliptic Functions</a>, Part V of
+   *    Conformal Projections Based on Elliptic Functions,
+   *    (B. V. Gutsell, Toronto, 1976), 128pp.,
+   *    ISBN: 0919870163
+   *    (also appeared as:
+   *    Monograph 16, Suppl. No. 1 to Canadian Cartographer, Vol 13).
+   *  - C. F. F. Karney,
+   *    <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
+   *    Transverse Mercator with an accuracy of a few nanometers,</a>
+   *    J. Geodesy 85(8), 475--485 (Aug. 2011);
+   *    preprint
+   *    <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.
+   *
+   * Lee gives the correct results for forward and reverse transformations
+   * subject to the branch cut rules (see the description of the \e extendp
+   * argument to the constructor).  The maximum error is about 8 nm (8
+   * nanometers), ground distance, for the forward and reverse transformations.
+   * The error in the convergence is 2 × 10<sup>−15</sup>",
+   * the relative error in the scale is 7 × 10<sup>−12</sup>%%.
+   * See Sec. 3 of
+   * <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for details.
+   * The method is "exact" in the sense that the errors are close to the
+   * round-off limit and that no changes are needed in the algorithms for them
+   * to be used with reals of a higher precision.  Thus the errors using long
+   * double (with a 64-bit fraction) are about 2000 times smaller than using
+   * double (with a 53-bit fraction).
+   *
+   * This algorithm is about 4.5 times slower than the 6th-order Krüger
+   * method, TransverseMercator, taking about 11 us for a combined forward and
+   * reverse projection on a 2.66 GHz Intel machine (g++, version 4.3.0, -O3).
+   *
+   * The ellipsoid parameters and the central scale are set in the constructor.
+   * The central meridian (which is a trivial shift of the longitude) is
+   * specified as the \e lon0 argument of the TransverseMercatorExact::Forward
+   * and TransverseMercatorExact::Reverse functions.  The latitude of origin is
+   * taken to be the equator.  See the documentation on TransverseMercator for
+   * how to include a false easting, false northing, or a latitude of origin.
+   *
+   * See <a href="http://geographiclib.sourceforge.net/tm-grid.kmz"
+   * type="application/vnd.google-earth.kmz"> tm-grid.kmz</a>, for an
+   * illustration of the transverse Mercator grid in Google Earth.
+   *
+   * See GeographicLib::TransverseMercatorExact.cpp for more information on the
+   * implementation.
+   *
+   * See \ref transversemercator for a discussion of this projection.
+   *
+   * C# Example:
+   * \include example-TransverseMercatorExact.cs
+   * Managed C++ Example:
+   * \include example-TransverseMercatorExact.cpp
+   * Visual Basic Example:
+   * \include example-TransverseMercatorExact.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * A default constructor is provided that assumes WGS84 parameters and
+   * a UTM scale factor.
+   *
+   * The MajorRadius, Flattening, and CentralScale functions are
+   * implemented as properties.
+   **********************************************************************/
+    public ref class TransverseMercatorExact
+    {
+        private:
+        // a pointer to the unmanaged GeographicLib::TransverseMercatorExact.
+        GeographicLib::TransverseMercatorExact* m_pTransverseMercatorExact;
+        // the finalizer frees the unmanaged memory when the object is destroyed.
+        !TransverseMercatorExact(void);
+    public:
+        /**
+         * Constructor for a ellipsoid with
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] f flattening of ellipsoid.  If \e f > 1, set flattening
+         *   to 1/\e f.
+         * @param[in] k0 central scale factor.
+         * @param[in] extendp use extended domain.
+         * @exception GeographicErr if \e a, \e f, or \e k0 is not positive.
+         *
+         * The transverse Mercator projection has a branch point singularity at \e
+         * lat = 0 and \e lon − \e lon0 = 90 (1 − \e e) or (for
+         * TransverseMercatorExact::UTM) x = 18381 km, y = 0m.  The \e extendp
+         * argument governs where the branch cut is placed.  With \e extendp =
+         * false, the "standard" convention is followed, namely the cut is placed
+         * along \e x > 18381 km, \e y = 0m.  Forward can be called with any \e lat
+         * and \e lon then produces the transformation shown in Lee, Fig 46.
+         * Reverse analytically continues this in the ± \e x direction.  As
+         * a consequence, Reverse may map multiple points to the same geographic
+         * location; for example, for TransverseMercatorExact::UTM, \e x =
+         * 22051449.037349 m, \e y = −7131237.022729 m and \e x =
+         * 29735142.378357 m, \e y = 4235043.607933 m both map to \e lat =
+         * −2°, \e lon = 88°.
+         *
+         * With \e extendp = true, the branch cut is moved to the lower left
+         * quadrant.  The various symmetries of the transverse Mercator projection
+         * can be used to explore the projection on any sheet.  In this mode the
+         * domains of \e lat, \e lon, \e x, and \e y are restricted to
+         * - the union of
+         *   - \e lat in [0, 90] and \e lon − \e lon0 in [0, 90]
+         *   - \e lat in (-90, 0] and \e lon − \e lon0 in [90 (1 − \e
+               e), 90]
+         * - the union of
+         *   - <i>x</i>/(\e k0 \e a) in [0, ∞) and
+         *     <i>y</i>/(\e k0 \e a) in [0, E(<i>e</i><sup>2</sup>)]
+         *   - <i>x</i>/(\e k0 \e a) in [K(1 − <i>e</i><sup>2</sup>) −
+         *     E(1 − <i>e</i><sup>2</sup>), ∞) and <i>y</i>/(\e k0 \e
+         *     a) in (−∞, 0]
+         * .
+         * See Sec. 5 of
+         * <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for a full
+         * discussion of the treatment of the branch cut.
+         *
+         * The method will work for all ellipsoids used in terrestrial geodesy.
+         * The method cannot be applied directly to the case of a sphere (\e f = 0)
+         * because some the constants characterizing this method diverge in that
+         * limit, and in practice, \e f should be larger than about
+         * numeric_limits<double>::epsilon().  However, TransverseMercator treats the
+         * sphere exactly.
+         **********************************************************************/
+        TransverseMercatorExact(double a, double f, double k0, bool extendp );
+
+        /**
+         * The default constructor assumes a WGS84 ellipsoid and a UTM scale
+         * factor.
+         **********************************************************************/
+        TransverseMercatorExact();
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~TransverseMercatorExact()
+        { this->!TransverseMercatorExact(); }
+
+        /**
+         * Forward projection, from geographic to transverse Mercator.
+         *
+         * @param[in] lon0 central meridian of the projection (degrees).
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * No false easting or northing is added. \e lat should be in the range
+         * [−90°, 90°]; \e lon and \e lon0 should be in the
+         * range [−540°, 540°).
+         **********************************************************************/
+        void Forward(double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * Reverse projection, from transverse Mercator to geographic.
+         *
+         * @param[in] lon0 central meridian of the projection (degrees).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         *
+         * No false easting or northing is added.  \e lon0 should be in the range
+         * [−540°, 540°).  The value of \e lon returned is in
+         * the range [−180°, 180°).
+         **********************************************************************/
+        void Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon,
+                     [System::Runtime::InteropServices::Out] double% gamma,
+                     [System::Runtime::InteropServices::Out] double% k);
+
+        /**
+         * TransverseMercatorExact::Forward without returning the convergence and
+         * scale.
+         **********************************************************************/
+        void Forward(double lon0, double lat, double lon,
+                     [System::Runtime::InteropServices::Out] double% x,
+                     [System::Runtime::InteropServices::Out] double% y);
+
+        /**
+         * TransverseMercatorExact::Reverse without returning the convergence and
+         * scale.
+         **********************************************************************/
+        void Reverse(double lon0, double x, double y,
+                     [System::Runtime::InteropServices::Out] double% lat,
+                     [System::Runtime::InteropServices::Out] double% lon);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value used in
+         *   the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * @return \e k0 central scale for the projection.  This is the value of \e
+         *   k0 used in the constructor and is the scale on the central meridian.
+         **********************************************************************/
+        property double CentralScale { double get(); }
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/UTMUPS.cpp b/dotnet/NETGeographicLib/UTMUPS.cpp
new file mode 100644
index 0000000..307610c
--- /dev/null
+++ b/dotnet/NETGeographicLib/UTMUPS.cpp
@@ -0,0 +1,215 @@
+/**
+ * \file NETGeographicLib/UTMUPS.cpp
+ * \brief Implementation for NETGeographicLib::UTMUPS class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/UTMUPS.hpp"
+#include "UTMUPS.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+int UTMUPS::StandardZone(double lat, double lon, int setzone)
+{
+    try
+    {
+        return GeographicLib::UTMUPS::StandardZone( lat, lon, setzone );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void UTMUPS::Forward(double lat, double lon,
+                    [System::Runtime::InteropServices::Out] int% zone,
+                    [System::Runtime::InteropServices::Out] bool% northp,
+                    [System::Runtime::InteropServices::Out] double% x,
+                    [System::Runtime::InteropServices::Out] double% y,
+                    [System::Runtime::InteropServices::Out] double% gamma,
+                    [System::Runtime::InteropServices::Out] double% k,
+                    int setzone, bool mgrslimits)
+{
+    try
+    {
+        int lzone;
+        bool lnorthp;
+        double lx, ly, lgamma, lk;
+        GeographicLib::UTMUPS::Forward(lat, lon,
+                                       lzone, lnorthp, lx, ly,
+                                       lgamma, lk,
+                                       setzone, mgrslimits);
+        zone = lzone;
+        northp = northp;
+        x = lx;
+        y = ly;
+        gamma = lgamma;
+        k = lk;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void UTMUPS::Reverse(int zone, bool northp, double x, double y,
+                    [System::Runtime::InteropServices::Out] double% lat,
+                    [System::Runtime::InteropServices::Out] double% lon,
+                    [System::Runtime::InteropServices::Out] double% gamma,
+                    [System::Runtime::InteropServices::Out] double% k,
+                    bool mgrslimits)
+{
+    try
+    {
+        double llat, llon, lgamma, lk;
+        GeographicLib::UTMUPS::Reverse( zone, northp, x, y, llat, llon, lgamma,
+                                        lk, mgrslimits );
+        lat = llat;
+        lon = llon;
+        gamma = lgamma;
+        k = lk;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void UTMUPS::Forward(double lat, double lon,
+                    [System::Runtime::InteropServices::Out] int% zone,
+                    [System::Runtime::InteropServices::Out] bool% northp,
+                    [System::Runtime::InteropServices::Out] double% x,
+                    [System::Runtime::InteropServices::Out] double% y,
+                    int setzone, bool mgrslimits )
+{
+    try
+    {
+        double gamma, k, lx, ly;
+        bool lnorthp;
+        int lzone;
+        GeographicLib::UTMUPS::Forward(lat, lon, lzone, lnorthp, lx, ly,
+                                       gamma, k, setzone, mgrslimits);
+        x = lx;
+        y = ly;
+        zone = lzone;
+        northp = lnorthp;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void UTMUPS::Reverse(int zone, bool northp, double x, double y,
+                    [System::Runtime::InteropServices::Out] double% lat,
+                    [System::Runtime::InteropServices::Out] double% lon,
+                    bool mgrslimits)
+{
+    try
+    {
+        double gamma, k, llat, llon;
+        GeographicLib::UTMUPS::Reverse(zone, northp, x, y, llat, llon, gamma,
+                                        k, mgrslimits);
+        lat = llat;
+        lon = llon;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void UTMUPS::Transfer(int zonein, bool northpin, double xin, double yin,
+                        int zoneout, bool northpout,
+                        [System::Runtime::InteropServices::Out] double% xout,
+                        [System::Runtime::InteropServices::Out] double% yout,
+                        [System::Runtime::InteropServices::Out] int% zone)
+{
+    try
+    {
+        int lzone;
+        double lxout, lyout;
+        GeographicLib::UTMUPS::Transfer(zonein, northpin, xin, yin,
+                                        zoneout, northpout, lxout, lyout,
+                                        lzone);
+        xout = lxout;
+        yout = lyout;
+        zone = lzone;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void UTMUPS::DecodeZone(System::String^ zonestr,
+    [System::Runtime::InteropServices::Out] int% zone,
+    [System::Runtime::InteropServices::Out] bool% northp)
+{
+    try
+    {
+        std::string zoneIn = StringConvert::ManagedToUnmanaged( zonestr );
+        int lzone;
+        bool lnorthp;
+        GeographicLib::UTMUPS::DecodeZone( zoneIn, lzone, lnorthp );
+        zone = lzone;
+        northp = lnorthp;
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+System::String^ UTMUPS::EncodeZone(int zone, bool northp)
+{
+    try
+    {
+        return StringConvert::UnmanagedToManaged( GeographicLib::UTMUPS::EncodeZone( zone, northp ) );
+    }
+    catch ( const std::exception& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+}
+
+//*****************************************************************************
+void UTMUPS::DecodeEPSG(int epsg,
+    [System::Runtime::InteropServices::Out] int% zone,
+    [System::Runtime::InteropServices::Out] bool% northp)
+{
+    int lzone;
+    bool lnorthp;
+    GeographicLib::UTMUPS::DecodeEPSG( epsg, lzone, lnorthp );
+    zone = lzone;
+    northp = lnorthp;
+}
+
+//*****************************************************************************
+int UTMUPS::EncodeEPSG(int zone, bool northp)
+{
+    return GeographicLib::UTMUPS::EncodeEPSG( zone, northp );
+}
+
+//****************************************************************************
+double UTMUPS::UTMShift() { return GeographicLib::UTMUPS::UTMShift(); }
+
+//****************************************************************************
+double UTMUPS::MajorRadius() { return GeographicLib::UTMUPS::MajorRadius(); }
+
+//****************************************************************************
+double UTMUPS::Flattening() { return GeographicLib::UTMUPS::Flattening(); }
diff --git a/dotnet/NETGeographicLib/UTMUPS.h b/dotnet/NETGeographicLib/UTMUPS.h
new file mode 100644
index 0000000..4b9c7d2
--- /dev/null
+++ b/dotnet/NETGeographicLib/UTMUPS.h
@@ -0,0 +1,398 @@
+#pragma once
+/**
+ * \file NETGeographicLib/UTMUPS.h
+ * \brief Header for NETGeographicLib::UTMUPS class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib
+{
+  /**
+   * \brief .NET wrapper for GeographicLib::UTMUPS.
+   *
+   * This class allows .NET applications to access GeographicLib::UTMUPS.
+   *
+   * UTM and UPS are defined
+   * - J. W. Hager, J. F. Behensky, and B. W. Drew,
+   *   <a href="http://earth-info.nga.mil/GandG/publications/tm8358.2/TM8358_2.pdf">
+   *   The Universal Grids: Universal Transverse Mercator (UTM) and Universal
+   *   Polar Stereographic (UPS)</a>, Defense Mapping Agency, Technical Manual
+   *   TM8358.2 (1989).
+   * .
+   * Section 2-3 defines UTM and section 3-2.4 defines UPS.  This document also
+   * includes approximate algorithms for the computation of the underlying
+   * transverse Mercator and polar stereographic projections.  Here we
+   * substitute much more accurate algorithms given by
+   * GeographicLib:TransverseMercator and GeographicLib:PolarStereographic.
+   *
+   * In this implementation, the conversions are closed, i.e., output from
+   * Forward is legal input for Reverse and vice versa.  The error is about 5nm
+   * in each direction.  However, the conversion from legal UTM/UPS coordinates
+   * to geographic coordinates and back might throw an error if the initial
+   * point is within 5nm of the edge of the allowed range for the UTM/UPS
+   * coordinates.
+   *
+   * The simplest way to guarantee the closed property is to define allowed
+   * ranges for the eastings and northings for UTM and UPS coordinates.  The
+   * UTM boundaries are the same for all zones.  (The only place the
+   * exceptional nature of the zone boundaries is evident is when converting to
+   * UTM/UPS coordinates requesting the standard zone.)  The MGRS lettering
+   * scheme imposes natural limits on UTM/UPS coordinates which may be
+   * converted into MGRS coordinates.  For the conversion to/from geographic
+   * coordinates these ranges have been extended by 100km in order to provide a
+   * generous overlap between UTM and UPS and between UTM zones.
+   *
+   * The <a href="http://www.nga.mil">NGA</a> software package
+   * <a href="http://earth-info.nga.mil/GandG/geotrans/index.html">geotrans</a>
+   * also provides conversions to and from UTM and UPS.  Version 2.4.2 (and
+   * earlier) suffers from some drawbacks:
+   * - Inconsistent rules are used to determine the whether a particular UTM or
+   *   UPS coordinate is legal.  A more systematic approach is taken here.
+   * - The underlying projections are not very accurately implemented.
+   *
+   * C# Example:
+   * \include example-UTMUPS.cs
+   * Managed C++ Example:
+   * \include example-UTMUPS.cpp
+   * Visual Basic Example:
+   * \include example-UTMUPS.vb
+   *
+   **********************************************************************/
+    public ref class UTMUPS
+    {
+        private:
+        // hide the constructor since all members of the class are static.
+        UTMUPS() {}
+    public:
+        /**
+         * In this class we bring together the UTM and UPS coordinates systems.
+         * The UTM divides the earth between latitudes −80° and 84°
+         * into 60 zones numbered 1 thru 60.  Zone assign zone number 0 to the UPS
+         * regions, covering the two poles.  Within UTMUPS, non-negative zone
+         * numbers refer to one of the "physical" zones, 0 for UPS and [1, 60] for
+         * UTM.  Negative "pseudo-zone" numbers are used to select one of the
+         * physical zones.
+         **********************************************************************/
+        enum class ZoneSpec {
+          /**
+           * The smallest pseudo-zone number.
+           **********************************************************************/
+          MINPSEUDOZONE = -4,
+          /**
+           * A marker for an undefined or invalid zone.  Equivalent to NaN.
+           **********************************************************************/
+          INVALID = -4,
+          /**
+           * If a coordinate already include zone information (e.g., it is an MGRS
+           * coordinate), use that, otherwise apply the UTMUPS::STANDARD rules.
+           **********************************************************************/
+          MATCH = -3,
+          /**
+           * Apply the standard rules for UTM zone assigment extending the UTM zone
+           * to each pole to give a zone number in [1, 60].  For example, use UTM
+           * zone 38 for longitude in [42°, 48°).  The rules include the
+           * Norway and Svalbard exceptions.
+           **********************************************************************/
+          UTM = -2,
+          /**
+           * Apply the standard rules for zone assignment to give a zone number in
+           * [0, 60].  If the latitude is not in [−80°, 84°), then
+           * use UTMUPS::UPS = 0, otherwise apply the rules for UTMUPS::UTM.  The
+           * tests on latitudes and longitudes are all closed on the lower end open
+           * on the upper.  Thus for UTM zone 38, latitude is in [−80°,
+           * 84°) and longitude is in [42°, 48°).
+           **********************************************************************/
+          STANDARD = -1,
+          /**
+           * The largest pseudo-zone number.
+           **********************************************************************/
+          MAXPSEUDOZONE = -1,
+          /**
+           * The smallest physical zone number.
+           **********************************************************************/
+          MINZONE = 0,
+          /**
+           * The zone number used for UPS
+           **********************************************************************/
+          UPS = 0,
+          /**
+           * The smallest UTM zone number.
+           **********************************************************************/
+          MINUTMZONE = 1,
+          /**
+           * The largest UTM zone number.
+           **********************************************************************/
+          MAXUTMZONE = 60,
+          /**
+           * The largest physical zone number.
+           **********************************************************************/
+          MAXZONE = 60,
+        };
+
+        /**
+         * The standard zone.
+         *
+         * @param[in] lat latitude (degrees).
+         * @param[in] lon longitude (degrees).
+         * @param[in] setzone zone override (use ZoneSpec.STANDARD as default).  If
+         *   omitted, use the standard rules for picking the zone.  If \e setzone
+         *   is given then use that zone if it is non-negative, otherwise apply the
+         *   rules given in UTMUPS::zonespec.
+         * @exception GeographicErr if \e setzone is outside the range
+         *   [UTMUPS::MINPSEUDOZONE, UTMUPS::MAXZONE] = [−4, 60].
+         *
+         * This is exact.
+         **********************************************************************/
+        static int StandardZone(double lat, double lon, int setzone);
+
+        /**
+         * Forward projection, from geographic to UTM/UPS.
+         *
+         * @param[in] lat latitude of point (degrees).
+         * @param[in] lon longitude of point (degrees).
+         * @param[out] zone the UTM zone (zero means UPS).
+         * @param[out] northp hemisphere (true means north, false means south).
+         * @param[out] x easting of point (meters).
+         * @param[out] y northing of point (meters).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         * @param[in] setzone zone override (use ZoneSpec.STANDARD as default).
+         * @param[in] mgrslimits if true enforce the stricter MGRS limits on the
+         *   coordinates (default = false).
+         * @exception GeographicErr if \e lat is not in [−90°,
+         *   90°].
+         * @exception GeographicErr if \e lon is not in [−540°,
+         *   540°).
+         * @exception GeographicErr if the resulting \e x or \e y is out of allowed
+         *   range (see Reverse); in this case, these arguments are unchanged.
+         *
+         * If \e setzone is omitted, use the standard rules for picking the zone.
+         * If \e setzone is given then use that zone if it is non-negative,
+         * otherwise apply the rules given in UTMUPS::zonespec.  The accuracy of
+         * the conversion is about 5nm.
+         *
+         * The northing \e y jumps by UTMUPS::UTMShift() when crossing the equator
+         * in the southerly direction.  Sometimes it is useful to remove this
+         * discontinuity in \e y by extending the "northern" hemisphere using
+         * UTMUPS::Transfer:
+         * \code
+         double lat = -1, lon = 123;
+         int zone;
+         bool northp;
+         double x, y, gamma, k;
+         GeographicLib::UTMUPS::Forward(lat, lon, zone, northp, x, y, gamma, k);
+         GeographicLib::UTMUPS::Transfer(zone, northp, x, y,
+                                         zone, true,   x, y, zone);
+         northp = true;
+         \endcode
+         **********************************************************************/
+        static void Forward(double lat, double lon,
+                    [System::Runtime::InteropServices::Out] int% zone,
+                    [System::Runtime::InteropServices::Out] bool% northp,
+                    [System::Runtime::InteropServices::Out] double% x,
+                    [System::Runtime::InteropServices::Out] double% y,
+                    [System::Runtime::InteropServices::Out] double% gamma,
+                    [System::Runtime::InteropServices::Out] double% k,
+                    int setzone, bool mgrslimits);
+
+        /**
+         * Reverse projection, from  UTM/UPS to geographic.
+         *
+         * @param[in] zone the UTM zone (zero means UPS).
+         * @param[in] northp hemisphere (true means north, false means south).
+         * @param[in] x easting of point (meters).
+         * @param[in] y northing of point (meters).
+         * @param[out] lat latitude of point (degrees).
+         * @param[out] lon longitude of point (degrees).
+         * @param[out] gamma meridian convergence at point (degrees).
+         * @param[out] k scale of projection at point.
+         * @param[in] mgrslimits if true enforce the stricter MGRS limits on the
+         *   coordinates (default = false).
+         * @exception GeographicErr if \e zone, \e x, or \e y is out of allowed
+         *   range; this this case the arguments are unchanged.
+         *
+         * The accuracy of the conversion is about 5nm.
+         *
+         * UTM eastings are allowed to be in the range [0km, 1000km], northings are
+         * allowed to be in in [0km, 9600km] for the northern hemisphere and in
+         * [900km, 10000km] for the southern hemisphere.  However UTM northings
+         * can be continued across the equator.  So the actual limits on the
+         * northings are [-9100km, 9600km] for the "northern" hemisphere and
+         * [900km, 19600km] for the "southern" hemisphere.
+         *
+         * UPS eastings and northings are allowed to be in the range [1200km,
+         * 2800km] in the northern hemisphere and in [700km, 3100km] in the
+         * southern hemisphere.
+         *
+         * These ranges are 100km larger than allowed for the conversions to MGRS.
+         * (100km is the maximum extra padding consistent with eastings remaining
+         * non-negative.)  This allows generous overlaps between zones and UTM and
+         * UPS.  If \e mgrslimits = true, then all the ranges are shrunk by 100km
+         * so that they agree with the stricter MGRS ranges.  No checks are
+         * performed besides these (e.g., to limit the distance outside the
+         * standard zone boundaries).
+         **********************************************************************/
+        static void Reverse(int zone, bool northp, double x, double y,
+                    [System::Runtime::InteropServices::Out] double% lat,
+                    [System::Runtime::InteropServices::Out] double% lon,
+                    [System::Runtime::InteropServices::Out] double% gamma,
+                    [System::Runtime::InteropServices::Out] double% k,
+                    bool mgrslimits);
+
+        /**
+         * UTMUPS::Forward without returning convergence and scale.
+         **********************************************************************/
+        static void Forward(double lat, double lon,
+                    [System::Runtime::InteropServices::Out] int% zone,
+                    [System::Runtime::InteropServices::Out] bool% northp,
+                    [System::Runtime::InteropServices::Out] double% x,
+                    [System::Runtime::InteropServices::Out] double% y,
+                    int setzone, bool mgrslimits );
+
+        /**
+         * UTMUPS::Reverse without returning convergence and scale.
+         **********************************************************************/
+        static void Reverse(int zone, bool northp, double x, double y,
+                    [System::Runtime::InteropServices::Out] double% lat,
+                    [System::Runtime::InteropServices::Out] double% lon,
+                    bool mgrslimits);
+
+        /**
+         * Transfer UTM/UPS coordinated from one zone to another.
+         *
+         * @param[in] zonein the UTM zone for \e xin and \e yin (or zero for UPS).
+         * @param[in] northpin hemisphere for \e xin and \e yin (true means north,
+         *   false means south).
+         * @param[in] xin easting of point (meters) in \e zonein.
+         * @param[in] yin northing of point (meters) in \e zonein.
+         * @param[in] zoneout the requested UTM zone for \e xout and \e yout (or
+         *   zero for UPS).
+         * @param[in] northpout hemisphere for \e xout output and \e yout.
+         * @param[out] xout easting of point (meters) in \e zoneout.
+         * @param[out] yout northing of point (meters) in \e zoneout.
+         * @param[out] zone the actual UTM zone for \e xout and \e yout (or zero
+         *   for UPS); this equals \e zoneout if \e zoneout ≥ 0.
+         * @exception GeographicErr if \e zonein is out of range (see below).
+         * @exception GeographicErr if \e zoneout is out of range (see below).
+         * @exception GeographicErr if \e xin or \e yin fall outside their allowed
+         *   ranges (see UTMUPS::Reverse).
+         * @exception GeographicErr if \e xout or \e yout fall outside their
+         *   allowed ranges (see UTMUPS::Reverse).
+         *
+         * \e zonein must be in the range [UTMUPS::MINZONE, UTMUPS::MAXZONE] = [0,
+         * 60] with \e zonein = UTMUPS::UPS, 0, indicating UPS.  \e zonein may
+         * also be UTMUPS::INVALID.
+         *
+         * \e zoneout must be in the range [UTMUPS::MINPSEUDOZONE, UTMUPS::MAXZONE]
+         * = [-4, 60].  If \e zoneout < UTMUPS::MINZONE then the rules give in
+         * the documentation of UTMUPS::zonespec are applied, and \e zone is set to
+         * the actual zone used for output.
+         *
+         * (\e xout, \e yout) can overlap with (\e xin, \e yin).
+         **********************************************************************/
+        static void Transfer(int zonein, bool northpin, double xin, double yin,
+                    int zoneout, bool northpout,
+                    [System::Runtime::InteropServices::Out] double% xout,
+                    [System::Runtime::InteropServices::Out] double% yout,
+                    [System::Runtime::InteropServices::Out] int% zone);
+
+        /**
+         * Decode a UTM/UPS zone string.
+         *
+         * @param[in] zonestr string representation of zone and hemisphere.
+         * @param[out] zone the UTM zone (zero means UPS).
+         * @param[out] northp hemisphere (true means north, false means south).
+         * @exception GeographicErr if \e zonestr is malformed.
+         *
+         * For UTM, \e zonestr has the form of a zone number in the range
+         * [UTMUPS::MINUTMZONE, UTMUPS::MAXUTMZONE] = [1, 60] followed by a
+         * hemisphere letter, N or S.  For UPS, it consists just of the hemisphere
+         * letter.  The returned value of \e zone is UTMUPS::UPS = 0 for UPS.  Note
+         * well that "38S" indicates the southern hemisphere of zone 38 and not
+         * latitude band S, [32, 40].  N, 01S, 2N, 38S are legal.  0N, 001S, 61N,
+         * 38P are illegal.  INV is a special value for which the returned value of
+         * \e is UTMUPS::INVALID.
+         **********************************************************************/
+        static void DecodeZone(System::String^ zonestr,
+            [System::Runtime::InteropServices::Out] int% zone,
+            [System::Runtime::InteropServices::Out] bool% northp);
+
+        /**
+         * Encode a UTM/UPS zone string.
+         *
+         * @param[in] zone the UTM zone (zero means UPS).
+         * @param[in] northp hemisphere (true means north, false means south).
+         * @exception GeographicErr if \e zone is out of range (see below).
+         * @exception std::bad_alloc if memoy for the string can't be allocated.
+         * @return string representation of zone and hemisphere.
+         *
+         * \e zone must be in the range [UTMUPS::MINZONE, UTMUPS::MAXZONE] = [0,
+         * 60] with \e zone = UTMUPS::UPS, 0, indicating UPS (but the resulting
+         * string does not contain "0").  \e zone may also be UTMUPS::INVALID, in
+         * which case the returned string is "INV".  This reverses
+         * UTMUPS::DecodeZone.
+         **********************************************************************/
+        static System::String^ EncodeZone(int zone, bool northp);
+
+        /**
+         * Decode EPSG.
+         *
+         * @param[in] epsg the EPSG code.
+         * @param[out] zone the UTM zone (zero means UPS).
+         * @param[out] northp hemisphere (true means north, false means south).
+         *
+         * EPSG (European Petroleum Survery Group) codes are a way to refer to many
+         * different projections.  DecodeEPSG decodes those refering to UTM or UPS
+         * projections for the WGS84 ellipsoid.  If the code does not refer to one
+         * of these projections, \e zone is set to UTMUPS::INVALID.  See
+         * http://spatialreference.org/ref/epsg/
+         **********************************************************************/
+        static void DecodeEPSG(int epsg,
+            [System::Runtime::InteropServices::Out] int% zone,
+            [System::Runtime::InteropServices::Out] bool% northp);
+
+        /**
+         * Encode zone as EPSG.
+         *
+         * @param[in] zone the UTM zone (zero means UPS).
+         * @param[in] northp hemisphere (true means north, false means south).
+         * @return EPSG code (or -1 if \e zone is not in the range
+         *   [UTMUPS::MINZONE, UTMUPS::MAXZONE] = [0, 60])
+         *
+         * Convert \e zone and \e northp to the corresponding EPSG (European
+         * Petroleum Survery Group) codes
+         **********************************************************************/
+        static int EncodeEPSG(int zone, bool northp);
+
+        /**
+         * @return shift (meters) necessary to align N and S halves of a UTM zone
+         * (10<sup>7</sup>).
+         **********************************************************************/
+        static double UTMShift();
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the WGS84 ellipsoid (meters).
+         *
+         * (The WGS84 value is returned because the UTM and UPS projections are
+         * based on this ellipsoid.)
+         **********************************************************************/
+        static double MajorRadius();
+
+        /**
+         * @return \e f the flattening of the WGS84 ellipsoid.
+         *
+         * (The WGS84 value is returned because the UTM and UPS projections are
+         * based on this ellipsoid.)
+         **********************************************************************/
+        static double Flattening();
+        ///@}
+    };
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/stdafx.cpp b/dotnet/NETGeographicLib/stdafx.cpp
new file mode 100644
index 0000000..78419ba
--- /dev/null
+++ b/dotnet/NETGeographicLib/stdafx.cpp
@@ -0,0 +1,5 @@
+// stdafx.cpp : source file that includes just the standard includes
+// NETGeographic.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
diff --git a/dotnet/NETGeographicLib/stdafx.h b/dotnet/NETGeographicLib/stdafx.h
new file mode 100644
index 0000000..1d856f7
--- /dev/null
+++ b/dotnet/NETGeographicLib/stdafx.h
@@ -0,0 +1,5 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently,
+// but are changed infrequently
+
+#pragma once
diff --git a/dotnet/Projections/AccumPanel.Designer.cs b/dotnet/Projections/AccumPanel.Designer.cs
new file mode 100644
index 0000000..5b1e8de
--- /dev/null
+++ b/dotnet/Projections/AccumPanel.Designer.cs
@@ -0,0 +1,193 @@
+namespace Projections
+{
+    partial class AccumPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.m_inputTextBox = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.m_accumTtextBox = new System.Windows.Forms.TextBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.button3 = new System.Windows.Forms.Button();
+            this.button4 = new System.Windows.Forms.Button();
+            this.m_equalsCheckBox = new System.Windows.Forms.CheckBox();
+            this.m_testTextBox = new System.Windows.Forms.TextBox();
+            this.m_lessThanCheckBox = new System.Windows.Forms.CheckBox();
+            this.m_greaterTanCheckBox = new System.Windows.Forms.CheckBox();
+            this.SuspendLayout();
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(4, 8);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(31, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Input";
+            //
+            // m_inputTextBox
+            //
+            this.m_inputTextBox.Location = new System.Drawing.Point(109, 4);
+            this.m_inputTextBox.Name = "m_inputTextBox";
+            this.m_inputTextBox.Size = new System.Drawing.Size(202, 20);
+            this.m_inputTextBox.TabIndex = 1;
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(4, 35);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(99, 13);
+            this.label2.TabIndex = 2;
+            this.label2.Text = "Accumulated Value";
+            //
+            // m_accumTtextBox
+            //
+            this.m_accumTtextBox.Location = new System.Drawing.Point(109, 31);
+            this.m_accumTtextBox.Name = "m_accumTtextBox";
+            this.m_accumTtextBox.ReadOnly = true;
+            this.m_accumTtextBox.Size = new System.Drawing.Size(202, 20);
+            this.m_accumTtextBox.TabIndex = 3;
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(317, 3);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 4;
+            this.button1.Text = "Add";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnAdd);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(7, 64);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 5;
+            this.button2.Text = "Reset";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnReset);
+            //
+            // button3
+            //
+            this.button3.Location = new System.Drawing.Point(318, 30);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(75, 23);
+            this.button3.TabIndex = 6;
+            this.button3.Text = "Multiply";
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.OnMultiply);
+            //
+            // button4
+            //
+            this.button4.Location = new System.Drawing.Point(405, 32);
+            this.button4.Name = "button4";
+            this.button4.Size = new System.Drawing.Size(75, 23);
+            this.button4.TabIndex = 7;
+            this.button4.Text = "Test";
+            this.button4.UseVisualStyleBackColor = true;
+            this.button4.Click += new System.EventHandler(this.OnTest);
+            //
+            // m_equalsCheckBox
+            //
+            this.m_equalsCheckBox.AutoSize = true;
+            this.m_equalsCheckBox.Location = new System.Drawing.Point(405, 69);
+            this.m_equalsCheckBox.Name = "m_equalsCheckBox";
+            this.m_equalsCheckBox.Size = new System.Drawing.Size(58, 17);
+            this.m_equalsCheckBox.TabIndex = 8;
+            this.m_equalsCheckBox.Text = "Equals";
+            this.m_equalsCheckBox.UseVisualStyleBackColor = true;
+            //
+            // m_testTextBox
+            //
+            this.m_testTextBox.Location = new System.Drawing.Point(405, 4);
+            this.m_testTextBox.Name = "m_testTextBox";
+            this.m_testTextBox.Size = new System.Drawing.Size(139, 20);
+            this.m_testTextBox.TabIndex = 10;
+            //
+            // m_lessThanCheckBox
+            //
+            this.m_lessThanCheckBox.AutoSize = true;
+            this.m_lessThanCheckBox.Location = new System.Drawing.Point(405, 93);
+            this.m_lessThanCheckBox.Name = "m_lessThanCheckBox";
+            this.m_lessThanCheckBox.Size = new System.Drawing.Size(76, 17);
+            this.m_lessThanCheckBox.TabIndex = 11;
+            this.m_lessThanCheckBox.Text = "Less Than";
+            this.m_lessThanCheckBox.UseVisualStyleBackColor = true;
+            //
+            // m_greaterTanCheckBox
+            //
+            this.m_greaterTanCheckBox.AutoSize = true;
+            this.m_greaterTanCheckBox.Location = new System.Drawing.Point(405, 117);
+            this.m_greaterTanCheckBox.Name = "m_greaterTanCheckBox";
+            this.m_greaterTanCheckBox.Size = new System.Drawing.Size(86, 17);
+            this.m_greaterTanCheckBox.TabIndex = 12;
+            this.m_greaterTanCheckBox.Text = "GreaterThan";
+            this.m_greaterTanCheckBox.UseVisualStyleBackColor = true;
+            //
+            // AccumPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.m_greaterTanCheckBox);
+            this.Controls.Add(this.m_lessThanCheckBox);
+            this.Controls.Add(this.m_testTextBox);
+            this.Controls.Add(this.m_equalsCheckBox);
+            this.Controls.Add(this.button4);
+            this.Controls.Add(this.button3);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.m_accumTtextBox);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.m_inputTextBox);
+            this.Controls.Add(this.label1);
+            this.Name = "AccumPanel";
+            this.Size = new System.Drawing.Size(969, 353);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox m_inputTextBox;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox m_accumTtextBox;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Button button3;
+        private System.Windows.Forms.Button button4;
+        private System.Windows.Forms.CheckBox m_equalsCheckBox;
+        private System.Windows.Forms.TextBox m_testTextBox;
+        private System.Windows.Forms.CheckBox m_lessThanCheckBox;
+        private System.Windows.Forms.CheckBox m_greaterTanCheckBox;
+    }
+}
diff --git a/dotnet/Projections/AccumPanel.cs b/dotnet/Projections/AccumPanel.cs
new file mode 100644
index 0000000..0459812
--- /dev/null
+++ b/dotnet/Projections/AccumPanel.cs
@@ -0,0 +1,84 @@
+/**
+ * \file NETGeographicLib\AccumPanel.cs
+ * \brief NETGeographicLib.Accumulator example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class AccumPanel : UserControl
+    {
+        Accumulator m_accum = new Accumulator();
+
+        public AccumPanel()
+        {
+            InitializeComponent();
+            OnReset(null, null);
+
+        }
+
+        private void OnAdd(object sender, EventArgs e)
+        {
+            try
+            {
+                double a = Double.Parse(m_inputTextBox.Text);
+                m_accum.Sum(a);
+                m_accumTtextBox.Text = m_accum.Result().ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnMultiply(object sender, EventArgs e)
+        {
+            try
+            {
+                int a = Int32.Parse(m_inputTextBox.Text);
+                m_accum.Multiply(a);
+                m_accumTtextBox.Text = m_accum.Result().ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+
+        }
+
+        private void OnReset(object sender, EventArgs e)
+        {
+            m_accum.Assign(0.0);
+            m_accumTtextBox.Text = m_accum.Result().ToString();
+        }
+
+        private void OnTest(object sender, EventArgs e)
+        {
+            try
+            {
+                double test = Double.Parse(m_testTextBox.Text);
+                m_equalsCheckBox.Checked = m_accum == test;
+                m_lessThanCheckBox.Checked = m_accum < test;
+                m_greaterTanCheckBox.Checked = m_accum > test;
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/AccumPanel.resx b/dotnet/Projections/AccumPanel.resx
new file mode 100644
index 0000000..ed0aef9
--- /dev/null
+++ b/dotnet/Projections/AccumPanel.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
diff --git a/dotnet/Projections/AlbersPanel.Designer.cs b/dotnet/Projections/AlbersPanel.Designer.cs
new file mode 100644
index 0000000..af5ea9b
--- /dev/null
+++ b/dotnet/Projections/AlbersPanel.Designer.cs
@@ -0,0 +1,551 @@
+namespace Projections
+{
+    partial class AlbersPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.m_setButton = new System.Windows.Forms.Button();
+            this.m_flatteningTextBox = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.m_majorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.m_originLatitudeTextBox = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.m_centralScaleTextBox = new System.Windows.Forms.TextBox();
+            this.m_toolTip = new System.Windows.Forms.ToolTip(this.components);
+            this.m_constructorComboBox = new System.Windows.Forms.ComboBox();
+            this.m_azimuthalScaleTextBox = new System.Windows.Forms.TextBox();
+            this.m_functionComboBox = new System.Windows.Forms.ComboBox();
+            this.m_convertButton = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.m_scaleLabel = new System.Windows.Forms.Label();
+            this.m_stdLatLabel = new System.Windows.Forms.Label();
+            this.m_stdLat2Label = new System.Windows.Forms.Label();
+            this.label12 = new System.Windows.Forms.Label();
+            this.m_sinLat2Label = new System.Windows.Forms.Label();
+            this.m_cosLat2Label = new System.Windows.Forms.Label();
+            this.m_KTextBox = new System.Windows.Forms.TextBox();
+            this.m_stdLat1TextBox = new System.Windows.Forms.TextBox();
+            this.m_stdLat2TextBox = new System.Windows.Forms.TextBox();
+            this.m_sinLat2TextBox = new System.Windows.Forms.TextBox();
+            this.m_cosLat2TextBox = new System.Windows.Forms.TextBox();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.m_lon0TextBox = new System.Windows.Forms.TextBox();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_xTextBox = new System.Windows.Forms.TextBox();
+            this.m_yTextBox = new System.Windows.Forms.TextBox();
+            this.m_gammaTextBox = new System.Windows.Forms.TextBox();
+            this.label13 = new System.Windows.Forms.Label();
+            this.label14 = new System.Windows.Forms.Label();
+            this.m_projectionComboBox = new System.Windows.Forms.ComboBox();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            //
+            // groupBox1
+            //
+            this.groupBox1.Controls.Add(this.m_setButton);
+            this.groupBox1.Controls.Add(this.m_flatteningTextBox);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.m_majorRadiusTextBox);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Location = new System.Drawing.Point(3, 3);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(146, 140);
+            this.groupBox1.TabIndex = 6;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Ellipsoid Parameters";
+            //
+            // m_setButton
+            //
+            this.m_setButton.Location = new System.Drawing.Point(12, 109);
+            this.m_setButton.Name = "m_setButton";
+            this.m_setButton.Size = new System.Drawing.Size(75, 23);
+            this.m_setButton.TabIndex = 4;
+            this.m_setButton.Text = "Set";
+            this.m_toolTip.SetToolTip(this.m_setButton, "Set constructor inputs");
+            this.m_setButton.UseVisualStyleBackColor = true;
+            this.m_setButton.Click += new System.EventHandler(this.OnSet);
+            //
+            // m_flatteningTextBox
+            //
+            this.m_flatteningTextBox.Location = new System.Drawing.Point(12, 83);
+            this.m_flatteningTextBox.Name = "m_flatteningTextBox";
+            this.m_flatteningTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_flatteningTextBox.TabIndex = 3;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 25);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(109, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Major Radius (meters)";
+            //
+            // m_majorRadiusTextBox
+            //
+            this.m_majorRadiusTextBox.Location = new System.Drawing.Point(12, 42);
+            this.m_majorRadiusTextBox.Name = "m_majorRadiusTextBox";
+            this.m_majorRadiusTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_majorRadiusTextBox.TabIndex = 2;
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(12, 66);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Flattening";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(165, 11);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(122, 13);
+            this.label3.TabIndex = 7;
+            this.label3.Text = "Origin Latitude (degrees)";
+            //
+            // m_originLatitudeTextBox
+            //
+            this.m_originLatitudeTextBox.Location = new System.Drawing.Point(319, 7);
+            this.m_originLatitudeTextBox.Name = "m_originLatitudeTextBox";
+            this.m_originLatitudeTextBox.ReadOnly = true;
+            this.m_originLatitudeTextBox.Size = new System.Drawing.Size(115, 20);
+            this.m_originLatitudeTextBox.TabIndex = 8;
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(165, 38);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(70, 13);
+            this.label4.TabIndex = 9;
+            this.label4.Text = "Central Scale";
+            //
+            // m_centralScaleTextBox
+            //
+            this.m_centralScaleTextBox.Location = new System.Drawing.Point(319, 34);
+            this.m_centralScaleTextBox.Name = "m_centralScaleTextBox";
+            this.m_centralScaleTextBox.ReadOnly = true;
+            this.m_centralScaleTextBox.Size = new System.Drawing.Size(115, 20);
+            this.m_centralScaleTextBox.TabIndex = 10;
+            //
+            // m_constructorComboBox
+            //
+            this.m_constructorComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_constructorComboBox.FormattingEnabled = true;
+            this.m_constructorComboBox.Location = new System.Drawing.Point(10, 170);
+            this.m_constructorComboBox.Name = "m_constructorComboBox";
+            this.m_constructorComboBox.Size = new System.Drawing.Size(139, 21);
+            this.m_constructorComboBox.TabIndex = 18;
+            this.m_toolTip.SetToolTip(this.m_constructorComboBox, "Select constructor type");
+            this.m_constructorComboBox.SelectedIndexChanged += new System.EventHandler(this.OnConstructorChanged);
+            //
+            // m_azimuthalScaleTextBox
+            //
+            this.m_azimuthalScaleTextBox.Location = new System.Drawing.Point(580, 169);
+            this.m_azimuthalScaleTextBox.Name = "m_azimuthalScaleTextBox";
+            this.m_azimuthalScaleTextBox.ReadOnly = true;
+            this.m_azimuthalScaleTextBox.Size = new System.Drawing.Size(109, 20);
+            this.m_azimuthalScaleTextBox.TabIndex = 36;
+            this.m_toolTip.SetToolTip(this.m_azimuthalScaleTextBox, "Verifies interfaces");
+            this.m_azimuthalScaleTextBox.Click += new System.EventHandler(this.OnValidate);
+            //
+            // m_functionComboBox
+            //
+            this.m_functionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_functionComboBox.FormattingEnabled = true;
+            this.m_functionComboBox.Items.AddRange(new object[] {
+            "Forward",
+            "Reverse"});
+            this.m_functionComboBox.Location = new System.Drawing.Point(697, 34);
+            this.m_functionComboBox.Name = "m_functionComboBox";
+            this.m_functionComboBox.Size = new System.Drawing.Size(75, 21);
+            this.m_functionComboBox.TabIndex = 38;
+            this.m_toolTip.SetToolTip(this.m_functionComboBox, "Select function");
+            this.m_functionComboBox.SelectedIndexChanged += new System.EventHandler(this.OnFunction);
+            //
+            // m_convertButton
+            //
+            this.m_convertButton.Location = new System.Drawing.Point(697, 114);
+            this.m_convertButton.Name = "m_convertButton";
+            this.m_convertButton.Size = new System.Drawing.Size(75, 23);
+            this.m_convertButton.TabIndex = 39;
+            this.m_convertButton.Text = "Convert";
+            this.m_toolTip.SetToolTip(this.m_convertButton, "Executes the selected Function using the selected Projection");
+            this.m_convertButton.UseVisualStyleBackColor = true;
+            this.m_convertButton.Click += new System.EventHandler(this.OnConvert);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(700, 168);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 40;
+            this.button2.Text = "Validate";
+            this.m_toolTip.SetToolTip(this.button2, "Verifies interfaces");
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnValidate);
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(443, 38);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(92, 13);
+            this.label5.TabIndex = 11;
+            this.label5.Text = "Latitude (degrees)";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(443, 65);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(101, 13);
+            this.label6.TabIndex = 12;
+            this.label6.Text = "Longitude (degrees)";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(443, 92);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(54, 13);
+            this.label7.TabIndex = 13;
+            this.label7.Text = "X (meters)";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(443, 119);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(54, 13);
+            this.label8.TabIndex = 14;
+            this.label8.Text = "Y (meters)";
+            //
+            // m_scaleLabel
+            //
+            this.m_scaleLabel.AutoSize = true;
+            this.m_scaleLabel.Location = new System.Drawing.Point(165, 65);
+            this.m_scaleLabel.Name = "m_scaleLabel";
+            this.m_scaleLabel.Size = new System.Drawing.Size(50, 13);
+            this.m_scaleLabel.TabIndex = 15;
+            this.m_scaleLabel.Text = "Scale (K)";
+            //
+            // m_stdLatLabel
+            //
+            this.m_stdLatLabel.AutoSize = true;
+            this.m_stdLatLabel.Location = new System.Drawing.Point(165, 92);
+            this.m_stdLatLabel.Name = "m_stdLatLabel";
+            this.m_stdLatLabel.Size = new System.Drawing.Size(147, 13);
+            this.m_stdLatLabel.TabIndex = 16;
+            this.m_stdLatLabel.Text = "Standard Latitude 1 (degrees)";
+            //
+            // m_stdLat2Label
+            //
+            this.m_stdLat2Label.AutoSize = true;
+            this.m_stdLat2Label.Location = new System.Drawing.Point(165, 119);
+            this.m_stdLat2Label.Name = "m_stdLat2Label";
+            this.m_stdLat2Label.Size = new System.Drawing.Size(147, 13);
+            this.m_stdLat2Label.TabIndex = 17;
+            this.m_stdLat2Label.Text = "Standard Latitude 2 (degrees)";
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(9, 150);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(61, 13);
+            this.label12.TabIndex = 19;
+            this.label12.Text = "Constructor";
+            //
+            // m_sinLat2Label
+            //
+            this.m_sinLat2Label.AutoSize = true;
+            this.m_sinLat2Label.Location = new System.Drawing.Point(165, 146);
+            this.m_sinLat2Label.Name = "m_sinLat2Label";
+            this.m_sinLat2Label.Size = new System.Drawing.Size(49, 13);
+            this.m_sinLat2Label.TabIndex = 20;
+            this.m_sinLat2Label.Text = "Sin(Lat2)";
+            //
+            // m_cosLat2Label
+            //
+            this.m_cosLat2Label.AutoSize = true;
+            this.m_cosLat2Label.Location = new System.Drawing.Point(165, 173);
+            this.m_cosLat2Label.Name = "m_cosLat2Label";
+            this.m_cosLat2Label.Size = new System.Drawing.Size(52, 13);
+            this.m_cosLat2Label.TabIndex = 21;
+            this.m_cosLat2Label.Text = "Cos(Lat2)";
+            //
+            // m_KTextBox
+            //
+            this.m_KTextBox.Location = new System.Drawing.Point(319, 61);
+            this.m_KTextBox.Name = "m_KTextBox";
+            this.m_KTextBox.Size = new System.Drawing.Size(115, 20);
+            this.m_KTextBox.TabIndex = 22;
+            //
+            // m_stdLat1TextBox
+            //
+            this.m_stdLat1TextBox.Location = new System.Drawing.Point(319, 88);
+            this.m_stdLat1TextBox.Name = "m_stdLat1TextBox";
+            this.m_stdLat1TextBox.Size = new System.Drawing.Size(115, 20);
+            this.m_stdLat1TextBox.TabIndex = 23;
+            //
+            // m_stdLat2TextBox
+            //
+            this.m_stdLat2TextBox.Location = new System.Drawing.Point(319, 115);
+            this.m_stdLat2TextBox.Name = "m_stdLat2TextBox";
+            this.m_stdLat2TextBox.Size = new System.Drawing.Size(115, 20);
+            this.m_stdLat2TextBox.TabIndex = 24;
+            //
+            // m_sinLat2TextBox
+            //
+            this.m_sinLat2TextBox.Location = new System.Drawing.Point(319, 142);
+            this.m_sinLat2TextBox.Name = "m_sinLat2TextBox";
+            this.m_sinLat2TextBox.Size = new System.Drawing.Size(115, 20);
+            this.m_sinLat2TextBox.TabIndex = 25;
+            //
+            // m_cosLat2TextBox
+            //
+            this.m_cosLat2TextBox.Location = new System.Drawing.Point(319, 169);
+            this.m_cosLat2TextBox.Name = "m_cosLat2TextBox";
+            this.m_cosLat2TextBox.Size = new System.Drawing.Size(115, 20);
+            this.m_cosLat2TextBox.TabIndex = 26;
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(443, 11);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(131, 13);
+            this.label9.TabIndex = 27;
+            this.label9.Text = "Origin Longitude (degrees)";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(443, 146);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(90, 13);
+            this.label10.TabIndex = 28;
+            this.label10.Text = "Gamma (degrees)";
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(443, 173);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(82, 13);
+            this.label11.TabIndex = 29;
+            this.label11.Text = "Azimuthal Scale";
+            //
+            // m_lon0TextBox
+            //
+            this.m_lon0TextBox.Location = new System.Drawing.Point(580, 7);
+            this.m_lon0TextBox.Name = "m_lon0TextBox";
+            this.m_lon0TextBox.Size = new System.Drawing.Size(109, 20);
+            this.m_lon0TextBox.TabIndex = 30;
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(580, 34);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(109, 20);
+            this.m_latitudeTextBox.TabIndex = 31;
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(580, 61);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(109, 20);
+            this.m_longitudeTextBox.TabIndex = 32;
+            //
+            // m_xTextBox
+            //
+            this.m_xTextBox.Location = new System.Drawing.Point(580, 88);
+            this.m_xTextBox.Name = "m_xTextBox";
+            this.m_xTextBox.Size = new System.Drawing.Size(109, 20);
+            this.m_xTextBox.TabIndex = 33;
+            //
+            // m_yTextBox
+            //
+            this.m_yTextBox.Location = new System.Drawing.Point(580, 115);
+            this.m_yTextBox.Name = "m_yTextBox";
+            this.m_yTextBox.Size = new System.Drawing.Size(109, 20);
+            this.m_yTextBox.TabIndex = 34;
+            //
+            // m_gammaTextBox
+            //
+            this.m_gammaTextBox.Location = new System.Drawing.Point(580, 142);
+            this.m_gammaTextBox.Name = "m_gammaTextBox";
+            this.m_gammaTextBox.ReadOnly = true;
+            this.m_gammaTextBox.Size = new System.Drawing.Size(109, 20);
+            this.m_gammaTextBox.TabIndex = 35;
+            //
+            // label13
+            //
+            this.label13.AutoSize = true;
+            this.label13.Location = new System.Drawing.Point(697, 11);
+            this.label13.Name = "label13";
+            this.label13.Size = new System.Drawing.Size(48, 13);
+            this.label13.TabIndex = 37;
+            this.label13.Text = "Function";
+            //
+            // label14
+            //
+            this.label14.AutoSize = true;
+            this.label14.Location = new System.Drawing.Point(697, 65);
+            this.label14.Name = "label14";
+            this.label14.Size = new System.Drawing.Size(54, 13);
+            this.label14.TabIndex = 41;
+            this.label14.Text = "Projection";
+            //
+            // m_projectionComboBox
+            //
+            this.m_projectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_projectionComboBox.FormattingEnabled = true;
+            this.m_projectionComboBox.Items.AddRange(new object[] {
+            "Albers Equal Area",
+            "Lambert Conformal Conic",
+            "Transverse Mercator",
+            "Transverse Mercator Exact"});
+            this.m_projectionComboBox.Location = new System.Drawing.Point(697, 88);
+            this.m_projectionComboBox.Name = "m_projectionComboBox";
+            this.m_projectionComboBox.Size = new System.Drawing.Size(134, 21);
+            this.m_projectionComboBox.TabIndex = 42;
+            this.m_toolTip.SetToolTip(this.m_projectionComboBox, "Projection Type");
+            this.m_projectionComboBox.SelectedIndexChanged += new System.EventHandler(this.OnProjection);
+            //
+            // AlbersPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.m_projectionComboBox);
+            this.Controls.Add(this.label14);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.m_convertButton);
+            this.Controls.Add(this.m_functionComboBox);
+            this.Controls.Add(this.label13);
+            this.Controls.Add(this.m_azimuthalScaleTextBox);
+            this.Controls.Add(this.m_gammaTextBox);
+            this.Controls.Add(this.m_yTextBox);
+            this.Controls.Add(this.m_xTextBox);
+            this.Controls.Add(this.m_longitudeTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.m_lon0TextBox);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.m_cosLat2TextBox);
+            this.Controls.Add(this.m_sinLat2TextBox);
+            this.Controls.Add(this.m_stdLat2TextBox);
+            this.Controls.Add(this.m_stdLat1TextBox);
+            this.Controls.Add(this.m_KTextBox);
+            this.Controls.Add(this.m_cosLat2Label);
+            this.Controls.Add(this.m_sinLat2Label);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.m_constructorComboBox);
+            this.Controls.Add(this.m_stdLat2Label);
+            this.Controls.Add(this.m_stdLatLabel);
+            this.Controls.Add(this.m_scaleLabel);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.m_centralScaleTextBox);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.m_originLatitudeTextBox);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "AlbersPanel";
+            this.Size = new System.Drawing.Size(851, 248);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Button m_setButton;
+        private System.Windows.Forms.TextBox m_flatteningTextBox;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox m_majorRadiusTextBox;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox m_originLatitudeTextBox;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox m_centralScaleTextBox;
+        private System.Windows.Forms.ToolTip m_toolTip;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label m_scaleLabel;
+        private System.Windows.Forms.Label m_stdLatLabel;
+        private System.Windows.Forms.Label m_stdLat2Label;
+        private System.Windows.Forms.ComboBox m_constructorComboBox;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.Label m_sinLat2Label;
+        private System.Windows.Forms.Label m_cosLat2Label;
+        private System.Windows.Forms.TextBox m_KTextBox;
+        private System.Windows.Forms.TextBox m_stdLat1TextBox;
+        private System.Windows.Forms.TextBox m_stdLat2TextBox;
+        private System.Windows.Forms.TextBox m_sinLat2TextBox;
+        private System.Windows.Forms.TextBox m_cosLat2TextBox;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.TextBox m_lon0TextBox;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.TextBox m_xTextBox;
+        private System.Windows.Forms.TextBox m_yTextBox;
+        private System.Windows.Forms.TextBox m_gammaTextBox;
+        private System.Windows.Forms.TextBox m_azimuthalScaleTextBox;
+        private System.Windows.Forms.Label label13;
+        private System.Windows.Forms.ComboBox m_functionComboBox;
+        private System.Windows.Forms.Button m_convertButton;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Label label14;
+        private System.Windows.Forms.ComboBox m_projectionComboBox;
+    }
+}
diff --git a/dotnet/Projections/AlbersPanel.cs b/dotnet/Projections/AlbersPanel.cs
new file mode 100644
index 0000000..db2384f
--- /dev/null
+++ b/dotnet/Projections/AlbersPanel.cs
@@ -0,0 +1,570 @@
+/**
+ * \file NETGeographicLib\AlbersPanel.cs
+ * \brief Example of various projections.
+ *
+ * NETGeographicLib.AlbersEqualArea,
+ * NETGeographicLib.LambertConformalConic,
+ * NETGeographicLib.TransverseMercator,
+ * and NETGeographicLib.TransverseMercatorExact example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class AlbersPanel : UserControl
+    {
+        enum ProjectionTypes
+        {
+            AlbersEqualArea = 0,
+            LambertConformalConic = 1,
+            TransverseMercator = 2,
+            TransverseMercatorExact = 3
+        }
+        ProjectionTypes m_projection;
+        AlbersEqualArea m_albers = null;
+        LambertConformalConic m_lambert = null;
+        TransverseMercator m_trans = null;
+        TransverseMercatorExact m_transExact = null;
+
+        public AlbersPanel()
+        {
+            InitializeComponent();
+            m_projectionComboBox.SelectedIndex = 0; // this calls OnProjection and sets it to an AlbersEqualArea
+            m_constructorComboBox.SelectedIndex = 3; // this calls OnConstructorChanged
+            m_majorRadiusTextBox.Text = m_albers.MajorRadius.ToString();
+            m_flatteningTextBox.Text = m_albers.Flattening.ToString();
+            m_centralScaleTextBox.Text = m_albers.CentralScale.ToString();
+            m_originLatitudeTextBox.Text = m_albers.OriginLatitude.ToString();
+            m_functionComboBox.SelectedIndex = 0; // this calls OnFunction
+        }
+
+        private void OnConstructorChanged(object sender, EventArgs e)
+        {
+            try
+            {
+                if (m_projectionComboBox.SelectedIndex > 1)
+                {
+                    m_originLatitudeTextBox.ReadOnly = true;
+                    m_originLatitudeTextBox.Text = "N/A";
+                    if (m_constructorComboBox.SelectedIndex == 0)
+                    {
+                        m_convertButton.Enabled = true;
+                        m_setButton.Enabled = false;
+                        m_majorRadiusTextBox.ReadOnly = true;
+                        m_flatteningTextBox.ReadOnly = true;
+                        m_scaleLabel.Hide();
+                        m_KTextBox.Hide();
+                        m_stdLatLabel.Hide();
+                        m_stdLat1TextBox.Hide();
+                        m_stdLat2Label.Hide();
+                        m_stdLat2TextBox.Hide();
+                        m_sinLat2Label.Hide();
+                        m_sinLat2TextBox.Hide();
+                        m_cosLat2Label.Hide();
+                        m_cosLat2TextBox.Hide();
+                        if (m_projection == ProjectionTypes.TransverseMercator)
+                        {
+                            m_trans = new TransverseMercator();
+                            m_centralScaleTextBox.Text = m_trans.CentralScale.ToString();
+                        }
+                        else
+                        {
+                            m_transExact = new TransverseMercatorExact();
+                            m_centralScaleTextBox.Text = m_transExact.CentralScale.ToString();
+                        }
+                    }
+                    else
+                    {
+                        m_convertButton.Enabled = false;
+                        m_setButton.Enabled = true;
+                        m_majorRadiusTextBox.ReadOnly = false;
+                        m_flatteningTextBox.ReadOnly = false;
+                        m_scaleLabel.Show();
+                        m_KTextBox.Show();
+                        m_stdLatLabel.Hide();
+                        m_stdLat1TextBox.Hide();
+                        m_stdLat2Label.Hide();
+                        m_stdLat2TextBox.Hide();
+                        m_sinLat2Label.Hide();
+                        m_sinLat2TextBox.Hide();
+                        m_cosLat2Label.Hide();
+                        m_cosLat2TextBox.Hide();
+                    }
+                }
+                else
+                {
+                    m_originLatitudeTextBox.ReadOnly = false;
+                    switch (m_constructorComboBox.SelectedIndex)
+                    {
+                        case 0:
+                            m_convertButton.Enabled = false;
+                            m_setButton.Enabled = true;
+                            m_majorRadiusTextBox.ReadOnly = false;
+                            m_flatteningTextBox.ReadOnly = false;
+                            m_scaleLabel.Show();
+                            m_KTextBox.Show();
+                            m_stdLatLabel.Show();
+                            m_stdLatLabel.Text = "Standard Latitude (degrees)";
+                            m_stdLat1TextBox.Show();
+                            m_stdLat2Label.Hide();
+                            m_stdLat2TextBox.Hide();
+                            m_sinLat2Label.Hide();
+                            m_sinLat2TextBox.Hide();
+                            m_cosLat2Label.Hide();
+                            m_cosLat2TextBox.Hide();
+                            break;
+                        case 1:
+                            m_convertButton.Enabled = false;
+                            m_setButton.Enabled = true;
+                            m_majorRadiusTextBox.ReadOnly = false;
+                            m_flatteningTextBox.ReadOnly = false;
+                            m_scaleLabel.Show();
+                            m_KTextBox.Show();
+                            m_stdLatLabel.Show();
+                            m_stdLatLabel.Text = "Standard Latitude 1 (degrees)";
+                            m_stdLat1TextBox.Show();
+                            m_stdLat2Label.Text = "Standard Latitude 2 (degrees)";
+                            m_stdLat2Label.Show();
+                            m_stdLat2TextBox.Show();
+                            m_sinLat2Label.Hide();
+                            m_sinLat2TextBox.Hide();
+                            m_cosLat2Label.Hide();
+                            m_cosLat2TextBox.Hide();
+                            break;
+                        case 2:
+                            m_convertButton.Enabled = false;
+                            m_setButton.Enabled = true;
+                            m_majorRadiusTextBox.ReadOnly = false;
+                            m_flatteningTextBox.ReadOnly = false;
+                            m_scaleLabel.Show();
+                            m_KTextBox.Show();
+                            m_stdLatLabel.Show();
+                            m_stdLatLabel.Text = "Sin(Lat1)";
+                            m_stdLat1TextBox.Show();
+                            m_stdLat2Label.Text = "Cos(Lat1)";
+                            m_stdLat2Label.Show();
+                            m_stdLat2TextBox.Show();
+                            m_sinLat2Label.Show();
+                            m_sinLat2TextBox.Show();
+                            m_cosLat2Label.Show();
+                            m_cosLat2TextBox.Show();
+                            break;
+                        default:
+                            m_convertButton.Enabled = true;
+                            m_setButton.Enabled = false;
+                            m_majorRadiusTextBox.ReadOnly = true;
+                            m_flatteningTextBox.ReadOnly = true;
+                            m_scaleLabel.Hide();
+                            m_KTextBox.Hide();
+                            m_stdLatLabel.Hide();
+                            m_stdLat1TextBox.Hide();
+                            m_stdLat2Label.Hide();
+                            m_stdLat2TextBox.Hide();
+                            m_sinLat2Label.Hide();
+                            m_sinLat2TextBox.Hide();
+                            m_cosLat2Label.Hide();
+                            m_cosLat2TextBox.Hide();
+                            break;
+                    }
+
+                    if (m_projection == ProjectionTypes.AlbersEqualArea)
+                        AlbersConstructorChanged();
+                }
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void AlbersConstructorChanged()
+        {
+            switch (m_constructorComboBox.SelectedIndex)
+            {
+                case 3:
+                    m_albers = new AlbersEqualArea(AlbersEqualArea.StandardTypes.CylindricalEqualArea);
+                    break;
+                case 4:
+                    m_albers = new AlbersEqualArea(AlbersEqualArea.StandardTypes.AzimuthalEqualAreaNorth);
+                    break;
+                case 5:
+                    m_albers = new AlbersEqualArea(AlbersEqualArea.StandardTypes.AzimuthalEqualAreaSouth);
+                    break;
+                default:
+                    break;
+            }
+
+            if (m_constructorComboBox.SelectedIndex > 2)
+            {
+                m_majorRadiusTextBox.Text = m_albers.MajorRadius.ToString();
+                m_flatteningTextBox.Text = m_albers.Flattening.ToString();
+                m_centralScaleTextBox.Text = m_albers.CentralScale.ToString();
+                m_originLatitudeTextBox.Text = m_albers.OriginLatitude.ToString();
+            }
+        }
+
+        private void OnSet(object sender, EventArgs e)
+        {
+            try
+            {
+                switch (m_projection)
+                {
+                    case ProjectionTypes.AlbersEqualArea:
+                        SetAlbers();
+                        break;
+                    case ProjectionTypes.LambertConformalConic:
+                        SetLambert();
+                        break;
+                    case ProjectionTypes.TransverseMercator:
+                        SetTransverse();
+                        break;
+                    case ProjectionTypes.TransverseMercatorExact:
+                        SetTransverseExact();
+                        break;
+                }
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            m_convertButton.Enabled = true;
+        }
+
+        private void SetAlbers()
+        {
+            double s2, s3, s4;
+            double a = Double.Parse(m_majorRadiusTextBox.Text);
+            double f = Double.Parse(m_flatteningTextBox.Text);
+            double k = Double.Parse(m_KTextBox.Text);
+            double s1 = Double.Parse(m_stdLat1TextBox.Text);
+            switch (m_constructorComboBox.SelectedIndex)
+            {
+                case 0:
+                    m_albers = new AlbersEqualArea(a, f, s1, k);
+                    break;
+                case 1:
+                    s2 = Double.Parse(m_stdLat2TextBox.Text);
+                    m_albers = new AlbersEqualArea(a, f, s1, s2, k);
+                    break;
+                case 2:
+                    s2 = Double.Parse(m_stdLat2TextBox.Text);
+                    s3 = Double.Parse(m_sinLat2TextBox.Text);
+                    s4 = Double.Parse(m_cosLat2TextBox.Text);
+                    m_albers = new AlbersEqualArea(a, f, s1, s2, s3, s4, k);
+                    break;
+                default:
+                    break;
+            }
+            m_centralScaleTextBox.Text = m_albers.CentralScale.ToString();
+            m_originLatitudeTextBox.Text = m_albers.OriginLatitude.ToString();
+        }
+
+        private void SetLambert()
+        {
+            double s2, s3, s4;
+            double a = Double.Parse(m_majorRadiusTextBox.Text);
+            double f = Double.Parse(m_flatteningTextBox.Text);
+            double k = Double.Parse(m_KTextBox.Text);
+            double s1 = Double.Parse(m_stdLat1TextBox.Text);
+            switch (m_constructorComboBox.SelectedIndex)
+            {
+                case 0:
+                    m_lambert = new LambertConformalConic(a, f, s1, k);
+                    break;
+                case 1:
+                    s2 = Double.Parse(m_stdLat2TextBox.Text);
+                    m_lambert = new LambertConformalConic(a, f, s1, s2, k);
+                    break;
+                case 2:
+                    s2 = Double.Parse(m_stdLat2TextBox.Text);
+                    s3 = Double.Parse(m_sinLat2TextBox.Text);
+                    s4 = Double.Parse(m_cosLat2TextBox.Text);
+                    m_lambert = new LambertConformalConic(a, f, s1, s2, s3, s4, k);
+                    break;
+                default:
+                    break;
+            }
+            m_centralScaleTextBox.Text = m_lambert.CentralScale.ToString();
+            m_originLatitudeTextBox.Text = m_lambert.OriginLatitude.ToString();
+        }
+
+        private void SetTransverse()
+        {
+            switch (m_constructorComboBox.SelectedIndex)
+            {
+                case 1:
+                    double a = Double.Parse(m_majorRadiusTextBox.Text);
+                    double f = Double.Parse(m_flatteningTextBox.Text);
+                    double k = Double.Parse(m_KTextBox.Text);
+                    m_trans = new TransverseMercator(a, f, k);
+                    break;
+                default:
+                    break;
+            }
+            m_centralScaleTextBox.Text = m_trans.CentralScale.ToString();
+        }
+
+        private void SetTransverseExact()
+        {
+            switch (m_constructorComboBox.SelectedIndex)
+            {
+                case 1:
+                    double a = Double.Parse(m_majorRadiusTextBox.Text);
+                    double f = Double.Parse(m_flatteningTextBox.Text);
+                    double k = Double.Parse(m_KTextBox.Text);
+                    m_transExact = new TransverseMercatorExact(a, f, k, false);
+                    break;
+                default:
+                    break;
+            }
+            m_centralScaleTextBox.Text = m_transExact.CentralScale.ToString();
+        }
+
+        private void OnFunction(object sender, EventArgs e)
+        {
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    m_latitudeTextBox.ReadOnly = m_longitudeTextBox.ReadOnly = false;
+                    m_xTextBox.ReadOnly = m_yTextBox.ReadOnly = true;
+                    break;
+                case 1:
+                    m_latitudeTextBox.ReadOnly = m_longitudeTextBox.ReadOnly = true;
+                    m_xTextBox.ReadOnly = m_yTextBox.ReadOnly = false;
+                    break;
+            }
+        }
+
+        private void OnConvert(object sender, EventArgs e)
+        {
+            try
+            {
+                switch (m_projection)
+                {
+                    case ProjectionTypes.AlbersEqualArea:
+                        ConvertAlbers();
+                        break;
+                    case ProjectionTypes.LambertConformalConic:
+                        ConvertLambert();
+                        break;
+                    case ProjectionTypes.TransverseMercator:
+                        ConvertTransverse();
+                        break;
+                    case ProjectionTypes.TransverseMercatorExact:
+                        ConvertTransverseExact();
+                        break;
+                }
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void ConvertAlbers()
+        {
+            double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, gamma = 0.0, k = 0.0;
+            double lon0 = Double.Parse(m_lon0TextBox.Text);
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    lat = Double.Parse(m_latitudeTextBox.Text);
+                    lon = Double.Parse(m_longitudeTextBox.Text);
+                    m_albers.Forward(lon0, lat, lon, out x, out y, out gamma, out k);
+                    m_xTextBox.Text = x.ToString();
+                    m_yTextBox.Text = y.ToString();
+                    break;
+                case 1:
+                    x = Double.Parse(m_xTextBox.Text);
+                    y = Double.Parse(m_yTextBox.Text);
+                    m_albers.Reverse(lon0, x, y, out lat, out lon, out gamma, out k);
+                    m_latitudeTextBox.Text = lat.ToString();
+                    m_longitudeTextBox.Text = lon.ToString();
+                    break;
+            }
+            m_gammaTextBox.Text = gamma.ToString();
+            m_azimuthalScaleTextBox.Text = k.ToString();
+        }
+
+        private void ConvertLambert()
+        {
+            double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, gamma = 0.0, k = 0.0;
+            double lon0 = Double.Parse(m_lon0TextBox.Text);
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    lat = Double.Parse(m_latitudeTextBox.Text);
+                    lon = Double.Parse(m_longitudeTextBox.Text);
+                    m_lambert.Forward(lon0, lat, lon, out x, out y, out gamma, out k);
+                    m_xTextBox.Text = x.ToString();
+                    m_yTextBox.Text = y.ToString();
+                    break;
+                case 1:
+                    x = Double.Parse(m_xTextBox.Text);
+                    y = Double.Parse(m_yTextBox.Text);
+                    m_lambert.Reverse(lon0, x, y, out lat, out lon, out gamma, out k);
+                    m_latitudeTextBox.Text = lat.ToString();
+                    m_longitudeTextBox.Text = lon.ToString();
+                    break;
+            }
+            m_gammaTextBox.Text = gamma.ToString();
+            m_azimuthalScaleTextBox.Text = k.ToString();
+        }
+
+        private void ConvertTransverse()
+        {
+            double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, gamma = 0.0, k = 0.0;
+            double lon0 = Double.Parse(m_lon0TextBox.Text);
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    lat = Double.Parse(m_latitudeTextBox.Text);
+                    lon = Double.Parse(m_longitudeTextBox.Text);
+                    m_trans.Forward(lon0, lat, lon, out x, out y, out gamma, out k);
+                    m_xTextBox.Text = x.ToString();
+                    m_yTextBox.Text = y.ToString();
+                    break;
+                case 1:
+                    x = Double.Parse(m_xTextBox.Text);
+                    y = Double.Parse(m_yTextBox.Text);
+                    m_trans.Reverse(lon0, x, y, out lat, out lon, out gamma, out k);
+                    m_latitudeTextBox.Text = lat.ToString();
+                    m_longitudeTextBox.Text = lon.ToString();
+                    break;
+            }
+            m_gammaTextBox.Text = gamma.ToString();
+            m_azimuthalScaleTextBox.Text = k.ToString();
+        }
+
+        private void ConvertTransverseExact()
+        {
+            double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, gamma = 0.0, k = 0.0;
+            double lon0 = Double.Parse(m_lon0TextBox.Text);
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    lat = Double.Parse(m_latitudeTextBox.Text);
+                    lon = Double.Parse(m_longitudeTextBox.Text);
+                    m_transExact.Forward(lon0, lat, lon, out x, out y, out gamma, out k);
+                    m_xTextBox.Text = x.ToString();
+                    m_yTextBox.Text = y.ToString();
+                    break;
+                case 1:
+                    x = Double.Parse(m_xTextBox.Text);
+                    y = Double.Parse(m_yTextBox.Text);
+                    m_transExact.Reverse(lon0, x, y, out lat, out lon, out gamma, out k);
+                    m_latitudeTextBox.Text = lat.ToString();
+                    m_longitudeTextBox.Text = lon.ToString();
+                    break;
+            }
+            m_gammaTextBox.Text = gamma.ToString();
+            m_azimuthalScaleTextBox.Text = k.ToString();
+        }
+
+        private void OnProjection(object sender, EventArgs e)
+        {
+            m_projection = (ProjectionTypes)m_projectionComboBox.SelectedIndex;
+            int save = m_constructorComboBox.SelectedIndex;
+            m_constructorComboBox.Items.Clear();
+            if (m_projectionComboBox.SelectedIndex > 1) // TransverseMercator or TransverseMercatorExact
+            {
+                m_constructorComboBox.Items.Add("Default");
+                m_constructorComboBox.Items.Add("Constructor #1");
+            }
+            else
+            {
+                m_constructorComboBox.Items.Add("Constructor #1");
+                m_constructorComboBox.Items.Add("Constructor #2");
+                m_constructorComboBox.Items.Add("Constructor #3");
+                if (m_projection == ProjectionTypes.AlbersEqualArea)
+                {
+                    m_constructorComboBox.Items.Add("CylindricalEqualArea");
+                    m_constructorComboBox.Items.Add("AzimuthalEqualAreaNorth");
+                    m_constructorComboBox.Items.Add("AzimuthalEqualAreaSouth");
+                }
+            }
+            // calls OnConstructor
+            m_constructorComboBox.SelectedIndex = m_constructorComboBox.Items.Count > save ? save : 0;
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                const double DEG_TO_RAD = 3.1415926535897932384626433832795 / 180.0;
+                AlbersEqualArea a = new AlbersEqualArea(AlbersEqualArea.StandardTypes.AzimuthalEqualAreaNorth);
+                a = new AlbersEqualArea(AlbersEqualArea.StandardTypes.AzimuthalEqualAreaSouth);
+                double radius = a.MajorRadius;
+                double f = a.Flattening;
+                a = new AlbersEqualArea(radius, f, 60.0, 1.0);
+                a = new AlbersEqualArea(radius, f, 60.0, 70.0, 1.0);
+                a = new AlbersEqualArea(radius, f, Math.Sin(88.0 * DEG_TO_RAD), Math.Cos(88.0 * DEG_TO_RAD),
+                    Math.Sin(89.0*DEG_TO_RAD), Math.Cos(89.0*DEG_TO_RAD), 1.0);
+                a = new AlbersEqualArea(AlbersEqualArea.StandardTypes.CylindricalEqualArea);
+                double lon0 = 0.0, lat = 32.0, lon = -86.0, x, y, gamma, k, x1, y1;
+                a.Forward(lon0, lat, lon, out x, out y, out gamma, out k);
+                a.Forward(lon0, lat, lon, out x1, out y1);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in AlbersEqualArea.Forward");
+                a.Reverse(lon0, x, y, out lat, out lon, out gamma, out k);
+                a.Reverse(lon0, x, y, out x1, out y1);
+                if (lat != x1 || lon != y1)
+                    throw new Exception("Error in AlbersEqualArea.Reverse");
+                LambertConformalConic b = new LambertConformalConic(radius, f, 60.0, 1.0);
+                b = new LambertConformalConic(radius, f, 60.0, 65.0, 1.0);
+                b = new LambertConformalConic(radius, f, Math.Sin(88.0 * DEG_TO_RAD), Math.Cos(88.0 * DEG_TO_RAD),
+                    Math.Sin(89.0 * DEG_TO_RAD), Math.Cos(89.0 * DEG_TO_RAD), 1.0);
+                b = new LambertConformalConic();
+                b.SetScale(60.0, 1.0);
+                b.Forward(-87.0, 32.0, -86.0, out x, out y, out gamma, out k);
+                b.Forward(-87.0, 32.0, -86.0, out x1, out y1);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in LambertConformalConic.Forward");
+                b.Reverse(-87.0, x, y, out lat, out lon, out gamma, out k);
+                b.Reverse(-87.0, x, y, out x1, out y1, out gamma, out k);
+                if (lat != x1 || lon != y1)
+                    throw new Exception("Error in LambertConformalConic.Reverse");
+                TransverseMercator c = new TransverseMercator(radius, f, 1.0);
+                c = new TransverseMercator();
+                c.Forward(-87.0, 32.0, -86.0, out x, out y, out gamma, out k);
+                c.Forward(-87.0, 32.0, -86.0, out x1, out y1);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in TransverseMercator.Forward");
+                c.Reverse(-87.0, x, y, out lat, out lon, out gamma, out k);
+                c.Reverse(-87.0, x, y, out x1, out y1);
+                if (lat != x1 || lon != y1)
+                    throw new Exception("Error in TransverseMercator.Reverse");
+                TransverseMercatorExact d = new TransverseMercatorExact(radius, f, 1.0, false);
+                d = new TransverseMercatorExact();
+                d.Forward(-87.0, 32.0, -86.0, out x, out y, out gamma, out k);
+                d.Forward(-87.0, 32.0, -86.0, out x1, out y1);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in TransverseMercatorExact.Forward");
+                d.Reverse(-87.0, x, y, out lat, out lon, out gamma, out k);
+                d.Reverse(-87.0, x, y, out x1, out y1);
+                if (lat != x1 || lon != y1)
+                    throw new Exception("Error in TransverseMercatorExact.Reverse");
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+            MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+    }
+}
diff --git a/dotnet/Projections/AlbersPanel.resx b/dotnet/Projections/AlbersPanel.resx
new file mode 100644
index 0000000..3ec30e0
--- /dev/null
+++ b/dotnet/Projections/AlbersPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/EllipsoidPanel.Designer.cs b/dotnet/Projections/EllipsoidPanel.Designer.cs
new file mode 100644
index 0000000..a7029a5
--- /dev/null
+++ b/dotnet/Projections/EllipsoidPanel.Designer.cs
@@ -0,0 +1,493 @@
+namespace Projections
+{
+    partial class EllipsoidPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.m_toolTip = new System.Windows.Forms.ToolTip(this.components);
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.m_setButton = new System.Windows.Forms.Button();
+            this.m_flatteningTextBox = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.m_majorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.m_minorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.m_quarterMeridianTextBox = new System.Windows.Forms.TextBox();
+            this.m_areaTextBox = new System.Windows.Forms.TextBox();
+            this.m_volumeTextBox = new System.Windows.Forms.TextBox();
+            this.m_2ndFlatTextBox = new System.Windows.Forms.TextBox();
+            this.m_3rdFlatTextBox = new System.Windows.Forms.TextBox();
+            this.m_ecc2TextBox = new System.Windows.Forms.TextBox();
+            this.m_2ecc2TextBox = new System.Windows.Forms.TextBox();
+            this.label11 = new System.Windows.Forms.Label();
+            this.label12 = new System.Windows.Forms.Label();
+            this.label13 = new System.Windows.Forms.Label();
+            this.m_phiTextBox = new System.Windows.Forms.TextBox();
+            this.label14 = new System.Windows.Forms.Label();
+            this.label15 = new System.Windows.Forms.Label();
+            this.label16 = new System.Windows.Forms.Label();
+            this.label17 = new System.Windows.Forms.Label();
+            this.m_parametericLatTextBox = new System.Windows.Forms.TextBox();
+            this.m_geocentricLatTextBox = new System.Windows.Forms.TextBox();
+            this.m_rectifyingLatTextBox = new System.Windows.Forms.TextBox();
+            this.m_authalicLatTextBox = new System.Windows.Forms.TextBox();
+            this.m_conformalTextBox = new System.Windows.Forms.TextBox();
+            this.m_isometricLatTextBox = new System.Windows.Forms.TextBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            //
+            // groupBox1
+            //
+            this.groupBox1.Controls.Add(this.m_setButton);
+            this.groupBox1.Controls.Add(this.m_flatteningTextBox);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.m_majorRadiusTextBox);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Location = new System.Drawing.Point(3, 3);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(146, 140);
+            this.groupBox1.TabIndex = 7;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Ellipsoid Parameters";
+            //
+            // m_setButton
+            //
+            this.m_setButton.Location = new System.Drawing.Point(12, 107);
+            this.m_setButton.Name = "m_setButton";
+            this.m_setButton.Size = new System.Drawing.Size(75, 23);
+            this.m_setButton.TabIndex = 4;
+            this.m_setButton.Text = "Set";
+            this.m_toolTip.SetToolTip(this.m_setButton, "Sets ellipsoid parameters");
+            this.m_setButton.UseVisualStyleBackColor = true;
+            this.m_setButton.Click += new System.EventHandler(this.OnSet);
+            //
+            // m_flatteningTextBox
+            //
+            this.m_flatteningTextBox.Location = new System.Drawing.Point(12, 83);
+            this.m_flatteningTextBox.Name = "m_flatteningTextBox";
+            this.m_flatteningTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_flatteningTextBox.TabIndex = 3;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 25);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(109, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Major Radius (meters)";
+            //
+            // m_majorRadiusTextBox
+            //
+            this.m_majorRadiusTextBox.Location = new System.Drawing.Point(12, 42);
+            this.m_majorRadiusTextBox.Name = "m_majorRadiusTextBox";
+            this.m_majorRadiusTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_majorRadiusTextBox.TabIndex = 2;
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(12, 66);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Flattening";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(159, 8);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(69, 13);
+            this.label3.TabIndex = 8;
+            this.label3.Text = "Minor Radius";
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(159, 34);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(85, 13);
+            this.label4.TabIndex = 9;
+            this.label4.Text = "Quarter Meridian";
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(159, 60);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(29, 13);
+            this.label5.TabIndex = 10;
+            this.label5.Text = "Area";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(159, 86);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(42, 13);
+            this.label6.TabIndex = 11;
+            this.label6.Text = "Volume";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(159, 112);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(74, 13);
+            this.label7.TabIndex = 12;
+            this.label7.Text = "2nd Flattening";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(159, 138);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(71, 13);
+            this.label8.TabIndex = 13;
+            this.label8.Text = "3rd Flattening";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(159, 164);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(74, 13);
+            this.label9.TabIndex = 14;
+            this.label9.Text = "Eccentricity^2";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(159, 190);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(94, 13);
+            this.label10.TabIndex = 15;
+            this.label10.Text = "2nd eccentricity^2";
+            //
+            // m_minorRadiusTextBox
+            //
+            this.m_minorRadiusTextBox.Location = new System.Drawing.Point(259, 4);
+            this.m_minorRadiusTextBox.Name = "m_minorRadiusTextBox";
+            this.m_minorRadiusTextBox.ReadOnly = true;
+            this.m_minorRadiusTextBox.Size = new System.Drawing.Size(134, 20);
+            this.m_minorRadiusTextBox.TabIndex = 16;
+            //
+            // m_quarterMeridianTextBox
+            //
+            this.m_quarterMeridianTextBox.Location = new System.Drawing.Point(259, 30);
+            this.m_quarterMeridianTextBox.Name = "m_quarterMeridianTextBox";
+            this.m_quarterMeridianTextBox.ReadOnly = true;
+            this.m_quarterMeridianTextBox.Size = new System.Drawing.Size(134, 20);
+            this.m_quarterMeridianTextBox.TabIndex = 17;
+            //
+            // m_areaTextBox
+            //
+            this.m_areaTextBox.Location = new System.Drawing.Point(259, 56);
+            this.m_areaTextBox.Name = "m_areaTextBox";
+            this.m_areaTextBox.ReadOnly = true;
+            this.m_areaTextBox.Size = new System.Drawing.Size(134, 20);
+            this.m_areaTextBox.TabIndex = 18;
+            //
+            // m_volumeTextBox
+            //
+            this.m_volumeTextBox.Location = new System.Drawing.Point(259, 82);
+            this.m_volumeTextBox.Name = "m_volumeTextBox";
+            this.m_volumeTextBox.ReadOnly = true;
+            this.m_volumeTextBox.Size = new System.Drawing.Size(134, 20);
+            this.m_volumeTextBox.TabIndex = 19;
+            //
+            // m_2ndFlatTextBox
+            //
+            this.m_2ndFlatTextBox.Location = new System.Drawing.Point(259, 108);
+            this.m_2ndFlatTextBox.Name = "m_2ndFlatTextBox";
+            this.m_2ndFlatTextBox.ReadOnly = true;
+            this.m_2ndFlatTextBox.Size = new System.Drawing.Size(134, 20);
+            this.m_2ndFlatTextBox.TabIndex = 20;
+            //
+            // m_3rdFlatTextBox
+            //
+            this.m_3rdFlatTextBox.Location = new System.Drawing.Point(259, 134);
+            this.m_3rdFlatTextBox.Name = "m_3rdFlatTextBox";
+            this.m_3rdFlatTextBox.ReadOnly = true;
+            this.m_3rdFlatTextBox.Size = new System.Drawing.Size(134, 20);
+            this.m_3rdFlatTextBox.TabIndex = 21;
+            //
+            // m_ecc2TextBox
+            //
+            this.m_ecc2TextBox.Location = new System.Drawing.Point(259, 160);
+            this.m_ecc2TextBox.Name = "m_ecc2TextBox";
+            this.m_ecc2TextBox.ReadOnly = true;
+            this.m_ecc2TextBox.Size = new System.Drawing.Size(134, 20);
+            this.m_ecc2TextBox.TabIndex = 22;
+            //
+            // m_2ecc2TextBox
+            //
+            this.m_2ecc2TextBox.Location = new System.Drawing.Point(259, 186);
+            this.m_2ecc2TextBox.Name = "m_2ecc2TextBox";
+            this.m_2ecc2TextBox.ReadOnly = true;
+            this.m_2ecc2TextBox.Size = new System.Drawing.Size(134, 20);
+            this.m_2ecc2TextBox.TabIndex = 23;
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(402, 8);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(22, 13);
+            this.label11.TabIndex = 24;
+            this.label11.Text = "Phi";
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(402, 34);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(98, 13);
+            this.label12.TabIndex = 25;
+            this.label12.Text = "Parametric Latitude";
+            //
+            // label13
+            //
+            this.label13.AutoSize = true;
+            this.label13.Location = new System.Drawing.Point(402, 60);
+            this.label13.Name = "label13";
+            this.label13.Size = new System.Drawing.Size(100, 13);
+            this.label13.TabIndex = 26;
+            this.label13.Text = "Geocentric Latitude";
+            //
+            // m_phiTextBox
+            //
+            this.m_phiTextBox.Location = new System.Drawing.Point(512, 4);
+            this.m_phiTextBox.Name = "m_phiTextBox";
+            this.m_phiTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_phiTextBox.TabIndex = 27;
+            //
+            // label14
+            //
+            this.label14.AutoSize = true;
+            this.label14.Location = new System.Drawing.Point(402, 86);
+            this.label14.Name = "label14";
+            this.label14.Size = new System.Drawing.Size(95, 13);
+            this.label14.TabIndex = 28;
+            this.label14.Text = "Rectifying Latitude";
+            //
+            // label15
+            //
+            this.label15.AutoSize = true;
+            this.label15.Location = new System.Drawing.Point(402, 112);
+            this.label15.Name = "label15";
+            this.label15.Size = new System.Drawing.Size(86, 13);
+            this.label15.TabIndex = 29;
+            this.label15.Text = "Authalic Latitude";
+            //
+            // label16
+            //
+            this.label16.AutoSize = true;
+            this.label16.Location = new System.Drawing.Point(402, 138);
+            this.label16.Name = "label16";
+            this.label16.Size = new System.Drawing.Size(95, 13);
+            this.label16.TabIndex = 30;
+            this.label16.Text = "Conformal Latitude";
+            //
+            // label17
+            //
+            this.label17.AutoSize = true;
+            this.label17.Location = new System.Drawing.Point(402, 164);
+            this.label17.Name = "label17";
+            this.label17.Size = new System.Drawing.Size(90, 13);
+            this.label17.TabIndex = 31;
+            this.label17.Text = "Isometric Latitude";
+            //
+            // m_parametericLatTextBox
+            //
+            this.m_parametericLatTextBox.Location = new System.Drawing.Point(512, 30);
+            this.m_parametericLatTextBox.Name = "m_parametericLatTextBox";
+            this.m_parametericLatTextBox.ReadOnly = true;
+            this.m_parametericLatTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_parametericLatTextBox.TabIndex = 32;
+            //
+            // m_geocentricLatTextBox
+            //
+            this.m_geocentricLatTextBox.Location = new System.Drawing.Point(512, 56);
+            this.m_geocentricLatTextBox.Name = "m_geocentricLatTextBox";
+            this.m_geocentricLatTextBox.ReadOnly = true;
+            this.m_geocentricLatTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_geocentricLatTextBox.TabIndex = 33;
+            //
+            // m_rectifyingLatTextBox
+            //
+            this.m_rectifyingLatTextBox.Location = new System.Drawing.Point(512, 82);
+            this.m_rectifyingLatTextBox.Name = "m_rectifyingLatTextBox";
+            this.m_rectifyingLatTextBox.ReadOnly = true;
+            this.m_rectifyingLatTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_rectifyingLatTextBox.TabIndex = 34;
+            //
+            // m_authalicLatTextBox
+            //
+            this.m_authalicLatTextBox.Location = new System.Drawing.Point(512, 108);
+            this.m_authalicLatTextBox.Name = "m_authalicLatTextBox";
+            this.m_authalicLatTextBox.ReadOnly = true;
+            this.m_authalicLatTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_authalicLatTextBox.TabIndex = 35;
+            //
+            // m_conformalTextBox
+            //
+            this.m_conformalTextBox.Location = new System.Drawing.Point(512, 134);
+            this.m_conformalTextBox.Name = "m_conformalTextBox";
+            this.m_conformalTextBox.ReadOnly = true;
+            this.m_conformalTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_conformalTextBox.TabIndex = 36;
+            //
+            // m_isometricLatTextBox
+            //
+            this.m_isometricLatTextBox.Location = new System.Drawing.Point(512, 160);
+            this.m_isometricLatTextBox.Name = "m_isometricLatTextBox";
+            this.m_isometricLatTextBox.ReadOnly = true;
+            this.m_isometricLatTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_isometricLatTextBox.TabIndex = 37;
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(435, 185);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(126, 23);
+            this.button1.TabIndex = 38;
+            this.button1.Text = "Calculate Latitudes";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnCalculateLatitudes);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(18, 150);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 39;
+            this.button2.Text = "Validate";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnValidate);
+            //
+            // EllipsoidPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.m_isometricLatTextBox);
+            this.Controls.Add(this.m_conformalTextBox);
+            this.Controls.Add(this.m_authalicLatTextBox);
+            this.Controls.Add(this.m_rectifyingLatTextBox);
+            this.Controls.Add(this.m_geocentricLatTextBox);
+            this.Controls.Add(this.m_parametericLatTextBox);
+            this.Controls.Add(this.label17);
+            this.Controls.Add(this.label16);
+            this.Controls.Add(this.label15);
+            this.Controls.Add(this.label14);
+            this.Controls.Add(this.m_phiTextBox);
+            this.Controls.Add(this.label13);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.m_2ecc2TextBox);
+            this.Controls.Add(this.m_ecc2TextBox);
+            this.Controls.Add(this.m_3rdFlatTextBox);
+            this.Controls.Add(this.m_2ndFlatTextBox);
+            this.Controls.Add(this.m_volumeTextBox);
+            this.Controls.Add(this.m_areaTextBox);
+            this.Controls.Add(this.m_quarterMeridianTextBox);
+            this.Controls.Add(this.m_minorRadiusTextBox);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "EllipsoidPanel";
+            this.Size = new System.Drawing.Size(798, 356);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolTip m_toolTip;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Button m_setButton;
+        private System.Windows.Forms.TextBox m_flatteningTextBox;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox m_majorRadiusTextBox;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.TextBox m_minorRadiusTextBox;
+        private System.Windows.Forms.TextBox m_quarterMeridianTextBox;
+        private System.Windows.Forms.TextBox m_areaTextBox;
+        private System.Windows.Forms.TextBox m_volumeTextBox;
+        private System.Windows.Forms.TextBox m_2ndFlatTextBox;
+        private System.Windows.Forms.TextBox m_3rdFlatTextBox;
+        private System.Windows.Forms.TextBox m_ecc2TextBox;
+        private System.Windows.Forms.TextBox m_2ecc2TextBox;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.Label label13;
+        private System.Windows.Forms.TextBox m_phiTextBox;
+        private System.Windows.Forms.Label label14;
+        private System.Windows.Forms.Label label15;
+        private System.Windows.Forms.Label label16;
+        private System.Windows.Forms.Label label17;
+        private System.Windows.Forms.TextBox m_parametericLatTextBox;
+        private System.Windows.Forms.TextBox m_geocentricLatTextBox;
+        private System.Windows.Forms.TextBox m_rectifyingLatTextBox;
+        private System.Windows.Forms.TextBox m_authalicLatTextBox;
+        private System.Windows.Forms.TextBox m_conformalTextBox;
+        private System.Windows.Forms.TextBox m_isometricLatTextBox;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button button2;
+    }
+}
diff --git a/dotnet/Projections/EllipsoidPanel.cs b/dotnet/Projections/EllipsoidPanel.cs
new file mode 100644
index 0000000..85372a8
--- /dev/null
+++ b/dotnet/Projections/EllipsoidPanel.cs
@@ -0,0 +1,117 @@
+/**
+ * \file NETGeographicLib\EllipsoidPanel.cs
+ * \brief NETGeographicLib.Ellipsoid example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class EllipsoidPanel : UserControl
+    {
+        Ellipsoid m_ell = null;
+        public EllipsoidPanel()
+        {
+            InitializeComponent();
+            m_ell = new Ellipsoid();
+            m_majorRadiusTextBox.Text = m_ell.MajorRadius.ToString();
+            m_flatteningTextBox.Text = m_ell.Flattening.ToString();
+
+            m_minorRadiusTextBox.Text = m_ell.MinorRadius.ToString();
+            m_quarterMeridianTextBox.Text = m_ell.QuarterMeridian.ToString();
+            m_areaTextBox.Text = m_ell.Area.ToString();
+            m_volumeTextBox.Text = m_ell.Volume.ToString();
+            m_2ndFlatTextBox.Text = m_ell.SecondFlattening.ToString();
+            m_3rdFlatTextBox.Text = m_ell.ThirdFlattening.ToString();
+            m_ecc2TextBox.Text = m_ell.EccentricitySq.ToString();
+            m_2ecc2TextBox.Text = m_ell.SecondEccentricitySq.ToString();
+        }
+
+        private void OnSet(object sender, EventArgs e)
+        {
+            try
+            {
+                double a = Double.Parse(m_majorRadiusTextBox.Text);
+                double f = Double.Parse(m_flatteningTextBox.Text);
+                m_ell = new Ellipsoid(a, f);
+
+                m_minorRadiusTextBox.Text = m_ell.MinorRadius.ToString();
+                m_quarterMeridianTextBox.Text = m_ell.QuarterMeridian.ToString();
+                m_areaTextBox.Text = m_ell.Area.ToString();
+                m_volumeTextBox.Text = m_ell.Volume.ToString();
+                m_2ndFlatTextBox.Text = m_ell.SecondFlattening.ToString();
+                m_3rdFlatTextBox.Text = m_ell.ThirdFlattening.ToString();
+                m_ecc2TextBox.Text = m_ell.EccentricitySq.ToString();
+                m_2ecc2TextBox.Text = m_ell.SecondEccentricitySq.ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnCalculateLatitudes(object sender, EventArgs e)
+        {
+            try
+            {
+                double phi = Double.Parse(m_phiTextBox.Text);
+                m_parametericLatTextBox.Text = m_ell.ParametricLatitude(phi).ToString();
+                m_geocentricLatTextBox.Text = m_ell.GeocentricLatitude(phi).ToString();
+                m_rectifyingLatTextBox.Text = m_ell.RectifyingLatitude(phi).ToString();
+                m_authalicLatTextBox.Text = m_ell.AuthalicLatitude(phi).ToString();
+                m_conformalTextBox.Text = m_ell.ConformalLatitude(phi).ToString();
+                m_isometricLatTextBox.Text = m_ell.IsometricLatitude(phi).ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                Ellipsoid ee = new Ellipsoid(50000.0, .003);
+                ee = new Ellipsoid();
+                ee.AuthalicLatitude(30.0);
+                ee.CircleHeight(30.0);
+                ee.CircleRadius(30.0);
+                ee.ConformalLatitude(30.0);
+                ee.GeocentricLatitude(30.0);
+                ee.InverseAuthalicLatitude(30.0);
+                ee.InverseConformalLatitude(30.0);
+                ee.InverseGeocentricLatitude(30.0);
+                ee.InverseIsometricLatitude(30.0);
+                ee.InverseParametricLatitude(30.0);
+                ee.InverseRectifyingLatitude(30.0);
+                ee.IsometricLatitude(30.0);
+                ee.MeridianDistance(30.0);
+                ee.MeridionalCurvatureRadius(30.0);
+                ee.NormalCurvatureRadius(30.0, 60.0);
+                ee.ParametricLatitude(30.0);
+                ee.RectifyingLatitude(30.0);
+                ee.TransverseCurvatureRadius(30.0);
+
+                MessageBox.Show("no errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/EllipsoidPanel.resx b/dotnet/Projections/EllipsoidPanel.resx
new file mode 100644
index 0000000..3ec30e0
--- /dev/null
+++ b/dotnet/Projections/EllipsoidPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/EllipticPanel.Designer.cs b/dotnet/Projections/EllipticPanel.Designer.cs
new file mode 100644
index 0000000..7952dfb
--- /dev/null
+++ b/dotnet/Projections/EllipticPanel.Designer.cs
@@ -0,0 +1,529 @@
+namespace Projections
+{
+    partial class EllipticPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.m_toolTip = new System.Windows.Forms.ToolTip(this.components);
+            this.label4 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.m_k2TextBox = new System.Windows.Forms.TextBox();
+            this.m_alpha2TextBox = new System.Windows.Forms.TextBox();
+            this.m_kp2TextBox = new System.Windows.Forms.TextBox();
+            this.m_alphap2TextBox = new System.Windows.Forms.TextBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.m_constructorComboBox = new System.Windows.Forms.ComboBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.label12 = new System.Windows.Forms.Label();
+            this.m_KtextBox = new System.Windows.Forms.TextBox();
+            this.m_EtextBox = new System.Windows.Forms.TextBox();
+            this.m_DtextBox = new System.Windows.Forms.TextBox();
+            this.m_KEtextBox = new System.Windows.Forms.TextBox();
+            this.m_PItextBox = new System.Windows.Forms.TextBox();
+            this.m_GtextBox = new System.Windows.Forms.TextBox();
+            this.m_HtextBox = new System.Windows.Forms.TextBox();
+            this.label13 = new System.Windows.Forms.Label();
+            this.label14 = new System.Windows.Forms.Label();
+            this.label15 = new System.Windows.Forms.Label();
+            this.label16 = new System.Windows.Forms.Label();
+            this.label17 = new System.Windows.Forms.Label();
+            this.label18 = new System.Windows.Forms.Label();
+            this.label19 = new System.Windows.Forms.Label();
+            this.m_phiTextBox = new System.Windows.Forms.TextBox();
+            this.m_EphiTextBox = new System.Windows.Forms.TextBox();
+            this.m_DphiTextBox = new System.Windows.Forms.TextBox();
+            this.m_FphiTextBox = new System.Windows.Forms.TextBox();
+            this.m_PiphiTextBox = new System.Windows.Forms.TextBox();
+            this.m_GphiTextBox = new System.Windows.Forms.TextBox();
+            this.m_HphiTextBox = new System.Windows.Forms.TextBox();
+            this.button2 = new System.Windows.Forms.Button();
+            this.button3 = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(9, 11);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(19, 13);
+            this.label4.TabIndex = 0;
+            this.label4.Text = "k2";
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(9, 37);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(39, 13);
+            this.label1.TabIndex = 1;
+            this.label1.Text = "alpha2";
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(9, 63);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(25, 13);
+            this.label2.TabIndex = 2;
+            this.label2.Text = "kp2";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(9, 89);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(45, 13);
+            this.label3.TabIndex = 3;
+            this.label3.Text = "alphap2";
+            //
+            // m_k2TextBox
+            //
+            this.m_k2TextBox.Location = new System.Drawing.Point(76, 7);
+            this.m_k2TextBox.Name = "m_k2TextBox";
+            this.m_k2TextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_k2TextBox.TabIndex = 4;
+            //
+            // m_alpha2TextBox
+            //
+            this.m_alpha2TextBox.Location = new System.Drawing.Point(76, 33);
+            this.m_alpha2TextBox.Name = "m_alpha2TextBox";
+            this.m_alpha2TextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_alpha2TextBox.TabIndex = 5;
+            //
+            // m_kp2TextBox
+            //
+            this.m_kp2TextBox.Location = new System.Drawing.Point(76, 59);
+            this.m_kp2TextBox.Name = "m_kp2TextBox";
+            this.m_kp2TextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_kp2TextBox.TabIndex = 6;
+            //
+            // m_alphap2TextBox
+            //
+            this.m_alphap2TextBox.Location = new System.Drawing.Point(76, 85);
+            this.m_alphap2TextBox.Name = "m_alphap2TextBox";
+            this.m_alphap2TextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_alphap2TextBox.TabIndex = 7;
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(47, 141);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 8;
+            this.button1.Text = "Set";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnSet);
+            //
+            // m_constructorComboBox
+            //
+            this.m_constructorComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_constructorComboBox.FormattingEnabled = true;
+            this.m_constructorComboBox.Items.AddRange(new object[] {
+            "Constructor #1",
+            "Constructor #2"});
+            this.m_constructorComboBox.Location = new System.Drawing.Point(76, 113);
+            this.m_constructorComboBox.Name = "m_constructorComboBox";
+            this.m_constructorComboBox.Size = new System.Drawing.Size(100, 21);
+            this.m_constructorComboBox.TabIndex = 9;
+            this.m_toolTip.SetToolTip(this.m_constructorComboBox, "Selects the constructor");
+            this.m_constructorComboBox.SelectedIndexChanged += new System.EventHandler(this.OnConstructor);
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(9, 117);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(61, 13);
+            this.label5.TabIndex = 10;
+            this.label5.Text = "Constructor";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(186, 11);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(14, 13);
+            this.label6.TabIndex = 11;
+            this.label6.Text = "K";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(186, 37);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(14, 13);
+            this.label7.TabIndex = 12;
+            this.label7.Text = "E";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(186, 63);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(15, 13);
+            this.label8.TabIndex = 13;
+            this.label8.Text = "D";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(186, 89);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(21, 13);
+            this.label9.TabIndex = 14;
+            this.label9.Text = "KE";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(186, 113);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(16, 13);
+            this.label10.TabIndex = 15;
+            this.label10.Text = "Pi";
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(186, 141);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(15, 13);
+            this.label11.TabIndex = 16;
+            this.label11.Text = "G";
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(186, 168);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(15, 13);
+            this.label12.TabIndex = 17;
+            this.label12.Text = "H";
+            //
+            // m_KtextBox
+            //
+            this.m_KtextBox.Location = new System.Drawing.Point(218, 7);
+            this.m_KtextBox.Name = "m_KtextBox";
+            this.m_KtextBox.ReadOnly = true;
+            this.m_KtextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_KtextBox.TabIndex = 18;
+            //
+            // m_EtextBox
+            //
+            this.m_EtextBox.Location = new System.Drawing.Point(218, 33);
+            this.m_EtextBox.Name = "m_EtextBox";
+            this.m_EtextBox.ReadOnly = true;
+            this.m_EtextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_EtextBox.TabIndex = 19;
+            //
+            // m_DtextBox
+            //
+            this.m_DtextBox.Location = new System.Drawing.Point(218, 59);
+            this.m_DtextBox.Name = "m_DtextBox";
+            this.m_DtextBox.ReadOnly = true;
+            this.m_DtextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_DtextBox.TabIndex = 20;
+            //
+            // m_KEtextBox
+            //
+            this.m_KEtextBox.Location = new System.Drawing.Point(218, 85);
+            this.m_KEtextBox.Name = "m_KEtextBox";
+            this.m_KEtextBox.ReadOnly = true;
+            this.m_KEtextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_KEtextBox.TabIndex = 21;
+            //
+            // m_PItextBox
+            //
+            this.m_PItextBox.Location = new System.Drawing.Point(218, 111);
+            this.m_PItextBox.Name = "m_PItextBox";
+            this.m_PItextBox.ReadOnly = true;
+            this.m_PItextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_PItextBox.TabIndex = 22;
+            //
+            // m_GtextBox
+            //
+            this.m_GtextBox.Location = new System.Drawing.Point(218, 137);
+            this.m_GtextBox.Name = "m_GtextBox";
+            this.m_GtextBox.ReadOnly = true;
+            this.m_GtextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_GtextBox.TabIndex = 23;
+            //
+            // m_HtextBox
+            //
+            this.m_HtextBox.Location = new System.Drawing.Point(218, 163);
+            this.m_HtextBox.Name = "m_HtextBox";
+            this.m_HtextBox.ReadOnly = true;
+            this.m_HtextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_HtextBox.TabIndex = 24;
+            //
+            // label13
+            //
+            this.label13.AutoSize = true;
+            this.label13.Location = new System.Drawing.Point(329, 11);
+            this.label13.Name = "label13";
+            this.label13.Size = new System.Drawing.Size(21, 13);
+            this.label13.TabIndex = 25;
+            this.label13.Text = "phi";
+            //
+            // label14
+            //
+            this.label14.AutoSize = true;
+            this.label14.Location = new System.Drawing.Point(329, 37);
+            this.label14.Name = "label14";
+            this.label14.Size = new System.Drawing.Size(34, 13);
+            this.label14.TabIndex = 26;
+            this.label14.Text = "E(phi)";
+            //
+            // label15
+            //
+            this.label15.AutoSize = true;
+            this.label15.Location = new System.Drawing.Point(329, 89);
+            this.label15.Name = "label15";
+            this.label15.Size = new System.Drawing.Size(33, 13);
+            this.label15.TabIndex = 27;
+            this.label15.Text = "F(phi)";
+            //
+            // label16
+            //
+            this.label16.AutoSize = true;
+            this.label16.Location = new System.Drawing.Point(329, 63);
+            this.label16.Name = "label16";
+            this.label16.Size = new System.Drawing.Size(35, 13);
+            this.label16.TabIndex = 28;
+            this.label16.Text = "D(phi)";
+            //
+            // label17
+            //
+            this.label17.AutoSize = true;
+            this.label17.Location = new System.Drawing.Point(329, 115);
+            this.label17.Name = "label17";
+            this.label17.Size = new System.Drawing.Size(36, 13);
+            this.label17.TabIndex = 29;
+            this.label17.Text = "Pi(phi)";
+            //
+            // label18
+            //
+            this.label18.AutoSize = true;
+            this.label18.Location = new System.Drawing.Point(329, 141);
+            this.label18.Name = "label18";
+            this.label18.Size = new System.Drawing.Size(35, 13);
+            this.label18.TabIndex = 30;
+            this.label18.Text = "G(phi)";
+            //
+            // label19
+            //
+            this.label19.AutoSize = true;
+            this.label19.Location = new System.Drawing.Point(329, 167);
+            this.label19.Name = "label19";
+            this.label19.Size = new System.Drawing.Size(35, 13);
+            this.label19.TabIndex = 31;
+            this.label19.Text = "H(phi)";
+            //
+            // m_phiTextBox
+            //
+            this.m_phiTextBox.Location = new System.Drawing.Point(371, 7);
+            this.m_phiTextBox.Name = "m_phiTextBox";
+            this.m_phiTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_phiTextBox.TabIndex = 32;
+            //
+            // m_EphiTextBox
+            //
+            this.m_EphiTextBox.Location = new System.Drawing.Point(371, 33);
+            this.m_EphiTextBox.Name = "m_EphiTextBox";
+            this.m_EphiTextBox.ReadOnly = true;
+            this.m_EphiTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_EphiTextBox.TabIndex = 33;
+            //
+            // m_DphiTextBox
+            //
+            this.m_DphiTextBox.Location = new System.Drawing.Point(372, 59);
+            this.m_DphiTextBox.Name = "m_DphiTextBox";
+            this.m_DphiTextBox.ReadOnly = true;
+            this.m_DphiTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_DphiTextBox.TabIndex = 34;
+            //
+            // m_FphiTextBox
+            //
+            this.m_FphiTextBox.Location = new System.Drawing.Point(371, 85);
+            this.m_FphiTextBox.Name = "m_FphiTextBox";
+            this.m_FphiTextBox.ReadOnly = true;
+            this.m_FphiTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_FphiTextBox.TabIndex = 35;
+            //
+            // m_PiphiTextBox
+            //
+            this.m_PiphiTextBox.Location = new System.Drawing.Point(371, 111);
+            this.m_PiphiTextBox.Name = "m_PiphiTextBox";
+            this.m_PiphiTextBox.ReadOnly = true;
+            this.m_PiphiTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_PiphiTextBox.TabIndex = 36;
+            //
+            // m_GphiTextBox
+            //
+            this.m_GphiTextBox.Location = new System.Drawing.Point(371, 137);
+            this.m_GphiTextBox.Name = "m_GphiTextBox";
+            this.m_GphiTextBox.ReadOnly = true;
+            this.m_GphiTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_GphiTextBox.TabIndex = 37;
+            //
+            // m_HphiTextBox
+            //
+            this.m_HphiTextBox.Location = new System.Drawing.Point(371, 163);
+            this.m_HphiTextBox.Name = "m_HphiTextBox";
+            this.m_HphiTextBox.ReadOnly = true;
+            this.m_HphiTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_HphiTextBox.TabIndex = 38;
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(332, 190);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(139, 23);
+            this.button2.TabIndex = 39;
+            this.button2.Text = "Calculate phi functions";
+            this.m_toolTip.SetToolTip(this.button2, "Calculate all functions that use phi as an input");
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnComputePhi);
+            //
+            // button3
+            //
+            this.button3.Location = new System.Drawing.Point(47, 168);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(75, 23);
+            this.button3.TabIndex = 40;
+            this.button3.Text = "Validate";
+            this.m_toolTip.SetToolTip(this.button3, "Verifies Elliptic Function interfaces");
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.OnValidate);
+            //
+            // EllipticPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.button3);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.m_HphiTextBox);
+            this.Controls.Add(this.m_GphiTextBox);
+            this.Controls.Add(this.m_PiphiTextBox);
+            this.Controls.Add(this.m_FphiTextBox);
+            this.Controls.Add(this.m_DphiTextBox);
+            this.Controls.Add(this.m_EphiTextBox);
+            this.Controls.Add(this.m_phiTextBox);
+            this.Controls.Add(this.label19);
+            this.Controls.Add(this.label18);
+            this.Controls.Add(this.label17);
+            this.Controls.Add(this.label16);
+            this.Controls.Add(this.label15);
+            this.Controls.Add(this.label14);
+            this.Controls.Add(this.label13);
+            this.Controls.Add(this.m_HtextBox);
+            this.Controls.Add(this.m_GtextBox);
+            this.Controls.Add(this.m_PItextBox);
+            this.Controls.Add(this.m_KEtextBox);
+            this.Controls.Add(this.m_DtextBox);
+            this.Controls.Add(this.m_EtextBox);
+            this.Controls.Add(this.m_KtextBox);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.m_constructorComboBox);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.m_alphap2TextBox);
+            this.Controls.Add(this.m_kp2TextBox);
+            this.Controls.Add(this.m_alpha2TextBox);
+            this.Controls.Add(this.m_k2TextBox);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.label4);
+            this.Name = "EllipticPanel";
+            this.Size = new System.Drawing.Size(764, 377);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolTip m_toolTip;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox m_k2TextBox;
+        private System.Windows.Forms.TextBox m_alpha2TextBox;
+        private System.Windows.Forms.TextBox m_kp2TextBox;
+        private System.Windows.Forms.TextBox m_alphap2TextBox;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.ComboBox m_constructorComboBox;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.TextBox m_KtextBox;
+        private System.Windows.Forms.TextBox m_EtextBox;
+        private System.Windows.Forms.TextBox m_DtextBox;
+        private System.Windows.Forms.TextBox m_KEtextBox;
+        private System.Windows.Forms.TextBox m_PItextBox;
+        private System.Windows.Forms.TextBox m_GtextBox;
+        private System.Windows.Forms.TextBox m_HtextBox;
+        private System.Windows.Forms.Label label13;
+        private System.Windows.Forms.Label label14;
+        private System.Windows.Forms.Label label15;
+        private System.Windows.Forms.Label label16;
+        private System.Windows.Forms.Label label17;
+        private System.Windows.Forms.Label label18;
+        private System.Windows.Forms.Label label19;
+        private System.Windows.Forms.TextBox m_phiTextBox;
+        private System.Windows.Forms.TextBox m_EphiTextBox;
+        private System.Windows.Forms.TextBox m_DphiTextBox;
+        private System.Windows.Forms.TextBox m_FphiTextBox;
+        private System.Windows.Forms.TextBox m_PiphiTextBox;
+        private System.Windows.Forms.TextBox m_GphiTextBox;
+        private System.Windows.Forms.TextBox m_HphiTextBox;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Button button3;
+    }
+}
diff --git a/dotnet/Projections/EllipticPanel.cs b/dotnet/Projections/EllipticPanel.cs
new file mode 100644
index 0000000..715441a
--- /dev/null
+++ b/dotnet/Projections/EllipticPanel.cs
@@ -0,0 +1,136 @@
+/**
+ * \file NETGeographicLib\EllipticPanel.cs
+ * \brief NETGeographicLib.EllipticFunction example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class EllipticPanel : UserControl
+    {
+        EllipticFunction m_func = null;
+
+        public EllipticPanel()
+        {
+            InitializeComponent();
+            m_constructorComboBox.SelectedIndex = 0;
+            m_k2TextBox.Text = "0.5";
+            m_alpha2TextBox.Text = "0.5";
+            OnSet(null, null);
+        }
+
+        private void OnSet(object sender, EventArgs e)
+        {
+            try
+            {
+                double k2 = Double.Parse(m_k2TextBox.Text);
+                double alpha2 = Double.Parse(m_alpha2TextBox.Text);
+                if (m_constructorComboBox.SelectedIndex == 0)
+                    m_func = new EllipticFunction(k2, alpha2);
+                else
+                {
+                    double kp2 = Double.Parse(m_kp2TextBox.Text);
+                    double alphap2 = Double.Parse(m_alphap2TextBox.Text);
+                    m_func = new EllipticFunction(k2, alpha2, kp2, alphap2);
+                }
+                m_KtextBox.Text = m_func.K().ToString();
+                m_EtextBox.Text = m_func.E().ToString();
+                m_DtextBox.Text = m_func.D().ToString();
+                m_KEtextBox.Text = m_func.KE().ToString();
+                m_PItextBox.Text = m_func.Pi().ToString();
+                m_GtextBox.Text = m_func.G().ToString();
+                m_HtextBox.Text = m_func.H().ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnConstructor(object sender, EventArgs e)
+        {
+            m_kp2TextBox.ReadOnly = m_alphap2TextBox.ReadOnly = m_constructorComboBox.SelectedIndex == 0;
+        }
+
+        private void OnComputePhi(object sender, EventArgs e)
+        {
+            try
+            {
+                double phi = Double.Parse(m_phiTextBox.Text);
+                m_EphiTextBox.Text = m_func.E(phi).ToString();
+                m_FphiTextBox.Text = m_func.F(phi).ToString();
+                m_DphiTextBox.Text = m_func.D(phi).ToString();
+                m_GphiTextBox.Text = m_func.G(phi).ToString();
+                m_HphiTextBox.Text = m_func.H(phi).ToString();
+                m_PiphiTextBox.Text = m_func.Pi(phi).ToString();
+            }
+            catch ( Exception xcpt )
+            {
+                MessageBox.Show( xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                double phi = 0.8;
+                EllipticFunction f = new EllipticFunction(0.3, 0.4, 0.7, 0.6);
+                f.Reset(0.2, 0.3, 0.8, 0.7);
+                f = new EllipticFunction(0.3, 0.4);
+                f.Reset(0.2, 0.3);
+                double cn, sn, dn;
+                f.sncndn(0.3, out sn, out cn, out dn);
+                f.Delta(sn, cn);
+                f.D();
+                f.D(phi);
+                f.D(sn, cn, dn);
+                f.Pi();
+                f.Pi(phi);
+                f.Pi(sn, cn, dn);
+                f.KE();
+                f.K();
+                f.H();
+                f.H(phi);
+                f.H(sn, cn, dn);
+                f.G();
+                f.G(phi);
+                f.G(sn, cn, dn);
+                f.F(phi);
+                f.F(sn, cn, dn);
+                f.Einv(0.75);
+                f.Ed(60.0);
+                f.E();
+                f.E(phi);
+                f.E(sn, cn, dn);
+                double tau = 3.1415927 / 10.0;
+                f.deltaEinv(Math.Sin(tau), Math.Cos(tau));
+                f.deltaD(sn, cn, dn);
+                f.deltaE(sn, cn, dn);
+                f.deltaF(sn, cn, dn);
+                f.deltaG(sn, cn, dn);
+                f.deltaH(sn, cn, dn);
+                f.deltaPi(sn, cn, dn);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+    }
+}
diff --git a/dotnet/Projections/EllipticPanel.resx b/dotnet/Projections/EllipticPanel.resx
new file mode 100644
index 0000000..3ec30e0
--- /dev/null
+++ b/dotnet/Projections/EllipticPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/Form1.Designer.cs b/dotnet/Projections/Form1.Designer.cs
new file mode 100644
index 0000000..8f51980
--- /dev/null
+++ b/dotnet/Projections/Form1.Designer.cs
@@ -0,0 +1,266 @@
+namespace Projections
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.m_tabControl = new System.Windows.Forms.TabControl();
+            this.m_geocentricTabPage = new System.Windows.Forms.TabPage();
+            this.m_geodesicTabPage = new System.Windows.Forms.TabPage();
+            this.m_localCartesianPage = new System.Windows.Forms.TabPage();
+            this.m_albersPage = new System.Windows.Forms.TabPage();
+            this.m_typeIIProjections = new System.Windows.Forms.TabPage();
+            this.m_typeIIIProjPage = new System.Windows.Forms.TabPage();
+            this.m_polarStereoPage = new System.Windows.Forms.TabPage();
+            this.m_sphericalPage = new System.Windows.Forms.TabPage();
+            this.m_ellipticPage = new System.Windows.Forms.TabPage();
+            this.m_ellipsoidPage = new System.Windows.Forms.TabPage();
+            this.m_miscPage = new System.Windows.Forms.TabPage();
+            this.m_geoidPage = new System.Windows.Forms.TabPage();
+            this.m_gravityPage = new System.Windows.Forms.TabPage();
+            this.m_magneticPage = new System.Windows.Forms.TabPage();
+            this.m_polyPage = new System.Windows.Forms.TabPage();
+            this.m_accumPage = new System.Windows.Forms.TabPage();
+            this.m_tabControl.SuspendLayout();
+            this.SuspendLayout();
+            //
+            // m_tabControl
+            //
+            this.m_tabControl.Controls.Add(this.m_geocentricTabPage);
+            this.m_tabControl.Controls.Add(this.m_geodesicTabPage);
+            this.m_tabControl.Controls.Add(this.m_localCartesianPage);
+            this.m_tabControl.Controls.Add(this.m_albersPage);
+            this.m_tabControl.Controls.Add(this.m_typeIIProjections);
+            this.m_tabControl.Controls.Add(this.m_typeIIIProjPage);
+            this.m_tabControl.Controls.Add(this.m_polarStereoPage);
+            this.m_tabControl.Controls.Add(this.m_sphericalPage);
+            this.m_tabControl.Controls.Add(this.m_ellipticPage);
+            this.m_tabControl.Controls.Add(this.m_ellipsoidPage);
+            this.m_tabControl.Controls.Add(this.m_miscPage);
+            this.m_tabControl.Controls.Add(this.m_geoidPage);
+            this.m_tabControl.Controls.Add(this.m_gravityPage);
+            this.m_tabControl.Controls.Add(this.m_magneticPage);
+            this.m_tabControl.Controls.Add(this.m_polyPage);
+            this.m_tabControl.Controls.Add(this.m_accumPage);
+            this.m_tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.m_tabControl.Location = new System.Drawing.Point(0, 0);
+            this.m_tabControl.Name = "m_tabControl";
+            this.m_tabControl.SelectedIndex = 0;
+            this.m_tabControl.ShowToolTips = true;
+            this.m_tabControl.Size = new System.Drawing.Size(944, 262);
+            this.m_tabControl.TabIndex = 0;
+            //
+            // m_geocentricTabPage
+            //
+            this.m_geocentricTabPage.Location = new System.Drawing.Point(4, 22);
+            this.m_geocentricTabPage.Name = "m_geocentricTabPage";
+            this.m_geocentricTabPage.Size = new System.Drawing.Size(936, 236);
+            this.m_geocentricTabPage.TabIndex = 1;
+            this.m_geocentricTabPage.Text = "Geocentric";
+            this.m_geocentricTabPage.UseVisualStyleBackColor = true;
+            //
+            // m_geodesicTabPage
+            //
+            this.m_geodesicTabPage.Location = new System.Drawing.Point(4, 22);
+            this.m_geodesicTabPage.Name = "m_geodesicTabPage";
+            this.m_geodesicTabPage.Padding = new System.Windows.Forms.Padding(3);
+            this.m_geodesicTabPage.Size = new System.Drawing.Size(936, 236);
+            this.m_geodesicTabPage.TabIndex = 0;
+            this.m_geodesicTabPage.Text = "Geodesic";
+            this.m_geodesicTabPage.ToolTipText = "Geodesic, GeodesicExact, GeodesicLine, & GeodesicLineExact";
+            this.m_geodesicTabPage.UseVisualStyleBackColor = true;
+            //
+            // m_localCartesianPage
+            //
+            this.m_localCartesianPage.Location = new System.Drawing.Point(4, 22);
+            this.m_localCartesianPage.Name = "m_localCartesianPage";
+            this.m_localCartesianPage.Size = new System.Drawing.Size(936, 236);
+            this.m_localCartesianPage.TabIndex = 2;
+            this.m_localCartesianPage.Text = "LocalCartesian";
+            this.m_localCartesianPage.UseVisualStyleBackColor = true;
+            //
+            // m_albersPage
+            //
+            this.m_albersPage.Location = new System.Drawing.Point(4, 22);
+            this.m_albersPage.Name = "m_albersPage";
+            this.m_albersPage.Size = new System.Drawing.Size(936, 236);
+            this.m_albersPage.TabIndex = 3;
+            this.m_albersPage.Text = "Type I Projections";
+            this.m_albersPage.ToolTipText = "Albers Equal Area, Lambert Conformal Conic, Transverse Mercator, and Transverse M" +
+                "ercator Exact Projections";
+            this.m_albersPage.UseVisualStyleBackColor = true;
+            //
+            // m_typeIIProjections
+            //
+            this.m_typeIIProjections.Location = new System.Drawing.Point(4, 22);
+            this.m_typeIIProjections.Name = "m_typeIIProjections";
+            this.m_typeIIProjections.Size = new System.Drawing.Size(936, 236);
+            this.m_typeIIProjections.TabIndex = 4;
+            this.m_typeIIProjections.Text = "Type II Projections";
+            this.m_typeIIProjections.ToolTipText = "Azimuth Equidistant, Cassini Soldner, and Gnomonic Projections";
+            this.m_typeIIProjections.UseVisualStyleBackColor = true;
+            //
+            // m_typeIIIProjPage
+            //
+            this.m_typeIIIProjPage.Location = new System.Drawing.Point(4, 22);
+            this.m_typeIIIProjPage.Name = "m_typeIIIProjPage";
+            this.m_typeIIIProjPage.Size = new System.Drawing.Size(936, 236);
+            this.m_typeIIIProjPage.TabIndex = 11;
+            this.m_typeIIIProjPage.Text = "Type III Projections";
+            this.m_typeIIIProjPage.ToolTipText = "MGRS/OSGB/UTMUPS";
+            this.m_typeIIIProjPage.UseVisualStyleBackColor = true;
+            //
+            // m_polarStereoPage
+            //
+            this.m_polarStereoPage.Location = new System.Drawing.Point(4, 22);
+            this.m_polarStereoPage.Name = "m_polarStereoPage";
+            this.m_polarStereoPage.Size = new System.Drawing.Size(936, 236);
+            this.m_polarStereoPage.TabIndex = 5;
+            this.m_polarStereoPage.Text = "Polar Stereographic";
+            this.m_polarStereoPage.UseVisualStyleBackColor = true;
+            //
+            // m_sphericalPage
+            //
+            this.m_sphericalPage.Location = new System.Drawing.Point(4, 22);
+            this.m_sphericalPage.Name = "m_sphericalPage";
+            this.m_sphericalPage.Size = new System.Drawing.Size(936, 236);
+            this.m_sphericalPage.TabIndex = 6;
+            this.m_sphericalPage.Text = "Spherical Harmonics";
+            this.m_sphericalPage.ToolTipText = "Spherical Harmonic, Spherical Harmonic 1, and Spherical Harmonic 2";
+            this.m_sphericalPage.UseVisualStyleBackColor = true;
+            //
+            // m_ellipticPage
+            //
+            this.m_ellipticPage.Location = new System.Drawing.Point(4, 22);
+            this.m_ellipticPage.Name = "m_ellipticPage";
+            this.m_ellipticPage.Size = new System.Drawing.Size(936, 236);
+            this.m_ellipticPage.TabIndex = 7;
+            this.m_ellipticPage.Text = "Elliptic Function";
+            this.m_ellipticPage.UseVisualStyleBackColor = true;
+            //
+            // m_ellipsoidPage
+            //
+            this.m_ellipsoidPage.Location = new System.Drawing.Point(4, 22);
+            this.m_ellipsoidPage.Name = "m_ellipsoidPage";
+            this.m_ellipsoidPage.Size = new System.Drawing.Size(936, 236);
+            this.m_ellipsoidPage.TabIndex = 8;
+            this.m_ellipsoidPage.Text = "Ellipsoid";
+            this.m_ellipsoidPage.UseVisualStyleBackColor = true;
+            //
+            // m_miscPage
+            //
+            this.m_miscPage.Location = new System.Drawing.Point(4, 22);
+            this.m_miscPage.Name = "m_miscPage";
+            this.m_miscPage.Size = new System.Drawing.Size(936, 236);
+            this.m_miscPage.TabIndex = 9;
+            this.m_miscPage.Text = "Miscellaneous";
+            this.m_miscPage.ToolTipText = "DDS/Geohash";
+            this.m_miscPage.UseVisualStyleBackColor = true;
+            //
+            // m_geoidPage
+            //
+            this.m_geoidPage.Location = new System.Drawing.Point(4, 22);
+            this.m_geoidPage.Name = "m_geoidPage";
+            this.m_geoidPage.Size = new System.Drawing.Size(936, 236);
+            this.m_geoidPage.TabIndex = 10;
+            this.m_geoidPage.Text = "Geoid";
+            this.m_geoidPage.UseVisualStyleBackColor = true;
+            //
+            // m_gravityPage
+            //
+            this.m_gravityPage.Location = new System.Drawing.Point(4, 22);
+            this.m_gravityPage.Name = "m_gravityPage";
+            this.m_gravityPage.Size = new System.Drawing.Size(936, 236);
+            this.m_gravityPage.TabIndex = 12;
+            this.m_gravityPage.Text = "Gravity";
+            this.m_gravityPage.ToolTipText = "GravityModel/GravityCircle/NormalGravity";
+            this.m_gravityPage.UseVisualStyleBackColor = true;
+            //
+            // m_magneticPage
+            //
+            this.m_magneticPage.Location = new System.Drawing.Point(4, 22);
+            this.m_magneticPage.Name = "m_magneticPage";
+            this.m_magneticPage.Size = new System.Drawing.Size(936, 236);
+            this.m_magneticPage.TabIndex = 13;
+            this.m_magneticPage.Text = "Magnetic";
+            this.m_magneticPage.ToolTipText = "MagneticModel/MagneticCircle";
+            this.m_magneticPage.UseVisualStyleBackColor = true;
+            //
+            // m_polyPage
+            //
+            this.m_polyPage.Location = new System.Drawing.Point(4, 22);
+            this.m_polyPage.Name = "m_polyPage";
+            this.m_polyPage.Size = new System.Drawing.Size(936, 236);
+            this.m_polyPage.TabIndex = 14;
+            this.m_polyPage.Text = "PolygonArea";
+            this.m_polyPage.UseVisualStyleBackColor = true;
+            //
+            // m_accumPage
+            //
+            this.m_accumPage.Location = new System.Drawing.Point(4, 22);
+            this.m_accumPage.Name = "m_accumPage";
+            this.m_accumPage.Size = new System.Drawing.Size(936, 236);
+            this.m_accumPage.TabIndex = 15;
+            this.m_accumPage.Text = "Accumulator";
+            this.m_accumPage.UseVisualStyleBackColor = true;
+            //
+            // Form1
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(944, 262);
+            this.Controls.Add(this.m_tabControl);
+            this.Name = "Form1";
+            this.Text = "Projections";
+            this.m_tabControl.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.TabControl m_tabControl;
+        private System.Windows.Forms.TabPage m_geodesicTabPage;
+        private System.Windows.Forms.TabPage m_geocentricTabPage;
+        private System.Windows.Forms.TabPage m_localCartesianPage;
+        private System.Windows.Forms.TabPage m_albersPage;
+        private System.Windows.Forms.TabPage m_typeIIProjections;
+        private System.Windows.Forms.TabPage m_polarStereoPage;
+        private System.Windows.Forms.TabPage m_sphericalPage;
+        private System.Windows.Forms.TabPage m_ellipticPage;
+        private System.Windows.Forms.TabPage m_ellipsoidPage;
+        private System.Windows.Forms.TabPage m_miscPage;
+        private System.Windows.Forms.TabPage m_geoidPage;
+        private System.Windows.Forms.TabPage m_typeIIIProjPage;
+        private System.Windows.Forms.TabPage m_gravityPage;
+        private System.Windows.Forms.TabPage m_magneticPage;
+        private System.Windows.Forms.TabPage m_polyPage;
+        private System.Windows.Forms.TabPage m_accumPage;
+
+    }
+}
+
diff --git a/dotnet/Projections/Form1.cs b/dotnet/Projections/Form1.cs
new file mode 100644
index 0000000..d93f46e
--- /dev/null
+++ b/dotnet/Projections/Form1.cs
@@ -0,0 +1,49 @@
+/**
+ * \file NETGeographicLib\Form1.cs
+ * \brief Main Form for C# example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class Form1 : Form
+    {
+        public Form1()
+        {
+            InitializeComponent();
+            Text = "NETGeographicLib Demo - Version " + VersionInfo.GetString();
+
+            // set up the tab control
+            m_geodesicTabPage.Controls.Add(new GeodesicPanel());
+            m_geocentricTabPage.Controls.Add(new GeocentricPanel());
+            m_localCartesianPage.Controls.Add(new LocalCartesianPanel());
+            m_albersPage.Controls.Add(new AlbersPanel());
+            m_typeIIProjections.Controls.Add(new ProjectionsPanel());
+            m_typeIIIProjPage.Controls.Add(new TypeIIIProjPanel());
+            m_polarStereoPage.Controls.Add(new PolarStereoPanel());
+            m_sphericalPage.Controls.Add(new SphericalHarmonicsPanel());
+            m_ellipticPage.Controls.Add(new EllipticPanel());
+            m_ellipsoidPage.Controls.Add(new EllipsoidPanel());
+            m_miscPage.Controls.Add(new MiscPanel());
+            m_geoidPage.Controls.Add(new GeoidPanel());
+            m_gravityPage.Controls.Add(new GravityPanel());
+            m_magneticPage.Controls.Add(new MagneticPanel());
+            m_polyPage.Controls.Add(new PolyPanel());
+            m_accumPage.Controls.Add(new AccumPanel());
+        }
+    }
+}
diff --git a/dotnet/Projections/Form1.resx b/dotnet/Projections/Form1.resx
new file mode 100644
index 0000000..ed0aef9
--- /dev/null
+++ b/dotnet/Projections/Form1.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
diff --git a/dotnet/Projections/GeocentricPanel.Designer.cs b/dotnet/Projections/GeocentricPanel.Designer.cs
new file mode 100644
index 0000000..fcf2d02
--- /dev/null
+++ b/dotnet/Projections/GeocentricPanel.Designer.cs
@@ -0,0 +1,426 @@
+namespace Projections
+{
+    partial class GeocentricPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.m_setButton = new System.Windows.Forms.Button();
+            this.m_majorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.m_flatteningTextBox = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.m_toolTips = new System.Windows.Forms.ToolTip(this.components);
+            this.label3 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_altitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_XTextBox = new System.Windows.Forms.TextBox();
+            this.m_YTextBox = new System.Windows.Forms.TextBox();
+            this.m_ZTextBox = new System.Windows.Forms.TextBox();
+            this.label9 = new System.Windows.Forms.Label();
+            this.m_functionComboBox = new System.Windows.Forms.ComboBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.m_textBox00 = new System.Windows.Forms.TextBox();
+            this.m_textBox01 = new System.Windows.Forms.TextBox();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.m_textBox02 = new System.Windows.Forms.TextBox();
+            this.m_textBox12 = new System.Windows.Forms.TextBox();
+            this.m_textBox10 = new System.Windows.Forms.TextBox();
+            this.m_textBox11 = new System.Windows.Forms.TextBox();
+            this.m_textBox22 = new System.Windows.Forms.TextBox();
+            this.m_textBox20 = new System.Windows.Forms.TextBox();
+            this.m_textBox21 = new System.Windows.Forms.TextBox();
+            this.groupBox1.SuspendLayout();
+            this.groupBox2.SuspendLayout();
+            this.SuspendLayout();
+            //
+            // m_setButton
+            //
+            this.m_setButton.Location = new System.Drawing.Point(12, 107);
+            this.m_setButton.Name = "m_setButton";
+            this.m_setButton.Size = new System.Drawing.Size(75, 23);
+            this.m_setButton.TabIndex = 4;
+            this.m_setButton.Text = "Set";
+            this.m_toolTips.SetToolTip(this.m_setButton, "Set ellipsoid parameters");
+            this.m_setButton.UseVisualStyleBackColor = true;
+            this.m_setButton.Click += new System.EventHandler(this.OnSetParameters);
+            //
+            // m_majorRadiusTextBox
+            //
+            this.m_majorRadiusTextBox.Location = new System.Drawing.Point(12, 42);
+            this.m_majorRadiusTextBox.Name = "m_majorRadiusTextBox";
+            this.m_majorRadiusTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_majorRadiusTextBox.TabIndex = 2;
+            //
+            // groupBox1
+            //
+            this.groupBox1.Controls.Add(this.m_setButton);
+            this.groupBox1.Controls.Add(this.m_flatteningTextBox);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.m_majorRadiusTextBox);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Location = new System.Drawing.Point(7, 7);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(146, 140);
+            this.groupBox1.TabIndex = 5;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Ellipsoid Parameters";
+            //
+            // m_flatteningTextBox
+            //
+            this.m_flatteningTextBox.Location = new System.Drawing.Point(12, 83);
+            this.m_flatteningTextBox.Name = "m_flatteningTextBox";
+            this.m_flatteningTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_flatteningTextBox.TabIndex = 3;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 25);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(109, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Major Radius (meters)";
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(12, 66);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Flattening";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(166, 11);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(95, 13);
+            this.label3.TabIndex = 6;
+            this.label3.Text = "Latitude ( degrees)";
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(166, 38);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(101, 13);
+            this.label4.TabIndex = 7;
+            this.label4.Text = "Longitude (degrees)";
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(166, 65);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(82, 13);
+            this.label5.TabIndex = 8;
+            this.label5.Text = "Altitude (meters)";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(166, 92);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(54, 13);
+            this.label6.TabIndex = 9;
+            this.label6.Text = "X (meters)";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(166, 119);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(54, 13);
+            this.label7.TabIndex = 10;
+            this.label7.Text = "Y (meters)";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(166, 146);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(54, 13);
+            this.label8.TabIndex = 11;
+            this.label8.Text = "Z (meters)";
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(273, 7);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_latitudeTextBox.TabIndex = 12;
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(273, 34);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_longitudeTextBox.TabIndex = 13;
+            //
+            // m_altitudeTextBox
+            //
+            this.m_altitudeTextBox.Location = new System.Drawing.Point(273, 61);
+            this.m_altitudeTextBox.Name = "m_altitudeTextBox";
+            this.m_altitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_altitudeTextBox.TabIndex = 14;
+            //
+            // m_XTextBox
+            //
+            this.m_XTextBox.Location = new System.Drawing.Point(273, 88);
+            this.m_XTextBox.Name = "m_XTextBox";
+            this.m_XTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_XTextBox.TabIndex = 15;
+            //
+            // m_YTextBox
+            //
+            this.m_YTextBox.Location = new System.Drawing.Point(273, 115);
+            this.m_YTextBox.Name = "m_YTextBox";
+            this.m_YTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_YTextBox.TabIndex = 16;
+            //
+            // m_ZTextBox
+            //
+            this.m_ZTextBox.Location = new System.Drawing.Point(273, 142);
+            this.m_ZTextBox.Name = "m_ZTextBox";
+            this.m_ZTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_ZTextBox.TabIndex = 17;
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(169, 175);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(48, 13);
+            this.label9.TabIndex = 18;
+            this.label9.Text = "Function";
+            //
+            // m_functionComboBox
+            //
+            this.m_functionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_functionComboBox.FormattingEnabled = true;
+            this.m_functionComboBox.Items.AddRange(new object[] {
+            "Forward",
+            "Reverse"});
+            this.m_functionComboBox.Location = new System.Drawing.Point(273, 171);
+            this.m_functionComboBox.Name = "m_functionComboBox";
+            this.m_functionComboBox.Size = new System.Drawing.Size(100, 21);
+            this.m_functionComboBox.TabIndex = 19;
+            this.m_toolTips.SetToolTip(this.m_functionComboBox, "Forward/Reverse");
+            this.m_functionComboBox.SelectedIndexChanged += new System.EventHandler(this.OnFunctionChanged);
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(386, 169);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 20;
+            this.button1.Text = "Convert";
+            this.m_toolTips.SetToolTip(this.button1, "Converts the coordinates using the selected Function");
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnConvert);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(7, 170);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 21;
+            this.button2.Text = "Validate";
+            this.m_toolTips.SetToolTip(this.button2, "Tests Geocentric interfaces");
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnValidate);
+            //
+            // m_textBox00
+            //
+            this.m_textBox00.Location = new System.Drawing.Point(6, 25);
+            this.m_textBox00.Name = "m_textBox00";
+            this.m_textBox00.ReadOnly = true;
+            this.m_textBox00.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox00.TabIndex = 22;
+            //
+            // m_textBox01
+            //
+            this.m_textBox01.Location = new System.Drawing.Point(112, 25);
+            this.m_textBox01.Name = "m_textBox01";
+            this.m_textBox01.ReadOnly = true;
+            this.m_textBox01.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox01.TabIndex = 23;
+            //
+            // groupBox2
+            //
+            this.groupBox2.Controls.Add(this.m_textBox22);
+            this.groupBox2.Controls.Add(this.m_textBox20);
+            this.groupBox2.Controls.Add(this.m_textBox21);
+            this.groupBox2.Controls.Add(this.m_textBox12);
+            this.groupBox2.Controls.Add(this.m_textBox10);
+            this.groupBox2.Controls.Add(this.m_textBox11);
+            this.groupBox2.Controls.Add(this.m_textBox02);
+            this.groupBox2.Controls.Add(this.m_textBox00);
+            this.groupBox2.Controls.Add(this.m_textBox01);
+            this.groupBox2.Location = new System.Drawing.Point(380, 11);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.Size = new System.Drawing.Size(325, 99);
+            this.groupBox2.TabIndex = 24;
+            this.groupBox2.TabStop = false;
+            this.groupBox2.Text = "Rotation Matrix - ENU to ECEF";
+            //
+            // m_textBox02
+            //
+            this.m_textBox02.Location = new System.Drawing.Point(218, 25);
+            this.m_textBox02.Name = "m_textBox02";
+            this.m_textBox02.ReadOnly = true;
+            this.m_textBox02.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox02.TabIndex = 24;
+            //
+            // m_textBox12
+            //
+            this.m_textBox12.Location = new System.Drawing.Point(218, 50);
+            this.m_textBox12.Name = "m_textBox12";
+            this.m_textBox12.ReadOnly = true;
+            this.m_textBox12.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox12.TabIndex = 27;
+            //
+            // m_textBox10
+            //
+            this.m_textBox10.Location = new System.Drawing.Point(6, 50);
+            this.m_textBox10.Name = "m_textBox10";
+            this.m_textBox10.ReadOnly = true;
+            this.m_textBox10.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox10.TabIndex = 25;
+            //
+            // m_textBox11
+            //
+            this.m_textBox11.Location = new System.Drawing.Point(112, 50);
+            this.m_textBox11.Name = "m_textBox11";
+            this.m_textBox11.ReadOnly = true;
+            this.m_textBox11.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox11.TabIndex = 26;
+            //
+            // m_textBox22
+            //
+            this.m_textBox22.Location = new System.Drawing.Point(218, 74);
+            this.m_textBox22.Name = "m_textBox22";
+            this.m_textBox22.ReadOnly = true;
+            this.m_textBox22.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox22.TabIndex = 30;
+            //
+            // m_textBox20
+            //
+            this.m_textBox20.Location = new System.Drawing.Point(6, 74);
+            this.m_textBox20.Name = "m_textBox20";
+            this.m_textBox20.ReadOnly = true;
+            this.m_textBox20.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox20.TabIndex = 28;
+            //
+            // m_textBox21
+            //
+            this.m_textBox21.Location = new System.Drawing.Point(112, 74);
+            this.m_textBox21.Name = "m_textBox21";
+            this.m_textBox21.ReadOnly = true;
+            this.m_textBox21.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox21.TabIndex = 29;
+            //
+            // GeocentricPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.groupBox2);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.m_functionComboBox);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.m_ZTextBox);
+            this.Controls.Add(this.m_YTextBox);
+            this.Controls.Add(this.m_XTextBox);
+            this.Controls.Add(this.m_altitudeTextBox);
+            this.Controls.Add(this.m_longitudeTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "GeocentricPanel";
+            this.Size = new System.Drawing.Size(771, 231);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox2.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button m_setButton;
+        private System.Windows.Forms.ToolTip m_toolTips;
+        private System.Windows.Forms.TextBox m_majorRadiusTextBox;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.TextBox m_flatteningTextBox;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.TextBox m_altitudeTextBox;
+        private System.Windows.Forms.TextBox m_XTextBox;
+        private System.Windows.Forms.TextBox m_YTextBox;
+        private System.Windows.Forms.TextBox m_ZTextBox;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.ComboBox m_functionComboBox;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.TextBox m_textBox00;
+        private System.Windows.Forms.TextBox m_textBox01;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.TextBox m_textBox22;
+        private System.Windows.Forms.TextBox m_textBox20;
+        private System.Windows.Forms.TextBox m_textBox21;
+        private System.Windows.Forms.TextBox m_textBox12;
+        private System.Windows.Forms.TextBox m_textBox10;
+        private System.Windows.Forms.TextBox m_textBox11;
+        private System.Windows.Forms.TextBox m_textBox02;
+    }
+}
diff --git a/dotnet/Projections/GeocentricPanel.cs b/dotnet/Projections/GeocentricPanel.cs
new file mode 100644
index 0000000..a3231b3
--- /dev/null
+++ b/dotnet/Projections/GeocentricPanel.cs
@@ -0,0 +1,150 @@
+/**
+ * \file NETGeographicLib\GeocentricPanel.cs
+ * \brief NETGeographicLib.Geocentric example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class GeocentricPanel : UserControl
+    {
+        enum Functions
+        {
+            Forward,
+            Inverse
+        };
+        Functions m_function = Functions.Forward;
+        Geocentric m_geocentric = null;
+
+        public GeocentricPanel()
+        {
+            InitializeComponent();
+
+            try
+            {
+                m_geocentric = new Geocentric();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            m_majorRadiusTextBox.Text = m_geocentric.MajorRadius.ToString();
+            m_flatteningTextBox.Text = m_geocentric.Flattening.ToString();
+            m_functionComboBox.SelectedIndex = (int)m_function;
+        }
+
+        private void OnSetParameters(object sender, EventArgs e)
+        {
+            try
+            {
+                double a = Double.Parse( m_majorRadiusTextBox.Text );
+                double f = Double.Parse(m_flatteningTextBox.Text);
+                m_geocentric = new Geocentric(a, f);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Data entry error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+        }
+
+        private void OnFunctionChanged(object sender, EventArgs e)
+        {
+            m_function = (Functions)m_functionComboBox.SelectedIndex;
+            switch (m_function)
+            {
+                case Functions.Forward:
+                    m_latitudeTextBox.ReadOnly = m_longitudeTextBox.ReadOnly = m_altitudeTextBox.ReadOnly = false;
+                    m_XTextBox.ReadOnly = m_YTextBox.ReadOnly = m_ZTextBox.ReadOnly = true;
+                    break;
+                case Functions.Inverse:
+                    m_latitudeTextBox.ReadOnly = m_longitudeTextBox.ReadOnly = m_altitudeTextBox.ReadOnly = true;
+                    m_XTextBox.ReadOnly = m_YTextBox.ReadOnly = m_ZTextBox.ReadOnly = false;
+                    break;
+            }
+        }
+
+        private void OnConvert(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat, lon, alt, x, y, z;
+                double[,] rot = null;
+                switch (m_function)
+                {
+                    case Functions.Forward:
+                        lat = Double.Parse(m_latitudeTextBox.Text);
+                        lon = Double.Parse(m_longitudeTextBox.Text);
+                        alt = Double.Parse(m_altitudeTextBox.Text);
+                        m_geocentric.Forward(lat, lon, alt, out x, out y, out z, out rot);
+                        m_XTextBox.Text = x.ToString();
+                        m_YTextBox.Text = y.ToString();
+                        m_ZTextBox.Text = z.ToString();
+                        break;
+                    case Functions.Inverse:
+                        x = Double.Parse(m_XTextBox.Text);
+                        y = Double.Parse(m_YTextBox.Text);
+                        z = Double.Parse(m_ZTextBox.Text);
+                        m_geocentric.Reverse(x, y, z, out lat, out lon, out alt, out rot);
+                        m_latitudeTextBox.Text = lat.ToString();
+                        m_longitudeTextBox.Text = lon.ToString();
+                        m_altitudeTextBox.Text = alt.ToString();
+                        break;
+                }
+                m_textBox00.Text = rot[0, 0].ToString();
+                m_textBox01.Text = rot[0, 1].ToString();
+                m_textBox02.Text = rot[0, 2].ToString();
+                m_textBox10.Text = rot[1, 0].ToString();
+                m_textBox11.Text = rot[1, 1].ToString();
+                m_textBox12.Text = rot[1, 2].ToString();
+                m_textBox20.Text = rot[2, 0].ToString();
+                m_textBox21.Text = rot[2, 1].ToString();
+                m_textBox22.Text = rot[2, 2].ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                Geocentric g = new Geocentric();
+                string test = g.ToString();
+                g = new Geocentric(g.MajorRadius, g.Flattening);
+                double x, y, z, lat, lon, alt, tx, ty, tz;
+                double[,] rot;
+                g.Forward(32.0, -86.0, 45.0, out x, out y, out z, out rot);
+                g.Forward(32.0, -86.0, 45.0, out tx, out ty, out tz);
+                if (x != tx || y != ty || z != tz)
+                    throw new Exception("Error in Forward");
+                g.Reverse(x, y, z, out lat, out lon, out alt, out rot);
+                g.Reverse(x, y, z, out tx, out ty, out tz);
+                if ( lat != tx || lon != ty || alt != tz )
+                    throw new Exception("Error in Reverse");
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error detected", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+            MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+    }
+}
diff --git a/dotnet/Projections/GeocentricPanel.resx b/dotnet/Projections/GeocentricPanel.resx
new file mode 100644
index 0000000..a34b31b
--- /dev/null
+++ b/dotnet/Projections/GeocentricPanel.resx
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="m_toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/GeodesicPanel.Designer.cs b/dotnet/Projections/GeodesicPanel.Designer.cs
new file mode 100644
index 0000000..dfbd89d
--- /dev/null
+++ b/dotnet/Projections/GeodesicPanel.Designer.cs
@@ -0,0 +1,484 @@
+namespace Projections
+{
+    partial class GeodesicPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.m_majorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.m_flatteningTextBox = new System.Windows.Forms.TextBox();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.m_setButton = new System.Windows.Forms.Button();
+            this.button1 = new System.Windows.Forms.Button();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.m_distanceRadioButton = new System.Windows.Forms.RadioButton();
+            this.m_arcLengthRadioButton = new System.Windows.Forms.RadioButton();
+            this.m_originLatitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_originLongitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_originAzimuthTextBox = new System.Windows.Forms.TextBox();
+            this.m_distanceTextBox = new System.Windows.Forms.TextBox();
+            this.m_ArcLengthTextBox = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.m12Label = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.m_finalLatitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_finalLongitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_finalAzimuthTextBox = new System.Windows.Forms.TextBox();
+            this.m_reducedLengthTextBox = new System.Windows.Forms.TextBox();
+            this.m_M12TextBox = new System.Windows.Forms.TextBox();
+            this.m_M21TextBox = new System.Windows.Forms.TextBox();
+            this.m_S12TextBox = new System.Windows.Forms.TextBox();
+            this.m_functionComboBox = new System.Windows.Forms.ComboBox();
+            this.FunctionLabel = new System.Windows.Forms.Label();
+            this.m_classComboBox = new System.Windows.Forms.ComboBox();
+            this.label12 = new System.Windows.Forms.Label();
+            this.m_tooltips = new System.Windows.Forms.ToolTip(this.components);
+            this.m_validateButton = new System.Windows.Forms.Button();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(14, 25);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(109, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Major Radius (meters)";
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(14, 51);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Flattening";
+            //
+            // m_majorRadiusTextBox
+            //
+            this.m_majorRadiusTextBox.Location = new System.Drawing.Point(129, 21);
+            this.m_majorRadiusTextBox.Name = "m_majorRadiusTextBox";
+            this.m_majorRadiusTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_majorRadiusTextBox.TabIndex = 2;
+            //
+            // m_flatteningTextBox
+            //
+            this.m_flatteningTextBox.Location = new System.Drawing.Point(129, 47);
+            this.m_flatteningTextBox.Name = "m_flatteningTextBox";
+            this.m_flatteningTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_flatteningTextBox.TabIndex = 3;
+            //
+            // groupBox1
+            //
+            this.groupBox1.Controls.Add(this.m_setButton);
+            this.groupBox1.Controls.Add(this.m_flatteningTextBox);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.m_majorRadiusTextBox);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Location = new System.Drawing.Point(4, 4);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(267, 107);
+            this.groupBox1.TabIndex = 4;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Ellipsoid Parameters";
+            //
+            // m_setButton
+            //
+            this.m_setButton.Location = new System.Drawing.Point(176, 74);
+            this.m_setButton.Name = "m_setButton";
+            this.m_setButton.Size = new System.Drawing.Size(75, 23);
+            this.m_setButton.TabIndex = 4;
+            this.m_setButton.Text = "Set";
+            this.m_setButton.UseVisualStyleBackColor = true;
+            this.m_setButton.Click += new System.EventHandler(this.OnSet);
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(183, 143);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 5;
+            this.button1.Text = "Execute";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Enter += new System.EventHandler(this.OnForward);
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(279, 14);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(122, 13);
+            this.label3.TabIndex = 6;
+            this.label3.Text = "Origin Latitude (degrees)";
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(279, 41);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(131, 13);
+            this.label4.TabIndex = 7;
+            this.label4.Text = "Origin Longitude (degrees)";
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(279, 68);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(121, 13);
+            this.label5.TabIndex = 8;
+            this.label5.Text = "Origin Azimuth (degrees)";
+            //
+            // m_distanceRadioButton
+            //
+            this.m_distanceRadioButton.AutoSize = true;
+            this.m_distanceRadioButton.Checked = true;
+            this.m_distanceRadioButton.Location = new System.Drawing.Point(279, 93);
+            this.m_distanceRadioButton.Name = "m_distanceRadioButton";
+            this.m_distanceRadioButton.Size = new System.Drawing.Size(107, 17);
+            this.m_distanceRadioButton.TabIndex = 9;
+            this.m_distanceRadioButton.TabStop = true;
+            this.m_distanceRadioButton.Text = "Distance (meters)";
+            this.m_distanceRadioButton.UseVisualStyleBackColor = true;
+            this.m_distanceRadioButton.Click += new System.EventHandler(this.OnDistance);
+            //
+            // m_arcLengthRadioButton
+            //
+            this.m_arcLengthRadioButton.AutoSize = true;
+            this.m_arcLengthRadioButton.Location = new System.Drawing.Point(279, 120);
+            this.m_arcLengthRadioButton.Name = "m_arcLengthRadioButton";
+            this.m_arcLengthRadioButton.Size = new System.Drawing.Size(124, 17);
+            this.m_arcLengthRadioButton.TabIndex = 10;
+            this.m_arcLengthRadioButton.Text = "Arc Length (degrees)";
+            this.m_arcLengthRadioButton.UseVisualStyleBackColor = true;
+            this.m_arcLengthRadioButton.Click += new System.EventHandler(this.OnArcLength);
+            //
+            // m_originLatitudeTextBox
+            //
+            this.m_originLatitudeTextBox.Location = new System.Drawing.Point(416, 10);
+            this.m_originLatitudeTextBox.Name = "m_originLatitudeTextBox";
+            this.m_originLatitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_originLatitudeTextBox.TabIndex = 11;
+            //
+            // m_originLongitudeTextBox
+            //
+            this.m_originLongitudeTextBox.Location = new System.Drawing.Point(416, 37);
+            this.m_originLongitudeTextBox.Name = "m_originLongitudeTextBox";
+            this.m_originLongitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_originLongitudeTextBox.TabIndex = 12;
+            //
+            // m_originAzimuthTextBox
+            //
+            this.m_originAzimuthTextBox.Location = new System.Drawing.Point(416, 64);
+            this.m_originAzimuthTextBox.Name = "m_originAzimuthTextBox";
+            this.m_originAzimuthTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_originAzimuthTextBox.TabIndex = 13;
+            //
+            // m_distanceTextBox
+            //
+            this.m_distanceTextBox.Location = new System.Drawing.Point(416, 91);
+            this.m_distanceTextBox.Name = "m_distanceTextBox";
+            this.m_distanceTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_distanceTextBox.TabIndex = 14;
+            //
+            // m_ArcLengthTextBox
+            //
+            this.m_ArcLengthTextBox.Location = new System.Drawing.Point(416, 118);
+            this.m_ArcLengthTextBox.Name = "m_ArcLengthTextBox";
+            this.m_ArcLengthTextBox.ReadOnly = true;
+            this.m_ArcLengthTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_ArcLengthTextBox.TabIndex = 15;
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(525, 14);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(117, 13);
+            this.label6.TabIndex = 16;
+            this.label6.Text = "Final Latitude (degrees)";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(525, 41);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(126, 13);
+            this.label7.TabIndex = 17;
+            this.label7.Text = "Final Longitude (degrees)";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(525, 68);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(116, 13);
+            this.label8.TabIndex = 18;
+            this.label8.Text = "Final Azimuth (degrees)";
+            //
+            // m12Label
+            //
+            this.m12Label.AutoSize = true;
+            this.m12Label.Location = new System.Drawing.Point(525, 95);
+            this.m12Label.Name = "m12Label";
+            this.m12Label.Size = new System.Drawing.Size(127, 13);
+            this.m12Label.TabIndex = 19;
+            this.m12Label.Text = "Reduced Length (meters)";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(525, 122);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(28, 13);
+            this.label9.TabIndex = 20;
+            this.label9.Text = "M12";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(525, 149);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(28, 13);
+            this.label10.TabIndex = 21;
+            this.label10.Text = "M21";
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(525, 176);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(26, 13);
+            this.label11.TabIndex = 22;
+            this.label11.Text = "S12";
+            //
+            // m_finalLatitudeTextBox
+            //
+            this.m_finalLatitudeTextBox.Location = new System.Drawing.Point(660, 10);
+            this.m_finalLatitudeTextBox.Name = "m_finalLatitudeTextBox";
+            this.m_finalLatitudeTextBox.ReadOnly = true;
+            this.m_finalLatitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_finalLatitudeTextBox.TabIndex = 23;
+            //
+            // m_finalLongitudeTextBox
+            //
+            this.m_finalLongitudeTextBox.Location = new System.Drawing.Point(660, 37);
+            this.m_finalLongitudeTextBox.Name = "m_finalLongitudeTextBox";
+            this.m_finalLongitudeTextBox.ReadOnly = true;
+            this.m_finalLongitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_finalLongitudeTextBox.TabIndex = 24;
+            //
+            // m_finalAzimuthTextBox
+            //
+            this.m_finalAzimuthTextBox.Location = new System.Drawing.Point(660, 64);
+            this.m_finalAzimuthTextBox.Name = "m_finalAzimuthTextBox";
+            this.m_finalAzimuthTextBox.ReadOnly = true;
+            this.m_finalAzimuthTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_finalAzimuthTextBox.TabIndex = 25;
+            //
+            // m_reducedLengthTextBox
+            //
+            this.m_reducedLengthTextBox.Location = new System.Drawing.Point(660, 91);
+            this.m_reducedLengthTextBox.Name = "m_reducedLengthTextBox";
+            this.m_reducedLengthTextBox.ReadOnly = true;
+            this.m_reducedLengthTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_reducedLengthTextBox.TabIndex = 26;
+            //
+            // m_M12TextBox
+            //
+            this.m_M12TextBox.Location = new System.Drawing.Point(660, 118);
+            this.m_M12TextBox.Name = "m_M12TextBox";
+            this.m_M12TextBox.ReadOnly = true;
+            this.m_M12TextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_M12TextBox.TabIndex = 27;
+            //
+            // m_M21TextBox
+            //
+            this.m_M21TextBox.Location = new System.Drawing.Point(660, 145);
+            this.m_M21TextBox.Name = "m_M21TextBox";
+            this.m_M21TextBox.ReadOnly = true;
+            this.m_M21TextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_M21TextBox.TabIndex = 28;
+            //
+            // m_S12TextBox
+            //
+            this.m_S12TextBox.Location = new System.Drawing.Point(660, 172);
+            this.m_S12TextBox.Name = "m_S12TextBox";
+            this.m_S12TextBox.ReadOnly = true;
+            this.m_S12TextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_S12TextBox.TabIndex = 29;
+            //
+            // m_functionComboBox
+            //
+            this.m_functionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_functionComboBox.FormattingEnabled = true;
+            this.m_functionComboBox.Items.AddRange(new object[] {
+            "Direct",
+            "Inverse"});
+            this.m_functionComboBox.Location = new System.Drawing.Point(416, 145);
+            this.m_functionComboBox.Name = "m_functionComboBox";
+            this.m_functionComboBox.Size = new System.Drawing.Size(100, 21);
+            this.m_functionComboBox.TabIndex = 30;
+            this.m_functionComboBox.SelectedIndexChanged += new System.EventHandler(this.OnFunction);
+            //
+            // FunctionLabel
+            //
+            this.FunctionLabel.AutoSize = true;
+            this.FunctionLabel.Location = new System.Drawing.Point(282, 149);
+            this.FunctionLabel.Name = "FunctionLabel";
+            this.FunctionLabel.Size = new System.Drawing.Size(48, 13);
+            this.FunctionLabel.TabIndex = 31;
+            this.FunctionLabel.Text = "Function";
+            //
+            // m_classComboBox
+            //
+            this.m_classComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_classComboBox.FormattingEnabled = true;
+            this.m_classComboBox.Items.AddRange(new object[] {
+            "Geodesic",
+            "GeodesicExact",
+            "GeodesicLine",
+            "GeodesicLineExact"});
+            this.m_classComboBox.Location = new System.Drawing.Point(395, 172);
+            this.m_classComboBox.Name = "m_classComboBox";
+            this.m_classComboBox.Size = new System.Drawing.Size(121, 21);
+            this.m_classComboBox.TabIndex = 32;
+            this.m_classComboBox.SelectedIndexChanged += new System.EventHandler(this.OnClassChanged);
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(282, 176);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(32, 13);
+            this.label12.TabIndex = 33;
+            this.label12.Text = "Class";
+            //
+            // m_validateButton
+            //
+            this.m_validateButton.Location = new System.Drawing.Point(21, 143);
+            this.m_validateButton.Name = "m_validateButton";
+            this.m_validateButton.Size = new System.Drawing.Size(75, 23);
+            this.m_validateButton.TabIndex = 34;
+            this.m_validateButton.Text = "Validate";
+            this.m_validateButton.UseVisualStyleBackColor = true;
+            this.m_validateButton.Click += new System.EventHandler(this.OnValidate);
+            //
+            // GeodesicPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.m_validateButton);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.m_classComboBox);
+            this.Controls.Add(this.FunctionLabel);
+            this.Controls.Add(this.m_functionComboBox);
+            this.Controls.Add(this.m_S12TextBox);
+            this.Controls.Add(this.m_M21TextBox);
+            this.Controls.Add(this.m_M12TextBox);
+            this.Controls.Add(this.m_reducedLengthTextBox);
+            this.Controls.Add(this.m_finalAzimuthTextBox);
+            this.Controls.Add(this.m_finalLongitudeTextBox);
+            this.Controls.Add(this.m_finalLatitudeTextBox);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.m12Label);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.m_ArcLengthTextBox);
+            this.Controls.Add(this.m_distanceTextBox);
+            this.Controls.Add(this.m_originAzimuthTextBox);
+            this.Controls.Add(this.m_originLongitudeTextBox);
+            this.Controls.Add(this.m_originLatitudeTextBox);
+            this.Controls.Add(this.m_arcLengthRadioButton);
+            this.Controls.Add(this.m_distanceRadioButton);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "GeodesicPanel";
+            this.Size = new System.Drawing.Size(794, 220);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox m_majorRadiusTextBox;
+        private System.Windows.Forms.TextBox m_flatteningTextBox;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Button m_setButton;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.RadioButton m_distanceRadioButton;
+        private System.Windows.Forms.RadioButton m_arcLengthRadioButton;
+        private System.Windows.Forms.TextBox m_originLatitudeTextBox;
+        private System.Windows.Forms.TextBox m_originLongitudeTextBox;
+        private System.Windows.Forms.TextBox m_originAzimuthTextBox;
+        private System.Windows.Forms.TextBox m_distanceTextBox;
+        private System.Windows.Forms.TextBox m_ArcLengthTextBox;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label m12Label;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.TextBox m_finalLatitudeTextBox;
+        private System.Windows.Forms.TextBox m_finalLongitudeTextBox;
+        private System.Windows.Forms.TextBox m_finalAzimuthTextBox;
+        private System.Windows.Forms.TextBox m_reducedLengthTextBox;
+        private System.Windows.Forms.TextBox m_M12TextBox;
+        private System.Windows.Forms.TextBox m_M21TextBox;
+        private System.Windows.Forms.TextBox m_S12TextBox;
+        private System.Windows.Forms.ComboBox m_functionComboBox;
+        private System.Windows.Forms.Label FunctionLabel;
+        private System.Windows.Forms.ComboBox m_classComboBox;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.ToolTip m_tooltips;
+        private System.Windows.Forms.Button m_validateButton;
+    }
+}
diff --git a/dotnet/Projections/GeodesicPanel.cs b/dotnet/Projections/GeodesicPanel.cs
new file mode 100644
index 0000000..24e78ee
--- /dev/null
+++ b/dotnet/Projections/GeodesicPanel.cs
@@ -0,0 +1,633 @@
+/**
+ * \file NETGeographicLib\GeodesicPanel.cs
+ * \brief NETGeographicLib.Geodesic example
+ *
+ * NETGeographicLib.Geodesic,
+ * NETGeographicLib.GeodesicLine,
+ * NETGeographicLib.GeodesicExact,
+ * NETGeographicLib.GeodesicLineExact
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class GeodesicPanel : UserControl
+    {
+        public string warning = "GeographicLib Error";
+        public string warning2 = "Data Conversion Error";
+
+        enum Function
+        {
+            Direct = 0,
+            Inverse = 1
+        };
+        Function m_function = Function.Direct;
+
+        enum Variable
+        {
+            Distance = 0,
+            ArcLength = 2
+        };
+        Variable m_variable = Variable.Distance;
+
+        enum Classes
+        {
+            GEODESIC = 0,
+            GEODESICEXACT= 1,
+            GEODESICLINE = 2,
+            GEODESICLINEEXACT = 3
+        };
+        Classes m_class = Classes.GEODESIC;
+
+        Geodesic m_geodesic = null;
+
+        public GeodesicPanel()
+        {
+            InitializeComponent();
+            m_tooltips.SetToolTip(button1, "Performs the selected function with the selected class");
+            m_tooltips.SetToolTip(m_setButton, "Sets the ellipsoid attributes");
+            m_tooltips.SetToolTip(m_validateButton, "Validates Geodesic, GeodesicExact, GeodesicLine, and GeodesicLineExact interfaces");
+            try
+            {
+                m_geodesic = new Geodesic();
+            }
+            catch (GeographicErr err)
+            {
+                MessageBox.Show(err.Message, warning, MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+
+            m_majorRadiusTextBox.Text = m_geodesic.MajorRadius.ToString();
+            m_flatteningTextBox.Text = m_geodesic.Flattening.ToString();
+            m_functionComboBox.SelectedIndex = 0;
+            m_classComboBox.SelectedIndex = 0;
+        }
+
+        // gets the major radius and flattening and creates a new Geodesic
+        private void OnSet(object sender, EventArgs e)
+        {
+            try
+            {
+                double radius = Double.Parse(m_majorRadiusTextBox.Text);
+                double flattening = Double.Parse(m_flatteningTextBox.Text);
+                m_geodesic = new Geodesic(radius, flattening);
+            }
+            catch (GeographicErr err)
+            {
+                MessageBox.Show(err.Message, warning, MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            catch (Exception err2)
+            {
+                MessageBox.Show(err2.Message, warning2, MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        // Gets the input parameters and calls the appropriate function
+        private void OnForward(object sender, EventArgs e)
+        {
+            double origLatitude = 0.0, origLongitude = 0.0, origAzimuth = 0.0,
+                distance = 0.0, finalLatitude = 0.0, finalLongitude = 0.0;
+            // get & validate inputs
+            try
+            {
+                if ( m_function == Function.Direct )
+                {
+                    distance = Double.Parse( m_variable == Variable.Distance ?
+                        m_distanceTextBox.Text : m_ArcLengthTextBox.Text );
+                    origAzimuth = Double.Parse( m_originAzimuthTextBox.Text );
+                    if ( origAzimuth < -180.0 || origAzimuth > 180.0 )
+                    {
+                        m_originAzimuthTextBox.Focus();
+                        throw new Exception( "Range Error: -180 <= initial azimuth <= 180 degrees" );
+                    }
+                }
+                else
+                {
+                    finalLatitude = Double.Parse( m_finalLatitudeTextBox.Text );
+                    if (finalLatitude < -90.0 || finalLatitude > 90.0)
+                    {
+                        m_finalLatitudeTextBox.Focus();
+                        throw new Exception("Range Error: -90 <= final latitude <= 90 degrees");
+                    }
+                    finalLongitude = Double.Parse( m_finalLongitudeTextBox.Text );
+                    if (finalLongitude < -540.0 || finalLongitude > 540.0)
+                    {
+                        m_finalLongitudeTextBox.Focus();
+                        throw new Exception("Range Error: -540 <= final longitude <= 540 degrees");
+                    }
+                }
+                origLatitude = Double.Parse( m_originLatitudeTextBox.Text );
+                if (origLatitude < -90.0 || origLatitude > 90.0)
+                {
+                    m_originLatitudeTextBox.Focus();
+                    throw new Exception("Range Error: -90 <= initial latitude <= 90 degrees");
+                }
+                origLongitude = Double.Parse(m_originLongitudeTextBox.Text);
+                if (origLongitude < -540.0 || origLongitude > 540.0)
+                {
+                    m_originLongitudeTextBox.Focus();
+                    throw new Exception("Range Error: -540 <= initial longitude <= 540 degrees");
+                }
+            }
+            catch ( Exception xcpt )
+            {
+                MessageBox.Show(xcpt.Message, warning2, MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+
+            // excute the appropriate function.
+            double finalAzimuth = 0.0, reducedLength = 0.0, M12 = 0.0, M21 = 0.0,
+                S12 = 0.0, arcDistance = 0.0;
+            int sw = (int)m_function | (int)m_variable;
+            if (sw == 3) sw = 1; // cases 1 & 3 are identical.
+            try
+            {
+                switch (m_class)
+                {
+                    case Classes.GEODESIC:
+                        switch (sw)
+                        {
+                            case 0: // function == Direct, variable == distance
+                                m_ArcLengthTextBox.Text =
+                                    m_geodesic.Direct(origLatitude, origLongitude, origAzimuth, distance,
+                                        out finalLatitude, out finalLongitude, out finalAzimuth, out reducedLength,
+                                        out M12, out M21, out S12).ToString();
+                                m_finalLatitudeTextBox.Text = finalLatitude.ToString();
+                                m_finalLongitudeTextBox.Text = finalLongitude.ToString();
+                                break;
+                            case 1: // function == Inverse, variable == distance
+                                m_ArcLengthTextBox.Text =
+                                    m_geodesic.Inverse(origLatitude, origLongitude, finalLatitude, finalLongitude,
+                                        out distance, out origAzimuth, out finalAzimuth, out reducedLength, out M12,
+                                        out M21, out S12).ToString();
+                                m_distanceTextBox.Text = distance.ToString();
+                                m_originAzimuthTextBox.Text = origAzimuth.ToString();
+                                break;
+                            case 2: // function == Direct, variable == arc length
+                                m_geodesic.ArcDirect(origLatitude, origLongitude, origAzimuth, distance,
+                                    out finalLatitude, out finalLongitude, out finalAzimuth, out arcDistance,
+                                    out reducedLength, out M12, out M21, out S12);
+                                m_distanceTextBox.Text = arcDistance.ToString();
+                                m_finalLatitudeTextBox.Text = finalLatitude.ToString();
+                                m_finalLongitudeTextBox.Text = finalLongitude.ToString();
+                                break;
+                        }
+                        m_finalAzimuthTextBox.Text = finalAzimuth.ToString();
+                        m_reducedLengthTextBox.Text = reducedLength.ToString();
+                        m_M12TextBox.Text = M12.ToString();
+                        m_M21TextBox.Text = M21.ToString();
+                        m_S12TextBox.Text = S12.ToString();
+                        break;
+                    case Classes.GEODESICEXACT:
+                        GeodesicExact ge = new GeodesicExact(m_geodesic.MajorRadius, m_geodesic.Flattening);
+                        switch (sw)
+                        {
+                            case 0: // function == Direct, variable == distance
+                                m_ArcLengthTextBox.Text =
+                                    ge.Direct(origLatitude, origLongitude, origAzimuth, distance,
+                                        out finalLatitude, out finalLongitude, out finalAzimuth, out reducedLength,
+                                        out M12, out M21, out S12).ToString();
+                                m_finalLatitudeTextBox.Text = finalLatitude.ToString();
+                                m_finalLongitudeTextBox.Text = finalLongitude.ToString();
+                                break;
+                            case 1: // function == Inverse, variable == distance
+                                m_ArcLengthTextBox.Text =
+                                    ge.Inverse(origLatitude, origLongitude, finalLatitude, finalLongitude,
+                                        out distance, out origAzimuth, out finalAzimuth, out reducedLength, out M12,
+                                        out M21, out S12).ToString();
+                                m_distanceTextBox.Text = distance.ToString();
+                                m_originAzimuthTextBox.Text = origAzimuth.ToString();
+                                break;
+                            case 2: // function == Direct, variable == arc length
+                                ge.ArcDirect(origLatitude, origLongitude, origAzimuth, distance,
+                                    out finalLatitude, out finalLongitude, out finalAzimuth, out arcDistance,
+                                    out reducedLength, out M12, out M21, out S12);
+                                m_distanceTextBox.Text = arcDistance.ToString();
+                                m_finalLatitudeTextBox.Text = finalLatitude.ToString();
+                                m_finalLongitudeTextBox.Text = finalLongitude.ToString();
+                                break;
+                        }
+                        m_finalAzimuthTextBox.Text = finalAzimuth.ToString();
+                        m_reducedLengthTextBox.Text = reducedLength.ToString();
+                        m_M12TextBox.Text = M12.ToString();
+                        m_M21TextBox.Text = M21.ToString();
+                        m_S12TextBox.Text = S12.ToString();
+                        break;
+                    case Classes.GEODESICLINE:
+                        GeodesicLine gl = new GeodesicLine(m_geodesic, origLatitude, origLongitude, origAzimuth, Mask.ALL);
+                        switch (sw)
+                        {
+                            case 0: // function == Direct, variable == distance
+                                m_ArcLengthTextBox.Text =
+                                    gl.Position(distance,
+                                        out finalLatitude, out finalLongitude, out finalAzimuth, out reducedLength,
+                                        out M12, out M21, out S12).ToString();
+                                m_finalLatitudeTextBox.Text = finalLatitude.ToString();
+                                m_finalLongitudeTextBox.Text = finalLongitude.ToString();
+                                break;
+                            case 1: // function == Inverse, variable == distance
+                                throw new Exception("GeodesicLine does not have an Inverse function");
+                            case 2: // function == Direct, variable == arc length
+                                gl.ArcPosition(distance,
+                                    out finalLatitude, out finalLongitude, out finalAzimuth, out arcDistance,
+                                    out reducedLength, out M12, out M21, out S12);
+                                m_distanceTextBox.Text = arcDistance.ToString();
+                                m_finalLatitudeTextBox.Text = finalLatitude.ToString();
+                                m_finalLongitudeTextBox.Text = finalLongitude.ToString();
+                                break;
+                        }
+                        m_finalAzimuthTextBox.Text = finalAzimuth.ToString();
+                        m_reducedLengthTextBox.Text = reducedLength.ToString();
+                        m_M12TextBox.Text = M12.ToString();
+                        m_M21TextBox.Text = M21.ToString();
+                        m_S12TextBox.Text = S12.ToString();
+                        break;
+                    case Classes.GEODESICLINEEXACT:
+                        GeodesicLineExact gle = new GeodesicLineExact(origLatitude, origLongitude, origAzimuth, Mask.ALL);
+                        switch (sw)
+                        {
+                            case 0: // function == Direct, variable == distance
+                                m_ArcLengthTextBox.Text =
+                                    gle.Position(distance,
+                                        out finalLatitude, out finalLongitude, out finalAzimuth, out reducedLength,
+                                        out M12, out M21, out S12).ToString();
+                                m_finalLatitudeTextBox.Text = finalLatitude.ToString();
+                                m_finalLongitudeTextBox.Text = finalLongitude.ToString();
+                                break;
+                            case 1: // function == Inverse, variable == distance
+                                throw new Exception("GeodesicLineExact does not have an Inverse function");
+                            case 2: // function == Direct, variable == arc length
+                                gle.ArcPosition(distance,
+                                    out finalLatitude, out finalLongitude, out finalAzimuth, out arcDistance,
+                                    out reducedLength, out M12, out M21, out S12);
+                                m_distanceTextBox.Text = arcDistance.ToString();
+                                m_finalLatitudeTextBox.Text = finalLatitude.ToString();
+                                m_finalLongitudeTextBox.Text = finalLongitude.ToString();
+                                break;
+                        }
+                        m_finalAzimuthTextBox.Text = finalAzimuth.ToString();
+                        m_reducedLengthTextBox.Text = reducedLength.ToString();
+                        m_M12TextBox.Text = M12.ToString();
+                        m_M21TextBox.Text = M21.ToString();
+                        m_S12TextBox.Text = S12.ToString();
+                        break;
+                }
+            }
+            catch (Exception err)
+            {
+                MessageBox.Show(err.Message, warning, MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+        // gui stuff
+        private void OnDistance(object sender, EventArgs e)
+        {
+            m_distanceTextBox.ReadOnly = false;
+            m_ArcLengthTextBox.ReadOnly = true;
+            m_variable = Variable.Distance;
+        }
+
+        // gui stuff
+        private void OnArcLength(object sender, EventArgs e)
+        {
+            m_distanceTextBox.ReadOnly = true;
+            m_ArcLengthTextBox.ReadOnly = false;
+            m_variable = Variable.ArcLength;
+        }
+
+        // gui stuff
+        private void OnFunction(object sender, EventArgs e)
+        {
+            m_function = (Function)m_functionComboBox.SelectedIndex;
+            switch (m_function)
+            {
+                case Function.Direct:
+                    m_distanceTextBox.ReadOnly = m_variable == Variable.ArcLength;
+                    m_ArcLengthTextBox.ReadOnly = m_variable == Variable.Distance;
+                    m_originAzimuthTextBox.ReadOnly = false;
+                    m_finalLatitudeTextBox.ReadOnly = true;
+                    m_finalLongitudeTextBox.ReadOnly = true;
+                    break;
+                case Function.Inverse:
+                    m_distanceTextBox.ReadOnly = true;
+                    m_ArcLengthTextBox.ReadOnly = true;
+                    m_originAzimuthTextBox.ReadOnly = true;
+                    m_finalLatitudeTextBox.ReadOnly = false;
+                    m_finalLongitudeTextBox.ReadOnly = false;
+                    break;
+            }
+        }
+        // gui stuff
+        private void OnClassChanged(object sender, EventArgs e)
+        {
+            m_class = (Classes)m_classComboBox.SelectedIndex;
+        }
+
+        // a simple validation function...does not change GUI elements
+        private void OnValidate(object sender, EventArgs e)
+        {
+            double finalAzimuth = 0.0, reducedLength = 0.0, M12 = 0.0, M21 = 0.0,
+                S12 = 0.0, arcDistance = 0.0, finalLatitude = 0.0, finalLongitude = 0.0,
+                distance = 0.0;
+            try
+            {
+                Geodesic g = new Geodesic();
+                g = new Geodesic(g.MajorRadius, g.Flattening);
+                arcDistance = g.Direct(32.0, -86.0, 45.0, 20000.0, out finalLatitude, out finalLongitude,
+                    out finalAzimuth, out reducedLength, out M12, out M21,
+                    out S12);
+                double flat = 0.0, flon = 0.0, faz = 0.0, frd = 0.0, fm12 = 0.0, fm21 = 0.0, fs12 = 0.0, fad = 0.0;
+                fad = g.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude)
+                    throw new Exception("Geodesic.Direct #1 failed");
+                fad = g.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon, out faz);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth)
+                    throw new Exception("Geodesic.Direct #2 failed");
+                fad = g.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon, out faz, out frd);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength)
+                    throw new Exception("Geodesic.Direct #3 failed");
+                fad = g.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon, out faz, out fm12, out fm21);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || fm12 != M12 || fm21 != M21)
+                    throw new Exception("Geodesic.Direct #4 failed");
+                fad = g.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon, out faz, out frd, out fm12, out fm21);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength || fm12 != M12 || fm21 != M21)
+                    throw new Exception("Geodesic.Direct #5 failed");
+                double outd = 0.0;
+                fad = g.GenDirect(32.0, -86.0, 45.0, false, 20000.0, Mask.ALL, out flat, out flon, out faz, out outd, out frd, out fm12, out fm21, out fs12);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength || fm12 != M12 || fm21 != M21 ||
+                    outd != 20000.0 || fs12 != S12)
+                    throw new Exception("Geodesic.GenDirect (false) failed");
+                g.ArcDirect(32.0, -86.0, 45.0, 1.0, out finalLatitude, out finalLongitude, out finalAzimuth,
+                    out arcDistance, out reducedLength, out M12, out M21, out S12);
+                g.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon);
+                if (flat != finalLatitude || flon != finalLongitude)
+                    throw new Exception("Geodesic.ArcDirect #1 failed");
+                g.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon, out faz);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth)
+                    throw new Exception("Geodesic.ArcDirect #2 failed");
+                g.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon, out faz, out fad);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    fad != arcDistance)
+                    throw new Exception("Geodesic.ArcDirect #3 failed");
+                g.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon, out faz, out fad, out frd);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    fad != arcDistance || frd != reducedLength)
+                    throw new Exception("Geodesic.ArcDirect #4 failed");
+                g.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon, out faz, out fad, out fm12, out fm21);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    fad != arcDistance || fm12 != M12 || fm21 != M21)
+                    throw new Exception("Geodesic.ArcDirect #5 failed");
+                fad = g.GenDirect(32.0, -86.0, 45.0, true, 1.0, Mask.ALL, out flat, out flon,
+                    out faz, out outd, out frd, out fm12, out fm21, out fs12);
+                if (outd != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength || fm12 != M12 || fm21 != M21 ||
+                    fs12 != S12 || fad != 1.0)
+                    throw new Exception("Geodesic.GenDirect (true) failed");
+                double initAzimuth = 0.0, iaz = 0.0;
+                arcDistance = g.Inverse(32.0, -86.0, 33.0, -87.0, out distance, out initAzimuth, out finalAzimuth,
+                    out reducedLength, out M12, out M21, out S12);
+                fad = g.Inverse(32.0, -86.0, 33.0, -87.0, out outd);
+                if (fad != arcDistance || outd != distance)
+                    throw new Exception("Geodesic.Inverse #1 failed");
+                fad = g.Inverse(32.0, -86.0, 33.0, -87.0, out iaz, out faz);
+                if (fad != arcDistance || iaz != initAzimuth || faz != finalAzimuth)
+                    throw new Exception("Geodesic.Inverse #2 failed");
+                fad = g.Inverse(32.0, -86.0, 33.0, -87.0, out outd, out iaz, out faz);
+                if (fad != arcDistance || outd != distance || faz != finalAzimuth ||
+                    outd != distance)
+                    throw new Exception("Geodesic.Inverse #3 failed");
+                fad = g.Inverse(32.0, -86.0, 33.0, -87.0, out outd, out iaz, out faz, out frd);
+                if (fad != arcDistance || outd != distance || faz != finalAzimuth ||
+                    outd != distance || frd != reducedLength)
+                    throw new Exception("Geodesic.Inverse #4 failed");
+                fad = g.Inverse(32.0, -86.0, 33.0, -87.0, out outd, out iaz, out faz, out fm12, out fm21 );
+                if (fad != arcDistance || outd != distance || faz != finalAzimuth ||
+                    outd != distance || fm12 != M12 || fm21 != M21 )
+                    throw new Exception("Geodesic.Inverse #5 failed");
+                fad = g.Inverse(32.0, -86.0, 33.0, -87.0, out outd, out iaz, out faz, out frd, out fm12, out fm21);
+                if (fad != arcDistance || outd != distance || faz != finalAzimuth ||
+                    outd != distance || fm12 != M12 || fm21 != M21 || frd != reducedLength)
+                    throw new Exception("Geodesic.Inverse #6 failed");
+                GeodesicLine gl = g.Line(32.0, -86.0, 45.0, Mask.ALL);
+                gl = new GeodesicLine(32.0, -86.0, 45.0, Mask.ALL);
+                gl = new GeodesicLine(g, 32.0, -86.0, 45.0, Mask.ALL);
+                arcDistance = gl.Position(10000.0, out finalLatitude, out finalLongitude, out finalAzimuth,
+                    out reducedLength, out M12, out M21, out S12);
+                fad = gl.Position(10000.0, out flat, out flon);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude)
+                    throw new Exception("GeodesicLine.Position #1 failed");
+                fad = gl.Position(10000.0, out flat, out flon, out faz);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth)
+                    throw new Exception("GeodesicLine.Position #2 failed");
+                fad = gl.Position(10000.0, out flat, out flon, out faz, out frd);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength)
+                    throw new Exception("GeodesicLine.Position #3 failed");
+                fad = gl.Position(10000.0, out flat, out flon, out faz, out fm12, out fm21);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || fm12 != M12 || fm21 != M21)
+                    throw new Exception("GeodesicLine.Position #4 failed");
+                fad = gl.Position(10000.0, out flat, out flon, out faz, out frd, out fm12, out fm21);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || fm12 != M12 || fm21 != M21 || frd != reducedLength )
+                    throw new Exception("GeodesicLine.Position #5 failed");
+                fad = gl.GenPosition(false, 10000.0, Mask.ALL, out flat, out flon, out faz, out outd, out frd, out fm12, out fm21, out fs12);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || outd != 10000.0 || fm12 != M12 || fm21 != M21 ||
+                    frd != reducedLength || fs12 != S12 )
+                    throw new Exception("GeodesicLine.GenPosition (false) failed");
+                gl.ArcPosition(1.0, out finalLatitude, out finalLongitude, out finalAzimuth,
+                    out distance, out reducedLength, out M12, out M21, out S12);
+                gl.ArcPosition(1.0, out flat, out flon);
+                if (flat != finalLatitude || flon != finalLongitude)
+                    throw new Exception("GeodesicLine.ArcPosition #1 failed");
+                gl.ArcPosition(1.0, out flat, out flon, out faz);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth)
+                    throw new Exception("GeodesicLine.ArcPosition #2 failed");
+                gl.ArcPosition(1.0, out flat, out flon, out faz, out outd);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    outd != distance)
+                    throw new Exception("GeodesicLine.ArcPosition #3 failed");
+                gl.ArcPosition(1.0, out flat, out flon, out faz, out outd, out frd);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    outd != distance || frd != reducedLength)
+                    throw new Exception("GeodesicLine.ArcPosition #4 failed");
+                gl.ArcPosition(1.0, out flat, out flon, out faz, out outd, out fm12, out fm21);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    outd != distance || fm12 != M12 || fm21 != M21)
+                    throw new Exception("GeodesicLine.ArcPosition #5 failed");
+                gl.ArcPosition(1.0, out flat, out flon, out faz, out outd, out frd, out fm12, out fm21);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    outd != distance || fm12 != M12 || fm21 != M21 || frd != reducedLength)
+                    throw new Exception("GeodesicLine.ArcPosition #6 failed");
+                fad = gl.GenPosition(true, 1.0, Mask.ALL, out flat, out flon, out faz, out outd, out frd, out fm12, out fm21, out fs12);
+                if (fad != 1.0 || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || outd != distance || fm12 != M12 || fm21 != M21 ||
+                    frd != reducedLength || fs12 != S12)
+                    throw new Exception("GeodesicLine.GenPosition (false) failed");
+
+                GeodesicExact ge = new GeodesicExact();
+                ge = new GeodesicExact(g.MajorRadius, g.Flattening);
+                arcDistance = ge.Direct(32.0, -86.0, 45.0, 20000.0, out finalLatitude, out finalLongitude,
+                    out finalAzimuth, out reducedLength, out M12, out M21,
+                    out S12);
+                fad = ge.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude)
+                    throw new Exception("GeodesicExact.Direct #1 failed");
+                fad = ge.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon, out faz);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth)
+                    throw new Exception("GeodesicExact.Direct #2 failed");
+                fad = ge.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon, out faz, out frd);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength)
+                    throw new Exception("GeodesicExact.Direct #3 failed");
+                fad = ge.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon, out faz, out fm12, out fm21);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || fm12 != M12 || fm21 != M21)
+                    throw new Exception("GeodesicExact.Direct #4 failed");
+                fad = ge.Direct(32.0, -86.0, 45.0, 20000.0, out flat, out flon, out faz, out frd, out fm12, out fm21);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength || fm12 != M12 || fm21 != M21)
+                    throw new Exception("GeodesicExact.Direct #5 failed");
+                fad = ge.GenDirect(32.0, -86.0, 45.0, false, 20000.0, Mask.ALL, out flat, out flon, out faz, out outd, out frd, out fm12, out fm21, out fs12);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength || fm12 != M12 || fm21 != M21 ||
+                    outd != 20000.0 || fs12 != S12)
+                    throw new Exception("GeodesicExact.GenDirect (false) failed");
+                ge.ArcDirect(32.0, -86.0, 45.0, 1.0, out finalLatitude, out finalLongitude, out finalAzimuth,
+                    out arcDistance, out reducedLength, out M12, out M21, out S12);
+                ge.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon);
+                if (flat != finalLatitude || flon != finalLongitude)
+                    throw new Exception("GeodesicExact.ArcDirect #1 failed");
+                ge.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon, out faz);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth)
+                    throw new Exception("GeodesicExact.ArcDirect #2 failed");
+                ge.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon, out faz, out fad);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    fad != arcDistance)
+                    throw new Exception("GeodesicExact.ArcDirect #3 failed");
+                ge.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon, out faz, out fad, out frd);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    fad != arcDistance || frd != reducedLength)
+                    throw new Exception("GeodesicExact.ArcDirect #4 failed");
+                ge.ArcDirect(32.0, -86.0, 45.0, 1.0, out flat, out flon, out faz, out fad, out fm12, out fm21);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    fad != arcDistance || fm12 != M12 || fm21 != M21)
+                    throw new Exception("GeodesicExact.ArcDirect #5 failed");
+                fad = ge.GenDirect(32.0, -86.0, 45.0, true, 1.0, Mask.ALL, out flat, out flon, out faz, out outd, out frd, out fm12, out fm21, out fs12);
+                if (outd != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength || fm12 != M12 || fm21 != M21 ||
+                    fad != 1.0 || fs12 != S12)
+                    throw new Exception("GeodesicExact.GenDirect (true) failed");
+                arcDistance = ge.Inverse(32.0, -86.0, 33.0, -87.0, out distance, out initAzimuth, out finalAzimuth,
+                    out reducedLength, out M12, out M21, out S12);
+                fad = ge.Inverse(32.0, -86.0, 33.0, -87.0, out outd);
+                if (fad != arcDistance || outd != distance)
+                    throw new Exception("GeodesicExact.Inverse #1 failed");
+                fad = ge.Inverse(32.0, -86.0, 33.0, -87.0, out iaz, out faz);
+                if (fad != arcDistance || iaz != initAzimuth || faz != finalAzimuth)
+                    throw new Exception("GeodesicExact.Inverse #2 failed");
+                fad = ge.Inverse(32.0, -86.0, 33.0, -87.0, out outd, out iaz, out faz);
+                if (fad != arcDistance || outd != distance || faz != finalAzimuth ||
+                    outd != distance)
+                    throw new Exception("GeodesicExact.Inverse #3 failed");
+                fad = ge.Inverse(32.0, -86.0, 33.0, -87.0, out outd, out iaz, out faz, out frd);
+                if (fad != arcDistance || outd != distance || faz != finalAzimuth ||
+                    outd != distance || frd != reducedLength)
+                    throw new Exception("GeodesicExact.Inverse #4 failed");
+                fad = ge.Inverse(32.0, -86.0, 33.0, -87.0, out outd, out iaz, out faz, out fm12, out fm21);
+                if (fad != arcDistance || outd != distance || faz != finalAzimuth ||
+                    outd != distance || fm12 != M12 || fm21 != M21)
+                    throw new Exception("GeodesicExact.Inverse #5 failed");
+                fad = ge.Inverse(32.0, -86.0, 33.0, -87.0, out outd, out iaz, out faz, out frd, out fm12, out fm21);
+                if (fad != arcDistance || outd != distance || faz != finalAzimuth ||
+                    outd != distance || fm12 != M12 || fm21 != M21 || frd != reducedLength)
+                    throw new Exception("GeodesicExact.Inverse #6 failed");
+                GeodesicLineExact gle = ge.Line(32.0, -86.0, 45.0, Mask.ALL);
+                gle = new GeodesicLineExact(32.0, -86.0, 45.0, Mask.ALL);
+                gle = new GeodesicLineExact(ge, 32.0, -86.0, 45.0, Mask.ALL);
+                arcDistance = gle.Position(10000.0, out finalLatitude, out finalLongitude, out finalAzimuth,
+                    out reducedLength, out M12, out M21, out S12);
+                fad = gle.Position(10000.0, out flat, out flon);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude)
+                    throw new Exception("GeodesicLineExact.Position #1 failed");
+                fad = gle.Position(10000.0, out flat, out flon, out faz);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth)
+                    throw new Exception("GeodesicLineExact.Position #2 failed");
+                fad = gle.Position(10000.0, out flat, out flon, out faz, out frd);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || frd != reducedLength)
+                    throw new Exception("GeodesicLineExact.Position #3 failed");
+                fad = gle.Position(10000.0, out flat, out flon, out faz, out fm12, out fm21);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || fm12 != M12 || fm21 != M21)
+                    throw new Exception("GeodesicLineExact.Position #4 failed");
+                fad = gle.Position(10000.0, out flat, out flon, out faz, out frd, out fm12, out fm21);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || fm12 != M12 || fm21 != M21 || frd != reducedLength)
+                    throw new Exception("GeodesicLineExact.Position #5 failed");
+                fad = gle.GenPosition(false, 10000.0, Mask.ALL, out flat, out flon, out faz, out outd, out frd, out fm12, out fm21, out fs12);
+                if (fad != arcDistance || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || outd != 10000.0 || fm12 != M12 || fm21 != M21 ||
+                    frd != reducedLength || fs12 != S12)
+                    throw new Exception("GeodesicLineExact.GenPosition (false) failed");
+                gle.ArcPosition(1.0, out finalLatitude, out finalLongitude, out finalAzimuth,
+                    out distance, out reducedLength, out M12, out M21, out S12);
+                gle.ArcPosition(1.0, out flat, out flon);
+                if (flat != finalLatitude || flon != finalLongitude)
+                    throw new Exception("GeodesicLineExact.ArcPosition #1 failed");
+                gle.ArcPosition(1.0, out flat, out flon, out faz);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth)
+                    throw new Exception("GeodesicLineExact.ArcPosition #2 failed");
+                gle.ArcPosition(1.0, out flat, out flon, out faz, out outd);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    outd != distance)
+                    throw new Exception("GeodesicLineExact.ArcPosition #3 failed");
+                gle.ArcPosition(1.0, out flat, out flon, out faz, out outd, out frd);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    outd != distance || frd != reducedLength)
+                    throw new Exception("GeodesicLineExact.ArcPosition #4 failed");
+                gle.ArcPosition(1.0, out flat, out flon, out faz, out outd, out fm12, out fm21);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    outd != distance || fm12 != M12 || fm21 != M21)
+                    throw new Exception("GeodesicLineExact.ArcPosition #5 failed");
+                gle.ArcPosition(1.0, out flat, out flon, out faz, out outd, out frd, out fm12, out fm21);
+                if (flat != finalLatitude || flon != finalLongitude || faz != finalAzimuth ||
+                    outd != distance || fm12 != M12 || fm21 != M21 || frd != reducedLength)
+                    throw new Exception("GeodesicLineExact.ArcPosition #6 failed");
+                fad = gle.GenPosition(true, 1.0, Mask.ALL, out flat, out flon, out faz, out outd, out frd, out fm12, out fm21, out fs12);
+                if (fad != 1.0 || flat != finalLatitude || flon != finalLongitude ||
+                    faz != finalAzimuth || outd != distance || fm12 != M12 || fm21 != M21 ||
+                    frd != reducedLength || fs12 != S12)
+                    throw new Exception("GeodesicLineExact.GenPosition (false) failed");
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Interface Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+
+            MessageBox.Show("No errors detected", "Interfaces OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+    }
+}
diff --git a/dotnet/Projections/GeodesicPanel.resx b/dotnet/Projections/GeodesicPanel.resx
new file mode 100644
index 0000000..cd3e124
--- /dev/null
+++ b/dotnet/Projections/GeodesicPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_tooltips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/GeoidPanel.Designer.cs b/dotnet/Projections/GeoidPanel.Designer.cs
new file mode 100644
index 0000000..32be932
--- /dev/null
+++ b/dotnet/Projections/GeoidPanel.Designer.cs
@@ -0,0 +1,441 @@
+namespace Projections
+{
+    partial class GeoidPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.label1 = new System.Windows.Forms.Label();
+            this.m_geoidFileNameTextBox = new System.Windows.Forms.TextBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.m_threadSafeCheckBox = new System.Windows.Forms.CheckBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.m_dateTimeTextBox = new System.Windows.Forms.TextBox();
+            this.m_descriptionTextBox = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.m_majorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.m_flatteningTtextBox = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.m_northTextBox = new System.Windows.Forms.TextBox();
+            this.m_southTextBox = new System.Windows.Forms.TextBox();
+            this.m_eastTextBox = new System.Windows.Forms.TextBox();
+            this.m_westTextBox = new System.Windows.Forms.TextBox();
+            this.m_cacheButton = new System.Windows.Forms.Button();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.m_ellipsoidTextBox = new System.Windows.Forms.TextBox();
+            this.m_geoidTextBox = new System.Windows.Forms.TextBox();
+            this.m_convertEllipsodButton = new System.Windows.Forms.Button();
+            this.m_convertGeoidButton = new System.Windows.Forms.Button();
+            this.label12 = new System.Windows.Forms.Label();
+            this.label13 = new System.Windows.Forms.Label();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_toolTip = new System.Windows.Forms.ToolTip(this.components);
+            this.m_heightButton = new System.Windows.Forms.Button();
+            this.m_validateButton = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(6, 5);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(54, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Geoid File";
+            //
+            // m_geoidFileNameTextBox
+            //
+            this.m_geoidFileNameTextBox.Location = new System.Drawing.Point(9, 21);
+            this.m_geoidFileNameTextBox.Name = "m_geoidFileNameTextBox";
+            this.m_geoidFileNameTextBox.Size = new System.Drawing.Size(388, 20);
+            this.m_geoidFileNameTextBox.TabIndex = 1;
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(404, 20);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(25, 23);
+            this.button1.TabIndex = 2;
+            this.button1.Text = "...";
+            this.m_toolTip.SetToolTip(this.button1, "Select Geoid File");
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnSelectFile);
+            //
+            // m_threadSafeCheckBox
+            //
+            this.m_threadSafeCheckBox.AutoSize = true;
+            this.m_threadSafeCheckBox.Location = new System.Drawing.Point(9, 48);
+            this.m_threadSafeCheckBox.Name = "m_threadSafeCheckBox";
+            this.m_threadSafeCheckBox.Size = new System.Drawing.Size(85, 17);
+            this.m_threadSafeCheckBox.TabIndex = 3;
+            this.m_threadSafeCheckBox.Text = "Thread Safe";
+            this.m_threadSafeCheckBox.UseVisualStyleBackColor = true;
+            this.m_threadSafeCheckBox.CheckedChanged += new System.EventHandler(this.OnThreadSafe);
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(7, 72);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(58, 13);
+            this.label2.TabIndex = 4;
+            this.label2.Text = "Date/Time";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(7, 101);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(60, 13);
+            this.label3.TabIndex = 5;
+            this.label3.Text = "Description";
+            //
+            // m_dateTimeTextBox
+            //
+            this.m_dateTimeTextBox.Location = new System.Drawing.Point(80, 68);
+            this.m_dateTimeTextBox.Name = "m_dateTimeTextBox";
+            this.m_dateTimeTextBox.ReadOnly = true;
+            this.m_dateTimeTextBox.Size = new System.Drawing.Size(181, 20);
+            this.m_dateTimeTextBox.TabIndex = 6;
+            //
+            // m_descriptionTextBox
+            //
+            this.m_descriptionTextBox.Location = new System.Drawing.Point(80, 97);
+            this.m_descriptionTextBox.Name = "m_descriptionTextBox";
+            this.m_descriptionTextBox.ReadOnly = true;
+            this.m_descriptionTextBox.Size = new System.Drawing.Size(349, 20);
+            this.m_descriptionTextBox.TabIndex = 7;
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(7, 130);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(69, 13);
+            this.label4.TabIndex = 8;
+            this.label4.Text = "Major Radius";
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(7, 159);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(53, 13);
+            this.label5.TabIndex = 9;
+            this.label5.Text = "Flattening";
+            //
+            // m_majorRadiusTextBox
+            //
+            this.m_majorRadiusTextBox.Location = new System.Drawing.Point(83, 126);
+            this.m_majorRadiusTextBox.Name = "m_majorRadiusTextBox";
+            this.m_majorRadiusTextBox.ReadOnly = true;
+            this.m_majorRadiusTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_majorRadiusTextBox.TabIndex = 10;
+            //
+            // m_flatteningTtextBox
+            //
+            this.m_flatteningTtextBox.Location = new System.Drawing.Point(83, 155);
+            this.m_flatteningTtextBox.Name = "m_flatteningTtextBox";
+            this.m_flatteningTtextBox.ReadOnly = true;
+            this.m_flatteningTtextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_flatteningTtextBox.TabIndex = 11;
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(442, 12);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(33, 13);
+            this.label6.TabIndex = 12;
+            this.label6.Text = "North";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(442, 38);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(35, 13);
+            this.label7.TabIndex = 13;
+            this.label7.Text = "South";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(442, 64);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(28, 13);
+            this.label8.TabIndex = 14;
+            this.label8.Text = "East";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(442, 90);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(32, 13);
+            this.label9.TabIndex = 15;
+            this.label9.Text = "West";
+            //
+            // m_northTextBox
+            //
+            this.m_northTextBox.Location = new System.Drawing.Point(482, 8);
+            this.m_northTextBox.Name = "m_northTextBox";
+            this.m_northTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_northTextBox.TabIndex = 16;
+            //
+            // m_southTextBox
+            //
+            this.m_southTextBox.Location = new System.Drawing.Point(482, 34);
+            this.m_southTextBox.Name = "m_southTextBox";
+            this.m_southTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_southTextBox.TabIndex = 17;
+            //
+            // m_eastTextBox
+            //
+            this.m_eastTextBox.Location = new System.Drawing.Point(482, 60);
+            this.m_eastTextBox.Name = "m_eastTextBox";
+            this.m_eastTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_eastTextBox.TabIndex = 18;
+            //
+            // m_westTextBox
+            //
+            this.m_westTextBox.Location = new System.Drawing.Point(482, 86);
+            this.m_westTextBox.Name = "m_westTextBox";
+            this.m_westTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_westTextBox.TabIndex = 19;
+            //
+            // m_cacheButton
+            //
+            this.m_cacheButton.Location = new System.Drawing.Point(492, 113);
+            this.m_cacheButton.Name = "m_cacheButton";
+            this.m_cacheButton.Size = new System.Drawing.Size(75, 23);
+            this.m_cacheButton.TabIndex = 20;
+            this.m_cacheButton.Text = "Cache";
+            this.m_toolTip.SetToolTip(this.m_cacheButton, "Cache Geoid Data");
+            this.m_cacheButton.UseVisualStyleBackColor = true;
+            this.m_cacheButton.Click += new System.EventHandler(this.OnCache);
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(606, 63);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(113, 13);
+            this.label10.TabIndex = 21;
+            this.label10.Text = "Height Above Ellipsoid";
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(754, 63);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(102, 13);
+            this.label11.TabIndex = 22;
+            this.label11.Text = "Height above Geoid";
+            //
+            // m_ellipsoidTextBox
+            //
+            this.m_ellipsoidTextBox.Location = new System.Drawing.Point(596, 85);
+            this.m_ellipsoidTextBox.Name = "m_ellipsoidTextBox";
+            this.m_ellipsoidTextBox.Size = new System.Drawing.Size(132, 20);
+            this.m_ellipsoidTextBox.TabIndex = 23;
+            //
+            // m_geoidTextBox
+            //
+            this.m_geoidTextBox.Location = new System.Drawing.Point(739, 85);
+            this.m_geoidTextBox.Name = "m_geoidTextBox";
+            this.m_geoidTextBox.Size = new System.Drawing.Size(132, 20);
+            this.m_geoidTextBox.TabIndex = 24;
+            //
+            // m_convertEllipsodButton
+            //
+            this.m_convertEllipsodButton.Enabled = false;
+            this.m_convertEllipsodButton.Location = new System.Drawing.Point(625, 109);
+            this.m_convertEllipsodButton.Name = "m_convertEllipsodButton";
+            this.m_convertEllipsodButton.Size = new System.Drawing.Size(75, 23);
+            this.m_convertEllipsodButton.TabIndex = 25;
+            this.m_convertEllipsodButton.Text = "Convert ->";
+            this.m_toolTip.SetToolTip(this.m_convertEllipsodButton, "Convert Ellipsod Height to Geoid Height");
+            this.m_convertEllipsodButton.UseVisualStyleBackColor = true;
+            this.m_convertEllipsodButton.Click += new System.EventHandler(this.OnConvertEllipsod);
+            //
+            // m_convertGeoidButton
+            //
+            this.m_convertGeoidButton.Enabled = false;
+            this.m_convertGeoidButton.Location = new System.Drawing.Point(768, 109);
+            this.m_convertGeoidButton.Name = "m_convertGeoidButton";
+            this.m_convertGeoidButton.Size = new System.Drawing.Size(75, 23);
+            this.m_convertGeoidButton.TabIndex = 26;
+            this.m_convertGeoidButton.Text = "<- Convert";
+            this.m_toolTip.SetToolTip(this.m_convertGeoidButton, "Convert Geoid Height to Ellipsoid Height");
+            this.m_convertGeoidButton.UseVisualStyleBackColor = true;
+            this.m_convertGeoidButton.Click += new System.EventHandler(this.OnConvertGeoid);
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(593, 12);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(45, 13);
+            this.label12.TabIndex = 27;
+            this.label12.Text = "Latitude";
+            //
+            // label13
+            //
+            this.label13.AutoSize = true;
+            this.label13.Location = new System.Drawing.Point(593, 38);
+            this.label13.Name = "label13";
+            this.label13.Size = new System.Drawing.Size(54, 13);
+            this.label13.TabIndex = 28;
+            this.label13.Text = "Longitude";
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(653, 8);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_latitudeTextBox.TabIndex = 29;
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(653, 34);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_longitudeTextBox.TabIndex = 30;
+            //
+            // m_heightButton
+            //
+            this.m_heightButton.Enabled = false;
+            this.m_heightButton.Location = new System.Drawing.Point(768, 18);
+            this.m_heightButton.Name = "m_heightButton";
+            this.m_heightButton.Size = new System.Drawing.Size(75, 23);
+            this.m_heightButton.TabIndex = 31;
+            this.m_heightButton.Text = "Height";
+            this.m_toolTip.SetToolTip(this.m_heightButton, "Calculate Geoid Height at Longitude/Latitude");
+            this.m_heightButton.UseVisualStyleBackColor = true;
+            this.m_heightButton.Click += new System.EventHandler(this.OnHeight);
+            //
+            // m_validateButton
+            //
+            this.m_validateButton.Enabled = false;
+            this.m_validateButton.Location = new System.Drawing.Point(638, 148);
+            this.m_validateButton.Name = "m_validateButton";
+            this.m_validateButton.Size = new System.Drawing.Size(75, 23);
+            this.m_validateButton.TabIndex = 32;
+            this.m_validateButton.Text = "Validate";
+            this.m_validateButton.UseVisualStyleBackColor = true;
+            this.m_validateButton.Click += new System.EventHandler(this.OnValidate);
+            //
+            // GeoidPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.m_validateButton);
+            this.Controls.Add(this.m_heightButton);
+            this.Controls.Add(this.m_longitudeTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.label13);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.m_convertGeoidButton);
+            this.Controls.Add(this.m_convertEllipsodButton);
+            this.Controls.Add(this.m_geoidTextBox);
+            this.Controls.Add(this.m_ellipsoidTextBox);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.m_cacheButton);
+            this.Controls.Add(this.m_westTextBox);
+            this.Controls.Add(this.m_eastTextBox);
+            this.Controls.Add(this.m_southTextBox);
+            this.Controls.Add(this.m_northTextBox);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.m_flatteningTtextBox);
+            this.Controls.Add(this.m_majorRadiusTextBox);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.m_descriptionTextBox);
+            this.Controls.Add(this.m_dateTimeTextBox);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.m_threadSafeCheckBox);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.m_geoidFileNameTextBox);
+            this.Controls.Add(this.label1);
+            this.Name = "GeoidPanel";
+            this.Size = new System.Drawing.Size(1002, 273);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox m_geoidFileNameTextBox;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.CheckBox m_threadSafeCheckBox;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox m_dateTimeTextBox;
+        private System.Windows.Forms.TextBox m_descriptionTextBox;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.TextBox m_majorRadiusTextBox;
+        private System.Windows.Forms.TextBox m_flatteningTtextBox;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.TextBox m_northTextBox;
+        private System.Windows.Forms.TextBox m_southTextBox;
+        private System.Windows.Forms.TextBox m_eastTextBox;
+        private System.Windows.Forms.TextBox m_westTextBox;
+        private System.Windows.Forms.Button m_cacheButton;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.TextBox m_ellipsoidTextBox;
+        private System.Windows.Forms.TextBox m_geoidTextBox;
+        private System.Windows.Forms.Button m_convertEllipsodButton;
+        private System.Windows.Forms.Button m_convertGeoidButton;
+        private System.Windows.Forms.ToolTip m_toolTip;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.Label label13;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.Button m_heightButton;
+        private System.Windows.Forms.Button m_validateButton;
+    }
+}
diff --git a/dotnet/Projections/GeoidPanel.cs b/dotnet/Projections/GeoidPanel.cs
new file mode 100644
index 0000000..7a1a7d5
--- /dev/null
+++ b/dotnet/Projections/GeoidPanel.cs
@@ -0,0 +1,170 @@
+/**
+ * \file NETGeographicLib\GeoidPanel.cs
+ * \brief NETGeographicLib.Geoid example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+using System.IO;
+
+namespace Projections
+{
+    public partial class GeoidPanel : UserControl
+    {
+        Geoid m_geoid = null;
+        string m_path;
+        string m_fileName;
+
+        public GeoidPanel()
+        {
+            InitializeComponent();
+            m_threadSafeCheckBox.Checked = true;
+        }
+
+        private void OnSelectFile(object sender, EventArgs e)
+        {
+            OpenFileDialog dlg = new OpenFileDialog();
+            dlg.Filter = "Geoid File (*.pgm)|*.pgm";
+            dlg.DefaultExt = "pgm";
+            dlg.Title = "Open Geoid File";
+
+            if (dlg.ShowDialog() == DialogResult.Cancel) return;
+
+            m_path = dlg.FileName.Substring(0, dlg.FileName.LastIndexOf('\\')).Replace('\\', '/');
+            int length = dlg.FileName.LastIndexOf('.') - dlg.FileName.LastIndexOf('\\') - 1;
+            m_fileName = dlg.FileName.Substring(dlg.FileName.LastIndexOf('\\') + 1, length);
+
+            try
+            {
+                m_geoid = new Geoid(m_fileName, m_path, true, m_threadSafeCheckBox.Checked);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+
+            m_convertEllipsodButton.Enabled = m_convertGeoidButton.Enabled = m_heightButton.Enabled = m_validateButton.Enabled = true;
+            m_geoidFileNameTextBox.Text = dlg.FileName;
+            m_dateTimeTextBox.Text = m_geoid.DateTime;
+            m_descriptionTextBox.Text = m_geoid.Description;
+            m_majorRadiusTextBox.Text = m_geoid.MajorRadius.ToString();
+            m_flatteningTtextBox.Text = m_geoid.Flattening.ToString();
+        }
+
+        private void OnThreadSafe(object sender, EventArgs e)
+        {
+            if (m_geoidFileNameTextBox.Text.Length > 0)
+            {
+                try
+                {
+                    m_geoid = new Geoid(m_fileName, m_path, true, m_threadSafeCheckBox.Checked);
+                }
+                catch (Exception xcpt)
+                {
+                    MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                    return;
+                }
+            }
+            m_cacheButton.Enabled = !m_threadSafeCheckBox.Checked;
+            m_northTextBox.ReadOnly = m_southTextBox.ReadOnly = m_eastTextBox.ReadOnly = m_westTextBox.ReadOnly = m_threadSafeCheckBox.Checked;
+        }
+
+        private void OnCache(object sender, EventArgs e)
+        {
+            if (m_geoid == null) return;
+
+            try
+            {
+                double south = Double.Parse(m_southTextBox.Text);
+                double north = Double.Parse(m_northTextBox.Text);
+                double west = Double.Parse(m_westTextBox.Text);
+                double east = Double.Parse(m_eastTextBox.Text);
+                m_geoid.CacheArea(south, west, north, east);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnConvertEllipsod(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double lon = Double.Parse(m_longitudeTextBox.Text);
+                double h = Double.Parse(m_ellipsoidTextBox.Text);
+                m_geoidTextBox.Text = m_geoid.ConvertHeight(lat, lon, h, Geoid.ConvertFlag.ELLIPSOIDTOGEOID).ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnConvertGeoid(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double lon = Double.Parse(m_longitudeTextBox.Text);
+                double h = Double.Parse(m_geoidTextBox.Text);
+                m_ellipsoidTextBox.Text = m_geoid.ConvertHeight(lat, lon, h, Geoid.ConvertFlag.GEOIDTOELLIPSOID).ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnHeight(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double lon = Double.Parse(m_longitudeTextBox.Text);
+                m_ellipsoidTextBox.Text = m_geoid.Height(lat, lon).ToString();
+                m_geoidTextBox.Text = "0";
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                Geoid g = new Geoid(m_fileName, m_path, false, false);
+                g.CacheArea(20.0, -30.0, 30.0, -20.0);
+                g.CacheAll();
+                double gradx, grady;
+                double h1 = g.Height(32.0, -60.0, out gradx, out grady);
+                double h2 = g.Height(32.0, -60.0);
+                if (h1 != h2)
+                    throw new Exception("Error in Geoid.Height");
+                g.ConvertHeight(32.0, -60.0, 100.0, Geoid.ConvertFlag.ELLIPSOIDTOGEOID);
+                MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/GeoidPanel.resx b/dotnet/Projections/GeoidPanel.resx
new file mode 100644
index 0000000..3ec30e0
--- /dev/null
+++ b/dotnet/Projections/GeoidPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/GravityPanel.Designer.cs b/dotnet/Projections/GravityPanel.Designer.cs
new file mode 100644
index 0000000..cfd8781
--- /dev/null
+++ b/dotnet/Projections/GravityPanel.Designer.cs
@@ -0,0 +1,382 @@
+namespace Projections
+{
+    partial class GravityPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.button1 = new System.Windows.Forms.Button();
+            this.m_updateButton = new System.Windows.Forms.Button();
+            this.m_gravityModelNameTextBox = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.m_nameTextBox = new System.Windows.Forms.TextBox();
+            this.m_descriptionTextBox = new System.Windows.Forms.TextBox();
+            this.m_dateTextBox = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.m_longitudetextBoxT = new System.Windows.Forms.TextBox();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_altitudeTextBox = new System.Windows.Forms.TextBox();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.m_accelXTextBox = new System.Windows.Forms.TextBox();
+            this.m_accelYTextBox = new System.Windows.Forms.TextBox();
+            this.m_accelZTextBox = new System.Windows.Forms.TextBox();
+            this.label12 = new System.Windows.Forms.Label();
+            this.m_geoidTextBox = new System.Windows.Forms.TextBox();
+            this.m_normGravButton = new System.Windows.Forms.Button();
+            this.m_GravityCircleButton = new System.Windows.Forms.Button();
+            this.m_validateButton = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(391, 21);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(29, 23);
+            this.button1.TabIndex = 2;
+            this.button1.Text = "...";
+            this.toolTip1.SetToolTip(this.button1, "Select gravity model file");
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnSelectGravityModel);
+            //
+            // m_updateButton
+            //
+            this.m_updateButton.Enabled = false;
+            this.m_updateButton.Location = new System.Drawing.Point(565, 106);
+            this.m_updateButton.Name = "m_updateButton";
+            this.m_updateButton.Size = new System.Drawing.Size(75, 23);
+            this.m_updateButton.TabIndex = 24;
+            this.m_updateButton.Text = "Update";
+            this.toolTip1.SetToolTip(this.m_updateButton, "Calculate acceleration and geoid height");
+            this.m_updateButton.UseVisualStyleBackColor = true;
+            this.m_updateButton.Click += new System.EventHandler(this.OnUpdate);
+            //
+            // m_gravityModelNameTextBox
+            //
+            this.m_gravityModelNameTextBox.Location = new System.Drawing.Point(7, 22);
+            this.m_gravityModelNameTextBox.Name = "m_gravityModelNameTextBox";
+            this.m_gravityModelNameTextBox.Size = new System.Drawing.Size(377, 20);
+            this.m_gravityModelNameTextBox.TabIndex = 0;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(4, 6);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(72, 13);
+            this.label1.TabIndex = 1;
+            this.label1.Text = "Gravity Model";
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(7, 52);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(35, 13);
+            this.label2.TabIndex = 3;
+            this.label2.Text = "Name";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(10, 79);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(60, 13);
+            this.label3.TabIndex = 4;
+            this.label3.Text = "Description";
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(13, 106);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(30, 13);
+            this.label4.TabIndex = 5;
+            this.label4.Text = "Date";
+            //
+            // m_nameTextBox
+            //
+            this.m_nameTextBox.Location = new System.Drawing.Point(85, 48);
+            this.m_nameTextBox.Name = "m_nameTextBox";
+            this.m_nameTextBox.ReadOnly = true;
+            this.m_nameTextBox.Size = new System.Drawing.Size(299, 20);
+            this.m_nameTextBox.TabIndex = 6;
+            //
+            // m_descriptionTextBox
+            //
+            this.m_descriptionTextBox.Location = new System.Drawing.Point(85, 75);
+            this.m_descriptionTextBox.Name = "m_descriptionTextBox";
+            this.m_descriptionTextBox.ReadOnly = true;
+            this.m_descriptionTextBox.Size = new System.Drawing.Size(299, 20);
+            this.m_descriptionTextBox.TabIndex = 7;
+            //
+            // m_dateTextBox
+            //
+            this.m_dateTextBox.Location = new System.Drawing.Point(85, 102);
+            this.m_dateTextBox.Name = "m_dateTextBox";
+            this.m_dateTextBox.ReadOnly = true;
+            this.m_dateTextBox.Size = new System.Drawing.Size(299, 20);
+            this.m_dateTextBox.TabIndex = 8;
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(433, 32);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(101, 13);
+            this.label5.TabIndex = 9;
+            this.label5.Text = "Longitude (degrees)";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(433, 58);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(92, 13);
+            this.label6.TabIndex = 10;
+            this.label6.Text = "Latitude (degrees)";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(433, 84);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(82, 13);
+            this.label7.TabIndex = 11;
+            this.label7.Text = "Altitude (meters)";
+            //
+            // m_longitudetextBoxT
+            //
+            this.m_longitudetextBoxT.Location = new System.Drawing.Point(539, 28);
+            this.m_longitudetextBoxT.Name = "m_longitudetextBoxT";
+            this.m_longitudetextBoxT.Size = new System.Drawing.Size(126, 20);
+            this.m_longitudetextBoxT.TabIndex = 12;
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(539, 54);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_latitudeTextBox.TabIndex = 13;
+            //
+            // m_altitudeTextBox
+            //
+            this.m_altitudeTextBox.Location = new System.Drawing.Point(539, 80);
+            this.m_altitudeTextBox.Name = "m_altitudeTextBox";
+            this.m_altitudeTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_altitudeTextBox.TabIndex = 14;
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(670, 32);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(14, 13);
+            this.label8.TabIndex = 15;
+            this.label8.Text = "X";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(670, 58);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(14, 13);
+            this.label9.TabIndex = 16;
+            this.label9.Text = "Y";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(670, 84);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(14, 13);
+            this.label10.TabIndex = 17;
+            this.label10.Text = "Z";
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(700, 6);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(105, 13);
+            this.label11.TabIndex = 18;
+            this.label11.Text = "Acceleration (m/s^2)";
+            //
+            // m_accelXTextBox
+            //
+            this.m_accelXTextBox.Location = new System.Drawing.Point(691, 28);
+            this.m_accelXTextBox.Name = "m_accelXTextBox";
+            this.m_accelXTextBox.ReadOnly = true;
+            this.m_accelXTextBox.Size = new System.Drawing.Size(122, 20);
+            this.m_accelXTextBox.TabIndex = 19;
+            //
+            // m_accelYTextBox
+            //
+            this.m_accelYTextBox.Location = new System.Drawing.Point(690, 54);
+            this.m_accelYTextBox.Name = "m_accelYTextBox";
+            this.m_accelYTextBox.ReadOnly = true;
+            this.m_accelYTextBox.Size = new System.Drawing.Size(122, 20);
+            this.m_accelYTextBox.TabIndex = 20;
+            //
+            // m_accelZTextBox
+            //
+            this.m_accelZTextBox.Location = new System.Drawing.Point(691, 80);
+            this.m_accelZTextBox.Name = "m_accelZTextBox";
+            this.m_accelZTextBox.ReadOnly = true;
+            this.m_accelZTextBox.Size = new System.Drawing.Size(122, 20);
+            this.m_accelZTextBox.TabIndex = 21;
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(709, 106);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(86, 13);
+            this.label12.TabIndex = 22;
+            this.label12.Text = "Geoid Height (m)";
+            //
+            // m_geoidTextBox
+            //
+            this.m_geoidTextBox.Location = new System.Drawing.Point(691, 125);
+            this.m_geoidTextBox.Name = "m_geoidTextBox";
+            this.m_geoidTextBox.ReadOnly = true;
+            this.m_geoidTextBox.Size = new System.Drawing.Size(122, 20);
+            this.m_geoidTextBox.TabIndex = 23;
+            //
+            // m_normGravButton
+            //
+            this.m_normGravButton.Enabled = false;
+            this.m_normGravButton.Location = new System.Drawing.Point(544, 135);
+            this.m_normGravButton.Name = "m_normGravButton";
+            this.m_normGravButton.Size = new System.Drawing.Size(117, 42);
+            this.m_normGravButton.TabIndex = 25;
+            this.m_normGravButton.Text = "Acceleration using NormalGravity";
+            this.m_normGravButton.UseVisualStyleBackColor = true;
+            this.m_normGravButton.Click += new System.EventHandler(this.OnNormGravity);
+            //
+            // m_GravityCircleButton
+            //
+            this.m_GravityCircleButton.Enabled = false;
+            this.m_GravityCircleButton.Location = new System.Drawing.Point(403, 135);
+            this.m_GravityCircleButton.Name = "m_GravityCircleButton";
+            this.m_GravityCircleButton.Size = new System.Drawing.Size(131, 54);
+            this.m_GravityCircleButton.TabIndex = 26;
+            this.m_GravityCircleButton.Text = "Acceleration and geoid height using GravityCircle";
+            this.m_GravityCircleButton.UseVisualStyleBackColor = true;
+            this.m_GravityCircleButton.Click += new System.EventHandler(this.OnGravityCircle);
+            //
+            // m_validateButton
+            //
+            this.m_validateButton.Enabled = false;
+            this.m_validateButton.Location = new System.Drawing.Point(43, 145);
+            this.m_validateButton.Name = "m_validateButton";
+            this.m_validateButton.Size = new System.Drawing.Size(75, 23);
+            this.m_validateButton.TabIndex = 27;
+            this.m_validateButton.Text = "Validate";
+            this.m_validateButton.UseVisualStyleBackColor = true;
+            this.m_validateButton.Click += new System.EventHandler(this.OnValidate);
+            //
+            // GravityPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.m_validateButton);
+            this.Controls.Add(this.m_GravityCircleButton);
+            this.Controls.Add(this.m_normGravButton);
+            this.Controls.Add(this.m_updateButton);
+            this.Controls.Add(this.m_geoidTextBox);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.m_accelZTextBox);
+            this.Controls.Add(this.m_accelYTextBox);
+            this.Controls.Add(this.m_accelXTextBox);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.m_altitudeTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.m_longitudetextBoxT);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.m_dateTextBox);
+            this.Controls.Add(this.m_descriptionTextBox);
+            this.Controls.Add(this.m_nameTextBox);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.m_gravityModelNameTextBox);
+            this.Name = "GravityPanel";
+            this.Size = new System.Drawing.Size(1083, 403);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolTip toolTip1;
+        private System.Windows.Forms.TextBox m_gravityModelNameTextBox;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox m_nameTextBox;
+        private System.Windows.Forms.TextBox m_descriptionTextBox;
+        private System.Windows.Forms.TextBox m_dateTextBox;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.TextBox m_longitudetextBoxT;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_altitudeTextBox;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.TextBox m_accelXTextBox;
+        private System.Windows.Forms.TextBox m_accelYTextBox;
+        private System.Windows.Forms.TextBox m_accelZTextBox;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.TextBox m_geoidTextBox;
+        private System.Windows.Forms.Button m_updateButton;
+        private System.Windows.Forms.Button m_normGravButton;
+        private System.Windows.Forms.Button m_GravityCircleButton;
+        private System.Windows.Forms.Button m_validateButton;
+    }
+}
diff --git a/dotnet/Projections/GravityPanel.cs b/dotnet/Projections/GravityPanel.cs
new file mode 100644
index 0000000..8e4d5ba
--- /dev/null
+++ b/dotnet/Projections/GravityPanel.cs
@@ -0,0 +1,188 @@
+/**
+ * \file NETGeographicLib\GravityPanel.cs
+ * \brief NETGeographicLib.GravityModel example
+ *
+ * NETGeographicLib.GravityModel,
+ * NETGeographicLib.NormalGravity, and
+ * NETGeographicLib.GravityCircle example.
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class GravityPanel : UserControl
+    {
+        GravityModel m_gm = null;
+        string m_path;
+        string m_name;
+        public GravityPanel()
+        {
+            InitializeComponent();
+        }
+
+        private void OnSelectGravityModel(object sender, EventArgs e)
+        {
+            OpenFileDialog dlg = new OpenFileDialog();
+            dlg.Filter = "Gravity Model (*.egm)|*.egm";
+            dlg.DefaultExt = "egm";
+
+            if (dlg.ShowDialog() == DialogResult.Cancel) return;
+
+            m_path = dlg.FileName.Substring(0, dlg.FileName.LastIndexOf('\\')).Replace('\\', '/');
+            int length = dlg.FileName.LastIndexOf('.') - dlg.FileName.LastIndexOf('\\') - 1;
+            m_name = dlg.FileName.Substring(dlg.FileName.LastIndexOf('\\') + 1, length);
+
+            try
+            {
+                m_gm = new GravityModel(m_name, m_path);
+                m_gravityModelNameTextBox.Text = dlg.FileName;
+                m_nameTextBox.Text = m_gm.GravityModelName;
+                m_descriptionTextBox.Text = m_gm.Description;
+                m_dateTextBox.Text = m_gm.DateTime;
+                m_updateButton.Enabled = true;
+                m_normGravButton.Enabled = true;
+                m_GravityCircleButton.Enabled = true;
+                m_validateButton.Enabled = true;
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnUpdate(object sender, EventArgs e)
+        {
+            Cursor = Cursors.WaitCursor;
+            try
+            {
+                double lon = Double.Parse(m_longitudetextBoxT.Text);
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double alt = Double.Parse(m_altitudeTextBox.Text);
+
+                double gx, gy, gz;
+                m_gm.Gravity(lat, lon, alt, out gx, out gy, out gz);
+                m_accelXTextBox.Text = gx.ToString();
+                m_accelYTextBox.Text = gy.ToString();
+                m_accelZTextBox.Text = gz.ToString();
+                m_geoidTextBox.Text = m_gm.GeoidHeight(lat, lon).ToString();
+                Cursor = Cursors.Default;
+            }
+            catch (Exception xcpt)
+            {
+                Cursor = Cursors.Default;
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnNormGravity(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double alt = Double.Parse(m_altitudeTextBox.Text);
+
+                double gx, gz;
+                NormalGravity ng = m_gm.ReferenceEllipsoid();
+                ng.Gravity(lat, alt, out gx, out gz);
+                m_accelXTextBox.Text = gx.ToString();
+                m_accelYTextBox.Text = "0.0";
+                m_accelZTextBox.Text = gz.ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+
+        }
+
+        private void OnGravityCircle(object sender, EventArgs e)
+        {
+            Cursor = Cursors.WaitCursor;
+            try
+            {
+                double lon = Double.Parse(m_longitudetextBoxT.Text);
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double alt = Double.Parse(m_altitudeTextBox.Text);
+
+                double gx, gy, gz;
+                GravityCircle gc = m_gm.Circle(lat, alt, GravityModel.Mask.GEOID_HEIGHT|GravityModel.Mask.GRAVITY);
+                gc.Gravity(lon, out gx, out gy, out gz);
+                m_accelXTextBox.Text = gx.ToString();
+                m_accelYTextBox.Text = gy.ToString();
+                m_accelZTextBox.Text = gz.ToString();
+                if (alt != 0.0)
+                    MessageBox.Show("Geoid height cannot be calculated with GravityCircle if altitude is not 0", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                else
+                    m_geoidTextBox.Text = gc.GeoidHeight(lon).ToString();
+                Cursor = Cursors.Default;
+            }
+            catch (Exception xcpt)
+            {
+                Cursor = Cursors.Default;
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                double lon = -86.0;
+                double lat = 32.0;
+                double alt = 0.0;
+
+                double x, y, z;
+                GravityModel gm = new GravityModel(m_name,m_path);
+                gm.Disturbance( lat, lon, alt, out x, out y, out z);
+                gm.GeoidHeight(lat,lon);
+                gm.Gravity(lat,lon,alt,out x,out y, out z);
+                gm.Phi(5000000.0,5000000.0,out x,out y);
+                gm.SphericalAnomaly(lat,lon,alt,out x, out y, out z);
+                gm.T(5000000.0,5000000.0,5000000.0);
+                gm.U(5000000.0,5000000.0,5000000.0,out x,out y,out z);
+                gm.V(5000000.0,5000000.0,5000000.0,out x,out y,out z);
+                gm.W(5000000.0,5000000.0,5000000.0,out x,out y,out z);
+                NormalGravity ng = new NormalGravity(NormalGravity.StandardModels.GRS80);
+                ng = new NormalGravity( NormalGravity.StandardModels.WGS84);
+                ng = new NormalGravity(6378137.0,3.986005e+14,7.292115147e-5,-1.0,1.08263e-3);
+                ng = gm.ReferenceEllipsoid();
+                ng.DynamicalFormFactor(1);
+                Geocentric geo = ng.Earth();
+                ng.Gravity(lat,alt,out x, out z);
+                ng.Phi(5000000.0,5000000.0,out x,out y);
+                ng.SurfaceGravity(lat);
+                ng.U(5000000.0,5000000.0,5000000.0,out x, out y, out z);
+                ng.V0(5000000.0,5000000.0,5000000.0,out x, out y, out z);
+                GravityCircle gc = gm.Circle(lat,0.0,GravityModel.Mask.ALL);
+                gc.Capabilities();
+                gc.Capabilities(GravityModel.Mask.GRAVITY);
+                gc.Disturbance(lon, out x, out y, out z);
+                gc.GeoidHeight(lon);
+                gc.Gravity(lon, out x, out y, out z);
+                gc.SphericalAnomaly(lon, out x, out y, out z);
+                gc.T(lon);
+                gc.V(lon, out x, out y, out z);
+                gc.W(lon, out x, out y, out z);
+                MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/GravityPanel.resx b/dotnet/Projections/GravityPanel.resx
new file mode 100644
index 0000000..749de3c
--- /dev/null
+++ b/dotnet/Projections/GravityPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/LocalCartesianPanel.Designer.cs b/dotnet/Projections/LocalCartesianPanel.Designer.cs
new file mode 100644
index 0000000..3a3958f
--- /dev/null
+++ b/dotnet/Projections/LocalCartesianPanel.Designer.cs
@@ -0,0 +1,520 @@
+namespace Projections
+{
+    partial class LocalCartesianPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.m_toolTip = new System.Windows.Forms.ToolTip(this.components);
+            this.m_setButton = new System.Windows.Forms.Button();
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.m_flatteningTextBox = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.m_majorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.m_altitudeTextBox = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.m_latTextBox = new System.Windows.Forms.TextBox();
+            this.m_lonTextBox = new System.Windows.Forms.TextBox();
+            this.m_altTextBox = new System.Windows.Forms.TextBox();
+            this.m_XTextBox = new System.Windows.Forms.TextBox();
+            this.m_YTextBox = new System.Windows.Forms.TextBox();
+            this.m_ZTextBox = new System.Windows.Forms.TextBox();
+            this.m_functionComboBox = new System.Windows.Forms.ComboBox();
+            this.label12 = new System.Windows.Forms.Label();
+            this.groupBox3 = new System.Windows.Forms.GroupBox();
+            this.m_textBox22 = new System.Windows.Forms.TextBox();
+            this.m_textBox20 = new System.Windows.Forms.TextBox();
+            this.m_textBox21 = new System.Windows.Forms.TextBox();
+            this.m_textBox12 = new System.Windows.Forms.TextBox();
+            this.m_textBox10 = new System.Windows.Forms.TextBox();
+            this.m_textBox11 = new System.Windows.Forms.TextBox();
+            this.m_textBox02 = new System.Windows.Forms.TextBox();
+            this.m_textBox00 = new System.Windows.Forms.TextBox();
+            this.m_textBox01 = new System.Windows.Forms.TextBox();
+            this.button3 = new System.Windows.Forms.Button();
+            this.groupBox1.SuspendLayout();
+            this.groupBox2.SuspendLayout();
+            this.groupBox3.SuspendLayout();
+            this.SuspendLayout();
+            //
+            // m_setButton
+            //
+            this.m_setButton.Location = new System.Drawing.Point(12, 107);
+            this.m_setButton.Name = "m_setButton";
+            this.m_setButton.Size = new System.Drawing.Size(75, 23);
+            this.m_setButton.TabIndex = 4;
+            this.m_setButton.Text = "Set";
+            this.m_toolTip.SetToolTip(this.m_setButton, "Sets the Ellipsoid Parameters");
+            this.m_setButton.UseVisualStyleBackColor = true;
+            this.m_setButton.Click += new System.EventHandler(this.OnSetEllipsoid);
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(16, 150);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 6;
+            this.button1.Text = "Set";
+            this.m_toolTip.SetToolTip(this.button1, "Sets the reference coordinates");
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnSetReference);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(517, 163);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 22;
+            this.button2.Text = "Convert";
+            this.m_toolTip.SetToolTip(this.button2, "Executes the current function");
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnConvert);
+            //
+            // groupBox1
+            //
+            this.groupBox1.Controls.Add(this.m_setButton);
+            this.groupBox1.Controls.Add(this.m_flatteningTextBox);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.m_majorRadiusTextBox);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Location = new System.Drawing.Point(3, 3);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(146, 140);
+            this.groupBox1.TabIndex = 6;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Ellipsoid Parameters";
+            //
+            // m_flatteningTextBox
+            //
+            this.m_flatteningTextBox.Location = new System.Drawing.Point(12, 83);
+            this.m_flatteningTextBox.Name = "m_flatteningTextBox";
+            this.m_flatteningTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_flatteningTextBox.TabIndex = 3;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 25);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(109, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Major Radius (meters)";
+            //
+            // m_majorRadiusTextBox
+            //
+            this.m_majorRadiusTextBox.Location = new System.Drawing.Point(12, 42);
+            this.m_majorRadiusTextBox.Name = "m_majorRadiusTextBox";
+            this.m_majorRadiusTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_majorRadiusTextBox.TabIndex = 2;
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(12, 66);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Flattening";
+            //
+            // groupBox2
+            //
+            this.groupBox2.Controls.Add(this.button1);
+            this.groupBox2.Controls.Add(this.m_altitudeTextBox);
+            this.groupBox2.Controls.Add(this.label5);
+            this.groupBox2.Controls.Add(this.m_longitudeTextBox);
+            this.groupBox2.Controls.Add(this.label4);
+            this.groupBox2.Controls.Add(this.m_latitudeTextBox);
+            this.groupBox2.Controls.Add(this.label3);
+            this.groupBox2.Location = new System.Drawing.Point(155, 6);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.Size = new System.Drawing.Size(128, 178);
+            this.groupBox2.TabIndex = 7;
+            this.groupBox2.TabStop = false;
+            this.groupBox2.Text = "Origin";
+            //
+            // m_altitudeTextBox
+            //
+            this.m_altitudeTextBox.Location = new System.Drawing.Point(16, 123);
+            this.m_altitudeTextBox.Name = "m_altitudeTextBox";
+            this.m_altitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_altitudeTextBox.TabIndex = 5;
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(13, 106);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(82, 13);
+            this.label5.TabIndex = 4;
+            this.label5.Text = "Altitude (meters)";
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(13, 79);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_longitudeTextBox.TabIndex = 3;
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(10, 63);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(101, 13);
+            this.label4.TabIndex = 2;
+            this.label4.Text = "Longitude (degrees)";
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(10, 38);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_latitudeTextBox.TabIndex = 1;
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(7, 22);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(92, 13);
+            this.label3.TabIndex = 0;
+            this.label3.Text = "Latitude (degrees)";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(295, 10);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(92, 13);
+            this.label6.TabIndex = 8;
+            this.label6.Text = "Latitude (degrees)";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(295, 36);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(101, 13);
+            this.label7.TabIndex = 9;
+            this.label7.Text = "Longitude (degrees)";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(295, 62);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(82, 13);
+            this.label8.TabIndex = 10;
+            this.label8.Text = "Altitude (meters)";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(295, 88);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(54, 13);
+            this.label9.TabIndex = 11;
+            this.label9.Text = "X (meters)";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(295, 114);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(54, 13);
+            this.label10.TabIndex = 12;
+            this.label10.Text = "Y (meters)";
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(295, 140);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(54, 13);
+            this.label11.TabIndex = 13;
+            this.label11.Text = "Z (meters)";
+            //
+            // m_latTextBox
+            //
+            this.m_latTextBox.Location = new System.Drawing.Point(405, 6);
+            this.m_latTextBox.Name = "m_latTextBox";
+            this.m_latTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_latTextBox.TabIndex = 14;
+            //
+            // m_lonTextBox
+            //
+            this.m_lonTextBox.Location = new System.Drawing.Point(405, 32);
+            this.m_lonTextBox.Name = "m_lonTextBox";
+            this.m_lonTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_lonTextBox.TabIndex = 15;
+            //
+            // m_altTextBox
+            //
+            this.m_altTextBox.Location = new System.Drawing.Point(405, 58);
+            this.m_altTextBox.Name = "m_altTextBox";
+            this.m_altTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_altTextBox.TabIndex = 16;
+            //
+            // m_XTextBox
+            //
+            this.m_XTextBox.Location = new System.Drawing.Point(405, 84);
+            this.m_XTextBox.Name = "m_XTextBox";
+            this.m_XTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_XTextBox.TabIndex = 17;
+            //
+            // m_YTextBox
+            //
+            this.m_YTextBox.Location = new System.Drawing.Point(405, 110);
+            this.m_YTextBox.Name = "m_YTextBox";
+            this.m_YTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_YTextBox.TabIndex = 18;
+            //
+            // m_ZTextBox
+            //
+            this.m_ZTextBox.Location = new System.Drawing.Point(405, 136);
+            this.m_ZTextBox.Name = "m_ZTextBox";
+            this.m_ZTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_ZTextBox.TabIndex = 19;
+            //
+            // m_functionComboBox
+            //
+            this.m_functionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_functionComboBox.FormattingEnabled = true;
+            this.m_functionComboBox.Items.AddRange(new object[] {
+            "Forward",
+            "Reverse"});
+            this.m_functionComboBox.Location = new System.Drawing.Point(405, 163);
+            this.m_functionComboBox.Name = "m_functionComboBox";
+            this.m_functionComboBox.Size = new System.Drawing.Size(100, 21);
+            this.m_functionComboBox.TabIndex = 20;
+            this.m_functionComboBox.SelectedIndexChanged += new System.EventHandler(this.OnNewFunction);
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(295, 167);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(48, 13);
+            this.label12.TabIndex = 21;
+            this.label12.Text = "Function";
+            //
+            // groupBox3
+            //
+            this.groupBox3.Controls.Add(this.m_textBox22);
+            this.groupBox3.Controls.Add(this.m_textBox20);
+            this.groupBox3.Controls.Add(this.m_textBox21);
+            this.groupBox3.Controls.Add(this.m_textBox12);
+            this.groupBox3.Controls.Add(this.m_textBox10);
+            this.groupBox3.Controls.Add(this.m_textBox11);
+            this.groupBox3.Controls.Add(this.m_textBox02);
+            this.groupBox3.Controls.Add(this.m_textBox00);
+            this.groupBox3.Controls.Add(this.m_textBox01);
+            this.groupBox3.Location = new System.Drawing.Point(511, 10);
+            this.groupBox3.Name = "groupBox3";
+            this.groupBox3.Size = new System.Drawing.Size(325, 99);
+            this.groupBox3.TabIndex = 25;
+            this.groupBox3.TabStop = false;
+            this.groupBox3.Text = "Rotation Matrix";
+            //
+            // m_textBox22
+            //
+            this.m_textBox22.Location = new System.Drawing.Point(218, 74);
+            this.m_textBox22.Name = "m_textBox22";
+            this.m_textBox22.ReadOnly = true;
+            this.m_textBox22.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox22.TabIndex = 30;
+            //
+            // m_textBox20
+            //
+            this.m_textBox20.Location = new System.Drawing.Point(6, 74);
+            this.m_textBox20.Name = "m_textBox20";
+            this.m_textBox20.ReadOnly = true;
+            this.m_textBox20.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox20.TabIndex = 28;
+            //
+            // m_textBox21
+            //
+            this.m_textBox21.Location = new System.Drawing.Point(112, 74);
+            this.m_textBox21.Name = "m_textBox21";
+            this.m_textBox21.ReadOnly = true;
+            this.m_textBox21.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox21.TabIndex = 29;
+            //
+            // m_textBox12
+            //
+            this.m_textBox12.Location = new System.Drawing.Point(218, 50);
+            this.m_textBox12.Name = "m_textBox12";
+            this.m_textBox12.ReadOnly = true;
+            this.m_textBox12.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox12.TabIndex = 27;
+            //
+            // m_textBox10
+            //
+            this.m_textBox10.Location = new System.Drawing.Point(6, 50);
+            this.m_textBox10.Name = "m_textBox10";
+            this.m_textBox10.ReadOnly = true;
+            this.m_textBox10.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox10.TabIndex = 25;
+            //
+            // m_textBox11
+            //
+            this.m_textBox11.Location = new System.Drawing.Point(112, 50);
+            this.m_textBox11.Name = "m_textBox11";
+            this.m_textBox11.ReadOnly = true;
+            this.m_textBox11.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox11.TabIndex = 26;
+            //
+            // m_textBox02
+            //
+            this.m_textBox02.Location = new System.Drawing.Point(218, 25);
+            this.m_textBox02.Name = "m_textBox02";
+            this.m_textBox02.ReadOnly = true;
+            this.m_textBox02.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox02.TabIndex = 24;
+            //
+            // m_textBox00
+            //
+            this.m_textBox00.Location = new System.Drawing.Point(6, 25);
+            this.m_textBox00.Name = "m_textBox00";
+            this.m_textBox00.ReadOnly = true;
+            this.m_textBox00.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox00.TabIndex = 22;
+            //
+            // m_textBox01
+            //
+            this.m_textBox01.Location = new System.Drawing.Point(112, 25);
+            this.m_textBox01.Name = "m_textBox01";
+            this.m_textBox01.ReadOnly = true;
+            this.m_textBox01.Size = new System.Drawing.Size(100, 20);
+            this.m_textBox01.TabIndex = 23;
+            //
+            // button3
+            //
+            this.button3.Location = new System.Drawing.Point(18, 155);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(75, 23);
+            this.button3.TabIndex = 26;
+            this.button3.Text = "Validate";
+            this.m_toolTip.SetToolTip(this.button3, "Verifies LocalCartesian Interfaces");
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.OnValidate);
+            //
+            // LocalCartesianPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.button3);
+            this.Controls.Add(this.groupBox3);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.m_functionComboBox);
+            this.Controls.Add(this.m_ZTextBox);
+            this.Controls.Add(this.m_YTextBox);
+            this.Controls.Add(this.m_XTextBox);
+            this.Controls.Add(this.m_altTextBox);
+            this.Controls.Add(this.m_lonTextBox);
+            this.Controls.Add(this.m_latTextBox);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.groupBox2);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "LocalCartesianPanel";
+            this.Size = new System.Drawing.Size(842, 295);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox2.PerformLayout();
+            this.groupBox3.ResumeLayout(false);
+            this.groupBox3.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolTip m_toolTip;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Button m_setButton;
+        private System.Windows.Forms.TextBox m_flatteningTextBox;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox m_majorRadiusTextBox;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.TextBox m_altitudeTextBox;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.TextBox m_latTextBox;
+        private System.Windows.Forms.TextBox m_lonTextBox;
+        private System.Windows.Forms.TextBox m_altTextBox;
+        private System.Windows.Forms.TextBox m_XTextBox;
+        private System.Windows.Forms.TextBox m_YTextBox;
+        private System.Windows.Forms.TextBox m_ZTextBox;
+        private System.Windows.Forms.ComboBox m_functionComboBox;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.GroupBox groupBox3;
+        private System.Windows.Forms.TextBox m_textBox22;
+        private System.Windows.Forms.TextBox m_textBox20;
+        private System.Windows.Forms.TextBox m_textBox21;
+        private System.Windows.Forms.TextBox m_textBox12;
+        private System.Windows.Forms.TextBox m_textBox10;
+        private System.Windows.Forms.TextBox m_textBox11;
+        private System.Windows.Forms.TextBox m_textBox02;
+        private System.Windows.Forms.TextBox m_textBox00;
+        private System.Windows.Forms.TextBox m_textBox01;
+        private System.Windows.Forms.Button button3;
+    }
+}
diff --git a/dotnet/Projections/LocalCartesianPanel.cs b/dotnet/Projections/LocalCartesianPanel.cs
new file mode 100644
index 0000000..2f9a9e9
--- /dev/null
+++ b/dotnet/Projections/LocalCartesianPanel.cs
@@ -0,0 +1,173 @@
+/**
+ * \file NETGeographicLib\LocalCartesianPanel.cs
+ * \brief NETGeographicLib.LocalCartesian example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class LocalCartesianPanel : UserControl
+    {
+        LocalCartesian m_lc = null;
+        enum Functions
+        {
+            Forward,
+            Reverse
+        };
+        Functions m_function = Functions.Forward;
+
+        public LocalCartesianPanel()
+        {
+            InitializeComponent();
+
+            Geocentric g = new Geocentric();
+            m_majorRadiusTextBox.Text = g.MajorRadius.ToString();
+            m_flatteningTextBox.Text = g.Flattening.ToString();
+            m_lc = new LocalCartesian(g);
+            m_functionComboBox.SelectedIndex = (int)m_function;
+        }
+
+        private void OnSetEllipsoid(object sender, EventArgs e)
+        {
+            double a, f;
+            try
+            {
+                a = Double.Parse(m_majorRadiusTextBox.Text);
+                f = Double.Parse(m_flatteningTextBox.Text);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+
+            try
+            {
+                m_lc = new LocalCartesian(new Geocentric(a, f));
+            }
+            catch (GeographicErr err)
+            {
+                MessageBox.Show(err.Message, "GeographicLib error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnSetReference(object sender, EventArgs e)
+        {
+            double lat, lon, alt;
+            try
+            {
+                lat = Double.Parse(m_latitudeTextBox.Text);
+                lon = Double.Parse(m_longitudeTextBox.Text);
+                alt = Double.Parse(m_altitudeTextBox.Text);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Data Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+
+            m_lc.Reset(lat, lon, alt);
+        }
+
+        private void OnConvert(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat, lon, alt, x, y, z;
+                double[,] rot = null;
+                switch (m_function)
+                {
+                    case Functions.Forward:
+                        lat = Double.Parse(m_latTextBox.Text);
+                        lon = Double.Parse(m_lonTextBox.Text);
+                        alt = Double.Parse(m_altTextBox.Text);
+                        m_lc.Forward(lat, lon, alt, out x, out y, out z, out rot);
+                        m_XTextBox.Text = x.ToString("0.00###");
+                        m_YTextBox.Text = y.ToString("0.00###");
+                        m_ZTextBox.Text = z.ToString("0.00###");
+                        break;
+                    case Functions.Reverse:
+                        x = Double.Parse(m_XTextBox.Text);
+                        y = Double.Parse(m_YTextBox.Text);
+                        z = Double.Parse(m_ZTextBox.Text);
+                        m_lc.Reverse(x, y, z, out lat, out lon, out alt, out rot);
+                        m_latTextBox.Text = lat.ToString();
+                        m_lonTextBox.Text = lon.ToString();
+                        m_altTextBox.Text = alt.ToString();
+                        break;
+                }
+                m_textBox00.Text = rot[0, 0].ToString("#.000000000000");
+                m_textBox01.Text = rot[0, 1].ToString("#.000000000000");
+                m_textBox02.Text = rot[0, 2].ToString("#.000000000000");
+                m_textBox10.Text = rot[1, 0].ToString("#.000000000000");
+                m_textBox11.Text = rot[1, 1].ToString("#.000000000000");
+                m_textBox12.Text = rot[1, 2].ToString("#.000000000000");
+                m_textBox20.Text = rot[2, 0].ToString("#.000000000000");
+                m_textBox21.Text = rot[2, 1].ToString("#.000000000000");
+                m_textBox22.Text = rot[2, 2].ToString("#.000000000000");
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnNewFunction(object sender, EventArgs e)
+        {
+            m_function = (Functions)m_functionComboBox.SelectedIndex;
+            switch (m_function)
+            {
+                case Functions.Forward:
+                    m_latTextBox.ReadOnly = m_lonTextBox.ReadOnly = m_altTextBox.ReadOnly = false;
+                    m_XTextBox.ReadOnly = m_YTextBox.ReadOnly = m_ZTextBox.ReadOnly = true;
+                    break;
+                case Functions.Reverse:
+                    m_latTextBox.ReadOnly = m_lonTextBox.ReadOnly = m_altTextBox.ReadOnly = true;
+                    m_XTextBox.ReadOnly = m_YTextBox.ReadOnly = m_ZTextBox.ReadOnly = false;
+                    break;
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                LocalCartesian p = new LocalCartesian();
+                p = new LocalCartesian(new Geocentric());
+                p = new LocalCartesian(32.0, -86.0, 45.0);
+                p = new LocalCartesian(32.0, -86.0, 45.0, new Geocentric());
+                double x, y, z, x1, y1, z1;
+                double[,] rot;
+                p.Forward(32.0, -86.0, 45.0, out x, out y, out z, out rot);
+                p.Forward(32.0, -86.0, 45.0, out x1, out y1, out z1);
+                if (x != x1 || y != y1 || z != z1)
+                    throw new Exception("Error in Forward");
+                double lat, lon, alt;
+                p.Reverse(x, y, z, out lat, out lon, out alt, out rot);
+                p.Reverse(x, y, z, out x1, out y1, out z1);
+                if (lat != x1 || lon != y1 || alt != z1)
+                    throw new Exception("Error in Reverse");
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+            MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+    }
+}
diff --git a/dotnet/Projections/LocalCartesianPanel.resx b/dotnet/Projections/LocalCartesianPanel.resx
new file mode 100644
index 0000000..3ec30e0
--- /dev/null
+++ b/dotnet/Projections/LocalCartesianPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/MagneticPanel.Designer.cs b/dotnet/Projections/MagneticPanel.Designer.cs
new file mode 100644
index 0000000..0671e4b
--- /dev/null
+++ b/dotnet/Projections/MagneticPanel.Designer.cs
@@ -0,0 +1,411 @@
+namespace Projections
+{
+    partial class MagneticPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.m_validateButton = new System.Windows.Forms.Button();
+            this.m_dateTextBox = new System.Windows.Forms.TextBox();
+            this.m_descriptionTextBox = new System.Windows.Forms.TextBox();
+            this.m_nameTextBox = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.button1 = new System.Windows.Forms.Button();
+            this.label1 = new System.Windows.Forms.Label();
+            this.m_magneticModelNameTextBox = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.m_timeTextBox = new System.Windows.Forms.TextBox();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_altitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_updateButton = new System.Windows.Forms.Button();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.m_mfXTextBox = new System.Windows.Forms.TextBox();
+            this.m_mfYTextBox = new System.Windows.Forms.TextBox();
+            this.label11 = new System.Windows.Forms.Label();
+            this.label12 = new System.Windows.Forms.Label();
+            this.label13 = new System.Windows.Forms.Label();
+            this.m_mfZTextBox = new System.Windows.Forms.TextBox();
+            this.m_mfdXTextBox = new System.Windows.Forms.TextBox();
+            this.m_mfdYTextBox = new System.Windows.Forms.TextBox();
+            this.m_mfdZTextBox = new System.Windows.Forms.TextBox();
+            this.m_magCircButton = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            //
+            // m_validateButton
+            //
+            this.m_validateButton.Enabled = false;
+            this.m_validateButton.Location = new System.Drawing.Point(182, 126);
+            this.m_validateButton.Name = "m_validateButton";
+            this.m_validateButton.Size = new System.Drawing.Size(75, 23);
+            this.m_validateButton.TabIndex = 37;
+            this.m_validateButton.Text = "Validate";
+            this.m_validateButton.UseVisualStyleBackColor = true;
+            this.m_validateButton.Click += new System.EventHandler(this.OnValidate);
+            //
+            // m_dateTextBox
+            //
+            this.m_dateTextBox.Location = new System.Drawing.Point(82, 100);
+            this.m_dateTextBox.Name = "m_dateTextBox";
+            this.m_dateTextBox.ReadOnly = true;
+            this.m_dateTextBox.Size = new System.Drawing.Size(299, 20);
+            this.m_dateTextBox.TabIndex = 36;
+            //
+            // m_descriptionTextBox
+            //
+            this.m_descriptionTextBox.Location = new System.Drawing.Point(82, 73);
+            this.m_descriptionTextBox.Name = "m_descriptionTextBox";
+            this.m_descriptionTextBox.ReadOnly = true;
+            this.m_descriptionTextBox.Size = new System.Drawing.Size(299, 20);
+            this.m_descriptionTextBox.TabIndex = 35;
+            //
+            // m_nameTextBox
+            //
+            this.m_nameTextBox.Location = new System.Drawing.Point(82, 46);
+            this.m_nameTextBox.Name = "m_nameTextBox";
+            this.m_nameTextBox.ReadOnly = true;
+            this.m_nameTextBox.Size = new System.Drawing.Size(299, 20);
+            this.m_nameTextBox.TabIndex = 34;
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(9, 104);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(30, 13);
+            this.label4.TabIndex = 33;
+            this.label4.Text = "Date";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(9, 77);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(60, 13);
+            this.label3.TabIndex = 32;
+            this.label3.Text = "Description";
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(9, 50);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(35, 13);
+            this.label2.TabIndex = 31;
+            this.label2.Text = "Name";
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(388, 19);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(29, 23);
+            this.button1.TabIndex = 30;
+            this.button1.Text = "...";
+            this.toolTip1.SetToolTip(this.button1, "Select gravity model file");
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnSelectMagneticModel);
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(9, 4);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(83, 13);
+            this.label1.TabIndex = 29;
+            this.label1.Text = "Magnetic Model";
+            //
+            // m_magneticModelNameTextBox
+            //
+            this.m_magneticModelNameTextBox.Location = new System.Drawing.Point(9, 20);
+            this.m_magneticModelNameTextBox.Name = "m_magneticModelNameTextBox";
+            this.m_magneticModelNameTextBox.Size = new System.Drawing.Size(377, 20);
+            this.m_magneticModelNameTextBox.TabIndex = 28;
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(429, 8);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(64, 13);
+            this.label5.TabIndex = 38;
+            this.label5.Text = "Time (years)";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(429, 34);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(101, 13);
+            this.label6.TabIndex = 39;
+            this.label6.Text = "Longitude (degrees)";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(429, 60);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(92, 13);
+            this.label7.TabIndex = 40;
+            this.label7.Text = "Latitude (degrees)";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(429, 86);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(82, 13);
+            this.label8.TabIndex = 41;
+            this.label8.Text = "Altitude (meters)";
+            //
+            // m_timeTextBox
+            //
+            this.m_timeTextBox.Location = new System.Drawing.Point(544, 4);
+            this.m_timeTextBox.Name = "m_timeTextBox";
+            this.m_timeTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_timeTextBox.TabIndex = 42;
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(544, 30);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_longitudeTextBox.TabIndex = 43;
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(544, 56);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_latitudeTextBox.TabIndex = 44;
+            //
+            // m_altitudeTextBox
+            //
+            this.m_altitudeTextBox.Location = new System.Drawing.Point(544, 82);
+            this.m_altitudeTextBox.Name = "m_altitudeTextBox";
+            this.m_altitudeTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_altitudeTextBox.TabIndex = 45;
+            //
+            // m_updateButton
+            //
+            this.m_updateButton.Enabled = false;
+            this.m_updateButton.Location = new System.Drawing.Point(566, 108);
+            this.m_updateButton.Name = "m_updateButton";
+            this.m_updateButton.Size = new System.Drawing.Size(75, 23);
+            this.m_updateButton.TabIndex = 46;
+            this.m_updateButton.Text = "Update";
+            this.m_updateButton.UseVisualStyleBackColor = true;
+            this.m_updateButton.Click += new System.EventHandler(this.OnUpdate);
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(709, 8);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(76, 13);
+            this.label9.TabIndex = 47;
+            this.label9.Text = "Magnetic Field";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(814, 8);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(116, 13);
+            this.label10.TabIndex = 48;
+            this.label10.Text = "Magnetic Field Change";
+            //
+            // m_mfXTextBox
+            //
+            this.m_mfXTextBox.Location = new System.Drawing.Point(688, 30);
+            this.m_mfXTextBox.Name = "m_mfXTextBox";
+            this.m_mfXTextBox.ReadOnly = true;
+            this.m_mfXTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_mfXTextBox.TabIndex = 49;
+            //
+            // m_mfYTextBox
+            //
+            this.m_mfYTextBox.Location = new System.Drawing.Point(688, 56);
+            this.m_mfYTextBox.Name = "m_mfYTextBox";
+            this.m_mfYTextBox.ReadOnly = true;
+            this.m_mfYTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_mfYTextBox.TabIndex = 50;
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(668, 34);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(14, 13);
+            this.label11.TabIndex = 51;
+            this.label11.Text = "X";
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(668, 60);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(14, 13);
+            this.label12.TabIndex = 52;
+            this.label12.Text = "Y";
+            //
+            // label13
+            //
+            this.label13.AutoSize = true;
+            this.label13.Location = new System.Drawing.Point(668, 86);
+            this.label13.Name = "label13";
+            this.label13.Size = new System.Drawing.Size(14, 13);
+            this.label13.TabIndex = 53;
+            this.label13.Text = "Z";
+            //
+            // m_mfZTextBox
+            //
+            this.m_mfZTextBox.Location = new System.Drawing.Point(688, 82);
+            this.m_mfZTextBox.Name = "m_mfZTextBox";
+            this.m_mfZTextBox.ReadOnly = true;
+            this.m_mfZTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_mfZTextBox.TabIndex = 54;
+            //
+            // m_mfdXTextBox
+            //
+            this.m_mfdXTextBox.Location = new System.Drawing.Point(813, 30);
+            this.m_mfdXTextBox.Name = "m_mfdXTextBox";
+            this.m_mfdXTextBox.ReadOnly = true;
+            this.m_mfdXTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_mfdXTextBox.TabIndex = 55;
+            //
+            // m_mfdYTextBox
+            //
+            this.m_mfdYTextBox.Location = new System.Drawing.Point(813, 56);
+            this.m_mfdYTextBox.Name = "m_mfdYTextBox";
+            this.m_mfdYTextBox.ReadOnly = true;
+            this.m_mfdYTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_mfdYTextBox.TabIndex = 56;
+            //
+            // m_mfdZTextBox
+            //
+            this.m_mfdZTextBox.Location = new System.Drawing.Point(813, 82);
+            this.m_mfdZTextBox.Name = "m_mfdZTextBox";
+            this.m_mfdZTextBox.ReadOnly = true;
+            this.m_mfdZTextBox.Size = new System.Drawing.Size(118, 20);
+            this.m_mfdZTextBox.TabIndex = 57;
+            //
+            // m_magCircButton
+            //
+            this.m_magCircButton.Enabled = false;
+            this.m_magCircButton.Location = new System.Drawing.Point(712, 108);
+            this.m_magCircButton.Name = "m_magCircButton";
+            this.m_magCircButton.Size = new System.Drawing.Size(197, 23);
+            this.m_magCircButton.TabIndex = 58;
+            this.m_magCircButton.Text = "Use MagneticCircle to update Field";
+            this.m_magCircButton.UseVisualStyleBackColor = true;
+            this.m_magCircButton.Click += new System.EventHandler(this.OnMagneticCircle);
+            //
+            // MagneticPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.m_magCircButton);
+            this.Controls.Add(this.m_mfdZTextBox);
+            this.Controls.Add(this.m_mfdYTextBox);
+            this.Controls.Add(this.m_mfdXTextBox);
+            this.Controls.Add(this.m_mfZTextBox);
+            this.Controls.Add(this.label13);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.m_mfYTextBox);
+            this.Controls.Add(this.m_mfXTextBox);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.m_updateButton);
+            this.Controls.Add(this.m_altitudeTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.m_longitudeTextBox);
+            this.Controls.Add(this.m_timeTextBox);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.m_validateButton);
+            this.Controls.Add(this.m_dateTextBox);
+            this.Controls.Add(this.m_descriptionTextBox);
+            this.Controls.Add(this.m_nameTextBox);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.m_magneticModelNameTextBox);
+            this.Name = "MagneticPanel";
+            this.Size = new System.Drawing.Size(984, 428);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolTip toolTip1;
+        private System.Windows.Forms.Button m_validateButton;
+        private System.Windows.Forms.TextBox m_dateTextBox;
+        private System.Windows.Forms.TextBox m_descriptionTextBox;
+        private System.Windows.Forms.TextBox m_nameTextBox;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox m_magneticModelNameTextBox;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.TextBox m_timeTextBox;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_altitudeTextBox;
+        private System.Windows.Forms.Button m_updateButton;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.TextBox m_mfXTextBox;
+        private System.Windows.Forms.TextBox m_mfYTextBox;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.Label label13;
+        private System.Windows.Forms.TextBox m_mfZTextBox;
+        private System.Windows.Forms.TextBox m_mfdXTextBox;
+        private System.Windows.Forms.TextBox m_mfdYTextBox;
+        private System.Windows.Forms.TextBox m_mfdZTextBox;
+        private System.Windows.Forms.Button m_magCircButton;
+    }
+}
diff --git a/dotnet/Projections/MagneticPanel.cs b/dotnet/Projections/MagneticPanel.cs
new file mode 100644
index 0000000..6531265
--- /dev/null
+++ b/dotnet/Projections/MagneticPanel.cs
@@ -0,0 +1,145 @@
+/**
+ * \file NETGeographicLib\MagneticPanel.cs
+ * \brief NETGeographicLib.MagneticModel example
+ *
+ * NETGeographicLib.MagneticModel and
+ * NETGeographicLib.MagneticCircle example.
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class MagneticPanel : UserControl
+    {
+        string m_path, m_name;
+        MagneticModel m_magnetic = null;
+
+        public MagneticPanel()
+        {
+            InitializeComponent();
+        }
+
+        private void OnSelectMagneticModel(object sender, EventArgs e)
+        {
+            OpenFileDialog dlg = new OpenFileDialog();
+            dlg.Filter = "Magnetic Model (*.wmm)|*.wmm";
+            dlg.DefaultExt = "wmm";
+
+            if (dlg.ShowDialog() == DialogResult.Cancel) return;
+
+            m_path = dlg.FileName.Substring(0, dlg.FileName.LastIndexOf('\\')).Replace('\\', '/');
+            int length = dlg.FileName.LastIndexOf('.') - dlg.FileName.LastIndexOf('\\') - 1;
+            m_name = dlg.FileName.Substring(dlg.FileName.LastIndexOf('\\') + 1, length);
+
+            try
+            {
+                m_magnetic = new MagneticModel(m_name, m_path);
+                m_magneticModelNameTextBox.Text = dlg.FileName;
+                m_nameTextBox.Text = m_magnetic.MagneticModelName;
+                m_descriptionTextBox.Text = m_magnetic.Description;
+                m_dateTextBox.Text = m_magnetic.DateTime;
+                m_updateButton.Enabled = true;
+                m_magCircButton.Enabled = true;
+                m_validateButton.Enabled = true;
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+
+        }
+
+        private void OnUpdate(object sender, EventArgs e)
+        {
+            try
+            {
+                double time = Double.Parse(m_timeTextBox.Text);
+                double lon = Double.Parse(m_longitudeTextBox.Text);
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double alt = Double.Parse(m_altitudeTextBox.Text);
+
+                double bx, by, bz, bxt, byt, bzt;
+                m_magnetic.Field(time, lat, lon, alt, out bx, out by, out bz, out bxt, out byt, out bzt);
+                m_mfXTextBox.Text = bx.ToString();
+                m_mfYTextBox.Text = by.ToString();
+                m_mfZTextBox.Text = bz.ToString();
+                m_mfdXTextBox.Text = bxt.ToString();
+                m_mfdYTextBox.Text = byt.ToString();
+                m_mfdZTextBox.Text = bzt.ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnMagneticCircle(object sender, EventArgs e)
+        {
+            try
+            {
+                double time = Double.Parse(m_timeTextBox.Text);
+                double lon = Double.Parse(m_longitudeTextBox.Text);
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double alt = Double.Parse(m_altitudeTextBox.Text);
+
+                double bx, by, bz, bxt, byt, bzt;
+                MagneticCircle mc = m_magnetic.Circle(time, lat, alt);
+                mc.Field(lon, out bx, out by, out bz, out bxt, out byt, out bzt);
+                m_mfXTextBox.Text = bx.ToString();
+                m_mfYTextBox.Text = by.ToString();
+                m_mfZTextBox.Text = bz.ToString();
+                m_mfdXTextBox.Text = bxt.ToString();
+                m_mfdYTextBox.Text = byt.ToString();
+                m_mfdZTextBox.Text = bzt.ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                double bx, by, bz, bxt, byt, bzt, x, y, z;
+                double time = 1.0;
+                double lon = -86.0;
+                double lat = 32.0;
+                double alt = 30.0;
+
+                MagneticModel mag = new MagneticModel(m_name, m_path, new Geocentric());
+                mag = new MagneticModel(m_name, m_path);
+                mag.Field(time, lat, lon, alt, out bx, out by, out bz, out bxt, out byt, out bzt);
+                mag.Field(time, lat, lon, alt, out x, out y, out z);
+                if (bx != x || by != y || bz != z)
+                    throw new Exception("Error in MagneticField.Field");
+                MagneticCircle mc = mag.Circle(time, lat, alt);
+                mc.Field(lon, out bx, out by, out bz);
+                mc.Field(lon, out x, out y, out z, out bxt, out byt, out bzt);
+                if (bx != x || by != y || bz != z )
+                    throw new Exception("Error in MagneticCircle.Field (2)");
+
+                MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/MagneticPanel.resx b/dotnet/Projections/MagneticPanel.resx
new file mode 100644
index 0000000..749de3c
--- /dev/null
+++ b/dotnet/Projections/MagneticPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/MiscPanel.Designer.cs b/dotnet/Projections/MiscPanel.Designer.cs
new file mode 100644
index 0000000..fda7666
--- /dev/null
+++ b/dotnet/Projections/MiscPanel.Designer.cs
@@ -0,0 +1,212 @@
+namespace Projections
+{
+    partial class MiscPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.m_toolTip = new System.Windows.Forms.ToolTip(this.components);
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.m_longitudeDMSTextBox = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.m_latitudeDMSTextBox = new System.Windows.Forms.TextBox();
+            this.m_LongitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_geohashTextBox = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.button3 = new System.Windows.Forms.Button();
+            this.button4 = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(13, 33);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(54, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Longitude";
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(120, 4);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(31, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "DMS";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(229, 4);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(88, 13);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "Decimal Degrees";
+            //
+            // m_longitudeDMSTextBox
+            //
+            this.m_longitudeDMSTextBox.Location = new System.Drawing.Point(86, 29);
+            this.m_longitudeDMSTextBox.Name = "m_longitudeDMSTextBox";
+            this.m_longitudeDMSTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_longitudeDMSTextBox.TabIndex = 3;
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(13, 63);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(45, 13);
+            this.label4.TabIndex = 4;
+            this.label4.Text = "Latitude";
+            //
+            // m_latitudeDMSTextBox
+            //
+            this.m_latitudeDMSTextBox.Location = new System.Drawing.Point(86, 56);
+            this.m_latitudeDMSTextBox.Name = "m_latitudeDMSTextBox";
+            this.m_latitudeDMSTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_latitudeDMSTextBox.TabIndex = 5;
+            //
+            // m_LongitudeTextBox
+            //
+            this.m_LongitudeTextBox.Location = new System.Drawing.Point(203, 29);
+            this.m_LongitudeTextBox.Name = "m_LongitudeTextBox";
+            this.m_LongitudeTextBox.Size = new System.Drawing.Size(137, 20);
+            this.m_LongitudeTextBox.TabIndex = 6;
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(203, 55);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(137, 20);
+            this.m_latitudeTextBox.TabIndex = 7;
+            //
+            // m_geohashTextBox
+            //
+            this.m_geohashTextBox.Location = new System.Drawing.Point(360, 43);
+            this.m_geohashTextBox.Name = "m_geohashTextBox";
+            this.m_geohashTextBox.Size = new System.Drawing.Size(155, 20);
+            this.m_geohashTextBox.TabIndex = 8;
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(409, 4);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(50, 13);
+            this.label5.TabIndex = 9;
+            this.label5.Text = "Geohash";
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(96, 83);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 10;
+            this.button1.Text = "Convert ->";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnConvertDMS);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(229, 83);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(85, 23);
+            this.button2.TabIndex = 11;
+            this.button2.Text = "<- Convert ->";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnConvert);
+            //
+            // button3
+            //
+            this.button3.Location = new System.Drawing.Point(400, 83);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(75, 23);
+            this.button3.TabIndex = 12;
+            this.button3.Text = "<- Convert";
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.OnConvertGeohash);
+            //
+            // button4
+            //
+            this.button4.Location = new System.Drawing.Point(541, 4);
+            this.button4.Name = "button4";
+            this.button4.Size = new System.Drawing.Size(75, 23);
+            this.button4.TabIndex = 13;
+            this.button4.Text = "Validate";
+            this.button4.UseVisualStyleBackColor = true;
+            this.button4.Click += new System.EventHandler(this.OnValidate);
+            //
+            // MiscPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.button4);
+            this.Controls.Add(this.button3);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.m_geohashTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.m_LongitudeTextBox);
+            this.Controls.Add(this.m_latitudeDMSTextBox);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.m_longitudeDMSTextBox);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Name = "MiscPanel";
+            this.Size = new System.Drawing.Size(977, 389);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolTip m_toolTip;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox m_longitudeDMSTextBox;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox m_latitudeDMSTextBox;
+        private System.Windows.Forms.TextBox m_LongitudeTextBox;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_geohashTextBox;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Button button3;
+        private System.Windows.Forms.Button button4;
+    }
+}
diff --git a/dotnet/Projections/MiscPanel.cs b/dotnet/Projections/MiscPanel.cs
new file mode 100644
index 0000000..0fcb990
--- /dev/null
+++ b/dotnet/Projections/MiscPanel.cs
@@ -0,0 +1,118 @@
+/**
+ * \file NETGeographicLib\MiscPanel.cs
+ * \brief NETGeographicLib.DMS and NETGeographicLib.Geohash example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class MiscPanel : UserControl
+    {
+        public MiscPanel()
+        {
+            InitializeComponent();
+        }
+
+        private void OnConvertDMS(object sender, EventArgs e)
+        {
+            try
+            {
+                DMS.Flag ind;
+                double lon = DMS.Decode(m_longitudeDMSTextBox.Text, out ind);
+                m_LongitudeTextBox.Text = lon.ToString();
+                double lat = DMS.Decode(m_latitudeDMSTextBox.Text, out ind);
+                m_latitudeTextBox.Text = lat.ToString();
+                string tmp = "";
+                Geohash.Forward(lat, lon, 12, out tmp);
+                m_geohashTextBox.Text = tmp;
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnConvert(object sender, EventArgs e)
+        {
+            try
+            {
+                double lon = Double.Parse(m_LongitudeTextBox.Text);
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                m_longitudeDMSTextBox.Text = DMS.Encode(lon, 5, DMS.Flag.LONGITUDE, 0);
+                m_latitudeDMSTextBox.Text = DMS.Encode(lat, 5, DMS.Flag.LATITUDE, 0);
+                string tmp = "";
+                Geohash.Forward(lat, lon, 12, out tmp);
+                m_geohashTextBox.Text = tmp;
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnConvertGeohash(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat, lon;
+                int len;
+                Geohash.Reverse(m_geohashTextBox.Text, out lat, out lon, out len, true);
+                m_LongitudeTextBox.Text = lon.ToString();
+                m_latitudeTextBox.Text = lat.ToString();
+                m_longitudeDMSTextBox.Text = DMS.Encode(lon, 5, DMS.Flag.LONGITUDE, 0);
+                m_latitudeDMSTextBox.Text = DMS.Encode(lat, 5, DMS.Flag.LATITUDE, 0);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat, lon, d, m, s;
+                DMS.Flag ind;
+                int len;
+                string tmp;
+                DMS.Decode("34.245");
+                DMS.Decode("34d22\'34.567\"", out ind);
+                DMS.Decode(-86.0, 32.0, 34.214);
+                DMS.DecodeAngle("-67.4532");
+                DMS.DecodeAzimuth("85.3245W");
+                DMS.DecodeLatLon("86d34\'24.5621\"", "21d56\'32.1234\"", out lat, out lon, false);
+                DMS.Encode(-86.453214, out d, out m);
+                DMS.Encode(-86.453214, out d, out m, out s);
+                DMS.Encode(-86.453214, DMS.Component.SECOND, 12, DMS.Flag.LONGITUDE, 0);
+                DMS.Encode(-86.453214, 12, DMS.Flag.LONGITUDE, 0);
+                Geohash.DecimalPrecision(12);
+                Geohash.Forward(31.23456, -86.43678, 12, out tmp);
+                Geohash.GeohashLength(0.001);
+                Geohash.GeohashLength(0.002, 0.003);
+                Geohash.LatitudeResolution(12);
+                Geohash.LongitudeResolution(12);
+                Geohash.Reverse("djds54mrfc0g", out lat, out lon, out len, true);
+                MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/MiscPanel.resx b/dotnet/Projections/MiscPanel.resx
new file mode 100644
index 0000000..3ec30e0
--- /dev/null
+++ b/dotnet/Projections/MiscPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/PolarStereoPanel.Designer.cs b/dotnet/Projections/PolarStereoPanel.Designer.cs
new file mode 100644
index 0000000..e3b06d3
--- /dev/null
+++ b/dotnet/Projections/PolarStereoPanel.Designer.cs
@@ -0,0 +1,349 @@
+namespace Projections
+{
+    partial class PolarStereoPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.m_setButton = new System.Windows.Forms.Button();
+            this.m_flatteningTextBox = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.m_majorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.m_scaleTextBox = new System.Windows.Forms.TextBox();
+            this.m_toolTip = new System.Windows.Forms.ToolTip(this.components);
+            this.m_northPoleCheckBox = new System.Windows.Forms.CheckBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_xTextBox = new System.Windows.Forms.TextBox();
+            this.m_yTextBox = new System.Windows.Forms.TextBox();
+            this.m_gammaTextBox = new System.Windows.Forms.TextBox();
+            this.m_kTextBox = new System.Windows.Forms.TextBox();
+            this.label10 = new System.Windows.Forms.Label();
+            this.m_functionComboBox = new System.Windows.Forms.ComboBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            //
+            // groupBox1
+            //
+            this.groupBox1.Controls.Add(this.m_scaleTextBox);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Controls.Add(this.m_setButton);
+            this.groupBox1.Controls.Add(this.m_flatteningTextBox);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.m_majorRadiusTextBox);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Location = new System.Drawing.Point(3, 3);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(146, 184);
+            this.groupBox1.TabIndex = 20;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Ellipsoid Parameters";
+            //
+            // m_setButton
+            //
+            this.m_setButton.Location = new System.Drawing.Point(15, 153);
+            this.m_setButton.Name = "m_setButton";
+            this.m_setButton.Size = new System.Drawing.Size(75, 23);
+            this.m_setButton.TabIndex = 4;
+            this.m_setButton.Text = "Set";
+            this.m_toolTip.SetToolTip(this.m_setButton, "Sets parameters");
+            this.m_setButton.UseVisualStyleBackColor = true;
+            this.m_setButton.Click += new System.EventHandler(this.OnSet);
+            //
+            // m_flatteningTextBox
+            //
+            this.m_flatteningTextBox.Location = new System.Drawing.Point(12, 83);
+            this.m_flatteningTextBox.Name = "m_flatteningTextBox";
+            this.m_flatteningTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_flatteningTextBox.TabIndex = 3;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 25);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(109, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Major Radius (meters)";
+            //
+            // m_majorRadiusTextBox
+            //
+            this.m_majorRadiusTextBox.Location = new System.Drawing.Point(12, 42);
+            this.m_majorRadiusTextBox.Name = "m_majorRadiusTextBox";
+            this.m_majorRadiusTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_majorRadiusTextBox.TabIndex = 2;
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(12, 66);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Flattening";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(12, 110);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(103, 13);
+            this.label3.TabIndex = 5;
+            this.label3.Text = "Central Scale Factor";
+            //
+            // m_scaleTextBox
+            //
+            this.m_scaleTextBox.Location = new System.Drawing.Point(12, 127);
+            this.m_scaleTextBox.Name = "m_scaleTextBox";
+            this.m_scaleTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_scaleTextBox.TabIndex = 6;
+            //
+            // m_northPoleCheckBox
+            //
+            this.m_northPoleCheckBox.AutoSize = true;
+            this.m_northPoleCheckBox.Checked = true;
+            this.m_northPoleCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.m_northPoleCheckBox.Location = new System.Drawing.Point(161, 4);
+            this.m_northPoleCheckBox.Name = "m_northPoleCheckBox";
+            this.m_northPoleCheckBox.Size = new System.Drawing.Size(76, 17);
+            this.m_northPoleCheckBox.TabIndex = 21;
+            this.m_northPoleCheckBox.Text = "North Pole";
+            this.m_toolTip.SetToolTip(this.m_northPoleCheckBox, "checked = Noth Pole, uncheck = South Pole");
+            this.m_northPoleCheckBox.UseVisualStyleBackColor = true;
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(161, 28);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(92, 13);
+            this.label4.TabIndex = 22;
+            this.label4.Text = "Latitude (degrees)";
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(161, 55);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(101, 13);
+            this.label5.TabIndex = 23;
+            this.label5.Text = "Longitude (degrees)";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(161, 81);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(54, 13);
+            this.label6.TabIndex = 24;
+            this.label6.Text = "X (meters)";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(161, 107);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(54, 13);
+            this.label7.TabIndex = 25;
+            this.label7.Text = "Y (meters)";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(161, 133);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(90, 13);
+            this.label8.TabIndex = 26;
+            this.label8.Text = "Gamma (degrees)";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(161, 159);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(34, 13);
+            this.label9.TabIndex = 27;
+            this.label9.Text = "Scale";
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(274, 25);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(120, 20);
+            this.m_latitudeTextBox.TabIndex = 28;
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(274, 51);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(120, 20);
+            this.m_longitudeTextBox.TabIndex = 29;
+            //
+            // m_xTextBox
+            //
+            this.m_xTextBox.Location = new System.Drawing.Point(274, 77);
+            this.m_xTextBox.Name = "m_xTextBox";
+            this.m_xTextBox.Size = new System.Drawing.Size(120, 20);
+            this.m_xTextBox.TabIndex = 30;
+            //
+            // m_yTextBox
+            //
+            this.m_yTextBox.Location = new System.Drawing.Point(274, 103);
+            this.m_yTextBox.Name = "m_yTextBox";
+            this.m_yTextBox.Size = new System.Drawing.Size(120, 20);
+            this.m_yTextBox.TabIndex = 31;
+            //
+            // m_gammaTextBox
+            //
+            this.m_gammaTextBox.Location = new System.Drawing.Point(274, 129);
+            this.m_gammaTextBox.Name = "m_gammaTextBox";
+            this.m_gammaTextBox.ReadOnly = true;
+            this.m_gammaTextBox.Size = new System.Drawing.Size(120, 20);
+            this.m_gammaTextBox.TabIndex = 32;
+            //
+            // m_kTextBox
+            //
+            this.m_kTextBox.Location = new System.Drawing.Point(274, 155);
+            this.m_kTextBox.Name = "m_kTextBox";
+            this.m_kTextBox.ReadOnly = true;
+            this.m_kTextBox.Size = new System.Drawing.Size(120, 20);
+            this.m_kTextBox.TabIndex = 33;
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(411, 4);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(48, 13);
+            this.label10.TabIndex = 34;
+            this.label10.Text = "Function";
+            //
+            // m_functionComboBox
+            //
+            this.m_functionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_functionComboBox.FormattingEnabled = true;
+            this.m_functionComboBox.Items.AddRange(new object[] {
+            "Forward",
+            "Reverse"});
+            this.m_functionComboBox.Location = new System.Drawing.Point(414, 25);
+            this.m_functionComboBox.Name = "m_functionComboBox";
+            this.m_functionComboBox.Size = new System.Drawing.Size(75, 21);
+            this.m_functionComboBox.TabIndex = 35;
+            this.m_functionComboBox.SelectedIndexChanged += new System.EventHandler(this.OnFunction);
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(414, 53);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 36;
+            this.button1.Text = "Convert";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnConvert);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(414, 155);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 37;
+            this.button2.Text = "Validate";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnValidate);
+            //
+            // PolarStereoPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.m_functionComboBox);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.m_kTextBox);
+            this.Controls.Add(this.m_gammaTextBox);
+            this.Controls.Add(this.m_yTextBox);
+            this.Controls.Add(this.m_xTextBox);
+            this.Controls.Add(this.m_longitudeTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.m_northPoleCheckBox);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "PolarStereoPanel";
+            this.Size = new System.Drawing.Size(779, 299);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Button m_setButton;
+        private System.Windows.Forms.TextBox m_flatteningTextBox;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox m_majorRadiusTextBox;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox m_scaleTextBox;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.ToolTip m_toolTip;
+        private System.Windows.Forms.CheckBox m_northPoleCheckBox;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.TextBox m_xTextBox;
+        private System.Windows.Forms.TextBox m_yTextBox;
+        private System.Windows.Forms.TextBox m_gammaTextBox;
+        private System.Windows.Forms.TextBox m_kTextBox;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.ComboBox m_functionComboBox;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button button2;
+    }
+}
diff --git a/dotnet/Projections/PolarStereoPanel.cs b/dotnet/Projections/PolarStereoPanel.cs
new file mode 100644
index 0000000..655a04f
--- /dev/null
+++ b/dotnet/Projections/PolarStereoPanel.cs
@@ -0,0 +1,130 @@
+/**
+ * \file NETGeographicLib\PolarStereoPanel.cs
+ * \brief NETGeographicLib.PolarStereographic example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class PolarStereoPanel : UserControl
+    {
+        PolarStereographic m_polar = null;
+
+        public PolarStereoPanel()
+        {
+            InitializeComponent();
+            try
+            {
+                m_polar = new PolarStereographic();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            m_majorRadiusTextBox.Text = m_polar.MajorRadius.ToString();
+            m_flatteningTextBox.Text = m_polar.Flattening.ToString();
+            m_scaleTextBox.Text = m_polar.CentralScale.ToString();
+            m_functionComboBox.SelectedIndex = 0;
+        }
+
+        private void OnSet(object sender, EventArgs e)
+        {
+            try
+            {
+                double a = Double.Parse(m_majorRadiusTextBox.Text);
+                double f = Double.Parse(m_flatteningTextBox.Text);
+                double k = Double.Parse(m_scaleTextBox.Text);
+                m_polar = new PolarStereographic(a, f, k);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnFunction(object sender, EventArgs e)
+        {
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    m_latitudeTextBox.ReadOnly = m_longitudeTextBox.ReadOnly = false;
+                    m_xTextBox.ReadOnly = m_yTextBox.ReadOnly = true;
+                    break;
+                case 1:
+                    m_latitudeTextBox.ReadOnly = m_longitudeTextBox.ReadOnly = true;
+                    m_xTextBox.ReadOnly = m_yTextBox.ReadOnly = false;
+                    break;
+            }
+        }
+
+        private void OnConvert(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, gamma = 0.0, k = 0.0;
+                switch (m_functionComboBox.SelectedIndex)
+                {
+                    case 0:
+                        lat = Double.Parse(m_latitudeTextBox.Text);
+                        lon = Double.Parse(m_longitudeTextBox.Text);
+                        m_polar.Forward(m_northPoleCheckBox.Checked, lat, lon, out x, out y, out gamma, out k);
+                        m_xTextBox.Text = x.ToString();
+                        m_yTextBox.Text = y.ToString();
+                        break;
+                    case 1:
+                        x = Double.Parse(m_xTextBox.Text);
+                        y = Double.Parse(m_yTextBox.Text);
+                        m_polar.Reverse(m_northPoleCheckBox.Checked, x, y, out lat, out lon, out gamma, out k);
+                        m_latitudeTextBox.Text = lat.ToString();
+                        m_longitudeTextBox.Text = lon.ToString();
+                        break;
+                }
+                m_gammaTextBox.Text = gamma.ToString();
+                m_kTextBox.Text = k.ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat, lon, x, y, x1, y1, gamma, k;
+                PolarStereographic p = new PolarStereographic(m_polar.MajorRadius, m_polar.Flattening, m_polar.CentralScale);
+                p.SetScale(60.0, 1.0);
+                p = new PolarStereographic();
+                p.Forward(true, 32.0, -86.0, out x, out y, out gamma, out k);
+                p.Forward(true, 32.0, -86.0, out x1, out y1);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in Forward");
+                p.Reverse(true, x, y, out lat, out lon, out gamma, out k);
+                p.Reverse(true, x, y, out x1, out y1);
+                if ( lat != x1 || lon != y1 )
+                    throw new Exception("Error in Reverse");
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+            MessageBox.Show("No errors detected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+    }
+}
diff --git a/dotnet/Projections/PolarStereoPanel.resx b/dotnet/Projections/PolarStereoPanel.resx
new file mode 100644
index 0000000..338d70e
--- /dev/null
+++ b/dotnet/Projections/PolarStereoPanel.resx
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/PolyPanel.Designer.cs b/dotnet/Projections/PolyPanel.Designer.cs
new file mode 100644
index 0000000..3b2677a
--- /dev/null
+++ b/dotnet/Projections/PolyPanel.Designer.cs
@@ -0,0 +1,389 @@
+namespace Projections
+{
+    partial class PolyPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.m_setButton = new System.Windows.Forms.Button();
+            this.m_flatteningTextBox = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.m_majorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.m_azimuthTextBox = new System.Windows.Forms.TextBox();
+            this.m_distanceTextBox = new System.Windows.Forms.TextBox();
+            this.m_edgeButton = new System.Windows.Forms.Button();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.m_numPointsTextBox = new System.Windows.Forms.TextBox();
+            this.m_currLatTextBox = new System.Windows.Forms.TextBox();
+            this.m_currLonTextBox = new System.Windows.Forms.TextBox();
+            this.m_lengthTextBox = new System.Windows.Forms.TextBox();
+            this.m_areaTextBox = new System.Windows.Forms.TextBox();
+            this.button2 = new System.Windows.Forms.Button();
+            this.button3 = new System.Windows.Forms.Button();
+            this.m_polylineCheckBox = new System.Windows.Forms.CheckBox();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            //
+            // groupBox1
+            //
+            this.groupBox1.Controls.Add(this.m_polylineCheckBox);
+            this.groupBox1.Controls.Add(this.m_setButton);
+            this.groupBox1.Controls.Add(this.m_flatteningTextBox);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.m_majorRadiusTextBox);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Location = new System.Drawing.Point(3, 3);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(146, 169);
+            this.groupBox1.TabIndex = 6;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Ellipsoid Parameters";
+            //
+            // m_setButton
+            //
+            this.m_setButton.Location = new System.Drawing.Point(30, 135);
+            this.m_setButton.Name = "m_setButton";
+            this.m_setButton.Size = new System.Drawing.Size(75, 23);
+            this.m_setButton.TabIndex = 4;
+            this.m_setButton.Text = "Set";
+            this.m_setButton.UseVisualStyleBackColor = true;
+            this.m_setButton.Click += new System.EventHandler(this.OnSet);
+            //
+            // m_flatteningTextBox
+            //
+            this.m_flatteningTextBox.Location = new System.Drawing.Point(12, 83);
+            this.m_flatteningTextBox.Name = "m_flatteningTextBox";
+            this.m_flatteningTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_flatteningTextBox.TabIndex = 3;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 25);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(109, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Major Radius (meters)";
+            //
+            // m_majorRadiusTextBox
+            //
+            this.m_majorRadiusTextBox.Location = new System.Drawing.Point(12, 42);
+            this.m_majorRadiusTextBox.Name = "m_majorRadiusTextBox";
+            this.m_majorRadiusTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_majorRadiusTextBox.TabIndex = 2;
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(12, 66);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Flattening";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(154, 10);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(92, 13);
+            this.label3.TabIndex = 7;
+            this.label3.Text = "Latitude (degrees)";
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(154, 36);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(101, 13);
+            this.label4.TabIndex = 8;
+            this.label4.Text = "Longitude (degrees)";
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(263, 6);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(127, 20);
+            this.m_latitudeTextBox.TabIndex = 9;
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(263, 32);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(127, 20);
+            this.m_longitudeTextBox.TabIndex = 10;
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(289, 60);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 11;
+            this.button1.Text = "Add Point";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnAddPoint);
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(400, 8);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(91, 13);
+            this.label5.TabIndex = 12;
+            this.label5.Text = "Azimuth (degrees)";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(400, 34);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(89, 13);
+            this.label6.TabIndex = 13;
+            this.label6.Text = "Distance (meters)";
+            //
+            // m_azimuthTextBox
+            //
+            this.m_azimuthTextBox.Location = new System.Drawing.Point(495, 4);
+            this.m_azimuthTextBox.Name = "m_azimuthTextBox";
+            this.m_azimuthTextBox.Size = new System.Drawing.Size(127, 20);
+            this.m_azimuthTextBox.TabIndex = 14;
+            //
+            // m_distanceTextBox
+            //
+            this.m_distanceTextBox.Location = new System.Drawing.Point(495, 30);
+            this.m_distanceTextBox.Name = "m_distanceTextBox";
+            this.m_distanceTextBox.Size = new System.Drawing.Size(127, 20);
+            this.m_distanceTextBox.TabIndex = 15;
+            //
+            // m_edgeButton
+            //
+            this.m_edgeButton.Enabled = false;
+            this.m_edgeButton.Location = new System.Drawing.Point(515, 58);
+            this.m_edgeButton.Name = "m_edgeButton";
+            this.m_edgeButton.Size = new System.Drawing.Size(75, 23);
+            this.m_edgeButton.TabIndex = 16;
+            this.m_edgeButton.Text = "Add Edge";
+            this.m_edgeButton.UseVisualStyleBackColor = true;
+            this.m_edgeButton.Click += new System.EventHandler(this.OnAddEdge);
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(634, 8);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(87, 13);
+            this.label7.TabIndex = 17;
+            this.label7.Text = "Number of points";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(634, 34);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(82, 13);
+            this.label8.TabIndex = 18;
+            this.label8.Text = "Current Latitude";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(634, 61);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(91, 13);
+            this.label9.TabIndex = 19;
+            this.label9.Text = "Current Longitude";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(634, 89);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(40, 13);
+            this.label10.TabIndex = 20;
+            this.label10.Text = "Length";
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(634, 116);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(29, 13);
+            this.label11.TabIndex = 21;
+            this.label11.Text = "Area";
+            //
+            // m_numPointsTextBox
+            //
+            this.m_numPointsTextBox.Location = new System.Drawing.Point(729, 4);
+            this.m_numPointsTextBox.Name = "m_numPointsTextBox";
+            this.m_numPointsTextBox.ReadOnly = true;
+            this.m_numPointsTextBox.Size = new System.Drawing.Size(127, 20);
+            this.m_numPointsTextBox.TabIndex = 22;
+            this.m_numPointsTextBox.Text = "0";
+            //
+            // m_currLatTextBox
+            //
+            this.m_currLatTextBox.Location = new System.Drawing.Point(729, 30);
+            this.m_currLatTextBox.Name = "m_currLatTextBox";
+            this.m_currLatTextBox.ReadOnly = true;
+            this.m_currLatTextBox.Size = new System.Drawing.Size(127, 20);
+            this.m_currLatTextBox.TabIndex = 23;
+            //
+            // m_currLonTextBox
+            //
+            this.m_currLonTextBox.Location = new System.Drawing.Point(729, 57);
+            this.m_currLonTextBox.Name = "m_currLonTextBox";
+            this.m_currLonTextBox.ReadOnly = true;
+            this.m_currLonTextBox.Size = new System.Drawing.Size(127, 20);
+            this.m_currLonTextBox.TabIndex = 24;
+            //
+            // m_lengthTextBox
+            //
+            this.m_lengthTextBox.Location = new System.Drawing.Point(729, 85);
+            this.m_lengthTextBox.Name = "m_lengthTextBox";
+            this.m_lengthTextBox.ReadOnly = true;
+            this.m_lengthTextBox.Size = new System.Drawing.Size(127, 20);
+            this.m_lengthTextBox.TabIndex = 25;
+            //
+            // m_areaTextBox
+            //
+            this.m_areaTextBox.Location = new System.Drawing.Point(729, 112);
+            this.m_areaTextBox.Name = "m_areaTextBox";
+            this.m_areaTextBox.ReadOnly = true;
+            this.m_areaTextBox.Size = new System.Drawing.Size(127, 20);
+            this.m_areaTextBox.TabIndex = 26;
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(405, 84);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 27;
+            this.button2.Text = "Clear";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnClear);
+            //
+            // button3
+            //
+            this.button3.Location = new System.Drawing.Point(405, 109);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(75, 23);
+            this.button3.TabIndex = 28;
+            this.button3.Text = "Validate";
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.OnValidate);
+            //
+            // m_polylineCheckBox
+            //
+            this.m_polylineCheckBox.AutoSize = true;
+            this.m_polylineCheckBox.Location = new System.Drawing.Point(15, 112);
+            this.m_polylineCheckBox.Name = "m_polylineCheckBox";
+            this.m_polylineCheckBox.Size = new System.Drawing.Size(62, 17);
+            this.m_polylineCheckBox.TabIndex = 29;
+            this.m_polylineCheckBox.Text = "Polyline";
+            this.m_polylineCheckBox.UseVisualStyleBackColor = true;
+            //
+            // PolyPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.button3);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.m_areaTextBox);
+            this.Controls.Add(this.m_lengthTextBox);
+            this.Controls.Add(this.m_currLonTextBox);
+            this.Controls.Add(this.m_currLatTextBox);
+            this.Controls.Add(this.m_numPointsTextBox);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.m_edgeButton);
+            this.Controls.Add(this.m_distanceTextBox);
+            this.Controls.Add(this.m_azimuthTextBox);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.m_longitudeTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "PolyPanel";
+            this.Size = new System.Drawing.Size(979, 359);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Button m_setButton;
+        private System.Windows.Forms.TextBox m_flatteningTextBox;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox m_majorRadiusTextBox;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.TextBox m_azimuthTextBox;
+        private System.Windows.Forms.TextBox m_distanceTextBox;
+        private System.Windows.Forms.Button m_edgeButton;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.TextBox m_numPointsTextBox;
+        private System.Windows.Forms.TextBox m_currLatTextBox;
+        private System.Windows.Forms.TextBox m_currLonTextBox;
+        private System.Windows.Forms.TextBox m_lengthTextBox;
+        private System.Windows.Forms.TextBox m_areaTextBox;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Button button3;
+        private System.Windows.Forms.CheckBox m_polylineCheckBox;
+    }
+}
diff --git a/dotnet/Projections/PolyPanel.cs b/dotnet/Projections/PolyPanel.cs
new file mode 100644
index 0000000..e50673c
--- /dev/null
+++ b/dotnet/Projections/PolyPanel.cs
@@ -0,0 +1,129 @@
+/**
+ * \file NETGeographicLib\PolyPanel.cs
+ * \brief NETGeographicLib.PolygonArea example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class PolyPanel : UserControl
+    {
+        PolygonArea m_poly = null;
+        public PolyPanel()
+        {
+            InitializeComponent();
+            m_poly = new PolygonArea(false);
+            m_majorRadiusTextBox.Text = m_poly.MajorRadius.ToString();
+            m_flatteningTextBox.Text = m_poly.Flattening.ToString();
+            m_lengthTextBox.Text = m_areaTextBox.Text = m_numPointsTextBox.Text = "0";
+            m_currLatTextBox.Text = m_currLonTextBox.Text = "";
+        }
+
+        private void OnSet(object sender, EventArgs e)
+        {
+            try
+            {
+                double a = Double.Parse(m_majorRadiusTextBox.Text);
+                double f = Double.Parse(m_flatteningTextBox.Text);
+                m_poly = new PolygonArea(new Geodesic(a, f), m_polylineCheckBox.Checked);
+                m_lengthTextBox.Text = m_areaTextBox.Text = m_numPointsTextBox.Text = "0";
+                m_currLatTextBox.Text = m_currLonTextBox.Text = "";
+                m_edgeButton.Enabled = false;
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnAddPoint(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double lon = Double.Parse(m_longitudeTextBox.Text);
+                double length, area;
+
+                m_poly.AddPoint(lat, lon);
+                m_edgeButton.Enabled = true;
+                m_currLatTextBox.Text = m_latitudeTextBox.Text;
+                m_currLonTextBox.Text = m_longitudeTextBox.Text;
+                m_numPointsTextBox.Text = m_poly.Compute(false, false, out length, out area).ToString();
+                m_lengthTextBox.Text = length.ToString();
+                if ( !m_polylineCheckBox.Checked )
+                    m_areaTextBox.Text = area.ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnAddEdge(object sender, EventArgs e)
+        {
+            try
+            {
+                double azi = Double.Parse(m_azimuthTextBox.Text);
+                double dist = Double.Parse(m_distanceTextBox.Text);
+
+                m_poly.AddEdge(azi, dist);
+                double lat, lon, length, area;
+                m_poly.CurrentPoint(out lat, out lon);
+                m_currLatTextBox.Text = lat.ToString();
+                m_currLonTextBox.Text = lon.ToString();
+                m_numPointsTextBox.Text = m_poly.Compute(false, false, out length, out area).ToString();
+                m_lengthTextBox.Text = length.ToString();
+                if (!m_polylineCheckBox.Checked)
+                    m_areaTextBox.Text = area.ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnClear(object sender, EventArgs e)
+        {
+            m_poly.Clear();
+            m_edgeButton.Enabled = false;
+            m_lengthTextBox.Text = m_areaTextBox.Text = m_numPointsTextBox.Text = "0";
+            m_currLatTextBox.Text = m_currLonTextBox.Text = "";
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat, lon, perim, area;
+                PolygonArea pa = new PolygonArea(new Geodesic(50000.0, 0.001), true);
+                pa = new PolygonArea(false);
+                pa.AddPoint(32.0, -86.0);
+                pa.AddEdge(20.0, 10000.0);
+                pa.AddEdge(-45.0, 10000.0);
+                pa.CurrentPoint(out lat, out lon);
+                pa.Compute(false, false, out perim, out area);
+                pa.TestEdge(-70.0, 5000.0, false, false, out perim, out area);
+                pa.TestPoint(31.0, -86.5, false, false, out perim, out area);
+                MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/PolyPanel.resx b/dotnet/Projections/PolyPanel.resx
new file mode 100644
index 0000000..ed0aef9
--- /dev/null
+++ b/dotnet/Projections/PolyPanel.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
diff --git a/dotnet/Projections/Program.cs b/dotnet/Projections/Program.cs
new file mode 100644
index 0000000..87882dc
--- /dev/null
+++ b/dotnet/Projections/Program.cs
@@ -0,0 +1,31 @@
+/**
+ * \file NETGeographicLib\Program.cs
+ * \brief NETGeographicLib application example
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace Projections
+{
+    static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form1());
+        }
+    }
+}
diff --git a/dotnet/Projections/Projections.csproj b/dotnet/Projections/Projections.csproj
new file mode 100644
index 0000000..9dfe2a1
--- /dev/null
+++ b/dotnet/Projections/Projections.csproj
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{74B48389-E1D1-491F-B198-ADD4878C3F2B}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Projections</RootNamespace>
+    <AssemblyName>Projections</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)$(Configuration)\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <PlatformTarget>x64</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)$(Configuration)64\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)$(Configuration)\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <PlatformTarget>x64</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)$(Configuration)64\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AccumPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AccumPanel.Designer.cs">
+      <DependentUpon>AccumPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AlbersPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AlbersPanel.Designer.cs">
+      <DependentUpon>AlbersPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="EllipsoidPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="EllipsoidPanel.Designer.cs">
+      <DependentUpon>EllipsoidPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="EllipticPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="EllipticPanel.Designer.cs">
+      <DependentUpon>EllipticPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="GeocentricPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GeocentricPanel.Designer.cs">
+      <DependentUpon>GeocentricPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="GeodesicPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GeodesicPanel.Designer.cs">
+      <DependentUpon>GeodesicPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="GeoidPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GeoidPanel.Designer.cs">
+      <DependentUpon>GeoidPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="GravityPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GravityPanel.Designer.cs">
+      <DependentUpon>GravityPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LocalCartesianPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LocalCartesianPanel.Designer.cs">
+      <DependentUpon>LocalCartesianPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MagneticPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="MagneticPanel.Designer.cs">
+      <DependentUpon>MagneticPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MiscPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="MiscPanel.Designer.cs">
+      <DependentUpon>MiscPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PolarStereoPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="PolarStereoPanel.Designer.cs">
+      <DependentUpon>PolarStereoPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PolyPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="PolyPanel.Designer.cs">
+      <DependentUpon>PolyPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="ProjectionsPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ProjectionsPanel.Designer.cs">
+      <DependentUpon>ProjectionsPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties/AssemblyInfo.cs" />
+    <Compile Include="SphericalHarmonicsPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SphericalHarmonicsPanel.Designer.cs">
+      <DependentUpon>SphericalHarmonicsPanel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TypeIIIProjPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TypeIIIProjPanel.Designer.cs">
+      <DependentUpon>TypeIIIProjPanel.cs</DependentUpon>
+    </Compile>
+    <EmbeddedResource Include="AccumPanel.resx">
+      <DependentUpon>AccumPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AlbersPanel.resx">
+      <DependentUpon>AlbersPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="EllipsoidPanel.resx">
+      <DependentUpon>EllipsoidPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="EllipticPanel.resx">
+      <DependentUpon>EllipticPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="GeocentricPanel.resx">
+      <DependentUpon>GeocentricPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="GeodesicPanel.resx">
+      <DependentUpon>GeodesicPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="GeoidPanel.resx">
+      <DependentUpon>GeoidPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="GravityPanel.resx">
+      <DependentUpon>GravityPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LocalCartesianPanel.resx">
+      <DependentUpon>LocalCartesianPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MagneticPanel.resx">
+      <DependentUpon>MagneticPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MiscPanel.resx">
+      <DependentUpon>MiscPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="PolarStereoPanel.resx">
+      <DependentUpon>PolarStereoPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="PolyPanel.resx">
+      <DependentUpon>PolyPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ProjectionsPanel.resx">
+      <DependentUpon>ProjectionsPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties/Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties/Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <EmbeddedResource Include="SphericalHarmonicsPanel.resx">
+      <DependentUpon>SphericalHarmonicsPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="TypeIIIProjPanel.resx">
+      <DependentUpon>TypeIIIProjPanel.cs</DependentUpon>
+    </EmbeddedResource>
+    <None Include="Properties/Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties/Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="../../windows/NETGeographic-vc10.vcxproj">
+      <Project>{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}</Project>
+      <Name>NETGeographic</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
diff --git a/dotnet/Projections/ProjectionsPanel.Designer.cs b/dotnet/Projections/ProjectionsPanel.Designer.cs
new file mode 100644
index 0000000..9b89dad
--- /dev/null
+++ b/dotnet/Projections/ProjectionsPanel.Designer.cs
@@ -0,0 +1,388 @@
+namespace Projections
+{
+    partial class ProjectionsPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.m_toolTip = new System.Windows.Forms.ToolTip(this.components);
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.m_setButton = new System.Windows.Forms.Button();
+            this.m_flatteningTextBox = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.m_majorRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.m_projectionComboBox = new System.Windows.Forms.ComboBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.m_lat0TextBox = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.m_lon0TextBox = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_xTextBox = new System.Windows.Forms.TextBox();
+            this.m_yTextBox = new System.Windows.Forms.TextBox();
+            this.m_azimuthTextBox = new System.Windows.Forms.TextBox();
+            this.m_scaleTextBox = new System.Windows.Forms.TextBox();
+            this.m_functionComboBox = new System.Windows.Forms.ComboBox();
+            this.label12 = new System.Windows.Forms.Label();
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            //
+            // groupBox1
+            //
+            this.groupBox1.Controls.Add(this.m_setButton);
+            this.groupBox1.Controls.Add(this.m_flatteningTextBox);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.m_majorRadiusTextBox);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Location = new System.Drawing.Point(3, 3);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(146, 140);
+            this.groupBox1.TabIndex = 6;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Ellipsoid Parameters";
+            //
+            // m_setButton
+            //
+            this.m_setButton.Location = new System.Drawing.Point(12, 107);
+            this.m_setButton.Name = "m_setButton";
+            this.m_setButton.Size = new System.Drawing.Size(75, 23);
+            this.m_setButton.TabIndex = 4;
+            this.m_setButton.Text = "Set";
+            this.m_toolTip.SetToolTip(this.m_setButton, "Sets ellipsoid parameters");
+            this.m_setButton.UseVisualStyleBackColor = true;
+            this.m_setButton.Click += new System.EventHandler(this.OnSet);
+            //
+            // m_flatteningTextBox
+            //
+            this.m_flatteningTextBox.Location = new System.Drawing.Point(12, 83);
+            this.m_flatteningTextBox.Name = "m_flatteningTextBox";
+            this.m_flatteningTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_flatteningTextBox.TabIndex = 3;
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 25);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(109, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Major Radius (meters)";
+            //
+            // m_majorRadiusTextBox
+            //
+            this.m_majorRadiusTextBox.Location = new System.Drawing.Point(12, 42);
+            this.m_majorRadiusTextBox.Name = "m_majorRadiusTextBox";
+            this.m_majorRadiusTextBox.Size = new System.Drawing.Size(125, 20);
+            this.m_majorRadiusTextBox.TabIndex = 2;
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(12, 66);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Flattening";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(14, 146);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(54, 13);
+            this.label3.TabIndex = 7;
+            this.label3.Text = "Projection";
+            //
+            // m_projectionComboBox
+            //
+            this.m_projectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_projectionComboBox.FormattingEnabled = true;
+            this.m_projectionComboBox.Items.AddRange(new object[] {
+            "Azimuthal Equidistant",
+            "Cassini Soldner",
+            "Gnomonic"});
+            this.m_projectionComboBox.Location = new System.Drawing.Point(14, 163);
+            this.m_projectionComboBox.Name = "m_projectionComboBox";
+            this.m_projectionComboBox.Size = new System.Drawing.Size(135, 21);
+            this.m_projectionComboBox.TabIndex = 8;
+            this.m_toolTip.SetToolTip(this.m_projectionComboBox, "Select projection type");
+            this.m_projectionComboBox.SelectedIndexChanged += new System.EventHandler(this.OnProjectectionType);
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(156, 12);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(122, 13);
+            this.label4.TabIndex = 9;
+            this.label4.Text = "Origin Latitude (degrees)";
+            //
+            // m_lat0TextBox
+            //
+            this.m_lat0TextBox.Location = new System.Drawing.Point(156, 28);
+            this.m_lat0TextBox.Name = "m_lat0TextBox";
+            this.m_lat0TextBox.Size = new System.Drawing.Size(128, 20);
+            this.m_lat0TextBox.TabIndex = 10;
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(156, 52);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(131, 13);
+            this.label5.TabIndex = 11;
+            this.label5.Text = "Origin Longitude (degrees)";
+            //
+            // m_lon0TextBox
+            //
+            this.m_lon0TextBox.Location = new System.Drawing.Point(156, 69);
+            this.m_lon0TextBox.Name = "m_lon0TextBox";
+            this.m_lon0TextBox.Size = new System.Drawing.Size(128, 20);
+            this.m_lon0TextBox.TabIndex = 12;
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(299, 12);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(92, 13);
+            this.label6.TabIndex = 13;
+            this.label6.Text = "Latitude (degrees)";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(299, 38);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(101, 13);
+            this.label7.TabIndex = 14;
+            this.label7.Text = "Longitude (degrees)";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(299, 64);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(54, 13);
+            this.label8.TabIndex = 15;
+            this.label8.Text = "X (meters)";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(299, 90);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(54, 13);
+            this.label9.TabIndex = 16;
+            this.label9.Text = "Y (meters)";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(299, 116);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(91, 13);
+            this.label10.TabIndex = 17;
+            this.label10.Text = "Azimuth (degrees)";
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(299, 142);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(100, 13);
+            this.label11.TabIndex = 18;
+            this.label11.Text = "Reciprocal of Scale";
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(407, 8);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_latitudeTextBox.TabIndex = 19;
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(407, 34);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_longitudeTextBox.TabIndex = 20;
+            //
+            // m_xTextBox
+            //
+            this.m_xTextBox.Location = new System.Drawing.Point(407, 60);
+            this.m_xTextBox.Name = "m_xTextBox";
+            this.m_xTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_xTextBox.TabIndex = 21;
+            //
+            // m_yTextBox
+            //
+            this.m_yTextBox.Location = new System.Drawing.Point(407, 86);
+            this.m_yTextBox.Name = "m_yTextBox";
+            this.m_yTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_yTextBox.TabIndex = 22;
+            //
+            // m_azimuthTextBox
+            //
+            this.m_azimuthTextBox.Location = new System.Drawing.Point(407, 112);
+            this.m_azimuthTextBox.Name = "m_azimuthTextBox";
+            this.m_azimuthTextBox.ReadOnly = true;
+            this.m_azimuthTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_azimuthTextBox.TabIndex = 23;
+            //
+            // m_scaleTextBox
+            //
+            this.m_scaleTextBox.Location = new System.Drawing.Point(407, 138);
+            this.m_scaleTextBox.Name = "m_scaleTextBox";
+            this.m_scaleTextBox.ReadOnly = true;
+            this.m_scaleTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_scaleTextBox.TabIndex = 24;
+            //
+            // m_functionComboBox
+            //
+            this.m_functionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_functionComboBox.FormattingEnabled = true;
+            this.m_functionComboBox.Items.AddRange(new object[] {
+            "Forward",
+            "Reverse"});
+            this.m_functionComboBox.Location = new System.Drawing.Point(513, 34);
+            this.m_functionComboBox.Name = "m_functionComboBox";
+            this.m_functionComboBox.Size = new System.Drawing.Size(75, 21);
+            this.m_functionComboBox.TabIndex = 25;
+            this.m_toolTip.SetToolTip(this.m_functionComboBox, "Select Function");
+            this.m_functionComboBox.SelectedIndexChanged += new System.EventHandler(this.OnFunction);
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(513, 12);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(48, 13);
+            this.label12.TabIndex = 26;
+            this.label12.Text = "Function";
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(513, 59);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 27;
+            this.button1.Text = "Convert";
+            this.m_toolTip.SetToolTip(this.button1, "Execute the selected Function using the selected Projection");
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnConvert);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(516, 137);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 28;
+            this.button2.Text = "Validate";
+            this.m_toolTip.SetToolTip(this.button2, "Verified interfaces");
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnValidate);
+            //
+            // ProjectionsPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.m_functionComboBox);
+            this.Controls.Add(this.m_scaleTextBox);
+            this.Controls.Add(this.m_azimuthTextBox);
+            this.Controls.Add(this.m_yTextBox);
+            this.Controls.Add(this.m_xTextBox);
+            this.Controls.Add(this.m_longitudeTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.m_lon0TextBox);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.m_lat0TextBox);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.m_projectionComboBox);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "ProjectionsPanel";
+            this.Size = new System.Drawing.Size(790, 289);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolTip m_toolTip;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Button m_setButton;
+        private System.Windows.Forms.TextBox m_flatteningTextBox;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox m_majorRadiusTextBox;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.ComboBox m_projectionComboBox;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox m_lat0TextBox;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.TextBox m_lon0TextBox;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.TextBox m_xTextBox;
+        private System.Windows.Forms.TextBox m_yTextBox;
+        private System.Windows.Forms.TextBox m_azimuthTextBox;
+        private System.Windows.Forms.TextBox m_scaleTextBox;
+        private System.Windows.Forms.ComboBox m_functionComboBox;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button button2;
+    }
+}
diff --git a/dotnet/Projections/ProjectionsPanel.cs b/dotnet/Projections/ProjectionsPanel.cs
new file mode 100644
index 0000000..6fd73a6
--- /dev/null
+++ b/dotnet/Projections/ProjectionsPanel.cs
@@ -0,0 +1,250 @@
+/**
+ * \file NETGeographicLib\ProjectionsPanel.cs
+ * \brief NETGeographicLib projection example
+ *
+ * NETGeographicLib.AzimuthalEquidistant,
+ * NETGeographicLib.CassiniSoldner, and
+ * NETGeographicLib.Gnomonic example.
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class ProjectionsPanel : UserControl
+    {
+        enum ProjectionTypes
+        {
+            AzimuthalEquidistant = 0,
+            CassiniSoldner = 1,
+            Gnomonic = 2
+        }
+        ProjectionTypes m_type;
+        AzimuthalEquidistant m_azimuthal = null;
+        CassiniSoldner m_cassini = null;
+        Gnomonic m_gnomonic = null;
+        Geodesic m_geodesic = null;
+
+        public ProjectionsPanel()
+        {
+            InitializeComponent();
+            try
+            {
+                m_geodesic = new Geodesic();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            m_majorRadiusTextBox.Text = m_geodesic.MajorRadius.ToString();
+            m_flatteningTextBox.Text = m_geodesic.Flattening.ToString();
+            m_lat0TextBox.Text = m_lon0TextBox.Text = "0";
+            m_projectionComboBox.SelectedIndex = 0;
+            m_functionComboBox.SelectedIndex = 0;
+        }
+
+        private void OnProjectectionType(object sender, EventArgs e)
+        {
+            m_type = (ProjectionTypes)m_projectionComboBox.SelectedIndex;
+            switch (m_type)
+            {
+                case ProjectionTypes.AzimuthalEquidistant:
+                    m_azimuthal = new AzimuthalEquidistant(m_geodesic);
+                    break;
+                case ProjectionTypes.CassiniSoldner:
+                    double lat0 = Double.Parse( m_lat0TextBox.Text );
+                    double lon0 = Double.Parse( m_lon0TextBox.Text );
+                    m_cassini = new CassiniSoldner(lat0, lon0, m_geodesic);
+                    break;
+                case ProjectionTypes.Gnomonic:
+                    m_gnomonic = new Gnomonic(m_geodesic);
+                    break;
+            }
+        }
+
+        private void OnSet(object sender, EventArgs e)
+        {
+            try
+            {
+                double a = Double.Parse(m_majorRadiusTextBox.Text);
+                double f = Double.Parse(m_flatteningTextBox.Text);
+                m_geodesic = new Geodesic(a, f);
+            }
+            catch ( Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnFunction(object sender, EventArgs e)
+        {
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    m_latitudeTextBox.ReadOnly = m_longitudeTextBox.ReadOnly = false;
+                    m_xTextBox.ReadOnly = m_yTextBox.ReadOnly = true;
+                    break;
+                case 1:
+                    m_latitudeTextBox.ReadOnly = m_longitudeTextBox.ReadOnly = true;
+                    m_xTextBox.ReadOnly = m_yTextBox.ReadOnly = false;
+                    break;
+            }
+        }
+
+        private void OnConvert(object sender, EventArgs e)
+        {
+            try
+            {
+                switch (m_type)
+                {
+                    case ProjectionTypes.AzimuthalEquidistant:
+                        ConvertAzimuthalEquidistant();
+                        break;
+                    case ProjectionTypes.CassiniSoldner:
+                        ConvertCassiniSoldner();
+                        break;
+                    case ProjectionTypes.Gnomonic:
+                        ConvertGnomonic();
+                        break;
+                }
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void ConvertAzimuthalEquidistant()
+        {
+            double lat0 = Double.Parse(m_lat0TextBox.Text);
+            double lon0 = Double.Parse(m_lon0TextBox.Text);
+            double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, azi = 0.0, rk = 0.0;
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    lat = Double.Parse(m_latitudeTextBox.Text);
+                    lon = Double.Parse(m_longitudeTextBox.Text);
+                    m_azimuthal.Forward(lat0, lon0, lat, lon, out x, out y, out azi, out rk);
+                    m_xTextBox.Text = x.ToString();
+                    m_yTextBox.Text = y.ToString();
+                    break;
+                case 1:
+                    x = Double.Parse(m_xTextBox.Text);
+                    y = Double.Parse(m_yTextBox.Text);
+                    m_azimuthal.Reverse(lat0, lon0, x, y, out lat, out lon, out azi, out rk);
+                    m_latitudeTextBox.Text = lat.ToString();
+                    m_longitudeTextBox.Text = lon.ToString();
+                    break;
+            }
+            m_azimuthTextBox.Text = azi.ToString();
+            m_scaleTextBox.Text = rk.ToString();
+        }
+
+        private void ConvertCassiniSoldner()
+        {
+            double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, azi = 0.0, rk = 0.0;
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    lat = Double.Parse(m_latitudeTextBox.Text);
+                    lon = Double.Parse(m_longitudeTextBox.Text);
+                    m_cassini.Forward(lat, lon, out x, out y, out azi, out rk);
+                    m_xTextBox.Text = x.ToString();
+                    m_yTextBox.Text = y.ToString();
+                    break;
+                case 1:
+                    x = Double.Parse(m_xTextBox.Text);
+                    y = Double.Parse(m_yTextBox.Text);
+                    m_cassini.Reverse(x, y, out lat, out lon, out azi, out rk);
+                    m_latitudeTextBox.Text = lat.ToString();
+                    m_longitudeTextBox.Text = lon.ToString();
+                    break;
+            }
+            m_azimuthTextBox.Text = azi.ToString();
+            m_scaleTextBox.Text = rk.ToString();
+        }
+
+        private void ConvertGnomonic()
+        {
+            double lat0 = Double.Parse(m_lat0TextBox.Text);
+            double lon0 = Double.Parse(m_lon0TextBox.Text);
+            double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, azi = 0.0, rk = 0.0;
+            switch (m_functionComboBox.SelectedIndex)
+            {
+                case 0:
+                    lat = Double.Parse(m_latitudeTextBox.Text);
+                    lon = Double.Parse(m_longitudeTextBox.Text);
+                    m_gnomonic.Forward(lat0, lon0, lat, lon, out x, out y, out azi, out rk);
+                    m_xTextBox.Text = x.ToString();
+                    m_yTextBox.Text = y.ToString();
+                    break;
+                case 1:
+                    x = Double.Parse(m_xTextBox.Text);
+                    y = Double.Parse(m_yTextBox.Text);
+                    m_gnomonic.Reverse(lat0, lon0, x, y, out lat, out lon, out azi, out rk);
+                    m_latitudeTextBox.Text = lat.ToString();
+                    m_longitudeTextBox.Text = lon.ToString();
+                    break;
+            }
+            m_azimuthTextBox.Text = azi.ToString();
+            m_scaleTextBox.Text = rk.ToString();
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, x1 = 0.0, y1 = 0.0, azi = 0.0, rk = 0.0;
+                AzimuthalEquidistant azimuthal = new AzimuthalEquidistant(m_geodesic);
+                azimuthal = new AzimuthalEquidistant();
+                azimuthal.Forward(32.0, -86.0, 33.0, -87.0, out x, out y, out azi, out rk);
+                azimuthal.Forward(32.0, -86.0, 33.0, -87.0, out x1, out y1);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in AzimuthalEquidistant.Forward");
+                azimuthal.Reverse(32.0, -86.0, x, y, out lat, out lon, out azi, out rk);
+                azimuthal.Reverse(32.0, -86.0, x, y, out x1, out y1);
+                if ( x1 != lat || y1 != lon )
+                    throw new Exception("Error in AzimuthalEquidistant.Reverse");
+                CassiniSoldner cassini = new CassiniSoldner(32.0, -86.0, m_geodesic);
+                cassini = new CassiniSoldner(32.0, -86.0);
+                cassini.Reset(31.0, -87.0);
+                cassini.Forward(32.0, -86.0, out x, out y, out azi, out rk);
+                cassini.Forward(32.0, -86.0, out x1, out y1);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in CassiniSoldner.Forward");
+                cassini.Reverse(x, y, out lat, out lon, out azi, out rk);
+                cassini.Reverse(x, y, out x1, out y1);
+                if (x1 != lat || y1 != lon)
+                    throw new Exception("Error in CassiniSoldner.Reverse");
+                Gnomonic gnomonic = new Gnomonic(m_geodesic);
+                gnomonic = new Gnomonic();
+                gnomonic.Forward(32.0, -86.0, 31.0, -87.0, out x, out y, out azi, out rk);
+                gnomonic.Forward(32.0, -86.0, 31.0, -87.0, out x1, out y1);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in Gnomonic.Forward");
+                gnomonic.Reverse(32.0, -86.0, x, y, out lat, out lon, out azi, out rk);
+                gnomonic.Reverse(32.0, -86.0, x, y, out x1, out y1);
+                if (x1 != lat || y1 != lon)
+                    throw new Exception("Error in Gnomonic.Reverse");
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+    }
+}
diff --git a/dotnet/Projections/ProjectionsPanel.resx b/dotnet/Projections/ProjectionsPanel.resx
new file mode 100644
index 0000000..3ec30e0
--- /dev/null
+++ b/dotnet/Projections/ProjectionsPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/Properties/AssemblyInfo.cs b/dotnet/Projections/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..92f8bc0
--- /dev/null
+++ b/dotnet/Projections/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Projections")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Projections")]
+[assembly: AssemblyCopyright("Copyright (c) 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("9ac75a52-f578-43e8-9994-5f993a535d0d")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/dotnet/Projections/Properties/Resources.Designer.cs b/dotnet/Projections/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..7e2638c
--- /dev/null
+++ b/dotnet/Projections/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.239
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Projections.Properties
+{
+
+
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Projections.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/Properties/Resources.resx b/dotnet/Projections/Properties/Resources.resx
new file mode 100644
index 0000000..117d382
--- /dev/null
+++ b/dotnet/Projections/Properties/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
diff --git a/dotnet/Projections/Properties/Settings.Designer.cs b/dotnet/Projections/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..d07485e
--- /dev/null
+++ b/dotnet/Projections/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.239
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Projections.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/Properties/Settings.settings b/dotnet/Projections/Properties/Settings.settings
new file mode 100644
index 0000000..4ed82c0
--- /dev/null
+++ b/dotnet/Projections/Properties/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
diff --git a/dotnet/Projections/SphericalHarmonicsPanel.Designer.cs b/dotnet/Projections/SphericalHarmonicsPanel.Designer.cs
new file mode 100644
index 0000000..dbcc8f5
--- /dev/null
+++ b/dotnet/Projections/SphericalHarmonicsPanel.Designer.cs
@@ -0,0 +1,390 @@
+namespace Projections
+{
+    partial class SphericalHarmonicsPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.m_toolTip = new System.Windows.Forms.ToolTip(this.components);
+            this.m_classComboBox = new System.Windows.Forms.ComboBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.m_tau1Label = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.m_xTextBox = new System.Windows.Forms.TextBox();
+            this.m_yTextBox = new System.Windows.Forms.TextBox();
+            this.m_zTextBox = new System.Windows.Forms.TextBox();
+            this.m_tau1TextBox = new System.Windows.Forms.TextBox();
+            this.m_tau2TextBox = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label8 = new System.Windows.Forms.Label();
+            this.label9 = new System.Windows.Forms.Label();
+            this.m_sumTextBox = new System.Windows.Forms.TextBox();
+            this.m_gradXTextBox = new System.Windows.Forms.TextBox();
+            this.m_gradYTextBox = new System.Windows.Forms.TextBox();
+            this.m_gradZTextBox = new System.Windows.Forms.TextBox();
+            this.button2 = new System.Windows.Forms.Button();
+            this.label10 = new System.Windows.Forms.Label();
+            this.label11 = new System.Windows.Forms.Label();
+            this.m_circleRadiusTextBox = new System.Windows.Forms.TextBox();
+            this.m_circleHeightTextBox = new System.Windows.Forms.TextBox();
+            this.label12 = new System.Windows.Forms.Label();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.button3 = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            //
+            // m_classComboBox
+            //
+            this.m_classComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.m_classComboBox.FormattingEnabled = true;
+            this.m_classComboBox.Items.AddRange(new object[] {
+            "Spherical Harmonic",
+            "Spherical Harmonic 1",
+            "Spherical Harmonic 2"});
+            this.m_classComboBox.Location = new System.Drawing.Point(4, 155);
+            this.m_classComboBox.Name = "m_classComboBox";
+            this.m_classComboBox.Size = new System.Drawing.Size(139, 21);
+            this.m_classComboBox.TabIndex = 10;
+            this.m_toolTip.SetToolTip(this.m_classComboBox, "Select Class");
+            this.m_classComboBox.SelectedIndexChanged += new System.EventHandler(this.OnClass);
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(203, 112);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 12;
+            this.button1.Text = "Compute";
+            this.m_toolTip.SetToolTip(this.button1, "Compute harmonic sum and gradient");
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnCompute);
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(4, 8);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(14, 13);
+            this.label2.TabIndex = 0;
+            this.label2.Text = "X";
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(4, 34);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(14, 13);
+            this.label1.TabIndex = 1;
+            this.label1.Text = "Y";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(4, 60);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(14, 13);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "Z";
+            //
+            // m_tau1Label
+            //
+            this.m_tau1Label.AutoSize = true;
+            this.m_tau1Label.Location = new System.Drawing.Point(4, 86);
+            this.m_tau1Label.Name = "m_tau1Label";
+            this.m_tau1Label.Size = new System.Drawing.Size(31, 13);
+            this.m_tau1Label.TabIndex = 3;
+            this.m_tau1Label.Text = "tau 1";
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(4, 112);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(31, 13);
+            this.label4.TabIndex = 4;
+            this.label4.Text = "tau 2";
+            //
+            // m_xTextBox
+            //
+            this.m_xTextBox.Location = new System.Drawing.Point(43, 4);
+            this.m_xTextBox.Name = "m_xTextBox";
+            this.m_xTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_xTextBox.TabIndex = 5;
+            //
+            // m_yTextBox
+            //
+            this.m_yTextBox.Location = new System.Drawing.Point(43, 30);
+            this.m_yTextBox.Name = "m_yTextBox";
+            this.m_yTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_yTextBox.TabIndex = 6;
+            //
+            // m_zTextBox
+            //
+            this.m_zTextBox.Location = new System.Drawing.Point(43, 56);
+            this.m_zTextBox.Name = "m_zTextBox";
+            this.m_zTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_zTextBox.TabIndex = 7;
+            //
+            // m_tau1TextBox
+            //
+            this.m_tau1TextBox.Location = new System.Drawing.Point(43, 82);
+            this.m_tau1TextBox.Name = "m_tau1TextBox";
+            this.m_tau1TextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_tau1TextBox.TabIndex = 8;
+            //
+            // m_tau2TextBox
+            //
+            this.m_tau2TextBox.Location = new System.Drawing.Point(43, 108);
+            this.m_tau2TextBox.Name = "m_tau2TextBox";
+            this.m_tau2TextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_tau2TextBox.TabIndex = 9;
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(4, 136);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(32, 13);
+            this.label5.TabIndex = 11;
+            this.label5.Text = "Class";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(158, 8);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(76, 13);
+            this.label6.TabIndex = 13;
+            this.label6.Text = "Harmonic Sum";
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(158, 33);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(57, 13);
+            this.label7.TabIndex = 14;
+            this.label7.Text = "X Gradient";
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(158, 60);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(57, 13);
+            this.label8.TabIndex = 15;
+            this.label8.Text = "Y Gradient";
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(158, 86);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(57, 13);
+            this.label9.TabIndex = 16;
+            this.label9.Text = "X Gradient";
+            //
+            // m_sumTextBox
+            //
+            this.m_sumTextBox.Location = new System.Drawing.Point(241, 4);
+            this.m_sumTextBox.Name = "m_sumTextBox";
+            this.m_sumTextBox.ReadOnly = true;
+            this.m_sumTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_sumTextBox.TabIndex = 17;
+            //
+            // m_gradXTextBox
+            //
+            this.m_gradXTextBox.Location = new System.Drawing.Point(241, 29);
+            this.m_gradXTextBox.Name = "m_gradXTextBox";
+            this.m_gradXTextBox.ReadOnly = true;
+            this.m_gradXTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_gradXTextBox.TabIndex = 18;
+            //
+            // m_gradYTextBox
+            //
+            this.m_gradYTextBox.Location = new System.Drawing.Point(241, 56);
+            this.m_gradYTextBox.Name = "m_gradYTextBox";
+            this.m_gradYTextBox.ReadOnly = true;
+            this.m_gradYTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_gradYTextBox.TabIndex = 19;
+            //
+            // m_gradZTextBox
+            //
+            this.m_gradZTextBox.Location = new System.Drawing.Point(241, 82);
+            this.m_gradZTextBox.Name = "m_gradZTextBox";
+            this.m_gradZTextBox.ReadOnly = true;
+            this.m_gradZTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_gradZTextBox.TabIndex = 20;
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(406, 86);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(100, 23);
+            this.button2.TabIndex = 21;
+            this.button2.Text = "Circular Engine";
+            this.m_toolTip.SetToolTip(this.button2, "Calculates the sum for the given radius, height, and longitude using a Circular E" +
+                    "ngine");
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnCircularEngine);
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(348, 8);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(69, 13);
+            this.label10.TabIndex = 22;
+            this.label10.Text = "Circle Radius";
+            //
+            // label11
+            //
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(348, 33);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(67, 13);
+            this.label11.TabIndex = 23;
+            this.label11.Text = "Circle Height";
+            //
+            // m_circleRadiusTextBox
+            //
+            this.m_circleRadiusTextBox.Location = new System.Drawing.Point(458, 4);
+            this.m_circleRadiusTextBox.Name = "m_circleRadiusTextBox";
+            this.m_circleRadiusTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_circleRadiusTextBox.TabIndex = 24;
+            //
+            // m_circleHeightTextBox
+            //
+            this.m_circleHeightTextBox.Location = new System.Drawing.Point(458, 29);
+            this.m_circleHeightTextBox.Name = "m_circleHeightTextBox";
+            this.m_circleHeightTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_circleHeightTextBox.TabIndex = 25;
+            //
+            // label12
+            //
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(348, 60);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(101, 13);
+            this.label12.TabIndex = 26;
+            this.label12.Text = "Longitude (degrees)";
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(458, 56);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(100, 20);
+            this.m_longitudeTextBox.TabIndex = 27;
+            //
+            // button3
+            //
+            this.button3.Location = new System.Drawing.Point(203, 155);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(75, 23);
+            this.button3.TabIndex = 28;
+            this.button3.Text = "Validate";
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.OnValidate);
+            //
+            // SphericalHarmonicsPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.button3);
+            this.Controls.Add(this.m_longitudeTextBox);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.m_circleHeightTextBox);
+            this.Controls.Add(this.m_circleRadiusTextBox);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.m_gradZTextBox);
+            this.Controls.Add(this.m_gradYTextBox);
+            this.Controls.Add(this.m_gradXTextBox);
+            this.Controls.Add(this.m_sumTextBox);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.m_classComboBox);
+            this.Controls.Add(this.m_tau2TextBox);
+            this.Controls.Add(this.m_tau1TextBox);
+            this.Controls.Add(this.m_zTextBox);
+            this.Controls.Add(this.m_yTextBox);
+            this.Controls.Add(this.m_xTextBox);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.m_tau1Label);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.label2);
+            this.Name = "SphericalHarmonicsPanel";
+            this.Size = new System.Drawing.Size(785, 293);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolTip m_toolTip;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label m_tau1Label;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox m_xTextBox;
+        private System.Windows.Forms.TextBox m_yTextBox;
+        private System.Windows.Forms.TextBox m_zTextBox;
+        private System.Windows.Forms.TextBox m_tau1TextBox;
+        private System.Windows.Forms.TextBox m_tau2TextBox;
+        private System.Windows.Forms.ComboBox m_classComboBox;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.TextBox m_sumTextBox;
+        private System.Windows.Forms.TextBox m_gradXTextBox;
+        private System.Windows.Forms.TextBox m_gradYTextBox;
+        private System.Windows.Forms.TextBox m_gradZTextBox;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.TextBox m_circleRadiusTextBox;
+        private System.Windows.Forms.TextBox m_circleHeightTextBox;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.Button button3;
+    }
+}
diff --git a/dotnet/Projections/SphericalHarmonicsPanel.cs b/dotnet/Projections/SphericalHarmonicsPanel.cs
new file mode 100644
index 0000000..7b04fb3
--- /dev/null
+++ b/dotnet/Projections/SphericalHarmonicsPanel.cs
@@ -0,0 +1,199 @@
+/**
+ * \file NETGeographicLib\SphericalHarmonicsPanel.cs
+ * \brief NETGeographicLib Spherical Harmonics example
+ *
+ * NETGeographicLib.CircularEngine,
+ * NETGeographicLib.SphericalHarmonic,
+ * NETGeographicLib.SphericalHarmonic1, and
+ * NETGeographicLib.SphericalHarmonic2 example.
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class SphericalHarmonicsPanel : UserControl
+    {
+        int N = 3, N1 = 2, N2 = 1;                     // The maxium degrees
+        double[] C = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // cosine coefficients
+        double[] S = {6, 5, 4, 3, 2, 1}; // sine coefficients
+        double[] C1 = {1, 2, 3, 4, 5, 6};
+        double[] S1 = {3, 2, 1};
+        double[] C2 = {1, 2, 3};
+        double[] S2 = {1};
+        double a = 1;
+
+        SphericalHarmonic m_sh0 = null;
+        SphericalHarmonic1 m_sh1 = null;
+        SphericalHarmonic2 m_sh2 = null;
+
+        public SphericalHarmonicsPanel()
+        {
+            InitializeComponent();
+            try
+            {
+                m_sh0 = new SphericalHarmonic(C, S, N, a, SphericalHarmonic.Normalization.SCHMIDT);
+                m_sh1 = new SphericalHarmonic1(C, S, N, C1, S1, N1, a, SphericalHarmonic1.Normalization.FULL);
+                m_sh2 = new SphericalHarmonic2(C, S, N, C1, S1, N1, C2, S2, N2, a, SphericalHarmonic2.Normalization.FULL);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            m_classComboBox.SelectedIndex = 0;
+        }
+
+        private void OnClass(object sender, EventArgs e)
+        {
+            switch (m_classComboBox.SelectedIndex)
+            {
+                case 0:
+                    m_tau1TextBox.ReadOnly = m_tau2TextBox.ReadOnly = true;
+                    break;
+                case 1:
+                    m_tau1TextBox.ReadOnly = false;
+                    m_tau2TextBox.ReadOnly = true;
+                    break;
+                case 2:
+                    m_tau1TextBox.ReadOnly = m_tau2TextBox.ReadOnly = false;
+                    break;
+            }
+        }
+
+        private void OnCompute(object sender, EventArgs e)
+        {
+            try
+            {
+                double sum = 0.0, gradx = 0.0, grady = 0.0, gradz = 0.0;
+                double x = Double.Parse(m_xTextBox.Text);
+                double y = Double.Parse(m_yTextBox.Text);
+                double z = Double.Parse(m_zTextBox.Text);
+                switch (m_classComboBox.SelectedIndex)
+                {
+                    case 0:
+                        sum = m_sh0.HarmonicSum(x, y, z, out gradx, out grady, out gradz);
+                        break;
+                    case 1:
+                        double tau1 = Double.Parse(m_tau1TextBox.Text);
+                        sum = m_sh1.HarmonicSum(tau1, x, y, z, out gradx, out grady, out gradz);
+                        break;
+                    case 2:
+                        tau1 = Double.Parse(m_tau1TextBox.Text);
+                        double tau2 = Double.Parse(m_tau2TextBox.Text);
+                        sum = m_sh2.HarmonicSum(tau1, tau2, x, y, z, out gradx, out grady, out gradz);
+                        break;
+                }
+                m_sumTextBox.Text = sum.ToString();
+                m_gradXTextBox.Text = gradx.ToString();
+                m_gradYTextBox.Text = grady.ToString();
+                m_gradZTextBox.Text = gradz.ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnCircularEngine(object sender, EventArgs e)
+        {
+            try
+            {
+                CircularEngine ce = null;
+                double p = Double.Parse(m_circleRadiusTextBox.Text);
+                double z = Double.Parse(m_circleHeightTextBox.Text);
+                double longitude = Double.Parse(m_longitudeTextBox.Text);
+
+                switch (m_classComboBox.SelectedIndex)
+                {
+                    case 0:
+                        ce = m_sh0.Circle(p, z, true);
+                        break;
+                    case 1:
+                        double tau1 = Double.Parse(m_tau1TextBox.Text);
+                        ce = m_sh1.Circle(tau1, p, z, true);
+                        break;
+                    case 2:
+                        tau1 = Double.Parse(m_tau1TextBox.Text);
+                        double tau2 = Double.Parse(m_tau2TextBox.Text);
+                        ce = m_sh2.Circle(tau1, tau2, p, z, true);
+                        break;
+                }
+                double gradx, grady, gradz;
+                m_sumTextBox.Text = ce.LongitudeSum(longitude, out gradx, out grady, out gradz).ToString();
+                m_gradXTextBox.Text = gradx.ToString();
+                m_gradYTextBox.Text = grady.ToString();
+                m_gradZTextBox.Text = gradz.ToString();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                const double DEG_TO_RAD = 3.1415926535897932384626433832795 / 180.0;
+                double gradx, grady, gradz;
+                SphericalHarmonic s0 = new SphericalHarmonic(C, S, N, N - 1, 0, a, SphericalHarmonic.Normalization.SCHMIDT);
+                s0 = new SphericalHarmonic(C, S, N, a, SphericalHarmonic.Normalization.SCHMIDT);
+                double sum = s0.HarmonicSum(1.0, 2.0, 3.0);
+                double test = s0.HarmonicSum(1.0, 2.0, 3.0, out gradx, out grady, out grady);
+                if (sum != test)
+                    throw new Exception("Error in SphericalHarmonic.HarmonicSum");
+                SphericalCoefficients sc = s0.Coefficients();
+                CircularEngine ce = s0.Circle(1.0, 0.5, true);
+                sum = ce.LongitudeSum(60.0);
+                test = ce.LongitudeSum(Math.Cos(60.0 * DEG_TO_RAD), Math.Sin(60.0 * DEG_TO_RAD));
+                if ( sum != test )
+                    throw new Exception("Error in CircularEngine.LongitudeSum 1");
+                test = ce.LongitudeSum(60.0, out gradx, out grady, out gradz);
+                if ( sum != test )
+                    throw new Exception("Error in CircularEngine.LongitudeSum 2");
+                ce.LongitudeSum(Math.Cos(60.0 * DEG_TO_RAD), Math.Sin(60.0 * DEG_TO_RAD), out gradx, out grady, out gradz);
+                if (sum != test)
+                    throw new Exception("Error in CircularEngine.LongitudeSum 3");
+                SphericalHarmonic1 s1 = new SphericalHarmonic1(C, S, N, N - 1, 1, C1, S1, N1, N1 - 1, 0, a, SphericalHarmonic1.Normalization.SCHMIDT);
+                s1 = new SphericalHarmonic1(C, S, N, C1, S1, N1, a, SphericalHarmonic1.Normalization.SCHMIDT);
+                sum = s1.HarmonicSum(0.95, 1.0, 2.0, 3.0);
+                test = s1.HarmonicSum(0.95, 1.0, 2.0, 3.0, out gradx, out grady, out gradz);
+                if (sum != test)
+                    throw new Exception("Error in SphericalHarmonic1.HarmonicSum 3");
+                ce = s1.Circle(0.95, 1.0, 0.5, true);
+                sc = s1.Coefficients();
+                sc = s1.Coefficients1();
+                SphericalHarmonic2 s2 = new SphericalHarmonic2(C, S, N, N - 1, 2, C1, S1, N1, N1 - 1, 1,
+                    C2, S2, N2, N2 - 1, 0, a, SphericalHarmonic2.Normalization.SCHMIDT);
+                s2 = new SphericalHarmonic2(C, S, N, C1, S1, N1, C2, S2, N2, a, SphericalHarmonic2.Normalization.SCHMIDT);
+                sum = s2.HarmonicSum(0.95, 0.8, 1.0, 2.0, 3.0);
+                test = s2.HarmonicSum(0.95, 0.8, 1.0, 2.0, 3.0, out gradx, out grady, out gradz);
+                if (sum != test)
+                    throw new Exception("Error in SphericalHarmonic2.HarmonicSum 3");
+                ce = s2.Circle(0.95, 0.8, 1.0, 0.5, true);
+                sc = s2.Coefficients();
+                sc = s2.Coefficients1();
+                sc = s2.Coefficients2();
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+            MessageBox.Show("No errors found", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+    }
+}
diff --git a/dotnet/Projections/SphericalHarmonicsPanel.resx b/dotnet/Projections/SphericalHarmonicsPanel.resx
new file mode 100644
index 0000000..3ec30e0
--- /dev/null
+++ b/dotnet/Projections/SphericalHarmonicsPanel.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="m_toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
diff --git a/dotnet/Projections/TypeIIIProjPanel.Designer.cs b/dotnet/Projections/TypeIIIProjPanel.Designer.cs
new file mode 100644
index 0000000..c9ac3d9
--- /dev/null
+++ b/dotnet/Projections/TypeIIIProjPanel.Designer.cs
@@ -0,0 +1,336 @@
+namespace Projections
+{
+    partial class TypeIIIProjPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.m_latitudeTextBox = new System.Windows.Forms.TextBox();
+            this.m_longitudeTextBox = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.m_utmPoleCheckBox = new System.Windows.Forms.CheckBox();
+            this.m_utmXTextBox = new System.Windows.Forms.TextBox();
+            this.m_utmYTextBox = new System.Windows.Forms.TextBox();
+            this.m_utmZoneTextBox = new System.Windows.Forms.TextBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.label7 = new System.Windows.Forms.Label();
+            this.m_mgrsTextBox = new System.Windows.Forms.TextBox();
+            this.button3 = new System.Windows.Forms.Button();
+            this.label8 = new System.Windows.Forms.Label();
+            this.m_osgbYTextBox = new System.Windows.Forms.TextBox();
+            this.m_osgbXTextBox = new System.Windows.Forms.TextBox();
+            this.label9 = new System.Windows.Forms.Label();
+            this.label10 = new System.Windows.Forms.Label();
+            this.button4 = new System.Windows.Forms.Button();
+            this.button5 = new System.Windows.Forms.Button();
+            this.m_osgbTextBox = new System.Windows.Forms.TextBox();
+            this.SuspendLayout();
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(167, 38);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(45, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Latitude";
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(167, 67);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(54, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Longitude";
+            //
+            // m_latitudeTextBox
+            //
+            this.m_latitudeTextBox.Location = new System.Drawing.Point(227, 34);
+            this.m_latitudeTextBox.Name = "m_latitudeTextBox";
+            this.m_latitudeTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_latitudeTextBox.TabIndex = 2;
+            //
+            // m_longitudeTextBox
+            //
+            this.m_longitudeTextBox.Location = new System.Drawing.Point(227, 63);
+            this.m_longitudeTextBox.Name = "m_longitudeTextBox";
+            this.m_longitudeTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_longitudeTextBox.TabIndex = 3;
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(445, 10);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(53, 13);
+            this.label3.TabIndex = 4;
+            this.label3.Text = "UTMUPS";
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(364, 38);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(14, 13);
+            this.label4.TabIndex = 5;
+            this.label4.Text = "X";
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(364, 67);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(14, 13);
+            this.label5.TabIndex = 6;
+            this.label5.Text = "Y";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(364, 98);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(32, 13);
+            this.label6.TabIndex = 7;
+            this.label6.Text = "Zone";
+            //
+            // m_utmPoleCheckBox
+            //
+            this.m_utmPoleCheckBox.AutoSize = true;
+            this.m_utmPoleCheckBox.Location = new System.Drawing.Point(364, 124);
+            this.m_utmPoleCheckBox.Name = "m_utmPoleCheckBox";
+            this.m_utmPoleCheckBox.Size = new System.Drawing.Size(76, 17);
+            this.m_utmPoleCheckBox.TabIndex = 8;
+            this.m_utmPoleCheckBox.Text = "North Pole";
+            this.m_utmPoleCheckBox.UseVisualStyleBackColor = true;
+            //
+            // m_utmXTextBox
+            //
+            this.m_utmXTextBox.Location = new System.Drawing.Point(456, 34);
+            this.m_utmXTextBox.Name = "m_utmXTextBox";
+            this.m_utmXTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_utmXTextBox.TabIndex = 9;
+            //
+            // m_utmYTextBox
+            //
+            this.m_utmYTextBox.Location = new System.Drawing.Point(456, 63);
+            this.m_utmYTextBox.Name = "m_utmYTextBox";
+            this.m_utmYTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_utmYTextBox.TabIndex = 10;
+            //
+            // m_utmZoneTextBox
+            //
+            this.m_utmZoneTextBox.Location = new System.Drawing.Point(456, 94);
+            this.m_utmZoneTextBox.Name = "m_utmZoneTextBox";
+            this.m_utmZoneTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_utmZoneTextBox.TabIndex = 11;
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(228, 148);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(85, 23);
+            this.button1.TabIndex = 12;
+            this.button1.Text = "<- Convert ->";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnConvertLatLon);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(431, 148);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(81, 23);
+            this.button2.TabIndex = 13;
+            this.button2.Text = "<- Convert ->";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnConvertUTMUPS);
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(663, 10);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(39, 13);
+            this.label7.TabIndex = 14;
+            this.label7.Text = "MGRS";
+            //
+            // m_mgrsTextBox
+            //
+            this.m_mgrsTextBox.Location = new System.Drawing.Point(606, 34);
+            this.m_mgrsTextBox.Name = "m_mgrsTextBox";
+            this.m_mgrsTextBox.Size = new System.Drawing.Size(152, 20);
+            this.m_mgrsTextBox.TabIndex = 15;
+            //
+            // button3
+            //
+            this.button3.Location = new System.Drawing.Point(642, 148);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(81, 23);
+            this.button3.TabIndex = 16;
+            this.button3.Text = "<- Convert ";
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.OnConvertMGRS);
+            //
+            // label8
+            //
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(69, 10);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(37, 13);
+            this.label8.TabIndex = 17;
+            this.label8.Text = "OSGB";
+            //
+            // m_osgbYTextBox
+            //
+            this.m_osgbYTextBox.Location = new System.Drawing.Point(24, 63);
+            this.m_osgbYTextBox.Name = "m_osgbYTextBox";
+            this.m_osgbYTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_osgbYTextBox.TabIndex = 21;
+            //
+            // m_osgbXTextBox
+            //
+            this.m_osgbXTextBox.Location = new System.Drawing.Point(24, 38);
+            this.m_osgbXTextBox.Name = "m_osgbXTextBox";
+            this.m_osgbXTextBox.Size = new System.Drawing.Size(126, 20);
+            this.m_osgbXTextBox.TabIndex = 20;
+            //
+            // label9
+            //
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(4, 68);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(14, 13);
+            this.label9.TabIndex = 19;
+            this.label9.Text = "Y";
+            //
+            // label10
+            //
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(4, 39);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(14, 13);
+            this.label10.TabIndex = 18;
+            this.label10.Text = "X";
+            //
+            // button4
+            //
+            this.button4.Location = new System.Drawing.Point(50, 147);
+            this.button4.Name = "button4";
+            this.button4.Size = new System.Drawing.Size(75, 23);
+            this.button4.TabIndex = 22;
+            this.button4.Text = "Convert ->";
+            this.button4.UseVisualStyleBackColor = true;
+            this.button4.Click += new System.EventHandler(this.OnConvertOSGB);
+            //
+            // button5
+            //
+            this.button5.Location = new System.Drawing.Point(367, 189);
+            this.button5.Name = "button5";
+            this.button5.Size = new System.Drawing.Size(75, 23);
+            this.button5.TabIndex = 23;
+            this.button5.Text = "Validate";
+            this.button5.UseVisualStyleBackColor = true;
+            this.button5.Click += new System.EventHandler(this.OnValidate);
+            //
+            // m_osgbTextBox
+            //
+            this.m_osgbTextBox.Location = new System.Drawing.Point(7, 93);
+            this.m_osgbTextBox.Name = "m_osgbTextBox";
+            this.m_osgbTextBox.ReadOnly = true;
+            this.m_osgbTextBox.Size = new System.Drawing.Size(143, 20);
+            this.m_osgbTextBox.TabIndex = 24;
+            //
+            // TypeIIIProjPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.m_osgbTextBox);
+            this.Controls.Add(this.button5);
+            this.Controls.Add(this.button4);
+            this.Controls.Add(this.m_osgbYTextBox);
+            this.Controls.Add(this.m_osgbXTextBox);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.button3);
+            this.Controls.Add(this.m_mgrsTextBox);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.m_utmZoneTextBox);
+            this.Controls.Add(this.m_utmYTextBox);
+            this.Controls.Add(this.m_utmXTextBox);
+            this.Controls.Add(this.m_utmPoleCheckBox);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.m_longitudeTextBox);
+            this.Controls.Add(this.m_latitudeTextBox);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Name = "TypeIIIProjPanel";
+            this.Size = new System.Drawing.Size(1001, 358);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox m_latitudeTextBox;
+        private System.Windows.Forms.TextBox m_longitudeTextBox;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.CheckBox m_utmPoleCheckBox;
+        private System.Windows.Forms.TextBox m_utmXTextBox;
+        private System.Windows.Forms.TextBox m_utmYTextBox;
+        private System.Windows.Forms.TextBox m_utmZoneTextBox;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.TextBox m_mgrsTextBox;
+        private System.Windows.Forms.Button button3;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.TextBox m_osgbYTextBox;
+        private System.Windows.Forms.TextBox m_osgbXTextBox;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Button button4;
+        private System.Windows.Forms.Button button5;
+        private System.Windows.Forms.TextBox m_osgbTextBox;
+    }
+}
diff --git a/dotnet/Projections/TypeIIIProjPanel.cs b/dotnet/Projections/TypeIIIProjPanel.cs
new file mode 100644
index 0000000..675d766
--- /dev/null
+++ b/dotnet/Projections/TypeIIIProjPanel.cs
@@ -0,0 +1,157 @@
+/**
+ * \file NETGeographicLib\TypeIIIProjPanel.cs
+ * \brief NETGeographicLib.projections example
+ *
+ * NETGeographicLib.UTMUPS,
+ * NETGeographicLib.MGRS, and
+ * NETGeographicLib.OSGB example.
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class TypeIIIProjPanel : UserControl
+    {
+        public TypeIIIProjPanel()
+        {
+            InitializeComponent();
+        }
+
+        private void OnConvertLatLon(object sender, EventArgs e)
+        {
+            try
+            {
+                int zone;
+                bool northp;
+                double x, y;
+                string str;
+                double lat = Double.Parse(m_latitudeTextBox.Text);
+                double lon = Double.Parse(m_longitudeTextBox.Text);
+                UTMUPS.Forward(lat, lon, out zone, out northp, out x, out y, (int)UTMUPS.ZoneSpec.STANDARD, true);
+                m_utmPoleCheckBox.Checked = northp;
+                m_utmXTextBox.Text = x.ToString();
+                m_utmYTextBox.Text = y.ToString();
+                m_utmZoneTextBox.Text = zone.ToString();
+                MGRS.Forward(zone,northp,x,y,8,out str );
+                m_mgrsTextBox.Text = str;
+                OSGB.Forward(lat, lon, out x, out y);
+                m_osgbXTextBox.Text = x.ToString();
+                m_osgbYTextBox.Text = y.ToString();
+                OSGB.GridReference(x, y, 8, out str);
+                m_osgbTextBox.Text = str;
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnConvertUTMUPS(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat, lon;
+                string str;
+                double x = Double.Parse(m_utmXTextBox.Text);
+                double y = Double.Parse(m_utmYTextBox.Text);
+                int zone = Int32.Parse(m_utmZoneTextBox.Text);
+                UTMUPS.Reverse(zone, m_utmPoleCheckBox.Checked, x, y, out lat, out lon, true);
+                m_latitudeTextBox.Text = lat.ToString();
+                m_longitudeTextBox.Text = lon.ToString();
+                MGRS.Forward(zone, m_utmPoleCheckBox.Checked, x, y, 8, out str);
+                m_mgrsTextBox.Text = str;
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void OnConvertMGRS(object sender, EventArgs e)
+        {
+            int zone, prec;
+            bool northp;
+            double x, y, lat, lon;
+            MGRS.Reverse(m_mgrsTextBox.Text, out zone, out northp, out x, out y, out prec, true);
+            m_utmPoleCheckBox.Checked = northp;
+            m_utmXTextBox.Text = x.ToString();
+            m_utmYTextBox.Text = y.ToString();
+            m_utmZoneTextBox.Text = zone.ToString();
+            UTMUPS.Reverse(zone, northp, x, y, out lat, out lon, true);
+            m_latitudeTextBox.Text = lat.ToString();
+            m_longitudeTextBox.Text = lon.ToString();
+        }
+
+        private void OnConvertOSGB(object sender, EventArgs e)
+        {
+            // the latitude and longitude returned by OSGB is not WGS84 and should not
+            // be used with UTMUPS or MGRS.
+            double x = Double.Parse(m_osgbXTextBox.Text);
+            double y = Double.Parse(m_osgbYTextBox.Text);
+            double lat, lon;
+            OSGB.Reverse(x, y, out lat, out lon);
+            m_latitudeTextBox.Text = lat.ToString();
+            m_longitudeTextBox.Text = lon.ToString();
+        }
+
+        private void OnValidate(object sender, EventArgs e)
+        {
+            try
+            {
+                string str;
+                int prec, zone, zout;
+                bool northp;
+                double x, y, x1, y1, gamma, k, lat, lon;
+                OSGB.Forward(52.0,-2.0, out x, out y, out gamma, out k);
+                OSGB.Forward(52.0, -2.0, out x1, out y1);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in OSGB.Forward");
+                OSGB.Reverse(x, y, out lat, out lon, out gamma, out k);
+                OSGB.Reverse(x, y, out x1, out y1);
+                if ( lat != x1 || lon != y1 )
+                    throw new Exception("Error in OSGB.Reverse");
+                OSGB.GridReference(x,y,8,out str);
+                OSGB.GridReference(str, out x1, out y1, out prec, true);
+                UTMUPS.StandardZone(32.0, -80.0, (int)UTMUPS.ZoneSpec.STANDARD);
+                UTMUPS.UTMShift();
+                UTMUPS.StandardZone(32.0, -86.0, (int)UTMUPS.ZoneSpec.STANDARD);
+                UTMUPS.Forward(32.0, -86.0, out zone, out northp, out x, out y, out gamma, out k, (int)UTMUPS.ZoneSpec.STANDARD, true);
+                UTMUPS.Forward(32.0, -86.0, out zone, out northp, out x1, out y1, (int)UTMUPS.ZoneSpec.STANDARD, true);
+                if (x != x1 || y != y1)
+                    throw new Exception("Error in UTMUPS.Forward");
+                UTMUPS.Reverse(zone, northp, x, y, out lat, out lon, out gamma, out k, true);
+                UTMUPS.Reverse(zone, northp, x, y, out x1, out y1, true);
+                if (lat != x1 || lon != y1)
+                    throw new Exception("Error in UTMUPS.Reverse");
+                UTMUPS.Transfer(zone, northp, x, y, zone + 1, true, out x1, out y1, out zout);
+                str = UTMUPS.EncodeZone(zone, northp);
+                prec = UTMUPS.EncodeEPSG(zone, northp);
+                UTMUPS.DecodeZone(str, out zone, out northp);
+                UTMUPS.DecodeEPSG(prec, out zone, out northp);
+                MGRS.Forward(zone, northp, x, y, 8, out str);
+                MGRS.Forward(zone, northp, x, y, 32.0, 8, out str);
+                MGRS.Reverse(str, out zone, out northp, out x, out y, out prec, true);
+
+                MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/TypeIIIProjPanel.resx b/dotnet/Projections/TypeIIIProjPanel.resx
new file mode 100644
index 0000000..ed0aef9
--- /dev/null
+++ b/dotnet/Projections/TypeIIIProjPanel.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
diff --git a/dotnet/examples/CS/example-Accumulator.cs b/dotnet/examples/CS/example-Accumulator.cs
new file mode 100644
index 0000000..091a32d
--- /dev/null
+++ b/dotnet/examples/CS/example-Accumulator.cs
@@ -0,0 +1,25 @@
+using System;
+using NETGeographicLib;
+
+namespace example_Accumulator
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                // Compare using Accumulator and ordinary summation for a sum of large and
+                // small terms.
+                double sum = 0;
+                Accumulator acc = new Accumulator();
+                acc.Assign( 0.0 );
+                sum += 1e20; sum += 1; sum += 2; sum += 100; sum += 5000; sum += -1e20;
+                acc.Sum( 1e20 ); acc.Sum( 1 ); acc.Sum( 2 ); acc.Sum( 100 ); acc.Sum( 5000 ); acc.Sum( -1e20 );
+                Console.WriteLine(String.Format("{0} {1}", sum, acc.Result()));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine( String.Format(  "Caught exception: {0}", e.Message ) );
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-AlbersEqualArea.cs b/dotnet/examples/CS/example-AlbersEqualArea.cs
new file mode 100644
index 0000000..bf063d3
--- /dev/null
+++ b/dotnet/examples/CS/example-AlbersEqualArea.cs
@@ -0,0 +1,39 @@
+using System;
+using NETGeographicLib;
+
+namespace example_AlbersEqualArea
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                const double
+                    lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels
+                    k1 = 1,                                   // scale
+                    lon0 = -77 - 45/60.0;                     // Central meridan
+                // Set up basic projection
+                AlbersEqualArea albers = new AlbersEqualArea( Constants.WGS84.MajorRadius,
+                                                              Constants.WGS84.Flattening,
+                                                              lat1, lat2, k1);
+                {
+                    // Sample conversion from geodetic to Albers Equal Area
+                    double lat = 39.95, lon = -75.17;    // Philadelphia
+                    double x, y;
+                    albers.Forward(lon0, lat, lon, out x, out y);
+                    Console.WriteLine( String.Format("X: {0} Y: {1}", x, y ) );
+                }
+                {
+                    // Sample conversion from Albers Equal Area grid to geodetic
+                    double x = 220e3, y = -53e3;
+                    double lat, lon;
+                    albers.Reverse(lon0, x, y, out lat, out lon);
+                    Console.WriteLine( String.Format("Latitude: {0} Longitude: {1}", lat, lon ) );
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) );
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-AzimuthalEquidistant.cs b/dotnet/examples/CS/example-AzimuthalEquidistant.cs
new file mode 100644
index 0000000..94ce609
--- /dev/null
+++ b/dotnet/examples/CS/example-AzimuthalEquidistant.cs
@@ -0,0 +1,34 @@
+using System;
+using NETGeographicLib;
+
+namespace example_AzimuthalEquidistant
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                Geodesic geod = new Geodesic(); // WGS84
+                const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
+                AzimuthalEquidistant proj = new AzimuthalEquidistant(geod);
+                {
+                    // Sample forward calculation
+                    double lat = 50.9, lon = 1.8; // Calais
+                    double x, y;
+                    proj.Forward(lat0, lon0, lat, lon, out x, out y);
+                    Console.WriteLine( String.Format("X: {0} Y: {1}", x, y ) );
+                }
+                {
+                    // Sample reverse calculation
+                    double x = -38e3, y = 230e3;
+                    double lat, lon;
+                    proj.Reverse(lat0, lon0, x, y, out lat, out lon);
+                    Console.WriteLine( String.Format("Latitude: {0} Longitude: {1}", lat, lon ) );
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) );
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-CassiniSoldner.cs b/dotnet/examples/CS/example-CassiniSoldner.cs
new file mode 100644
index 0000000..ac65589
--- /dev/null
+++ b/dotnet/examples/CS/example-CassiniSoldner.cs
@@ -0,0 +1,34 @@
+using System;
+using NETGeographicLib;
+
+namespace example_CassiniSoldner
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                Geodesic geod = new Geodesic(); // WGS84
+                const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
+                CassiniSoldner proj = new CassiniSoldner(lat0, lon0, geod);
+                {
+                    // Sample forward calculation
+                    double lat = 50.9, lon = 1.8; // Calais
+                    double x, y;
+                    proj.Forward(lat, lon, out x, out y);
+                    Console.WriteLine(String.Format("X: {0} Y: {1}", x, y));
+                }
+                {
+                    // Sample reverse calculation
+                    double x = -38e3, y = 230e3;
+                    double lat, lon;
+                    proj.Reverse(x, y, out lat, out lon);
+                    Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) );
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-CircularEngine.cs b/dotnet/examples/CS/example-CircularEngine.cs
new file mode 100644
index 0000000..12e32f5
--- /dev/null
+++ b/dotnet/examples/CS/example-CircularEngine.cs
@@ -0,0 +1,30 @@
+using System;
+using NETGeographicLib;
+
+namespace example_CircularEngine
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            // This computes the same value as example-SphericalHarmonic.cpp using a
+            // CircularEngine (which will be faster if many values on a circle of
+            // latitude are to be found).
+            try {
+                int N = 3;                  // The maxium degree
+                double[] ca = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // cosine coefficients
+                double[] sa = {6, 5, 4, 3, 2, 1}; // sine coefficients
+                double a = 1;
+                SphericalHarmonic h = new SphericalHarmonic(ca, sa, N, a, SphericalHarmonic.Normalization.SCHMIDT);
+                double x = 2, y = 3, z = 1, p = Math.Sqrt(x*x+y*y);
+                CircularEngine circ = h.Circle(p, z, true);
+                double v, vx, vy, vz;
+                v = circ.LongitudeSum(x/p, y/p, out vx, out vy, out vz);
+                Console.WriteLine(String.Format("{0} {1} {2} {3}", v, vx, vy, vz));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-DMS.cs b/dotnet/examples/CS/example-DMS.cs
new file mode 100644
index 0000000..0f070b0
--- /dev/null
+++ b/dotnet/examples/CS/example-DMS.cs
@@ -0,0 +1,28 @@
+using System;
+using NETGeographicLib;
+
+namespace example_DMS
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+            {
+                string dms = "30d14'45.6\"S";
+                DMS.Flag type;
+                double ang = DMS.Decode(dms, out type);
+                Console.WriteLine(String.Format("Type: {0} String: {1}", type, ang));
+            }
+            {
+                double ang = -30.245715;
+                string dms = DMS.Encode(ang, 6, DMS.Flag.LATITUDE, 0);
+                Console.WriteLine(String.Format("Latitude: {0}", dms));
+            }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) );
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-Ellipsoid.cs b/dotnet/examples/CS/example-Ellipsoid.cs
new file mode 100644
index 0000000..8f61b99
--- /dev/null
+++ b/dotnet/examples/CS/example-Ellipsoid.cs
@@ -0,0 +1,29 @@
+using System;
+using NETGeographicLib;
+
+namespace example_Ellipsoid
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                Ellipsoid wgs84 = new Ellipsoid( Constants.WGS84.MajorRadius,
+                                                 Constants.WGS84.Flattening);
+                // Alternatively: Ellipsoid wgs84 = new Ellipsoid();
+                Console.WriteLine( String.Format(
+                    "The latitude half way between the equator and the pole is {0}",
+                     wgs84.InverseRectifyingLatitude(45)) );
+                Console.WriteLine( String.Format(
+                    "Half the area of the ellipsoid lies between latitudes +/- {0}",
+                    wgs84.InverseAuthalicLatitude(30))); ;
+                Console.WriteLine( String.Format(
+                    "The northernmost edge of a square Mercator map is at latitude {0}",
+                    wgs84.InverseIsometricLatitude(180)));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) );
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-EllipticFunction.cs b/dotnet/examples/CS/example-EllipticFunction.cs
new file mode 100644
index 0000000..17d4b9d
--- /dev/null
+++ b/dotnet/examples/CS/example-EllipticFunction.cs
@@ -0,0 +1,39 @@
+using System;
+using NETGeographicLib;
+
+namespace example_EllipticFunction
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                EllipticFunction ell = new EllipticFunction(0.1, 1.0);  // parameter m = 0.1
+                // See Abramowitz and Stegun, table 17.1
+                Console.WriteLine( String.Format( "{0} {1}", ell.K(), ell.E()));
+                double phi = 20 * Math.Acos(-1.0) / 180.0;;
+                // See Abramowitz and Stegun, table 17.6 with
+                // alpha = asin(sqrt(m)) = 18.43 deg and phi = 20 deg
+                Console.WriteLine( String.Format("{0} {1}", ell.E(phi),
+                        ell.E(Math.Sin(phi), Math.Cos(phi),
+                            Math.Sqrt(1 - ell.k2 * Math.Sin(phi) * Math.Sin(phi))) ) );
+                // See Carlson 1995, Sec 3.
+                Console.WriteLine(String.Format("RF(1,2,0)      = {0}", EllipticFunction.RF(1,2)));
+                Console.WriteLine(String.Format("RF(2,3,4)      = {0}", EllipticFunction.RF(2,3,4)));
+                Console.WriteLine(String.Format("RC(0,1/4)      = {0}", EllipticFunction.RC(0,0.25)));
+                Console.WriteLine(String.Format("RC(9/4,2)      = {0}", EllipticFunction.RC(2.25,2)));
+                Console.WriteLine(String.Format("RC(1/4,-2)     = {0}", EllipticFunction.RC(0.25,-2)));
+                Console.WriteLine(String.Format("RJ(0,1,2,3)    = {0}", EllipticFunction.RJ(0,1,2,3)));
+                Console.WriteLine(String.Format("RJ(2,3,4,5)    = {0}", EllipticFunction.RJ(2,3,4,5)));
+                Console.WriteLine(String.Format("RD(0,2,1)      = {0}", EllipticFunction.RD(0,2,1)));
+                Console.WriteLine(String.Format("RD(2,3,4)      = {0}", EllipticFunction.RD(2,3,4)));
+                Console.WriteLine(String.Format("RG(0,16,16)    = {0}", EllipticFunction.RG(16,16)));
+                Console.WriteLine(String.Format("RG(2,3,4)      = {0}", EllipticFunction.RG(2,3,4)));
+                Console.WriteLine(String.Format("RG(0,0.0796,4) = {0}", EllipticFunction.RG(0.0796, 4)));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) );
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-GeoCoords.cs b/dotnet/examples/CS/example-GeoCoords.cs
new file mode 100644
index 0000000..a62b1aa
--- /dev/null
+++ b/dotnet/examples/CS/example-GeoCoords.cs
@@ -0,0 +1,26 @@
+using System;
+using NETGeographicLib;
+
+namespace example_GeoCoords
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                // Miscellaneous conversions
+                double lat = 33.3, lon = 44.4;
+                GeoCoords c = new GeoCoords(lat, lon, -1);
+                Console.WriteLine(c.MGRSRepresentation(-3));
+                c.Reset("18TWN0050", true, false);
+                Console.WriteLine(c.DMSRepresentation(0, false, 0));
+                Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", c.Latitude, c.Longitude));
+                c.Reset("1d38'W 55d30'N", true, false);
+                Console.WriteLine(c.GeoRepresentation(0, false));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-Geocentric.cs b/dotnet/examples/CS/example-Geocentric.cs
new file mode 100644
index 0000000..7fb837b
--- /dev/null
+++ b/dotnet/examples/CS/example-Geocentric.cs
@@ -0,0 +1,37 @@
+using System;
+using NETGeographicLib;
+
+namespace example_Geocentric
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                Geocentric earth = new Geocentric( Constants.WGS84.MajorRadius,
+                                                   Constants.WGS84.Flattening);
+                // Alternatively: Geocentric earth = new Geocentric();
+                {
+                    // Sample forward calculation
+                    double lat = 27.99, lon = 86.93, h = 8820; // Mt Everest
+                    double X, Y, Z;
+                    earth.Forward(lat, lon, h, out X, out Y, out Z);
+                    Console.WriteLine( String.Format( "{0} {1} {2}",
+                        Math.Floor(X / 1000 + 0.5),
+                        Math.Floor(Y / 1000 + 0.5),
+                        Math.Floor(Z / 1000 + 0.5) ) );
+                }
+                {
+                    // Sample reverse calculation
+                    double X = 302e3, Y = 5636e3, Z = 2980e3;
+                    double lat, lon, h;
+                    earth.Reverse(X, Y, Z, out lat, out lon, out h);
+                    Console.WriteLine(String.Format("{0} {1} {2}", lat, lon, h));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) );
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-Geodesic.cs b/dotnet/examples/CS/example-Geodesic.cs
new file mode 100644
index 0000000..6cab6c5
--- /dev/null
+++ b/dotnet/examples/CS/example-Geodesic.cs
@@ -0,0 +1,36 @@
+using System;
+using NETGeographicLib;
+
+namespace example_Geodesic
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                Geodesic geod = new Geodesic( Constants.WGS84.MajorRadius,
+                                              Constants.WGS84.Flattening );
+                // Alternatively: Geodesic geod = new Geodesic();
+                {
+                    // Sample direct calculation, travelling about NE from JFK
+                    double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
+                    double lat2, lon2;
+                    geod.Direct(lat1, lon1, azi1, s12, out lat2, out lon2);
+                    Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat2, lon2));
+                }
+                {
+                    // Sample inverse calculation, JFK to LHR
+                    double
+                    lat1 = 40.6, lon1 = -73.8, // JFK Airport
+                    lat2 = 51.6, lon2 = -0.5;  // LHR Airport
+                    double s12;
+                    geod.Inverse(lat1, lon1, lat2, lon2, out s12);
+                    Console.WriteLine( s12 );
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-GeodesicExact.cs b/dotnet/examples/CS/example-GeodesicExact.cs
new file mode 100644
index 0000000..027d867
--- /dev/null
+++ b/dotnet/examples/CS/example-GeodesicExact.cs
@@ -0,0 +1,36 @@
+using System;
+using NETGeographicLib;
+
+namespace example_GeodesicExact
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                GeodesicExact geod = new GeodesicExact( Constants.WGS84.MajorRadius,
+                                                        Constants.WGS84.Flattening );
+                // Alternatively: GeodesicExact geod = new GeodesicExact();
+                {
+                    // Sample direct calculation, travelling about NE from JFK
+                    double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
+                    double lat2, lon2;
+                    geod.Direct(lat1, lon1, azi1, s12, out lat2, out lon2);
+                    Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat2, lon2));
+                }
+                {
+                    // Sample inverse calculation, JFK to LHR
+                    double
+                    lat1 = 40.6, lon1 = -73.8, // JFK Airport
+                    lat2 = 51.6, lon2 = -0.5;  // LHR Airport
+                    double s12;
+                    geod.Inverse(lat1, lon1, lat2, lon2, out s12);
+                    Console.WriteLine(s12);
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-GeodesicLine.cs b/dotnet/examples/CS/example-GeodesicLine.cs
new file mode 100644
index 0000000..a760caa
--- /dev/null
+++ b/dotnet/examples/CS/example-GeodesicLine.cs
@@ -0,0 +1,50 @@
+using System;
+using NETGeographicLib;
+
+namespace example_GeodesicLine
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try
+            {
+                // Print waypoints between JFK and SIN
+                Geodesic geod = new Geodesic(); // WGS84
+                double
+                    lat1 = 40.640, lon1 = -73.779, // JFK
+                    lat2 = 1.359, lon2 = 103.989; // SIN
+                double s12, azi1, azi2,
+                    a12 = geod.Inverse(lat1, lon1, lat2, lon2, out s12, out azi1, out azi2);
+                GeodesicLine line = new GeodesicLine(geod, lat1, lon1, azi1, Mask.ALL);
+                // Alternatively GeodesicLine line = geod.Line(lat1, lon1, azi1, Mask.ALL);
+                double ds = 500e3;          // Nominal distance between points = 500 km
+                int num = (int)(Math.Ceiling(s12 / ds)); // The number of intervals
+                {
+                    // Use intervals of equal length
+                    ds = s12 / num;
+                    for (int i = 0; i <= num; ++i)
+                    {
+                        double lat, lon;
+                        line.Position(i * ds, out lat, out lon);
+                        Console.WriteLine(String.Format("i: {0} Latitude: {1} Longitude: {2}", i, lat, lon));
+                    }
+                }
+                {
+                    // Slightly faster, use intervals of equal arc length
+                    double da = a12 / num;
+                    for (int i = 0; i <= num; ++i)
+                    {
+                        double lat, lon;
+                        line.ArcPosition(i * da, out lat, out lon);
+                        Console.WriteLine(String.Format("i: {0} Latitude: {1} Longitude: {2}", i, lat, lon));
+                    }
+                }
+            }
+            catch (GeographicErr e)
+            {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-GeodesicLineExact.cs b/dotnet/examples/CS/example-GeodesicLineExact.cs
new file mode 100644
index 0000000..2ca3716
--- /dev/null
+++ b/dotnet/examples/CS/example-GeodesicLineExact.cs
@@ -0,0 +1,46 @@
+using System;
+using NETGeographicLib;
+
+namespace example_GeodesicLineExact
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                // Print waypoints between JFK and SIN
+                GeodesicExact geod = new GeodesicExact(); // WGS84
+                double
+                    lat1 = 40.640, lon1 = -73.779, // JFK
+                    lat2 =  1.359, lon2 = 103.989; // SIN
+                double s12, azi1, azi2,
+                    a12 = geod.Inverse(lat1, lon1, lat2, lon2, out s12, out azi1, out azi2);
+                GeodesicLineExact line = new GeodesicLineExact(geod, lat1, lon1, azi1, Mask.ALL);
+                // Alternatively GeodesicLine line = geod.Line(lat1, lon1, azi1, Mask.ALL);
+                double ds = 500e3;          // Nominal distance between points = 500 km
+                int num = (int)(Math.Ceiling(s12 / ds)); // The number of intervals
+                {
+                    // Use intervals of equal length
+                    ds = s12 / num;
+                    for (int i = 0; i <= num; ++i) {
+                        double lat, lon;
+                        line.Position(i * ds, out lat, out lon);
+                        Console.WriteLine( String.Format( "i: {0} Latitude: {1} Longitude: {2}", i, lat, lon ));
+                    }
+                }
+                {
+                    // Slightly faster, use intervals of equal arc length
+                    double da = a12 / num;
+                    for (int i = 0; i <= num; ++i) {
+                        double lat, lon;
+                        line.ArcPosition(i * da, out lat, out lon);
+                        Console.WriteLine( String.Format( "i: {0} Latitude: {1} Longitude: {2}", i, lat, lon ));
+                    }
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-Geohash.cs b/dotnet/examples/CS/example-Geohash.cs
new file mode 100644
index 0000000..7d31e63
--- /dev/null
+++ b/dotnet/examples/CS/example-Geohash.cs
@@ -0,0 +1,37 @@
+using System;
+using NETGeographicLib;
+
+namespace example_Geohash
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                {
+                    // Sample forward calculation
+                    double lat = 57.64911, lon = 10.40744; // Jutland (the wikipedia example)
+                    string geohash;
+                    int maxlen = Geohash.GeohashLength(1.0e-5);
+                    for (int len = 0; len <= maxlen; ++len) {
+                        Geohash.Forward(lat, lon, len, out geohash);
+                        Console.WriteLine( geohash );
+                    }
+                }
+                {
+                    // Sample reverse calculation
+                    string geohash = "u4pruydqqvj";
+                    double lat, lon;
+                    for (int i = 0; i <= geohash.Length; ++i) {
+                        int len;
+                        Geohash.Reverse(geohash.Substring(0, i), out lat, out lon, out len, true);
+                        Console.WriteLine(String.Format("Length: {0} Latitude: {1} Longitude: {2}", len, lat, lon ) );
+                    }
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-Geoid.cs b/dotnet/examples/CS/example-Geoid.cs
new file mode 100644
index 0000000..974c641
--- /dev/null
+++ b/dotnet/examples/CS/example-Geoid.cs
@@ -0,0 +1,25 @@
+using System;
+using NETGeographicLib;
+
+namespace example_Geoid
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                Geoid egm96 = new Geoid("egm96-5", "", true, false);
+                // Convert height above egm96 to height above the ellipsoid
+                double lat = 42, lon = -75, height_above_geoid = 20;
+                double
+                    geoid_height = egm96.Height(lat, lon),
+                    height_above_ellipsoid = (height_above_geoid +
+                        (double)Geoid.ConvertFlag.GEOIDTOELLIPSOID * geoid_height);
+                Console.WriteLine(height_above_ellipsoid);
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-Gnomonic.cs b/dotnet/examples/CS/example-Gnomonic.cs
new file mode 100644
index 0000000..132e607
--- /dev/null
+++ b/dotnet/examples/CS/example-Gnomonic.cs
@@ -0,0 +1,34 @@
+using System;
+using NETGeographicLib;
+
+namespace example_Gnomonic
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                Geodesic geod = new Geodesic(); // WGS84
+                const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
+                Gnomonic proj = new Gnomonic(geod);
+                {
+                    // Sample forward calculation
+                    double lat = 50.9, lon = 1.8; // Calais
+                    double x, y;
+                    proj.Forward(lat0, lon0, lat, lon, out x, out y);
+                    Console.WriteLine(String.Format("X: {0} Y: {1}", x, y));
+                }
+                {
+                    // Sample reverse calculation
+                    double x = -38e3, y = 230e3;
+                    double lat, lon;
+                    proj.Reverse(lat0, lon0, x, y, out lat, out lon);
+                    Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-GravityCircle.cs b/dotnet/examples/CS/example-GravityCircle.cs
new file mode 100644
index 0000000..5de81cc
--- /dev/null
+++ b/dotnet/examples/CS/example-GravityCircle.cs
@@ -0,0 +1,40 @@
+using System;
+using NETGeographicLib;
+
+namespace example_GravityCircle
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                GravityModel grav = new GravityModel("egm96", "");
+                double lat = 27.99, lon0 = 86.93, h = 8820; // Mt Everest
+                {
+                    // Slow method of evaluating the values at several points on a circle of
+                    // latitude.
+                    for (int i = -5; i <= 5; ++i) {
+                        double lon = lon0 + i * 0.2;
+                        double gx, gy, gz;
+                        grav.Gravity(lat, lon, h, out gx, out gy, out gz);
+                        Console.WriteLine(String.Format("{0} {1} {2} {3}", lon, gx, gy, gz));
+                    }
+                }
+                {
+                    // Fast method of evaluating the values at several points on a circle of
+                    // latitude using GravityCircle.
+                    GravityCircle circ = grav.Circle(lat, h, GravityModel.Mask.ALL);
+                    for (int i = -5; i <= 5; ++i) {
+                        double lon = lon0 + i * 0.2;
+                        double gx, gy, gz;
+                        circ.Gravity(lon, out gx, out gy, out gz);
+                        Console.WriteLine(String.Format("{0} {1} {2} {3}", lon, gx, gy, gz));
+                    }
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-GravityModel.cs b/dotnet/examples/CS/example-GravityModel.cs
new file mode 100644
index 0000000..e43b82e
--- /dev/null
+++ b/dotnet/examples/CS/example-GravityModel.cs
@@ -0,0 +1,22 @@
+using System;
+using NETGeographicLib;
+
+namespace example_GravityModel
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                GravityModel grav = new GravityModel("egm96","");
+                double lat = 27.99, lon = 86.93, h = 8820; // Mt Everest
+                double gx, gy, gz;
+                grav.Gravity(lat, lon, h, out gx, out gy, out gz);
+                Console.WriteLine(String.Format("{0} {1} {2}", gx, gy, gz));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-LambertConformalConic.cs b/dotnet/examples/CS/example-LambertConformalConic.cs
new file mode 100644
index 0000000..4efa813
--- /dev/null
+++ b/dotnet/examples/CS/example-LambertConformalConic.cs
@@ -0,0 +1,48 @@
+using System;
+using NETGeographicLib;
+
+namespace example_LambertConformalConic
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                // Define the Pennsylvania South state coordinate system EPSG:3364
+                // http://www.spatialreference.org/ref/epsg/3364/
+                const double
+                    lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels
+                    k1 = 1,                                   // scale
+                    lat0 = 39 + 20/60.0, lon0 =-77 - 45/60.0, // origin
+                    fe = 600000, fn = 0;                      // false easting and northing
+                // Set up basic projection
+                LambertConformalConic PASouth = new LambertConformalConic( Constants.WGS84.MajorRadius,
+                                                                           Constants.WGS84.Flattening,
+                                                                           lat1, lat2, k1);
+                double x0, y0;
+                // Transform origin point
+                PASouth.Forward(lon0, lat0, lon0, out x0, out y0);
+                x0 -= fe; y0 -= fn;
+                {
+                    // Sample conversion from geodetic to PASouth grid
+                    double lat = 39.95, lon = -75.17;    // Philadelphia
+                    double x, y;
+                    PASouth.Forward(lon0, lat, lon, out x, out y);
+                    x -= x0; y -= y0;
+                    Console.WriteLine( String.Format("{0} {1}", x, y) );
+                }
+                {
+                    // Sample conversion from PASouth grid to geodetic
+                    double x = 820e3, y = 72e3;
+                    double lat, lon;
+                    x += x0; y += y0;
+                    PASouth.Reverse(lon0, x, y, out lat, out lon);
+                    Console.WriteLine( String.Format("{0} {1}", lat, lon) );
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine( String.Format("Caught exception: {0}", e.Message) );
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-LocalCartesian.cs b/dotnet/examples/CS/example-LocalCartesian.cs
new file mode 100644
index 0000000..b47987d
--- /dev/null
+++ b/dotnet/examples/CS/example-LocalCartesian.cs
@@ -0,0 +1,34 @@
+using System;
+using NETGeographicLib;
+
+namespace example_LocalCartesian
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                Geocentric earth = new Geocentric();
+                const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
+                LocalCartesian proj = new LocalCartesian(lat0, lon0, 0, earth);
+                {
+                    // Sample forward calculation
+                    double lat = 50.9, lon = 1.8, h = 0; // Calais
+                    double x, y, z;
+                    proj.Forward(lat, lon, h, out x, out y, out z);
+                    Console.WriteLine(String.Format("{0} {1} {2}", x, y, z));
+                }
+                {
+                    // Sample reverse calculation
+                    double x = -38e3, y = 230e3, z = -4e3;
+                    double lat, lon, h;
+                    proj.Reverse(x, y, z, out lat, out lon, out h);
+                    Console.WriteLine(String.Format("{0} {1} {2}", lat, lon, h));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-MGRS.cs b/dotnet/examples/CS/example-MGRS.cs
new file mode 100644
index 0000000..62dc203
--- /dev/null
+++ b/dotnet/examples/CS/example-MGRS.cs
@@ -0,0 +1,40 @@
+using System;
+using NETGeographicLib;
+
+namespace example_MGRS
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                // See also example-GeoCoords.cpp
+                {
+                    // Sample forward calculation
+                    double lat = 33.3, lon = 44.4; // Baghdad
+                    int zone;
+                    bool northp;
+                    double x, y;
+                    UTMUPS.Forward(lat, lon, out zone, out northp, out x, out y, -1, true);
+                    string mgrs;
+                    MGRS.Forward(zone, northp, x, y, lat, 5, out mgrs);
+                    Console.WriteLine(mgrs);
+                }
+                {
+                    // Sample reverse calculation
+                    string mgrs = "38SMB4488";
+                    int zone, prec;
+                    bool northp;
+                    double x, y;
+                    MGRS.Reverse(mgrs, out zone, out northp, out x, out y, out prec, true);
+                    double lat, lon;
+                    UTMUPS.Reverse(zone, northp, x, y, out lat, out lon, true);
+                    Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-MagneticCircle.cs b/dotnet/examples/CS/example-MagneticCircle.cs
new file mode 100644
index 0000000..1c92f6f
--- /dev/null
+++ b/dotnet/examples/CS/example-MagneticCircle.cs
@@ -0,0 +1,40 @@
+using System;
+using NETGeographicLib;
+
+namespace example_MagneticCircle
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                MagneticModel mag = new MagneticModel("wmm2010","");
+                double lat = 27.99, lon0 = 86.93, h = 8820, t = 2012; // Mt Everest
+                {
+                    // Slow method of evaluating the values at several points on a circle of
+                    // latitude.
+                    for (int i = -5; i <= 5; ++i) {
+                        double lon = lon0 + i * 0.2;
+                        double Bx, By, Bz;
+                        mag.Field(t, lat, lon, h, out Bx, out By, out Bz);
+                        Console.WriteLine(String.Format("{0} {1} {2} {3}", lon, Bx, By, Bz));
+                    }
+                }
+                {
+                    // Fast method of evaluating the values at several points on a circle of
+                    // latitude using MagneticCircle.
+                    MagneticCircle circ = mag.Circle(t, lat, h);
+                    for (int i = -5; i <= 5; ++i) {
+                        double lon = lon0 + i * 0.2;
+                        double Bx, By, Bz;
+                        circ.Field(lon, out Bx, out By, out Bz);
+                        Console.WriteLine(String.Format("{0} {1} {2} {3}", lon, Bx, By, Bz));
+                    }
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-MagneticModel.cs b/dotnet/examples/CS/example-MagneticModel.cs
new file mode 100644
index 0000000..9823707
--- /dev/null
+++ b/dotnet/examples/CS/example-MagneticModel.cs
@@ -0,0 +1,24 @@
+using System;
+using NETGeographicLib;
+
+namespace example_MagneticModel
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                MagneticModel mag = new MagneticModel("wmm2010","");
+                double lat = 27.99, lon = 86.93, h = 8820, t = 2012; // Mt Everest
+                double Bx, By, Bz;
+                mag.Field(t, lat,lon, h, out Bx, out By, out Bz);
+                double H, F, D, I;
+                MagneticModel.FieldComponents(Bx, By, Bz, out H, out F, out D, out I);
+                Console.WriteLine(String.Format("{0} {1} {2} {3}", H, F, D, I));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-NormalGravity.cs b/dotnet/examples/CS/example-NormalGravity.cs
new file mode 100644
index 0000000..73d9af3
--- /dev/null
+++ b/dotnet/examples/CS/example-NormalGravity.cs
@@ -0,0 +1,22 @@
+using System;
+using NETGeographicLib;
+
+namespace example_NormalGravity
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                NormalGravity grav = new NormalGravity(NormalGravity.StandardModels.WGS84);
+                double lat = 27.99, h = 8820; // Mt Everest
+                double gammay, gammaz;
+                grav.Gravity(lat, h, out gammay, out gammaz);
+                Console.WriteLine(String.Format("{0} {1}", gammay, gammaz));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-OSGB.cs b/dotnet/examples/CS/example-OSGB.cs
new file mode 100644
index 0000000..f5d70c2
--- /dev/null
+++ b/dotnet/examples/CS/example-OSGB.cs
@@ -0,0 +1,39 @@
+using System;
+using NETGeographicLib;
+
+namespace example_OSGB
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                {
+                    // Sample forward calculation from
+                    // A guide to coordinate systems in Great Britain
+                    double
+                    lat = DMS.Decode(52,39,27.2531),
+                    lon = DMS.Decode( 1,43, 4.5177);
+                    double x, y;
+                    OSGB.Forward(lat, lon, out x, out y);
+                    string gridref;
+                    OSGB.GridReference(x, y, 2, out gridref);
+                    Console.WriteLine(String.Format("{0} {1} {2}", x, y, gridref));
+                }
+                {
+                    // Sample reverse calculation
+                    string gridref = "TG5113";
+                    double x, y;
+                    int prec;
+                    OSGB.GridReference(gridref, out x, out y, out prec, true);
+                    double lat, lon;
+                    OSGB.Reverse(x, y, out lat, out lon);
+                    Console.WriteLine(String.Format("{0} {1} {2}", prec, lat, lon));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-PolarStereographic.cs b/dotnet/examples/CS/example-PolarStereographic.cs
new file mode 100644
index 0000000..08a2429
--- /dev/null
+++ b/dotnet/examples/CS/example-PolarStereographic.cs
@@ -0,0 +1,33 @@
+using System;
+using NETGeographicLib;
+
+namespace example_PolarStereographic
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                PolarStereographic proj = new PolarStereographic(); // WGS84
+                bool northp = true;
+                {
+                    // Sample forward calculation
+                    double lat = 61.2, lon = -149.9; // Anchorage
+                    double x, y;
+                    proj.Forward(northp, lat, lon, out x, out y);
+                    Console.WriteLine(String.Format("{0} {1}", x, y));
+                }
+                {
+                    // Sample reverse calculation
+                    double x = -1637e3, y = 2824e3;
+                    double lat, lon;
+                    proj.Reverse(northp, x, y, out lat, out lon);
+                    Console.WriteLine(String.Format("{0} {1}", lat, lon));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-PolygonArea.cs b/dotnet/examples/CS/example-PolygonArea.cs
new file mode 100644
index 0000000..12dedae
--- /dev/null
+++ b/dotnet/examples/CS/example-PolygonArea.cs
@@ -0,0 +1,26 @@
+using System;
+using NETGeographicLib;
+
+namespace example_PolygonArea
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                Geodesic geod = new Geodesic();  // WGS84
+                PolygonArea poly = new PolygonArea(geod, true);
+                poly.AddPoint( 52,  0);     // London
+                poly.AddPoint( 41,-74);     // New York
+                poly.AddPoint(-23,-43);     // Rio de Janeiro
+                poly.AddPoint(-26, 28);     // Johannesburg
+                double perimeter, area;
+                uint n = poly.Compute(false, true, out perimeter, out area);
+                Console.WriteLine(String.Format("{0} {1} {2}", n, perimeter, area));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-SphericalHarmonic.cs b/dotnet/examples/CS/example-SphericalHarmonic.cs
new file mode 100644
index 0000000..ca541d7
--- /dev/null
+++ b/dotnet/examples/CS/example-SphericalHarmonic.cs
@@ -0,0 +1,26 @@
+using System;
+using NETGeographicLib;
+
+namespace example_SphericalHarmonic
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                int N = 3;                  // The maximum degree
+                double[] ca = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // cosine coefficients
+                double[] sa = {6, 5, 4, 3, 2, 1}; // sine coefficients
+                double a = 1;
+                SphericalHarmonic h = new SphericalHarmonic(ca, sa, N, a, SphericalHarmonic.Normalization.SCHMIDT);
+                double x = 2, y = 3, z = 1;
+                double v, vx, vy, vz;
+                v = h.HarmonicSum(x, y, z, out vx, out vy, out vz);
+                Console.WriteLine(String.Format("{0} {1} {2} {3}", v, vx, vy, vz));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-SphericalHarmonic1.cs b/dotnet/examples/CS/example-SphericalHarmonic1.cs
new file mode 100644
index 0000000..f295f78
--- /dev/null
+++ b/dotnet/examples/CS/example-SphericalHarmonic1.cs
@@ -0,0 +1,28 @@
+using System;
+using NETGeographicLib;
+
+namespace example_SphericalHarmonic1
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                int N = 3, N1 = 2;                  // The maximum degrees
+                double[] ca = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // cosine coefficients
+                double[] sa = {6, 5, 4, 3, 2, 1}; // sine coefficients
+                double[] cb = {1, 2, 3, 4, 5, 6};
+                double[] sb = {3, 2, 1};
+                double a = 1;
+                SphericalHarmonic1 h = new SphericalHarmonic1(ca, sa, N, cb, sb, N1, a, SphericalHarmonic1.Normalization.SCHMIDT);
+                double tau = 0.1, x = 2, y = 3, z = 1;
+                double v, vx, vy, vz;
+                v = h.HarmonicSum(tau, x, y, z, out vx, out vy, out vz);
+                Console.WriteLine(String.Format("{0} {1} {2} {3}", v, vx, vy, vz));
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-SphericalHarmonic2.cs b/dotnet/examples/CS/example-SphericalHarmonic2.cs
new file mode 100644
index 0000000..5fc5b91
--- /dev/null
+++ b/dotnet/examples/CS/example-SphericalHarmonic2.cs
@@ -0,0 +1,35 @@
+using System;
+using NETGeographicLib;
+
+namespace example_SphericalHarmonic2
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try
+            {
+                int N = 3, N1 = 2, N2 = 1;                     // The maximum degrees
+                double[] ca = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; // cosine coefficients
+                double[] sa = { 6, 5, 4, 3, 2, 1 }; // sine coefficients
+                double[] cb = { 1, 2, 3, 4, 5, 6 };
+                double[] sb = { 3, 2, 1 };
+                double[] cc = { 2, 1 };
+                double[] S2 = { 0 };
+                double a = 1;
+                SphericalHarmonic2 h = new SphericalHarmonic2(
+                                        ca, sa, N, N, N, cb, sb, N1, N1, N1,
+                                        cc, S2, N2, N2, 0, a,
+                                        SphericalHarmonic2.Normalization.SCHMIDT);
+                double tau1 = 0.1, tau2 = 0.05, x = 2, y = 3, z = 1;
+                double v, vx, vy, vz;
+                v = h.HarmonicSum(tau1, tau2, x, y, z, out vx, out vy, out vz);
+                Console.WriteLine(String.Format("{0} {1} {2} {3}", v, vx, vy, vz));
+            }
+            catch (GeographicErr e)
+            {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-TransverseMercator.cs b/dotnet/examples/CS/example-TransverseMercator.cs
new file mode 100644
index 0000000..c15611a
--- /dev/null
+++ b/dotnet/examples/CS/example-TransverseMercator.cs
@@ -0,0 +1,33 @@
+using System;
+using NETGeographicLib;
+
+namespace example_TransverseMercator
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                TransverseMercator proj = new TransverseMercator(); // WGS84
+                double lon0 = -75;          // Central meridian for UTM zone 18
+                {
+                    // Sample forward calculation
+                    double lat = 40.3, lon = -74.7; // Princeton, NJ
+                    double x, y;
+                    proj.Forward(lon0, lat, lon, out x, out y);
+                    Console.WriteLine(String.Format("{0} {1}", x, y));
+                }
+                {
+                    // Sample reverse calculation
+                    double x = 25e3, y = 4461e3;
+                    double lat, lon;
+                    proj.Reverse(lon0, x, y, out lat, out lon);
+                    Console.WriteLine(String.Format("{0} {1}", lat, lon));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-TransverseMercatorExact.cs b/dotnet/examples/CS/example-TransverseMercatorExact.cs
new file mode 100644
index 0000000..548e6da
--- /dev/null
+++ b/dotnet/examples/CS/example-TransverseMercatorExact.cs
@@ -0,0 +1,33 @@
+using System;
+using NETGeographicLib;
+
+namespace example_TransverseMercatorExact
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                TransverseMercatorExact proj = new TransverseMercatorExact(); // WGS84
+                double lon0 = -75;          // Central meridian for UTM zone 18
+                {
+                    // Sample forward calculation
+                    double lat = 40.3, lon = -74.7; // Princeton, NJ
+                    double x, y;
+                    proj.Forward(lon0, lat, lon, out x, out y);
+                    Console.WriteLine(String.Format("{0} {1}", x, y));
+                }
+                {
+                    // Sample reverse calculation
+                    double x = 25e3, y = 4461e3;
+                    double lat, lon;
+                    proj.Reverse(lon0, x, y, out lat, out lon);
+                    Console.WriteLine(String.Format("{0} {1}", lat, lon));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-UTMUPS.cs b/dotnet/examples/CS/example-UTMUPS.cs
new file mode 100644
index 0000000..2e8594d
--- /dev/null
+++ b/dotnet/examples/CS/example-UTMUPS.cs
@@ -0,0 +1,39 @@
+using System;
+using NETGeographicLib;
+
+namespace example_UTMUPS
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+                // See also example-GeoCoords.cpp
+                {
+                    // Sample forward calculation
+                    double lat = 33.3, lon = 44.4; // Baghdad
+                    int zone;
+                    bool northp;
+                    double x, y;
+                    UTMUPS.Forward(lat, lon, out zone, out northp, out x, out y, -1, true);
+                    string zonestr = UTMUPS.EncodeZone(zone, northp);
+                    Console.WriteLine(String.Format("{0} {1} {2}", zonestr, x, y));
+                }
+                {
+                    // Sample reverse calculation
+                    string zonestr = "38N";
+                    int zone;
+                    bool northp;
+                    UTMUPS.DecodeZone(zonestr, out zone, out northp);
+                    double x = 444e3, y = 3688e3;
+                    double lat, lon;
+                    UTMUPS.Reverse(zone, northp, x, y, out lat, out lon, true);
+                    Console.WriteLine(String.Format("{0} {1}", lat,lon));
+                }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/ManagedCPP/CMakeLists.txt b/dotnet/examples/ManagedCPP/CMakeLists.txt
new file mode 100644
index 0000000..ceee57c
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Compile (but don't install) a bunch of tiny example programs for
+# NETGeographic.  These are mainly for including as examples within the
+# doxygen documentation; however, compiling them catches most obvious
+# blunders.
+
+file (GLOB EXAMPLE_SOURCES example-*.cpp)
+set (EXAMPLES)
+
+foreach (EXAMPLE_SOURCE ${EXAMPLE_SOURCES})
+  get_filename_component (EXAMPLE ${EXAMPLE_SOURCE} NAME_WE)
+  set (EXAMPLE "net${EXAMPLE}")
+  set (EXAMPLES ${EXAMPLES} ${EXAMPLE})
+  add_executable (${EXAMPLE} EXCLUDE_FROM_ALL ${EXAMPLE_SOURCE})
+  add_dependencies (${EXAMPLE} ${NETGEOGRAPHICLIB_LIBRARIES})
+  set_target_properties (${EXAMPLE} PROPERTIES COMPILE_FLAGS "/clr")
+  # This is set up for Release builds only.  Change
+  # Release/NETGeographic.dll to Debug/NETGeographic_d.dll for Debug
+  # builds.
+  set_target_properties (${EXAMPLE} PROPERTIES VS_DOTNET_REFERENCES
+    "${CMAKE_CURRENT_BINARY_DIR}/../../NETGeographicLib/Release/NETGeographic.dll")
+endforeach ()
+
+string (REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+string (REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+
+add_custom_target (netexamples DEPENDS ${EXAMPLES})
+
+get_target_property (_LIBTYPE ${PROJECT_LIBRARIES} TYPE)
+if (_LIBTYPE STREQUAL "SHARED_LIBRARY")
+  # Copy the shared library on Windows systems to this directory
+  # (examples) so that the tests can be run.
+  add_custom_command (TARGET netexamples POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E
+    copy $<TARGET_FILE:${PROJECT_LIBRARIES}> ${CMAKE_CFG_INTDIR}
+    COMMENT "Copying shared library to examples directory")
+endif ()
+
+# Put all the examples into a folder in the IDE
+set_property (TARGET netexamples ${EXAMPLES} PROPERTY FOLDER .NET-examples)
diff --git a/dotnet/examples/ManagedCPP/example-Accumulator.cpp b/dotnet/examples/ManagedCPP/example-Accumulator.cpp
new file mode 100644
index 0000000..a375806
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-Accumulator.cpp
@@ -0,0 +1,21 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        // Compare using Accumulator and ordinary summation for a sum of large and
+        // small terms.
+        double sum = 0;
+        Accumulator^ acc = gcnew Accumulator();
+        acc->Assign( 0.0 );
+        sum += 1e20; sum += 1; sum += 2; sum += 100; sum += 5000; sum += -1e20;
+        acc->Sum( 1e20 ); acc->Sum( 1 ); acc->Sum( 2 ); acc->Sum( 100 ); acc->Sum( 5000 ); acc->Sum( -1e20 );
+        Console::WriteLine(String::Format("{0} {1}", sum, acc->Result()));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine( String::Format(  "Caught exception: {0}", e->Message ) );
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-AlbersEqualArea.cpp b/dotnet/examples/ManagedCPP/example-AlbersEqualArea.cpp
new file mode 100644
index 0000000..0f3fa7a
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-AlbersEqualArea.cpp
@@ -0,0 +1,35 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        const double
+            lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels
+            k1 = 1,                                   // scale
+            lon0 = -77 - 45/60.0;                     // Central meridan
+        // Set up basic projection
+        AlbersEqualArea^ albers = gcnew AlbersEqualArea( Constants::WGS84::MajorRadius,
+                                                         Constants::WGS84::Flattening,
+                                                         lat1, lat2, k1);
+        {
+            // Sample conversion from geodetic to Albers Equal Area
+            double lat = 39.95, lon = -75.17;    // Philadelphia
+            double x, y;
+            albers->Forward(lon0, lat, lon, x, y);
+            Console::WriteLine( String::Format("X: {0} Y: {1}", x, y ) );
+        }
+        {
+            // Sample conversion from Albers Equal Area grid to geodetic
+            double x = 220e3, y = -53e3;
+            double lat, lon;
+            albers->Reverse(lon0, x, y, lat, lon);
+            Console::WriteLine( String::Format("Latitude: {0} Longitude: {1}", lat, lon ) );
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine( String::Format( "Caught exception: {0}", e->Message ) );
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-AzimuthalEquidistant.cpp b/dotnet/examples/ManagedCPP/example-AzimuthalEquidistant.cpp
new file mode 100644
index 0000000..b0a3733
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-AzimuthalEquidistant.cpp
@@ -0,0 +1,30 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        Geodesic^ geod = gcnew Geodesic(); // WGS84
+        const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
+        AzimuthalEquidistant^ proj = gcnew AzimuthalEquidistant(geod);
+        {
+            // Sample forward calculation
+            double lat = 50.9, lon = 1.8; // Calais
+            double x, y;
+            proj->Forward(lat0, lon0, lat, lon, x, y);
+            Console::WriteLine( String::Format("X: {0} Y: {1}", x, y ) );
+        }
+        {
+            // Sample reverse calculation
+            double x = -38e3, y = 230e3;
+            double lat, lon;
+            proj->Reverse(lat0, lon0, x, y, lat, lon);
+            Console::WriteLine( String::Format("Latitude: {0} Longitude: {1}", lat, lon ) );
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine( String::Format( "Caught exception: {0}", e->Message ) );
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-CassiniSoldner.cpp b/dotnet/examples/ManagedCPP/example-CassiniSoldner.cpp
new file mode 100644
index 0000000..a03fbee
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-CassiniSoldner.cpp
@@ -0,0 +1,30 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        Geodesic^ geod = gcnew Geodesic(); // WGS84
+        const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
+        CassiniSoldner^ proj = gcnew CassiniSoldner(lat0, lon0, geod);
+        {
+            // Sample forward calculation
+            double lat = 50.9, lon = 1.8; // Calais
+            double x, y;
+            proj->Forward(lat, lon, x, y);
+            Console::WriteLine(String::Format("X: {0} Y: {1}", x, y));
+        }
+        {
+            // Sample reverse calculation
+            double x = -38e3, y = 230e3;
+            double lat, lon;
+            proj->Reverse(x, y, lat, lon);
+            Console::WriteLine(String::Format("Latitude: {0} Longitude: {1}", lat, lon));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine( String::Format( "Caught exception: {0}", e->Message ) );
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-CircularEngine.cpp b/dotnet/examples/ManagedCPP/example-CircularEngine.cpp
new file mode 100644
index 0000000..63d582c
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-CircularEngine.cpp
@@ -0,0 +1,26 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    // This computes the same value as example-SphericalHarmonic.cpp using a
+    // CircularEngine (which will be faster if many values on a circle of
+    // latitude are to be found).
+    try {
+        int N = 3;                  // The maxium degree
+        array<double>^ ca = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // cosine coefficients
+        array<double>^ sa = {6, 5, 4, 3, 2, 1}; // sine coefficients
+        double a = 1;
+        SphericalHarmonic^ h = gcnew SphericalHarmonic(ca, sa, N, a, SphericalHarmonic::Normalization::SCHMIDT);
+        double x = 2, y = 3, z = 1, p = Math::Sqrt(x*x+y*y);
+        CircularEngine^ circ = h->Circle(p, z, true);
+        double v, vx, vy, vz;
+        v = circ->LongitudeSum(x/p, y/p, vx, vy, vz);
+        Console::WriteLine(String::Format("{0} {1} {2} {3}", v, vx, vy, vz));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-DMS.cpp b/dotnet/examples/ManagedCPP/example-DMS.cpp
new file mode 100644
index 0000000..dd707bc
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-DMS.cpp
@@ -0,0 +1,24 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+    {
+        System::String^ dms = "30d14'45.6\"S";
+        DMS::Flag type;
+        double ang = DMS::Decode(dms, type);
+        Console::WriteLine(String::Format("Type: {0} String: {1}", type, ang));
+    }
+    {
+        double ang = -30.245715;
+        System::String^ dms = DMS::Encode(ang, 6, DMS::Flag::LATITUDE, 0);
+        Console::WriteLine(String::Format("Latitude: {0}", dms));
+    }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine( String::Format( "Caught exception: {0}", e->Message ) );
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-Ellipsoid.cpp b/dotnet/examples/ManagedCPP/example-Ellipsoid.cpp
new file mode 100644
index 0000000..be5bd6e
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-Ellipsoid.cpp
@@ -0,0 +1,25 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        Ellipsoid^ wgs84 = gcnew Ellipsoid( Constants::WGS84::MajorRadius,
+                                            Constants::WGS84::Flattening );
+        // Alternatively: Ellipsoid^ wgs84 = gcnew Ellipsoid();
+        Console::WriteLine( String::Format(
+            "The latitude half way between the equator and the pole is {0}",
+                wgs84->InverseRectifyingLatitude(45)) );
+        Console::WriteLine( String::Format(
+            "Half the area of the ellipsoid lies between latitudes +/- {0}",
+            wgs84->InverseAuthalicLatitude(30))); ;
+        Console::WriteLine( String::Format(
+            "The northernmost edge of a square Mercator map is at latitude {0}",
+            wgs84->InverseIsometricLatitude(180)));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine( String::Format( "Caught exception: {0}", e->Message ) );
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-EllipticFunction.cpp b/dotnet/examples/ManagedCPP/example-EllipticFunction.cpp
new file mode 100644
index 0000000..e5ba10d
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-EllipticFunction.cpp
@@ -0,0 +1,35 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        EllipticFunction^ ell = gcnew EllipticFunction(0.1, 1.0);  // parameter m = 0.1
+        // See Abramowitz and Stegun, table 17.1
+        Console::WriteLine( String::Format( "{0} {1}", ell->K(), ell->E()));
+        double phi = 20 * Math::Acos(-1.0) / 180.0;;
+        // See Abramowitz and Stegun, table 17.6 with
+        // alpha = asin(sqrt(m)) = 18.43 deg and phi = 20 deg
+        Console::WriteLine( String::Format("{0} {1}", ell->E(phi),
+                ell->E(Math::Sin(phi), Math::Cos(phi),
+                    Math::Sqrt(1 - ell->k2 * Math::Sin(phi) * Math::Sin(phi))) ) );
+        // See Carlson 1995, Sec 3.
+        Console::WriteLine(String::Format("RF(1,2,0)      = {0}", EllipticFunction::RF(1,2)));
+        Console::WriteLine(String::Format("RF(2,3,4)      = {0}", EllipticFunction::RF(2,3,4)));
+        Console::WriteLine(String::Format("RC(0,1/4)      = {0}", EllipticFunction::RC(0,0.25)));
+        Console::WriteLine(String::Format("RC(9/4,2)      = {0}", EllipticFunction::RC(2.25,2)));
+        Console::WriteLine(String::Format("RC(1/4,-2)     = {0}", EllipticFunction::RC(0.25,-2)));
+        Console::WriteLine(String::Format("RJ(0,1,2,3)    = {0}", EllipticFunction::RJ(0,1,2,3)));
+        Console::WriteLine(String::Format("RJ(2,3,4,5)    = {0}", EllipticFunction::RJ(2,3,4,5)));
+        Console::WriteLine(String::Format("RD(0,2,1)      = {0}", EllipticFunction::RD(0,2,1)));
+        Console::WriteLine(String::Format("RD(2,3,4)      = {0}", EllipticFunction::RD(2,3,4)));
+        Console::WriteLine(String::Format("RG(0,16,16)    = {0}", EllipticFunction::RG(16,16)));
+        Console::WriteLine(String::Format("RG(2,3,4)      = {0}", EllipticFunction::RG(2,3,4)));
+        Console::WriteLine(String::Format("RG(0,0.0796,4) = {0}", EllipticFunction::RG(0.0796, 4)));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine( String::Format( "Caught exception: {0}", e->Message ) );
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-GeoCoords.cpp b/dotnet/examples/ManagedCPP/example-GeoCoords.cpp
new file mode 100644
index 0000000..8c9753e
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-GeoCoords.cpp
@@ -0,0 +1,22 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        // Miscellaneous conversions
+        double lat = 33.3, lon = 44.4;
+        GeoCoords^ c = gcnew GeoCoords(lat, lon, -1);
+        Console::WriteLine(c->MGRSRepresentation(-3));
+        c->Reset("18TWN0050", true, false);
+        Console::WriteLine(c->DMSRepresentation(0, false, 0));
+        Console::WriteLine(String::Format("Latitude: {0} Longitude: {1}", c->Latitude, c->Longitude));
+        c->Reset("1d38'W 55d30'N", true, false);
+        Console::WriteLine(c->GeoRepresentation(0, false));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-Geocentric.cpp b/dotnet/examples/ManagedCPP/example-Geocentric.cpp
new file mode 100644
index 0000000..2996038
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-Geocentric.cpp
@@ -0,0 +1,33 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        Geocentric^ earth = gcnew Geocentric( Constants::WGS84::MajorRadius,
+                                              Constants::WGS84::Flattening);
+        // Alternatively: Geocentric earth = new Geocentric();
+        {
+            // Sample forward calculation
+            double lat = 27.99, lon = 86.93, h = 8820; // Mt Everest
+            double X, Y, Z;
+            earth->Forward(lat, lon, h, X, Y, Z);
+            Console::WriteLine( String::Format( "{0} {1} {2}",
+                Math::Floor(X / 1000 + 0.5),
+                Math::Floor(Y / 1000 + 0.5),
+                Math::Floor(Z / 1000 + 0.5) ) );
+        }
+        {
+            // Sample reverse calculation
+            double X = 302e3, Y = 5636e3, Z = 2980e3;
+            double lat, lon, h;
+            earth->Reverse(X, Y, Z, lat, lon, h);
+            Console::WriteLine(String::Format("{0} {1} {2}", lat, lon, h));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine( String::Format( "Caught exception: {0}", e->Message ) );
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-Geodesic-small.cpp b/dotnet/examples/ManagedCPP/example-Geodesic-small.cpp
new file mode 100644
index 0000000..6c249bf
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-Geodesic-small.cpp
@@ -0,0 +1,14 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main() {
+  Geodesic^ geod = gcnew Geodesic();
+  // Distance from JFK to LHR
+  double
+    lat1 = 40.6, lon1 = -73.8, // JFK Airport
+    lat2 = 51.6, lon2 = -0.5;  // LHR Airport
+  double s12;
+  geod->Inverse(lat1, lon1, lat2, lon2, s12);
+  Console::WriteLine( s12 / 1000 + " km" );
+  return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-Geodesic.cpp b/dotnet/examples/ManagedCPP/example-Geodesic.cpp
new file mode 100644
index 0000000..b461291
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-Geodesic.cpp
@@ -0,0 +1,32 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        Geodesic^ geod = gcnew Geodesic( Constants::WGS84::MajorRadius,
+                                         Constants::WGS84::Flattening );
+        // Alternatively: Geodesic^ geod = gcnew Geodesic();
+        {
+            // Sample direct calculation, travelling about NE from JFK
+            double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
+            double lat2, lon2;
+            geod->Direct(lat1, lon1, azi1, s12, lat2, lon2);
+            Console::WriteLine(String::Format("Latitude: {0} Longitude: {1}", lat2, lon2));
+        }
+        {
+            // Sample inverse calculation, JFK to LHR
+            double
+            lat1 = 40.6, lon1 = -73.8, // JFK Airport
+            lat2 = 51.6, lon2 = -0.5;  // LHR Airport
+            double s12;
+            geod->Inverse(lat1, lon1, lat2, lon2, s12);
+            Console::WriteLine( s12 );
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-GeodesicExact.cpp b/dotnet/examples/ManagedCPP/example-GeodesicExact.cpp
new file mode 100644
index 0000000..91b32bd
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-GeodesicExact.cpp
@@ -0,0 +1,32 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        GeodesicExact^ geod = gcnew GeodesicExact( Constants::WGS84::MajorRadius,
+                                                   Constants::WGS84::Flattening );
+        // Alternatively: GeodesicExact^ geod = gcnew GeodesicExact();
+        {
+            // Sample direct calculation, travelling about NE from JFK
+            double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
+            double lat2, lon2;
+            geod->Direct(lat1, lon1, azi1, s12, lat2, lon2);
+            Console::WriteLine(String::Format("Latitude: {0} Longitude: {1}", lat2, lon2));
+        }
+        {
+            // Sample inverse calculation, JFK to LHR
+            double
+            lat1 = 40.6, lon1 = -73.8, // JFK Airport
+            lat2 = 51.6, lon2 = -0.5;  // LHR Airport
+            double s12;
+            geod->Inverse(lat1, lon1, lat2, lon2, s12);
+            Console::WriteLine(s12);
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-GeodesicLine.cpp b/dotnet/examples/ManagedCPP/example-GeodesicLine.cpp
new file mode 100644
index 0000000..a57b903
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-GeodesicLine.cpp
@@ -0,0 +1,43 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        // Print waypoints between JFK and SIN
+        Geodesic^ geod = gcnew Geodesic(); // WGS84
+        double
+            lat1 = 40.640, lon1 = -73.779, // JFK
+            lat2 =  1.359, lon2 = 103.989; // SIN
+        double s12, azi1, azi2,
+            a12 = geod->Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2);
+        GeodesicLine^ line = gcnew GeodesicLine(geod, lat1, lon1, azi1, Mask::ALL);
+        // Alternatively
+        // const GeographicLib::GeodesicLine line = geod.Line(lat1, lon1, azi1);
+        double ds = 500e3;          // Nominal distance between points = 500 km
+        int num = int(Math::Ceiling(s12 / ds)); // The number of intervals
+        {
+            // Use intervals of equal length
+            double ds = s12 / num;
+            for (int i = 0; i <= num; ++i) {
+                double lat, lon;
+                line->Position(i * ds, lat, lon);
+                Console::WriteLine( String::Format( "i: {0} Latitude: {1} Longitude: {2}", i, lat, lon ));
+            }
+        }
+        {
+            // Slightly faster, use intervals of equal arc length
+            double da = a12 / num;
+            for (int i = 0; i <= num; ++i) {
+                double lat, lon;
+                line->ArcPosition(i * da, lat, lon);
+                Console::WriteLine( String::Format( "i: {0} Latitude: {1} Longitude: {2}", i, lat, lon ));
+            }
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-GeodesicLineExact.cpp b/dotnet/examples/ManagedCPP/example-GeodesicLineExact.cpp
new file mode 100644
index 0000000..54a8fc7
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-GeodesicLineExact.cpp
@@ -0,0 +1,43 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        // Print waypoints between JFK and SIN
+        GeodesicExact^ geod = gcnew GeodesicExact(); // WGS84
+        double
+            lat1 = 40.640, lon1 = -73.779, // JFK
+            lat2 =  1.359, lon2 = 103.989; // SIN
+        double s12, azi1, azi2,
+            a12 = geod->Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2);
+        GeodesicLineExact^ line = gcnew GeodesicLineExact(geod, lat1, lon1, azi1, Mask::ALL);
+        // Alternatively
+        // const GeographicLib::GeodesicLine line = geod.Line(lat1, lon1, azi1);
+        double ds = 500e3;          // Nominal distance between points = 500 km
+        int num = int(Math::Ceiling(s12 / ds)); // The number of intervals
+        {
+            // Use intervals of equal length
+            double ds = s12 / num;
+            for (int i = 0; i <= num; ++i) {
+                double lat, lon;
+                line->Position(i * ds, lat, lon);
+                Console::WriteLine( String::Format( "i: {0} Latitude: {1} Longitude: {2}", i, lat, lon ));
+            }
+        }
+        {
+            // Slightly faster, use intervals of equal arc length
+            double da = a12 / num;
+            for (int i = 0; i <= num; ++i) {
+                double lat, lon;
+                line->ArcPosition(i * da, lat, lon);
+                Console::WriteLine( String::Format( "i: {0} Latitude: {1} Longitude: {2}", i, lat, lon ));
+            }
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-Geohash.cpp b/dotnet/examples/ManagedCPP/example-Geohash.cpp
new file mode 100644
index 0000000..537edc9
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-Geohash.cpp
@@ -0,0 +1,33 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        {
+            // Sample forward calculation
+            double lat = 57.64911, lon = 10.40744; // Jutland (the wikipedia example)
+            String^ geohash;
+            int maxlen = Geohash::GeohashLength(1.0e-5);
+            for (int len = 0; len <= maxlen; ++len) {
+                Geohash::Forward(lat, lon, len, geohash);
+                Console::WriteLine( geohash );
+            }
+        }
+        {
+            // Sample reverse calculation
+            String^ geohash = "u4pruydqqvj";
+            double lat, lon;
+            for (int i = 0; i <= geohash->Length; ++i) {
+                int len;
+                Geohash::Reverse(geohash->Substring(0, i), lat, lon, len, true);
+                Console::WriteLine(String::Format("Length: {0} Latitude: {1} Longitude: {2}", len, lat, lon ) );
+            }
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-Geoid.cpp b/dotnet/examples/ManagedCPP/example-Geoid.cpp
new file mode 100644
index 0000000..31d54de
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-Geoid.cpp
@@ -0,0 +1,21 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        Geoid^ egm96 = gcnew Geoid("egm96-5", "", true, false);
+        // Convert height above egm96 to height above the ellipsoid
+        double lat = 42, lon = -75, height_above_geoid = 20;
+        double
+            geoid_height = egm96->Height(lat, lon),
+            height_above_ellipsoid = (height_above_geoid +
+                (double)Geoid::ConvertFlag::GEOIDTOELLIPSOID * geoid_height);
+        Console::WriteLine(height_above_ellipsoid);
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-Gnomonic.cpp b/dotnet/examples/ManagedCPP/example-Gnomonic.cpp
new file mode 100644
index 0000000..f4ae112
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-Gnomonic.cpp
@@ -0,0 +1,30 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        Geodesic^ geod = gcnew Geodesic(); // WGS84
+        const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
+        Gnomonic^ proj = gcnew Gnomonic(geod);
+        {
+            // Sample forward calculation
+            double lat = 50.9, lon = 1.8; // Calais
+            double x, y;
+            proj->Forward(lat0, lon0, lat, lon, x, y);
+            Console::WriteLine(String::Format("X: {0} Y: {1}", x, y));
+        }
+        {
+            // Sample reverse calculation
+            double x = -38e3, y = 230e3;
+            double lat, lon;
+            proj->Reverse(lat0, lon0, x, y, lat, lon);
+            Console::WriteLine(String::Format("Latitude: {0} Longitude: {1}", lat, lon));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-GravityCircle.cpp b/dotnet/examples/ManagedCPP/example-GravityCircle.cpp
new file mode 100644
index 0000000..419aecc
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-GravityCircle.cpp
@@ -0,0 +1,36 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        GravityModel^ grav = gcnew GravityModel("egm96", "");
+        double lat = 27.99, lon0 = 86.93, h = 8820; // Mt Everest
+        {
+            // Slow method of evaluating the values at several points on a circle of
+            // latitude.
+            for (int i = -5; i <= 5; ++i) {
+                double lon = lon0 + i * 0.2;
+                double gx, gy, gz;
+                grav->Gravity(lat, lon, h, gx, gy, gz);
+                Console::WriteLine(String::Format("{0} {1} {2} {3}", lon, gx, gy, gz));
+            }
+        }
+        {
+            // Fast method of evaluating the values at several points on a circle of
+            // latitude using GravityCircle.
+            GravityCircle^ circ = grav->Circle(lat, h, GravityModel::Mask::ALL);
+            for (int i = -5; i <= 5; ++i) {
+                double lon = lon0 + i * 0.2;
+                double gx, gy, gz;
+                circ->Gravity(lon, gx, gy, gz);
+                Console::WriteLine(String::Format("{0} {1} {2} {3}", lon, gx, gy, gz));
+            }
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-GravityModel.cpp b/dotnet/examples/ManagedCPP/example-GravityModel.cpp
new file mode 100644
index 0000000..f18cd38
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-GravityModel.cpp
@@ -0,0 +1,18 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        GravityModel^ grav = gcnew GravityModel("egm96","");
+        double lat = 27.99, lon = 86.93, h = 8820; // Mt Everest
+        double gx, gy, gz;
+        grav->Gravity(lat, lon, h, gx, gy, gz);
+        Console::WriteLine(String::Format("{0} {1} {2}", gx, gy, gz));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-LambertConformalConic.cpp b/dotnet/examples/ManagedCPP/example-LambertConformalConic.cpp
new file mode 100644
index 0000000..e214b97
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-LambertConformalConic.cpp
@@ -0,0 +1,44 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        // Define the Pennsylvania South state coordinate system EPSG:3364
+        // http://www.spatialreference.org/ref/epsg/3364/
+        const double
+            lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels
+            k1 = 1,                                   // scale
+            lat0 = 39 + 20/60.0, lon0 =-77 - 45/60.0, // origin
+            fe = 600000, fn = 0;                      // false easting and northing
+        // Set up basic projection
+        LambertConformalConic^ PASouth = gcnew LambertConformalConic( Constants::WGS84::MajorRadius,
+                                                                      Constants::WGS84::Flattening,
+                                                                      lat1, lat2, k1);
+        double x0, y0;
+        // Transform origin point
+        PASouth->Forward(lon0, lat0, lon0, x0, y0);
+        x0 -= fe; y0 -= fn;
+        {
+            // Sample conversion from geodetic to PASouth grid
+            double lat = 39.95, lon = -75.17;    // Philadelphia
+            double x, y;
+            PASouth->Forward(lon0, lat, lon, x, y);
+            x -= x0; y -= y0;
+            Console::WriteLine( String::Format("{0} {1}", x, y) );
+        }
+        {
+            // Sample conversion from PASouth grid to geodetic
+            double x = 820e3, y = 72e3;
+            double lat, lon;
+            x += x0; y += y0;
+            PASouth->Reverse(lon0, x, y, lat, lon);
+            Console::WriteLine( String::Format("{0} {1}", lat, lon) );
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine( String::Format("Caught exception: {0}", e->Message) );
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-LocalCartesian.cpp b/dotnet/examples/ManagedCPP/example-LocalCartesian.cpp
new file mode 100644
index 0000000..1de3042
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-LocalCartesian.cpp
@@ -0,0 +1,30 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        Geocentric^ earth = gcnew Geocentric();
+        const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
+        LocalCartesian^ proj = gcnew LocalCartesian(lat0, lon0, 0, earth);
+        {
+            // Sample forward calculation
+            double lat = 50.9, lon = 1.8, h = 0; // Calais
+            double x, y, z;
+            proj->Forward(lat, lon, h, x, y, z);
+            Console::WriteLine(String::Format("{0} {1} {2}", x, y, z));
+        }
+        {
+            // Sample reverse calculation
+            double x = -38e3, y = 230e3, z = -4e3;
+            double lat, lon, h;
+            proj->Reverse(x, y, z, lat, lon, h);
+            Console::WriteLine(String::Format("{0} {1} {2}", lat, lon, h));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-MGRS.cpp b/dotnet/examples/ManagedCPP/example-MGRS.cpp
new file mode 100644
index 0000000..69fc47d
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-MGRS.cpp
@@ -0,0 +1,36 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        // See also example-GeoCoords.cpp
+        {
+            // Sample forward calculation
+            double lat = 33.3, lon = 44.4; // Baghdad
+            int zone;
+            bool northp;
+            double x, y;
+            UTMUPS::Forward(lat, lon, zone, northp, x, y, -1, true);
+            String^ mgrs;
+            MGRS::Forward(zone, northp, x, y, lat, 5, mgrs);
+            Console::WriteLine(mgrs);
+        }
+        {
+            // Sample reverse calculation
+            String^ mgrs = "38SMB4488";
+            int zone, prec;
+            bool northp;
+            double x, y;
+            MGRS::Reverse(mgrs, zone, northp, x, y, prec, true);
+            double lat, lon;
+            UTMUPS::Reverse(zone, northp, x, y, lat, lon, true);
+            Console::WriteLine(String::Format("Latitude: {0} Longitude: {1}", lat, lon));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-MagneticCircle.cpp b/dotnet/examples/ManagedCPP/example-MagneticCircle.cpp
new file mode 100644
index 0000000..d7fd878
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-MagneticCircle.cpp
@@ -0,0 +1,36 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        MagneticModel^ mag = gcnew MagneticModel("wmm2010","");
+        double lat = 27.99, lon0 = 86.93, h = 8820, t = 2012; // Mt Everest
+        {
+            // Slow method of evaluating the values at several points on a circle of
+            // latitude.
+            for (int i = -5; i <= 5; ++i) {
+                double lon = lon0 + i * 0.2;
+                double Bx, By, Bz;
+                mag->Field(t, lat, lon, h, Bx, By, Bz);
+                Console::WriteLine(String::Format("{0} {1} {2} {3}", lon, Bx, By, Bz));
+            }
+        }
+        {
+            // Fast method of evaluating the values at several points on a circle of
+            // latitude using MagneticCircle.
+            MagneticCircle^ circ = mag->Circle(t, lat, h);
+            for (int i = -5; i <= 5; ++i) {
+                double lon = lon0 + i * 0.2;
+                double Bx, By, Bz;
+                circ->Field(lon, Bx, By, Bz);
+                Console::WriteLine(String::Format("{0} {1} {2} {3}", lon, Bx, By, Bz));
+            }
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-MagneticModel.cpp b/dotnet/examples/ManagedCPP/example-MagneticModel.cpp
new file mode 100644
index 0000000..5748d71
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-MagneticModel.cpp
@@ -0,0 +1,20 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        MagneticModel^ mag = gcnew MagneticModel("wmm2010","");
+        double lat = 27.99, lon = 86.93, h = 8820, t = 2012; // Mt Everest
+        double Bx, By, Bz;
+        mag->Field(t, lat,lon, h, Bx, By, Bz);
+        double H, F, D, I;
+        MagneticModel::FieldComponents(Bx, By, Bz, H, F, D, I);
+        Console::WriteLine(String::Format("{0} {1} {2} {3}", H, F, D, I));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-NormalGravity.cpp b/dotnet/examples/ManagedCPP/example-NormalGravity.cpp
new file mode 100644
index 0000000..483e57f
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-NormalGravity.cpp
@@ -0,0 +1,18 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        NormalGravity^ grav = gcnew NormalGravity(NormalGravity::StandardModels::WGS84);
+        double lat = 27.99, h = 8820; // Mt Everest
+        double gammay, gammaz;
+        grav->Gravity(lat, h, gammay, gammaz);
+        Console::WriteLine(String::Format("{0} {1}", gammay, gammaz));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-OSGB.cpp b/dotnet/examples/ManagedCPP/example-OSGB.cpp
new file mode 100644
index 0000000..f1be049
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-OSGB.cpp
@@ -0,0 +1,35 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        {
+            // Sample forward calculation from
+            // A guide to coordinate systems in Great Britain
+            double
+            lat = DMS::Decode(52,39,27.2531),
+            lon = DMS::Decode( 1,43, 4.5177);
+            double x, y;
+            OSGB::Forward(lat, lon, x, y);
+            String^ gridref;
+            OSGB::GridReference(x, y, 2, gridref);
+            Console::WriteLine(String::Format("{0} {1} {2}", x, y, gridref));
+        }
+        {
+            // Sample reverse calculation
+            String^ gridref = "TG5113";
+            double x, y;
+            int prec;
+            OSGB::GridReference(gridref, x, y, prec, true);
+            double lat, lon;
+            OSGB::Reverse(x, y, lat, lon);
+            Console::WriteLine(String::Format("{0} {1} {2}", prec, lat, lon));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return 0;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-PolarStereographic.cpp b/dotnet/examples/ManagedCPP/example-PolarStereographic.cpp
new file mode 100644
index 0000000..f4f226f
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-PolarStereographic.cpp
@@ -0,0 +1,29 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        PolarStereographic^ proj = gcnew PolarStereographic(); // WGS84
+        bool northp = true;
+        {
+            // Sample forward calculation
+            double lat = 61.2, lon = -149.9; // Anchorage
+            double x, y;
+            proj->Forward(northp, lat, lon, x, y);
+            Console::WriteLine(String::Format("{0} {1}", x, y));
+        }
+        {
+            // Sample reverse calculation
+            double x = -1637e3, y = 2824e3;
+            double lat, lon;
+            proj->Reverse(northp, x, y, lat, lon);
+            Console::WriteLine(String::Format("{0} {1}", lat, lon));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-PolygonArea.cpp b/dotnet/examples/ManagedCPP/example-PolygonArea.cpp
new file mode 100644
index 0000000..3f6716c
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-PolygonArea.cpp
@@ -0,0 +1,22 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        Geodesic^ geod = gcnew Geodesic();  // WGS84
+        PolygonArea^ poly = gcnew PolygonArea(geod, true);
+        poly->AddPoint( 52,  0);     // London
+        poly->AddPoint( 41,-74);     // New York
+        poly->AddPoint(-23,-43);     // Rio de Janeiro
+        poly->AddPoint(-26, 28);     // Johannesburg
+        double perimeter, area;
+        unsigned int n = poly->Compute(false, true, perimeter, area);
+        Console::WriteLine(String::Format("{0} {1} {2}", n, perimeter, area));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-SphericalHarmonic.cpp b/dotnet/examples/ManagedCPP/example-SphericalHarmonic.cpp
new file mode 100644
index 0000000..7a51003
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-SphericalHarmonic.cpp
@@ -0,0 +1,22 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        int N = 3;                  // The maximum degree
+        array<double>^ ca = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // cosine coefficients
+        array<double>^ sa = {6, 5, 4, 3, 2, 1}; // sine coefficients
+        double a = 1;
+        SphericalHarmonic^ h = gcnew SphericalHarmonic(ca, sa, N, a, SphericalHarmonic::Normalization::SCHMIDT);
+        double x = 2, y = 3, z = 1;
+        double v, vx, vy, vz;
+        v = h->HarmonicSum(x, y, z, vx, vy, vz);
+        Console::WriteLine(String::Format("{0} {1} {2} {3}", v, vx, vy, vz));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-SphericalHarmonic1.cpp b/dotnet/examples/ManagedCPP/example-SphericalHarmonic1.cpp
new file mode 100644
index 0000000..520e45a
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-SphericalHarmonic1.cpp
@@ -0,0 +1,24 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        int N = 3, N1 = 2;                  // The maximum degrees
+        array<double>^ ca = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // cosine coefficients
+        array<double>^ sa = {6, 5, 4, 3, 2, 1}; // sine coefficients
+        array<double>^ cb = {1, 2, 3, 4, 5, 6};
+        array<double>^ sb = {3, 2, 1};
+        double a = 1;
+        SphericalHarmonic1^ h = gcnew SphericalHarmonic1(ca, sa, N, cb, sb, N1, a, SphericalHarmonic1::Normalization::SCHMIDT);
+        double tau = 0.1, x = 2, y = 3, z = 1;
+        double v, vx, vy, vz;
+        v = h->HarmonicSum(tau, x, y, z, vx, vy, vz);
+        Console::WriteLine(String::Format("{0} {1} {2} {3}", v, vx, vy, vz));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-SphericalHarmonic2.cpp b/dotnet/examples/ManagedCPP/example-SphericalHarmonic2.cpp
new file mode 100644
index 0000000..8340da1
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-SphericalHarmonic2.cpp
@@ -0,0 +1,30 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try
+    {
+        int N = 3, N1 = 2, N2 = 1;                     // The maximum degrees
+        array<double>^ ca = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; // cosine coefficients
+        array<double>^ sa = { 6, 5, 4, 3, 2, 1 }; // sine coefficients
+        array<double>^ cb = { 1, 2, 3, 4, 5, 6 };
+        array<double>^ sb = { 3, 2, 1 };
+        array<double>^ cc = { 2, 1 };
+        array<double>^ S2 = { 0 };
+        double a = 1;
+        SphericalHarmonic2^ h = gcnew SphericalHarmonic2(
+                                ca, sa, N, N, N, cb, sb, N1, N1, N1,
+                                cc, S2, N2, N2, 0, a,
+                                SphericalHarmonic2::Normalization::SCHMIDT);
+        double tau1 = 0.1, tau2 = 0.05, x = 2, y = 3, z = 1;
+        double v, vx, vy, vz;
+        v = h->HarmonicSum(tau1, tau2, x, y, z, vx, vy, vz);
+        Console::WriteLine(String::Format("{0} {1} {2} {3}", v, vx, vy, vz));
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-TransverseMercator.cpp b/dotnet/examples/ManagedCPP/example-TransverseMercator.cpp
new file mode 100644
index 0000000..94c7163
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-TransverseMercator.cpp
@@ -0,0 +1,29 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        TransverseMercator^ proj = gcnew TransverseMercator(); // WGS84
+        double lon0 = -75;          // Central meridian for UTM zone 18
+        {
+            // Sample forward calculation
+            double lat = 40.3, lon = -74.7; // Princeton, NJ
+            double x, y;
+            proj->Forward(lon0, lat, lon, x, y);
+            Console::WriteLine(String::Format("{0} {1}", x, y));
+        }
+        {
+            // Sample reverse calculation
+            double x = 25e3, y = 4461e3;
+            double lat, lon;
+            proj->Reverse(lon0, x, y, lat, lon);
+            Console::WriteLine(String::Format("{0} {1}", lat, lon));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-TransverseMercatorExact.cpp b/dotnet/examples/ManagedCPP/example-TransverseMercatorExact.cpp
new file mode 100644
index 0000000..2f41fa6
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-TransverseMercatorExact.cpp
@@ -0,0 +1,29 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        TransverseMercatorExact^ proj = gcnew TransverseMercatorExact(); // WGS84
+        double lon0 = -75;          // Central meridian for UTM zone 18
+        {
+            // Sample forward calculation
+            double lat = 40.3, lon = -74.7; // Princeton, NJ
+            double x, y;
+            proj->Forward(lon0, lat, lon, x, y);
+            Console::WriteLine(String::Format("{0} {1}", x, y));
+        }
+        {
+            // Sample reverse calculation
+            double x = 25e3, y = 4461e3;
+            double lat, lon;
+            proj->Reverse(lon0, x, y, lat, lon);
+            Console::WriteLine(String::Format("{0} {1}", lat, lon));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-UTMUPS.cpp b/dotnet/examples/ManagedCPP/example-UTMUPS.cpp
new file mode 100644
index 0000000..c90ebe0
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-UTMUPS.cpp
@@ -0,0 +1,35 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^/*args*/)
+{
+    try {
+        // See also example-GeoCoords.cpp
+        {
+            // Sample forward calculation
+            double lat = 33.3, lon = 44.4; // Baghdad
+            int zone;
+            bool northp;
+            double x, y;
+            UTMUPS::Forward(lat, lon, zone, northp, x, y, -1, true);
+            String^ zonestr = UTMUPS::EncodeZone(zone, northp);
+            Console::WriteLine(String::Format("{0} {1} {2}", zonestr, x, y));
+        }
+        {
+            // Sample reverse calculation
+            String^ zonestr = "38N";
+            int zone;
+            bool northp;
+            UTMUPS::DecodeZone(zonestr, zone, northp);
+            double x = 444e3, y = 3688e3;
+            double lat, lon;
+            UTMUPS::Reverse(zone, northp, x, y, lat, lon, true);
+            Console::WriteLine(String::Format("{0} {1}", lat,lon));
+        }
+    }
+    catch (GeographicErr^ e) {
+        Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+        return -1;
+    }
+    return 0;
+}
diff --git a/dotnet/examples/VB/example-Accumulator.vb b/dotnet/examples/VB/example-Accumulator.vb
new file mode 100644
index 0000000..3abc3aa
--- /dev/null
+++ b/dotnet/examples/VB/example-Accumulator.vb
@@ -0,0 +1,18 @@
+Imports NETGeographicLib
+
+Module example_Accumulator
+    Public Sub Main()
+        Try
+            ' Compare using Accumulator and ordinary summation for a sum of large and
+            ' small terms.
+            Dim sum As Double = 0.0
+            Dim acc As Accumulator = New Accumulator()
+            acc.Assign(0.0)
+            sum += 1.0E+20 : sum += 1 : sum += 2 : sum += 100 : sum += 5000
+            sum += -1.0E+20 : acc.Sum(1.0E+20) : acc.Sum(1) : acc.Sum(2) : acc.Sum(100) : acc.Sum(5000) : acc.Sum(-1.0E+20)
+            Console.WriteLine(String.Format("{0} {1}", sum, acc.Result()))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-AlbersEqualArea.vb b/dotnet/examples/VB/example-AlbersEqualArea.vb
new file mode 100644
index 0000000..221eebb
--- /dev/null
+++ b/dotnet/examples/VB/example-AlbersEqualArea.vb
@@ -0,0 +1,26 @@
+Imports NETGeographicLib
+
+Module example_AlbersEqualArea
+    Sub Main()
+        Try
+            Dim lat1 As Double = 40 + 58 / 60.0 : Dim lat2 As Double = 39 + 56 / 60.0 ' standard parallels
+            Dim k1 As Double = 1  ' scale
+            Dim lon0 As Double = -77 - 45 / 60.0 ' Central meridan
+            ' Set up basic projection
+            Dim albers As AlbersEqualArea = New AlbersEqualArea(Constants.WGS84.MajorRadius,
+                                                                Constants.WGS84.Flattening,
+                                                                lat1, lat2, k1)
+            ' Sample conversion from geodetic to Albers Equal Area
+            Dim lat As Double = 39.95 : Dim lon As Double = -75.17  ' Philadelphia
+            Dim x, y As Double
+            albers.Forward(lon0, lat, lon, x, y)
+            Console.WriteLine(String.Format("X: {0} Y: {1}", x, y))
+            ' Sample conversion from Albers Equal Area grid to geodetic
+            x = 220000.0 : y = -53000.0
+            albers.Reverse(lon0, x, y, lat, lon)
+            Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-AzimuthalEquidistant.vb b/dotnet/examples/VB/example-AzimuthalEquidistant.vb
new file mode 100644
index 0000000..7f818ab
--- /dev/null
+++ b/dotnet/examples/VB/example-AzimuthalEquidistant.vb
@@ -0,0 +1,22 @@
+Imports NETGeographicLib
+
+Module example_AzimuthalEquidistant
+    Sub Main()
+        Try
+            Dim geod As Geodesic = New Geodesic() ' WGS84
+            Dim lat0 As Double = 48 + 50 / 60.0, lon0 = 2 + 20 / 60.0 ' Paris
+            Dim proj As AzimuthalEquidistant = New AzimuthalEquidistant(geod)
+            ' Sample forward calculation
+            Dim lat As Double = 50.9, lon = 1.8 ' Calais
+            Dim x, y As Double
+            proj.Forward(lat0, lon0, lat, lon, x, y)
+            Console.WriteLine(String.Format("X: {0} Y: {1}", x, y))
+            ' Sample reverse calculation
+            x = -38000.0 : y = 230000.0
+            proj.Reverse(lat0, lon0, x, y, lat, lon)
+            Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-CassiniSoldner.vb b/dotnet/examples/VB/example-CassiniSoldner.vb
new file mode 100644
index 0000000..e5bb9a7
--- /dev/null
+++ b/dotnet/examples/VB/example-CassiniSoldner.vb
@@ -0,0 +1,22 @@
+Imports NETGeographicLib
+
+Module example_CassiniSoldner
+    Sub Main()
+        Try
+            Dim geod As Geodesic = New Geodesic() ' WGS84
+            Dim lat0 As Double = 48 + 50 / 60.0, lon0 = 2 + 20 / 60.0 ' Paris
+            Dim proj As CassiniSoldner = New CassiniSoldner(lat0, lon0, geod)
+            ' Sample forward calculation
+            Dim lat As Double = 50.9, lon = 1.8 ' Calais
+            Dim x, y As Double
+            proj.Forward(lat, lon, x, y)
+            Console.WriteLine(String.Format("X: {0} Y: {1}", x, y))
+            ' Sample reverse calculation
+            x = -38000.0 : y = 230000.0
+            proj.Reverse(x, y, lat, lon)
+            Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-CircularEngine.vb b/dotnet/examples/VB/example-CircularEngine.vb
new file mode 100644
index 0000000..abe5608
--- /dev/null
+++ b/dotnet/examples/VB/example-CircularEngine.vb
@@ -0,0 +1,23 @@
+Imports NETGeographicLib
+
+Module example_CircularEngine
+    Sub Main()
+        ' This computes the same value as example-SphericalHarmonic.cpp using a
+        ' CircularEngine (which will be faster if many values on a circle of
+        ' latitude are to be found).
+        Try
+            Dim N As Integer = 3 ' The maxium degree
+            Dim ca As Double() = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1} ' cosine coefficients
+            Dim sa As Double() = {6, 5, 4, 3, 2, 1} ' sine coefficients
+            Dim a As Double = 1
+            Dim h As SphericalHarmonic = New SphericalHarmonic(ca, sa, N, a, SphericalHarmonic.Normalization.SCHMIDT)
+            Dim x As Double = 2, y = 3, z = 1, p = Math.Sqrt(x * x + y * y)
+            Dim circ As CircularEngine = h.Circle(p, z, True)
+            Dim v, vx, vy, vz As Double
+            v = circ.LongitudeSum(x / p, y / p, vx, vy, vz)
+            Console.WriteLine(String.Format("{0} {1} {2} {3}", v, vx, vy, vz))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-DMS.vb b/dotnet/examples/VB/example-DMS.vb
new file mode 100644
index 0000000..0647e2e
--- /dev/null
+++ b/dotnet/examples/VB/example-DMS.vb
@@ -0,0 +1,18 @@
+Imports NETGeographicLib
+
+Module example_DMS
+    Sub Main()
+        Try
+            Dim desc As String = "30d14'45.6""S"
+            Dim type As DMS.Flag
+            Dim ang As Double = DMS.Decode(desc, type)
+            Console.WriteLine(String.Format("Type: {0} String: {1}", type, ang))
+            ang = -30.245715
+            Dim prec As UInteger = 6
+            desc = DMS.Encode(ang, prec, DMS.Flag.LATITUDE, 0)
+            Console.WriteLine(String.Format("Latitude: {0}", desc))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-Ellipsoid.vb b/dotnet/examples/VB/example-Ellipsoid.vb
new file mode 100644
index 0000000..00cd433
--- /dev/null
+++ b/dotnet/examples/VB/example-Ellipsoid.vb
@@ -0,0 +1,22 @@
+Imports NETGeographicLib
+
+Module example_Ellipsoid
+    Sub Main()
+        Try
+            Dim wgs84 As Ellipsoid = New Ellipsoid(Constants.WGS84.MajorRadius,
+                                                   Constants.WGS84.Flattening)
+            ' Alternatively: Dim wgs84 As Ellipsoid = new Ellipsoid()
+            Console.WriteLine(String.Format(
+                "The latitude half way between the equator and the pole is {0}",
+                    wgs84.InverseRectifyingLatitude(45)))
+            Console.WriteLine(String.Format(
+                "Half the area of the ellipsoid lies between latitudes +/- {0}",
+                wgs84.InverseAuthalicLatitude(30)))
+            Console.WriteLine(String.Format(
+                "The northernmost edge of a square Mercator map is at latitude {0}",
+                wgs84.InverseIsometricLatitude(180)))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-EllipticFunction.vb b/dotnet/examples/VB/example-EllipticFunction.vb
new file mode 100644
index 0000000..cb3d4e6
--- /dev/null
+++ b/dotnet/examples/VB/example-EllipticFunction.vb
@@ -0,0 +1,32 @@
+Imports NETGeographicLib
+
+Module example_EllipticFunction
+    Sub Main()
+        Try
+            Dim ell As EllipticFunction = New EllipticFunction(0.1, 1.0)
+            ' See Abramowitz and Stegun, table 17.1
+            Console.WriteLine(String.Format("{0} {1}", ell.K(), ell.E()))
+            Dim phi As Double = 20 * Math.Acos(-1.0) / 180.0
+            ' See Abramowitz and Stegun, table 17.6 with
+            ' alpha = asin(sqrt(m)) = 18.43 deg and phi = 20 deg
+            Console.WriteLine(String.Format("{0} {1}", ell.E(phi),
+                    ell.E(Math.Sin(phi), Math.Cos(phi),
+                        Math.Sqrt(1 - ell.k2 * Math.Sin(phi) * Math.Sin(phi)))))
+            ' See Carlson 1995, Sec 3.
+            Console.WriteLine(String.Format("RF(1,2,0)      = {0}", EllipticFunction.RF(1, 2)))
+            Console.WriteLine(String.Format("RF(2,3,4)      = {0}", EllipticFunction.RF(2, 3, 4)))
+            Console.WriteLine(String.Format("RC(0,1/4)      = {0}", EllipticFunction.RC(0, 0.25)))
+            Console.WriteLine(String.Format("RC(9/4,2)      = {0}", EllipticFunction.RC(2.25, 2)))
+            Console.WriteLine(String.Format("RC(1/4,-2)     = {0}", EllipticFunction.RC(0.25, -2)))
+            Console.WriteLine(String.Format("RJ(0,1,2,3)    = {0}", EllipticFunction.RJ(0, 1, 2, 3)))
+            Console.WriteLine(String.Format("RJ(2,3,4,5)    = {0}", EllipticFunction.RJ(2, 3, 4, 5)))
+            Console.WriteLine(String.Format("RD(0,2,1)      = {0}", EllipticFunction.RD(0, 2, 1)))
+            Console.WriteLine(String.Format("RD(2,3,4)      = {0}", EllipticFunction.RD(2, 3, 4)))
+            Console.WriteLine(String.Format("RG(0,16,16)    = {0}", EllipticFunction.RG(16, 16)))
+            Console.WriteLine(String.Format("RG(2,3,4)      = {0}", EllipticFunction.RG(2, 3, 4)))
+            Console.WriteLine(String.Format("RG(0,0.0796,4) = {0}", EllipticFunction.RG(0.0796, 4)))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-GeoCoords.vb b/dotnet/examples/VB/example-GeoCoords.vb
new file mode 100644
index 0000000..c2496d6
--- /dev/null
+++ b/dotnet/examples/VB/example-GeoCoords.vb
@@ -0,0 +1,19 @@
+Imports NETGeographicLib
+
+Module example_GeoCoords
+    Sub Main()
+        Try
+            ' Miscellaneous conversions
+            Dim lat As Double = 33.3, lon = 44.4
+            Dim c As GeoCoords = New GeoCoords(lat, lon, -1)
+            Console.WriteLine(c.MGRSRepresentation(-3))
+            c.Reset("18TWN0050", True, False)
+            Console.WriteLine(c.DMSRepresentation(0, False, 0))
+            Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", c.Latitude, c.Longitude))
+            c.Reset("1d38'W 55d30'N", True, False)
+            Console.WriteLine(c.GeoRepresentation(0, False))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-Geocentric.vb b/dotnet/examples/VB/example-Geocentric.vb
new file mode 100644
index 0000000..79a1848
--- /dev/null
+++ b/dotnet/examples/VB/example-Geocentric.vb
@@ -0,0 +1,25 @@
+Imports NETGeographicLib
+
+Module example_Geocentric
+    Sub Main()
+        Try
+            Dim earth As Geocentric = New Geocentric(Constants.WGS84.MajorRadius,
+                                                     Constants.WGS84.Flattening)
+            ' Alternatively: Geocentric earth = new Geocentric();
+            ' Sample forward calculation
+            Dim lat As Double = 27.99, lon = 86.93, h = 8820 ' Mt Everest
+            Dim X, Y, Z As Double
+            earth.Forward(lat, lon, h, X, Y, Z)
+            Console.WriteLine(String.Format("{0} {1} {2}",
+                Math.Floor(X / 1000 + 0.5),
+                Math.Floor(Y / 1000 + 0.5),
+                Math.Floor(Z / 1000 + 0.5)))
+            ' Sample reverse calculation
+            X = 302000.0 : Y = 5636000.0 : Z = 2980000.0
+            earth.Reverse(X, Y, Z, lat, lon, h)
+            Console.WriteLine(String.Format("{0} {1} {2}", lat, lon, h))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-Geodesic.vb b/dotnet/examples/VB/example-Geodesic.vb
new file mode 100644
index 0000000..ff7e94f
--- /dev/null
+++ b/dotnet/examples/VB/example-Geodesic.vb
@@ -0,0 +1,23 @@
+Imports NETGeographicLib
+
+Module example_Geodesic
+    Sub Main()
+        Try
+            Dim geod As Geodesic = New Geodesic(Constants.WGS84.MajorRadius,
+                                                Constants.WGS84.Flattening)
+            ' Alternatively: Dim geod As Geodesic = new Geodesic()
+            ' Sample direct calculation, travelling about NE from JFK
+            Dim lat1 As Double = 40.6, lon1 = -73.8, s12 = 5500000.0, azi1 = 51
+            Dim lat2, lon2 As Double
+            geod.Direct(lat1, lon1, azi1, s12, lat2, lon2)
+            Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat2, lon2))
+            ' Sample inverse calculation, JFK to LHR
+            lat1 = 40.6 : lon1 = -73.8 ' JFK Airport
+            lat2 = 51.6 : lon2 = -0.5  ' LHR Airport
+            geod.Inverse(lat1, lon1, lat2, lon2, s12)
+            Console.WriteLine(s12)
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-GeodesicExact.vb b/dotnet/examples/VB/example-GeodesicExact.vb
new file mode 100644
index 0000000..ebf6b2f
--- /dev/null
+++ b/dotnet/examples/VB/example-GeodesicExact.vb
@@ -0,0 +1,23 @@
+Imports NETGeographicLib
+
+Module example_GeodesicExact
+    Sub Main()
+        Try
+            Dim geod As GeodesicExact = New GeodesicExact(Constants.WGS84.MajorRadius,
+                                                          Constants.WGS84.Flattening)
+            ' Alternatively: Dim geod As GeodesicExact = new GeodesicExact()
+            ' Sample direct calculation, travelling about NE from JFK
+            Dim lat1 As Double = 40.6, lon1 = -73.8, s12 = 5500000.0, azi1 = 51
+            Dim lat2, lon2 As Double
+            geod.Direct(lat1, lon1, azi1, s12, lat2, lon2)
+            Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat2, lon2))
+            ' Sample inverse calculation, JFK to LHR
+            lat1 = 40.6 : lon1 = -73.8 ' JFK Airport
+            lat2 = 51.6 : lon2 = -0.5  ' LHR Airport
+            geod.Inverse(lat1, lon1, lat2, lon2, s12)
+            Console.WriteLine(s12)
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-GeodesicLine.vb b/dotnet/examples/VB/example-GeodesicLine.vb
new file mode 100644
index 0000000..7c17516
--- /dev/null
+++ b/dotnet/examples/VB/example-GeodesicLine.vb
@@ -0,0 +1,34 @@
+Imports NETGeographicLib
+
+Module example_GeodesicLine
+    Sub Main()
+        Try
+            ' Print waypoints between JFK and SIN
+            Dim geod As Geodesic = New Geodesic() ' WGS84
+            Dim lat1 As Double = 40.64, lon1 = -73.779 ' JFK
+            Dim lat2 As Double = 1.359, lon2 = 103.989 ' SIN
+            Dim s12, azi1, azi2 As Double
+            Dim a12 As Double = geod.Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2)
+            Dim line As GeodesicLine = New GeodesicLine(geod, lat1, lon1, azi1, Mask.ALL)
+            ' Alternatively Dim line As GeodesicLineExact = geod.Line(lat1, lon1, azi1, Mask.ALL)
+            Dim ds As Double = 500000.0 ' Nominal distance between points = 500 km
+            Dim num As Integer = CInt(Math.Ceiling(s12 / ds)) ' The number of intervals
+            ' Use intervals of equal length
+            ds = s12 / num
+            For i As Integer = 0 To num
+                Dim lat, lon As Double
+                line.Position(i * ds, lat, lon)
+                Console.WriteLine(String.Format("i: {0} Latitude: {1} Longitude: {2}", i, lat, lon))
+            Next
+            ' Slightly faster, use intervals of equal arc length
+            Dim da As Double = a12 / num
+            For i As Integer = 0 To num
+                Dim lat, lon As Double
+                line.ArcPosition(i * da, lat, lon)
+                Console.WriteLine(String.Format("i: {0} Latitude: {1} Longitude: {2}", i, lat, lon))
+            Next
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-GeodesicLineExact.vb b/dotnet/examples/VB/example-GeodesicLineExact.vb
new file mode 100644
index 0000000..629dca6
--- /dev/null
+++ b/dotnet/examples/VB/example-GeodesicLineExact.vb
@@ -0,0 +1,34 @@
+Imports NETGeographicLib
+
+Module example_GeodesicLineExact
+    Sub Main()
+        Try
+            ' Print waypoints between JFK and SIN
+            Dim geod As GeodesicExact = New GeodesicExact() ' WGS84
+            Dim lat1 As Double = 40.64, lon1 = -73.779 ' JFK
+            Dim lat2 As Double = 1.359, lon2 = 103.989 ' SIN
+            Dim s12, azi1, azi2 As Double
+            Dim a12 As Double = geod.Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2)
+            Dim line As GeodesicLineExact = New GeodesicLineExact(geod, lat1, lon1, azi1, Mask.ALL)
+            ' Alternatively Dim line As GeodesicLineExact = geod.Line(lat1, lon1, azi1, Mask.ALL)
+            Dim ds As Double = 500000.0 ' Nominal distance between points = 500 km
+            Dim num As Integer = CInt(Math.Ceiling(s12 / ds)) ' The number of intervals
+            ' Use intervals of equal length
+            ds = s12 / num
+            For i As Integer = 0 To num
+                Dim lat, lon As Double
+                line.Position(i * ds, lat, lon)
+                Console.WriteLine(String.Format("i: {0} Latitude: {1} Longitude: {2}", i, lat, lon))
+            Next
+            ' Slightly faster, use intervals of equal arc length
+            Dim da As Double = a12 / num
+            For i As Integer = 0 To num
+                Dim lat, lon As Double
+                line.ArcPosition(i * da, lat, lon)
+                Console.WriteLine(String.Format("i: {0} Latitude: {1} Longitude: {2}", i, lat, lon))
+            Next
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-Geohash.vb b/dotnet/examples/VB/example-Geohash.vb
new file mode 100644
index 0000000..edb2d15
--- /dev/null
+++ b/dotnet/examples/VB/example-Geohash.vb
@@ -0,0 +1,25 @@
+Imports NETGeographicLib
+
+Module example_Geohash
+    Sub Main()
+        Try
+            ' Sample forward calculation
+            Dim lat As Double = 57.64911, lon = 10.40744 ' Jutland (the wikipedia example)
+            Dim ghash As String
+            Dim maxlen As Integer = Geohash.GeohashLength(0.00001)
+            For len As Integer = 0 To maxlen
+                Geohash.Forward(lat, lon, len, ghash)
+                Console.WriteLine(ghash)
+            Next
+            ' Sample reverse calculation
+            ghash = "u4pruydqqvj"
+            For i As Integer = 0 To ghash.Length - 1
+                Dim len As Integer
+                Geohash.Reverse(ghash.Substring(0, i), lat, lon, len, True)
+                Console.WriteLine(String.Format("Length: {0} Latitude: {1} Longitude: {2}", len, lat, lon))
+            Next
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-Geoid.vb b/dotnet/examples/VB/example-Geoid.vb
new file mode 100644
index 0000000..fd60450
--- /dev/null
+++ b/dotnet/examples/VB/example-Geoid.vb
@@ -0,0 +1,17 @@
+Imports NETGeographicLib
+
+Module example_Geoid
+    Sub Main()
+        Try
+            Dim egm96 As Geoid = New Geoid("egm96-5", "", True, False)
+            ' Convert height above egm96 to height above the ellipsoid
+            Dim lat As Double = 42, lon = -75, height_above_geoid = 20
+            Dim geoid_height As Double = egm96.Height(lat, lon)
+            Dim height_above_ellipsoid As Double  = (height_above_geoid +
+                    CDbl(Geoid.ConvertFlag.GEOIDTOELLIPSOID) * geoid_height)
+            Console.WriteLine(height_above_ellipsoid)
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-Gnomonic.vb b/dotnet/examples/VB/example-Gnomonic.vb
new file mode 100644
index 0000000..91ea5aa
--- /dev/null
+++ b/dotnet/examples/VB/example-Gnomonic.vb
@@ -0,0 +1,22 @@
+Imports NETGeographicLib
+
+Module example_Gnomonic
+    Sub Main()
+        Try
+            Dim geod As Geodesic = New Geodesic() ' WGS84
+            Dim lat0 As Double = 48 + 50 / 60.0, lon0 = 2 + 20 / 60.0 ' Paris
+            Dim proj As Gnomonic = New Gnomonic(geod)
+            ' Sample forward calculation
+            Dim lat As Double = 50.9, lon = 1.8 ' Calais
+            Dim x, y As Double
+            proj.Forward(lat0, lon0, lat, lon, x, y)
+            Console.WriteLine(String.Format("X: {0} Y: {1}", x, y))
+            ' Sample reverse calculation
+            x = -38000.0 : y = 230000.0
+            proj.Reverse(lat0, lon0, x, y, lat, lon)
+            Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-GravityCircle.vb b/dotnet/examples/VB/example-GravityCircle.vb
new file mode 100644
index 0000000..ed80b8c
--- /dev/null
+++ b/dotnet/examples/VB/example-GravityCircle.vb
@@ -0,0 +1,29 @@
+Imports NETGeographicLib
+
+Module example_GravityCircle
+    Sub Main()
+        Try
+            Dim grav As GravityModel = New GravityModel("egm96", "")
+            Dim lat As Double = 27.99, lon0 = 86.93, h = 8820 ' Mt Everest
+            ' Slow method of evaluating the values at several points on a circle of
+            ' latitude.
+            For i As Integer = -5 To 5
+                Dim lon As Double = lon0 + i * 0.2
+                Dim gx, gy, gz As Double
+                grav.Gravity(lat, lon, h, gx, gy, gz)
+                Console.WriteLine(String.Format("{0} {1} {2} {3}", lon, gx, gy, gz))
+            Next
+            ' Fast method of evaluating the values at several points on a circle of
+            ' latitude using GravityCircle.
+            Dim circ As GravityCircle = grav.Circle(lat, h, GravityModel.Mask.ALL)
+            For i As Integer = -5 To 5
+                Dim lon As Double = lon0 + i * 0.2
+                Dim gx, gy, gz As Double
+                circ.Gravity(lon, gx, gy, gz)
+                Console.WriteLine(String.Format("{0} {1} {2} {3}", lon, gx, gy, gz))
+            Next
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-GravityModel.vb b/dotnet/examples/VB/example-GravityModel.vb
new file mode 100644
index 0000000..ce0aa5a
--- /dev/null
+++ b/dotnet/examples/VB/example-GravityModel.vb
@@ -0,0 +1,15 @@
+Imports NETGeographicLib
+
+Module example_GravityModel
+    Sub Main()
+        Try
+            Dim grav As GravityModel = New GravityModel("egm96", "")
+            Dim lat As Double = 27.99, lon = 86.93, h = 8820 ' Mt Everest
+            Dim gx, gy, gz As Double
+            grav.Gravity(lat, lon, h, gx, gy, gz)
+            Console.WriteLine(String.Format("{0} {1} {2}", gx, gy, gz))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-LambertConformalConic.vb b/dotnet/examples/VB/example-LambertConformalConic.vb
new file mode 100644
index 0000000..7219736
--- /dev/null
+++ b/dotnet/examples/VB/example-LambertConformalConic.vb
@@ -0,0 +1,35 @@
+Imports NETGeographicLib
+
+Module example_LambertConformalConic
+    Sub Main()
+        Try
+            ' Define the Pennsylvania South state coordinate system EPSG:3364
+            ' http://www.spatialreference.org/ref/epsg/3364/
+            Dim lat1 As Double = 40 + 58 / 60.0, lat2 = 39 + 56 / 60.0  ' standard parallels
+            Dim k1 As Double = 1                                        ' scale
+            Dim lat0 As Double = 39 + 20 / 60.0, lon0 = -77 - 45 / 60.0 ' origin
+            Dim fe As Double = 600000, fn = 0                           ' false easting and northing
+            ' Set up basic projection
+            Dim PASouth As LambertConformalConic = New LambertConformalConic(Constants.WGS84.MajorRadius,
+                                                                             Constants.WGS84.Flattening,
+                                                                             lat1, lat2, k1)
+            Dim x0, y0 As Double
+            ' Transform origin point
+            PASouth.Forward(lon0, lat0, lon0, x0, y0)
+            x0 -= fe : y0 -= fn
+            ' Sample conversion from geodetic to PASouth grid
+            Dim lat As Double = 39.95, lon = -75.17    ' Philadelphia
+            Dim x, y As Double
+            PASouth.Forward(lon0, lat, lon, x, y)
+            x -= x0 : y -= y0
+            Console.WriteLine(String.Format("{0} {1}", x, y))
+            ' Sample conversion from PASouth grid to geodetic
+            x = 820000.0 : y = 72000.0
+            x += x0 : y += y0
+            PASouth.Reverse(lon0, x, y, lat, lon)
+            Console.WriteLine(String.Format("{0} {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-LocalCartesian.vb b/dotnet/examples/VB/example-LocalCartesian.vb
new file mode 100644
index 0000000..c926789
--- /dev/null
+++ b/dotnet/examples/VB/example-LocalCartesian.vb
@@ -0,0 +1,22 @@
+Imports NETGeographicLib
+
+Module example_LocalCartesian
+    Sub Main()
+        Try
+            Dim earth As Geocentric = New Geocentric()
+            Dim lat0 As Double = 48 + 50 / 60.0, lon0 = 2 + 20 / 60.0 ' Paris
+            Dim proj As LocalCartesian = New LocalCartesian(lat0, lon0, 0, earth)
+            ' Sample forward calculation
+            Dim lat As Double = 50.9, lon = 1.8, h = 0 ' Calais
+            Dim x, y, z As Double
+            proj.Forward(lat, lon, h, x, y, z)
+            Console.WriteLine(String.Format("{0} {1} {2}", x, y, z))
+            ' Sample reverse calculation
+            x = -38000.0 : y = 230000.0 : z = -4000.0
+            proj.Reverse(x, y, z, lat, lon, h)
+            Console.WriteLine(String.Format("{0} {1} {2}", lat, lon, h))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-MGRS.vb b/dotnet/examples/VB/example-MGRS.vb
new file mode 100644
index 0000000..3edde0c
--- /dev/null
+++ b/dotnet/examples/VB/example-MGRS.vb
@@ -0,0 +1,26 @@
+Imports NETGeographicLib
+
+Module example_MGRS
+    Sub Main()
+        Try
+            ' See also example-GeoCoords.cpp
+            ' Sample forward calculation
+            Dim lat As Double = 33.3, lon = 44.4 ' Baghdad
+            Dim zone As Integer
+            Dim northp As Boolean
+            Dim x, y As Double
+            UTMUPS.Forward(lat, lon, zone, northp, x, y, -1, True)
+            Dim mgrsStr As String
+            MGRS.Forward(zone, northp, x, y, lat, 5, mgrsStr)
+            Console.WriteLine(mgrsStr)
+            ' Sample reverse calculation
+            mgrsStr = "38SMB4488"
+            Dim prec As Integer
+            MGRS.Reverse(mgrsStr, zone, northp, x, y, prec, True)
+            UTMUPS.Reverse(zone, northp, x, y, lat, lon, True)
+            Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-MagneticCircle.vb b/dotnet/examples/VB/example-MagneticCircle.vb
new file mode 100644
index 0000000..f1da613
--- /dev/null
+++ b/dotnet/examples/VB/example-MagneticCircle.vb
@@ -0,0 +1,29 @@
+Imports NETGeographicLib
+
+Module example_MagneticCircle
+    Sub Main()
+        Try
+            Dim mag As MagneticModel = New MagneticModel("wmm2010", "")
+            Dim lat As Double = 27.99, lon0 = 86.93, h = 8820, t = 2012 ' Mt Everest
+            ' Slow method of evaluating the values at several points on a circle of
+            ' latitude.
+            For i As Integer = -5 To 5
+                Dim lon As Double = lon0 + i * 0.2
+                Dim Bx, By, Bz As Double
+                mag.Field(t, lat, lon, h, Bx, By, Bz)
+                Console.WriteLine(String.Format("{0} {1} {2} {3}", lon, Bx, By, Bz))
+            Next
+            ' Fast method of evaluating the values at several points on a circle of
+            ' latitude using MagneticCircle.
+            Dim circ As MagneticCircle = mag.Circle(t, lat, h)
+            For i As Integer = -5 To 5
+                Dim lon As Double = lon0 + i * 0.2
+                Dim Bx, By, Bz As Double
+                circ.Field(lon, Bx, By, Bz)
+                Console.WriteLine(String.Format("{0} {1} {2} {3}", lon, Bx, By, Bz))
+            Next
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-MagneticModel.vb b/dotnet/examples/VB/example-MagneticModel.vb
new file mode 100644
index 0000000..9420764
--- /dev/null
+++ b/dotnet/examples/VB/example-MagneticModel.vb
@@ -0,0 +1,17 @@
+Imports NETGeographicLib
+
+Module example_MagneticModel
+    Sub Main()
+        Try
+            Dim mag As MagneticModel = New MagneticModel("wmm2010", "")
+            Dim lat As Double = 27.99, lon = 86.93, h = 8820, t = 2012 ' Mt Everest
+            Dim Bx, By, Bz As Double
+            mag.Field(t, lat, lon, H, Bx, By, Bz)
+            Dim bigH, F, D, I As Double
+            MagneticModel.FieldComponents(Bx, By, Bz, bigH, F, D, I)
+            Console.WriteLine(String.Format("{0} {1} {2} {3}", bigH, F, D, I))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-NormalGravity.vb b/dotnet/examples/VB/example-NormalGravity.vb
new file mode 100644
index 0000000..c2fdf4b
--- /dev/null
+++ b/dotnet/examples/VB/example-NormalGravity.vb
@@ -0,0 +1,15 @@
+Imports NETGeographicLib
+
+Module example_NormalGravity
+    Sub Main()
+        Try
+            Dim grav As NormalGravity = New NormalGravity(NormalGravity.StandardModels.WGS84)
+            Dim lat As Double = 27.99, h = 8820 ' Mt Everest
+            Dim gammay, gammaz As Double
+            grav.Gravity(lat, h, gammay, gammaz)
+            Console.WriteLine(String.Format("{0} {1}", gammay, gammaz))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-OSGB.vb b/dotnet/examples/VB/example-OSGB.vb
new file mode 100644
index 0000000..58810f4
--- /dev/null
+++ b/dotnet/examples/VB/example-OSGB.vb
@@ -0,0 +1,25 @@
+Imports NETGeographicLib
+
+Module example_OSGB
+    Sub Main()
+        Try
+            ' Sample forward calculation from
+            ' A guide to coordinate systems in Great Britain
+            Dim lat As Double = DMS.Decode(52, 39, 27.2531)
+            Dim lon As Double = DMS.Decode(1, 43, 4.5177)
+            Dim x, y As Double
+            OSGB.Forward(lat, lon, x, y)
+            Dim gridref As String = ""
+            OSGB.GridReference(x, y, 2, gridref)
+            Console.WriteLine(String.Format("{0} {1} {2}", x, y, gridref))
+            ' Sample reverse calculation
+            gridref = "TG5113"
+            Dim prec As Integer
+            OSGB.GridReference(gridref, x, y, prec, True)
+            OSGB.Reverse(x, y, lat, lon)
+            Console.WriteLine(String.Format("{0} {1} {2}", prec, lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-PolarStereographic.vb b/dotnet/examples/VB/example-PolarStereographic.vb
new file mode 100644
index 0000000..65ad7cc
--- /dev/null
+++ b/dotnet/examples/VB/example-PolarStereographic.vb
@@ -0,0 +1,21 @@
+Imports NETGeographicLib
+
+Module example_PolarStereographic
+    Sub Main()
+        Try
+            Dim proj As PolarStereographic = New PolarStereographic() ' WGS84
+            Dim northp As Boolean = True
+            ' Sample forward calculation
+            Dim lat As Double = 61.2, lon = -149.9 ' Anchorage
+            Dim x, y As Double
+            proj.Forward(northp, lat, lon, x, y)
+            Console.WriteLine(String.Format("{0} {1}", x, y))
+            ' Sample reverse calculation
+            x = -1637000.0 : y = 2824000.0
+            proj.Reverse(northp, x, y, lat, lon)
+            Console.WriteLine(String.Format("{0} {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-PolygonArea.vb b/dotnet/examples/VB/example-PolygonArea.vb
new file mode 100644
index 0000000..91131e2
--- /dev/null
+++ b/dotnet/examples/VB/example-PolygonArea.vb
@@ -0,0 +1,19 @@
+Imports NETGeographicLib
+
+Module example_PolygonArea
+    Sub Main()
+        Try
+            Dim geod As Geodesic = New Geodesic()  ' WGS84
+            Dim poly As PolygonArea = New PolygonArea(geod, True)
+            poly.AddPoint(52, 0)     ' London
+            poly.AddPoint(41, -74)   ' New York
+            poly.AddPoint(-23, -43)  ' Rio de Janeiro
+            poly.AddPoint(-26, 28)   ' Johannesburg
+            Dim perimeter, area As Double
+            Dim n As UInteger = poly.Compute(False, True, perimeter, area)
+            Console.WriteLine(String.Format("{0} {1} {2}", n, perimeter, area))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-SphericalHarmonic.vb b/dotnet/examples/VB/example-SphericalHarmonic.vb
new file mode 100644
index 0000000..9490544
--- /dev/null
+++ b/dotnet/examples/VB/example-SphericalHarmonic.vb
@@ -0,0 +1,19 @@
+Imports NETGeographicLib
+
+Module example_SphericalHarmonic
+    Sub Main()
+        Try
+            Dim N As Integer = 3 ' The maximum degree
+            Dim ca As Double() = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1} ' cosine coefficients
+            Dim sa As Double() = {6, 5, 4, 3, 2, 1} ' sine coefficients
+            Dim a As Double = 1
+            Dim h As SphericalHarmonic = New SphericalHarmonic(ca, sa, N, a, SphericalHarmonic.Normalization.SCHMIDT)
+            Dim x As Double = 2, y = 3, z = 1
+            Dim vx, vy, vz As Double
+            Dim v As Double = h.HarmonicSum(x, y, z, vx, vy, vz)
+            Console.WriteLine(String.Format("{0} {1} {2} {3}", v, vx, vy, vz))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-SphericalHarmonic1.vb b/dotnet/examples/VB/example-SphericalHarmonic1.vb
new file mode 100644
index 0000000..efe1211
--- /dev/null
+++ b/dotnet/examples/VB/example-SphericalHarmonic1.vb
@@ -0,0 +1,21 @@
+Imports NETGeographicLib
+
+Module example_SphericalHarmonic1
+    Sub Main()
+        Try
+            Dim N As Integer = 3, N1 = 2                  ' The maximum degrees
+            Dim ca As Double() = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1} ' cosine coefficients
+            Dim sa As Double() = {6, 5, 4, 3, 2, 1} ' sine coefficients
+            Dim cb As Double() = {1, 2, 3, 4, 5, 6}
+            Dim sb As Double() = {3, 2, 1}
+            Dim a As Double = 1
+            Dim h As SphericalHarmonic1 = New SphericalHarmonic1(ca, sa, N, cb, sb, N1, a, SphericalHarmonic1.Normalization.SCHMIDT)
+            Dim tau As Double = 0.1, x = 2, y = 3, z = 1
+            Dim vx, vy, vz As Double
+            Dim v As Double = h.HarmonicSum(tau, x, y, z, vx, vy, vz)
+            Console.WriteLine(String.Format("{0} {1} {2} {3}", v, vx, vy, vz))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-SphericalHarmonic2.vb b/dotnet/examples/VB/example-SphericalHarmonic2.vb
new file mode 100644
index 0000000..274a59f
--- /dev/null
+++ b/dotnet/examples/VB/example-SphericalHarmonic2.vb
@@ -0,0 +1,26 @@
+Imports NETGeographicLib
+
+Module example_SphericalHarmonic2
+    Sub Main()
+        Try
+            Dim N As Integer = 3, N1 = 2, N2 = 1 ' The maximum degrees
+            Dim ca As Double() = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1} ' cosine coefficients
+            Dim sa As Double() = {6, 5, 4, 3, 2, 1} ' sine coefficients
+            Dim cb As Double() = {1, 2, 3, 4, 5, 6}
+            Dim sb As Double() = {3, 2, 1}
+            Dim cc As Double() = {2, 1}
+            Dim S2 As Double() = {0}
+            Dim a As Double = 1
+            Dim h As SphericalHarmonic2 = New SphericalHarmonic2(
+                                    ca, sa, N, N, N, cb, sb, N1, N1, N1,
+                                    cc, S2, N2, N2, 0, a,
+                                    SphericalHarmonic2.Normalization.SCHMIDT)
+            Dim tau1 As Double = 0.1, tau2 = 0.05, x = 2, y = 3, z = 1
+            Dim vx, vy, vz As Double
+            Dim v As Double = h.HarmonicSum(tau1, tau2, x, y, z, vx, vy, vz)
+            Console.WriteLine(String.Format("{0} {1} {2} {3}", v, vx, vy, vz))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-TransverseMercator.vb b/dotnet/examples/VB/example-TransverseMercator.vb
new file mode 100644
index 0000000..c2a580e
--- /dev/null
+++ b/dotnet/examples/VB/example-TransverseMercator.vb
@@ -0,0 +1,21 @@
+Imports NETGeographicLib
+
+Module example_TransverseMercator
+    Sub Main()
+        Try
+            Dim proj As TransverseMercator = New TransverseMercator() ' WGS84
+            Dim lon0 As Double = -75          ' Central meridian for UTM zone 18
+            ' Sample forward calculation
+            Dim lat As Double = 40.3, lon = -74.7 ' Princeton, NJ
+            Dim x, y As Double
+            proj.Forward(lon0, lat, lon, x, y)
+            Console.WriteLine(String.Format("{0} {1}", x, y))
+            ' Sample reverse calculation
+            x = 25000.0 : y = 4461000.0
+            proj.Reverse(lon0, x, y, lat, lon)
+            Console.WriteLine(String.Format("{0} {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-TransverseMercatorExact.vb b/dotnet/examples/VB/example-TransverseMercatorExact.vb
new file mode 100644
index 0000000..064dedd
--- /dev/null
+++ b/dotnet/examples/VB/example-TransverseMercatorExact.vb
@@ -0,0 +1,21 @@
+Imports NETGeographicLib
+
+Module example_TransverseMercatorExact
+    Sub Main()
+        Try
+            Dim proj As TransverseMercatorExact = New TransverseMercatorExact() ' WGS84
+            Dim lon0 As Double = -75          ' Central meridian for UTM zone 18
+            ' Sample forward calculation
+            Dim lat As Double = 40.3, lon = -74.7 ' Princeton, NJ
+            Dim x, y As Double
+            proj.Forward(lon0, lat, lon, x, y)
+            Console.WriteLine(String.Format("{0} {1}", x, y))
+            ' Sample reverse calculation
+            x = 25000.0 : y = 4461000.0
+            proj.Reverse(lon0, x, y, lat, lon)
+            Console.WriteLine(String.Format("{0} {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-UTMUPS.vb b/dotnet/examples/VB/example-UTMUPS.vb
new file mode 100644
index 0000000..9e45a0f
--- /dev/null
+++ b/dotnet/examples/VB/example-UTMUPS.vb
@@ -0,0 +1,25 @@
+Imports NETGeographicLib
+
+Module example_UTMUPS
+    Sub Main()
+        Try
+            ' See also example-GeoCoords.cpp
+            ' Sample forward calculation
+            Dim lat As Double = 33.3, lon = 44.4 ' Baghdad
+            Dim zone As Integer
+            Dim northp As Boolean
+            Dim x, y As Double
+            UTMUPS.Forward(lat, lon, zone, northp, x, y, -1, True)
+            Dim zonestr As String = UTMUPS.EncodeZone(zone, northp)
+            Console.WriteLine(String.Format("{0} {1} {2}", zonestr, x, y))
+            ' Sample reverse calculation
+            zonestr = "38N"
+            UTMUPS.DecodeZone(zonestr, zone, northp)
+            x = 444000.0 : y = 3688000.0
+            UTMUPS.Reverse(zone, northp, x, y, lat, lon, True)
+            Console.WriteLine(String.Format("{0} {1}", lat, lon))
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 913f659..fe0034b 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -1,16 +1,16 @@
-# $Id: 54590373678f8a602e370bb7a54265163f5b9d73 $
-
-# Compile (but don't install) a bunch of tiny example programs.  These
-# are mainly for including as examples within the doxygen documentation;
-# however, compiling them catches most obvious blunders.
+# Compile a bunch of tiny example programs.  These are built with the
+# "exampleprograms" target.  These are mainly for including as examples
+# within the doxygen documentation; however, compiling them catches some
+# obvious blunders.
 file (GLOB EXAMPLE_SOURCES example-*.cpp)
 set (EXAMPLES)
+add_definitions (${PROJECT_DEFINITIONS})
 
 foreach (EXAMPLE_SOURCE ${EXAMPLE_SOURCES})
   get_filename_component (EXAMPLE ${EXAMPLE_SOURCE} NAME_WE)
   set (EXAMPLES ${EXAMPLES} ${EXAMPLE})
-  add_executable (${EXAMPLE} ${EXAMPLE_SOURCE})
-  target_link_libraries (${EXAMPLE} Geographic)
+  add_executable (${EXAMPLE} EXCLUDE_FROM_ALL ${EXAMPLE_SOURCE})
+  target_link_libraries (${EXAMPLE} ${PROJECT_LIBRARIES})
 endforeach ()
 
 set (OTHER_EXAMPLES GeoidToGTX.cpp)
@@ -18,21 +18,36 @@ set (OTHER_EXAMPLES GeoidToGTX.cpp)
 foreach (EXAMPLE_SOURCE ${OTHER_EXAMPLES})
   get_filename_component (EXAMPLE ${EXAMPLE_SOURCE} NAME_WE)
   set (EXAMPLES ${EXAMPLES} ${EXAMPLE})
-  add_executable (${EXAMPLE} ${EXAMPLE_SOURCE})
-  target_link_libraries (${EXAMPLE} Geographic)
+  add_executable (${EXAMPLE} EXCLUDE_FROM_ALL ${EXAMPLE_SOURCE})
+  target_link_libraries (${EXAMPLE} ${PROJECT_LIBRARIES})
 endforeach ()
 
-find_package (OpenMP)
+find_package (OpenMP QUIET)
 
-if (OPENMP_FOUND OR OpenMP_FOUND)
+if (OPENMP_FOUND)
   set_target_properties (GeoidToGTX PROPERTIES
-    COMPILE_FLAGS ${OpenMP_CXX_FLAGS}
-    COMPILE_DEFINITIONS HAVE_OPENMP=1)
+    COMPILE_FLAGS ${OpenMP_CXX_FLAGS} COMPILE_DEFINITIONS HAVE_OPENMP=1)
   if (NOT WIN32)
-    set_target_properties (GeoidToGTX PROPERTIES
-      LINK_FLAGS ${OpenMP_CXX_FLAGS})
-  endif (NOT WIN32)
-endif (OPENMP_FOUND OR OpenMP_FOUND)
+    set_target_properties (GeoidToGTX PROPERTIES LINK_FLAGS ${OpenMP_CXX_FLAGS})
+  endif ()
+  message (STATUS "Example program GeoidToGTX will use OpenMP")
+else ()
+  message (STATUS "Example program GeoidToGTX will not use OpenMP")
+endif ()
+
+add_custom_target (exampleprograms DEPENDS ${EXAMPLES})
+
+if (MSVC)
+  get_target_property (_LIBTYPE ${PROJECT_LIBRARIES} TYPE)
+  if (_LIBTYPE STREQUAL "SHARED_LIBRARY")
+    # Copy the shared library on Windows systems to this directory
+    # (examples) so that the tests can be run.
+    add_custom_command (TARGET exampleprograms POST_BUILD
+      COMMAND ${CMAKE_COMMAND} -E
+      copy $<TARGET_FILE:${PROJECT_LIBRARIES}> ${CMAKE_CFG_INTDIR}
+      COMMENT "Copying shared library to examples directory")
+  endif ()
+endif ()
 
-add_custom_target (examples DEPENDS ${EXAMPLES})
-add_dependencies (examples Geographic)
+# Put all the examples into a folder in the IDE
+set_property (TARGET exampleprograms ${EXAMPLES} PROPERTY FOLDER examples)
diff --git a/examples/GeoidToGTX.cpp b/examples/GeoidToGTX.cpp
index dd16d67..b4b29de 100644
--- a/examples/GeoidToGTX.cpp
+++ b/examples/GeoidToGTX.cpp
@@ -21,7 +21,7 @@
 #include <algorithm>
 
 #if HAVE_OPENMP
-#include <omp.h>
+#  include <omp.h>
 #endif
 
 #include <GeographicLib/GravityModel.hpp>
@@ -60,7 +60,7 @@ int main(int argc, char* argv[]) {
     // Write header
     {
       double transform[] = {latorg, lonorg, delta, delta};
-      unsigned sizes[] = {nlat, nlon};
+      unsigned sizes[] = {unsigned(nlat), unsigned(nlon)};
       Utility::writearray<double, double, true>(file, transform, 4);
       Utility::writearray<unsigned, unsigned, true>(file, sizes, 2);
     }
@@ -73,7 +73,7 @@ int main(int argc, char* argv[]) {
       int nlat0 = min(nlat, ilat0 + nbatch);
 
 #if HAVE_OPENMP
-#pragma omp parallel for
+#  pragma omp parallel for
 #endif
       for (int ilat = ilat0; ilat < nlat0; ++ilat) { // Loop over latitudes
         double
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 14d1cfe..8e32057 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -2,7 +2,6 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: 8f327ca307cc38126a2ecbca4df19f2c8eef2604 $
 
 EXAMPLE_FILES = \
 	example-Accumulator.cpp \
@@ -12,13 +11,17 @@ EXAMPLE_FILES = \
 	example-CircularEngine.cpp \
 	example-Constants.cpp \
 	example-DMS.cpp \
+	example-Ellipsoid.cpp \
 	example-EllipticFunction.cpp \
 	example-GeoCoords.cpp \
 	example-Geocentric.cpp \
 	example-Geodesic.cpp \
 	example-Geodesic-small.cpp \
+	example-GeodesicExact.cpp \
 	example-GeodesicLine.cpp \
+	example-GeodesicLineExact.cpp \
 	example-GeographicErr.cpp \
+	example-Geohash.cpp \
 	example-Geoid.cpp \
 	example-Gnomonic.cpp \
 	example-GravityCircle.cpp \
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 591d88f..8e86fd7 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,8 +18,24 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: 8f327ca307cc38126a2ecbca4df19f2c8eef2604 $
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -55,6 +70,11 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -66,6 +86,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -76,6 +97,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -84,6 +106,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -119,6 +144,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -191,13 +218,17 @@ EXAMPLE_FILES = \
 	example-CircularEngine.cpp \
 	example-Constants.cpp \
 	example-DMS.cpp \
+	example-Ellipsoid.cpp \
 	example-EllipticFunction.cpp \
 	example-GeoCoords.cpp \
 	example-Geocentric.cpp \
 	example-Geodesic.cpp \
 	example-Geodesic-small.cpp \
+	example-GeodesicExact.cpp \
 	example-GeodesicLine.cpp \
+	example-GeodesicLineExact.cpp \
 	example-GeographicErr.cpp \
+	example-Geohash.cpp \
 	example-Geoid.cpp \
 	example-Gnomonic.cpp \
 	example-GravityCircle.cpp \
@@ -268,6 +299,8 @@ TAGS:
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -313,10 +346,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/examples/example-Accumulator.cpp b/examples/example-Accumulator.cpp
index a2d903f..d301e19 100644
--- a/examples/example-Accumulator.cpp
+++ b/examples/example-Accumulator.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::Accumulator class
-// $Id: cd6505cf47fbae653b439ba63ea927050cbf0a45 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-AlbersEqualArea.cpp b/examples/example-AlbersEqualArea.cpp
index f1872d0..f56dc73 100644
--- a/examples/example-AlbersEqualArea.cpp
+++ b/examples/example-AlbersEqualArea.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::AlbersEqualArea class
-// $Id: 230027b09ff2dfa7940202913a6d965281818b99 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-AzimuthalEquidistant.cpp b/examples/example-AzimuthalEquidistant.cpp
index b5af5e4..8af2d00 100644
--- a/examples/example-AzimuthalEquidistant.cpp
+++ b/examples/example-AzimuthalEquidistant.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::AzimuthalEquidistant class
-// $Id: d018fda4dc3289b06b9e6fe8cda16638430d9213 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-CassiniSoldner.cpp b/examples/example-CassiniSoldner.cpp
index c3a8dd8..173a717 100644
--- a/examples/example-CassiniSoldner.cpp
+++ b/examples/example-CassiniSoldner.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::CassiniSoldner class
-// $Id: f1d1d192c9449d198226a19cfbdc37d0b14ea52f $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-CircularEngine.cpp b/examples/example-CircularEngine.cpp
index 382b99d..10ac74c 100644
--- a/examples/example-CircularEngine.cpp
+++ b/examples/example-CircularEngine.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::CircularEngine class
-// $Id: a742c5ccdb47b73fcd599dc1adda36a70450b5a5 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-Constants.cpp b/examples/example-Constants.cpp
index 4599369..8123d8d 100644
--- a/examples/example-Constants.cpp
+++ b/examples/example-Constants.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::Constants class
-// $Id: c32f14d43abd9e969043dd0506b00c2458763419 $
 
 #include <iostream>
 #include <exception>
@@ -10,7 +9,9 @@ using namespace GeographicLib;
 
 int main() {
   try {
-    cout << Constants::WGS84_a() << " 1/" << 1/Constants::WGS84_f() << "\n";
+    cout << "WGS84 parameters:\n"
+         << "a = " << Constants::WGS84_a() << " m\n"
+         << "f = 1/" << 1/Constants::WGS84_f() << "\n";
   }
   catch (const exception& e) {
     cerr << "Caught exception: " << e.what() << "\n";
diff --git a/examples/example-DMS.cpp b/examples/example-DMS.cpp
index bf8f1ca..dc4006c 100644
--- a/examples/example-DMS.cpp
+++ b/examples/example-DMS.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::DMS class
-// $Id: c12828a51e75bb4a2a28f67768acdb405f63a197 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-Ellipsoid.cpp b/examples/example-Ellipsoid.cpp
new file mode 100644
index 0000000..3e00a75
--- /dev/null
+++ b/examples/example-Ellipsoid.cpp
@@ -0,0 +1,26 @@
+// Example of using the GeographicLib::Ellipsoid class
+
+#include <iostream>
+#include <exception>
+#include <GeographicLib/Ellipsoid.hpp>
+
+using namespace std;
+using namespace GeographicLib;
+
+int main() {
+  try {
+    Ellipsoid wgs84(Constants::WGS84_a(), Constants::WGS84_f());
+    // Alternatively: const Ellipsoid& wgs84 = Ellipsoid::WGS84;
+    cout << "The latitude half way between the equator and the pole is "
+         << wgs84.InverseRectifyingLatitude(45) << "\n";
+    cout << "Half the area of the ellipsoid lies between latitudes +/- "
+         << wgs84.InverseAuthalicLatitude(30) << "\n";
+    cout << "The northernmost edge of a square Mercator map is at latitude "
+         << wgs84.InverseIsometricLatitude(180) << "\n";
+  }
+  catch (const exception& e) {
+    cerr << "Caught exception: " << e.what() << "\n";
+    return 1;
+  }
+  return 0;
+}
diff --git a/examples/example-EllipticFunction.cpp b/examples/example-EllipticFunction.cpp
index c6e506f..c2ae4a3 100644
--- a/examples/example-EllipticFunction.cpp
+++ b/examples/example-EllipticFunction.cpp
@@ -1,7 +1,7 @@
 // Example of using the GeographicLib::EllipticFunction class
-// $Id: 304e818254ce2fd366c2efa4f7ef93643e8c208c $
 
 #include <iostream>
+#include <iomanip>
 #include <cmath>
 #include <GeographicLib/Math.hpp>
 #include <GeographicLib/EllipticFunction.hpp>
@@ -18,8 +18,22 @@ int main() {
     // See Abramowitz and Stegun, table 17.6 with
     // alpha = asin(sqrt(m)) = 18.43 deg and phi = 20 deg
     cout << ell.E(phi) << " "
-         << ell.E(sin(phi), cos(phi), sqrt(1 - ell.m() * Math::sq(sin(phi))))
+         << ell.E(sin(phi), cos(phi), sqrt(1 - ell.k2() * Math::sq(sin(phi))))
          << "\n";
+    // See Carlson 1995, Sec 3.
+    cout << fixed << setprecision(16)
+         << "RF(1,2,0)      = " << EllipticFunction::RF(1,2)      << "\n"
+         << "RF(2,3,4)      = " << EllipticFunction::RF(2,3,4)    << "\n"
+         << "RC(0,1/4)      = " << EllipticFunction::RC(0,0.25)   << "\n"
+         << "RC(9/4,2)      = " << EllipticFunction::RC(2.25,2)   << "\n"
+         << "RC(1/4,-2)     = " << EllipticFunction::RC(0.25,-2)  << "\n"
+         << "RJ(0,1,2,3)    = " << EllipticFunction::RJ(0,1,2,3)  << "\n"
+         << "RJ(2,3,4,5)    = " << EllipticFunction::RJ(2,3,4,5)  << "\n"
+         << "RD(0,2,1)      = " << EllipticFunction::RD(0,2,1)    << "\n"
+         << "RD(2,3,4)      = " << EllipticFunction::RD(2,3,4)    << "\n"
+         << "RG(0,16,16)    = " << EllipticFunction::RG(16,16)    << "\n"
+         << "RG(2,3,4)      = " << EllipticFunction::RG(2,3,4)    << "\n"
+         << "RG(0,0.0796,4) = " << EllipticFunction::RG(0.0796,4) << "\n";
   }
   catch (const GeographicErr& e) {
     cout << "Caught exception: " << e.what() << "\n";
diff --git a/examples/example-GeoCoords.cpp b/examples/example-GeoCoords.cpp
index 8285d3b..1756f4f 100644
--- a/examples/example-GeoCoords.cpp
+++ b/examples/example-GeoCoords.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::GeoCoords class
-// $Id: 3f9c326bb5293db26a153e6f5eab165146899a9e $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-Geocentric.cpp b/examples/example-Geocentric.cpp
index e2be1c0..4f069f2 100644
--- a/examples/example-Geocentric.cpp
+++ b/examples/example-Geocentric.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::Geocentric class
-// $Id: fea8cd4d5464b6029d6a135a25230892f52f318f $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-Geodesic-small.cpp b/examples/example-Geodesic-small.cpp
index 21505fa..07cf135 100644
--- a/examples/example-Geodesic-small.cpp
+++ b/examples/example-Geodesic-small.cpp
@@ -1,5 +1,4 @@
 // Small example of using the GeographicLib::Geodesic class
-// $Id: 23959b26e8023e42f76afabf7a2d7b593666a71a $
 
 #include <iostream>
 #include <GeographicLib/Geodesic.hpp>
diff --git a/examples/example-Geodesic.cpp b/examples/example-Geodesic.cpp
index 8c6b382..d6258d9 100644
--- a/examples/example-Geodesic.cpp
+++ b/examples/example-Geodesic.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::Geodesic class
-// $Id: c825b2bc016f758b52995e446ac77aa42e0f3fda $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-GeodesicExact.cpp b/examples/example-GeodesicExact.cpp
new file mode 100644
index 0000000..0745b22
--- /dev/null
+++ b/examples/example-GeodesicExact.cpp
@@ -0,0 +1,37 @@
+// Example of using the GeographicLib::GeodesicExact class
+
+#include <iostream>
+#include <exception>
+#include <GeographicLib/GeodesicExact.hpp>
+#include <GeographicLib/Constants.hpp>
+
+using namespace std;
+using namespace GeographicLib;
+
+int main() {
+  try {
+    GeodesicExact geod(Constants::WGS84_a(), Constants::WGS84_f());
+    // Alternatively: const GeodesicExact& geod = GeodesicExact::WGS84;
+    {
+      // Sample direct calculation, travelling about NE from JFK
+      double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
+      double lat2, lon2;
+      geod.Direct(lat1, lon1, azi1, s12, lat2, lon2);
+      cout << lat2 << " " << lon2 << "\n";
+    }
+    {
+      // Sample inverse calculation, JFK to LHR
+      double
+        lat1 = 40.6, lon1 = -73.8, // JFK Airport
+        lat2 = 51.6, lon2 = -0.5;  // LHR Airport
+      double s12;
+      geod.Inverse(lat1, lon1, lat2, lon2, s12);
+      cout << s12 << "\n";
+    }
+  }
+  catch (const exception& e) {
+    cerr << "Caught exception: " << e.what() << "\n";
+    return 1;
+  }
+  return 0;
+}
diff --git a/examples/example-GeodesicLine.cpp b/examples/example-GeodesicLine.cpp
index 8c80f28..ffe4c37 100644
--- a/examples/example-GeodesicLine.cpp
+++ b/examples/example-GeodesicLine.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::GeodesicLine class
-// $Id: df5c5ffe6534d46e343544430de8c13fc8119bfb $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-GeodesicLineExact.cpp b/examples/example-GeodesicLineExact.cpp
new file mode 100644
index 0000000..2047366
--- /dev/null
+++ b/examples/example-GeodesicLineExact.cpp
@@ -0,0 +1,54 @@
+// Example of using the GeographicLib::GeodesicLineExact class
+
+#include <iostream>
+#include <exception>
+#include <cmath>
+#include <iomanip>
+#include <GeographicLib/GeodesicExact.hpp>
+#include <GeographicLib/GeodesicLineExact.hpp>
+#include <GeographicLib/Constants.hpp>
+
+using namespace std;
+using namespace GeographicLib;
+
+int main() {
+  try {
+    // Print waypoints between JFK and SIN
+    GeodesicExact geod(Constants::WGS84_a(), Constants::WGS84_f());
+    // Alternatively: const GeodesicExact& geod = GeodesicExact::WGS84;
+    double
+      lat1 = 40.640, lon1 = -73.779, // JFK
+      lat2 =  1.359, lon2 = 103.989; // SIN
+    double s12, azi1, azi2,
+      a12 = geod.Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2);
+    const GeographicLib::GeodesicLineExact line(geod, lat1, lon1, azi1);
+    // Alternatively
+    // const GeographicLib::GeodesicLineExact line = geod.Line(lat1, lon1, azi1);
+    double ds = 500e3;          // Nominal distance between points = 500 km
+    int num = int(ceil(s12 / ds)); // The number of intervals
+    cout << fixed << setprecision(3);
+    {
+      // Use intervals of equal length
+      double ds = s12 / num;
+      for (int i = 0; i <= num; ++i) {
+        double lat, lon;
+       line.Position(i * ds, lat, lon);
+       cout << i << " " << lat << " " << lon << "\n";
+      }
+    }
+    {
+      // Slightly faster, use intervals of equal arc length
+      double da = a12 / num;
+      for (int i = 0; i <= num; ++i) {
+        double lat, lon;
+       line.ArcPosition(i * da, lat, lon);
+       cout << i << " " << lat << " " << lon << "\n";
+      }
+    }
+  }
+  catch (const exception& e) {
+    cerr << "Caught exception: " << e.what() << "\n";
+    return 1;
+  }
+  return 0;
+}
diff --git a/examples/example-GeographicErr.cpp b/examples/example-GeographicErr.cpp
index 2fb8f79..7bf4acf 100644
--- a/examples/example-GeographicErr.cpp
+++ b/examples/example-GeographicErr.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::GeographicErr class
-// $Id: aaa4cf5e9b5070f9a6307a59daabf578880b85d3 $
 
 #include <iostream>
 #include <GeographicLib/Constants.hpp>
diff --git a/examples/example-Geohash.cpp b/examples/example-Geohash.cpp
new file mode 100644
index 0000000..3f3fad0
--- /dev/null
+++ b/examples/example-Geohash.cpp
@@ -0,0 +1,42 @@
+// Example of using the GeographicLib::Geohash class
+
+#include <iostream>
+#include <iomanip>
+#include <exception>
+#include <string>
+#include <GeographicLib/Geohash.hpp>
+
+using namespace std;
+using namespace GeographicLib;
+
+int main() {
+  try {
+    {
+      // Sample forward calculation
+      double lat = 57.64911, lon = 10.40744; // Jutland (the wikipedia example)
+      string geohash;
+      int maxlen = Geohash::GeohashLength(1.0e-5);
+      for (int len = 0; len <= maxlen; ++len) {
+        Geohash::Forward(lat, lon, len, geohash);
+        cout << len << " " << geohash << "\n";
+      }
+    }
+    {
+      // Sample reverse calculation
+      string geohash = "u4pruydqqvj";
+      double lat, lon;
+      cout << fixed;
+      for (unsigned i = 0; i <= geohash.length(); ++i) {
+        int len;
+        Geohash::Reverse(geohash.substr(0, i), lat, lon, len);
+        cout << setprecision(max(0, Geohash::DecimalPrecision(len)))
+             << len << " " << lat << " " << lon << "\n";
+      }
+    }
+  }
+  catch (const exception& e) {
+    cerr << "Caught exception: " << e.what() << "\n";
+    return 1;
+  }
+  return 0;
+}
diff --git a/examples/example-Geoid.cpp b/examples/example-Geoid.cpp
index d943a23..df6e134 100644
--- a/examples/example-Geoid.cpp
+++ b/examples/example-Geoid.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::Geoid class
-// $Id: 2ba4534ebb4c4853dc111932fe44b4bf85ac8149 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-Gnomonic.cpp b/examples/example-Gnomonic.cpp
index 7686f8d..a78a860 100644
--- a/examples/example-Gnomonic.cpp
+++ b/examples/example-Gnomonic.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::Gnomonic class
-// $Id: 59ed16349fd55bdde98654feeb1225a046d85696 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-GravityCircle.cpp b/examples/example-GravityCircle.cpp
index 8a10780..55dd5ee 100644
--- a/examples/example-GravityCircle.cpp
+++ b/examples/example-GravityCircle.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::GravityCircle class
-// $Id: dc7c895cc248cee01a434ea3df1b31771ffb6ad2 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-GravityModel.cpp b/examples/example-GravityModel.cpp
index 360e27d..f0e634c 100644
--- a/examples/example-GravityModel.cpp
+++ b/examples/example-GravityModel.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::GravityModel class
-// $Id: fde4f431ed9c43e9e0ec797e302f32a373cdd219 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-LambertConformalConic.cpp b/examples/example-LambertConformalConic.cpp
index 5758405..b57308e 100644
--- a/examples/example-LambertConformalConic.cpp
+++ b/examples/example-LambertConformalConic.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::LambertConformalConic class
-// $Id: 5cb2532e2709bcafee50974307836930069b0cff $
 
 #include <iostream>
 #include <exception>
@@ -11,6 +10,7 @@ using namespace GeographicLib;
 int main() {
   try {
     // Define the Pennsylvania South state coordinate system EPSG:3364
+    // http://www.spatialreference.org/ref/epsg/3364/
     const double
       a = Constants::WGS84_a<double>(),
       f = 1/298.257222101,                      // GRS80
diff --git a/examples/example-LocalCartesian.cpp b/examples/example-LocalCartesian.cpp
index 7c7ca66..ce09072 100644
--- a/examples/example-LocalCartesian.cpp
+++ b/examples/example-LocalCartesian.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::LocalCartesian class
-// $Id: 0fd182a359b17d3b76ccd55f405b272a327a42e8 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-MGRS.cpp b/examples/example-MGRS.cpp
index 56120ab..1fe2f65 100644
--- a/examples/example-MGRS.cpp
+++ b/examples/example-MGRS.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::MGRS class
-// $Id: 011e73554cd2851ef396442f1ec8392207b101c3 $
 
 #include <iostream>
 #include <exception>
@@ -21,7 +20,7 @@ int main() {
       double x, y;
       UTMUPS::Forward(lat, lon, zone, northp, x, y);
       string mgrs;
-      MGRS::Forward(zone, northp, x, y, 5, mgrs);
+      MGRS::Forward(zone, northp, x, y, lat, 5, mgrs);
       cout << mgrs << "\n";
     }
     {
diff --git a/examples/example-MagneticCircle.cpp b/examples/example-MagneticCircle.cpp
index 4880c40..8dfcbbc 100644
--- a/examples/example-MagneticCircle.cpp
+++ b/examples/example-MagneticCircle.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::MagneticCircle class
-// $Id: d499f22160be523e01c0a6e3c740dbe828aa918d $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-MagneticModel.cpp b/examples/example-MagneticModel.cpp
index 095c7aa..8453ad5 100644
--- a/examples/example-MagneticModel.cpp
+++ b/examples/example-MagneticModel.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::MagneticModel class
-// $Id: ab27b155755e540d29e5e6bf550df8cdb00c74ba $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-Math.cpp b/examples/example-Math.cpp
index 1538ecb..31b1dbf 100644
--- a/examples/example-Math.cpp
+++ b/examples/example-Math.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::Math class
-// $Id: 04519bb67e82229a86ee23002ddc27a6b5bb2939 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-NormalGravity.cpp b/examples/example-NormalGravity.cpp
index e8867ca..461c165 100644
--- a/examples/example-NormalGravity.cpp
+++ b/examples/example-NormalGravity.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::NormalGravity class
-// $Id: 8d0337072d40334e8147a50b1e6035d75d38c53c $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-OSGB.cpp b/examples/example-OSGB.cpp
index 34bc3ed..801dcea 100644
--- a/examples/example-OSGB.cpp
+++ b/examples/example-OSGB.cpp
@@ -1,10 +1,11 @@
 // Example of using the GeographicLib::OSGB class
-// $Id: 80feea12c2ebb7e594d8e17bf841c1a141cf3c36 $
 
 #include <iostream>
+#include <iomanip>
 #include <exception>
 #include <string>
 #include <GeographicLib/OSGB.hpp>
+#include <GeographicLib/DMS.hpp>
 
 using namespace std;
 using namespace GeographicLib;
@@ -12,23 +13,28 @@ using namespace GeographicLib;
 int main() {
   try {
     {
-      // Sample forward calculation
-      double lat = 55.5, lon = -1.64; // Embleton, Northumberland
+      // Sample forward calculation from
+      // A guide to coordinate systems in Great Britain
+      double
+        lat = DMS::Decode(52,39,27.2531),
+        lon = DMS::Decode( 1,43, 4.5177);
       double x, y;
       OSGB::Forward(lat, lon, x, y);
       string gridref;
       OSGB::GridReference(x, y, 2, gridref);
-      cout << x << " " << y << " " << gridref << "\n";
+      cout << fixed << setprecision(3)
+           << x << " " << y << " " << gridref << "\n";
     }
     {
       // Sample reverse calculation
-      string gridref = "NU2222";
+      string gridref = "TG5113";
       double x, y;
       int prec;
       OSGB::GridReference(gridref, x, y, prec);
       double lat, lon;
       OSGB::Reverse(x, y, lat, lon);
-      cout << prec << " " << lat << " " << lon << "\n";
+      cout << fixed << setprecision(8)
+           << prec << " " << lat << " " << lon << "\n";
     }
   }
   catch (const exception& e) {
diff --git a/examples/example-PolarStereographic.cpp b/examples/example-PolarStereographic.cpp
index 2c587f3..0bf5c63 100644
--- a/examples/example-PolarStereographic.cpp
+++ b/examples/example-PolarStereographic.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::PolarStereographic class
-// $Id: 76bd97693e4f711118164cc0cde1db7f5ca70e12 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-PolygonArea.cpp b/examples/example-PolygonArea.cpp
index 9030052..f2610ce 100644
--- a/examples/example-PolygonArea.cpp
+++ b/examples/example-PolygonArea.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::PolygonArea class
-// $Id: 103c4d2f060347fd499adc2e8487102c8b93d58f $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-SphericalEngine.cpp b/examples/example-SphericalEngine.cpp
index fa1458e..29fd7a3 100644
--- a/examples/example-SphericalEngine.cpp
+++ b/examples/example-SphericalEngine.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::SphericalEngine class
-// $Id: 08fe16ba3619311b15fc58956511a88c37886f91 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-SphericalHarmonic.cpp b/examples/example-SphericalHarmonic.cpp
index 01dd842..213b2a7 100644
--- a/examples/example-SphericalHarmonic.cpp
+++ b/examples/example-SphericalHarmonic.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::SphericalHarmonic class
-// $Id: b7e4a45d66787db49d40aa7bc991ab686cc32d44 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-SphericalHarmonic1.cpp b/examples/example-SphericalHarmonic1.cpp
index 8f92fad..fa3d9b8 100644
--- a/examples/example-SphericalHarmonic1.cpp
+++ b/examples/example-SphericalHarmonic1.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::SphericalHarmonic1 class
-// $Id: 9d964d2e64c201179a88e51697b508414ff8c800 $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-SphericalHarmonic2.cpp b/examples/example-SphericalHarmonic2.cpp
index c4cd64a..cce1f49 100644
--- a/examples/example-SphericalHarmonic2.cpp
+++ b/examples/example-SphericalHarmonic2.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::SphericalHarmonic2 class
-// $Id: 123fa26549f23444cf8b29d2381f2a6e5e672b5f $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-TransverseMercator.cpp b/examples/example-TransverseMercator.cpp
index 53b36cc..678eeab 100644
--- a/examples/example-TransverseMercator.cpp
+++ b/examples/example-TransverseMercator.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::TransverseMercator class
-// $Id: c01651412c934220e2293c344258773ac3d7131c $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-TransverseMercatorExact.cpp b/examples/example-TransverseMercatorExact.cpp
index 72f3e1c..0c951bc 100644
--- a/examples/example-TransverseMercatorExact.cpp
+++ b/examples/example-TransverseMercatorExact.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::TransverseMercatorExact class
-// $Id: 047cbdcff7135fed1fecf5f50ff2195eda993fcb $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-UTMUPS.cpp b/examples/example-UTMUPS.cpp
index 83a4790..a2671d0 100644
--- a/examples/example-UTMUPS.cpp
+++ b/examples/example-UTMUPS.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::UTMUPS class
-// $Id: 83d5ba7eb8c9ce1963cb9499a6ee404329e74f3a $
 
 #include <iostream>
 #include <exception>
diff --git a/examples/example-Utility.cpp b/examples/example-Utility.cpp
index 0f6deed..463f85e 100644
--- a/examples/example-Utility.cpp
+++ b/examples/example-Utility.cpp
@@ -1,5 +1,4 @@
 // Example of using the GeographicLib::Utility class
-// $Id: 34856fc274a1db91814bb96768a6c8feee03dacc $
 
 #include <iostream>
 #include <exception>
diff --git a/include/GeographicLib/Accumulator.hpp b/include/GeographicLib/Accumulator.hpp
index 76cb657..798b5b0 100644
--- a/include/GeographicLib/Accumulator.hpp
+++ b/include/GeographicLib/Accumulator.hpp
@@ -2,32 +2,29 @@
  * \file Accumulator.hpp
  * \brief Header for GeographicLib::Accumulator class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_ACCUMULATOR_HPP)
-#define GEOGRAPHICLIB_ACCUMULATOR_HPP \
-  "$Id: 03b7f4fdb9974c822f98d5f5aab1094b5a9ac8f2 $"
+#define GEOGRAPHICLIB_ACCUMULATOR_HPP 1
 
 #include <GeographicLib/Constants.hpp>
 
 namespace GeographicLib {
 
   /**
-   * \brief An accumulator for sums.
+   * \brief An accumulator for sums
    *
    * This allow many numbers of floating point type \e T to be added together
    * with twice the normal precision.  Thus if \e T is double, the effective
-   * precision of the sum is 106 bits or about 32 decimal places.  The core
-   * idea is the error free transformation of a sum, D. E. Knuth, TAOCP, Vol 2,
-   * 4.2.2, Theorem B.
+   * precision of the sum is 106 bits or about 32 decimal places.
    *
    * The implementation follows J. R. Shewchuk,
    * <a href="http://dx.doi.org/10.1007/PL00009321"> Adaptive Precision
    * Floating-Point Arithmetic and Fast Robust Geometric Predicates</a>,
-   * Discrete & Computational Geometry 18(3) 305-363 (1997).
+   * Discrete & Computational Geometry 18(3) 305--363 (1997).
    *
    * Approximate timings (summing a vector<double>)
    * - double:               2ns
@@ -40,25 +37,13 @@ namespace GeographicLib {
    * \include example-Accumulator.cpp
    **********************************************************************/
   template<typename T = Math::real>
-  class GEOGRAPHIC_EXPORT Accumulator {
+  class GEOGRAPHICLIB_EXPORT Accumulator {
   private:
-    // _s + _t accumulates for the sum.
+    // _s + _t accumulators for the sum.
     T _s, _t;
-    // Error free transformation of a sum.  Note that t can be the same as one
-    // of the first two arguments.
-    static inline T sum(T u, T v, T& t) {
-      volatile T s = u + v;
-      volatile T up = s - v;
-      volatile T vpp = s - up;
-      up -= u;
-      vpp -= v;
-      t = -(up + vpp);
-      // u + v =       s      + t
-      //       = round(u + v) + t
-      return s;
-    }
-    // Same as sum, but requires abs(u) >= abs(v).  This isn't currently used.
-    static inline T fastsum(T u, T v, T& t) {
+    // Same as Math::sum, but requires abs(u) >= abs(v).  This isn't currently
+    // used.
+    static inline T fastsum(T u, T v, T& t) throw() {
       volatile T s = u + v;
       volatile T vp = s - u;
       t = v - vp;
@@ -66,9 +51,9 @@ namespace GeographicLib {
     }
     void Add(T y) throw() {
       // Here's Shewchuk's solution...
-      T u;                      // hold exact sum as [s, t, u]
-      y  = sum(y, _t,  u);      // Accumulate starting at least significant end
-      _s = sum(y, _s, _t);
+      T u;                       // hold exact sum as [s, t, u]
+      y  = Math::sum(y, _t,  u); // Accumulate starting at least significant end
+      _s = Math::sum(y, _s, _t);
       // Start is _s, _t decreasing and non-adjacent.  Sum is now (s + t + u)
       // exactly with s, t, u non-adjacent and in decreasing order (except for
       // possible zeros).  The following code tries to normalize the result.
@@ -150,8 +135,8 @@ namespace GeographicLib {
     Accumulator& operator-=(T y) throw() { Add(-y); return *this; }
     /**
      * Multiply accumulator by an integer.  To avoid loss of accuracy, use only
-     * integers such that \e n * \e T is exactly representable as a \e T (i.e.,
-     * +/- powers of two).  Use \e n = -1 to negate \e sum.
+     * integers such that \e n × \e T is exactly representable as a \e T
+     * (i.e., ± powers of two).  Use \e n = −1 to negate \e sum.
      *
      * @param[in] n set \e sum *= \e n.
      **********************************************************************/
diff --git a/include/GeographicLib/AlbersEqualArea.hpp b/include/GeographicLib/AlbersEqualArea.hpp
index 6f44b19..27cc472 100644
--- a/include/GeographicLib/AlbersEqualArea.hpp
+++ b/include/GeographicLib/AlbersEqualArea.hpp
@@ -2,28 +2,26 @@
  * \file AlbersEqualArea.hpp
  * \brief Header for GeographicLib::AlbersEqualArea class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_ALBERSEQUALAREA_HPP)
-#define GEOGRAPHICLIB_ALBERSEQUALAREA_HPP \
-  "$Id: d17f37d1bec84543dc3753e882d8e95f1c1d5a1b $"
+#define GEOGRAPHICLIB_ALBERSEQUALAREA_HPP 1
 
-#include <algorithm>
 #include <GeographicLib/Constants.hpp>
 
 namespace GeographicLib {
 
   /**
-   * \brief Albers Equal Area Conic Projection
+   * \brief Albers equal area conic projection
    *
    * Implementation taken from the report,
    * - J. P. Snyder,
    *   <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"> Map Projections: A
    *   Working Manual</a>, USGS Professional Paper 1395 (1987),
-   *   pp. 101–102.
+   *   pp. 101--102.
    *
    * This is a implementation of the equations in Snyder except that divided
    * differences will be [have been] used to transform the expressions into
@@ -44,10 +42,10 @@ namespace GeographicLib {
    * longitude) is specified as the \e lon0 argument of the
    * AlbersEqualArea::Forward and AlbersEqualArea::Reverse functions.
    * AlbersEqualArea::Forward and AlbersEqualArea::Reverse also return the
-   * meridian convergence, \e gamma, and azimuthal scale, \e k.  A small square
+   * meridian convergence, γ, and azimuthal scale, \e k.  A small square
    * aligned with the cardinal directions is projected to a rectangle with
    * dimensions \e k (in the E-W direction) and 1/\e k (in the N-S direction).
-   * The E-W sides of the rectangle are oriented \e gamma degrees
+   * The E-W sides of the rectangle are oriented γ degrees
    * counter-clockwise from the \e x axis.  There is no provision in this class
    * for specifying a false easting or false northing or a different latitude
    * of origin.
@@ -59,7 +57,7 @@ namespace GeographicLib {
    * providing access to the functionality of LambertConformalConic and
    * AlbersEqualArea.
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT AlbersEqualArea {
+  class GEOGRAPHICLIB_EXPORT AlbersEqualArea {
   private:
     typedef Math::real real;
     real _a, _f, _fm, _e2, _e, _e2m, _qZ, _qx;
@@ -79,23 +77,30 @@ namespace GeographicLib {
     // x                              if f = 0
     inline real atanhee(real x) const throw() {
       return _f > 0 ? Math::atanh(_e * x)/_e :
-        (_f < 0 ? std::atan(_e * x)/_e : x);
+        // We only invoke atanhee in txif for positive latitude.  Then x is
+        // only negative for very prolate ellipsoids (_b/_a >= sqrt(2)) and we
+        // still need to return a positive result in this case; hence the need
+        // for the call to atan2.
+        (_f < 0 ? (std::atan2(_e * std::abs(x), x < 0 ? -1 : 1)/_e) : x);
     }
     // return atanh(sqrt(x))/sqrt(x) - 1, accurate for small x
     static real atanhxm1(real x) throw();
 
     // Divided differences
     // Definition: Df(x,y) = (f(x)-f(y))/(x-y)
-    // See: W. M. Kahan and R. J. Fateman,
-    // Symbolic computation of divided differences,
-    // SIGSAM Bull. 33(3), 7-28 (1999)
-    // http://doi.acm.org/10.1145/334714.334716
-    // http://www.cs.berkeley.edu/~fateman/papers/divdiff.pdf
+    // See:
+    //   W. M. Kahan and R. J. Fateman,
+    //   Symbolic computation of divided differences,
+    //   SIGSAM Bull. 33(3), 7-28 (1999)
+    //   http://dx.doi.org/10.1145/334714.334716
+    //   http://www.cs.berkeley.edu/~fateman/papers/divdiff.pdf
     //
     // General rules
     // h(x) = f(g(x)): Dh(x,y) = Df(g(x),g(y))*Dg(x,y)
     // h(x) = f(x)*g(x):
-    //        Dh(x,y) = Df(x,y)*(g(x)+g(y))/2 + Dg(x,y)*(f(x)+f(y))/2
+    //        Dh(x,y) = Df(x,y)*g(x) + Dg(x,y)*f(y)
+    //                = Df(x,y)*g(y) + Dg(x,y)*f(x)
+    //                = Df(x,y)*(g(x)+g(y))/2 + Dg(x,y)*(f(x)+f(y))/2
     //
     // sn(x) = x/sqrt(1+x^2): Dsn(x,y) = (x+y)/((sn(x)+sn(y))*(1+x^2)*(1+y^2))
     static inline real Dsn(real x, real y, real sx, real sy) throw() {
@@ -114,6 +119,8 @@ namespace GeographicLib {
     void Init(real sphi1, real cphi1, real sphi2, real cphi2, real k1) throw();
     real txif(real tphi) const throw();
     real tphif(real txi) const throw();
+
+    friend class Ellipsoid;           // For access to txif, tphif, etc.
   public:
 
     /**
@@ -125,9 +132,10 @@ namespace GeographicLib {
      *   to 1/\e f.
      * @param[in] stdlat standard parallel (degrees), the circle of tangency.
      * @param[in] k0 azimuthal scale on the standard parallel.
-     *
-     * An exception is thrown if \e a or \e k0 is not positive or if \e stdlat
-     * is not in the range [-90, 90].
+     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+     *   not positive.
+     * @exception GeographicErr if \e stdlat is not in [−90°,
+     *   90°].
      **********************************************************************/
     AlbersEqualArea(real a, real f, real stdlat, real k0);
 
@@ -141,10 +149,11 @@ namespace GeographicLib {
      * @param[in] stdlat1 first standard parallel (degrees).
      * @param[in] stdlat2 second standard parallel (degrees).
      * @param[in] k1 azimuthal scale on the standard parallels.
-     *
-     * An exception is thrown if \e a or \e k0 is not positive or if \e stdlat1
-     * or \e stdlat2 is not in the range [-90, 90].  In addition, an exception
-     * is thrown if \e stdlat1 and \e stdlat2 are opposite poles.
+     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+     *   not positive.
+     * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
+     *   [−90°, 90°], or if \e stdlat1 and \e stdlat2 are
+     *   opposite poles.
      **********************************************************************/
     AlbersEqualArea(real a, real f, real stdlat1, real stdlat2, real k1);
 
@@ -160,12 +169,17 @@ namespace GeographicLib {
      * @param[in] sinlat2 sine of second standard parallel.
      * @param[in] coslat2 cosine of second standard parallel.
      * @param[in] k1 azimuthal scale on the standard parallels.
+     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+     *   not positive.
+     * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
+     *   [−90°, 90°], or if \e stdlat1 and \e stdlat2 are
+     *   opposite poles.
      *
      * This allows parallels close to the poles to be specified accurately.
      * This routine computes the latitude of origin and the azimuthal scale at
-     * this latitude.  If \e dlat = abs(\e lat2 - \e lat1) <= 160<sup>o</sup>,
-     * then the error in the latitude of origin is less than
-     * 4.5e-14<sup>o</sup>.
+     * this latitude.  If \e dlat = abs(\e lat2 − \e lat1) ≤ 160°,
+     * then the error in the latitude of origin is less than 4.5 ×
+     * 10<sup>−14</sup>d;.
      **********************************************************************/
     AlbersEqualArea(real a, real f,
                     real sinlat1, real coslat1,
@@ -177,10 +191,11 @@ namespace GeographicLib {
      *
      * @param[in] lat (degrees).
      * @param[in] k azimuthal scale at latitude \e lat (default 1).
+     * @exception GeographicErr \e k is not positive.
+     * @exception GeographicErr if \e lat is not in (−90°,
+     *   90°).
      *
-     * This allows a "latitude of conformality" to be specified.  An exception
-     * is thrown if \e k is not positive or if \e lat is not in the range (-90,
-     * 90).
+     * This allows a "latitude of conformality" to be specified.
      **********************************************************************/
     void SetScale(real lat, real k = real(1));
 
@@ -198,9 +213,10 @@ namespace GeographicLib {
      *
      * The latitude origin is given by AlbersEqualArea::LatitudeOrigin().  No
      * false easting or northing is added and \e lat should be in the range
-     * [-90, 90]; \e lon and \e lon0 should be in the range [-180, 360].  The
-     * values of \e x and \e y returned for points which project to infinity
-     * (i.e., one or both of the poles) will be large but finite.
+     * [−90°, 90°]; \e lon and \e lon0 should be in the
+     * range [−540°, 540°).  The values of \e x and \e y
+     * returned for points which project to infinity (i.e., one or both of the
+     * poles) will be large but finite.
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
                  real& x, real& y, real& gamma, real& k) const throw();
@@ -219,9 +235,11 @@ namespace GeographicLib {
      *
      * The latitude origin is given by AlbersEqualArea::LatitudeOrigin().  No
      * false easting or northing is added.  \e lon0 should be in the range
-     * [-180, 360].  The value of \e lon returned is in the range [-180, 180).
-     * The value of \e lat returned is in the range [-90,90].  If the input
-     * point is outside the legal projected space the nearest pole is returned.
+     * [−540°, 540°).  The value of \e lon returned is in
+     * the range [−180°, 180°).  The value of \e lat
+     * returned is in the range [−90°, 90°].  If the
+     * input point is outside the legal projected space the nearest pole is
+     * returned.
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
                  real& lat, real& lon, real& gamma, real& k) const throw();
@@ -294,14 +312,14 @@ namespace GeographicLib {
 
     /**
      * A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, \e
-     * stdlat = 90<sup>o</sup>, and \e k0 = 1.  This degenerates to the
+     * stdlat = 90°, and \e k0 = 1.  This degenerates to the
      * Lambert azimuthal equal area projection.
      **********************************************************************/
     static const AlbersEqualArea AzimuthalEqualAreaNorth;
 
     /**
      * A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, \e
-     * stdlat = -90<sup>o</sup>, and \e k0 = 1.  This degenerates to the
+     * stdlat = −90°, and \e k0 = 1.  This degenerates to the
      * Lambert azimuthal equal area projection.
      **********************************************************************/
     static const AlbersEqualArea AzimuthalEqualAreaSouth;
diff --git a/include/GeographicLib/AzimuthalEquidistant.hpp b/include/GeographicLib/AzimuthalEquidistant.hpp
index d966fde..48d8842 100644
--- a/include/GeographicLib/AzimuthalEquidistant.hpp
+++ b/include/GeographicLib/AzimuthalEquidistant.hpp
@@ -8,8 +8,7 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP)
-#define GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP \
-  "$Id: 95a1d6e7a8c4613be25ec32550231601202da1e5 $"
+#define GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP 1
 
 #include <GeographicLib/Geodesic.hpp>
 #include <GeographicLib/Constants.hpp>
@@ -17,7 +16,7 @@
 namespace GeographicLib {
 
   /**
-   * \brief Azimuthal Equidistant Projection.
+   * \brief Azimuthal equidistant projection
    *
    * Azimuthal equidistant projection centered at an arbitrary position on the
    * ellipsoid.  For a point in projected space (\e x, \e y), the geodesic
@@ -40,7 +39,7 @@ namespace GeographicLib {
    * and CassiniSoldner.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT AzimuthalEquidistant {
+  class GEOGRAPHICLIB_EXPORT AzimuthalEquidistant {
   private:
     typedef Math::real real;
     Geodesic _earth;
@@ -68,12 +67,13 @@ namespace GeographicLib {
      * @param[out] azi azimuth of geodesic at point (degrees).
      * @param[out] rk reciprocal of azimuthal scale at point.
      *
-     * \e lat0 and \e lat should be in the range [-90, 90] and \e lon0 and \e
-     * lon should be in the range [-180, 360].  The scale of the projection is
-     * 1 in the "radial" direction, \e azi clockwise from true north, and is
-     * 1/\e rk in the direction perpendicular to this.  A call to Forward
-     * followed by a call to Reverse will return the original (\e lat, \e lon)
-     * (to within roundoff).
+     * \e lat0 and \e lat should be in the range [−90°,
+     * 90°] and \e lon0 and \e lon should be in the range
+     * [−540°, 540°).  The scale of the projection is 1
+     * in the "radial" direction, \e azi clockwise from true north, and is 1/\e
+     * rk in the direction perpendicular to this.  A call to Forward followed
+     * by a call to Reverse will return the original (\e lat, \e lon) (to
+     * within roundoff).
      **********************************************************************/
     void Forward(real lat0, real lon0, real lat, real lon,
                  real& x, real& y, real& azi, real& rk) const throw();
@@ -90,13 +90,15 @@ namespace GeographicLib {
      * @param[out] azi azimuth of geodesic at point (degrees).
      * @param[out] rk reciprocal of azimuthal scale at point.
      *
-     * \e lat0 should be in the range [-90, 90] and \e lon0 should be in the
-     * range [-180, 360].  \e lat will be in the range [-90, 90] and \e lon
-     * will be in the range [-180, 180).  The scale of the projection is 1 in
-     * the "radial" direction, \e azi clockwise from true north, and is 1/\e rk
-     * in the direction perpendicular to this.  A call to Reverse followed by a
-     * call to Forward will return the original (\e x, \e y) (to roundoff) only
-     * if the geodesic to (\e x, \e y) is a shortest path.
+     * \e lat0 should be in the range [−90°, 90°] and \e
+     * lon0 should be in the range [−540°, 540°).  \e lat
+     * will be in the range [−90°, 90°] and \e lon will
+     * be in the range [−180°, 180°).  The scale of the
+     * projection is 1 in the "radial" direction, \e azi clockwise from true
+     * north, and is 1/\e rk in the direction perpendicular to this.  A call to
+     * Reverse followed by a call to Forward will return the original (\e x, \e
+     * y) (to roundoff) only if the geodesic to (\e x, \e y) is a shortest
+     * path.
      **********************************************************************/
     void Reverse(real lat0, real lon0, real x, real y,
                  real& lat, real& lon, real& azi, real& rk) const throw();
diff --git a/include/GeographicLib/CMakeLists.txt b/include/GeographicLib/CMakeLists.txt
index c9be968..d4029a1 100644
--- a/include/GeographicLib/CMakeLists.txt
+++ b/include/GeographicLib/CMakeLists.txt
@@ -1,8 +1,6 @@
-# $Id: ad1a97beeda9134b93debee2ba855548e252c3a7 $
-
 # Install the header files including the generated Config.h (which is in
 # the build tree).
-file (GLOB HEADERS *.hpp)
+file (GLOB HEADERS [A-Za-z]*.hpp)
 install (FILES ${HEADERS} DESTINATION include/GeographicLib)
 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/Config.h
   DESTINATION include/GeographicLib)
diff --git a/include/GeographicLib/CassiniSoldner.hpp b/include/GeographicLib/CassiniSoldner.hpp
index 163ea9d..3915053 100644
--- a/include/GeographicLib/CassiniSoldner.hpp
+++ b/include/GeographicLib/CassiniSoldner.hpp
@@ -8,8 +8,7 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_CASSINISOLDNER_HPP)
-#define GEOGRAPHICLIB_CASSINISOLDNER_HPP \
-  "$Id: d794ea8a1e64fd9cbb8dcee34755b6dc4fee623a $"
+#define GEOGRAPHICLIB_CASSINISOLDNER_HPP 1
 
 #include <GeographicLib/Geodesic.hpp>
 #include <GeographicLib/GeodesicLine.hpp>
@@ -18,20 +17,20 @@
 namespace GeographicLib {
 
   /**
-   * \brief Cassini-Soldner Projection.
+   * \brief Cassini-Soldner projection
    *
    * Cassini-Soldner projection centered at an arbitrary position, \e lat0, \e
    * lon0, on the ellipsoid.  This projection is a transverse cylindrical
    * equidistant projection.  The projection from (\e lat, \e lon) to easting
    * and northing (\e x, \e y) is defined by geodesics as follows.  Go north
    * along a geodesic a distance \e y from the central point; then turn
-   * clockwise 90<sup>o</sup> and go a distance \e x along a geodesic.
+   * clockwise 90° and go a distance \e x along a geodesic.
    * (Although the initial heading is north, this changes to south if the pole
    * is crossed.)  This procedure uniquely defines the reverse projection.  The
    * forward projection is constructed as follows.  Find the point (\e lat1, \e
    * lon1) on the meridian closest to (\e lat, \e lon).  Here we consider the
    * full meridian so that \e lon1 may be either \e lon0 or \e lon0 +
-   * 180<sup>o</sup>.  \e x is the geodesic distance from (\e lat1, \e lon1) to
+   * 180°.  \e x is the geodesic distance from (\e lat1, \e lon1) to
    * (\e lat, \e lon), appropriately signed according to which side of the
    * central meridian (\e lat, \e lon) lies.  \e y is the shortest distance
    * along the meridian from (\e lat0, \e lon0) to (\e lat1, \e lon1), again,
@@ -67,7 +66,7 @@ namespace GeographicLib {
    * and CassiniSoldner.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT CassiniSoldner {
+  class GEOGRAPHICLIB_EXPORT CassiniSoldner {
   private:
     typedef Math::real real;
     Geodesic _earth;
@@ -78,17 +77,13 @@ namespace GeographicLib {
     static const unsigned maxit_ = 10;
 
     // The following private helper functions are copied from Geodesic.
-    static inline real AngNormalize(real x) throw() {
-      // Place angle in [-180, 180).  Assumes x is in [-540, 540).
-      return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x);
-    }
     static inline real AngRound(real x) throw() {
       // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
       // for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
       // is about 1000 times more resolution than we get with angles around 90
       // degrees.)  We use this to avoid having to deal with near singular
       // cases when x is non-zero but tiny (e.g., 1.0e-200).
-      const real z = real(0.0625); // 1/16
+      const real z = 1/real(16);
       volatile real y = std::abs(x);
       // The compiler mustn't "simplify" z - (z - y) to y
       y = y < z ? z - (z - y) : y;
@@ -121,8 +116,8 @@ namespace GeographicLib {
      * @param[in] earth the Geodesic object to use for geodesic calculations.
      *   By default this uses the WGS84 ellipsoid.
      *
-     * \e lat0 should be in the range [-90, 90] and \e lon0 should be in the
-     * range [-180, 360].
+     * \e lat0 should be in the range [−90°, 90°] and \e
+     * lon0 should be in the range [−540°, 540°).
      **********************************************************************/
     CassiniSoldner(real lat0, real lon0,
                    const Geodesic& earth = Geodesic::WGS84) throw()
@@ -136,8 +131,8 @@ namespace GeographicLib {
      * @param[in] lat0 latitude of center point of projection (degrees).
      * @param[in] lon0 longitude of center point of projection (degrees).
      *
-     * \e lat0 should be in the range [-90, 90] and \e lon0 should be in the
-     * range [-180, 360].
+     * \e lat0 should be in the range [−90°, 90°] and \e
+     * lon0 should be in the range [−540°, 540°).
      **********************************************************************/
     void Reset(real lat0, real lon0) throw();
 
@@ -151,10 +146,11 @@ namespace GeographicLib {
      * @param[out] azi azimuth of easting direction at point (degrees).
      * @param[out] rk reciprocal of azimuthal northing scale at point.
      *
-     * \e lat should be in the range [-90, 90] and \e lon should be in the
-     * range [-180, 360].  A call to Forward followed by a call to Reverse will
-     * return the original (\e lat, \e lon) (to within roundoff).  The routine
-     * does nothing if the origin has not been set.
+     * \e lat should be in the range [−90°, 90°] and \e
+     * lon should be in the range [−540°, 540°).  A call
+     * to Forward followed by a call to Reverse will return the original (\e
+     * lat, \e lon) (to within roundoff).  The routine does nothing if the
+     * origin has not been set.
      **********************************************************************/
     void Forward(real lat, real lon,
                  real& x, real& y, real& azi, real& rk) const throw();
diff --git a/include/GeographicLib/CircularEngine.hpp b/include/GeographicLib/CircularEngine.hpp
index 4e9eee4..3ce88b7 100644
--- a/include/GeographicLib/CircularEngine.hpp
+++ b/include/GeographicLib/CircularEngine.hpp
@@ -8,8 +8,7 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_CIRCULARENGINE_HPP)
-#define GEOGRAPHICLIB_CIRCULARENGINE_HPP \
-  "$Id: d0528f468369dbc1b7af11e02278ad7a361d398b $"
+#define GEOGRAPHICLIB_CIRCULARENGINE_HPP 1
 
 #include <vector>
 #include <GeographicLib/Constants.hpp>
@@ -17,14 +16,14 @@
 
 #if defined(_MSC_VER)
 // Squelch warnings about dll vs vector
-#pragma warning (push)
-#pragma warning (disable: 4251)
+#  pragma warning (push)
+#  pragma warning (disable: 4251)
 #endif
 
 namespace GeographicLib {
 
   /**
-   * \brief Spherical Harmonic sums for a circle.
+   * \brief Spherical harmonic sums for a circle
    *
    * The class is a companion to SphericalEngine.  If the results of a
    * spherical harmonic sum are needed for several points on a circle of
@@ -44,13 +43,13 @@ namespace GeographicLib {
    * CircularEngine stores the coefficients needed to allow the summation over
    * order to be performed in 2 or 6 vectors of length \e M + 1 (depending on
    * whether gradients are to be calculated).  For this reason the constructor
-   * may throw a bad_alloc exception.
+   * may throw a std::bad_alloc exception.
    *
    * Example of use:
    * \include example-CircularEngine.cpp
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT CircularEngine {
+  class GEOGRAPHICLIB_EXPORT CircularEngine {
   private:
     typedef Math::real real;
     enum normalization {
@@ -199,7 +198,7 @@ namespace GeographicLib {
 } // namespace GeographicLib
 
 #if defined(_MSC_VER)
-#pragma warning (pop)
+#  pragma warning (pop)
 #endif
 
 #endif  // GEOGRAPHICLIB_CIRCULARENGINE_HPP
diff --git a/include/GeographicLib/Config-ac.h.in b/include/GeographicLib/Config-ac.h.in
index c8007db..a0064f4 100644
--- a/include/GeographicLib/Config-ac.h.in
+++ b/include/GeographicLib/Config-ac.h.in
@@ -3,6 +3,15 @@
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
 
+/* major version number */
+#undef GEOGRAPHICLIB_VERSION_MAJOR
+
+/* minor version number */
+#undef GEOGRAPHICLIB_VERSION_MINOR
+
+/* patch number */
+#undef GEOGRAPHICLIB_VERSION_PATCH
+
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
diff --git a/include/GeographicLib/Config.h b/include/GeographicLib/Config.h
index fd0e664..1e5e30b 100644
--- a/include/GeographicLib/Config.h
+++ b/include/GeographicLib/Config.h
@@ -1 +1,12 @@
-#define GEOGRAPHICLIB_VERSION_STRING "1.21"
+// This will be overwritten by ./configure
+
+#define GEOGRAPHICLIB_VERSION_STRING "1.34"
+#define GEOGRAPHICLIB_VERSION_MAJOR 1
+#define GEOGRAPHICLIB_VERSION_MINOR 34
+#define GEOGRAPHICLIB_VERSION_PATCH 0
+
+// Undefine HAVE_LONG_DOUBLE if this type is unknown to the compiler
+#define HAVE_LONG_DOUBLE 1
+
+// Define WORDS_BIGENDIAN to be 1 if your machine is big endian
+/* #undef WORDS_BIGENDIAN */
diff --git a/include/GeographicLib/Config.h.in b/include/GeographicLib/Config.h.in
index 87e89e1..7aae77e 100644
--- a/include/GeographicLib/Config.h.in
+++ b/include/GeographicLib/Config.h.in
@@ -1,9 +1,25 @@
-// $Id: 4e2f7e42dcc37f3c8b3d98f6aa9b50dc4a328289 $
-
-#define GEOGRAPHICLIB_VERSION_STRING "@GeographicLib_VERSION@"
+#define GEOGRAPHICLIB_VERSION_STRING "@PROJECT_VERSION@"
+#define GEOGRAPHICLIB_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
+#define GEOGRAPHICLIB_VERSION_MINOR @PROJECT_VERSION_MINOR@
+#define GEOGRAPHICLIB_VERSION_PATCH @PROJECT_VERSION_PATCH@
 #define GEOGRAPHICLIB_DATA "@GEOGRAPHICLIB_DATA@"
 
 // These are macros which affect the building of the library
-#cmakedefine GEOGRAPHIC_SHARED_LIB 1
-#cmakedefine HAVE_LONG_DOUBLE 1
-#cmakedefine WORDS_BIGENDIAN 1
+#cmakedefine01 HAVE_LONG_DOUBLE
+#cmakedefine01 WORDS_BIGENDIAN
+#define GEOGRAPHICLIB_PRECISION @GEOGRAPHICLIB_PRECISION@
+
+// Specify whether GeographicLib is a shared or static library.  When compiling
+// under Visual Studio it is necessary to specify whether GeographicLib is a
+// shared library.  This is done with the macro GEOGRAPHICLIB_SHARED_LIB, which
+// cmake will correctly define as 0 or 1 when only one type of library is in
+// the package.  If both shared and static libraries are available,
+// GEOGRAPHICLIB_SHARED_LIB is set to 2 which triggers a preprocessor error in
+// Geographic.hpp.  In this case, the appropriate value (0 or 1) for
+// GEOGRAPHICLIB_SHARED_LIB must be specified when compiling any program that
+// includes Geographic.hpp.  This is done automatically if GeographicLib and
+// the the user's code were built with cmake version 2.8.11 (which introduced
+// the command target_compile_definitions) or later.
+#if !defined(GEOGRAPHICLIB_SHARED_LIB)
+#define GEOGRAPHICLIB_SHARED_LIB @GEOGRAPHICLIB_LIB_TYPE_VAL@
+#endif
diff --git a/include/GeographicLib/Constants.hpp b/include/GeographicLib/Constants.hpp
index 40d27fa..e37ec62 100644
--- a/include/GeographicLib/Constants.hpp
+++ b/include/GeographicLib/Constants.hpp
@@ -8,8 +8,7 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_CONSTANTS_HPP)
-#define GEOGRAPHICLIB_CONSTANTS_HPP \
-  "$Id: 895e4bd91979aae347436bbf6be37964f05f5b6f $"
+#define GEOGRAPHICLIB_CONSTANTS_HPP 1
 
 #include <GeographicLib/Config.h>
 
@@ -17,7 +16,9 @@
  * A compile-time assert.  Use C++11 static_assert, if available.
  **********************************************************************/
 #if !defined(STATIC_ASSERT)
-#  if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#  if __cplusplus >= 201103
+#    define STATIC_ASSERT static_assert
+#  elif defined(__GXX_EXPERIMENTAL_CXX0X__)
 #    define STATIC_ASSERT static_assert
 #  elif defined(_MSC_VER) && _MSC_VER >= 1600
 #    define STATIC_ASSERT static_assert
@@ -27,35 +28,28 @@
 #  endif
 #endif
 
-#if defined(__GNUC__)
-// Suppress "defined but not used" warnings
-#  define RCSID_DECL(x) namespace \
-          { char VAR_ ## x [] __attribute__((used)) = x; }
-#else
-/**
- * Insertion of RCS Id strings into the object file.
- **********************************************************************/
-#  define RCSID_DECL(x) namespace { char VAR_ ## x [] = x; }
-#endif
-
-#if defined(_WIN32) && defined(GEOGRAPHIC_SHARED_LIB)
-#  if defined(Geographic_EXPORTS)
-#    define GEOGRAPHIC_EXPORT __declspec(dllexport)
+#if defined(_MSC_VER) && defined(GEOGRAPHICLIB_SHARED_LIB) && \
+  GEOGRAPHICLIB_SHARED_LIB
+#  if GEOGRAPHICLIB_SHARED_LIB > 1
+#    error GEOGRAPHICLIB_SHARED_LIB must be 0 or 1
+#  elif defined(GeographicLib_EXPORTS)
+#    define GEOGRAPHICLIB_EXPORT __declspec(dllexport)
 #  else
-#    define GEOGRAPHIC_EXPORT __declspec(dllimport)
+#    define GEOGRAPHICLIB_EXPORT __declspec(dllimport)
 #  endif
 #else
-#  define GEOGRAPHIC_EXPORT
+#  define GEOGRAPHICLIB_EXPORT
 #endif
 
 #include <stdexcept>
+#include <string>
 #include <GeographicLib/Math.hpp>
 
 /**
  * \brief Namespace for %GeographicLib
  *
  * All of %GeographicLib is defined within the GeographicLib namespace.  In
- * addition all the header files are included via %GeographicLib/filename.
+ * addition all the header files are included via %GeographicLib/Class.hpp.
  * This minimizes the likelihood of conflicts with other packages.
  **********************************************************************/
 namespace GeographicLib {
@@ -69,7 +63,7 @@ namespace GeographicLib {
    * Example of use:
    * \include example-Constants.cpp
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT Constants {
+  class GEOGRAPHICLIB_EXPORT Constants {
   private:
     typedef Math::real real;
     Constants();                // Disable constructor
@@ -116,14 +110,14 @@ namespace GeographicLib {
     /**
      * @tparam T the type of the returned value.
      * @return the gravitational constant of the WGS84 ellipsoid, \e GM, in
-     *   m<sup>3</sup> s<sup>-2</sup>.
+     *   m<sup>3</sup> s<sup>−2</sup>.
      **********************************************************************/
     template<typename T> static inline T WGS84_GM() throw()
     { return T(3986004) * T(100000000) + T(41800000); }
     /**
      * @tparam T the type of the returned value.
-     * @return the angular velocity of the the WGS84 ellipsoid, \e omega, in
-     *   rad s<sup>-1</sup>.
+     * @return the angular velocity of the WGS84 ellipsoid, ω, in rad
+     *   s<sup>−1</sup>.
      **********************************************************************/
     template<typename T> static inline T WGS84_omega() throw()
     { return T(7292115) / (T(1000000) * T(100000)); }
@@ -138,8 +132,8 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * A synonym for WGS84_r<real>().
      **********************************************************************/
-    /// \endcond
     static inline Math::real WGS84_r() throw() { return WGS84_r<real>(); }
+    /// \endcond
     /**
      * @tparam T the type of the returned value.
      * @return the equatorial radius of GRS80 ellipsoid, \e a, in m.
@@ -149,20 +143,21 @@ namespace GeographicLib {
     /**
      * @tparam T the type of the returned value.
      * @return the gravitational constant of the GRS80 ellipsoid, \e GM, in
-     *   m<sup>3</sup> s<sup>-2</sup>.
+     *   m<sup>3</sup> s<sup>−2</sup>.
      **********************************************************************/
     template<typename T> static inline T GRS80_GM() throw()
     { return T(3986005) * T(100000000); }
     /**
      * @tparam T the type of the returned value.
-     * @return the angular velocity of the the GRS80 ellipsoid, \e omega, in
-     *   rad s<sup>-1</sup>.
+     * @return the angular velocity of the GRS80 ellipsoid, ω, in rad
+     *   s<sup>−1</sup>.
      *
-     * This is about 2*pi*366.25 / (365.25*24*3600) rad s<sup>-1</sup>.  365.25
-     * is the number of days in a Julian year and 365.35/366.25 converts from
-     * solar days to sidereal days.  Using the number of days in a Gregorian
-     * year (365.2425) results in a worse approximation (because the Gregorian
-     * year includes the precession of the earth's axis).
+     * This is about 2 π 366.25 / (365.25 × 24 × 3600) rad
+     * s<sup>−1</sup>.  365.25 is the number of days in a Julian year and
+     * 365.35/366.25 converts from solar days to sidereal days.  Using the
+     * number of days in a Gregorian year (365.2425) results in a worse
+     * approximation (because the Gregorian year includes the precession of the
+     * earth's axis).
      **********************************************************************/
     template<typename T> static inline T GRS80_omega() throw()
     { return T(7292115) / (T(1000000) * T(100000)); }
@@ -318,7 +313,7 @@ namespace GeographicLib {
      * Constructor
      *
      * @param[in] msg a string message, which is accessible in the catch
-     *   clause, via what().
+     *   clause via what().
      **********************************************************************/
     GeographicErr(const std::string& msg) : std::runtime_error(msg) {}
   };
diff --git a/include/GeographicLib/DMS.hpp b/include/GeographicLib/DMS.hpp
index 918d025..ea9fe5c 100644
--- a/include/GeographicLib/DMS.hpp
+++ b/include/GeographicLib/DMS.hpp
@@ -8,23 +8,21 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_DMS_HPP)
-#define GEOGRAPHICLIB_DMS_HPP "$Id: 67770a78c105495a31a9d3755c811e938729c85a $"
+#define GEOGRAPHICLIB_DMS_HPP 1
 
-#include <sstream>
-#include <iomanip>
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/Utility.hpp>
 
 #if defined(_MSC_VER)
-// Squelch warnings about dll vs string
-#pragma warning (push)
-#pragma warning (disable: 4251)
+// Squelch warnings about dll vs vector and constant conditional expressions
+#  pragma warning (push)
+#  pragma warning (disable: 4251 4127)
 #endif
 
 namespace GeographicLib {
 
   /**
-   * \brief Convert between degrees and %DMS representation.
+   * \brief Convert between degrees and the %DMS representation
    *
    * Parse a string representing degree, minutes, and seconds and return the
    * angle in degrees and format an angle in degrees as degree, minutes, and
@@ -33,7 +31,7 @@ namespace GeographicLib {
    * Example of use:
    * \include example-DMS.cpp
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT DMS {
+  class GEOGRAPHICLIB_EXPORT DMS {
   private:
     typedef Math::real real;
     // Replace all occurrences of pat by c
@@ -116,12 +114,13 @@ namespace GeographicLib {
      * @param[in] dms string input.
      * @param[out] ind a DMS::flag value signaling the presence of a
      *   hemisphere indicator.
+     * @exception GeographicErr if \e dms is malformed (see below).
      * @return angle (degrees).
      *
      * Degrees, minutes, and seconds are indicated by the characters d, '
      * (single quote), " (double quote), and these components may only be
      * given in this order.  Any (but not all) components may be omitted and
-     * other symbols (e.g., the <sup>o</sup> symbol for degrees and the unicode
+     * other symbols (e.g., the ° symbol for degrees and the unicode
      * prime and double prime symbols for minutes and seconds) may be
      * substituted.  The last component indicator may be omitted and is assumed
      * to be the next smallest unit (thus 33d10 is interpreted as 33d10').  The
@@ -140,7 +139,7 @@ namespace GeographicLib {
      * string.  No check is performed on the range of the result.  Examples of
      * legal and illegal strings are
      * - <i>LEGAL</i> (all the entries on each line are equivalent)
-     *   - -20.51125, 20d30'40.5"S, -20d30'40.5, -20d30.675,
+     *   - -20.51125, 20d30'40.5"S, -20°30'40.5, -20d30.675,
      *     N-20d30'40.5", -20:30:40.5
      *   - 4d0'9, 4d9", 4d9'', 4:0:9, 004:00:09, 4.0025, 4.0025d, 4d0.15,
      *     04:.15
@@ -152,23 +151,26 @@ namespace GeographicLib {
      * implementation %GeographicLib is with 8-bit characters.  The support for
      * unicode symbols for degrees, minutes, and seconds is therefore via the
      * <a href="http://en.wikipedia.org/wiki/UTF-8">UTF-8</a> encoding.  (The
-     * Javascript implementation of this class uses unicode natively, of
+     * JavaScript implementation of this class uses unicode natively, of
      * course.)
      *
      * Here is the list of Unicode symbols supported for degrees, minutes,
      * seconds:
      * - degrees:
      *   - d, D lower and upper case letters
-     *   - U+00b0 degree symbol
+     *   - U+00b0 degree symbol (°)
      *   - U+00ba masculine ordinal indicator
      *   - U+2070 superscript zero
+     *   - U+02da ring above
      * - minutes:
      *   - ' apostrophe
-     *   - U+2032 prime
+     *   - U+2032 prime (′)
      *   - U+00b4 acute accent
+     *   - U+2019 right single quote (’)
      * - seconds:
      *   - " quotation mark
-     *   - U+2033 double prime
+     *   - U+2033 double prime (″)
+     *   - U+201d right double quote (”)
      *   - ' ' any two consecutive symbols for minutes
      * .
      * The codes with a leading zero byte, e.g., U+00b0, are accepted in their
@@ -197,6 +199,7 @@ namespace GeographicLib {
      * Convert a string to a real number.
      *
      * @param[in] str string input.
+     * @exception GeographicErr if \e str is malformed.
      * @return decoded number.
      **********************************************************************/
     static Math::real Decode(const std::string& str)
@@ -208,6 +211,7 @@ namespace GeographicLib {
      * a simple fraction.
      *
      * @param[in] str string input.
+     * @exception GeographicErr if \e str is malformed.
      * @return decoded number.
      **********************************************************************/
     static Math::real DecodeFraction(const std::string& str)
@@ -220,18 +224,25 @@ namespace GeographicLib {
      * @param[in] dmsa first string.
      * @param[in] dmsb second string.
      * @param[out] lat latitude.
-     * @param[out] lon longitude.
+     * @param[out] lon longitude reduced to the range [−180°,
+     *   180°).
      * @param[in] swaplatlong if true assume longitude is given before latitude
      *   in the absence of hemisphere designators (default false).
+     * @exception GeographicErr if \e dmsa or \e dmsb is malformed.
+     * @exception GeographicErr if \e dmsa and \e dmsb are both interpreted as
+     *   latitudes.
+     * @exception GeographicErr if \e dmsa and \e dmsb are both interpreted as
+     *   longitudes.
+     * @exception GeographicErr if decoded latitude is not in [−90°,
+     *   90°].
+     * @exception GeographicErr if decoded longitude is not in
+     *   [−540°, 540°).
      *
      * By default, the \e lat (resp., \e lon) is assigned to the results of
      * decoding \e dmsa (resp., \e dmsb).  However this is overridden if either
      * \e dmsa or \e dmsb contain a latitude or longitude hemisphere designator
-     * (N, S, E, W).  Throws an error if the decoded numbers are out of the
-     * ranges [-90<sup>o</sup>, 90<sup>o</sup>] for latitude and
-     * [-180<sup>o</sup>, 360<sup>o</sup>] for longitude and, in which case \e
-     * lat and \e lon are unchanged.  Finally the longitude is reduced to the
-     * range [-180<sup>o</sup>, 180<sup>o</sup>).
+     * (N, S, E, W).  If an exception is thrown, \e lat and \e lon are
+     * unchanged.
      **********************************************************************/
     static void DecodeLatLon(const std::string& dmsa, const std::string& dmsb,
                              real& lat, real& lon, bool swaplatlong = false);
@@ -240,6 +251,8 @@ namespace GeographicLib {
      * Convert a string to an angle in degrees.
      *
      * @param[in] angstr input string.
+     * @exception GeographicErr if \e angstr is malformed.
+     * @exception GeographicErr if \e angstr includes a hemisphere designator.
      * @return angle (degrees)
      *
      * No hemisphere designator is allowed and no check is done on the range of
@@ -251,12 +264,15 @@ namespace GeographicLib {
      * Convert a string to an azimuth in degrees.
      *
      * @param[in] azistr input string.
-     * @return azimuth (degrees)
+     * @exception GeographicErr if \e azistr is malformed.
+     * @exception GeographicErr if \e azistr includes a N/S designator.
+     * @exception GeographicErr if decoded azimuth is not in
+     *   [−540°, 540°).
+     * @return azimuth (degrees) reduced to the range [−180°,
+     *   180°).
      *
-     * A hemisphere designator E/W can be used; the result is multiplied by -1
-     * if W is present.  Throws an error if the result is out of the range
-     * [-180<sup>o</sup>, 360<sup>o</sup>].  Finally the azimuth is reduced to
-     * the range [-180<sup>o</sup>, 180<sup>o</sup>).
+     * A hemisphere designator E/W can be used; the result is multiplied by
+     * −1 if W is present.
      **********************************************************************/
     static Math::real DecodeAzimuth(const std::string& azistr);
 
@@ -271,6 +287,7 @@ namespace GeographicLib {
      * @param[in] ind DMS::flag value indicated additional formatting.
      * @param[in] dmssep if non-null, use as the DMS separator character
      *   (instead of d, ', " delimiters).
+     * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return formatted string
      *
      * The interpretation of \e ind is as follows:
@@ -280,37 +297,14 @@ namespace GeographicLib {
      *   pad degrees to 2 digits, e.g., 08d03'S.
      * - ind == DMS::LONGITUDE, trailing E or W hemisphere designator, no
      *   sign, pad degrees to 3 digits, e.g., 008d03'W.
-     * - ind == DMS::AZIMUTH, convert to the range [0, 360<sup>o</sup>), no
+     * - ind == DMS::AZIMUTH, convert to the range [0, 360°), no
      *   sign, pad degrees to 3 digits, , e.g., 351d57'.
      * .
      * The integer parts of the minutes and seconds components are always given
      * with 2 digits.
      **********************************************************************/
     static std::string Encode(real angle, component trailing, unsigned prec,
-                              flag ind, char dmssep);
-
-    /**
-     * Convert angle (in degrees) into a DMS string (using d, ', and ").
-     *
-     * @param[in] angle input angle (degrees)
-     * @param[in] trailing DMS::component value indicating the trailing units
-     *   on the string and this is given as a decimal number if necessary.
-     * @param[in] prec the number of digits after the decimal point for the
-     *   trailing component.
-     * @param[in] ind DMS::flag value indicated additional formatting.
-     * @return formatted string
-     *
-     * <b>COMPATIBILITY NOTE:</b> This function calls
-     * Encode(real, component, unsigned, flag, char) with a 5th
-     * argument of char(0).  At some point,
-     * Encode(real, component, unsigned, flag) and will be withdrawn
-     * and the interface to
-     * Encode(real, component, unsigned, flag, char) changed so that
-     * its 4th and 5th arguments have default values.  This will
-     * preserve source-level compatibility.
-     **********************************************************************/
-    static std::string Encode(real angle, component trailing, unsigned prec,
-                              flag ind = NONE);
+                              flag ind = NONE, char dmssep = char(0));
 
     /**
      * Convert angle into a DMS string (using d, ', and ") selecting the
@@ -321,6 +315,7 @@ namespace GeographicLib {
      * @param[in] ind DMS::flag value indicated additional formatting.
      * @param[in] dmssep if non-null, use as the DMS separator character
      *   (instead of d, ', " delimiters).
+     * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return formatted string
      *
      * \e prec indicates the precision relative to 1 degree, e.g., \e prec = 3
@@ -330,7 +325,7 @@ namespace GeographicLib {
      * format with precision \e prec.
      **********************************************************************/
     static std::string Encode(real angle, unsigned prec, flag ind = NONE,
-			      char dmssep = char(0)) {
+                              char dmssep = char(0)) {
       return ind == NUMBER ? Utility::str<real>(angle, int(prec)) :
         Encode(angle,
                prec < 2 ? DEGREE : (prec < 4 ? MINUTE : SECOND),
@@ -367,7 +362,7 @@ namespace GeographicLib {
 } // namespace GeographicLib
 
 #if defined(_MSC_VER)
-#pragma warning (pop)
+#  pragma warning (pop)
 #endif
 
 #endif  // GEOGRAPHICLIB_DMS_HPP
diff --git a/include/GeographicLib/Ellipsoid.hpp b/include/GeographicLib/Ellipsoid.hpp
new file mode 100644
index 0000000..72e0c6d
--- /dev/null
+++ b/include/GeographicLib/Ellipsoid.hpp
@@ -0,0 +1,537 @@
+/**
+ * \file Ellipsoid.hpp
+ * \brief Header for GeographicLib::Ellipsoid class
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#if !defined(GEOGRAPHICLIB_ELLIPSOID_HPP)
+#define GEOGRAPHICLIB_ELLIPSOID_HPP 1
+
+#include <GeographicLib/Constants.hpp>
+#include <GeographicLib/TransverseMercator.hpp>
+#include <GeographicLib/EllipticFunction.hpp>
+#include <GeographicLib/AlbersEqualArea.hpp>
+
+namespace GeographicLib {
+
+  /**
+   * \brief Properties of an ellipsoid
+   *
+   * This class returns various properties of the ellipsoid and converts
+   * between various types of latitudes.  The latitude conversions are also
+   * possible using the various projections supported by %GeographicLib; but
+   * Ellipsoid provides more direct access (sometimes using private functions
+   * of the projection classes).  Ellipsoid::RectifyingLatitude,
+   * Ellipsoid::InverseRectifyingLatitude, and Ellipsoid::MeridianDistance
+   * provide functionality which can be provided by the Geodesic class.
+   * However Geodesic uses a series approximation (valid for abs \e f < 1/150),
+   * whereas Ellipsoid computes these quantities using EllipticFunction which
+   * provides accurate results even when \e f is large.  Use of this class
+   * should be limited to −3 < \e f < 3/4 (i.e., 1/4 < b/a < 4).
+   *
+   * Example of use:
+   * \include example-Ellipsoid.cpp
+   **********************************************************************/
+
+  class GEOGRAPHICLIB_EXPORT Ellipsoid {
+  private:
+    typedef Math::real real;
+    static const int numit_ = 10;
+    static const real stol_;
+    real _a, _f, _f1, _f12, _e2, _e12, _n, _b;
+    TransverseMercator _tm;
+    EllipticFunction _ell;
+    AlbersEqualArea _au;
+    static real tand(real x) throw() {
+      return
+        std::abs(x) == real(90) ? (x < 0 ?
+                                   - TransverseMercator::overflow_
+                                   : TransverseMercator::overflow_) :
+        std::tan(x * Math::degree<real>());
+    }
+    static real atand(real x) throw()
+    { return std::atan(x) / Math::degree<real>(); }
+
+  public:
+    /** \name Constructor
+     **********************************************************************/
+    ///@{
+
+    /**
+     * Constructor for a ellipsoid with
+     *
+     * @param[in] a equatorial radius (meters).
+     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+     *   to 1/\e f.
+     * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+     *   positive.
+     **********************************************************************/
+    Ellipsoid(real a, real f);
+    ///@}
+
+    /** \name %Ellipsoid dimensions.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+     *   the value used in the constructor.
+     **********************************************************************/
+    Math::real MajorRadius() const throw() { return _a; }
+
+    /**
+     * @return \e b the polar semi-axis (meters).
+     **********************************************************************/
+    Math::real MinorRadius() const throw() { return _b; }
+
+    /**
+     * @return \e L the distance between the equator and a pole along a
+     *   meridian (meters).  For a sphere \e L = (π/2) \e a.  The radius
+     *   of a sphere with the same meridian length is \e L / (π/2).
+     **********************************************************************/
+    Math::real QuarterMeridian() const throw();
+
+    /**
+     * @return \e A the total area of the ellipsoid (meters<sup>2</sup>).  For
+     *   a sphere \e A = 4π <i>a</i><sup>2</sup>.  The radius of a sphere
+     *   with the same area is sqrt(\e A / (4π)).
+     **********************************************************************/
+    Math::real Area() const throw();
+
+    /**
+     * @return \e V the total volume of the ellipsoid (meters<sup>3</sup>).
+     *   For a sphere \e V = (4π / 3) <i>a</i><sup>3</sup>.  The radius of
+     *   a sphere with the same volume is cbrt(\e V / (4π/3)).
+     **********************************************************************/
+    Math::real Volume() const throw()
+    { return (4 * Math::pi<real>()) * Math::sq(_a) * _b / 3; }
+    ///@}
+
+    /** \name %Ellipsoid shape
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @return \e f = (\e a − \e b) / \e a, the flattening of the
+     *   ellipsoid.  This is the value used in the constructor.  This is zero,
+     *   positive, or negative for a sphere, oblate ellipsoid, or prolate
+     *   ellipsoid.
+     **********************************************************************/
+    Math::real Flattening() const throw() { return _f; }
+
+    /**
+     * @return \e f ' = (\e a − \e b) / \e b, the second flattening of
+     *   the ellipsoid.  This is zero, positive, or negative for a sphere,
+     *   oblate ellipsoid, or prolate ellipsoid.
+     **********************************************************************/
+    Math::real SecondFlattening() const throw() { return _f / (1 - _f); }
+
+    /**
+     * @return \e n = (\e a − \e b) / (\e a + \e b), the third flattening
+     *   of the ellipsoid.  This is zero, positive, or negative for a sphere,
+     *   oblate ellipsoid, or prolate ellipsoid.
+     **********************************************************************/
+    Math::real ThirdFlattening() const throw() { return _n; }
+
+    /**
+     * @return <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> −
+     *   <i>b</i><sup>2</sup>) / <i>a</i><sup>2</sup>, the eccentricity squared
+     *   of the ellipsoid.  This is zero, positive, or negative for a sphere,
+     *   oblate ellipsoid, or prolate ellipsoid.
+     **********************************************************************/
+    Math::real EccentricitySq() const throw() { return _e2; }
+
+    /**
+     * @return <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+     *   <i>b</i><sup>2</sup>) / <i>b</i><sup>2</sup>, the second eccentricity
+     *   squared of the ellipsoid.  This is zero, positive, or negative for a
+     *   sphere, oblate ellipsoid, or prolate ellipsoid.
+     **********************************************************************/
+    Math::real SecondEccentricitySq() const throw() { return _e12; }
+
+    /**
+     * @return <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+     *   <i>b</i><sup>2</sup>) / (<i>a</i><sup>2</sup> + <i>b</i><sup>2</sup>),
+     *   the third eccentricity squared of the ellipsoid.  This is zero,
+     *   positive, or negative for a sphere, oblate ellipsoid, or prolate
+     *   ellipsoid.
+     **********************************************************************/
+    Math::real ThirdEccentricitySq() const throw() { return _e2 / (2 - _e2); }
+    ///@}
+
+    /** \name Latitude conversion.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return β the parametric latitude (degrees).
+     *
+     * The geographic latitude, φ, is the angle beween the equatorial
+     * plane and a vector normal to the surface of the ellipsoid.
+     *
+     * The parametric latitude (also called the reduced latitude), β,
+     * allows the cartesian coordinated of a meridian to be expressed
+     * conveniently in parametric form as
+     * - \e R = \e a cos β
+     * - \e Z = \e b sin β
+     * .
+     * where \e a and \e b are the equatorial radius and the polar semi-axis.
+     * For a sphere β = φ.
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * β lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real ParametricLatitude(real phi) const throw();
+
+    /**
+     * @param[in] beta the parametric latitude (degrees).
+     * @return φ the geographic latitude (degrees).
+     *
+     * β must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * φ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real InverseParametricLatitude(real beta) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return θ the geocentric latitude (degrees).
+     *
+     * The geocentric latitude, θ, is the angle beween the equatorial
+     * plane and a line between the center of the ellipsoid and a point on the
+     * ellipsoid.  For a sphere θ = φ.
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * θ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real GeocentricLatitude(real phi) const throw();
+
+    /**
+     * @param[in] theta the geocentric latitude (degrees).
+     * @return φ the geographic latitude (degrees).
+     *
+     * θ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * φ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real InverseGeocentricLatitude(real theta) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return μ the rectifying latitude (degrees).
+     *
+     * The rectifying latitude, μ, has the property that the distance along
+     * a meridian of the ellipsoid between two points with rectifying latitudes
+     * μ<sub>1</sub> and μ<sub>2</sub> is equal to
+     * (μ<sub>2</sub> - μ<sub>1</sub>) \e L / 90°,
+     * where \e L = QuarterMeridian().  For a sphere μ = φ.
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * μ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real RectifyingLatitude(real phi) const throw();
+
+    /**
+     * @param[in] mu the rectifying latitude (degrees).
+     * @return φ the geographic latitude (degrees).
+     *
+     * μ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * φ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real InverseRectifyingLatitude(real mu) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return ξ the authalic latitude (degrees).
+     *
+     * The authalic latitude, ξ, has the property that the area of the
+     * ellipsoid between two circles with authalic latitudes
+     * ξ<sub>1</sub> and ξ<sub>2</sub> is equal to (sin
+     * ξ<sub>2</sub> - sin ξ<sub>1</sub>) \e A / 2, where \e A
+     * = Area().  For a sphere ξ = φ.
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * ξ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real AuthalicLatitude(real phi) const throw();
+
+    /**
+     * @param[in] xi the authalic latitude (degrees).
+     * @return φ the geographic latitude (degrees).
+     *
+     * ξ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * φ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real InverseAuthalicLatitude(real xi) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return χ the conformal latitude (degrees).
+     *
+     * The conformal latitude, χ, gives the mapping of the ellipsoid to a
+     * sphere which which is conformal (angles are preserved) and in which the
+     * equator of the ellipsoid maps to the equator of the sphere.  For a
+     * sphere χ = φ.
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * χ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real ConformalLatitude(real phi) const throw();
+
+    /**
+     * @param[in] chi the conformal latitude (degrees).
+     * @return φ the geographic latitude (degrees).
+     *
+     * χ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.  The returned value
+     * φ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real InverseConformalLatitude(real chi) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return ψ the isometric latitude (degrees).
+     *
+     * The isometric latitude gives the mapping of the ellipsoid to a plane
+     * which which is conformal (angles are preserved) and in which the equator
+     * of the ellipsoid maps to a straight line of constant scale; this mapping
+     * defines the Mercator projection.  For a sphere ψ =
+     * sinh<sup>−1</sup> tan φ.
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.
+     **********************************************************************/
+    Math::real IsometricLatitude(real phi) const throw();
+
+    /**
+     * @param[in] psi the isometric latitude (degrees).
+     * @return φ the geographic latitude (degrees).
+     *
+     * The returned value φ lies in [−90°, 90°].
+     **********************************************************************/
+    Math::real InverseIsometricLatitude(real psi) const throw();
+    ///@}
+
+    /** \name Other quantities.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return \e R = \e a cos β the radius of a circle of latitude
+     *   φ (meters).  \e R (π/180°) gives meters per degree
+     *   longitude measured along a circle of latitude.
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.
+     **********************************************************************/
+    Math::real CircleRadius(real phi) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return \e Z = \e b sin β the distance of a circle of latitude
+     *   φ from the equator measured parallel to the ellipsoid axis
+     *   (meters).
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.
+     **********************************************************************/
+    Math::real CircleHeight(real phi) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return \e s the distance along a meridian
+     *   between the equator and a point of latitude φ (meters).  \e s is
+     *   given by \e s = μ \e L / 90°, where \e L =
+     *   QuarterMeridian()).
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.
+     **********************************************************************/
+    Math::real MeridianDistance(real phi) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return ρ the meridional radius of curvature of the ellipsoid at
+     *   latitude φ (meters); this is the curvature of the meridian.  \e
+     *   rho is given by ρ = (180°/π) d\e s / dφ,
+     *   where \e s = MeridianDistance(); thus ρ (π/180°)
+     *   gives meters per degree latitude measured along a meridian.
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.
+     **********************************************************************/
+    Math::real MeridionalCurvatureRadius(real phi) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @return ν the transverse radius of curvature of the ellipsoid at
+     *   latitude φ (meters); this is the curvature of a curve on the
+     *   ellipsoid which also lies in a plane perpendicular to the ellipsoid
+     *   and to the meridian.  ν is related to \e R = CircleRadius() by \e
+     *   R = ν cos φ.
+     *
+     * φ must lie in the range [−90°, 90°]; the
+     * result is undefined if this condition does not hold.
+     **********************************************************************/
+    Math::real TransverseCurvatureRadius(real phi) const throw();
+
+    /**
+     * @param[in] phi the geographic latitude (degrees).
+     * @param[in] azi the angle between the meridian and the normal section
+     *   (degrees).
+     * @return the radius of curvature of the ellipsoid in the normal
+     *   section at latitude φ inclined at an angle \e azi to the
+     *   meridian (meters).
+     *
+     * φ must lie in the range [−90°, 90°] and \e
+     * azi must lie in the range [−540°, 540°); the
+     * result is undefined if either of conditions does not hold.
+     **********************************************************************/
+    Math::real NormalCurvatureRadius(real phi, real azi) const throw();
+    ///@}
+
+    /** \name Eccentricity conversions.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @param[in] fp = \e f ' = (\e a − \e b) / \e b, the second
+     *   flattening.
+     * @return \e f = (\e a − \e b) / \e a, the flattening.
+     *
+     * \e f ' should lie in (−1, ∞).
+     * The returned value \e f lies in (−∞, 1).
+     **********************************************************************/
+    static Math::real SecondFlatteningToFlattening(real fp) throw()
+    { return fp / (1 + fp); }
+
+    /**
+     * @param[in] f = (\e a − \e b) / \e a, the flattening.
+     * @return \e f ' = (\e a − \e b) / \e b, the second flattening.
+     *
+     * \e f should lie in (−∞, 1).
+     * The returned value \e f ' lies in (−1, ∞).
+     **********************************************************************/
+    static Math::real FlatteningToSecondFlattening(real f) throw()
+    { return f / (1 - f); }
+
+    /**
+     * @param[in] n = (\e a − \e b) / (\e a + \e b), the third
+     *   flattening.
+     * @return \e f = (\e a − \e b) / \e a, the flattening.
+     *
+     * \e n should lie in (−1, 1).
+     * The returned value \e f lies in (−∞, 1).
+     **********************************************************************/
+    static Math::real ThirdFlatteningToFlattening(real n) throw()
+    { return 2 * n / (1 + n); }
+
+    /**
+     * @param[in] f = (\e a − \e b) / \e a, the flattening.
+     * @return \e n = (\e a − \e b) / (\e a + \e b), the third
+     *   flattening.
+     *
+     * \e f should lie in (−∞, 1).
+     * The returned value \e n lies in (−1, 1).
+     **********************************************************************/
+    static Math::real FlatteningToThirdFlattening(real f) throw()
+    { return f / (2 - f); }
+
+    /**
+     * @param[in] e2 = <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> −
+     *   <i>b</i><sup>2</sup>) / <i>a</i><sup>2</sup>, the eccentricity
+     *   squared.
+     * @return \e f = (\e a − \e b) / \e a, the flattening.
+     *
+     * <i>e</i><sup>2</sup> should lie in (−∞, 1).
+     * The returned value \e f lies in (−∞, 1).
+     **********************************************************************/
+    static Math::real EccentricitySqToFlattening(real e2) throw()
+    { return e2 / (std::sqrt(1 - e2) + 1); }
+
+    /**
+     * @param[in] f = (\e a − \e b) / \e a, the flattening.
+     * @return <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> −
+     *   <i>b</i><sup>2</sup>) / <i>a</i><sup>2</sup>, the eccentricity
+     *   squared.
+     *
+     * \e f should lie in (−∞, 1).
+     * The returned value <i>e</i><sup>2</sup> lies in (−∞, 1).
+     **********************************************************************/
+    static Math::real FlatteningToEccentricitySq(real f) throw()
+    { return f * (2 - f); }
+
+    /**
+     * @param[in] ep2 = <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+     *   <i>b</i><sup>2</sup>) / <i>b</i><sup>2</sup>, the second eccentricity
+     *   squared.
+     * @return \e f = (\e a − \e b) / \e a, the flattening.
+     *
+     * <i>e'</i> <sup>2</sup> should lie in (−1, ∞).
+     * The returned value \e f lies in (−∞, 1).
+     **********************************************************************/
+    static Math::real SecondEccentricitySqToFlattening(real ep2) throw()
+    { return ep2 / (std::sqrt(1 + ep2) + 1 + ep2); }
+
+    /**
+     * @param[in] f = (\e a − \e b) / \e a, the flattening.
+     * @return <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+     *   <i>b</i><sup>2</sup>) / <i>b</i><sup>2</sup>, the second eccentricity
+     *   squared.
+     *
+     * \e f should lie in (−∞, 1).
+     * The returned value <i>e'</i> <sup>2</sup> lies in (−1, ∞).
+     **********************************************************************/
+    static Math::real FlatteningToSecondEccentricitySq(real f) throw()
+    { return f * (2 - f) / Math::sq(1 - f); }
+
+    /**
+     * @param[in] epp2 = <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup>
+     *   − <i>b</i><sup>2</sup>) / (<i>a</i><sup>2</sup> +
+     *   <i>b</i><sup>2</sup>), the third eccentricity squared.
+     * @return \e f = (\e a − \e b) / \e a, the flattening.
+     *
+     * <i>e''</i> <sup>2</sup> should lie in (−1, 1).
+     * The returned value \e f lies in (−∞, 1).
+     **********************************************************************/
+    static Math::real ThirdEccentricitySqToFlattening(real epp2) throw()
+    { return 2 * epp2 / (sqrt((1 - epp2) * (1 + epp2)) + 1 + epp2); }
+
+    /**
+     * @param[in] f = (\e a − \e b) / \e a, the flattening.
+     * @return <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
+     *   <i>b</i><sup>2</sup>) / (<i>a</i><sup>2</sup> + <i>b</i><sup>2</sup>),
+     *   the third eccentricity squared.
+     *
+     * \e f should lie in (−∞, 1).
+     * The returned value <i>e''</i> <sup>2</sup> lies in (−1, 1).
+     **********************************************************************/
+    static Math::real FlatteningToThirdEccentricitySq(real f) throw()
+    { return f * (2 - f) / (1 + Math::sq(1 - f)); }
+
+    ///@}
+
+    /**
+     * A global instantiation of Ellipsoid with the parameters for the WGS84
+     * ellipsoid.
+     **********************************************************************/
+    static const Ellipsoid WGS84;
+
+  };
+
+} // namespace GeographicLib
+
+#endif  // GEOGRAPHICLIB_ELLIPSOID_HPP
diff --git a/include/GeographicLib/EllipticFunction.hpp b/include/GeographicLib/EllipticFunction.hpp
index 464b3d0..802b6e7 100644
--- a/include/GeographicLib/EllipticFunction.hpp
+++ b/include/GeographicLib/EllipticFunction.hpp
@@ -2,48 +2,64 @@
  * \file EllipticFunction.hpp
  * \brief Header for GeographicLib::EllipticFunction class
  *
- * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2008-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP)
-#define GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP \
-  "$Id: 30ac447643e48afcaf5ab4671fbf2b235008dabe $"
+#define GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP 1
 
 #include <GeographicLib/Constants.hpp>
 
 namespace GeographicLib {
 
   /**
-   * \brief Elliptic functions needed for TransverseMercatorExact
+   * \brief Elliptic integrals and functions
    *
-   * This provides the subset of elliptic functions needed for
-   * TransverseMercatorExact.  For a given ellipsoid, only parameters
-   * <i>e</i><sup>2</sup> and 1 - <i>e</i><sup>2</sup> are needed.  This class
-   * taken the parameter as a constructor parameters and caches the values of
-   * the required complete integrals.  A method is provided for Jacobi elliptic
-   * functions and for the incomplete elliptic integral of the second kind in
-   * terms of the amplitude.
+   * This provides the elliptic functions and integrals needed for Ellipsoid,
+   * GeodesicExact, and TransverseMercatorExact.  Two categories of function
+   * are provided:
+   * - \e static functions to compute symmetric elliptic integrals
+   *   (http://dlmf.nist.gov/19.16.i)
+   * - \e member functions to compute Legrendre's elliptic
+   *   integrals (http://dlmf.nist.gov/19.2.ii) and the
+   *   Jacobi elliptic functions (http://dlmf.nist.gov/22.2).
+   * .
+   * In the latter case, an object is constructed giving the modulus \e k (and
+   * optionally the parameter α<sup>2</sup>).  The modulus is always
+   * passed as its square <i>k</i><sup>2</sup> which allows \e k to be pure
+   * imaginary (<i>k</i><sup>2</sup> < 0).  (Confusingly, Abramowitz and
+   * Stegun call \e m = <i>k</i><sup>2</sup> the "parameter" and \e n =
+   * α<sup>2</sup> the "characteristic".)
+   *
+   * In geodesic applications, it is convenient to separate the incomplete
+   * integrals into secular and periodic components, e.g.,
+   * \f[
+   *   E(\phi, k) = (2 E(\phi) / \pi) [ \phi + \delta E(\phi, k) ]
+   * \f]
+   * where δ\e E(φ, \e k) is an odd periodic function with period
+   * π.
    *
    * The computation of the elliptic integrals uses the algorithms given in
    * - B. C. Carlson,
-   *   <a href="http://dx.doi.org/10.1007/BF02198293"> Computation of elliptic
-   *   integrals</a>, Numerical Algorithms 10, 13–26 (1995).
+   *   <a href="http://dx.doi.org/10.1007/BF02198293"> Computation of real or
+   *   complex elliptic integrals</a>, Numerical Algorithms 10, 13--26 (1995)
    * .
+   * with the additional optimizations given in http://dlmf.nist.gov/19.36.i.
    * The computation of the Jacobi elliptic functions uses the algorithm given
    * in
    * - R. Bulirsch,
    *   <a href="http://dx.doi.org/10.1007/BF01397975"> Numerical Calculation of
    *   Elliptic Integrals and Elliptic Functions</a>, Numericshe Mathematik 7,
-   *   78–90 (1965).
+   *   78--90 (1965).
    * .
-   * The notation follows Abramowitz and Stegun, Chapters 16 and 17.
+   * The notation follows http://dlmf.nist.gov/19 and http://dlmf.nist.gov/22
    *
    * Example of use:
    * \include example-EllipticFunction.cpp
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT EllipticFunction {
+  class GEOGRAPHICLIB_EXPORT EllipticFunction {
   private:
     typedef Math::real real;
     static const real tol_;
@@ -51,85 +67,642 @@ namespace GeographicLib {
     static const real tolRD_;
     static const real tolRG0_;
     static const real tolJAC_;
-    static const real tolJAC1_;
-    enum { num_ = 10 }; // Max depth required for sncndn.  Probably 5 is enough.
-    static real RF(real x, real y, real z) throw();
-    static real RD(real x, real y, real z) throw();
-    static real RG0(real x, real y) throw();
-    real _m, _m1;
+    enum { num_ = 13 }; // Max depth required for sncndn.  Probably 5 is enough.
+    real _k2, _kp2, _alpha2, _alphap2, _eps;
     mutable bool _init;
-    mutable real _kc, _ec, _kec;
+    mutable real _Kc, _Ec, _Dc, _Pic, _Gc, _Hc;
     bool Init() const throw();
   public:
+    /** \name Constructor
+     **********************************************************************/
+    ///@{
+    /**
+     * Constructor specifying the modulus and parameter.
+     *
+     * @param[in] k2 the square of the modulus <i>k</i><sup>2</sup>.
+     *   <i>k</i><sup>2</sup> must lie in (-∞, 1).  (No checking is
+     *   done.)
+     * @param[in] alpha2 the parameter α<sup>2</sup>.
+     *   α<sup>2</sup> must lie in (-∞, 1).  (No checking is done.)
+     *
+     * If only elliptic integrals of the first and second kinds are needed,
+     * then set α<sup>2</sup> = 0 (the default value); in this case, we
+     * have Π(φ, 0, \e k) = \e F(φ, \e k), \e G(φ, 0, \e k) = \e
+     * E(φ, \e k), and \e H(φ, 0, \e k) = \e F(φ, \e k) - \e
+     * D(φ, \e k).
+     **********************************************************************/
+    EllipticFunction(real k2 = 0, real alpha2 = 0) throw();
+
+    /**
+     * Constructor specifying the modulus and parameter and their complements.
+     *
+     * @param[in] k2 the square of the modulus <i>k</i><sup>2</sup>.
+     *   <i>k</i><sup>2</sup> must lie in (-∞, 1).  (No checking is
+     *   done.)
+     * @param[in] alpha2 the parameter α<sup>2</sup>.
+     *   α<sup>2</sup> must lie in (-∞, 1).  (No checking is done.)
+     * @param[in] kp2 the complementary modulus squared <i>k'</i><sup>2</sup> =
+     *   1 − <i>k</i><sup>2</sup>.
+     * @param[in] alphap2 the complementary parameter α'<sup>2</sup> = 1
+     *   − α<sup>2</sup>.
+     *
+     * The arguments must satisfy \e k2 + \e kp2 = 1 and \e alpha2 + \e alphap2
+     * = 1.  (No checking is done that these conditions are met.)  This
+     * constructor is provided to enable accuracy to be maintained, e.g., when
+     * \e k is very close to unity.
+     **********************************************************************/
+    EllipticFunction(real k2, real alpha2, real kp2, real alphap2) throw();
 
     /**
-     * Constructor.
+     * Reset the modulus and parameter.
      *
-     * @param[in] m the parameter which must lie in [0, 1].  (No checking
-     *   is done.)
+     * @param[in] k2 the new value of square of the modulus
+     *   <i>k</i><sup>2</sup> which must lie in (-∞, 1).  (No checking is
+     *   done.)
+     * @param[in] alpha2 the new value of parameter α<sup>2</sup>.
+     *   α<sup>2</sup> must lie in (-∞, 1).  (No checking is done.)
      **********************************************************************/
-    explicit EllipticFunction(real m) throw();
+    void Reset(real k2 = 0, real alpha2 = 0) throw()
+    { Reset(k2, alpha2, 1 - k2, 1 - alpha2); }
 
     /**
-     * @return the parameter \e m.
+     * Reset the modulus and parameter supplying also their complements.
+     *
+     * @param[in] k2 the square of the modulus <i>k</i><sup>2</sup>.
+     *   <i>k</i><sup>2</sup> must lie in (-∞, 1).  (No checking is
+     *   done.)
+     * @param[in] alpha2 the parameter α<sup>2</sup>.
+     *   α<sup>2</sup> must lie in (-∞, 1).  (No checking is done.)
+     * @param[in] kp2 the complementary modulus squared <i>k'</i><sup>2</sup> =
+     *   1 − <i>k</i><sup>2</sup>.
+     * @param[in] alphap2 the complementary parameter α'<sup>2</sup> = 1
+     *   − α<sup>2</sup>.
+     *
+     * The arguments must satisfy \e k2 + \e kp2 = 1 and \e alpha2 + \e alphap2
+     * = 1.  (No checking is done that these conditions are met.)  This
+     * constructor is provided to enable accuracy to be maintained, e.g., when
+     * is very small.
      **********************************************************************/
-    Math::real m() const throw() { return _m; }
+    void Reset(real k2, real alpha2, real kp2, real alphap2) throw();
+
+    ///@}
 
+    /** \name Inspector functions.
+     **********************************************************************/
+    ///@{
     /**
-     * @return the complementary parameter \e m' = (1 - \e m).
+     * @return the square of the modulus <i>k</i><sup>2</sup>.
      **********************************************************************/
-    Math::real m1() const throw() { return _m1; }
+    Math::real k2() const throw() { return _k2; }
 
     /**
-     * @return the complete integral of first kind, \e K(\e m).
+     * @return the square of the complementary modulus <i>k'</i><sup>2</sup> =
+     *   1 − <i>k</i><sup>2</sup>.
      **********************************************************************/
-    Math::real K() const throw() { _init || Init(); return _kc; }
+    Math::real kp2() const throw() { return _kp2; }
 
     /**
-     * @return the complete integral of second kind, \e E(\e m).
+     * @return the parameter α<sup>2</sup>.
      **********************************************************************/
-    Math::real E() const throw() { _init || Init(); return _ec; }
+    Math::real alpha2() const throw() { return _alpha2; }
 
     /**
-     * @return the difference \e K(\e m) - \e E(\e m) (which can be computed
-     *   directly).
+     * @return the complementary parameter α'<sup>2</sup> = 1 −
+     *   α<sup>2</sup>.
      **********************************************************************/
-    Math::real KE() const throw() { _init || Init(); return _kec; }
+    Math::real alphap2() const throw() { return _alphap2; }
+    ///@}
 
+    /// \cond SKIP
     /**
-     * The Jacobi elliptic functions.
+     * @return the square of the modulus <i>k</i><sup>2</sup>.
      *
-     * @param[in] x the argument.
-     * @param[out] sn sn(<i>x</i>|<i>m</i>).
-     * @param[out] cn cn(<i>x</i>|<i>m</i>).
-     * @param[out] dn dn(<i>x</i>|<i>m</i>).
+     * <b>DEPRECATED</b>, use k2() instead.
      **********************************************************************/
-    void sncndn(real x, real& sn, real& cn, real& dn) const throw();
+    Math::real m() const throw() { return _k2; }
+    /**
+     * @return the square of the complementary modulus <i>k'</i><sup>2</sup> =
+     *   1 − <i>k</i><sup>2</sup>.
+     *
+     * <b>DEPRECATED</b>, use kp2() instead.
+     **********************************************************************/
+    Math::real m1() const throw() { return _kp2; }
+    /// \endcond
+
+    /** \name Complete elliptic integrals.
+     **********************************************************************/
+    ///@{
+    /**
+     * The complete integral of the first kind.
+     *
+     * @return \e K(\e k).
+     *
+     * \e K(\e k) is defined in http://dlmf.nist.gov/19.2.E4
+     * \f[
+     *   K(k) = \int_0^{\pi/2} \frac1{\sqrt{1-k^2\sin^2\phi}}\,d\phi.
+     * \f]
+     **********************************************************************/
+    Math::real K() const throw() { _init || Init(); return _Kc; }
+
+    /**
+     * The complete integral of the second kind.
+     *
+     * @return \e E(\e k)
+     *
+     * \e E(\e k) is defined in http://dlmf.nist.gov/19.2.E5
+     * \f[
+     *   E(k) = \int_0^{\pi/2} \sqrt{1-k^2\sin^2\phi}\,d\phi.
+     * \f]
+     **********************************************************************/
+    Math::real E() const throw() { _init || Init(); return _Ec; }
+
+    /**
+     * Jahnke's complete integral.
+     *
+     * @return \e D(\e k).
+     *
+     * \e D(\e k) is defined in http://dlmf.nist.gov/19.2.E6
+     * \f[
+     *   D(k) = \int_0^{\pi/2} \frac{\sin^2\phi}{\sqrt{1-k^2\sin^2\phi}}\,d\phi.
+     * \f]
+     **********************************************************************/
+    Math::real D() const throw() { _init || Init(); return _Dc; }
+
+    /**
+     * The difference between the complete integrals of the first and second
+     * kinds.
+     *
+     * @return \e K(\e k) − \e E(\e k).
+     **********************************************************************/
+    Math::real KE() const throw() { _init || Init(); return _k2 * _Dc; }
+
+    /**
+     * The complete integral of the third kind.
+     *
+     * @return Π(α<sup>2</sup>, \e k)
+     *
+     * Π(α<sup>2</sup>, \e k) is defined in
+     * http://dlmf.nist.gov/19.2.E7
+     * \f[
+     *   \Pi(\alpha^2, k) = \int_0^{\pi/2}
+     *     \frac1{\sqrt{1-k^2\sin^2\phi}(1 - \alpha^2\sin^2\phi_)}\,d\phi.
+     * \f]
+     **********************************************************************/
+    Math::real Pi() const throw() { _init || Init(); return _Pic; }
+
+    /**
+     * Legendre's complete geodesic longitude integral.
+     *
+     * @return \e G(α<sup>2</sup>, \e k)
+     *
+     * \e G(α<sup>2</sup>, \e k) is given by
+     * \f[
+     *   G(\alpha^2, k) = \int_0^{\pi/2}
+     *     \frac{\sqrt{1-k^2\sin^2\phi}}{1 - \alpha^2\sin^2\phi}\,d\phi.
+     * \f]
+     **********************************************************************/
+    Math::real G() const throw() { _init || Init(); return _Gc; }
+
+    /**
+     * Cayley's complete geodesic longitude difference integral.
+     *
+     * @return \e H(α<sup>2</sup>, \e k)
+     *
+     * \e H(α<sup>2</sup>, \e k) is given by
+     * \f[
+     *   H(\alpha^2, k) = \int_0^{\pi/2}
+     *     \frac{\cos^2\phi}{(1-\alpha^2\sin^2\phi)\sqrt{1-k^2\sin^2\phi}}
+     *     \,d\phi.
+     * \f]
+     **********************************************************************/
+    Math::real H() const throw() { _init || Init(); return _Hc; }
+    ///@}
+
+    /** \name Incomplete elliptic integrals.
+     **********************************************************************/
+    ///@{
+    /**
+     * The incomplete integral of the first kind.
+     *
+     * @param[in] phi
+     * @return \e F(φ, \e k).
+     *
+     * \e F(φ, \e k) is defined in http://dlmf.nist.gov/19.2.E4
+     * \f[
+     *   F(\phi, k) = \int_0^\phi \frac1{\sqrt{1-k^2\sin^2\theta}}\,d\theta.
+     * \f]
+     **********************************************************************/
+    Math::real F(real phi) const throw();
 
     /**
      * The incomplete integral of the second kind.
      *
      * @param[in] phi
-     * @return int sqrt(1 -  \e m sin<sup>2</sup>(\e phi)) \e dphi.
+     * @return \e E(φ, \e k).
+     *
+     * \e E(φ, \e k) is defined in http://dlmf.nist.gov/19.2.E5
+     * \f[
+     *   E(\phi, k) = \int_0^\phi \sqrt{1-k^2\sin^2\theta}\,d\theta.
+     * \f]
      **********************************************************************/
     Math::real E(real phi) const throw();
 
     /**
-     * The incomplete integral of the second kind in terms of Jacobi elliptic
-     * functions
+     * The incomplete integral of the second kind with the argument given in
+     * degrees.
+     *
+     * @param[in] ang in <i>degrees</i>.
+     * @return \e E(π <i>ang</i>/180, \e k).
+     **********************************************************************/
+    Math::real Ed(real ang) const throw();
+
+    /**
+     * The inverse of the incomplete integral of the second kind.
+     *
+     * @param[in] x
+     * @return φ = <i>E</i><sup>−1</sup>(\e x, \e k); i.e., the
+     *   solution of such that \e E(φ, \e k) = \e x.
+     **********************************************************************/
+    Math::real Einv(real x) const throw();
+
+    /**
+     * The incomplete integral of the third kind.
+     *
+     * @param[in] phi
+     * @return Π(φ, α<sup>2</sup>, \e k).
+     *
+     * Π(φ, α<sup>2</sup>, \e k) is defined in
+     * http://dlmf.nist.gov/19.2.E7
+     * \f[
+     *   \Pi(\phi, \alpha^2, k) = \int_0^\phi
+     *     \frac1{\sqrt{1-k^2\sin^2\theta}(1 - \alpha^2\sin^2\theta_)}\,d\theta.
+     * \f]
+     **********************************************************************/
+    Math::real Pi(real phi) const throw();
+
+    /**
+     * Jahnke's incomplete elliptic integral.
+     *
+     * @param[in] phi
+     * @return \e D(φ, \e k).
+     *
+     * \e D(φ, \e k) is defined in http://dlmf.nist.gov/19.2.E4
+     * \f[
+     *   D(\phi, k) = \int_0^\phi
+     *    \frac{\sin^2\theta}{\sqrt{1-k^2\sin^2\theta}}\,d\theta.
+     * \f]
+     **********************************************************************/
+    Math::real D(real phi) const throw();
+
+    /**
+     * Legendre's geodesic longitude integral.
+     *
+     * @param[in] phi
+     * @return \e G(φ, α<sup>2</sup>, \e k).
+     *
+     * \e G(φ, α<sup>2</sup>, \e k) is defined by
+     * \f[
+     *   \begin{aligned}
+     *   G(\phi, \alpha^2, k) &=
+     *   \frac{k^2}{\alpha^2} F(\phi, k) +
+     *      \biggl(1 - \frac{k^2}{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\
+     *    &= \int_0^\phi
+     *     \frac{\sqrt{1-k^2\sin^2\theta}}{1 - \alpha^2\sin^2\theta}\,d\theta.
+     *   \end{aligned}
+     * \f]
+     *
+     * Legendre expresses the longitude of a point on the geodesic in terms of
+     * this combination of elliptic integrals in Exercices de Calcul
+     * Intégral, Vol. 1 (1811), p. 181,
+     * http://books.google.com/books?id=riIOAAAAQAAJ&pg=PA181.
+     *
+     * See \ref geodellip for the expression for the longitude in terms of this
+     * function.
+     **********************************************************************/
+    Math::real G(real phi) const throw();
+
+    /**
+     * Cayley's geodesic longitude difference integral.
+     *
+     * @param[in] phi
+     * @return \e H(φ, α<sup>2</sup>, \e k).
+     *
+     * \e H(φ, α<sup>2</sup>, \e k) is defined by
+     * \f[
+     *   \begin{aligned}
+     *   H(\phi, \alpha^2, k) &=
+     *   \frac1{\alpha^2} F(\phi, k) +
+     *        \biggl(1 - \frac1{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\
+     *   &= \int_0^\phi
+     *     \frac{\cos^2\theta}{(1-\alpha^2\sin^2\theta)\sqrt{1-k^2\sin^2\theta}}
+     *     \,d\theta.
+     *   \end{aligned}
+     * \f]
+     *
+     * Cayley expresses the longitude difference of a point on the geodesic in
+     * terms of this combination of elliptic integrals in Phil. Mag. <b>40</b>
+     * (1870), p. 333, http://books.google.com/books?id=Zk0wAAAAIAAJ&pg=PA333.
+     *
+     * See \ref geodellip for the expression for the longitude in terms of this
+     * function.
+     **********************************************************************/
+    Math::real H(real phi) const throw();
+    ///@}
+
+    /** \name Incomplete integrals in terms of Jacobi elliptic functions.
+     **********************************************************************/
+    /**
+     * The incomplete integral of the first kind in terms of Jacobi elliptic
+     * functions.
      *
-     * @param[in] sn
-     * @param[in] cn
-     * @param[in] dn
-     * @return int dn(\e w)<sup>2</sup> \e dw (A+S 17.2.10).
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return \e F(φ, \e k) as though φ ∈ (−π, π].
+     **********************************************************************/
+    Math::real F(real sn, real cn, real dn) const throw();
+
+    /**
+     * The incomplete integral of the second kind in terms of Jacobi elliptic
+     * functions.
      *
-     * Instead of specifying the amplitude \e phi, we provide \e sn = sin(\e
-     * phi), \e cn = cos(\e phi), \e dn = sqrt(1 - \e m sin<sup>2</sup>(\e
-     * phi)).
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return \e E(φ, \e k) as though φ ∈ (−π, π].
      **********************************************************************/
     Math::real E(real sn, real cn, real dn) const throw();
-  };
 
+    /**
+     * The incomplete integral of the third kind in terms of Jacobi elliptic
+     * functions.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return Π(φ, α<sup>2</sup>, \e k) as though φ ∈
+     *   (−π, π].
+     **********************************************************************/
+    Math::real Pi(real sn, real cn, real dn) const throw();
+
+    /**
+     * Jahnke's incomplete elliptic integral in terms of Jacobi elliptic
+     * functions.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return \e D(φ, \e k) as though φ ∈ (−π, π].
+     **********************************************************************/
+    Math::real D(real sn, real cn, real dn) const throw();
+
+    /**
+     * Legendre's geodesic longitude integral in terms of Jacobi elliptic
+     * functions.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return \e G(φ, α<sup>2</sup>, \e k) as though φ ∈
+     *   (−π, π].
+     **********************************************************************/
+    Math::real G(real sn, real cn, real dn) const throw();
+
+    /**
+     * Cayley's geodesic longitude difference integral in terms of Jacobi
+     * elliptic functions.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return \e H(φ, α<sup>2</sup>, \e k) as though φ ∈
+     *   (−π, π].
+     **********************************************************************/
+    Math::real H(real sn, real cn, real dn) const throw();
+    ///@}
+
+    /** \name Periodic versions of incomplete elliptic integrals.
+     **********************************************************************/
+    ///@{
+    /**
+     * The periodic incomplete integral of the first kind.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return the periodic function π \e F(φ, \e k) / (2 \e K(\e k)) -
+     *   φ
+     **********************************************************************/
+    Math::real deltaF(real sn, real cn, real dn) const throw();
+
+    /**
+     * The periodic incomplete integral of the second kind.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return the periodic function π \e E(φ, \e k) / (2 \e E(\e k)) -
+     *   φ
+     **********************************************************************/
+    Math::real deltaE(real sn, real cn, real dn) const throw();
+
+    /**
+     * The periodic inverse of the incomplete integral of the second kind.
+     *
+     * @param[in] stau = sinτ
+     * @param[in] ctau = sinτ
+     * @return the periodic function <i>E</i><sup>−1</sup>(τ (2 \e
+     *   E(\e k)/π), \e k) - τ
+     **********************************************************************/
+    Math::real deltaEinv(real stau, real ctau) const throw();
+
+    /**
+     * The periodic incomplete integral of the third kind.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return the periodic function π Π(φ, \e k) / (2 Π(\e k)) -
+     *   φ
+     **********************************************************************/
+    Math::real deltaPi(real sn, real cn, real dn) const throw();
+
+    /**
+     * The periodic Jahnke's incomplete elliptic integral.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return the periodic function π \e D(φ, \e k) / (2 \e D(\e k)) -
+     *   φ
+     **********************************************************************/
+    Math::real deltaD(real sn, real cn, real dn) const throw();
+
+    /**
+     * Legendre's periodic geodesic longitude integral.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return the periodic function π \e G(φ, \e k) / (2 \e G(\e k)) -
+     *   φ
+     **********************************************************************/
+    Math::real deltaG(real sn, real cn, real dn) const throw();
+
+    /**
+     * Cayley's periodic geodesic longitude difference integral.
+     *
+     * @param[in] sn = sinφ
+     * @param[in] cn = cosφ
+     * @param[in] dn = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     * @return the periodic function π \e H(φ, \e k) / (2 \e H(\e k)) -
+     *   φ
+     **********************************************************************/
+    Math::real deltaH(real sn, real cn, real dn) const throw();
+    ///@}
+
+    /** \name Elliptic functions.
+     **********************************************************************/
+    ///@{
+    /**
+     * The Jacobi elliptic functions.
+     *
+     * @param[in] x the argument.
+     * @param[out] sn sn(\e x, \e k).
+     * @param[out] cn cn(\e x, \e k).
+     * @param[out] dn dn(\e x, \e k).
+     **********************************************************************/
+    void sncndn(real x, real& sn, real& cn, real& dn) const throw();
+
+    /**
+     * The Δ amplitude function.
+     *
+     * @param[in] sn sinφ
+     * @param[in] cn cosφ
+     * @return Δ = sqrt(1 − <i>k</i><sup>2</sup>
+     *   sin<sup>2</sup>φ)
+     **********************************************************************/
+    Math::real Delta(real sn, real cn) const throw()
+    { return std::sqrt(_k2 < 0 ? 1 - _k2 * sn*sn : _kp2 + _k2 * cn*cn); }
+    ///@}
+
+    /** \name Symmetric elliptic integrals.
+     **********************************************************************/
+    ///@{
+    /**
+     * Symmetric integral of the first kind <i>R<sub>F</sub></i>.
+     *
+     * @param[in] x
+     * @param[in] y
+     * @param[in] z
+     * @return <i>R<sub>F</sub></i>(\e x, \e y, \e z)
+     *
+     * <i>R<sub>F</sub></i> is defined in http://dlmf.nist.gov/19.16.E1
+     * \f[ R_F(x, y, z) = \frac12
+     *       \int_0^\infty\frac1{\sqrt{(t + x) (t + y) (t + z)}}\, dt \f]
+     * If one of the arguments is zero, it is more efficient to call the
+     * two-argument version of this function with the non-zero arguments.
+     **********************************************************************/
+    static real RF(real x, real y, real z) throw();
+
+    /**
+     * Complete symmetric integral of the first kind, <i>R<sub>F</sub></i> with
+     * one argument zero.
+     *
+     * @param[in] x
+     * @param[in] y
+     * @return <i>R<sub>F</sub></i>(\e x, \e y, 0)
+     **********************************************************************/
+    static real RF(real x, real y) throw();
+
+    /**
+     * Degenerate symmetric integral of the first kind <i>R<sub>C</sub></i>.
+     *
+     * @param[in] x
+     * @param[in] y
+     * @return <i>R<sub>C</sub></i>(\e x, \e y) = <i>R<sub>F</sub></i>(\e x, \e
+     *   y, \e y)
+     *
+     * <i>R<sub>C</sub></i> is defined in http://dlmf.nist.gov/19.2.E17
+     * \f[ R_C(x, y) = \frac12
+     *       \int_0^\infty\frac1{\sqrt{t + x}(t + y)}\,dt \f]
+     **********************************************************************/
+    static real RC(real x, real y) throw();
+
+    /**
+     * Symmetric integral of the second kind <i>R<sub>G</sub></i>.
+     *
+     * @param[in] x
+     * @param[in] y
+     * @param[in] z
+     * @return <i>R<sub>G</sub></i>(\e x, \e y, \e z)
+     *
+     * <i>R<sub>G</sub></i> is defined in Carlson, eq 1.5
+     * \f[ R_G(x, y, z) = \frac14
+     *       \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2}
+     *        \biggl(
+     *             \frac x{t + x} + \frac y{t + y} + \frac z{t + z}
+     *        \biggr)t\,dt \f]
+     * See also http://dlmf.nist.gov/19.16.E3.
+     * If one of the arguments is zero, it is more efficient to call the
+     * two-argument version of this function with the non-zero arguments.
+     **********************************************************************/
+    static real RG(real x, real y, real z) throw();
+
+    /**
+     * Complete symmetric integral of the second kind, <i>R<sub>G</sub></i>
+     * with one argument zero.
+     *
+     * @param[in] x
+     * @param[in] y
+     * @return <i>R<sub>G</sub></i>(\e x, \e y, 0)
+     **********************************************************************/
+    static real RG(real x, real y) throw();
+
+    /**
+     * Symmetric integral of the third kind <i>R<sub>J</sub></i>.
+     *
+     * @param[in] x
+     * @param[in] y
+     * @param[in] z
+     * @param[in] p
+     * @return <i>R<sub>J</sub></i>(\e x, \e y, \e z, \e p)
+     *
+     * <i>R<sub>J</sub></i> is defined in http://dlmf.nist.gov/19.16.E2
+     * \f[ R_J(x, y, z, p) = \frac32
+     *       \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2} (t + p)^{-1}\, dt \f]
+     **********************************************************************/
+    static real RJ(real x, real y, real z, real p) throw();
+
+    /**
+     * Degenerate symmetric integral of the third kind <i>R<sub>D</sub></i>.
+     *
+     * @param[in] x
+     * @param[in] y
+     * @param[in] z
+     * @return <i>R<sub>D</sub></i>(\e x, \e y, \e z) = <i>R<sub>J</sub></i>(\e
+     *   x, \e y, \e z, \e z)
+     *
+     * <i>R<sub>D</sub></i> is defined in http://dlmf.nist.gov/19.16.E5
+     * \f[ R_D(x, y, z) = \frac32
+     *       \int_0^\infty[(t + x) (t + y)]^{-1/2} (t + z)^{-3/2}\, dt \f]
+     **********************************************************************/
+    static real RD(real x, real y, real z) throw();
+    ///@}
+
+  };
 
 } // namespace GeographicLib
 
diff --git a/include/GeographicLib/GeoCoords.hpp b/include/GeographicLib/GeoCoords.hpp
index 26a5e71..b97a692 100644
--- a/include/GeographicLib/GeoCoords.hpp
+++ b/include/GeographicLib/GeoCoords.hpp
@@ -7,9 +7,8 @@
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
-#ifndef GEOGRAPHICLIB_GEOCOORDS_HPP
-#define GEOGRAPHICLIB_GEOCOORDS_HPP \
-  "$Id: e706d3a35c3be0e2beaf39041cac29beb468a5aa $"
+#if !defined(GEOGRAPHICLIB_GEOCOORDS_HPP)
+#define GEOGRAPHICLIB_GEOCOORDS_HPP 1
 
 #include <GeographicLib/UTMUPS.hpp>
 #include <GeographicLib/Constants.hpp>
@@ -47,7 +46,7 @@ namespace GeographicLib {
    * <a href="GeoConvert.1.html">GeoConvert</a> is a command-line utility
    * providing access to the functionality of GeoCoords.
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT GeoCoords {
+  class GEOGRAPHICLIB_EXPORT GeoCoords {
   private:
     typedef Math::real real;
     real _lat, _long, _easting, _northing, _gamma, _k;
@@ -63,8 +62,8 @@ namespace GeographicLib {
       _alt_k = _k;
       _alt_zone = _zone;
     }
-    void UTMUPSString(int zone, real easting, real northing,
-                      int prec, std::string& utm) const;
+    static void UTMUPSString(int zone, bool northp, real easting, real northing,
+                             int prec, std::string& utm);
     void FixHemisphere();
   public:
 
@@ -72,8 +71,8 @@ namespace GeographicLib {
      **********************************************************************/
     ///@{
     /**
-     * The default constructor is equivalent to \e latitude = 90<sup>o</sup>,
-     * \e longitude = 0<sup>o</sup>.
+     * The default constructor is equivalent to \e latitude = 90°,
+     * \e longitude = 0°.
      **********************************************************************/
     GeoCoords() throw()
       // This is the N pole
@@ -94,6 +93,7 @@ namespace GeographicLib {
      *   below).
      * @param[in] swaplatlong governs the interpretation of geographic
      *   coordinates (see below).
+     * @exception GeographicErr if the \e s is malformed (see below).
      *
      * Parse as a string and interpret it as a geographic position.  The input
      * string is broken into space (or comma) separated pieces and Basic
@@ -117,11 +117,11 @@ namespace GeographicLib {
      *   -  38N 339188 3701405
      *   -  897039 3708229 37N
      *
-     * Latitude and Longitude parsing.  Latitude precedes longitude, unless a
-     * N, S, E, W hemisphere designator is used on one or both coordinates.  If
-     * \e swaplatlong = true (default is false), then longitude precedes
-     * latitude in the absence of a hemisphere designator.  Thus (with \e
-     * swaplatlong = false)
+     * <b>Latitude and Longitude parsing</b>: Latitude precedes longitude,
+     * unless a N, S, E, W hemisphere designator is used on one or both
+     * coordinates.  If \e swaplatlong = true (default is false), then
+     * longitude precedes latitude in the absence of a hemisphere designator.
+     * Thus (with \e swaplatlong = false)
      * - 40 -75
      * - N40 W75
      * - -75 N40
@@ -131,10 +131,12 @@ namespace GeographicLib {
      * are all the same position.  The coordinates may be given in
      * decimal degrees, degrees and decimal minutes, degrees, minutes,
      * seconds, etc.  Use d, ', and " to mark off the degrees,
-     * minutes and seconds.  Alternatively, use : to separate these
-     * components.  Thus
+     * minutes and seconds.  Various alternative symbols for degrees, minutes,
+     * and seconds are allowed.  Alternatively, use : to separate these
+     * components.  (See DMS::Decode for details.)  Thus
      * - 40d30'30"
      * - 40d30'30
+     * - 40°30'30
      * - 40d30.5'
      * - 40d30.5
      * - 40:30:30
@@ -142,18 +144,20 @@ namespace GeographicLib {
      * - 40.508333333
      * .
      * all specify the same angle.  The leading sign applies to all components
-     * so -1d30 is -(1+30/60) = -1.5.  Latitudes must be in the range [-90, 90]
-     * and longitudes in the range [-180, 360].  Internally longitudes are
-     * reduced to the range [-180, 180).
+     * so -1d30 is -(1+30/60) = -1.5.  Latitudes must be in the range
+     * [−90°, 90°] and longitudes in the range
+     * [−540°, 540°).  Internally longitudes are reduced
+     * to the range [−180°, 180°).
      *
-     * UTM/UPS parsing.  For UTM zones (-80 <= Lat <= 84), the zone designator
-     * is made up of a zone number (for 1 to 60) and a hemisphere letter (N or
-     * S), e.g., 38N.  The latitude zone designer ([C–M] in the southern
-     * hemisphere and [N–X] in the northern) should NOT be used.  (This
-     * is part of the MGRS coordinate.)  The zone designator for the poles
-     * (where UPS is employed) is a hemisphere letter by itself, i.e., N or S.
+     * <b>UTM/UPS parsing</b>: For UTM zones (−80° ≤ Lat <
+     * 84°), the zone designator is made up of a zone number (for 1 to 60)
+     * and a hemisphere letter (N or S), e.g., 38N.  The latitude zone designer
+     * ([C--M] in the southern hemisphere and [N--X] in the northern) should
+     * NOT be used.  (This is part of the MGRS coordinate.)  The zone
+     * designator for the poles (where UPS is employed) is a hemisphere letter
+     * by itself, i.e., N or S.
      *
-     * MGRS parsing interprets the grid references as square area at the
+     * <b>MGRS parsing</b> interprets the grid references as square area at the
      * specified precision (1m, 10m, 100m, etc.).  If \e centerp = true (the
      * default), the center of this square is then taken to be the precise
      * position; thus:
@@ -177,6 +181,11 @@ namespace GeographicLib {
      * @param[in] longitude (degrees).
      * @param[in] zone if specified, force the UTM/UPS representation to use a
      *   specified zone using the rules given in UTMUPS::zonespec.
+     * @exception GeographicErr if \e latitude is not in [−90°,
+     *   90°].
+     * @exception GeographicErr if \e longitude is not in [−540°,
+     *   540°).
+     * @exception GeographicErr if \e zone cannot be used for this location.
      **********************************************************************/
     GeoCoords(real latitude, real longitude, int zone = UTMUPS::STANDARD) {
       Reset(latitude, longitude, zone);
@@ -189,6 +198,8 @@ namespace GeographicLib {
      * @param[in] northp hemisphere (true means north, false means south).
      * @param[in] easting (meters).
      * @param[in] northing (meters).
+     * @exception GeographicErr if \e zone, \e easting, or \e northing is
+     *   outside its allowed range.
      **********************************************************************/
     GeoCoords(int zone, bool northp, real easting, real northing) {
       Reset(zone, northp, easting, northing);
@@ -197,6 +208,13 @@ namespace GeographicLib {
     /**
      * Reset the location from a string.  See
      * GeoCoords(const std::string& s, bool centerp, bool swaplatlong).
+     *
+     * @param[in] s 1-element, 2-element, or 3-element string representation of
+     *   the position.
+     * @param[in] centerp governs the interpretation of MGRS coordinates.
+     * @param[in] swaplatlong governs the interpretation of geographic
+     *   coordinates.
+     * @exception GeographicErr if the \e s is malformed.
      **********************************************************************/
     void Reset(const std::string& s,
                bool centerp = true, bool swaplatlong = false);
@@ -204,6 +222,16 @@ namespace GeographicLib {
     /**
      * Reset the location in terms of geographic coordinates.  See
      * GeoCoords(real latitude, real longitude, int zone).
+     *
+     * @param[in] latitude (degrees).
+     * @param[in] longitude (degrees).
+     * @param[in] zone if specified, force the UTM/UPS representation to use a
+     *   specified zone using the rules given in UTMUPS::zonespec.
+     * @exception GeographicErr if \e latitude is not in [−90°,
+     *   90°].
+     * @exception GeographicErr if \e longitude is not in [−540°,
+     *   540°).
+     * @exception GeographicErr if \e zone cannot be used for this location.
      **********************************************************************/
     void Reset(real latitude, real longitude, int zone = UTMUPS::STANDARD) {
       UTMUPS::Forward(latitude, longitude,
@@ -211,14 +239,21 @@ namespace GeographicLib {
                       zone);
       _lat = latitude;
       _long = longitude;
-      if (_long >= 180)
-        _long -= 360;
+      if (_long >= 180) _long -= 360;
+      else if (_long < -180) _long += 360;
       CopyToAlt();
     }
 
     /**
      * Reset the location in terms of UPS/UPS coordinates.  See
      * GeoCoords(int zone, bool northp, real easting, real northing).
+     *
+     * @param[in] zone UTM zone (zero means UPS).
+     * @param[in] northp hemisphere (true means north, false means south).
+     * @param[in] easting (meters).
+     * @param[in] northing (meters).
+     * @exception GeographicErr if \e zone, \e easting, or \e northing is
+     *   outside its allowed range.
      **********************************************************************/
     void Reset(int zone, bool northp, real easting, real northing) {
       UTMUPS::Reverse(zone, northp, easting, northing,
@@ -289,6 +324,7 @@ namespace GeographicLib {
      * Specify alternate zone number.
      *
      * @param[in] zone zone number for the alternate representation.
+     * @exception GeographicErr if \e zone cannot be used for this location.
      *
      * See UTMUPS::zonespec for more information on the interpretation of \e
      * zone.  Note that \e zone == UTMUPS::STANDARD (the default) use the
@@ -346,13 +382,14 @@ namespace GeographicLib {
      *
      * @param[in] prec precision (relative to about 1m).
      * @param[in] swaplatlong if true give longitude first (default = false)
+     * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return decimal latitude/longitude string representation.
      *
      * Precision specifies accuracy of representation as follows:
-     * - prec = -5 (min), 1d
-     * - prec = 0, 10<sup>-5</sup>d (about 1m)
-     * - prec = 3, 10<sup>-8</sup>d
-     * - prec = 9 (max), 10<sup>-14</sup>d
+     * - prec = −5 (min), 1°
+     * - prec = 0, 10<sup>−5</sup>° (about 1m)
+     * - prec = 3, 10<sup>−8</sup>°
+     * - prec = 9 (max), 10<sup>−14</sup>°
      **********************************************************************/
     std::string GeoRepresentation(int prec = 0, bool swaplatlong = false) const;
 
@@ -364,57 +401,43 @@ namespace GeographicLib {
      * @param[in] swaplatlong if true give longitude first (default = false)
      * @param[in] dmssep if non-null, use as the DMS separator character
      *   (instead of d, ', " delimiters).
+     * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return DMS latitude/longitude string representation.
      *
      * Precision specifies accuracy of representation as follows:
-     * - prec = -5 (min), 1d
-     * - prec = -4, 0.1d
-     * - prec = -3, 1'
-     * - prec = -2, 0.1'
-     * - prec = -1, 1"
+     * - prec = −5 (min), 1°
+     * - prec = −4, 0.1°
+     * - prec = −3, 1'
+     * - prec = −2, 0.1'
+     * - prec = −1, 1"
      * - prec = 0, 0.1" (about 3m)
      * - prec = 1, 0.01"
-     * - prec = 10 (max), 10<sup>-11</sup>"
+     * - prec = 10 (max), 10<sup>−11</sup>"
      **********************************************************************/
-    std::string DMSRepresentation(int prec, bool swaplatlong, char dmssep)
+    std::string DMSRepresentation(int prec = 0, bool swaplatlong = false,
+                                  char dmssep = char(0))
       const;
 
     /**
-     * String representation with latitude and longitude as degrees, minutes,
-     * seconds, and hemisphere.
-     *
-     * @param[in] prec precision (relative to about 1m)
-     * @param[in] swaplatlong if true give longitude first (default = false)
-     * @return DMS latitude/longitude string representation.
-     *
-     * <b>COMPATIBILITY NOTE:</b> This function calls
-     * DMSRepresentation(int, bool, char) const with a 3rd argument of
-     * char(0).  At some point, DMSRepresentation(int, bool) const and
-     * will be withdrawn and the interface to
-     * DMSRepresentation(int, bool, char) const changed so that its
-     * arguments have default values.  This will preserve source-level
-     * compatibility.
-     **********************************************************************/
-    std::string DMSRepresentation(int prec = 0, bool swaplatlong = false) const;
-
-    /**
      * MGRS string.
      *
      * @param[in] prec precision (relative to about 1m).
+     * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return MGRS string.
      *
      * This gives the coordinates of the enclosing grid square with size given
      * by the precision.  Thus 38N 444180 3684790 converted to a MGRS
-     * coordinate at precision -2 (100m) is 38SMB441847 and not 38SMB442848.
-     * \e prec specifies the precision of the MGRS string as follows:
-     * - prec = -5 (min), 100km
-     * - prec = -4, 10km
-     * - prec = -3, 1km
-     * - prec = -2, 100m
-     * - prec = -1, 10m
+     * coordinate at precision −2 (100m) is 38SMB441847 and not
+     * 38SMB442848.  \e prec specifies the precision of the MGRS string as
+     * follows:
+     * - prec = −5 (min), 100km
+     * - prec = −4, 10km
+     * - prec = −3, 1km
+     * - prec = −2, 100m
+     * - prec = −1, 10m
      * - prec = 0, 1m
      * - prec = 1, 0.1m
-     * - prec = 6 (max), 1um
+     * - prec = 6 (max), 1μm
      **********************************************************************/
     std::string MGRSRepresentation(int prec = 0) const;
 
@@ -422,29 +445,65 @@ namespace GeographicLib {
      * UTM/UPS string.
      *
      * @param[in] prec precision (relative to about 1m)
+     * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return UTM/UPS string representation: zone designator, easting, and
      *   northing.
      *
      * Precision specifies accuracy of representation as follows:
-     * - prec = -5 (min), 100km
-     * - prec = -3, 1km
+     * - prec = −5 (min), 100km
+     * - prec = −3, 1km
      * - prec = 0, 1m
      * - prec = 3, 1mm
-     * - prec = 6, 1um
+     * - prec = 6, 1μm
      * - prec = 9 (max), 1nm
      **********************************************************************/
     std::string UTMUPSRepresentation(int prec = 0) const;
 
     /**
+     * UTM/UPS string with hemisphere override.
+     *
+     * @param[in] prec precision (relative to about 1m)
+     * @param[in] northp hemisphere override
+     * @exception GeographicErr if the hemisphere override attempts to change
+     *   UPS N to UPS S or vice verse.
+     * @exception std::bad_alloc if memory for the string can't be allocated.
+     * @return UTM/UPS string representation: zone designator, easting, and
+     *   northing.
+     **********************************************************************/
+    std::string UTMUPSRepresentation(bool northp, int prec = 0) const;
+
+    /**
      * MGRS string for the alternate zone.  See GeoCoords::MGRSRepresentation.
+     *
+     * @param[in] prec precision (relative to about 1m).
+     * @exception std::bad_alloc if memory for the string can't be allocated.
+     * @return MGRS string.
      **********************************************************************/
     std::string AltMGRSRepresentation(int prec = 0) const;
 
     /**
      * UTM/UPS string for the alternate zone.  See
      * GeoCoords::UTMUPSRepresentation.
+     *
+     * @param[in] prec precision (relative to about 1m)
+     * @exception std::bad_alloc if memory for the string can't be allocated.
+     * @return UTM/UPS string representation: zone designator, easting, and
+     *   northing.
      **********************************************************************/
     std::string AltUTMUPSRepresentation(int prec = 0) const;
+
+    /**
+     * UTM/UPS string for the alternate zone, with hemisphere override.
+     *
+     * @param[in] prec precision (relative to about 1m)
+     * @param[in] northp hemisphere override
+     * @exception GeographicErr if the hemisphere override attempts to change
+     *   UPS N to UPS S or vice verse.
+     * @exception std::bad_alloc if memory for the string can't be allocated.
+     * @return UTM/UPS string representation: zone designator, easting, and
+     *   northing.
+     **********************************************************************/
+    std::string AltUTMUPSRepresentation(bool northp, int prec = 0) const;
     ///@}
 
     /** \name Inspector functions
diff --git a/include/GeographicLib/Geocentric.hpp b/include/GeographicLib/Geocentric.hpp
index 26bea45..3afdb0b 100644
--- a/include/GeographicLib/Geocentric.hpp
+++ b/include/GeographicLib/Geocentric.hpp
@@ -8,11 +8,9 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_GEOCENTRIC_HPP)
-#define GEOGRAPHICLIB_GEOCENTRIC_HPP \
-  "$Id: e9f709c85e61f60509c492429061cba04350eea8 $"
+#define GEOGRAPHICLIB_GEOCENTRIC_HPP 1
 
 #include <vector>
-#include <algorithm>
 #include <GeographicLib/Constants.hpp>
 
 namespace GeographicLib {
@@ -24,7 +22,7 @@ namespace GeographicLib {
    * lon, height = \e h (measured vertically from the surface of the ellipsoid)
    * to geocentric coordinates (\e X, \e Y, \e Z).  The origin of geocentric
    * coordinates is at the center of the earth.  The \e Z axis goes thru the
-   * north pole, \e lat = 90<sup>o</sup>.  The \e X axis goes thru \e lat = 0,
+   * north pole, \e lat = 90°.  The \e X axis goes thru \e lat = 0,
    * \e lon = 0.  %Geocentric coordinates are also known as earth centered,
    * earth fixed (ECEF) coordinates.
    *
@@ -33,7 +31,7 @@ namespace GeographicLib {
    * - H. Vermeille,
    *   <a href="http://dx.doi.org/10.1007/s00190-002-0273-6"> Direct
    *   transformation from geocentric coordinates to geodetic coordinates</a>,
-   *   J. Geodesy 76, 451–454 (2002).
+   *   J. Geodesy 76, 451--454 (2002).
    * .
    * Several changes have been made to ensure that the method returns accurate
    * results for all finite inputs (even if \e h is infinite).  The changes are
@@ -60,7 +58,7 @@ namespace GeographicLib {
    * providing access to the functionality of Geocentric and LocalCartesian.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT Geocentric {
+  class GEOGRAPHICLIB_EXPORT Geocentric {
   private:
     typedef Math::real real;
     friend class LocalCartesian;
@@ -107,9 +105,8 @@ namespace GeographicLib {
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
      *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
      *   to 1/\e f.
-     *
-     * An exception is thrown if either of the axes of the ellipsoid is
-     * non-positive.
+     * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+     *   positive.
      **********************************************************************/
     Geocentric(real a, real f);
 
@@ -128,8 +125,8 @@ namespace GeographicLib {
      * @param[out] Y geocentric coordinate (meters).
      * @param[out] Z geocentric coordinate (meters).
      *
-     * \e lat should be in the range [-90, 90]; \e lon and \e lon0 should be in
-     * the range [-180, 360].
+     * \e lat should be in the range [−90°, 90°]; \e lon
+     * should be in the range [−540°, 540°).
      **********************************************************************/
     void Forward(real lat, real lon, real h, real& X, real& Y, real& Z)
       const throw() {
@@ -158,7 +155,7 @@ namespace GeographicLib {
      * - in geocentric \e X, \e Y, \e Z coordinates; call this representation
      *   \e v0.
      * .
-     * Then we have \e v0 = \e M . \e v1.
+     * Then we have \e v0 = \e M ⋅ \e v1.
      **********************************************************************/
     void Forward(real lat, real lon, real h, real& X, real& Y, real& Z,
                  std::vector<real>& M)
@@ -188,9 +185,10 @@ namespace GeographicLib {
      * latitudes (applies only if \e Z = 0), then the solution with \e lat > 0
      * is returned.  If there are still multiple solutions with different
      * longitudes (applies only if \e X = \e Y = 0) then \e lon = 0 is
-     * returned.  The value of \e h returned satisfies \e h >= - \e a (1 -
-     * <i>e</i><sup>2</sup>) / sqrt(1 - <i>e</i><sup>2</sup> sin<sup>2</sup>\e
-     * lat).  The value of \e lon returned is in the range [-180, 180).
+     * returned.  The value of \e h returned satisfies \e h ≥ − \e a
+     * (1 − <i>e</i><sup>2</sup>) / sqrt(1 − <i>e</i><sup>2</sup>
+     * sin<sup>2</sup>\e lat).  The value of \e lon returned is in the range
+     * [−180°, 180°).
      **********************************************************************/
     void Reverse(real X, real Y, real Z, real& lat, real& lon, real& h)
       const throw() {
@@ -218,8 +216,8 @@ namespace GeographicLib {
      * - in geocentric \e X, \e Y, \e Z coordinates; call this representation
      *   \e v0.
      * .
-     * Then we have \e v1 = \e M^T . \e v0, where \e M^T is the transpose of \e
-     * M.
+     * Then we have \e v1 = \e M<sup>T</sup> ⋅ \e v0, where \e
+     * M<sup>T</sup> is the transpose of \e M.
      **********************************************************************/
     void Reverse(real X, real Y, real Z, real& lat, real& lon, real& h,
                  std::vector<real>& M)
diff --git a/include/GeographicLib/Geodesic.hpp b/include/GeographicLib/Geodesic.hpp
index 8e7d48f..cd687ac 100644
--- a/include/GeographicLib/Geodesic.hpp
+++ b/include/GeographicLib/Geodesic.hpp
@@ -2,23 +2,22 @@
  * \file Geodesic.hpp
  * \brief Header for GeographicLib::Geodesic class
  *
- * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2009-2013) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_GEODESIC_HPP)
-#define GEOGRAPHICLIB_GEODESIC_HPP \
-  "$Id: c1b085aadd7b8eabe0f9518b29531a38c152d495 $"
+#define GEOGRAPHICLIB_GEODESIC_HPP 1
 
 #include <GeographicLib/Constants.hpp>
 
-#if !defined(GEOD_ORD)
+#if !defined(GEOGRAPHICLIB_GEODESIC_ORDER)
 /**
  * The order of the expansions used by Geodesic.
  **********************************************************************/
-#define GEOD_ORD \
-  (GEOGRAPHICLIB_PREC == 1 ? 6 : (GEOGRAPHICLIB_PREC == 0 ? 3 : 7))
+#  define GEOGRAPHICLIB_GEODESIC_ORDER \
+  (GEOGRAPHICLIB_PRECISION == 2 ? 6 : (GEOGRAPHICLIB_PRECISION == 1 ? 3 : 7))
 #endif
 
 namespace GeographicLib {
@@ -28,13 +27,16 @@ namespace GeographicLib {
   /**
    * \brief %Geodesic calculations
    *
-
    * The shortest path between two points on a ellipsoid at (\e lat1, \e lon1)
    * and (\e lat2, \e lon2) is called the geodesic.  Its length is \e s12 and
    * the geodesic from point 1 to point 2 has azimuths \e azi1 and \e azi2 at
    * the two end points.  (The azimuth is the heading measured clockwise from
    * north.  \e azi2 is the "forward" azimuth, i.e., the heading that takes you
-   * beyond point 2 not back to point 1.)
+   * beyond point 2 not back to point 1.)  In the figure below, latitude if
+   * labeled φ, longitude λ (with λ<sub>12</sub> =
+   * λ<sub>2</sub> − λ<sub>1</sub>), and azimuth α.
+   *
+   * <img src="http://upload.wikimedia.org/wikipedia/commons/c/cb/Geodesic_problem_on_an_ellipsoid.svg" width=250 alt="spheroidal triangle">
    *
    * Given \e lat1, \e lon1, \e azi1, and \e s12, we can determine \e lat2, \e
    * lon2, and \e azi2.  This is the \e direct geodesic problem and its
@@ -52,21 +54,21 @@ namespace GeographicLib {
    *
    * The standard way of specifying the direct problem is the specify the
    * distance \e s12 to the second point.  However it is sometimes useful
-   * instead to specify the the arc length \e a12 (in degrees) on the auxiliary
+   * instead to specify the arc length \e a12 (in degrees) on the auxiliary
    * sphere.  This is a mathematical construct used in solving the geodesic
-   * problems.  The solution of the direct problem in this form is provide by
-   * Geodesic::ArcDirect.  An arc length in excess of 180<sup>o</sup> indicates
-   * that the geodesic is not a shortest path.  In addition, the arc length
-   * between an equatorial crossing and the next extremum of latitude for a
-   * geodesic is 90<sup>o</sup>.
+   * problems.  The solution of the direct problem in this form is provided by
+   * Geodesic::ArcDirect.  An arc length in excess of 180° indicates that
+   * the geodesic is not a shortest path.  In addition, the arc length between
+   * an equatorial crossing and the next extremum of latitude for a geodesic is
+   * 90°.
    *
    * This class can also calculate several other quantities related to
    * geodesics.  These are:
    * - <i>reduced length</i>.  If we fix the first point and increase \e azi1
-   *   by \e dazi1 (radians), the the second point is displaced \e m12 \e dazi1
-   *   in the direction \e azi2 + 90<sup>o</sup>.  The quantity \e m12 is
-   *   called the "reduced length" and is symmetric under interchange of the
-   *   two points.  On a curved surface the reduced length obeys a symmetry
+   *   by \e dazi1 (radians), the second point is displaced \e m12 \e dazi1 in
+   *   the direction \e azi2 + 90°.  The quantity \e m12 is called
+   *   the "reduced length" and is symmetric under interchange of the two
+   *   points.  On a curved surface the reduced length obeys a symmetry
    *   relation, \e m12 + \e m21 = 0.  On a flat surface, we have \e m12 = \e
    *   s12.  The ratio <i>s12</i>/\e m12 gives the azimuthal scale for an
    *   azimuthal equidistant projection.
@@ -77,45 +79,83 @@ namespace GeographicLib {
    *   defined similarly (with the geodesics being parallel at point 2).  On a
    *   flat surface, we have \e M12 = \e M21 = 1.  The quantity 1/\e M12 gives
    *   the scale of the Cassini-Soldner projection.
-   * - <i>area</i>.  Consider the quadrilateral bounded by the following lines:
-   *   the geodesic from point 1 to point 2, the meridian from point 2 to the
-   *   equator, the equator from \e lon2 to \e lon1, the meridian from the
-   *   equator to point 1.  The area of this quadrilateral is represented by \e
-   *   S12 with a clockwise traversal of the perimeter counting as a positive
-   *   area and it can be used to compute the area of any simple geodesic
-   *   polygon.
+
+   * - <i>area</i>.  The area between the geodesic from point 1 to point 2 and
+   *   the equation is represented by \e S12; it is the area, measured
+   *   counter-clockwise, of the geodesic quadrilateral with corners
+   *   (<i>lat1</i>,<i>lon1</i>), (0,<i>lon1</i>), (0,<i>lon2</i>), and
+   *   (<i>lat2</i>,<i>lon2</i>).  It can be used to compute the area of any
+   *   simple geodesic polygon.
    *
    * Overloaded versions of Geodesic::Direct, Geodesic::ArcDirect, and
    * Geodesic::Inverse allow these quantities to be returned.  In addition
    * there are general functions Geodesic::GenDirect, and Geodesic::GenInverse
    * which allow an arbitrary set of results to be computed.  The quantities \e
    * m12, \e M12, \e M21 which all specify the behavior of nearby geodesics
-   * obey addition rules.  Let points 1, 2, and 3 all lie on a single geodesic,
-   * then
+   * obey addition rules.  If points 1, 2, and 3 all lie on a single geodesic,
+   * then the following rules hold:
+   * - \e s13 = \e s12 + \e s23
+   * - \e a13 = \e a12 + \e a23
+   * - \e S13 = \e S12 + \e S23
    * - \e m13 = \e m12 \e M23 + \e m23 \e M21
-   * - \e M13 = \e M12 \e M23 - (1 - \e M12 \e M21) \e m23 / \e m12
-   * - \e M31 = \e M32 \e M21 - (1 - \e M23 \e M32) \e m12 / \e m23
+   * - \e M13 = \e M12 \e M23 − (1 − \e M12 \e M21) \e m23 / \e m12
+   * - \e M31 = \e M32 \e M21 − (1 − \e M23 \e M32) \e m12 / \e m23
    *
    * Additional functionality is provided by the GeodesicLine class, which
    * allows a sequence of points along a geodesic to be computed.
    *
-   * The calculations are accurate to better than 15 nm (15 nanometers).  See
-   * Sec. 9 of
-   * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a>
-   * for details.
+   * The shortest distance returned by the solution of the inverse problem is
+   * (obviously) uniquely defined.  However, in a few special cases there are
+   * multiple azimuths which yield the same shortest distance.  Here is a
+   * catalog of those cases:
+   * - \e lat1 = −\e lat2 (with neither point at a pole).  If \e azi1 =
+   *   \e azi2, the geodesic is unique.  Otherwise there are two geodesics and
+   *   the second one is obtained by setting [\e azi1, \e azi2] = [\e azi2, \e
+   *   azi1], [\e M12, \e M21] = [\e M21, \e M12], \e S12 = −\e S12.
+   *   (This occurs when the longitude difference is near ±180° for
+   *   oblate ellipsoids.)
+   * - \e lon2 = \e lon1 ± 180° (with neither point at a pole).  If
+   *   \e azi1 = 0° or ±180°, the geodesic is unique.  Otherwise
+   *   there are two geodesics and the second one is obtained by setting [\e
+   *   azi1, \e azi2] = [−\e azi1, −\e azi2], \e S12 = −\e
+   *   S12.  (This occurs when \e lat2 is near −\e lat1 for prolate
+   *   ellipsoids.)
+   * - Points 1 and 2 at opposite poles.  There are infinitely many geodesics
+   *   which can be generated by setting [\e azi1, \e azi2] = [\e azi1, \e
+   *   azi2] + [\e d, −\e d], for arbitrary \e d.  (For spheres, this
+   *   prescription applies when points 1 and 2 are antipodal.)
+   * - s12 = 0 (coincident points).  There are infinitely many geodesics which
+   *   can be generated by setting [\e azi1, \e azi2] = [\e azi1, \e azi2] +
+   *   [\e d, \e d], for arbitrary \e d.
+   *
+   * The calculations are accurate to better than 15 nm (15 nanometers) for the
+   * WGS84 ellipsoid.  See Sec. 9 of
+   * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for
+   * details.  The algorithms used by this class are based on series expansions
+   * using the flattening \e f as a small parameter.  These are only accurate
+   * for |<i>f</i>| < 0.02; however reasonably accurate results will be
+   * obtained for |<i>f</i>| < 0.2.  Here is a table of the approximate
+   * maximum error (expressed as a distance) for an ellipsoid with the same
+   * major radius as the WGS84 ellipsoid and different values of the
+   * flattening.<pre>
+   *     |f|      error
+   *     0.01     25 nm
+   *     0.02     30 nm
+   *     0.05     10 um
+   *     0.1     1.5 mm
+   *     0.2     300 mm
+   * </pre>
+   * For very eccentric ellipsoids, use GeodesicExact instead.
    *
    * The algorithms are described in
    * - C. F. F. Karney,
-   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
-   *   on an ellipsoid of revolution</a>,
-   *   Feb. 2011;
-   *   preprint
-   *   <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a>.
-   * - C. F. F. Karney,
-   *   <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>,
-   *   Sept. 2011;
-   *   preprint
-   *   <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.
+   *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   Algorithms for geodesics</a>,
+   *   J. Geodesy <b>87</b>, 43--55 (2013);
+   *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   10.1007/s00190-012-0578-z</a>;
+   *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   *   geod-addenda.html</a>.
    * .
    * For more information on geodesics see \ref geodesic.
    *
@@ -126,27 +166,30 @@ namespace GeographicLib {
    * to the functionality of Geodesic and GeodesicLine.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT Geodesic {
+  class GEOGRAPHICLIB_EXPORT Geodesic {
   private:
     typedef Math::real real;
     friend class GeodesicLine;
-    static const int nA1_ = GEOD_ORD;
-    static const int nC1_ = GEOD_ORD;
-    static const int nC1p_ = GEOD_ORD;
-    static const int nA2_ = GEOD_ORD;
-    static const int nC2_ = GEOD_ORD;
-    static const int nA3_ = GEOD_ORD;
+    static const int nA1_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+    static const int nC1_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+    static const int nC1p_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+    static const int nA2_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+    static const int nC2_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+    static const int nA3_ = GEOGRAPHICLIB_GEODESIC_ORDER;
     static const int nA3x_ = nA3_;
-    static const int nC3_ = GEOD_ORD;
+    static const int nC3_ = GEOGRAPHICLIB_GEODESIC_ORDER;
     static const int nC3x_ = (nC3_ * (nC3_ - 1)) / 2;
-    static const int nC4_ = GEOD_ORD;
+    static const int nC4_ = GEOGRAPHICLIB_GEODESIC_ORDER;
     static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
-    static const unsigned maxit_ = 50;
+    static const unsigned maxit1_ = 20;
+    static const unsigned maxit2_ = maxit1_ +
+      std::numeric_limits<real>::digits + 10;
 
     static const real tiny_;
     static const real tol0_;
     static const real tol1_;
     static const real tol2_;
+    static const real tolb_;
     static const real xthresh_;
 
     enum captype {
@@ -163,17 +206,13 @@ namespace GeographicLib {
     static real SinCosSeries(bool sinp,
                              real sinx, real cosx, const real c[], int n)
       throw();
-    static inline real AngNormalize(real x) throw() {
-      // Place angle in [-180, 180).  Assumes x is in [-540, 540).
-      return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x);
-    }
     static inline real AngRound(real x) throw() {
       // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
       // for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
       // is about 1000 times more resolution than we get with angles around 90
       // degrees.)  We use this to avoid having to deal with near singular
       // cases when x is non-zero but tiny (e.g., 1.0e-200).
-      const real z = real(0.0625); // 1/16
+      const real z = 1/real(16);
       volatile real y = std::abs(x);
       // The compiler mustn't "simplify" z - (z - y) to y
       y = y < z ? z - (z - y) : y;
@@ -190,17 +229,20 @@ namespace GeographicLib {
     real _A3x[nA3x_], _C3x[nC3x_], _C4x[nC4x_];
 
     void Lengths(real eps, real sig12,
-                 real ssig1, real csig1, real ssig2, real csig2,
+                 real ssig1, real csig1, real dn1,
+                 real ssig2, real csig2, real dn2,
                  real cbet1, real cbet2,
                  real& s12s, real& m12a, real& m0,
                  bool scalep, real& M12, real& M21,
                  real C1a[], real C2a[]) const throw();
-    real InverseStart(real sbet1, real cbet1, real sbet2, real cbet2,
+    real InverseStart(real sbet1, real cbet1, real dn1,
+                      real sbet2, real cbet2, real dn2,
                       real lam12,
                       real& salp1, real& calp1,
-                      real& salp2, real& calp2,
+                      real& salp2, real& calp2, real& dnm,
                       real C1a[], real C2a[]) const throw();
-    real Lambda12(real sbet1, real cbet1, real sbet2, real cbet2,
+    real Lambda12(real sbet1, real cbet1, real dn1,
+                  real sbet2, real cbet2, real dn2,
                   real salp1, real calp1,
                   real& salp2, real& calp2, real& sig12,
                   real& ssig1, real& csig1, real& ssig2, real& csig2,
@@ -284,7 +326,7 @@ namespace GeographicLib {
        **********************************************************************/
       AREA          = 1U<<14 | CAP_C4,
       /**
-       * All capabilities.  Calculate everything.
+       * All capabilities, calculate everything.
        * @hideinitializer
        **********************************************************************/
       ALL           = OUT_ALL| CAP_ALL,
@@ -300,9 +342,8 @@ namespace GeographicLib {
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
      *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
      *   to 1/\e f.
-     *
-     * An exception is thrown if either of the axes of the ellipsoid is
-     * non-positive.
+     * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+     *   positive.
      **********************************************************************/
     Geodesic(real a, real f);
     ///@}
@@ -311,14 +352,14 @@ namespace GeographicLib {
      **********************************************************************/
     ///@{
     /**
-     * Perform the direct geodesic calculation where the length of the geodesic
-     * is specify in terms of distance.
+     * Solve the direct geodesic problem where the length of the geodesic
+     * is specified in terms of distance.
      *
      * @param[in] lat1 latitude of point 1 (degrees).
      * @param[in] lon1 longitude of point 1 (degrees).
      * @param[in] azi1 azimuth at point 1 (degrees).
      * @param[in] s12 distance between point 1 and point 2 (meters); it can be
-     *   signed.
+     *   negative.
      * @param[out] lat2 latitude of point 2 (degrees).
      * @param[out] lon2 longitude of point 2 (degrees).
      * @param[out] azi2 (forward) azimuth at point 2 (degrees).
@@ -330,16 +371,17 @@ namespace GeographicLib {
      * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
      * @return \e a12 arc length of between point 1 and point 2 (degrees).
      *
-     * \e lat1 should be in the range [-90, 90]; \e lon1 and \e azi1 should be
-     * in the range [-180, 360].  The values of \e lon2 and \e azi2 returned
-     * are in the range [-180, 180).
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).  The values of
+     * \e lon2 and \e azi2 returned are in the range [−180°,
+     * 180°).
      *
      * If either point is at a pole, the azimuth is defined by keeping the
-     * longitude fixed and writing \e lat = 90 - \e eps or -90 + \e eps and
-     * taking the limit \e eps -> 0 from above.  An arc length greater that 180
-     * degrees signifies a geodesic which is not a shortest path.  (For a
+     * longitude fixed, writing \e lat = ±(90° − ε),
+     * and taking the limit ε → 0+.  An arc length greater that
+     * 180° signifies a geodesic which is not a shortest path.  (For a
      * prolate ellipsoid, an additional condition is necessary for a shortest
-     * path: the longitudinal extent must not exceed of 180 degrees.)
+     * path: the longitudinal extent must not exceed of 180°.)
      *
      * The following functions are overloaded versions of Geodesic::Direct
      * which omit some of the output parameters.  Note, however, that the arc
@@ -424,14 +466,14 @@ namespace GeographicLib {
      **********************************************************************/
     ///@{
     /**
-     * Perform the direct geodesic calculation where the length of the geodesic
-     * is specify in terms of arc length.
+     * Solve the direct geodesic problem where the length of the geodesic
+     * is specified in terms of arc length.
      *
      * @param[in] lat1 latitude of point 1 (degrees).
      * @param[in] lon1 longitude of point 1 (degrees).
      * @param[in] azi1 azimuth at point 1 (degrees).
      * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
-     *   be signed.
+     *   be negative.
      * @param[out] lat2 latitude of point 2 (degrees).
      * @param[out] lon2 longitude of point 2 (degrees).
      * @param[out] azi2 (forward) azimuth at point 2 (degrees).
@@ -443,16 +485,17 @@ namespace GeographicLib {
      *   (dimensionless).
      * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
      *
-     * \e lat1 should be in the range [-90, 90]; \e lon1 and \e azi1 should be
-     * in the range [-180, 360].  The values of \e lon2 and \e azi2 returned
-     * are in the range [-180, 180).
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).  The values of
+     * \e lon2 and \e azi2 returned are in the range [−180°,
+     * 180°).
      *
      * If either point is at a pole, the azimuth is defined by keeping the
-     * longitude fixed and writing \e lat = 90 - \e eps or -90 + \e eps and
-     * taking the limit \e eps -> 0 from above.  An arc length greater that 180
-     * degrees signifies a geodesic which is not a shortest path.  (For a
+     * longitude fixed, writing \e lat = ±(90° − ε),
+     * and taking the limit ε → 0+.  An arc length greater that
+     * 180° signifies a geodesic which is not a shortest path.  (For a
      * prolate ellipsoid, an additional condition is necessary for a shortest
-     * path: the longitudinal extent must not exceed of 180 degrees.)
+     * path: the longitudinal extent must not exceed of 180°.)
      *
      * The following functions are overloaded versions of Geodesic::Direct
      * which omit some of the output parameters.
@@ -546,17 +589,17 @@ namespace GeographicLib {
     ///@{
 
     /**
-     * The general direct geodesic calculation.  Geodesic::Direct and
+     * The general direct geodesic problem.  Geodesic::Direct and
      * Geodesic::ArcDirect are defined in terms of this function.
      *
      * @param[in] lat1 latitude of point 1 (degrees).
      * @param[in] lon1 longitude of point 1 (degrees).
      * @param[in] azi1 azimuth at point 1 (degrees).
-     * @param[in] arcmode boolean flag determining the meaning of the second
-     *   parameter.
+     * @param[in] arcmode boolean flag determining the meaning of the \e
+     *   s12_a12.
      * @param[in] s12_a12 if \e arcmode is false, this is the distance between
      *   point 1 and point 2 (meters); otherwise it is the arc length between
-     *   point 1 and point 2 (degrees); it can be signed.
+     *   point 1 and point 2 (degrees); it can be negative.
      * @param[in] outmask a bitor'ed combination of Geodesic::mask values
      *   specifying which of the following parameters should be set.
      * @param[out] lat2 latitude of point 2 (degrees).
@@ -572,15 +615,16 @@ namespace GeographicLib {
      * @return \e a12 arc length of between point 1 and point 2 (degrees).
      *
      * The Geodesic::mask values possible for \e outmask are
-     * - \e outmask |= Geodesic::LATITUDE for the latitude \e lat2.
-     * - \e outmask |= Geodesic::LONGITUDE for the latitude \e lon2.
-     * - \e outmask |= Geodesic::AZIMUTH for the latitude \e azi2.
-     * - \e outmask |= Geodesic::DISTANCE for the distance \e s12.
+     * - \e outmask |= Geodesic::LATITUDE for the latitude \e lat2;
+     * - \e outmask |= Geodesic::LONGITUDE for the latitude \e lon2;
+     * - \e outmask |= Geodesic::AZIMUTH for the latitude \e azi2;
+     * - \e outmask |= Geodesic::DISTANCE for the distance \e s12;
      * - \e outmask |= Geodesic::REDUCEDLENGTH for the reduced length \e
-     *   m12.
+     *   m12;
      * - \e outmask |= Geodesic::GEODESICSCALE for the geodesic scales \e
-     *   M12 and \e M21.
-     * - \e outmask |= Geodesic::AREA for the area \e S12.
+     *   M12 and \e M21;
+     * - \e outmask |= Geodesic::AREA for the area \e S12;
+     * - \e outmask |= Geodesic::ALL for all of the above.
      * .
      * The function value \e a12 is always computed and returned and this
      * equals \e s12_a12 is \e arcmode is true.  If \e outmask includes
@@ -599,7 +643,7 @@ namespace GeographicLib {
      **********************************************************************/
     ///@{
     /**
-     * Perform the inverse geodesic calculation.
+     * Solve the inverse geodesic problem.
      *
      * @param[in] lat1 latitude of point 1 (degrees).
      * @param[in] lon1 longitude of point 1 (degrees).
@@ -616,17 +660,19 @@ namespace GeographicLib {
      * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
      * @return \e a12 arc length of between point 1 and point 2 (degrees).
      *
-     * \e lat1 and \e lat2 should be in the range [-90, 90]; \e lon1 and \e
-     * lon2 should be in the range [-180, 360].  The values of \e azi1 and \e
-     * azi2 returned are in the range [-180, 180).
+     * \e lat1 and \e lat2 should be in the range [−90°, 90°]; \e
+     * lon1 and \e lon2 should be in the range [−540°, 540°).
+     * The values of \e azi1 and \e azi2 returned are in the range
+     * [−180°, 180°).
      *
      * If either point is at a pole, the azimuth is defined by keeping the
-     * longitude fixed and writing \e lat = 90 - \e eps or -90 + \e eps and
-     * taking the limit \e eps -> 0 from above.  If the routine fails to
-     * converge, then all the requested outputs are set to Math::NaN().  (Test
-     * for such results with Math::isnan.)  This is not expected to happen with
-     * ellipsoidal models of the earth; please report all cases where this
-     * occurs.
+     * longitude fixed, writing \e lat = ±(90° − ε),
+     * and taking the limit ε → 0+.
+     *
+     * The solution to the inverse problem is found using Newton's method.  If
+     * this fails to converge (this is very unlikely in geodetic applications
+     * but does occur for very eccentric ellipsoids), then the bisection method
+     * is used to refine the solution.
      *
      * The following functions are overloaded versions of Geodesic::Inverse
      * which omit some of the output parameters.  Note, however, that the arc
@@ -738,13 +784,14 @@ namespace GeographicLib {
      * @return \e a12 arc length of between point 1 and point 2 (degrees).
      *
      * The Geodesic::mask values possible for \e outmask are
-     * - \e outmask |= Geodesic::DISTANCE for the distance \e s12.
-     * - \e outmask |= Geodesic::AZIMUTH for the latitude \e azi2.
+     * - \e outmask |= Geodesic::DISTANCE for the distance \e s12;
+     * - \e outmask |= Geodesic::AZIMUTH for the latitude \e azi2;
      * - \e outmask |= Geodesic::REDUCEDLENGTH for the reduced length \e
-     *   m12.
+     *   m12;
      * - \e outmask |= Geodesic::GEODESICSCALE for the geodesic scales \e
-     *   M12 and \e M21.
-     * - \e outmask |= Geodesic::AREA for the area \e S12.
+     *   M12 and \e M21;
+     * - \e outmask |= Geodesic::AREA for the area \e S12;
+     * - \e outmask |= Geodesic::ALL for all of the above.
      * .
      * The arc length is always computed and returned as the function value.
      **********************************************************************/
@@ -760,7 +807,7 @@ namespace GeographicLib {
     ///@{
 
     /**
-     * Set up to compute several points on a singe geodesic.
+     * Set up to compute several points on a single geodesic.
      *
      * @param[in] lat1 latitude of point 1 (degrees).
      * @param[in] lon1 longitude of point 1 (degrees).
@@ -768,32 +815,33 @@ namespace GeographicLib {
      * @param[in] caps bitor'ed combination of Geodesic::mask values
      *   specifying the capabilities the GeodesicLine object should possess,
      *   i.e., which quantities can be returned in calls to
-     *   GeodesicLib::Position.
+     *   GeodesicLine::Position.
+     * @return a GeodesicLine object.
      *
-     * \e lat1 should be in the range [-90, 90]; \e lon1 and \e azi1 should be
-     * in the range [-180, 360].
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).
      *
      * The Geodesic::mask values are
      * - \e caps |= Geodesic::LATITUDE for the latitude \e lat2; this is
-     *   added automatically
-     * - \e caps |= Geodesic::LONGITUDE for the latitude \e lon2
-     * - \e caps |= Geodesic::AZIMUTH for the latitude \e azi2; this is
-     *   added automatically
-     * - \e caps |= Geodesic::DISTANCE for the distance \e s12
-     * - \e caps |= Geodesic::REDUCEDLENGTH for the reduced length \e m12
+     *   added automatically;
+     * - \e caps |= Geodesic::LONGITUDE for the latitude \e lon2;
+     * - \e caps |= Geodesic::AZIMUTH for the azimuth \e azi2; this is
+     *   added automatically;
+     * - \e caps |= Geodesic::DISTANCE for the distance \e s12;
+     * - \e caps |= Geodesic::REDUCEDLENGTH for the reduced length \e m12;
      * - \e caps |= Geodesic::GEODESICSCALE for the geodesic scales \e M12
-     *   and \e M21
-     * - \e caps |= Geodesic::AREA for the area \e S12
+     *   and \e M21;
+     * - \e caps |= Geodesic::AREA for the area \e S12;
      * - \e caps |= Geodesic::DISTANCE_IN permits the length of the
      *   geodesic to be given in terms of \e s12; without this capability the
-     *   length can only be specified in terms of arc length.
+     *   length can only be specified in terms of arc length;
+     * - \e caps |= Geodesic::ALL for all of the above.
      * .
-     * The default value of \e caps is Geodesic::ALL which turns on all the
-     * capabilities.
+     * The default value of \e caps is Geodesic::ALL.
      *
-     * If the point is at a pole, the azimuth is defined by keeping the \e lon1
-     * fixed and writing \e lat1 = 90 - \e eps or -90 + \e eps and taking the
-     * limit \e eps -> 0 from above.
+     * If the point is at a pole, the azimuth is defined by keeping \e lon1
+     * fixed, writing \e lat1 = ±(90 − ε), and taking the
+     * limit ε → 0+.
      **********************************************************************/
     GeodesicLine Line(real lat1, real lon1, real azi1, unsigned caps = ALL)
       const throw();
diff --git a/include/GeographicLib/GeodesicExact.hpp b/include/GeographicLib/GeodesicExact.hpp
new file mode 100644
index 0000000..c0444f7
--- /dev/null
+++ b/include/GeographicLib/GeodesicExact.hpp
@@ -0,0 +1,783 @@
+/**
+ * \file GeodesicExact.hpp
+ * \brief Header for GeographicLib::GeodesicExact class
+ *
+ * Copyright (c) Charles Karney (2012-2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#if !defined(GEOGRAPHICLIB_GEODESICEXACT_HPP)
+#define GEOGRAPHICLIB_GEODESICEXACT_HPP 1
+
+#include <GeographicLib/Constants.hpp>
+#include <GeographicLib/EllipticFunction.hpp>
+
+#if !defined(GEOGRAPHICLIB_GEODESICEXACT_ORDER)
+/**
+ * The order of the expansions used by GeodesicExact.
+ **********************************************************************/
+#  define GEOGRAPHICLIB_GEODESICEXACT_ORDER 30
+#endif
+
+namespace GeographicLib {
+
+  class GeodesicLineExact;
+
+  /**
+   * \brief Exact %Geodesic calculations
+   *
+   * The equations for geodesics on an ellipsoid can be expressed in terms of
+   * incomplete elliptic integrals.  The Geodesic class expands these integrals
+   * in a series in the flattening \e f and this provides an accurate solution
+   * for \e f ∈ [-0.01, 0.01].  The GeodesicExact class computes the
+   * ellitpic integrals directly and so provides a solution which is valid for
+   * all \e f.  However, in practice, its use should be limited to about \e
+   * b/\e a ∈ [0.01, 100] or \e f ∈ [-99, 0.99].
+   *
+   * For the WGS84 ellipsoid, these classes are 2--3 times \e slower than the
+   * series solution and 2--3 times \e less \e accurate (because it's less easy
+   * to control round-off errors with the elliptic integral formulation); i.e.,
+   * the error is about 40 nm (40 nanometers) instead of 15 nm.  However the
+   * error in the series solution scales as <i>f</i><sup>7</sup> while the
+   * error in the elliptic integral solution depends weakly on \e f.  If the
+   * quarter meridian distance is 10000 km and the ratio \e b/\e a = 1 −
+   * \e f is varied then the approximate maximum error (expressed as a
+   * distance) is <pre>
+   *       1 - f  error (nm)
+   *       1/128     387
+   *       1/64      345
+   *       1/32      269
+   *       1/16      210
+   *       1/8       115
+   *       1/4        69
+   *       1/2        36
+   *         1        15
+   *         2        25
+   *         4        96
+   *         8       318
+   *        16       985
+   *        32      2352
+   *        64      6008
+   *       128     19024
+   * </pre>
+   *
+   * The computation of the area in these classes is via a 30th order series.
+   * This gives accurate results for \e b/\e a ∈ [1/2, 2]; the accuracy is
+   * about 8 decimal digits for \e b/\e a ∈ [1/4, 4].
+   *
+   * See \ref geodellip for the formulation.  See the documentation on the
+   * Geodesic class for additional information on the geodesics problems.
+   *
+   * Example of use:
+   * \include example-GeodesicExact.cpp
+   *
+   * <a href="Geod.1.html">Geod</a> is a command-line utility providing access
+   * to the functionality of GeodesicExact and GeodesicLineExact (via the -E
+   * option).
+   **********************************************************************/
+
+  class GEOGRAPHICLIB_EXPORT GeodesicExact {
+  private:
+    typedef Math::real real;
+    friend class GeodesicLineExact;
+    static const int nC4_ = GEOGRAPHICLIB_GEODESICEXACT_ORDER;
+    static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
+    static const unsigned maxit1_ = 20;
+    static const unsigned maxit2_ = maxit1_ +
+      std::numeric_limits<real>::digits + 10;
+
+    static const real tiny_;
+    static const real tol0_;
+    static const real tol1_;
+    static const real tol2_;
+    static const real tolb_;
+    static const real xthresh_;
+
+    enum captype {
+      CAP_NONE = 0U,
+      CAP_E    = 1U<<0,
+      // Skip 1U<<1 for compatibility with Geodesic (not required)
+      CAP_D    = 1U<<2,
+      CAP_H    = 1U<<3,
+      CAP_C4   = 1U<<4,
+      CAP_ALL  = 0x1FU,
+      OUT_ALL  = 0x7F80U,
+    };
+
+    static real CosSeries(real sinx, real cosx, const real c[], int n)
+      throw();
+    static inline real AngRound(real x) throw() {
+      // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
+      // for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
+      // is about 1000 times more resolution than we get with angles around 90
+      // degrees.)  We use this to avoid having to deal with near singular
+      // cases when x is non-zero but tiny (e.g., 1.0e-200).
+      const real z = 1/real(16);
+      volatile real y = std::abs(x);
+      // The compiler mustn't "simplify" z - (z - y) to y
+      y = y < z ? z - (z - y) : y;
+      return x < 0 ? -y : y;
+    }
+    static inline void SinCosNorm(real& sinx, real& cosx) throw() {
+      real r = Math::hypot(sinx, cosx);
+      sinx /= r;
+      cosx /= r;
+    }
+    static real Astroid(real x, real y) throw();
+
+    real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
+    real _C4x[nC4x_];
+
+    void Lengths(const EllipticFunction& E,
+                 real sig12,
+                 real ssig1, real csig1, real dn1,
+                 real ssig2, real csig2, real dn2,
+                 real cbet1, real cbet2,
+                 real& s12s, real& m12a, real& m0,
+                 bool scalep, real& M12, real& M21) const throw();
+    real InverseStart(EllipticFunction& E,
+                      real sbet1, real cbet1, real dn1,
+                      real sbet2, real cbet2, real dn2,
+                      real lam12,
+                      real& salp1, real& calp1,
+                      real& salp2, real& calp2, real& dnm) const throw();
+    real Lambda12(real sbet1, real cbet1, real dn1,
+                  real sbet2, real cbet2, real dn2,
+                  real salp1, real calp1,
+                  real& salp2, real& calp2, real& sig12,
+                  real& ssig1, real& csig1, real& ssig2, real& csig2,
+                  EllipticFunction& E,
+                  real& omg12, bool diffp, real& dlam12)
+      const throw();
+
+    // These are Maxima generated functions to provide series approximations to
+    // the integrals for the area.
+    void C4coeff() throw();
+    void C4f(real k2, real c[]) const throw();
+
+  public:
+
+    /**
+     * Bit masks for what calculations to do.  These masks do double duty.
+     * They signify to the GeodesicLineExact::GeodesicLineExact constructor and
+     * to GeodesicExact::Line what capabilities should be included in the
+     * GeodesicLineExact object.  They also specify which results to return in
+     * the general routines GeodesicExact::GenDirect and
+     * GeodesicExact::GenInverse routines.  GeodesicLineExact::mask is a
+     * duplication of this enum.
+     **********************************************************************/
+    enum mask {
+      /**
+       * No capabilities, no output.
+       * @hideinitializer
+       **********************************************************************/
+      NONE          = 0U,
+      /**
+       * Calculate latitude \e lat2.  (It's not necessary to include this as a
+       * capability to GeodesicLineExact because this is included by default.)
+       * @hideinitializer
+       **********************************************************************/
+      LATITUDE      = 1U<<7  | CAP_NONE,
+      /**
+       * Calculate longitude \e lon2.
+       * @hideinitializer
+       **********************************************************************/
+      LONGITUDE     = 1U<<8  | CAP_H,
+      /**
+       * Calculate azimuths \e azi1 and \e azi2.  (It's not necessary to
+       * include this as a capability to GeodesicLineExact because this is
+       * included by default.)
+       * @hideinitializer
+       **********************************************************************/
+      AZIMUTH       = 1U<<9  | CAP_NONE,
+      /**
+       * Calculate distance \e s12.
+       * @hideinitializer
+       **********************************************************************/
+      DISTANCE      = 1U<<10 | CAP_E,
+      /**
+       * Allow distance \e s12 to be used as input in the direct geodesic
+       * problem.
+       * @hideinitializer
+       **********************************************************************/
+      DISTANCE_IN   = 1U<<11 | CAP_E,
+      /**
+       * Calculate reduced length \e m12.
+       * @hideinitializer
+       **********************************************************************/
+      REDUCEDLENGTH = 1U<<12 | CAP_D,
+      /**
+       * Calculate geodesic scales \e M12 and \e M21.
+       * @hideinitializer
+       **********************************************************************/
+      GEODESICSCALE = 1U<<13 | CAP_D,
+      /**
+       * Calculate area \e S12.
+       * @hideinitializer
+       **********************************************************************/
+      AREA          = 1U<<14 | CAP_C4,
+      /**
+       * All capabilities, calculate everything.
+       * @hideinitializer
+       **********************************************************************/
+      ALL           = OUT_ALL| CAP_ALL,
+    };
+
+    /** \name Constructor
+     **********************************************************************/
+    ///@{
+    /**
+     * Constructor for a ellipsoid with
+     *
+     * @param[in] a equatorial radius (meters).
+     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
+     *   to 1/\e f.
+     * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+     *   positive.
+     **********************************************************************/
+    GeodesicExact(real a, real f);
+    ///@}
+
+    /** \name Direct geodesic problem specified in terms of distance.
+     **********************************************************************/
+    ///@{
+    /**
+     * Perform the direct geodesic calculation where the length of the geodesic
+     * is specified in terms of distance.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] azi1 azimuth at point 1 (degrees).
+     * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+     *   signed.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees).
+     * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+     * @param[out] m12 reduced length of geodesic (meters).
+     * @param[out] M12 geodesic scale of point 2 relative to point 1
+     *   (dimensionless).
+     * @param[out] M21 geodesic scale of point 1 relative to point 2
+     *   (dimensionless).
+     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+     * @return \e a12 arc length of between point 1 and point 2 (degrees).
+     *
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).  The values of
+     * \e lon2 and \e azi2 returned are in the range [−180°,
+     * 180°).
+     *
+     * If either point is at a pole, the azimuth is defined by keeping the
+     * longitude fixed, writing \e lat = ±(90° − ε),
+     * and taking the limit ε → 0+.  An arc length greater that
+     * 180° signifies a geodesic which is not a shortest path.  (For a
+     * prolate ellipsoid, an additional condition is necessary for a shortest
+     * path: the longitudinal extent must not exceed of 180°.)
+     *
+     * The following functions are overloaded versions of GeodesicExact::Direct
+     * which omit some of the output parameters.  Note, however, that the arc
+     * length is always computed and returned as the function value.
+     **********************************************************************/
+    Math::real Direct(real lat1, real lon1, real azi1, real s12,
+                      real& lat2, real& lon2, real& azi2,
+                      real& m12, real& M12, real& M21, real& S12)
+      const throw() {
+      real t;
+      return GenDirect(lat1, lon1, azi1, false, s12,
+                       LATITUDE | LONGITUDE | AZIMUTH |
+                       REDUCEDLENGTH | GEODESICSCALE | AREA,
+                       lat2, lon2, azi2, t, m12, M12, M21, S12);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Direct.
+     **********************************************************************/
+    Math::real Direct(real lat1, real lon1, real azi1, real s12,
+                      real& lat2, real& lon2)
+      const throw() {
+      real t;
+      return GenDirect(lat1, lon1, azi1, false, s12,
+                       LATITUDE | LONGITUDE,
+                       lat2, lon2, t, t, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Direct.
+     **********************************************************************/
+    Math::real Direct(real lat1, real lon1, real azi1, real s12,
+                      real& lat2, real& lon2, real& azi2)
+      const throw() {
+      real t;
+      return GenDirect(lat1, lon1, azi1, false, s12,
+                       LATITUDE | LONGITUDE | AZIMUTH,
+                       lat2, lon2, azi2, t, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Direct.
+     **********************************************************************/
+    Math::real Direct(real lat1, real lon1, real azi1, real s12,
+                      real& lat2, real& lon2, real& azi2, real& m12)
+      const throw() {
+      real t;
+      return GenDirect(lat1, lon1, azi1, false, s12,
+                       LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
+                       lat2, lon2, azi2, t, m12, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Direct.
+     **********************************************************************/
+    Math::real Direct(real lat1, real lon1, real azi1, real s12,
+                      real& lat2, real& lon2, real& azi2,
+                      real& M12, real& M21)
+      const throw() {
+      real t;
+      return GenDirect(lat1, lon1, azi1, false, s12,
+                       LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
+                       lat2, lon2, azi2, t, t, M12, M21, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Direct.
+     **********************************************************************/
+    Math::real Direct(real lat1, real lon1, real azi1, real s12,
+                      real& lat2, real& lon2, real& azi2,
+                      real& m12, real& M12, real& M21)
+      const throw() {
+      real t;
+      return GenDirect(lat1, lon1, azi1, false, s12,
+                       LATITUDE | LONGITUDE | AZIMUTH |
+                       REDUCEDLENGTH | GEODESICSCALE,
+                       lat2, lon2, azi2, t, m12, M12, M21, t);
+    }
+    ///@}
+
+    /** \name Direct geodesic problem specified in terms of arc length.
+     **********************************************************************/
+    ///@{
+    /**
+     * Perform the direct geodesic calculation where the length of the geodesic
+     * is specified in terms of arc length.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] azi1 azimuth at point 1 (degrees).
+     * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
+     *   be signed.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees).
+     * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+     * @param[out] s12 distance between point 1 and point 2 (meters).
+     * @param[out] m12 reduced length of geodesic (meters).
+     * @param[out] M12 geodesic scale of point 2 relative to point 1
+     *   (dimensionless).
+     * @param[out] M21 geodesic scale of point 1 relative to point 2
+     *   (dimensionless).
+     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+     *
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).  The values of
+     * \e lon2 and \e azi2 returned are in the range [−180°,
+     * 180°).
+     *
+     * If either point is at a pole, the azimuth is defined by keeping the
+     * longitude fixed, writing \e lat = ±(90° − ε),
+     * and taking the limit ε → 0+.  An arc length greater that
+     * 180° signifies a geodesic which is not a shortest path.  (For a
+     * prolate ellipsoid, an additional condition is necessary for a shortest
+     * path: the longitudinal extent must not exceed of 180°.)
+     *
+     * The following functions are overloaded versions of GeodesicExact::Direct
+     * which omit some of the output parameters.
+     **********************************************************************/
+    void ArcDirect(real lat1, real lon1, real azi1, real a12,
+                   real& lat2, real& lon2, real& azi2, real& s12,
+                   real& m12, real& M12, real& M21, real& S12)
+      const throw() {
+      GenDirect(lat1, lon1, azi1, true, a12,
+                LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
+                REDUCEDLENGTH | GEODESICSCALE | AREA,
+                lat2, lon2, azi2, s12, m12, M12, M21, S12);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::ArcDirect.
+     **********************************************************************/
+    void ArcDirect(real lat1, real lon1, real azi1, real a12,
+                   real& lat2, real& lon2) const throw() {
+      real t;
+      GenDirect(lat1, lon1, azi1, true, a12,
+                LATITUDE | LONGITUDE,
+                lat2, lon2, t, t, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::ArcDirect.
+     **********************************************************************/
+    void ArcDirect(real lat1, real lon1, real azi1, real a12,
+                   real& lat2, real& lon2, real& azi2) const throw() {
+      real t;
+      GenDirect(lat1, lon1, azi1, true, a12,
+                LATITUDE | LONGITUDE | AZIMUTH,
+                lat2, lon2, azi2, t, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::ArcDirect.
+     **********************************************************************/
+    void ArcDirect(real lat1, real lon1, real azi1, real a12,
+                   real& lat2, real& lon2, real& azi2, real& s12)
+      const throw() {
+      real t;
+      GenDirect(lat1, lon1, azi1, true, a12,
+                LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
+                lat2, lon2, azi2, s12, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::ArcDirect.
+     **********************************************************************/
+    void ArcDirect(real lat1, real lon1, real azi1, real a12,
+                   real& lat2, real& lon2, real& azi2,
+                   real& s12, real& m12) const throw() {
+      real t;
+      GenDirect(lat1, lon1, azi1, true, a12,
+                LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
+                REDUCEDLENGTH,
+                lat2, lon2, azi2, s12, m12, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::ArcDirect.
+     **********************************************************************/
+    void ArcDirect(real lat1, real lon1, real azi1, real a12,
+                   real& lat2, real& lon2, real& azi2, real& s12,
+                   real& M12, real& M21) const throw() {
+      real t;
+      GenDirect(lat1, lon1, azi1, true, a12,
+                LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
+                GEODESICSCALE,
+                lat2, lon2, azi2, s12, t, M12, M21, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::ArcDirect.
+     **********************************************************************/
+    void ArcDirect(real lat1, real lon1, real azi1, real a12,
+                   real& lat2, real& lon2, real& azi2, real& s12,
+                   real& m12, real& M12, real& M21) const throw() {
+      real t;
+      GenDirect(lat1, lon1, azi1, true, a12,
+                LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
+                REDUCEDLENGTH | GEODESICSCALE,
+                lat2, lon2, azi2, s12, m12, M12, M21, t);
+    }
+    ///@}
+
+    /** \name General version of the direct geodesic solution.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * The general direct geodesic calculation.  GeodesicExact::Direct and
+     * GeodesicExact::ArcDirect are defined in terms of this function.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] azi1 azimuth at point 1 (degrees).
+     * @param[in] arcmode boolean flag determining the meaning of the second
+     *   parameter.
+     * @param[in] s12_a12 if \e arcmode is false, this is the distance between
+     *   point 1 and point 2 (meters); otherwise it is the arc length between
+     *   point 1 and point 2 (degrees); it can be signed.
+     * @param[in] outmask a bitor'ed combination of GeodesicExact::mask values
+     *   specifying which of the following parameters should be set.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees).
+     * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+     * @param[out] s12 distance between point 1 and point 2 (meters).
+     * @param[out] m12 reduced length of geodesic (meters).
+     * @param[out] M12 geodesic scale of point 2 relative to point 1
+     *   (dimensionless).
+     * @param[out] M21 geodesic scale of point 1 relative to point 2
+     *   (dimensionless).
+     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+     * @return \e a12 arc length of between point 1 and point 2 (degrees).
+     *
+     * The GeodesicExact::mask values possible for \e outmask are
+     * - \e outmask |= GeodesicExact::LATITUDE for the latitude \e lat2;
+     * - \e outmask |= GeodesicExact::LONGITUDE for the latitude \e lon2;
+     * - \e outmask |= GeodesicExact::AZIMUTH for the latitude \e azi2;
+     * - \e outmask |= GeodesicExact::DISTANCE for the distance \e s12;
+     * - \e outmask |= GeodesicExact::REDUCEDLENGTH for the reduced length \e
+     *   m12;
+     * - \e outmask |= GeodesicExact::GEODESICSCALE for the geodesic scales \e
+     *   M12 and \e M21;
+     * - \e outmask |= GeodesicExact::AREA for the area \e S12;
+     * - \e outmask |= GeodesicExact::ALL for all of the above.
+     * .
+     * The function value \e a12 is always computed and returned and this
+     * equals \e s12_a12 is \e arcmode is true.  If \e outmask includes
+     * GeodesicExact::DISTANCE and \e arcmode is false, then \e s12 = \e
+     * s12_a12.  It is not necessary to include GeodesicExact::DISTANCE_IN in
+     * \e outmask; this is automatically included is \e arcmode is false.
+     **********************************************************************/
+    Math::real GenDirect(real lat1, real lon1, real azi1,
+                         bool arcmode, real s12_a12, unsigned outmask,
+                         real& lat2, real& lon2, real& azi2,
+                         real& s12, real& m12, real& M12, real& M21,
+                         real& S12) const throw();
+    ///@}
+
+    /** \name Inverse geodesic problem.
+     **********************************************************************/
+    ///@{
+    /**
+     * Perform the inverse geodesic calculation.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] lat2 latitude of point 2 (degrees).
+     * @param[in] lon2 longitude of point 2 (degrees).
+     * @param[out] s12 distance between point 1 and point 2 (meters).
+     * @param[out] azi1 azimuth at point 1 (degrees).
+     * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+     * @param[out] m12 reduced length of geodesic (meters).
+     * @param[out] M12 geodesic scale of point 2 relative to point 1
+     *   (dimensionless).
+     * @param[out] M21 geodesic scale of point 1 relative to point 2
+     *   (dimensionless).
+     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+     * @return \e a12 arc length of between point 1 and point 2 (degrees).
+     *
+     * \e lat1 and \e lat2 should be in the range [−90°, 90°]; \e
+     * lon1 and \e lon2 should be in the range [−540°, 540°).
+     * The values of \e azi1 and \e azi2 returned are in the range
+     * [−180°, 180°).
+     *
+     * If either point is at a pole, the azimuth is defined by keeping the
+     * longitude fixed, writing \e lat = ±(90° − ε),
+     * and taking the limit ε → 0+.
+     *
+     * The following functions are overloaded versions of GeodesicExact::Inverse
+     * which omit some of the output parameters.  Note, however, that the arc
+     * length is always computed and returned as the function value.
+     **********************************************************************/
+    Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
+                       real& s12, real& azi1, real& azi2, real& m12,
+                       real& M12, real& M21, real& S12) const throw() {
+      return GenInverse(lat1, lon1, lat2, lon2,
+                        DISTANCE | AZIMUTH |
+                        REDUCEDLENGTH | GEODESICSCALE | AREA,
+                        s12, azi1, azi2, m12, M12, M21, S12);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Inverse.
+     **********************************************************************/
+    Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
+                       real& s12) const throw() {
+      real t;
+      return GenInverse(lat1, lon1, lat2, lon2,
+                        DISTANCE,
+                        s12, t, t, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Inverse.
+     **********************************************************************/
+    Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
+                       real& azi1, real& azi2) const throw() {
+      real t;
+      return GenInverse(lat1, lon1, lat2, lon2,
+                        AZIMUTH,
+                        t, azi1, azi2, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Inverse.
+     **********************************************************************/
+    Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
+                       real& s12, real& azi1, real& azi2)
+      const throw() {
+      real t;
+      return GenInverse(lat1, lon1, lat2, lon2,
+                        DISTANCE | AZIMUTH,
+                        s12, azi1, azi2, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Inverse.
+     **********************************************************************/
+    Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
+                       real& s12, real& azi1, real& azi2, real& m12)
+      const throw() {
+      real t;
+      return GenInverse(lat1, lon1, lat2, lon2,
+                        DISTANCE | AZIMUTH | REDUCEDLENGTH,
+                        s12, azi1, azi2, m12, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Inverse.
+     **********************************************************************/
+    Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
+                       real& s12, real& azi1, real& azi2,
+                       real& M12, real& M21) const throw() {
+      real t;
+      return GenInverse(lat1, lon1, lat2, lon2,
+                        DISTANCE | AZIMUTH | GEODESICSCALE,
+                        s12, azi1, azi2, t, M12, M21, t);
+    }
+
+    /**
+     * See the documentation for GeodesicExact::Inverse.
+     **********************************************************************/
+    Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
+                       real& s12, real& azi1, real& azi2, real& m12,
+                       real& M12, real& M21) const throw() {
+      real t;
+      return GenInverse(lat1, lon1, lat2, lon2,
+                        DISTANCE | AZIMUTH |
+                        REDUCEDLENGTH | GEODESICSCALE,
+                        s12, azi1, azi2, m12, M12, M21, t);
+    }
+    ///@}
+
+    /** \name General version of inverse geodesic solution.
+     **********************************************************************/
+    ///@{
+    /**
+     * The general inverse geodesic calculation.  GeodesicExact::Inverse is
+     * defined in terms of this function.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] lat2 latitude of point 2 (degrees).
+     * @param[in] lon2 longitude of point 2 (degrees).
+     * @param[in] outmask a bitor'ed combination of GeodesicExact::mask values
+     *   specifying which of the following parameters should be set.
+     * @param[out] s12 distance between point 1 and point 2 (meters).
+     * @param[out] azi1 azimuth at point 1 (degrees).
+     * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+     * @param[out] m12 reduced length of geodesic (meters).
+     * @param[out] M12 geodesic scale of point 2 relative to point 1
+     *   (dimensionless).
+     * @param[out] M21 geodesic scale of point 1 relative to point 2
+     *   (dimensionless).
+     * @param[out] S12 area under the geodesic (meters<sup>2</sup>).
+     * @return \e a12 arc length of between point 1 and point 2 (degrees).
+     *
+     * The GeodesicExact::mask values possible for \e outmask are
+     * - \e outmask |= GeodesicExact::DISTANCE for the distance \e s12;
+     * - \e outmask |= GeodesicExact::AZIMUTH for the latitude \e azi2;
+     * - \e outmask |= GeodesicExact::REDUCEDLENGTH for the reduced length \e
+     *   m12;
+     * - \e outmask |= GeodesicExact::GEODESICSCALE for the geodesic scales \e
+     *   M12 and \e M21;
+     * - \e outmask |= GeodesicExact::AREA for the area \e S12;
+     * - \e outmask |= GeodesicExact::ALL for all of the above.
+     * .
+     * The arc length is always computed and returned as the function value.
+     **********************************************************************/
+    Math::real GenInverse(real lat1, real lon1, real lat2, real lon2,
+                          unsigned outmask,
+                          real& s12, real& azi1, real& azi2,
+                          real& m12, real& M12, real& M21, real& S12)
+      const throw();
+    ///@}
+
+    /** \name Interface to GeodesicLineExact.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * Set up to compute several points on a single geodesic.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] azi1 azimuth at point 1 (degrees).
+     * @param[in] caps bitor'ed combination of GeodesicExact::mask values
+     *   specifying the capabilities the GeodesicLineExact object should
+     *   possess, i.e., which quantities can be returned in calls to
+     *   GeodesicLineExact::Position.
+     * @return a GeodesicLineExact object.
+     *
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).
+     *
+     * The GeodesicExact::mask values are
+     * - \e caps |= GeodesicExact::LATITUDE for the latitude \e lat2; this is
+     *   added automatically;
+     * - \e caps |= GeodesicExact::LONGITUDE for the latitude \e lon2;
+     * - \e caps |= GeodesicExact::AZIMUTH for the azimuth \e azi2; this is
+     *   added automatically;
+     * - \e caps |= GeodesicExact::DISTANCE for the distance \e s12;
+     * - \e caps |= GeodesicExact::REDUCEDLENGTH for the reduced length \e m12;
+     * - \e caps |= GeodesicExact::GEODESICSCALE for the geodesic scales \e M12
+     *   and \e M21;
+     * - \e caps |= GeodesicExact::AREA for the area \e S12;
+     * - \e caps |= GeodesicExact::DISTANCE_IN permits the length of the
+     *   geodesic to be given in terms of \e s12; without this capability the
+     *   length can only be specified in terms of arc length;
+     * - \e caps |= GeodesicExact::ALL for all of the above.
+     * .
+     * The default value of \e caps is GeodesicExact::ALL which turns on all
+     * the capabilities.
+     *
+     * If the point is at a pole, the azimuth is defined by keeping \e lon1
+     * fixed, writing \e lat1 = ±(90 − ε), and taking the
+     * limit ε → 0+.
+     **********************************************************************/
+    GeodesicLineExact Line(real lat1, real lon1, real azi1, unsigned caps = ALL)
+      const throw();
+
+    ///@}
+
+    /** \name Inspector functions.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+     *   the value used in the constructor.
+     **********************************************************************/
+    Math::real MajorRadius() const throw() { return _a; }
+
+    /**
+     * @return \e f the  flattening of the ellipsoid.  This is the
+     *   value used in the constructor.
+     **********************************************************************/
+    Math::real Flattening() const throw() { return _f; }
+
+    /// \cond SKIP
+    /**
+     * <b>DEPRECATED</b>
+     * @return \e r the inverse flattening of the ellipsoid.
+     **********************************************************************/
+    Math::real InverseFlattening() const throw() { return 1/_f; }
+    /// \endcond
+
+    /**
+     * @return total area of ellipsoid in meters<sup>2</sup>.  The area of a
+     *   polygon encircling a pole can be found by adding
+     *   GeodesicExact::EllipsoidArea()/2 to the sum of \e S12 for each side of
+     *   the polygon.
+     **********************************************************************/
+    Math::real EllipsoidArea() const throw()
+    { return 4 * Math::pi<real>() * _c2; }
+    ///@}
+
+    /**
+     * A global instantiation of GeodesicExact with the parameters for the WGS84
+     * ellipsoid.
+     **********************************************************************/
+    static const GeodesicExact WGS84;
+
+  };
+
+} // namespace GeographicLib
+
+#endif  // GEOGRAPHICLIB_GEODESICEXACT_HPP
diff --git a/include/GeographicLib/GeodesicLine.hpp b/include/GeographicLib/GeodesicLine.hpp
index 5b6ca33..fd968e2 100644
--- a/include/GeographicLib/GeodesicLine.hpp
+++ b/include/GeographicLib/GeodesicLine.hpp
@@ -2,14 +2,13 @@
  * \file GeodesicLine.hpp
  * \brief Header for GeographicLib::GeodesicLine class
  *
- * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_GEODESICLINE_HPP)
-#define GEOGRAPHICLIB_GEODESICLINE_HPP \
-  "$Id: 4bbc611bc3837d78456bc227e17bea39cb443745 $"
+#define GEOGRAPHICLIB_GEODESICLINE_HPP 1
 
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/Geodesic.hpp>
@@ -17,7 +16,7 @@
 namespace GeographicLib {
 
   /**
-   * \brief A geodesic line.
+   * \brief A geodesic line
    *
    * GeodesicLine facilitates the determination of a series of points on a
    * single geodesic.  The starting point (\e lat1, \e lon1) and the azimuth \e
@@ -32,20 +31,21 @@ namespace GeographicLib {
    * The calculations are accurate to better than 15 nm (15 nanometers).  See
    * Sec. 9 of
    * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for
-   * details.
+   * details.  The algorithms used by this class are based on series expansions
+   * using the flattening \e f as a small parameter.  These are only accurate
+   * for |<i>f</i>| < 0.02; however reasonably accurate results will be
+   * obtained for |<i>f</i>| < 0.2.  For very eccentric ellipsoids, use
+   * GeodesicLineExact instead.
    *
    * The algorithms are described in
    * - C. F. F. Karney,
-   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
-   *   on an ellipsoid of revolution</a>,
-   *   Feb. 2011;
-   *   preprint
-   *   <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a>.
-   * - C. F. F. Karney,
-   *   <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>,
-   *   Sept. 2011;
-   *   preprint
-   *   <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.
+   *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   Algorithms for geodesics</a>,
+   *   J. Geodesy <b>87</b>, 43--55 (2013);
+   *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   10.1007/s00190-012-0578-z</a>;
+   *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   *   geod-addenda.html</a>.
    * .
    * For more information on geodesics see \ref geodesic.
    *
@@ -56,7 +56,7 @@ namespace GeographicLib {
    * to the functionality of Geodesic and GeodesicLine.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT GeodesicLine {
+  class GEOGRAPHICLIB_EXPORT GeodesicLine {
   private:
     typedef Math::real real;
     friend class Geodesic;
@@ -68,7 +68,7 @@ namespace GeographicLib {
 
     real _lat1, _lon1, _azi1;
     real _a, _f, _b, _c2, _f1, _salp0, _calp0, _k2,
-      _salp1, _calp1, _ssig1, _csig1, _stau1, _ctau1, _somg1, _comg1,
+      _salp1, _calp1, _ssig1, _csig1, _dn1, _stau1, _ctau1, _somg1, _comg1,
       _A1m1, _A2m1, _A3c, _B11, _B21, _B31, _A4, _B41;
     // index zero elements of _C1a, _C1pa, _C2a, _C3a are unused
     real _C1a[nC1_ + 1], _C1pa[nC1p_ + 1], _C2a[nC2_ + 1], _C3a[nC3_],
@@ -144,7 +144,7 @@ namespace GeographicLib {
        **********************************************************************/
       AREA          = Geodesic::AREA,
       /**
-       * All capabilities.  Calculate everything.
+       * All capabilities, calculate everything.
        * @hideinitializer
        **********************************************************************/
       ALL           = Geodesic::ALL,
@@ -160,39 +160,38 @@ namespace GeographicLib {
      *
      * @param[in] g A Geodesic object used to compute the necessary information
      *   about the GeodesicLine.
-     *
      * @param[in] lat1 latitude of point 1 (degrees).
      * @param[in] lon1 longitude of point 1 (degrees).
      * @param[in] azi1 azimuth at point 1 (degrees).
      * @param[in] caps bitor'ed combination of GeodesicLine::mask values
      *   specifying the capabilities the GeodesicLine object should possess,
      *   i.e., which quantities can be returned in calls to
-     *   GeodesicLib::Position.
+     *   GeodesicLine::Position.
      *
-     * \e lat1 should be in the range [-90, 90]; \e lon1 and \e azi1 should be
-     * in the range [-180, 360].
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).
      *
      * The GeodesicLine::mask values are
      * - \e caps |= GeodesicLine::LATITUDE for the latitude \e lat2; this is
-     *   added automatically
-     * - \e caps |= GeodesicLine::LONGITUDE for the latitude \e lon2
+     *   added automatically;
+     * - \e caps |= GeodesicLine::LONGITUDE for the latitude \e lon2;
      * - \e caps |= GeodesicLine::AZIMUTH for the latitude \e azi2; this is
-     *   added automatically
-     * - \e caps |= GeodesicLine::DISTANCE for the distance \e s12
-     * - \e caps |= GeodesicLine::REDUCEDLENGTH for the reduced length \e m12
+     *   added automatically;
+     * - \e caps |= GeodesicLine::DISTANCE for the distance \e s12;
+     * - \e caps |= GeodesicLine::REDUCEDLENGTH for the reduced length \e m12;
      * - \e caps |= GeodesicLine::GEODESICSCALE for the geodesic scales \e M12
-     *   and \e M21
-     * - \e caps |= GeodesicLine::AREA for the area \e S12
+     *   and \e M21;
+     * - \e caps |= GeodesicLine::AREA for the area \e S12;
      * - \e caps |= GeodesicLine::DISTANCE_IN permits the length of the
      *   geodesic to be given in terms of \e s12; without this capability the
-     *   length can only be specified in terms of arc length.
+     *   length can only be specified in terms of arc length;
+     * - \e caps |= GeodesicLine::ALL for all of the above.
      * .
-     * The default value of \e caps is GeodesicLine::ALL which turns on all the
-     * capabilities.
+     * The default value of \e caps is GeodesicLine::ALL.
      *
-     * If the point is at a pole, the azimuth is defined by keeping the \e lon1
-     * fixed and writing \e lat1 = 90 - \e eps or -90 + \e eps and taking the
-     * limit \e eps -> 0 from above.
+     * If the point is at a pole, the azimuth is defined by keeping \e lon1
+     * fixed, writing \e lat1 = ±(90° − ε), and taking
+     * the limit ε → 0+.
      **********************************************************************/
     GeodesicLine(const Geodesic& g, real lat1, real lon1, real azi1,
                  unsigned caps = ALL)
@@ -212,11 +211,11 @@ namespace GeographicLib {
     ///@{
 
     /**
-     * Compute the position of point 2 which is a distance \e s12 (meters)
-     * from point 1.
+     * Compute the position of point 2 which is a distance \e s12 (meters) from
+     * point 1.
      *
      * @param[in] s12 distance between point 1 and point 2 (meters); it can be
-     *   signed.
+     *   negative.
      * @param[out] lat2 latitude of point 2 (degrees).
      * @param[out] lon2 longitude of point 2 (degrees); requires that the
      *   GeodesicLine object was constructed with \e caps |=
@@ -236,7 +235,8 @@ namespace GeographicLib {
      *   GeodesicLine::AREA.
      * @return \e a12 arc length of between point 1 and point 2 (degrees).
      *
-     * The values of \e lon2 and \e azi2 returned are in the range [-180, 180).
+     * The values of \e lon2 and \e azi2 returned are in the range
+     * [−180°, 180°).
      *
      * The GeodesicLine object \e must have been constructed with \e caps |=
      * GeodesicLine::DISTANCE_IN; otherwise Math::NaN() is returned and no
@@ -331,7 +331,7 @@ namespace GeographicLib {
      * from point 1.
      *
      * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
-     *   be signed.
+     *   be negative.
      * @param[out] lat2 latitude of point 2 (degrees).
      * @param[out] lon2 longitude of point 2 (degrees); requires that the
      *   GeodesicLine object was constructed with \e caps |=
@@ -353,7 +353,8 @@ namespace GeographicLib {
      *   that the GeodesicLine object was constructed with \e caps |=
      *   GeodesicLine::AREA.
      *
-     * The values of \e lon2 and \e azi2 returned are in the range [-180, 180).
+     * The values of \e lon2 and \e azi2 returned are in the range
+     * [−180°, 180°).
      *
      * Requesting a value which the GeodesicLine object is not capable of
      * computing is not an error; the corresponding argument will not be
@@ -457,7 +458,7 @@ namespace GeographicLib {
      *   been constructed with \e caps |= GeodesicLine::DISTANCE_IN.
      * @param[in] s12_a12 if \e arcmode is false, this is the distance between
      *   point 1 and point 2 (meters); otherwise it is the arc length between
-     *   point 1 and point 2 (degrees); it can be signed.
+     *   point 1 and point 2 (degrees); it can be negative.
      * @param[in] outmask a bitor'ed combination of GeodesicLine::mask values
      *   specifying which of the following parameters should be set.
      * @param[out] lat2 latitude of point 2 (degrees).
@@ -483,15 +484,16 @@ namespace GeographicLib {
      * @return \e a12 arc length of between point 1 and point 2 (degrees).
      *
      * The GeodesicLine::mask values possible for \e outmask are
-     * - \e outmask |= GeodesicLine::LATITUDE for the latitude \e lat2.
-     * - \e outmask |= GeodesicLine::LONGITUDE for the latitude \e lon2.
-     * - \e outmask |= GeodesicLine::AZIMUTH for the latitude \e azi2.
-     * - \e outmask |= GeodesicLine::DISTANCE for the distance \e s12.
+     * - \e outmask |= GeodesicLine::LATITUDE for the latitude \e lat2;
+     * - \e outmask |= GeodesicLine::LONGITUDE for the latitude \e lon2;
+     * - \e outmask |= GeodesicLine::AZIMUTH for the latitude \e azi2;
+     * - \e outmask |= GeodesicLine::DISTANCE for the distance \e s12;
      * - \e outmask |= GeodesicLine::REDUCEDLENGTH for the reduced length \e
-     *   m12.
+     *   m12;
      * - \e outmask |= GeodesicLine::GEODESICSCALE for the geodesic scales \e
-     *   M12 and \e M21.
-     * - \e outmask |= GeodesicLine::AREA for the area \e S12.
+     *   M12 and \e M21;
+     * - \e outmask |= GeodesicLine::AREA for the area \e S12;
+     * - \e outmask |= GeodesicLine::ALL for all of the above.
      * .
      * Requesting a value which the GeodesicLine object is not capable of
      * computing is not an error; the corresponding argument will not be
@@ -534,7 +536,7 @@ namespace GeographicLib {
 
     /**
      * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
-     * the equator in a northward direction.
+     *   the equator in a northward direction.
      **********************************************************************/
     Math::real EquatorialAzimuth() const throw() {
       return Init() ?
@@ -543,7 +545,7 @@ namespace GeographicLib {
 
     /**
      * @return \e a1 the arc length (degrees) between the northward equatorial
-     * crossing and point 1.
+     *   crossing and point 1.
      **********************************************************************/
     Math::real EquatorialArc() const throw() {
       return Init() ?
diff --git a/include/GeographicLib/GeodesicLineExact.hpp b/include/GeographicLib/GeodesicLineExact.hpp
new file mode 100644
index 0000000..ca7d0d2
--- /dev/null
+++ b/include/GeographicLib/GeodesicLineExact.hpp
@@ -0,0 +1,573 @@
+/**
+ * \file GeodesicLineExact.hpp
+ * \brief Header for GeographicLib::GeodesicLineExact class
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#if !defined(GEOGRAPHICLIB_GEODESICLINEEXACT_HPP)
+#define GEOGRAPHICLIB_GEODESICLINEEXACT_HPP 1
+
+#include <GeographicLib/Constants.hpp>
+#include <GeographicLib/GeodesicExact.hpp>
+#include <GeographicLib/EllipticFunction.hpp>
+
+namespace GeographicLib {
+
+  /**
+   * \brief An exact geodesic line
+   *
+   * GeodesicLineExact facilitates the determination of a series of points on a
+   * single geodesic.  This is a companion to the GeodesicExact class.  For
+   * additional information on this class see the documentation on the
+   * GeodesicLine class.
+   *
+   * Example of use:
+   * \include example-GeodesicLineExact.cpp
+   *
+   * <a href="Geod.1.html">Geod</a> is a command-line utility providing access
+   * to the functionality of GeodesicExact and GeodesicLineExact (via the -E
+   * option).
+   **********************************************************************/
+
+  class GEOGRAPHICLIB_EXPORT GeodesicLineExact {
+  private:
+    typedef Math::real real;
+    friend class GeodesicExact;
+    static const int nC4_ = GeodesicExact::nC4_;
+
+    real _lat1, _lon1, _azi1;
+    real _a, _f, _b, _c2, _f1, _e2, _salp0, _calp0, _k2,
+      _salp1, _calp1, _ssig1, _csig1, _dn1, _stau1, _ctau1,
+      _somg1, _comg1, _cchi1,
+      _A4, _B41, _E0, _D0, _H0, _E1, _D1, _H1;
+    real _C4a[nC4_];            // all the elements of _C4a are used
+    EllipticFunction _E;
+    unsigned _caps;
+
+    enum captype {
+      CAP_NONE = GeodesicExact::CAP_NONE,
+      CAP_E    = GeodesicExact::CAP_E,
+      CAP_D    = GeodesicExact::CAP_D,
+      CAP_H    = GeodesicExact::CAP_H,
+      CAP_C4   = GeodesicExact::CAP_C4,
+      CAP_ALL  = GeodesicExact::CAP_ALL,
+      OUT_ALL  = GeodesicExact::OUT_ALL,
+    };
+  public:
+
+    /**
+     * Bit masks for what calculations to do.  They signify to the
+     * GeodesicLineExact::GeodesicLineExact constructor and to
+     * GeodesicExact::Line what capabilities should be included in the
+     * GeodesicLineExact object.  This is merely a duplication of
+     * GeodesicExact::mask.
+     **********************************************************************/
+    enum mask {
+      /**
+       * No capabilities, no output.
+       * @hideinitializer
+       **********************************************************************/
+      NONE          = GeodesicExact::NONE,
+      /**
+       * Calculate latitude \e lat2.  (It's not necessary to include this as a
+       * capability to GeodesicLineExact because this is included by default.)
+       * @hideinitializer
+       **********************************************************************/
+      LATITUDE      = GeodesicExact::LATITUDE,
+      /**
+       * Calculate longitude \e lon2.
+       * @hideinitializer
+       **********************************************************************/
+      LONGITUDE     = GeodesicExact::LONGITUDE,
+      /**
+       * Calculate azimuths \e azi1 and \e azi2.  (It's not necessary to
+       * include this as a capability to GeodesicLineExact because this is
+       * included by default.)
+       * @hideinitializer
+       **********************************************************************/
+      AZIMUTH       = GeodesicExact::AZIMUTH,
+      /**
+       * Calculate distance \e s12.
+       * @hideinitializer
+       **********************************************************************/
+      DISTANCE      = GeodesicExact::DISTANCE,
+      /**
+       * Allow distance \e s12 to be used as input in the direct geodesic
+       * problem.
+       * @hideinitializer
+       **********************************************************************/
+      DISTANCE_IN   = GeodesicExact::DISTANCE_IN,
+      /**
+       * Calculate reduced length \e m12.
+       * @hideinitializer
+       **********************************************************************/
+      REDUCEDLENGTH = GeodesicExact::REDUCEDLENGTH,
+      /**
+       * Calculate geodesic scales \e M12 and \e M21.
+       * @hideinitializer
+       **********************************************************************/
+      GEODESICSCALE = GeodesicExact::GEODESICSCALE,
+      /**
+       * Calculate area \e S12.
+       * @hideinitializer
+       **********************************************************************/
+      AREA          = GeodesicExact::AREA,
+      /**
+       * All capabilities, calculate everything.
+       * @hideinitializer
+       **********************************************************************/
+      ALL           = GeodesicExact::ALL,
+    };
+
+    /** \name Constructors
+     **********************************************************************/
+    ///@{
+
+    /**
+     * Constructor for a geodesic line staring at latitude \e lat1, longitude
+     * \e lon1, and azimuth \e azi1 (all in degrees).
+     *
+     * @param[in] g A GeodesicExact object used to compute the necessary
+     *   information about the GeodesicLineExact.
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] azi1 azimuth at point 1 (degrees).
+     * @param[in] caps bitor'ed combination of GeodesicLineExact::mask values
+     *   specifying the capabilities the GeodesicLineExact object should
+     *   possess, i.e., which quantities can be returned in calls to
+     *   GeodesicLine::Position.
+     *
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).
+     *
+     * The GeodesicLineExact::mask values are
+     * - \e caps |= GeodesicLineExact::LATITUDE for the latitude \e lat2; this
+     *   is added automatically;
+     * - \e caps |= GeodesicLineExact::LONGITUDE for the latitude \e lon2;
+     * - \e caps |= GeodesicLineExact::AZIMUTH for the latitude \e azi2; this is
+     *   added automatically;
+     * - \e caps |= GeodesicLineExact::DISTANCE for the distance \e s12;
+     * - \e caps |= GeodesicLineExact::REDUCEDLENGTH for the reduced length \e
+         m12;
+     * - \e caps |= GeodesicLineExact::GEODESICSCALE for the geodesic scales \e
+     *   M12 and \e M21;
+     * - \e caps |= GeodesicLineExact::AREA for the area \e S12;
+     * - \e caps |= GeodesicLineExact::DISTANCE_IN permits the length of the
+     *   geodesic to be given in terms of \e s12; without this capability the
+     *   length can only be specified in terms of arc length;
+     * - \e caps |= GeodesicLineExact::ALL for all of the above.
+     * .
+     * The default value of \e caps is GeodesicLineExact::ALL.
+     *
+     * If the point is at a pole, the azimuth is defined by keeping \e lon1
+     * fixed, writing \e lat1 = ±(90° − ε), and taking
+     * the limit ε → 0+.
+     **********************************************************************/
+    GeodesicLineExact(const GeodesicExact& g, real lat1, real lon1, real azi1,
+                      unsigned caps = ALL)
+      throw();
+
+    /**
+     * A default constructor.  If GeodesicLineExact::Position is called on the
+     * resulting object, it returns immediately (without doing any
+     * calculations).  The object can be set with a call to
+     * GeodesicExact::Line.  Use Init() to test whether object is still in this
+     * uninitialized state.
+     **********************************************************************/
+    GeodesicLineExact() throw() : _caps(0U) {}
+    ///@}
+
+    /** \name Position in terms of distance
+     **********************************************************************/
+    ///@{
+
+    /**
+     * Compute the position of point 2 which is a distance \e s12 (meters)
+     * from point 1.
+     *
+     * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+     *   signed.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees); requires that the
+     *   GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::LONGITUDE.
+     * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+     * @param[out] m12 reduced length of geodesic (meters); requires that the
+     *   GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::REDUCEDLENGTH.
+     * @param[out] M12 geodesic scale of point 2 relative to point 1
+     *   (dimensionless); requires that the GeodesicLineExact object was
+     *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+     * @param[out] M21 geodesic scale of point 1 relative to point 2
+     *   (dimensionless); requires that the GeodesicLineExact object was
+     *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+     * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
+     *   that the GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::AREA.
+     * @return \e a12 arc length of between point 1 and point 2 (degrees).
+     *
+     * The values of \e lon2 and \e azi2 returned are in the range
+     * [−180°, 180°).
+     *
+     * The GeodesicLineExact object \e must have been constructed with \e caps
+     * |= GeodesicLineExact::DISTANCE_IN; otherwise Math::NaN() is returned and
+     * no parameters are set.  Requesting a value which the GeodesicLineExact
+     * object is not capable of computing is not an error; the corresponding
+     * argument will not be altered.
+     *
+     * The following functions are overloaded versions of
+     * GeodesicLineExact::Position which omit some of the output parameters.
+     * Note, however, that the arc length is always computed and returned as
+     * the function value.
+     **********************************************************************/
+    Math::real Position(real s12,
+                        real& lat2, real& lon2, real& azi2,
+                        real& m12, real& M12, real& M21,
+                        real& S12) const throw() {
+      real t;
+      return GenPosition(false, s12,
+                         LATITUDE | LONGITUDE | AZIMUTH |
+                         REDUCEDLENGTH | GEODESICSCALE | AREA,
+                         lat2, lon2, azi2, t, m12, M12, M21, S12);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::Position.
+     **********************************************************************/
+    Math::real Position(real s12, real& lat2, real& lon2) const throw() {
+      real t;
+      return GenPosition(false, s12,
+                         LATITUDE | LONGITUDE,
+                         lat2, lon2, t, t, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::Position.
+     **********************************************************************/
+    Math::real Position(real s12, real& lat2, real& lon2,
+                        real& azi2) const throw() {
+      real t;
+      return GenPosition(false, s12,
+                         LATITUDE | LONGITUDE | AZIMUTH,
+                         lat2, lon2, azi2, t, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::Position.
+     **********************************************************************/
+    Math::real Position(real s12, real& lat2, real& lon2,
+                        real& azi2, real& m12) const throw() {
+      real t;
+      return GenPosition(false, s12,
+                         LATITUDE | LONGITUDE |
+                         AZIMUTH | REDUCEDLENGTH,
+                         lat2, lon2, azi2, t, m12, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::Position.
+     **********************************************************************/
+    Math::real Position(real s12, real& lat2, real& lon2,
+                        real& azi2, real& M12, real& M21)
+      const throw() {
+      real t;
+      return GenPosition(false, s12,
+                         LATITUDE | LONGITUDE |
+                         AZIMUTH | GEODESICSCALE,
+                         lat2, lon2, azi2, t, t, M12, M21, t);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::Position.
+     **********************************************************************/
+    Math::real Position(real s12,
+                        real& lat2, real& lon2, real& azi2,
+                        real& m12, real& M12, real& M21)
+      const throw() {
+      real t;
+      return GenPosition(false, s12,
+                         LATITUDE | LONGITUDE | AZIMUTH |
+                         REDUCEDLENGTH | GEODESICSCALE,
+                         lat2, lon2, azi2, t, m12, M12, M21, t);
+    }
+
+    ///@}
+
+    /** \name Position in terms of arc length
+     **********************************************************************/
+    ///@{
+
+    /**
+     * Compute the position of point 2 which is an arc length \e a12 (degrees)
+     * from point 1.
+     *
+     * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
+     *   be signed.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees); requires that the
+     *   GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::LONGITUDE.
+     * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+     * @param[out] s12 distance between point 1 and point 2 (meters); requires
+     *   that the GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::DISTANCE.
+     * @param[out] m12 reduced length of geodesic (meters); requires that the
+     *   GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::REDUCEDLENGTH.
+     * @param[out] M12 geodesic scale of point 2 relative to point 1
+     *   (dimensionless); requires that the GeodesicLineExact object was
+     *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+     * @param[out] M21 geodesic scale of point 1 relative to point 2
+     *   (dimensionless); requires that the GeodesicLineExact object was
+     *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+     * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
+     *   that the GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::AREA.
+     *
+     * The values of \e lon2 and \e azi2 returned are in the range
+     * [−180°, 180°).
+     *
+     * Requesting a value which the GeodesicLineExact object is not capable of
+     * computing is not an error; the corresponding argument will not be
+     * altered.
+     *
+     * The following functions are overloaded versions of
+     * GeodesicLineExact::ArcPosition which omit some of the output parameters.
+     **********************************************************************/
+    void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
+                     real& s12, real& m12, real& M12, real& M21,
+                     real& S12) const throw() {
+      GenPosition(true, a12,
+                  LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
+                  REDUCEDLENGTH | GEODESICSCALE | AREA,
+                  lat2, lon2, azi2, s12, m12, M12, M21, S12);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::ArcPosition.
+     **********************************************************************/
+    void ArcPosition(real a12, real& lat2, real& lon2)
+      const throw() {
+      real t;
+      GenPosition(true, a12,
+                  LATITUDE | LONGITUDE,
+                  lat2, lon2, t, t, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::ArcPosition.
+     **********************************************************************/
+    void ArcPosition(real a12,
+                     real& lat2, real& lon2, real& azi2)
+      const throw() {
+      real t;
+      GenPosition(true, a12,
+                  LATITUDE | LONGITUDE | AZIMUTH,
+                  lat2, lon2, azi2, t, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::ArcPosition.
+     **********************************************************************/
+    void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
+                     real& s12) const throw() {
+      real t;
+      GenPosition(true, a12,
+                  LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
+                  lat2, lon2, azi2, s12, t, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::ArcPosition.
+     **********************************************************************/
+    void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
+                     real& s12, real& m12) const throw() {
+      real t;
+      GenPosition(true, a12,
+                  LATITUDE | LONGITUDE | AZIMUTH |
+                  DISTANCE | REDUCEDLENGTH,
+                  lat2, lon2, azi2, s12, m12, t, t, t);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::ArcPosition.
+     **********************************************************************/
+    void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
+                     real& s12, real& M12, real& M21)
+      const throw() {
+      real t;
+      GenPosition(true, a12,
+                  LATITUDE | LONGITUDE | AZIMUTH |
+                  DISTANCE | GEODESICSCALE,
+                  lat2, lon2, azi2, s12, t, M12, M21, t);
+    }
+
+    /**
+     * See the documentation for GeodesicLineExact::ArcPosition.
+     **********************************************************************/
+    void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
+                     real& s12, real& m12, real& M12, real& M21)
+      const throw() {
+      real t;
+      GenPosition(true, a12,
+                  LATITUDE | LONGITUDE | AZIMUTH |
+                  DISTANCE | REDUCEDLENGTH | GEODESICSCALE,
+                  lat2, lon2, azi2, s12, m12, M12, M21, t);
+    }
+    ///@}
+
+    /** \name The general position function.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * The general position function.  GeodesicLineExact::Position and
+     * GeodesicLineExact::ArcPosition are defined in terms of this function.
+     *
+     * @param[in] arcmode boolean flag determining the meaning of the second
+     *   parameter; if arcmode is false, then the GeodesicLineExact object must
+     *   have been constructed with \e caps |= GeodesicLineExact::DISTANCE_IN.
+     * @param[in] s12_a12 if \e arcmode is false, this is the distance between
+     *   point 1 and point 2 (meters); otherwise it is the arc length between
+     *   point 1 and point 2 (degrees); it can be signed.
+     * @param[in] outmask a bitor'ed combination of GeodesicLineExact::mask
+     *   values specifying which of the following parameters should be set.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees); requires that the
+     *   GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::LONGITUDE.
+     * @param[out] azi2 (forward) azimuth at point 2 (degrees).
+     * @param[out] s12 distance between point 1 and point 2 (meters); requires
+     *   that the GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::DISTANCE.
+     * @param[out] m12 reduced length of geodesic (meters); requires that the
+     *   GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::REDUCEDLENGTH.
+     * @param[out] M12 geodesic scale of point 2 relative to point 1
+     *   (dimensionless); requires that the GeodesicLineExact object was
+     *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+     * @param[out] M21 geodesic scale of point 1 relative to point 2
+     *   (dimensionless); requires that the GeodesicLineExact object was
+     *   constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
+     * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
+     *   that the GeodesicLineExact object was constructed with \e caps |=
+     *   GeodesicLineExact::AREA.
+     * @return \e a12 arc length of between point 1 and point 2 (degrees).
+     *
+     * The GeodesicLineExact::mask values possible for \e outmask are
+     * - \e outmask |= GeodesicLineExact::LATITUDE for the latitude \e lat2;
+     * - \e outmask |= GeodesicLineExact::LONGITUDE for the latitude \e lon2;
+     * - \e outmask |= GeodesicLineExact::AZIMUTH for the latitude \e azi2;
+     * - \e outmask |= GeodesicLineExact::DISTANCE for the distance \e s12;
+     * - \e outmask |= GeodesicLineExact::REDUCEDLENGTH for the reduced length
+     *   \e m12;
+     * - \e outmask |= GeodesicLineExact::GEODESICSCALE for the geodesic scales
+     *   \e M12 and \e M21;
+     * - \e outmask |= GeodesicLineExact::AREA for the area \e S12;
+     * - \e outmask |= GeodesicLine::ALL for all of the above.
+     * .
+     * Requesting a value which the GeodesicLineExact object is not capable of
+     * computing is not an error; the corresponding argument will not be
+     * altered.  Note, however, that the arc length is always computed and
+     * returned as the function value.
+     **********************************************************************/
+    Math::real GenPosition(bool arcmode, real s12_a12, unsigned outmask,
+                           real& lat2, real& lon2, real& azi2,
+                           real& s12, real& m12, real& M12, real& M21,
+                           real& S12) const throw();
+
+    ///@}
+
+    /** \name Inspector functions
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @return true if the object has been initialized.
+     **********************************************************************/
+    bool Init() const throw() { return _caps != 0U; }
+
+    /**
+     * @return \e lat1 the latitude of point 1 (degrees).
+     **********************************************************************/
+    Math::real Latitude() const throw()
+    { return Init() ? _lat1 : Math::NaN<real>(); }
+
+    /**
+     * @return \e lon1 the longitude of point 1 (degrees).
+     **********************************************************************/
+    Math::real Longitude() const throw()
+    { return Init() ? _lon1 : Math::NaN<real>(); }
+
+    /**
+     * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
+     **********************************************************************/
+    Math::real Azimuth() const throw()
+    { return Init() ? _azi1 : Math::NaN<real>(); }
+
+    /**
+     * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
+     * the equator in a northward direction.
+     **********************************************************************/
+    Math::real EquatorialAzimuth() const throw() {
+      return Init() ?
+        atan2(_salp0, _calp0) / Math::degree<real>() : Math::NaN<real>();
+    }
+
+    /**
+     * @return \e a1 the arc length (degrees) between the northward equatorial
+     * crossing and point 1.
+     **********************************************************************/
+    Math::real EquatorialArc() const throw() {
+      return Init() ?
+        atan2(_ssig1, _csig1) / Math::degree<real>() : Math::NaN<real>();
+    }
+
+    /**
+     * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+     *   the value inherited from the GeodesicExact object used in the
+     *   constructor.
+     **********************************************************************/
+    Math::real MajorRadius() const throw()
+    { return Init() ? _a : Math::NaN<real>(); }
+
+    /**
+     * @return \e f the flattening of the ellipsoid.  This is the value
+     *   inherited from the GeodesicExact object used in the constructor.
+     **********************************************************************/
+    Math::real Flattening() const throw()
+    { return Init() ? _f : Math::NaN<real>(); }
+
+    /// \cond SKIP
+    /**
+     * <b>DEPRECATED</b>
+     * @return \e r the inverse flattening of the ellipsoid.
+     **********************************************************************/
+    Math::real InverseFlattening() const throw()
+    { return Init() ? 1/_f : Math::NaN<real>(); }
+    /// \endcond
+
+    /**
+     * @return \e caps the computational capabilities that this object was
+     *   constructed with.  LATITUDE and AZIMUTH are always included.
+     **********************************************************************/
+    unsigned Capabilities() const throw() { return _caps; }
+
+    /**
+     * @param[in] testcaps a set of bitor'ed GeodesicLineExact::mask values.
+     * @return true if the GeodesicLineExact object has all these capabilities.
+     **********************************************************************/
+    bool Capabilities(unsigned testcaps) const throw() {
+      testcaps &= OUT_ALL;
+      return (_caps & testcaps) == testcaps;
+    }
+    ///@}
+
+  };
+
+} // namespace GeographicLib
+
+#endif  // GEOGRAPHICLIB_GEODESICLINEEXACT_HPP
diff --git a/include/GeographicLib/Geohash.hpp b/include/GeographicLib/Geohash.hpp
new file mode 100644
index 0000000..0533afc
--- /dev/null
+++ b/include/GeographicLib/Geohash.hpp
@@ -0,0 +1,179 @@
+/**
+ * \file Geohash.hpp
+ * \brief Header for GeographicLib::Geohash class
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#if !defined(GEOGRAPHICLIB_GEOHASH_HPP)
+#define GEOGRAPHICLIB_GEOHASH_HPP 1
+
+#include <GeographicLib/Constants.hpp>
+
+#if defined(_MSC_VER)
+// Squelch warnings about dll vs string
+#  pragma warning (push)
+#  pragma warning (disable: 4251)
+#endif
+
+namespace GeographicLib {
+
+  /**
+   * \brief Conversions for geohashes
+   *
+   * Geohashes are described in
+   * - http://en.wikipedia.org/wiki/Geohash
+   * - http://geohash.org/
+   * .
+   * They provide a compact string representation of a particular geographic
+   * location (expressed as latitude and longitude), with the property that if
+   * trailing characters are dropped from the string the geographic location
+   * remains nearby.
+   *
+   * Example of use:
+   * \include example-Geohash.cpp
+   **********************************************************************/
+
+  class GEOGRAPHICLIB_EXPORT Geohash {
+  private:
+    typedef Math::real real;
+    static const int maxlen_ = 18;
+    static const unsigned long long mask_ = 1ULL << 45;
+    static const int decprec_[];
+    static const real loneps_;
+    static const real lateps_;
+    static const real shift_;
+    static const std::string lcdigits_;
+    static const std::string ucdigits_;
+    Geohash();                     // Disable constructor
+
+  public:
+
+    /**
+     * Convert from geographic coordinates to a geohash.
+     *
+     * @param[in] lat latitude of point (degrees).
+     * @param[in] lon longitude of point (degrees).
+     * @param[in] len the length of the resulting geohash.
+     * @param[out] geohash the geohash.
+     * @exception GeographicErr if \e la is not in [−90°,
+     *   90°].
+     * @exception GeographicErr if \e lon is not in [−540°,
+     *   540°).
+     * @exception std::bad_alloc if memory for \e geohash can't be allocated.
+     *
+     * Internally, \e len is first put in the range [0, 18].
+     *
+     * If \e lat or \e lon is NaN, the returned geohash is "nan".
+     **********************************************************************/
+    static void Forward(real lat, real lon, int len, std::string& geohash);
+
+    /**
+     * Convert from a geohash to geographic coordinates.
+     *
+     * @param[in] geohash the geohash.
+     * @param[out] lat latitude of point (degrees).
+     * @param[out] lon longitude of point (degrees).
+     * @param[out] len the length of the geohash.
+     * @param[in] centerp if true (the default) return the center of the
+     *   geohash location, otherwise return the south-west corner.
+     * @exception GeographicErr if \e geohash contains illegal characters.
+     *
+     * Only the first 18 characters for \e geohash are considered.  The case of
+     * the letters in \e geohash is ignored.
+     *
+     * If the first three characters in \e geohash are "nan", then \e lat and
+     * \e lon are set to NaN.
+     **********************************************************************/
+    static void Reverse(const std::string& geohash, real& lat, real& lon,
+                        int& len, bool centerp = true);
+
+    /**
+     * The latitude resolution of a geohash.
+     *
+     * @param[in] len the length of the geohash.
+     * @return the latitude resolution (degrees).
+     *
+     * Internally, \e len is first put in the range [0, 18].
+     **********************************************************************/
+    static Math::real LatitudeResolution(int len) throw() {
+      len = (std::max)(0, (std::min)(int(maxlen_), len));
+      return 180 * std::pow(0.5, 5 * len / 2);
+    }
+
+    /**
+     * The longitude resolution of a geohash.
+     *
+     * @param[in] len the length of the geohash.
+     * @return the longitude resolution (degrees).
+     *
+     * Internally, \e len is first put in the range [0, 18].
+     **********************************************************************/
+    static Math::real LongitudeResolution(int len) throw() {
+      len = (std::max)(0, (std::min)(int(maxlen_), len));
+      return 360 * std::pow(0.5, 5 * len - 5 * len / 2);
+    }
+
+    /**
+     * The geohash length required to meet a given geographic resolution.
+     *
+     * @param[in] res the minimum of resolution in latitude and longitude
+     *   (degrees).
+     * @return geohash length.
+     *
+     * The returned length is in the range [0, 18].
+     **********************************************************************/
+    static int GeohashLength(real res) throw() {
+      res = std::abs(res);
+      for (int len = 0; len < maxlen_; ++len)
+        if (LongitudeResolution(len) <= res)
+          return len;
+      return maxlen_;
+    }
+
+    /**
+     * The geohash length required to meet a given geographic resolution.
+     *
+     * @param[in] latres the resolution in latitude (degrees).
+     * @param[in] lonres the resolution in longitude (degrees).
+     * @return geohash length.
+     *
+     * The returned length is in the range [0, 18].
+     **********************************************************************/
+    static int GeohashLength(real latres, real lonres) throw() {
+      latres = std::abs(latres);
+      lonres = std::abs(lonres);
+      for (int len = 0; len < maxlen_; ++len)
+        if (LatitudeResolution(len) <= latres &&
+            LongitudeResolution(len) <= lonres)
+          return len;
+      return maxlen_;
+    }
+
+    /**
+     * The decimal geographic precision required to match a given geohash
+     * length.  This is the number of digits needed after decimal point in a
+     * decimal degrees representation.
+     *
+     * @param[in] len the length of the geohash.
+     * @return the decimal precision (may be negative).
+     *
+     * Internally, \e len is first put in the range [0, 18].  The returned
+     * decimal precision is in the range [−2, 12].
+     **********************************************************************/
+    static int DecimalPrecision(int len) throw() {
+      return -int(std::floor(std::log(LatitudeResolution(len))/
+                             std::log(Math::real(10))));
+    }
+
+  };
+
+} // namespace GeographicLib
+
+#if defined(_MSC_VER)
+#  pragma warning (pop)
+#endif
+
+#endif  // GEOGRAPHICLIB_GEOHASH_HPP
diff --git a/include/GeographicLib/Geoid.hpp b/include/GeographicLib/Geoid.hpp
index 0801434..0a45372 100644
--- a/include/GeographicLib/Geoid.hpp
+++ b/include/GeographicLib/Geoid.hpp
@@ -8,29 +8,27 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_GEOID_HPP)
-#define GEOGRAPHICLIB_GEOID_HPP \
-  "$Id: 4e4eb5941d16ad00416798703d246a6f7ef5fe46 $"
+#define GEOGRAPHICLIB_GEOID_HPP 1
 
-#include <string>
 #include <vector>
 #include <fstream>
 #include <GeographicLib/Constants.hpp>
 
 #if defined(_MSC_VER)
-// Squelch warnings about dll vs vector
-#pragma warning (push)
-#pragma warning (disable: 4251)
+// Squelch warnings about dll vs vector and constant conditional expressions
+#  pragma warning (push)
+#  pragma warning (disable: 4251 4127)
 #endif
 
 #if !defined(PGM_PIXEL_WIDTH)
 /**
- * The size of the pixel data in the pgm data files for the geoids.  2
- * is the standard size corresponding to a maxval 2^16-1.  Setting it
- * to 4 uses a maxval of 2^32-1 and changes the extension for the data
- * files from .pgm to .pgm4.  Note that the format of these pgm4 files
+ * The size of the pixel data in the pgm data files for the geoids.  2 is the
+ * standard size corresponding to a maxval 2<sup>16</sup>−1.  Setting it
+ * to 4 uses a maxval of 2<sup>32</sup>−1 and changes the extension for
+ * the data files from .pgm to .pgm4.  Note that the format of these pgm4 files
  * is a non-standard extension of the pgm format.
  **********************************************************************/
-#define PGM_PIXEL_WIDTH 2
+#  define PGM_PIXEL_WIDTH 2
 #endif
 
 namespace GeographicLib {
@@ -82,7 +80,7 @@ namespace GeographicLib {
    * providing access to the functionality of Geoid.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT Geoid {
+  class GEOGRAPHICLIB_EXPORT Geoid {
   private:
     typedef Math::real real;
 #if PGM_PIXEL_WIDTH != 4
@@ -211,15 +209,17 @@ namespace GeographicLib {
      *   true (the default) means cubic.
      * @param[in] threadsafe (optional), if true, construct a thread safe
      *   object.  The default is false
+     * @exception GeographicErr if the data file cannot be found, is
+     *   unreadable, or is corrupt.
+     * @exception GeographicErr if \e threadsafe is true but the memory
+     *   necessary for caching the data can't be allocated.
      *
      * The data file is formed by appending ".pgm" to the name.  If \e path is
      * specified (and is non-empty), then the file is loaded from directory, \e
-     * path.  Otherwise the path is given by DefaultGeoidPath().  This may
-     * throw an exception because the file does not exist, is unreadable, or is
-     * corrupt.  If the \e threadsafe parameter is true, the data set is read
-     * into memory (which this may also cause an exception to be thrown), the
-     * data file is closed, and single-cell caching is turned off; this results
-     * in a Geoid object which \e is thread safe.
+     * path.  Otherwise the path is given by DefaultGeoidPath().  If the \e
+     * threadsafe parameter is true, the data set is read into memory, the data
+     * file is closed, and single-cell caching is turned off; this results in a
+     * Geoid object which \e is thread safe.
      **********************************************************************/
     explicit Geoid(const std::string& name, const std::string& path = "",
                    bool cubic = true, bool threadsafe = false);
@@ -231,29 +231,33 @@ namespace GeographicLib {
      * @param[in] west longitude (degrees) of the west edge of the cached area.
      * @param[in] north latitude (degrees) of the north edge of the cached area.
      * @param[in] east longitude (degrees) of the east edge of the cached area.
+     * @exception GeographicErr if the memory necessary for caching the data
+     *   can't be allocated (in this case, you will have no cache and can try
+     *   again with a smaller area).
+     * @exception GeographicErr if there's a problem reading the data.
+     * @exception GeographicErr if this is called on a threadsafe Geoid.
      *
      * Cache the data for the specified "rectangular" area bounded by the
      * parallels \e south and \e north and the meridians \e west and \e east.
      * \e east is always interpreted as being east of \e west, if necessary by
-     * adding 360<sup>o</sup> to its value.  This may throw an error because of
-     * insufficient memory or because of an error reading the data from the
-     * file.  In this case, you can catch the error and either do nothing (you
-     * will have no cache in this case) or try again with a smaller area.  \e
-     * south and \e north should be in the range [-90, 90]; \e west and \e east
-     * should be in the range [-180, 360].  An exception is thrown if this
-     * routine is called on a thread safe Geoid.
+     * adding 360° to its value.  \e south and \e north should be in
+     * the range [−90°, 90°]; \e west and \e east should
+     * be in the range [−540°, 540°).
      **********************************************************************/
     void CacheArea(real south, real west, real north, real east) const;
 
     /**
-     * Cache all the data.  On most computers, this is fast for data sets with
-     * grid resolution of 5' or coarser.  For a 1' grid, the required RAM is
-     * 450MB; a 2.5' grid needs 72MB; and a 5' grid needs 18MB.  This may throw
-     * an error because of insufficient memory or because of an error reading
-     * the data from the file.  In this case, you can catch the error and
-     * either do nothing (you will have no cache in this case) or try using
-     * Geoid::CacheArea on a specific area.  An exception is thrown if this
-     * routine is called on a thread safe Geoid.
+     * Cache all the data.
+     *
+     * @exception GeographicErr if the memory necessary for caching the data
+     *   can't be allocated (in this case, you will have no cache and can try
+     *   again with a smaller area).
+     * @exception GeographicErr if there's a problem reading the data.
+     * @exception GeographicErr if this is called on a threadsafe Geoid.
+     *
+     * On most computers, this is fast for data sets with grid resolution of 5'
+     * or coarser.  For a 1' grid, the required RAM is 450MB; a 2.5' grid needs
+     * 72MB; and a 5' grid needs 18MB.
      **********************************************************************/
     void CacheAll() const { CacheArea(real(-90), real(0),
                                       real(90), real(360)); }
@@ -274,12 +278,12 @@ namespace GeographicLib {
      *
      * @param[in] lat latitude of the point (degrees).
      * @param[in] lon longitude of the point (degrees).
+     * @exception GeographicErr if there's a problem reading the data; this
+     *   never happens if (\e lat, \e lon) is within a successfully cached area.
      * @return geoid height (meters).
      *
-     * The latitude should be in [-90, 90] and longitude should be in
-     * [-180,360].  This may throw an error because of an error reading data
-     * from disk.  However, it will not throw if (\e lat, \e lon) is within a
-     * successfully cached area.
+     * The latitude should be in [−90°, 90°] and
+     * longitude should be in [−540°, 540°).
      **********************************************************************/
     Math::real operator()(real lat, real lon) const {
       real gradn, grade;
@@ -293,17 +297,17 @@ namespace GeographicLib {
      * @param[in] lon longitude of the point (degrees).
      * @param[out] gradn northerly gradient (dimensionless).
      * @param[out] grade easterly gradient (dimensionless).
+     * @exception GeographicErr if there's a problem reading the data; this
+     *   never happens if (\e lat, \e lon) is within a successfully cached area.
      * @return geoid height (meters).
      *
-     * The latitude should be in [-90, 90] and longitude should be in [-180,
-     * 360].  This may throw an error because of an error reading data from
-     * disk.  However, it will not throw if (\e lat, \e lon) is within a
-     * successfully cached area.  As a result of the way that the geoid data is
-     * stored, the calculation of gradients can result in large quantization
-     * errors.  This is particularly acute for fine grids, at high latitudes,
-     * and for the easterly gradient.  If you need to compute the direction of
-     * the acceleration due to gravity accurately, you should use
-     * GravityModel::Gravity.
+     * The latitude should be in [−90°, 90°] and
+     * longitude should be in [−540°, 540°).  As a result
+     * of the way that the geoid data is stored, the calculation of gradients
+     * can result in large quantization errors.  This is particularly acute for
+     * fine grids, at high latitudes, and for the easterly gradient.  If you
+     * need to compute the direction of the acceleration due to gravity
+     * accurately, you should use GravityModel::Gravity.
      **********************************************************************/
     Math::real operator()(real lat, real lon, real& gradn, real& grade) const {
       return height(lat, lon, true, gradn, grade);
@@ -320,6 +324,8 @@ namespace GeographicLib {
      *   conversion; Geoid::GEOIDTOELLIPSOID means convert a height above the
      *   geoid to a height above the ellipsoid; Geoid::ELLIPSOIDTOGEOID means
      *   convert a height above the ellipsoid to a height above the geoid.
+     * @exception GeographicErr if there's a problem reading the data; this
+     *   never happens if (\e lat, \e lon) is within a successfully cached area.
      * @return converted height (meters).
      **********************************************************************/
     Math::real ConvertHeight(real lat, real lon, real h,
@@ -371,7 +377,7 @@ namespace GeographicLib {
      *   (meters).
      *
      * This relies on the value being stored in the data file.  If the value is
-     * absent, return -1.
+     * absent, return −1.
      **********************************************************************/
     Math::real MaxError() const throw() { return _maxerror; }
 
@@ -380,7 +386,7 @@ namespace GeographicLib {
      *   (meters).
      *
      * This relies on the value being stored in the data file.  If the value is
-     * absent, return -1.
+     * absent, return −1.
      **********************************************************************/
     Math::real RMSError() const throw() { return _rmserror; }
 
@@ -498,7 +504,7 @@ namespace GeographicLib {
 } // namespace GeographicLib
 
 #if defined(_MSC_VER)
-#pragma warning (pop)
+#  pragma warning (pop)
 #endif
 
 #endif  // GEOGRAPHICLIB_GEOID_HPP
diff --git a/include/GeographicLib/Gnomonic.hpp b/include/GeographicLib/Gnomonic.hpp
index 8991dc3..4b41d4a 100644
--- a/include/GeographicLib/Gnomonic.hpp
+++ b/include/GeographicLib/Gnomonic.hpp
@@ -2,14 +2,13 @@
  * \file Gnomonic.hpp
  * \brief Header for GeographicLib::Gnomonic class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_GNOMONIC_HPP)
-#define GEOGRAPHICLIB_GNOMONIC_HPP \
-  "$Id: f2e7e429e56165c314a518fada607c225132b945 $"
+#define GEOGRAPHICLIB_GNOMONIC_HPP 1
 
 #include <GeographicLib/Geodesic.hpp>
 #include <GeographicLib/GeodesicLine.hpp>
@@ -18,34 +17,29 @@
 namespace GeographicLib {
 
   /**
-   * \brief %Gnomonic Projection.
+   * \brief %Gnomonic projection
    *
    * %Gnomonic projection centered at an arbitrary position \e C on the
-   * ellipsoid.  This projection is derived in Section 13 of
+   * ellipsoid.  This projection is derived in Section 8 of
    * - C. F. F. Karney,
-   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
-   *   on an ellipsoid of revolution</a>,
-   *   Feb. 2011;
-   *   preprint
-   *   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.
+   *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   Algorithms for geodesics</a>,
+   *   J. Geodesy <b>87</b>, 43--55 (2013);
+   *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   10.1007/s00190-012-0578-z</a>;
+   *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   *   geod-addenda.html</a>.
    * .
-   * See also Section 8 of
-   * - C. F. F. Karney,
-   *   <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>,
-   *   Sept. 2011;
-   *   preprint
-   *   <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.
-   * .
-   * The projection of \e P is defined as follows: compute the
-   * geodesic line from \e C to \e P; compute the reduced length \e m12,
-   * geodesic scale \e M12, and \e rho = <i>m12</i>/\e M12; finally \e x = \e
-   * rho sin \e azi1; \e y = \e rho cos \e azi1, where \e azi1 is the azimuth
-   * of the geodesic at \e C.  The Gnomonic::Forward and Gnomonic::Reverse
-   * methods also return the azimuth \e azi of the geodesic at \e P and
-   * reciprocal scale \e rk in the azimuthal direction.  The scale in the
-   * radial direction if 1/<i>rk</i><sup>2</sup>.
+   * The projection of \e P is defined as follows: compute the geodesic line
+   * from \e C to \e P; compute the reduced length \e m12, geodesic scale \e
+   * M12, and ρ = <i>m12</i>/\e M12; finally \e x = ρ sin \e azi1; \e
+   * y = ρ cos \e azi1, where \e azi1 is the azimuth of the geodesic at \e
+   * C.  The Gnomonic::Forward and Gnomonic::Reverse methods also return the
+   * azimuth \e azi of the geodesic at \e P and reciprocal scale \e rk in the
+   * azimuthal direction.  The scale in the radial direction if
+   * 1/<i>rk</i><sup>2</sup>.
    *
-   * For a sphere, \e rho is reduces to \e a tan(<i>s12</i>/<i>a</i>), where \e
+   * For a sphere, ρ is reduces to \e a tan(<i>s12</i>/<i>a</i>), where \e
    * s12 is the length of the geodesic from \e C to \e P, and the gnomonic
    * projection has the property that all geodesics appear as straight lines.
    * For an ellipsoid, this property holds only for geodesics interesting the
@@ -66,8 +60,8 @@ namespace GeographicLib {
    * This result applies for any surface.  For an ellipsoid of revolution,
    * consider all geodesics whose end points are within a distance \e r of \e
    * C.  For a given \e r, the deviation is maximum when the latitude of \e C
-   * is 45<sup>o</sup>, when endpoints are a distance \e r away, and when their
-   * azimuths from the center are +/- 45<sup>o</sup> or +/- 135<sup>o</sup>.
+   * is 45°, when endpoints are a distance \e r away, and when their
+   * azimuths from the center are ± 45° or ± 135°.
    * To lowest order in \e r and the flattening \e f, the deviation is \e f
    * (<i>r</i>/2<i>a</i>)<sup>3</sup> \e r.
    *
@@ -91,7 +85,7 @@ namespace GeographicLib {
    *   proposed by I. G. Letoval'tsev, Generalization of the %Gnomonic
    *   Projection for a Spheroid and the Principal Geodetic Problems Involved
    *   in the Alignment of Surface Routes, Geodesy and Aerophotography (5),
-   *   271-274 (1963).
+   *   271--274 (1963).
    * - The projection given here.  This causes geodesics close to the center
    *   point to appear as straight lines in the projection; i.e., it
    *   generalizes the spherical great circle to a geodesic.
@@ -104,14 +98,14 @@ namespace GeographicLib {
    * and CassiniSoldner.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT Gnomonic {
+  class GEOGRAPHICLIB_EXPORT Gnomonic {
   private:
     typedef Math::real real;
     Geodesic _earth;
     real _a, _f;
     static const real eps0_;
     static const real eps_;
-    static const int numit_ = 5;
+    static const int numit_ = 10;
   public:
 
     /**
@@ -139,15 +133,15 @@ namespace GeographicLib {
      * @param[out] azi azimuth of geodesic at point (degrees).
      * @param[out] rk reciprocal of azimuthal scale at point.
      *
-     * \e lat0 and \e lat should be in the range [-90, 90] and \e lon0 and \e
-     * lon should be in the range [-180, 360].  The scale of the projection is
-     * 1/<i>rk</i><sup>2</sup> in the "radial" direction, \e azi clockwise from
-     * true north, and is 1/\e rk in the direction perpendicular to this.  If
-     * the point lies "over the horizon", i.e., if \e rk <= 0, then NaNs are
-     * returned for \e x and \e y (the correct values are returned for \e azi
-     * and \e rk).  A call to Forward followed by a call to Reverse will return
-     * the original (\e lat, \e lon) (to within roundoff) provided the point in
-     * not over the horizon.
+     * \e lat0 and \e lat should be in the range [−90°, 90°] and
+     * \e lon0 and \e lon should be in the range [−540°, 540°).
+     * The scale of the projection is 1/<i>rk</i><sup>2</sup> in the "radial"
+     * direction, \e azi clockwise from true north, and is 1/\e rk in the
+     * direction perpendicular to this.  If the point lies "over the horizon",
+     * i.e., if \e rk ≤ 0, then NaNs are returned for \e x and \e y (the
+     * correct values are returned for \e azi and \e rk).  A call to Forward
+     * followed by a call to Reverse will return the original (\e lat, \e lon)
+     * (to within roundoff) provided the point in not over the horizon.
      **********************************************************************/
     void Forward(real lat0, real lon0, real lat, real lon,
                  real& x, real& y, real& azi, real& rk) const throw();
@@ -164,16 +158,17 @@ namespace GeographicLib {
      * @param[out] azi azimuth of geodesic at point (degrees).
      * @param[out] rk reciprocal of azimuthal scale at point.
      *
-     * \e lat0 should be in the range [-90, 90] and \e lon0 should be in the
-     * range [-180, 360].  \e lat will be in the range [-90, 90] and \e lon
-     * will be in the range [-180, 180).  The scale of the projection is 1/\e
-     * rk<sup>2</sup> in the "radial" direction, \e azi clockwise from true
-     * north, and is 1/\e rk in the direction perpendicular to this.  Even
-     * though all inputs should return a valid \e lat and \e lon, it's possible
-     * that the procedure fails to converge for very large \e x or \e y; in
-     * this case NaNs are returned for all the output arguments.  A call to
-     * Reverse followed by a call to Forward will return the original (\e x, \e
-     * y) (to roundoff).
+     * \e lat0 should be in the range [−90°, 90°] and \e
+     * lon0 should be in the range [−540°, 540°).  \e lat
+     * will be in the range [−90°, 90°] and \e lon will
+     * be in the range [−180°, 180°).  The scale of the
+     * projection is 1/\e rk<sup>2</sup> in the "radial" direction, \e azi
+     * clockwise from true north, and is 1/\e rk in the direction perpendicular
+     * to this.  Even though all inputs should return a valid \e lat and \e
+     * lon, it's possible that the procedure fails to converge for very large
+     * \e x or \e y; in this case NaNs are returned for all the output
+     * arguments.  A call to Reverse followed by a call to Forward will return
+     * the original (\e x, \e y) (to roundoff).
      **********************************************************************/
     void Reverse(real lat0, real lon0, real x, real y,
                  real& lat, real& lon, real& azi, real& rk) const throw();
diff --git a/include/GeographicLib/GravityCircle.hpp b/include/GeographicLib/GravityCircle.hpp
index c35cdd5..d11f98b 100644
--- a/include/GeographicLib/GravityCircle.hpp
+++ b/include/GeographicLib/GravityCircle.hpp
@@ -8,10 +8,8 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_GRAVITYCIRCLE_HPP)
-#define GEOGRAPHICLIB_GRAVITYCIRCLE_HPP \
-  "$Id: 6ae0869411185a48c9f55016e6d1fb14e69aaac1 $"
+#define GEOGRAPHICLIB_GRAVITYCIRCLE_HPP 1
 
-#include <string>
 #include <vector>
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/CircularEngine.hpp>
@@ -23,7 +21,7 @@ namespace GeographicLib {
    * \brief Gravity on a circle of latitude
    *
    * Evaluate the earth's gravity field on a circle of constant height and
-   * latitude.  This uses a CircleEngine to pre-evaluate the inner sum of the
+   * latitude.  This uses a CircularEngine to pre-evaluate the inner sum of the
    * spherical harmonic sum, allowing the values of the field at several
    * different longitudes to be evaluated rapidly.
    *
@@ -40,7 +38,7 @@ namespace GeographicLib {
    * access to the functionality of GravityModel and GravityCircle.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT GravityCircle {
+  class GEOGRAPHICLIB_EXPORT GravityCircle {
   private:
     typedef Math::real real;
     enum mask {
@@ -54,7 +52,7 @@ namespace GeographicLib {
     };
 
     unsigned _caps;
-    real _a, _f, _lat, _h, _Z, _P, _invR, _cpsi, _spsi,
+    real _a, _f, _lat, _h, _Z, _Px, _invR, _cpsi, _spsi,
       _cphi, _sphi, _amodel, _GMmodel, _dzonal0,
       _corrmult, _gamma0, _gamma, _frot;
     CircularEngine _gravitational, _disturbing, _correction;
@@ -72,9 +70,9 @@ namespace GeographicLib {
       , _lat(lat)
       , _h(h)
       , _Z(Z)
-      , _P(P)
-      , _invR(Math::hypot(_P, _Z))
-      , _cpsi(_P * _invR)
+      , _Px(P)
+      , _invR(1 / Math::hypot(_Px, _Z))
+      , _cpsi(_Px * _invR)
       , _spsi(_Z * _invR)
       , _cphi(cphi)
       , _sphi(sphi)
@@ -114,11 +112,11 @@ namespace GeographicLib {
      *
      * @param[in] lon the geographic longitude (degrees).
      * @param[out] gx the easterly component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gy the northerly component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gz the upward component of the acceleration
-     *   (m s<sup>-2</sup>); this is usually negative.
+     *   (m s<sup>−2</sup>); this is usually negative.
      * @return \e W the sum of the gravitational and centrifugal potentials.
      *
      * The function includes the effects of the earth's rotation.
@@ -130,11 +128,11 @@ namespace GeographicLib {
      *
      * @param[in] lon the geographic longitude (degrees).
      * @param[out] deltax the easterly component of the disturbance vector
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] deltay the northerly component of the disturbance vector
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] deltaz the upward component of the disturbance vector
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @return \e T the corresponding disturbing potential.
      **********************************************************************/
     Math::real Disturbance(real lon, real& deltax, real& deltay, real& deltaz)
@@ -158,7 +156,7 @@ namespace GeographicLib {
      * spherical approximation.
      *
      * @param[in] lon the geographic longitude (degrees).
-     * @param[out] Dg01 the gravity anomaly (m s<sup>-2</sup>).
+     * @param[out] Dg01 the gravity anomaly (m s<sup>−2</sup>).
      * @param[out] xi the northerly component of the deflection of the vertical
      *  (degrees).
      * @param[out] eta the easterly component of the deflection of the vertical
@@ -177,13 +175,13 @@ namespace GeographicLib {
      *
      * @param[in] lon the geographic longitude (degrees).
      * @param[out] gX the \e X component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gY the \e Y component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gZ the \e Z component of the acceleration
-     *   (m s<sup>-2</sup>).
-     * @return \e W = \e V + \e Phi the sum of the gravitational and
-     *   centrifugal potentials (m<sup>2</sup> s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
+     * @return \e W = \e V + Φ the sum of the gravitational and
+     *   centrifugal potentials (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real W(real lon, real& gX, real& gY, real& gZ) const throw() {
       real clam, slam;
@@ -197,13 +195,13 @@ namespace GeographicLib {
      *
      * @param[in] lon the geographic longitude (degrees).
      * @param[out] GX the \e X component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] GY the \e Y component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] GZ the \e Z component of the acceleration
-     *   (m s<sup>-2</sup>).
-     * @return \e V = \e W - \e Phi the gravitational potential
-     *   (m<sup>2</sup> s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
+     * @return \e V = \e W - Φ the gravitational potential
+     *   (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real V(real lon, real& GX, real& GY, real& GZ) const throw() {
       real clam, slam;
@@ -211,20 +209,19 @@ namespace GeographicLib {
       return V(clam, slam, GX, GY, GZ);
     }
 
-
     /**
      * Evaluate the components of the gravity disturbance in geocentric
      * coordinates.
      *
      * @param[in] lon the geographic longitude (degrees).
      * @param[out] deltaX the \e X component of the gravity disturbance
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] deltaY the \e Y component of the gravity disturbance
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] deltaZ the \e Z component of the gravity disturbance
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @return \e T = \e W - \e U the disturbing potential (also called the
-     *   anomalous potential) (m<sup>2</sup> s<sup>-2</sup>).
+     *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real T(real lon, real& deltaX, real& deltaY, real& deltaZ)
       const throw() {
@@ -238,7 +235,7 @@ namespace GeographicLib {
      *
      * @param[in] lon the geographic longitude (degrees).
      * @return \e T = \e W - \e U the disturbing potential (also called the
-     *   anomalous potential) (m<sup>2</sup> s<sup>-2</sup>).
+     *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real T(real lon) const throw() {
       real clam, slam, dummy;
diff --git a/include/GeographicLib/GravityModel.hpp b/include/GeographicLib/GravityModel.hpp
index 937525e..e958eb6 100644
--- a/include/GeographicLib/GravityModel.hpp
+++ b/include/GeographicLib/GravityModel.hpp
@@ -8,12 +8,8 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_GRAVITYMODEL_HPP)
-#define GEOGRAPHICLIB_GRAVITYMODEL_HPP \
-  "$Id: e1a573fb0148fa5bc408b2dbdb096d4cd3091bac $"
+#define GEOGRAPHICLIB_GRAVITYMODEL_HPP 1
 
-#include <string>
-#include <sstream>
-#include <vector>
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/NormalGravity.hpp>
 #include <GeographicLib/SphericalHarmonic.hpp>
@@ -21,8 +17,8 @@
 
 #if defined(_MSC_VER)
 // Squelch warnings about dll vs vector
-#pragma warning (push)
-#pragma warning (disable: 4251)
+#  pragma warning (push)
+#  pragma warning (disable: 4251)
 #endif
 
 namespace GeographicLib {
@@ -43,29 +39,29 @@ namespace GeographicLib {
    *
    * Definitions and terminology (from Heiskanen and Moritz, Sec 2-13):
    * - \e V = gravitational potential;
-   * - \e Phi = rotational potential;
-   * - \e W = \e V + \e Phi = \e T + \e U = total potential;
+   * - Φ = rotational potential;
+   * - \e W = \e V + Φ = \e T + \e U = total potential;
    * - <i>V</i><sub>0</sub> = normal gravitation potential;
-   * - \e U = <i>V</i><sub>0</sub> + \e Phi = total normal potential;
-   * - \e T = \e W - \e U = \e V - <i>V</i><sub>0</sub> = anomalous or
-   *   disturbing potential;
-   * - <b>g</b> = <b>grad</b> \e W = <b>gamma</b> + <b>delta</b>;
-   * - <b>f</b> = <b>grad</b> \e Phi;
-   * - <b>Gamma</b> = <b>grad</b> <i>V</i><sub>0</sub>;
-   * - <b>gamma</b> = <b>grad</b> \e U;
-   * - <b>delta</b> = <b>grad</b> \e T = gravity disturbance vector
-   *   = <b>g</b><sub><i>P</i></sub> - <b>gamma</b><sub><i>P</i></sub>;
-   * - delta \e g = gravity disturbance = \e g<sub><i>P</i></sub> - \e
-   *   gamma<sub><i>P</i></sub>;
-   * - Delta <b>g</b> = gravity anomaly vector =
-   *   <b>g</b><sub><i>P</i></sub> - <b>gamma</b><sub><i>Q</i></sub>; here the
-   *   line \e PQ is perpendicular to ellipsoid and the potential at \e P
-   *   equals the normal potential at \e Q;
-   * - Delta \e g = gravity anomaly = \e g<sub><i>P</i></sub> - \e
-   *   gamma<sub><i>Q</i></sub>;
-   * - (\e xi, \e eta) deflection of the vertical, the difference in
+   * - \e U = <i>V</i><sub>0</sub> + Φ = total normal potential;
+   * - \e T = \e W − \e U = \e V − <i>V</i><sub>0</sub> = anomalous
+   *   or disturbing potential;
+   * - <b>g</b> = ∇\e W = <b>γ</b> + <b>δ</b>;
+   * - <b>f</b> = ∇Φ;
+   * - <b>Γ</b> = ∇<i>V</i><sub>0</sub>;
+   * - <b>γ</b> = ∇\e U;
+   * - <b>δ</b> = ∇\e T = gravity disturbance vector
+   *   = <b>g</b><sub><i>P</i></sub> − <b>γ</b><sub><i>P</i></sub>;
+   * - δ\e g = gravity disturbance = \e g<sub><i>P</i></sub> −
+   *   γ<sub><i>P</i></sub>;
+   * - Δ<b>g</b> = gravity anomaly vector = <b>g</b><sub><i>P</i></sub>
+   *   − <b>γ</b><sub><i>Q</i></sub>; here the line \e PQ is
+   *   perpendicular to ellipsoid and the potential at \e P equals the normal
+   *   potential at \e Q;
+   * - Δ\e g = gravity anomaly = \e g<sub><i>P</i></sub> −
+   *   γ<sub><i>Q</i></sub>;
+   * - (ξ, η) deflection of the vertical, the difference in
    *   directions of <b>g</b><sub><i>P</i></sub> and
-   *   <b>gamma</b><sub><i>Q</i></sub>, \e xi = NS, \e eta = EW.
+   *   <b>γ</b><sub><i>Q</i></sub>, ξ = NS, η = EW.
    * - \e X, \e Y, \e Z, geocentric coordinates;
    * - \e x, \e y, \e z, local cartesian coordinates used to denote the east,
    *   north and up directions.
@@ -84,7 +80,7 @@ namespace GeographicLib {
    * access to the functionality of GravityModel and GravityCircle.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT GravityModel {
+  class GEOGRAPHICLIB_EXPORT GravityModel {
   private:
     typedef Math::real real;
     friend class GravityCircle;
@@ -93,7 +89,7 @@ namespace GeographicLib {
     real _amodel, _GMmodel, _zeta0, _corrmult;
     SphericalHarmonic::normalization _norm;
     NormalGravity _earth;
-    std::vector<real> _C, _S, _CC, _CS, _zonal;
+    std::vector<real> _Cx, _Sx, _CC, _CS, _zonal;
     real _dzonal0;              // A left over contribution to _zonal.
     SphericalHarmonic _gravitational;
     SphericalHarmonic1 _disturbing;
@@ -102,6 +98,9 @@ namespace GeographicLib {
     Math::real InternalT(real X, real Y, real Z,
                          real& deltaX, real& deltaY, real& deltaZ,
                          bool gradp, bool correct) const throw();
+    GravityModel(const GravityModel&); // copy constructor not allowed
+    GravityModel& operator=(const GravityModel&); // nor copy assignment
+
     enum captype {
       CAP_NONE   = 0U,
       CAP_G      = 1U<<0,       // implies potentials W and V
@@ -166,12 +165,15 @@ namespace GeographicLib {
      *
      * @param[in] name the name of the model.
      * @param[in] path (optional) directory for data file.
+     * @exception GeographicErr if the data file cannot be found, is
+     *   unreadable, or is corrupt.
+     * @exception std::bad_alloc if the memory necessary for storing the model
+     *   can't be allocated.
      *
      * A filename is formed by appending ".egm" (World Gravity Model) to the
      * name.  If \e path is specified (and is non-empty), then the file is
      * loaded from directory, \e path.  Otherwise the path is given by
-     * DefaultGravityPath().  This may throw an exception because the file does
-     * not exist, is unreadable, or is corrupt.
+     * DefaultGravityPath().
      *
      * This file contains the metadata which specifies the properties of the
      * model.  The coefficients for the spherical harmonic sums are obtained
@@ -193,11 +195,11 @@ namespace GeographicLib {
      * @param[in] lon the geographic longitude (degrees).
      * @param[in] h the height above the ellipsoid (meters).
      * @param[out] gx the easterly component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gy the northerly component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gz the upward component of the acceleration
-     *   (m s<sup>-2</sup>); this is usually negative.
+     *   (m s<sup>−2</sup>); this is usually negative.
      * @return \e W the sum of the gravitational and centrifugal potentials.
      *
      * The function includes the effects of the earth's rotation.
@@ -213,11 +215,11 @@ namespace GeographicLib {
      * @param[in] lon the geographic longitude (degrees).
      * @param[in] h the height above the ellipsoid (meters).
      * @param[out] deltax the easterly component of the disturbance vector
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] deltay the northerly component of the disturbance vector
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] deltaz the upward component of the disturbance vector
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @return \e T the corresponding disturbing potential.
      **********************************************************************/
     Math::real Disturbance(real lat, real lon, real h,
@@ -246,7 +248,7 @@ namespace GeographicLib {
      * @param[in] lat the geographic latitude (degrees).
      * @param[in] lon the geographic longitude (degrees).
      * @param[in] h the height above the ellipsoid (meters).
-     * @param[out] Dg01 the gravity anomaly (m s<sup>-2</sup>).
+     * @param[out] Dg01 the gravity anomaly (m s<sup>−2</sup>).
      * @param[out] xi the northerly component of the deflection of the vertical
      *  (degrees).
      * @param[out] eta the easterly component of the deflection of the vertical
@@ -271,13 +273,13 @@ namespace GeographicLib {
      * @param[in] Y geocentric coordinate of point (meters).
      * @param[in] Z geocentric coordinate of point (meters).
      * @param[out] gX the \e X component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gY the \e Y component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gZ the \e Z component of the acceleration
-     *   (m s<sup>-2</sup>).
-     * @return \e W = \e V + \e Phi the sum of the gravitational and
-     *   centrifugal potentials (m<sup>2</sup> s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
+     * @return \e W = \e V + Φ the sum of the gravitational and
+     *   centrifugal potentials (m<sup>2</sup> s<sup>−2</sup>).
      *
      * This calls NormalGravity::U for  ReferenceEllipsoid().
      **********************************************************************/
@@ -292,13 +294,13 @@ namespace GeographicLib {
      * @param[in] Y geocentric coordinate of point (meters).
      * @param[in] Z geocentric coordinate of point (meters).
      * @param[out] GX the \e X component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] GY the \e Y component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] GZ the \e Z component of the acceleration
-     *   (m s<sup>-2</sup>).
-     * @return \e V = \e W - \e Phi the gravitational potential
-     *   (m<sup>2</sup> s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
+     * @return \e V = \e W - Φ the gravitational potential
+     *   (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real V(real X, real Y, real Z,
                  real& GX, real& GY, real& GZ) const throw();
@@ -311,13 +313,13 @@ namespace GeographicLib {
      * @param[in] Y geocentric coordinate of point (meters).
      * @param[in] Z geocentric coordinate of point (meters).
      * @param[out] deltaX the \e X component of the gravity disturbance
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] deltaY the \e Y component of the gravity disturbance
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] deltaZ the \e Z component of the gravity disturbance
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @return \e T = \e W - \e U the disturbing potential (also called the
-     *   anomalous potential) (m<sup>2</sup> s<sup>-2</sup>).
+     *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real T(real X, real Y, real Z,
                  real& deltaX, real& deltaY, real& deltaZ) const throw()
@@ -330,7 +332,7 @@ namespace GeographicLib {
      * @param[in] Y geocentric coordinate of point (meters).
      * @param[in] Z geocentric coordinate of point (meters).
      * @return \e T = \e W - \e U the disturbing potential (also called the
-     *   anomalous potential) (m<sup>2</sup> s<sup>-2</sup>).
+     *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real T(real X, real Y, real Z) const throw() {
       real dummy;
@@ -338,21 +340,21 @@ namespace GeographicLib {
     }
 
     /**
-     * Evaluate the components of the acceleration due to normal gravity and the
-     * centrifugal acceleration in geocentric coordinates.
+     * Evaluate the components of the acceleration due to normal gravity and
+     * the centrifugal acceleration in geocentric coordinates.
      *
      * @param[in] X geocentric coordinate of point (meters).
      * @param[in] Y geocentric coordinate of point (meters).
      * @param[in] Z geocentric coordinate of point (meters).
      * @param[out] gammaX the \e X component of the normal acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gammaY the \e Y component of the normal acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gammaZ the \e Z component of the normal acceleration
-     *   (m s<sup>-2</sup>).
-     * @return \e U = <i>V</i><sub>0</sub> + \e Phi the sum of the
+     *   (m s<sup>−2</sup>).
+     * @return \e U = <i>V</i><sub>0</sub> + Φ the sum of the
      *   normal gravitational and centrifugal potentials
-     *   (m<sup>2</sup> s<sup>-2</sup>).
+     *   (m<sup>2</sup> s<sup>−2</sup>).
      *
      * This calls NormalGravity::U for  ReferenceEllipsoid().
      **********************************************************************/
@@ -366,10 +368,11 @@ namespace GeographicLib {
      * @param[in] X geocentric coordinate of point (meters).
      * @param[in] Y geocentric coordinate of point (meters).
      * @param[out] fX the \e X component of the centrifugal acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] fY the \e Y component of the centrifugal acceleration
-     *   (m s<sup>-2</sup>).
-     * @return \e Phi the centrifugal potential (m<sup>2</sup> s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
+     * @return Φ the centrifugal potential (m<sup>2</sup>
+     * s<sup>−2</sup>).
      *
      * This calls NormalGravity::Phi for  ReferenceEllipsoid().
      **********************************************************************/
@@ -389,6 +392,8 @@ namespace GeographicLib {
      * @param[in] h the height of the point above the ellipsoid (meters).
      * @param[in] caps bitor'ed combination of GravityModel::mask values
      *   specifying the capabilities of the resulting GravityCircle object.
+     * @exception std::bad_alloc if the memory necessary for creating a
+     *   GravityCircle can't be allocated.
      * @return a GravityCircle object whose member functions computes the
      *   gravitational field at a particular values of \e lon.
      *
@@ -455,23 +460,23 @@ namespace GeographicLib {
     Math::real MajorRadius() const throw() { return _earth.MajorRadius(); }
 
     /**
-     * @return \e GM the mass constant of the model
-     *   (m<sup>3</sup> s<sup>-2</sup>); this is the product of \e G the
-     *   gravitational constant and \e M the mass of the earth (usually
-     *   including the mass of the earth's atmosphere).
+     * @return \e GM the mass constant of the model (m<sup>3</sup>
+     *   s<sup>−2</sup>); this is the product of \e G the gravitational
+     *   constant and \e M the mass of the earth (usually including the mass of
+     *   the earth's atmosphere).
      **********************************************************************/
     Math::real MassConstant() const throw() { return _GMmodel; }
 
     /**
      * @return \e GM the mass constant of the ReferenceEllipsoid()
-     *   (m<sup>3</sup> s<sup>-2</sup>).
+     *   (m<sup>3</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real ReferenceMassConstant() const throw()
     { return _earth.MassConstant(); }
 
     /**
-     * @return \e omega the angular velocity of the model and the
-     *   ReferenceEllipsoid() (rad s<sup>-1</sup>).
+     * @return ω the angular velocity of the model and the
+     *   ReferenceEllipsoid() (rad s<sup>−1</sup>).
      **********************************************************************/
     Math::real AngularVelocity() const throw()
     { return _earth.AngularVelocity(); }
@@ -508,7 +513,7 @@ namespace GeographicLib {
 } // namespace GeographicLib
 
 #if defined(_MSC_VER)
-#pragma warning (pop)
+#  pragma warning (pop)
 #endif
 
 #endif  // GEOGRAPHICLIB_GRAVITYMODEL_HPP
diff --git a/include/GeographicLib/LambertConformalConic.hpp b/include/GeographicLib/LambertConformalConic.hpp
index 1e2256e..5f656f0 100644
--- a/include/GeographicLib/LambertConformalConic.hpp
+++ b/include/GeographicLib/LambertConformalConic.hpp
@@ -2,28 +2,26 @@
  * \file LambertConformalConic.hpp
  * \brief Header for GeographicLib::LambertConformalConic class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP)
-#define GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP \
-  "$Id: 9aef04f77098543818681966f13ef97ea47dedb4 $"
+#define GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP 1
 
-#include <algorithm>
 #include <GeographicLib/Constants.hpp>
 
 namespace GeographicLib {
 
   /**
-   * \brief Lambert Conformal Conic Projection
+   * \brief Lambert conformal conic projection
    *
    * Implementation taken from the report,
    * - J. P. Snyder,
    *   <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"> Map Projections: A
    *   Working Manual</a>, USGS Professional Paper 1395 (1987),
-   *   pp. 107–109.
+   *   pp. 107--109.
    *
    * This is a implementation of the equations in Snyder except that divided
    * differences have been used to transform the expressions into ones which
@@ -56,12 +54,12 @@ namespace GeographicLib {
    * providing access to the functionality of LambertConformalConic and
    * AlbersEqualArea.
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT LambertConformalConic {
+  class GEOGRAPHICLIB_EXPORT LambertConformalConic {
   private:
     typedef Math::real real;
     real _a, _f, _fm, _e2, _e, _e2m;
     real _sign, _n, _nc, _t0nm1, _scale, _lat0, _k0;
-    real _scbet0, _tchi0, _scchi0, _psi0, _nrho0;
+    real _scbet0, _tchi0, _scchi0, _psi0, _nrho0, _drhomax;
     static const real eps_;
     static const real epsx_;
     static const real tol_;
@@ -70,16 +68,16 @@ namespace GeographicLib {
     static inline real hyp(real x) throw() { return Math::hypot(real(1), x); }
     // e * atanh(e * x) = log( ((1 + e*x)/(1 - e*x))^(e/2) ) if f >= 0
     // - sqrt(-e2) * atan( sqrt(-e2) * x)                    if f < 0
-    inline real eatanhe(real x) const throw() {
-      return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * std::atan(_e * x);
-    }
+    inline real eatanhe(real x) const throw()
+    { return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * std::atan(_e * x); }
     // Divided differences
     // Definition: Df(x,y) = (f(x)-f(y))/(x-y)
-    // See: W. M. Kahan and R. J. Fateman,
-    // Symbolic computation of divided differences,
-    // SIGSAM Bull. 33(3), 7-28 (1999)
-    // http://dx.doi.org/10.1145/334714.334716
-    // http://www.cs.berkeley.edu/~fateman/papers/divdiff.pdf
+    // See:
+    //   W. M. Kahan and R. J. Fateman,
+    //   Symbolic computation of divided differences,
+    //   SIGSAM Bull. 33(3), 7-28 (1999)
+    //   http://dx.doi.org/10.1145/334714.334716
+    //   http://www.cs.berkeley.edu/~fateman/papers/divdiff.pdf
     //
     // General rules
     // h(x) = f(g(x)): Dh(x,y) = Df(g(x),g(y))*Dg(x,y)
@@ -147,9 +145,10 @@ namespace GeographicLib {
      *   to 1/\e f.
      * @param[in] stdlat standard parallel (degrees), the circle of tangency.
      * @param[in] k0 scale on the standard parallel.
-     *
-     * An exception is thrown if \e a or \e k0 is not positive or if \e stdlat
-     * is not in the range [-90, 90].
+     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+     *   not positive.
+     * @exception GeographicErr if \e stdlat is not in [−90°,
+     *   90°].
      **********************************************************************/
     LambertConformalConic(real a, real f, real stdlat, real k0);
 
@@ -163,11 +162,11 @@ namespace GeographicLib {
      * @param[in] stdlat1 first standard parallel (degrees).
      * @param[in] stdlat2 second standard parallel (degrees).
      * @param[in] k1 scale on the standard parallels.
-     *
-     * An exception is thrown if \e a or \e k0 is not positive or if \e stdlat1
-     * or \e stdlat2 is not in the range [-90, 90].  In addition, if either \e
-     * stdlat1 or \e stdlat2 is a pole, then an exception is thrown if \e
-     * stdlat1 is not equal \e stdlat2.
+     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+     *   not positive.
+     * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
+     *   [−90°, 90°], or if either \e stdlat1 or \e
+     *   stdlat2 is a pole and \e stdlat1 is not equal \e stdlat2.
      **********************************************************************/
     LambertConformalConic(real a, real f, real stdlat1, real stdlat2, real k1);
 
@@ -183,16 +182,22 @@ namespace GeographicLib {
      * @param[in] sinlat2 sine of second standard parallel.
      * @param[in] coslat2 cosine of second standard parallel.
      * @param[in] k1 scale on the standard parallels.
+     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+     *   not positive.
+     * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
+     *   [−90°, 90°], or if either \e stdlat1 or \e
+     *   stdlat2 is a pole and \e stdlat1 is not equal \e stdlat2.
      *
      * This allows parallels close to the poles to be specified accurately.
      * This routine computes the latitude of origin and the scale at this
      * latitude.  In the case where \e lat1 and \e lat2 are different, the
-     * errors in this routines are as follows: if \e dlat = abs(\e lat2 - \e
-     * lat1) <= 160<sup>o</sup> and max(abs(\e lat1), abs(\e lat2)) <= 90 -
-     * min(0.0002, 2.2e-6(180 - \e dlat), 6e-8 <i>dlat</i><sup>2</sup>) (in
-     * degrees), then the error in the latitude of origin is less than
-     * 4.5e-14<sup>o</sup> and the relative error in the scale is less than
-     * 7e-15.
+     * errors in this routines are as follows: if \e dlat = abs(\e lat2 −
+     * \e lat1) ≤ 160° and max(abs(\e lat1), abs(\e lat2)) ≤ 90
+     * − min(0.0002, 2.2 × 10<sup>−6</sup>(180 − \e
+     * dlat), 6 &times 10<sup>−8</sup> <i>dlat</i><sup>2</sup>) (in
+     * degrees), then the error in the latitude of origin is less than 4.5
+     * × 10<sup>−14</sup>d and the relative error in the scale is
+     * less than 7 × 10<sup>−15</sup>.
      **********************************************************************/
     LambertConformalConic(real a, real f,
                           real sinlat1, real coslat1,
@@ -204,10 +209,9 @@ namespace GeographicLib {
      *
      * @param[in] lat (degrees).
      * @param[in] k scale at latitude \e lat (default 1).
-     *
-     * This allows a "latitude of true scale" to be specified.  An exception is
-     * thrown if \e k is not positive or if \e stdlat is not in the range [-90,
-     * 90]
+     * @exception GeographicErr \e k is not positive.
+     * @exception GeographicErr if \e lat is not in [−90°,
+     *   90°].
      **********************************************************************/
     void SetScale(real lat, real k = real(1));
 
@@ -224,12 +228,12 @@ namespace GeographicLib {
      *
      * The latitude origin is given by LambertConformalConic::LatitudeOrigin().
      * No false easting or northing is added and \e lat should be in the range
-     * [-90, 90]; \e lon and \e lon0 should be in the range [-180, 360].  The
-     * error in the projection is less than about 10 nm (10 nanometers), true
-     * distance, and the errors in the meridian convergence and scale are
-     * consistent with this.  The values of \e x and \e y returned for points
-     * which project to infinity (i.e., one or both of the poles) will be large
-     * but finite.
+     * [−90°, 90°]; \e lon and \e lon0 should be in the
+     * range [−540°, 540°).  The error in the projection
+     * is less than about 10 nm (10 nanometers), true distance, and the errors
+     * in the meridian convergence and scale are consistent with this.  The
+     * values of \e x and \e y returned for points which project to infinity
+     * (i.e., one or both of the poles) will be large but finite.
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
                  real& x, real& y, real& gamma, real& k) const throw();
@@ -247,10 +251,11 @@ namespace GeographicLib {
      *
      * The latitude origin is given by LambertConformalConic::LatitudeOrigin().
      * No false easting or northing is added.  \e lon0 should be in the range
-     * [-180, 360].  The value of \e lon returned is in the range [-180, 180).
-     * The error in the projection is less than about 10 nm (10 nanometers),
-     * true distance, and the errors in the meridian convergence and scale are
-     * consistent with this.
+     * [−540°, 540°).  The value of \e lon returned is in
+     * the range [−180°, 180°).  The error in the
+     * projection is less than about 10 nm (10 nanometers), true distance, and
+     * the errors in the meridian convergence and scale are consistent with
+     * this.
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
                  real& lat, real& lon, real& gamma, real& k) const throw();
diff --git a/include/GeographicLib/LocalCartesian.hpp b/include/GeographicLib/LocalCartesian.hpp
index 450b172..9ce0b38 100644
--- a/include/GeographicLib/LocalCartesian.hpp
+++ b/include/GeographicLib/LocalCartesian.hpp
@@ -8,8 +8,7 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_LOCALCARTESIAN_HPP)
-#define GEOGRAPHICLIB_LOCALCARTESIAN_HPP \
-  "$Id: 133014a30695adf3bdea9f4b52613fab458c505a $"
+#define GEOGRAPHICLIB_LOCALCARTESIAN_HPP 1
 
 #include <GeographicLib/Geocentric.hpp>
 #include <GeographicLib/Constants.hpp>
@@ -17,7 +16,7 @@
 namespace GeographicLib {
 
   /**
-   * \brief Local Cartesian coordinates
+   * \brief Local cartesian coordinates
    *
    * Convert between geodetic coordinates latitude = \e lat, longitude = \e
    * lon, height = \e h (measured vertically from the surface of the ellipsoid)
@@ -36,7 +35,7 @@ namespace GeographicLib {
    * providing access to the functionality of Geocentric and LocalCartesian.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT LocalCartesian {
+  class GEOGRAPHICLIB_EXPORT LocalCartesian {
   private:
     typedef Math::real real;
     static const size_t dim_ = 3;
@@ -59,6 +58,9 @@ namespace GeographicLib {
      * @param[in] h0 height above ellipsoid at origin (meters); default 0.
      * @param[in] earth Geocentric object for the transformation; default
      *   Geocentric::WGS84.
+     *
+     * \e lat0 should be in the range [−90°, 90°]; \e
+     * lon0 should be in the range [−540°, 540°).
      **********************************************************************/
     LocalCartesian(real lat0, real lon0, real h0 = 0,
                    const Geocentric& earth = Geocentric::WGS84) throw()
@@ -84,9 +86,11 @@ namespace GeographicLib {
      * @param[in] lat0 latitude at origin (degrees).
      * @param[in] lon0 longitude at origin (degrees).
      * @param[in] h0 height above ellipsoid at origin (meters); default 0.
+     *
+     * \e lat0 should be in the range [−90°, 90°]; \e
+     * lon0 should be in the range [−540°, 540°).
      **********************************************************************/
-    void Reset(real lat0, real lon0, real h0 = 0)
-      throw();
+    void Reset(real lat0, real lon0, real h0 = 0) throw();
 
     /**
      * Convert from geodetic to local cartesian coordinates.
@@ -98,8 +102,8 @@ namespace GeographicLib {
      * @param[out] y local cartesian coordinate (meters).
      * @param[out] z local cartesian coordinate (meters).
      *
-     * \e lat should be in the range [-90, 90]; \e lon and \e lon0 should be in
-     * the range [-180, 360].
+     * \e lat should be in the range [−90°, 90°]; \e lon
+     * should be in the range [−540°, 540°).
      **********************************************************************/
     void Forward(real lat, real lon, real h, real& x, real& y, real& z)
       const throw() {
@@ -119,6 +123,9 @@ namespace GeographicLib {
      * @param[out] M if the length of the vector is 9, fill with the rotation
      *   matrix in row-major order.
      *
+     * \e lat should be in the range [−90°, 90°]; \e lon
+     * should be in the range [−540°, 540°).
+     *
      * Let \e v be a unit vector located at (\e lat, \e lon, \e h).  We can
      * express \e v as \e column vectors in one of two ways
      * - in east, north, up coordinates (where the components are relative to a
@@ -128,7 +135,7 @@ namespace GeographicLib {
      *   the local coordinate system at (\e lat0, \e lon0, \e h0)); call this
      *   representation \e v0.
      * .
-     * Then we have \e v0 = \e M . \e v1.
+     * Then we have \e v0 = \e M ⋅ \e v1.
      **********************************************************************/
     void Forward(real lat, real lon, real h, real& x, real& y, real& z,
                  std::vector<real>& M)
@@ -151,7 +158,8 @@ namespace GeographicLib {
      * @param[out] lon longitude of point (degrees).
      * @param[out] h height of point above the ellipsoid (meters).
      *
-     * The value of \e lon returned is in the range [-180, 180).
+     * The value of \e lon returned is in the range [−180°,
+     * 180°).
      **********************************************************************/
     void Reverse(real x, real y, real z, real& lat, real& lon, real& h)
       const throw() {
@@ -180,8 +188,8 @@ namespace GeographicLib {
      *   the local coordinate system at (\e lat0, \e lon0, \e h0)); call this
      *   representation \e v0.
      * .
-     * Then we have \e v1 = \e M^T . \e v0, where \e M^T is the transpose of \e
-     * M.
+     * Then we have \e v1 = \e M<sup>T</sup> ⋅ \e v0, where \e
+     * M<sup>T</sup> is the transpose of \e M.
      **********************************************************************/
     void Reverse(real x, real y, real z, real& lat, real& lon, real& h,
                  std::vector<real>& M)
diff --git a/include/GeographicLib/MGRS.hpp b/include/GeographicLib/MGRS.hpp
index d02956d..e8ff0cb 100644
--- a/include/GeographicLib/MGRS.hpp
+++ b/include/GeographicLib/MGRS.hpp
@@ -8,16 +8,15 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_MGRS_HPP)
-#define GEOGRAPHICLIB_MGRS_HPP "$Id: 80e08da6eca9d9cf92c5adad148c64302df2573d $"
+#define GEOGRAPHICLIB_MGRS_HPP 1
 
-#include <sstream>
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/UTMUPS.hpp>
 
 #if defined(_MSC_VER)
 // Squelch warnings about dll vs string
-#pragma warning (push)
-#pragma warning (disable: 4251)
+#  pragma warning (push)
+#  pragma warning (disable: 4251)
 #endif
 
 namespace GeographicLib {
@@ -60,7 +59,7 @@ namespace GeographicLib {
    * Example of use:
    * \include example-MGRS.cpp
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT MGRS {
+  class GEOGRAPHICLIB_EXPORT MGRS {
   private:
     typedef Math::real real;
     // The smallest length s.t., 1.0e7 - eps_ < 1.0e7 (approx 1.9 nm)
@@ -95,12 +94,37 @@ namespace GeographicLib {
     static int UTMRow(int iband, int icol, int irow) throw();
 
     friend class UTMUPS;        // UTMUPS::StandardZone calls LatitudeBand
-    // Return latitude band number [-10, 10) for the give latitude (degrees).
+    // Return latitude band number [-10, 10) for the given latitude (degrees).
     // The bands are reckoned in include their southern edges.
     static int LatitudeBand(real lat) throw() {
       int ilat = int(std::floor(lat));
       return (std::max)(-10, (std::min)(9, (ilat + 80)/8 - 10));
     }
+    // Return approximate latitude band number [-10, 10) for the given northing
+    // (meters).  With this rule, each 100km tile would have a unique band
+    // letter corresponding to the latitude at the center of the tile.  This
+    // function isn't currently used.
+    static int ApproxLatitudeBand(real y) throw() {
+      // northing at tile center in units of tile = 100km
+      real ya = std::floor( (std::min)(real(88), std::abs(y/tile_)) ) +
+        real(0.5);
+      // convert to lat (mult by 90/100) and then to band (divide by 8)
+      // the +1 fine tunes the boundary between bands 3 and 4
+      int b = int(std::floor( ((ya * 9 + 1) / 10) / 8 ));
+      // For the northern hemisphere we have
+      // band rows  num
+      // N 0   0:8    9
+      // P 1   9:17   9
+      // Q 2  18:26   9
+      // R 3  27:34   8
+      // S 4  35:43   9
+      // T 5  44:52   9
+      // U 6  53:61   9
+      // V 7  62:70   9
+      // W 8  71:79   9
+      // X 9  80:94  15
+      return y >= 0 ? b : -(b + 1);
+    }
     // UTMUPS access these enums
     enum {
       tile_ = 100000,            // Size MGRS blocks
@@ -132,6 +156,10 @@ namespace GeographicLib {
      * @param[in] y northing of point (meters).
      * @param[in] prec precision relative to 100 km.
      * @param[out] mgrs MGRS string.
+     * @exception GeographicErr if \e zone, \e x, or \e y is outside its
+     *   allowed range.
+     * @exception GeographicErr if the memory for the MGRS string can't be
+     *   allocated.
      *
      * \e prec specifies the precision of the MGRS string as follows:
      * - prec = 0 (min), 100 km
@@ -141,14 +169,14 @@ namespace GeographicLib {
      * - prec = 4, 10 m
      * - prec = 5, 1 m
      * - prec = 6, 0.1 m
-     * - prec = 11 (max), 1 um
+     * - prec = 11 (max), 1 μm
      *
      * UTM eastings are allowed to be in the range [100 km, 900 km], northings
      * are allowed to be in in [0 km, 9500 km] for the northern hemisphere and
      * in [1000 km, 10000 km] for the southern hemisphere.  (However UTM
      * northings can be continued across the equator.  So the actual limits on
-     * the northings are [-9000 km, 9500 km] for the "northern" hemisphere and
-     * [1000 km, 19500 km] for the "southern" hemisphere.)
+     * the northings are [−9000 km, 9500 km] for the "northern"
+     * hemisphere and [1000 km, 19500 km] for the "southern" hemisphere.)
      *
      * UPS eastings/northings are allowed to be in the range [1300 km, 2700 km]
      * in the northern hemisphere and in [800 km, 3200 km] in the southern
@@ -176,8 +204,8 @@ namespace GeographicLib {
      *
      * The UTM/UPS selection and the UTM zone is preserved in the conversion to
      * MGRS coordinate.  Thus for \e zone > 0, the MGRS coordinate begins with
-     * the zone number followed by one of [C–M] for the southern
-     * hemisphere and [N–X] for the northern hemisphere.  For \e zone =
+     * the zone number followed by one of [C--M] for the southern
+     * hemisphere and [N--X] for the northern hemisphere.  For \e zone =
      * 0, the MGRS coordinates begins with one of [AB] for the southern
      * hemisphere and [XY] for the northern hemisphere.
      *
@@ -207,6 +235,11 @@ namespace GeographicLib {
      * @param[in] lat latitude (degrees).
      * @param[in] prec precision relative to 100 km.
      * @param[out] mgrs MGRS string.
+     * @exception GeographicErr if \e zone, \e x, or \e y is outside its
+     *   allowed range.
+     * @exception GeographicErr if \e lat is inconsistent with the given UTM
+     *   coordinates.
+     * @exception std::bad_alloc if the memory for \e mgrs can't be allocated.
      *
      * The latitude is ignored for \e zone = 0 (UPS); otherwise the latitude is
      * used to determine the latitude band and this is checked for consistency
@@ -226,11 +259,12 @@ namespace GeographicLib {
      * @param[out] prec precision relative to 100 km.
      * @param[in] centerp if true (default), return center of the MGRS square,
      *   else return SW (lower left) corner.
+     * @exception GeographicErr if \e mgrs is illegal.
      *
      * All conversions from MGRS to UTM/UPS are permitted provided the MGRS
      * coordinate is a possible result of a conversion in the other direction.
      * (The leading 0 may be dropped from an input MGRS coordinate for UTM
-     * zones 1–9.)  In addition, MGRS coordinates with a neighboring
+     * zones 1--9.)  In addition, MGRS coordinates with a neighboring
      * latitude band letter are permitted provided that some portion of the
      * 100 km block is within the given latitude band.  Thus
      *   - 38VLS and 38WLS are allowed (latitude 64N intersects the square
@@ -247,7 +281,10 @@ namespace GeographicLib {
      * centerp = true the conversion from MGRS to geographic and back is
      * stable.  This is not assured if \e centerp = false.
      *
-     * If an error is thrown, then the arguments are unchanged.
+     * If the first 3 characters of \e mgrs are "INV", then \e x and \e y are
+     * set to NaN and \e zone is set to UTMUPS::INVALID.
+     *
+     * If an exception is thrown, then the arguments are unchanged.
      **********************************************************************/
     static void Reverse(const std::string& mgrs,
                         int& zone, bool& northp, real& x, real& y,
@@ -286,7 +323,7 @@ namespace GeographicLib {
 } // namespace GeographicLib
 
 #if defined(_MSC_VER)
-#pragma warning (pop)
+#  pragma warning (pop)
 #endif
 
 #endif  // GEOGRAPHICLIB_MGRS_HPP
diff --git a/include/GeographicLib/MagneticCircle.hpp b/include/GeographicLib/MagneticCircle.hpp
index f450fd4..fd43043 100644
--- a/include/GeographicLib/MagneticCircle.hpp
+++ b/include/GeographicLib/MagneticCircle.hpp
@@ -8,10 +8,8 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_MAGNETICCIRCLE_HPP)
-#define GEOGRAPHICLIB_MAGNETICCIRCLE_HPP \
-  "$Id: 5b3adc58d894f36ca4206864eb565541f24ff492 $"
+#define GEOGRAPHICLIB_MAGNETICCIRCLE_HPP 1
 
-#include <string>
 #include <vector>
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/CircularEngine.hpp>
@@ -22,7 +20,7 @@ namespace GeographicLib {
    * \brief Geomagnetic field on a circle of latitude
    *
    * Evaluate the earth's magnetic field on a circle of constant height and
-   * latitude.  This uses a CircleEngine to pre-evaluate the inner sum of the
+   * latitude.  This uses a CircularEngine to pre-evaluate the inner sum of the
    * spherical harmonic sum, allowing the values of the field at several
    * different longitudes to be evaluated rapidly.
    *
@@ -36,7 +34,7 @@ namespace GeographicLib {
    * providing access to the functionality of MagneticModel and MagneticCircle.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT MagneticCircle {
+  class GEOGRAPHICLIB_EXPORT MagneticCircle {
   private:
     typedef Math::real real;
 
diff --git a/include/GeographicLib/MagneticModel.hpp b/include/GeographicLib/MagneticModel.hpp
index e8384c8..b0e0aaf 100644
--- a/include/GeographicLib/MagneticModel.hpp
+++ b/include/GeographicLib/MagneticModel.hpp
@@ -8,20 +8,16 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_MAGNETICMODEL_HPP)
-#define GEOGRAPHICLIB_MAGNETICMODEL_HPP \
-  "$Id: 7f8c59ee3cdbfce252d1172c1bb4d7db7cf5ef38 $"
+#define GEOGRAPHICLIB_MAGNETICMODEL_HPP 1
 
-#include <string>
-#include <sstream>
-#include <vector>
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/Geocentric.hpp>
 #include <GeographicLib/SphericalHarmonic.hpp>
 
 #if defined(_MSC_VER)
 // Squelch warnings about dll vs vector
-#pragma warning (push)
-#pragma warning (disable: 4251)
+#  pragma warning (push)
+#  pragma warning (disable: 4251)
 #endif
 
 namespace GeographicLib {
@@ -61,7 +57,7 @@ namespace GeographicLib {
    * providing access to the functionality of MagneticModel and MagneticCircle.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT MagneticModel {
+  class GEOGRAPHICLIB_EXPORT MagneticModel {
   private:
     typedef Math::real real;
     static const int idlength_ = 8;
@@ -91,12 +87,15 @@ namespace GeographicLib {
      * @param[in] path (optional) directory for data file.
      * @param[in] earth (optional) Geocentric object for converting
      *   coordinates; default Geocentric::WGS84.
+     * @exception GeographicErr if the data file cannot be found, is
+     *   unreadable, or is corrupt.
+     * @exception std::bad_alloc if the memory necessary for storing the model
+     *   can't be allocated.
      *
      * A filename is formed by appending ".wmm" (World Magnetic Model) to the
      * name.  If \e path is specified (and is non-empty), then the file is
      * loaded from directory, \e path.  Otherwise the path is given by the
-     * DefaultMagneticPath().  This may throw an exception because the file
-     * does not exist, is unreadable, or is corrupt.
+     * DefaultMagneticPath().
      *
      * This file contains the metadata which specifies the properties of the
      * model.  The coefficients for the spherical harmonic sums are obtained
@@ -104,7 +103,7 @@ namespace GeographicLib {
      * filename ends in ".wwm.cof").
      *
      * The model is not tied to a particular ellipsoidal model of the earth.
-     * The final earth argument to the constructor specify an ellipsoid to
+     * The final earth argument to the constructor specifies an ellipsoid to
      * allow geodetic coordinates to the transformed into the spherical
      * coordinates used in the spherical harmonic sum.
      **********************************************************************/
@@ -164,6 +163,8 @@ namespace GeographicLib {
      * @param[in] t the time (years).
      * @param[in] lat latitude of the point (degrees).
      * @param[in] h the height of the point above the ellipsoid (meters).
+     * @exception std::bad_alloc if the memory necessary for creating a
+     *   MagneticCircle can't be allocated.
      * @return a MagneticCircle object whose MagneticCircle::operator()(real
      *   lon) member function computes the field at particular values of \e
      *   lon.
@@ -336,7 +337,7 @@ namespace GeographicLib {
 } // namespace GeographicLib
 
 #if defined(_MSC_VER)
-#pragma warning (pop)
+#  pragma warning (pop)
 #endif
 
 #endif  // GEOGRAPHICLIB_MAGNETICMODEL_HPP
diff --git a/include/GeographicLib/Math.hpp b/include/GeographicLib/Math.hpp
index 66dc1a1..9971ebd 100644
--- a/include/GeographicLib/Math.hpp
+++ b/include/GeographicLib/Math.hpp
@@ -12,13 +12,16 @@
 #include <GeographicLib/Constants.hpp>
 
 #if !defined(GEOGRAPHICLIB_MATH_HPP)
-#define GEOGRAPHICLIB_MATH_HPP "$Id: edd244e4c5c74e696096c2b6d598728957a0d36d $"
+#define GEOGRAPHICLIB_MATH_HPP 1
 
 /**
  * Are C++11 math functions available?
  **********************************************************************/
 #if !defined(GEOGRAPHICLIB_CPLUSPLUS11_MATH)
-#  if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#  if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ >= 8 \
+  && __cplusplus >= 201103
+#    define GEOGRAPHICLIB_CPLUSPLUS11_MATH 1
+#  elif defined(_MSC_VER) && _MSC_VER >= 1800
 #    define GEOGRAPHICLIB_CPLUSPLUS11_MATH 1
 #  else
 #    define GEOGRAPHICLIB_CPLUSPLUS11_MATH 0
@@ -26,25 +29,31 @@
 #endif
 
 #if !defined(WORDS_BIGENDIAN)
-# define WORDS_BIGENDIAN 0
+#  define WORDS_BIGENDIAN 0
+#endif
+
+#if !defined(HAVE_LONG_DOUBLE)
+#  define HAVE_LONG_DOUBLE 0
 #endif
 
-#if !defined(GEOGRAPHICLIB_PREC)
+#if !defined(GEOGRAPHICLIB_PRECISION)
 /**
- * The precision of floating point numbers used in %GeographicLib.  0 means
- * float; 1 (default) means double; 2 means long double.  Nearly all the
- * testing has been carried out with doubles and that's the recommended
- * configuration.  In order for long double to be used, HAVE_LONG_DOUBLE needs
- * to be defined.  Note that with Microsoft Visual Studio, long double is the
- * same as double.
+ * The precision of floating point numbers used in %GeographicLib.  1 means
+ * float (single precision); 2 (the default) means double; 3 means long double;
+ * 4 is reserved for quadruple precision.  Nearly all the testing has been
+ * carried out with doubles and that's the recommended configuration.  In order
+ * for long double to be used, HAVE_LONG_DOUBLE needs to be defined.  Note that
+ * with Microsoft Visual Studio, long double is the same as double.
  **********************************************************************/
-#define GEOGRAPHICLIB_PREC 1
+#  define GEOGRAPHICLIB_PRECISION 2
 #endif
 
 #include <cmath>
-#include <limits>
 #include <algorithm>
-#include <vector>
+#include <limits>
+#if defined(_LIBCPP_VERSION)
+#include <type_traits>
+#endif
 
 namespace GeographicLib {
 
@@ -58,16 +67,17 @@ namespace GeographicLib {
    * Example of use:
    * \include example-Math.cpp
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT Math {
+  class GEOGRAPHICLIB_EXPORT Math {
   private:
     void dummy() {
-      STATIC_ASSERT(GEOGRAPHICLIB_PREC >= 0 && GEOGRAPHICLIB_PREC <= 2,
+      STATIC_ASSERT(GEOGRAPHICLIB_PRECISION >= 1 &&
+                    GEOGRAPHICLIB_PRECISION <= 3,
                     "Bad value of precision");
     }
     Math();                     // Disable constructor
   public:
 
-#if defined(HAVE_LONG_DOUBLE)
+#if HAVE_LONG_DOUBLE
     /**
      * The extended precision type for real numbers, used for some testing.
      * This is long double on computers with this type; otherwise it is double.
@@ -77,7 +87,7 @@ namespace GeographicLib {
     typedef double extended;
 #endif
 
-#if GEOGRAPHICLIB_PREC == 1
+#if GEOGRAPHICLIB_PRECISION == 2
     /**
      * The real type for %GeographicLib. Nearly all the testing has been done
      * with \e real = double.  However, the algorithms should also work with
@@ -85,22 +95,32 @@ namespace GeographicLib {
      * accuracy typically cannot be obtained using floats.)
      **********************************************************************/
     typedef double real;
-#elif GEOGRAPHICLIB_PREC == 0
+#elif GEOGRAPHICLIB_PRECISION == 1
     typedef float real;
-#elif GEOGRAPHICLIB_PREC == 2
+#elif GEOGRAPHICLIB_PRECISION == 3
     typedef extended real;
 #else
     typedef double real;
 #endif
 
     /**
-     * true if the machine is big-endian
+     * Number of additional decimal digits of precision of real relative to
+     * double (0 for float).
+     **********************************************************************/
+    static const int extradigits =
+      std::numeric_limits<real>::digits10 >
+      std::numeric_limits<double>::digits10 ?
+      std::numeric_limits<real>::digits10 -
+      std::numeric_limits<double>::digits10 : 0;
+
+    /**
+     * true if the machine is big-endian.
      **********************************************************************/
     static const bool bigendian = WORDS_BIGENDIAN;
 
     /**
      * @tparam T the type of the returned value.
-     * @return \e pi.
+     * @return π.
      **********************************************************************/
     template<typename T> static inline T pi() throw()
     { return std::atan2(T(0), -T(1)); }
@@ -122,7 +142,7 @@ namespace GeographicLib {
 
     /**
      * Square a number.
-
+     *
      * @tparam T the type of the argument and the returned value.
      * @param[in] x
      * @return <i>x</i><sup>2</sup>.
@@ -140,51 +160,60 @@ namespace GeographicLib {
      * @return sqrt(<i>x</i><sup>2</sup> + <i>y</i><sup>2</sup>).
      **********************************************************************/
     template<typename T> static inline T hypot(T x, T y) throw() {
-      x = std::abs(x);
-      y = std::abs(y);
-      T a = (std::max)(x, y),
-        b = (std::min)(x, y) / (a ? a : 1);
+      x = std::abs(x); y = std::abs(y);
+      T a = (std::max)(x, y), b = (std::min)(x, y) / (a ? a : 1);
       return a * std::sqrt(1 + b * b);
+      // For an alternative (square-root free) method see
+      // C. Moler and D. Morrision (1983) http://dx.doi.org/10.1147/rd.276.0577
+      // and A. A. Dubrulle (1983) http://dx.doi.org/10.1147/rd.276.0582
     }
-#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH
+#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH || (defined(_MSC_VER) && _MSC_VER >= 1700)
     template<typename T> static inline T hypot(T x, T y) throw()
     { return std::hypot(x, y); }
+#  if HAVE_LONG_DOUBLE && defined(_MSC_VER) && _MSC_VER == 1700
+    // Visual C++ 11 doesn't have a long double overload for std::hypot --
+    // reported to MS on 2013-07-18
+    // http://connect.microsoft.com/VisualStudio/feedback/details/794416
+    // suppress the resulting "loss of data warning" with
+    static inline long double hypot(long double x, long double y) throw()
+    { return std::hypot(double(x), double(y)); }
+#  endif
 #elif defined(_MSC_VER)
     static inline double hypot(double x, double y) throw()
     { return _hypot(x, y); }
-#if _MSC_VER < 1400
+#  if _MSC_VER < 1400
     // Visual C++ 7.1/VS .NET 2003 does not have _hypotf()
     static inline float hypot(float x, float y) throw()
     { return float(_hypot(x, y)); }
-#else
+#  else
     static inline float hypot(float x, float y) throw()
     { return _hypotf(x, y); }
-#endif
-#if defined(HAVE_LONG_DOUBLE)
+#  endif
+#  if HAVE_LONG_DOUBLE
     static inline long double hypot(long double x, long double y) throw()
-    { return _hypot(x, y); }
-#endif
+    { return _hypot(double(x), double(y)); } // Suppress loss of data warning
+#  endif
 #else
     // Use overloading to define generic versions
     static inline double hypot(double x, double y) throw()
     { return ::hypot(x, y); }
     static inline float hypot(float x, float y) throw()
     { return ::hypotf(x, y); }
-#if defined(HAVE_LONG_DOUBLE)
+#  if HAVE_LONG_DOUBLE
     static inline long double hypot(long double x, long double y) throw()
     { return ::hypotl(x, y); }
-#endif
+#  endif
 #endif
 
 #if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
     /**
-     * exp(\e x) - 1 accurate near \e x = 0.  This is taken from
+     * exp(\e x) − 1 accurate near \e x = 0.  This is taken from
      * N. J. Higham, Accuracy and Stability of Numerical Algorithms, 2nd
      * Edition (SIAM, 2002), Sec 1.14.1, p 19.
      *
      * @tparam T the type of the argument and the returned value.
      * @param[in] x
-     * @return exp(\e x) - 1.
+     * @return exp(\e x) − 1.
      **********************************************************************/
     template<typename T> static inline T expm1(T x) throw() {
       volatile T
@@ -202,10 +231,10 @@ namespace GeographicLib {
 #else
     static inline double expm1(double x) throw() { return ::expm1(x); }
     static inline float expm1(float x) throw() { return ::expm1f(x); }
-#if defined(HAVE_LONG_DOUBLE)
+#  if HAVE_LONG_DOUBLE
     static inline long double expm1(long double x) throw()
     { return ::expm1l(x); }
-#endif
+#  endif
 #endif
 
 #if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
@@ -237,10 +266,10 @@ namespace GeographicLib {
 #else
     static inline double log1p(double x) throw() { return ::log1p(x); }
     static inline float log1p(float x) throw() { return ::log1pf(x); }
-#if defined(HAVE_LONG_DOUBLE)
+#  if HAVE_LONG_DOUBLE
     static inline long double log1p(long double x) throw()
     { return ::log1pl(x); }
-#endif
+#  endif
 #endif
 
 #if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
@@ -264,10 +293,10 @@ namespace GeographicLib {
 #else
     static inline double asinh(double x) throw() { return ::asinh(x); }
     static inline float asinh(float x) throw() { return ::asinhf(x); }
-#if defined(HAVE_LONG_DOUBLE)
+#  if HAVE_LONG_DOUBLE
     static inline long double asinh(long double x) throw()
     { return ::asinhl(x); }
-#endif
+#  endif
 #endif
 
 #if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
@@ -291,10 +320,10 @@ namespace GeographicLib {
 #else
     static inline double atanh(double x) throw() { return ::atanh(x); }
     static inline float atanh(float x) throw() { return ::atanhf(x); }
-#if defined(HAVE_LONG_DOUBLE)
+#  if HAVE_LONG_DOUBLE
     static inline long double atanh(long double x) throw()
     { return ::atanhl(x); }
-#endif
+#  endif
 #endif
 
 #if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
@@ -315,12 +344,85 @@ namespace GeographicLib {
 #else
     static inline double cbrt(double x) throw() { return ::cbrt(x); }
     static inline float cbrt(float x) throw() { return ::cbrtf(x); }
-#if defined(HAVE_LONG_DOUBLE)
+#  if HAVE_LONG_DOUBLE
     static inline long double cbrt(long double x) throw() { return ::cbrtl(x); }
-#endif
+#  endif
 #endif
 
     /**
+     * The error-free sum of two numbers.
+     *
+     * @tparam T the type of the argument and the returned value.
+     * @param[in] u
+     * @param[in] v
+     * @param[out] t the exact error given by (\e u + \e v) - \e s.
+     * @return \e s = round(\e u + \e v).
+     *
+     * See D. E. Knuth, TAOCP, Vol 2, 4.2.2, Theorem B.  (Note that \e t can be
+     * the same as one of the first two arguments.)
+     **********************************************************************/
+    template<typename T> static inline T sum(T u, T v, T& t) throw() {
+      volatile T s = u + v;
+      volatile T up = s - v;
+      volatile T vpp = s - up;
+      up -= u;
+      vpp -= v;
+      t = -(up + vpp);
+      // u + v =       s      + t
+      //       = round(u + v) + t
+      return s;
+    }
+
+    /**
+     * Normalize an angle (restricted input range).
+     *
+     * @tparam T the type of the argument and returned value.
+     * @param[in] x the angle in degrees.
+     * @return the angle reduced to the range [−180°, 180°).
+     *
+     * \e x must lie in [−540°, 540°).
+     **********************************************************************/
+    template<typename T> static inline T AngNormalize(T x) throw()
+    { return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x); }
+
+    /**
+     * Normalize an arbitrary angle.
+     *
+     * @tparam T the type of the argument and returned value.
+     * @param[in] x the angle in degrees.
+     * @return the angle reduced to the range [−180°, 180°).
+     *
+     * The range of \e x is unrestricted.
+     **********************************************************************/
+    template<typename T> static inline T AngNormalize2(T x) throw()
+    { return AngNormalize<T>(std::fmod(x, T(360))); }
+
+    /**
+     * Difference of two angles reduced to [−180°, 180°]
+     *
+     * @tparam T the type of the arguments and returned value.
+     * @param[in] x the first angle in degrees.
+     * @param[in] y the second angle in degrees.
+     * @return \e y − \e x, reduced to the range [−180°,
+     *   180°].
+     *
+     * \e x and \e y must both lie in [−180°, 180°].  The result
+     * is equivalent to computing the difference exactly, reducing it to
+     * (−180°, 180°] and rounding the result.  Note that this
+     * prescription allows −180° to be returned (e.g., if \e x is
+     * tiny and negative and \e y = 180°).
+     **********************************************************************/
+    template<typename T> static inline T AngDiff(T x, T y) throw() {
+      T t, d = sum(-x, y, t);
+      if ((d - T(180)) + t > T(0)) // y - x > 180
+        d -= T(360);            // exact
+      else if ((d + T(180)) + t <= T(0)) // y - x <= -180
+        d += T(360);            // exact
+      return d + t;
+    }
+
+#if defined(DOXYGEN)
+    /**
      * Test for finiteness.
      *
      * @tparam T the type of the argument.
@@ -328,20 +430,38 @@ namespace GeographicLib {
      * @return true if number is finite, false if NaN or infinite.
      **********************************************************************/
     template<typename T> static inline bool isfinite(T x) throw() {
-#if defined(DOXYGEN)
       return std::abs(x) <= (std::numeric_limits<T>::max)();
+    }
 #elif (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
-      return _finite(x) != 0;
+    template<typename T> static inline bool isfinite(T x) throw() {
+      return _finite(double(x)) != 0;
+    }
+#elif defined(_LIBCPP_VERSION)
+    // libc++ implements std::isfinite() as a template that only allows
+    // floating-point types.  isfinite is invoked by Utility::str to format
+    // numbers conveniently and this allows integer arguments, so we need to
+    // allow Math::isfinite to work on integers.
+    template<typename T> static inline
+    typename std::enable_if<std::is_floating_point<T>::value, bool>::type
+      isfinite(T x) throw() {
+      return std::isfinite(x);
+    }
+    template<typename T> static inline
+    typename std::enable_if<!std::is_floating_point<T>::value, bool>::type
+      isfinite(T /*x*/) throw() {
+      return true;
+    }
 #else
+    template<typename T> static inline bool isfinite(T x) throw() {
       return std::isfinite(x);
-#endif
     }
+#endif
 
     /**
      * The NaN (not a number)
      *
      * @tparam T the type of the returned value.
-     * @return NaN if available, otherwise return the max real.
+     * @return NaN if available, otherwise return the max real of type T.
      **********************************************************************/
     template<typename T> static inline T NaN() throw() {
       return std::numeric_limits<T>::has_quiet_NaN ?
diff --git a/include/GeographicLib/NormalGravity.hpp b/include/GeographicLib/NormalGravity.hpp
index 32e18b1..538422c 100644
--- a/include/GeographicLib/NormalGravity.hpp
+++ b/include/GeographicLib/NormalGravity.hpp
@@ -8,8 +8,7 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_NORMALGRAVITY_HPP)
-#define GEOGRAPHICLIB_NORMALGRAVITY_HPP \
-  "$Id: e4b65c9c5787d8ee14f476cbb518fd5007006344 $"
+#define GEOGRAPHICLIB_NORMALGRAVITY_HPP 1
 
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/Geocentric.hpp>
@@ -36,13 +35,13 @@ namespace GeographicLib {
    * Definitions:
    * - <i>V</i><sub>0</sub>, the gravitational contribution to the normal
    *   potential;
-   * - \e Phi, the rotational contribution to the normal potential;
-   * - \e U = <i>V</i><sub>0</sub> + \e Phi, the total
+   * - Φ, the rotational contribution to the normal potential;
+   * - \e U = <i>V</i><sub>0</sub> + Φ, the total
    *   potential;
-   * - <b>Gamma</b> = <b>grad</b> <i>V</i><sub>0</sub>, the acceleration due to
+   * - <b>Γ</b> = ∇<i>V</i><sub>0</sub>, the acceleration due to
    *   mass of the earth;
-   * - <b>f</b> = <b>grad</b> \e Phi, the centrifugal acceleration;
-   * - <b>gamma</b> = <b>grad</b> \e U = <b>Gamma</b> + <b>f</b>, the normal
+   * - <b>f</b> = ∇Φ, the centrifugal acceleration;
+   * - <b>γ</b> = ∇\e U = <b>Γ</b> + <b>f</b>, the normal
    *   acceleration;
    * - \e X, \e Y, \e Z, geocentric coordinates;
    * - \e x, \e y, \e z, local cartesian coordinates used to denote the east,
@@ -51,14 +50,14 @@ namespace GeographicLib {
    * References:
    * - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San
    *   Francisco, 1967), Secs. 1-19, 2-7, 2-8 (2-9, 2-10), 6-2 (6-3).
-   * - H. Moritz, Geodetic Reference System 1980, J. Geod. 54(3), 395-405
+   * - H. Moritz, Geodetic Reference System 1980, J. Geodesy 54(3), 395-405
    *   (1980) http://dx.doi.org/10.1007/BF02521480
    *
    * Example of use:
    * \include example-NormalGravity.cpp
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT NormalGravity {
+  class GEOGRAPHICLIB_EXPORT NormalGravity {
   private:
     static const int maxit_ = 10;
     typedef Math::real real;
@@ -82,20 +81,22 @@ namespace GeographicLib {
      *   (meters<sup>3</sup>/seconds<sup>2</sup>); this is the product of \e G
      *   the gravitational constant and \e M the mass of the earth (usually
      *   including the mass of the earth's atmosphere).
-     * @param[in] omega the angular velocity (rad s<sup>-1</sup>).
+     * @param[in] omega the angular velocity (rad s<sup>−1</sup>).
      * @param[in] f the flattening of the ellipsoid.
      * @param[in] J2 dynamical form factor.
+     * @exception if \e a is not positive or the other constants are
+     *   inconsistent (see below).
      *
      * Exactly one of \e f and \e J2 should be positive and this will be used
      * to define the ellipsoid.  The shape of the ellipsoid can be given in one
      * of two ways:
-     * - geometrically, the ellipsoid is defined by the flattening \e f =
-     *   (\e a - \e b) / \e a, where \e a and \e b are the equatorial radius
+     * - geometrically, the ellipsoid is defined by the flattening \e f = (\e a
+     *   − \e b) / \e a, where \e a and \e b are the equatorial radius
      *   and the polar semi-axis.
      * - physically, the ellipsoid is defined by the dynamical form factor
-     *   <i>J</i><sub>2</sub> = (\e C - \e A) / <i>Ma</i><sup>2</sup>, where \e
-     *   A and \e C are the equatorial and polar moments of inertia and \e M is
-     *   the mass of the earth.
+     *   <i>J</i><sub>2</sub> = (\e C − \e A) / <i>Ma</i><sup>2</sup>,
+     *   where \e A and \e C are the equatorial and polar moments of inertia
+     *   and \e M is the mass of the earth.
      **********************************************************************/
     NormalGravity(real a, real GM, real omega, real f, real J2);
 
@@ -114,8 +115,8 @@ namespace GeographicLib {
      * Evaluate the gravity on the surface of the ellipsoid.
      *
      * @param[in] lat the geographic latitude (degrees).
-     * @return \e gamma the acceleration due to gravity, positive downwards
-     *   (m s<sup>-2</sup>).
+     * @return γ the acceleration due to gravity, positive downwards
+     *   (m s<sup>−2</sup>).
      *
      * Due to the axial symmetry of the ellipsoid, the result is independent of
      * the value of the longitude.  This acceleration is perpendicular to the
@@ -131,9 +132,9 @@ namespace GeographicLib {
      * @param[in] lat the geographic latitude (degrees).
      * @param[in] h the height above the ellipsoid (meters).
      * @param[out] gammay the northerly component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gammaz the upward component of the acceleration
-     *   (m s<sup>-2</sup>); this is usually negative.
+     *   (m s<sup>−2</sup>); this is usually negative.
      * @return \e U the corresponding normal potential.
      *
      * Due to the axial symmetry of the ellipsoid, the result is independent of
@@ -153,17 +154,17 @@ namespace GeographicLib {
      * @param[in] Y geocentric coordinate of point (meters).
      * @param[in] Z geocentric coordinate of point (meters).
      * @param[out] gammaX the \e X component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gammaY the \e Y component of the acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] gammaZ the \e Z component of the acceleration
-     *   (m s<sup>-2</sup>).
-     * @return \e U = <i>V</i><sub>0</sub> + \e Phi the sum of the
+     *   (m s<sup>−2</sup>).
+     * @return \e U = <i>V</i><sub>0</sub> + Φ the sum of the
      *   gravitational and centrifugal potentials
-     *   (m<sup>2</sup> s<sup>-2</sup>).
+     *   (m<sup>2</sup> s<sup>−2</sup>).
      *
-     * The acceleration given by <b>gamma</b> = <b>grad</b> \e U = <b>grad</b>
-     * <i>V</i><sub>0</sub> + <b>grad</b> \e Phi = <b>Gamma</b> + <b>f</b>.
+     * The acceleration given by <b>γ</b> = ∇\e U =
+     * ∇<i>V</i><sub>0</sub> + ∇Φ = <b>Γ</b> + <b>f</b>.
      **********************************************************************/
     Math::real U(real X, real Y, real Z,
                  real& gammaX, real& gammaY, real& gammaZ) const throw();
@@ -176,13 +177,13 @@ namespace GeographicLib {
      * @param[in] Y geocentric coordinate of point (meters).
      * @param[in] Z geocentric coordinate of point (meters).
      * @param[out] GammaX the \e X component of the acceleration due to gravity
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] GammaY the \e Y component of the acceleration due to gravity
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] GammaZ the \e Z component of the acceleration due to gravity
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @return <i>V</i><sub>0</sub> the gravitational potential
-     *   (m<sup>2</sup> s<sup>-2</sup>).
+     *   (m<sup>2</sup> s<sup>−2</sup>).
      *
      * This function excludes the centrifugal acceleration and is appropriate
      * to use for space applications.  In terrestrial applications, the
@@ -198,12 +199,13 @@ namespace GeographicLib {
      * @param[in] X geocentric coordinate of point (meters).
      * @param[in] Y geocentric coordinate of point (meters).
      * @param[out] fX the \e X component of the centrifugal acceleration
-     *   (m s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
      * @param[out] fY the \e Y component of the centrifugal acceleration
-     *   (m s<sup>-2</sup>).
-     * @return \e Phi the centrifugal potential (m<sup>2</sup> s<sup>-2</sup>).
+     *   (m s<sup>−2</sup>).
+     * @return Φ the centrifugal potential (m<sup>2</sup>
+     *   s<sup>−2</sup>).
      *
-     * \e Phi is independent of \e Z, thus \e fZ = 0.  This function
+     * Φ is independent of \e Z, thus \e fZ = 0.  This function
      * NormalGravity::U sums the results of NormalGravity::V0 and
      * NormalGravity::Phi.
      **********************************************************************/
@@ -227,7 +229,7 @@ namespace GeographicLib {
 
     /**
      * @return \e GM the mass constant of the ellipsoid
-     *   (m<sup>3</sup> s<sup>-2</sup>).  This is the value used in the
+     *   (m<sup>3</sup> s<sup>−2</sup>).  This is the value used in the
      *   constructor.
      **********************************************************************/
     Math::real MassConstant() const throw()
@@ -239,51 +241,52 @@ namespace GeographicLib {
      * If \e n = 2 (the default), this is the value of <i>J</i><sub>2</sub>
      * used in the constructor.  Otherwise it is the zonal coefficient of the
      * Legendre harmonic sum of the normal gravitational potential.  Note that
-     * \e J<sub>n</sub> = 0 if \e is odd.  In most gravity applications, fully
-     * normalized Legendre functions are used and the corresponding coefficient
-     * is <i>C</i><sub><i>n</i>0</sub> = -\e J<sub>n</sub> / sqrt(2 \e n + 1).
+     * \e J<sub>n</sub> = 0 if \e n is odd.  In most gravity applications,
+     * fully normalized Legendre functions are used and the corresponding
+     * coefficient is <i>C</i><sub><i>n</i>0</sub> = −\e J<sub>n</sub> /
+     * sqrt(2 \e n + 1).
      **********************************************************************/
     Math::real DynamicalFormFactor(int n = 2) const throw()
     { return Init() ? ( n == 2 ? _J2 : Jn(n)) : Math::NaN<real>(); }
 
     /**
-     * @return \e omega the angular velocity of the ellipsoid
-     *   (rad s<sup>-1</sup>).  This is the value used in the constructor.
+     * @return ω the angular velocity of the ellipsoid (rad
+     *   s<sup>−1</sup>).  This is the value used in the constructor.
      **********************************************************************/
     Math::real AngularVelocity() const throw()
     { return Init() ? _omega : Math::NaN<real>(); }
 
     /**
-     * @return <i>f</i> the flattening of the ellipsoid (\e a - \e b)/\e a.
+     * @return <i>f</i> the flattening of the ellipsoid (\e a − \e b)/\e
+     *   a.
      **********************************************************************/
     Math::real Flattening() const throw()
     { return Init() ? _f : Math::NaN<real>(); }
 
     /**
-     * @return <i>gamma</i><sub>e</sub> the normal gravity at equator
-     *   (m s<sup>-2</sup>).
+     * @return γ<sub>e</sub> the normal gravity at equator (m
+     *   s<sup>−2</sup>).
      **********************************************************************/
     Math::real EquatorialGravity() const throw()
     { return Init() ? _gammae : Math::NaN<real>(); }
 
     /**
-     * @return <i>gamma</i><sub>p</sub> the normal gravity at poles
-     *   (m s<sup>-2</sup>).
+     * @return γ<sub>p</sub> the normal gravity at poles (m
+     *   s<sup>−2</sup>).
      **********************************************************************/
     Math::real PolarGravity() const throw()
     { return Init() ? _gammap : Math::NaN<real>(); }
 
     /**
-     * @return <i>f*</i> the gravity flattening
-     *   (<i>gamma</i><sub>p</sub> - <i>gamma</i><sub>e</sub>) /
-     *   <i>gamma</i><sub>e</sub>.
+     * @return <i>f*</i> the gravity flattening (γ<sub>p</sub> −
+     *   γ<sub>e</sub>) / γ<sub>e</sub>.
      **********************************************************************/
     Math::real GravityFlattening() const throw()
     { return Init() ? _fstar : Math::NaN<real>(); }
 
     /**
      * @return <i>U</i><sub>0</sub> the constant normal potential for the
-     *   surface of the ellipsoid (m<sup>2</sup> s<sup>-2</sup>).
+     *   surface of the ellipsoid (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real SurfacePotential() const throw()
     { return Init() ? _U0 : Math::NaN<real>(); }
diff --git a/include/GeographicLib/OSGB.hpp b/include/GeographicLib/OSGB.hpp
index 6d3bcad..c055dd8 100644
--- a/include/GeographicLib/OSGB.hpp
+++ b/include/GeographicLib/OSGB.hpp
@@ -2,23 +2,21 @@
  * \file OSGB.hpp
  * \brief Header for GeographicLib::OSGB class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_OSGB_HPP)
-#define GEOGRAPHICLIB_OSGB_HPP "$Id: e91367e693ad63bb500c953e9c21445bef017464 $"
+#define GEOGRAPHICLIB_OSGB_HPP 1
 
-#include <string>
-#include <sstream>
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/TransverseMercator.hpp>
 
 #if defined(_MSC_VER)
 // Squelch warnings about dll vs string
-#pragma warning (push)
-#pragma warning (disable: 4251)
+#  pragma warning (push)
+#  pragma warning (disable: 4251)
 #endif
 
 namespace GeographicLib {
@@ -30,10 +28,10 @@ namespace GeographicLib {
    * maps of Great Britain and conversions to the grid reference system.
    *
    * See
-   * - <a href="http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/A_Guide_to_Coordinate_Systems_in_Great_Britain.pdf">
-   * A guide to coordinate systems in Great Britain</a>
-   * - <a href="http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidetonationalgrid/page1.html">
-   * Guide to National Grid</a>
+   * - <a href="http://www.ordnancesurvey.co.uk/docs/support/guide-coordinate-systems-great-britain.pdf">
+   *   A guide to coordinate systems in Great Britain</a>
+   * - <a href="http://www.ordnancesurvey.co.uk/docs/support/national-grid.pdf">
+   *   Guide to the National Grid</a>
    *
    * \b WARNING: the latitudes and longitudes for the Ordnance Survey grid
    * system do not use the WGS84 datum.  Do not use the values returned by this
@@ -43,13 +41,14 @@ namespace GeographicLib {
    * Example of use:
    * \include example-OSGB.cpp
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT OSGB {
+  class GEOGRAPHICLIB_EXPORT OSGB {
   private:
     typedef Math::real real;
     static const std::string letters_;
     static const std::string digits_;
     static const TransverseMercator OSGBTM_;
-    static const real northoffset_;
+    static real northoffset_;
+    static bool init_;
     enum {
       base_ = 10,
       tile_ = 100000,
@@ -67,7 +66,6 @@ namespace GeographicLib {
     static real computenorthoffset() throw();
     static void CheckCoords(real x, real y);
     OSGB();                     // Disable constructor
-
   public:
 
     /**
@@ -80,14 +78,14 @@ namespace GeographicLib {
      * @param[out] gamma meridian convergence at point (degrees).
      * @param[out] k scale of projection at point.
      *
-     * \e lat should be in the range [-90, 90]; \e lon and \e lon0 should be in
-     * the range [-180, 360].
+     * \e lat should be in the range [−90°, 90°]; \e lon
+     * should be in the range [−540°, 540°).
      **********************************************************************/
     static void Forward(real lat, real lon,
                         real& x, real& y, real& gamma, real& k) throw() {
       OSGBTM_.Forward(OriginLongitude(), lat, lon, x, y, gamma, k);
       x += FalseEasting();
-      y += northoffset_;
+      y += computenorthoffset();
     }
 
     /**
@@ -100,13 +98,14 @@ namespace GeographicLib {
      * @param[out] gamma meridian convergence at point (degrees).
      * @param[out] k scale of projection at point.
      *
-     * The value of \e lon returned is in the range [-180, 180).
+     * The value of \e lon returned is in the range [−180°,
+     * 180°).
      **********************************************************************/
 
     static void Reverse(real x, real y,
                         real& lat, real& lon, real& gamma, real& k) throw() {
       x -= FalseEasting();
-      y -= northoffset_;
+      y -= computenorthoffset();
       OSGBTM_.Reverse(OriginLongitude(), x, y, lat, lon, gamma, k);
     }
 
@@ -133,6 +132,10 @@ namespace GeographicLib {
      * @param[in] y northing of point (meters).
      * @param[in] prec precision relative to 100 km.
      * @param[out] gridref National Grid reference.
+     * @exception GeographicErr if \e prec, \e x, or \e y is outside its
+     *   allowed range.
+     * @exception std::bad_alloc if the memory for \e gridref can't be
+     *   allocatied.
      *
      * \e prec specifies the precision of the grid reference string as follows:
      * - prec = 0 (min), 100km
@@ -142,11 +145,10 @@ namespace GeographicLib {
      * - prec = 4, 10m
      * - prec = 5, 1m
      * - prec = 6, 0.1m
-     * - prec = 11 (max), 1um
+     * - prec = 11 (max), 1μm
      *
-     * The easting must be in the range [-1000 km, 1500 km) and the northing
-     * must be in the range [-500 km, 2000 km).  An exception is thrown if
-     * either the easting and northing is outside these bounds.  These bounds
+     * The easting must be in the range [−1000 km, 1500 km) and the
+     * northing must be in the range [−500 km, 2000 km).  These bounds
      * are consistent with rules for the letter designations for the grid
      * system.
      **********************************************************************/
@@ -161,6 +163,7 @@ namespace GeographicLib {
      * @param[out] prec precision relative to 100 km.
      * @param[in] centerp if true (default), return center of the grid square,
      *   else return SW (lower left) corner.
+     * @exception GeographicErr if \e gridref is illegal.
      *
      * The grid reference must be of the form: two letters (not including I)
      * followed by an even number of digits (up to 22).
@@ -176,8 +179,8 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the Airy 1830 ellipsoid (meters).
      *
      * This is 20923713 ft converted to meters using the rule 1 ft =
-     * 10^(9.48401603-10) m.  (The Airy 1830 value is returned because the OSGB
-     * projection is based on this ellipsoid.)
+     * 10<sup>9.48401603−10</sup> m.  (The Airy 1830 value is returned
+     * because the OSGB projection is based on this ellipsoid.)
      **********************************************************************/
     static Math::real MajorRadius() throw()
     // result is about 6377563.3960320664406 m
@@ -187,9 +190,9 @@ namespace GeographicLib {
      * @return \e f the inverse flattening of the Airy 1830 ellipsoid.
      *
      * For the Airy 1830 ellipsoid, \e a = 20923713 ft and \e b = 20853810 ft;
-     * thus the flattening = (20923713 - 20853810)/20923713 = 7767/2324857 =
-     * 1/299.32496459...  (The Airy 1830 value is returned because the OSGB
-     * projection is based on this ellipsoid.)
+     * thus the flattening = (20923713 − 20853810)/20923713 =
+     * 7767/2324857 = 1/299.32496459...  (The Airy 1830 value is returned
+     * because the OSGB projection is based on this ellipsoid.)
      **********************************************************************/
     static Math::real Flattening() throw()
     { return real(20923713 - 20853810) / real(20923713); }
@@ -203,10 +206,13 @@ namespace GeographicLib {
     /// \endcond
 
     /**
-     * @return \e k0 central scale for the OSGB projection (0.9996012717).
+     * @return \e k0 central scale for the OSGB projection (0.9996012717...).
+     *
+     * C. J. Mugnier, Grids & Datums, PE&RS, Oct. 2003, states that
+     * this is defined as 10<sup>9.9998268−10</sup>.
      **********************************************************************/
     static Math::real CentralScale() throw()
-    { return real(0.9996012717L); }
+    { return std::pow(real(10), real(9998268 - 10000000) / real(10000000)); }
 
     /**
      * @return latitude of the origin for the OSGB projection (49 degrees).
@@ -214,12 +220,13 @@ namespace GeographicLib {
     static Math::real OriginLatitude() throw() { return real(49); }
 
     /**
-     * @return longitude of the origin for the OSGB projection (-2 degrees).
+     * @return longitude of the origin for the OSGB projection (−2
+     *   degrees).
      **********************************************************************/
     static Math::real OriginLongitude() throw() { return real(-2); }
 
     /**
-     * @return false northing the OSGB projection (-100000 meters).
+     * @return false northing the OSGB projection (−100000 meters).
      **********************************************************************/
     static Math::real FalseNorthing() throw() { return real(-100000); }
 
@@ -234,7 +241,7 @@ namespace GeographicLib {
 } // namespace GeographicLib
 
 #if defined(_MSC_VER)
-#pragma warning (pop)
+#  pragma warning (pop)
 #endif
 
-#endif
+#endif  // GEOGRAPHICLIB_OSGB_HPP
diff --git a/include/GeographicLib/PolarStereographic.hpp b/include/GeographicLib/PolarStereographic.hpp
index 759648d..0ff0d73 100644
--- a/include/GeographicLib/PolarStereographic.hpp
+++ b/include/GeographicLib/PolarStereographic.hpp
@@ -8,21 +8,20 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP)
-#define GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP \
-  "$Id: 07add8492c46e42012007a8738060abc902a5504 $"
+#define GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP 1
 
 #include <GeographicLib/Constants.hpp>
 
 namespace GeographicLib {
 
   /**
-   * \brief Polar Stereographic Projection
+   * \brief Polar stereographic projection
    *
    * Implementation taken from the report,
    * - J. P. Snyder,
    *   <a href="http://pubs.er.usgs.gov/usgspubs/pp/pp1395"> Map Projections: A
    *   Working Manual</a>, USGS Professional Paper 1395 (1987),
-   *   pp. 160–163.
+   *   pp. 160--163.
    *
    * This is a straightforward implementation of the equations in Snyder except
    * that Newton's method is used to invert the projection.
@@ -30,7 +29,7 @@ namespace GeographicLib {
    * Example of use:
    * \include example-PolarStereographic.cpp
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT PolarStereographic {
+  class GEOGRAPHICLIB_EXPORT PolarStereographic {
   private:
     typedef Math::real real;
     // _Cx used to be _C but g++ 3.4 has a macro of that name
@@ -47,9 +46,8 @@ namespace GeographicLib {
     }
     // Return e * atanh(e * x) for f >= 0, else return
     // - sqrt(-e2) * atan( sqrt(-e2) * x) for f < 0
-    inline real eatanhe(real x) const throw() {
-      return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * std::atan(_e * x);
-    }
+    inline real eatanhe(real x) const throw()
+    { return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * std::atan(_e * x); }
   public:
 
     /**
@@ -60,9 +58,8 @@ namespace GeographicLib {
      *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
      *   to 1/\e f.
      * @param[in] k0 central scale factor.
-     *
-     * An exception is thrown if either of the axes of the ellipsoid is
-     * not positive \e a or if \e k0 is not positive.
+     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+     *   not positive.
      **********************************************************************/
     PolarStereographic(real a, real f, real k0);
 
@@ -71,10 +68,9 @@ namespace GeographicLib {
      *
      * @param[in] lat (degrees) assuming \e northp = true.
      * @param[in] k scale at latitude \e lat (default 1).
-     *
-     * This allows a "latitude of true scale" to be specified.  An exception is
-     * thrown if \e k is not positive or if \e lat is not in the range (-90,
-     * 90].
+     * @exception GeographicErr \e k is not positive.
+     * @exception GeographicErr if \e lat is not in (−90°,
+     *   90°].
      **********************************************************************/
     void SetScale(real lat, real k = real(1));
 
@@ -91,8 +87,9 @@ namespace GeographicLib {
      * @param[out] k scale of projection at point.
      *
      * No false easting or northing is added.  \e lat should be in the range
-     * (-90, 90] for \e northp = true and in the range [-90, 90) for \e northp
-     * = false; \e lon should be in the range [-180, 360].
+     * (−90°, 90°] for \e northp = true and in the range
+     * [−90°, 90°) for \e northp = false; \e lon should
+     * be in the range [−540°, 540°).
      **********************************************************************/
     void Forward(bool northp, real lat, real lon,
                  real& x, real& y, real& gamma, real& k) const throw();
@@ -110,7 +107,7 @@ namespace GeographicLib {
      * @param[out] k scale of projection at point.
      *
      * No false easting or northing is added.  The value of \e lon returned is
-     * in the range [-180, 180).
+     * in the range [−180°, 180°).
      **********************************************************************/
     void Reverse(bool northp, real x, real y,
                  real& lat, real& lon, real& gamma, real& k) const throw();
diff --git a/include/GeographicLib/PolygonArea.hpp b/include/GeographicLib/PolygonArea.hpp
index 3e029c5..cc1edf1 100644
--- a/include/GeographicLib/PolygonArea.hpp
+++ b/include/GeographicLib/PolygonArea.hpp
@@ -2,14 +2,13 @@
  * \file PolygonArea.hpp
  * \brief Header for GeographicLib::PolygonArea class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_POLYGONAREA_HPP)
-#define GEOGRAPHICLIB_POLYGONAREA_HPP \
-  "$Id: 7a339f312a9c977b9fccad3c0c8bfa9009d863e2 $"
+#define GEOGRAPHICLIB_POLYGONAREA_HPP 1
 
 #include <GeographicLib/Geodesic.hpp>
 #include <GeographicLib/Constants.hpp>
@@ -18,30 +17,33 @@
 namespace GeographicLib {
 
   /**
-   * \brief Polygon Areas.
+   * \brief Polygon areas
    *
-   * This computes the area of a geodesic polygon using the method given
-   * Section 15 of
+   * This computes the area of a polygon whose edges are geodesics using the
+   * method given in Section 6 of
    * - C. F. F. Karney,
-   *   <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
-   *   on an ellipsoid of revolution</a>,
-   *   Feb. 2011;
-   *   preprint
-   *   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.
-   * .
-   * See also Section 6 of
-   * - C. F. F. Karney,
-   *   <a href="http://arxiv.org/abs/1109.4448">Algorithms for geodesics</a>,
-   *   Sept. 2011;
-   *   preprint
-   *   <a href="http://arxiv.org/abs/1109.4448">arxiv:1109.4448</a>.
+   *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   Algorithms for geodesics</a>,
+   *   J. Geodesy <b>87</b>, 43--55 (2013);
+   *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   *   10.1007/s00190-012-0578-z</a>;
+   *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   *   geod-addenda.html</a>.
+   *
+   * This class lets you add vertices and edges one at a time to the polygon.
+   * The sequence must start with a vertex and thereafter vertices and edges
+   * can be added in any order.  Any vertex after the first creates a new edge
+   * which is the ''shortest'' geodesic from the previous vertex.  In some
+   * cases there may be two or many such shortest geodesics and the area is
+   * then not uniquely defined.  In this case, either add an intermediate
+   * vertex or add the edge ''as'' an edge (by defining its direction and
+   * length).
    *
-   * This class lets you add vertices one at a time to the polygon.  The area
-   * and perimeter are accumulated in two times the standard floating point
-   * precision to guard against the loss of accuracy with many-sided polygons.
-   * At any point you can ask for the perimeter and area so far.  There's an
-   * option to treat the points as defining a polyline instead of a polygon; in
-   * that case, only the perimeter is computed.
+   * The area and perimeter are accumulated in two times the standard floating
+   * point precision to guard against the loss of accuracy with many-sided
+   * polygons.  At any point you can ask for the perimeter and area so far.
+   * There's an option to treat the points as defining a polyline instead of a
+   * polygon; in that case, only the perimeter is computed.
    *
    * Example of use:
    * \include example-PolygonArea.cpp
@@ -50,7 +52,7 @@ namespace GeographicLib {
    * providing access to the functionality of PolygonArea.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT PolygonArea {
+  class GEOGRAPHICLIB_EXPORT PolygonArea {
   private:
     typedef Math::real real;
     Geodesic _earth;
@@ -61,25 +63,13 @@ namespace GeographicLib {
     int _crossings;
     Accumulator<real> _areasum, _perimetersum;
     real _lat0, _lon0, _lat1, _lon1;
-    // Copied from Geodesic class
-    static inline real AngNormalize(real x) throw() {
-      // Place angle in [-180, 180).  Assumes x is in [-540, 540).
-      //
-      // g++ 4.4.4 holds a temporary in an extended register causing an error
-      // with the triangle 89,0.1;89,90.1;89,-179.9.  The volatile declaration
-      // fixes this.  (The bug probably triggered because transit and
-      // AngNormalize are inline functions.  So don't port this change over to
-      // Geodesic.hpp.)
-      volatile real y = x;
-      return y >= 180 ? y - 360 : (y < -180 ? y + 360 : y);
-    }
-    static inline int transit(real lon1, real lon2) {
+    static inline int transit(real lon1, real lon2) throw() {
       // Return 1 or -1 if crossing prime meridian in east or west direction.
       // Otherwise return zero.
-      lon1 = AngNormalize(lon1);
-      lon2 = AngNormalize(lon2);
-      // treat lon12 = -180 as an eastward geodesic, so convert to 180.
-      real lon12 = -AngNormalize(lon1 - lon2); // In (-180, 180]
+      // Compute lon12 the same way as Geodesic::Inverse.
+      lon1 = Math::AngNormalize(lon1);
+      lon2 = Math::AngNormalize(lon2);
+      real lon12 = Math::AngDiff(lon1, lon2);
       int cross =
         lon1 < 0 && lon2 >= 0 && lon12 > 0 ? 1 :
         (lon2 < 0 && lon1 >= 0 && lon12 < 0 ? -1 : 0);
@@ -99,10 +89,9 @@ namespace GeographicLib {
       : _earth(earth)
       , _area0(_earth.EllipsoidArea())
       , _polyline(polyline)
-      , _mask(Geodesic::DISTANCE | (_polyline ? 0 : Geodesic::AREA))
-    {
-      Clear();
-    }
+      , _mask(Geodesic::LATITUDE | Geodesic::LONGITUDE | Geodesic::DISTANCE |
+              (_polyline ? Geodesic::NONE : Geodesic::AREA))
+    { Clear(); }
 
     /**
      * Clear PolygonArea, allowing a new polygon to be started.
@@ -112,21 +101,33 @@ namespace GeographicLib {
       _crossings = 0;
       _areasum = 0;
       _perimetersum = 0;
-      _lat0 = _lon0 = _lat1 = _lon1 = 0;
+      _lat0 = _lon0 = _lat1 = _lon1 = Math::NaN<real>();
     }
 
     /**
      * Add a point to the polygon or polyline.
      *
      * @param[in] lat the latitude of the point (degrees).
-     * @param[in] lon the latitude of the point (degrees).
+     * @param[in] lon the longitude of the point (degrees).
      *
-     * \e lat should be in the range [-90, 90] and \e lon should be in the
-     * range [-180, 360].
+     * \e lat should be in the range [−90°, 90°] and \e
+     * lon should be in the range [−540°, 540°).
      **********************************************************************/
     void AddPoint(real lat, real lon) throw();
 
     /**
+     * Add an edge to the polygon or polyline.
+     *
+     * @param[in] azi azimuth at current point (degrees).
+     * @param[in] s distance from current point to next point (meters).
+     *
+     * \e azi should be in the range [−540°, 540°).  This does
+     * nothing if no points have been added yet.  Use PolygonArea::CurrentPoint
+     * to determine the position of the new vertex.
+     **********************************************************************/
+    void AddEdge(real azi, real s) throw();
+
+    /**
      * Return the results so far.
      *
      * @param[in] reverse if true then clockwise (instead of counter-clockwise)
@@ -136,8 +137,8 @@ namespace GeographicLib {
      *   the area for the rest of the earth.
      * @param[out] perimeter the perimeter of the polygon or length of the
      *   polyline (meters).
-     * @param[out] area the area of the polygon (meters^2); only set if
-     *   polyline is false in the constructor.
+     * @param[out] area the area of the polygon (meters<sup>2</sup>); only set
+     *   if \e polyline is false in the constructor.
      * @return the number of points.
      **********************************************************************/
     unsigned Compute(bool reverse, bool sign,
@@ -149,7 +150,8 @@ namespace GeographicLib {
      * a running result for the perimeter and area as the user moves the mouse
      * cursor.  Ordinary floating point arithmetic is used to accumulate the
      * data for the test point; thus the area and perimeter returned are less
-     * accurate than if AddPoint and Compute are used.
+     * accurate than if PolygonArea::AddPoint and PolygonArea::Compute are
+     * used.
      *
      * @param[in] lat the latitude of the test point (degrees).
      * @param[in] lon the longitude of the test point (degrees).
@@ -160,15 +162,55 @@ namespace GeographicLib {
      *   the area for the rest of the earth.
      * @param[out] perimeter the approximate perimeter of the polygon or length
      *   of the polyline (meters).
-     * @param[out] area the approximate area of the polygon (meters^2); only
-     *   set if polyline is false in the constructor.
+     * @param[out] area the approximate area of the polygon
+     *   (meters<sup>2</sup>); only set if polyline is false in the
+     *   constructor.
      * @return the number of points.
      *
-     * \e lat should be in the range [-90, 90] and \e lon should be in the
-     * range [-180, 360].
+     * \e lat should be in the range [−90°, 90°] and \e
+     * lon should be in the range [−540°, 540°).
+     **********************************************************************/
+    unsigned TestPoint(real lat, real lon, bool reverse, bool sign,
+                       real& perimeter, real& area) const throw();
+
+    /**
+     * Return the results assuming a tentative final test point is added via an
+     * azimuth and distance; however, the data for the test point is not saved.
+     * This lets you report a running result for the perimeter and area as the
+     * user moves the mouse cursor.  Ordinary floating point arithmetic is used
+     * to accumulate the data for the test point; thus the area and perimeter
+     * returned are less accurate than if PolygonArea::AddEdge and
+     * PolygonArea::Compute are used.
+     *
+     * @param[in] azi azimuth at current point (degrees).
+     * @param[in] s distance from current point to final test point (meters).
+     * @param[in] reverse if true then clockwise (instead of counter-clockwise)
+     *   traversal counts as a positive area.
+     * @param[in] sign if true then return a signed result for the area if
+     *   the polygon is traversed in the "wrong" direction instead of returning
+     *   the area for the rest of the earth.
+     * @param[out] perimeter the approximate perimeter of the polygon or length
+     *   of the polyline (meters).
+     * @param[out] area the approximate area of the polygon
+     *   (meters<sup>2</sup>); only set if polyline is false in the
+     *   constructor.
+     * @return the number of points.
+     *
+     * \e azi should be in the range [−540°, 540°).
+     **********************************************************************/
+    unsigned TestEdge(real azi, real s, bool reverse, bool sign,
+                      real& perimeter, real& area) const throw();
+
+    /// \cond SKIP
+    /**
+     * <b>DEPRECATED</b>
+     * The old name for PolygonArea::TestPoint.
      **********************************************************************/
     unsigned TestCompute(real lat, real lon, bool reverse, bool sign,
-                         real& perimeter, real& area) const throw();
+                         real& perimeter, real& area) const throw() {
+      return TestPoint(lat, lon, reverse, sign, perimeter, area);
+    }
+    /// \endcond
 
     /** \name Inspector functions
      **********************************************************************/
@@ -185,6 +227,18 @@ namespace GeographicLib {
      *   inherited from the Geodesic object used in the constructor.
      **********************************************************************/
     Math::real Flattening() const throw() { return _earth.Flattening(); }
+
+    /**
+     * Report the previous vertex added to the polygon or polyline.
+     *
+     * @param[out] lat the latitude of the point (degrees).
+     * @param[out] lon the longitude of the point (degrees).
+     *
+     * If no points have been added, then NaNs are returned.  Otherwise, \e lon
+     * will be in the range [−180°, 180°).
+     **********************************************************************/
+    void CurrentPoint(real& lat, real& lon) const throw()
+    { lat = _lat1; lon = _lon1; }
     ///@}
   };
 
diff --git a/include/GeographicLib/SphericalEngine.hpp b/include/GeographicLib/SphericalEngine.hpp
index 728d2de..62b53c4 100644
--- a/include/GeographicLib/SphericalEngine.hpp
+++ b/include/GeographicLib/SphericalEngine.hpp
@@ -2,14 +2,13 @@
  * \file SphericalEngine.hpp
  * \brief Header for GeographicLib::SphericalEngine class
  *
- * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2011-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_SPHERICALENGINE_HPP)
-#define GEOGRAPHICLIB_SPHERICALENGINE_HPP \
-  "$Id: f48320a694ecf901d997b23d32ea625e589f9534 $"
+#define GEOGRAPHICLIB_SPHERICALENGINE_HPP 1
 
 #include <vector>
 #include <istream>
@@ -17,8 +16,8 @@
 
 #if defined(_MSC_VER)
 // Squelch warnings about dll vs vector
-#pragma warning (push)
-#pragma warning (disable: 4251)
+#  pragma warning (push)
+#  pragma warning (disable: 4251)
 #endif
 
 namespace GeographicLib {
@@ -38,7 +37,7 @@ namespace GeographicLib {
    * \include example-SphericalEngine.cpp
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT SphericalEngine {
+  class GEOGRAPHICLIB_EXPORT SphericalEngine {
   private:
     typedef Math::real real;
     // A table of the square roots of integers
@@ -89,9 +88,9 @@ namespace GeographicLib {
      * The storage layout of the coefficients is documented in
      * SphericalHarmonic and SphericalHarmonic::SphericalHarmonic.
      **********************************************************************/
-    class GEOGRAPHIC_EXPORT coeff {
+    class GEOGRAPHICLIB_EXPORT coeff {
     private:
-      int _N, _nmx, _mmx;
+      int _Nx, _nmx, _mmx;
       std::vector<real>::const_iterator _Cnm;
       std::vector<real>::const_iterator _Snm;
     public:
@@ -99,7 +98,7 @@ namespace GeographicLib {
        * A default constructor
        **********************************************************************/
       coeff()
-        : _N(-1)
+        : _Nx(-1)
         , _nmx(-1)
         , _mmx(-1)
         , _Cnm(Z_.begin())
@@ -112,24 +111,26 @@ namespace GeographicLib {
        * @param[in] N the degree giving storage layout for \e C and \e S.
        * @param[in] nmx the maximum degree to be used.
        * @param[in] mmx the maximum order to be used.
-       *
-       * This requires \e N >= \e nmx >= \e mmx >= -1.  \e C and \e S must also
-       * be large enough to hold the coefficients.  Otherwise an exception is
-       * thrown.
+       * @exception GeographicErr if \e N, \e nmx, and \e mmx do not satisfy
+       *   \e N ≥ \e nmx ≥ \e mmx ≥ −1.
+       * @exception GeographicErr if \e C or \e S is not big enough to hold the
+       *   coefficients.
+       * @exception std::bad_alloc if the memory for the square root table
+       *   can't be allocated.
        **********************************************************************/
       coeff(const std::vector<real>& C,
             const std::vector<real>& S,
             int N, int nmx, int mmx)
-        : _N(N)
+        : _Nx(N)
         , _nmx(nmx)
         , _mmx(mmx)
         , _Cnm(C.begin())
         , _Snm(S.begin())
       {
-        if (!(_N >= _nmx && _nmx >= _mmx && _mmx >= -1))
+        if (!(_Nx >= _nmx && _nmx >= _mmx && _mmx >= -1))
           throw GeographicErr("Bad indices for coeff");
         if (!(index(_nmx, _mmx) < int(C.size()) &&
-              index(_nmx, _mmx) < int(S.size()) + (_N + 1)))
+              index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
           throw GeographicErr("Arrays too small in coeff");
         SphericalEngine::RootTable(_nmx);
       }
@@ -139,30 +140,32 @@ namespace GeographicLib {
        * @param[in] C a vector of coefficients for the cosine terms.
        * @param[in] S a vector of coefficients for the sine terms.
        * @param[in] N the maximum degree and order.
-       *
-       * This requires \e N >= -1.  \e C and \e S must also be large enough to
-       * hold the coefficients.  Otherwise an exception is thrown.
+       * @exception GeographicErr if \e N does not satisfy \e N ≥ −1.
+       * @exception GeographicErr if \e C or \e S is not big enough to hold the
+       *   coefficients.
+       * @exception std::bad_alloc if the memory for the square root table
+       *   can't be allocated.
        **********************************************************************/
       coeff(const std::vector<real>& C,
             const std::vector<real>& S,
             int N)
-        : _N(N)
+        : _Nx(N)
         , _nmx(N)
         , _mmx(N)
         , _Cnm(C.begin())
         , _Snm(S.begin())
       {
-        if (!(_N >= -1))
+        if (!(_Nx >= -1))
           throw GeographicErr("Bad indices for coeff");
         if (!(index(_nmx, _mmx) < int(C.size()) &&
-              index(_nmx, _mmx) < int(S.size()) + (_N + 1)))
+              index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
           throw GeographicErr("Arrays too small in coeff");
         SphericalEngine::RootTable(_nmx);
       }
       /**
        * @return \e N the degree giving storage layout for \e C and \e S.
        **********************************************************************/
-      inline int N() const throw() { return _N; }
+      inline int N() const throw() { return _Nx; }
       /**
        * @return \e nmx the maximum degree to be used.
        **********************************************************************/
@@ -179,7 +182,7 @@ namespace GeographicLib {
        * @return the one-dimensional index.
        **********************************************************************/
       inline int index(int n, int m) const throw()
-      { return m * _N - m * (m - 1) / 2 + n; }
+      { return m * _Nx - m * (m - 1) / 2 + n; }
       /**
        * An element of \e C.
        *
@@ -193,7 +196,7 @@ namespace GeographicLib {
        * @param[in] k the one-dimensional index.
        * @return the value of the \e S coefficient.
        **********************************************************************/
-      inline Math::real Sv(int k) const { return *(_Snm + (k - (_N + 1))); }
+      inline Math::real Sv(int k) const { return *(_Snm + (k - (_Nx + 1))); }
       /**
        * An element of \e C with checking.
        *
@@ -217,7 +220,7 @@ namespace GeographicLib {
        *   and \e m are in range else 0.
        **********************************************************************/
       inline Math::real Sv(int k, int n, int m, real f) const
-      { return m > _mmx || n > _nmx ? 0 : *(_Snm + (k - (_N + 1))) * f; }
+      { return m > _mmx || n > _nmx ? 0 : *(_Snm + (k - (_Nx + 1))) * f; }
 
       /**
        * The size of the coefficient vector for the cosine terms.
@@ -227,7 +230,7 @@ namespace GeographicLib {
        * @return the size of the vector of cosine terms as stored in column
        *   major order.
        **********************************************************************/
-      static inline int Csize(int N, int M)
+      static inline int Csize(int N, int M) throw()
       { return (M + 1) * (2 * N - M + 2) / 2; }
 
       /**
@@ -238,7 +241,7 @@ namespace GeographicLib {
        * @return the size of the vector of cosine terms as stored in column
        *   major order.
        **********************************************************************/
-      static inline int Ssize(int N, int M)
+      static inline int Ssize(int N, int M) throw ()
       { return Csize(N, M) - (N + 1); }
 
       /**
@@ -249,6 +252,11 @@ namespace GeographicLib {
        * @param[out] M The maximum order of the coefficients.
        * @param[out] C The vector of cosine coefficients.
        * @param[out] S The vector of sine coefficients.
+       * @exception GeographicErr if \e N and \e M do not satisfy \e N ≥
+       *   \e M ≥ −1.
+       * @exception GeographicErr if there's an error reading the data.
+       * @exception std::bad_alloc if the memory for \e C or \e S can't be
+       *   allocated.
        *
        * \e N and \e M are read as 4-byte ints.  \e C and \e S are resized to
        * accommodate all the coefficients (with the \e m = 0 coefficients for
@@ -278,14 +286,13 @@ namespace GeographicLib {
      * @param[out] gradz the \e z component of the gradient.
      * @result the spherical harmonic sum.
      *
-     * See the SphericalHarmonic class for the definition of the sum.
-     * The coefficients used by this function are, for example,
-     * c[0].Cv + f[1] * c[1].Cv + ... + f[L-1] * c[L-1].Cv.  (Note
-     * that f[0] is \e not used.)  The upper limits on the sum are
-     * determined by c[0].nmx() and c[0].mmx(); these limits apply to
-     * \e all the components of the coefficients.  The parameters \e
-     * gradp, \e norm, and \e L are template parameters, to allow more
-     * optimization to be done at compile time.
+     * See the SphericalHarmonic class for the definition of the sum.  The
+     * coefficients used by this function are, for example, c[0].Cv + f[1] *
+     * c[1].Cv + ... + f[L−1] * c[L−1].Cv.  (Note that f[0] is \e
+     * not used.)  The upper limits on the sum are determined by c[0].nmx() and
+     * c[0].mmx(); these limits apply to \e all the components of the
+     * coefficients.  The parameters \e gradp, \e norm, and \e L are template
+     * parameters, to allow more optimization to be done at compile time.
      *
      * Clenshaw summation is used which permits the evaluation of the sum
      * without the need to allocate temporary arrays.  Thus this function never
@@ -304,10 +311,12 @@ namespace GeographicLib {
      * @tparam L the number of terms in the coefficients.
      * @param[in] c an array of coeff objects.
      * @param[in] f array of coefficient multipliers.  f[0] should be 1.
-     * @param[in] p the radius of the circle = sqrt(<i>x</i><sup>2</sup> + 
+     * @param[in] p the radius of the circle = sqrt(<i>x</i><sup>2</sup> +
      *   <i>y</i><sup>2</sup>).
      * @param[in] z the height of the circle.
      * @param[in] a the normalizing radius.
+     * @exception std::bad_alloc if the memory for the CircularEngine can't be
+     *   allocated.
      * @result the CircularEngine object.
      *
      * If you need to evaluate the spherical harmonic sum for several points
@@ -325,6 +334,8 @@ namespace GeographicLib {
      * if necessary.
      *
      * @param[in] N the maximum degree to be used in SphericalEngine.
+     * @exception std::bad_alloc if the memory for the square root table can't
+     *   be allocated.
      *
      * Typically, there's no need for an end-user to call this routine, because
      * the constructors for SphericalEngine::coeff do so.  However, since this
@@ -332,9 +343,8 @@ namespace GeographicLib {
      * multi-threaded environment.  Because this routine does nothing if the
      * table is already large enough, one way to avoid race conditions is to
      * call this routine at program start up (when it's still single threaded),
-     * supplying the largest degree that your program will use.  E.g.,
-     \code
-  GeographicLib::SphericalEngine::RootTable(2190);
+     * supplying the largest degree that your program will use.  E.g., \code
+     GeographicLib::SphericalEngine::RootTable(2190);
      \endcode
      * suffices to accommodate extant magnetic and gravity models.
      **********************************************************************/
@@ -356,7 +366,7 @@ namespace GeographicLib {
 } // namespace GeographicLib
 
 #if defined(_MSC_VER)
-#pragma warning (pop)
+#  pragma warning (pop)
 #endif
 
 #endif  // GEOGRAPHICLIB_SPHERICALENGINE_HPP
diff --git a/include/GeographicLib/SphericalHarmonic.hpp b/include/GeographicLib/SphericalHarmonic.hpp
index ca7a2bf..a030c69 100644
--- a/include/GeographicLib/SphericalHarmonic.hpp
+++ b/include/GeographicLib/SphericalHarmonic.hpp
@@ -8,8 +8,7 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_SPHERICALHARMONIC_HPP)
-#define GEOGRAPHICLIB_SPHERICALHARMONIC_HPP \
-  "$Id: 6fa804c46efd01670cfb7835dd022791b60d2942 $"
+#define GEOGRAPHICLIB_SPHERICALHARMONIC_HPP 1
 
 #include <vector>
 #include <GeographicLib/Constants.hpp>
@@ -20,19 +19,19 @@
 namespace GeographicLib {
 
   /**
-   * \brief Spherical Harmonic series
+   * \brief Spherical harmonic series
    *
    * This class evaluates the spherical harmonic sum \verbatim
- V(x, y, z) = sum(n = 0..N)[ q^(n+1) * sum(m = 0..n)[
-   (C[n,m] * cos(m*lambda) + S[n,m] * sin(m*lambda)) *
-   P[n,m](cos(theta)) ] ]
-\endverbatim
+   V(x, y, z) = sum(n = 0..N)[ q^(n+1) * sum(m = 0..n)[
+     (C[n,m] * cos(m*lambda) + S[n,m] * sin(m*lambda)) *
+     P[n,m](cos(theta)) ] ]
+   \endverbatim
    * where
    * - <i>p</i><sup>2</sup> = <i>x</i><sup>2</sup> + <i>y</i><sup>2</sup>,
    * - <i>r</i><sup>2</sup> = <i>p</i><sup>2</sup> + <i>z</i><sup>2</sup>,
    * - \e q = <i>a</i>/<i>r</i>,
-   * - \e theta = atan2(\e p, \e z) = the spherical \e colatitude,
-   * - \e lambda = atan2(\e y, \e x) = the longitude.
+   * - θ = atan2(\e p, \e z) = the spherical \e colatitude,
+   * - λ = atan2(\e y, \e x) = the longitude.
    * - P<sub>\e nm</sub>(\e t) is the associated Legendre polynomial of degree
    *   \e n and order \e m.
    *
@@ -47,23 +46,23 @@ namespace GeographicLib {
    *
    * References:
    * - C. W. Clenshaw, A note on the summation of Chebyshev series,
-   *   %Math. Tables Aids Comput. 9(51), 118-120 (1955).
+   *   %Math. Tables Aids Comput. 9(51), 118--120 (1955).
    * - R. E. Deakin, Derivatives of the earth's potentials, Geomatics
-   *   Research Australasia 68, 31-60, (June 1998).
+   *   Research Australasia 68, 31--60, (June 1998).
    * - W. A. Heiskanen and H. Moritz, Physical Geodesy, (Freeman, San
    *   Francisco, 1967).  (See Sec. 1-14, for a definition of Pbar.)
-   * - S. A. Holmes and W. E. Featherstone, A unified approach to the
-   *   Clenshaw summation and the recursive computation of very high degree
-   *   and order normalised associated Legendre functions, J. Geod. 76(5),
-   *   279-299 (2002).
+   * - S. A. Holmes and W. E. Featherstone, A unified approach to the Clenshaw
+   *   summation and the recursive computation of very high degree and order
+   *   normalised associated Legendre functions, J. Geodesy 76(5),
+   *   279--299 (2002).
    * - C. C. Tscherning and K. Poder, Some geodetic applications of Clenshaw
-   *   summation, Boll. Geod. Sci. Aff. 41(4), 349-375 (1982).
+   *   summation, Boll. Geod. Sci. Aff. 41(4), 349--375 (1982).
    *
    * Example of use:
    * \include example-SphericalHarmonic.cpp
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT SphericalHarmonic {
+  class GEOGRAPHICLIB_EXPORT SphericalHarmonic {
   public:
     /**
      * Supported normalizations for the associated Legendre polynomials.
@@ -73,17 +72,19 @@ namespace GeographicLib {
        * Fully normalized associated Legendre polynomials.
        *
        * These are defined by <i>P</i><sub><i>nm</i></sub><sup>full</sup>(\e z)
-       * = (-1)<sup><i>m</i></sup> sqrt(\e k (2\e n + 1) (\e n - \e m)! / (\e n
-       * + \e m)!) <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z), where
+       * = (−1)<sup><i>m</i></sup> sqrt(\e k (2\e n + 1) (\e n − \e
+       * m)! / (\e n + \e m)!)
+       * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z), where
        * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers
        * function (also known as the Legendre function on the cut or the
        * associated Legendre polynomial) http://dlmf.nist.gov/14.7.E10 and \e k
        * = 1 for \e m = 0 and \e k = 2 otherwise.
        *
        * The mean squared value of
-       * <i>P</i><sub><i>nm</i></sub><sup>full</sup>(cos \e theta) cos(\e m \e
-       * lambda) and <i>P</i><sub><i>nm</i></sub><sup>full</sup>(cos \e theta)
-       * sin(\e m \e lambda) over the sphere is 1.
+       * <i>P</i><sub><i>nm</i></sub><sup>full</sup>(cosθ)
+       * cos(<i>m</i>λ) and
+       * <i>P</i><sub><i>nm</i></sub><sup>full</sup>(cosθ)
+       * sin(<i>m</i>λ) over the sphere is 1.
        *
        * @hideinitializer
        **********************************************************************/
@@ -92,17 +93,18 @@ namespace GeographicLib {
        * Schmidt semi-normalized associated Legendre polynomials.
        *
        * These are defined by <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(\e
-       * z) = (-1)<sup><i>m</i></sup> sqrt(\e k (\e n - \e m)! / (\e n + \e
-       * m)!)  <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z), where
-       * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers
+       * z) = (−1)<sup><i>m</i></sup> sqrt(\e k (\e n − \e m)! /
+       * (\e n + \e m)!)  <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z),
+       * where <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers
        * function (also known as the Legendre function on the cut or the
        * associated Legendre polynomial) http://dlmf.nist.gov/14.7.E10 and \e k
        * = 1 for \e m = 0 and \e k = 2 otherwise.
        *
        * The mean squared value of
-       * <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(cos \e theta) cos(\e m
-       * \e lambda) and <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(cos \e
-       * theta) sin(\e m \e lambda) over the sphere is 1/(2\e n + 1).
+       * <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(cosθ)
+       * cos(<i>m</i>λ) and
+       * <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(cosθ)
+       * sin(<i>m</i>λ) over the sphere is 1/(2\e n + 1).
        *
        * @hideinitializer
        **********************************************************************/
@@ -132,6 +134,9 @@ namespace GeographicLib {
      * @param[in] norm the normalization for the associated Legendre
      *   polynomials, either SphericalHarmonic::full (the default) or
      *   SphericalHarmonic::schmidt.
+     * @exception GeographicErr if \e N does not satisfy \e N ≥ −1.
+     * @exception GeographicErr if \e C or \e S is not big enough to hold the
+     *   coefficients.
      *
      * The coefficients \e C<sub>\e nm</sub> and \e S<sub>\e nm</sub> are
      * stored in the one-dimensional vectors \e C and \e S which must contain
@@ -147,10 +152,10 @@ namespace GeographicLib {
      * <i>C</i><sub>22</sub>,
      * <i>C</i><sub>32</sub>,
      * <i>C</i><sub>33</sub>.
-     * In general the (\e n,\e m) element is at index \e m*\e N - \e m*(\e m -
-     * 1)/2 + \e n.  The layout of \e S is the same except that the first
-     * column is omitted (since the \e m = 0 terms never contribute to the sum)
-     * and the 0th element is <i>S</i><sub>11</sub>
+     * In general the (\e n,\e m) element is at index \e m \e N − \e m
+     * (\e m − 1)/2 + \e n.  The layout of \e S is the same except that
+     * the first column is omitted (since the \e m = 0 terms never contribute
+     * to the sum) and the 0th element is <i>S</i><sub>11</sub>
      *
      * The class stores <i>pointers</i> to the first elements of \e C and \e S.
      * These arrays should not be altered or destroyed during the lifetime of a
@@ -178,6 +183,10 @@ namespace GeographicLib {
      * @param[in] norm the normalization for the associated Legendre
      *   polynomials, either SphericalHarmonic::FULL (the default) or
      *   SphericalHarmonic::SCHMIDT.
+     * @exception GeographicErr if \e N, \e nmx, and \e mmx do not satisfy
+     *   \e N ≥ \e nmx ≥ \e mmx ≥ −1.
+     * @exception GeographicErr if \e C or \e S is not big enough to hold the
+     *   coefficients.
      *
      * The class stores <i>pointers</i> to the first elements of \e C and \e S.
      * These arrays should not be altered or destroyed during the lifetime of a
@@ -267,46 +276,45 @@ namespace GeographicLib {
      * @param[in] z the height of the circle above the equatorial plane.
      * @param[in] gradp if true the returned object will be able to compute the
      *   gradient of the sum.
+     * @exception std::bad_alloc if the memory for the CircularEngine can't be
+     *   allocated.
      * @return the CircularEngine object.
      *
      * SphericalHarmonic::operator()() exchanges the order of the sums in the
-     * definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m =
-     * 0..N)[sum(n = m..N)[...]].  SphericalHarmonic::Circle performs the inner
-     * sum over degree \e n (which entails about <i>N</i><sup>2</sup>
-     * operations).  Calling CircularEngine::operator()() on the returned
-     * object performs the outer sum over the order \e m (about \e N
-     * operations).  This routine may throw a bad_alloc exception in the
-     * CircularEngine constructor.
+     * definition, i.e., ∑<sub>n = 0..N</sub> ∑<sub>m = 0..n</sub>
+     * becomes ∑<sub>m = 0..N</sub> ∑<sub>n = m..N</sub>.
+     * SphericalHarmonic::Circle performs the inner sum over degree \e n (which
+     * entails about <i>N</i><sup>2</sup> operations).  Calling
+     * CircularEngine::operator()() on the returned object performs the outer
+     * sum over the order \e m (about \e N operations).
      *
      * Here's an example of computing the spherical sum at a sequence of
-     * longitudes without using a CircularEngine object
-     \code
-  SphericalHarmonic h(...);     // Create the SphericalHarmonic object
-  double r = 2, lat = 33, lon0 = 44, dlon = 0.01;
-  double
-    phi = lat * Math::degree<double>(),
-    z = r * sin(phi), p = r * cos(phi);
-  for (int i = 0; i <= 100; ++i) {
-    real
-      lon = lon0 + i * dlon,
-      lam = lon * Math::degree<double>();
-    std::cout << lon << " " << h(p * cos(lam), p * sin(lam), z) << "\n";
-  }
+     * longitudes without using a CircularEngine object \code
+     SphericalHarmonic h(...);     // Create the SphericalHarmonic object
+     double r = 2, lat = 33, lon0 = 44, dlon = 0.01;
+     double
+       phi = lat * Math::degree<double>(),
+       z = r * sin(phi), p = r * cos(phi);
+     for (int i = 0; i <= 100; ++i) {
+       real
+         lon = lon0 + i * dlon,
+         lam = lon * Math::degree<double>();
+       std::cout << lon << " " << h(p * cos(lam), p * sin(lam), z) << "\n";
+     }
      \endcode
      * Here is the same calculation done using a CircularEngine object.  This
-     * will be about <i>N</i>/2 times faster.
-     \code
-  SphericalHarmonic h(...);     // Create the SphericalHarmonic object
-  double r = 2, lat = 33, lon0 = 44, dlon = 0.01;
-  double
-    phi = lat * Math::degree<double>(),
-    z = r * sin(phi), p = r * cos(phi);
-  CircularEngine c(h(p, z, false)); // Create the CircularEngine object
-  for (int i = 0; i <= 100; ++i) {
-    real
-      lon = lon0 + i * dlon;
-    std::cout << lon << " " << c(lon) << "\n";
-  }
+     * will be about <i>N</i>/2 times faster. \code
+     SphericalHarmonic h(...);     // Create the SphericalHarmonic object
+     double r = 2, lat = 33, lon0 = 44, dlon = 0.01;
+     double
+       phi = lat * Math::degree<double>(),
+       z = r * sin(phi), p = r * cos(phi);
+     CircularEngine c(h(p, z, false)); // Create the CircularEngine object
+     for (int i = 0; i <= 100; ++i) {
+       real
+         lon = lon0 + i * dlon;
+       std::cout << lon << " " << c(lon) << "\n";
+     }
      \endcode
      **********************************************************************/
     CircularEngine Circle(real p, real z, bool gradp) const {
diff --git a/include/GeographicLib/SphericalHarmonic1.hpp b/include/GeographicLib/SphericalHarmonic1.hpp
index 713dd10..d46741b 100644
--- a/include/GeographicLib/SphericalHarmonic1.hpp
+++ b/include/GeographicLib/SphericalHarmonic1.hpp
@@ -8,8 +8,7 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP)
-#define GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP \
-  "$Id: 9dd895ded08db0f7fdd82159399da511f40a17e1 $"
+#define GEOGRAPHICLIB_SPHERICALHARMONIC1_HPP 1
 
 #include <vector>
 #include <GeographicLib/Constants.hpp>
@@ -19,7 +18,7 @@
 namespace GeographicLib {
 
   /**
-   * \brief Spherical Harmonic series with a correction to the coefficients.
+   * \brief Spherical harmonic series with a correction to the coefficients
    *
    * This classes is similar to SphericalHarmonic, except that the coefficients
    * \e C<sub>\e nm</sub> are replaced by \e C<sub>\e nm</sub> + \e tau
@@ -29,7 +28,7 @@ namespace GeographicLib {
    * \include example-SphericalHarmonic1.cpp
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT SphericalHarmonic1 {
+  class GEOGRAPHICLIB_EXPORT SphericalHarmonic1 {
   public:
     /**
      * Supported normalizations for associate Legendre polynomials.
@@ -78,9 +77,12 @@ namespace GeographicLib {
      * @param[in] norm the normalization for the associated Legendre
      *   polynomials, either SphericalHarmonic1::FULL (the default) or
      *   SphericalHarmonic1::SCHMIDT.
+     * @exception GeographicErr if \e N and \e N1 do not satisfy \e N ≥
+     *   \e N1 ≥ −1.
+     * @exception GeographicErr if any of the vectors of coefficients is not
+     *   large enough.
      *
-     * See SphericalHarmonic for the way the coefficients should be stored.  \e
-     * N1 should satisfy \e N1 <= \e N.
+     * See SphericalHarmonic for the way the coefficients should be stored.
      *
      * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e
      * C', and \e S'.  These arrays should not be altered or destroyed during
@@ -122,6 +124,11 @@ namespace GeographicLib {
      * @param[in] norm the normalization for the associated Legendre
      *   polynomials, either SphericalHarmonic1::FULL (the default) or
      *   SphericalHarmonic1::SCHMIDT.
+     * @exception GeographicErr if the parameters do not satisfy \e N ≥ \e
+     *   nmx ≥ \e mmx ≥ −1; \e N1 ≥ \e nmx1 ≥ \e mmx1 ≥
+     *   −1; \e N ≥ \e N1; \e nmx ≥ \e nmx1; \e mmx ≥ \e mmx1.
+     * @exception GeographicErr if any of the vectors of coefficients is not
+     *   large enough.
      *
      * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e
      * C', and \e S'.  These arrays should not be altered or destroyed during
@@ -224,16 +231,17 @@ namespace GeographicLib {
      * @param[in] z the height of the circle above the equatorial plane.
      * @param[in] gradp if true the returned object will be able to compute the
      *   gradient of the sum.
+     * @exception std::bad_alloc if the memory for the CircularEngine can't be
+     *   allocated.
      * @return the CircularEngine object.
      *
      * SphericalHarmonic1::operator()() exchanges the order of the sums in the
-     * definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m =
-     * 0..N)[sum(n = m..N)[...]].  SphericalHarmonic1::Circle performs the
-     * inner sum over degree \e n (which entails about <i>N</i><sup>2</sup>
-     * operations).  Calling CircularEngine::operator()() on the returned
-     * object performs the outer sum over the order \e m (about \e N
-     * operations).  This routine may throw a bad_alloc exception in the
-     * CircularEngine constructor.
+     * definition, i.e., ∑<sub>n = 0..N</sub> ∑<sub>m = 0..n</sub>
+     * becomes ∑<sub>m = 0..N</sub> ∑<sub>n = m..N</sub>.
+     * SphericalHarmonic1::Circle performs the inner sum over degree \e n
+     * (which entails about <i>N</i><sup>2</sup> operations).  Calling
+     * CircularEngine::operator()() on the returned object performs the outer
+     * sum over the order \e m (about \e N operations).
      *
      * See SphericalHarmonic::Circle for an example of its use.
      **********************************************************************/
diff --git a/include/GeographicLib/SphericalHarmonic2.hpp b/include/GeographicLib/SphericalHarmonic2.hpp
index 7e976ab..7da1c53 100644
--- a/include/GeographicLib/SphericalHarmonic2.hpp
+++ b/include/GeographicLib/SphericalHarmonic2.hpp
@@ -2,14 +2,13 @@
  * \file SphericalHarmonic2.hpp
  * \brief Header for GeographicLib::SphericalHarmonic2 class
  *
- * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2011-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP)
-#define GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP \
-  "$Id: ce4cda614c1966dea65610bc73bc4db562677fa8 $"
+#define GEOGRAPHICLIB_SPHERICALHARMONIC2_HPP 1
 
 #include <vector>
 #include <GeographicLib/Constants.hpp>
@@ -19,7 +18,7 @@
 namespace GeographicLib {
 
   /**
-   * \brief Spherical Harmonic series with two corrections to the coefficients.
+   * \brief Spherical harmonic series with two corrections to the coefficients
    *
    * This classes is similar to SphericalHarmonic, except that the coefficients
    * \e C<sub>\e nm</sub> are replaced by \e C<sub>\e nm</sub> + \e tau'
@@ -30,7 +29,9 @@ namespace GeographicLib {
    * \include example-SphericalHarmonic2.cpp
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT SphericalHarmonic2 {
+  // Don't include the GEOGRPAHIC_EXPORT because this header-only class isn't
+  // used by any other classes in the library.
+  class /*GEOGRAPHICLIB_EXPORT*/ SphericalHarmonic2 {
   public:
     /**
      * Supported normalizations for associate Legendre polynomials.
@@ -83,9 +84,13 @@ namespace GeographicLib {
      * @param[in] norm the normalization for the associated Legendre
      *   polynomials, either SphericalHarmonic2::FULL (the default) or
      *   SphericalHarmonic2::SCHMIDT.
+     * @exception GeographicErr if \e N and \e N1 do not satisfy \e N ≥
+     *   \e N1 ≥ −1, and similarly for \e N2.
+     * @exception GeographicErr if any of the vectors of coefficients is not
+     *   large enough.
      *
      * See SphericalHarmonic for the way the coefficients should be stored.  \e
-     * N1 and \e N2 should satisfy \e N1 <= \e N and \e N2 <= \e N.
+     * N1 and \e N2 should satisfy \e N1 ≤ \e N and \e N2 ≤ \e N.
      *
      * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e
      * C', \e S', \e C'', and \e S''.  These arrays should not be altered or
@@ -137,6 +142,12 @@ namespace GeographicLib {
      * @param[in] norm the normalization for the associated Legendre
      *   polynomials, either SphericalHarmonic2::FULL (the default) or
      *   SphericalHarmonic2::SCHMIDT.
+     * @exception GeographicErr if the parameters do not satisfy \e N ≥ \e
+     *   nmx ≥ \e mmx ≥ −1; \e N1 ≥ \e nmx1 ≥ \e mmx1 ≥
+     *   −1; \e N ≥ \e N1; \e nmx ≥ \e nmx1; \e mmx ≥ \e mmx1;
+     *   and similarly for \e N2, \e nmx2, and \e mmx2.
+     * @exception GeographicErr if any of the vectors of coefficients is not
+     *   large enough.
      *
      * The class stores <i>pointers</i> to the first elements of \e C, \e S, \e
      * C', \e S', \e C'', and \e S''.  These arrays should not be altered or
@@ -157,7 +168,7 @@ namespace GeographicLib {
       if (!(nmx1 <= nmx && nmx2 <= nmx))
         throw GeographicErr("nmx1 and nmx2 cannot be larger that nmx");
       if (!(mmx1 <= mmx && mmx2 <= mmx))
-        throw GeographicErr("mmx1 and mmx2cannot be larger that mmx");
+        throw GeographicErr("mmx1 and mmx2 cannot be larger that mmx");
       _c[0] = SphericalEngine::coeff(C, S, N, nmx, mmx);
       _c[1] = SphericalEngine::coeff(C1, S1, N1, nmx1, mmx1);
       _c[2] = SphericalEngine::coeff(C2, S2, N2, nmx2, mmx2);
@@ -247,16 +258,17 @@ namespace GeographicLib {
      * @param[in] z the height of the circle above the equatorial plane.
      * @param[in] gradp if true the returned object will be able to compute the
      *   gradient of the sum.
+     * @exception std::bad_alloc if the memory for the CircularEngine can't be
+     *   allocated.
      * @return the CircularEngine object.
      *
      * SphericalHarmonic2::operator()() exchanges the order of the sums in the
-     * definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m =
-     * 0..N)[sum(n = m..N)[...]].  SphericalHarmonic2::Circle performs the
-     * inner sum over degree \e n (which entails about <i>N</i><sup>2</sup>
-     * operations).  Calling CircularEngine::operator()() on the returned
-     * object performs the outer sum over the order \e m (about \e N
-     * operations).  This routine may throw a bad_alloc exception in the
-     * CircularEngine constructor.
+     * definition, i.e., ∑<sub>n = 0..N</sub> ∑<sub>m = 0..n</sub>
+     * becomes ∑<sub>m = 0..N</sub> ∑<sub>n = m..N</sub>..
+     * SphericalHarmonic2::Circle performs the inner sum over degree \e n
+     * (which entails about <i>N</i><sup>2</sup> operations).  Calling
+     * CircularEngine::operator()() on the returned object performs the outer
+     * sum over the order \e m (about \e N operations).
      *
      * See SphericalHarmonic::Circle for an example of its use.
      **********************************************************************/
diff --git a/include/GeographicLib/TransverseMercator.hpp b/include/GeographicLib/TransverseMercator.hpp
index cec7a35..7d8876d 100644
--- a/include/GeographicLib/TransverseMercator.hpp
+++ b/include/GeographicLib/TransverseMercator.hpp
@@ -8,24 +8,23 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP)
-#define GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP \
-  "$Id: 94bb078aa13d2d7392cee5498aae7df6e9914e4a $"
+#define GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP 1
 
 #include <GeographicLib/Constants.hpp>
 
-#if !defined(TM_TX_MAXPOW)
+#if !defined(GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER)
 /**
  * The order of the series approximation used in TransverseMercator.
- * TM_TX_MAXPOW can be set to any integer in [4, 8].
+ * GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER can be set to any integer in [4, 8].
  **********************************************************************/
-#define TM_TX_MAXPOW \
-  (GEOGRAPHICLIB_PREC == 1 ? 6 : (GEOGRAPHICLIB_PREC == 0 ? 4 : 8))
+#  define GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER \
+  (GEOGRAPHICLIB_PRECISION == 2 ? 6 : (GEOGRAPHICLIB_PRECISION == 1 ? 4 : 8))
 #endif
 
 namespace GeographicLib {
 
   /**
-   * \brief Transverse Mercator Projection
+   * \brief Transverse Mercator projection
    *
    * This uses Krüger's method which evaluates the projection and its
    * inverse in terms of a series.  See
@@ -37,14 +36,15 @@ namespace GeographicLib {
    *  - C. F. F. Karney,
    *    <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
    *    Transverse Mercator with an accuracy of a few nanometers,</a>
-   *    J. Geodesy 85(8), 475-485 (Aug. 2011);
+   *    J. Geodesy 85(8), 475--485 (Aug. 2011);
    *    preprint
    *    <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.
    *
    * Krüger's method has been extended from 4th to 6th order.  The maximum
    * error is 5 nm (5 nanometers), ground distance, for all positions within 35
-   * degrees of the central meridian.  The error in the convergence is
-   * 2e-15" and the relative error in the scale is 6e-12%%.  See Sec. 4 of
+   * degrees of the central meridian.  The error in the convergence is 2
+   * × 10<sup>−15</sup>" and the relative error in the scale
+   * is 6 − 10<sup>−12</sup>%%.  See Sec. 4 of
    * <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for details.
    * The speed penalty in going to 6th order is only about 1%.
    * TransverseMercatorExact is an alternative implementation of the projection
@@ -76,10 +76,10 @@ namespace GeographicLib {
    * TransverseMercator and TransverseMercatorExact.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT TransverseMercator {
+  class GEOGRAPHICLIB_EXPORT TransverseMercator {
   private:
     typedef Math::real real;
-    static const int maxpow_ = TM_TX_MAXPOW;
+    static const int maxpow_ = GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER;
     static const real tol_;
     static const real overflow_;
     static const int numit_ = 5;
@@ -94,9 +94,12 @@ namespace GeographicLib {
     }
     // Return e * atanh(e * x) for f >= 0, else return
     // - sqrt(-e2) * atan( sqrt(-e2) * x) for f < 0
-    inline real eatanhe(real x) const throw() {
-      return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * std::atan(_e * x);
-    }
+    inline real eatanhe(real x) const throw()
+    { return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * std::atan(_e * x); }
+    real taupf(real tau) const throw();
+    real tauf(real taup) const throw();
+
+    friend class Ellipsoid;           // For access to taupf, tauf.
   public:
 
     /**
@@ -107,9 +110,8 @@ namespace GeographicLib {
      *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
      *   to 1/\e f.
      * @param[in] k0 central scale factor.
-     *
-     * An exception is thrown if either of the axes of the ellipsoid or \e k0
-     * is not positive.
+     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+     *   not positive.
      **********************************************************************/
     TransverseMercator(real a, real f, real k0);
 
@@ -125,7 +127,8 @@ namespace GeographicLib {
      * @param[out] k scale of projection at point.
      *
      * No false easting or northing is added. \e lat should be in the range
-     * [-90, 90]; \e lon and \e lon0 should be in the range [-180, 360].
+     * [−90°, 90°]; \e lon and \e lon0 should be in the
+     * range [−540°, 540°).
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
                  real& x, real& y, real& gamma, real& k) const throw();
@@ -142,7 +145,8 @@ namespace GeographicLib {
      * @param[out] k scale of projection at point.
      *
      * No false easting or northing is added.  \e lon0 should be in the range
-     * [-180, 360].  The value of \e lon returned is in the range [-180, 180).
+     * [−540°, 540°).  The value of \e lon returned is in
+     * the range [−180°, 180°).
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
                  real& lat, real& lon, real& gamma, real& k) const throw();
diff --git a/include/GeographicLib/TransverseMercatorExact.hpp b/include/GeographicLib/TransverseMercatorExact.hpp
index 8f3958c..2db9c41 100644
--- a/include/GeographicLib/TransverseMercatorExact.hpp
+++ b/include/GeographicLib/TransverseMercatorExact.hpp
@@ -8,8 +8,7 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP)
-#define GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP \
-  "$Id: bd96340b9dc3e7bfd09d4374296a75f4c6e00fc3 $"
+#define GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP 1
 
 #include <GeographicLib/Constants.hpp>
 #include <GeographicLib/EllipticFunction.hpp>
@@ -17,7 +16,7 @@
 namespace GeographicLib {
 
   /**
-   * \brief An exact implementation of the Transverse Mercator Projection
+   * \brief An exact implementation of the transverse Mercator projection
    *
    * Implementation of the Transverse Mercator Projection given in
    *  - L. P. Lee,
@@ -31,7 +30,7 @@ namespace GeographicLib {
    *  - C. F. F. Karney,
    *    <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
    *    Transverse Mercator with an accuracy of a few nanometers,</a>
-   *    J. Geodesy 85(8), 475-485 (Aug. 2011);
+   *    J. Geodesy 85(8), 475--485 (Aug. 2011);
    *    preprint
    *    <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>.
    *
@@ -39,8 +38,9 @@ namespace GeographicLib {
    * subject to the branch cut rules (see the description of the \e extendp
    * argument to the constructor).  The maximum error is about 8 nm (8
    * nanometers), ground distance, for the forward and reverse transformations.
-   * The error in the convergence is 2e-15", the relative error in the
-   * scale is 7e-12%%.  See Sec. 3 of
+   * The error in the convergence is 2 × 10<sup>−15</sup>",
+   * the relative error in the scale is 7 × 10<sup>−12</sup>%%.
+   * See Sec. 3 of
    * <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for details.
    * The method is "exact" in the sense that the errors are close to the
    * round-off limit and that no changes are needed in the algorithms for them
@@ -76,7 +76,7 @@ namespace GeographicLib {
    * TransverseMercator and TransverseMercatorExact.
    **********************************************************************/
 
-  class GEOGRAPHIC_EXPORT TransverseMercatorExact {
+  class GEOGRAPHICLIB_EXPORT TransverseMercatorExact {
   private:
     typedef Math::real real;
     static const real tol_;
@@ -85,7 +85,7 @@ namespace GeographicLib {
     static const real taytol_;
     static const real overflow_;
     static const int numit_ = 10;
-    real _a, _f, _k0, _mu, _mv, _e, _ep2;
+    real _a, _f, _k0, _mu, _mv, _e;
     bool _extendp;
     EllipticFunction _Eu, _Ev;
     // tan(x) for x in [-pi/2, pi/2] ensuring that the sign is right
@@ -135,32 +135,36 @@ namespace GeographicLib {
      *   to 1/\e f.
      * @param[in] k0 central scale factor.
      * @param[in] extendp use extended domain.
+     * @exception GeographicErr if \e a, \e f, or \e k0 is not positive.
      *
      * The transverse Mercator projection has a branch point singularity at \e
-     * lat = 0 and \e lon - \e lon0 = 90 (1 - \e e) or (for
+     * lat = 0 and \e lon − \e lon0 = 90 (1 − \e e) or (for
      * TransverseMercatorExact::UTM) x = 18381 km, y = 0m.  The \e extendp
      * argument governs where the branch cut is placed.  With \e extendp =
      * false, the "standard" convention is followed, namely the cut is placed
-     * along x > 18381 km, y = 0m.  Forward can be called with any \e lat and
-     * \e lon then produces the transformation shown in Lee, Fig 46.  Reverse
-     * analytically continues this in the +/- \e x direction.  As a
-     * consequence, Reverse may map multiple points to the same geographic
+     * along \e x > 18381 km, \e y = 0m.  Forward can be called with any \e lat
+     * and \e lon then produces the transformation shown in Lee, Fig 46.
+     * Reverse analytically continues this in the ± \e x direction.  As
+     * a consequence, Reverse may map multiple points to the same geographic
      * location; for example, for TransverseMercatorExact::UTM, \e x =
-     * 22051449.037349 m, \e y = -7131237.022729 m and \e x = 29735142.378357
-     * m, \e y = 4235043.607933 m both map to \e lat = -2 deg, \e lon = 88 deg.
+     * 22051449.037349 m, \e y = −7131237.022729 m and \e x =
+     * 29735142.378357 m, \e y = 4235043.607933 m both map to \e lat =
+     * −2°, \e lon = 88°.
      *
      * With \e extendp = true, the branch cut is moved to the lower left
      * quadrant.  The various symmetries of the transverse Mercator projection
      * can be used to explore the projection on any sheet.  In this mode the
      * domains of \e lat, \e lon, \e x, and \e y are restricted to
      * - the union of
-     *   - \e lat in [0, 90] and \e lon - \e lon0 in [0, 90]
-     *   - \e lat in (-90, 0] and \e lon - \e lon0 in [90 (1 - \e e), 90]
+     *   - \e lat in [0, 90] and \e lon − \e lon0 in [0, 90]
+     *   - \e lat in (-90, 0] and \e lon − \e lon0 in [90 (1 − \e
+           e), 90]
      * - the union of
-     *   - <i>x</i>/(\e k0 \e a) in [0, inf) and
+     *   - <i>x</i>/(\e k0 \e a) in [0, ∞) and
      *     <i>y</i>/(\e k0 \e a) in [0, E(<i>e</i><sup>2</sup>)]
-     *   - <i>x</i>/(\e k0 \e a) in [K(1 - <i>e</i><sup>2</sup>) - E(1 -
-     *     <i>e</i><sup>2</sup>), inf) and <i>y</i>/(\e k0 \e a) in (-inf, 0]
+     *   - <i>x</i>/(\e k0 \e a) in [K(1 − <i>e</i><sup>2</sup>) −
+     *     E(1 − <i>e</i><sup>2</sup>), ∞) and <i>y</i>/(\e k0 \e
+     *     a) in (−∞, 0]
      * .
      * See Sec. 5 of
      * <a href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a> for a full
@@ -169,10 +173,9 @@ namespace GeographicLib {
      * The method will work for all ellipsoids used in terrestrial geodesy.
      * The method cannot be applied directly to the case of a sphere (\e f = 0)
      * because some the constants characterizing this method diverge in that
-     * limit, and in practice, \e f should be larger than about numeric_limits<
-     * real >::%epsilon().  However, TransverseMercator treats the sphere
-     * exactly.  An exception is thrown if either axis of the ellipsoid or \e
-     * k0 is not positive or if \e f <= 0.
+     * limit, and in practice, \e f should be larger than about
+     * numeric_limits<real>::epsilon().  However, TransverseMercator treats the
+     * sphere exactly.
      **********************************************************************/
     TransverseMercatorExact(real a, real f, real k0, bool extendp = false);
 
@@ -188,7 +191,8 @@ namespace GeographicLib {
      * @param[out] k scale of projection at point.
      *
      * No false easting or northing is added. \e lat should be in the range
-     * [-90, 90]; \e lon and \e lon0 should be in the range [-180, 360].
+     * [−90°, 90°]; \e lon and \e lon0 should be in the
+     * range [−540°, 540°).
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
                  real& x, real& y, real& gamma, real& k) const throw();
@@ -205,7 +209,8 @@ namespace GeographicLib {
      * @param[out] k scale of projection at point.
      *
      * No false easting or northing is added.  \e lon0 should be in the range
-     * [-180, 360].  The value of \e lon returned is in the range [-180, 180).
+     * [−540°, 540°).  The value of \e lon returned is in
+     * the range [−180°, 180°).
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
                  real& lat, real& lon, real& gamma, real& k) const throw();
diff --git a/include/GeographicLib/UTMUPS.hpp b/include/GeographicLib/UTMUPS.hpp
index d15e790..512ba5c 100644
--- a/include/GeographicLib/UTMUPS.hpp
+++ b/include/GeographicLib/UTMUPS.hpp
@@ -8,16 +8,14 @@
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_UTMUPS_HPP)
-#define GEOGRAPHICLIB_UTMUPS_HPP \
-  "$Id: a529ed8aeaeffb02994254bbc7eb1209aa41b9ca $"
+#define GEOGRAPHICLIB_UTMUPS_HPP 1
 
-#include <sstream>
 #include <GeographicLib/Constants.hpp>
 
 namespace GeographicLib {
 
   /**
-   * \brief Convert between Geographic coordinates and UTM/UPS
+   * \brief Convert between geographic coordinates and UTM/UPS
    *
    * UTM and UPS are defined
    * - J. W. Hager, J. F. Behensky, and B. W. Drew,
@@ -60,7 +58,7 @@ namespace GeographicLib {
    * Example of use:
    * \include example-UTMUPS.cpp
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT UTMUPS {
+  class GEOGRAPHICLIB_EXPORT UTMUPS {
   private:
     typedef Math::real real;
     static const real falseeasting_[4];
@@ -69,6 +67,12 @@ namespace GeographicLib {
     static const real maxeasting_[4];
     static const real minnorthing_[4];
     static const real maxnorthing_[4];
+    static const int epsg01N = 32601; // EPSG code for UTM 01N
+    static const int epsg60N = 32660; // EPSG code for UTM 60N
+    static const int epsgN   = 32661; // EPSG code for UPS   N
+    static const int epsg01S = 32701; // EPSG code for UTM 01N
+    static const int epsg60S = 32760; // EPSG code for UTM 60S
+    static const int epsgS   = 32761; // EPSG code for UPS   S
     static real CentralMeridian(int zone) throw()
     { return real(6 * zone - 183); }
     static void CheckLatLon(real lat, real lon);
@@ -82,11 +86,12 @@ namespace GeographicLib {
 
     /**
      * In this class we bring together the UTM and UPS coordinates systems.
-     * The UTM divides the earth between latitudes -80 and 84 into 60 zones
-     * numbered 1 thru 60.  Zone assign zone number 0 to the UPS regions,
-     * covering the two poles.  Within UTMUPS, non-negative zone numbers refer
-     * to one of the "physical" zones, 0 for UPS and [1, 60] for UTM.  Negative
-     * "pseudo-zone" numbers are used to select one of the physical zones.
+     * The UTM divides the earth between latitudes −80° and 84°
+     * into 60 zones numbered 1 thru 60.  Zone assign zone number 0 to the UPS
+     * regions, covering the two poles.  Within UTMUPS, non-negative zone
+     * numbers refer to one of the "physical" zones, 0 for UPS and [1, 60] for
+     * UTM.  Negative "pseudo-zone" numbers are used to select one of the
+     * physical zones.
      **********************************************************************/
     enum zonespec {
       /**
@@ -105,17 +110,17 @@ namespace GeographicLib {
       /**
        * Apply the standard rules for UTM zone assigment extending the UTM zone
        * to each pole to give a zone number in [1, 60].  For example, use UTM
-       * zone 38 for longitude in [42, 48).  The rules include the Norway and
-       * Svalbard exceptions.
+       * zone 38 for longitude in [42°, 48°).  The rules include the
+       * Norway and Svalbard exceptions.
        **********************************************************************/
       UTM = -2,
       /**
        * Apply the standard rules for zone assignment to give a zone number in
-       * [0, 60].  If the latitude is not in [-80, 84), then use UTMUPS::UPS =
-       * 0, otherwise apply the rules for UTMUPS::UTM.  The tests on latitudes
-       * and longitudes are all closed on the lower end open on the upper.
-       * Thus for UTM zone 38, latitude is in [-80, 84) and longitude is in
-       * [42, 48).
+       * [0, 60].  If the latitude is not in [−80°, 84°), then
+       * use UTMUPS::UPS = 0, otherwise apply the rules for UTMUPS::UTM.  The
+       * tests on latitudes and longitudes are all closed on the lower end open
+       * on the upper.  Thus for UTM zone 38, latitude is in [−80°,
+       * 84°) and longitude is in [42°, 48°).
        **********************************************************************/
       STANDARD = -1,
       /**
@@ -149,12 +154,14 @@ namespace GeographicLib {
      *
      * @param[in] lat latitude (degrees).
      * @param[in] lon longitude (degrees).
-     * @param[in] setzone zone override (optional).
+     * @param[in] setzone zone override (optional).  If omitted, use the
+     *   standard rules for picking the zone.  If \e setzone is given then use
+     *   that zone if it is non-negative, otherwise apply the rules given in
+     *   UTMUPS::zonespec.
+     * @exception GeographicErr if \e setzone is outside the range
+     *   [UTMUPS::MINPSEUDOZONE, UTMUPS::MAXZONE] = [−4, 60].
      *
-     * This is exact.  If the optional argument \e setzone is given then use
-     * that zone if it is non-negative, otherwise apply the rules given in
-     * UTMUPS::zonespec.  Throws an error if \e setzone is outsize the range
-     * [UTMUPS::MINPSEUDOZONE, UTMUPS::MAXZONE] = [-4, 60].
+     * This is exact.
      **********************************************************************/
     static int StandardZone(real lat, real lon, int setzone = STANDARD);
 
@@ -169,15 +176,35 @@ namespace GeographicLib {
      * @param[out] y northing of point (meters).
      * @param[out] gamma meridian convergence at point (degrees).
      * @param[out] k scale of projection at point.
-     * @param[in] setzone zone override.
+     * @param[in] setzone zone override (optional).
      * @param[in] mgrslimits if true enforce the stricter MGRS limits on the
      *   coordinates (default = false).
+     * @exception GeographicErr if \e lat is not in [−90°,
+     *   90°].
+     * @exception GeographicErr if \e lon is not in [−540°,
+     *   540°).
+     * @exception GeographicErr if the resulting \e x or \e y is out of allowed
+     *   range (see Reverse); in this case, these arguments are unchanged.
      *
-     * The preferred zone for the result can be specified with \e setzone, see
-     * UTMUPS::StandardZone.  Throw error if the resulting easting or northing
-     * is outside the allowed range (see Reverse), in which case the arguments
-     * are unchanged.  This also returns meridian convergence \e gamma
-     * (degrees) and scale \e k.  The accuracy of the conversion is about 5nm.
+     * If \e setzone is omitted, use the standard rules for picking the zone.
+     * If \e setzone is given then use that zone if it is non-negative,
+     * otherwise apply the rules given in UTMUPS::zonespec.  The accuracy of
+     * the conversion is about 5nm.
+     *
+     * The northing \e y jumps by UTMUPS::UTMShift() when crossing the equator
+     * in the southerly direction.  Sometimes it is useful to remove this
+     * discontinuity in \e y by extending the "northern" hemisphere using
+     * UTMUPS::Transfer:
+     * \code
+     double lat = -1, lon = 123;
+     int zone;
+     bool northp;
+     double x, y, gamma, k;
+     GeographicLib::UTMUPS::Forward(lat, lon, zone, northp, x, y, gamma, k);
+     GeographicLib::UTMUPS::Transfer(zone, northp, x, y,
+                                     zone, true,   x, y, zone);
+     northp = true;
+     \endcode
      **********************************************************************/
     static void Forward(real lat, real lon,
                         int& zone, bool& northp, real& x, real& y,
@@ -197,17 +224,17 @@ namespace GeographicLib {
      * @param[out] k scale of projection at point.
      * @param[in] mgrslimits if true enforce the stricter MGRS limits on the
      *   coordinates (default = false).
+     * @exception GeographicErr if \e zone, \e x, or \e y is out of allowed
+     *   range; this this case the arguments are unchanged.
      *
-     * Throw error if easting or northing is outside the allowed range (see
-     * below), in which case the arguments are unchanged.  The accuracy of the
-     * conversion is about 5nm.
+     * The accuracy of the conversion is about 5nm.
      *
      * UTM eastings are allowed to be in the range [0km, 1000km], northings are
      * allowed to be in in [0km, 9600km] for the northern hemisphere and in
-     * [900km, 10000km] for the southern hemisphere.  (However UTM northings
+     * [900km, 10000km] for the southern hemisphere.  However UTM northings
      * can be continued across the equator.  So the actual limits on the
      * northings are [-9100km, 9600km] for the "northern" hemisphere and
-     * [900km, 19600km] for the "southern" hemisphere.)
+     * [900km, 19600km] for the "southern" hemisphere.
      *
      * UPS eastings and northings are allowed to be in the range [1200km,
      * 2800km] in the northern hemisphere and in [700km, 3100km] in the
@@ -245,11 +272,49 @@ namespace GeographicLib {
     }
 
     /**
+     * Transfer UTM/UPS coordinated from one zone to another.
+     *
+     * @param[in] zonein the UTM zone for \e xin and \e yin (or zero for UPS).
+     * @param[in] northpin hemisphere for \e xin and \e yin (true means north,
+     *   false means south).
+     * @param[in] xin easting of point (meters) in \e zonein.
+     * @param[in] yin northing of point (meters) in \e zonein.
+     * @param[in] zoneout the requested UTM zone for \e xout and \e yout (or
+     *   zero for UPS).
+     * @param[in] northpout hemisphere for \e xout output and \e yout.
+     * @param[out] xout easting of point (meters) in \e zoneout.
+     * @param[out] yout northing of point (meters) in \e zoneout.
+     * @param[out] zone the actual UTM zone for \e xout and \e yout (or zero
+     *   for UPS); this equals \e zoneout if \e zoneout ≥ 0.
+     * @exception GeographicErr if \e zonein is out of range (see below).
+     * @exception GeographicErr if \e zoneout is out of range (see below).
+     * @exception GeographicErr if \e xin or \e yin fall outside their allowed
+     *   ranges (see UTMUPS::Reverse).
+     * @exception GeographicErr if \e xout or \e yout fall outside their
+     *   allowed ranges (see UTMUPS::Reverse).
+     *
+     * \e zonein must be in the range [UTMUPS::MINZONE, UTMUPS::MAXZONE] = [0,
+     * 60] with \e zonein = UTMUPS::UPS, 0, indicating UPS.  \e zonein may
+     * also be UTMUPS::INVALID.
+     *
+     * \e zoneout must be in the range [UTMUPS::MINPSEUDOZONE, UTMUPS::MAXZONE]
+     * = [-4, 60].  If \e zoneout < UTMUPS::MINZONE then the rules give in
+     * the documentation of UTMUPS::zonespec are applied, and \e zone is set to
+     * the actual zone used for output.
+     *
+     * (\e xout, \e yout) can overlap with (\e xin, \e yin).
+     **********************************************************************/
+    static void Transfer(int zonein, bool northpin, real xin, real yin,
+                         int zoneout, bool northpout, real& xout, real& yout,
+                         int& zone);
+
+    /**
      * Decode a UTM/UPS zone string.
      *
      * @param[in] zonestr string representation of zone and hemisphere.
      * @param[out] zone the UTM zone (zero means UPS).
      * @param[out] northp hemisphere (true means north, false means south).
+     * @exception GeographicErr if \e zonestr is malformed.
      *
      * For UTM, \e zonestr has the form of a zone number in the range
      * [UTMUPS::MINUTMZONE, UTMUPS::MAXUTMZONE] = [1, 60] followed by a
@@ -258,15 +323,17 @@ namespace GeographicLib {
      * well that "38S" indicates the southern hemisphere of zone 38 and not
      * latitude band S, [32, 40].  N, 01S, 2N, 38S are legal.  0N, 001S, 61N,
      * 38P are illegal.  INV is a special value for which the returned value of
-     * \e is UTMUPS::INVALID.  Throws an error is the zone string is malformed.
+     * \e is UTMUPS::INVALID.
      **********************************************************************/
     static void DecodeZone(const std::string& zonestr, int& zone, bool& northp);
 
     /**
      * Encode a UTM/UPS zone string.
      *
-     * @param[out] zone the UTM zone (zero means UPS).
-     * @param[out] northp hemisphere (true means north, false means south).
+     * @param[in] zone the UTM zone (zero means UPS).
+     * @param[in] northp hemisphere (true means north, false means south).
+     * @exception GeographicErr if \e zone is out of range (see below).
+     * @exception std::bad_alloc if memoy for the string can't be allocated.
      * @return string representation of zone and hemisphere.
      *
      * \e zone must be in the range [UTMUPS::MINZONE, UTMUPS::MAXZONE] = [0,
@@ -278,6 +345,34 @@ namespace GeographicLib {
     static std::string EncodeZone(int zone, bool northp);
 
     /**
+     * Decode EPSG.
+     *
+     * @param[in] epsg the EPSG code.
+     * @param[out] zone the UTM zone (zero means UPS).
+     * @param[out] northp hemisphere (true means north, false means south).
+     *
+     * EPSG (European Petroleum Survery Group) codes are a way to refer to many
+     * different projections.  DecodeEPSG decodes those refering to UTM or UPS
+     * projections for the WGS84 ellipsoid.  If the code does not refer to one
+     * of these projections, \e zone is set to UTMUPS::INVALID.  See
+     * http://spatialreference.org/ref/epsg/
+     **********************************************************************/
+    static void DecodeEPSG(int epsg, int& zone, bool& northp) throw();
+
+    /**
+     * Encode zone as EPSG.
+     *
+     * @param[in] zone the UTM zone (zero means UPS).
+     * @param[in] northp hemisphere (true means north, false means south).
+     * @return EPSG code (or -1 if \e zone is not in the range
+     *   [UTMUPS::MINZONE, UTMUPS::MAXZONE] = [0, 60])
+     *
+     * Convert \e zone and \e northp to the corresponding EPSG (European
+     * Petroleum Survery Group) codes
+     **********************************************************************/
+    static int EncodeEPSG(int zone, bool northp) throw();
+
+    /**
      * @return shift (meters) necessary to align N and S halves of a UTM zone
      * (10<sup>7</sup>).
      **********************************************************************/
diff --git a/include/GeographicLib/Utility.hpp b/include/GeographicLib/Utility.hpp
index f622c2f..dfe3e5e 100644
--- a/include/GeographicLib/Utility.hpp
+++ b/include/GeographicLib/Utility.hpp
@@ -2,23 +2,26 @@
  * \file Utility.hpp
  * \brief Header for GeographicLib::Utility class
  *
- * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2011-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #if !defined(GEOGRAPHICLIB_UTILITY_HPP)
-#define GEOGRAPHICLIB_UTILITY_HPP \
-  "$Id: 92c92fcb8ea92116fed01909c2611934b708e4cd $"
+#define GEOGRAPHICLIB_UTILITY_HPP 1
 
 #include <GeographicLib/Constants.hpp>
 #include <iomanip>
 #include <vector>
-#include <string>
 #include <sstream>
-#include <algorithm>
 #include <cctype>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (push)
+#  pragma warning (disable: 4127)
+#endif
+
 namespace GeographicLib {
 
   /**
@@ -27,7 +30,7 @@ namespace GeographicLib {
    * Example of use:
    * \include example-Utility.cpp
    **********************************************************************/
-  class GEOGRAPHIC_EXPORT Utility {
+  class GEOGRAPHICLIB_EXPORT Utility {
   private:
     static bool gregorian(int y, int m, int d) {
       // The original cut over to the Gregorian calendar in Pope Gregory XIII's
@@ -112,9 +115,8 @@ namespace GeographicLib {
      * @param[in] m the month, Jan = 1, etc. (must be positive).  Default = 1.
      * @param[in] d the day of the month (must be positive).  Default = 1.
      * @param[in] check whether to check the date.
+     * @exception GeographicErr if the date is invalid and \e check is true.
      * @return the sequential day number.
-     *
-     * If \e check is true and the date is invalid an exception is thrown.
      **********************************************************************/
     static int day(int y, int m, int d, bool check) {
       int s = day(y, m, d);
@@ -169,6 +171,7 @@ namespace GeographicLib {
      * @param[out] y the year.
      * @param[out] m the month, Jan = 1, etc.
      * @param[out] d the day of the month.
+     * @exception GeographicErr is \e s is malformed.
      **********************************************************************/
     static void date(const std::string& s, int& y, int& m, int& d) {
       int y1, m1 = 1, d1 = 1;
@@ -207,7 +210,8 @@ namespace GeographicLib {
      * @param[in] y the year (must be positive).
      * @param[in] m the month, Jan = 1, etc. (must be positive).
      * @param[in] d the day of the month (must be positive).
-     * @return the day of the week with Sunday, Monday - Saturday = 0, 1 - 6.
+     * @return the day of the week with Sunday, Monday--Saturday = 0,
+     *   1--6.
      **********************************************************************/
     static int dow(int y, int m, int d) throw() { return dow(day(y, m, d)); }
 
@@ -215,7 +219,8 @@ namespace GeographicLib {
      * Given the sequential day, return the day of the week.
      *
      * @param[in] s the sequential day (must be positive).
-     * @return the day of the week with Sunday, Monday - Saturday = 0, 1 - 6.
+     * @return the day of the week with Sunday, Monday--Saturday = 0,
+     *   1--6.
      **********************************************************************/
     static int dow(int s) throw() {
       return (s + 5) % 7;  // The 5 offset makes day 1 (0001-01-01) a Saturday.
@@ -226,6 +231,7 @@ namespace GeographicLib {
      *
      * @tparam T the type of the argument.
      * @param[in] s the string to be converted.
+     * @exception GeographicErr if \e s can't be interpreted as a date.
      * @return the fractional year.
      *
      * The string is first read as an ordinary number (e.g., 2010 or 2012.5);
@@ -250,10 +256,11 @@ namespace GeographicLib {
      *
      * @tparam T the type of the argument.
      * @param[in] x the value to be converted.
-     * @param[in] p the precision used (default -1).
+     * @param[in] p the precision used (default −1).
+     * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return the string representation.
      *
-     * If \e p >= 0, then the number fixed format is used with p bits of
+     * If \e p ≥ 0, then the number fixed format is used with p bits of
      * precision.  With p < 0, there is no manipulation of the format.
      **********************************************************************/
     template<typename T> static std::string str(T x, int p = -1) {
@@ -270,6 +277,7 @@ namespace GeographicLib {
      *
      * @tparam T the type of the return value.
      * @param[in] s the string to be converted.
+     * @exception GeographicErr is \e s is not readable as a T.
      * @return object of type T
      **********************************************************************/
     template<typename T> static T num(const std::string& s) {
@@ -299,7 +307,8 @@ namespace GeographicLib {
      *
      * @tparam T the type of the return value.
      * @param[in] s the string to be matched.
-     * @return appropriate special value (+/-inf, nan) or 0 is none is found.
+     * @return appropriate special value (±∞, nan) or 0 if none is
+     *   found.
      **********************************************************************/
     template<typename T> static T nummatch(const std::string& s) {
       if (s.length() < 3)
@@ -308,7 +317,7 @@ namespace GeographicLib {
       t.resize(s.length());
       std::transform(s.begin(), s.end(), t.begin(), (int(*)(int))std::toupper);
       for (size_t i = s.length(); i--;)
-        t[i] = std::toupper(s[i]);
+        t[i] = char(std::toupper(s[i]));
       int sign = t[0] == '-' ? -1 : 1;
       std::string::size_type p0 = t[0] == '-' || t[0] == '+' ? 1 : 0;
       std::string::size_type p1 = t.find_last_not_of('0');
@@ -329,6 +338,7 @@ namespace GeographicLib {
      *
      * @tparam T the type of the return value.
      * @param[in] s the string to be converted.
+     * @exception GeographicErr is \e s is not readable as a fraction of type T.
      * @return object of type T
      **********************************************************************/
     template<typename T> static T fract(const std::string& s) {
@@ -345,14 +355,14 @@ namespace GeographicLib {
      *
      * @param[in] s the string to be searched.
      * @param[in] c the character to look for.
-     * @return the index of the first occurrence character in the string or -1
-     *   is the character is not present.
+     * @return the index of the first occurrence character in the string or
+     *   −1 is the character is not present.
      *
      * \e c is converted to upper case before search \e s.  Therefore, it is
      * intended that \e s should not contain any lower case letters.
      **********************************************************************/
     static int lookup(const std::string& s, char c) throw() {
-      std::string::size_type r = s.find(toupper(c));
+      std::string::size_type r = s.find(char(toupper(c)));
       return r == std::string::npos ? -1 : int(r);
     }
 
@@ -367,6 +377,7 @@ namespace GeographicLib {
      *   (external).
      * @param[out] array the output array of type IntT (internal).
      * @param[in] num the size of the array.
+     * @exception GeographicErr if the data cannot be read.
      **********************************************************************/
     template<typename ExtT, typename IntT, bool bigendp>
       static inline void readarray(std::istream& str,
@@ -413,6 +424,7 @@ namespace GeographicLib {
      * @param[in] str the input stream containing the data of type ExtT
      *   (external).
      * @param[out] array the output vector of type IntT (internal).
+     * @exception GeographicErr if the data cannot be read.
      **********************************************************************/
     template<typename ExtT, typename IntT, bool bigendp>
       static inline void readarray(std::istream& str,
@@ -430,6 +442,7 @@ namespace GeographicLib {
      * @param[out] str the output stream for the data of type ExtT (external).
      * @param[in] array the input array of type IntT (internal).
      * @param[in] num the size of the array.
+     * @exception GeographicErr if the data cannot be written.
      **********************************************************************/
     template<typename ExtT, typename IntT, bool bigendp>
       static inline void writearray(std::ostream& str,
@@ -471,6 +484,7 @@ namespace GeographicLib {
      * @tparam bigendp true if the external storage format is big-endian.
      * @param[out] str the output stream for the data of type ExtT (external).
      * @param[in] array the input vector of type IntT (internal).
+     * @exception GeographicErr if the data cannot be written.
      **********************************************************************/
     template<typename ExtT, typename IntT, bool bigendp>
       static inline void writearray(std::ostream& str,
@@ -484,6 +498,8 @@ namespace GeographicLib {
      * @param[in] line the input line.
      * @param[out] key the key.
      * @param[out] val the value.
+     * @exception std::bad_alloc if memory for the internal strings can't be
+     *   allocated.
      * @return whether a key was found.
      *
      * A # character and everything after it are discarded.  If the results is
@@ -498,4 +514,8 @@ namespace GeographicLib {
 
 } // namespace GeographicLib
 
+#if defined(_MSC_VER)
+#  pragma warning (pop)
+#endif
+
 #endif  // GEOGRAPHICLIB_UTILITY_HPP
diff --git a/include/Makefile.am b/include/Makefile.am
index a9e7e49..83988a4 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -2,7 +2,6 @@
 # Makefile.am
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
-# $Id: d1953212c87ff569e24f893ea76ed3a55127eff1 $
 
 nobase_include_HEADERS = GeographicLib/Accumulator.hpp \
 			GeographicLib/AlbersEqualArea.hpp \
@@ -11,11 +10,15 @@ nobase_include_HEADERS = GeographicLib/Accumulator.hpp \
 			GeographicLib/CircularEngine.hpp \
 			GeographicLib/Constants.hpp \
 			GeographicLib/DMS.hpp \
+			GeographicLib/Ellipsoid.hpp \
 			GeographicLib/EllipticFunction.hpp \
 			GeographicLib/GeoCoords.hpp \
 			GeographicLib/Geocentric.hpp \
 			GeographicLib/Geodesic.hpp \
+			GeographicLib/GeodesicExact.hpp \
 			GeographicLib/GeodesicLine.hpp \
+			GeographicLib/GeodesicLineExact.hpp \
+			GeographicLib/Geohash.hpp \
 			GeographicLib/Geoid.hpp \
 			GeographicLib/Gnomonic.hpp \
 			GeographicLib/GravityCircle.hpp \
@@ -40,8 +43,8 @@ nobase_include_HEADERS = GeographicLib/Accumulator.hpp \
 			GeographicLib/Utility.hpp \
 			GeographicLib/Config.h
 
-geoids_dir=$(datadir)/GeographicLib/geoids
+geographiclib_data=$(datadir)/GeographicLib
 
-DEFS=-DGEOID_DEFAULT_PATH=\"$(geoids_dir)\"  @DEFS@
+DEFS=-DGEOGRAPHICLIB_DATA=\"$(geographiclib_data)\" @DEFS@
 
 EXTRA_DIST = Makefile.mk GeographicLib/CMakeLists.txt GeographicLib/Config.h.in
diff --git a/include/Makefile.in b/include/Makefile.in
index 7c1983b..8a926b1 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,9 +18,25 @@
 # Makefile.am
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
-# $Id: d1953212c87ff569e24f893ea76ed3a55127eff1 $
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -57,6 +72,11 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -78,6 +98,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(includedir)"
 HEADERS = $(nobase_include_HEADERS)
 ETAGS = etags
@@ -93,6 +119,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -100,9 +127,10 @@ CXXCPP = @CXXCPP@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DEFS = -DGEOID_DEFAULT_PATH=\"$(geoids_dir)\"  @DEFS@
+DEFS = -DGEOGRAPHICLIB_DATA=\"$(geographiclib_data)\" @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -111,6 +139,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -146,6 +177,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -217,11 +250,15 @@ nobase_include_HEADERS = GeographicLib/Accumulator.hpp \
 			GeographicLib/CircularEngine.hpp \
 			GeographicLib/Constants.hpp \
 			GeographicLib/DMS.hpp \
+			GeographicLib/Ellipsoid.hpp \
 			GeographicLib/EllipticFunction.hpp \
 			GeographicLib/GeoCoords.hpp \
 			GeographicLib/Geocentric.hpp \
 			GeographicLib/Geodesic.hpp \
+			GeographicLib/GeodesicExact.hpp \
 			GeographicLib/GeodesicLine.hpp \
+			GeographicLib/GeodesicLineExact.hpp \
+			GeographicLib/Geohash.hpp \
 			GeographicLib/Geoid.hpp \
 			GeographicLib/Gnomonic.hpp \
 			GeographicLib/GravityCircle.hpp \
@@ -246,7 +283,7 @@ nobase_include_HEADERS = GeographicLib/Accumulator.hpp \
 			GeographicLib/Utility.hpp \
 			GeographicLib/Config.h
 
-geoids_dir = $(datadir)/GeographicLib/geoids
+geographiclib_data = $(datadir)/GeographicLib
 EXTRA_DIST = Makefile.mk GeographicLib/CMakeLists.txt GeographicLib/Config.h.in
 all: all-am
 
@@ -289,15 +326,18 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-nobase_includeHEADERS: $(nobase_include_HEADERS)
 	@$(NORMAL_INSTALL)
-	test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
 	@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+	fi; \
 	$(am__nobase_list) | while read dir files; do \
 	  xfiles=; for file in $$files; do \
 	    if test -f "$$file"; then xfiles="$$xfiles $$file"; \
 	    else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
 	  test -z "$$xfiles" || { \
 	    test "x$$dir" = x. || { \
-	      echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \
+	      echo " $(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \
 	      $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \
 	    echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \
 	    $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \
@@ -307,9 +347,7 @@ uninstall-nobase_includeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
 	$(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(includedir)" && rm -f $$files
+	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -360,6 +398,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -410,10 +462,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -494,7 +551,7 @@ uninstall-am: uninstall-nobase_includeHEADERS
 .MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool ctags distclean distclean-generic \
+	clean-libtool cscopelist ctags distclean distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-data \
 	install-data-am install-dvi install-dvi-am install-exec \
diff --git a/include/Makefile.mk b/include/Makefile.mk
index 6f55ece..fbb9036 100644
--- a/include/Makefile.mk
+++ b/include/Makefile.mk
@@ -1,15 +1,17 @@
-# $Id: 197ef293b5d7f1c3e139caf577ba5d9798721826 $
-
 MODULES = AlbersEqualArea \
 	AzimuthalEquidistant \
 	CassiniSoldner \
 	CircularEngine \
 	DMS \
+	Ellipsoid \
 	EllipticFunction \
 	GeoCoords \
 	Geocentric \
 	Geodesic \
+	GeodesicExact \
 	GeodesicLine \
+	GeodesicLineExact \
+	Geohash \
 	Geoid \
 	Gnomonic \
 	GravityCircle \
diff --git a/install-sh b/install-sh
index 6781b98..377bb86 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-11-20.07; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,7 +35,7 @@ scriptversion=2009-04-28.21; # UTC
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
+# 'make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
@@ -156,6 +156,10 @@ while test $# -ne 0; do
     -s) stripcmd=$stripprog;;
 
     -t) dst_arg=$2
+	# Protect names problematic for 'test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
 	shift;;
 
     -T) no_target_directory=true;;
@@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     fi
     shift # arg
     dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
   done
 fi
 
@@ -194,13 +202,17 @@ if test $# -eq 0; then
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call `install-sh -d' without argument.
+  # It's OK to call 'install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
 if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
 
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
@@ -228,9 +240,9 @@ fi
 
 for src
 do
-  # Protect names starting with `-'.
+  # Protect names problematic for 'test' and other utilities.
   case $src in
-    -*) src=./$src;;
+    -* | [=\(\)!]) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -252,12 +264,7 @@ do
       echo "$0: no destination specified." >&2
       exit 1
     fi
-
     dst=$dst_arg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst;;
-    esac
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
@@ -347,7 +354,7 @@ do
 	      if test -z "$dir_arg" || {
 		   # Check for POSIX incompatibilities with -m.
 		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-		   # other-writeable bit of parent directory when it shouldn't.
+		   # other-writable bit of parent directory when it shouldn't.
 		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
 		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
 		   case $ls_ld_tmpdir in
@@ -385,7 +392,7 @@ do
 
       case $dstdir in
 	/*) prefix='/';;
-	-*) prefix='./';;
+	[-=\(\)!]*) prefix='./';;
 	*)  prefix='';;
       esac
 
@@ -403,7 +410,7 @@ do
 
       for d
       do
-	test -z "$d" && continue
+	test X"$d" = X && continue
 
 	prefix=$prefix$d
 	if test -d "$prefix"; then
diff --git a/java/README.txt b/java/README.txt
new file mode 100644
index 0000000..f58b008
--- /dev/null
+++ b/java/README.txt
@@ -0,0 +1,21 @@
+This is a Java implementation of the geodesic algorithms described in
+
+  C. F. F. Karney,
+  Algorithms for geodesics,
+  J. Geodesy 87, 43-55 (2013);
+  http://dx.doi.org/10.1007/s00190-012-0578-z
+  Addenda: http://geographiclib.sf.net/geod-addenda.html
+
+For documentation, see
+
+  http://geographiclib.sourceforge.net/html/java/
+
+The code in this directory is entirely self-contained.  In particular,
+it does not depend on the C++ classes.  You can build the example
+programs using, for example,
+
+  cd inverse/src/main/java
+  javac -cp .:../../../../src/main/java Inverse.java
+  echo -30 0 29.5 179.5 | java -cp .:../../../../src/main/java Inverse
+
+Building with maven is also supported (see the documentation).
diff --git a/java/direct/pom.xml b/java/direct/pom.xml
new file mode 100644
index 0000000..0fd9053
--- /dev/null
+++ b/java/direct/pom.xml
@@ -0,0 +1,87 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>net.sf.geographiclib.example</groupId>
+    <artifactId>Direct</artifactId>
+    <name>Direct</name>
+    <version>1.31</version>
+
+    <packaging>jar</packaging>
+
+    <properties>
+        <basedir>.</basedir>
+        <java.version>1.6</java.version>
+        <surefire-plugin.version>2.9</surefire-plugin.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven-compiler-plugin.version>2.3.2</maven-compiler-plugin.version>
+        <maven-project-info-reports.version>2.4</maven-project-info-reports.version>
+        <maven-javadoc.version>2.8</maven-javadoc.version>
+        <maven-site.version>3.0</maven-site.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>net.sf.geographiclib</groupId>
+            <artifactId>GeographicLib</artifactId>
+            <version>1.31</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>${surefire-plugin.version}</version>
+                <configuration>
+                    <skipTests>false</skipTests>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>${maven-javadoc.version}</version>
+                <configuration>
+                    <show>public</show>
+                    <nohelp>true</nohelp>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <configuration>
+                    <mainClass>Direct</mainClass>
+                    <arguments>
+                    </arguments>
+                </configuration>
+            </plugin>
+        </plugins>
+
+    </build>
+
+</project>
diff --git a/java/direct/src/main/java/Direct.java b/java/direct/src/main/java/Direct.java
new file mode 100644
index 0000000..a09968c
--- /dev/null
+++ b/java/direct/src/main/java/Direct.java
@@ -0,0 +1,27 @@
+/**
+ * A test program for the GeographicLib.Geodesic.Direct method
+ **********************************************************************/
+
+import java.util.*;
+import net.sf.geographiclib.*;
+public class Direct {
+/**
+ * Solve the direct geodesic problem.
+ *
+ * This program reads in lines with lat1, lon1, azi1, s12 and prints out lines
+ * with lat2, lon2, azi2 (for the WGS84 ellipsoid).
+ **********************************************************************/
+  public static void main(String[] args) {
+    try {
+      Scanner in = new Scanner(System.in);
+      double lat1, lon1, azi1, s12;
+      while (true) {
+        lat1 = in.nextDouble(); lon1 = in.nextDouble();
+        azi1 = in.nextDouble(); s12 = in.nextDouble();
+        GeodesicData g = Geodesic.WGS84.Direct(lat1, lon1, azi1, s12);
+        System.out.println(g.lat2 + " " + g.lon2 + " " + g.azi2);
+      }
+    }
+    catch (Exception e) {}
+  }
+}
diff --git a/java/inverse/pom.xml b/java/inverse/pom.xml
new file mode 100644
index 0000000..a6e025c
--- /dev/null
+++ b/java/inverse/pom.xml
@@ -0,0 +1,87 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>net.sf.geographiclib.example</groupId>
+    <artifactId>Inverse</artifactId>
+    <name>Inverse</name>
+    <version>1.31</version>
+
+    <packaging>jar</packaging>
+
+    <properties>
+        <basedir>.</basedir>
+        <java.version>1.6</java.version>
+        <surefire-plugin.version>2.9</surefire-plugin.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven-compiler-plugin.version>2.3.2</maven-compiler-plugin.version>
+        <maven-project-info-reports.version>2.4</maven-project-info-reports.version>
+        <maven-javadoc.version>2.8</maven-javadoc.version>
+        <maven-site.version>3.0</maven-site.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>net.sf.geographiclib</groupId>
+            <artifactId>GeographicLib</artifactId>
+            <version>1.31</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>${surefire-plugin.version}</version>
+                <configuration>
+                    <skipTests>false</skipTests>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>${maven-javadoc.version}</version>
+                <configuration>
+                    <show>public</show>
+                    <nohelp>true</nohelp>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <configuration>
+                    <mainClass>Inverse</mainClass>
+                    <arguments>
+                    </arguments>
+                </configuration>
+            </plugin>
+        </plugins>
+
+    </build>
+
+</project>
diff --git a/java/inverse/src/main/java/Inverse.java b/java/inverse/src/main/java/Inverse.java
new file mode 100644
index 0000000..b40580c
--- /dev/null
+++ b/java/inverse/src/main/java/Inverse.java
@@ -0,0 +1,27 @@
+/**
+ * A test program for the GeographicLib.Geodesic.Inverse method
+ **********************************************************************/
+
+import java.util.*;
+import net.sf.geographiclib.*;
+/**
+ * Solve the inverse geodesic problem.
+ *
+ * This program reads in lines with lat1, lon1, lat2, lon2 and prints out lines
+ * with azi1, azi2, s12 (for the WGS84 ellipsoid).
+ **********************************************************************/
+public class Inverse {
+  public static void main(String[] args) {
+    try {
+      Scanner in = new Scanner(System.in);
+      double lat1, lon1, lat2, lon2;
+      while (true) {
+        lat1 = in.nextDouble(); lon1 = in.nextDouble();
+        lat2 = in.nextDouble(); lon2 = in.nextDouble();
+        GeodesicData g = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2);
+        System.out.println(g.azi1 + " " + g.azi2 + " " + g.s12);
+      }
+    }
+    catch (Exception e) {}
+  }
+}
diff --git a/java/planimeter/pom.xml b/java/planimeter/pom.xml
new file mode 100644
index 0000000..fe50ea2
--- /dev/null
+++ b/java/planimeter/pom.xml
@@ -0,0 +1,87 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>net.sf.geographiclib.example</groupId>
+    <artifactId>Planimeter</artifactId>
+    <name>Planimeter</name>
+    <version>1.31</version>
+
+    <packaging>jar</packaging>
+
+    <properties>
+        <basedir>.</basedir>
+        <java.version>1.6</java.version>
+        <surefire-plugin.version>2.9</surefire-plugin.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven-compiler-plugin.version>2.3.2</maven-compiler-plugin.version>
+        <maven-project-info-reports.version>2.4</maven-project-info-reports.version>
+        <maven-javadoc.version>2.8</maven-javadoc.version>
+        <maven-site.version>3.0</maven-site.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>net.sf.geographiclib</groupId>
+            <artifactId>GeographicLib</artifactId>
+            <version>1.31</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>${surefire-plugin.version}</version>
+                <configuration>
+                    <skipTests>false</skipTests>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>${maven-javadoc.version}</version>
+                <configuration>
+                    <show>public</show>
+                    <nohelp>true</nohelp>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.2.1</version>
+                <configuration>
+                    <mainClass>Planimeter</mainClass>
+                    <arguments>
+                    </arguments>
+                </configuration>
+            </plugin>
+        </plugins>
+
+    </build>
+
+</project>
diff --git a/java/planimeter/src/main/java/Planimeter.java b/java/planimeter/src/main/java/Planimeter.java
new file mode 100644
index 0000000..5bf0aaf
--- /dev/null
+++ b/java/planimeter/src/main/java/Planimeter.java
@@ -0,0 +1,28 @@
+/**
+ * A test program for the GeographicLib.PolygonArea class
+ **********************************************************************/
+
+import java.util.*;
+import net.sf.geographiclib.*;
+/**
+ * Compute the area of a geodesic polygon.
+ *
+ * This program reads lines with lat, lon for each vertex of a polygon.  At the
+ * end of input, the program prints the number of vertices, the perimeter of
+ * the polygon and its area (for the WGS84 ellipsoid).
+ **********************************************************************/
+public class Planimeter {
+  public static void main(String[] args) {
+    PolygonArea p = new PolygonArea(Geodesic.WGS84, false);
+    try {
+      Scanner in = new Scanner(System.in);
+      while (true) {
+        double lat = in.nextDouble(), lon = in.nextDouble();
+        p.AddPoint(lat, lon);
+      }
+    }
+    catch (Exception e) {}
+    PolygonResult r = p.Compute();
+    System.out.println(r.num + " " + r.perimeter + " " + r.area);
+  }
+}
diff --git a/java/pom.xml b/java/pom.xml
new file mode 100644
index 0000000..e6af2e0
--- /dev/null
+++ b/java/pom.xml
@@ -0,0 +1,90 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>net.sf.geographiclib</groupId>
+    <artifactId>GeographicLib</artifactId>
+    <name>GeographicLib</name>
+    <version>1.31</version>
+
+    <packaging>jar</packaging>
+
+    <description>This is a Java implementation of the geodesic algorithms from GeographicLib. This is a self-contained library which makes it easy to do geodesic computations for an ellipsoid of revolution in a Java program. It requires Java version 1.1 or later.
+    </description>
+
+    <properties>
+        <basedir>.</basedir>
+        <java.version>1.6</java.version>
+        <surefire-plugin.version>2.9</surefire-plugin.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven-compiler-plugin.version>2.3.2</maven-compiler-plugin.version>
+        <maven-project-info-reports.version>2.4</maven-project-info-reports.version>
+        <maven-javadoc.version>2.8</maven-javadoc.version>
+        <maven-site.version>3.0</maven-site.version>
+    </properties>
+
+    <dependencies>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>${surefire-plugin.version}</version>
+                <configuration>
+                    <skipTests>false</skipTests>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>${maven-javadoc.version}</version>
+                <configuration>
+                    <show>public</show>
+                    <nohelp>true</nohelp>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+
+    </build>
+
+    <distributionManagement>
+    </distributionManagement>
+
+    <scm>
+        <connection>
+            scm:git:http://
+        </connection>
+        <developerConnection>
+            scm:git:https://
+        </developerConnection>
+        <tag>devel</tag>
+        <url>
+            http://
+        </url>
+    </scm>
+
+</project>
diff --git a/java/src/main/java/net/sf/geographiclib/Accumulator.java b/java/src/main/java/net/sf/geographiclib/Accumulator.java
new file mode 100644
index 0000000..bcba4b7
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/Accumulator.java
@@ -0,0 +1,113 @@
+/**
+ * Implementation of the net.sf.geographiclib.Accumulator class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * An accumulator for sums.
+ * <p>
+ * This allow many double precision numbers to be added together with twice the
+ * normal precision.  Thus the effective precision of the sum is 106 bits or
+ * about 32 decimal places.
+ * <p>
+ * The implementation follows J. R. Shewchuk,
+ * <a href="http://dx.doi.org/10.1007/PL00009321"> Adaptive Precision
+ * Floating-Point Arithmetic and Fast Robust Geometric Predicates</a>,
+ * Discrete & Computational Geometry 18(3) 305–363 (1997).
+ * <p>
+ * In the documentation of the member functions, <i>sum</i> stands for the value
+ * currently held in the accumulator.
+ ***********************************************************************/
+public  class Accumulator {
+  // _s + _t accumulators for the sum.
+  private double _s, _t;
+  /**
+   * Construct from a double.
+   * <p>
+   * @param y set <i>sum</i> = <i>y</i>.
+   **********************************************************************/
+  public Accumulator(double y) { _s = y; _t = 0; }
+  /**
+   * Construct from another Accumulator.
+   * <p>
+   * @param a set <i>sum</i> = <i>a</i>.
+   **********************************************************************/
+  public Accumulator(Accumulator a) { _s = a._s; _t = a._t; }
+  /**
+   * Set the value to a double.
+   * <p>
+   * @param y set <i>sum</i> = <i>y</i>.
+   **********************************************************************/
+  public void Set(double y) { _s = y; _t = 0; }
+  /**
+   * Return the value held in the accumulator.
+   * <p>
+   * @return <i>sum</i>.
+   **********************************************************************/
+  public double Sum() { return _s; }
+  /**
+   * Return the result of adding a number to <i>sum</i> (but don't change
+   * <i>sum</i>).
+   * <p>
+   * @param y the number to be added to the sum.
+   * @return <i>sum</i> + <i>y</i>.
+   **********************************************************************/
+  public double Sum(double y) {
+    Accumulator a = new Accumulator(this);
+    a.Add(y);
+    return a._s;
+  }
+  /**
+   * Add a number to the accumulator.
+   * <p>
+   * @param y set <i>sum</i> += <i>y</i>.
+   **********************************************************************/
+  public void Add(double y) {
+    // Here's Shewchuk's solution...
+    double u;                       // hold exact sum as [s, t, u]
+    // Accumulate starting at least significant end
+    { Pair r = GeoMath.sum(y, _t); y = r.first; u = r.second; }
+    { Pair r = GeoMath.sum(y, _s); _s = r.first; _t = r.second; }
+    // Start is _s, _t decreasing and non-adjacent.  Sum is now (s + t + u)
+    // exactly with s, t, u non-adjacent and in decreasing order (except for
+    // possible zeros).  The following code tries to normalize the result.
+    // Ideally, we want _s = round(s+t+u) and _u = round(s+t+u - _s).  The
+    // following does an approximate job (and maintains the decreasing
+    // non-adjacent property).  Here are two "failures" using 3-bit floats:
+    //
+    // Case 1: _s is not equal to round(s+t+u) -- off by 1 ulp
+    // [12, -1] - 8 -> [4, 0, -1] -> [4, -1] = 3 should be [3, 0] = 3
+    //
+    // Case 2: _s+_t is not as close to s+t+u as it shold be
+    // [64, 5] + 4 -> [64, 8, 1] -> [64,  8] = 72 (off by 1)
+    //                    should be [80, -7] = 73 (exact)
+    //
+    // "Fixing" these problems is probably not worth the expense.  The
+    // representation inevitably leads to small errors in the accumulated
+    // values.  The additional errors illustrated here amount to 1 ulp of the
+    // less significant word during each addition to the Accumulator and an
+    // additional possible error of 1 ulp in the reported sum.
+    //
+    // Incidentally, the "ideal" representation described above is not
+    // canonical, because _s = round(_s + _t) may not be true.  For example,
+    // with 3-bit floats:
+    //
+    // [128, 16] + 1 -> [160, -16] -- 160 = round(145).
+    // But [160, 0] - 16 -> [128, 16] -- 128 = round(144).
+    //
+    if (_s == 0)              // This implies t == 0,
+      _s = u;                 // so result is u
+    else
+      _t += u;                // otherwise just accumulate u to t.
+  }
+  /**
+   * Negate an accumulator.
+   * <p>
+   * Set <i>sum</i> = −<i>sum</i>.
+   **********************************************************************/
+  public void Negate() { _s = -_s; _t = -_t; }
+}
diff --git a/java/src/main/java/net/sf/geographiclib/Constants.java b/java/src/main/java/net/sf/geographiclib/Constants.java
new file mode 100644
index 0000000..0476678
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/Constants.java
@@ -0,0 +1,26 @@
+/**
+ * Implementation of the net.sf.geographiclib.Constants class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * Constants needed by GeographicLib.
+ * <p>
+ * Define constants specifying the WGS84 ellipsoid.
+ ***********************************************************************/
+public class Constants {
+  /**
+   * The equatorial radius of WGS84 ellipsoid (6378137 m).
+   **********************************************************************/
+  public static final double WGS84_a = 6378137;
+  /**
+   * The flattening of WGS84 ellipsoid (1/298.257223563).
+   **********************************************************************/
+  public static final double WGS84_f = 1/298.257223563;
+
+  private Constants() {}
+}
diff --git a/java/src/main/java/net/sf/geographiclib/GeoMath.java b/java/src/main/java/net/sf/geographiclib/GeoMath.java
new file mode 100644
index 0000000..80631eb
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/GeoMath.java
@@ -0,0 +1,191 @@
+/**
+ * Implementation of the net.sf.geographiclib.GeoMath class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * Mathematical functions needed by GeographicLib.
+ * <p>
+ * Define mathematical functions and constants so that any version of Java
+ * can be used.
+ **********************************************************************/
+public class GeoMath {
+  /**
+   * The number of binary digits in the fraction of a double precision
+   * number (equivalent to C++'s {@code numeric_limits<double>::digits}).
+   **********************************************************************/
+  public static final int digits = 53;
+  /**
+   * Equivalent to C++'s {@code numeric_limits<double>::epsilon()}.  In Java
+   * version 1.5 and later, Math.ulp(1.0) can be used.
+   **********************************************************************/
+  public static final double epsilon = Math.pow(0.5, digits - 1);
+  /**
+   * Equivalent to C++'s {@code numeric_limits<double>::min()}.  In Java
+   * version 1.6 and later, Double.MIN_NORMAL can be used.
+   **********************************************************************/
+  public static final double min = Math.pow(0.5, 1022);
+  /**
+   * The number of radians in a degree.  In Java version 1.2 and later,
+   * Math.toRadians and Math.toDegrees can be used.
+   **********************************************************************/
+  public static final double degree = Math.PI / 180;
+
+  /**
+   * Square a number.
+   * <p>
+   * @param x the argument.
+   * @return <i>x</i><sup>2</sup>.
+   **********************************************************************/
+  public static double sq(double x) { return x * x; }
+
+  /**
+   * The hypotenuse function avoiding underflow and overflow.  In Java version
+   * 1.5 and later, Math.hypot can be used.
+   * <p>
+   * @param x the first argument.
+   * @param y the second argument.
+   * @return sqrt(<i>x</i><sup>2</sup> + <i>y</i><sup>2</sup>).
+   **********************************************************************/
+  public static double hypot(double x, double y) {
+    x = Math.abs(x); y = Math.abs(y);
+    double a = Math.max(x, y), b = Math.min(x, y) / (a != 0 ? a : 1);
+    return a * Math.sqrt(1 + b * b);
+    // For an alternative method see
+    // C. Moler and D. Morrision (1983) http://dx.doi.org/10.1147/rd.276.0577
+    // and A. A. Dubrulle (1983) http://dx.doi.org/10.1147/rd.276.0582
+  }
+
+  /**
+   * log(1 + <i>x</i>) accurate near <i>x</i> = 0.  In Java version 1.5 and
+   * later, Math.log1p can be used.
+   * <p>
+   * This is taken from D. Goldberg,
+   * <a href="http://dx.doi.org/10.1145/103162.103163">What every computer
+   * scientist should know about floating-point arithmetic</a> (1991),
+   * Theorem 4.  See also, N. J. Higham, Accuracy and Stability of Numerical
+   * Algorithms, 2nd Edition (SIAM, 2002), Answer to Problem 1.5, p 528.
+   * <p>
+   * @param x the argument.
+   * @return log(1 + <i>x</i>).
+   **********************************************************************/
+  public static double log1p(double x) {
+    double
+      y = 1 + x,
+      z = y - 1;
+    // Here's the explanation for this magic: y = 1 + z, exactly, and z
+    // approx x, thus log(y)/z (which is nearly constant near z = 0) returns
+    // a good approximation to the true log(1 + x)/x.  The multiplication x *
+    // (log(y)/z) introduces little additional error.
+    return z == 0 ? x : x * Math.log(y) / z;
+  }
+
+  /**
+   * The inverse hyperbolic tangent function.  This is defined in terms of
+   * GeoMath.log1p(<i>x</i>) in order to maintain accuracy near <i>x</i> = 0.
+   * In addition, the odd parity of the function is enforced.
+   * <p>
+   * @param x the argument.
+   * @return atanh(<i>x</i>).
+   **********************************************************************/
+  public static double atanh(double x)  {
+    double y = Math.abs(x);     // Enforce odd parity
+    y = Math.log1p(2 * y/(1 - y))/2;
+    return x < 0 ? -y : y;
+  }
+
+  /**
+   * The cube root function.  In Java version 1.5 and later, Math.cbrt can be
+   * used.
+   * <p>
+   * @param x the argument.
+   * @return the real cube root of <i>x</i>.
+   **********************************************************************/
+  public static double cbrt(double x) {
+    double y = Math.pow(Math.abs(x), 1/3.0); // Return the real cube root
+    return x < 0 ? -y : y;
+  }
+
+  /**
+   * The error-free sum of two numbers.
+   * <p>
+   * @param u the first number in the sum.
+   * @param v the second number in the sum.
+   * @return Pair(<i>s</i>, <i>t</i>) with <i>s</i> = round(<i>u</i> +
+   *   <i>v</i>) and <i>t</i> = <i>u</i> + <i>v</i> - <i>s</i>.
+   * <p>
+   * See D. E. Knuth, TAOCP, Vol 2, 4.2.2, Theorem B.
+   **********************************************************************/
+  public static Pair sum(double u, double v) {
+    double s = u + v;
+    double up = s - v;
+    double vpp = s - up;
+    up -= u;
+    vpp -= v;
+    double t = -(up + vpp);
+    // u + v =       s      + t
+    //       = round(u + v) + t
+    return new Pair(s, t);
+  }
+
+  /**
+   * Normalize an angle (restricted input range).
+   * <p>
+   * @param x the angle in degrees.
+   * @return the angle reduced to the range [−180°, 180°).
+   * <p>
+   * <i>x</i> must lie in [−540°, 540°).
+   **********************************************************************/
+  public static double AngNormalize(double x)
+  { return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x); }
+
+  /**
+   * Normalize an arbitrary angle.
+   * <p>
+   * @param x the angle in degrees.
+   * @return the angle reduced to the range [−180°, 180°).
+   * <p>
+   * The range of <i>x</i> is unrestricted.
+   **********************************************************************/
+  public static double AngNormalize2(double x)
+  { return AngNormalize(x % 360.0); }
+
+  /**
+   * Difference of two angles reduced to [−180°, 180°]
+   * <p>
+   * @param x the first angle in degrees.
+   * @param y the second angle in degrees.
+   * @return <i>y</i> − <i>x</i>, reduced to the range [−180°,
+   *   180°].
+   * <p>
+   * <i>x</i> and <i>y</i> must both lie in [−180°, 180°].  The
+   * result is equivalent to computing the difference exactly, reducing it to
+   * (−180°, 180°] and rounding the result.  Note that this
+   * prescription allows −180° to be returned (e.g., if <i>x</i> is
+   * tiny and negative and <i>y</i> = 180°).
+   **********************************************************************/
+  public static double AngDiff(double x, double y) {
+    double d, t;
+    { Pair r = sum(-x, y); d = r.first; t = r.second; }
+    if ((d - 180.0) + t > 0.0) // y - x > 180
+      d -= 360.0;            // exact
+    else if ((d + 180.0) + t <= 0.0) // y - x <= -180
+      d += 360.0;            // exact
+    return d + t;
+  }
+  /**
+   * Test for finiteness.
+   * <p>
+   * @param x the argument.
+   * @return true if number is finite, false if NaN or infinite.
+   **********************************************************************/
+  public static boolean isfinite(double x) {
+    return Math.abs(x) <= Double.MAX_VALUE;
+  }
+
+  private GeoMath() {}
+}
diff --git a/java/src/main/java/net/sf/geographiclib/Geodesic.java b/java/src/main/java/net/sf/geographiclib/Geodesic.java
new file mode 100644
index 0000000..4fe5a96
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/Geodesic.java
@@ -0,0 +1,1563 @@
+/**
+ * Implementation of the net.sf.geographiclib.Geodesic class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * Geodesic calculations.
+ * <p>
+ * The shortest path between two points on a ellipsoid at (<i>lat1</i>,
+ * <i>lon1</i>) and (<i>lat2</i>, <i>lon2</i>) is called the geodesic.  Its
+ * length is <i>s12</i> and the geodesic from point 1 to point 2 has azimuths
+ * <i>azi1</i> and <i>azi2</i> at the two end points.  (The azimuth is the
+ * heading measured clockwise from north.  <i>azi2</i> is the "forward"
+ * azimuth, i.e., the heading that takes you beyond point 2 not back to point
+ * 1.)
+ * <p>
+ * Given <i>lat1</i>, <i>lon1</i>, <i>azi1</i>, and <i>s12</i>, we can
+ * determine <i>lat2</i>, <i>lon2</i>, and <i>azi2</i>.  This is the
+ * <i>direct</i> geodesic problem and its solution is given by the function
+ * {@link #Direct Direct}.  (If <i>s12</i> is sufficiently large that the
+ * geodesic wraps more than halfway around the earth, there will be another
+ * geodesic between the points with a smaller <i>s12</i>.)
+ * <p>
+ * Given <i>lat1</i>, <i>lon1</i>, <i>lat2</i>, and <i>lon2</i>, we can
+ * determine <i>azi1</i>, <i>azi2</i>, and <i>s12</i>.  This is the
+ * <i>inverse</i> geodesic problem, whose solution is given by {@link #Inverse
+ * Inverse}.  Usually, the solution to the inverse problem is unique.  In cases
+ * where there are multiple solutions (all with the same <i>s12</i>, of
+ * course), all the solutions can be easily generated once a particular
+ * solution is provided.
+ * <p>
+ * The standard way of specifying the direct problem is the specify the
+ * distance <i>s12</i> to the second point.  However it is sometimes useful
+ * instead to specify the arc length <i>a12</i> (in degrees) on the auxiliary
+ * sphere.  This is a mathematical construct used in solving the geodesic
+ * problems.  The solution of the direct problem in this form is provided by
+ * {@link #ArcDirect ArcDirect}.  An arc length in excess of 180° indicates
+ * that the geodesic is not a shortest path.  In addition, the arc length
+ * between an equatorial crossing and the next extremum of latitude for a
+ * geodesic is 90°.
+ * <p>
+ * This class can also calculate several other quantities related to
+ * geodesics.  These are:
+ * <ul>
+ * <li>
+ *   <i>reduced length</i>.  If we fix the first point and increase
+ *   <i>azi1</i> by <i>dazi1</i> (radians), the second point is displaced
+ *   <i>m12</i> <i>dazi1</i> in the direction <i>azi2</i> + 90°.  The
+ *   quantity <i>m12</i> is called the "reduced length" and is symmetric under
+ *   interchange of the two points.  On a curved surface the reduced length
+ *   obeys a symmetry relation, <i>m12</i> + <i>m21</i> = 0.  On a flat
+ *   surface, we have <i>m12</i> = <i>s12</i>.  The ratio <i>s12</i>/<i>m12</i>
+ *   gives the azimuthal scale for an azimuthal equidistant projection.
+ * <li>
+ *   <i>geodesic scale</i>.  Consider a reference geodesic and a second
+ *   geodesic parallel to this one at point 1 and separated by a small distance
+ *   <i>dt</i>.  The separation of the two geodesics at point 2 is <i>M12</i>
+ *   <i>dt</i> where <i>M12</i> is called the "geodesic scale".  <i>M21</i> is
+ *   defined similarly (with the geodesics being parallel at point 2).  On a
+ *   flat surface, we have <i>M12</i> = <i>M21</i> = 1.  The quantity
+ *   1/<i>M12</i> gives the scale of the Cassini-Soldner projection.
+ * <li>
+ *   <i>area</i>.  The area between the geodesic from point 1 to point 2 and
+ *   the equation is represented by <i>S12</i>; it is the area, measured
+ *   counter-clockwise, of the geodesic quadrilateral with corners
+ *   (<i>lat1</i>,<i>lon1</i>), (0,<i>lon1</i>), (0,<i>lon2</i>), and
+ *   (<i>lat2</i>,<i>lon2</i>).  It can be used to compute the area of any
+ *   simple geodesic polygon.
+ * </ul>
+ * <p>
+ * The quantities <i>m12</i>, <i>M12</i>, <i>M21</i> which all specify the
+ * behavior of nearby geodesics obey addition rules.  If points 1, 2, and 3 all
+ * lie on a single geodesic, then the following rules hold:
+ * <ul>
+ * <li>
+ *   <i>s13</i> = <i>s12</i> + <i>s23</i>
+ * <li>
+ *   <i>a13</i> = <i>a12</i> + <i>a23</i>
+ * <li>
+ *   <i>S13</i> = <i>S12</i> + <i>S23</i>
+ * <li>
+ *   <i>m13</i> = <i>m12</i> <i>M23</i> + <i>m23</i> <i>M21</i>
+ * <li>
+ *   <i>M13</i> = <i>M12</i> <i>M23</i> − (1 − <i>M12</i>
+ *   <i>M21</i>) <i>m23</i> / <i>m12</i>
+ * <li>
+ *   <i>M31</i> = <i>M32</i> <i>M21</i> − (1 − <i>M23</i>
+ *   <i>M32</i>) <i>m12</i> / <i>m23</i>
+ * </ul>
+ * <p>
+ * The results of the geodesic calculations are bundled up into a {@link
+ * GeodesicData} object which includes the input parameters and all the
+ * computed results, i.e., <i>lat1</i>, <i>lon1</i>, <i>azi1</i>, <i>lat2</i>,
+ * <i>lon2</i>, <i>azi2</i>, <i>s12</i>, <i>a12</i>, <i>m12</i>, <i>M12</i>,
+ * <i>M21</i>, <i>S12</i>.
+ * <p>
+ * The functions {@link #Direct(double, double, double, double, int) Direct},
+ * {@link #ArcDirect(double, double, double, double, int) ArcDirect}, and
+ * {@link #Inverse(double, double, double, double, int) Inverse} include an
+ * optional final argument <i>outmask</i> which allows you specify which
+ * results should be computed and returned.  If you omit <i>outmask</i>, then
+ * the "standard" geodesic results are computed (latitudes, longitudes,
+ * azimuths, and distance).  <i>outmask</i> is bitor'ed combination of {@link
+ * GeodesicMask} values.  For example, if you wish just to compute the distance
+ * between two points you would call, e.g.,
+ * <pre>
+ * {@code
+ *  GeodesicData g = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2,
+ *                      GeodesicMask.DISTANCE); }</pre>
+ * <p>
+ * Additional functionality is provided by the {@link GeodesicLine} class,
+ * which allows a sequence of points along a geodesic to be computed.
+ * <p>
+ * The shortest distance returned by the solution of the inverse problem is
+ * (obviously) uniquely defined.  However, in a few special cases there are
+ * multiple azimuths which yield the same shortest distance.  Here is a
+ * catalog of those cases:
+ * <ul>
+ * <li>
+ *   <i>lat1</i> = −<i>lat2</i> (with neither point at a pole).  If
+ *   <i>azi1</i> = <i>azi2</i>, the geodesic is unique.  Otherwise there are
+ *   two geodesics and the second one is obtained by setting [<i>azi1</i>,
+ *   <i>azi2</i>] = [<i>azi2</i>, <i>azi1</i>], [<i>M12</i>, <i>M21</i>] =
+ *   [<i>M21</i>, <i>M12</i>], <i>S12</i> = −<i>S12</i>.  (This occurs
+ *   when the longitude difference is near ±180° for oblate
+ *   ellipsoids.)
+ * <li>
+ *   <i>lon2</i> = <i>lon1</i> ± 180° (with neither point at a
+ *   pole).  If <i>azi1</i> = 0° or ±180°, the geodesic is
+ *   unique.  Otherwise there are two geodesics and the second one is obtained
+ *   by setting [ <i>azi1</i>, <i>azi2</i>] = [−<i>azi1</i>,
+ *   −<i>azi2</i>], <i>S12</i> = − <i>S12</i>.  (This occurs when
+ *   <i>lat2</i> is near −<i>lat1</i> for prolate ellipsoids.)
+ * <li>
+ *   Points 1 and 2 at opposite poles.  There are infinitely many geodesics
+ *   which can be generated by setting [<i>azi1</i>, <i>azi2</i>] =
+ *   [<i>azi1</i>, <i>azi2</i>] + [<i>d</i>, −<i>d</i>], for arbitrary
+ *   <i>d</i>.  (For spheres, this prescription applies when points 1 and 2 are
+ *   antipodal.)
+ * <li>
+ *   s12 = 0 (coincident points).  There are infinitely many geodesics which
+ *   can be generated by setting [<i>azi1</i>, <i>azi2</i>] = [<i>azi1</i>,
+ *   <i>azi2</i>] + [<i>d</i>, <i>d</i>], for arbitrary <i>d</i>.
+ * </ul>
+ * <p>
+ * The calculations are accurate to better than 15 nm (15 nanometers) for the
+ * WGS84 ellipsoid.  See Sec. 9 of
+ * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for
+ * details.  The algorithms used by this class are based on series expansions
+ * using the flattening <i>f</i> as a small parameter.  These are only accurate
+ * for |<i>f</i>| < 0.02; however reasonably accurate results will be
+ * obtained for |<i>f</i>| < 0.2.  Here is a table of the approximate
+ * maximum error (expressed as a distance) for an ellipsoid with the same
+ * major radius as the WGS84 ellipsoid and different values of the
+ * flattening.<pre>
+ *     |f|      error
+ *     0.01     25 nm
+ *     0.02     30 nm
+ *     0.05     10 um
+ *     0.1     1.5 mm
+ *     0.2     300 mm </pre>
+ * <p>
+ * The algorithms are described in
+ * <ul>
+ * <li>C. F. F. Karney,
+ *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+ *   Algorithms for geodesics</a>,
+ *   J. Geodesy <b>87</b>, 43–55 (2013);
+ *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+ *   10.1007/s00190-012-0578-z</a>;
+ *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+ *   geod-addenda.html</a>.
+ * </ul>
+ * <p>
+ * Example of use:
+ * <pre>
+ * {@code
+ * // Solve the direct geodesic problem.
+ *
+ * // This program reads in lines with lat1, lon1, azi1, s12 and prints
+ * // out lines with lat2, lon2, azi2 (for the WGS84 ellipsoid).
+ *
+ * import java.util.*;
+ * import net.sf.geographiclib.*;
+ * public class Direct {
+ *   public static void main(String[] args) {
+ *     try {
+ *       Scanner in = new Scanner(System.in);
+ *       double lat1, lon1, azi1, s12;
+ *       while (true) {
+ *         lat1 = in.nextDouble(); lon1 = in.nextDouble();
+ *         azi1 = in.nextDouble(); s12 = in.nextDouble();
+ *         GeodesicData g = Geodesic.WGS84.Direct(lat1, lon1, azi1, s12);
+ *         System.out.println(g.lat2 + " " + g.lon2 + " " + g.azi2);
+ *       }
+ *     }
+ *     catch (Exception e) {}
+ *   }
+ * }}</pre>
+ **********************************************************************/
+public class Geodesic {
+
+  /**
+   * The order of the expansions used by Geodesic.
+   **********************************************************************/
+  protected static final int GEOGRAPHICLIB_GEODESIC_ORDER = 6;
+
+  protected static final int nA1_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+  protected static final int nC1_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+  protected static final int nC1p_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+  protected static final int nA2_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+  protected static final int nC2_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+  protected static final int nA3_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+  protected static final int nA3x_ = nA3_;
+  protected static final int nC3_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+  protected static final int nC3x_ = (nC3_ * (nC3_ - 1)) / 2;
+  protected static final int nC4_ = GEOGRAPHICLIB_GEODESIC_ORDER;
+  protected static final int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
+  private static final int maxit1_ = 20;
+  private static final int maxit2_ = maxit1_ + GeoMath.digits + 10;
+
+  // Underflow guard.  We require
+  //   tiny_ * epsilon() > 0
+  //   tiny_ + epsilon() == epsilon()
+  protected static final double tiny_ = Math.sqrt(GeoMath.min);
+  private static final double tol0_ = GeoMath.epsilon;
+  // Increase multiplier in defn of tol1_ from 100 to 200 to fix inverse case
+  // 52.784459512564 0 -52.784459512563990912 179.634407464943777557
+  // which otherwise failed for Visual Studio 10 (Release and Debug)
+  private static final double tol1_ = 200 * tol0_;
+  private static final double tol2_ = Math.sqrt(tol0_);
+  // Check on bisection interval
+  private static final double tolb_ = tol0_ * tol2_;
+  private static final double xthresh_ = 1000 * tol2_;
+
+  protected static double AngRound(double x) {
+    // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
+    // for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
+    // is about 1000 times more resolution than we get with angles around 90
+    // degrees.)  We use this to avoid having to deal with near singular
+    // cases when x is non-zero but tiny (e.g., 1.0e-200).
+    final double z = 1/16.0;
+    double y = Math.abs(x);
+    // The compiler mustn't "simplify" z - (z - y) to y
+    y = y < z ? z - (z - y) : y;
+    return x < 0 ? -y : y;
+  }
+
+  protected static Pair SinCosNorm(double sinx, double cosx) {
+    double r = GeoMath.hypot(sinx, cosx);
+    return new Pair(sinx/r, cosx/r);
+  }
+
+  protected double _a, _f, _f1, _e2, _ep2, _b, _c2;
+  private double _n, _etol2;
+  private double _A3x[], _C3x[], _C4x[];
+
+  /**
+   * Constructor for a ellipsoid with
+   * <p>
+   * @param a equatorial radius (meters).
+   * @param f flattening of ellipsoid.  Setting <i>f</i> = 0 gives a sphere.
+   *   Negative <i>f</i> gives a prolate ellipsoid.  If <i>f</i> > 1, set
+   *   flattening to 1/<i>f</i>.
+   * @exception GeographicErr if <i>a</i> or (1 − <i>f</i> ) <i>a</i> is
+   *   not positive.
+   **********************************************************************/
+  public Geodesic(double a, double f) {
+    _a = a;
+    _f = f <= 1 ? f : 1/f;
+    _f1 = 1 - _f;
+    _e2 = _f * (2 - _f);
+    _ep2 = _e2 / GeoMath.sq(_f1);       // e2 / (1 - e2)
+    _n = _f / ( 2 - _f);
+    _b = _a * _f1;
+    _c2 = (GeoMath.sq(_a) + GeoMath.sq(_b) *
+           (_e2 == 0 ? 1 :
+            (_e2 > 0 ? GeoMath.atanh(Math.sqrt(_e2)) :
+             Math.atan(Math.sqrt(-_e2))) /
+            Math.sqrt(Math.abs(_e2))))/2; // authalic radius squared
+    // The sig12 threshold for "really short".  Using the auxiliary sphere
+    // solution with dnm computed at (bet1 + bet2) / 2, the relative error in
+    // the azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2.
+    // (Error measured for 1/100 < b/a < 100 and abs(f) >= 1/1000.  For a
+    // given f and sig12, the max error occurs for lines near the pole.  If
+    // the old rule for computing dnm = (dn1 + dn2)/2 is used, then the error
+    // increases by a factor of 2.)  Setting this equal to epsilon gives
+    // sig12 = etol2.  Here 0.1 is a safety factor (error decreased by 100)
+    // and max(0.001, abs(f)) stops etol2 getting too large in the nearly
+    // spherical case.
+    _etol2 = 0.1 * tol2_ /
+              Math.sqrt( Math.max(0.001, Math.abs(_f)) *
+                         Math.min(1.0, 1 - _f/2) / 2 );
+    if (!(GeoMath.isfinite(_a) && _a > 0))
+      throw new GeographicErr("Major radius is not positive");
+    if (!(GeoMath.isfinite(_b) && _b > 0))
+      throw new GeographicErr("Minor radius is not positive");
+    _A3x = new double[nA3x_];
+    _C3x = new double[nC3x_];
+    _C4x = new double[nC4x_];
+
+    A3coeff();
+    C3coeff();
+    C4coeff();
+  }
+
+  /**
+   * Solve the direct geodesic problem where the length of the geodesic
+   * is specified in terms of distance.
+   * <p>
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param azi1 azimuth at point 1 (degrees).
+   * @param s12 distance between point 1 and point 2 (meters); it can be
+   *   negative.
+   * @return a {@link GeodesicData} object with the following fields:
+   *   <i>lat1</i>, <i>lon1</i>, <i>azi1</i>, <i>lat2</i>, <i>lon2</i>,
+   *   <i>azi2</i>, <i>s12</i>, <i>a12</i>.
+   * <p>
+   * <i>lat1</i> should be in the range [−90°, 90°]; <i>lon1</i>
+   * and <i>azi1</i> should be in the range [−540°, 540°).  The
+   * values of <i>lon2</i> and <i>azi2</i> returned are in the range
+   * [−180°, 180°).
+   * <p>
+   * If either point is at a pole, the azimuth is defined by keeping the
+   * longitude fixed, writing <i>lat</i> = ±(90° − ε),
+   * and taking the limit ε → 0+.  An arc length greater that
+   * 180° signifies a geodesic which is not a shortest path.  (For a
+   * prolate ellipsoid, an additional condition is necessary for a shortest
+   * path: the longitudinal extent must not exceed of 180°.)
+   **********************************************************************/
+  public GeodesicData Direct(double lat1, double lon1,
+                             double azi1, double s12) {
+    return Direct(lat1, lon1, azi1, false, s12,
+                  GeodesicMask.LATITUDE | GeodesicMask.LONGITUDE |
+                  GeodesicMask.AZIMUTH);
+  }
+  /**
+   * Solve the direct geodesic problem where the length of the geodesic is
+   * specified in terms of distance and with a subset of the geodesic results
+   * returned.
+   * <p>
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param azi1 azimuth at point 1 (degrees).
+   * @param s12 distance between point 1 and point 2 (meters); it can be
+   *   negative.
+   * @param outmask a bitor'ed combination of {@link GeodesicMask} values
+   *   specifying which results should be returned.
+   * @return a {@link GeodesicData} object with the fields specified by
+   *   <i>outmask</i> computed.
+   * <p>
+   * <i>lat1</i>, <i>lon1</i>, <i>azi1</i>, <i>s12</i>, and <i>a12</i> are
+   * always included in the returned result.
+   **********************************************************************/
+  public GeodesicData Direct(double lat1, double lon1,
+                             double azi1, double s12, int outmask) {
+    return Direct(lat1, lon1, azi1, false, s12, outmask);
+  }
+
+  /**
+   * Solve the direct geodesic problem where the length of the geodesic
+   * is specified in terms of arc length.
+   * <p>
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param azi1 azimuth at point 1 (degrees).
+   * @param a12 arc length between point 1 and point 2 (degrees); it can
+   *   be negative.
+   * @return a {@link GeodesicData} object with the following fields:
+   *   <i>lat1</i>, <i>lon1</i>, <i>azi1</i>, <i>lat2</i>, <i>lon2</i>,
+   *   <i>azi2</i>, <i>s12</i>, <i>a12</i>.
+   * <p>
+   * <i>lat1</i> should be in the range [−90°, 90°]; <i>lon1</i>
+   * and <i>azi1</i> should be in the range [−540°, 540°).  The
+   * values of <i>lon2</i> and <i>azi2</i> returned are in the range
+   * [−180°, 180°).
+   * <p>
+   * If either point is at a pole, the azimuth is defined by keeping the
+   * longitude fixed, writing <i>lat</i> = ±(90° − ε),
+   * and taking the limit ε → 0+.  An arc length greater that
+   * 180° signifies a geodesic which is not a shortest path.  (For a
+   * prolate ellipsoid, an additional condition is necessary for a shortest
+   * path: the longitudinal extent must not exceed of 180°.)
+   **********************************************************************/
+  public GeodesicData ArcDirect(double lat1, double lon1,
+                                double azi1, double a12) {
+    return Direct(lat1, lon1, azi1, true, a12,
+                  GeodesicMask.LATITUDE | GeodesicMask.LONGITUDE |
+                  GeodesicMask.AZIMUTH | GeodesicMask.DISTANCE);
+  }
+
+  /**
+   * Solve the direct geodesic problem where the length of the geodesic is
+   * specified in terms of arc length and with a subset of the geodesic results
+   * returned.
+   * <p>
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param azi1 azimuth at point 1 (degrees).
+   * @param a12 arc length between point 1 and point 2 (degrees); it can
+   *   be negative.
+   * @param outmask a bitor'ed combination of {@link GeodesicMask} values
+   *   specifying which results should be returned.
+   * @return a {@link GeodesicData} object with the fields specified by
+   *   <i>outmask</i> computed.
+   * <p>
+   * <i>lat1</i>, <i>lon1</i>, <i>azi1</i>, and <i>a12</i> are always included
+   * in the returned result.
+   **********************************************************************/
+  public GeodesicData ArcDirect(double lat1, double lon1,
+                                double azi1, double a12, int outmask) {
+    return Direct(lat1, lon1, azi1, true, a12, outmask);
+  }
+
+  /**
+   * The general direct geodesic problem.  {@link #Direct Direct} and
+   * {@link #ArcDirect ArcDirect} are defined in terms of this function.
+   * <p>
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param azi1 azimuth at point 1 (degrees).
+   * @param arcmode boolean flag determining the meaning of the
+   *   <i>s12_a12</i>.
+   * @param s12_a12 if <i>arcmode</i> is false, this is the distance between
+   *   point 1 and point 2 (meters); otherwise it is the arc length between
+   *   point 1 and point 2 (degrees); it can be negative.
+   * @param outmask a bitor'ed combination of {@link GeodesicMask} values
+   *   specifying which results should be returned.
+   * @return a {@link GeodesicData} object with the fields specified by
+   *   <i>outmask</i> computed.
+   * <p>
+   * The {@link GeodesicMask} values possible for <i>outmask</i> are
+   * <ul>
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.LATITUDE for the latitude <i>lat2</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.LONGITUDE for the latitude <i>lon2</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.AZIMUTH for the latitude <i>azi2</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.DISTANCE for the distance <i>s12</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.REDUCEDLENGTH for the reduced length
+   *   <i>m12</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.GEODESICSCALE for the geodesic scales
+   *   <i>M12</i> and <i>M21</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.AREA for the area <i>S12</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.ALL for all of the above.
+   * </ul>
+   * <p>
+   * The function value <i>a12</i> is always computed and returned and this
+   * equals <i>s12_a12</i> is <i>arcmode</i> is true.  If <i>outmask</i>
+   * includes {@link GeodesicMask#DISTANCE} and <i>arcmode</i> is false, then
+   * <i>s12</i> = <i>s12_a12</i>.  It is not necessary to include {@link
+   * GeodesicMask#DISTANCE_IN} in <i>outmask</i>; this is automatically
+   * included is <i>arcmode</i> is false.
+   **********************************************************************/
+  public GeodesicData Direct(double lat1, double lon1, double azi1,
+                             boolean arcmode, double s12_a12, int outmask) {
+    return new GeodesicLine(this, lat1, lon1, azi1,
+                            // Automatically supply DISTANCE_IN if necessary
+                            outmask | (arcmode ? GeodesicMask.NONE :
+                                       GeodesicMask.DISTANCE_IN))
+      .                         // Note the dot!
+      Position(arcmode, s12_a12, outmask);
+  }
+
+  /**
+   * Solve the inverse geodesic problem.
+   * <p>
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param lat2 latitude of point 2 (degrees).
+   * @param lon2 longitude of point 2 (degrees).
+   * @return a {@link GeodesicData} object with the following fields:
+   *   <i>lat1</i>, <i>lon1</i>, <i>azi1</i>, <i>lat2</i>, <i>lon2</i>,
+   *   <i>azi2</i>, <i>s12</i>, <i>a12</i>.
+   * <p>
+   * <i>lat1</i> and <i>lat2</i> should be in the range [−90°,
+   * 90°]; <i>lon1</i> and <i>lon2</i> should be in the range
+   * [−540°, 540°).  The values of <i>azi1</i> and <i>azi2</i>
+   * returned are in the range [−180°, 180°).
+   * <p>
+   * If either point is at a pole, the azimuth is defined by keeping the
+   * longitude fixed, writing <i>lat</i> = ±(90° − ε),
+   * taking the limit ε → 0+.
+   * <p>
+   * The solution to the inverse problem is found using Newton's method.  If
+   * this fails to converge (this is very unlikely in geodetic applications
+   * but does occur for very eccentric ellipsoids), then the bisection method
+   * is used to refine the solution.
+   **********************************************************************/
+  public GeodesicData Inverse(double lat1, double lon1,
+                              double lat2, double lon2) {
+    return Inverse(lat1, lon1, lat2, lon2,
+                   GeodesicMask.DISTANCE | GeodesicMask.AZIMUTH);
+  }
+
+  /**
+   * Solve the inverse geodesic problem with a subset of the geodesic results
+   * returned.
+   * <p>
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param lat2 latitude of point 2 (degrees).
+   * @param lon2 longitude of point 2 (degrees).
+   * @param outmask a bitor'ed combination of {@link GeodesicMask} values
+   *   specifying which results should be returned.
+   * @return a {@link GeodesicData} object with the fields specified by
+   *   <i>outmask</i> computed.
+   * <p>
+   * The {@link GeodesicMask} values possible for <i>outmask</i> are
+   * <ul>
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.DISTANCE for the distance <i>s12</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.AZIMUTH for the latitude <i>azi2</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.REDUCEDLENGTH for the reduced length
+   *   <i>m12</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.GEODESICSCALE for the geodesic scales
+   *   <i>M12</i> and <i>M21</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.AREA for the area <i>S12</i>;
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.ALL for all of the above.
+   * </ul>
+   * <p>
+   * <i>lat1</i>, <i>lon1</i>, <i>lat2</i>, <i>lon2</i>, and <i>a12</i> are
+   * always included in the returned result.
+   **********************************************************************/
+  public GeodesicData Inverse(double lat1, double lon1,
+                              double lat2, double lon2, int outmask) {
+    outmask &= GeodesicMask.OUT_ALL;
+    GeodesicData r = new GeodesicData();
+    lon1 = GeoMath.AngNormalize(lon1);
+    lon2 = GeoMath.AngNormalize(lon2);
+    // Compute longitude difference (AngDiff does this carefully).  Result is
+    // in [-180, 180] but -180 is only for west-going geodesics.  180 is for
+    // east-going and meridional geodesics.
+    double lon12 = GeoMath.AngDiff(lon1, lon2);
+    // If very close to being on the same half-meridian, then make it so.
+    lon12 = AngRound(lon12);
+    // Make longitude difference positive.
+    int lonsign = lon12 >= 0 ? 1 : -1;
+    lon12 *= lonsign;
+    // If really close to the equator, treat as on equator.
+    lat1 = AngRound(lat1);
+    lat2 = AngRound(lat2);
+    // Save input parameters post normalization
+    r.lat1 = lat1; r.lon1 = lon1; r.lat2 = lat2; r.lon2 = lon2;
+    // Swap points so that point with higher (abs) latitude is point 1
+    int swapp = Math.abs(lat1) >= Math.abs(lat2) ? 1 : -1;
+    if (swapp < 0) {
+      lonsign *= -1;
+      { double t = lat1; lat1 = lat2; lat2 = t; }
+    }
+    // Make lat1 <= 0
+    int latsign = lat1 < 0 ? 1 : -1;
+    lat1 *= latsign;
+    lat2 *= latsign;
+    // Now we have
+    //
+    //     0 <= lon12 <= 180
+    //     -90 <= lat1 <= 0
+    //     lat1 <= lat2 <= -lat1
+    //
+    // longsign, swapp, latsign register the transformation to bring the
+    // coordinates to this canonical form.  In all cases, 1 means no change was
+    // made.  We make these transformations so that there are few cases to
+    // check, e.g., on verifying quadrants in atan2.  In addition, this
+    // enforces some symmetries in the results returned.
+
+    double phi, sbet1, cbet1, sbet2, cbet2, s12x, m12x;
+    s12x = m12x = Double.NaN;
+
+    phi = lat1 * GeoMath.degree;
+    // Ensure cbet1 = +epsilon at poles
+    sbet1 = _f1 * Math.sin(phi);
+    cbet1 = lat1 == -90 ? tiny_ : Math.cos(phi);
+    { Pair p = SinCosNorm(sbet1, cbet1);
+      sbet1 = p.first; cbet1 = p.second; }
+
+    phi = lat2 * GeoMath.degree;
+    // Ensure cbet2 = +epsilon at poles
+    sbet2 = _f1 * Math.sin(phi);
+    cbet2 = Math.abs(lat2) == 90 ? tiny_ : Math.cos(phi);
+    { Pair p = SinCosNorm(sbet2, cbet2);
+      sbet2 = p.first; cbet2 = p.second; }
+
+    // If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of the
+    // |bet1| - |bet2|.  Alternatively (cbet1 >= -sbet1), abs(sbet2) + sbet1 is
+    // a better measure.  This logic is used in assigning calp2 in Lambda12.
+    // Sometimes these quantities vanish and in that case we force bet2 = +/-
+    // bet1 exactly.  An example where is is necessary is the inverse problem
+    // 48.522876735459 0 -48.52287673545898293 179.599720456223079643
+    // which failed with Visual Studio 10 (Release and Debug)
+
+    if (cbet1 < -sbet1) {
+      if (cbet2 == cbet1)
+        sbet2 = sbet2 < 0 ? sbet1 : -sbet1;
+    } else {
+      if (Math.abs(sbet2) == -sbet1)
+        cbet2 = cbet1;
+    }
+
+    double
+      dn1 = Math.sqrt(1 + _ep2 * GeoMath.sq(sbet1)),
+      dn2 = Math.sqrt(1 + _ep2 * GeoMath.sq(sbet2));
+
+    double
+      lam12 = lon12 * GeoMath.degree,
+      slam12 = Math.abs(lon12) == 180 ? 0 : Math.sin(lam12),
+      clam12 = Math.cos(lam12);      // lon12 == 90 isn't interesting
+
+    double a12, sig12, calp1, salp1, calp2, salp2;
+    a12 = sig12 = calp1 = salp1 = calp2 = salp2 = Double.NaN;
+    // index zero elements of these arrays are unused
+    double C1a[] = new double[nC1_ + 1];
+    double C2a[] = new double[nC2_ + 1];
+    double C3a[] = new double[nC3_];
+
+    boolean meridian = lat1 == -90 || slam12 == 0;
+
+    if (meridian) {
+
+      // Endpoints are on a single full meridian, so the geodesic might lie on
+      // a meridian.
+
+      calp1 = clam12; salp1 = slam12; // Head to the target longitude
+      calp2 = 1; salp2 = 0;           // At the target we're heading north
+
+      double
+        // tan(bet) = tan(sig) * cos(alp)
+        ssig1 = sbet1, csig1 = calp1 * cbet1,
+        ssig2 = sbet2, csig2 = calp2 * cbet2;
+
+      // sig12 = sig2 - sig1
+      sig12 = Math.atan2(Math.max(csig1 * ssig2 - ssig1 * csig2, 0.0),
+                    csig1 * csig2 + ssig1 * ssig2);
+      {
+        LengthsV v =
+          Lengths(_n, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+                  cbet1, cbet2,
+                  (outmask & GeodesicMask.GEODESICSCALE) != 0, C1a, C2a);
+        s12x = v.s12b; m12x = v.m12b;
+        if ((outmask & GeodesicMask.GEODESICSCALE) != 0) {
+          r.M12 = v.M12; r.M21 = v.M21;
+        }
+      }
+      // Add the check for sig12 since zero length geodesics might yield m12 <
+      // 0.  Test case was
+      //
+      //    echo 20.001 0 20.001 0 | GeodSolve -i
+      //
+      // In fact, we will have sig12 > pi/2 for meridional geodesic which is
+      // not a shortest path.
+      if (sig12 < 1 || m12x >= 0) {
+        m12x *= _b;
+        s12x *= _b;
+        a12 = sig12 / GeoMath.degree;
+      } else
+        // m12 < 0, i.e., prolate and too close to anti-podal
+        meridian = false;
+    }
+
+    double omg12 = Double.NaN;
+    if (!meridian &&
+        sbet1 == 0 &&   // and sbet2 == 0
+        // Mimic the way Lambda12 works with calp1 = 0
+        (_f <= 0 || lam12 <= Math.PI - _f * Math.PI)) {
+
+      // Geodesic runs along equator
+      calp1 = calp2 = 0; salp1 = salp2 = 1;
+      s12x = _a * lam12;
+      sig12 = omg12 = lam12 / _f1;
+      m12x = _b * Math.sin(sig12);
+      if ((outmask & GeodesicMask.GEODESICSCALE) != 0)
+        r.M12 = r.M21 = Math.cos(sig12);
+      a12 = lon12 / _f1;
+
+    } else if (!meridian) {
+
+      // Now point1 and point2 belong within a hemisphere bounded by a
+      // meridian and geodesic is neither meridional or equatorial.
+
+      // Figure a starting point for Newton's method
+      double dnm;
+      {
+        InverseStartV v =
+          InverseStart(sbet1, cbet1, dn1, sbet2, cbet2, dn2,
+                       lam12,
+                       C1a, C2a);
+        sig12 = v.sig12;
+        salp1 = v.salp1; calp1 = v.calp1;
+        salp2 = v.salp2; calp2 = v.calp2;
+        dnm = v.dnm;
+      }
+
+      if (sig12 >= 0) {
+        // Short lines (InverseStart sets salp2, calp2, dnm)
+        s12x = sig12 * _b * dnm;
+        m12x = GeoMath.sq(dnm) * _b * Math.sin(sig12 / dnm);
+        if ((outmask & GeodesicMask.GEODESICSCALE) != 0)
+          r.M12 = r.M21 = Math.cos(sig12 / dnm);
+        a12 = sig12 / GeoMath.degree;
+        omg12 = lam12 / (_f1 * dnm);
+      } else {
+
+        // Newton's method.  This is a straightforward solution of f(alp1) =
+        // lambda12(alp1) - lam12 = 0 with one wrinkle.  f(alp) has exactly one
+        // root in the interval (0, pi) and its derivative is positive at the
+        // root.  Thus f(alp) is positive for alp > alp1 and negative for alp <
+        // alp1.  During the course of the iteration, a range (alp1a, alp1b) is
+        // maintained which brackets the root and with each evaluation of
+        // f(alp) the range is shrunk, if possible.  Newton's method is
+        // restarted whenever the derivative of f is negative (because the new
+        // value of alp1 is then further from the solution) or if the new
+        // estimate of alp1 lies outside (0,pi); in this case, the new starting
+        // guess is taken to be (alp1a + alp1b) / 2.
+        double ssig1, csig1, ssig2, csig2, eps;
+        ssig1 = csig1 = ssig2 = csig2 = eps = Double.NaN;
+        int numit = 0;
+        // Bracketing range
+        double salp1a = tiny_, calp1a = 1, salp1b = tiny_, calp1b = -1;
+        for (boolean tripn = false, tripb = false; numit < maxit2_; ++numit) {
+          // the WGS84 test set: mean = 1.47, sd = 1.25, max = 16
+          // WGS84 and random input: mean = 2.85, sd = 0.60
+          double v, dv;
+          {
+            Lambda12V w =
+              Lambda12(sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1,
+                       numit < maxit1_, C1a, C2a, C3a);
+            v = w.lam12 - lam12;
+            salp2 = w.salp2; calp2 = w.calp2;
+            sig12 = w.sig12;
+            ssig1 = w.ssig1; csig1 = w.csig1;
+            ssig2 = w.ssig2; csig2 = w.csig2;
+            eps = w.eps; omg12 = w.domg12;
+            dv = w.dlam12;
+          }
+          // 2 * tol0 is approximately 1 ulp for a number in [0, pi].
+          // Reversed test to allow escape with NaNs
+          if (tripb || !(Math.abs(v) >= (tripn ? 8 : 2) * tol0_)) break;
+          // Update bracketing values
+          if (v > 0 && (numit > maxit1_ || calp1/salp1 > calp1b/salp1b))
+            { salp1b = salp1; calp1b = calp1; }
+          else if (v < 0 && (numit > maxit1_ || calp1/salp1 < calp1a/salp1a))
+            { salp1a = salp1; calp1a = calp1; }
+          if (numit < maxit1_ && dv > 0) {
+            double
+              dalp1 = -v/dv;
+            double
+              sdalp1 = Math.sin(dalp1), cdalp1 = Math.cos(dalp1),
+              nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
+            if (nsalp1 > 0 && Math.abs(dalp1) < Math.PI) {
+              calp1 = calp1 * cdalp1 - salp1 * sdalp1;
+              salp1 = nsalp1;
+              { Pair p = SinCosNorm(salp1, calp1);
+                salp1 = p.first; calp1 = p.second; }
+              // In some regimes we don't get quadratic convergence because
+              // slope -> 0.  So use convergence conditions based on epsilon
+              // instead of sqrt(epsilon).
+              tripn = Math.abs(v) <= 16 * tol0_;
+              continue;
+            }
+          }
+          // Either dv was not postive or updated value was outside legal
+          // range.  Use the midpoint of the bracket as the next estimate.
+          // This mechanism is not needed for the WGS84 ellipsoid, but it does
+          // catch problems with more eccentric ellipsoids.  Its efficacy is
+          // such for the WGS84 test set with the starting guess set to alp1 =
+          // 90deg:
+          // the WGS84 test set: mean = 5.21, sd = 3.93, max = 24
+          // WGS84 and random input: mean = 4.74, sd = 0.99
+          salp1 = (salp1a + salp1b)/2;
+          calp1 = (calp1a + calp1b)/2;
+          { Pair p = SinCosNorm(salp1, calp1);
+            salp1 = p.first; calp1 = p.second; }
+          tripn = false;
+          tripb = (Math.abs(salp1a - salp1) + (calp1a - calp1) < tolb_ ||
+                   Math.abs(salp1 - salp1b) + (calp1 - calp1b) < tolb_);
+        }
+        {
+          LengthsV v =
+            Lengths(eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+                    cbet1, cbet2,
+                    (outmask & GeodesicMask.GEODESICSCALE) != 0, C1a, C2a);
+          s12x = v.s12b; m12x = v.m12b;
+          if ((outmask & GeodesicMask.GEODESICSCALE) != 0) {
+            r.M12 = v.M12; r.M21 = v.M21;
+          }
+        }
+        m12x *= _b;
+        s12x *= _b;
+        a12 = sig12 / GeoMath.degree;
+        omg12 = lam12 - omg12;
+      }
+    }
+
+    if ((outmask & GeodesicMask.DISTANCE) != 0)
+      r.s12 = 0 + s12x;           // Convert -0 to 0
+
+    if ((outmask & GeodesicMask.REDUCEDLENGTH) != 0)
+      r.m12 = 0 + m12x;           // Convert -0 to 0
+
+    if ((outmask & GeodesicMask.AREA) != 0) {
+      double
+        // From Lambda12: sin(alp1) * cos(bet1) = sin(alp0)
+        salp0 = salp1 * cbet1,
+        calp0 = GeoMath.hypot(calp1, salp1 * sbet1); // calp0 > 0
+      double alp12;
+      if (calp0 != 0 && salp0 != 0) {
+        double
+          // From Lambda12: tan(bet) = tan(sig) * cos(alp)
+          ssig1 = sbet1, csig1 = calp1 * cbet1,
+          ssig2 = sbet2, csig2 = calp2 * cbet2,
+          k2 = GeoMath.sq(calp0) * _ep2,
+          eps = k2 / (2 * (1 + Math.sqrt(1 + k2)) + k2),
+          // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0).
+          A4 = GeoMath.sq(_a) * calp0 * salp0 * _e2;
+        { Pair p = SinCosNorm(ssig1, csig1);
+          ssig1 = p.first; csig1 = p.second; }
+        { Pair p = SinCosNorm(ssig2, csig2);
+          ssig2 = p.first; csig2 = p.second; }
+        double C4a[] = new double[nC4_];
+        C4f(eps, C4a);
+        double
+          B41 = SinCosSeries(false, ssig1, csig1, C4a),
+          B42 = SinCosSeries(false, ssig2, csig2, C4a);
+        r.S12 = A4 * (B42 - B41);
+      } else
+        // Avoid problems with indeterminate sig1, sig2 on equator
+        r.S12 = 0;
+
+      if (!meridian &&
+          omg12 < 0.75 * Math.PI && // Long difference too big
+          sbet2 - sbet1 < 1.75) {            // Lat difference too big
+        // Use tan(Gamma/2) = tan(omg12/2)
+        // * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2))
+        // with tan(x/2) = sin(x)/(1+cos(x))
+        double
+          somg12 = Math.sin(omg12), domg12 = 1 + Math.cos(omg12),
+          dbet1 = 1 + cbet1, dbet2 = 1 + cbet2;
+        alp12 = 2 * Math.atan2( somg12 * ( sbet1 * dbet2 + sbet2 * dbet1 ),
+                           domg12 * ( sbet1 * sbet2 + dbet1 * dbet2 ) );
+      } else {
+        // alp12 = alp2 - alp1, used in atan2 so no need to normalize
+        double
+          salp12 = salp2 * calp1 - calp2 * salp1,
+          calp12 = calp2 * calp1 + salp2 * salp1;
+        // The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+        // salp12 = -0 and alp12 = -180.  However this depends on the sign
+        // being attached to 0 correctly.  The following ensures the correct
+        // behavior.
+        if (salp12 == 0 && calp12 < 0) {
+          salp12 = tiny_ * calp1;
+          calp12 = -1;
+        }
+        alp12 = Math.atan2(salp12, calp12);
+      }
+      r.S12 += _c2 * alp12;
+      r.S12 *= swapp * lonsign * latsign;
+      // Convert -0 to 0
+      r.S12 += 0;
+    }
+
+    // Convert calp, salp to azimuth accounting for lonsign, swapp, latsign.
+    if (swapp < 0) {
+      { double t = salp1; salp1 = salp2; salp2 = t; }
+      { double t = calp1; calp1 = calp2; calp2 = t; }
+      if ((outmask & GeodesicMask.GEODESICSCALE) != 0)
+        { double t = r.M12; r.M12 = r.M21; r.M21 = t; }
+    }
+
+    salp1 *= swapp * lonsign; calp1 *= swapp * latsign;
+    salp2 *= swapp * lonsign; calp2 *= swapp * latsign;
+
+    if ((outmask & GeodesicMask.AZIMUTH) != 0) {
+      // minus signs give range [-180, 180). 0- converts -0 to +0.
+      r.azi1 = 0 - Math.atan2(-salp1, calp1) / GeoMath.degree;
+      r.azi2 = 0 - Math.atan2(-salp2, calp2) / GeoMath.degree;
+    }
+    // Returned value in [0, 180]
+    r.a12 = a12;
+    return r;
+  }
+
+  /**
+   * Set up to compute several points on a single geodesic.
+   * <p>
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param azi1 azimuth at point 1 (degrees).
+   * @return a {@link GeodesicLine} object.
+   * <p>
+   * <i>lat1</i> should be in the range [−90°, 90°]; <i>lon1</i>
+   * and <i>azi1</i> should be in the range [−540°, 540°).  The
+   * full set of capabilities is included.
+   * <p>
+   * If the point is at a pole, the azimuth is defined by keeping the
+   * <i>lon1</i> fixed, writing <i>lat1</i> = ±(90 − ε),
+   * taking the limit ε → 0+.
+   **********************************************************************/
+  public GeodesicLine Line(double lat1, double lon1, double azi1) {
+    return Line(lat1, lon1, azi1, GeodesicMask.ALL);
+  }
+  /**
+   * Set up to compute several points on a single geodesic with a subset of the
+   * capabilities included.
+   * <p>
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param azi1 azimuth at point 1 (degrees).
+   * @param caps bitor'ed combination of {@link GeodesicMask} values specifying
+   *   the capabilities the {@link GeodesicLine} object should possess, i.e.,
+   *   which quantities can be returned in calls to {@link
+   *   GeodesicLine#Position GeodesicLine.Position}.
+   * @return a {@link GeodesicLine} object.
+   * <p>
+   * The {@link GeodesicMask} values are
+   * <ul>
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.LATITUDE for the latitude <i>lat2</i>; this
+   *   is added automatically;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.LONGITUDE for the latitude <i>lon2</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.AZIMUTH for the azimuth <i>azi2</i>; this is
+   *   added automatically;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.DISTANCE for the distance <i>s12</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.REDUCEDLENGTH for the reduced length
+   *   <i>m12</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.GEODESICSCALE for the geodesic scales
+   *   <i>M12</i> and <i>M21</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.AREA for the area <i>S12</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.DISTANCE_IN permits the length of the
+   *   geodesic to be given in terms of <i>s12</i>; without this capability the
+   *   length can only be specified in terms of arc length;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.ALL for all of the above.
+   * </ul>
+   * <p>
+   * If the point is at a pole, the azimuth is defined by keeping <i>lon1</i>
+   * fixed, writing <i>lat1</i> = ±(90 − ε), and taking
+   * the limit ε → 0+.
+   **********************************************************************/
+  public GeodesicLine Line(double lat1, double lon1, double azi1, int caps) {
+    return new GeodesicLine(this, lat1, lon1, azi1, caps);
+  }
+
+  /**
+   * @return <i>a</i> the equatorial radius of the ellipsoid (meters).  This is
+   *   the value used in the constructor.
+   **********************************************************************/
+  public double MajorRadius() { return _a; }
+
+  /**
+   * @return <i>f</i> the  flattening of the ellipsoid.  This is the
+   *   value used in the constructor.
+   **********************************************************************/
+  public double Flattening() { return _f; }
+
+  /**
+   * @return total area of ellipsoid in meters<sup>2</sup>.  The area of a
+   *   polygon encircling a pole can be found by adding EllipsoidArea()/2 to
+   *   the sum of <i>S12</i> for each side of the polygon.
+   **********************************************************************/
+  public double EllipsoidArea() { return 4 * Math.PI * _c2; }
+
+  /**
+   * A global instantiation of Geodesic with the parameters for the WGS84
+   * ellipsoid.
+   **********************************************************************/
+  public static final Geodesic WGS84 =
+      new Geodesic(Constants.WGS84_a, Constants.WGS84_f);
+
+  // This is a reformulation of the geodesic problem.  The notation is as
+  // follows:
+  // - at a general point (no suffix or 1 or 2 as suffix)
+  //   - phi = latitude
+  //   - beta = latitude on auxiliary sphere
+  //   - omega = longitude on auxiliary sphere
+  //   - lambda = longitude
+  //   - alpha = azimuth of great circle
+  //   - sigma = arc length along great circle
+  //   - s = distance
+  //   - tau = scaled distance (= sigma at multiples of pi/2)
+  // - at northwards equator crossing
+  //   - beta = phi = 0
+  //   - omega = lambda = 0
+  //   - alpha = alpha0
+  //   - sigma = s = 0
+  // - a 12 suffix means a difference, e.g., s12 = s2 - s1.
+  // - s and c prefixes mean sin and cos
+
+  protected static double SinCosSeries(boolean sinp,
+                                       double sinx, double cosx,
+                                       double c[]) {
+    // Evaluate
+    // y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :
+    //            sum(c[i] * cos((2*i+1) * x), i, 0, n-1)
+    // using Clenshaw summation.  N.B. c[0] is unused for sin series
+    // Approx operation count = (n + 5) mult and (2 * n + 2) add
+    int k = c.length, n = k - (sinp ? 1 : 0);
+    double
+      ar = 2 * (cosx - sinx) * (cosx + sinx), // 2 * cos(2 * x)
+      y0 = (n & 1) != 0 ? c[--k] : 0, y1 = 0;        // accumulators for sum
+    // Now n is even
+    n /= 2;
+    while (n-- != 0) {
+      // Unroll loop x 2, so accumulators return to their original role
+      y1 = ar * y0 - y1 + c[--k];
+      y0 = ar * y1 - y0 + c[--k];
+    }
+    return sinp
+      ? 2 * sinx * cosx * y0    // sin(2 * x) * y0
+      : cosx * (y0 - y1);       // cos(x) * (y0 - y1)
+  }
+
+  private class LengthsV {
+    private double s12b, m12b, m0, M12, M21;
+    private LengthsV() {
+      s12b = m12b = m0 = M12 = M21 = Double.NaN;
+    }
+  }
+
+  private LengthsV Lengths(double eps, double sig12,
+                           double ssig1, double csig1, double dn1,
+                           double ssig2, double csig2, double dn2,
+                           double cbet1, double cbet2,
+                           boolean scalep,
+                           // Scratch areas of the right size
+                           double C1a[], double C2a[]) {
+    // Return m12b = (reduced length)/_b; also calculate s12b = distance/_b,
+    // and m0 = coefficient of secular term in expression for reduced length.
+    LengthsV v = new LengthsV(); // To hold s12b, m12b, m0, M12, M21;
+    C1f(eps, C1a);
+    C2f(eps, C2a);
+    double
+      A1m1 = A1m1f(eps),
+      AB1 = (1 + A1m1) * (SinCosSeries(true, ssig2, csig2, C1a) -
+                          SinCosSeries(true, ssig1, csig1, C1a)),
+      A2m1 = A2m1f(eps),
+      AB2 = (1 + A2m1) * (SinCosSeries(true, ssig2, csig2, C2a) -
+                          SinCosSeries(true, ssig1, csig1, C2a));
+    v.m0 = A1m1 - A2m1;
+    double J12 = v.m0 * sig12 + (AB1 - AB2);
+    // Missing a factor of _b.
+    // Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure accurate
+    // cancellation in the case of coincident points.
+    v.m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) -
+      csig1 * csig2 * J12;
+    // Missing a factor of _b
+    v.s12b = (1 + A1m1) * sig12 + AB1;
+    if (scalep) {
+      double csig12 = csig1 * csig2 + ssig1 * ssig2;
+      double t = _ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2);
+      v.M12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1;
+      v.M21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2;
+    }
+    return v;
+  }
+
+  private static double Astroid(double x, double y) {
+    // Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.
+    // This solution is adapted from Geocentric::Reverse.
+    double k;
+    double
+      p = GeoMath.sq(x),
+      q = GeoMath.sq(y),
+      r = (p + q - 1) / 6;
+    if ( !(q == 0 && r <= 0) ) {
+      double
+        // Avoid possible division by zero when r = 0 by multiplying equations
+        // for s and t by r^3 and r, resp.
+        S = p * q / 4,            // S = r^3 * s
+        r2 = GeoMath.sq(r),
+        r3 = r * r2,
+        // The discrimant of the quadratic equation for T3.  This is zero on
+        // the evolute curve p^(1/3)+q^(1/3) = 1
+        disc = S * (S + 2 * r3);
+      double u = r;
+      if (disc >= 0) {
+        double T3 = S + r3;
+        // Pick the sign on the sqrt to maximize abs(T3).  This minimizes loss
+        // of precision due to cancellation.  The result is unchanged because
+        // of the way the T is used in definition of u.
+        T3 += T3 < 0 ? -Math.sqrt(disc) : Math.sqrt(disc); // T3 = (r * t)^3
+        // N.B. cbrt always returns the double root.  cbrt(-8) = -2.
+        double T = GeoMath.cbrt(T3); // T = r * t
+        // T can be zero; but then r2 / T -> 0.
+        u += T + (T != 0 ? r2 / T : 0);
+      } else {
+        // T is complex, but the way u is defined the result is double.
+        double ang = Math.atan2(Math.sqrt(-disc), -(S + r3));
+        // There are three possible cube roots.  We choose the root which
+        // avoids cancellation.  Note that disc < 0 implies that r < 0.
+        u += 2 * r * Math.cos(ang / 3);
+      }
+      double
+        v = Math.sqrt(GeoMath.sq(u) + q),    // guaranteed positive
+        // Avoid loss of accuracy when u < 0.
+        uv = u < 0 ? q / (v - u) : u + v, // u+v, guaranteed positive
+        w = (uv - q) / (2 * v);           // positive?
+      // Rearrange expression for k to avoid loss of accuracy due to
+      // subtraction.  Division by 0 not possible because uv > 0, w >= 0.
+      k = uv / (Math.sqrt(uv + GeoMath.sq(w)) + w);   // guaranteed positive
+    } else {               // q == 0 && r <= 0
+      // y = 0 with |x| <= 1.  Handle this case directly.
+      // for y small, positive root is k = abs(y)/sqrt(1-x^2)
+      k = 0;
+    }
+    return k;
+  }
+
+  private class InverseStartV {
+    private double sig12, salp1, calp1,
+    // Only updated if return val >= 0
+      salp2, calp2,
+    // Only updated for short lines
+      dnm;
+    private InverseStartV() {
+      sig12 = salp1 = calp1 = salp2 = calp2 = dnm = Double.NaN;
+    }
+  }
+
+  private InverseStartV InverseStart(double sbet1, double cbet1, double dn1,
+                                     double sbet2, double cbet2, double dn2,
+                                     double lam12,
+                                     // Scratch areas of the right size
+                                     double C1a[], double C2a[]) {
+    // Return a starting point for Newton's method in salp1 and calp1 (function
+    // value is -1).  If Newton's method doesn't need to be used, return also
+    // salp2 and calp2 and function value is sig12.
+
+    // To hold sig12, salp1, calp1, salp2, calp2, dnm.
+    InverseStartV w = new InverseStartV();
+    w.sig12 = -1;               // Return value
+    double
+      // bet12 = bet2 - bet1 in [0, pi); bet12a = bet2 + bet1 in (-pi, 0]
+      sbet12 = sbet2 * cbet1 - cbet2 * sbet1,
+      cbet12 = cbet2 * cbet1 + sbet2 * sbet1;
+    double sbet12a = sbet2 * cbet1 + cbet2 * sbet1;
+    boolean shortline = cbet12 >= 0 && sbet12 < 0.5 &&
+      cbet2 * lam12 < 0.5;
+    double omg12 = lam12;
+    if (shortline) {
+      double sbetm2 = GeoMath.sq(sbet1 + sbet2);
+      // sin((bet1+bet2)/2)^2
+      // =  (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2)
+      sbetm2 /= sbetm2 + GeoMath.sq(cbet1 + cbet2);
+      w.dnm = Math.sqrt(1 + _ep2 * sbetm2);
+      omg12 /= _f1 * w.dnm;
+    }
+    double somg12 = Math.sin(omg12), comg12 = Math.cos(omg12);
+
+    w.salp1 = cbet2 * somg12;
+    w.calp1 = comg12 >= 0 ?
+      sbet12 + cbet2 * sbet1 * GeoMath.sq(somg12) / (1 + comg12) :
+      sbet12a - cbet2 * sbet1 * GeoMath.sq(somg12) / (1 - comg12);
+
+    double
+      ssig12 = GeoMath.hypot(w.salp1, w.calp1),
+      csig12 = sbet1 * sbet2 + cbet1 * cbet2 * comg12;
+
+    if (shortline && ssig12 < _etol2) {
+      // really short lines
+      w.salp2 = cbet1 * somg12;
+      w.calp2 = sbet12 - cbet1 * sbet2 *
+        (comg12 >= 0 ? GeoMath.sq(somg12) / (1 + comg12) : 1 - comg12);
+      { Pair p = SinCosNorm(w.salp2, w.calp2);
+        w.salp2 = p.first; w.calp2 = p.second; }
+      // Set return value
+      w.sig12 = Math.atan2(ssig12, csig12);
+    } else if (Math.abs(_n) > 0.1 || // Skip astroid calc if too eccentric
+               csig12 >= 0 ||
+               ssig12 >= 6 * Math.abs(_n) * Math.PI * GeoMath.sq(cbet1)) {
+      // Nothing to do, zeroth order spherical approximation is OK
+    } else {
+      // Scale lam12 and bet2 to x, y coordinate system where antipodal point
+      // is at origin and singular point is at y = 0, x = -1.
+      double y, lamscale, betscale;
+      // In C++ volatile declaration needed to fix inverse case
+      // 56.320923501171 0 -56.320923501171 179.664747671772880215
+      // which otherwise fails with g++ 4.4.4 x86 -O3
+      double x;
+      if (_f >= 0) {            // In fact f == 0 does not get here
+        // x = dlong, y = dlat
+        {
+          double
+            k2 = GeoMath.sq(sbet1) * _ep2,
+            eps = k2 / (2 * (1 + Math.sqrt(1 + k2)) + k2);
+          lamscale = _f * cbet1 * A3f(eps) * Math.PI;
+        }
+        betscale = lamscale * cbet1;
+
+        x = (lam12 - Math.PI) / lamscale;
+        y = sbet12a / betscale;
+      } else {                  // _f < 0
+        // x = dlat, y = dlong
+        double
+          cbet12a = cbet2 * cbet1 - sbet2 * sbet1,
+          bet12a = Math.atan2(sbet12a, cbet12a);
+        double m12b, m0;
+        // In the case of lon12 = 180, this repeats a calculation made in
+        // Inverse.
+        LengthsV v =
+          Lengths(_n, Math.PI + bet12a,
+                  sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
+                  cbet1, cbet2, false, C1a, C2a);
+        m12b = v.m12b; m0 = v.m0;
+
+        x = -1 + m12b / (cbet1 * cbet2 * m0 * Math.PI);
+        betscale = x < -0.01 ? sbet12a / x :
+          -_f * GeoMath.sq(cbet1) * Math.PI;
+        lamscale = betscale / cbet1;
+        y = (lam12 - Math.PI) / lamscale;
+      }
+
+      if (y > -tol1_ && x > -1 - xthresh_) {
+        // strip near cut
+        if (_f >= 0) {
+          w.salp1 = Math.min(1.0, -x);
+          w.calp1 = - Math.sqrt(1 - GeoMath.sq(w.salp1));
+        } else {
+          w.calp1 = Math.max(x > -tol1_ ? 0.0 : -1.0, x);
+          w.salp1 = Math.sqrt(1 - GeoMath.sq(w.calp1));
+        }
+      } else {
+        // Estimate alp1, by solving the astroid problem.
+        //
+        // Could estimate alpha1 = theta + pi/2, directly, i.e.,
+        //   calp1 = y/k; salp1 = -x/(1+k);  for _f >= 0
+        //   calp1 = x/(1+k); salp1 = -y/k;  for _f < 0 (need to check)
+        //
+        // However, it's better to estimate omg12 from astroid and use
+        // spherical formula to compute alp1.  This reduces the mean number of
+        // Newton iterations for astroid cases from 2.24 (min 0, max 6) to 2.12
+        // (min 0 max 5).  The changes in the number of iterations are as
+        // follows:
+        //
+        // change percent
+        //    1       5
+        //    0      78
+        //   -1      16
+        //   -2       0.6
+        //   -3       0.04
+        //   -4       0.002
+        //
+        // The histogram of iterations is (m = number of iterations estimating
+        // alp1 directly, n = number of iterations estimating via omg12, total
+        // number of trials = 148605):
+        //
+        //  iter    m      n
+        //    0   148    186
+        //    1 13046  13845
+        //    2 93315 102225
+        //    3 36189  32341
+        //    4  5396      7
+        //    5   455      1
+        //    6    56      0
+        //
+        // Because omg12 is near pi, estimate work with omg12a = pi - omg12
+        double k = Astroid(x, y);
+        double
+          omg12a = lamscale * ( _f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k );
+        somg12 = Math.sin(omg12a); comg12 = -Math.cos(omg12a);
+        // Update spherical estimate of alp1 using omg12 instead of lam12
+        w.salp1 = cbet2 * somg12;
+        w.calp1 = sbet12a - cbet2 * sbet1 * GeoMath.sq(somg12) / (1 - comg12);
+      }
+    }
+    if (w.salp1 > 0)              // Sanity check on starting guess
+      { Pair p = SinCosNorm(w.salp1, w.calp1);
+        w.salp1 = p.first; w.calp1 = p.second; }
+    else {
+      w.salp1 = 1; w.calp1 = 0;
+    }
+    return w;
+  }
+
+  private class Lambda12V {
+    private double lam12, salp2, calp2, sig12, ssig1, csig1, ssig2, csig2,
+      eps, domg12, dlam12;
+    private Lambda12V() {
+      lam12 = salp2 = calp2 = sig12 = ssig1 = csig1 = ssig2 = csig2
+        = eps = domg12 = dlam12 = Double.NaN;
+    }
+  }
+
+  private Lambda12V Lambda12(double sbet1, double cbet1, double dn1,
+                             double sbet2, double cbet2, double dn2,
+                             double salp1, double calp1,
+                             boolean diffp,
+                             // Scratch areas of the right size
+                             double C1a[], double C2a[], double C3a[]) {
+    // Object to hold lam12, salp2, calp2, sig12, ssig1, csig1, ssig2, csig2,
+    // eps, domg12, dlam12;
+
+    Lambda12V w = new Lambda12V();
+
+    if (sbet1 == 0 && calp1 == 0)
+      // Break degeneracy of equatorial line.  This case has already been
+      // handled.
+      calp1 = -tiny_;
+
+    double
+      // sin(alp1) * cos(bet1) = sin(alp0)
+      salp0 = salp1 * cbet1,
+      calp0 = GeoMath.hypot(calp1, salp1 * sbet1); // calp0 > 0
+
+    double somg1, comg1, somg2, comg2, omg12;
+    // tan(bet1) = tan(sig1) * cos(alp1)
+    // tan(omg1) = sin(alp0) * tan(sig1) = tan(omg1)=tan(alp1)*sin(bet1)
+    w.ssig1 = sbet1; somg1 = salp0 * sbet1;
+    w.csig1 = comg1 = calp1 * cbet1;
+    { Pair p = SinCosNorm(w.ssig1, w.csig1);
+      w.ssig1 = p.first; w.csig1 = p.second; }
+    // SinCosNorm(somg1, comg1); -- don't need to normalize!
+
+    // Enforce symmetries in the case abs(bet2) = -bet1.  Need to be careful
+    // about this case, since this can yield singularities in the Newton
+    // iteration.
+    // sin(alp2) * cos(bet2) = sin(alp0)
+    w.salp2 = cbet2 != cbet1 ? salp0 / cbet2 : salp1;
+    // calp2 = sqrt(1 - sq(salp2))
+    //       = sqrt(sq(calp0) - sq(sbet2)) / cbet2
+    // and subst for calp0 and rearrange to give (choose positive sqrt
+    // to give alp2 in [0, pi/2]).
+    w.calp2 = cbet2 != cbet1 || Math.abs(sbet2) != -sbet1 ?
+      Math.sqrt(GeoMath.sq(calp1 * cbet1) +
+           (cbet1 < -sbet1 ?
+            (cbet2 - cbet1) * (cbet1 + cbet2) :
+            (sbet1 - sbet2) * (sbet1 + sbet2))) / cbet2 :
+      Math.abs(calp1);
+    // tan(bet2) = tan(sig2) * cos(alp2)
+    // tan(omg2) = sin(alp0) * tan(sig2).
+    w.ssig2 = sbet2; somg2 = salp0 * sbet2;
+    w.csig2 = comg2 = w.calp2 * cbet2;
+    { Pair p = SinCosNorm(w.ssig2, w.csig2);
+      w.ssig2 = p.first; w.csig2 = p.second; }
+    // SinCosNorm(somg2, comg2); -- don't need to normalize!
+
+    // sig12 = sig2 - sig1, limit to [0, pi]
+    w.sig12 = Math.atan2(Math.max(w.csig1 * w.ssig2 - w.ssig1 * w.csig2, 0.0),
+                  w.csig1 * w.csig2 + w.ssig1 * w.ssig2);
+
+    // omg12 = omg2 - omg1, limit to [0, pi]
+    omg12 = Math.atan2(Math.max(comg1 * somg2 - somg1 * comg2, 0.0),
+                  comg1 * comg2 + somg1 * somg2);
+    double B312, h0;
+    double k2 = GeoMath.sq(calp0) * _ep2;
+    w.eps = k2 / (2 * (1 + Math.sqrt(1 + k2)) + k2);
+    C3f(w.eps, C3a);
+    B312 = (SinCosSeries(true, w.ssig2, w.csig2, C3a) -
+            SinCosSeries(true, w.ssig1, w.csig1, C3a));
+    h0 = -_f * A3f(w.eps);
+    w.domg12 = salp0 * h0 * (w.sig12 + B312);
+    w.lam12 = omg12 + w.domg12;
+
+    if (diffp) {
+      if (w.calp2 == 0)
+        w.dlam12 = - 2 * _f1 * dn1 / sbet1;
+      else {
+        double dummy;
+        LengthsV v =
+          Lengths(w.eps, w.sig12, w.ssig1, w.csig1, dn1, w.ssig2, w.csig2, dn2,
+                  cbet1, cbet2, false, C1a, C2a);
+        w.dlam12 = v.m12b;
+        w.dlam12 *= _f1 / (w.calp2 * cbet2);
+      }
+    }
+
+    return w;
+  }
+
+  protected double A3f(double eps) {
+    // Evaluate sum(_A3x[k] * eps^k, k, 0, nA3x_-1) by Horner's method
+    double v = 0;
+    for (int i = nA3x_; i > 0; )
+      v = eps * v + _A3x[--i];
+    return v;
+  }
+
+  protected void C3f(double eps, double c[]) {
+    // Evaluate C3 coeffs by Horner's method
+    // Elements c[1] thru c[nC3_ - 1] are set
+    for (int j = nC3x_, k = nC3_ - 1; k > 0; ) {
+      double t = 0;
+      for (int i = nC3_ - k; i > 0; --i)
+        t = eps * t + _C3x[--j];
+      c[k--] = t;
+    }
+
+    double mult = 1;
+    for (int k = 1; k < nC3_; ) {
+      mult *= eps;
+      c[k++] *= mult;
+    }
+  }
+
+  protected void C4f(double eps, double c[]) {
+    // Evaluate C4 coeffs by Horner's method
+    // Elements c[0] thru c[nC4_ - 1] are set
+    for (int j = nC4x_, k = nC4_; k > 0; ) {
+      double t = 0;
+      for (int i = nC4_ - k + 1; i > 0; --i)
+        t = eps * t + _C4x[--j];
+      c[--k] = t;
+    }
+
+    double mult = 1;
+    for (int k = 1; k < nC4_; ) {
+      mult *= eps;
+      c[k++] *= mult;
+    }
+  }
+
+  // Generated by Maxima on 2010-09-04 10:26:17-04:00
+
+  // The scale factor A1-1 = mean value of (d/dsigma)I1 - 1
+  protected static double A1m1f(double eps) {
+    double
+      eps2 = GeoMath.sq(eps),
+      t;
+    t = eps2*(eps2*(eps2+4)+64)/256;
+    return (t + eps) / (1 - eps);
+  }
+
+  // The coefficients C1[l] in the Fourier expansion of B1
+  protected static void C1f(double eps, double c[]) {
+    double
+      eps2 = GeoMath.sq(eps),
+      d = eps;
+    c[1] = d*((6-eps2)*eps2-16)/32;
+    d *= eps;
+    c[2] = d*((64-9*eps2)*eps2-128)/2048;
+    d *= eps;
+    c[3] = d*(9*eps2-16)/768;
+    d *= eps;
+    c[4] = d*(3*eps2-5)/512;
+    d *= eps;
+    c[5] = -7*d/1280;
+    d *= eps;
+    c[6] = -7*d/2048;
+  }
+
+  // The coefficients C1p[l] in the Fourier expansion of B1p
+  protected static void C1pf(double eps, double c[]) {
+    double
+      eps2 = GeoMath.sq(eps),
+      d = eps;
+    c[1] = d*(eps2*(205*eps2-432)+768)/1536;
+    d *= eps;
+    c[2] = d*(eps2*(4005*eps2-4736)+3840)/12288;
+    d *= eps;
+    c[3] = d*(116-225*eps2)/384;
+    d *= eps;
+    c[4] = d*(2695-7173*eps2)/7680;
+    d *= eps;
+    c[5] = 3467*d/7680;
+    d *= eps;
+    c[6] = 38081*d/61440;
+  }
+
+  // The scale factor A2-1 = mean value of (d/dsigma)I2 - 1
+  protected static double A2m1f(double eps) {
+    double
+      eps2 = GeoMath.sq(eps),
+      t;
+    t = eps2*(eps2*(25*eps2+36)+64)/256;
+    return t * (1 - eps) - eps;
+  }
+
+  // The coefficients C2[l] in the Fourier expansion of B2
+  protected static void C2f(double eps, double c[]) {
+    double
+      eps2 = GeoMath.sq(eps),
+      d = eps;
+    c[1] = d*(eps2*(eps2+2)+16)/32;
+    d *= eps;
+    c[2] = d*(eps2*(35*eps2+64)+384)/2048;
+    d *= eps;
+    c[3] = d*(15*eps2+80)/768;
+    d *= eps;
+    c[4] = d*(7*eps2+35)/512;
+    d *= eps;
+    c[5] = 63*d/1280;
+    d *= eps;
+    c[6] = 77*d/2048;
+  }
+
+  // The scale factor A3 = mean value of (d/dsigma)I3
+  protected void A3coeff() {
+    _A3x[0] = 1;
+    _A3x[1] = (_n-1)/2;
+    _A3x[2] = (_n*(3*_n-1)-2)/8;
+    _A3x[3] = ((-_n-3)*_n-1)/16;
+    _A3x[4] = (-2*_n-3)/64;
+    _A3x[5] = -3/128.0;
+  }
+
+  // The coefficients C3[l] in the Fourier expansion of B3
+  protected void C3coeff() {
+    _C3x[0] = (1-_n)/4;
+    _C3x[1] = (1-_n*_n)/8;
+    _C3x[2] = ((3-_n)*_n+3)/64;
+    _C3x[3] = (2*_n+5)/128;
+    _C3x[4] = 3/128.0;
+    _C3x[5] = ((_n-3)*_n+2)/32;
+    _C3x[6] = ((-3*_n-2)*_n+3)/64;
+    _C3x[7] = (_n+3)/128;
+    _C3x[8] = 5/256.0;
+    _C3x[9] = (_n*(5*_n-9)+5)/192;
+    _C3x[10] = (9-10*_n)/384;
+    _C3x[11] = 7/512.0;
+    _C3x[12] = (7-14*_n)/512;
+    _C3x[13] = 7/512.0;
+    _C3x[14] = 21/2560.0;
+  }
+
+  // Generated by Maxima on 2012-10-19 08:02:34-04:00
+
+  // The coefficients C4[l] in the Fourier expansion of I4
+  protected void C4coeff() {
+    _C4x[0] = (_n*(_n*(_n*(_n*(100*_n+208)+572)+3432)-12012)+30030)/45045;
+    _C4x[1] = (_n*(_n*(_n*(64*_n+624)-4576)+6864)-3003)/15015;
+    _C4x[2] = (_n*((14144-10656*_n)*_n-4576)-858)/45045;
+    _C4x[3] = ((-224*_n-4784)*_n+1573)/45045;
+    _C4x[4] = (1088*_n+156)/45045;
+    _C4x[5] = 97/15015.0;
+    _C4x[6] = (_n*(_n*((-64*_n-624)*_n+4576)-6864)+3003)/135135;
+    _C4x[7] = (_n*(_n*(5952*_n-11648)+9152)-2574)/135135;
+    _C4x[8] = (_n*(5792*_n+1040)-1287)/135135;
+    _C4x[9] = (468-2944*_n)/135135;
+    _C4x[10] = 1/9009.0;
+    _C4x[11] = (_n*((4160-1440*_n)*_n-4576)+1716)/225225;
+    _C4x[12] = ((4992-8448*_n)*_n-1144)/225225;
+    _C4x[13] = (1856*_n-936)/225225;
+    _C4x[14] = 8/10725.0;
+    _C4x[15] = (_n*(3584*_n-3328)+1144)/315315;
+    _C4x[16] = (1024*_n-208)/105105;
+    _C4x[17] = -136/63063.0;
+    _C4x[18] = (832-2560*_n)/405405;
+    _C4x[19] = -128/135135.0;
+    _C4x[20] = 128/99099.0;
+  }
+}
diff --git a/java/src/main/java/net/sf/geographiclib/GeodesicData.java b/java/src/main/java/net/sf/geographiclib/GeodesicData.java
new file mode 100644
index 0000000..1a667a5
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/GeodesicData.java
@@ -0,0 +1,78 @@
+/**
+ * Implementation of the net.sf.geographiclib.GeodesicData class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * The results of geodesic calculations.
+ *
+ * This is used to return the results for a geodesic between point 1
+ * (<i>lat1</i>, <i>lon1</i>) and point 2 (<i>lat2</i>, <i>lon2</i>).  Fields
+ * that have not been set will be filled with Double.NaN.  The returned
+ * GeodesicData objects always include the parameters provided to {@link
+ * Geodesic#Direct(double, double, double, double) Geodesic.Direct} and {@link
+ * Geodesic#Inverse(double, double, double, double) Geodesic.Inverse} and it
+ * always includes the field <i>a12</i>.
+ **********************************************************************/
+public class GeodesicData {
+  /**
+   * latitude of point 1 (degrees).
+   **********************************************************************/
+  public double lat1;
+  /**
+   * longitude of point 1 (degrees).
+   **********************************************************************/
+  public double lon1;
+  /**
+   * azimuth at point 1 (degrees).
+   **********************************************************************/
+  public double azi1;
+  /**
+   * latitude of point 2 (degrees).
+   **********************************************************************/
+  public double lat2;
+  /**
+   * longitude of point 2 (degrees).
+   **********************************************************************/
+  public double lon2;
+  /**
+   * azimuth at point 2 (degrees).
+   **********************************************************************/
+  public double azi2;
+  /**
+   * distance between point 1 and point 2 (meters).
+   **********************************************************************/
+  public double s12;
+  /**
+   * arc length on the auxiliary sphere between point 1 and point 2
+   *   (degrees).
+   **********************************************************************/
+  public double a12;
+  /**
+   * reduced length of geodesic (meters).
+   **********************************************************************/
+  public double m12;
+  /**
+   * geodesic scale of point 2 relative to point 1 (dimensionless).
+   **********************************************************************/
+  public double M12;
+  /**
+   * geodesic scale of point 1 relative to point 2 (dimensionless).
+   **********************************************************************/
+  public double M21;
+  /**
+   * area under the geodesic (meters<sup>2</sup>).
+   **********************************************************************/
+  public double S12;
+  /**
+   * Initialize all the fields to Double.NaN.
+   **********************************************************************/
+  public GeodesicData() {
+    lat1 = lon1 = azi1 = lat2 = lon2 = azi2 =
+      s12 = a12 = m12 = M12 = M21 = S12 = Double.NaN;
+  }
+}
diff --git a/java/src/main/java/net/sf/geographiclib/GeodesicLine.java b/java/src/main/java/net/sf/geographiclib/GeodesicLine.java
new file mode 100644
index 0000000..61d29de
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/GeodesicLine.java
@@ -0,0 +1,632 @@
+/**
+ * Implementation of the net.sf.geographiclib.GeodesicLine class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * A geodesic line.
+ * <p>
+ * GeodesicLine facilitates the determination of a series of points on a single
+ * geodesic.  The starting point (<i>lat1</i>, <i>lon1</i>) and the azimuth
+ * <i>azi1</i> are specified in the constructor.  {@link #Position Position}
+ * returns the location of point 2 a distance <i>s12</i> along the geodesic.
+ * Alternatively {@link #ArcPosition ArcPosition} gives the position of point 2
+ * an arc length <i>a12</i> along the geodesic.
+ * <p>
+ * The calculations are accurate to better than 15 nm (15 nanometers).  See
+ * Sec. 9 of
+ * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for
+ * details.  The algorithms used by this class are based on series expansions
+ * using the flattening <i>f</i> as a small parameter.  These are only accurate
+ * for |<i>f</i>| < 0.02; however reasonably accurate results will be
+ * obtained for |<i>f</i>| < 0.2.
+ * <p>
+ * The algorithms are described in
+ * <ul>
+ * <li>
+ *   C. F. F. Karney,
+ *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+ *   Algorithms for geodesics</a>,
+ *   J. Geodesy <b>87</b>, 43–55 (2013);
+ *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+ *   10.1007/s00190-012-0578-z</a>;
+ *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+ *   geod-addenda.html</a>.
+ * </ul>
+ * <p>
+ * Here's an example of using this class
+ * <pre>
+ * {@code
+ * import net.sf.geographiclib.*;
+ * public class GeodesicLineTest {
+ *   public static void main(String[] args) {
+ *     // Print waypoints between JFK and SIN
+ *     Geodesic geod = Geodesic.WGS84;
+ *     double
+ *       lat1 = 40.640, lon1 = -73.779, // JFK
+ *       lat2 =  1.359, lon2 = 103.989; // SIN
+ *     GeodesicData g = geod.Inverse(lat1, lon1, lat2, lon2,
+ *                  GeodesicMask.DISTANCE | GeodesicMask.AZIMUTH);
+ *     GeodesicLine line = new GeodesicLine(geod, lat1, lon1, g.azi1,
+ *                  GeodesicMask.DISTANCE_IN | GeodesicMask.LONGITUDE);
+ *     double
+ *       s12 = g.s12,
+ *       a12 = g.a12,
+ *       ds0 = 500e3;        // Nominal distance between points = 500 km
+ *     int num = (int)(Math.ceil(s12 / ds0)); // The number of intervals
+ *     {
+ *       // Use intervals of equal length
+ *       double ds = s12 / num;
+ *       for (int i = 0; i <= num; ++i) {
+ *         g = line.Position(i * ds,
+ *                  GeodesicMask.LATITUDE | GeodesicMask.LONGITUDE);
+ *         System.out.println(i + " " + g.lat2 + " " + g.lon2);
+ *       }
+ *     }
+ *     {
+ *       // Slightly faster, use intervals of equal arc length
+ *       double da = a12 / num;
+ *       for (int i = 0; i <= num; ++i) {
+ *         g = line.ArcPosition(i * da,
+ *                  GeodesicMask.LATITUDE | GeodesicMask.LONGITUDE);
+ *         System.out.println(i + " " + g.lat2 + " " + g.lon2);
+ *       }
+ *     }
+ *   }
+ * }}</pre>
+ **********************************************************************/
+public class GeodesicLine {
+
+  private static final int nC1_ = Geodesic.nC1_;
+  private static final int nC1p_ = Geodesic.nC1p_;
+  private static final int nC2_ = Geodesic.nC2_;
+  private static final int nC3_ = Geodesic.nC3_;
+  private static final int nC4_ = Geodesic.nC4_;
+
+  private double _lat1, _lon1, _azi1;
+  private double _a, _f, _b, _c2, _f1, _salp0, _calp0, _k2,
+    _salp1, _calp1, _ssig1, _csig1, _dn1, _stau1, _ctau1, _somg1, _comg1,
+    _A1m1, _A2m1, _A3c, _B11, _B21, _B31, _A4, _B41;
+  // index zero elements of _C1a, _C1pa, _C2a, _C3a are unused
+  private double _C1a[], _C1pa[], _C2a[], _C3a[],
+    _C4a[];    // all the elements of _C4a are used
+  private int _caps;
+
+  /**
+   * Constructor for a geodesic line staring at latitude <i>lat1</i>, longitude
+   * <i>lon1</i>, and azimuth <i>azi1</i> (all in degrees).
+   * <p>
+   * @param g A {@link Geodesic} object used to compute the necessary
+   *   information about the GeodesicLine.
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param azi1 azimuth at point 1 (degrees).
+   * <p>
+   * <i>lat1</i> should be in the range [−90°, 90°]; <i>lon1</i>
+   * and <i>azi1</i> should be in the range [−540°, 540°).
+   * <p>
+   * If the point is at a pole, the azimuth is defined by keeping <i>lon1</i>
+   * fixed, writing <i>lat1</i> = ±(90° − ε), and
+   * taking the limit ε → 0+.
+   **********************************************************************/
+  public GeodesicLine(Geodesic g,
+                      double lat1, double lon1, double azi1) {
+    this(g, lat1, lon1, azi1, GeodesicMask.ALL);
+  }
+
+  /**
+   * Constructor for a geodesic line staring at latitude <i>lat1</i>, longitude
+   * <i>lon1</i>, and azimuth <i>azi1</i> (all in degrees) with a subset of the
+   * capabilities included.
+   * <p>
+   * @param g A {@link Geodesic} object used to compute the necessary
+   *   information about the GeodesicLine.
+   * @param lat1 latitude of point 1 (degrees).
+   * @param lon1 longitude of point 1 (degrees).
+   * @param azi1 azimuth at point 1 (degrees).
+   * @param caps bitor'ed combination of {@link GeodesicMask} values
+   *   specifying the capabilities the GeodesicLine object should possess,
+   *   i.e., which quantities can be returned in calls to {@link #Position
+   *   Position}.
+   * <p>
+   * The {@link GeodesicMask} values are
+   * <ul>
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.LATITUDE for the latitude <i>lat2</i>; this
+   *   is added automatically;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.LONGITUDE for the latitude <i>lon2</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.AZIMUTH for the latitude <i>azi2</i>; this
+   *   is added automatically;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.DISTANCE for the distance <i>s12</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.REDUCEDLENGTH for the reduced length
+   *   <i>m12</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.GEODESICSCALE for the geodesic scales
+   *   <i>M12</i> and <i>M21</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.AREA for the area <i>S12</i>;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.DISTANCE_IN permits the length of the
+   *   geodesic to be given in terms of <i>s12</i>; without this capability the
+   *   length can only be specified in terms of arc length;
+   * <li>
+   *   <i>caps</i> |= GeodesicMask.ALL for all of the above;
+   * </ul>
+   **********************************************************************/
+  public GeodesicLine(Geodesic g,
+                      double lat1, double lon1, double azi1,
+                      int caps) {
+    _a = g._a;
+    _f = g._f;
+    _b = g._b;
+    _c2 = g._c2;
+    _f1 = g._f1;
+    // Always allow latitude and azimuth
+    _caps = caps | GeodesicMask.LATITUDE | GeodesicMask.AZIMUTH;
+
+    // Guard against underflow in salp0
+    azi1 = Geodesic.AngRound(GeoMath.AngNormalize(azi1));
+    lon1 = GeoMath.AngNormalize(lon1);
+    _lat1 = lat1;
+    _lon1 = lon1;
+    _azi1 = azi1;
+    // alp1 is in [0, pi]
+    double alp1 = azi1 * GeoMath.degree;
+    // Enforce sin(pi) == 0 and cos(pi/2) == 0.  Better to face the ensuing
+    // problems directly than to skirt them.
+    _salp1 =          azi1  == -180 ? 0 : Math.sin(alp1);
+    _calp1 = Math.abs(azi1) ==   90 ? 0 : Math.cos(alp1);
+    double cbet1, sbet1, phi;
+    phi = lat1 * GeoMath.degree;
+    // Ensure cbet1 = +epsilon at poles
+    sbet1 = _f1 * Math.sin(phi);
+    cbet1 = Math.abs(lat1) == 90 ? Geodesic.tiny_ : Math.cos(phi);
+    { Pair p = Geodesic.SinCosNorm(sbet1, cbet1);
+      sbet1 = p.first; cbet1 = p.second; }
+    _dn1 = Math.sqrt(1 + g._ep2 * GeoMath.sq(sbet1));
+
+    // Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0),
+    _salp0 = _salp1 * cbet1; // alp0 in [0, pi/2 - |bet1|]
+    // Alt: calp0 = hypot(sbet1, calp1 * cbet1).  The following
+    // is slightly better (consider the case salp1 = 0).
+    _calp0 = GeoMath.hypot(_calp1, _salp1 * sbet1);
+    // Evaluate sig with tan(bet1) = tan(sig1) * cos(alp1).
+    // sig = 0 is nearest northward crossing of equator.
+    // With bet1 = 0, alp1 = pi/2, we have sig1 = 0 (equatorial line).
+    // With bet1 =  pi/2, alp1 = -pi, sig1 =  pi/2
+    // With bet1 = -pi/2, alp1 =  0 , sig1 = -pi/2
+    // Evaluate omg1 with tan(omg1) = sin(alp0) * tan(sig1).
+    // With alp0 in (0, pi/2], quadrants for sig and omg coincide.
+    // No atan2(0,0) ambiguity at poles since cbet1 = +epsilon.
+    // With alp0 = 0, omg1 = 0 for alp1 = 0, omg1 = pi for alp1 = pi.
+    _ssig1 = sbet1; _somg1 = _salp0 * sbet1;
+    _csig1 = _comg1 = sbet1 != 0 || _calp1 != 0 ? cbet1 * _calp1 : 1;
+    { Pair p = Geodesic.SinCosNorm(_ssig1, _csig1);
+      _ssig1 = p.first; _csig1 = p.second; } // sig1 in (-pi, pi]
+    // Geodesic.SinCosNorm(_somg1, _comg1); -- don't need to normalize!
+
+    _k2 = GeoMath.sq(_calp0) * g._ep2;
+    double eps = _k2 / (2 * (1 + Math.sqrt(1 + _k2)) + _k2);
+
+    if ((_caps & GeodesicMask.CAP_C1) != 0) {
+      _A1m1 = Geodesic.A1m1f(eps);
+      _C1a = new double[nC1_ + 1];
+      Geodesic.C1f(eps, _C1a);
+      _B11 = Geodesic.SinCosSeries(true, _ssig1, _csig1, _C1a);
+      double s = Math.sin(_B11), c = Math.cos(_B11);
+      // tau1 = sig1 + B11
+      _stau1 = _ssig1 * c + _csig1 * s;
+      _ctau1 = _csig1 * c - _ssig1 * s;
+      // Not necessary because C1pa reverts C1a
+      //    _B11 = -SinCosSeries(true, _stau1, _ctau1, _C1pa, nC1p_);
+    }
+
+    if ((_caps & GeodesicMask.CAP_C1p) != 0) {
+      _C1pa = new double[nC1p_ + 1];
+      Geodesic.C1pf(eps, _C1pa);
+    }
+
+    if ((_caps & GeodesicMask.CAP_C2) != 0) {
+      _C2a = new double[nC2_ + 1];
+      _A2m1 = Geodesic.A2m1f(eps);
+      Geodesic.C2f(eps, _C2a);
+      _B21 = Geodesic.SinCosSeries(true, _ssig1, _csig1, _C2a);
+    }
+
+    if ((_caps & GeodesicMask.CAP_C3) != 0) {
+      _C3a = new double[nC3_];
+      g.C3f(eps, _C3a);
+      _A3c = -_f * _salp0 * g.A3f(eps);
+      _B31 = Geodesic.SinCosSeries(true, _ssig1, _csig1, _C3a);
+    }
+
+    if ((_caps & GeodesicMask.CAP_C4) != 0) {
+      _C4a = new double[nC4_];
+      g.C4f(eps, _C4a);
+      // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0)
+      _A4 = GeoMath.sq(_a) * _calp0 * _salp0 * g._e2;
+      _B41 = Geodesic.SinCosSeries(false, _ssig1, _csig1, _C4a);
+    }
+  }
+
+  /**
+   * A default constructor.  If GeodesicLine.Position is called on the
+   * resulting object, it returns immediately (without doing any calculations).
+   * The object can be set with a call to {@link Geodesic.Line}.  Use {@link
+   * Init()} to test whether object is still in this uninitialized state.
+   * (This constructor was useful in C++, e.g., to allow vectors of
+   * GeodesicLine objects.  It may not be needed in Java, so make it private.)
+   **********************************************************************/
+  private GeodesicLine() { _caps = 0; }
+
+  /**
+   * Compute the position of point 2 which is a distance <i>s12</i> (meters)
+   * from point 1.
+   * <p>
+   * @param s12 distance between point 1 and point 2 (meters); it can be
+   *   negative.
+   * @return a {@link GeodesicData} object with the following fields:
+   *   <i>lat1</i>, <i>lon1</i>, <i>azi1</i>, <i>lat2</i>, <i>lon2</i>,
+   *   <i>azi2</i>, <i>s12</i>, <i>a12</i>.  Some of these results may be
+   *   missing if the GeodesicLine did not include the relevant capability.
+   * <p>
+   * The values of <i>lon2</i> and <i>azi2</i> returned are in the range
+   * [−180°, 180°).
+   * <p>
+   * The GeodesicLine object <i>must</i> have been constructed with <i>caps</i>
+   * |= {@link GeodesicMask#DISTANCE_IN}; otherwise no parameters are set.
+   **********************************************************************/
+  public GeodesicData Position(double s12) {
+    return Position(false, s12,
+                    GeodesicMask.LATITUDE | GeodesicMask.LONGITUDE |
+                    GeodesicMask.AZIMUTH);
+  }
+  /**
+   * Compute the position of point 2 which is a distance <i>s12</i> (meters)
+   * from point 1 and with a subset of the geodesic results returned.
+   * <p>
+   * @param s12 distance between point 1 and point 2 (meters); it can be
+   *   negative.
+   * @param outmask a bitor'ed combination of {@link GeodesicMask} values
+   *   specifying which results should be returned.
+   * @return a {@link GeodesicData} object including the requested results.
+   * <p>
+   * The GeodesicLine object <i>must</i> have been constructed with <i>caps</i>
+   * |= {@link GeodesicMask#DISTANCE_IN}; otherwise no parameters are set.
+   * Requesting a value which the GeodesicLine object is not capable of
+   * computing is not an error (no parameters will be set).
+   **********************************************************************/
+  public GeodesicData Position(double s12, int outmask) {
+    return Position(false, s12, outmask);
+  }
+
+  /**
+   * Compute the position of point 2 which is an arc length <i>a12</i>
+   * (degrees) from point 1.
+   * <p>
+   * @param a12 arc length between point 1 and point 2 (degrees); it can
+   *   be negative.
+   * @return a {@link GeodesicData} object with the following fields:
+   *   <i>lat1</i>, <i>lon1</i>, <i>azi1</i>, <i>lat2</i>, <i>lon2</i>,
+   *   <i>azi2</i>, <i>s12</i>, <i>a12</i>.  Some of these results may be
+   *   missing if the GeodesicLine did not include the relevant capability.
+   * <p>
+   * The values of <i>lon2</i> and <i>azi2</i> returned are in the range
+   * [−180°, 180°).
+   * <p>
+   * The GeodesicLine object <i>must</i> have been constructed with <i>caps</i>
+   * |= {@link GeodesicMask#DISTANCE_IN}; otherwise no parameters are set.
+   **********************************************************************/
+  public GeodesicData ArcPosition(double a12) {
+    return Position(true, a12,
+                    GeodesicMask.LATITUDE | GeodesicMask.LONGITUDE |
+                    GeodesicMask.AZIMUTH | GeodesicMask.DISTANCE);
+  }
+  /**
+   * Compute the position of point 2 which is an arc length <i>a12</i>
+   * (degrees) from point 1 and with a subset of the geodesic results returned.
+   * <p>
+   * @param a12 arc length between point 1 and point 2 (degrees); it can
+   *   be negative.
+   * @param outmask a bitor'ed combination of {@link GeodesicMask} values
+   *   specifying which results should be returned.
+   * @return a {@link GeodesicData} object giving <i>lat1</i>, <i>lon2</i>,
+   *   <i>azi2</i>, and <i>a12</i>.
+   * <p>
+   * The GeodesicLine object <i>must</i> have been constructed with <i>caps</i>
+   * |= {@link GeodesicMask#DISTANCE_IN}; otherwise no parameters are set.
+   * Requesting a value which the GeodesicLine object is not capable of
+   * computing is not an error (no parameters will be set).
+   **********************************************************************/
+  public GeodesicData ArcPosition(double a12, int outmask) {
+    return Position(true, a12, outmask);
+  }
+
+  /**
+   * The general position function.  {@link #Position(double, int) Position}
+   * and {@link #ArcPosition(double, int) ArcPosition} are defined in terms of
+   * this function.
+   * <p>
+   * @param arcmode boolean flag determining the meaning of the second
+   *   parameter; if arcmode is false, then the GeodesicLine object must have
+   *   been constructed with <i>caps</i> |= {@link GeodesicMask#DISTANCE_IN}.
+   * @param s12_a12 if <i>arcmode</i> is false, this is the distance between
+   *   point 1 and point 2 (meters); otherwise it is the arc length between
+   *   point 1 and point 2 (degrees); it can be negative.
+   * @param outmask a bitor'ed combination of {@link GeodesicMask} values
+   *   specifying which results should be returned.
+   * @return a {@link GeodesicData} object with the requested results.
+   * <p>
+   * The {@link GeodesicMask} values possible for <i>outmask</i> are
+   * <ul>
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.LATITUDE for the latitude <i>lat2</i>.
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.LONGITUDE for the latitude <i>lon2</i>.
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.AZIMUTH for the latitude <i>azi2</i>.
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.DISTANCE for the distance <i>s12</i>.
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.REDUCEDLENGTH for the reduced length
+   *   <i>m12</i>.
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.GEODESICSCALE for the geodesic scales
+   *   <i>M12</i> and <i>M21</i>.
+   * <li>
+   *   <i>outmask</i> |= GeodesicMask.AREA for the area <i>S12</i>.
+   * </ul>
+   * <p>
+   * Requesting a value which the GeodesicLine object is not capable of
+   * computing is not an error; Double.NaN is returned instead.
+   **********************************************************************/
+  public GeodesicData Position(boolean arcmode, double s12_a12,
+                               int outmask) {
+    outmask &= _caps & GeodesicMask.OUT_ALL;
+    GeodesicData r = new GeodesicData();
+    if (!( Init() &&
+           (arcmode ||
+            (_caps & GeodesicMask.DISTANCE_IN & GeodesicMask.OUT_ALL) != 0) ))
+      // Uninitialized or impossible distance calculation requested
+      return r;
+    r.lat1 = _lat1; r.lon1 = _lon1; r.azi1 = _azi1;
+
+    // Avoid warning about uninitialized B12.
+    double sig12, ssig12, csig12, B12 = 0, AB1 = 0;
+    if (arcmode) {
+      // Interpret s12_a12 as spherical arc length
+      r.a12 = s12_a12;
+      sig12 = s12_a12 * GeoMath.degree;
+      double s12a = Math.abs(s12_a12);
+      s12a -= 180 * Math.floor(s12a / 180);
+      ssig12 = s12a ==  0 ? 0 : Math.sin(sig12);
+      csig12 = s12a == 90 ? 0 : Math.cos(sig12);
+    } else {
+      // Interpret s12_a12 as distance
+      r.s12 = s12_a12;
+      double
+        tau12 = s12_a12 / (_b * (1 + _A1m1)),
+        s = Math.sin(tau12),
+        c = Math.cos(tau12);
+      // tau2 = tau1 + tau12
+      B12 = - Geodesic.SinCosSeries(true,
+                                    _stau1 * c + _ctau1 * s,
+                                    _ctau1 * c - _stau1 * s,
+                                    _C1pa);
+      sig12 = tau12 - (B12 - _B11);
+      r.a12 = sig12 / GeoMath.degree;
+      ssig12 = Math.sin(sig12); csig12 = Math.cos(sig12);
+      if (Math.abs(_f) > 0.01) {
+        // Reverted distance series is inaccurate for |f| > 1/100, so correct
+        // sig12 with 1 Newton iteration.  The following table shows the
+        // approximate maximum error for a = WGS_a() and various f relative to
+        // GeodesicExact.
+        //     erri = the error in the inverse solution (nm)
+        //     errd = the error in the direct solution (series only) (nm)
+        //     errda = the error in the direct solution (series + 1 Newton) (nm)
+        //
+        //       f     erri  errd errda
+        //     -1/5    12e6 1.2e9  69e6
+        //     -1/10  123e3  12e6 765e3
+        //     -1/20   1110 108e3  7155
+        //     -1/50  18.63 200.9 27.12
+        //     -1/100 18.63 23.78 23.37
+        //     -1/150 18.63 21.05 20.26
+        //      1/150 22.35 24.73 25.83
+        //      1/100 22.35 25.03 25.31
+        //      1/50  29.80 231.9 30.44
+        //      1/20   5376 146e3  10e3
+        //      1/10  829e3  22e6 1.5e6
+        //      1/5   157e6 3.8e9 280e6
+        double
+          ssig2 = _ssig1 * csig12 + _csig1 * ssig12,
+          csig2 = _csig1 * csig12 - _ssig1 * ssig12;
+        B12 = Geodesic.SinCosSeries(true, ssig2, csig2, _C1a);
+        double serr = (1 + _A1m1) * (sig12 + (B12 - _B11)) - s12_a12 / _b;
+        sig12 = sig12 - serr / Math.sqrt(1 + _k2 * GeoMath.sq(ssig2));
+        ssig12 = Math.sin(sig12); csig12 = Math.cos(sig12);
+        // Update B12 below
+      }
+    }
+
+    double omg12, lam12, lon12;
+    double ssig2, csig2, sbet2, cbet2, somg2, comg2, salp2, calp2;
+    // sig2 = sig1 + sig12
+    ssig2 = _ssig1 * csig12 + _csig1 * ssig12;
+    csig2 = _csig1 * csig12 - _ssig1 * ssig12;
+    double dn2 = Math.sqrt(1 + _k2 * GeoMath.sq(ssig2));
+    if ((outmask & (GeodesicMask.DISTANCE | GeodesicMask.REDUCEDLENGTH |
+                    GeodesicMask.GEODESICSCALE)) != 0) {
+      if (arcmode || Math.abs(_f) > 0.01)
+        B12 = Geodesic.SinCosSeries(true, ssig2, csig2, _C1a);
+      AB1 = (1 + _A1m1) * (B12 - _B11);
+    }
+    // sin(bet2) = cos(alp0) * sin(sig2)
+    sbet2 = _calp0 * ssig2;
+    // Alt: cbet2 = hypot(csig2, salp0 * ssig2);
+    cbet2 = GeoMath.hypot(_salp0, _calp0 * csig2);
+    if (cbet2 == 0)
+      // I.e., salp0 = 0, csig2 = 0.  Break the degeneracy in this case
+      cbet2 = csig2 = Geodesic.tiny_;
+    // tan(omg2) = sin(alp0) * tan(sig2)
+    somg2 = _salp0 * ssig2; comg2 = csig2;  // No need to normalize
+    // tan(alp0) = cos(sig2)*tan(alp2)
+    salp2 = _salp0; calp2 = _calp0 * csig2; // No need to normalize
+    // omg12 = omg2 - omg1
+    omg12 = Math.atan2(somg2 * _comg1 - comg2 * _somg1,
+                  comg2 * _comg1 + somg2 * _somg1);
+
+    if ((outmask & GeodesicMask.DISTANCE) != 0 && arcmode)
+      r.s12 = _b * ((1 + _A1m1) * sig12 + AB1);
+
+    if ((outmask & GeodesicMask.LONGITUDE) != 0) {
+      lam12 = omg12 + _A3c *
+        ( sig12 + (Geodesic.SinCosSeries(true, ssig2, csig2, _C3a)
+                   - _B31));
+      lon12 = lam12 / GeoMath.degree;
+      // Use GeoMath.AngNormalize2 because longitude might have wrapped
+      // multiple times.
+      lon12 = GeoMath.AngNormalize2(lon12);
+      r.lon2 = GeoMath.AngNormalize(_lon1 + lon12);
+    }
+
+    if ((outmask & GeodesicMask.LATITUDE) != 0)
+      r.lat2 = Math.atan2(sbet2, _f1 * cbet2) / GeoMath.degree;
+
+    if ((outmask & GeodesicMask.AZIMUTH) != 0)
+      // minus signs give range [-180, 180). 0- converts -0 to +0.
+      r.azi2 = 0 - Math.atan2(-salp2, calp2) / GeoMath.degree;
+
+    if ((outmask &
+         (GeodesicMask.REDUCEDLENGTH | GeodesicMask.GEODESICSCALE)) != 0) {
+      double
+        B22 = Geodesic.SinCosSeries(true, ssig2, csig2, _C2a),
+        AB2 = (1 + _A2m1) * (B22 - _B21),
+        J12 = (_A1m1 - _A2m1) * sig12 + (AB1 - AB2);
+      if ((outmask & GeodesicMask.REDUCEDLENGTH) != 0)
+        // Add parens around (_csig1 * ssig2) and (_ssig1 * csig2) to ensure
+        // accurate cancellation in the case of coincident points.
+        r.m12 = _b * ((dn2 * (_csig1 * ssig2) - _dn1 * (_ssig1 * csig2))
+                    - _csig1 * csig2 * J12);
+      if ((outmask & GeodesicMask.GEODESICSCALE) != 0) {
+        double t = _k2 * (ssig2 - _ssig1) * (ssig2 + _ssig1) / (_dn1 + dn2);
+        r.M12 = csig12 + (t *  ssig2 -  csig2 * J12) * _ssig1 / _dn1;
+        r.M21 = csig12 - (t * _ssig1 - _csig1 * J12) *  ssig2 /  dn2;
+      }
+    }
+
+    if ((outmask & GeodesicMask.AREA) != 0) {
+      double
+        B42 = Geodesic.SinCosSeries(false, ssig2, csig2, _C4a);
+      double salp12, calp12;
+      if (_calp0 == 0 || _salp0 == 0) {
+        // alp12 = alp2 - alp1, used in atan2 so no need to normalized
+        salp12 = salp2 * _calp1 - calp2 * _salp1;
+        calp12 = calp2 * _calp1 + salp2 * _salp1;
+        // The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+        // salp12 = -0 and alp12 = -180.  However this depends on the sign
+        // being attached to 0 correctly.  The following ensures the correct
+        // behavior.
+        if (salp12 == 0 && calp12 < 0) {
+          salp12 = Geodesic.tiny_ * _calp1;
+          calp12 = -1;
+        }
+      } else {
+        // tan(alp) = tan(alp0) * sec(sig)
+        // tan(alp2-alp1) = (tan(alp2) -tan(alp1)) / (tan(alp2)*tan(alp1)+1)
+        // = calp0 * salp0 * (csig1-csig2) / (salp0^2 + calp0^2 * csig1*csig2)
+        // If csig12 > 0, write
+        //   csig1 - csig2 = ssig12 * (csig1 * ssig12 / (1 + csig12) + ssig1)
+        // else
+        //   csig1 - csig2 = csig1 * (1 - csig12) + ssig12 * ssig1
+        // No need to normalize
+        salp12 = _calp0 * _salp0 *
+          (csig12 <= 0 ? _csig1 * (1 - csig12) + ssig12 * _ssig1 :
+           ssig12 * (_csig1 * ssig12 / (1 + csig12) + _ssig1));
+        calp12 = GeoMath.sq(_salp0) + GeoMath.sq(_calp0) * _csig1 * csig2;
+      }
+      r.S12 = _c2 * Math.atan2(salp12, calp12) + _A4 * (B42 - _B41);
+    }
+
+    return r;
+  }
+
+  /**
+   * @return true if the object has been initialized.
+   **********************************************************************/
+  private boolean Init() { return _caps != 0; }
+
+  /**
+   * @return <i>lat1</i> the latitude of point 1 (degrees).
+   **********************************************************************/
+  public double Latitude()
+  { return Init() ? _lat1 : Double.NaN; }
+
+  /**
+   * @return <i>lon1</i> the longitude of point 1 (degrees).
+   **********************************************************************/
+  public double Longitude()
+  { return Init() ? _lon1 : Double.NaN; }
+
+  /**
+   * @return <i>azi1</i> the azimuth (degrees) of the geodesic line at point 1.
+   **********************************************************************/
+  public double Azimuth()
+  { return Init() ? _azi1 : Double.NaN; }
+
+  /**
+   * @return <i>azi0</i> the azimuth (degrees) of the geodesic line as it
+   *   crosses the equator in a northward direction.
+   **********************************************************************/
+  public double EquatorialAzimuth() {
+    return Init() ?
+      Math.atan2(_salp0, _calp0) / GeoMath.degree : Double.NaN;
+  }
+
+  /**
+   * @return <i>a1</i> the arc length (degrees) between the northward
+   *   equatorial crossing and point 1.
+   **********************************************************************/
+  public double EquatorialArc() {
+    return Init() ?
+      Math.atan2(_ssig1, _csig1) / GeoMath.degree : Double.NaN;
+  }
+
+  /**
+   * @return <i>a</i> the equatorial radius of the ellipsoid (meters).  This is
+   *   the value inherited from the Geodesic object used in the constructor.
+   **********************************************************************/
+  public double MajorRadius()
+  { return Init() ? _a : Double.NaN; }
+
+  /**
+   * @return <i>f</i> the flattening of the ellipsoid.  This is the value
+   *   inherited from the Geodesic object used in the constructor.
+   **********************************************************************/
+  public double Flattening()
+  { return Init() ? _f : Double.NaN; }
+
+  /**
+   * @return <i>caps</i> the computational capabilities that this object was
+   *   constructed with.  LATITUDE and AZIMUTH are always included.
+   **********************************************************************/
+  public int Capabilities() { return _caps; }
+
+  /**
+   * @param testcaps a set of bitor'ed {@link GeodesicMask} values.
+   * @return true if the GeodesicLine object has all these capabilities.
+   **********************************************************************/
+  public boolean Capabilities(int testcaps) {
+    testcaps &= GeodesicMask.OUT_ALL;
+    return (_caps & testcaps) == testcaps;
+  }
+
+}
diff --git a/java/src/main/java/net/sf/geographiclib/GeodesicMask.java b/java/src/main/java/net/sf/geographiclib/GeodesicMask.java
new file mode 100644
index 0000000..6b72ea7
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/GeodesicMask.java
@@ -0,0 +1,77 @@
+/**
+ * Implementation of the net.sf.geographiclib.GeodesicMask class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * Bit masks for what geodesic calculations to do.
+ * <p>
+ * These masks do double duty.  They specify (via the <i>outmask</i> parameter)
+ * which results to return in the {@link GeodesicData} object returned by the
+ * general routines {@link Geodesic#Direct(double, double, double, double, int)
+ * Geodesic.Direct} and {@link Geodesic#Inverse(double, double, double, double,
+ * int) Geodesic.Inverse} routines.  They also signify (via the <i>caps</i>
+ * parameter) to the {@link GeodesicLine#GeodesicLine(Geodesic, double, double,
+ * double, int) GeodesicLine.GeodesicLine} constructor and to {@link
+ * Geodesic#Line(double, double, double, int) Geodesic.Line} what capabilities
+ * should be included in the {@link GeodesicLine} object.
+ **********************************************************************/
+public class GeodesicMask {
+  protected static final int CAP_NONE = 0;
+  protected static final int CAP_C1   = 1<<0;
+  protected static final int CAP_C1p  = 1<<1;
+  protected static final int CAP_C2   = 1<<2;
+  protected static final int CAP_C3   = 1<<3;
+  protected static final int CAP_C4   = 1<<4;
+  protected static final int CAP_ALL  = 0x1F;
+  protected static final int OUT_ALL  = 0x7F80;
+
+  /**
+   * No capabilities, no output.
+   **********************************************************************/
+  public static final int NONE          = 0;
+  /**
+   * Calculate latitude <i>lat2</i>.  (It's not necessary to include this as a
+   * capability to {@link GeodesicLine} because this is included by default.)
+   **********************************************************************/
+  public static final int LATITUDE      = 1<<7  | CAP_NONE;
+  /**
+   * Calculate longitude <i>lon2</i>.
+   **********************************************************************/
+  public static final int LONGITUDE     = 1<<8  | CAP_C3;
+  /**
+   * Calculate azimuths <i>azi1</i> and <i>azi2</i>.  (It's not necessary to
+   * include this as a capability to {@link GeodesicLine} because this is
+   * included by default.)
+   **********************************************************************/
+  public static final int AZIMUTH       = 1<<9  | CAP_NONE;
+  /**
+   * Calculate distance <i>s12</i>.
+   **********************************************************************/
+  public static final int DISTANCE      = 1<<10 | CAP_C1;
+  /**
+   * Allow distance <i>s12</i> to be used as <i>input</i> in the direct
+   * geodesic problem.
+   **********************************************************************/
+  public static final int DISTANCE_IN   = 1<<11 | CAP_C1 | CAP_C1p;
+  /**
+   * Calculate reduced length <i>m12</i>.
+   **********************************************************************/
+  public static final int REDUCEDLENGTH = 1<<12 | CAP_C1 | CAP_C2;
+  /**
+   * Calculate geodesic scales <i>M12</i> and <i>M21</i>.
+   **********************************************************************/
+  public static final int GEODESICSCALE = 1<<13 | CAP_C1 | CAP_C2;
+  /**
+   * Calculate area <i>S12</i>.
+   **********************************************************************/
+  public static final int AREA          = 1<<14 | CAP_C4;
+  /**
+   * All capabilities, calculate everything.
+   **********************************************************************/
+  public static final int ALL           = OUT_ALL| CAP_ALL;
+}
diff --git a/java/src/main/java/net/sf/geographiclib/GeographicErr.java b/java/src/main/java/net/sf/geographiclib/GeographicErr.java
new file mode 100644
index 0000000..d437a00
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/GeographicErr.java
@@ -0,0 +1,24 @@
+/**
+ * Implementation of the net.sf.geographiclib.GeographicErr class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * Exception handling for GeographicLib.
+ * <p>
+ * A class to handle exceptions.  It's derived from RuntimeException so it
+ * can be caught by the usual catch clauses.
+ **********************************************************************/
+public class GeographicErr extends RuntimeException {
+  /**
+   * Constructor
+   * <p>
+   * @param msg a string message, which is accessible in the catch
+   *   clause via getMessage().
+   **********************************************************************/
+  public GeographicErr(String msg) { super(msg); }
+}
diff --git a/java/src/main/java/net/sf/geographiclib/Pair.java b/java/src/main/java/net/sf/geographiclib/Pair.java
new file mode 100644
index 0000000..1e1140b
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/Pair.java
@@ -0,0 +1,32 @@
+/**
+ * Implementation of the net.sf.geographiclib.Pair class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * A pair of double precision numbers.
+ * <p>
+ * This duplicates the C++ class {@code std::pair<double, double>}.
+ **********************************************************************/
+public class Pair {
+  /**
+   * The first member of the pair.
+   **********************************************************************/
+  public double first;
+  /**
+   * The second member of the pair.
+   **********************************************************************/
+  public double second;
+  /**
+   * Constructor
+   * <p>
+   * @param first the first member of the pair.
+   * @param second the second member of the pair.
+   **********************************************************************/
+  public Pair(double first, double second)
+  { this.first = first; this.second = second; }
+}
diff --git a/java/src/main/java/net/sf/geographiclib/PolygonArea.java b/java/src/main/java/net/sf/geographiclib/PolygonArea.java
new file mode 100644
index 0000000..75cb09a
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/PolygonArea.java
@@ -0,0 +1,383 @@
+/**
+ * Implementation of the net.sf.geographiclib.PolygonArea class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * Polygon areas.
+ * <p>
+ * This computes the area of a geodesic polygon using the method given
+ * Section 6 of
+ * <ul>
+ * <li>
+ *   C. F. F. Karney,
+ *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+ *   Algorithms for geodesics</a>,
+ *   J. Geodesy <b>87</b>, 43–55 (2013);
+ *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+ *   10.1007/s00190-012-0578-z</a>;
+ *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+ *   geod-addenda.html</a>.
+ * </ul>
+ * <p>
+ * This class lets you add vertices one at a time to the polygon.  The area
+ * and perimeter are accumulated in two times the standard floating point
+ * precision to guard against the loss of accuracy with many-sided polygons.
+ * At any point you can ask for the perimeter and area so far.  There's an
+ * option to treat the points as defining a polyline instead of a polygon; in
+ * that case, only the perimeter is computed.
+ * <p>
+ * Example of use:
+ * <pre>
+ * {@code
+ * // Compute the area of a geodesic polygon.
+ *
+ * // This program reads lines with lat, lon for each vertex of a polygon.
+ * // At the end of input, the program prints the number of vertices,
+ * // the perimeter of the polygon and its area (for the WGS84 ellipsoid).
+ *
+ * import java.util.*;
+ * import net.sf.geographiclib.*;
+ *
+ * public class Planimeter {
+ *   public static void main(String[] args) {
+ *     PolygonArea p = new PolygonArea(Geodesic.WGS84, false);
+ *     try {
+ *       Scanner in = new Scanner(System.in);
+ *       while (true) {
+ *         double lat = in.nextDouble(), lon = in.nextDouble();
+ *         p.AddPoint(lat, lon);
+ *       }
+ *     }
+ *     catch (Exception e) {}
+ *     PolygonResult r = p.Compute();
+ *     System.out.println(r.num + " " + r.perimeter + " " + r.area);
+ *   }
+ * }}</pre>
+ **********************************************************************/
+public class PolygonArea {
+
+  private Geodesic _earth;
+  private double _area0;        // Full ellipsoid area
+  private boolean _polyline;    // Assume polyline (don't close and skip area)
+  private int _mask;
+  private int _num;
+  private int _crossings;
+  private Accumulator _areasum, _perimetersum;
+  private double _lat0, _lon0, _lat1, _lon1;
+  private static int transit(double lon1, double lon2) {
+    // Return 1 or -1 if crossing prime meridian in east or west direction.
+    // Otherwise return zero.
+    // Compute lon12 the same way as Geodesic.Inverse.
+    lon1 = GeoMath.AngNormalize(lon1);
+    lon2 = GeoMath.AngNormalize(lon2);
+    double lon12 = GeoMath.AngDiff(lon1, lon2);
+    int cross =
+      lon1 < 0 && lon2 >= 0 && lon12 > 0 ? 1 :
+      (lon2 < 0 && lon1 >= 0 && lon12 < 0 ? -1 : 0);
+    return cross;
+  }
+
+  /**
+   * Constructor for PolygonArea.
+   * <p>
+   * @param earth the Geodesic object to use for geodesic calculations.
+   * @param polyline if true that treat the points as defining a polyline
+   *   instead of a polygon.
+   **********************************************************************/
+  public PolygonArea(Geodesic earth, boolean polyline) {
+    _earth = earth;
+    _area0 = _earth.EllipsoidArea();
+    _polyline = polyline;
+     _mask = GeodesicMask.LATITUDE | GeodesicMask.LONGITUDE |
+       GeodesicMask.DISTANCE |
+       (_polyline ? GeodesicMask.NONE : GeodesicMask.AREA);
+     _perimetersum = new Accumulator(0);
+     if (!_polyline)
+       _areasum = new Accumulator(0);
+     Clear();
+  }
+
+  /**
+   * Clear PolygonArea, allowing a new polygon to be started.
+   **********************************************************************/
+  public void Clear() {
+    _num = 0;
+    _crossings = 0;
+    _perimetersum.Set(0);
+    if (!_polyline) _areasum.Set(0);
+    _lat0 = _lon0 = _lat1 = _lon1 = Double.NaN;
+  }
+
+  /**
+   * Add a point to the polygon or polyline.
+   * <p>
+   * @param lat the latitude of the point (degrees).
+   * @param lon the latitude of the point (degrees).
+   * <p>
+   * <i>lat</i> should be in the range [−90°, 90°] and <i>lon</i>
+   * should be in the range [−540°, 540°).
+   **********************************************************************/
+  public void AddPoint(double lat, double lon) {
+    lon = GeoMath.AngNormalize(lon);
+    if (_num == 0) {
+      _lat0 = _lat1 = lat;
+      _lon0 = _lon1 = lon;
+    } else {
+      GeodesicData g = _earth.Inverse(_lat1, _lon1, lat, lon, _mask);
+      _perimetersum.Add(g.s12);
+      if (!_polyline) {
+        _areasum.Add(g.S12);
+        _crossings += transit(_lon1, lon);
+      }
+      _lat1 = lat; _lon1 = lon;
+    }
+    ++_num;
+  }
+
+  /**
+   * Add an edge to the polygon or polyline.
+   * <p>
+   * @param azi azimuth at current point (degrees).
+   * @param s distance from current point to next point (meters).
+   * <p>
+   * <i>azi</i> should be in the range [−540°, 540°).  This does
+   * nothing if no points have been added yet.  Use PolygonArea.CurrentPoint to
+   * determine the position of the new vertex.
+   **********************************************************************/
+  public void AddEdge(double azi, double s) {
+    if (_num > 0) {             // Do nothing if _num is zero
+      GeodesicData g = _earth.Direct(_lat1, _lon1, azi, s, _mask);
+      _perimetersum.Add(g.s12);
+      if (!_polyline) {
+        _areasum.Add(g.S12);
+        _crossings += transit(_lon1, g.lon2);
+      }
+      _lat1 = g.lat2; _lon1 = g.lon2;
+      ++_num;
+    }
+  }
+
+  /**
+   * Return the results so far.
+   * <p>
+   * @return PolygonResult(<i>num</i>, <i>perimeter</i>, <i>area</i>) where
+   *   <i>num</i> is the number of vertices, <i>perimeter</i> is the perimeter
+   *   of the polygon or the length of the polyline (meters), and <i>area</i>
+   *   is the area of the polygon (meters<sup>2</sup>) or Double.NaN of
+   *   <i>polyline</i> is true in the constructor.
+   * <p>
+   * Counter-clockwise traversal counts as a positive area.
+   **********************************************************************/
+  public PolygonResult Compute() { return Compute(false, true); }
+  /**
+   * Return the results so far.
+   * <p>
+   * @param reverse if true then clockwise (instead of counter-clockwise)
+   *   traversal counts as a positive area.
+   * @param sign if true then return a signed result for the area if
+   *   the polygon is traversed in the "wrong" direction instead of returning
+   *   the area for the rest of the earth.
+   * @return PolygonResult(<i>num</i>, <i>perimeter</i>, <i>area</i>) where
+   *   <i>num</i> is the number of vertices, <i>perimeter</i> is the perimeter
+   *   of the polygon or the length of the polyline (meters), and <i>area</i>
+   *   is the area of the polygon (meters<sup>2</sup>) or Double.NaN of
+   *   <i>polyline</i> is true in the constructor.
+   **********************************************************************/
+  public PolygonResult Compute(boolean reverse, boolean sign) {
+    if (_num < 2)
+      return new PolygonResult(_num, 0, _polyline ? Double.NaN : 0);
+    if (_polyline)
+      return new PolygonResult(_num, _perimetersum.Sum(), Double.NaN);
+
+    GeodesicData g = _earth.Inverse(_lat1, _lon1, _lat0, _lon0, _mask);
+    Accumulator tempsum = new Accumulator(_areasum);
+    tempsum.Add(g.S12);
+    int crossings = _crossings + transit(_lon1, _lon0);
+    if ((crossings & 1) != 0)
+      tempsum.Add((tempsum.Sum() < 0 ? 1 : -1) * _area0/2);
+    // area is with the clockwise sense.  If !reverse convert to
+    // counter-clockwise convention.
+    if (!reverse)
+      tempsum.Negate();
+    // If sign put area in (-area0/2, area0/2], else put area in [0, area0)
+    if (sign) {
+      if (tempsum.Sum() > _area0/2)
+        tempsum.Add(-_area0);
+      else if (tempsum.Sum() <= -_area0/2)
+        tempsum.Add(+_area0);
+    } else {
+      if (tempsum.Sum() >= _area0)
+        tempsum.Add(-_area0);
+      else if (tempsum.Sum() < 0)
+        tempsum.Add(+_area0);
+    }
+    return new PolygonResult(_num, _perimetersum.Sum(g.s12), 0 + tempsum.Sum());
+  }
+
+  /**
+   * Return the results assuming a tentative final test point is added;
+   * however, the data for the test point is not saved.  This lets you report
+   * a running result for the perimeter and area as the user moves the mouse
+   * cursor.  Ordinary floating point arithmetic is used to accumulate the
+   * data for the test point; thus the area and perimeter returned are less
+   * accurate than if AddPoint and Compute are used.
+   * <p>
+   * @param lat the latitude of the test point (degrees).
+   * @param lon the longitude of the test point (degrees).
+   * @param reverse if true then clockwise (instead of counter-clockwise)
+   *   traversal counts as a positive area.
+   * @param sign if true then return a signed result for the area if
+   *   the polygon is traversed in the "wrong" direction instead of returning
+   *   the area for the rest of the earth.
+   * @return PolygonResult(<i>num</i>, <i>perimeter</i>, <i>area</i>) where
+   *   <i>num</i> is the number of vertices, <i>perimeter</i> is the perimeter
+   *   of the polygon or the length of the polyline (meters), and <i>area</i>
+   *   is the area of the polygon (meters<sup>2</sup>) or Double.NaN of
+   *   <i>polyline</i> is true in the constructor.
+   * <p>
+   * <i>lat</i> should be in the range [−90°, 90°] and <i>lon</i>
+   * should be in the range [−540°, 540°).
+   **********************************************************************/
+  public PolygonResult TestPoint(double lat, double lon,
+                                 boolean reverse, boolean sign) {
+    if (_num == 0)
+      return new PolygonResult(1, 0, _polyline ? Double.NaN : 0);
+
+    double perimeter = _perimetersum.Sum();
+    double tempsum = _polyline ? 0 : _areasum.Sum();
+    int crossings = _crossings;
+    int num = _num + 1;
+    for (int i = 0; i < (_polyline ? 1 : 2); ++i) {
+      GeodesicData g =
+        _earth.Inverse(i == 0 ? _lat1 : lat, i == 0 ? _lon1 : lon,
+                       i != 0 ? _lat0 : lat, i != 0 ? _lon0 : lon,
+                       _mask);
+      perimeter += g.s12;
+      if (!_polyline) {
+        tempsum += g.S12;
+        crossings += transit(i == 0 ? _lon1 : lon,
+                             i != 0 ? _lon0 : lon);
+      }
+    }
+
+    if (_polyline)
+      return new PolygonResult(num, perimeter, Double.NaN);
+
+    if ((crossings & 1) != 0)
+      tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
+    // area is with the clockwise sense.  If !reverse convert to
+    // counter-clockwise convention.
+    if (!reverse)
+      tempsum *= -1;
+    // If sign put area in (-area0/2, area0/2], else put area in [0, area0)
+    if (sign) {
+      if (tempsum > _area0/2)
+        tempsum -= _area0;
+      else if (tempsum <= -_area0/2)
+        tempsum += _area0;
+    } else {
+      if (tempsum >= _area0)
+        tempsum -= _area0;
+      else if (tempsum < 0)
+        tempsum += _area0;
+    }
+    return new PolygonResult(num, perimeter, 0 + tempsum);
+  }
+
+  /**
+   * Return the results assuming a tentative final test point is added via an
+   * azimuth and distance; however, the data for the test point is not saved.
+   * This lets you report a running result for the perimeter and area as the
+   * user moves the mouse cursor.  Ordinary floating point arithmetic is used
+   * to accumulate the data for the test point; thus the area and perimeter
+   * returned are less accurate than if AddPoint and Compute are used.
+   * <p>
+   * @param azi azimuth at current point (degrees).
+   * @param s distance from current point to final test point (meters).
+   * @param reverse if true then clockwise (instead of counter-clockwise)
+   *   traversal counts as a positive area.
+   * @param sign if true then return a signed result for the area if
+   *   the polygon is traversed in the "wrong" direction instead of returning
+   *   the area for the rest of the earth.
+   * @return PolygonResult(<i>num</i>, <i>perimeter</i>, <i>area</i>) where
+   *   <i>num</i> is the number of vertices, <i>perimeter</i> is the perimeter
+   *   of the polygon or the length of the polyline (meters), and <i>area</i>
+   *   is the area of the polygon (meters<sup>2</sup>) or Double.NaN of
+   *   <i>polyline</i> is true in the constructor.
+   * <p>
+   * <i>azi</i> should be in the range [−540°, 540°).
+   **********************************************************************/
+  public PolygonResult TestEdge(double azi, double s,
+                                boolean reverse, boolean sign) {
+    if (_num == 0)              // we don't have a starting point!
+      return new PolygonResult(0, Double.NaN, Double.NaN);
+
+    int num = _num + 1;
+    double perimeter = _perimetersum.Sum() + s;
+    if (_polyline)
+      return new PolygonResult(num, perimeter, Double.NaN);
+
+    double tempsum =  _areasum.Sum();
+    int crossings = _crossings;
+    {
+      double lat, lon, s12, S12, t;
+      GeodesicData g =
+        _earth.Direct(_lat1, _lon1, azi, false, s, _mask);
+      tempsum += g.S12;
+      crossings += transit(_lon1, g.lon2);
+      g = _earth.Inverse(g.lat2, g.lon2, _lat0, _lon0, _mask);
+      perimeter += g.s12;
+      tempsum += g.S12;
+      crossings += transit(g.lon2, _lon0);
+    }
+
+    if ((crossings & 1) != 0)
+      tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
+    // area is with the clockwise sense.  If !reverse convert to
+    // counter-clockwise convention.
+    if (!reverse)
+      tempsum *= -1;
+    // If sign put area in (-area0/2, area0/2], else put area in [0, area0)
+    if (sign) {
+      if (tempsum > _area0/2)
+        tempsum -= _area0;
+      else if (tempsum <= -_area0/2)
+        tempsum += _area0;
+    } else {
+      if (tempsum >= _area0)
+        tempsum -= _area0;
+      else if (tempsum < 0)
+        tempsum += _area0;
+    }
+
+    return new PolygonResult(num, perimeter, 0 + tempsum);
+  }
+
+  /**
+   * @return <i>a</i> the equatorial radius of the ellipsoid (meters).  This is
+   *   the value inherited from the Geodesic object used in the constructor.
+   **********************************************************************/
+
+  public double MajorRadius() { return _earth.MajorRadius(); }
+
+  /**
+   * @return <i>f</i> the flattening of the ellipsoid.  This is the value
+   *   inherited from the Geodesic object used in the constructor.
+   **********************************************************************/
+  public double Flattening() { return _earth.Flattening(); }
+
+  /**
+   * Report the previous vertex added to the polygon or polyline.
+   * <p>
+   * @return Pair(<i>lat</i>, <i>lon</i>), the current latitude and longitude.
+   * <p>
+   * If no points have been added, then Double.NaN is returned.  Otherwise,
+   * <i>lon</i> will be in the range [−180°, 180°).
+   **********************************************************************/
+  public Pair CurrentPoint() { return new Pair(_lat1, _lon1); }
+}
diff --git a/java/src/main/java/net/sf/geographiclib/PolygonResult.java b/java/src/main/java/net/sf/geographiclib/PolygonResult.java
new file mode 100644
index 0000000..fdbb7ef
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/PolygonResult.java
@@ -0,0 +1,39 @@
+/**
+ * Implementation of the net.sf.geographiclib.PolygonResult class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+package net.sf.geographiclib;
+
+/**
+ * A container for the results from PolygonArea.
+ **********************************************************************/
+public class PolygonResult {
+  /**
+   * The number of vertices in the polygon
+   **********************************************************************/
+  public int num;
+  /**
+   * The perimeter of the polygon or the length of the polyline (meters).
+   **********************************************************************/
+  public double perimeter;
+  /**
+   * The area of the polygon (meters<sup>2</sup>).
+   **********************************************************************/
+  public double area;
+  /**
+   * Constructor
+   * <p>
+   * @param num the number of vertices in the polygon.
+   * @param perimeter the perimeter of the polygon or the length of the
+   *   polyline (meters).
+   * @param area the area of the polygon (meters<sup>2</sup>).
+   **********************************************************************/
+  public PolygonResult(int num, double perimeter, double area) {
+    this.num = num;
+    this.perimeter = perimeter;
+    this.area = area;
+  }
+}
diff --git a/java/src/main/java/net/sf/geographiclib/package-info.java b/java/src/main/java/net/sf/geographiclib/package-info.java
new file mode 100644
index 0000000..6bceb8f
--- /dev/null
+++ b/java/src/main/java/net/sf/geographiclib/package-info.java
@@ -0,0 +1,182 @@
+/**
+ * <h1>Geodesic routines from GeographicLib implemented in Java</h1>
+ * @author Charles F. F. Karney (charles at karney.com)
+ * @version 1.31
+ *
+ * <h2>Abstract</h2>
+ * <p>
+ * This is a Java implementation of the geodesic algorithms from <a
+ * href="http://geographiclib.sf.net">GeographicLib</a>.  This is a
+ * self-contained library which makes it easy to do geodesic computations
+ * for an ellipsoid of revolution in a Java program.  It requires Java
+ * version 1.1 or later.
+ * <p>
+ * <h2>Downloading the source</h2>
+ * <p>
+ * The Java library is part of GeographicLib which available for download at
+ * <ul>
+ * <li>
+ *   <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.31.tar.gz">
+ *   GeographicLib-1.31.tar.gz</a>
+ * <li>
+ *   <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.31.zip">
+ *   GeographicLib-1.31.zip</a>
+ * </ul>
+ * <p>
+ * as either a compressed tar file (tar.gz) or a zip file.  After unpacking
+ * the source, the Java library can be found in GeographicLib-1.31/java.  (This
+ * library is completely independent from the rest of GeodegraphicLib.)  The
+ * library consists of the files in the src/main/java/net/sf/geographiclib
+ * subdirectory.
+ * <p>
+ * <h2>Sample programs</h2>
+ * <p>
+ * Also included are 3 small test programs
+ * <ul>
+ * <li>
+ *    {@code direct/src/main/java/Direct.java} is a simple command line utility
+ *    for solving the direct geodesic problem;
+ * <li>
+ *    {@code inverse/src/main/java/Inverse.java} is a simple command line
+ *    utility for solving the inverse geodesic problem;
+ * <li>
+ *    {@code planimter/src/main/java/Planimeter.java} is a simple command line
+ *    utility for computing the area of a geodesic polygon given its vertices.
+ * </ul>
+ * <p>
+ * Here, for example, is {@code Inverse.java}
+ * <pre>
+ * {@code
+ * // Solve the inverse geodesic problem.
+ *
+ * // This program reads in lines with lat1, lon1, lat2, lon2 and prints
+ * // out lines with azi1, azi2, s12 (for the WGS84 ellipsoid).
+ *
+ * import java.util.*;
+ * import net.sf.geographiclib.*;
+ * public class Inverse {
+ *   public static void main(String[] args) {
+ *     try {
+ *       Scanner in = new Scanner(System.in);
+ *       double lat1, lon1, lat2, lon2;
+ *       while (true) {
+ *         lat1 = in.nextDouble(); lon1 = in.nextDouble();
+ *         lat2 = in.nextDouble(); lon2 = in.nextDouble();
+ *         GeodesicData g = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2);
+ *         System.out.println(g.azi1 + " " + g.azi2 + " " + g.s12);
+ *       }
+ *     }
+ *     catch (Exception e) {}
+ *   }
+ * }}</pre>
+ * <h2>Compiling and running a sample program</h2>
+ * Three difference ways of compiling and running {@code Inverse.java} are
+ * given.  These differ in the degree to which they utilize
+ * <a href="http://maven.apache.org/">maven</a> to manage your Java code and
+ * its dependencies.  (Thanks to Skip Breidbach for supplying the maven
+ * support.)
+ * <h3>Without using maven</h3>
+ * Compile and run as follows <pre>
+ * cd inverse/src/main/java
+ * javac -cp .:../../../../src/main/java Inverse.java
+ * echo -30 0 29.5 179.5 | java -cp .:../../../../src/main/java Inverse </pre>
+ * <h3>Using maven to package GeographicLib</h3>
+ * Use <a href="http://maven.apache.org/">maven</a> to create a jar file by
+ * running (in the main java directory) <pre>
+ * mvn package </pre>
+ * (Your first run of maven may take a long time, because it needs to download
+ * some additional packages to your local repository.)  Then compile and run
+ * Inverse.java with <pre>
+ * cd inverse/src/main/java
+ * javac -cp .:../../../../target/GeographicLib-1.31.jar Inverse.java
+ * echo -30 0 29.5 179.5 |
+ *   java -cp .:../../../../target/GeographicLib-1.31.jar Inverse </pre>
+ * <h3>Using maven to build and run {@code Inverse.java}</h3>
+ * Use <a href="http://maven.apache.org/">maven</a> to install GeographicLib by
+ * running (in the main java directory) <pre>
+ * mvn install </pre>
+ * (Your first run of maven may take a long time, because it needs to download
+ * some additional packages to your local repository.)  Then compile and run
+ * Inverse.java using {@code inverse/pom.xml} with <pre>
+ * cd inverse
+ * mvn compile
+ * echo -30 0 29.5 179.5 | mvn -q exec:java </pre>
+ * <h2>Using the library</h2>
+ * <p>
+ * <ul>
+ * <li>
+ *   Put <pre>
+ *   import net.sf.geographiclib.*</pre>
+ *   in your source code.
+ * <li>
+ *   Make calls to the geodesic routines from your code.
+ * <li>
+ *   Compile and run in one of the ways described above.
+ * </ul>
+ * <p>
+ * The important classes are
+ * <ul>
+ * <li>
+ *   {@link net.sf.geographiclib.Geodesic}, for direct and inverse geodesic
+ *   calculations;
+ * <li>
+ *   {@link net.sf.geographiclib.GeodesicLine}, an efficient way of
+ *   calculating multiple points on a single geodesic;
+ * <li>
+ *   {@link net.sf.geographiclib.GeodesicData}, the object containing the
+ *   results of the geodesic calculations;
+ * <li>
+ *   {@link net.sf.geographiclib.GeodesicMask}, the constants that let you
+ *   specify the variables to return in {@link
+ *   net.sf.geographiclib.GeodesicData} and the capabilities of a {@link
+ *   net.sf.geographiclib.GeodesicLine};
+ * <li>
+ *   {@link net.sf.geographiclib.Constants}, the parameters for the WGS84
+ *   ellipsoid;
+ * <li>
+ *   {@link net.sf.geographiclib.PolygonArea}, a class to compute the
+ *   perimeter and area of a geodesic polygon (returned as a {@link
+ *   net.sf.geographiclib.PolygonResult}).
+ * </ul>
+ * <p>
+ * The documentation is generated using javadoc when {@code mvn package} is run
+ * (the top of the documentation tree is {@code target/apidocs/index.html}).
+ * This is also available on the web at
+ * <a href="http://geographiclib.sf.net/html/C/index.html">
+ * http://geographiclib.sf.net/html/C/index.html</a>.
+ * <p>
+ * <h2>External links</h2>
+ * <p>
+ * <ul>
+ * <li>
+ *   These algorithms are derived in C. F. F. Karney,
+ *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+ *   Algorithms for geodesics</a>,
+ *   J. Geodesy <b>87</b>, 43–55 (2013)
+ *   (<a href="http://geographiclib.sf.net/geod-addenda.html">addenda</a>).
+ * <li>
+ *   A longer paper on geodesics: C. F. F. Karney,
+ *    <a href="http://arxiv.org/abs/1102.1215v1">Geodesics
+ *    on an ellipsoid of revolution</a>,
+ *    Feb. 2011
+ *    (<a href=
+ *    "http://geographiclib.sf.net/geod-addenda.html#geod-errata">errata</a>).
+ * <li>
+ *   <a href="http://geographiclib.sf.net">The GeographicLib web site</a>.
+ * <li>
+ *   <a href="http://geographiclib.sf.net/html/index.html">The C++ library</a>.
+ * <li>
+ *   <a href="http://geographiclib.sf.net/html/C/index.html">The C library</a>.
+ * <li>
+ *   <a href="http://geographiclib.sf.net/html/Fortran/index.html">The
+ *   Fortran library</a>.
+ * <li>
+ *   The section in the GeographicLib documentation on geodesics:
+ *   <a href="http://geographiclib.sf.net/html/geodesic.html">Geodesics
+ *   on an ellipsoid of revolution</a>.
+ * <li>
+ *   <a href="http://geographiclib.sf.net/geodesic-papers/biblio.html">
+ *   An online geodesic bibliography</a>.
+ * </ul>
+ **********************************************************************/
+package net.sf.geographiclib;
diff --git a/legacy/C/00README.txt b/legacy/C/00README.txt
new file mode 100644
index 0000000..4502721
--- /dev/null
+++ b/legacy/C/00README.txt
@@ -0,0 +1,27 @@
+This is a C implementation of the geodesic algorithms described in
+
+  C. F. F. Karney,
+  Algorithms for geodesics,
+  J. Geodesy 87, 43-55 (2013);
+  http://dx.doi.org/10.1007/s00190-012-0578-z
+  Addenda: http://geographiclib.sf.net/geod-addenda.html
+
+For documentation, see
+
+  http://geographiclib.sourceforge.net/html/C/
+
+The code in this directory is entirely self-contained.  In particular,
+it does not depend on the C++ classes.  You can compile and link the
+example programs directly with something like:
+
+  cc -o inverse inverse.c geodesic.c -lm
+  echo 30 0 29.5 179.5 | ./inverse
+
+Alternatively, you can build the examples using cmake.  For example, on
+Linux systems you might do:
+
+  mkdir BUILD
+  cd BUILD
+  cmake ..
+  make
+  echo 30 0 29.5 179.5 | ./inverse
diff --git a/legacy/C/CMakeLists.txt b/legacy/C/CMakeLists.txt
new file mode 100644
index 0000000..3bdf38f
--- /dev/null
+++ b/legacy/C/CMakeLists.txt
@@ -0,0 +1,25 @@
+cmake_minimum_required (VERSION 2.6)
+
+project (GeographicLib-legacy-C C)
+
+# Set a default build type for single-configuration cmake generators if
+# no build type is set.
+if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
+  set (CMAKE_BUILD_TYPE Release)
+endif ()
+
+# Make the compiler more picky.
+if (WIN32)
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
+else ()
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic -ansi")
+endif ()
+
+set (TOOLS direct inverse planimeter)
+
+foreach (TOOL ${TOOLS})
+  add_executable (${TOOL} ${TOOL}.c geodesic.c geodesic.h)
+  if (NOT WIN32)
+    target_link_libraries (${TOOL} m)
+  endif ()
+endforeach ()
diff --git a/legacy/C/direct.c b/legacy/C/direct.c
new file mode 100644
index 0000000..b8c1130
--- /dev/null
+++ b/legacy/C/direct.c
@@ -0,0 +1,32 @@
+/**
+ * @file direct.c
+ * @brief A test program for geod_direct()
+ **********************************************************************/
+
+#include <stdio.h>
+#include "geodesic.h"
+
+#if defined(_MSC_VER)
+/* Squelch warnings about scanf */
+#  pragma warning (disable: 4996)
+#endif
+
+/**
+ * A simple program to solve the direct geodesic problem.
+ *
+ * This program reads in lines with lat1, lon1, azi1, s12 and prints out lines
+ * with lat2, lon2, azi2 (for the WGS84 ellipsoid).
+ **********************************************************************/
+
+int main() {
+  double a = 6378137, f = 1/298.257223563; /* WGS84 */
+  double lat1, lon1, azi1, lat2, lon2, azi2, s12;
+  struct geod_geodesic g;
+
+  geod_init(&g, a, f);
+  while (scanf("%lf %lf %lf %lf\n", &lat1, &lon1, &azi1, &s12) == 4) {
+    geod_direct(&g, lat1, lon1, azi1, s12, &lat2, &lon2, &azi2);
+    printf("%.15f %.15f %.15f\n", lat2, lon2, azi2);
+  }
+  return 0;
+}
diff --git a/legacy/C/geodesic.c b/legacy/C/geodesic.c
new file mode 100644
index 0000000..bd9fc96
--- /dev/null
+++ b/legacy/C/geodesic.c
@@ -0,0 +1,1770 @@
+/**
+ * \file geodesic.c
+ * \brief Implementation of the geodesic routines in C
+ *
+ * For the full documentation see geodesic.h.
+ **********************************************************************/
+
+/** @cond SKIP */
+
+/*
+ * This is a C implementation of the geodesic algorithms described in
+ *
+ *   C. F. F. Karney,
+ *   Algorithms for geodesics,
+ *   J. Geodesy <b>87</b>, 43--55 (2013);
+ *   http://dx.doi.org/10.1007/s00190-012-0578-z
+ *   Addenda: http://geographiclib.sf.net/geod-addenda.html
+ *
+ * See the comments in geodesic.h for documentation.
+ *
+ * Copyright (c) Charles Karney (2012-2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ */
+
+#include "geodesic.h"
+#include <math.h>
+
+#define GEOGRAPHICLIB_GEODESIC_ORDER 6
+#define nC1   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nC1p  GEOGRAPHICLIB_GEODESIC_ORDER
+#define nC2   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nA3   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nA3x  nA3
+#define nC3   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nC3x  ((nC3 * (nC3 - 1)) / 2)
+#define nC4   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nC4x  ((nC4 * (nC4 + 1)) / 2)
+
+typedef double real;
+typedef int boolx;
+
+static unsigned init = 0;
+static const int FALSE = 0;
+static const int TRUE = 1;
+static unsigned digits, maxit1, maxit2;
+static real epsilon, realmin, pi, degree, NaN,
+  tiny, tol0, tol1, tol2, tolb, xthresh;
+
+static void Init() {
+  if (!init) {
+#if defined(__DBL_MANT_DIG__)
+    digits = __DBL_MANT_DIG__;
+#else
+    digits = 53;
+#endif
+#if defined(__DBL_EPSILON__)
+    epsilon = __DBL_EPSILON__;
+#else
+    epsilon = pow(0.5, digits - 1);
+#endif
+#if defined(__DBL_MIN__)
+    realmin = __DBL_MIN__;
+#else
+    realmin = pow(0.5, 1022);
+#endif
+#if defined(M_PI)
+    pi = M_PI;
+#else
+    pi = atan2(0.0, -1.0);
+#endif
+    maxit1 = 20;
+    maxit2 = maxit1 + digits + 10;
+    tiny = sqrt(realmin);
+    tol0 = epsilon;
+    /* Increase multiplier in defn of tol1 from 100 to 200 to fix inverse case
+     * 52.784459512564 0 -52.784459512563990912 179.634407464943777557
+     * which otherwise failed for Visual Studio 10 (Release and Debug) */
+    tol1 = 200 * tol0;
+    tol2 = sqrt(tol0);
+    /* Check on bisection interval */
+    tolb = tol0 * tol2;
+    xthresh = 1000 * tol2;
+    degree = pi/180;
+    NaN = sqrt(-1.0);
+    init = 1;
+  }
+}
+
+enum captype {
+  CAP_NONE = 0U,
+  CAP_C1   = 1U<<0,
+  CAP_C1p  = 1U<<1,
+  CAP_C2   = 1U<<2,
+  CAP_C3   = 1U<<3,
+  CAP_C4   = 1U<<4,
+  CAP_ALL  = 0x1FU,
+  OUT_ALL  = 0x7F80U
+};
+
+static real sq(real x) { return x * x; }
+static real log1px(real x) {
+  volatile real
+    y = 1 + x,
+    z = y - 1;
+  /* Here's the explanation for this magic: y = 1 + z, exactly, and z
+   * approx x, thus log(y)/z (which is nearly constant near z = 0) returns
+   * a good approximation to the true log(1 + x)/x.  The multiplication x *
+   * (log(y)/z) introduces little additional error. */
+  return z == 0 ? x : x * log(y) / z;
+}
+
+static real atanhx(real x) {
+  real y = fabs(x);             /* Enforce odd parity */
+  y = log1px(2 * y/(1 - y))/2;
+  return x < 0 ? -y : y;
+}
+
+static real hypotx(real x, real y)
+{ return sqrt(x * x + y * y); }
+
+static real cbrtx(real x) {
+  real y = pow(fabs(x), 1/(real)(3)); /* Return the real cube root */
+  return x < 0 ? -y : y;
+}
+
+static real sumx(real u, real v, real* t) {
+  volatile real s = u + v;
+  volatile real up = s - v;
+  volatile real vpp = s - up;
+  up -= u;
+  vpp -= v;
+  *t = -(up + vpp);
+  /* error-free sum:
+   * u + v =       s      + t
+   *       = round(u + v) + t */
+  return s;
+}
+
+static real minx(real x, real y)
+{ return x < y ? x : y; }
+
+static real maxx(real x, real y)
+{ return x > y ? x : y; }
+
+static void swapx(real* x, real* y)
+{ real t = *x; *x = *y; *y = t; }
+
+static void SinCosNorm(real* sinx, real* cosx) {
+  real r = hypotx(*sinx, *cosx);
+  *sinx /= r;
+  *cosx /= r;
+}
+
+static real AngNormalize(real x)
+{ return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x); }
+static real AngNormalize2(real x)
+{ return AngNormalize(fmod(x, (real)(360))); }
+
+static real AngDiff(real x, real y) {
+  real t, d = sumx(-x, y, &t);
+  if ((d - (real)(180)) + t > (real)(0))       /* y - x > 180 */
+    d -= (real)(360);                          /* exact */
+  else if ((d + (real)(180)) + t <= (real)(0)) /* y - x <= -180 */
+    d += (real)(360);                          /* exact */
+  return d + t;
+}
+
+static real AngRound(real x) {
+  const real z = 1/(real)(16);
+  volatile real y = fabs(x);
+  /* The compiler mustn't "simplify" z - (z - y) to y */
+  y = y < z ? z - (z - y) : y;
+  return x < 0 ? -y : y;
+}
+
+static void A3coeff(struct geod_geodesic* g);
+static void C3coeff(struct geod_geodesic* g);
+static void C4coeff(struct geod_geodesic* g);
+static real SinCosSeries(boolx sinp,
+                         real sinx, real cosx,
+                         const real c[], int n);
+static void Lengths(const struct geod_geodesic* g,
+                    real eps, real sig12,
+                    real ssig1, real csig1, real dn1,
+                    real ssig2, real csig2, real dn2,
+                    real cbet1, real cbet2,
+                    real* ps12b, real* pm12b, real* pm0,
+                    boolx scalep, real* pM12, real* pM21,
+                    /* Scratch areas of the right size */
+                    real C1a[], real C2a[]);
+static real Astroid(real x, real y);
+static real InverseStart(const struct geod_geodesic* g,
+                         real sbet1, real cbet1, real dn1,
+                         real sbet2, real cbet2, real dn2,
+                         real lam12,
+                         real* psalp1, real* pcalp1,
+                         /* Only updated if return val >= 0 */
+                         real* psalp2, real* pcalp2,
+                         /* Only updated for short lines */
+                         real* pdnm,
+                         /* Scratch areas of the right size */
+                         real C1a[], real C2a[]);
+static real Lambda12(const struct geod_geodesic* g,
+                     real sbet1, real cbet1, real dn1,
+                     real sbet2, real cbet2, real dn2,
+                     real salp1, real calp1,
+                     real* psalp2, real* pcalp2,
+                     real* psig12,
+                     real* pssig1, real* pcsig1,
+                     real* pssig2, real* pcsig2,
+                     real* peps, real* pdomg12,
+                     boolx diffp, real* pdlam12,
+                     /* Scratch areas of the right size */
+                     real C1a[], real C2a[], real C3a[]);
+static real A3f(const struct geod_geodesic* g, real eps);
+static void C3f(const struct geod_geodesic* g, real eps, real c[]);
+static void C4f(const struct geod_geodesic* g, real eps, real c[]);
+static real A1m1f(real eps);
+static void C1f(real eps, real c[]);
+static void C1pf(real eps, real c[]);
+static real A2m1f(real eps);
+static void C2f(real eps, real c[]);
+static int transit(real lon1, real lon2);
+static void accini(real s[]);
+static void acccopy(const real s[], real t[]);
+static void accadd(real s[], real y);
+static real accsum(const real s[], real y);
+static void accneg(real s[]);
+
+void geod_init(struct geod_geodesic* g, real a, real f) {
+  if (!init) Init();
+  g->a = a;
+  g->f = f <= 1 ? f : 1/f;
+  g->f1 = 1 - g->f;
+  g->e2 = g->f * (2 - g->f);
+  g->ep2 = g->e2 / sq(g->f1);   /* e2 / (1 - e2) */
+  g->n = g->f / ( 2 - g->f);
+  g->b = g->a * g->f1;
+  g->c2 = (sq(g->a) + sq(g->b) *
+           (g->e2 == 0 ? 1 :
+            (g->e2 > 0 ? atanhx(sqrt(g->e2)) : atan(sqrt(-g->e2))) /
+            sqrt(fabs(g->e2))))/2; /* authalic radius squared */
+  /* The sig12 threshold for "really short".  Using the auxiliary sphere
+   * solution with dnm computed at (bet1 + bet2) / 2, the relative error in the
+   * azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2.  (Error
+   * measured for 1/100 < b/a < 100 and abs(f) >= 1/1000.  For a given f and
+   * sig12, the max error occurs for lines near the pole.  If the old rule for
+   * computing dnm = (dn1 + dn2)/2 is used, then the error increases by a
+   * factor of 2.)  Setting this equal to epsilon gives sig12 = etol2.  Here
+   * 0.1 is a safety factor (error decreased by 100) and max(0.001, abs(f))
+   * stops etol2 getting too large in the nearly spherical case. */
+  g->etol2 = 0.1 * tol2 /
+    sqrt( maxx((real)(0.001), fabs(g->f)) * minx((real)(1), 1 - g->f/2) / 2 );
+
+  A3coeff(g);
+  C3coeff(g);
+  C4coeff(g);
+}
+
+void geod_lineinit(struct geod_geodesicline* l,
+                   const struct geod_geodesic* g,
+                   real lat1, real lon1, real azi1, unsigned caps) {
+  real alp1, cbet1, sbet1, phi, eps;
+  l->a = g->a;
+  l->f = g->f;
+  l->b = g->b;
+  l->c2 = g->c2;
+  l->f1 = g->f1;
+  /* If caps is 0 assume the standard direct calculation */
+  l->caps = (caps ? caps : GEOD_DISTANCE_IN | GEOD_LONGITUDE) |
+    GEOD_LATITUDE | GEOD_AZIMUTH; /* Always allow latitude and azimuth */
+
+  /* Guard against underflow in salp0 */
+  azi1 = AngRound(AngNormalize(azi1));
+  lon1 = AngNormalize(lon1);
+  l->lat1 = lat1;
+  l->lon1 = lon1;
+  l->azi1 = azi1;
+  /* alp1 is in [0, pi] */
+  alp1 = azi1 * degree;
+  /* Enforce sin(pi) == 0 and cos(pi/2) == 0.  Better to face the ensuing
+   * problems directly than to skirt them. */
+  l->salp1 =      azi1  == -180 ? 0 : sin(alp1);
+  l->calp1 = fabs(azi1) ==   90 ? 0 : cos(alp1);
+  phi = lat1 * degree;
+  /* Ensure cbet1 = +epsilon at poles */
+  sbet1 = l->f1 * sin(phi);
+  cbet1 = fabs(lat1) == 90 ? tiny : cos(phi);
+  SinCosNorm(&sbet1, &cbet1);
+  l->dn1 = sqrt(1 + g->ep2 * sq(sbet1));
+
+  /* Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0), */
+  l->salp0 = l->salp1 * cbet1; /* alp0 in [0, pi/2 - |bet1|] */
+  /* Alt: calp0 = hypot(sbet1, calp1 * cbet1).  The following
+   * is slightly better (consider the case salp1 = 0). */
+  l->calp0 = hypotx(l->calp1, l->salp1 * sbet1);
+  /* Evaluate sig with tan(bet1) = tan(sig1) * cos(alp1).
+   * sig = 0 is nearest northward crossing of equator.
+   * With bet1 = 0, alp1 = pi/2, we have sig1 = 0 (equatorial line).
+   * With bet1 =  pi/2, alp1 = -pi, sig1 =  pi/2
+   * With bet1 = -pi/2, alp1 =  0 , sig1 = -pi/2
+   * Evaluate omg1 with tan(omg1) = sin(alp0) * tan(sig1).
+   * With alp0 in (0, pi/2], quadrants for sig and omg coincide.
+   * No atan2(0,0) ambiguity at poles since cbet1 = +epsilon.
+   * With alp0 = 0, omg1 = 0 for alp1 = 0, omg1 = pi for alp1 = pi. */
+  l->ssig1 = sbet1; l->somg1 = l->salp0 * sbet1;
+  l->csig1 = l->comg1 = sbet1 != 0 || l->calp1 != 0 ? cbet1 * l->calp1 : 1;
+  SinCosNorm(&l->ssig1, &l->csig1); /* sig1 in (-pi, pi] */
+  /* SinCosNorm(somg1, comg1); -- don't need to normalize! */
+
+  l->k2 = sq(l->calp0) * g->ep2;
+  eps = l->k2 / (2 * (1 + sqrt(1 + l->k2)) + l->k2);
+
+  if (l->caps & CAP_C1) {
+    real s, c;
+    l->A1m1 = A1m1f(eps);
+    C1f(eps, l->C1a);
+    l->B11 = SinCosSeries(TRUE, l->ssig1, l->csig1, l->C1a, nC1);
+    s = sin(l->B11); c = cos(l->B11);
+    /* tau1 = sig1 + B11 */
+    l->stau1 = l->ssig1 * c + l->csig1 * s;
+    l->ctau1 = l->csig1 * c - l->ssig1 * s;
+    /* Not necessary because C1pa reverts C1a
+     *    B11 = -SinCosSeries(TRUE, stau1, ctau1, C1pa, nC1p); */
+  }
+
+  if (l->caps & CAP_C1p)
+    C1pf(eps, l->C1pa);
+
+  if (l->caps & CAP_C2) {
+    l->A2m1 = A2m1f(eps);
+    C2f(eps, l->C2a);
+    l->B21 = SinCosSeries(TRUE, l->ssig1, l->csig1, l->C2a, nC2);
+  }
+
+  if (l->caps & CAP_C3) {
+    C3f(g, eps, l->C3a);
+    l->A3c = -l->f * l->salp0 * A3f(g, eps);
+    l->B31 = SinCosSeries(TRUE, l->ssig1, l->csig1, l->C3a, nC3-1);
+  }
+
+  if (l->caps & CAP_C4) {
+    C4f(g, eps, l->C4a);
+    /* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0) */
+    l->A4 = sq(l->a) * l->calp0 * l->salp0 * g->e2;
+    l->B41 = SinCosSeries(FALSE, l->ssig1, l->csig1, l->C4a, nC4);
+  }
+}
+
+real geod_genposition(const struct geod_geodesicline* l,
+                      boolx arcmode, real s12_a12,
+                      real* plat2, real* plon2, real* pazi2,
+                      real* ps12, real* pm12,
+                      real* pM12, real* pM21,
+                      real* pS12) {
+  real lat2 = 0, lon2 = 0, azi2 = 0, s12 = 0,
+    m12 = 0, M12 = 0, M21 = 0, S12 = 0;
+  /* Avoid warning about uninitialized B12. */
+  real sig12, ssig12, csig12, B12 = 0, AB1 = 0;
+  real omg12, lam12, lon12;
+  real ssig2, csig2, sbet2, cbet2, somg2, comg2, salp2, calp2, dn2;
+  unsigned outmask =
+    (plat2 ? GEOD_LATITUDE : 0U) |
+    (plon2 ? GEOD_LONGITUDE : 0U) |
+    (pazi2 ? GEOD_AZIMUTH : 0U) |
+    (ps12 ? GEOD_DISTANCE : 0U) |
+    (pm12 ? GEOD_REDUCEDLENGTH : 0U) |
+    (pM12 || pM21 ? GEOD_GEODESICSCALE : 0U) |
+    (pS12 ? GEOD_AREA : 0U);
+
+  outmask &= l->caps & OUT_ALL;
+  if (!( TRUE /*Init()*/ &&
+         (arcmode || (l->caps & GEOD_DISTANCE_IN & OUT_ALL)) ))
+    /* Uninitialized or impossible distance calculation requested */
+    return NaN;
+
+  if (arcmode) {
+    real s12a;
+    /* Interpret s12_a12 as spherical arc length */
+    sig12 = s12_a12 * degree;
+    s12a = fabs(s12_a12);
+    s12a -= 180 * floor(s12a / 180);
+    ssig12 = s12a ==  0 ? 0 : sin(sig12);
+    csig12 = s12a == 90 ? 0 : cos(sig12);
+  } else {
+    /* Interpret s12_a12 as distance */
+    real
+      tau12 = s12_a12 / (l->b * (1 + l->A1m1)),
+      s = sin(tau12),
+      c = cos(tau12);
+    /* tau2 = tau1 + tau12 */
+    B12 = - SinCosSeries(TRUE,
+                         l->stau1 * c + l->ctau1 * s,
+                         l->ctau1 * c - l->stau1 * s,
+                         l->C1pa, nC1p);
+    sig12 = tau12 - (B12 - l->B11);
+    ssig12 = sin(sig12); csig12 = cos(sig12);
+    if (fabs(l->f) > 0.01) {
+      /* Reverted distance series is inaccurate for |f| > 1/100, so correct
+       * sig12 with 1 Newton iteration.  The following table shows the
+       * approximate maximum error for a = WGS_a() and various f relative to
+       * GeodesicExact.
+       *     erri = the error in the inverse solution (nm)
+       *     errd = the error in the direct solution (series only) (nm)
+       *     errda = the error in the direct solution (series + 1 Newton) (nm)
+       *
+       *       f     erri  errd errda
+       *     -1/5    12e6 1.2e9  69e6
+       *     -1/10  123e3  12e6 765e3
+       *     -1/20   1110 108e3  7155
+       *     -1/50  18.63 200.9 27.12
+       *     -1/100 18.63 23.78 23.37
+       *     -1/150 18.63 21.05 20.26
+       *      1/150 22.35 24.73 25.83
+       *      1/100 22.35 25.03 25.31
+       *      1/50  29.80 231.9 30.44
+       *      1/20   5376 146e3  10e3
+       *      1/10  829e3  22e6 1.5e6
+       *      1/5   157e6 3.8e9 280e6 */
+      real
+        ssig2 = l->ssig1 * csig12 + l->csig1 * ssig12,
+        csig2 = l->csig1 * csig12 - l->ssig1 * ssig12,
+        serr;
+      B12 = SinCosSeries(TRUE, ssig2, csig2, l->C1a, nC1);
+      serr = (1 + l->A1m1) * (sig12 + (B12 - l->B11)) - s12_a12 / l->b;
+      sig12 = sig12 - serr / sqrt(1 + l->k2 * sq(ssig2));
+      ssig12 = sin(sig12); csig12 = cos(sig12);
+      /* Update B12 below */
+    }
+  }
+
+  /* sig2 = sig1 + sig12 */
+  ssig2 = l->ssig1 * csig12 + l->csig1 * ssig12;
+  csig2 = l->csig1 * csig12 - l->ssig1 * ssig12;
+  dn2 = sqrt(1 + l->k2 * sq(ssig2));
+  if (outmask & (GEOD_DISTANCE | GEOD_REDUCEDLENGTH | GEOD_GEODESICSCALE)) {
+    if (arcmode || fabs(l->f) > 0.01)
+      B12 = SinCosSeries(TRUE, ssig2, csig2, l->C1a, nC1);
+    AB1 = (1 + l->A1m1) * (B12 - l->B11);
+  }
+  /* sin(bet2) = cos(alp0) * sin(sig2) */
+  sbet2 = l->calp0 * ssig2;
+  /* Alt: cbet2 = hypot(csig2, salp0 * ssig2); */
+  cbet2 = hypotx(l->salp0, l->calp0 * csig2);
+  if (cbet2 == 0)
+    /* I.e., salp0 = 0, csig2 = 0.  Break the degeneracy in this case */
+    cbet2 = csig2 = tiny;
+  /* tan(omg2) = sin(alp0) * tan(sig2) */
+  somg2 = l->salp0 * ssig2; comg2 = csig2;  /* No need to normalize */
+  /* tan(alp0) = cos(sig2)*tan(alp2) */
+  salp2 = l->salp0; calp2 = l->calp0 * csig2; /* No need to normalize */
+  /* omg12 = omg2 - omg1 */
+  omg12 = atan2(somg2 * l->comg1 - comg2 * l->somg1,
+                comg2 * l->comg1 + somg2 * l->somg1);
+
+  if (outmask & GEOD_DISTANCE)
+    s12 = arcmode ? l->b * ((1 + l->A1m1) * sig12 + AB1) : s12_a12;
+
+  if (outmask & GEOD_LONGITUDE) {
+    lam12 = omg12 + l->A3c *
+      ( sig12 + (SinCosSeries(TRUE, ssig2, csig2, l->C3a, nC3-1)
+                 - l->B31));
+    lon12 = lam12 / degree;
+    /* Use AngNormalize2 because longitude might have wrapped multiple
+     * times. */
+    lon12 = AngNormalize2(lon12);
+    lon2 = AngNormalize(l->lon1 + lon12);
+  }
+
+  if (outmask & GEOD_LATITUDE)
+    lat2 = atan2(sbet2, l->f1 * cbet2) / degree;
+
+  if (outmask & GEOD_AZIMUTH)
+    /* minus signs give range [-180, 180). 0- converts -0 to +0. */
+    azi2 = 0 - atan2(-salp2, calp2) / degree;
+
+  if (outmask & (GEOD_REDUCEDLENGTH | GEOD_GEODESICSCALE)) {
+    real
+      B22 = SinCosSeries(TRUE, ssig2, csig2, l->C2a, nC2),
+      AB2 = (1 + l->A2m1) * (B22 - l->B21),
+      J12 = (l->A1m1 - l->A2m1) * sig12 + (AB1 - AB2);
+    if (outmask & GEOD_REDUCEDLENGTH)
+      /* Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure
+       * accurate cancellation in the case of coincident points. */
+      m12 = l->b * ((dn2 * (l->csig1 * ssig2) - l->dn1 * (l->ssig1 * csig2))
+                    - l->csig1 * csig2 * J12);
+    if (outmask & GEOD_GEODESICSCALE) {
+      real t = l->k2 * (ssig2 - l->ssig1) * (ssig2 + l->ssig1) / (l->dn1 + dn2);
+      M12 = csig12 + (t *  ssig2 -  csig2 * J12) * l->ssig1 / l->dn1;
+      M21 = csig12 - (t * l->ssig1 - l->csig1 * J12) *  ssig2 /  dn2;
+    }
+  }
+
+  if (outmask & GEOD_AREA) {
+    real
+      B42 = SinCosSeries(FALSE, ssig2, csig2, l->C4a, nC4);
+    real salp12, calp12;
+    if (l->calp0 == 0 || l->salp0 == 0) {
+      /* alp12 = alp2 - alp1, used in atan2 so no need to normalized */
+      salp12 = salp2 * l->calp1 - calp2 * l->salp1;
+      calp12 = calp2 * l->calp1 + salp2 * l->salp1;
+      /* The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+       * salp12 = -0 and alp12 = -180.  However this depends on the sign being
+       * attached to 0 correctly.  The following ensures the correct
+       * behavior. */
+      if (salp12 == 0 && calp12 < 0) {
+        salp12 = tiny * l->calp1;
+        calp12 = -1;
+      }
+    } else {
+      /* tan(alp) = tan(alp0) * sec(sig)
+       * tan(alp2-alp1) = (tan(alp2) -tan(alp1)) / (tan(alp2)*tan(alp1)+1)
+       * = calp0 * salp0 * (csig1-csig2) / (salp0^2 + calp0^2 * csig1*csig2)
+       * If csig12 > 0, write
+       *   csig1 - csig2 = ssig12 * (csig1 * ssig12 / (1 + csig12) + ssig1)
+       * else
+       *   csig1 - csig2 = csig1 * (1 - csig12) + ssig12 * ssig1
+       * No need to normalize */
+      salp12 = l->calp0 * l->salp0 *
+        (csig12 <= 0 ? l->csig1 * (1 - csig12) + ssig12 * l->ssig1 :
+         ssig12 * (l->csig1 * ssig12 / (1 + csig12) + l->ssig1));
+      calp12 = sq(l->salp0) + sq(l->calp0) * l->csig1 * csig2;
+    }
+    S12 = l->c2 * atan2(salp12, calp12) + l->A4 * (B42 - l->B41);
+  }
+
+  if (outmask & GEOD_LATITUDE)
+    *plat2 = lat2;
+  if (outmask & GEOD_LONGITUDE)
+    *plon2 = lon2;
+  if (outmask & GEOD_AZIMUTH)
+    *pazi2 = azi2;
+  if (outmask & GEOD_DISTANCE)
+    *ps12 = s12;
+  if (outmask & GEOD_REDUCEDLENGTH)
+    *pm12 = m12;
+  if (outmask & GEOD_GEODESICSCALE) {
+    if (pM12) *pM12 = M12;
+    if (pM21) *pM21 = M21;
+  }
+  if (outmask & GEOD_AREA)
+    *pS12 = S12;
+
+  return arcmode ? s12_a12 : sig12 / degree;
+}
+
+void geod_position(const struct geod_geodesicline* l, real s12,
+                   real* plat2, real* plon2, real* pazi2) {
+  geod_genposition(l, FALSE, s12, plat2, plon2, pazi2, 0, 0, 0, 0, 0);
+}
+
+real geod_gendirect(const struct geod_geodesic* g,
+                    real lat1, real lon1, real azi1,
+                    boolx arcmode, real s12_a12,
+                    real* plat2, real* plon2, real* pazi2,
+                    real* ps12, real* pm12, real* pM12, real* pM21,
+                    real* pS12) {
+  struct geod_geodesicline l;
+  unsigned outmask =
+    (plat2 ? GEOD_LATITUDE : 0U) |
+    (plon2 ? GEOD_LONGITUDE : 0U) |
+    (pazi2 ? GEOD_AZIMUTH : 0U) |
+    (ps12 ? GEOD_DISTANCE : 0U) |
+    (pm12 ? GEOD_REDUCEDLENGTH : 0U) |
+    (pM12 || pM21 ? GEOD_GEODESICSCALE : 0U) |
+    (pS12 ? GEOD_AREA : 0U);
+
+  geod_lineinit(&l, g, lat1, lon1, azi1,
+                /* Automatically supply GEOD_DISTANCE_IN if necessary */
+                outmask | (arcmode ? GEOD_NONE : GEOD_DISTANCE_IN));
+  return geod_genposition(&l, arcmode, s12_a12,
+                          plat2, plon2, pazi2, ps12, pm12, pM12, pM21, pS12);
+}
+
+void geod_direct(const struct geod_geodesic* g,
+                 real lat1, real lon1, real azi1,
+                 real s12,
+                 real* plat2, real* plon2, real* pazi2) {
+  geod_gendirect(g, lat1, lon1, azi1, FALSE, s12, plat2, plon2, pazi2,
+                 0, 0, 0, 0, 0);
+}
+
+real geod_geninverse(const struct geod_geodesic* g,
+                     real lat1, real lon1, real lat2, real lon2,
+                     real* ps12, real* pazi1, real* pazi2,
+                     real* pm12, real* pM12, real* pM21, real* pS12) {
+  real s12 = 0, azi1 = 0, azi2 = 0, m12 = 0, M12 = 0, M21 = 0, S12 = 0;
+  real lon12;
+  int latsign, lonsign, swapp;
+  real phi, sbet1, cbet1, sbet2, cbet2, s12x = 0, m12x = 0;
+  real dn1, dn2, lam12, slam12, clam12;
+  real a12 = 0, sig12, calp1 = 0, salp1 = 0, calp2 = 0, salp2 = 0;
+  /* index zero elements of these arrays are unused */
+  real C1a[nC1 + 1], C2a[nC2 + 1], C3a[nC3];
+  boolx meridian;
+  real omg12 = 0;
+
+  unsigned outmask =
+    (ps12 ? GEOD_DISTANCE : 0U) |
+    (pazi1 || pazi2 ? GEOD_AZIMUTH : 0U) |
+    (pm12 ? GEOD_REDUCEDLENGTH : 0U) |
+    (pM12 || pM21 ? GEOD_GEODESICSCALE : 0U) |
+    (pS12 ? GEOD_AREA : 0U);
+
+  outmask &= OUT_ALL;
+  /* Compute longitude difference (AngDiff does this carefully).  Result is
+   * in [-180, 180] but -180 is only for west-going geodesics.  180 is for
+   * east-going and meridional geodesics. */
+  lon12 = AngDiff(AngNormalize(lon1), AngNormalize(lon2));
+  /* If very close to being on the same half-meridian, then make it so. */
+  lon12 = AngRound(lon12);
+  /* Make longitude difference positive. */
+  lonsign = lon12 >= 0 ? 1 : -1;
+  lon12 *= lonsign;
+  /* If really close to the equator, treat as on equator. */
+  lat1 = AngRound(lat1);
+  lat2 = AngRound(lat2);
+  /* Swap points so that point with higher (abs) latitude is point 1 */
+  swapp = fabs(lat1) >= fabs(lat2) ? 1 : -1;
+  if (swapp < 0) {
+    lonsign *= -1;
+    swapx(&lat1, &lat2);
+  }
+  /* Make lat1 <= 0 */
+  latsign = lat1 < 0 ? 1 : -1;
+  lat1 *= latsign;
+  lat2 *= latsign;
+  /* Now we have
+   *
+   *     0 <= lon12 <= 180
+   *     -90 <= lat1 <= 0
+   *     lat1 <= lat2 <= -lat1
+   *
+   * longsign, swapp, latsign register the transformation to bring the
+   * coordinates to this canonical form.  In all cases, 1 means no change was
+   * made.  We make these transformations so that there are few cases to
+   * check, e.g., on verifying quadrants in atan2.  In addition, this
+   * enforces some symmetries in the results returned. */
+
+  phi = lat1 * degree;
+  /* Ensure cbet1 = +epsilon at poles */
+  sbet1 = g->f1 * sin(phi);
+  cbet1 = lat1 == -90 ? tiny : cos(phi);
+  SinCosNorm(&sbet1, &cbet1);
+
+  phi = lat2 * degree;
+  /* Ensure cbet2 = +epsilon at poles */
+  sbet2 = g->f1 * sin(phi);
+  cbet2 = fabs(lat2) == 90 ? tiny : cos(phi);
+  SinCosNorm(&sbet2, &cbet2);
+
+  /* If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of the
+   * |bet1| - |bet2|.  Alternatively (cbet1 >= -sbet1), abs(sbet2) + sbet1 is
+   * a better measure.  This logic is used in assigning calp2 in Lambda12.
+   * Sometimes these quantities vanish and in that case we force bet2 = +/-
+   * bet1 exactly.  An example where is is necessary is the inverse problem
+   * 48.522876735459 0 -48.52287673545898293 179.599720456223079643
+   * which failed with Visual Studio 10 (Release and Debug) */
+
+  if (cbet1 < -sbet1) {
+    if (cbet2 == cbet1)
+      sbet2 = sbet2 < 0 ? sbet1 : -sbet1;
+  } else {
+    if (fabs(sbet2) == -sbet1)
+      cbet2 = cbet1;
+  }
+
+  dn1 = sqrt(1 + g->ep2 * sq(sbet1));
+  dn2 = sqrt(1 + g->ep2 * sq(sbet2));
+
+  lam12 = lon12 * degree;
+  slam12 = lon12 == 180 ? 0 : sin(lam12);
+  clam12 = cos(lam12);      /* lon12 == 90 isn't interesting */
+
+  meridian = lat1 == -90 || slam12 == 0;
+
+  if (meridian) {
+
+    /* Endpoints are on a single full meridian, so the geodesic might lie on
+     * a meridian. */
+
+    real ssig1, csig1, ssig2, csig2;
+    calp1 = clam12; salp1 = slam12; /* Head to the target longitude */
+    calp2 = 1; salp2 = 0;           /* At the target we're heading north */
+
+    /* tan(bet) = tan(sig) * cos(alp) */
+    ssig1 = sbet1; csig1 = calp1 * cbet1;
+    ssig2 = sbet2; csig2 = calp2 * cbet2;
+
+    /* sig12 = sig2 - sig1 */
+    sig12 = atan2(maxx(csig1 * ssig2 - ssig1 * csig2, (real)(0)),
+                  csig1 * csig2 + ssig1 * ssig2);
+    {
+      real dummy;
+      Lengths(g, g->n, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+              cbet1, cbet2, &s12x, &m12x, &dummy,
+              (outmask & GEOD_GEODESICSCALE) != 0U, &M12, &M21, C1a, C2a);
+    }
+    /* Add the check for sig12 since zero length geodesics might yield m12 <
+     * 0.  Test case was
+     *
+     *    echo 20.001 0 20.001 0 | Geod -i
+     *
+     * In fact, we will have sig12 > pi/2 for meridional geodesic which is
+     * not a shortest path. */
+    if (sig12 < 1 || m12x >= 0) {
+      m12x *= g->b;
+      s12x *= g->b;
+      a12 = sig12 / degree;
+    } else
+      /* m12 < 0, i.e., prolate and too close to anti-podal */
+      meridian = FALSE;
+  }
+
+  if (!meridian &&
+      sbet1 == 0 &&           /* and sbet2 == 0 */
+      /* Mimic the way Lambda12 works with calp1 = 0 */
+      (g->f <= 0 || lam12 <= pi - g->f * pi)) {
+
+    /* Geodesic runs along equator */
+    calp1 = calp2 = 0; salp1 = salp2 = 1;
+    s12x = g->a * lam12;
+    sig12 = omg12 = lam12 / g->f1;
+    m12x = g->b * sin(sig12);
+    if (outmask & GEOD_GEODESICSCALE)
+      M12 = M21 = cos(sig12);
+    a12 = lon12 / g->f1;
+
+  } else if (!meridian) {
+
+    /* Now point1 and point2 belong within a hemisphere bounded by a
+     * meridian and geodesic is neither meridional or equatorial. */
+
+    /* Figure a starting point for Newton's method */
+    real dnm = 0;
+    sig12 = InverseStart(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2,
+                         lam12,
+                         &salp1, &calp1, &salp2, &calp2, &dnm,
+                         C1a, C2a);
+
+    if (sig12 >= 0) {
+      /* Short lines (InverseStart sets salp2, calp2, dnm) */
+      s12x = sig12 * g->b * dnm;
+      m12x = sq(dnm) * g->b * sin(sig12 / dnm);
+      if (outmask & GEOD_GEODESICSCALE)
+        M12 = M21 = cos(sig12 / dnm);
+      a12 = sig12 / degree;
+      omg12 = lam12 / (g->f1 * dnm);
+    } else {
+
+      /* Newton's method.  This is a straightforward solution of f(alp1) =
+       * lambda12(alp1) - lam12 = 0 with one wrinkle.  f(alp) has exactly one
+       * root in the interval (0, pi) and its derivative is positive at the
+       * root.  Thus f(alp) is positive for alp > alp1 and negative for alp <
+       * alp1.  During the course of the iteration, a range (alp1a, alp1b) is
+       * maintained which brackets the root and with each evaluation of
+       * f(alp) the range is shrunk, if possible.  Newton's method is
+       * restarted whenever the derivative of f is negative (because the new
+       * value of alp1 is then further from the solution) or if the new
+       * estimate of alp1 lies outside (0,pi); in this case, the new starting
+       * guess is taken to be (alp1a + alp1b) / 2. */
+      real ssig1 = 0, csig1 = 0, ssig2 = 0, csig2 = 0, eps = 0;
+      unsigned numit = 0;
+      /* Bracketing range */
+      real salp1a = tiny, calp1a = 1, salp1b = tiny, calp1b = -1;
+      boolx tripn, tripb;
+      for (tripn = FALSE, tripb = FALSE; numit < maxit2; ++numit) {
+        /* the WGS84 test set: mean = 1.47, sd = 1.25, max = 16
+         * WGS84 and random input: mean = 2.85, sd = 0.60 */
+        real dv,
+          v = (Lambda12(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1,
+                        &salp2, &calp2, &sig12, &ssig1, &csig1, &ssig2, &csig2,
+                        &eps, &omg12, numit < maxit1, &dv, C1a, C2a, C3a)
+               - lam12);
+        /* 2 * tol0 is approximately 1 ulp for a number in [0, pi]. */
+        /* Reversed test to allow escape with NaNs */
+        if (tripb || !(fabs(v) >= (tripn ? 8 : 2) * tol0)) break;
+        /* Update bracketing values */
+        if (v > 0 && (numit > maxit1 || calp1/salp1 > calp1b/salp1b))
+          { salp1b = salp1; calp1b = calp1; }
+        else if (v < 0 && (numit > maxit1 || calp1/salp1 < calp1a/salp1a))
+          { salp1a = salp1; calp1a = calp1; }
+        if (numit < maxit1 && dv > 0) {
+          real
+            dalp1 = -v/dv;
+          real
+            sdalp1 = sin(dalp1), cdalp1 = cos(dalp1),
+            nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
+          if (nsalp1 > 0 && fabs(dalp1) < pi) {
+            calp1 = calp1 * cdalp1 - salp1 * sdalp1;
+            salp1 = nsalp1;
+            SinCosNorm(&salp1, &calp1);
+            /* In some regimes we don't get quadratic convergence because
+             * slope -> 0.  So use convergence conditions based on epsilon
+             * instead of sqrt(epsilon). */
+            tripn = fabs(v) <= 16 * tol0;
+            continue;
+          }
+        }
+        /* Either dv was not postive or updated value was outside legal
+         * range.  Use the midpoint of the bracket as the next estimate.
+         * This mechanism is not needed for the WGS84 ellipsoid, but it does
+         * catch problems with more eccentric ellipsoids.  Its efficacy is
+         * such for the WGS84 test set with the starting guess set to alp1 =
+         * 90deg:
+         * the WGS84 test set: mean = 5.21, sd = 3.93, max = 24
+         * WGS84 and random input: mean = 4.74, sd = 0.99 */
+        salp1 = (salp1a + salp1b)/2;
+        calp1 = (calp1a + calp1b)/2;
+        SinCosNorm(&salp1, &calp1);
+        tripn = FALSE;
+        tripb = (fabs(salp1a - salp1) + (calp1a - calp1) < tolb ||
+                 fabs(salp1 - salp1b) + (calp1 - calp1b) < tolb);
+      }
+      {
+        real dummy;
+        Lengths(g, eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+                cbet1, cbet2, &s12x, &m12x, &dummy,
+                (outmask & GEOD_GEODESICSCALE) != 0U, &M12, &M21, C1a, C2a);
+      }
+      m12x *= g->b;
+      s12x *= g->b;
+      a12 = sig12 / degree;
+      omg12 = lam12 - omg12;
+    }
+  }
+
+  if (outmask & GEOD_DISTANCE)
+    s12 = 0 + s12x;             /* Convert -0 to 0 */
+
+  if (outmask & GEOD_REDUCEDLENGTH)
+    m12 = 0 + m12x;             /* Convert -0 to 0 */
+
+  if (outmask & GEOD_AREA) {
+    real
+      /* From Lambda12: sin(alp1) * cos(bet1) = sin(alp0) */
+      salp0 = salp1 * cbet1,
+      calp0 = hypotx(calp1, salp1 * sbet1); /* calp0 > 0 */
+    real alp12;
+    if (calp0 != 0 && salp0 != 0) {
+      real
+        /* From Lambda12: tan(bet) = tan(sig) * cos(alp) */
+        ssig1 = sbet1, csig1 = calp1 * cbet1,
+        ssig2 = sbet2, csig2 = calp2 * cbet2,
+        k2 = sq(calp0) * g->ep2,
+        eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2),
+        /* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0). */
+        A4 = sq(g->a) * calp0 * salp0 * g->e2;
+      real C4a[nC4];
+      real B41, B42;
+      SinCosNorm(&ssig1, &csig1);
+      SinCosNorm(&ssig2, &csig2);
+      C4f(g, eps, C4a);
+      B41 = SinCosSeries(FALSE, ssig1, csig1, C4a, nC4);
+      B42 = SinCosSeries(FALSE, ssig2, csig2, C4a, nC4);
+      S12 = A4 * (B42 - B41);
+    } else
+      /* Avoid problems with indeterminate sig1, sig2 on equator */
+      S12 = 0;
+
+    if (!meridian &&
+        omg12 < (real)(0.75) * pi &&   /* Long difference too big */
+        sbet2 - sbet1 < (real)(1.75)) { /* Lat difference too big */
+      /* Use tan(Gamma/2) = tan(omg12/2)
+       * * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2))
+       * with tan(x/2) = sin(x)/(1+cos(x)) */
+      real
+        somg12 = sin(omg12), domg12 = 1 + cos(omg12),
+        dbet1 = 1 + cbet1, dbet2 = 1 + cbet2;
+      alp12 = 2 * atan2( somg12 * ( sbet1 * dbet2 + sbet2 * dbet1 ),
+                         domg12 * ( sbet1 * sbet2 + dbet1 * dbet2 ) );
+    } else {
+      /* alp12 = alp2 - alp1, used in atan2 so no need to normalize */
+      real
+        salp12 = salp2 * calp1 - calp2 * salp1,
+        calp12 = calp2 * calp1 + salp2 * salp1;
+      /* The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+       * salp12 = -0 and alp12 = -180.  However this depends on the sign
+       * being attached to 0 correctly.  The following ensures the correct
+       * behavior. */
+      if (salp12 == 0 && calp12 < 0) {
+        salp12 = tiny * calp1;
+        calp12 = -1;
+      }
+      alp12 = atan2(salp12, calp12);
+    }
+    S12 += g->c2 * alp12;
+    S12 *= swapp * lonsign * latsign;
+    /* Convert -0 to 0 */
+    S12 += 0;
+  }
+
+  /* Convert calp, salp to azimuth accounting for lonsign, swapp, latsign. */
+  if (swapp < 0) {
+    swapx(&salp1, &salp2);
+    swapx(&calp1, &calp2);
+    if (outmask & GEOD_GEODESICSCALE)
+      swapx(&M12, &M21);
+  }
+
+  salp1 *= swapp * lonsign; calp1 *= swapp * latsign;
+  salp2 *= swapp * lonsign; calp2 *= swapp * latsign;
+
+  if (outmask & GEOD_AZIMUTH) {
+    /* minus signs give range [-180, 180). 0- converts -0 to +0. */
+    azi1 = 0 - atan2(-salp1, calp1) / degree;
+    azi2 = 0 - atan2(-salp2, calp2) / degree;
+  }
+
+  if (outmask & GEOD_DISTANCE)
+    *ps12 = s12;
+  if (outmask & GEOD_AZIMUTH) {
+    if (pazi1) *pazi1 = azi1;
+    if (pazi2) *pazi2 = azi2;
+  }
+  if (outmask & GEOD_REDUCEDLENGTH)
+    *pm12 = m12;
+  if (outmask & GEOD_GEODESICSCALE) {
+    if (pM12) *pM12 = M12;
+    if (pM21) *pM21 = M21;
+  }
+  if (outmask & GEOD_AREA)
+    *pS12 = S12;
+
+  /* Returned value in [0, 180] */
+  return a12;
+}
+
+void geod_inverse(const struct geod_geodesic* g,
+                  real lat1, real lon1, real lat2, real lon2,
+                  real* ps12, real* pazi1, real* pazi2) {
+  geod_geninverse(g, lat1, lon1, lat2, lon2, ps12, pazi1, pazi2, 0, 0, 0, 0);
+}
+
+real SinCosSeries(boolx sinp, real sinx, real cosx, const real c[], int n) {
+  /* Evaluate
+   * y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :
+   *            sum(c[i] * cos((2*i+1) * x), i, 0, n-1)
+   * using Clenshaw summation.  N.B. c[0] is unused for sin series
+   * Approx operation count = (n + 5) mult and (2 * n + 2) add */
+  real ar, y0, y1;
+  c += (n + sinp);              /* Point to one beyond last element */
+  ar = 2 * (cosx - sinx) * (cosx + sinx); /* 2 * cos(2 * x) */
+  y0 = n & 1 ? *--c : 0; y1 = 0;          /* accumulators for sum */
+  /* Now n is even */
+  n /= 2;
+  while (n--) {
+    /* Unroll loop x 2, so accumulators return to their original role */
+    y1 = ar * y0 - y1 + *--c;
+    y0 = ar * y1 - y0 + *--c;
+  }
+  return sinp
+    ? 2 * sinx * cosx * y0      /* sin(2 * x) * y0 */
+    : cosx * (y0 - y1);         /* cos(x) * (y0 - y1) */
+}
+
+void Lengths(const struct geod_geodesic* g,
+             real eps, real sig12,
+             real ssig1, real csig1, real dn1,
+             real ssig2, real csig2, real dn2,
+             real cbet1, real cbet2,
+             real* ps12b, real* pm12b, real* pm0,
+             boolx scalep, real* pM12, real* pM21,
+             /* Scratch areas of the right size */
+             real C1a[], real C2a[]) {
+  real s12b = 0, m12b = 0, m0 = 0, M12 = 0, M21 = 0;
+  real A1m1, AB1, A2m1, AB2, J12;
+
+  /* Return m12b = (reduced length)/b; also calculate s12b = distance/b,
+   * and m0 = coefficient of secular term in expression for reduced length. */
+  C1f(eps, C1a);
+  C2f(eps, C2a);
+  A1m1 = A1m1f(eps);
+  AB1 = (1 + A1m1) * (SinCosSeries(TRUE, ssig2, csig2, C1a, nC1) -
+                      SinCosSeries(TRUE, ssig1, csig1, C1a, nC1));
+  A2m1 = A2m1f(eps);
+  AB2 = (1 + A2m1) * (SinCosSeries(TRUE, ssig2, csig2, C2a, nC2) -
+                      SinCosSeries(TRUE, ssig1, csig1, C2a, nC2));
+  m0 = A1m1 - A2m1;
+  J12 = m0 * sig12 + (AB1 - AB2);
+  /* Missing a factor of b.
+   * Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure accurate
+   * cancellation in the case of coincident points. */
+  m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12;
+  /* Missing a factor of b */
+  s12b = (1 + A1m1) * sig12 + AB1;
+  if (scalep) {
+    real csig12 = csig1 * csig2 + ssig1 * ssig2;
+    real t = g->ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2);
+    M12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1;
+    M21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2;
+  }
+  *ps12b = s12b;
+  *pm12b = m12b;
+  *pm0 = m0;
+  if (scalep) {
+    *pM12 = M12;
+    *pM21 = M21;
+  }
+}
+
+real Astroid(real x, real y) {
+  /* Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.
+   * This solution is adapted from Geocentric::Reverse. */
+  real k;
+  real
+    p = sq(x),
+    q = sq(y),
+    r = (p + q - 1) / 6;
+  if ( !(q == 0 && r <= 0) ) {
+    real
+      /* Avoid possible division by zero when r = 0 by multiplying equations
+       * for s and t by r^3 and r, resp. */
+      S = p * q / 4,            /* S = r^3 * s */
+      r2 = sq(r),
+      r3 = r * r2,
+      /* The discrimant of the quadratic equation for T3.  This is zero on
+       * the evolute curve p^(1/3)+q^(1/3) = 1 */
+      disc = S * (S + 2 * r3);
+    real u = r;
+    real v, uv, w;
+    if (disc >= 0) {
+      real T3 = S + r3, T;
+      /* Pick the sign on the sqrt to maximize abs(T3).  This minimizes loss
+       * of precision due to cancellation.  The result is unchanged because
+       * of the way the T is used in definition of u. */
+      T3 += T3 < 0 ? -sqrt(disc) : sqrt(disc); /* T3 = (r * t)^3 */
+      /* N.B. cbrtx always returns the real root.  cbrtx(-8) = -2. */
+      T = cbrtx(T3);            /* T = r * t */
+      /* T can be zero; but then r2 / T -> 0. */
+      u += T + (T != 0 ? r2 / T : 0);
+    } else {
+      /* T is complex, but the way u is defined the result is real. */
+      real ang = atan2(sqrt(-disc), -(S + r3));
+      /* There are three possible cube roots.  We choose the root which
+       * avoids cancellation.  Note that disc < 0 implies that r < 0. */
+      u += 2 * r * cos(ang / 3);
+    }
+    v = sqrt(sq(u) + q);              /* guaranteed positive */
+    /* Avoid loss of accuracy when u < 0. */
+    uv = u < 0 ? q / (v - u) : u + v; /* u+v, guaranteed positive */
+    w = (uv - q) / (2 * v);           /* positive? */
+    /* Rearrange expression for k to avoid loss of accuracy due to
+     * subtraction.  Division by 0 not possible because uv > 0, w >= 0. */
+    k = uv / (sqrt(uv + sq(w)) + w);   /* guaranteed positive */
+  } else {               /* q == 0 && r <= 0 */
+    /* y = 0 with |x| <= 1.  Handle this case directly.
+     * for y small, positive root is k = abs(y)/sqrt(1-x^2) */
+    k = 0;
+  }
+  return k;
+}
+
+real InverseStart(const struct geod_geodesic* g,
+                  real sbet1, real cbet1, real dn1,
+                  real sbet2, real cbet2, real dn2,
+                  real lam12,
+                  real* psalp1, real* pcalp1,
+                  /* Only updated if return val >= 0 */
+                  real* psalp2, real* pcalp2,
+                  /* Only updated for short lines */
+                  real* pdnm,
+                  /* Scratch areas of the right size */
+                  real C1a[], real C2a[]) {
+  real salp1 = 0, calp1 = 0, salp2 = 0, calp2 = 0, dnm = 0;
+
+  /* Return a starting point for Newton's method in salp1 and calp1 (function
+   * value is -1).  If Newton's method doesn't need to be used, return also
+   * salp2 and calp2 and function value is sig12. */
+  real
+    sig12 = -1,               /* Return value */
+    /* bet12 = bet2 - bet1 in [0, pi); bet12a = bet2 + bet1 in (-pi, 0] */
+    sbet12 = sbet2 * cbet1 - cbet2 * sbet1,
+    cbet12 = cbet2 * cbet1 + sbet2 * sbet1;
+#if defined(__GNUC__) && __GNUC__ == 4 &&       \
+  (__GNUC_MINOR__ < 6 || defined(__MINGW32__))
+  /* Volatile declaration needed to fix inverse cases
+   * 88.202499451857 0 -88.202499451857 179.981022032992859592
+   * 89.262080389218 0 -89.262080389218 179.992207982775375662
+   * 89.333123580033 0 -89.333123580032997687 179.99295812360148422
+   * which otherwise fail with g++ 4.4.4 x86 -O3 (Linux)
+   * and g++ 4.4.0 (mingw) and g++ 4.6.1 (tdm mingw). */
+  real sbet12a;
+  {
+    volatile real xx1 = sbet2 * cbet1;
+    volatile real xx2 = cbet2 * sbet1;
+    sbet12a = xx1 + xx2;
+  }
+#else
+  real sbet12a = sbet2 * cbet1 + cbet2 * sbet1;
+#endif
+  boolx shortline = cbet12 >= 0 && sbet12 < (real)(0.5) &&
+    cbet2 * lam12 < (real)(0.5);
+  real omg12 = lam12, somg12, comg12, ssig12, csig12;
+  if (shortline) {
+    real sbetm2 = sq(sbet1 + sbet2);
+    /* sin((bet1+bet2)/2)^2
+     * =  (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2) */
+    sbetm2 /= sbetm2 + sq(cbet1 + cbet2);
+    dnm = sqrt(1 + g->ep2 * sbetm2);
+    omg12 /= g->f1 * dnm;
+  }
+  somg12 = sin(omg12); comg12 = cos(omg12);
+
+  salp1 = cbet2 * somg12;
+  calp1 = comg12 >= 0 ?
+    sbet12 + cbet2 * sbet1 * sq(somg12) / (1 + comg12) :
+    sbet12a - cbet2 * sbet1 * sq(somg12) / (1 - comg12);
+
+  ssig12 = hypotx(salp1, calp1);
+  csig12 = sbet1 * sbet2 + cbet1 * cbet2 * comg12;
+
+  if (shortline && ssig12 < g->etol2) {
+    /* really short lines */
+    salp2 = cbet1 * somg12;
+    calp2 = sbet12 - cbet1 * sbet2 *
+      (comg12 >= 0 ? sq(somg12) / (1 + comg12) : 1 - comg12);
+    SinCosNorm(&salp2, &calp2);
+    /* Set return value */
+    sig12 = atan2(ssig12, csig12);
+  } else if (fabs(g->n) > (real)(0.1) || /* No astroid calc if too eccentric */
+             csig12 >= 0 ||
+             ssig12 >= 6 * fabs(g->n) * pi * sq(cbet1)) {
+    /* Nothing to do, zeroth order spherical approximation is OK */
+  } else {
+    /* Scale lam12 and bet2 to x, y coordinate system where antipodal point
+     * is at origin and singular point is at y = 0, x = -1. */
+    real y, lamscale, betscale;
+    /* Volatile declaration needed to fix inverse case
+     * 56.320923501171 0 -56.320923501171 179.664747671772880215
+     * which otherwise fails with g++ 4.4.4 x86 -O3 */
+    volatile real x;
+    if (g->f >= 0) {            /* In fact f == 0 does not get here */
+      /* x = dlong, y = dlat */
+      {
+        real
+          k2 = sq(sbet1) * g->ep2,
+          eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2);
+        lamscale = g->f * cbet1 * A3f(g, eps) * pi;
+      }
+      betscale = lamscale * cbet1;
+
+      x = (lam12 - pi) / lamscale;
+      y = sbet12a / betscale;
+    } else {                    /* f < 0 */
+      /* x = dlat, y = dlong */
+      real
+        cbet12a = cbet2 * cbet1 - sbet2 * sbet1,
+        bet12a = atan2(sbet12a, cbet12a);
+      real m12b, m0, dummy;
+      /* In the case of lon12 = 180, this repeats a calculation made in
+       * Inverse. */
+      Lengths(g, g->n, pi + bet12a,
+              sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
+              cbet1, cbet2, &dummy, &m12b, &m0, FALSE,
+              &dummy, &dummy, C1a, C2a);
+      x = -1 + m12b / (cbet1 * cbet2 * m0 * pi);
+      betscale = x < -(real)(0.01) ? sbet12a / x :
+        -g->f * sq(cbet1) * pi;
+      lamscale = betscale / cbet1;
+      y = (lam12 - pi) / lamscale;
+    }
+
+    if (y > -tol1 && x > -1 - xthresh) {
+      /* strip near cut */
+      if (g->f >= 0) {
+        salp1 = minx((real)(1), -(real)(x)); calp1 = - sqrt(1 - sq(salp1));
+      } else {
+        calp1 = maxx((real)(x > -tol1 ? 0 : -1), (real)(x));
+        salp1 = sqrt(1 - sq(calp1));
+      }
+    } else {
+      /* Estimate alp1, by solving the astroid problem.
+       *
+       * Could estimate alpha1 = theta + pi/2, directly, i.e.,
+       *   calp1 = y/k; salp1 = -x/(1+k);  for f >= 0
+       *   calp1 = x/(1+k); salp1 = -y/k;  for f < 0 (need to check)
+       *
+       * However, it's better to estimate omg12 from astroid and use
+       * spherical formula to compute alp1.  This reduces the mean number of
+       * Newton iterations for astroid cases from 2.24 (min 0, max 6) to 2.12
+       * (min 0 max 5).  The changes in the number of iterations are as
+       * follows:
+       *
+       * change percent
+       *    1       5
+       *    0      78
+       *   -1      16
+       *   -2       0.6
+       *   -3       0.04
+       *   -4       0.002
+       *
+       * The histogram of iterations is (m = number of iterations estimating
+       * alp1 directly, n = number of iterations estimating via omg12, total
+       * number of trials = 148605):
+       *
+       *  iter    m      n
+       *    0   148    186
+       *    1 13046  13845
+       *    2 93315 102225
+       *    3 36189  32341
+       *    4  5396      7
+       *    5   455      1
+       *    6    56      0
+       *
+       * Because omg12 is near pi, estimate work with omg12a = pi - omg12 */
+      real k = Astroid(x, y);
+      real
+        omg12a = lamscale * ( g->f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k );
+      somg12 = sin(omg12a); comg12 = -cos(omg12a);
+      /* Update spherical estimate of alp1 using omg12 instead of lam12 */
+      salp1 = cbet2 * somg12;
+      calp1 = sbet12a - cbet2 * sbet1 * sq(somg12) / (1 - comg12);
+    }
+  }
+  if (salp1 > 0)              /* Sanity check on starting guess */
+    SinCosNorm(&salp1, &calp1);
+  else {
+    salp1 = 1; calp1 = 0;
+  }
+
+  *psalp1 = salp1;
+  *pcalp1 = calp1;
+  if (shortline)
+    *pdnm = dnm;
+  if (sig12 >= 0) {
+    *psalp2 = salp2;
+    *pcalp2 = calp2;
+  }
+  return sig12;
+}
+
+real Lambda12(const struct geod_geodesic* g,
+              real sbet1, real cbet1, real dn1,
+              real sbet2, real cbet2, real dn2,
+              real salp1, real calp1,
+              real* psalp2, real* pcalp2,
+              real* psig12,
+              real* pssig1, real* pcsig1,
+              real* pssig2, real* pcsig2,
+              real* peps, real* pdomg12,
+              boolx diffp, real* pdlam12,
+              /* Scratch areas of the right size */
+              real C1a[], real C2a[], real C3a[]) {
+  real salp2 = 0, calp2 = 0, sig12 = 0,
+    ssig1 = 0, csig1 = 0, ssig2 = 0, csig2 = 0, eps = 0, domg12 = 0, dlam12 = 0;
+  real salp0, calp0;
+  real somg1, comg1, somg2, comg2, omg12, lam12;
+  real B312, h0, k2;
+
+  if (sbet1 == 0 && calp1 == 0)
+    /* Break degeneracy of equatorial line.  This case has already been
+     * handled. */
+    calp1 = -tiny;
+
+  /* sin(alp1) * cos(bet1) = sin(alp0) */
+  salp0 = salp1 * cbet1;
+  calp0 = hypotx(calp1, salp1 * sbet1); /* calp0 > 0 */
+
+  /* tan(bet1) = tan(sig1) * cos(alp1)
+   * tan(omg1) = sin(alp0) * tan(sig1) = tan(omg1)=tan(alp1)*sin(bet1) */
+  ssig1 = sbet1; somg1 = salp0 * sbet1;
+  csig1 = comg1 = calp1 * cbet1;
+  SinCosNorm(&ssig1, &csig1);
+  /* SinCosNorm(&somg1, &comg1); -- don't need to normalize! */
+
+  /* Enforce symmetries in the case abs(bet2) = -bet1.  Need to be careful
+   * about this case, since this can yield singularities in the Newton
+   * iteration.
+   * sin(alp2) * cos(bet2) = sin(alp0) */
+  salp2 = cbet2 != cbet1 ? salp0 / cbet2 : salp1;
+  /* calp2 = sqrt(1 - sq(salp2))
+   *       = sqrt(sq(calp0) - sq(sbet2)) / cbet2
+   * and subst for calp0 and rearrange to give (choose positive sqrt
+   * to give alp2 in [0, pi/2]). */
+  calp2 = cbet2 != cbet1 || fabs(sbet2) != -sbet1 ?
+    sqrt(sq(calp1 * cbet1) +
+         (cbet1 < -sbet1 ?
+          (cbet2 - cbet1) * (cbet1 + cbet2) :
+          (sbet1 - sbet2) * (sbet1 + sbet2))) / cbet2 :
+    fabs(calp1);
+  /* tan(bet2) = tan(sig2) * cos(alp2)
+   * tan(omg2) = sin(alp0) * tan(sig2). */
+  ssig2 = sbet2; somg2 = salp0 * sbet2;
+  csig2 = comg2 = calp2 * cbet2;
+  SinCosNorm(&ssig2, &csig2);
+  /* SinCosNorm(&somg2, &comg2); -- don't need to normalize! */
+
+  /* sig12 = sig2 - sig1, limit to [0, pi] */
+  sig12 = atan2(maxx(csig1 * ssig2 - ssig1 * csig2, (real)(0)),
+                csig1 * csig2 + ssig1 * ssig2);
+
+  /* omg12 = omg2 - omg1, limit to [0, pi] */
+  omg12 = atan2(maxx(comg1 * somg2 - somg1 * comg2, (real)(0)),
+                comg1 * comg2 + somg1 * somg2);
+  k2 = sq(calp0) * g->ep2;
+  eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2);
+  C3f(g, eps, C3a);
+  B312 = (SinCosSeries(TRUE, ssig2, csig2, C3a, nC3-1) -
+          SinCosSeries(TRUE, ssig1, csig1, C3a, nC3-1));
+  h0 = -g->f * A3f(g, eps);
+  domg12 = salp0 * h0 * (sig12 + B312);
+  lam12 = omg12 + domg12;
+
+  if (diffp) {
+    if (calp2 == 0)
+      dlam12 = - 2 * g->f1 * dn1 / sbet1;
+    else {
+      real dummy;
+      Lengths(g, eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+              cbet1, cbet2, &dummy, &dlam12, &dummy,
+              FALSE, &dummy, &dummy, C1a, C2a);
+      dlam12 *= g->f1 / (calp2 * cbet2);
+    }
+  }
+
+  *psalp2 = salp2;
+  *pcalp2 = calp2;
+  *psig12 = sig12;
+  *pssig1 = ssig1;
+  *pcsig1 = csig1;
+  *pssig2 = ssig2;
+  *pcsig2 = csig2;
+  *peps = eps;
+  *pdomg12 = domg12;
+  if (diffp)
+    *pdlam12 = dlam12;
+
+  return lam12;
+}
+
+real A3f(const struct geod_geodesic* g, real eps) {
+  /* Evaluate sum(A3x[k] * eps^k, k, 0, nA3x-1) by Horner's method */
+  real v = 0;
+  int i;
+  for (i = nA3x; i; )
+    v = eps * v + g->A3x[--i];
+  return v;
+}
+
+void C3f(const struct geod_geodesic* g, real eps, real c[]) {
+  /* Evaluate C3 coeffs by Horner's method
+   * Elements c[1] thru c[nC3 - 1] are set */
+  int i, j, k;
+  real mult = 1;
+  for (j = nC3x, k = nC3 - 1; k; ) {
+    real t = 0;
+    for (i = nC3 - k; i; --i)
+      t = eps * t + g->C3x[--j];
+    c[k--] = t;
+  }
+
+  for (k = 1; k < nC3; ) {
+    mult *= eps;
+    c[k++] *= mult;
+  }
+}
+
+void C4f(const struct geod_geodesic* g, real eps, real c[]) {
+  /* Evaluate C4 coeffs by Horner's method
+   * Elements c[0] thru c[nC4 - 1] are set */
+  int i, j, k;
+  real mult = 1;
+  for (j = nC4x, k = nC4; k; ) {
+    real t = 0;
+    for (i = nC4 - k + 1; i; --i)
+      t = eps * t + g->C4x[--j];
+    c[--k] = t;
+  }
+
+  for (k = 1; k < nC4; ) {
+    mult *= eps;
+    c[k++] *= mult;
+  }
+}
+
+/* Generated by Maxima on 2010-09-04 10:26:17-04:00 */
+
+/* The scale factor A1-1 = mean value of (d/dsigma)I1 - 1 */
+real A1m1f(real eps)  {
+  real
+    eps2 = sq(eps),
+    t = eps2*(eps2*(eps2+4)+64)/256;
+  return (t + eps) / (1 - eps);
+}
+
+/* The coefficients C1[l] in the Fourier expansion of B1 */
+void C1f(real eps, real c[])  {
+  real
+    eps2 = sq(eps),
+    d = eps;
+  c[1] = d*((6-eps2)*eps2-16)/32;
+  d *= eps;
+  c[2] = d*((64-9*eps2)*eps2-128)/2048;
+  d *= eps;
+  c[3] = d*(9*eps2-16)/768;
+  d *= eps;
+  c[4] = d*(3*eps2-5)/512;
+  d *= eps;
+  c[5] = -7*d/1280;
+  d *= eps;
+  c[6] = -7*d/2048;
+}
+
+/* The coefficients C1p[l] in the Fourier expansion of B1p */
+void C1pf(real eps, real c[])  {
+  real
+    eps2 = sq(eps),
+    d = eps;
+  c[1] = d*(eps2*(205*eps2-432)+768)/1536;
+  d *= eps;
+  c[2] = d*(eps2*(4005*eps2-4736)+3840)/12288;
+  d *= eps;
+  c[3] = d*(116-225*eps2)/384;
+  d *= eps;
+  c[4] = d*(2695-7173*eps2)/7680;
+  d *= eps;
+  c[5] = 3467*d/7680;
+  d *= eps;
+  c[6] = 38081*d/61440;
+}
+
+/* The scale factor A2-1 = mean value of (d/dsigma)I2 - 1 */
+real A2m1f(real eps)  {
+  real
+    eps2 = sq(eps),
+    t = eps2*(eps2*(25*eps2+36)+64)/256;
+  return t * (1 - eps) - eps;
+}
+
+/* The coefficients C2[l] in the Fourier expansion of B2 */
+void C2f(real eps, real c[])  {
+  real
+    eps2 = sq(eps),
+    d = eps;
+  c[1] = d*(eps2*(eps2+2)+16)/32;
+  d *= eps;
+  c[2] = d*(eps2*(35*eps2+64)+384)/2048;
+  d *= eps;
+  c[3] = d*(15*eps2+80)/768;
+  d *= eps;
+  c[4] = d*(7*eps2+35)/512;
+  d *= eps;
+  c[5] = 63*d/1280;
+  d *= eps;
+  c[6] = 77*d/2048;
+}
+
+/* The scale factor A3 = mean value of (d/dsigma)I3 */
+void A3coeff(struct geod_geodesic* g) {
+  g->A3x[0] = 1;
+  g->A3x[1] = (g->n-1)/2;
+  g->A3x[2] = (g->n*(3*g->n-1)-2)/8;
+  g->A3x[3] = ((-g->n-3)*g->n-1)/16;
+  g->A3x[4] = (-2*g->n-3)/64;
+  g->A3x[5] = -3/(real)(128);
+}
+
+/* The coefficients C3[l] in the Fourier expansion of B3 */
+void C3coeff(struct geod_geodesic* g) {
+  g->C3x[0] = (1-g->n)/4;
+  g->C3x[1] = (1-g->n*g->n)/8;
+  g->C3x[2] = ((3-g->n)*g->n+3)/64;
+  g->C3x[3] = (2*g->n+5)/128;
+  g->C3x[4] = 3/(real)(128);
+  g->C3x[5] = ((g->n-3)*g->n+2)/32;
+  g->C3x[6] = ((-3*g->n-2)*g->n+3)/64;
+  g->C3x[7] = (g->n+3)/128;
+  g->C3x[8] = 5/(real)(256);
+  g->C3x[9] = (g->n*(5*g->n-9)+5)/192;
+  g->C3x[10] = (9-10*g->n)/384;
+  g->C3x[11] = 7/(real)(512);
+  g->C3x[12] = (7-14*g->n)/512;
+  g->C3x[13] = 7/(real)(512);
+  g->C3x[14] = 21/(real)(2560);
+}
+
+/* Generated by Maxima on 2012-10-19 08:02:34-04:00 */
+
+/* The coefficients C4[l] in the Fourier expansion of I4 */
+void C4coeff(struct geod_geodesic* g) {
+  g->C4x[0] = (g->n*(g->n*(g->n*(g->n*(100*g->n+208)+572)+3432)-12012)+30030)/
+    45045;
+  g->C4x[1] = (g->n*(g->n*(g->n*(64*g->n+624)-4576)+6864)-3003)/15015;
+  g->C4x[2] = (g->n*((14144-10656*g->n)*g->n-4576)-858)/45045;
+  g->C4x[3] = ((-224*g->n-4784)*g->n+1573)/45045;
+  g->C4x[4] = (1088*g->n+156)/45045;
+  g->C4x[5] = 97/(real)(15015);
+  g->C4x[6] = (g->n*(g->n*((-64*g->n-624)*g->n+4576)-6864)+3003)/135135;
+  g->C4x[7] = (g->n*(g->n*(5952*g->n-11648)+9152)-2574)/135135;
+  g->C4x[8] = (g->n*(5792*g->n+1040)-1287)/135135;
+  g->C4x[9] = (468-2944*g->n)/135135;
+  g->C4x[10] = 1/(real)(9009);
+  g->C4x[11] = (g->n*((4160-1440*g->n)*g->n-4576)+1716)/225225;
+  g->C4x[12] = ((4992-8448*g->n)*g->n-1144)/225225;
+  g->C4x[13] = (1856*g->n-936)/225225;
+  g->C4x[14] = 8/(real)(10725);
+  g->C4x[15] = (g->n*(3584*g->n-3328)+1144)/315315;
+  g->C4x[16] = (1024*g->n-208)/105105;
+  g->C4x[17] = -136/(real)(63063);
+  g->C4x[18] = (832-2560*g->n)/405405;
+  g->C4x[19] = -128/(real)(135135);
+  g->C4x[20] = 128/(real)(99099);
+}
+
+int transit(real lon1, real lon2) {
+  real lon12;
+  /* Return 1 or -1 if crossing prime meridian in east or west direction.
+   * Otherwise return zero. */
+  /* Compute lon12 the same way as Geodesic::Inverse. */
+  lon1 = AngNormalize(lon1);
+  lon2 = AngNormalize(lon2);
+  lon12 = AngDiff(lon1, lon2);
+  return lon1 < 0 && lon2 >= 0 && lon12 > 0 ? 1 :
+    (lon2 < 0 && lon1 >= 0 && lon12 < 0 ? -1 : 0);
+}
+
+void accini(real s[]) {
+  /* Initialize an accumulator; this is an array with two elements. */
+  s[0] = s[1] = 0;
+}
+
+void acccopy(const real s[], real t[]) {
+  /* Copy an accumulator; t = s. */
+  t[0] = s[0]; t[1] = s[1];
+}
+
+void accadd(real s[], real y) {
+  /* Add y to an accumulator. */
+  real u, z = sumx(y, s[1], &u);
+  s[0] = sumx(z, s[0], &s[1]);
+  if (s[0] == 0)
+    s[0] = u;
+  else
+    s[1] = s[1] + u;
+}
+
+real accsum(const real s[], real y) {
+  /* Return accumulator + y (but don't add to accumulator). */
+  real t[2];
+  acccopy(s, t);
+  accadd(t, y);
+  return t[0];
+}
+
+void accneg(real s[]) {
+  /* Negate an accumulator. */
+  s[0] = -s[0]; s[1] = -s[1];
+}
+
+void geod_polygon_init(struct geod_polygon* p, boolx polylinep) {
+  p->lat0 = p->lon0 = p->lat = p->lon = NaN;
+  p->polyline = (polylinep != 0);
+  accini(p->P);
+  accini(p->A);
+  p->num = p->crossings = 0;
+}
+
+void geod_polygon_addpoint(const struct geod_geodesic* g,
+                           struct geod_polygon* p,
+                           real lat, real lon) {
+  lon = AngNormalize(lon);
+  if (p->num == 0) {
+    p->lat0 = p->lat = lat;
+    p->lon0 = p->lon = lon;
+  } else {
+    real s12, S12;
+    geod_geninverse(g, p->lat, p->lon, lat, lon,
+                    &s12, 0, 0, 0, 0, 0, p->polyline ? 0 : &S12);
+    accadd(p->P, s12);
+    if (!p->polyline) {
+      accadd(p->A, S12);
+      p->crossings += transit(p->lon, lon);
+    }
+    p->lat = lat; p->lon = lon;
+  }
+  ++p->num;
+}
+
+void geod_polygon_addedge(const struct geod_geodesic* g,
+                          struct geod_polygon* p,
+                          real azi, real s) {
+  if (p->num) {                 /* Do nothing is num is zero */
+    real lat, lon, S12;
+    geod_gendirect(g, p->lat, p->lon, azi, FALSE, s,
+                   &lat, &lon, 0,
+                   0, 0, 0, 0, p->polyline ? 0 : &S12);
+    accadd(p->P, s);
+    if (!p->polyline) {
+      accadd(p->A, S12);
+      p->crossings += transit(p->lon, lon);
+    }
+    p->lat = lat; p->lon = lon;
+    ++p->num;
+  }
+}
+
+unsigned geod_polygon_compute(const struct geod_geodesic* g,
+                              const struct geod_polygon* p,
+                              boolx reverse, boolx sign,
+                              real* pA, real* pP) {
+  real s12, S12, t[2], area0;
+  int crossings;
+  if (p->num < 2) {
+    if (pP) *pP = 0;
+    if (!p->polyline && pA) *pA = 0;
+    return p->num;
+  }
+  if (p->polyline) {
+    if (pP) *pP = p->P[0];
+    return p->num;
+  }
+  geod_geninverse(g, p->lat, p->lon, p->lat0, p->lon0,
+                  &s12, 0, 0, 0, 0, 0, &S12);
+  if (pP) *pP = accsum(p->P, s12);
+  acccopy(p->A, t);
+  accadd(t, S12);
+  crossings = p->crossings + transit(p->lon, p->lon0);
+  area0 = 4 * pi * g->c2;
+  if (crossings & 1)
+    accadd(t, (t[0] < 0 ? 1 : -1) * area0/2);
+  /* area is with the clockwise sense.  If !reverse convert to
+   * counter-clockwise convention. */
+  if (!reverse)
+    accneg(t);
+  /* If sign put area in (-area0/2, area0/2], else put area in [0, area0) */
+  if (sign) {
+    if (t[0] > area0/2)
+      accadd(t, -area0);
+    else if (t[0] <= -area0/2)
+      accadd(t, +area0);
+  } else {
+    if (t[0] >= area0)
+      accadd(t, -area0);
+    else if (t[0] < 0)
+      accadd(t, +area0);
+  }
+  if (pA) *pA = 0 + t[0];
+  return p->num;
+}
+
+unsigned geod_polygon_testpoint(const struct geod_geodesic* g,
+                                const struct geod_polygon* p,
+                                real lat, real lon,
+                                boolx reverse, boolx sign,
+                                real* pA, real* pP) {
+  real perimeter, tempsum, area0;
+  int crossings, i;
+  unsigned num = p->num + 1;
+  if (num == 1) {
+    if (pP) *pP = 0;
+    if (!p->polyline && pA) *pA = 0;
+    return num;
+  }
+  perimeter = p->P[0];
+  tempsum = p->polyline ? 0 : p->A[0];
+  crossings = p->crossings;
+  for (i = 0; i < (p->polyline ? 1 : 2); ++i) {
+    real s12, S12;
+    geod_geninverse(g,
+                    i == 0 ? p->lat  : lat, i == 0 ? p->lon  : lon,
+                    i != 0 ? p->lat0 : lat, i != 0 ? p->lon0 : lon,
+                    &s12, 0, 0, 0, 0, 0, p->polyline ? 0 : &S12);
+    perimeter += s12;
+    if (!p->polyline) {
+      tempsum += S12;
+      crossings += transit(i == 0 ? p->lon  : lon,
+                           i != 0 ? p->lon0 : lon);
+    }
+  }
+
+  if (pP) *pP = perimeter;
+  if (p->polyline)
+    return num;
+
+  area0 = 4 * pi * g->c2;
+  if (crossings & 1)
+    tempsum += (tempsum < 0 ? 1 : -1) * area0/2;
+  /* area is with the clockwise sense.  If !reverse convert to
+   * counter-clockwise convention. */
+  if (!reverse)
+    tempsum *= -1;
+  /* If sign put area in (-area0/2, area0/2], else put area in [0, area0) */
+  if (sign) {
+    if (tempsum > area0/2)
+      tempsum -= area0;
+    else if (tempsum <= -area0/2)
+      tempsum += area0;
+  } else {
+    if (tempsum >= area0)
+      tempsum -= area0;
+    else if (tempsum < 0)
+      tempsum += area0;
+  }
+  if (pA) *pA = 0 + tempsum;
+  return num;
+}
+
+unsigned geod_polygon_testedge(const struct geod_geodesic* g,
+                               const struct geod_polygon* p,
+                               real azi, real s,
+                               boolx reverse, boolx sign,
+                               real* pA, real* pP) {
+  real perimeter, tempsum, area0;
+  int crossings;
+  unsigned num = p->num + 1;
+  if (num == 1) {               /* we don't have a starting point! */
+    if (pP) *pP = NaN;
+    if (!p->polyline && pA) *pA = NaN;
+    return 0;
+  }
+  perimeter = p->P[0] + s;
+  if (p->polyline) {
+    if (pP) *pP = perimeter;
+    return num;
+  }
+
+  tempsum = p->A[0];
+  crossings = p->crossings;
+  {
+    real lat, lon, s12, S12;
+    geod_gendirect(g, p->lat, p->lon, azi, FALSE, s,
+                   &lat, &lon, 0,
+                   0, 0, 0, 0, &S12);
+    tempsum += S12;
+    crossings += transit(p->lon, lon);
+    geod_geninverse(g, lat,  lon, p->lat0,  p->lon0,
+                    &s12, 0, 0, 0, 0, 0, &S12);
+    perimeter += s12;
+    tempsum += S12;
+    crossings += transit(lon, p->lon0);
+  }
+
+  area0 = 4 * pi * g->c2;
+  if (crossings & 1)
+    tempsum += (tempsum < 0 ? 1 : -1) * area0/2;
+  /* area is with the clockwise sense.  If !reverse convert to
+   * counter-clockwise convention. */
+  if (!reverse)
+    tempsum *= -1;
+  /* If sign put area in (-area0/2, area0/2], else put area in [0, area0) */
+  if (sign) {
+    if (tempsum > area0/2)
+      tempsum -= area0;
+    else if (tempsum <= -area0/2)
+      tempsum += area0;
+  } else {
+    if (tempsum >= area0)
+      tempsum -= area0;
+    else if (tempsum < 0)
+      tempsum += area0;
+  }
+  if (pP) *pP = perimeter;
+  if (pA) *pA = 0 + tempsum;
+  return num;
+}
+
+void geod_polygonarea(const struct geod_geodesic* g,
+                      real lats[], real lons[], int n,
+                      real* pA, real* pP) {
+  int i;
+  struct geod_polygon p;
+  geod_polygon_init(&p, FALSE);
+  for (i = 0; i < n; ++i)
+    geod_polygon_addpoint(g, &p, lats[i], lons[i]);
+  geod_polygon_compute(g, &p, FALSE, TRUE, pA, pP);
+}
+
+/** @endcond */
diff --git a/legacy/C/geodesic.h b/legacy/C/geodesic.h
new file mode 100644
index 0000000..5efa63f
--- /dev/null
+++ b/legacy/C/geodesic.h
@@ -0,0 +1,745 @@
+/**
+ * \file geodesic.h
+ * \brief Header for the geodesic routines in C
+ *
+ * This an implementation in C of the geodesic algorithms described in
+ * - C. F. F. Karney,
+ *   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+ *   Algorithms for geodesics</a>,
+ *   J. Geodesy <b>87</b>, 43--55 (2013);
+ *   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+ *   10.1007/s00190-012-0578-z</a>;
+ *   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+ *   geod-addenda.html</a>.
+ * .
+ * The principal advantages of these algorithms over previous ones (e.g.,
+ * Vincenty, 1975) are
+ * - accurate to round off for |<i>f</i>| < 1/50;
+ * - the solution of the inverse problem is always found;
+ * - differential and integral properties of geodesics are computed.
+ *
+ * The shortest path between two points on the ellipsoid at (\e lat1, \e
+ * lon1) and (\e lat2, \e lon2) is called the geodesic.  Its length is
+ * \e s12 and the geodesic from point 1 to point 2 has forward azimuths
+ * \e azi1 and \e azi2 at the two end points.
+ *
+ * Traditionally two geodesic problems are considered:
+ * - the direct problem -- given \e lat1, \e lon1, \e s12, and \e azi1,
+ *   determine \e lat2, \e lon2, and \e azi2.  This is solved by the function
+ *   geod_direct().
+ * - the inverse problem -- given \e lat1, \e lon1, and \e lat2, \e lon2,
+ *   determine \e s12, \e azi1, and \e azi2.  This is solved by the function
+ *   geod_inverse().
+ *
+ * The ellipsoid is specified by its equatorial radius \e a (typically in
+ * meters) and flattening \e f.  The routines are accurate to round off with
+ * double precision arithmetic provided that |<i>f</i>| < 1/50; for the
+ * WGS84 ellipsoid, the errors are less than 15 nanometers.  (Reasonably
+ * accurate results are obtained for |<i>f</i>| < 1/5.)  For a prolate
+ * ellipsoid, specify \e f < 0.
+ *
+ * The routines also calculate several other quantities of interest
+ * - \e S12 is the area between the geodesic from point 1 to point 2 and the
+ *   equator; i.e., it is the area, measured counter-clockwise, of the
+ *   quadrilateral with corners (\e lat1,\e lon1), (0,\e lon1), (0,\e lon2),
+ *   and (\e lat2,\e lon2).
+ * - \e m12, the reduced length of the geodesic is defined such that if
+ *   the initial azimuth is perturbed by \e dazi1 (radians) then the
+ *   second point is displaced by \e m12 \e dazi1 in the direction
+ *   perpendicular to the geodesic.  On a curved surface the reduced
+ *   length obeys a symmetry relation, \e m12 + \e m21 = 0.  On a flat
+ *   surface, we have \e m12 = \e s12.
+ * - \e M12 and \e M21 are geodesic scales.  If two geodesics are
+ *   parallel at point 1 and separated by a small distance \e dt, then
+ *   they are separated by a distance \e M12 \e dt at point 2.  \e M21
+ *   is defined similarly (with the geodesics being parallel to one
+ *   another at point 2).  On a flat surface, we have \e M12 = \e M21
+ *   = 1.
+ * - \e a12 is the arc length on the auxiliary sphere.  This is a
+ *   construct for converting the problem to one in spherical
+ *   trigonometry.  \e a12 is measured in degrees.  The spherical arc
+ *   length from one equator crossing to the next is always 180°.
+ *
+ * If points 1, 2, and 3 lie on a single geodesic, then the following
+ * addition rules hold:
+ * - \e s13 = \e s12 + \e s23
+ * - \e a13 = \e a12 + \e a23
+ * - \e S13 = \e S12 + \e S23
+ * - \e m13 = \e m12 \e M23 + \e m23 \e M21
+ * - \e M13 = \e M12 \e M23 − (1 − \e M12 \e M21) \e
+ *   m23 / \e m12
+ * - \e M31 = \e M32 \e M21 − (1 − \e M23 \e M32) \e
+ *   m12 / \e m23
+ *
+ * The shortest distance returned by the solution of the inverse problem is
+ * (obviously) uniquely defined.  However, in a few special cases there are
+ * multiple azimuths which yield the same shortest distance.  Here is a
+ * catalog of those cases:
+ * - \e lat1 = −\e lat2 (with neither point at a pole).  If \e azi1 = \e
+ *   azi2, the geodesic is unique.  Otherwise there are two geodesics
+ *   and the second one is obtained by setting [\e azi1, \e azi2] = [\e
+ *   azi2, \e azi1], [\e M12, \e M21] = [\e M21, \e M12], \e S12 =
+ *   −\e S12.  (This occurs when the longitude difference is near
+ *   ±180° for oblate ellipsoids.)
+ * - \e lon2 = \e lon1 ± 180° (with neither point at a pole).  If
+ *   \e azi1 = 0° or ±180°, the geodesic is unique.
+ *   Otherwise there are two geodesics and the second one is obtained by
+ *   setting [\e azi1, \e azi2] = [−\e azi1, −\e azi2], \e
+ *   S12 = −\e S12.  (This occurs when \e lat2 is near
+ *   −\e lat1 for prolate ellipsoids.)
+ * - Points 1 and 2 at opposite poles.  There are infinitely many
+ *   geodesics which can be generated by setting [\e azi1, \e azi2] =
+ *   [\e azi1, \e azi2] + [\e d, −\e d], for arbitrary \e d.  (For
+ *   spheres, this prescription applies when points 1 and 2 are
+ *   antipodal.)
+ * - \e s12 = 0 (coincident points).  There are infinitely many geodesics
+ *   which can be generated by setting [\e azi1, \e azi2] = [\e azi1, \e
+ *   azi2] + [\e d, \e d], for arbitrary \e d.
+ *
+ * These routines are a simple transcription of the corresponding C++ classes
+ * in <a href="http://geographiclib.sf.net"> GeographicLib</a>.  The "class
+ * data" is represented by the structs geod_geodesic, geod_geodesicline,
+ * geod_polygon and pointers to these objects are passed as initial arguments
+ * to the member functions.  Most of the internal comments have been retained.
+ * However, in the process of transcription some documentation has been lost
+ * and the documentation for the C++ classes, GeographicLib::Geodesic,
+ * GeographicLib::GeodesicLine, and GeographicLib::PolygonArea, should be
+ * consulted.  The C++ code remains the "reference implementation".  Think
+ * twice about restructuring the internals of the C code since this may make
+ * porting fixes from the C++ code more difficult.
+ *
+ * Copyright (c) Charles Karney (2012-2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ *
+ * This library was distributed with
+ * <a href="../index.html">GeographicLib</a> 1.32.
+ **********************************************************************/
+
+#if !defined(GEODESIC_H)
+#define GEODESIC_H 1
+
+/**
+ * The major version of the geodesic library.  (This tracks the version of
+ * GeographicLib.)
+ **********************************************************************/
+#define GEODESIC_VERSION_MAJOR 1
+/**
+ * The minor version of the geodesic library.  (This tracks the version of
+ * GeographicLib.)
+ **********************************************************************/
+#define GEODESIC_VERSION_MINOR 32
+/**
+ * The patch level of the geodesic library.  (This tracks the version of
+ * GeographicLib.)
+ **********************************************************************/
+#define GEODESIC_VERSION_PATCH 0
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+  /**
+   * The struct containing information about the ellipsoid.  This must be
+   * initialized by geod_init() before use.
+   **********************************************************************/
+  struct geod_geodesic {
+    double a;                   /**< the equatorial radius */
+    double f;                   /**< the flattening */
+    /**< @cond SKIP */
+    double f1, e2, ep2, n, b, c2, etol2;
+    double A3x[6], C3x[15], C4x[21];
+    /**< @endcond */
+  };
+
+  /**
+   * The struct containing information about a single geodesic.  This must be
+   * initialized by geod_lineinit() before use.
+   **********************************************************************/
+  struct geod_geodesicline {
+    double lat1;                /**< the starting latitude */
+    double lon1;                /**< the starting longitude */
+    double azi1;                /**< the starting azimuth */
+    double a;                   /**< the equatorial radius */
+    double f;                   /**< the flattening */
+    /**< @cond SKIP */
+    double b, c2, f1, salp0, calp0, k2,
+      salp1, calp1, ssig1, csig1, dn1, stau1, ctau1, somg1, comg1,
+      A1m1, A2m1, A3c, B11, B21, B31, A4, B41;
+    double C1a[6+1], C1pa[6+1], C2a[6+1], C3a[6], C4a[6];
+    /**< @endcond */
+    unsigned caps;              /**< the capabilities */
+  };
+
+  /**
+   * The struct for accumulating information about a geodesic polygon.  This is
+   * used for computing the perimeter and area of a polygon.  This must be
+   * initialized by geod_polygon_init() before use.
+   **********************************************************************/
+  struct geod_polygon {
+    double lat;                 /**< the current latitude */
+    double lon;                 /**< the current longitude */
+    /**< @cond SKIP */
+    double lat0;
+    double lon0;
+    double A[2];
+    double P[2];
+    int polyline;
+    int crossings;
+    /**< @endcond */
+    unsigned num;               /**< the number of points so far */
+  };
+
+  /**
+   * Initialize a geod_geodesic object.
+   *
+   * @param[out] g a pointer to the object to be initialized.
+   * @param[in] a the equatorial radius (meters).
+   * @param[in] f the flattening.
+   **********************************************************************/
+  void geod_init(struct geod_geodesic* g, double a, double f);
+
+  /**
+   * Initialize a geod_geodesicline object.
+   *
+   * @param[out] l a pointer to the object to be initialized.
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in] lat1 latitude of point 1 (degrees).
+   * @param[in] lon1 longitude of point 1 (degrees).
+   * @param[in] azi1 azimuth at point 1 (degrees).
+   * @param[in] caps bitor'ed combination of geod_mask() values specifying the
+   *   capabilities the geod_geodesicline object should possess, i.e., which
+   *   quantities can be returned in calls to geod_position() and
+   *   geod_genposition().
+   *
+   * \e g must have been initialized with a call to geod_init().  \e lat1
+   * should be in the range [−90°, 90°]; \e lon1 and \e azi1
+   * should be in the range [−540°, 540°).
+   *
+   * The geod_mask values are [see geod_mask()]:
+   * - \e caps |= GEOD_LATITUDE for the latitude \e lat2; this is
+   *   added automatically,
+   * - \e caps |= GEOD_LONGITUDE for the latitude \e lon2,
+   * - \e caps |= GEOD_AZIMUTH for the latitude \e azi2; this is
+   *   added automatically,
+   * - \e caps |= GEOD_DISTANCE for the distance \e s12,
+   * - \e caps |= GEOD_REDUCEDLENGTH for the reduced length \e m12,
+   * - \e caps |= GEOD_GEODESICSCALE for the geodesic scales \e M12
+   *   and \e M21,
+   * - \e caps |= GEOD_AREA for the area \e S12,
+   * - \e caps |= GEOD_DISTANCE_IN permits the length of the
+   *   geodesic to be given in terms of \e s12; without this capability the
+   *   length can only be specified in terms of arc length.
+   * .
+   * A value of \e caps = 0 is treated as GEOD_LATITUDE | GEOD_LONGITUDE |
+   * GEOD_AZIMUTH | GEOD_DISTANCE_IN (to support the solution of the "standard"
+   * direct problem).
+   **********************************************************************/
+  void geod_lineinit(struct geod_geodesicline* l,
+                     const struct geod_geodesic* g,
+                     double lat1, double lon1, double azi1, unsigned caps);
+
+  /**
+   * Solve the direct geodesic problem.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in] lat1 latitude of point 1 (degrees).
+   * @param[in] lon1 longitude of point 1 (degrees).
+   * @param[in] azi1 azimuth at point 1 (degrees).
+   * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+   *   negative.
+   * @param[out] plat2 pointer to the latitude of point 2 (degrees).
+   * @param[out] plon2 pointer to the longitude of point 2 (degrees).
+   * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees).
+   *
+   * \e g must have been initialized with a call to geod_init().  \e lat1
+   * should be in the range [−90°, 90°]; \e lon1 and \e azi1
+   * should be in the range [−540°, 540°).  The values of \e lon2
+   * and \e azi2 returned are in the range [−180°, 180°).  Any of
+   * the "return" arguments \e plat2, etc., may be replaced by 0, if you do not
+   * need some quantities computed.
+   *
+   * If either point is at a pole, the azimuth is defined by keeping the
+   * longitude fixed, writing \e lat = ±(90° − ε), and
+   * taking the limit ε → 0+.  An arc length greater that 180°
+   * signifies a geodesic which is not a shortest path.  (For a prolate
+   * ellipsoid, an additional condition is necessary for a shortest path: the
+   * longitudinal extent must not exceed of 180°.)
+   *
+   * Example, determine the point 10000 km NE of JFK:
+   @code
+   struct geod_geodesic g;
+   double lat, lon;
+   geod_init(&g, 6378137, 1/298.257223563);
+   geod_direct(&g, 40.64, -73.78, 45.0, 10e6, &lat, &lon, 0);
+   printf("%.5f %.5f\n", lat, lon);
+   @endcode
+   **********************************************************************/
+  void geod_direct(const struct geod_geodesic* g,
+                   double lat1, double lon1, double azi1, double s12,
+                   double* plat2, double* plon2, double* pazi2);
+
+  /**
+   * Solve the inverse geodesic problem.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in] lat1 latitude of point 1 (degrees).
+   * @param[in] lon1 longitude of point 1 (degrees).
+   * @param[in] lat2 latitude of point 2 (degrees).
+   * @param[in] lon2 longitude of point 2 (degrees).
+   * @param[out] ps12 pointer to the distance between point 1 and point 2
+   *   (meters).
+   * @param[out] pazi1 pointer to the azimuth at point 1 (degrees).
+   * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees).
+   *
+   * \e g must have been initialized with a call to geod_init().  \e lat1
+   * and \e lat2 should be in the range [−90°, 90°]; \e lon1 and
+   * \e lon2 should be in the range [−540°, 540°).  The values of
+   * \e azi1 and \e azi2 returned are in the range [−180°, 180°).
+   * Any of the "return" arguments \e ps12, etc., may be replaced by 0, if you
+   * do not need some quantities computed.
+   *
+   * If either point is at a pole, the azimuth is defined by keeping the
+   * longitude fixed, writing \e lat = ±(90° − ε), and
+   * taking the limit ε → 0+.
+   *
+   * The solution to the inverse problem is found using Newton's method.  If
+   * this fails to converge (this is very unlikely in geodetic applications
+   * but does occur for very eccentric ellipsoids), then the bisection method
+   * is used to refine the solution.
+   *
+   * Example, determine the distance between JFK and Singapore Changi Airport:
+   @code
+   struct geod_geodesic g;
+   double s12;
+   geod_init(&g, 6378137, 1/298.257223563);
+   geod_inverse(&g, 40.64, -73.78, 1.36, 103.99, &s12, 0, 0);
+   printf("%.3f\n", s12);
+   @endcode
+   **********************************************************************/
+  void geod_inverse(const struct geod_geodesic* g,
+                    double lat1, double lon1, double lat2, double lon2,
+                    double* ps12, double* pazi1, double* pazi2);
+
+  /**
+   * Compute the position along a geod_geodesicline.
+   *
+   * @param[in] l a pointer to the geod_geodesicline object specifying the
+   *   geodesic line.
+   * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+   *   negative.
+   * @param[out] plat2 pointer to the latitude of point 2 (degrees).
+   * @param[out] plon2 pointer to the longitude of point 2 (degrees); requires
+   *   that \e l was initialized with \e caps |= GEOD_LONGITUDE.
+   * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees).
+   *
+   * \e l must have been initialized with a call to geod_lineinit() with \e
+   * caps |= GEOD_DISTANCE_IN.  The values of \e lon2 and \e azi2 returned are
+   * in the range [−180°, 180°).  Any of the "return" arguments
+   * \e plat2, etc., may be replaced by 0, if you do not need some quantities
+   * computed.
+   *
+   * Example, compute way points between JFK and Singapore Changi Airport
+   * the "obvious" way using geod_direct():
+   @code
+   struct geod_geodesic g;
+   double s12, azi1, lat[101],lon[101];
+   int i;
+   geod_init(&g, 6378137, 1/298.257223563);
+   geod_inverse(&g, 40.64, -73.78, 1.36, 103.99, &s12, &azi1, 0);
+   for (i = 0; i < 101; ++i) {
+     geod_direct(&g, 40.64, -73.78, azi1, i * s12 * 0.01, lat + i, lon + i, 0);
+     printf("%.5f %.5f\n", lat[i], lon[i]);
+   }
+   @endcode
+   * A faster way using geod_position():
+   @code
+   struct geod_geodesic g;
+   struct geod_geodesicline l;
+   double s12, azi1, lat[101],lon[101];
+   int i;
+   geod_init(&g, 6378137, 1/298.257223563);
+   geod_inverse(&g, 40.64, -73.78, 1.36, 103.99, &s12, &azi1, 0);
+   geod_lineinit(&l, &g, 40.64, -73.78, azi1, 0);
+   for (i = 0; i < 101; ++i) {
+     geod_position(&l, i * s12 * 0.01, lat + i, lon + i, 0);
+     printf("%.5f %.5f\n", lat[i], lon[i]);
+   }
+   @endcode
+   **********************************************************************/
+  void geod_position(const struct geod_geodesicline* l, double s12,
+                     double* plat2, double* plon2, double* pazi2);
+
+  /**
+   * The general direct geodesic problem.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in] lat1 latitude of point 1 (degrees).
+   * @param[in] lon1 longitude of point 1 (degrees).
+   * @param[in] azi1 azimuth at point 1 (degrees).
+   * @param[in] arcmode flag determining the meaning of the \e
+   *   s12_a12.
+   * @param[in] s12_a12 if \e arcmode is 0, this is the distance between
+   *   point 1 and point 2 (meters); otherwise it is the arc length between
+   *   point 1 and point 2 (degrees); it can be negative.
+   * @param[out] plat2 pointer to the latitude of point 2 (degrees).
+   * @param[out] plon2 pointer to the longitude of point 2 (degrees).
+   * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees).
+   * @param[out] ps12 pointer to the distance between point 1 and point 2
+   *   (meters).
+   * @param[out] pm12 pointer to the reduced length of geodesic (meters).
+   * @param[out] pM12 pointer to the geodesic scale of point 2 relative to
+   *   point 1 (dimensionless).
+   * @param[out] pM21 pointer to the geodesic scale of point 1 relative to
+   *   point 2 (dimensionless).
+   * @param[out] pS12 pointer to the area under the geodesic
+   *   (meters<sup>2</sup>).
+   * @return \e a12 arc length of between point 1 and point 2 (degrees).
+   *
+   * \e g must have been initialized with a call to geod_init().  \e lat1
+   * should be in the range [−90°, 90°]; \e lon1 and \e azi1
+   * should be in the range [−540°, 540°).  The function value \e
+   * a12 equals \e s12_a12 is \e arcmode is non-zero.  Any of the "return"
+   * arguments \e plat2, etc., may be replaced by 0, if you do not need some
+   * quantities computed.
+   **********************************************************************/
+  double geod_gendirect(const struct geod_geodesic* g,
+                        double lat1, double lon1, double azi1,
+                        int arcmode, double s12_a12,
+                        double* plat2, double* plon2, double* pazi2,
+                        double* ps12, double* pm12, double* pM12, double* pM21,
+                        double* pS12);
+
+  /**
+   * The general inverse geodesic calculation.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in] lat1 latitude of point 1 (degrees).
+   * @param[in] lon1 longitude of point 1 (degrees).
+   * @param[in] lat2 latitude of point 2 (degrees).
+   * @param[in] lon2 longitude of point 2 (degrees).
+   * @param[out] ps12 pointer to the distance between point 1 and point 2
+   *  (meters).
+   * @param[out] pazi1 pointer to the azimuth at point 1 (degrees).
+   * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees).
+   * @param[out] pm12 pointer to the reduced length of geodesic (meters).
+   * @param[out] pM12 pointer to the geodesic scale of point 2 relative to
+   *   point 1 (dimensionless).
+   * @param[out] pM21 pointer to the geodesic scale of point 1 relative to
+   *   point 2 (dimensionless).
+   * @param[out] pS12 pointer to the area under the geodesic
+   *   (meters<sup>2</sup>).
+   * @return \e a12 arc length of between point 1 and point 2 (degrees).
+   *
+   * \e g must have been initialized with a call to geod_init().  \e lat1
+   * and \e lat2 should be in the range [−90°, 90°]; \e lon1 and
+   * \e lon2 should be in the range [−540°, 540°).  Any of the
+   * "return" arguments \e ps12, etc., may be replaced by 0, if you do not need
+   * some quantities computed.
+   **********************************************************************/
+  double geod_geninverse(const struct geod_geodesic* g,
+                         double lat1, double lon1, double lat2, double lon2,
+                         double* ps12, double* pazi1, double* pazi2,
+                         double* pm12, double* pM12, double* pM21,
+                         double* pS12);
+
+  /**
+   * The general position function.
+   *
+   * @param[in] l a pointer to the geod_geodesicline object specifying the
+   *   geodesic line.
+   * @param[in] arcmode flag determining the meaning of the second parameter;
+   *   if arcmode is 0, then \e l must have been initialized with \e caps |=
+   *   GEOD_DISTANCE_IN.
+   * @param[in] s12_a12 if \e arcmode is 0, this is the distance between
+   *   point 1 and point 2 (meters); otherwise it is the arc length between
+   *   point 1 and point 2 (degrees); it can be negative.
+   * @param[out] plat2 pointer to the latitude of point 2 (degrees).
+   * @param[out] plon2 pointer to the longitude of point 2 (degrees); requires
+   *   that \e l was initialized with \e caps |= GEOD_LONGITUDE.
+   * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees).
+   * @param[out] ps12 pointer to the distance between point 1 and point 2
+   *   (meters); requires that \e l was initialized with \e caps |=
+   *   GEOD_DISTANCE.
+   * @param[out] pm12 pointer to the reduced length of geodesic (meters);
+   *   requires that \e l was initialized with \e caps |= GEOD_REDUCEDLENGTH.
+   * @param[out] pM12 pointer to the geodesic scale of point 2 relative to
+   *   point 1 (dimensionless); requires that \e l was initialized with \e caps
+   *   |= GEOD_GEODESICSCALE.
+   * @param[out] pM21 pointer to the geodesic scale of point 1 relative to
+   *   point 2 (dimensionless); requires that \e l was initialized with \e caps
+   *   |= GEOD_GEODESICSCALE.
+   * @param[out] pS12 pointer to the area under the geodesic
+   *   (meters<sup>2</sup>); requires that \e l was initialized with \e caps |=
+   *   GEOD_AREA.
+   * @return \e a12 arc length of between point 1 and point 2 (degrees).
+   *
+   * \e l must have been initialized with a call to geod_lineinit() with \e
+   * caps |= GEOD_DISTANCE_IN.  The values of \e lon2 and \e azi2 returned are
+   * in the range [−180°, 180°).  Any of the "return" arguments
+   * \e plat2, etc., may be replaced by 0, if you do not need some quantities
+   * computed.  Requesting a value which \e l is not capable of computing is
+   * not an error; the corresponding argument will not be altered.
+   *
+   * Example, compute way points between JFK and Singapore Changi Airport
+   * using geod_genposition().  In this example, the points are evenly space in
+   * arc length (and so only approximately equally space in distance).  This is
+   * faster than using geod_position() would be appropriate if drawing the path
+   * on a map.
+   @code
+   struct geod_geodesic g;
+   struct geod_geodesicline l;
+   double a12, azi1, lat[101],lon[101];
+   int i;
+   geod_init(&g, 6378137, 1/298.257223563);
+   a12 = geod_geninverse(&g, 40.64, -73.78, 1.36, 103.99,
+                         0, &azi1, 0, 0, 0, 0, 0);
+   geod_lineinit(&l, &g, 40.64, -73.78, azi1, GEOD_LATITUDE | GEOD_LONGITUDE);
+   for (i = 0; i < 101; ++i) {
+     geod_genposition(&l, 1, i * a12 * 0.01,
+                      lat + i, lon + i, 0, 0, 0, 0, 0, 0);
+     printf("%.5f %.5f\n", lat[i], lon[i]);
+   }
+   @endcode
+   **********************************************************************/
+  double geod_genposition(const struct geod_geodesicline* l,
+                          int arcmode, double s12_a12,
+                          double* plat2, double* plon2, double* pazi2,
+                          double* ps12, double* pm12,
+                          double* pM12, double* pM21,
+                          double* pS12);
+
+  /**
+   * Initialize a geod_polygon object.
+   *
+   * @param[out] p a pointer to the object to be initialized.
+   * @param[in] polylinep non-zero if a polyline instead of a polygon.
+   *
+   * If \e polylinep is zero, then the sequence of vertices and edges added by
+   * geod_polygon_addpoint() and geod_polygon_addedge() define a polygon and
+   * the perimeter and area are returned by geod_polygon_compute().  If \e
+   * polylinep is non-zero, then the vertices and edges define a polyline and
+   * only the perimeter is returned by geod_polygon_compute().
+   *
+   * An example of the use of this function is given in the documentation for
+   * geod_polygon_compute().
+   **********************************************************************/
+  void geod_polygon_init(struct geod_polygon* p, int polylinep);
+
+  /**
+   * Add a point to the polygon or polyline.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in,out] p a pointer to the geod_polygon object specifying the
+   *   polygon.
+   * @param[in] lat the latitude of the point (degrees).
+   * @param[in] lon the longitude of the point (degrees).
+   *
+   * \e g and \e p must have been initialized with calls to geod_init() and
+   * geod_polygon_init(), respectively.  The same \e g must be used for all the
+   * points and edges in a polygon.  \e lat should be in the range
+   * [−90°, 90°] and \e lon should be in the range
+   * [−540°, 540°).
+   *
+   * An example of the use of this function is given in the documentation for
+   * geod_polygon_compute().
+   **********************************************************************/
+  void geod_polygon_addpoint(const struct geod_geodesic* g,
+                             struct geod_polygon* p,
+                             double lat, double lon);
+
+  /**
+   * Add an edge to the polygon or polyline.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in,out] p a pointer to the geod_polygon object specifying the
+   *   polygon.
+   * @param[in] azi azimuth at current point (degrees).
+   * @param[in] s distance from current point to next point (meters).
+   *
+   * \e g and \e p must have been initialized with calls to geod_init() and
+   * geod_polygon_init(), respectively.  The same \e g must be used for all the
+   * points and edges in a polygon.  \e azi should be in the range
+   * [−540°, 540°).  This does nothing if no points have been
+   * added yet.  The \e lat and \e lon fields of \e p give the location of
+   * the new vertex.
+   **********************************************************************/
+  void geod_polygon_addedge(const struct geod_geodesic* g,
+                            struct geod_polygon* p,
+                            double azi, double s);
+
+  /**
+   * Return the results for a polygon.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in] p a pointer to the geod_polygon object specifying the polygon.
+   * @param[in] reverse if non-zero then clockwise (instead of
+   *   counter-clockwise) traversal counts as a positive area.
+   * @param[in] sign if non-zero then return a signed result for the area if
+   *   the polygon is traversed in the "wrong" direction instead of returning
+   *   the area for the rest of the earth.
+   * @param[out] pA pointer to the area of the polygon (meters<sup>2</sup>);
+   *   only set if \e polyline is non-zero in the call to geod_polygon_init().
+   * @param[out] pP pointer to the perimeter of the polygon or length of the
+   *   polyline (meters).
+   * @return the number of points.
+   *
+   * Only simple polygons (which are not self-intersecting) are allowed.
+   * There's no need to "close" the polygon by repeating the first vertex.  Set
+   * \e pA or \e pP to zero, if you do not want the corresponding quantity
+   * returned.
+   *
+   * Example, compute the perimeter and area of the geodesic triangle with
+   * vertices (0°N,0°E), (0°N,90°E), (90°N,0°E).
+   @code
+   double A, P;
+   int n;
+   struct geod_geodesic g;
+   struct geod_polygon p;
+   geod_init(&g, 6378137, 1/298.257223563);
+   geod_polygon_init(&p, 0);
+
+   geod_polygon_addpoint(&g, &p,  0,  0);
+   geod_polygon_addpoint(&g, &p,  0, 90);
+   geod_polygon_addpoint(&g, &p, 90,  0);
+   n = geod_polygon_compute(&g, &p, 0, 1, &A, &P);
+   printf("%d %.8f %.3f\n", n, P, A);
+   @endcode
+   **********************************************************************/
+  unsigned geod_polygon_compute(const struct geod_geodesic* g,
+                                const struct geod_polygon* p,
+                                int reverse, int sign,
+                                double* pA, double* pP);
+
+  /**
+   * Return the results assuming a tentative final test point is added;
+   * however, the data for the test point is not saved.  This lets you report a
+   * running result for the perimeter and area as the user moves the mouse
+   * cursor.  Ordinary floating point arithmetic is used to accumulate the data
+   * for the test point; thus the area and perimeter returned are less accurate
+   * than if geod_polygon_addpoint() and geod_polygon_compute() are used.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in] p a pointer to the geod_polygon object specifying the polygon.
+   * @param[in] lat the latitude of the test point (degrees).
+   * @param[in] lon the longitude of the test point (degrees).
+   * @param[in] reverse if non-zero then clockwise (instead of
+   *   counter-clockwise) traversal counts as a positive area.
+   * @param[in] sign if non-zero then return a signed result for the area if
+   *   the polygon is traversed in the "wrong" direction instead of returning
+   *   the area for the rest of the earth.
+   * @param[out] pA pointer to the area of the polygon (meters<sup>2</sup>);
+   *   only set if \e polyline is non-zero in the call to geod_polygon_init().
+   * @param[out] pP pointer to the perimeter of the polygon or length of the
+   *   polyline (meters).
+   * @return the number of points.
+   *
+   * \e lat should be in the range [−90°, 90°] and \e
+   * lon should be in the range [−540°, 540°).
+   **********************************************************************/
+  unsigned geod_polygon_testpoint(const struct geod_geodesic* g,
+                                  const struct geod_polygon* p,
+                                  double lat, double lon,
+                                  int reverse, int sign,
+                                  double* pA, double* pP);
+
+  /**
+   * Return the results assuming a tentative final test point is added via an
+   * azimuth and distance; however, the data for the test point is not saved.
+   * This lets you report a running result for the perimeter and area as the
+   * user moves the mouse cursor.  Ordinary floating point arithmetic is used
+   * to accumulate the data for the test point; thus the area and perimeter
+   * returned are less accurate than if geod_polygon_addedge() and
+   * geod_polygon_compute() are used.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in] p a pointer to the geod_polygon object specifying the polygon.
+   * @param[in] azi azimuth at current point (degrees).
+   * @param[in] s distance from current point to final test point (meters).
+   * @param[in] reverse if non-zero then clockwise (instead of
+   *   counter-clockwise) traversal counts as a positive area.
+   * @param[in] sign if non-zero then return a signed result for the area if
+   *   the polygon is traversed in the "wrong" direction instead of returning
+   *   the area for the rest of the earth.
+   * @param[out] pA pointer to the area of the polygon (meters<sup>2</sup>);
+   *   only set if \e polyline is non-zero in the call to geod_polygon_init().
+   * @param[out] pP pointer to the perimeter of the polygon or length of the
+   *   polyline (meters).
+   * @return the number of points.
+   *
+   * \e azi should be in the range [−540°, 540°).
+   **********************************************************************/
+  unsigned geod_polygon_testedge(const struct geod_geodesic* g,
+                                 const struct geod_polygon* p,
+                                 double azi, double s,
+                                 int reverse, int sign,
+                                 double* pA, double* pP);
+
+  /**
+   * A simple interface for computing the area of a geodesic polygon.
+   *
+   * @param[in] g a pointer to the geod_geodesic object specifying the
+   *   ellipsoid.
+   * @param[in] lats an array of latitudes of the polygon vertices (degrees).
+   * @param[in] lons an array of longitudes of the polygon vertices (degrees).
+   * @param[in] n the number of vertices.
+   * @param[out] pA pointer to the area of the polygon (meters<sup>2</sup>).
+   * @param[out] pP pointer to the perimeter of the polygon (meters).
+   *
+   * \e lats should be in the range [−90°, 90°]; \e lons should
+   * be in the range [−540°, 540°).
+   *
+   * Only simple polygons (which are not self-intersecting) are allowed.
+   * There's no need to "close" the polygon by repeating the first vertex.  The
+   * area returned is signed with counter-clockwise traversal being treated as
+   * positive.
+   *
+   * Example, compute the area of Antarctic:
+   @code
+   double
+     lats[] = {-72.9, -71.9, -74.9, -74.3, -77.5, -77.4, -71.7, -65.9, -65.7,
+               -66.6, -66.9, -69.8, -70.0, -71.0, -77.3, -77.9, -74.7},
+     lons[] = {-74, -102, -102, -131, -163, 163, 172, 140, 113,
+                88, 59, 25, -4, -14, -33, -46, -61};
+   struct geod_geodesic g;
+   double A, P;
+   geod_init(&g, 6378137, 1/298.257223563);
+   geod_polygonarea(&g, lats, lons, (sizeof lats) / (sizeof lats[0]), &A, &P);
+   printf("%.0f %.2f\n", A, P);
+   @endcode
+   **********************************************************************/
+  void geod_polygonarea(const struct geod_geodesic* g,
+                        double lats[], double lons[], int n,
+                        double* pA, double* pP);
+
+  /**
+   * mask values for the the \e caps argument to geod_lineinit().
+   **********************************************************************/
+  enum geod_mask {
+    GEOD_NONE         = 0U,                     /**< Calculate nothing */
+    GEOD_LATITUDE     = 1U<<7  | 0U,            /**< Calculate latitude */
+    GEOD_LONGITUDE    = 1U<<8  | 1U<<3,         /**< Calculate longitude */
+    GEOD_AZIMUTH      = 1U<<9  | 0U,            /**< Calculate azimuth */
+    GEOD_DISTANCE     = 1U<<10 | 1U<<0,         /**< Calculate distance */
+    GEOD_DISTANCE_IN  = 1U<<11 | 1U<<0 | 1U<<1, /**< Allow distance as input  */
+    GEOD_REDUCEDLENGTH= 1U<<12 | 1U<<0 | 1U<<2, /**< Calculate reduced length */
+    GEOD_GEODESICSCALE= 1U<<13 | 1U<<0 | 1U<<2, /**< Calculate geodesic scale */
+    GEOD_AREA         = 1U<<14 | 1U<<4,         /**< Calculate reduced length */
+    GEOD_ALL          = 0x7F80U| 0x1FU          /**< Calculate everything */
+  };
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
diff --git a/legacy/C/inverse.c b/legacy/C/inverse.c
new file mode 100644
index 0000000..5e96a8e
--- /dev/null
+++ b/legacy/C/inverse.c
@@ -0,0 +1,32 @@
+/**
+ * @file inverse.c
+ * @brief A test program for geod_inverse()
+ **********************************************************************/
+
+#include <stdio.h>
+#include "geodesic.h"
+
+#if defined(_MSC_VER)
+/* Squelch warnings about scanf */
+#  pragma warning (disable: 4996)
+#endif
+
+/**
+ * A simple program to solve the inverse geodesic problem.
+ *
+ * This program reads in lines with lat1, lon1, lat2, lon2 and prints out lines
+ * with azi1, azi2, s12 (for the WGS84 ellipsoid).
+ **********************************************************************/
+
+int main() {
+  double a = 6378137, f = 1/298.257223563; /* WGS84 */
+  double lat1, lon1, azi1, lat2, lon2, azi2, s12;
+  struct geod_geodesic g;
+
+  geod_init(&g, a, f);
+  while (scanf("%lf %lf %lf %lf\n", &lat1, &lon1, &lat2, &lon2) == 4) {
+    geod_inverse(&g, lat1, lon1, lat2, lon2, &s12, &azi1, &azi2);
+    printf("%.15f %.15f %.10f\n", azi1, azi2, s12);
+  }
+  return 0;
+}
diff --git a/legacy/C/planimeter.c b/legacy/C/planimeter.c
new file mode 100644
index 0000000..12661ef
--- /dev/null
+++ b/legacy/C/planimeter.c
@@ -0,0 +1,37 @@
+/**
+ * @file planimeter.c
+ * @brief A test program for geod_polygon_compute()
+ **********************************************************************/
+
+#include <stdio.h>
+#include "geodesic.h"
+
+#if defined(_MSC_VER)
+/* Squelch warnings about scanf */
+#  pragma warning (disable: 4996)
+#endif
+
+/**
+ * A simple program to compute the area of a geodesic polygon.
+ *
+ * This program reads in lines with lat, lon for each vertex
+ * of a polygon.  At the end of input, the program prints the number of
+ * vertices, the perimeter of the polygon and its area (for the WGS84
+ * ellipsoid).
+ **********************************************************************/
+
+int main() {
+  double a = 6378137, f = 1/298.257223563; /* WGS84 */
+  double lat, lon, A, P;
+  int n;
+  struct geod_geodesic g;
+  struct geod_polygon p;
+  geod_init(&g, a, f);
+  geod_polygon_init(&p, 0);
+
+  while (scanf("%lf %lf\n", &lat, &lon) == 2)
+    geod_polygon_addpoint(&g, &p, lat, lon);
+  n = geod_polygon_compute(&g, &p, 0, 1, &A, &P);
+  printf("%d %.8f %.3f\n", n, P, A);
+  return 0;
+}
diff --git a/legacy/Fortran/00README.txt b/legacy/Fortran/00README.txt
new file mode 100644
index 0000000..ecc4027
--- /dev/null
+++ b/legacy/Fortran/00README.txt
@@ -0,0 +1,27 @@
+This is a Fortran implementation of the geodesic algorithms described in
+
+  C. F. F. Karney,
+  Algorithms for geodesics,
+  J. Geodesy 87, 43-55 (2013);
+  http://dx.doi.org/10.1007/s00190-012-0578-z
+  Addenda: http://geographiclib.sf.net/geod-addenda.html
+
+For documentation, see
+
+  http://geographiclib.sourceforge.net/html/Fortran/
+
+The code in this directory is entirely self-contained.  In particular,
+it does not depend on the C++ classes.  You can compile and link the
+example programs directly with something like:
+
+  f95 -o geodinverse geodinverse.for geodesic.for
+  echo 30 0 29.5 179.5 | ./geodinverse
+
+Alternatively, you can build the examples using cmake.  For example, on
+Linux systems you might do:
+
+  mkdir BUILD
+  cd BUILD
+  cmake ..
+  make
+  echo 30 0 29.5 179.5 | ./geodinverse
diff --git a/legacy/Fortran/CMakeLists.txt b/legacy/Fortran/CMakeLists.txt
new file mode 100644
index 0000000..980ff29
--- /dev/null
+++ b/legacy/Fortran/CMakeLists.txt
@@ -0,0 +1,18 @@
+cmake_minimum_required (VERSION 2.6)
+
+project (GeographicLib-legacy-Fortran Fortran)
+
+# Set a default build type for single-configuration cmake generators if
+# no build type is set.
+if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
+  set (CMAKE_BUILD_TYPE Release)
+endif ()
+
+set (CMAKE_Fortran_FLAGS
+  "${CMAKE_Fortran_FLAGS} -Wall -Wextra -pedantic -std=f95 -fimplicit-none")
+
+set (TOOLS geoddirect geodinverse planimeter)
+
+foreach (TOOL ${TOOLS})
+  add_executable (${TOOL} ${TOOL}.for geodesic.for geodesic.inc)
+endforeach ()
diff --git a/legacy/Fortran/geoddirect.for b/legacy/Fortran/geoddirect.for
new file mode 100644
index 0000000..98c5e80
--- /dev/null
+++ b/legacy/Fortran/geoddirect.for
@@ -0,0 +1,35 @@
+*> @file geoddirect.for
+*! @brief A test program for direct()
+
+*> A simple program to solve the direct geodesic problem.
+*!
+*! This program reads in lines with lat1, lon1, azi1, s12 and prints out
+*! lines with lat2, lon2, azi2 (for the WGS84 ellipsoid).
+
+      program geoddirect
+      implicit none
+
+      include 'geodesic.inc'
+
+      double precision a, f, lat1, lon1, azi1, lat2, lon2, azi2, s12,
+     +    dummy
+      logical arcmod
+      integer omask
+
+* WGS84 values
+      a = 6378137d0
+      f = 1/298.257223563d0
+
+      arcmod = .false.
+      omask = 0
+
+ 10   continue
+      read(*, *, end=90, err=90) lat1, lon1, azi1, s12
+      call direct(a, f, lat1, lon1, azi1, s12, arcmod,
+     +    lat2, lon2, azi2, omask, dummy, dummy, dummy, dummy, dummy)
+      print 20, lat2, lon2, azi2
+ 20   format(f20.15, 1x, f20.15, 1x, f20.15)
+      go to 10
+ 90   continue
+      stop
+      end
diff --git a/legacy/Fortran/geodesic.for b/legacy/Fortran/geodesic.for
new file mode 100644
index 0000000..6501363
--- /dev/null
+++ b/legacy/Fortran/geodesic.for
@@ -0,0 +1,2000 @@
+* The subroutines in this files are documented at
+* http://geographiclib.sourceforge.net/html/Fortran/
+*
+*> @file geodesic.for
+*! @brief Implementation of geodesic routines in Fortran
+*!
+*! This is a Fortran implementation of the geodesic algorithms described
+*! in
+*! - C. F. F. Karney,
+*!   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+*!   Algorithms for geodesics</a>,
+*!   J. Geodesy <b>87</b>, 43--55 (2013);
+*!   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+*!   10.1007/s00190-012-0578-z</a>;
+*!   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+*!   geod-addenda.html</a>.
+*! .
+*! The principal advantages of these algorithms over previous ones
+*! (e.g., Vincenty, 1975) are
+*! - accurate to round off for |<i>f</i>| < 1/50;
+*! - the solution of the inverse problem is always found;
+*! - differential and integral properties of geodesics are computed.
+*!
+*! The shortest path between two points on the ellipsoid at (\e lat1, \e
+*! lon1) and (\e lat2, \e lon2) is called the geodesic.  Its length is
+*! \e s12 and the geodesic from point 1 to point 2 has forward azimuths
+*! \e azi1 and \e azi2 at the two end points.
+*!
+*! Traditionally two geodesic problems are considered:
+*! - the direct problem -- given \e lat1, \e lon1, \e s12, and \e azi1,
+*!   determine \e lat2, \e lon2, and \e azi2.  This is solved by the
+*!   subroutine direct().
+*! - the inverse problem -- given \e lat1, \e lon1, \e lat2, \e lon2,
+*!   determine \e s12, \e azi1, and \e azi2.  This is solved by the
+*!   subroutine invers().
+*!
+*! The ellipsoid is specified by its equatorial radius \e a (typically
+*! in meters) and flattening \e f.  The routines are accurate to round
+*! off with double precision arithmetic provided that |<i>f</i>| <
+*! 1/50; for the WGS84 ellipsoid, the errors are less than 15
+*! nanometers.  (Reasonably accurate results are obtained for |<i>f</i>|
+*! < 1/5.)  For a prolate ellipsoid, specify \e f < 0.
+*!
+*! The routines also calculate several other quantities of interest
+*! - \e SS12 is the area between the geodesic from point 1 to point 2
+*!   and the equator; i.e., it is the area, measured counter-clockwise,
+*!   of the geodesic quadrilateral with corners (\e lat1,\e lon1), (0,\e
+*!   lon1), (0,\e lon2), and (\e lat2,\e lon2).
+*! - \e m12, the reduced length of the geodesic is defined such that if
+*!   the initial azimuth is perturbed by \e dazi1 (radians) then the
+*!   second point is displaced by \e m12 \e dazi1 in the direction
+*!   perpendicular to the geodesic.  On a curved surface the reduced
+*!   length obeys a symmetry relation, \e m12 + \e m21 = 0.  On a flat
+*!   surface, we have \e m12 = \e s12.
+*! - \e MM12 and \e MM21 are geodesic scales.  If two geodesics are
+*!   parallel at point 1 and separated by a small distance \e dt, then
+*!   they are separated by a distance \e MM12 \e dt at point 2.  \e MM21
+*!   is defined similarly (with the geodesics being parallel to one
+*!   another at point 2).  On a flat surface, we have \e MM12 = \e MM21
+*!   = 1.
+*! - \e a12 is the arc length on the auxiliary sphere.  This is a
+*!   construct for converting the problem to one in spherical
+*!   trigonometry.  \e a12 is measured in degrees.  The spherical arc
+*!   length from one equator crossing to the next is always 180°.
+*!
+*! If points 1, 2, and 3 lie on a single geodesic, then the following
+*! addition rules hold:
+*! - \e s13 = \e s12 + \e s23
+*! - \e a13 = \e a12 + \e a23
+*! - \e SS13 = \e SS12 + \e SS23
+*! - \e m13 = \e m12 \e MM23 + \e m23 \e MM21
+*! - \e MM13 = \e MM12 \e MM23 − (1 − \e MM12 \e MM21) \e
+*!   m23 / \e m12
+*! - \e MM31 = \e MM32 \e MM21 − (1 − \e MM23 \e MM32) \e
+*!   m12 / \e m23
+*!
+*! The shortest distance returned by the solution of the inverse problem
+*! is (obviously) uniquely defined.  However, in a few special cases
+*! there are multiple azimuths which yield the same shortest distance.
+*! Here is a catalog of those cases:
+*! - \e lat1 = −\e lat2 (with neither point at a pole).  If \e azi1 = \e
+*!   azi2, the geodesic is unique.  Otherwise there are two geodesics
+*!   and the second one is obtained by setting [\e azi1, \e azi2] = [\e
+*!   azi2, \e azi1], [\e MM12, \e MM21] = [\e MM21, \e MM12], \e SS12 =
+*!   −\e SS12.  (This occurs when the longitude difference is near
+*!   ±180° for oblate ellipsoids.)
+*! - \e lon2 = \e lon1 ± 180° (with neither point at a pole).  If
+*!   \e azi1 = 0° or ±180°, the geodesic is unique.
+*!   Otherwise there are two geodesics and the second one is obtained by
+*!   setting [\e azi1, \e azi2] = [−\e azi1, −\e azi2], \e
+*!   SS12 = −\e SS12.  (This occurs when \e lat2 is near
+*!   −\e lat1 for prolate ellipsoids.)
+*! - Points 1 and 2 at opposite poles.  There are infinitely many
+*!   geodesics which can be generated by setting [\e azi1, \e azi2] =
+*!   [\e azi1, \e azi2] + [\e d, −\e d], for arbitrary \e d.  (For
+*!   spheres, this prescription applies when points 1 and 2 are
+*!   antipodal.)
+*! - \e s12 = 0 (coincident points).  There are infinitely many
+*!   geodesics which can be generated by setting [\e azi1, \e azi2] =
+*!   [\e azi1, \e azi2] + [\e d, \e d], for arbitrary \e d.
+*!
+*! These routines are a simple transcription of the corresponding C++
+*! classes in <a href="http://geographiclib.sf.net"> GeographicLib</a>.
+*! Because of the limitations of Fortran 77, the classes have been
+*! replaced by simple subroutines with no attempt to save "state" across
+*! subroutine calls.  Most of the internal comments have been retained.
+*! However, in the process of transcription some documentation has been
+*! lost and the documentation for the C++ classes,
+*! GeographicLib::Geodesic, GeographicLib::GeodesicLine, and
+*! GeographicLib::PolygonArea, should be consulted.  The C++ code
+*! remains the "reference implementation".  Think twice about
+*! restructuring the internals of the Fortran code since this may make
+*! porting fixes from the C++ code more difficult.
+*!
+*! Copyright (c) Charles Karney (2012-2013) <charles at karney.com> and
+*! licensed under the MIT/X11 License.  For more information, see
+*! http://geographiclib.sourceforge.net/
+*!
+*! This library was distributed with
+*! <a href="../index.html">GeographicLib</a> 1.31.
+
+*> Solve the direct geodesic problem
+*!
+*! @param[in] a the equatorial radius (meters).
+*! @param[in] f the flattening of the ellipsoid.  Setting \e f = 0 gives
+*!   a sphere.  Negative \e f gives a prolate ellipsoid.
+*! @param[in] lat1 latitude of point 1 (degrees).
+*! @param[in] lon1 longitude of point 1 (degrees).
+*! @param[in] azi1 azimuth at point 1 (degrees).
+*! @param[in] s12a12 if \e arcmod is false, this is the distance between
+*!   point 1 and point 2 (meters); otherwise it is the arc length
+*!   between point 1 and point 2 (degrees); it can be negative.
+*! @param[in] arcmod logical flag determining the meaning of the \e
+*!   s12a12.
+*! @param[out] lat2 latitude of point 2 (degrees).
+*! @param[out] lon2 longitude of point 2 (degrees).
+*! @param[out] azi2 (forward) azimuth at point 2 (degrees).
+*! @param[in] omask a bitor'ed combination of mask values
+*!   specifying which of the following parameters should be set.
+*! @param[out] a12s12 if \e arcmod is false, this is the arc length
+*!   between point 1 and point 2 (degrees); otherwise it is the distance
+*!   between point 1 and point 2 (meters).
+*! @param[out] m12 reduced length of geodesic (meters).
+*! @param[out] MM12 geodesic scale of point 2 relative to point 1
+*!   (dimensionless).
+*! @param[out] MM21 geodesic scale of point 1 relative to point 2
+*!   (dimensionless).
+*! @param[out] SS12 area under the geodesic (meters<sup>2</sup>).
+*!
+*! \e omask is an integer in [0, 16) whose binary bits are interpreted
+*! as follows
+*! - 1 return \e a12
+*! - 2 return \e m12
+*! - 4 return \e MM12 and \e MM21
+*! - 8 return \e SS12
+*!
+*! \e lat1 should be in the range [−90°, 90°]; \e lon1 and
+*! \e azi1 should be in the range [−540°, 540°).  The
+*! values of \e lon2 and \e azi2 returned are in the range
+*! [−180°, 180°).
+*!
+*! If either point is at a pole, the azimuth is defined by keeping the
+*! longitude fixed, writing \e lat = \e lat = ±(90° −
+*! ε), and taking the limit ε → 0+.  An arc length
+*! greater that 180° signifies a geodesic which is not a shortest
+*! path.  (For a prolate ellipsoid, an additional condition is necessary
+*! for a shortest path: the longitudinal extent must not exceed of
+*! 180°.)
+
+      subroutine direct(a, f, lat1, lon1, azi1, s12a12, arcmod,
+     +    lat2, lon2, azi2, omask, a12s12, m12, MM12, MM21, SS12)
+* input
+      double precision a, f, lat1, lon1, azi1, s12a12
+      logical arcmod
+      integer omask
+* output
+      double precision lat2, lon2, azi2
+* optional output
+      double precision a12s12, m12, MM12, MM21, SS12
+
+      integer ord, nC1, nC1p, nC2, nA3, nA3x, nC3, nC3x, nC4, nC4x
+      parameter (ord = 6, nC1 = ord, nC1p = ord,
+     +    nC2 = ord, nA3 = ord, nA3x = nA3,
+     +    nC3 = ord, nC3x = (nC3 * (nC3 - 1)) / 2,
+     +    nC4 = ord, nC4x = (nC4 * (nC4 + 1)) / 2)
+      double precision A3x(0:nA3x-1), C3x(0:nC3x-1), C4x(0:nC4x-1),
+     +    C1a(nC1), C1pa(nC1p), C2a(nC2), C3a(nC3-1), C4a(0:nC4-1)
+
+      double precision csmgt, atanhx, hypotx,
+     +    AngNm, AngNm2, AngRnd, TrgSum, A1m1f, A2m1f, A3f
+      logical arcp, redlp, scalp, areap
+      double precision e2, f1, ep2, n, b, c2,
+     +    lon1x, azi1x, phi, alp1, salp0, calp0, k2, eps,
+     +    salp1, calp1, ssig1, csig1, cbet1, sbet1, dn1, somg1, comg1,
+     +    salp2, calp2, ssig2, csig2, sbet2, cbet2, dn2, somg2, comg2,
+     +    ssig12, csig12, salp12, calp12, omg12, lam12, lon12,
+     +    sig12, stau1, ctau1, tau12, s12a, t, s, c, serr,
+     +    A1m1, A2m1, A3c, A4, AB1, AB2,
+     +    B11, B12, B21, B22, B31, B41, B42, J12
+
+      double precision dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh
+      integer digits, maxit1, maxit2
+      logical init
+      common /geocom/ dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh, digits, maxit1, maxit2, init
+
+      if (.not.init) call geoini
+
+      e2 = f * (2 - f)
+      ep2 = e2 / (1 - e2)
+      f1 = 1 - f
+      n = f / (2 - f)
+      b = a * f1
+      c2 = 0
+
+      arcp = mod(omask/1, 2) == 1
+      redlp = mod(omask/2, 2) == 1
+      scalp = mod(omask/4, 2) == 1
+      areap = mod(omask/8, 2) == 1
+
+      if (areap) then
+        if (e2 .eq. 0) then
+          c2 = a**2
+        else if (e2 .gt. 0) then
+          c2 = (a**2 + b**2 * atanhx(sqrt(e2)) / sqrt(e2)) / 2
+        else
+          c2 = (a**2 + b**2 * atan(sqrt(abs(e2))) / sqrt(abs(e2))) / 2
+        end if
+      end if
+
+      call A3cof(n, A3x)
+      call C3cof(n, C3x)
+      if (areap) call C4cof(n, C4x)
+
+* Guard against underflow in salp0
+      azi1x = AngRnd(AngNm(azi1))
+      lon1x = AngNm(lon1)
+
+* alp1 is in [0, pi]
+      alp1 = azi1x * degree
+* Enforce sin(pi) == 0 and cos(pi/2) == 0.  Better to face the ensuing
+* problems directly than to skirt them.
+      salp1 = csmgt(0d0, sin(alp1), azi1x .eq. -180)
+      calp1 = csmgt(0d0, cos(alp1), abs(azi1x) .eq. 90)
+
+      phi = lat1 * degree
+* Ensure cbet1 = +dbleps at poles
+      sbet1 = f1 * sin(phi)
+      cbet1 = csmgt(tiny, cos(phi), abs(lat1) .eq. 90)
+      call Norm(sbet1, cbet1)
+      dn1 = sqrt(1 + ep2 * sbet1**2)
+
+* Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0),
+* alp0 in [0, pi/2 - |bet1|]
+      salp0 = salp1 * cbet1
+* Alt: calp0 = hypot(sbet1, calp1 * cbet1).  The following
+* is slightly better (consider the case salp1 = 0).
+      calp0 = hypotx(calp1, salp1 * sbet1)
+* Evaluate sig with tan(bet1) = tan(sig1) * cos(alp1).
+* sig = 0 is nearest northward crossing of equator.
+* With bet1 = 0, alp1 = pi/2, we have sig1 = 0 (equatorial line).
+* With bet1 =  pi/2, alp1 = -pi, sig1 =  pi/2
+* With bet1 = -pi/2, alp1 =  0 , sig1 = -pi/2
+* Evaluate omg1 with tan(omg1) = sin(alp0) * tan(sig1).
+* With alp0 in (0, pi/2], quadrants for sig and omg coincide.
+* No atan2(0,0) ambiguity at poles since cbet1 = +dbleps.
+* With alp0 = 0, omg1 = 0 for alp1 = 0, omg1 = pi for alp1 = pi.
+      ssig1 = sbet1
+      somg1 = salp0 * sbet1
+      csig1 = csmgt(cbet1 * calp1, 1d0, sbet1 .ne. 0 .or. calp1 .ne. 0)
+      comg1 = csig1
+* sig1 in (-pi, pi]
+      call Norm(ssig1, csig1)
+* Geodesic::Norm(somg1, comg1); -- don't need to normalize!
+
+      k2 = calp0**2 * ep2
+      eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2)
+
+      A1m1 = A1m1f(eps)
+      call C1f(eps, C1a)
+      B11 = TrgSum(.true., ssig1, csig1, C1a, nC1)
+      s = sin(B11)
+      c = cos(B11)
+* tau1 = sig1 + B11
+      stau1 = ssig1 * c + csig1 * s
+      ctau1 = csig1 * c - ssig1 * s
+* Not necessary because C1pa reverts C1a
+*    B11 = -TrgSum(true, stau1, ctau1, C1pa, nC1p)
+
+      if (.not. arcmod) call C1pf(eps, C1pa)
+
+      if (redlp .or. scalp) then
+        A2m1 = A2m1f(eps)
+        call C2f(eps, C2a)
+        B21 = TrgSum(.true., ssig1, csig1, C2a, nC2)
+      else
+* Suppress bogus warnings about unitialized variables
+        A2m1 = 0
+        B21 = 0
+      end if
+
+      call C3f(eps, C3x, C3a)
+      A3c = -f * salp0 * A3f(eps, A3x)
+      B31 = TrgSum(.true., ssig1, csig1, C3a, nC3-1)
+
+      if (areap) then
+        call C4f(eps, C4x, C4a)
+* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0)
+        A4 = a**2 * calp0 * salp0 * e2
+        B41 = TrgSum(.false., ssig1, csig1, C4a, nC4)
+      else
+* Suppress bogus warnings about unitialized variables
+        A4 = 0
+        B41 = 0
+      end if
+
+      if (arcmod) then
+* Interpret s12a12 as spherical arc length
+        sig12 = s12a12 * degree
+        s12a = abs(s12a12)
+        s12a = s12a - 180 * aint(s12a / 180)
+        ssig12 =  csmgt(0d0, sin(sig12), s12a .eq.  0)
+        csig12 =  csmgt(0d0, cos(sig12), s12a .eq. 90)
+* Suppress bogus warnings about unitialized variables
+        B12 = 0
+      else
+* Interpret s12a12 as distance
+        tau12 = s12a12 / (b * (1 + A1m1))
+        s = sin(tau12)
+        c = cos(tau12)
+* tau2 = tau1 + tau12
+        B12 = - TrgSum(.true.,
+     +      stau1 * c + ctau1 * s, ctau1 * c - stau1 * s, C1pa, nC1p)
+        sig12 = tau12 - (B12 - B11)
+        ssig12 = sin(sig12)
+        csig12 = cos(sig12)
+        if (abs(f) .gt. 0.01d0) then
+* Reverted distance series is inaccurate for |f| > 1/100, so correct
+* sig12 with 1 Newton iteration.  The following table shows the
+* approximate maximum error for a = WGS_a() and various f relative to
+* GeodesicExact.
+*     erri = the error in the inverse solution (nm)
+*     errd = the error in the direct solution (series only) (nm)
+*     errda = the error in the direct solution (series + 1 Newton) (nm)
+*
+*       f     erri  errd errda
+*     -1/5    12e6 1.2e9  69e6
+*     -1/10  123e3  12e6 765e3
+*     -1/20   1110 108e3  7155
+*     -1/50  18.63 200.9 27.12
+*     -1/100 18.63 23.78 23.37
+*     -1/150 18.63 21.05 20.26
+*      1/150 22.35 24.73 25.83
+*      1/100 22.35 25.03 25.31
+*      1/50  29.80 231.9 30.44
+*      1/20   5376 146e3  10e3
+*      1/10  829e3  22e6 1.5e6
+*      1/5   157e6 3.8e9 280e6
+          ssig2 = ssig1 * csig12 + csig1 * ssig12
+          csig2 = csig1 * csig12 - ssig1 * ssig12
+          B12 = TrgSum(.true., ssig2, csig2, C1a, nC1)
+          serr = (1 + A1m1) * (sig12 + (B12 - B11)) - s12a12 / b
+          sig12 = sig12 - serr / sqrt(1 + k2 * ssig2**2)
+          ssig12 = sin(sig12)
+          csig12 = cos(sig12)
+* Update B12 below
+        end if
+      end if
+
+* sig2 = sig1 + sig12
+      ssig2 = ssig1 * csig12 + csig1 * ssig12
+      csig2 = csig1 * csig12 - ssig1 * ssig12
+      dn2 = sqrt(1 + k2 * ssig2**2)
+      if (arcmod .or. abs(f) .gt. 0.01d0)
+     +    B12 = TrgSum(.true., ssig2, csig2, C1a, nC1)
+      AB1 = (1 + A1m1) * (B12 - B11)
+
+* sin(bet2) = cos(alp0) * sin(sig2)
+      sbet2 = calp0 * ssig2
+* Alt: cbet2 = hypot(csig2, salp0 * ssig2)
+      cbet2 = hypotx(salp0, calp0 * csig2)
+      if (cbet2 .eq. 0) then
+* I.e., salp0 = 0, csig2 = 0.  Break the degeneracy in this case
+        cbet2 = tiny
+        csig2 = cbet2
+      end if
+* tan(omg2) = sin(alp0) * tan(sig2)
+* No need to normalize
+      somg2 = salp0 * ssig2
+      comg2 = csig2
+* tan(alp0) = cos(sig2)*tan(alp2)
+* No need to normalize
+      salp2 = salp0
+      calp2 = calp0 * csig2
+* omg12 = omg2 - omg1
+      omg12 = atan2(somg2 * comg1 - comg2 * somg1,
+     +    comg2 * comg1 + somg2 * somg1)
+
+      lam12 = omg12 + A3c *
+     +    ( sig12 + (TrgSum(.true., ssig2, csig2, C3a, nC3-1)
+     +    - B31))
+      lon12 = lam12 / degree
+* Use Math::AngNm2 because longitude might have wrapped multiple
+* times.
+      lon12 = AngNm2(lon12)
+      lon2 = AngNm(lon1x + lon12)
+      lat2 = atan2(sbet2, f1 * cbet2) / degree
+* minus signs give range [-180, 180). 0- converts -0 to +0.
+      azi2 = 0 - atan2(-salp2, calp2) / degree
+
+      if (redlp .or. scalp) then
+        B22 = TrgSum(.true., ssig2, csig2, C2a, nC2)
+        AB2 = (1 + A2m1) * (B22 - B21)
+        J12 = (A1m1 - A2m1) * sig12 + (AB1 - AB2)
+      end if
+* Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure
+* accurate cancellation in the case of coincident points.
+      if (redlp) m12 = b * ((dn2 * (csig1 * ssig2) -
+     +    dn1 * (ssig1 * csig2)) - csig1 * csig2 * J12)
+      if (scalp) then
+        t = k2 * (ssig2 - ssig1) * (ssig2 + ssig1) / (dn1 + dn2)
+        MM12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1
+        MM21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2
+      end if
+
+      if (areap) then
+        B42 = TrgSum(.false., ssig2, csig2, C4a, nC4)
+        if (calp0 .eq. 0 .or. salp0 .eq. 0) then
+* alp12 = alp2 - alp1, used in atan2 so no need to normalized
+          salp12 = salp2 * calp1 - calp2 * salp1
+          calp12 = calp2 * calp1 + salp2 * salp1
+* The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+* salp12 = -0 and alp12 = -180.  However this depends on the sign being
+* attached to 0 correctly.  The following ensures the correct behavior.
+          if (salp12 .eq. 0 .and. calp12 .lt. 0) then
+            salp12 = tiny * calp1
+            calp12 = -1
+          end if
+        else
+* tan(alp) = tan(alp0) * sec(sig)
+* tan(alp2-alp1) = (tan(alp2) -tan(alp1)) / (tan(alp2)*tan(alp1)+1)
+* = calp0 * salp0 * (csig1-csig2) / (salp0^2 + calp0^2 * csig1*csig2)
+* If csig12 > 0, write
+*   csig1 - csig2 = ssig12 * (csig1 * ssig12 / (1 + csig12) + ssig1)
+* else
+*   csig1 - csig2 = csig1 * (1 - csig12) + ssig12 * ssig1
+* No need to normalize
+          salp12 = calp0 * salp0 *
+     +        csmgt(csig1 * (1 - csig12) + ssig12 * ssig1,
+     +        ssig12 * (csig1 * ssig12 / (1 + csig12) + ssig1),
+     +        csig12 .le. 0)
+          calp12 = salp0**2 + calp0**2 * csig1 * csig2
+        end if
+        SS12 = c2 * atan2(salp12, calp12) + A4 * (B42 - B41)
+      end if
+
+      if (arcp) a12s12 = csmgt(b * ((1 + A1m1) * sig12 + AB1),
+     +    sig12 / degree, arcmod)
+
+      return
+      end
+
+*> Solve the inverse geodesic problem.
+*!
+*! @param[in] a the equatorial radius (meters).
+*! @param[in] f the flattening of the ellipsoid.  Setting \e f = 0 gives
+*!   a sphere.  Negative \e f gives a prolate ellipsoid.
+*! @param[in] lat1 latitude of point 1 (degrees).
+*! @param[in] lon1 longitude of point 1 (degrees).
+*! @param[in] lat2 latitude of point 2 (degrees).
+*! @param[in] lon2 longitude of point 2 (degrees).
+*! @param[out] s12 distance between point 1 and point 2 (meters).
+*! @param[out] azi1 azimuth at point 1 (degrees).
+*! @param[out] azi2 (forward) azimuth at point 2 (degrees).
+*! @param[in] omask a bitor'ed combination of mask values
+*!   specifying which of the following parameters should be set.
+*! @param[out] a12 arc length of between point 1 and point 2 (degrees).
+*! @param[out] m12 reduced length of geodesic (meters).
+*! @param[out] MM12 geodesic scale of point 2 relative to point 1
+*!   (dimensionless).
+*! @param[out] MM21 geodesic scale of point 1 relative to point 2
+*!   (dimensionless).
+*! @param[out] SS12 area under the geodesic (meters<sup>2</sup>).
+*!
+*! \e omask is an integer in [0, 16) whose binary bits are interpreted
+*! as follows
+*! - 1 return \e a12
+*! - 2 return \e m12
+*! - 4 return \e MM12 and \e MM21
+*! - 8 return \e SS12
+*!
+*! \e lat1 and \e lat2 should be in the range [−90°, 90°];
+*! \e lon1 and \e lon2 should be in the range [−540°,
+*! 540°).  The values of \e azi1 and \e azi2 returned are in the
+*! range [−180°, 180°).
+*!
+*! If either point is at a pole, the azimuth is defined by keeping the
+*! longitude fixed, writing \e lat = ±(90° −
+*! ε), and taking the limit ε → 0+.
+*!
+*! The solution to the inverse problem is found using Newton's method.
+*! If this fails to converge (this is very unlikely in geodetic
+*! applications but does occur for very eccentric ellipsoids), then the
+*! bisection method is used to refine the solution.
+
+      subroutine invers(a, f, lat1, lon1, lat2, lon2,
+     +    s12, azi1, azi2, omask, a12, m12, MM12, MM21, SS12)
+* input
+      double precision a, f, lat1, lon1, lat2, lon2
+      integer omask
+* output
+      double precision s12, azi1, azi2
+* optional output
+      double precision a12, m12, MM12, MM21, SS12
+
+      integer ord, nC1, nC2, nA3, nA3x, nC3, nC3x, nC4, nC4x
+      parameter (ord = 6, nC1 = ord, nC2 = ord, nA3 = ord, nA3x = nA3,
+     +    nC3 = ord, nC3x = (nC3 * (nC3 - 1)) / 2,
+     +    nC4 = ord, nC4x = (nC4 * (nC4 + 1)) / 2)
+      double precision A3x(0:nA3x-1), C3x(0:nC3x-1), C4x(0:nC4x-1),
+     +    C1a(nC1), C2a(nC2), C3a(nC3-1), C4a(0:nC4-1)
+
+      double precision csmgt, atanhx, hypotx,
+     +    AngNm, AngDif, AngRnd, TrgSum, Lam12f, InvSta
+      integer latsgn, lonsgn, swapp, numit
+      logical arcp, redlp, scalp, areap, merid, tripn, tripb
+
+      double precision e2, f1, ep2, n, b, c2,
+     +    lat1x, lat2x, phi, salp0, calp0, k2, eps,
+     +    salp1, calp1, ssig1, csig1, cbet1, sbet1, dbet1, dn1,
+     +    salp2, calp2, ssig2, csig2, sbet2, cbet2, dbet2, dn2,
+     +    slam12, clam12, salp12, calp12, omg12, lam12, lon12,
+     +    salp1a, calp1a, salp1b, calp1b,
+     +    dalp1, sdalp1, cdalp1, nsalp1, alp12, somg12, domg12,
+     +    sig12, v, dv, dnm, dummy,
+     +    A4, B41, B42, s12x, m12x, a12x
+
+      double precision dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh
+      integer digits, maxit1, maxit2
+      logical init
+      common /geocom/ dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh, digits, maxit1, maxit2, init
+
+      if (.not.init) call geoini
+
+      f1 = 1 - f
+      e2 = f * (2 - f)
+      ep2 = e2 / f1**2
+      n = f / ( 2 - f)
+      b = a * f1
+      c2 = 0
+
+      arcp = mod(omask/1, 2) == 1
+      redlp = mod(omask/2, 2) == 1
+      scalp = mod(omask/4, 2) == 1
+      areap = mod(omask/8, 2) == 1
+
+      if (areap) then
+        if (e2 .eq. 0) then
+          c2 = a**2
+        else if (e2 .gt. 0) then
+          c2 = (a**2 + b**2 * atanhx(sqrt(e2)) / sqrt(e2)) / 2
+        else
+          c2 = (a**2 + b**2 * atan(sqrt(abs(e2))) / sqrt(abs(e2))) / 2
+        end if
+      end if
+
+      call A3cof(n, A3x)
+      call C3cof(n, C3x)
+      if (areap) call C4cof(n, C4x)
+
+* Compute longitude difference (AngDiff does this carefully).  Result is
+* in [-180, 180] but -180 is only for west-going geodesics.  180 is for
+* east-going and meridional geodesics.
+      lon12 = AngDif(AngNm(lon1), AngNm(lon2))
+* If very close to being on the same half-meridian, then make it so.
+      lon12 = AngRnd(lon12)
+* Make longitude difference positive.
+      if (lon12 .ge. 0) then
+        lonsgn = 1
+      else
+        lonsgn = -1
+      end if
+      lon12 = lon12 * lonsgn
+* If really close to the equator, treat as on equator.
+      lat1x = AngRnd(lat1)
+      lat2x = AngRnd(lat2)
+* Swap points so that point with higher (abs) latitude is point 1
+      if (abs(lat1x) .ge. abs(lat2x)) then
+        swapp = 1
+      else
+        swapp = -1
+      end if
+      if (swapp .lt. 0) then
+        lonsgn = -lonsgn
+        call swap(lat1x, lat2x)
+      end if
+* Make lat1 <= 0
+      if (lat1x .lt. 0) then
+        latsgn = 1
+      else
+        latsgn = -1
+      end if
+      lat1x = lat1x * latsgn
+      lat2x = lat2x * latsgn
+* Now we have
+*
+*     0 <= lon12 <= 180
+*     -90 <= lat1 <= 0
+*     lat1 <= lat2 <= -lat1
+*
+* longsign, swapp, latsgn register the transformation to bring the
+* coordinates to this canonical form.  In all cases, 1 means no change
+* was made.  We make these transformations so that there are few cases
+* to check, e.g., on verifying quadrants in atan2.  In addition, this
+* enforces some symmetries in the results returned.
+
+      phi = lat1x * degree
+* Ensure cbet1 = +dbleps at poles
+      sbet1 = f1 * sin(phi)
+      cbet1 = csmgt(tiny, cos(phi), lat1x .eq. -90)
+      call Norm(sbet1, cbet1)
+
+      phi = lat2x * degree
+* Ensure cbet2 = +dbleps at poles
+      sbet2 = f1 * sin(phi)
+      cbet2 = csmgt(tiny, cos(phi), abs(lat2x) .eq. 90)
+      call Norm(sbet2, cbet2)
+
+* If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of the
+* |bet1| - |bet2|.  Alternatively (cbet1 >= -sbet1), abs(sbet2) + sbet1
+* is a better measure.  This logic is used in assigning calp2 in
+* Lambda12.  Sometimes these quantities vanish and in that case we force
+* bet2 = +/- bet1 exactly.  An example where is is necessary is the
+* inverse problem 48.522876735459 0 -48.52287673545898293
+* 179.599720456223079643 which failed with Visual Studio 10 (Release and
+* Debug)
+
+      if (cbet1 .lt. -sbet1) then
+        if (cbet2 .eq. cbet1) sbet2 = sign(sbet1, sbet2)
+      else
+        if (abs(sbet2) .eq. -sbet1) cbet2 = cbet1
+      end if
+
+      dn1 = sqrt(1 + ep2 * sbet1**2)
+      dn2 = sqrt(1 + ep2 * sbet2**2)
+
+      lam12 = lon12 * degree
+      slam12 = sin(lam12)
+      if (lon12 .eq. 180) slam12 = 0
+* lon12 == 90 isn't interesting
+      clam12 = cos(lam12)
+
+* Suppress bogus warnings about unitialized variables
+      a12x = 0
+      merid = lat1x .eq. -90 .or. slam12 == 0
+
+      if (merid) then
+
+* Endpoints are on a single full meridian, so the geodesic might lie on
+* a meridian.
+
+* Head to the target longitude
+        calp1 = clam12
+        salp1 = slam12
+* At the target we're heading north
+        calp2 = 1
+        salp2 = 0
+
+* tan(bet) = tan(sig) * cos(alp)
+        ssig1 = sbet1
+        csig1 = calp1 * cbet1
+        ssig2 = sbet2
+        csig2 = calp2 * cbet2
+
+* sig12 = sig2 - sig1
+        sig12 = atan2(max(csig1 * ssig2 - ssig1 * csig2, 0d0),
+     +      csig1 * csig2 + ssig1 * ssig2)
+        call Lengs(n, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+     +      cbet1, cbet2, s12x, m12x, dummy,
+     +      scalp, MM12, MM21, ep2, C1a, C2a)
+
+* Add the check for sig12 since zero length geodesics might yield m12 <
+* 0.  Test case was
+*
+*    echo 20.001 0 20.001 0 | Geod -i
+*
+* In fact, we will have sig12 > pi/2 for meridional geodesic which is
+* not a shortest path.
+        if (sig12 .lt. 1 .or. m12x .ge. 0) then
+          m12x = m12x * b
+          s12x = s12x * b
+          a12x = sig12 / degree
+        else
+* m12 < 0, i.e., prolate and too close to anti-podal
+          merid = .false.
+        end if
+      end if
+
+* Mimic the way Lambda12 works with calp1 = 0
+      if (.not. merid .and. sbet1 .eq. 0 .and.
+     +    (f .le. 0 .or. lam12 .le. pi - f * pi)) then
+
+* Geodesic runs along equator
+        calp1 = 0
+        calp2 = 0
+        salp1 = 1
+        salp2 = 1
+        s12x = a * lam12
+        sig12 = lam12 / f1
+        omg12 = sig12
+        m12x = b * sin(sig12)
+        if (scalp) then
+          MM12 = cos(sig12)
+          MM21 = MM12
+        end if
+        a12x = lon12 / f1
+      else if (.not. merid) then
+* Now point1 and point2 belong within a hemisphere bounded by a
+* meridian and geodesic is neither meridional or equatorial.
+
+* Figure a starting point for Newton's method
+        sig12 = InvSta(sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12,
+     +      f, A3x, salp1, calp1, salp2, calp2, dnm, C1a, C2a)
+
+        if (sig12 .ge. 0) then
+* Short lines (InvSta sets salp2, calp2, dnm)
+          s12x = sig12 * b * dnm
+          m12x = dnm**2 * b * sin(sig12 / dnm)
+          if (scalp) then
+            MM12 = cos(sig12 / dnm)
+            MM21 = MM12
+          end if
+          a12x = sig12 / degree
+          omg12 = lam12 / (f1 * dnm)
+        else
+
+* Newton's method.  This is a straightforward solution of f(alp1) =
+* lambda12(alp1) - lam12 = 0 with one wrinkle.  f(alp) has exactly one
+* root in the interval (0, pi) and its derivative is positive at the
+* root.  Thus f(alp) is positive for alp > alp1 and negative for alp <
+* alp1.  During the course of the iteration, a range (alp1a, alp1b) is
+* maintained which brackets the root and with each evaluation of
+* f(alp) the range is shrunk, if possible.  Newton's method is
+* restarted whenever the derivative of f is negative (because the new
+* value of alp1 is then further from the solution) or if the new
+* estimate of alp1 lies outside (0,pi); in this case, the new starting
+* guess is taken to be (alp1a + alp1b) / 2.
+
+* Bracketing range
+          salp1a = tiny
+          calp1a = 1
+          salp1b = tiny
+          calp1b = -1
+          tripn = .false.
+          tripb = .false.
+          do 10 numit = 0, maxit2-1
+* the WGS84 test set: mean = 1.47, sd = 1.25, max = 16
+* WGS84 and random input: mean = 2.85, sd = 0.60
+            v = Lam12f(sbet1, cbet1, dn1, sbet2, cbet2, dn2,
+     +          salp1, calp1, f, A3x, C3x, salp2, calp2, sig12,
+     +          ssig1, csig1, ssig2, csig2,
+     +          eps, omg12, numit .lt. maxit1, dv,
+     +          C1a, C2a, C3a) - lam12
+* 2 * tol0 is approximately 1 ulp for a number in [0, pi].
+* Reversed test to allow escape with NaNs
+            if (tripb .or.
+     +          .not. (abs(v) .ge. csmgt(8d0, 2d0, tripn) * tol0))
+     +          go to 20
+* Update bracketing values
+            if (v .gt. 0 .and. (numit .gt. maxit1 .or.
+     +          calp1/salp1 .gt. calp1b/salp1b)) then
+              salp1b = salp1
+              calp1b = calp1
+            else if (v .lt. 0 .and. (numit .gt. maxit1 .or.
+     +            calp1/salp1 .lt. calp1a/salp1a)) then
+              salp1a = salp1
+              calp1a = calp1
+            end if
+            if (numit .lt. maxit1 .and. dv .gt. 0) then
+              dalp1 = -v/dv
+              sdalp1 = sin(dalp1)
+              cdalp1 = cos(dalp1)
+              nsalp1 = salp1 * cdalp1 + calp1 * sdalp1
+              if (nsalp1 .gt. 0 .and. abs(dalp1) .lt. pi) then
+                calp1 = calp1 * cdalp1 - salp1 * sdalp1
+                salp1 = nsalp1
+                call Norm(salp1, calp1)
+* In some regimes we don't get quadratic convergence because
+* slope -> 0.  So use convergence conditions based on dbleps
+* instead of sqrt(dbleps).
+                tripn = abs(v) .le. 16 * tol0
+                go to 10
+              end if
+            end if
+* Either dv was not postive or updated value was outside legal
+* range.  Use the midpoint of the bracket as the next estimate.
+* This mechanism is not needed for the WGS84 ellipsoid, but it does
+* catch problems with more eccentric ellipsoids.  Its efficacy is
+* such for the WGS84 test set with the starting guess set to alp1 =
+* 90deg:
+* the WGS84 test set: mean = 5.21, sd = 3.93, max = 24
+* WGS84 and random input: mean = 4.74, sd = 0.99
+            salp1 = (salp1a + salp1b)/2
+            calp1 = (calp1a + calp1b)/2
+            call Norm(salp1, calp1)
+            tripn = .false.
+            tripb = abs(salp1a - salp1) + (calp1a - calp1) .lt. tolb
+     +          .or. abs(salp1 - salp1b) + (calp1 - calp1b) .lt. tolb
+ 10       continue
+ 20       continue
+          call Lengs(eps, sig12, ssig1, csig1, dn1,
+     +        ssig2, csig2, dn2, cbet1, cbet2, s12x, m12x, dummy,
+     +        scalp, MM12, MM21, ep2, C1a, C2a)
+          m12x = m12x * b
+          s12x = s12x * b
+          a12x = sig12 / degree
+          omg12 = lam12 - omg12
+        end if
+      end if
+
+* Convert -0 to 0
+      s12 = 0 + s12x
+      if (redlp) m12 = 0 + m12x
+
+      if (areap) then
+* From Lambda12: sin(alp1) * cos(bet1) = sin(alp0)
+        salp0 = salp1 * cbet1
+        calp0 = hypotx(calp1, salp1 * sbet1)
+        if (calp0 .ne. 0 .and. salp0 .ne. 0) then
+* From Lambda12: tan(bet) = tan(sig) * cos(alp)
+          ssig1 = sbet1
+          csig1 = calp1 * cbet1
+          ssig2 = sbet2
+          csig2 = calp2 * cbet2
+          k2 = calp0**2 * ep2
+          eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2)
+* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0).
+          A4 = a**2 * calp0 * salp0 * e2
+          call Norm(ssig1, csig1)
+          call Norm(ssig2, csig2)
+          call C4f(eps, C4x, C4a)
+          B41 = TrgSum(.false., ssig1, csig1, C4a, nC4)
+          B42 = TrgSum(.false., ssig2, csig2, C4a, nC4)
+          SS12 = A4 * (B42 - B41)
+        else
+* Avoid problems with indeterminate sig1, sig2 on equator
+          SS12 = 0
+        end if
+
+        if (.not. merid .and. omg12 .lt. 0.75d0 * pi
+     +      .and. sbet2 - sbet1 .lt. 1.75d0) then
+* Use tan(Gamma/2) = tan(omg12/2)
+* * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2))
+* with tan(x/2) = sin(x)/(1+cos(x))
+          somg12 = sin(omg12)
+          domg12 = 1 + cos(omg12)
+          dbet1 = 1 + cbet1
+          dbet2 = 1 + cbet2
+          alp12 = 2 * atan2(somg12 * (sbet1 * dbet2 + sbet2 * dbet1),
+     +        domg12 * ( sbet1 * sbet2 + dbet1 * dbet2 ) )
+        else
+* alp12 = alp2 - alp1, used in atan2 so no need to normalize
+          salp12 = salp2 * calp1 - calp2 * salp1
+          calp12 = calp2 * calp1 + salp2 * salp1
+* The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+* salp12 = -0 and alp12 = -180.  However this depends on the sign
+* being attached to 0 correctly.  The following ensures the correct
+* behavior.
+          if (salp12 .eq. 0 .and. calp12 .lt. 0) then
+            salp12 = tiny * calp1
+            calp12 = -1
+          end if
+          alp12 = atan2(salp12, calp12)
+        end if
+        SS12 = SS12 + c2 * alp12
+        SS12 = SS12 * swapp * lonsgn * latsgn
+* Convert -0 to 0
+        SS12 = 0 + SS12
+      end if
+
+* Convert calp, salp to azimuth accounting for lonsgn, swapp, latsgn.
+      if (swapp .lt. 0) then
+        call swap(salp1, salp2)
+        call swap(calp1, calp2)
+        if (scalp) call swap(MM12, MM21)
+      end if
+
+      salp1 = salp1 * swapp * lonsgn
+      calp1 = calp1 * swapp * latsgn
+      salp2 = salp2 * swapp * lonsgn
+      calp2 = calp2 * swapp * latsgn
+
+* minus signs give range [-180, 180). 0- converts -0 to +0.
+      azi1 = 0 - atan2(-salp1, calp1) / degree
+      azi2 = 0 - atan2(-salp2, calp2) / degree
+
+      if (arcp) a12 = a12x
+
+      return
+      end
+
+*> Determine the area of a geodesic polygon
+*!
+*! @param[in] a the equatorial radius (meters).
+*! @param[in] f the flattening of the ellipsoid.  Setting \e f = 0 gives
+*!   a sphere.  Negative \e f gives a prolate ellipsoid.
+*! @param[in] lats an array of the latitudes of the vertices (degrees).
+*! @param[in] lons an array of the longitudes of the vertices (degrees).
+*! @param[in] n the number of vertices
+*! @param[out] AA the (signed) area of the polygon (meters<sup>2</sup>)
+*! @param[out] PP the perimeter of the polygon
+*!
+*! \e lats should be in the range [−90°, 90°]; \e lons
+*! should be in the range [−540°, 540°).
+*!
+*! Only simple polygons (which are not self-intersecting) are allowed.
+*! There's no need to "close" the polygon by repeating the first vertex.
+*! The area returned is signed with counter-clockwise traversal being
+*! treated as positive.
+
+      subroutine area(a, f, lats, lons, n, AA, PP)
+* input
+      integer n
+      double precision a, f, lats(n), lons(n)
+* output
+      double precision AA, PP
+
+      integer i, omask, cross, trnsit
+      double precision s12, azi1, azi2, dummy, SS12, b, e2, c2, area0,
+     +    atanhx, Aacc(2), Pacc(2)
+
+      double precision dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh
+      integer digits, maxit1, maxit2
+      logical init
+      common /geocom/ dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh, digits, maxit1, maxit2, init
+
+      omask = 8
+      call accini(Aacc)
+      call accini(Pacc)
+      cross = 0
+      do 10 i = 0, n-1
+        call invers(a, f, lats(i+1), lons(i+1),
+     +      lats(mod(i+1,n)+1), lons(mod(i+1,n)+1),
+     +      s12, azi1, azi2, omask, dummy, dummy, dummy, dummy, SS12)
+        call accadd(Pacc, s12)
+        call accadd(Aacc, -SS12)
+        cross = cross + trnsit(lons(i+1), lons(mod(i+1,n)+1))
+ 10   continue
+      PP = Pacc(1)
+      b = a * (1 - f)
+      e2 = f * (2 - f)
+      if (e2 .eq. 0) then
+        c2 = a**2
+      else if (e2 .gt. 0) then
+        c2 = (a**2 + b**2 * atanhx(sqrt(e2)) / sqrt(e2)) / 2
+      else
+        c2 = (a**2 + b**2 * atan(sqrt(abs(e2))) / sqrt(abs(e2))) / 2
+      end if
+      area0 = 4 * pi * c2
+      if (mod(abs(cross), 2) .eq. 1) then
+        if (Aacc(1) .lt. 0) then
+          call accadd(Aacc, +area0/2)
+        else
+          call accadd(Aacc, -area0/2)
+        end if
+      end if
+      if (Aacc(1) .gt. area0/2) then
+        call accadd(Aacc, -area0)
+      else if (Aacc(1) .le. -area0/2) then
+        call accadd(Aacc, +area0)
+      end if
+      AA = Aacc(1)
+
+      return
+      end
+
+*> @cond SKIP
+
+      block data geodat
+      double precision dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh
+      integer digits, maxit1, maxit2
+      logical init
+      data init /.false./
+      common /geocom/ dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh, digits, maxit1, maxit2, init
+      end
+
+      subroutine geoini
+      double precision dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh
+      integer digits, maxit1, maxit2
+      logical init
+      common /geocom/ dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh, digits, maxit1, maxit2, init
+
+      digits = 53
+      dblmin = 0.5d0**1022
+      dbleps = 0.5d0**(digits-1)
+
+      pi = atan2(0.0d0, -1.0d0)
+      degree = pi/180
+      tiny = sqrt(dblmin)
+      tol0 = dbleps
+* Increase multiplier in defn of tol1 from 100 to 200 to fix inverse
+* case 52.784459512564 0 -52.784459512563990912 179.634407464943777557
+* which otherwise failed for Visual Studio 10 (Release and Debug)
+      tol1 = 200 * tol0
+      tol2 = sqrt(tol0)
+* Check on bisection interval
+      tolb = tol0 * tol2
+      xthrsh = 1000 * tol2
+      maxit1 = 20
+      maxit2 = maxit1 + digits + 10
+
+      init = .true.
+
+      return
+      end
+
+      subroutine Lengs(eps, sig12,
+     +    ssig1, csig1, dn1, ssig2, csig2, dn2,
+     +    cbet1, cbet2, s12b, m12b, m0,
+     +    scalp, MM12, MM21, ep2, C1a, C2a)
+* input
+      double precision eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+     +    cbet1, cbet2, ep2
+      logical scalp
+* output
+      double precision s12b, m12b, m0
+* optional output
+      double precision MM12, MM21
+* temporary storage
+      double precision C1a(*), C2a(*)
+
+      integer ord, nC1, nC2
+      parameter (ord = 6, nC1 = ord, nC2 = ord)
+
+      double precision A1m1f, A2m1f, TrgSum
+      double precision A1m1, AB1, A2m1, AB2, J12, csig12, t
+
+* Return m12b = (reduced length)/b; also calculate s12b = distance/b,
+* and m0 = coefficient of secular term in expression for reduced length.
+      call C1f(eps, C1a)
+      call C2f(eps, C2a)
+
+      A1m1 = A1m1f(eps)
+      AB1 = (1 + A1m1) * (TrgSum(.true., ssig2, csig2, C1a, nC1) -
+     +    TrgSum(.true., ssig1, csig1, C1a, nC1))
+      A2m1 = A2m1f(eps)
+      AB2 = (1 + A2m1) * (TrgSum(.true., ssig2, csig2, C2a, nC2) -
+     +    TrgSum(.true., ssig1, csig1, C2a, nC2))
+      m0 = A1m1 - A2m1
+      J12 = m0 * sig12 + (AB1 - AB2)
+* Missing a factor of b.
+* Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure
+* accurate cancellation in the case of coincident points.
+      m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) -
+     +    csig1 * csig2 * J12
+* Missing a factor of b
+      s12b = (1 + A1m1) * sig12 + AB1
+      if (scalp) then
+        csig12 = csig1 * csig2 + ssig1 * ssig2
+        t = ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2)
+        MM12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1
+        MM21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2
+      end if
+
+      return
+      end
+
+      double precision function Astrd(x, y)
+* Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.
+* This solution is adapted from Geocentric::Reverse.
+* input
+      double precision x, y
+
+      double precision cbrt, csmgt
+      double precision k, p, q, r, S, r2, r3, disc, u,
+     +    T3, T, ang, v, uv, w
+
+      p = x**2
+      q = y**2
+      r = (p + q - 1) / 6
+      if ( .not. (q .eq. 0 .and. r .lt. 0) ) then
+* Avoid possible division by zero when r = 0 by multiplying equations
+* for s and t by r^3 and r, resp.
+* S = r^3 * s
+        S = p * q / 4
+        r2 = r**2
+        r3 = r * r2
+* The discrimant of the quadratic equation for T3.  This is zero on
+* the evolute curve p^(1/3)+q^(1/3) = 1
+        disc = S * (S + 2 * r3)
+        u = r
+        if (disc .ge. 0) then
+          T3 = S + r3
+* Pick the sign on the sqrt to maximize abs(T3).  This minimizes loss
+* of precision due to cancellation.  The result is unchanged because
+* of the way the T is used in definition of u.
+* T3 = (r * t)^3
+          T3 = T3 + csmgt(-sqrt(disc), sqrt(disc), T3 .lt. 0)
+* N.B. cbrt always returns the real root.  cbrt(-8) = -2.
+* T = r * t
+          T = cbrt(T3)
+* T can be zero; but then r2 / T -> 0.
+          if (T .ne. 0) u = u + T + r2 / T
+        else
+* T is complex, but the way u is defined the result is real.
+          ang = atan2(sqrt(-disc), -(S + r3))
+* There are three possible cube roots.  We choose the root which
+* avoids cancellation.  Note that disc < 0 implies that r < 0.
+          u = u + 2 * r * cos(ang / 3)
+        end if
+* guaranteed positive
+        v = sqrt(u**2 + q)
+* Avoid loss of accuracy when u < 0.
+* u+v, guaranteed positive
+        uv = csmgt(q / (v - u), u + v, u .lt. 0)
+* positive?
+        w = (uv - q) / (2 * v)
+* Rearrange expression for k to avoid loss of accuracy due to
+* subtraction.  Division by 0 not possible because uv > 0, w >= 0.
+* guaranteed positive
+        k = uv / (sqrt(uv + w**2) + w)
+      else
+* q == 0 && r <= 0
+* y = 0 with |x| <= 1.  Handle this case directly.
+* for y small, positive root is k = abs(y)/sqrt(1-x^2)
+        k = 0
+      end if
+      Astrd = k
+
+      return
+      end
+
+      double precision function InvSta(sbet1, cbet1, dn1,
+     +    sbet2, cbet2, dn2, lam12, f, A3x,
+     +    salp1, calp1, salp2, calp2, dnm,
+     +    C1a, C2a)
+* Return a starting point for Newton's method in salp1 and calp1
+* (function value is -1).  If Newton's method doesn't need to be used,
+* return also salp2, calp2, and dnm and function value is sig12.
+* input
+      double precision sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12,
+     +    f, A3x(*)
+* output
+      double precision salp1, calp1, salp2, calp2, dnm
+* temporary
+      double precision C1a(*), C2a(*)
+
+      double precision csmgt, hypotx, A3f, Astrd
+      logical shortp
+      double precision f1, e2, ep2, n, etol2, k2, eps, sig12,
+     +    sbet12, cbet12, sbt12a, omg12, somg12, comg12, ssig12, csig12,
+     +    x, y, lamscl, betscl, cbt12a, bt12a, m12b, m0, dummy,
+     +    k, omg12a, sbetm2
+
+      double precision dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh
+      integer digits, maxit1, maxit2
+      logical init
+      common /geocom/ dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh, digits, maxit1, maxit2, init
+
+      f1 = 1 - f
+      e2 = f * (2 - f)
+      ep2 = e2 / (1 - e2)
+      n = f / (2 - f)
+* The sig12 threshold for "really short".  Using the auxiliary sphere
+* solution with dnm computed at (bet1 + bet2) / 2, the relative error in
+* the azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2.
+* (Error measured for 1/100 < b/a < 100 and abs(f) >= 1/1000.  For a
+* given f and sig12, the max error occurs for lines near the pole.  If
+* the old rule for computing dnm = (dn1 + dn2)/2 is used, then the error
+* increases by a factor of 2.)  Setting this equal to epsilon gives
+* sig12 = etol2.  Here 0.1 is a safety factor (error decreased by 100)
+* and max(0.001, abs(f)) stops etol2 getting too large in the nearly
+* spherical case.
+      etol2 = 0.1d0 * tol2 /
+     +    sqrt( max(0.001d0, abs(f)) * min(1d0, 1 - f/2) / 2 )
+
+* Return value
+      sig12 = -1
+* bet12 = bet2 - bet1 in [0, pi); bt12a = bet2 + bet1 in (-pi, 0]
+      sbet12 = sbet2 * cbet1 - cbet2 * sbet1
+      cbet12 = cbet2 * cbet1 + sbet2 * sbet1
+      sbt12a = sbet2 * cbet1 + cbet2 * sbet1
+
+      shortp = cbet12 .ge. 0 .and. sbet12 .lt. 0.5d0 .and.
+     +    cbet2 * lam12 .lt. 0.5d0
+
+      omg12 = lam12
+      if (shortp) then
+        sbetm2 = (sbet1 + sbet2)**2
+* sin((bet1+bet2)/2)^2
+*  =  (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2)
+        sbetm2 = sbetm2 / (sbetm2 + (cbet1 + cbet2)**2)
+        dnm = sqrt(1 + ep2 * sbetm2)
+        omg12 = omg12 / (f1 * dnm)
+      end if
+      somg12 = sin(omg12)
+      comg12 = cos(omg12)
+
+      salp1 = cbet2 * somg12
+      calp1 = csmgt(sbet12 + cbet2 * sbet1 * somg12**2 / (1 + comg12),
+     +    sbt12a - cbet2 * sbet1 * somg12**2 / (1 - comg12),
+     +    comg12 .ge. 0)
+
+      ssig12 = hypotx(salp1, calp1)
+      csig12 = sbet1 * sbet2 + cbet1 * cbet2 * comg12
+
+      if (shortp .and. ssig12 .lt. etol2) then
+* really short lines
+        salp2 = cbet1 * somg12
+        calp2 = sbet12 - cbet1 * sbet2 *
+     +      csmgt(somg12**2 / (1 + comg12), 1 - comg12, comg12 .ge. 0)
+        call Norm(salp2, calp2)
+* Set return value
+        sig12 = atan2(ssig12, csig12)
+      else if (abs(n) .gt. 0.1d0 .or. csig12 .ge. 0 .or.
+     +      ssig12 .ge. 6 * abs(n) * pi * cbet1**2) then
+* Nothing to do, zeroth order spherical approximation is OK
+        continue
+      else
+* Scale lam12 and bet2 to x, y coordinate system where antipodal point
+* is at origin and singular point is at y = 0, x = -1.
+        if (f .ge. 0) then
+* x = dlong, y = dlat
+          k2 = sbet1**2 * ep2
+          eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2)
+          lamscl = f * cbet1 * A3f(eps, A3x) * pi
+          betscl = lamscl * cbet1
+          x = (lam12 - pi) / lamscl
+          y = sbt12a / betscl
+        else
+* f < 0: x = dlat, y = dlong
+          cbt12a = cbet2 * cbet1 - sbet2 * sbet1
+          bt12a = atan2(sbt12a, cbt12a)
+* In the case of lon12 = 180, this repeats a calculation made in
+* Inverse.
+          call Lengs(n, pi + bt12a,
+     +        sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
+     +        cbet1, cbet2, dummy, m12b, m0, .false.,
+     +        dummy, dummy, ep2, C1a, C2a)
+          x = -1 + m12b / (cbet1 * cbet2 * m0 * pi)
+          betscl = csmgt(sbt12a / x, -f * cbet1**2 * pi,
+     +        x .lt. -0.01d0)
+          lamscl = betscl / cbet1
+          y = (lam12 - pi) / lamscl
+        end if
+
+        if (y .gt. -tol1 .and. x .gt. -1 - xthrsh) then
+* strip near cut
+          if (f .ge. 0) then
+            salp1 = min(1d0, -x)
+            calp1 = - sqrt(1 - salp1**2)
+          else
+            calp1 = max(csmgt(0d0, 1d0, x .gt. -tol1), x)
+            salp1 = sqrt(1 - calp1**2)
+          end if
+        else
+* Estimate alp1, by solving the astroid problem.
+*
+* Could estimate alpha1 = theta + pi/2, directly, i.e.,
+*   calp1 = y/k; salp1 = -x/(1+k);  for f >= 0
+*   calp1 = x/(1+k); salp1 = -y/k;  for f < 0 (need to check)
+*
+* However, it's better to estimate omg12 from astroid and use
+* spherical formula to compute alp1.  This reduces the mean number of
+* Newton iterations for astroid cases from 2.24 (min 0, max 6) to 2.12
+* (min 0 max 5).  The changes in the number of iterations are as
+* follows:
+*
+* change percent
+*    1       5
+*    0      78
+*   -1      16
+*   -2       0.6
+*   -3       0.04
+*   -4       0.002
+*
+* The histogram of iterations is (m = number of iterations estimating
+* alp1 directly, n = number of iterations estimating via omg12, total
+* number of trials = 148605):
+*
+*  iter    m      n
+*    0   148    186
+*    1 13046  13845
+*    2 93315 102225
+*    3 36189  32341
+*    4  5396      7
+*    5   455      1
+*    6    56      0
+*
+* Because omg12 is near pi, estimate work with omg12a = pi - omg12
+          k = Astrd(x, y)
+          omg12a = lamscl *
+     +        csmgt(-x * k/(1 + k), -y * (1 + k)/k, f .ge. 0)
+          somg12 = sin(omg12a)
+          comg12 = -cos(omg12a)
+* Update spherical estimate of alp1 using omg12 instead of lam12
+          salp1 = cbet2 * somg12
+          calp1 = sbt12a - cbet2 * sbet1 * somg12**2 / (1 - comg12)
+        end if
+      end if
+* Sanity check on starting guess
+      if (salp1 .gt. 0) then
+        call Norm(salp1, calp1)
+      else
+        salp1 = 1
+        calp1 = 0
+      end if
+      InvSta = sig12
+
+      return
+      end
+
+      double precision function Lam12f(sbet1, cbet1, dn1,
+     +    sbet2, cbet2, dn2, salp1, calp1, f, A3x, C3x, salp2, calp2,
+     +    sig12, ssig1, csig1, ssig2, csig2, eps, domg12, diffp, dlam12,
+     +    C1a, C2a, C3a)
+* input
+      double precision sbet1, cbet1, dn1, sbet2, cbet2, dn2,
+     +    salp1, calp1, f, A3x(*), C3x(*)
+      logical diffp
+* output
+      double precision salp2, calp2, sig12, ssig1, csig1, ssig2, csig2,
+     +    eps, domg12
+* optional output
+      double precision dlam12
+* temporary
+      double precision C1a(*), C2a(*), C3a(*)
+
+      integer ord, nC3
+      parameter (ord = 6, nC3 = ord)
+
+      double precision csmgt, hypotx, A3f, TrgSum
+
+      double precision f1, e2, ep2, salp0, calp0,
+     +    somg1, comg1, somg2, comg2, omg12, lam12, B312, h0, k2, dummy
+
+      double precision dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh
+      integer digits, maxit1, maxit2
+      logical init
+      common /geocom/ dblmin, dbleps, pi, degree, tiny,
+     +    tol0, tol1, tol2, tolb, xthrsh, digits, maxit1, maxit2, init
+
+      f1 = 1 - f
+      e2 = f * (2 - f)
+      ep2 = e2 / (1 - e2)
+* Break degeneracy of equatorial line.  This case has already been
+* handled.
+      if (sbet1 .eq. 0 .and. calp1 .eq. 0) calp1 = -tiny
+
+* sin(alp1) * cos(bet1) = sin(alp0)
+      salp0 = salp1 * cbet1
+* calp0 > 0
+      calp0 = hypotx(calp1, salp1 * sbet1)
+
+* tan(bet1) = tan(sig1) * cos(alp1)
+* tan(omg1) = sin(alp0) * tan(sig1) = tan(omg1)=tan(alp1)*sin(bet1)
+      ssig1 = sbet1
+      somg1 = salp0 * sbet1
+      csig1 = calp1 * cbet1
+      comg1 = csig1
+      call Norm(ssig1, csig1)
+* Norm(somg1, comg1); -- don't need to normalize!
+
+* Enforce symmetries in the case abs(bet2) = -bet1.  Need to be careful
+* about this case, since this can yield singularities in the Newton
+* iteration.
+* sin(alp2) * cos(bet2) = sin(alp0)
+      salp2 = csmgt(salp0 / cbet2, salp1, cbet2 .ne. cbet1)
+* calp2 = sqrt(1 - sq(salp2))
+*       = sqrt(sq(calp0) - sq(sbet2)) / cbet2
+* and subst for calp0 and rearrange to give (choose positive sqrt
+* to give alp2 in [0, pi/2]).
+      calp2 = csmgt(sqrt((calp1 * cbet1)**2 +
+     +    csmgt((cbet2 - cbet1) * (cbet1 + cbet2),
+     +    (sbet1 - sbet2) * (sbet1 + sbet2),
+     +    cbet1 .lt. -sbet1)) / cbet2,
+     +    abs(calp1), cbet2 .ne. cbet1 .or. abs(sbet2) .ne. -sbet1)
+* tan(bet2) = tan(sig2) * cos(alp2)
+* tan(omg2) = sin(alp0) * tan(sig2).
+      ssig2 = sbet2
+      somg2 = salp0 * sbet2
+      csig2 = calp2 * cbet2
+      comg2 = csig2
+      call Norm(ssig2, csig2)
+* Norm(somg2, comg2); -- don't need to normalize!
+
+* sig12 = sig2 - sig1, limit to [0, pi]
+      sig12 = atan2(max(csig1 * ssig2 - ssig1 * csig2, 0d0),
+     +    csig1 * csig2 + ssig1 * ssig2)
+
+* omg12 = omg2 - omg1, limit to [0, pi]
+      omg12 = atan2(max(comg1 * somg2 - somg1 * comg2, 0d0),
+     +    comg1 * comg2 + somg1 * somg2)
+      k2 = calp0**2 * ep2
+      eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2)
+      call C3f(eps, C3x, C3a)
+      B312 = (TrgSum(.true., ssig2, csig2, C3a, nC3-1) -
+     +    TrgSum(.true., ssig1, csig1, C3a, nC3-1))
+      h0 = -f * A3f(eps, A3x)
+      domg12 = salp0 * h0 * (sig12 + B312)
+      lam12 = omg12 + domg12
+
+      if (diffp) then
+        if (calp2 .eq. 0) then
+          dlam12 = - 2 * f1 * dn1 / sbet1
+        else
+          call Lengs(eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+     +        cbet1, cbet2, dummy, dlam12, dummy,
+     +        .false., dummy, dummy, ep2, C1a, C2a)
+          dlam12 = dlam12 * f1 / (calp2 * cbet2)
+        end if
+      end if
+      Lam12f = lam12
+
+      return
+      end
+
+      double precision function A3f(eps, A3x)
+* Evaluate sum(A3x[k] * eps^k, k, 0, nA3x-1) by Horner's method
+      integer ord, nA3, nA3x
+      parameter (ord = 6, nA3 = ord, nA3x = nA3)
+
+* input
+      double precision eps
+* output
+      double precision A3x(0: nA3x-1)
+
+      integer i
+      A3f = 0
+      do 10 i = nA3x-1, 0, -1
+        A3f = eps * A3f + A3x(i)
+ 10   continue
+
+      return
+      end
+
+      subroutine C3f(eps, C3x, c)
+* Evaluate C3 coeffs by Horner's method
+* Elements c[1] thru c[nC3-1] are set
+      integer ord, nC3, nC3x
+      parameter (ord = 6, nC3 = ord, nC3x = (nC3 * (nC3 - 1)) / 2)
+
+* input
+      double precision eps, C3x(0:nC3x-1)
+* output
+      double precision c(nC3-1)
+
+      integer i, j, k
+      double precision t, mult
+
+      j = nC3x
+      do 20 k = nC3-1, 1 , -1
+        t = 0
+        do 10 i = nC3 - k, 1, -1
+          j = j - 1
+          t = eps * t + C3x(j)
+ 10     continue
+        c(k) = t
+ 20   continue
+
+      mult = 1
+      do 30 k = 1, nC3-1
+        mult = mult * eps
+        c(k) = c(k) * mult
+ 30   continue
+
+      return
+      end
+
+      subroutine C4f(eps, C4x, c)
+* Evaluate C4 coeffs by Horner's method
+* Elements c[0] thru c[nC4-1] are set
+      integer ord, nC4, nC4x
+      parameter (ord = 6, nC4 = ord, nC4x = (nC4 * (nC4 + 1)) / 2)
+
+* input
+      double precision eps, C4x(0:nC4x-1)
+*output
+      double precision c(0:nC4-1)
+
+      integer i, j, k
+      double precision t, mult
+
+      j = nC4x
+      do 20 k = nC4-1, 0, -1
+         t = 0
+         do 10 i = nC4 - k, 1, -1
+            j = j - 1
+            t = eps * t + C4x(j)
+ 10      continue
+         c(k) = t
+ 20   continue
+
+      mult = 1
+      do 30 k = 1, nC4-1
+         mult = mult * eps
+         c(k) = c(k) * mult
+ 30   continue
+
+      return
+      end
+
+* Generated by Maxima on 2010-09-04 10:26:17-04:00
+
+      double precision function A1m1f(eps)
+* The scale factor A1-1 = mean value of (d/dsigma)I1 - 1
+* input
+      double precision eps
+
+      double precision eps2, t
+
+      eps2 = eps**2
+      t = eps2*(eps2*(eps2+4)+64)/256
+      A1m1f = (t + eps) / (1 - eps)
+
+      return
+      end
+
+      subroutine C1f(eps, c)
+* The coefficients C1[l] in the Fourier expansion of B1
+      integer ord, nC1
+      parameter (ord = 6, nC1 = ord)
+
+* input
+      double precision eps
+* output
+      double precision c(nC1)
+
+      double precision eps2, d
+
+      eps2 = eps**2
+      d = eps
+      c(1) = d*((6-eps2)*eps2-16)/32
+      d = d * eps
+      c(2) = d*((64-9*eps2)*eps2-128)/2048
+      d = d * eps
+      c(3) = d*(9*eps2-16)/768
+      d = d * eps
+      c(4) = d*(3*eps2-5)/512
+      d = d * eps
+      c(5) = -7*d/1280
+      d = d * eps
+      c(6) = -7*d/2048
+
+      return
+      end
+
+      subroutine C1pf(eps, c)
+* The coefficients C1p[l] in the Fourier expansion of B1p
+      integer ord, nC1p
+      parameter (ord = 6, nC1p = ord)
+
+* input
+      double precision eps
+* output
+      double precision c(nC1p)
+
+      double precision eps2, d
+
+      eps2 = eps**2
+      d = eps
+      c(1) = d*(eps2*(205*eps2-432)+768)/1536
+      d = d * eps
+      c(2) = d*(eps2*(4005*eps2-4736)+3840)/12288
+      d = d * eps
+      c(3) = d*(116-225*eps2)/384
+      d = d * eps
+      c(4) = d*(2695-7173*eps2)/7680
+      d = d * eps
+      c(5) = 3467*d/7680
+      d = d * eps
+      c(6) = 38081*d/61440
+
+      return
+      end
+
+* The scale factor A2-1 = mean value of (d/dsigma)I2 - 1
+      double precision function A2m1f(eps)
+* input
+      double precision eps
+
+      double precision eps2, t
+
+      eps2 = eps**2
+      t = eps2*(eps2*(25*eps2+36)+64)/256
+      A2m1f = t * (1 - eps) - eps
+
+      return
+      end
+
+      subroutine C2f(eps, c)
+* The coefficients C2[l] in the Fourier expansion of B2
+      integer ord, nC2
+      parameter (ord = 6, nC2 = ord)
+
+* input
+      double precision eps
+* output
+      double precision c(nC2)
+
+      double precision eps2, d
+
+      eps2 = eps**2
+      d = eps
+      c(1) = d*(eps2*(eps2+2)+16)/32
+      d = d * eps
+      c(2) = d*(eps2*(35*eps2+64)+384)/2048
+      d = d * eps
+      c(3) = d*(15*eps2+80)/768
+      d = d * eps
+      c(4) = d*(7*eps2+35)/512
+      d = d * eps
+      c(5) = 63*d/1280
+      d = d * eps
+      c(6) = 77*d/2048
+
+      return
+      end
+
+      subroutine A3cof(n, A3x)
+* The scale factor A3 = mean value of (d/dsigma)I3
+      integer ord, nA3, nA3x
+      parameter (ord = 6, nA3 = ord, nA3x = nA3)
+
+* input
+      double precision n
+* output
+      double precision A3x(0:nA3x-1)
+
+      A3x(0) = 1
+      A3x(1) = (n-1)/2
+      A3x(2) = (n*(3*n-1)-2)/8
+      A3x(3) = ((-n-3)*n-1)/16
+      A3x(4) = (-2*n-3)/64
+      A3x(5) = -3/128d0
+
+      return
+      end
+
+      subroutine C3cof(n, C3x)
+* The coefficients C3[l] in the Fourier expansion of B3
+      integer ord, nC3, nC3x
+      parameter (ord = 6, nC3 = ord, nC3x = (nC3 * (nC3 - 1)) / 2)
+
+* input
+      double precision n
+* output
+      double precision C3x(0:nC3x-1)
+
+      C3x(0) = (1-n)/4
+      C3x(1) = (1-n*n)/8
+      C3x(2) = ((3-n)*n+3)/64
+      C3x(3) = (2*n+5)/128
+      C3x(4) = 3/128d0
+      C3x(5) = ((n-3)*n+2)/32
+      C3x(6) = ((-3*n-2)*n+3)/64
+      C3x(7) = (n+3)/128
+      C3x(8) = 5/256d0
+      C3x(9) = (n*(5*n-9)+5)/192
+      C3x(10) = (9-10*n)/384
+      C3x(11) = 7/512d0
+      C3x(12) = (7-14*n)/512
+      C3x(13) = 7/512d0
+      C3x(14) = 21/2560d0
+
+      return
+      end
+
+* Generated by Maxima on 2012-10-19 08:02:34-04:00
+
+      subroutine C4cof(n, C4x)
+* The coefficients C4[l] in the Fourier expansion of I4
+      integer ord, nC4, nC4x
+      parameter (ord = 6, nC4 = ord, nC4x = (nC4 * (nC4 + 1)) / 2)
+
+* input
+      double precision n
+* output
+      double precision C4x(0:nC4x-1)
+
+      C4x(0) = (n*(n*(n*(n*(100*n+208)+572)+3432)-12012)+30030)/45045
+      C4x(1) = (n*(n*(n*(64*n+624)-4576)+6864)-3003)/15015
+      C4x(2) = (n*((14144-10656*n)*n-4576)-858)/45045
+      C4x(3) = ((-224*n-4784)*n+1573)/45045
+      C4x(4) = (1088*n+156)/45045
+      C4x(5) = 97/15015d0
+      C4x(6) = (n*(n*((-64*n-624)*n+4576)-6864)+3003)/135135
+      C4x(7) = (n*(n*(5952*n-11648)+9152)-2574)/135135
+      C4x(8) = (n*(5792*n+1040)-1287)/135135
+      C4x(9) = (468-2944*n)/135135
+      C4x(10) = 1/9009d0
+      C4x(11) = (n*((4160-1440*n)*n-4576)+1716)/225225
+      C4x(12) = ((4992-8448*n)*n-1144)/225225
+      C4x(13) = (1856*n-936)/225225
+      C4x(14) = 8/10725d0
+      C4x(15) = (n*(3584*n-3328)+1144)/315315
+      C4x(16) = (1024*n-208)/105105
+      C4x(17) = -136/63063d0
+      C4x(18) = (832-2560*n)/405405
+      C4x(19) = -128/135135d0
+      C4x(20) = 128/99099d0
+
+      return
+      end
+
+      double precision function sumx(u, v, t)
+* input
+      double precision u, v
+* output
+      double precision t
+
+      double precision up, vpp
+      sumx = u + v
+      up = sumx - v
+      vpp = sumx - up
+      up = up - u
+      vpp = vpp - v
+      t = -(up + vpp)
+
+      return
+      end
+
+      double precision function AngNm(x)
+* input
+      double precision x
+
+      if (x .ge. 180) then
+        AngNm = x - 360
+      else if (x .lt. -180) then
+        AngNm = x + 360
+      else
+        AngNm = x
+      end if
+
+      return
+      end
+
+      double precision function AngNm2(x)
+* input
+      double precision x
+
+      double precision AngNm
+      AngNm2 = mod(x, 360d0)
+      AngNm2 = AngNm(AngNm2)
+
+      return
+      end
+
+      double precision function AngDif(x, y)
+* Compute y - x.  x and y must both lie in [-180, 180].  The result is
+* equivalent to computing the difference exactly, reducing it to (-180,
+* 180] and rounding the result.  Note that this prescription allows -180
+* to be returned (e.g., if x is tiny and negative and y = 180).
+* input
+      double precision x, y
+
+      double precision d, t, sumx
+      d = sumx(-x, y, t)
+      if ((d - 180d0) + t .gt. 0d0) then
+        d = d - 360d0
+      else if ((d + 180d0) + t .le. 0d0) then
+        d = d + 360d0
+      end if
+      AngDif = d + t
+
+      return
+      end
+
+      double precision function AngRnd(x)
+* The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
+* for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
+* is about 1000 times more resolution than we get with angles around 90
+* degrees.)  We use this to avoid having to deal with near singular
+* cases when x is non-zero but tiny (e.g., 1.0e-200).
+* input
+      double precision x
+
+      double precision y, z
+      z = 1/16d0
+      y = abs(x)
+* The compiler mustn't "simplify" z - (z - y) to y
+      if (y .lt. z) y = z - (z - y)
+      AngRnd = sign(y, x)
+
+      return
+      end
+
+      subroutine swap(x, y)
+* input/output
+      double precision x, y
+
+      double precision z
+      z = x
+      x = y
+      y = z
+
+      return
+      end
+
+      double precision function hypotx(x, y)
+* input
+      double precision x, y
+
+      hypotx = sqrt(x**2 + y**2)
+
+      return
+      end
+
+      subroutine Norm(sinx, cosx)
+* input/output
+      double precision sinx, cosx
+
+      double precision hypotx, r
+      r = hypotx(sinx, cosx)
+      sinx = sinx/r
+      cosx = cosx/r
+
+      return
+      end
+
+      double precision function log1px(x)
+* input
+      double precision x
+
+      double precision csmgt, y, z
+      y = 1 + x
+      z = y - 1
+      log1px = csmgt(x, x * log(y) / z, z .eq. 0)
+
+      return
+      end
+
+      double precision function atanhx(x)
+* input
+      double precision x
+
+      double precision log1px, y
+      y = abs(x)
+      y = log1px(2 * y/(1 - y))/2
+      atanhx = sign(y, x)
+
+      return
+      end
+
+      double precision function cbrt(x)
+* input
+      double precision x
+
+      cbrt = sign(abs(x)**(1/3d0), x)
+
+      return
+      end
+
+      double precision function csmgt(x, y, p)
+* input
+      double precision x, y
+      logical p
+
+      if (p) then
+        csmgt = x
+      else
+        csmgt = y
+      end if
+
+      return
+      end
+
+      double precision function TrgSum(sinp, sinx, cosx, c, n)
+* Evaluate
+* y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :
+*            sum(c[i] * cos((2*i-1) * x), i, 1, n)
+* using Clenshaw summation.
+* Approx operation count = (n + 5) mult and (2 * n + 2) add
+* input
+      logical sinp
+      integer n
+      double precision sinx, cosx, c(n)
+
+      double precision ar, y0, y1
+      integer n2, k
+
+* 2 * cos(2 * x)
+      ar = 2 * (cosx - sinx) * (cosx + sinx)
+* accumulators for sum
+      if (mod(n, 2) .eq. 1) then
+        y0 = c(n)
+        n2 = n - 1
+      else
+        y0 = 0
+        n2 = n
+      end if
+      y1 = 0
+* Now n2 is even
+      do 10 k = n2, 1, -2
+* Unroll loop x 2, so accumulators return to their original role
+        y1 = ar * y0 - y1 + c(k)
+        y0 = ar * y1 - y0 + c(k-1)
+ 10   continue
+      if (sinp) then
+* sin(2 * x) * y0
+        TrgSum = 2 * sinx * cosx * y0
+      else
+* cos(x) * (y0 - y1)
+        TrgSum = cosx * (y0 - y1)
+      end if
+
+      return
+      end
+
+      integer function trnsit(lon1, lon2)
+* input
+      double precision lon1, lon2
+
+      double precision lon1x, lon2x, lon12, AngNm, AngDif
+      lon1x = AngNm(lon1)
+      lon2x = AngNm(lon2)
+      lon12 = AngDif(lon1x, lon2x)
+      trnsit = 0
+      if (lon1x .lt. 0 .and. lon2x .ge. 0 .and. lon12 .gt. 0) then
+        trnsit = 1
+      else if (lon2x .lt. 0 .and. lon1x .ge. 0 .and. lon12 .lt. 0) then
+        trnsit = -1
+      end if
+
+      return
+      end
+
+      subroutine accini(s)
+* Initialize an accumulator; this is an array with two elements.
+* input/output
+      double precision s(2)
+
+      s(1) = 0
+      s(2) = 0
+
+      return
+      end
+
+      subroutine accadd(s, y)
+* Add y to an accumulator.
+* input
+      double precision y
+* input/output
+      double precision s(2)
+
+      double precision z, u, sumx
+      z = sumx(y, s(2), u)
+      s(1) = sumx(z, s(1), s(2))
+      if (s(1) .eq. 0) then
+        s(1) = u
+      else
+        s(2) = s(2) + u
+      end if
+
+      return
+      end
+
+* Table of name abbreviations to conform to the 6-char limit
+*    A3coeff       A3cof
+*    C3coeff       C3cof
+*    C4coeff       C4cof
+*    AngNormalize  AngNm
+*    AngNormalize2 AngNm2
+*    AngDiff       AngDif
+*    AngRound      AngRnd
+*    arcmode       arcmod
+*    Astroid       Astrd
+*    betscale      betscl
+*    lamscale      lamscl
+*    cbet12a       cbt12a
+*    sbet12a       sbt12a
+*    epsilon       dbleps
+*    realmin       dblmin
+*    geodesic      geod
+*    inverse       invers
+*    InverseStart  InvSta
+*    Lambda12      Lam12f
+*    latsign       latsgn
+*    lonsign       lonsgn
+*    Lengths       Lengs
+*    meridian      merid
+*    outmask       omask
+*    shortline     shortp
+*    SinCosNorm    Norm
+*    SinCosSeries  TrgSum
+*    xthresh       xthrsh
+*    transit       trnsit
+*> @endcond SKIP
diff --git a/legacy/Fortran/geodesic.inc b/legacy/Fortran/geodesic.inc
new file mode 100644
index 0000000..9b68660
--- /dev/null
+++ b/legacy/Fortran/geodesic.inc
@@ -0,0 +1,35 @@
+*> @file geodesic.inc
+*! @brief The interface file for the geodesic routines in Fortran
+*!
+*! Optinally insert \code
+*! include 'geodesic.inc' \endcode
+*! into the declaration portion of a subroutine that uses this library.
+*!
+*! See geodesic.for for documentation on these routines.
+
+      interface
+
+        subroutine direct(a, f, lat1, lon1, azi1, s12a12, arcmod,
+     +      lat2, lon2, azi2, omask, a12s12, m12, MM12, MM21, SS12)
+        double precision, intent(in) :: a, f, lat1, lon1, azi1, s12a12
+        logical, intent(in) :: arcmod
+        integer, intent(in) :: omask
+        double precision, intent(out) :: lat2, lon2, azi2
+        double precision, intent(out) :: a12s12, m12, MM12, MM21, SS12
+        end subroutine direct
+
+        subroutine invers(a, f, lat1, lon1, lat2, lon2,
+     +      s12, azi1, azi2, omask, a12, m12, MM12, MM21, SS12)
+        double precision, intent(in) :: a, f, lat1, lon1, lat2, lon2
+        integer, intent(in) :: omask
+        double precision, intent(out) :: s12, azi1, azi2
+        double precision, intent(out) :: a12, m12, MM12, MM21, SS12
+        end subroutine invers
+
+        subroutine area(a, f, lats, lons, n, AA, PP)
+        integer, intent(in) :: n
+        double precision, intent(in) :: a, f, lats(n), lons(n)
+        double precision, intent(out) :: AA, PP
+        end subroutine area
+
+      end interface
diff --git a/legacy/Fortran/geodinverse.for b/legacy/Fortran/geodinverse.for
new file mode 100644
index 0000000..a9883b8
--- /dev/null
+++ b/legacy/Fortran/geodinverse.for
@@ -0,0 +1,33 @@
+*> @file geodinverse.for
+*! @brief A test program for invers()
+
+*> A simple program to solve the inverse geodesic problem.
+*!
+*! This program reads in lines with lat1, lon1, lon2, lat2 and prints
+*! out lines with azi1, azi2, s12 (for the WGS84 ellipsoid).
+
+      program geodinverse
+      implicit none
+
+      include 'geodesic.inc'
+
+      double precision a, f, lat1, lon1, azi1, lat2, lon2, azi2, s12,
+     +    dummy
+      integer omask
+
+* WGS84 values
+      a = 6378137d0
+      f = 1/298.257223563d0
+
+      omask = 0
+
+ 10   continue
+      read(*, *, end=90, err=90) lat1, lon1, lat2, lon2
+      call invers(a, f, lat1, lon1, lat2, lon2,
+     +    s12, azi1, azi2, omask, dummy, dummy, dummy, dummy, dummy)
+      print 20, azi1, azi2, s12
+ 20   format(f20.15, 1x, f20.15, 1x, f19.10)
+      go to 10
+ 90   continue
+      stop
+      end
diff --git a/legacy/Fortran/planimeter.for b/legacy/Fortran/planimeter.for
new file mode 100644
index 0000000..9c22a91
--- /dev/null
+++ b/legacy/Fortran/planimeter.for
@@ -0,0 +1,36 @@
+*> @file planimeter.for
+*! @brief A test program for area()
+
+*> A simple program to compute the area of a geodesic polygon.
+*!
+*! This program reads in up to 100000 lines with lat, lon for each vertex
+*! of a polygon.  At the end of input, the program prints the number of
+*! vertices, the perimeter of the polygon and its area (for the WGS84
+*! ellipsoid).
+
+      program planimeter
+      implicit none
+
+      include 'geodesic.inc'
+
+      integer maxpts
+      parameter (maxpts = 100000)
+      double precision a, f, lats(maxpts), lons(maxpts), S, P
+      integer n
+
+* WGS84 values
+      a = 6378137d0
+      f = 1/298.257223563d0
+
+      n = 0
+ 10   continue
+      if (n .ge. maxpts) go to 20
+      read(*, *, end=20, err=20) lats(n+1), lons(n+1)
+      n = n+1
+      go to 10
+ 20   continue
+      call area(a, f, lats, lons, n, S, P)
+      print 30, n, P, S
+ 30   format(i6, 1x, f20.8, 1x, f20.3)
+      stop
+      end
diff --git a/ltmain.sh b/ltmain.sh
old mode 100755
new mode 100644
index 78cf017..63ae69d
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,9 +1,9 @@
 
-# libtool (GNU libtool) 2.4
+# libtool (GNU libtool) 2.4.2
 # Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -41,6 +41,7 @@
 #       --quiet, --silent    don't print informational messages
 #       --no-quiet, --no-silent
 #                            print informational messages (default)
+#       --no-warn            don't display warning messages
 #       --tag=TAG            use configuration variables from tag TAG
 #   -v, --verbose            print more informational messages than default
 #       --no-verbose         don't print the extra informational messages
@@ -69,7 +70,7 @@
 #         compiler:		$LTCC
 #         compiler flags:		$LTCFLAGS
 #         linker:		$LD (gnu? $with_gnu_ld)
-#         $progname:	(GNU libtool) 2.4
+#         $progname:	(GNU libtool) 2.4.2
 #         automake:	$automake_version
 #         autoconf:	$autoconf_version
 #
@@ -79,9 +80,9 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION=2.4
+VERSION=2.4.2
 TIMESTAMP=""
-package_revision=1.3293
+package_revision=1.3337
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -136,15 +137,10 @@ progpath="$0"
 
 : ${CP="cp -f"}
 test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
-: ${EGREP="/bin/grep -E"}
-: ${FGREP="/bin/grep -F"}
-: ${GREP="/bin/grep"}
-: ${LN_S="ln -s"}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
-: ${SED="/bin/sed"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 : ${Xsed="$SED -e 1s/^X//"}
 
@@ -387,7 +383,7 @@ case $progpath in
      ;;
   *)
      save_IFS="$IFS"
-     IFS=:
+     IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
        IFS="$save_IFS"
        test -x "$progdir/$progname" && break
@@ -771,8 +767,8 @@ func_help ()
 	s*\$LTCFLAGS*'"$LTCFLAGS"'*
 	s*\$LD*'"$LD"'*
 	s/\$with_gnu_ld/'"$with_gnu_ld"'/
-	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
-	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
 	p
 	d
      }
@@ -1052,6 +1048,7 @@ opt_finish=false
 opt_help=false
 opt_help_all=false
 opt_silent=:
+opt_warning=:
 opt_verbose=:
 opt_silent=false
 opt_verbose=false
@@ -1120,6 +1117,10 @@ esac
 			opt_silent=false
 func_append preserve_args " $opt"
 			;;
+      --no-warning|--no-warn)
+			opt_warning=false
+func_append preserve_args " $opt"
+			;;
       --no-verbose)
 			opt_verbose=false
 func_append preserve_args " $opt"
@@ -2059,7 +2060,7 @@ func_mode_compile ()
     *.[cCFSifmso] | \
     *.ada | *.adb | *.ads | *.asm | \
     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
       func_xform "$libobj"
       libobj=$func_xform_result
       ;;
@@ -3201,11 +3202,13 @@ func_mode_install ()
 
       # Set up the ranlib parameters.
       oldlib="$destdir/$name"
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
 
       func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
 
       if test -n "$stripme" && test -n "$old_striplib"; then
-	func_show_eval "$old_striplib $oldlib" 'exit $?'
+	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
       fi
 
       # Do each command in the postinstall commands.
@@ -3470,7 +3473,7 @@ static const void *lt_preloaded_setup() {
 	  # linked before any other PIC object.  But we must not use
 	  # pic_flag when linking with -static.  The problem exists in
 	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
 	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
 	  *-*-hpux*)
 	    pic_flag_for_symtable=" $pic_flag"  ;;
@@ -3982,14 +3985,17 @@ func_exec_program_core ()
 # launches target application with the remaining arguments.
 func_exec_program ()
 {
-  for lt_wr_arg
-  do
-    case \$lt_wr_arg in
-    --lt-*) ;;
-    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
-    esac
-    shift
-  done
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
   func_exec_program_core \${1+\"\$@\"}
 }
 
@@ -5057,9 +5063,15 @@ void lt_dump_script (FILE* f)
 {
 EOF
 	    func_emit_wrapper yes |
-              $SED -e 's/\([\\"]\)/\\\1/g' \
-	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
-
+	      $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
             cat <<"EOF"
 }
 EOF
@@ -5643,7 +5655,8 @@ func_mode_link ()
 	continue
 	;;
 
-      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
 	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
@@ -6147,7 +6160,8 @@ func_mode_link ()
 	lib=
 	found=no
 	case $deplib in
-	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
 	  if test "$linkmode,$pass" = "prog,link"; then
 	    compile_deplibs="$deplib $compile_deplibs"
 	    finalize_deplibs="$deplib $finalize_deplibs"
@@ -6831,7 +6845,7 @@ func_mode_link ()
 	         test "$hardcode_direct_absolute" = no; then
 		add="$dir/$linklib"
 	      elif test "$hardcode_minus_L" = yes; then
-		add_dir="-L$dir"
+		add_dir="-L$absdir"
 		# Try looking first in the location we're being installed to.
 		if test -n "$inst_prefix_dir"; then
 		  case $libdir in
@@ -7316,6 +7330,7 @@ func_mode_link ()
 	  # which has an extra 1 added just for fun
 	  #
 	  case $version_type in
+	  # correct linux to gnu/linux during the next big refactor
 	  darwin|linux|osf|windows|none)
 	    func_arith $number_major + $number_minor
 	    current=$func_arith_result
@@ -7432,7 +7447,7 @@ func_mode_link ()
 	  versuffix="$major.$revision"
 	  ;;
 
-	linux)
+	linux) # correct to gnu/linux during the next big refactor
 	  func_arith $current - $age
 	  major=.$func_arith_result
 	  versuffix="$major.$age.$revision"
@@ -8020,6 +8035,11 @@ EOF
 
       # Test again, we may have decided not to build it any more
       if test "$build_libtool_libs" = yes; then
+	# Remove ${wl} instances when linking with ld.
+	# FIXME: should test the right _cmds variable.
+	case $archive_cmds in
+	  *\$LD\ *) wl= ;;
+        esac
 	if test "$hardcode_into_libs" = yes; then
 	  # Hardcode the library paths
 	  hardcode_libdirs=
@@ -8058,11 +8078,7 @@ EOF
 	  if test -n "$hardcode_libdir_separator" &&
 	     test -n "$hardcode_libdirs"; then
 	    libdir="$hardcode_libdirs"
-	    if test -n "$hardcode_libdir_flag_spec_ld"; then
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-	    else
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-	    fi
+	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
 	  fi
 	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
 	    # We should set the runpath_var.
@@ -9152,6 +9168,8 @@ EOF
 	    esac
 	  done
 	fi
+	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+	tool_oldlib=$func_to_tool_file_result
 	eval cmds=\"$old_archive_cmds\"
 
 	func_len " $cmds"
@@ -9261,7 +9279,8 @@ EOF
 	      *.la)
 		func_basename "$deplib"
 		name="$func_basename_result"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		func_resolve_sysroot "$deplib"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$deplib' is not a valid libtool archive"
 		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 88de383..56666f0 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1,8 +1,8 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-#                 Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -11,8 +11,8 @@
 
 m4_define([_LT_COPYING], [dnl
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-#                 Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -146,6 +146,8 @@ AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
 AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
 
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
 _LT_DECL([], [host_alias], [0], [The host system])dnl
 _LT_DECL([], [host], [0])dnl
 _LT_DECL([], [host_os], [0])dnl
@@ -637,7 +639,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
 m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
 configured by $[0], generated by m4_PACKAGE_STRING.
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2011 Free Software Foundation, Inc.
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
@@ -801,6 +803,7 @@ AC_DEFUN([LT_LANG],
 m4_case([$1],
   [C],			[_LT_LANG(C)],
   [C++],		[_LT_LANG(CXX)],
+  [Go],			[_LT_LANG(GO)],
   [Java],		[_LT_LANG(GCJ)],
   [Fortran 77],		[_LT_LANG(F77)],
   [Fortran],		[_LT_LANG(FC)],
@@ -822,6 +825,31 @@ m4_defun([_LT_LANG],
 ])# _LT_LANG
 
 
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
 # _LT_LANG_DEFAULT_CONFIG
 # -----------------------
 m4_defun([_LT_LANG_DEFAULT_CONFIG],
@@ -852,6 +880,10 @@ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
        m4_ifdef([LT_PROG_GCJ],
 	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
 
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
 AC_PROVIDE_IFELSE([LT_PROG_RC],
   [LT_LANG(RC)],
   [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
@@ -954,7 +986,13 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -962,6 +1000,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	rm -rf libconftest.dylib*
 	rm -f conftest.*
       fi])
+
     AC_CACHE_CHECK([for -exported_symbols_list linker flag],
       [lt_cv_ld_exported_symbols_list],
       [lt_cv_ld_exported_symbols_list=no
@@ -973,6 +1012,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	[lt_cv_ld_exported_symbols_list=no])
 	LDFLAGS="$save_LDFLAGS"
     ])
+
     AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
       [lt_cv_ld_force_load=no
       cat > conftest.c << _LT_EOF
@@ -990,7 +1030,9 @@ _LT_EOF
       echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
       $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
       _lt_result=$?
-      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
 	lt_cv_ld_force_load=yes
       else
 	cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1035,8 +1077,8 @@ _LT_EOF
 ])
 
 
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
 # Checks for linker and compiler features on darwin
 m4_defun([_LT_DARWIN_LINKER_FEATURES],
 [
@@ -1047,6 +1089,8 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
   if test "$lt_cv_ld_force_load" = "yes"; then
     _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
   else
     _LT_TAGVAR(whole_archive_flag_spec, $1)=''
   fi
@@ -1330,14 +1374,27 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
 	  LD="${LD-ld} -64"
@@ -1414,13 +1471,13 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
 
 case $host_os in
@@ -1600,6 +1657,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -1639,7 +1701,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
 	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
@@ -2185,7 +2247,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -2194,7 +2256,7 @@ aix3*)
   ;;
 
 aix[[4-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -2259,7 +2321,7 @@ beos*)
   ;;
 
 bsdi[[45]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -2398,7 +2460,7 @@ m4_if([$1], [],[
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -2406,10 +2468,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -2417,7 +2475,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
+    freebsd[[23]].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -2435,7 +2493,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[[01]]* | freebsdelf3.[[01]]*)
@@ -2455,17 +2513,18 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   ;;
 
 haiku*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
@@ -2526,7 +2585,7 @@ hpux9* | hpux10* | hpux11*)
   ;;
 
 interix[[3-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -2542,7 +2601,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -2579,9 +2638,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2648,7 +2707,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -2717,7 +2776,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2742,7 +2801,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -2766,7 +2825,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -2797,7 +2856,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2807,7 +2866,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -3229,7 +3288,7 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -3649,6 +3708,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK ['"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -4233,7 +4293,9 @@ m4_if([$1], [CXX], [
     case $cc_basename in
     nvcc*) # Cuda Compiler Driver 2.2
       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
       ;;
     esac
   else
@@ -4325,18 +4387,33 @@ m4_if([$1], [CXX], [
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ F* | *Sun*Fortran*)
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
 	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
 	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	  ;;
 	*Sun\ C*)
 	  # Sun C 5.9
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	  ;;
+        *Intel*\ [[CF]]*Compiler*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	  ;;
+	*Portland\ Group*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  ;;
 	esac
 	;;
       esac
@@ -4496,7 +4573,9 @@ m4_if([$1], [CXX], [
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
-    cl*) ;;
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
     *)
       _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
       _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
@@ -4521,7 +4600,6 @@ m4_if([$1], [CXX], [
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_direct_absolute, $1)=no
   _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
   _LT_TAGVAR(hardcode_libdir_separator, $1)=
   _LT_TAGVAR(hardcode_minus_L, $1)=no
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -4772,8 +4850,7 @@ _LT_EOF
 	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
@@ -5068,6 +5145,7 @@ _LT_EOF
 	# The linker will not automatically build a static lib if we build a DLL.
 	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
 	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
 	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
 	# Don't use ranlib
 	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
@@ -5114,10 +5192,6 @@ _LT_EOF
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
 
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -5130,7 +5204,7 @@ _LT_EOF
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       _LT_TAGVAR(hardcode_direct, $1)=yes
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
@@ -5169,7 +5243,6 @@ _LT_EOF
       fi
       if test "$with_gnu_ld" = no; then
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
 	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
 	_LT_TAGVAR(hardcode_direct, $1)=yes
 	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
@@ -5611,9 +5684,6 @@ _LT_TAGDECL([], [no_undefined_flag], [1],
 _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
     [Flag to hardcode $libdir into a binary during linking.
     This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
 _LT_TAGDECL([], [hardcode_libdir_separator], [1],
     [Whether we need a single "-rpath" flag with a separated argument])
 _LT_TAGDECL([], [hardcode_direct], [0],
@@ -5771,7 +5841,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -6141,7 +6210,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         esac
         ;;
 
-      freebsd[[12]]*)
+      freebsd2.*)
         # C++ shared libraries reported to be fairly broken before
 	# switch to ELF
         _LT_TAGVAR(ld_shlibs, $1)=no
@@ -6902,12 +6971,18 @@ public class foo {
   }
 };
 _LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
 ])
 
 _lt_libdeps_save_CFLAGS=$CFLAGS
 case "$CC $CFLAGS " in #(
 *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
 *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
 esac
 
 dnl Parse the compiler output and extract the necessary
@@ -7104,7 +7179,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -7237,7 +7311,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -7424,6 +7497,77 @@ CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_GCJ_CONFIG
 
 
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
 # _LT_LANG_RC_CONFIG([TAG])
 # -------------------------
 # Ensure that the configuration variables for the Windows resource compiler
@@ -7493,6 +7637,13 @@ dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
 
 
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
 # LT_PROG_RC
 # ----------
 AC_DEFUN([LT_PROG_RC],
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
index 17cfd51..5d9acd8 100644
--- a/m4/ltoptions.m4
+++ b/m4/ltoptions.m4
@@ -326,9 +326,24 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 # MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
 m4_define([_LT_WITH_PIC],
 [AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
 	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
     [pic_mode=default])
 
 test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
index 9c7b5d4..07a8602 100644
--- a/m4/ltversion.m4
+++ b/m4/ltversion.m4
@@ -9,15 +9,15 @@
 
 # @configure_input@
 
-# serial 3293 ltversion.m4
+# serial 3337 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.4])
-m4_define([LT_PACKAGE_REVISION], [1.3293])
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4'
-macro_revision='1.3293'
+[macro_version='2.4.2'
+macro_revision='1.3337'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt
index 17e0ee2..d8af129 100644
--- a/man/CMakeLists.txt
+++ b/man/CMakeLists.txt
@@ -1,5 +1,3 @@
-# $Id: c8cbcc51270dab8273fb82cf8944118b40cea1fa $
-
 # The man pages are maintained as .pod (plain old documentatoin) files.
 # In maintainer mode, there are used to create real man pages (extension
 # .1), usage files (extension .usage) for including in the tool itself,
@@ -12,9 +10,6 @@
 if (MAINTAINER)
   add_custom_target (distrib-man)
   add_custom_target (man ALL)
-  set (MANDIR ${CMAKE_CURRENT_BINARY_DIR})
-else ()
-  set (MANDIR ${CMAKE_CURRENT_SOURCE_DIR})
 endif ()
 
 set (MANPAGES)
@@ -27,13 +22,13 @@ set (HTMLMAN)
 # cross-referencing between the tools.  The .usage files are generated
 # by a shell script makeusage.sh.
 foreach (TOOL ${TOOLS})
-  set (MANPAGES ${MANPAGES} ${MANDIR}/${TOOL}.1)
-  set (USAGE ${USAGE} ${MANDIR}/${TOOL}.usage)
-  set (HTMLMAN ${HTMLMAN} ${MANDIR}/${TOOL}.1.html)
+  set (MANPAGES ${MANPAGES} ${CMAKE_CURRENT_BINARY_DIR}/${TOOL}.1)
+  set (USAGE ${USAGE} ${CMAKE_CURRENT_BINARY_DIR}/${TOOL}.usage)
+  set (HTMLMAN ${HTMLMAN} ${CMAKE_CURRENT_BINARY_DIR}/${TOOL}.1.html)
   if (MAINTAINER)
     add_custom_command (OUTPUT ${TOOL}.1
       COMMAND pod2man --center=\"GeographicLib Utilities\"
-        --release=\"GeographicLib ${GeographicLib_VERSION}\"
+        --release=\"GeographicLib ${PROJECT_VERSION}\"
         ${CMAKE_CURRENT_SOURCE_DIR}/${TOOL}.pod > ${TOOL}.1
       COMMENT "Building man page for ${TOOL}"
       MAIN_DEPENDENCY ${TOOL}.pod)
@@ -41,14 +36,36 @@ foreach (TOOL ${TOOLS})
       COMMAND
         pod2html --noindex ${CMAKE_CURRENT_SOURCE_DIR}/${TOOL}.pod |
         sed -e 's%<head>%<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">%'
-          -e 's%<code>\\\([^<>]*\\\)\(\\\(.\\\)\)</code>%<a href="\\1.\\2.html">&</a>%'g > ${TOOL}.1.html
+          -e 's%<code>\\\([^<>]*\\\)\(\\\(.\\\)\)</code>%<a href="\\1.\\2.html">&</a>%'g > ${TOOL}.1.html &&
+        cp ${TOOL}.1.html ../doc/html-stage/
       COMMENT "Building html version of man page for ${TOOL}"
       MAIN_DEPENDENCY ${TOOL}.pod)
     add_custom_command (OUTPUT ${TOOL}.usage
       COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/makeusage.sh
-        ${CMAKE_CURRENT_SOURCE_DIR}/${TOOL}.pod > ${TOOL}.usage
+        ${CMAKE_CURRENT_SOURCE_DIR}/${TOOL}.pod ${PROJECT_VERSION}
+        > ${TOOL}.usage
       COMMENT "Building usage code for ${TOOL}"
       MAIN_DEPENDENCY ${TOOL}.pod)
+  else ()
+    if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TOOL}.usage)
+      file (COPY ${TOOL}.usage DESTINATION .)
+    else ()
+      configure_file (dummy.usage.in ${TOOL}.usage @ONLY)
+    endif ()
+    if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TOOL}.1)
+      file (COPY ${TOOL}.1 DESTINATION .)
+    else ()
+      configure_file (dummy.1.in ${TOOL}.1 @ONLY)
+    endif ()
+    if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TOOL}.1.html)
+      file (COPY ${TOOL}.1.html DESTINATION .)
+    else ()
+      configure_file (dummy.1.html.in ${TOOL}.1.html @ONLY)
+    endif ()
+    if (DOXYGEN_FOUND)
+      file (COPY ${CMAKE_CURRENT_BINARY_DIR}/${TOOL}.1.html
+        DESTINATION ../doc/html-stage)
+    endif ()
   endif ()
 endforeach ()
 
@@ -67,7 +84,8 @@ if (MAINTAINER)
   add_custom_command (TARGET distrib-man
     COMMAND
       for f in ${MANPAGES} ${USAGE} ${HTMLMAN}\; do
-        cmp "$$f" ${CMAKE_CURRENT_SOURCE_DIR}/`basename "$$f"` >/dev/null 2>&1||
+        cmp "$$f" ${CMAKE_CURRENT_SOURCE_DIR}/`basename "$$f" `
+        >/dev/null 2>&1 ||
         install -m 644 "$$f" ${CMAKE_CURRENT_SOURCE_DIR}\; done
     COMMENT "Installing man documentation page in source tree")
 endif ()
diff --git a/man/CartConvert.1 b/man/CartConvert.1
index 74f4c24..02dfbfa 100644
--- a/man/CartConvert.1
+++ b/man/CartConvert.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "CARTCONVERT 1"
-.TH CARTCONVERT 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
+.TH CARTCONVERT 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/man/CartConvert.1.html b/man/CartConvert.1.html
index a10e55c..38dcd6a 100644
--- a/man/CartConvert.1.html
+++ b/man/CartConvert.1.html
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>CartConvert -- convert geodetic coordinates to geocentric or local cartesian</title>
+<title></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rev="made" href="mailto:root at localhost" />
 </head>
@@ -10,174 +10,115 @@
 <body style="background-color: white">
 
 
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
 
-<ul>
+<h1 id="NAME">NAME</h1>
 
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
+<p>CartConvert -- convert geodetic coordinates to geocentric or local cartesian</p>
 
--->
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
 
+<p><b>CartConvert</b> [ <b>-r</b> ] [ <b>-l</b> <i>lat0</i> <i>lon0</i> <i>h0</i> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
-</div>
-<!-- INDEX END -->
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>Convert geodetic coordinates to either geocentric or local cartesian coordinates. Geocentric coordinates have the origin at the center of the earth, with the <i>z</i> axis going thru the north pole, and the <i>x</i> axis thru <i>latitude</i> = 0, <i>longitude</i> = 0. By default, the conversion is to geocentric coordinates. Specifying <b>-l</b> <i>lat0</i> <i>lon0</i> <i>h0</i> causes a local coordinate system to be used with the origin at <i>latitude</i> = <i>lat0</i>, <i>longitude</ [...]
+
+<p>Geodetic coordinates are provided on standard input as a set of lines containing (blank separated) <i>latitude</i>, <i>longitude</i> (decimal degrees or degrees, minutes and seconds), and <i>height</i> above the ellipsoid (meters). For each set of geodetic coordinates, the corresponding cartesian coordinates <i>x</i>, <i>y</i>, <i>z</i> (meters) are printed on standard output.</p>
+
+<h1 id="OPTIONS">OPTIONS</h1>
 
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>CartConvert -- convert geodetic coordinates to geocentric or local cartesian</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>CartConvert</strong> [ <strong>-r</strong> ] [ <strong>-l</strong> <em>lat0</em> <em>lon0</em> <em>h0</em> ] [ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Convert geodetic coordinates to either geocentric or local cartesian
-coordinates.  Geocentric coordinates have the origin at the center of
-the earth, with the <em>z</em> axis going thru the north pole, and the <em>x</em>
-axis thru <em>latitude</em> = 0, <em>longitude</em> = 0.  By default, the
-conversion is to geocentric coordinates.  Specifying <strong>-l</strong> <em>lat0</em>
-<em>lon0</em> <em>h0</em> causes a local coordinate system to be used with the
-origin at <em>latitude</em> = <em>lat0</em>, <em>longitude</em> = <em>lon0</em>, <em>height</em> =
-<em>h0</em>, <em>z</em> normal to the ellipsoid and <em>y</em> due north.</p>
-<p>Geodetic coordinates are provided on standard input as a set of lines
-containing (blank separated) <em>latitude</em>, <em>longitude</em> (decimal degrees
-or degrees, minutes and seconds), and <em>height</em> above the ellipsoid
-(meters).  For each set of geodetic coordinates, the corresponding
-cartesian coordinates <em>x</em>, <em>y</em>, <em>z</em> (meters) are printed on standard
-output.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
 <dl>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
 
+<dt id="r"><b>-r</b></dt>
 <dd>
-<p>perform the reverse projection.  <em>x</em>, <em>y</em>, <em>z</em> are given on standard
-input and each line of standard output gives <em>latitude</em>, <em>longitude</em>,
-<em>height</em>.</p>
-</dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
 
-<dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
+<p>perform the reverse projection. <i>x</i>, <i>y</i>, <i>z</i> are given on standard input and each line of standard output gives <i>latitude</i>, <i>longitude</i>, <i>height</i>.</p>
 
+</dd>
+<dt id="e"><b>-e</b></dt>
 <dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
+
+<p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563.</p>
+
 </dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
 
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
+
+</dd>
+<dt id="version"><b>--version</b></dt>
 <dd>
+
 <p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
 
+</dd>
+<dt id="h"><b>-h</b></dt>
 <dd>
+
 <p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
 
+</dd>
+<dt id="help"><b>--help</b></dt>
 <dd>
+
 <p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
 
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
 </dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
+<dt id="input-file"><b>--input-file</b></dt>
 <dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
 
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
 <dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
 </dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
 
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
+
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
 <dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 33.3 44.4 6000 | CartConvert
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
+<pre><code>   echo 33.3 44.4 6000 | CartConvert
    => 3816209.60 3737108.55 3485109.57
    echo 33.3 44.4 6000 | CartConvert -l 33 44 20
    => 37288.97 33374.29 5783.64
    echo 30000 30000 0 | CartConvert -r
-   => 6.483 45 -6335709.73</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>CartConvert</strong> to return an exit
-code of 1.  However, an error does not cause <strong>CartConvert</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The algorithm for converting geocentric to geodetic coordinates is given
-in Appendix B of C. F. F. Karney, <em>Geodesics on an ellipsoid of
-revolution</em>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215">http://arxiv.org/abs/1102.1215</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>CartConvert</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>CartConvert</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-02.  Prior to 2009-03 it was
-called ECEFConvert.</p>
+   => 6.483 45 -6335709.73</code></pre>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>CartConvert</b> to return an exit code of 1. However, an error does not cause <b>CartConvert</b> to terminate; following lines will be converted.</p>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>The algorithm for converting geocentric to geodetic coordinates is given in Appendix B of C. F. F. Karney, <i>Geodesics on an ellipsoid of revolution</i>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215">http://arxiv.org/abs/1102.1215</a>.</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>CartConvert</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>CartConvert</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-02. Prior to 2009-03 it was called ECEFConvert.</p>
+
 
 </body>
 
 </html>
+
+
diff --git a/man/CartConvert.pod b/man/CartConvert.pod
index f65c4f9..d68f42a 100644
--- a/man/CartConvert.pod
+++ b/man/CartConvert.pod
@@ -1,5 +1,3 @@
-=for comment $Id: f3d0184303d2278f369eeb6f8fae2726c6bbfaf4 $
-
 =head1 NAME
 
 CartConvert -- convert geodetic coordinates to geocentric or local cartesian
diff --git a/man/CartConvert.usage b/man/CartConvert.usage
index 3eba161..f9f6f05 100644
--- a/man/CartConvert.usage
+++ b/man/CartConvert.usage
@@ -9,7 +9,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    CartConvert --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/html/CartConvert.1.html\n";
+"    http://geographiclib.sf.net/1.34/CartConvert.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -109,5 +109,5 @@ int usage(int retval, bool brief) {
 "       CartConvert was added to GeographicLib, <http://geographiclib.sf.net>,\n"
 "       in 2009-02.  Prior to 2009-03 it was called ECEFConvert.\n"
 ;
-    return retval;
+  return retval;
 }
diff --git a/man/ConicProj.1 b/man/ConicProj.1
index 6544a0b..85f65f9 100644
--- a/man/ConicProj.1
+++ b/man/ConicProj.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "CONICPROJ 1"
-.TH CONICPROJ 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
+.TH CONICPROJ 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/man/ConicProj.1.html b/man/ConicProj.1.html
index 056a59f..e4af0e6 100644
--- a/man/ConicProj.1.html
+++ b/man/ConicProj.1.html
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>ConicProj -- perform conic projections</title>
+<title></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rev="made" href="mailto:root at localhost" />
 </head>
@@ -10,200 +10,135 @@
 <body style="background-color: white">
 
 
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
 
-<ul>
+<h1 id="NAME">NAME</h1>
 
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
+<p>ConicProj -- perform conic projections</p>
 
--->
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
 
+<p><b>ConicProj</b> ( <b>-c</b> | <b>-a</b> ) <i>lat1</i> <i>lat2</i> [ <b>-l</b> <i>lon0</i> ] [ <b>-k</b> <i>k1</i> ] [ <b>-r</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
-</div>
-<!-- INDEX END -->
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>Perform one of two conic projections geodesics. Convert geodetic coordinates to either Lambert conformal conic or Albers equal area coordinates. The standard latitudes <i>lat1</i> and <i>lat2</i> are specified by that the <b>-c</b> option (for Lambert conformal conic) or the <b>-a</b> option (for Albers equal area). At least one of these options must be given (the last one given is used). Specify <i>lat1</i> = <i>lat2</i>, to obtain the case with a single standard parallel. The centra [...]
+
+<p>Geodetic coordinates are provided on standard input as a set of lines containing (blank separated) <i>latitude</i> and <i>longitude</i> (decimal degrees or degrees, minutes, seconds). For each set of geodetic coordinates, the corresponding projected easting, <i>x</i>, and northing, <i>y</i>, (meters) are printed on standard output together with the meridian convergence <i>gamma</i> (degrees) and (azimuthal) scale <i>k</i>. For Albers equal area, the radial scale is 1/<i>k</i>. The mer [...]
+
+<p>Special cases of the Lambert conformal projection are the Mercator projection (the standard latitudes equal and opposite) and the polar stereographic projection (both standard latitudes correspond to the same pole). Special cases of the Albers equal area projection are the cylindrical equal area projection (the standard latitudes equal and opposite), the Lambert azimuthal equal area projection (both standard latitude corresponds to the same pole), and the Lambert equal area conic proj [...]
+
+<h1 id="OPTIONS">OPTIONS</h1>
 
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>ConicProj -- perform conic projections</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>ConicProj</strong> ( <strong>-c</strong> | <strong>-a</strong> ) <em>lat1</em> <em>lat2</em>
-[ <strong>-l</strong> <em>lon0</em> ] [ <strong>-k</strong> <em>k1</em> ] [ <strong>-r</strong> ]
-[ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Perform one of two conic projections geodesics.  Convert geodetic
-coordinates to either Lambert conformal conic or Albers equal area
-coordinates.  The standard latitudes <em>lat1</em> and <em>lat2</em> are specified
-by that the <strong>-c</strong> option (for Lambert conformal conic) or the <strong>-a</strong>
-option (for Albers equal area).  At least one of these options must be
-given (the last one given is used).  Specify <em>lat1</em> = <em>lat2</em>, to
-obtain the case with a single standard parallel.  The central meridian
-is given by <em>lon0</em>.  The longitude of origin is given by the latitude
-of minimum (azimuthal) scale for Lambert conformal conic (Albers equal
-area).  The (azimuthal) scale on the standard parallels is <em>k1</em>.</p>
-<p>Geodetic coordinates are provided on standard input as a set of lines
-containing (blank separated) <em>latitude</em> and <em>longitude</em> (decimal
-degrees or degrees, minutes, seconds).  For each set of geodetic
-coordinates, the corresponding projected easting, <em>x</em>, and northing,
-<em>y</em>, (meters) are printed on standard output together with the meridian
-convergence <em>gamma</em> (degrees) and (azimuthal) scale <em>k</em>.  For Albers
-equal area, the radial scale is 1/<em>k</em>.  The meridian convergence is the
-bearing of the <em>y</em> axis measured clockwise from true north.</p>
-<p>Special cases of the Lambert conformal projection are the Mercator
-projection (the standard latitudes equal and opposite) and the polar
-stereographic projection (both standard latitudes correspond to the same
-pole).  Special cases of the Albers equal area projection are the
-cylindrical equal area projection (the standard latitudes equal and
-opposite), the Lambert azimuthal equal area projection (both standard
-latitude corresponds to the same pole), and the Lambert equal area conic
-projection (one standard parallel is at a pole).</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
 <dl>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
 
+<dt id="c"><b>-c</b></dt>
 <dd>
-<p>use the Lambert conformal conic projection with standard parallels
-<em>lat1</em> and <em>lat2</em>.</p>
-</dd>
-<dt><strong><a name="a" class="item"><strong>-a</strong></a></strong></dt>
 
-<dd>
-<p>use the Albers equal area projection with standard parallels <em>lat1</em> and
-<em>lat2</em>.</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
+<p>use the Lambert conformal conic projection with standard parallels <i>lat1</i> and <i>lat2</i>.</p>
 
-<dd>
-<p>specify the longitude of origin <em>lon0</em> (degrees, default 0).</p>
 </dd>
-<dt><strong><a name="k" class="item"><strong>-k</strong></a></strong></dt>
-
+<dt id="a"><b>-a</b></dt>
 <dd>
-<p>specify the (azimuthal) scale <em>k1</em> on the standard parallels (default
-1).</p>
-</dd>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
 
-<dd>
-<p>perform the reverse projection.  <em>x</em> and <em>y</em> are given on standard
-input and each line of standard output gives <em>latitude</em>, <em>longitude</em>,
-<em>gamma</em>, and <em>k</em>.</p>
+<p>use the Albers equal area projection with standard parallels <i>lat1</i> and <i>lat2</i>.</p>
+
 </dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
+<dt id="l"><b>-l</b></dt>
+<dd>
 
+<p>specify the longitude of origin <i>lon0</i> (degrees, default 0).</p>
+
+</dd>
+<dt id="k"><b>-k</b></dt>
 <dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.</p>
+
+<p>specify the (azimuthal) scale <i>k1</i> on the standard parallels (default 1).</p>
+
 </dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
+<dt id="r"><b>-r</b></dt>
+<dd>
+
+<p>perform the reverse projection. <i>x</i> and <i>y</i> are given on standard input and each line of standard output gives <i>latitude</i>, <i>longitude</i>, <i>gamma</i>, and <i>k</i>.</p>
 
+</dd>
+<dt id="e"><b>-e</b></dt>
 <dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
+
+<p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563.</p>
+
 </dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
+
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
 
+</dd>
+<dt id="version"><b>--version</b></dt>
 <dd>
+
 <p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
 
+</dd>
+<dt id="h"><b>-h</b></dt>
 <dd>
+
 <p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
 
+</dd>
+<dt id="help"><b>--help</b></dt>
 <dd>
+
 <p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
 
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
 </dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
+<dt id="input-file"><b>--input-file</b></dt>
 <dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
 
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
 <dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
 </dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
+
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
 
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
 <dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 39.95N 75.17W | ConicProj -c 40d58 39d56 -l 77d45W
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
+<pre><code>   echo 39.95N 75.17W | ConicProj -c 40d58 39d56 -l 77d45W
    => 220445 -52372 1.67 1.0
    echo 220445 -52372 | ConicProj -c 40d58 39d56 -l 77d45W -r
-   => 39.95 -75.17 1.67 1.0</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>ConicProj</strong> to return an exit
-code of 1.  However, an error does not cause <strong>ConicProj</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>ConicProj</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>ConicProj</strong> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>,
-in version 1.9.</p>
+   => 39.95 -75.17 1.67 1.0</code></pre>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>ConicProj</b> to return an exit code of 1. However, an error does not cause <b>ConicProj</b> to terminate; following lines will be converted.</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>ConicProj</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>ConicProj</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in version 1.9.</p>
+
 
 </body>
 
 </html>
+
+
diff --git a/man/ConicProj.pod b/man/ConicProj.pod
index be5b8c5..59e2561 100644
--- a/man/ConicProj.pod
+++ b/man/ConicProj.pod
@@ -1,5 +1,3 @@
-=for comment $Id: 79921d487c55a107062161cc0d60c48527eb8e05 $
-
 =head1 NAME
 
 ConicProj -- perform conic projections
diff --git a/man/ConicProj.usage b/man/ConicProj.usage
index e6f392b..3fbcc44 100644
--- a/man/ConicProj.usage
+++ b/man/ConicProj.usage
@@ -9,7 +9,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    ConicProj --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/html/ConicProj.1.html\n";
+"    http://geographiclib.sf.net/1.34/ConicProj.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -126,5 +126,5 @@ int usage(int retval, bool brief) {
 "       ConicProj was added to GeographicLib, <http://geographiclib.sf.net>, in\n"
 "       version 1.9.\n"
 ;
-    return retval;
+  return retval;
 }
diff --git a/man/GeoConvert.1 b/man/GeoConvert.1
index 2d6463e..0dfa112 100644
--- a/man/GeoConvert.1
+++ b/man/GeoConvert.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GEOCONVERT 1"
-.TH GEOCONVERT 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
+.TH GEOCONVERT 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -154,7 +154,7 @@ is used (\fIa\fR = 6378137 m, \fIf\fR = 1/298.257223563).
 2 tokens (output options \fB\-g\fR, \fB\-d\fR, or \fB\-:\fR) given as \fIlatitude\fR
 \&\fIlongitude\fR using decimal degrees or degrees minutes seconds.  d, ',
 and " are used to denote degrees, minutes, and seconds, with the least
-significant designator optional.  (See \s-1QUOTING\s0 for how to
+significant designator optional.  (See \*(L"\s-1QUOTING\s0\*(R" for how to
 quote the characters ' and " when entering coordinates on the command
 line.)  Various unicode characters (encoded with \s-1UTF\-8\s0) may also be used
 to denote degrees, minutes, and seconds, e.g., the degree, prime, and
@@ -219,13 +219,12 @@ degrees clockwise from true north.
 .IP "\fB\-p\fR" 4
 .IX Item "-p"
 set the output precision to \fIprec\fR (default 0); \fIprec\fR is the
-precision relative to 1 m.  See \s-1PRECISION\s0.
+precision relative to 1 m.  See \*(L"\s-1PRECISION\s0\*(R".
 .IP "\fB\-z\fR" 4
 .IX Item "-z"
-set the zone to \fIzone\fR for output.  Use either 0 < \fIzone\fR <= 60
-for a \s-1UTM\s0 zone or \fIzone\fR = 0 for \s-1UPS\s0.  Alternatively use a
-\&\fIzone\fR+\fIhemisphere\fR designation (\fIhemisphere\fR is ignored), e.g., 38N.
-See \s-1ZONE\s0.
+set the zone to \fIzone\fR for output.  Use either 0 < \fIzone\fR <=
+60 for a \s-1UTM\s0 zone or \fIzone\fR = 0 for \s-1UPS\s0.  Alternatively use a
+\&\fIzone\fR+\fIhemisphere\fR designation, e.g., 38N.  See \*(L"\s-1ZONE\s0\*(R".
 .IP "\fB\-s\fR" 4
 .IX Item "-s"
 use the standard \s-1UPS\s0 and \s-1UTM\s0 zones.
@@ -235,11 +234,11 @@ similar to \fB\-s\fR but forces \s-1UPS\s0 regions to the closest \s-1UTM\s0 zon
 .IP "\fB\-n\fR" 4
 .IX Item "-n"
 on input, \s-1MGRS\s0 coordinates refer to the south-west corner of the \s-1MGRS\s0
-square instead of the center; see \s-1MGRS\s0.
+square instead of the center; see \*(L"\s-1MGRS\s0\*(R".
 .IP "\fB\-w\fR" 4
 .IX Item "-w"
 on input and output, longitude precedes latitude (except that on input
-this can be overridden by a hemisphere designator, \fIN\fR, \fIS\fR,\fIE\fR,
+this can be overridden by a hemisphere designator, \fIN\fR, \fIS\fR, \fIE\fR,
 \&\fIW\fR).
 .IP "\fB\-\-comment\-delimiter\fR" 4
 .IX Item "--comment-delimiter"
@@ -302,10 +301,10 @@ square is returned instead (\f(CW\*(C`38N 444000 3688000\*(C'\fR in the example
 .IX Header "ZONE"
 If the input is \fBgeographic\fR, \fBGeoConvert\fR uses the standard rules of
 selecting \s-1UTM\s0 vs \s-1UPS\s0 and for assigning the \s-1UTM\s0 zone (with the Norway and
-Svalbard exceptions).  If the input is \fB\s-1UTM/UPS\s0\fR, or \fB\s-1MGRS\s0\fR, then the
+Svalbard exceptions).  If the input is \fB\s-1UTM/UPS\s0\fR or \fB\s-1MGRS\s0\fR, then the
 choice between \s-1UTM\s0 and \s-1UPS\s0 and the \s-1UTM\s0 zone mirrors the input.  The \fB\-z\fR
-\&\fIzone\fR, \fB\-s\fR, \fB\-t\fR options allow these rules to be overridden with
-\&\fIzone\fR = 0 being used to indicate \s-1UPS\s0.  For example, the point
+\&\fIzone\fR, \fB\-s\fR, and \fB\-t\fR options allow these rules to be overridden
+with \fIzone\fR = 0 being used to indicate \s-1UPS\s0.  For example, the point
 .PP
 .Vb 1
 \&   79.9S 6.1E
@@ -328,40 +327,61 @@ then
 \&   echo 31CEM6066227959 | GeoConvert \-p \-3 \-m \-z 0  =>   BBZ1917
 .Ve
 .PP
+Is \fIzone\fR is specified with a hemisphere, then this is honored when
+printing \s-1UTM\s0 coordinates:
+.PP
+.Vb 4
+\&   echo \-1 3 | GeoConvert \-u         => 31S 500000 9889470
+\&   echo \-1 3 | GeoConvert \-u \-z 31   => 31S 500000 9889470
+\&   echo \-1 3 | GeoConvert \-u \-z 31S  => 31S 500000 9889470
+\&   echo \-1 3 | GeoConvert \-u \-z 31N  => 31N 500000 \-110530
+.Ve
+.PP
 \&\fB\s-1NOTE\s0\fR: the letter in the zone specification for \s-1UTM\s0 is a hemisphere
 designator \fIN\fR or \fIS\fR and \fInot\fR an \s-1MGRS\s0 latitude band letter.
 Convert the \s-1MGRS\s0 latitude band letter to a hemisphere as follows:
 replace \fIC\fR thru \fIM\fR by \fIS\fR; replace \fIN\fR thru \fIX\fR by \fIN\fR.
 .SH "QUOTING"
 .IX Header "QUOTING"
-Unfortunately the characters ' and " have special meanings in many
-shells and have to be entered with care.
+Unfortunately the characters ' and \*(L" have special meanings in many
+shells and have to be entered with care.  However note (1) that the
+trailing designator is optional and that (2) you can use colons as a
+separator character.  Thus 10d20' can be entered as 10d20 or 10:20 and
+10d20'30\*(R" can be entered as 10:20:30.
 .IP "Unix shells (sh, bash, tsch)" 4
 .IX Item "Unix shells (sh, bash, tsch)"
-The special characters can be quoted by preceding them with a \e
-(backslash).  Alternatively you can quote a ' with a pair of "s.  The
-two alternatives are illustrated by
+The characters ' and \*(L" can be quoted by preceding them with a \e
+(backslash); or you can quote a ' with a pair of \*(R"s.  The two
+alternatives are illustrated by
 .Sp
 .Vb 2
-\&   echo 30d30\e\*(Aq30\e" "30d30\*(Aq30" | GeoConvert \-d \-p \-1
-\&   => 30d30\*(Aq30"N 030d30\*(Aq30"E
+\&   echo 10d20\e\*(Aq30\e" "20d30\*(Aq40" | GeoConvert \-d \-p \-1
+\&   => 10d20\*(Aq30"N 020d30\*(Aq40"E
 .Ve
 .Sp
-Alternatively use colon separators, e.g., 30:30:30, which need no
-quoting.
+Quoting of command line arguments is similar
+.Sp
+.Vb 2
+\&   GeoConvert \-d \-p \-1 \-\-input\-string "10d20\*(Aq30\e" 20d30\*(Aq40"
+\&   => 10d20\*(Aq30"N 020d30\*(Aq40"E
+.Ve
 .IP "Windows command shell (cmd)" 4
 .IX Item "Windows command shell (cmd)"
 The ' character needs no quoting and the " character can be quoted by a
-^.  However this quoting is usually unnecessary because the trailing
-designator can be omitted.  Thus
+^.  (This quoting is usually unnecessary because the trailing designator
+can be omitted.)  Thus
 .Sp
 .Vb 2
-\&   echo 30d30\*(Aq30^" 30d30\*(Aq30 | GeoConvert \-d \-p \-1
-\&   => 30d30\*(Aq30"N 030d30\*(Aq30"E
+\&   echo 10d20\*(Aq30^" 20d30\*(Aq40 | GeoConvert \-d \-p \-1
+\&   => 10d20\*(Aq30"N 020d30\*(Aq40"E
 .Ve
 .Sp
-Alternatively use colon separators, e.g., 30:30:30, which need no
-quoting.
+Use \e to quote the " character in a command line argument
+.Sp
+.Vb 2
+\&   GeoConvert \-d \-p \-1 \-\-input\-string "10d20\*(Aq30\e" 20d30\*(Aq40"
+\&   => 10d20\*(Aq30"N 020d30\*(Aq40"E
+.Ve
 .IP "Input from a file" 4
 .IX Item "Input from a file"
 No quoting need be done if the input from a file.  Thus each line of the
@@ -406,7 +426,7 @@ World Geodetic System 1984,
 .IX Header "SEE ALSO"
 The algorithms for the transverse Mercator projection are described in
 C. F. F. Karney, \fITransverse Mercator with an accuracy of a few
-nanometers\fR, J. Geod \fB85\fR(8), 475\-485 (Aug. 2011); \s-1DOI\s0
+nanometers\fR, J. Geodesy \fB85\fR(8), 475\-485 (Aug. 2011); \s-1DOI\s0
 http://dx.doi.org/10.1007/s00190\-011\-0445\-3 <http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint
 <http://arxiv.org/abs/1002.1417>.
 .SH "AUTHOR"
diff --git a/man/GeoConvert.1.html b/man/GeoConvert.1.html
index ad7f237..c46e2e7 100644
--- a/man/GeoConvert.1.html
+++ b/man/GeoConvert.1.html
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>GeoConvert -- convert geographic coordinates</title>
+<title></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rev="made" href="mailto:root at localhost" />
 </head>
@@ -10,396 +10,317 @@
 <body style="background-color: white">
 
 
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
 
-<ul>
+<h1 id="NAME">NAME</h1>
 
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#precision">PRECISION</a></li>
-	<li><a href="#mgrs">MGRS</a></li>
-	<li><a href="#zone">ZONE</a></li>
-	<li><a href="#quoting">QUOTING</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#abbreviations">ABBREVIATIONS</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
+<p>GeoConvert -- convert geographic coordinates</p>
 
--->
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
 
+<p><b>GeoConvert</b> [ <b>-g</b> | <b>-d</b> | <b>-:</b> | <b>-u</b> | <b>-m</b> | <b>-c</b> ] [ <b>-p</b> <i>prec</i> ] [ <b>-z</b> <i>zone</i> | <b>-s</b> | <b>-t</b> ] [ <b>-n</b> ] [ <b>-w</b> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
-</div>
-<!-- INDEX END -->
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p><b>GeoConvert</b> reads from standard input interpreting each line as a geographic coordinate and prints the coordinate in the format specified by the options on standard output. The input is interpreted in one of three different ways depending on how many space or comma delimited tokens there are on the line. The options <b>-g</b>, <b>-d</b>, <b>-u</b>, and <b>-m</b> govern the format of output. In all cases, the WGS84 model of the earth is used (<i>a</i> = 6378137 m, <i>f</i> = 1/29 [...]
 
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>GeoConvert -- convert geographic coordinates</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>GeoConvert</strong> [ <strong>-g</strong> | <strong>-d</strong> | <strong>-:</strong> | <strong>-u</strong> | <strong>-m</strong> | <strong>-c</strong> ]
-[ <strong>-p</strong> <em>prec</em> ] [ <strong>-z</strong> <em>zone</em> | <strong>-s</strong> | <strong>-t</strong> ] [ <strong>-n</strong> ] [ <strong>-w</strong> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p><strong>GeoConvert</strong> reads from standard input interpreting each line as a
-geographic coordinate and prints the coordinate in the format specified
-by the options on standard output.  The input is interpreted in one of
-three different ways depending on how many space or comma delimited
-tokens there are on the line.  The options <strong>-g</strong>, <strong>-d</strong>, <strong>-u</strong>, and <strong>-m</strong>
-govern the format of output.  In all cases, the WGS84 model of the earth
-is used (<em>a</em> = 6378137 m, <em>f</em> = 1/298.257223563).</p>
 <dl>
-<dt><strong><a name="geographic" class="item"><strong>geographic</strong></a></strong></dt>
 
+<dt id="geographic"><b>geographic</b></dt>
 <dd>
-<p>2 tokens (output options <strong>-g</strong>, <strong>-d</strong>, or <strong>-:</strong>) given as <em>latitude</em>
-<em>longitude</em> using decimal degrees or degrees minutes seconds.  d, ',
-and " are used to denote degrees, minutes, and seconds, with the least
-significant designator optional.  (See <a href="#quoting">QUOTING</a> for how to
-quote the characters ' and " when entering coordinates on the command
-line.)  Various unicode characters (encoded with UTF-8) may also be used
-to denote degrees, minutes, and seconds, e.g., the degree, prime, and
-double prime symbols.  Alternatively, : (colon) may be used to separate
-the various components.  Latitude is given first (unless the <strong>-w</strong>
-option is given); however, on input, either may be given first by
-appending or prepending <em>N</em> or <em>S</em> to the latitude and <em>E</em> or <em>W</em> to
-the longitude.  For example, the following are all equivalent</p>
-<pre>
-    33.3 44.4
+
+<p>2 tokens (output options <b>-g</b>, <b>-d</b>, or <b>-:</b>) given as <i>latitude</i> <i>longitude</i> using decimal degrees or degrees minutes seconds. d, ', and " are used to denote degrees, minutes, and seconds, with the least significant designator optional. (See <a href="#QUOTING">"QUOTING"</a> for how to quote the characters ' and " when entering coordinates on the command line.) Various unicode characters (encoded with UTF-8) may also be used to deno [...]
+
+<pre><code>    33.3 44.4
     E44.4 N33.3
-    33d18'N 44d24'E
+    33d18'N 44d24'E
     44d24 33d18N
-    33:18 44:24</pre>
-</dd>
-<dt><strong><a name="utm_ups" class="item"><strong>UTM/UPS</strong></a></strong></dt>
+    33:18 44:24</code></pre>
 
+</dd>
+<dt id="UTM-UPS"><b>UTM/UPS</b></dt>
 <dd>
-<p>3 tokens (output option <strong>-u</strong>) given as <em>zone</em>+<em>hemisphere</em> <em>easting</em>
-<em>northing</em> or <em>easting</em> <em>northing</em> <em>zone</em>+<em>hemisphere</em>, where
-<em>hemisphere</em> is either <em>N</em> or <em>S</em>.  The <em>zone</em> is absent for a UPS
-specification.  For example,</p>
-<pre>
-    38N 444140.54 3684706.36
+
+<p>3 tokens (output option <b>-u</b>) given as <i>zone</i>+<i>hemisphere</i> <i>easting</i> <i>northing</i> or <i>easting</i> <i>northing</i> <i>zone</i>+<i>hemisphere</i>, where <i>hemisphere</i> is either <i>N</i> or <i>S</i>. The <i>zone</i> is absent for a UPS specification. For example,</p>
+
+<pre><code>    38N 444140.54 3684706.36
     444140.54 3684706.36 38N
     S 2173854.98 2985980.58
-    2173854.98 2985980.58 S</pre>
-</dd>
-<dt><strong><a name="mrgs" class="item"><strong>MRGS</strong></a></strong></dt>
+    2173854.98 2985980.58 S</code></pre>
 
+</dd>
+<dt id="MRGS"><b>MRGS</b></dt>
 <dd>
-<p>1 token (output option <strong>-m</strong>) is used to specify the center of an MGRS
-grid square.  For example,</p>
-<pre>
-    38SMB4484
-    38SMB44140847064</pre>
+
+<p>1 token (output option <b>-m</b>) is used to specify the center of an MGRS grid square. For example,</p>
+
+<pre><code>    38SMB4484
+    38SMB44140847064</code></pre>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
+
+<h1 id="OPTIONS">OPTIONS</h1>
+
 <dl>
-<dt><strong><a name="g" class="item"><strong>-g</strong></a></strong></dt>
 
+<dt id="g"><b>-g</b></dt>
 <dd>
-<p>output latitude and longitude using decimal degrees.  Default output mode.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
 
+<p>output latitude and longitude using decimal degrees. Default output mode.</p>
+
+</dd>
+<dt id="d"><b>-d</b></dt>
 <dd>
+
 <p>output latitude and longitude using degrees, minutes, and seconds (DMS).</p>
-</dd>
-<dt><strong><a name="__" class="item"><strong>-:</strong></a></strong></dt>
 
-<dd>
-<p>like <strong>-d</strong>, except use : as a separator instead of the d, ', and "
-delimiters.</p>
 </dd>
-<dt><strong><a name="u" class="item"><strong>-u</strong></a></strong></dt>
+<dt id="pod-:"><b>-:</b></dt>
+<dd>
+
+<p>like <b>-d</b>, except use : as a separator instead of the d, ', and " delimiters.</p>
 
+</dd>
+<dt id="u"><b>-u</b></dt>
 <dd>
+
 <p>output UTM or UPS.</p>
-</dd>
-<dt><strong><a name="m" class="item"><strong>-m</strong></a></strong></dt>
 
+</dd>
+<dt id="m"><b>-m</b></dt>
 <dd>
+
 <p>output MGRS.</p>
-</dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
 
-<dd>
-<p>output meridian convergence and scale for the corresponding UTM or
-UPS projection.  Convergence is the bearing of grid north given as
-degrees clockwise from true north.</p>
 </dd>
-<dt><strong><a name="p" class="item"><strong>-p</strong></a></strong></dt>
-
+<dt id="c"><b>-c</b></dt>
 <dd>
-<p>set the output precision to <em>prec</em> (default 0); <em>prec</em> is the
-precision relative to 1 m.  See <a href="#precision">PRECISION</a>.</p>
-</dd>
-<dt><strong><a name="z" class="item"><strong>-z</strong></a></strong></dt>
 
+<p>output meridian convergence and scale for the corresponding UTM or UPS projection. Convergence is the bearing of grid north given as degrees clockwise from true north.</p>
+
+</dd>
+<dt id="p"><b>-p</b></dt>
 <dd>
-<p>set the zone to <em>zone</em> for output.  Use either 0 < <em>zone</em> <= 60
-for a UTM zone or <em>zone</em> = 0 for UPS.  Alternatively use a
-<em>zone</em>+<em>hemisphere</em> designation (<em>hemisphere</em> is ignored), e.g., 38N.
-See <a href="#zone">ZONE</a>.</p>
+
+<p>set the output precision to <i>prec</i> (default 0); <i>prec</i> is the precision relative to 1 m. See <a href="#PRECISION">"PRECISION"</a>.</p>
+
 </dd>
-<dt><strong><a name="s" class="item"><strong>-s</strong></a></strong></dt>
+<dt id="z"><b>-z</b></dt>
+<dd>
+
+<p>set the zone to <i>zone</i> for output. Use either 0 < <i>zone</i> <= 60 for a UTM zone or <i>zone</i> = 0 for UPS. Alternatively use a <i>zone</i>+<i>hemisphere</i> designation, e.g., 38N. See <a href="#ZONE">"ZONE"</a>.</p>
 
+</dd>
+<dt id="s"><b>-s</b></dt>
 <dd>
+
 <p>use the standard UPS and UTM zones.</p>
-</dd>
-<dt><strong><a name="t" class="item"><strong>-t</strong></a></strong></dt>
 
-<dd>
-<p>similar to <strong>-s</strong> but forces UPS regions to the closest UTM zone.</p>
 </dd>
-<dt><strong><a name="n" class="item"><strong>-n</strong></a></strong></dt>
-
+<dt id="t"><b>-t</b></dt>
 <dd>
-<p>on input, MGRS coordinates refer to the south-west corner of the MGRS
-square instead of the center; see <a href="#mgrs">MGRS</a>.</p>
-</dd>
-<dt><strong><a name="w" class="item"><strong>-w</strong></a></strong></dt>
 
-<dd>
-<p>on input and output, longitude precedes latitude (except that on input
-this can be overridden by a hemisphere designator, <em>N</em>, <em>S</em>,<em>E</em>,
-<em>W</em>).</p>
+<p>similar to <b>-s</b> but forces UPS regions to the closest UTM zone.</p>
+
 </dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
+<dt id="n"><b>-n</b></dt>
+<dd>
+
+<p>on input, MGRS coordinates refer to the south-west corner of the MGRS square instead of the center; see <a href="#MGRS">"MGRS"</a>.</p>
 
+</dd>
+<dt id="w"><b>-w</b></dt>
 <dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
+
+<p>on input and output, longitude precedes latitude (except that on input this can be overridden by a hemisphere designator, <i>N</i>, <i>S</i>, <i>E</i>, <i>W</i>).</p>
+
 </dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
 
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
+
+</dd>
+<dt id="version"><b>--version</b></dt>
 <dd>
+
 <p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
 
+</dd>
+<dt id="h"><b>-h</b></dt>
 <dd>
+
 <p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
 
+</dd>
+<dt id="help"><b>--help</b></dt>
 <dd>
+
 <p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
 
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
 </dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
+<dt id="input-file"><b>--input-file</b></dt>
 <dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
 
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
 <dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
 </dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
+
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
 
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
 <dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="precision">PRECISION</a></h1>
-<p><em>prec</em> gives precision of the output with <em>prec</em> = 0 giving 1 m
-precision, <em>prec</em> = 3 giving 1 mm precision, etc.  <em>prec</em> is the number
-of digits after the decimal point for UTM/UPS.  The number of digits per
-coordinate for MGRS is 5 + <em>prec</em>.  For decimal degrees, the number of
-digits after the decimal point is 5 + <em>prec</em>.  For DMS (degree, minute,
-seconds) output, the number of digits after the decimal point in the
-seconds components is 1 + <em>prec</em>; if this is negative then use minutes
-(<em>prec</em> = -2 or -3) or degrees (<em>prec</em> <= -4) as the least significant
-component.  Print convergence, resp. scale, with 5 + <em>prec</em>, resp. 7 +
-<em>prec</em>, digits after the decimal point.  The minimum value of <em>prec</em> is
--5 and the maximum is 9 for UTM/UPS, 9 for decimal degrees, 10 for DMS,
-6 for MGRS, and 8 for convergence and scale.</p>
-<p>
-</p>
-<hr />
-<h1><a name="mgrs">MGRS</a></h1>
-<p>MGRS coordinates represent a square patch of the earth, thus <code>38SMB4488</code>
-is in zone <code>38N</code> with 444km <= <em>easting</em> < 445km and 3688km <=
-<em>northing</em> < 3689km.  Consistent with this representation,
-coordinates are <em>truncated</em> (instead of <em>rounded</em>) to the requested
-precision.  Similarly, on input an MGRS coordinate represents the
-<em>center</em> of the square (<code>38N 444500 3688500</code> in the example above).
-However, if the <strong>-n</strong> option is given then the south-west corner of the
-square is returned instead (<code>38N 444000 3688000</code> in the example above).</p>
-<p>
-</p>
-<hr />
-<h1><a name="zone">ZONE</a></h1>
-<p>If the input is <strong>geographic</strong>, <strong>GeoConvert</strong> uses the standard rules of
-selecting UTM vs UPS and for assigning the UTM zone (with the Norway and
-Svalbard exceptions).  If the input is <strong>UTM/UPS</strong>, or <strong>MGRS</strong>, then the
-choice between UTM and UPS and the UTM zone mirrors the input.  The <strong>-z</strong>
-<em>zone</em>, <strong>-s</strong>, <strong>-t</strong> options allow these rules to be overridden with
-<em>zone</em> = 0 being used to indicate UPS.  For example, the point</p>
-<pre>
-   79.9S 6.1E</pre>
+
+<h1 id="PRECISION">PRECISION</h1>
+
+<p><i>prec</i> gives precision of the output with <i>prec</i> = 0 giving 1 m precision, <i>prec</i> = 3 giving 1 mm precision, etc. <i>prec</i> is the number of digits after the decimal point for UTM/UPS. The number of digits per coordinate for MGRS is 5 + <i>prec</i>. For decimal degrees, the number of digits after the decimal point is 5 + <i>prec</i>. For DMS (degree, minute, seconds) output, the number of digits after the decimal point in the seconds components is 1 + <i>prec</i>; if  [...]
+
+<h1 id="MGRS">MGRS</h1>
+
+<p>MGRS coordinates represent a square patch of the earth, thus <code>38SMB4488</code> is in zone <code>38N</code> with 444km <= <i>easting</i> < 445km and 3688km <= <i>northing</i> < 3689km. Consistent with this representation, coordinates are <i>truncated</i> (instead of <i>rounded</i>) to the requested precision. Similarly, on input an MGRS coordinate represents the <i>center</i> of the square (<code>38N 444500 3688500</code> in the example above). However, if the <b>-n</b [...]
+
+<h1 id="ZONE">ZONE</h1>
+
+<p>If the input is <b>geographic</b>, <b>GeoConvert</b> uses the standard rules of selecting UTM vs UPS and for assigning the UTM zone (with the Norway and Svalbard exceptions). If the input is <b>UTM/UPS</b> or <b>MGRS</b>, then the choice between UTM and UPS and the UTM zone mirrors the input. The <b>-z</b> <i>zone</i>, <b>-s</b>, and <b>-t</b> options allow these rules to be overridden with <i>zone</i> = 0 being used to indicate UPS. For example, the point</p>
+
+<pre><code>   79.9S 6.1E</code></pre>
+
 <p>corresponds to possible MGRS coordinates</p>
-<pre>
-   32CMS4324728161 (standard UTM zone = 32)
+
+<pre><code>   32CMS4324728161 (standard UTM zone = 32)
    31CEM6066227959 (neighboring UTM zone = 31)
-     BBZ1945517770 (neighboring UPS zone)</pre>
+     BBZ1945517770 (neighboring UPS zone)</code></pre>
+
 <p>then</p>
-<pre>
-   echo 79.9S 6.1E      | GeoConvert -p -3 -m       => 32CMS4328
+
+<pre><code>   echo 79.9S 6.1E      | GeoConvert -p -3 -m       => 32CMS4328
    echo 31CEM6066227959 | GeoConvert -p -3 -m       => 31CEM6027
    echo 31CEM6066227959 | GeoConvert -p -3 -m -s    => 32CMS4328
-   echo 31CEM6066227959 | GeoConvert -p -3 -m -z 0  =>   BBZ1917</pre>
-<p><strong>NOTE</strong>: the letter in the zone specification for UTM is a hemisphere
-designator <em>N</em> or <em>S</em> and <em>not</em> an MGRS latitude band letter.
-Convert the MGRS latitude band letter to a hemisphere as follows:
-replace <em>C</em> thru <em>M</em> by <em>S</em>; replace <em>N</em> thru <em>X</em> by <em>N</em>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="quoting">QUOTING</a></h1>
-<p>Unfortunately the characters ' and " have special meanings in many
-shells and have to be entered with care.</p>
+   echo 31CEM6066227959 | GeoConvert -p -3 -m -z 0  =>   BBZ1917</code></pre>
+
+<p>Is <i>zone</i> is specified with a hemisphere, then this is honored when printing UTM coordinates:</p>
+
+<pre><code>   echo -1 3 | GeoConvert -u         => 31S 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31   => 31S 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31S  => 31S 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31N  => 31N 500000 -110530</code></pre>
+
+<p><b>NOTE</b>: the letter in the zone specification for UTM is a hemisphere designator <i>N</i> or <i>S</i> and <i>not</i> an MGRS latitude band letter. Convert the MGRS latitude band letter to a hemisphere as follows: replace <i>C</i> thru <i>M</i> by <i>S</i>; replace <i>N</i> thru <i>X</i> by <i>N</i>.</p>
+
+<h1 id="QUOTING">QUOTING</h1>
+
+<p>Unfortunately the characters ' and " have special meanings in many shells and have to be entered with care. However note (1) that the trailing designator is optional and that (2) you can use colons as a separator character. Thus 10d20' can be entered as 10d20 or 10:20 and 10d20'30" can be entered as 10:20:30.</p>
+
 <dl>
-<dt><strong><a name="shells" class="item">Unix shells (sh, bash, tsch)</a></strong></dt>
 
+<dt id="Unix-shells-sh-bash-tsch-">Unix shells (sh, bash, tsch)</dt>
 <dd>
-<p>The special characters can be quoted by preceding them with a \
-(backslash).  Alternatively you can quote a ' with a pair of "s.  The
-two alternatives are illustrated by</p>
-<pre>
-   echo 30d30\'30\" "30d30'30" | GeoConvert -d -p -1
-   => 30d30'30"N 030d30'30"E</pre>
-<p>Alternatively use colon separators, e.g., 30:30:30, which need no
-quoting.</p>
-</dd>
-<dt><strong><a name="shell" class="item">Windows command shell (cmd)</a></strong></dt>
 
-<dd>
-<p>The ' character needs no quoting and the " character can be quoted by a
-^.  However this quoting is usually unnecessary because the trailing
-designator can be omitted.  Thus</p>
-<pre>
-   echo 30d30'30^" 30d30'30 | GeoConvert -d -p -1
-   => 30d30'30"N 030d30'30"E</pre>
-<p>Alternatively use colon separators, e.g., 30:30:30, which need no
-quoting.</p>
+<p>The characters ' and " can be quoted by preceding them with a \ (backslash); or you can quote a ' with a pair of "s. The two alternatives are illustrated by</p>
+
+<pre><code>   echo 10d20\'30\" "20d30'40" | GeoConvert -d -p -1
+   => 10d20'30"N 020d30'40"E</code></pre>
+
+<p>Quoting of command line arguments is similar</p>
+
+<pre><code>   GeoConvert -d -p -1 --input-string "10d20'30\" 20d30'40"
+   => 10d20'30"N 020d30'40"E</code></pre>
+
 </dd>
-<dt><strong><a name="input_from_a_file" class="item">Input from a file</a></strong></dt>
+<dt id="Windows-command-shell-cmd-">Windows command shell (cmd)</dt>
+<dd>
+
+<p>The ' character needs no quoting and the " character can be quoted by a ^. (This quoting is usually unnecessary because the trailing designator can be omitted.) Thus</p>
 
+<pre><code>   echo 10d20'30^" 20d30'40 | GeoConvert -d -p -1
+   => 10d20'30"N 020d30'40"E</code></pre>
+
+<p>Use \ to quote the " character in a command line argument</p>
+
+<pre><code>   GeoConvert -d -p -1 --input-string "10d20'30\" 20d30'40"
+   => 10d20'30"N 020d30'40"E</code></pre>
+
+</dd>
+<dt id="Input-from-a-file">Input from a file</dt>
 <dd>
-<p>No quoting need be done if the input from a file.  Thus each line of the
-file <code>input.txt</code> should just contain the plain coordinates.</p>
-<pre>
-  GeoConvert -d -p -1 < input.txt</pre>
+
+<p>No quoting need be done if the input from a file. Thus each line of the file <code>input.txt</code> should just contain the plain coordinates.</p>
+
+<pre><code>  GeoConvert -d -p -1 < input.txt</code></pre>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 38SMB4488 | GeoConvert         => 33.33424 44.40363
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
+<pre><code>   echo 38SMB4488 | GeoConvert         => 33.33424 44.40363
    echo 38SMB4488 | GeoConvert -: -p 1 => 33:20:03.25N 044:2413.06E
    echo 38SMB4488 | GeoConvert -u      => 38N 444500 3688500
-   echo E44d24 N33d20 | GeoConvert -m -p -3 => 38SMB4488</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>GeoConvert</strong> to return an exit code
-of 1.  However, an error does not cause <strong>GeoConvert</strong> to terminate;
-following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="abbreviations">ABBREVIATIONS</a></h1>
+   echo E44d24 N33d20 | GeoConvert -m -p -3 => 38SMB4488</code></pre>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>GeoConvert</b> to return an exit code of 1. However, an error does not cause <b>GeoConvert</b> to terminate; following lines will be converted.</p>
+
+<h1 id="ABBREVIATIONS">ABBREVIATIONS</h1>
+
 <dl>
-<dt><strong><a name="utm" class="item"><strong>UTM</strong></a></strong></dt>
 
+<dt id="UTM"><b>UTM</b></dt>
 <dd>
-<p>Universal Transverse Mercator,
-<a href="http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system">http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system</a>.</p>
-</dd>
-<dt><strong><a name="ups" class="item"><strong>UPS</strong></a></strong></dt>
 
-<dd>
-<p>Universal Polar Stereographic,
-<a href="http://en.wikipedia.org/wiki/Universal_Polar_Stereographic">http://en.wikipedia.org/wiki/Universal_Polar_Stereographic</a>.</p>
-</dd>
-<dt><strong><a name="mgrs" class="item"><strong>MGRS</strong></a></strong></dt>
+<p>Universal Transverse Mercator, <a href="http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system">http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system</a>.</p>
 
+</dd>
+<dt id="UPS"><b>UPS</b></dt>
 <dd>
-<p>Military Grid Reference System,
-<a href="http://en.wikipedia.org/wiki/Military_grid_reference_system">http://en.wikipedia.org/wiki/Military_grid_reference_system</a>.</p>
+
+<p>Universal Polar Stereographic, <a href="http://en.wikipedia.org/wiki/Universal_Polar_Stereographic">http://en.wikipedia.org/wiki/Universal_Polar_Stereographic</a>.</p>
+
 </dd>
-<dt><strong><a name="wgs84" class="item"><strong>WGS84</strong></a></strong></dt>
+<dt id="MGRS1"><b>MGRS</b></dt>
+<dd>
+
+<p>Military Grid Reference System, <a href="http://en.wikipedia.org/wiki/Military_grid_reference_system">http://en.wikipedia.org/wiki/Military_grid_reference_system</a>.</p>
 
+</dd>
+<dt id="WGS84"><b>WGS84</b></dt>
 <dd>
-<p>World Geodetic System 1984,
-<a href="http://en.wikipedia.org/wiki/WGS84">http://en.wikipedia.org/wiki/WGS84</a>.</p>
+
+<p>World Geodetic System 1984, <a href="http://en.wikipedia.org/wiki/WGS84">http://en.wikipedia.org/wiki/WGS84</a>.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The algorithms for the transverse Mercator projection are described in
-C. F. F. Karney, <em>Transverse Mercator with an accuracy of a few
-nanometers</em>, J. Geod <strong>85</strong>(8), 475-485 (Aug. 2011); DOI
-<a href="http://dx.doi.org/10.1007/s00190-011-0445-3">http://dx.doi.org/10.1007/s00190-011-0445-3</a>; preprint
-<a href="http://arxiv.org/abs/1002.1417">http://arxiv.org/abs/1002.1417</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>GeoConvert</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>GeoConvert</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-01.</p>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>The algorithms for the transverse Mercator projection are described in C. F. F. Karney, <i>Transverse Mercator with an accuracy of a few nanometers</i>, J. Geodesy <b>85</b>(8), 475-485 (Aug. 2011); DOI <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">http://dx.doi.org/10.1007/s00190-011-0445-3</a>; preprint <a href="http://arxiv.org/abs/1002.1417">http://arxiv.org/abs/1002.1417</a>.</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>GeoConvert</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>GeoConvert</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-01.</p>
+
 
 </body>
 
 </html>
+
+
diff --git a/man/GeoConvert.pod b/man/GeoConvert.pod
index 97de984..f3681ca 100644
--- a/man/GeoConvert.pod
+++ b/man/GeoConvert.pod
@@ -1,5 +1,3 @@
-=for comment $Id: fc3aaeb4b0e207d3d40e1fa301ea4573c37b7321 $
-
 =head1 NAME
 
 GeoConvert -- convert geographic coordinates
@@ -31,7 +29,7 @@ is used (I<a> = 6378137 m, I<f> = 1/298.257223563).
 2 tokens (output options B<-g>, B<-d>, or B<-:>) given as I<latitude>
 I<longitude> using decimal degrees or degrees minutes seconds.  d, ',
 and " are used to denote degrees, minutes, and seconds, with the least
-significant designator optional.  (See L<QUOTING|quoting> for how to
+significant designator optional.  (See L</QUOTING> for how to
 quote the characters ' and " when entering coordinates on the command
 line.)  Various unicode characters (encoded with UTF-8) may also be used
 to denote degrees, minutes, and seconds, e.g., the degree, prime, and
@@ -103,14 +101,13 @@ degrees clockwise from true north.
 =item B<-p>
 
 set the output precision to I<prec> (default 0); I<prec> is the
-precision relative to 1 m.  See L<PRECISION|precision>.
+precision relative to 1 m.  See L</PRECISION>.
 
 =item B<-z>
 
-set the zone to I<zone> for output.  Use either 0 E<lt> I<zone> E<lt>= 60
-for a UTM zone or I<zone> = 0 for UPS.  Alternatively use a
-I<zone>+I<hemisphere> designation (I<hemisphere> is ignored), e.g., 38N.
-See L<ZONE|zone>.
+set the zone to I<zone> for output.  Use either 0 E<lt> I<zone> E<lt>=
+60 for a UTM zone or I<zone> = 0 for UPS.  Alternatively use a
+I<zone>+I<hemisphere> designation, e.g., 38N.  See L</ZONE>.
 
 =item B<-s>
 
@@ -123,12 +120,12 @@ similar to B<-s> but forces UPS regions to the closest UTM zone.
 =item B<-n>
 
 on input, MGRS coordinates refer to the south-west corner of the MGRS
-square instead of the center; see L<MGRS|mgrs>.
+square instead of the center; see L</MGRS>.
 
 =item B<-w>
 
 on input and output, longitude precedes latitude (except that on input
-this can be overridden by a hemisphere designator, I<N>, I<S>,I<E>,
+this can be overridden by a hemisphere designator, I<N>, I<S>, I<E>,
 I<W>).
 
 =item B<--comment-delimiter>
@@ -204,10 +201,10 @@ square is returned instead (C<38N 444000 3688000> in the example above).
 
 If the input is B<geographic>, B<GeoConvert> uses the standard rules of
 selecting UTM vs UPS and for assigning the UTM zone (with the Norway and
-Svalbard exceptions).  If the input is B<UTM/UPS>, or B<MGRS>, then the
+Svalbard exceptions).  If the input is B<UTM/UPS> or B<MGRS>, then the
 choice between UTM and UPS and the UTM zone mirrors the input.  The B<-z>
-I<zone>, B<-s>, B<-t> options allow these rules to be overridden with
-I<zone> = 0 being used to indicate UPS.  For example, the point
+I<zone>, B<-s>, and B<-t> options allow these rules to be overridden
+with I<zone> = 0 being used to indicate UPS.  For example, the point
 
    79.9S 6.1E
 
@@ -224,6 +221,14 @@ then
    echo 31CEM6066227959 | GeoConvert -p -3 -m -s    => 32CMS4328
    echo 31CEM6066227959 | GeoConvert -p -3 -m -z 0  =>   BBZ1917
 
+Is I<zone> is specified with a hemisphere, then this is honored when
+printing UTM coordinates:
+
+   echo -1 3 | GeoConvert -u         => 31S 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31   => 31S 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31S  => 31S 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31N  => 31N 500000 -110530
+
 B<NOTE>: the letter in the zone specification for UTM is a hemisphere
 designator I<N> or I<S> and I<not> an MGRS latitude band letter.
 Convert the MGRS latitude band letter to a hemisphere as follows:
@@ -232,33 +237,40 @@ replace I<C> thru I<M> by I<S>; replace I<N> thru I<X> by I<N>.
 =head1 QUOTING
 
 Unfortunately the characters ' and " have special meanings in many
-shells and have to be entered with care.
+shells and have to be entered with care.  However note (1) that the
+trailing designator is optional and that (2) you can use colons as a
+separator character.  Thus 10d20' can be entered as 10d20 or 10:20 and
+10d20'30" can be entered as 10:20:30.
 
 =over
 
 =item Unix shells (sh, bash, tsch)
 
-The special characters can be quoted by preceding them with a \
-(backslash).  Alternatively you can quote a ' with a pair of "s.  The
-two alternatives are illustrated by
+The characters ' and " can be quoted by preceding them with a \
+(backslash); or you can quote a ' with a pair of "s.  The two
+alternatives are illustrated by
 
-   echo 30d30\'30\" "30d30'30" | GeoConvert -d -p -1
-   => 30d30'30"N 030d30'30"E
+   echo 10d20\'30\" "20d30'40" | GeoConvert -d -p -1
+   => 10d20'30"N 020d30'40"E
 
-Alternatively use colon separators, e.g., 30:30:30, which need no
-quoting.
+Quoting of command line arguments is similar
+
+   GeoConvert -d -p -1 --input-string "10d20'30\" 20d30'40"
+   => 10d20'30"N 020d30'40"E
 
 =item Windows command shell (cmd)
 
 The ' character needs no quoting and the " character can be quoted by a
-^.  However this quoting is usually unnecessary because the trailing
-designator can be omitted.  Thus
+^.  (This quoting is usually unnecessary because the trailing designator
+can be omitted.)  Thus
+
+   echo 10d20'30^" 20d30'40 | GeoConvert -d -p -1
+   => 10d20'30"N 020d30'40"E
 
-   echo 30d30'30^" 30d30'30 | GeoConvert -d -p -1
-   => 30d30'30"N 030d30'30"E
+Use \ to quote the " character in a command line argument
 
-Alternatively use colon separators, e.g., 30:30:30, which need no
-quoting.
+   GeoConvert -d -p -1 --input-string "10d20'30\" 20d30'40"
+   => 10d20'30"N 020d30'40"E
 
 =item Input from a file
 
@@ -313,7 +325,7 @@ L<http://en.wikipedia.org/wiki/WGS84>.
 
 The algorithms for the transverse Mercator projection are described in
 C. F. F. Karney, I<Transverse Mercator with an accuracy of a few
-nanometers>, J. Geod B<85>(8), 475-485 (Aug. 2011); DOI
+nanometers>, J. Geodesy B<85>(8), 475-485 (Aug. 2011); DOI
 L<http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint
 L<http://arxiv.org/abs/1002.1417>.
 
diff --git a/man/GeoConvert.usage b/man/GeoConvert.usage
index 75a80a7..7a0f8a8 100644
--- a/man/GeoConvert.usage
+++ b/man/GeoConvert.usage
@@ -9,7 +9,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    GeoConvert --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/html/GeoConvert.1.html\n";
+"    http://geographiclib.sf.net/1.34/GeoConvert.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -34,15 +34,16 @@ int usage(int retval, bool brief) {
 "           2 tokens (output options -g, -d, or -:) given as latitude longitude\n"
 "           using decimal degrees or degrees minutes seconds.  d, ', and \" are\n"
 "           used to denote degrees, minutes, and seconds, with the least\n"
-"           significant designator optional.  (See QUOTING for how to quote the\n"
-"           characters ' and \" when entering coordinates on the command line.)\n"
-"           Various unicode characters (encoded with UTF-8) may also be used to\n"
-"           denote degrees, minutes, and seconds, e.g., the degree, prime, and\n"
-"           double prime symbols.  Alternatively, : (colon) may be used to\n"
-"           separate the various components.  Latitude is given first (unless\n"
-"           the -w option is given); however, on input, either may be given\n"
-"           first by appending or prepending N or S to the latitude and E or W\n"
-"           to the longitude.  For example, the following are all equivalent\n"
+"           significant designator optional.  (See \"QUOTING\" for how to quote\n"
+"           the characters ' and \" when entering coordinates on the command\n"
+"           line.)  Various unicode characters (encoded with UTF-8) may also be\n"
+"           used to denote degrees, minutes, and seconds, e.g., the degree,\n"
+"           prime, and double prime symbols.  Alternatively, : (colon) may be\n"
+"           used to separate the various components.  Latitude is given first\n"
+"           (unless the -w option is given); however, on input, either may be\n"
+"           given first by appending or prepending N or S to the latitude and E\n"
+"           or W to the longitude.  For example, the following are all\n"
+"           equivalent\n"
 "\n"
 "               33.3 44.4\n"
 "               E44.4 N33.3\n"
@@ -87,21 +88,21 @@ int usage(int retval, bool brief) {
 "           degrees clockwise from true north.\n"
 "\n"
 "       -p  set the output precision to prec (default 0); prec is the precision\n"
-"           relative to 1 m.  See PRECISION.\n"
+"           relative to 1 m.  See \"PRECISION\".\n"
 "\n"
 "       -z  set the zone to zone for output.  Use either 0 < zone <= 60 for a\n"
 "           UTM zone or zone = 0 for UPS.  Alternatively use a zone+hemisphere\n"
-"           designation (hemisphere is ignored), e.g., 38N.  See ZONE.\n"
+"           designation, e.g., 38N.  See \"ZONE\".\n"
 "\n"
 "       -s  use the standard UPS and UTM zones.\n"
 "\n"
 "       -t  similar to -s but forces UPS regions to the closest UTM zone.\n"
 "\n"
 "       -n  on input, MGRS coordinates refer to the south-west corner of the\n"
-"           MGRS square instead of the center; see MGRS.\n"
+"           MGRS square instead of the center; see \"MGRS\".\n"
 "\n"
 "       -w  on input and output, longitude precedes latitude (except that on\n"
-"           input this can be overridden by a hemisphere designator, N, S,E,\n"
+"           input this can be overridden by a hemisphere designator, N, S, E,\n"
 "           W).\n"
 "\n"
 "       --comment-delimiter\n"
@@ -164,10 +165,10 @@ int usage(int retval, bool brief) {
 "ZONE\n"
 "       If the input is geographic, GeoConvert uses the standard rules of\n"
 "       selecting UTM vs UPS and for assigning the UTM zone (with the Norway\n"
-"       and Svalbard exceptions).  If the input is UTM/UPS, or MGRS, then the\n"
+"       and Svalbard exceptions).  If the input is UTM/UPS or MGRS, then the\n"
 "       choice between UTM and UPS and the UTM zone mirrors the input.  The -z\n"
-"       zone, -s, -t options allow these rules to be overridden with zone = 0\n"
-"       being used to indicate UPS.  For example, the point\n"
+"       zone, -s, and -t options allow these rules to be overridden with zone =\n"
+"       0 being used to indicate UPS.  For example, the point\n"
 "\n"
 "          79.9S 6.1E\n"
 "\n"
@@ -184,6 +185,14 @@ int usage(int retval, bool brief) {
 "          echo 31CEM6066227959 | GeoConvert -p -3 -m -s    => 32CMS4328\n"
 "          echo 31CEM6066227959 | GeoConvert -p -3 -m -z 0  =>   BBZ1917\n"
 "\n"
+"       Is zone is specified with a hemisphere, then this is honored when\n"
+"       printing UTM coordinates:\n"
+"\n"
+"          echo -1 3 | GeoConvert -u         => 31S 500000 9889470\n"
+"          echo -1 3 | GeoConvert -u -z 31   => 31S 500000 9889470\n"
+"          echo -1 3 | GeoConvert -u -z 31S  => 31S 500000 9889470\n"
+"          echo -1 3 | GeoConvert -u -z 31N  => 31N 500000 -110530\n"
+"\n"
 "       NOTE: the letter in the zone specification for UTM is a hemisphere\n"
 "       designator N or S and not an MGRS latitude band letter.  Convert the\n"
 "       MGRS latitude band letter to a hemisphere as follows: replace C thru M\n"
@@ -191,29 +200,36 @@ int usage(int retval, bool brief) {
 "\n"
 "QUOTING\n"
 "       Unfortunately the characters ' and \" have special meanings in many\n"
-"       shells and have to be entered with care.\n"
+"       shells and have to be entered with care.  However note (1) that the\n"
+"       trailing designator is optional and that (2) you can use colons as a\n"
+"       separator character.  Thus 10d20' can be entered as 10d20 or 10:20 and\n"
+"       10d20'30\" can be entered as 10:20:30.\n"
 "\n"
 "       Unix shells (sh, bash, tsch)\n"
-"           The special characters can be quoted by preceding them with a \\\n"
-"           (backslash).  Alternatively you can quote a ' with a pair of \"s.\n"
-"           The two alternatives are illustrated by\n"
+"           The characters ' and \" can be quoted by preceding them with a \\\n"
+"           (backslash); or you can quote a ' with a pair of \"s.  The two\n"
+"           alternatives are illustrated by\n"
 "\n"
-"              echo 30d30\\'30\\\" \"30d30'30\" | GeoConvert -d -p -1\n"
-"              => 30d30'30\"N 030d30'30\"E\n"
+"              echo 10d20\\'30\\\" \"20d30'40\" | GeoConvert -d -p -1\n"
+"              => 10d20'30\"N 020d30'40\"E\n"
 "\n"
-"           Alternatively use colon separators, e.g., 30:30:30, which need no\n"
-"           quoting.\n"
+"           Quoting of command line arguments is similar\n"
+"\n"
+"              GeoConvert -d -p -1 --input-string \"10d20'30\\\" 20d30'40\"\n"
+"              => 10d20'30\"N 020d30'40\"E\n"
 "\n"
 "       Windows command shell (cmd)\n"
 "           The ' character needs no quoting and the \" character can be quoted\n"
-"           by a ^.  However this quoting is usually unnecessary because the\n"
-"           trailing designator can be omitted.  Thus\n"
+"           by a ^.  (This quoting is usually unnecessary because the trailing\n"
+"           designator can be omitted.)  Thus\n"
+"\n"
+"              echo 10d20'30^\" 20d30'40 | GeoConvert -d -p -1\n"
+"              => 10d20'30\"N 020d30'40\"E\n"
 "\n"
-"              echo 30d30'30^\" 30d30'30 | GeoConvert -d -p -1\n"
-"              => 30d30'30\"N 030d30'30\"E\n"
+"           Use \\ to quote the \" character in a command line argument\n"
 "\n"
-"           Alternatively use colon separators, e.g., 30:30:30, which need no\n"
-"           quoting.\n"
+"              GeoConvert -d -p -1 --input-string \"10d20'30\\\" 20d30'40\"\n"
+"              => 10d20'30\"N 020d30'40\"E\n"
 "\n"
 "       Input from a file\n"
 "           No quoting need be done if the input from a file.  Thus each line\n"
@@ -250,7 +266,7 @@ int usage(int retval, bool brief) {
 "SEE ALSO\n"
 "       The algorithms for the transverse Mercator projection are described in\n"
 "       C. F. F. Karney, Transverse Mercator with an accuracy of a few\n"
-"       nanometers, J. Geod 85(8), 475-485 (Aug. 2011); DOI\n"
+"       nanometers, J. Geodesy 85(8), 475-485 (Aug. 2011); DOI\n"
 "       http://dx.doi.org/10.1007/s00190-011-0445-3\n"
 "       <http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint\n"
 "       <http://arxiv.org/abs/1002.1417>.\n"
@@ -262,5 +278,5 @@ int usage(int retval, bool brief) {
 "       GeoConvert was added to GeographicLib, <http://geographiclib.sf.net>,\n"
 "       in 2009-01.\n"
 ;
-    return retval;
+  return retval;
 }
diff --git a/man/Geod.1 b/man/Geod.1
deleted file mode 100644
index 6e901ee..0000000
--- a/man/Geod.1
+++ /dev/null
@@ -1,345 +0,0 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
-.\"
-.\" Standard preamble:
-.\" ========================================================================
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Vb \" Begin verbatim text
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve \" End verbatim text
-.ft R
-.fi
-..
-.\" Set up some character translations and predefined strings.  \*(-- will
-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
-.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
-.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
-.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
-.\" nothing in troff, for use with C<>.
-.tr \(*W-
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.ie n \{\
-.    ds -- \(*W-
-.    ds PI pi
-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
-.    ds L" ""
-.    ds R" ""
-.    ds C` ""
-.    ds C' ""
-'br\}
-.el\{\
-.    ds -- \|\(em\|
-.    ds PI \(*p
-.    ds L" ``
-.    ds R" ''
-'br\}
-.\"
-.\" Escape single quotes in literal strings from groff's Unicode transform.
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\"
-.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
-.\" entries marked with X<> in POD.  Of course, you'll have to process the
-.\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
-..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
-..
-.\}
-.\"
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
-.    \" fudge factors for nroff and troff
-.if n \{\
-.    ds #H 0
-.    ds #V .8m
-.    ds #F .3m
-.    ds #[ \f1
-.    ds #] \fP
-.\}
-.if t \{\
-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-.    ds #V .6m
-.    ds #F 0
-.    ds #[ \&
-.    ds #] \&
-.\}
-.    \" simple accents for nroff and troff
-.if n \{\
-.    ds ' \&
-.    ds ` \&
-.    ds ^ \&
-.    ds , \&
-.    ds ~ ~
-.    ds /
-.\}
-.if t \{\
-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.\}
-.    \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-.    \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-.    \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-.    ds : e
-.    ds 8 ss
-.    ds o a
-.    ds d- d\h'-1'\(ga
-.    ds D- D\h'-1'\(hy
-.    ds th \o'bp'
-.    ds Th \o'LP'
-.    ds ae ae
-.    ds Ae AE
-.\}
-.rm #[ #] #H #V #F C
-.\" ========================================================================
-.\"
-.IX Title "GEOD 1"
-.TH GEOD 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
-.\" way too many mistakes in technical documents.
-.if n .ad l
-.nh
-.SH "NAME"
-Geod \-\- perform geodesic calculations
-.SH "SYNOPSIS"
-.IX Header "SYNOPSIS"
-\&\fBGeod\fR [ \fB\-i\fR | \fB\-l\fR \fIlat1\fR \fIlon1\fR \fIazi1\fR ] [ \fB\-a\fR ] [ \fB\-e\fR \fIa\fR \fIf\fR ]
-[ \fB\-d\fR | \fB\-:\fR ] [ \fB\-b\fR ] [ \fB\-f\fR ] [ \fB\-p\fR \fIprec\fR ]
-[ \fB\-\-comment\-delimiter\fR \fIcommentdelim\fR ]
-[ \fB\-\-version\fR | \fB\-h\fR | \fB\-\-help\fR ]
-[ \fB\-\-input\-file\fR \fIinfile\fR | \fB\-\-input\-string\fR \fIinstring\fR ]
-[ \fB\-\-line\-separator\fR \fIlinesep\fR ]
-[ \fB\-\-output\-file\fR \fIoutfile\fR ]
-.SH "DESCRIPTION"
-.IX Header "DESCRIPTION"
-The shortest path between two points on the ellipsoid at (\fIlat1\fR,
-\&\fIlon1\fR) and (\fIlat2\fR, \fIlon2\fR) is called the geodesic.  Its length is
-\&\fIs12\fR and the geodesic from point 1 to point 2 has azimuths \fIazi1\fR and
-\&\fIazi2\fR at the two end points.
-.PP
-\&\fBGeod\fR operates in one of three modes:
-.IP "1." 4
-By default, \fBGeod\fR accepts lines on the standard input containing
-\&\fIlat1\fR \fIlon1\fR \fIazi1\fR \fIs12\fR and prints \fIlat2\fR \fIlon2\fR \fIazi2\fR
-on standard output.  This is the direct geodesic calculation.
-.IP "2." 4
-Command line arguments \fB\-l\fR \fIlat1\fR \fIlon1\fR \fIazi1\fR specify a geodesic line.
-\&\fBGeod\fR then accepts a sequence of \fIs12\fR values (one per line) on
-standard input and prints \fIlat2\fR \fIlon2\fR \fIazi2\fR for each.  This
-generates a sequence of points on a single geodesic.
-.IP "3." 4
-With the \fB\-i\fR command line argument, \fBGeod\fR performs the inverse
-geodesic calculation.  It reads lines containing \fIlat1\fR \fIlon1\fR \fIlat2\fR
-\&\fIlon2\fR and prints the corresponding values of \fIazi1\fR \fIazi2\fR \fIs12\fR.
-.SH "OPTIONS"
-.IX Header "OPTIONS"
-.IP "\fB\-i\fR" 4
-.IX Item "-i"
-perform an inverse geodesic calculation (see 3 above).
-.IP "\fB\-l\fR" 4
-.IX Item "-l"
-line mode (see 2 above); generate a sequence of points along the
-geodesic specified by \fIlat1\fR \fIlon1\fR \fIazi1\fR.
-.IP "\fB\-a\fR" 4
-.IX Item "-a"
-arc mode; on input \fIand\fR output \fIs12\fR is replaced by \fIa12\fR the arc
-length (in degrees) on the auxiliary sphere.  See \*(L"\s-1AUXILIARY\s0 \s-1SPHERE\s0\*(R".
-.IP "\fB\-e\fR" 4
-.IX Item "-e"
-specify the ellipsoid via \fIa\fR \fIf\fR; the equatorial radius is \fIa\fR and
-the flattening is \fIf\fR.  Setting \fIf\fR = 0 results in a sphere.  Specify
-\&\fIf\fR < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for \fIf\fR.  (Also, if \fIf\fR > 1, the flattening is set to
-1/\fIf\fR.)  By default, the \s-1WGS84\s0 ellipsoid is used, \fIa\fR = 6378137 m,
-\&\fIf\fR = 1/298.257223563.
-.IP "\fB\-d\fR" 4
-.IX Item "-d"
-output angles as degrees, minutes, seconds instead of decimal degrees.
-.IP "\fB\-:\fR" 4
-.IX Item "-:"
-like \fB\-d\fR, except use : as a separator instead of the d, ', and "
-delimiters.
-.IP "\fB\-b\fR" 4
-.IX Item "-b"
-report the \fIback\fR azimuth at point 2 instead of the forward azimuth.
-.IP "\fB\-f\fR" 4
-.IX Item "-f"
-full output; each line of output consists of 12 quantities: \fIlat1\fR
-\&\fIlon1\fR \fIazi1\fR \fIlat2\fR \fIlon2\fR \fIazi2\fR \fIs12\fR \fIa12\fR \fIm12\fR \fIM12\fR
-\&\fIM21\fR \fIS12\fR.  \fIa12\fR is described in \*(L"\s-1AUXILIARY\s0 \s-1SPHERE\s0\*(R".  The four
-quantities \fIm12\fR, \fIM12\fR, \fIM21\fR, and \fIS12\fR are described in
-\&\*(L"\s-1ADDITIONAL\s0 \s-1QUANTITIES\s0\*(R".
-.IP "\fB\-p\fR" 4
-.IX Item "-p"
-set the output precision to \fIprec\fR (default 3); \fIprec\fR is the
-precision relative to 1 m.  See \s-1PRECISION\s0.
-.IP "\fB\-\-comment\-delimiter\fR" 4
-.IX Item "--comment-delimiter"
-set the comment delimiter to \fIcommentdelim\fR (e.g., \*(L"#\*(R" or \*(L"//\*(R").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).
-.IP "\fB\-\-version\fR" 4
-.IX Item "--version"
-print version and exit.
-.IP "\fB\-h\fR" 4
-.IX Item "-h"
-print usage and exit.
-.IP "\fB\-\-help\fR" 4
-.IX Item "--help"
-print full documentation and exit.
-.IP "\fB\-\-input\-file\fR" 4
-.IX Item "--input-file"
-read input from the file \fIinfile\fR instead of from standard input; a file
-name of \*(L"\-\*(R" stands for standard input.
-.IP "\fB\-\-input\-string\fR" 4
-.IX Item "--input-string"
-read input from the string \fIinstring\fR instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in \fIinstring\fR are converted to newlines before the reading begins.
-.IP "\fB\-\-line\-separator\fR" 4
-.IX Item "--line-separator"
-set the line separator character to \fIlinesep\fR.  By default this is a
-semicolon.
-.IP "\fB\-\-output\-file\fR" 4
-.IX Item "--output-file"
-write output to the file \fIoutfile\fR instead of to standard output; a
-file name of \*(L"\-\*(R" stands for standard output.
-.SH "INPUT"
-.IX Header "INPUT"
-\&\fBGeod\fR measures all angles in degrees and all lengths (\fIs12\fR) in
-meters.  On input angles (latitude, longitude, azimuth, arc length) can
-be as decimal degrees or degrees (d), minutes ('), seconds (\*(L").  A
-decimal point can only appear in the least significant component and the
-designator (d, ', or \*(R") for this component is optional; thus \f(CW\*(C`40d30\*(C'\fR,
-\&\f(CW\*(C`40d30\*(Aq\*(C'\fR, \f(CW\*(C`40.5d\*(C'\fR, and \f(CW40.5\fR are all equivalent.  By default,
-latitude precedes longitude for each point; however on input either may
-be given first by appending (or prepending) \fIN\fR or \fIS\fR to the latitude
-and \fIE\fR or \fIW\fR to the longitude.  Azimuths are measured clockwise from
-north; however this may be overridden with \fIE\fR or \fIW\fR.
-.SH "AUXILIARY SPHERE"
-.IX Header "AUXILIARY SPHERE"
-Geodesics on the ellipsoid can be transferred to the \fIauxiliary sphere\fR
-on which the distance is measured in terms of the arc length \fIa12\fR
-(measured in degrees) instead of \fIs12\fR.  In terms of \fIa12\fR, 180
-degrees is the distance from one equator crossing to the next or from
-the minimum latitude to the maximum latitude.  Geodesics with \fIa12\fR
-> 180 degrees do not correspond to shortest paths.  With the \fB\-a\fR
-flag, \fIs12\fR (on both input and output) is replaced by \fIa12\fR.  The
-\&\fB\-a\fR flag does \fInot\fR affect the full output given by the \fB\-f\fR flag
-(which always includes both \fIs12\fR and \fIa12\fR).
-.SH "ADDITIONAL QUANTITIES"
-.IX Header "ADDITIONAL QUANTITIES"
-The \fB\-f\fR flag reports four additional quantities.
-.PP
-The reduced length of the geodesic, \fIm12\fR, is defined such that if the
-initial azimuth is perturbed by d\fIazi1\fR (radians) then the second point
-is displaced by \fIm12\fR d\fIazi1\fR in the direction perpendicular to the
-geodesic.  \fIm12\fR is given in meters.  On a curved surface the
-reduced length obeys a symmetry relation, \fIm12\fR + \fIm21\fR = 0.  On a
-flat surface, we have \fIm12\fR = \fIs12\fR.
-.PP
-\&\fIM12\fR and \fIM21\fR are geodesic scales.  If two geodesics are parallel at
-point 1 and separated by a small distance \fIdt\fR, then they are separated
-by a distance \fIM12\fR \fIdt\fR at point 2.  \fIM21\fR is defined similarly
-(with the geodesics being parallel to one another at point 2).  \fIM12\fR
-and \fIM21\fR are dimensionless quantities.  On a flat surface, we have
-\&\fIM12\fR = \fIM21\fR = 1.
-.PP
-If points 1, 2, and 3 lie on a single geodesic, then the following
-addition rules hold,
-\&\fIm13\fR = \fIm12\fR \fIM23\fR + \fIm23\fR \fIM21\fR,
-\&\fIM13\fR = \fIM12\fR \fIM23\fR \- (1 \- \fIM12\fR \fIM21\fR) \fIm23\fR / \fIm12\fR, and
-\&\fIM31\fR = \fIM32\fR \fIM21\fR \- (1 \- \fIM23\fR \fIM32\fR) \fIm12\fR / \fIm23\fR.
-.PP
-Finally, \fIS12\fR is the area between the geodesic from point 1 to point 2
-and the equator; i.e., it is the area, measured counter-clockwise, of
-the quadrilateral with corners (\fIlat1\fR,\fIlon1\fR), (0,\fIlon1\fR),
-(0,\fIlon2\fR), and (\fIlat2\fR,\fIlon2\fR).  It is given in meters^2.
-.SH "PRECISION"
-.IX Header "PRECISION"
-\&\fIprec\fR gives precision of the output with \fIprec\fR = 0 giving 1 m
-precision, \fIprec\fR = 3 giving 1 mm precision, etc.  \fIprec\fR is the
-number of digits after the decimal point for lengths.  For decimal
-degrees, the number of digits after the decimal point is 5 + \fIprec\fR.
-For \s-1DMS\s0 (degree, minute, seconds) output, the number of digits after the
-decimal point in the seconds component is 1 + \fIprec\fR.  The minimum
-value of \fIprec\fR is 0 and the maximum is 10.
-.SH "ERRORS"
-.IX Header "ERRORS"
-An illegal line of input will print an error message to standard output
-beginning with \f(CW\*(C`ERROR:\*(C'\fR and causes \fBGeod\fR to return an exit code of 1.
-However, an error does not cause \fBGeod\fR to terminate; following lines
-will be converted.
-.SH "EXAMPLES"
-.IX Header "EXAMPLES"
-Route from \s-1JFK\s0 Airport to Singapore Changi Airport:
-.PP
-.Vb 2
-\&   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
-\&   Geod \-i \-: \-p 0
-\&
-\&   003:18:29.9 177:29:09.2 15347628
-.Ve
-.PP
-Waypoints on the route at intervals of 2000km:
-.PP
-.Vb 2
-\&   for ((i = 0; i <= 16; i += 2)); do echo ${i}000000;done |
-\&   Geod \-l 40:38:23N 073:46:44W 003:18:29.9 \-: \-p 0
-\&
-\&   40:38:23.0N 073:46:44.0W 003:18:29.9
-\&   58:34:45.1N 071:49:36.7W 004:48:48.8
-\&   76:22:28.4N 065:32:17.8W 010:41:38.4
-\&   84:50:28.0N 075:04:39.2E 150:55:00.9
-\&   67:26:20.3N 098:00:51.2E 173:27:20.3
-\&   49:33:03.2N 101:06:52.6E 176:07:54.3
-\&   31:34:16.5N 102:30:46.3E 177:03:08.4
-\&   13:31:56.0N 103:26:50.7E 177:24:55.0
-\&   04:32:05.7S 104:14:48.7E 177:28:43.6
-.Ve
-.SH "SEE ALSO"
-.IX Header "SEE ALSO"
-The algorithms are described in C. F. F. Karney, \fIGeodesics on an
-ellipsoid of revolution\fR, Feb. 2011; preprint
-<http://arxiv.org/abs/1102.1215>.  See also C. F. F. Karney,
-\&\fIAlgorithms for geodesics\fR, Sept. 2011; preprint
-<http://arxiv.org/abs/1109.4448>.
-.SH "AUTHOR"
-.IX Header "AUTHOR"
-\&\fBGeod\fR was written by Charles Karney.
-.SH "HISTORY"
-.IX Header "HISTORY"
-\&\fBGeod\fR was added to GeographicLib, <http://geographiclib.sf.net>, in
-2009\-03.
diff --git a/man/Geod.1.html b/man/Geod.1.html
deleted file mode 100644
index e19892e..0000000
--- a/man/Geod.1.html
+++ /dev/null
@@ -1,316 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>Geod -- perform geodesic calculations</title>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<link rev="made" href="mailto:root at localhost" />
-</head>
-
-<body style="background-color: white">
-
-
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#input">INPUT</a></li>
-	<li><a href="#auxiliary_sphere">AUXILIARY SPHERE</a></li>
-	<li><a href="#additional_quantities">ADDITIONAL QUANTITIES</a></li>
-	<li><a href="#precision">PRECISION</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>Geod -- perform geodesic calculations</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>Geod</strong> [ <strong>-i</strong> | <strong>-l</strong> <em>lat1</em> <em>lon1</em> <em>azi1</em> ] [ <strong>-a</strong> ] [ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>-d</strong> | <strong>-:</strong> ] [ <strong>-b</strong> ] [ <strong>-f</strong> ] [ <strong>-p</strong> <em>prec</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>The shortest path between two points on the ellipsoid at (<em>lat1</em>,
-<em>lon1</em>) and (<em>lat2</em>, <em>lon2</em>) is called the geodesic.  Its length is
-<em>s12</em> and the geodesic from point 1 to point 2 has azimuths <em>azi1</em> and
-<em>azi2</em> at the two end points.</p>
-<p><strong>Geod</strong> operates in one of three modes:</p>
-<ol>
-<li>
-<p>By default, <strong>Geod</strong> accepts lines on the standard input containing
-<em>lat1</em> <em>lon1</em> <em>azi1</em> <em>s12</em> and prints <em>lat2</em> <em>lon2</em> <em>azi2</em>
-on standard output.  This is the direct geodesic calculation.</p>
-</li>
-<li>
-<p>Command line arguments <strong>-l</strong> <em>lat1</em> <em>lon1</em> <em>azi1</em> specify a geodesic line.
-<strong>Geod</strong> then accepts a sequence of <em>s12</em> values (one per line) on
-standard input and prints <em>lat2</em> <em>lon2</em> <em>azi2</em> for each.  This
-generates a sequence of points on a single geodesic.</p>
-</li>
-<li>
-<p>With the <strong>-i</strong> command line argument, <strong>Geod</strong> performs the inverse
-geodesic calculation.  It reads lines containing <em>lat1</em> <em>lon1</em> <em>lat2</em>
-<em>lon2</em> and prints the corresponding values of <em>azi1</em> <em>azi2</em> <em>s12</em>.</p>
-</li>
-</ol>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
-<dl>
-<dt><strong><a name="i" class="item"><strong>-i</strong></a></strong></dt>
-
-<dd>
-<p>perform an inverse geodesic calculation (see 3 above).</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
-
-<dd>
-<p>line mode (see 2 above); generate a sequence of points along the
-geodesic specified by <em>lat1</em> <em>lon1</em> <em>azi1</em>.</p>
-</dd>
-<dt><strong><a name="a" class="item"><strong>-a</strong></a></strong></dt>
-
-<dd>
-<p>arc mode; on input <em>and</em> output <em>s12</em> is replaced by <em>a12</em> the arc
-length (in degrees) on the auxiliary sphere.  See <a href="#auxiliary_sphere">AUXILIARY SPHERE</a>.</p>
-</dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
-
-<dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
-
-<dd>
-<p>output angles as degrees, minutes, seconds instead of decimal degrees.</p>
-</dd>
-<dt><strong><a name="__" class="item"><strong>-:</strong></a></strong></dt>
-
-<dd>
-<p>like <strong>-d</strong>, except use : as a separator instead of the d, ', and "
-delimiters.</p>
-</dd>
-<dt><strong><a name="b" class="item"><strong>-b</strong></a></strong></dt>
-
-<dd>
-<p>report the <em>back</em> azimuth at point 2 instead of the forward azimuth.</p>
-</dd>
-<dt><strong><a name="f" class="item"><strong>-f</strong></a></strong></dt>
-
-<dd>
-<p>full output; each line of output consists of 12 quantities: <em>lat1</em>
-<em>lon1</em> <em>azi1</em> <em>lat2</em> <em>lon2</em> <em>azi2</em> <em>s12</em> <em>a12</em> <em>m12</em> <em>M12</em>
-<em>M21</em> <em>S12</em>.  <em>a12</em> is described in <a href="#auxiliary_sphere">AUXILIARY SPHERE</a>.  The four
-quantities <em>m12</em>, <em>M12</em>, <em>M21</em>, and <em>S12</em> are described in
-<a href="#additional_quantities">ADDITIONAL QUANTITIES</a>.</p>
-</dd>
-<dt><strong><a name="p" class="item"><strong>-p</strong></a></strong></dt>
-
-<dd>
-<p>set the output precision to <em>prec</em> (default 3); <em>prec</em> is the
-precision relative to 1 m.  See <a href="#precision">PRECISION</a>.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
-
-<dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
-</dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
-
-<dd>
-<p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
-
-<dd>
-<p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
-
-<dd>
-<p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
-
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
-</dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
-<dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
-
-<dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
-</dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
-
-<dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
-</dd>
-</dl>
-<p>
-</p>
-<hr />
-<h1><a name="input">INPUT</a></h1>
-<p><strong>Geod</strong> measures all angles in degrees and all lengths (<em>s12</em>) in
-meters.  On input angles (latitude, longitude, azimuth, arc length) can
-be as decimal degrees or degrees (d), minutes ('), seconds (").  A
-decimal point can only appear in the least significant component and the
-designator (d, ', or ") for this component is optional; thus <code>40d30</code>,
-<code>40d30'</code>, <code>40.5d</code>, and <code>40.5</code> are all equivalent.  By default,
-latitude precedes longitude for each point; however on input either may
-be given first by appending (or prepending) <em>N</em> or <em>S</em> to the latitude
-and <em>E</em> or <em>W</em> to the longitude.  Azimuths are measured clockwise from
-north; however this may be overridden with <em>E</em> or <em>W</em>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="auxiliary_sphere">AUXILIARY SPHERE</a></h1>
-<p>Geodesics on the ellipsoid can be transferred to the <em>auxiliary sphere</em>
-on which the distance is measured in terms of the arc length <em>a12</em>
-(measured in degrees) instead of <em>s12</em>.  In terms of <em>a12</em>, 180
-degrees is the distance from one equator crossing to the next or from
-the minimum latitude to the maximum latitude.  Geodesics with <em>a12</em>
-> 180 degrees do not correspond to shortest paths.  With the <strong>-a</strong>
-flag, <em>s12</em> (on both input and output) is replaced by <em>a12</em>.  The
-<strong>-a</strong> flag does <em>not</em> affect the full output given by the <strong>-f</strong> flag
-(which always includes both <em>s12</em> and <em>a12</em>).</p>
-<p>
-</p>
-<hr />
-<h1><a name="additional_quantities">ADDITIONAL QUANTITIES</a></h1>
-<p>The <strong>-f</strong> flag reports four additional quantities.</p>
-<p>The reduced length of the geodesic, <em>m12</em>, is defined such that if the
-initial azimuth is perturbed by d<em>azi1</em> (radians) then the second point
-is displaced by <em>m12</em> d<em>azi1</em> in the direction perpendicular to the
-geodesic.  <em>m12</em> is given in meters.  On a curved surface the
-reduced length obeys a symmetry relation, <em>m12</em> + <em>m21</em> = 0.  On a
-flat surface, we have <em>m12</em> = <em>s12</em>.</p>
-<p><em>M12</em> and <em>M21</em> are geodesic scales.  If two geodesics are parallel at
-point 1 and separated by a small distance <em>dt</em>, then they are separated
-by a distance <em>M12</em> <em>dt</em> at point 2.  <em>M21</em> is defined similarly
-(with the geodesics being parallel to one another at point 2).  <em>M12</em>
-and <em>M21</em> are dimensionless quantities.  On a flat surface, we have
-<em>M12</em> = <em>M21</em> = 1.</p>
-<p>If points 1, 2, and 3 lie on a single geodesic, then the following
-addition rules hold,
-<em>m13</em> = <em>m12</em> <em>M23</em> + <em>m23</em> <em>M21</em>,
-<em>M13</em> = <em>M12</em> <em>M23</em> - (1 - <em>M12</em> <em>M21</em>) <em>m23</em> / <em>m12</em>, and
-<em>M31</em> = <em>M32</em> <em>M21</em> - (1 - <em>M23</em> <em>M32</em>) <em>m12</em> / <em>m23</em>.</p>
-<p>Finally, <em>S12</em> is the area between the geodesic from point 1 to point 2
-and the equator; i.e., it is the area, measured counter-clockwise, of
-the quadrilateral with corners (<em>lat1</em>,<em>lon1</em>), (0,<em>lon1</em>),
-(0,<em>lon2</em>), and (<em>lat2</em>,<em>lon2</em>).  It is given in meters^2.</p>
-<p>
-</p>
-<hr />
-<h1><a name="precision">PRECISION</a></h1>
-<p><em>prec</em> gives precision of the output with <em>prec</em> = 0 giving 1 m
-precision, <em>prec</em> = 3 giving 1 mm precision, etc.  <em>prec</em> is the
-number of digits after the decimal point for lengths.  For decimal
-degrees, the number of digits after the decimal point is 5 + <em>prec</em>.
-For DMS (degree, minute, seconds) output, the number of digits after the
-decimal point in the seconds component is 1 + <em>prec</em>.  The minimum
-value of <em>prec</em> is 0 and the maximum is 10.</p>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>Geod</strong> to return an exit code of 1.
-However, an error does not cause <strong>Geod</strong> to terminate; following lines
-will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<p>Route from JFK Airport to Singapore Changi Airport:</p>
-<pre>
-   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
-   Geod -i -: -p 0</pre>
-<pre>
-   003:18:29.9 177:29:09.2 15347628</pre>
-<p>Waypoints on the route at intervals of 2000km:</p>
-<pre>
-   for ((i = 0; i <= 16; i += 2)); do echo ${i}000000;done |
-   Geod -l 40:38:23N 073:46:44W 003:18:29.9 -: -p 0</pre>
-<pre>
-   40:38:23.0N 073:46:44.0W 003:18:29.9
-   58:34:45.1N 071:49:36.7W 004:48:48.8
-   76:22:28.4N 065:32:17.8W 010:41:38.4
-   84:50:28.0N 075:04:39.2E 150:55:00.9
-   67:26:20.3N 098:00:51.2E 173:27:20.3
-   49:33:03.2N 101:06:52.6E 176:07:54.3
-   31:34:16.5N 102:30:46.3E 177:03:08.4
-   13:31:56.0N 103:26:50.7E 177:24:55.0
-   04:32:05.7S 104:14:48.7E 177:28:43.6</pre>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The algorithms are described in C. F. F. Karney, <em>Geodesics on an
-ellipsoid of revolution</em>, Feb. 2011; preprint
-<a href="http://arxiv.org/abs/1102.1215">http://arxiv.org/abs/1102.1215</a>.  See also C. F. F. Karney,
-<em>Algorithms for geodesics</em>, Sept. 2011; preprint
-<a href="http://arxiv.org/abs/1109.4448">http://arxiv.org/abs/1109.4448</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>Geod</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>Geod</strong> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in
-2009-03.</p>
-
-</body>
-
-</html>
diff --git a/man/Geod.pod b/man/Geod.pod
deleted file mode 100644
index 521ed2b..0000000
--- a/man/Geod.pod
+++ /dev/null
@@ -1,255 +0,0 @@
-=for comment $Id: ac7d3addc8d0f5133f329b9818891b021e90938f $
-
-=head1 NAME
-
-Geod -- perform geodesic calculations
-
-=head1 SYNOPSIS
-
-B<Geod> [ B<-i> | B<-l> I<lat1> I<lon1> I<azi1> ] [ B<-a> ] [ B<-e> I<a> I<f> ]
-[ B<-d> | B<-:> ] [ B<-b> ] [ B<-f> ] [ B<-p> I<prec> ]
-[ B<--comment-delimiter> I<commentdelim> ]
-[ B<--version> | B<-h> | B<--help> ]
-[ B<--input-file> I<infile> | B<--input-string> I<instring> ]
-[ B<--line-separator> I<linesep> ]
-[ B<--output-file> I<outfile> ]
-
-=head1 DESCRIPTION
-
-The shortest path between two points on the ellipsoid at (I<lat1>,
-I<lon1>) and (I<lat2>, I<lon2>) is called the geodesic.  Its length is
-I<s12> and the geodesic from point 1 to point 2 has azimuths I<azi1> and
-I<azi2> at the two end points.
-
-B<Geod> operates in one of three modes:
-
-=over
-
-=item 1.
-
-By default, B<Geod> accepts lines on the standard input containing
-I<lat1> I<lon1> I<azi1> I<s12> and prints I<lat2> I<lon2> I<azi2>
-on standard output.  This is the direct geodesic calculation.
-
-=item 2.
-
-Command line arguments B<-l> I<lat1> I<lon1> I<azi1> specify a geodesic line.
-B<Geod> then accepts a sequence of I<s12> values (one per line) on
-standard input and prints I<lat2> I<lon2> I<azi2> for each.  This
-generates a sequence of points on a single geodesic.
-
-=item 3.
-
-With the B<-i> command line argument, B<Geod> performs the inverse
-geodesic calculation.  It reads lines containing I<lat1> I<lon1> I<lat2>
-I<lon2> and prints the corresponding values of I<azi1> I<azi2> I<s12>.
-
-=back
-
-=head1 OPTIONS
-
-=over
-
-=item B<-i>
-
-perform an inverse geodesic calculation (see 3 above).
-
-=item B<-l>
-
-line mode (see 2 above); generate a sequence of points along the
-geodesic specified by I<lat1> I<lon1> I<azi1>.
-
-=item B<-a>
-
-arc mode; on input I<and> output I<s12> is replaced by I<a12> the arc
-length (in degrees) on the auxiliary sphere.  See L<AUXILIARY SPHERE>.
-
-=item B<-e>
-
-specify the ellipsoid via I<a> I<f>; the equatorial radius is I<a> and
-the flattening is I<f>.  Setting I<f> = 0 results in a sphere.  Specify
-I<f> E<lt> 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for I<f>.  (Also, if I<f> E<gt> 1, the flattening is set to
-1/I<f>.)  By default, the WGS84 ellipsoid is used, I<a> = 6378137 m,
-I<f> = 1/298.257223563.
-
-=item B<-d>
-
-output angles as degrees, minutes, seconds instead of decimal degrees.
-
-=item B<-:>
-
-like B<-d>, except use : as a separator instead of the d, ', and "
-delimiters.
-
-=item B<-b>
-
-report the I<back> azimuth at point 2 instead of the forward azimuth.
-
-=item B<-f>
-
-full output; each line of output consists of 12 quantities: I<lat1>
-I<lon1> I<azi1> I<lat2> I<lon2> I<azi2> I<s12> I<a12> I<m12> I<M12>
-I<M21> I<S12>.  I<a12> is described in L<AUXILIARY SPHERE>.  The four
-quantities I<m12>, I<M12>, I<M21>, and I<S12> are described in
-L<ADDITIONAL QUANTITIES>.
-
-=item B<-p>
-
-set the output precision to I<prec> (default 3); I<prec> is the
-precision relative to 1 m.  See L<PRECISION|precision>.
-
-=item B<--comment-delimiter>
-
-set the comment delimiter to I<commentdelim> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).
-
-=item B<--version>
-
-print version and exit.
-
-=item B<-h>
-
-print usage and exit.
-
-=item B<--help>
-
-print full documentation and exit.
-
-=item B<--input-file>
-
-read input from the file I<infile> instead of from standard input; a file
-name of "-" stands for standard input.
-
-=item B<--input-string>
-
-read input from the string I<instring> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in I<instring> are converted to newlines before the reading begins.
-
-=item B<--line-separator>
-
-set the line separator character to I<linesep>.  By default this is a
-semicolon.
-
-=item B<--output-file>
-
-write output to the file I<outfile> instead of to standard output; a
-file name of "-" stands for standard output.
-
-=back
-
-=head1 INPUT
-
-B<Geod> measures all angles in degrees and all lengths (I<s12>) in
-meters.  On input angles (latitude, longitude, azimuth, arc length) can
-be as decimal degrees or degrees (d), minutes ('), seconds (").  A
-decimal point can only appear in the least significant component and the
-designator (d, ', or ") for this component is optional; thus C<40d30>,
-C<40d30'>, C<40.5d>, and C<40.5> are all equivalent.  By default,
-latitude precedes longitude for each point; however on input either may
-be given first by appending (or prepending) I<N> or I<S> to the latitude
-and I<E> or I<W> to the longitude.  Azimuths are measured clockwise from
-north; however this may be overridden with I<E> or I<W>.
-
-=head1 AUXILIARY SPHERE
-
-Geodesics on the ellipsoid can be transferred to the I<auxiliary sphere>
-on which the distance is measured in terms of the arc length I<a12>
-(measured in degrees) instead of I<s12>.  In terms of I<a12>, 180
-degrees is the distance from one equator crossing to the next or from
-the minimum latitude to the maximum latitude.  Geodesics with I<a12>
-E<gt> 180 degrees do not correspond to shortest paths.  With the B<-a>
-flag, I<s12> (on both input and output) is replaced by I<a12>.  The
-B<-a> flag does I<not> affect the full output given by the B<-f> flag
-(which always includes both I<s12> and I<a12>).
-
-=head1 ADDITIONAL QUANTITIES
-
-The B<-f> flag reports four additional quantities.
-
-The reduced length of the geodesic, I<m12>, is defined such that if the
-initial azimuth is perturbed by dI<azi1> (radians) then the second point
-is displaced by I<m12> dI<azi1> in the direction perpendicular to the
-geodesic.  I<m12> is given in meters.  On a curved surface the
-reduced length obeys a symmetry relation, I<m12> + I<m21> = 0.  On a
-flat surface, we have I<m12> = I<s12>.
-
-I<M12> and I<M21> are geodesic scales.  If two geodesics are parallel at
-point 1 and separated by a small distance I<dt>, then they are separated
-by a distance I<M12> I<dt> at point 2.  I<M21> is defined similarly
-(with the geodesics being parallel to one another at point 2).  I<M12>
-and I<M21> are dimensionless quantities.  On a flat surface, we have
-I<M12> = I<M21> = 1.
-
-If points 1, 2, and 3 lie on a single geodesic, then the following
-addition rules hold,
-I<m13> = I<m12> I<M23> + I<m23> I<M21>,
-I<M13> = I<M12> I<M23> - (1 - I<M12> I<M21>) I<m23> / I<m12>, and
-I<M31> = I<M32> I<M21> - (1 - I<M23> I<M32>) I<m12> / I<m23>.
-
-Finally, I<S12> is the area between the geodesic from point 1 to point 2
-and the equator; i.e., it is the area, measured counter-clockwise, of
-the quadrilateral with corners (I<lat1>,I<lon1>), (0,I<lon1>),
-(0,I<lon2>), and (I<lat2>,I<lon2>).  It is given in meters^2.
-
-=head1 PRECISION
-
-I<prec> gives precision of the output with I<prec> = 0 giving 1 m
-precision, I<prec> = 3 giving 1 mm precision, etc.  I<prec> is the
-number of digits after the decimal point for lengths.  For decimal
-degrees, the number of digits after the decimal point is 5 + I<prec>.
-For DMS (degree, minute, seconds) output, the number of digits after the
-decimal point in the seconds component is 1 + I<prec>.  The minimum
-value of I<prec> is 0 and the maximum is 10.
-
-=head1 ERRORS
-
-An illegal line of input will print an error message to standard output
-beginning with C<ERROR:> and causes B<Geod> to return an exit code of 1.
-However, an error does not cause B<Geod> to terminate; following lines
-will be converted.
-
-=head1 EXAMPLES
-
-Route from JFK Airport to Singapore Changi Airport:
-
-   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
-   Geod -i -: -p 0
-
-   003:18:29.9 177:29:09.2 15347628
-
-Waypoints on the route at intervals of 2000km:
-
-   for ((i = 0; i <= 16; i += 2)); do echo ${i}000000;done |
-   Geod -l 40:38:23N 073:46:44W 003:18:29.9 -: -p 0
-
-   40:38:23.0N 073:46:44.0W 003:18:29.9
-   58:34:45.1N 071:49:36.7W 004:48:48.8
-   76:22:28.4N 065:32:17.8W 010:41:38.4
-   84:50:28.0N 075:04:39.2E 150:55:00.9
-   67:26:20.3N 098:00:51.2E 173:27:20.3
-   49:33:03.2N 101:06:52.6E 176:07:54.3
-   31:34:16.5N 102:30:46.3E 177:03:08.4
-   13:31:56.0N 103:26:50.7E 177:24:55.0
-   04:32:05.7S 104:14:48.7E 177:28:43.6
-
-=head1 SEE ALSO
-
-The algorithms are described in C. F. F. Karney, I<Geodesics on an
-ellipsoid of revolution>, Feb. 2011; preprint
-L<http://arxiv.org/abs/1102.1215>.  See also C. F. F. Karney,
-I<Algorithms for geodesics>, Sept. 2011; preprint
-L<http://arxiv.org/abs/1109.4448>.
-
-=head1 AUTHOR
-
-B<Geod> was written by Charles Karney.
-
-=head1 HISTORY
-
-B<Geod> was added to GeographicLib, L<http://geographiclib.sf.net>, in
-2009-03.
diff --git a/man/Geod.usage b/man/Geod.usage
deleted file mode 100644
index 3dde2d3..0000000
--- a/man/Geod.usage
+++ /dev/null
@@ -1,209 +0,0 @@
-int usage(int retval, bool brief) {
-  if (brief)
-    ( retval ? std::cerr : std::cout ) << "Usage:\n"
-"    Geod [ -i | -l lat1 lon1 azi1 ] [ -a ] [ -e a f ] [ -d | -: ] [ -b ] [\n"
-"    -f ] [ -p prec ] [ --comment-delimiter commentdelim ] [ --version | -h\n"
-"    | --help ] [ --input-file infile | --input-string instring ] [\n"
-"    --line-separator linesep ] [ --output-file outfile ]\n"
-"\n"
-"For full documentation type:\n"
-"    Geod --help\n"
-"or visit:\n"
-"    http://geographiclib.sf.net/html/Geod.1.html\n";
-  else
-    ( retval ? std::cerr : std::cout ) << "Man page:\n"
-"NAME\n"
-"       Geod -- perform geodesic calculations\n"
-"\n"
-"SYNOPSIS\n"
-"       Geod [ -i | -l lat1 lon1 azi1 ] [ -a ] [ -e a f ] [ -d | -: ] [ -b ] [\n"
-"       -f ] [ -p prec ] [ --comment-delimiter commentdelim ] [ --version | -h\n"
-"       | --help ] [ --input-file infile | --input-string instring ] [\n"
-"       --line-separator linesep ] [ --output-file outfile ]\n"
-"\n"
-"DESCRIPTION\n"
-"       The shortest path between two points on the ellipsoid at (lat1, lon1)\n"
-"       and (lat2, lon2) is called the geodesic.  Its length is s12 and the\n"
-"       geodesic from point 1 to point 2 has azimuths azi1 and azi2 at the two\n"
-"       end points.\n"
-"\n"
-"       Geod operates in one of three modes:\n"
-"\n"
-"       1.  By default, Geod accepts lines on the standard input containing\n"
-"           lat1 lon1 azi1 s12 and prints lat2 lon2 azi2 on standard output.\n"
-"           This is the direct geodesic calculation.\n"
-"\n"
-"       2.  Command line arguments -l lat1 lon1 azi1 specify a geodesic line.\n"
-"           Geod then accepts a sequence of s12 values (one per line) on\n"
-"           standard input and prints lat2 lon2 azi2 for each.  This generates\n"
-"           a sequence of points on a single geodesic.\n"
-"\n"
-"       3.  With the -i command line argument, Geod performs the inverse\n"
-"           geodesic calculation.  It reads lines containing lat1 lon1 lat2\n"
-"           lon2 and prints the corresponding values of azi1 azi2 s12.\n"
-"\n"
-"OPTIONS\n"
-"       -i  perform an inverse geodesic calculation (see 3 above).\n"
-"\n"
-"       -l  line mode (see 2 above); generate a sequence of points along the\n"
-"           geodesic specified by lat1 lon1 azi1.\n"
-"\n"
-"       -a  arc mode; on input and output s12 is replaced by a12 the arc length\n"
-"           (in degrees) on the auxiliary sphere.  See \"AUXILIARY SPHERE\".\n"
-"\n"
-"       -e  specify the ellipsoid via a f; the equatorial radius is a and the\n"
-"           flattening is f.  Setting f = 0 results in a sphere.  Specify f < 0\n"
-"           for a prolate ellipsoid.  A simple fraction, e.g., 1/297, is\n"
-"           allowed for f.  (Also, if f > 1, the flattening is set to 1/f.)  By\n"
-"           default, the WGS84 ellipsoid is used, a = 6378137 m, f =\n"
-"           1/298.257223563.\n"
-"\n"
-"       -d  output angles as degrees, minutes, seconds instead of decimal\n"
-"           degrees.\n"
-"\n"
-"       -:  like -d, except use : as a separator instead of the d, ', and \"\n"
-"           delimiters.\n"
-"\n"
-"       -b  report the back azimuth at point 2 instead of the forward azimuth.\n"
-"\n"
-"       -f  full output; each line of output consists of 12 quantities: lat1\n"
-"           lon1 azi1 lat2 lon2 azi2 s12 a12 m12 M12 M21 S12.  a12 is described\n"
-"           in \"AUXILIARY SPHERE\".  The four quantities m12, M12, M21, and S12\n"
-"           are described in \"ADDITIONAL QUANTITIES\".\n"
-"\n"
-"       -p  set the output precision to prec (default 3); prec is the precision\n"
-"           relative to 1 m.  See PRECISION.\n"
-"\n"
-"       --comment-delimiter\n"
-"           set the comment delimiter to commentdelim (e.g., \"#\" or \"//\").  If\n"
-"           set, the input lines will be scanned for this delimiter and, if\n"
-"           found, the delimiter and the rest of the line will be removed prior\n"
-"           to processing and subsequently appended to the output line\n"
-"           (separated by a space).\n"
-"\n"
-"       --version\n"
-"           print version and exit.\n"
-"\n"
-"       -h  print usage and exit.\n"
-"\n"
-"       --help\n"
-"           print full documentation and exit.\n"
-"\n"
-"       --input-file\n"
-"           read input from the file infile instead of from standard input; a\n"
-"           file name of \"-\" stands for standard input.\n"
-"\n"
-"       --input-string\n"
-"           read input from the string instring instead of from standard input.\n"
-"           All occurrences of the line separator character (default is a\n"
-"           semicolon) in instring are converted to newlines before the reading\n"
-"           begins.\n"
-"\n"
-"       --line-separator\n"
-"           set the line separator character to linesep.  By default this is a\n"
-"           semicolon.\n"
-"\n"
-"       --output-file\n"
-"           write output to the file outfile instead of to standard output; a\n"
-"           file name of \"-\" stands for standard output.\n"
-"\n"
-"INPUT\n"
-"       Geod measures all angles in degrees and all lengths (s12) in meters.\n"
-"       On input angles (latitude, longitude, azimuth, arc length) can be as\n"
-"       decimal degrees or degrees (d), minutes ('), seconds (\").  A decimal\n"
-"       point can only appear in the least significant component and the\n"
-"       designator (d, ', or \") for this component is optional; thus \"40d30\",\n"
-"       \"40d30'\", \"40.5d\", and 40.5 are all equivalent.  By default, latitude\n"
-"       precedes longitude for each point; however on input either may be given\n"
-"       first by appending (or prepending) N or S to the latitude and E or W to\n"
-"       the longitude.  Azimuths are measured clockwise from north; however\n"
-"       this may be overridden with E or W.\n"
-"\n"
-"AUXILIARY SPHERE\n"
-"       Geodesics on the ellipsoid can be transferred to the auxiliary sphere\n"
-"       on which the distance is measured in terms of the arc length a12\n"
-"       (measured in degrees) instead of s12.  In terms of a12, 180 degrees is\n"
-"       the distance from one equator crossing to the next or from the minimum\n"
-"       latitude to the maximum latitude.  Geodesics with a12 > 180 degrees do\n"
-"       not correspond to shortest paths.  With the -a flag, s12 (on both input\n"
-"       and output) is replaced by a12.  The -a flag does not affect the full\n"
-"       output given by the -f flag (which always includes both s12 and a12).\n"
-"\n"
-"ADDITIONAL QUANTITIES\n"
-"       The -f flag reports four additional quantities.\n"
-"\n"
-"       The reduced length of the geodesic, m12, is defined such that if the\n"
-"       initial azimuth is perturbed by dazi1 (radians) then the second point\n"
-"       is displaced by m12 dazi1 in the direction perpendicular to the\n"
-"       geodesic.  m12 is given in meters.  On a curved surface the reduced\n"
-"       length obeys a symmetry relation, m12 + m21 = 0.  On a flat surface, we\n"
-"       have m12 = s12.\n"
-"\n"
-"       M12 and M21 are geodesic scales.  If two geodesics are parallel at\n"
-"       point 1 and separated by a small distance dt, then they are separated\n"
-"       by a distance M12 dt at point 2.  M21 is defined similarly (with the\n"
-"       geodesics being parallel to one another at point 2).  M12 and M21 are\n"
-"       dimensionless quantities.  On a flat surface, we have M12 = M21 = 1.\n"
-"\n"
-"       If points 1, 2, and 3 lie on a single geodesic, then the following\n"
-"       addition rules hold, m13 = m12 M23 + m23 M21, M13 = M12 M23 - (1 - M12\n"
-"       M21) m23 / m12, and M31 = M32 M21 - (1 - M23 M32) m12 / m23.\n"
-"\n"
-"       Finally, S12 is the area between the geodesic from point 1 to point 2\n"
-"       and the equator; i.e., it is the area, measured counter-clockwise, of\n"
-"       the quadrilateral with corners (lat1,lon1), (0,lon1), (0,lon2), and\n"
-"       (lat2,lon2).  It is given in meters^2.\n"
-"\n"
-"PRECISION\n"
-"       prec gives precision of the output with prec = 0 giving 1 m precision,\n"
-"       prec = 3 giving 1 mm precision, etc.  prec is the number of digits\n"
-"       after the decimal point for lengths.  For decimal degrees, the number\n"
-"       of digits after the decimal point is 5 + prec.  For DMS (degree,\n"
-"       minute, seconds) output, the number of digits after the decimal point\n"
-"       in the seconds component is 1 + prec.  The minimum value of prec is 0\n"
-"       and the maximum is 10.\n"
-"\n"
-"ERRORS\n"
-"       An illegal line of input will print an error message to standard output\n"
-"       beginning with \"ERROR:\" and causes Geod to return an exit code of 1.\n"
-"       However, an error does not cause Geod to terminate; following lines\n"
-"       will be converted.\n"
-"\n"
-"EXAMPLES\n"
-"       Route from JFK Airport to Singapore Changi Airport:\n"
-"\n"
-"          echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |\n"
-"          Geod -i -: -p 0\n"
-"\n"
-"          003:18:29.9 177:29:09.2 15347628\n"
-"\n"
-"       Waypoints on the route at intervals of 2000km:\n"
-"\n"
-"          for ((i = 0; i <= 16; i += 2)); do echo ${i}000000;done |\n"
-"          Geod -l 40:38:23N 073:46:44W 003:18:29.9 -: -p 0\n"
-"\n"
-"          40:38:23.0N 073:46:44.0W 003:18:29.9\n"
-"          58:34:45.1N 071:49:36.7W 004:48:48.8\n"
-"          76:22:28.4N 065:32:17.8W 010:41:38.4\n"
-"          84:50:28.0N 075:04:39.2E 150:55:00.9\n"
-"          67:26:20.3N 098:00:51.2E 173:27:20.3\n"
-"          49:33:03.2N 101:06:52.6E 176:07:54.3\n"
-"          31:34:16.5N 102:30:46.3E 177:03:08.4\n"
-"          13:31:56.0N 103:26:50.7E 177:24:55.0\n"
-"          04:32:05.7S 104:14:48.7E 177:28:43.6\n"
-"\n"
-"SEE ALSO\n"
-"       The algorithms are described in C. F. F. Karney, Geodesics on an\n"
-"       ellipsoid of revolution, Feb. 2011; preprint\n"
-"       <http://arxiv.org/abs/1102.1215>.  See also C. F. F. Karney, Algorithms\n"
-"       for geodesics, Sept. 2011; preprint <http://arxiv.org/abs/1109.4448>.\n"
-"\n"
-"AUTHOR\n"
-"       Geod was written by Charles Karney.\n"
-"\n"
-"HISTORY\n"
-"       Geod was added to GeographicLib, <http://geographiclib.sf.net>, in\n"
-"       2009-03.\n"
-;
-    return retval;
-}
diff --git a/man/GeodSolve.1 b/man/GeodSolve.1
new file mode 100644
index 0000000..06ca388
--- /dev/null
+++ b/man/GeodSolve.1
@@ -0,0 +1,427 @@
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.el \{\
+.    de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GEODSOLVE 1"
+.TH GEODSOLVE 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+GeodSolve \-\- perform geodesic calculations
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBGeodSolve\fR [ \fB\-i\fR | \fB\-l\fR \fIlat1\fR \fIlon1\fR \fIazi1\fR ] [ \fB\-a\fR ]
+[ \fB\-e\fR \fIa\fR \fIf\fR ]
+[ \fB\-d\fR | \fB\-:\fR ] [ \fB\-b\fR ] [ \fB\-f\fR ] [ \fB\-p\fR \fIprec\fR ] [ \fB\-E\fR ]
+[ \fB\-\-comment\-delimiter\fR \fIcommentdelim\fR ]
+[ \fB\-\-version\fR | \fB\-h\fR | \fB\-\-help\fR ]
+[ \fB\-\-input\-file\fR \fIinfile\fR | \fB\-\-input\-string\fR \fIinstring\fR ]
+[ \fB\-\-line\-separator\fR \fIlinesep\fR ]
+[ \fB\-\-output\-file\fR \fIoutfile\fR ]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The shortest path between two points on the ellipsoid at (\fIlat1\fR,
+\&\fIlon1\fR) and (\fIlat2\fR, \fIlon2\fR) is called the geodesic.  Its length is
+\&\fIs12\fR and the geodesic from point 1 to point 2 has forward azimuths
+\&\fIazi1\fR and \fIazi2\fR at the two end points.
+.PP
+\&\fBGeodSolve\fR operates in one of three modes:
+.IP "1." 4
+By default, \fBGeodSolve\fR accepts lines on the standard input containing
+\&\fIlat1\fR \fIlon1\fR \fIazi1\fR \fIs12\fR and prints \fIlat2\fR \fIlon2\fR \fIazi2\fR
+on standard output.  This is the direct geodesic calculation.
+.IP "2." 4
+Command line arguments \fB\-l\fR \fIlat1\fR \fIlon1\fR \fIazi1\fR specify a geodesic
+line.  \fBGeodSolve\fR then accepts a sequence of \fIs12\fR values (one per
+line) on standard input and prints \fIlat2\fR \fIlon2\fR \fIazi2\fR for each.
+This generates a sequence of points on a single geodesic.
+.IP "3." 4
+With the \fB\-i\fR command line argument, \fBGeodSolve\fR performs the inverse
+geodesic calculation.  It reads lines containing \fIlat1\fR \fIlon1\fR \fIlat2\fR
+\&\fIlon2\fR and prints the corresponding values of \fIazi1\fR \fIazi2\fR \fIs12\fR.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+perform an inverse geodesic calculation (see 3 above).
+.IP "\fB\-l\fR" 4
+.IX Item "-l"
+line mode (see 2 above); generate a sequence of points along the
+geodesic specified by \fIlat1\fR \fIlon1\fR \fIazi1\fR.
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+arc mode; on input \fIand\fR output \fIs12\fR is replaced by \fIa12\fR the arc
+length (in degrees) on the auxiliary sphere.  See \*(L"\s-1AUXILIARY\s0 \s-1SPHERE\s0\*(R".
+.IP "\fB\-e\fR" 4
+.IX Item "-e"
+specify the ellipsoid via \fIa\fR \fIf\fR; the equatorial radius is \fIa\fR and
+the flattening is \fIf\fR.  Setting \fIf\fR = 0 results in a sphere.  Specify
+\&\fIf\fR < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
+is allowed for \fIf\fR.  (Also, if \fIf\fR > 1, the flattening is set to
+1/\fIf\fR.)  By default, the \s-1WGS84\s0 ellipsoid is used, \fIa\fR = 6378137 m,
+\&\fIf\fR = 1/298.257223563.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+output angles as degrees, minutes, seconds instead of decimal degrees.
+.IP "\fB\-:\fR" 4
+.IX Item "-:"
+like \fB\-d\fR, except use : as a separator instead of the d, ', and "
+delimiters.
+.IP "\fB\-b\fR" 4
+.IX Item "-b"
+report the \fIback\fR azimuth at point 2 instead of the forward azimuth.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+full output; each line of output consists of 12 quantities: \fIlat1\fR
+\&\fIlon1\fR \fIazi1\fR \fIlat2\fR \fIlon2\fR \fIazi2\fR \fIs12\fR \fIa12\fR \fIm12\fR \fIM12\fR
+\&\fIM21\fR \fIS12\fR.  \fIa12\fR is described in \*(L"\s-1AUXILIARY\s0 \s-1SPHERE\s0\*(R".  The four
+quantities \fIm12\fR, \fIM12\fR, \fIM21\fR, and \fIS12\fR are described in
+\&\*(L"\s-1ADDITIONAL\s0 \s-1QUANTITIES\s0\*(R".
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+set the output precision to \fIprec\fR (default 3); \fIprec\fR is the
+precision relative to 1 m.  See \*(L"\s-1PRECISION\s0\*(R".
+.IP "\fB\-E\fR" 4
+.IX Item "-E"
+use \*(L"exact\*(R" algorithms (based on elliptic integrals) for the geodesic
+calculations.  These are more accurate than the (default) series
+expansions for |\fIf\fR| > 0.02.
+.IP "\fB\-\-comment\-delimiter\fR" 4
+.IX Item "--comment-delimiter"
+set the comment delimiter to \fIcommentdelim\fR (e.g., \*(L"#\*(R" or \*(L"//\*(R").  If
+set, the input lines will be scanned for this delimiter and, if found,
+the delimiter and the rest of the line will be removed prior to
+processing and subsequently appended to the output line (separated by a
+space).
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+print version and exit.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+print usage and exit.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+print full documentation and exit.
+.IP "\fB\-\-input\-file\fR" 4
+.IX Item "--input-file"
+read input from the file \fIinfile\fR instead of from standard input; a file
+name of \*(L"\-\*(R" stands for standard input.
+.IP "\fB\-\-input\-string\fR" 4
+.IX Item "--input-string"
+read input from the string \fIinstring\fR instead of from standard input.
+All occurrences of the line separator character (default is a semicolon)
+in \fIinstring\fR are converted to newlines before the reading begins.
+.IP "\fB\-\-line\-separator\fR" 4
+.IX Item "--line-separator"
+set the line separator character to \fIlinesep\fR.  By default this is a
+semicolon.
+.IP "\fB\-\-output\-file\fR" 4
+.IX Item "--output-file"
+write output to the file \fIoutfile\fR instead of to standard output; a
+file name of \*(L"\-\*(R" stands for standard output.
+.SH "INPUT"
+.IX Header "INPUT"
+\&\fBGeodSolve\fR measures all angles in degrees and all lengths (\fIs12\fR) in
+meters.  On input angles (latitude, longitude, azimuth, arc length) can
+be as decimal degrees or degrees (d), minutes ('), seconds (\*(L").  A
+decimal point can only appear in the least significant component and the
+designator (d, ', or \*(R") for this component is optional; thus \f(CW\*(C`40d30\*(C'\fR,
+\&\f(CW\*(C`40d30\*(Aq\*(C'\fR, \f(CW\*(C`40.5d\*(C'\fR, and \f(CW40.5\fR are all equivalent.  By default,
+latitude precedes longitude for each point; however on input either may
+be given first by appending (or prepending) \fIN\fR or \fIS\fR to the latitude
+and \fIE\fR or \fIW\fR to the longitude.  Azimuths are measured clockwise from
+north; however this may be overridden with \fIE\fR or \fIW\fR.
+.PP
+See the \f(CW\*(C`QUOTING\*(C'\fR section of \fIGeoConvert\fR\|(1) for how to quote the \s-1DMS\s0
+designators ' and ".
+.SH "AUXILIARY SPHERE"
+.IX Header "AUXILIARY SPHERE"
+Geodesics on the ellipsoid can be transferred to the \fIauxiliary sphere\fR
+on which the distance is measured in terms of the arc length \fIa12\fR
+(measured in degrees) instead of \fIs12\fR.  In terms of \fIa12\fR, 180
+degrees is the distance from one equator crossing to the next or from
+the minimum latitude to the maximum latitude.  Geodesics with \fIa12\fR
+> 180 degrees do not correspond to shortest paths.  With the \fB\-a\fR
+flag, \fIs12\fR (on both input and output) is replaced by \fIa12\fR.  The
+\&\fB\-a\fR flag does \fInot\fR affect the full output given by the \fB\-f\fR flag
+(which always includes both \fIs12\fR and \fIa12\fR).
+.SH "ADDITIONAL QUANTITIES"
+.IX Header "ADDITIONAL QUANTITIES"
+The \fB\-f\fR flag reports four additional quantities.
+.PP
+The reduced length of the geodesic, \fIm12\fR, is defined such that if the
+initial azimuth is perturbed by d\fIazi1\fR (radians) then the second point
+is displaced by \fIm12\fR d\fIazi1\fR in the direction perpendicular to the
+geodesic.  \fIm12\fR is given in meters.  On a curved surface the
+reduced length obeys a symmetry relation, \fIm12\fR + \fIm21\fR = 0.  On a
+flat surface, we have \fIm12\fR = \fIs12\fR.
+.PP
+\&\fIM12\fR and \fIM21\fR are geodesic scales.  If two geodesics are parallel at
+point 1 and separated by a small distance \fIdt\fR, then they are separated
+by a distance \fIM12\fR \fIdt\fR at point 2.  \fIM21\fR is defined similarly
+(with the geodesics being parallel to one another at point 2).  \fIM12\fR
+and \fIM21\fR are dimensionless quantities.  On a flat surface, we have
+\&\fIM12\fR = \fIM21\fR = 1.
+.PP
+If points 1, 2, and 3 lie on a single geodesic, then the following
+addition rules hold,
+\&\fIs13\fR = \fIs12\fR + \fIs23\fR,
+\&\fIa13\fR = \fIa12\fR + \fIa23\fR,
+\&\fIS13\fR = \fIS12\fR + \fIS23\fR,
+\&\fIm13\fR = \fIm12\fR \fIM23\fR + \fIm23\fR \fIM21\fR,
+\&\fIM13\fR = \fIM12\fR \fIM23\fR \- (1 \- \fIM12\fR \fIM21\fR) \fIm23\fR / \fIm12\fR, and
+\&\fIM31\fR = \fIM32\fR \fIM21\fR \- (1 \- \fIM23\fR \fIM32\fR) \fIm12\fR / \fIm23\fR.
+.PP
+Finally, \fIS12\fR is the area between the geodesic from point 1 to point 2
+and the equator; i.e., it is the area, measured counter-clockwise, of
+the geodesic quadrilateral with corners (\fIlat1\fR,\fIlon1\fR), (0,\fIlon1\fR),
+(0,\fIlon2\fR), and (\fIlat2\fR,\fIlon2\fR).  It is given in meters^2.
+.SH "PRECISION"
+.IX Header "PRECISION"
+\&\fIprec\fR gives precision of the output with \fIprec\fR = 0 giving 1 m
+precision, \fIprec\fR = 3 giving 1 mm precision, etc.  \fIprec\fR is the
+number of digits after the decimal point for lengths.  For decimal
+degrees, the number of digits after the decimal point is 5 + \fIprec\fR.
+For \s-1DMS\s0 (degree, minute, seconds) output, the number of digits after the
+decimal point in the seconds component is 1 + \fIprec\fR.  The minimum
+value of \fIprec\fR is 0 and the maximum is 10.
+.SH "ERRORS"
+.IX Header "ERRORS"
+An illegal line of input will print an error message to standard output
+beginning with \f(CW\*(C`ERROR:\*(C'\fR and causes \fBGeodSolve\fR to return an exit code
+of 1.  However, an error does not cause \fBGeodSolve\fR to terminate;
+following lines will be converted.
+.SH "ACCURACY"
+.IX Header "ACCURACY"
+Using the (default) series solution, GeodSolve is accurate to about 15
+nm (15 nanometers) for the \s-1WGS84\s0 ellipsoid.  The approximate maximum
+error (expressed as a distance) for an ellipsoid with the same major
+radius as the \s-1WGS84\s0 ellipsoid and different values of the flattening is
+.PP
+.Vb 6
+\&   |f|     error
+\&   0.01    25 nm
+\&   0.02    30 nm
+\&   0.05    10 um
+\&   0.1    1.5 mm
+\&   0.2    300 mm
+.Ve
+.PP
+If \fB\-E\fR is specified, GeodSolve is accurate to about 40 nm (40
+nanometers) for the \s-1WGS84\s0 ellipsoid.  The approximate maximum error
+(expressed as a distance) for an ellipsoid with a quarter meridian of
+10000 km and different values of the \fIa/b\fR = 1 \- \fIf\fR is
+.PP
+.Vb 10
+\&   1\-f    error (nm)
+\&   1/128   387
+\&   1/64    345
+\&   1/32    269
+\&   1/16    210
+\&   1/8     115
+\&   1/4      69
+\&   1/2      36
+\&     1      15
+\&     2      25
+\&     4      96
+\&     8     318
+\&    16     985
+\&    32    2352
+\&    64    6008
+\&   128   19024
+.Ve
+.SH "MULTIPLE SOLUTIONS"
+.IX Header "MULTIPLE SOLUTIONS"
+The shortest distance returned for the inverse problem is (obviously)
+uniquely defined.  However, in a few special cases there are multiple
+azimuths which yield the same shortest distance.  Here is a catalog of
+those cases:
+.IP "\fIlat1\fR = \-\fIlat2\fR (with neither point at a pole)" 4
+.IX Item "lat1 = -lat2 (with neither point at a pole)"
+If \fIazi1\fR = \fIazi2\fR, the geodesic is unique.  Otherwise there are two
+geodesics and the second one is obtained by setting [\fIazi1\fR,\fIazi2\fR] =
+[\fIazi2\fR,\fIazi1\fR], [\fIM12\fR,\fIM21\fR] = [\fIM21\fR,\fIM12\fR], \fIS12\fR = \-\fIS12\fR.
+(This occurs when the longitude difference is near +/\-180 for oblate
+ellipsoids.)
+.IP "\fIlon2\fR = \fIlon1\fR +/\- 180 (with neither point at a pole)" 4
+.IX Item "lon2 = lon1 +/- 180 (with neither point at a pole)"
+If \fIazi1\fR = 0 or +/\-180, the geodesic is unique.  Otherwise there are
+two geodesics and the second one is obtained by setting
+[\fIazi1\fR,\fIazi2\fR] = [\-\fIazi1\fR,\-\fIazi2\fR], \fIS12\fR = \-\fIS12\fR.  (This occurs
+when \fIlat2\fR is near \-\fIlat1\fR for prolate ellipsoids.)
+.IP "Points 1 and 2 at opposite poles" 4
+.IX Item "Points 1 and 2 at opposite poles"
+There are infinitely many geodesics which can be generated by setting
+[\fIazi1\fR,\fIazi2\fR] = [\fIazi1\fR,\fIazi2\fR] + [\fId\fR,\-\fId\fR], for arbitrary
+\&\fId\fR.  (For spheres, this prescription applies when points 1 and 2 are
+antipodal.)
+.IP "\fIs12\fR = 0 (coincident points)" 4
+.IX Item "s12 = 0 (coincident points)"
+There are infinitely many geodesics which can be generated by setting
+[\fIazi1\fR,\fIazi2\fR] = [\fIazi1\fR,\fIazi2\fR] + [\fId\fR,\fId\fR], for arbitrary \fId\fR.
+.SH "EXAMPLES"
+.IX Header "EXAMPLES"
+Route from \s-1JFK\s0 Airport to Singapore Changi Airport:
+.PP
+.Vb 2
+\&   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
+\&   GeodSolve \-i \-: \-p 0
+\&
+\&   003:18:29.9 177:29:09.2 15347628
+.Ve
+.PP
+Waypoints on the route at intervals of 2000km:
+.PP
+.Vb 2
+\&   for ((i = 0; i <= 16; i += 2)); do echo ${i}000000;done |
+\&   GeodSolve \-l 40:38:23N 073:46:44W 003:18:29.9 \-: \-p 0
+\&
+\&   40:38:23.0N 073:46:44.0W 003:18:29.9
+\&   58:34:45.1N 071:49:36.7W 004:48:48.8
+\&   76:22:28.4N 065:32:17.8W 010:41:38.4
+\&   84:50:28.0N 075:04:39.2E 150:55:00.9
+\&   67:26:20.3N 098:00:51.2E 173:27:20.3
+\&   49:33:03.2N 101:06:52.6E 176:07:54.3
+\&   31:34:16.5N 102:30:46.3E 177:03:08.4
+\&   13:31:56.0N 103:26:50.7E 177:24:55.0
+\&   04:32:05.7S 104:14:48.7E 177:28:43.6
+.Ve
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIGeoConvert\fR\|(1).  The algorithms are described in C. F. F. Karney,
+\&\fIAlgorithms for geodesics\fR, J. Geodesy 87, 43\-55 (2013); \s-1DOI:\s0
+http://dx.doi.org/10.1007/s00190\-012\-0578\-z <http://dx.doi.org/10.1007/s00190-012-0578-z>;
+addenda: http://geographiclib.sf.net/geod\-addenda.html <http://geographiclib.sf.net/geod-addenda.html>.
+The wikipedia page, Geodesics on an ellipsoid,
+<http://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid>.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+\&\fBGeodSolve\fR was written by Charles Karney.
+.SH "HISTORY"
+.IX Header "HISTORY"
+\&\fBGeodSolve\fR was added to GeographicLib, <http://geographiclib.sf.net>,
+in 2009\-03.  Prior to version 1.30, it was called \fBGeod\fR.  (The name
+was changed to avoid a conflict with the \fBgeod\fR utility in \fIproj.4\fR.)
diff --git a/man/GeodSolve.1.html b/man/GeodSolve.1.html
new file mode 100644
index 0000000..262bccf
--- /dev/null
+++ b/man/GeodSolve.1.html
@@ -0,0 +1,288 @@
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root at localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<h1 id="NAME">NAME</h1>
+
+<p>GeodSolve -- perform geodesic calculations</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<p><b>GeodSolve</b> [ <b>-i</b> | <b>-l</b> <i>lat1</i> <i>lon1</i> <i>azi1</i> ] [ <b>-a</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>-d</b> | <b>-:</b> ] [ <b>-b</b> ] [ <b>-f</b> ] [ <b>-p</b> <i>prec</i> ] [ <b>-E</b> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>The shortest path between two points on the ellipsoid at (<i>lat1</i>, <i>lon1</i>) and (<i>lat2</i>, <i>lon2</i>) is called the geodesic. Its length is <i>s12</i> and the geodesic from point 1 to point 2 has forward azimuths <i>azi1</i> and <i>azi2</i> at the two end points.</p>
+
+<p><b>GeodSolve</b> operates in one of three modes:</p>
+
+<ol>
+
+<li><p>By default, <b>GeodSolve</b> accepts lines on the standard input containing <i>lat1</i> <i>lon1</i> <i>azi1</i> <i>s12</i> and prints <i>lat2</i> <i>lon2</i> <i>azi2</i> on standard output. This is the direct geodesic calculation.</p>
+
+</li>
+<li><p>Command line arguments <b>-l</b> <i>lat1</i> <i>lon1</i> <i>azi1</i> specify a geodesic line. <b>GeodSolve</b> then accepts a sequence of <i>s12</i> values (one per line) on standard input and prints <i>lat2</i> <i>lon2</i> <i>azi2</i> for each. This generates a sequence of points on a single geodesic.</p>
+
+</li>
+<li><p>With the <b>-i</b> command line argument, <b>GeodSolve</b> performs the inverse geodesic calculation. It reads lines containing <i>lat1</i> <i>lon1</i> <i>lat2</i> <i>lon2</i> and prints the corresponding values of <i>azi1</i> <i>azi2</i> <i>s12</i>.</p>
+
+</li>
+</ol>
+
+<h1 id="OPTIONS">OPTIONS</h1>
+
+<dl>
+
+<dt id="i"><b>-i</b></dt>
+<dd>
+
+<p>perform an inverse geodesic calculation (see 3 above).</p>
+
+</dd>
+<dt id="l"><b>-l</b></dt>
+<dd>
+
+<p>line mode (see 2 above); generate a sequence of points along the geodesic specified by <i>lat1</i> <i>lon1</i> <i>azi1</i>.</p>
+
+</dd>
+<dt id="a"><b>-a</b></dt>
+<dd>
+
+<p>arc mode; on input <i>and</i> output <i>s12</i> is replaced by <i>a12</i> the arc length (in degrees) on the auxiliary sphere. See <a href="#AUXILIARY-SPHERE">"AUXILIARY SPHERE"</a>.</p>
+
+</dd>
+<dt id="e"><b>-e</b></dt>
+<dd>
+
+<p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563.</p>
+
+</dd>
+<dt id="d"><b>-d</b></dt>
+<dd>
+
+<p>output angles as degrees, minutes, seconds instead of decimal degrees.</p>
+
+</dd>
+<dt id="pod-:"><b>-:</b></dt>
+<dd>
+
+<p>like <b>-d</b>, except use : as a separator instead of the d, ', and " delimiters.</p>
+
+</dd>
+<dt id="b"><b>-b</b></dt>
+<dd>
+
+<p>report the <i>back</i> azimuth at point 2 instead of the forward azimuth.</p>
+
+</dd>
+<dt id="f"><b>-f</b></dt>
+<dd>
+
+<p>full output; each line of output consists of 12 quantities: <i>lat1</i> <i>lon1</i> <i>azi1</i> <i>lat2</i> <i>lon2</i> <i>azi2</i> <i>s12</i> <i>a12</i> <i>m12</i> <i>M12</i> <i>M21</i> <i>S12</i>. <i>a12</i> is described in <a href="#AUXILIARY-SPHERE">"AUXILIARY SPHERE"</a>. The four quantities <i>m12</i>, <i>M12</i>, <i>M21</i>, and <i>S12</i> are described in <a href="#ADDITIONAL-QUANTITIES">"ADDITIONAL QUANTITIES"</a>.</p>
+
+</dd>
+<dt id="p"><b>-p</b></dt>
+<dd>
+
+<p>set the output precision to <i>prec</i> (default 3); <i>prec</i> is the precision relative to 1 m. See <a href="#PRECISION">"PRECISION"</a>.</p>
+
+</dd>
+<dt id="E"><b>-E</b></dt>
+<dd>
+
+<p>use "exact" algorithms (based on elliptic integrals) for the geodesic calculations. These are more accurate than the (default) series expansions for |<i>f</i>| > 0.02.</p>
+
+</dd>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
+
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
+
+</dd>
+<dt id="version"><b>--version</b></dt>
+<dd>
+
+<p>print version and exit.</p>
+
+</dd>
+<dt id="h"><b>-h</b></dt>
+<dd>
+
+<p>print usage and exit.</p>
+
+</dd>
+<dt id="help"><b>--help</b></dt>
+<dd>
+
+<p>print full documentation and exit.</p>
+
+</dd>
+<dt id="input-file"><b>--input-file</b></dt>
+<dd>
+
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
+<dd>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
+</dd>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
+
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
+
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
+<dd>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
+</dd>
+</dl>
+
+<h1 id="INPUT">INPUT</h1>
+
+<p><b>GeodSolve</b> measures all angles in degrees and all lengths (<i>s12</i>) in meters. On input angles (latitude, longitude, azimuth, arc length) can be as decimal degrees or degrees (d), minutes ('), seconds ("). A decimal point can only appear in the least significant component and the designator (d, ', or ") for this component is optional; thus <code>40d30</code>, <code>40d30'</code>, <code>40.5d</code>, and <code>40.5</code> are all equivalent. By default, l [...]
+
+<p>See the <code>QUOTING</code> section of GeoConvert(1) for how to quote the DMS designators ' and ".</p>
+
+<h1 id="AUXILIARY-SPHERE">AUXILIARY SPHERE</h1>
+
+<p>Geodesics on the ellipsoid can be transferred to the <i>auxiliary sphere</i> on which the distance is measured in terms of the arc length <i>a12</i> (measured in degrees) instead of <i>s12</i>. In terms of <i>a12</i>, 180 degrees is the distance from one equator crossing to the next or from the minimum latitude to the maximum latitude. Geodesics with <i>a12</i> > 180 degrees do not correspond to shortest paths. With the <b>-a</b> flag, <i>s12</i> (on both input and output) is repla [...]
+
+<h1 id="ADDITIONAL-QUANTITIES">ADDITIONAL QUANTITIES</h1>
+
+<p>The <b>-f</b> flag reports four additional quantities.</p>
+
+<p>The reduced length of the geodesic, <i>m12</i>, is defined such that if the initial azimuth is perturbed by d<i>azi1</i> (radians) then the second point is displaced by <i>m12</i> d<i>azi1</i> in the direction perpendicular to the geodesic. <i>m12</i> is given in meters. On a curved surface the reduced length obeys a symmetry relation, <i>m12</i> + <i>m21</i> = 0. On a flat surface, we have <i>m12</i> = <i>s12</i>.</p>
+
+<p><i>M12</i> and <i>M21</i> are geodesic scales. If two geodesics are parallel at point 1 and separated by a small distance <i>dt</i>, then they are separated by a distance <i>M12</i> <i>dt</i> at point 2. <i>M21</i> is defined similarly (with the geodesics being parallel to one another at point 2). <i>M12</i> and <i>M21</i> are dimensionless quantities. On a flat surface, we have <i>M12</i> = <i>M21</i> = 1.</p>
+
+<p>If points 1, 2, and 3 lie on a single geodesic, then the following addition rules hold, <i>s13</i> = <i>s12</i> + <i>s23</i>, <i>a13</i> = <i>a12</i> + <i>a23</i>, <i>S13</i> = <i>S12</i> + <i>S23</i>, <i>m13</i> = <i>m12</i> <i>M23</i> + <i>m23</i> <i>M21</i>, <i>M13</i> = <i>M12</i> <i>M23</i> - (1 - <i>M12</i> <i>M21</i>) <i>m23</i> / <i>m12</i>, and <i>M31</i> = <i>M32</i> <i>M21</i> - (1 - <i>M23</i> <i>M32</i>) <i>m12</i> / <i>m23</i>.</p>
+
+<p>Finally, <i>S12</i> is the area between the geodesic from point 1 to point 2 and the equator; i.e., it is the area, measured counter-clockwise, of the geodesic quadrilateral with corners (<i>lat1</i>,<i>lon1</i>), (0,<i>lon1</i>), (0,<i>lon2</i>), and (<i>lat2</i>,<i>lon2</i>). It is given in meters^2.</p>
+
+<h1 id="PRECISION">PRECISION</h1>
+
+<p><i>prec</i> gives precision of the output with <i>prec</i> = 0 giving 1 m precision, <i>prec</i> = 3 giving 1 mm precision, etc. <i>prec</i> is the number of digits after the decimal point for lengths. For decimal degrees, the number of digits after the decimal point is 5 + <i>prec</i>. For DMS (degree, minute, seconds) output, the number of digits after the decimal point in the seconds component is 1 + <i>prec</i>. The minimum value of <i>prec</i> is 0 and the maximum is 10.</p>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>GeodSolve</b> to return an exit code of 1. However, an error does not cause <b>GeodSolve</b> to terminate; following lines will be converted.</p>
+
+<h1 id="ACCURACY">ACCURACY</h1>
+
+<p>Using the (default) series solution, GeodSolve is accurate to about 15 nm (15 nanometers) for the WGS84 ellipsoid. The approximate maximum error (expressed as a distance) for an ellipsoid with the same major radius as the WGS84 ellipsoid and different values of the flattening is</p>
+
+<pre><code>   |f|     error
+   0.01    25 nm
+   0.02    30 nm
+   0.05    10 um
+   0.1    1.5 mm
+   0.2    300 mm</code></pre>
+
+<p>If <b>-E</b> is specified, GeodSolve is accurate to about 40 nm (40 nanometers) for the WGS84 ellipsoid. The approximate maximum error (expressed as a distance) for an ellipsoid with a quarter meridian of 10000 km and different values of the <i>a/b</i> = 1 - <i>f</i> is</p>
+
+<pre><code>   1-f    error (nm)
+   1/128   387
+   1/64    345
+   1/32    269
+   1/16    210
+   1/8     115
+   1/4      69
+   1/2      36
+     1      15
+     2      25
+     4      96
+     8     318
+    16     985
+    32    2352
+    64    6008
+   128   19024</code></pre>
+
+<h1 id="MULTIPLE-SOLUTIONS">MULTIPLE SOLUTIONS</h1>
+
+<p>The shortest distance returned for the inverse problem is (obviously) uniquely defined. However, in a few special cases there are multiple azimuths which yield the same shortest distance. Here is a catalog of those cases:</p>
+
+<dl>
+
+<dt id="lat1--lat2-with-neither-point-at-a-pole-"><i>lat1</i> = -<i>lat2</i> (with neither point at a pole)</dt>
+<dd>
+
+<p>If <i>azi1</i> = <i>azi2</i>, the geodesic is unique. Otherwise there are two geodesics and the second one is obtained by setting [<i>azi1</i>,<i>azi2</i>] = [<i>azi2</i>,<i>azi1</i>], [<i>M12</i>,<i>M21</i>] = [<i>M21</i>,<i>M12</i>], <i>S12</i> = -<i>S12</i>. (This occurs when the longitude difference is near +/-180 for oblate ellipsoids.)</p>
+
+</dd>
+<dt id="lon2-lon1---180-with-neither-point-at-a-pole-"><i>lon2</i> = <i>lon1</i> +/- 180 (with neither point at a pole)</dt>
+<dd>
+
+<p>If <i>azi1</i> = 0 or +/-180, the geodesic is unique. Otherwise there are two geodesics and the second one is obtained by setting [<i>azi1</i>,<i>azi2</i>] = [-<i>azi1</i>,-<i>azi2</i>], <i>S12</i> = -<i>S12</i>. (This occurs when <i>lat2</i> is near -<i>lat1</i> for prolate ellipsoids.)</p>
+
+</dd>
+<dt id="Points-1-and-2-at-opposite-poles">Points 1 and 2 at opposite poles</dt>
+<dd>
+
+<p>There are infinitely many geodesics which can be generated by setting [<i>azi1</i>,<i>azi2</i>] = [<i>azi1</i>,<i>azi2</i>] + [<i>d</i>,-<i>d</i>], for arbitrary <i>d</i>. (For spheres, this prescription applies when points 1 and 2 are antipodal.)</p>
+
+</dd>
+<dt id="s12-0-coincident-points-"><i>s12</i> = 0 (coincident points)</dt>
+<dd>
+
+<p>There are infinitely many geodesics which can be generated by setting [<i>azi1</i>,<i>azi2</i>] = [<i>azi1</i>,<i>azi2</i>] + [<i>d</i>,<i>d</i>], for arbitrary <i>d</i>.</p>
+
+</dd>
+</dl>
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
+<p>Route from JFK Airport to Singapore Changi Airport:</p>
+
+<pre><code>   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
+   GeodSolve -i -: -p 0
+
+   003:18:29.9 177:29:09.2 15347628</code></pre>
+
+<p>Waypoints on the route at intervals of 2000km:</p>
+
+<pre><code>   for ((i = 0; i <= 16; i += 2)); do echo ${i}000000;done |
+   GeodSolve -l 40:38:23N 073:46:44W 003:18:29.9 -: -p 0
+
+   40:38:23.0N 073:46:44.0W 003:18:29.9
+   58:34:45.1N 071:49:36.7W 004:48:48.8
+   76:22:28.4N 065:32:17.8W 010:41:38.4
+   84:50:28.0N 075:04:39.2E 150:55:00.9
+   67:26:20.3N 098:00:51.2E 173:27:20.3
+   49:33:03.2N 101:06:52.6E 176:07:54.3
+   31:34:16.5N 102:30:46.3E 177:03:08.4
+   13:31:56.0N 103:26:50.7E 177:24:55.0
+   04:32:05.7S 104:14:48.7E 177:28:43.6</code></pre>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>GeoConvert(1). The algorithms are described in C. F. F. Karney, <i>Algorithms for geodesics</i>, J. Geodesy 87, 43-55 (2013); DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">http://dx.doi.org/10.1007/s00190-012-0578-z</a>; addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">http://geographiclib.sf.net/geod-addenda.html</a>. The wikipedia page, Geodesics on an ellipsoid, <a href="http://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid">http://en.wikipedia.org/wik [...]
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>GeodSolve</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>GeodSolve</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-03. Prior to version 1.30, it was called <b>Geod</b>. (The name was changed to avoid a conflict with the <b>geod</b> utility in <i>proj.4</i>.)</p>
+
+
+</body>
+
+</html>
+
+
diff --git a/man/GeodSolve.pod b/man/GeodSolve.pod
new file mode 100644
index 0000000..1159b10
--- /dev/null
+++ b/man/GeodSolve.pod
@@ -0,0 +1,342 @@
+=head1 NAME
+
+GeodSolve -- perform geodesic calculations
+
+=head1 SYNOPSIS
+
+B<GeodSolve> [ B<-i> | B<-l> I<lat1> I<lon1> I<azi1> ] [ B<-a> ]
+[ B<-e> I<a> I<f> ]
+[ B<-d> | B<-:> ] [ B<-b> ] [ B<-f> ] [ B<-p> I<prec> ] [ B<-E> ]
+[ B<--comment-delimiter> I<commentdelim> ]
+[ B<--version> | B<-h> | B<--help> ]
+[ B<--input-file> I<infile> | B<--input-string> I<instring> ]
+[ B<--line-separator> I<linesep> ]
+[ B<--output-file> I<outfile> ]
+
+=head1 DESCRIPTION
+
+The shortest path between two points on the ellipsoid at (I<lat1>,
+I<lon1>) and (I<lat2>, I<lon2>) is called the geodesic.  Its length is
+I<s12> and the geodesic from point 1 to point 2 has forward azimuths
+I<azi1> and I<azi2> at the two end points.
+
+B<GeodSolve> operates in one of three modes:
+
+=over
+
+=item 1.
+
+By default, B<GeodSolve> accepts lines on the standard input containing
+I<lat1> I<lon1> I<azi1> I<s12> and prints I<lat2> I<lon2> I<azi2>
+on standard output.  This is the direct geodesic calculation.
+
+=item 2.
+
+Command line arguments B<-l> I<lat1> I<lon1> I<azi1> specify a geodesic
+line.  B<GeodSolve> then accepts a sequence of I<s12> values (one per
+line) on standard input and prints I<lat2> I<lon2> I<azi2> for each.
+This generates a sequence of points on a single geodesic.
+
+=item 3.
+
+With the B<-i> command line argument, B<GeodSolve> performs the inverse
+geodesic calculation.  It reads lines containing I<lat1> I<lon1> I<lat2>
+I<lon2> and prints the corresponding values of I<azi1> I<azi2> I<s12>.
+
+=back
+
+=head1 OPTIONS
+
+=over
+
+=item B<-i>
+
+perform an inverse geodesic calculation (see 3 above).
+
+=item B<-l>
+
+line mode (see 2 above); generate a sequence of points along the
+geodesic specified by I<lat1> I<lon1> I<azi1>.
+
+=item B<-a>
+
+arc mode; on input I<and> output I<s12> is replaced by I<a12> the arc
+length (in degrees) on the auxiliary sphere.  See L</AUXILIARY SPHERE>.
+
+=item B<-e>
+
+specify the ellipsoid via I<a> I<f>; the equatorial radius is I<a> and
+the flattening is I<f>.  Setting I<f> = 0 results in a sphere.  Specify
+I<f> E<lt> 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
+is allowed for I<f>.  (Also, if I<f> E<gt> 1, the flattening is set to
+1/I<f>.)  By default, the WGS84 ellipsoid is used, I<a> = 6378137 m,
+I<f> = 1/298.257223563.
+
+=item B<-d>
+
+output angles as degrees, minutes, seconds instead of decimal degrees.
+
+=item B<-:>
+
+like B<-d>, except use : as a separator instead of the d, ', and "
+delimiters.
+
+=item B<-b>
+
+report the I<back> azimuth at point 2 instead of the forward azimuth.
+
+=item B<-f>
+
+full output; each line of output consists of 12 quantities: I<lat1>
+I<lon1> I<azi1> I<lat2> I<lon2> I<azi2> I<s12> I<a12> I<m12> I<M12>
+I<M21> I<S12>.  I<a12> is described in L</AUXILIARY SPHERE>.  The four
+quantities I<m12>, I<M12>, I<M21>, and I<S12> are described in
+L</ADDITIONAL QUANTITIES>.
+
+=item B<-p>
+
+set the output precision to I<prec> (default 3); I<prec> is the
+precision relative to 1 m.  See L</PRECISION>.
+
+=item B<-E>
+
+use "exact" algorithms (based on elliptic integrals) for the geodesic
+calculations.  These are more accurate than the (default) series
+expansions for |I<f>| > 0.02.
+
+=item B<--comment-delimiter>
+
+set the comment delimiter to I<commentdelim> (e.g., "#" or "//").  If
+set, the input lines will be scanned for this delimiter and, if found,
+the delimiter and the rest of the line will be removed prior to
+processing and subsequently appended to the output line (separated by a
+space).
+
+=item B<--version>
+
+print version and exit.
+
+=item B<-h>
+
+print usage and exit.
+
+=item B<--help>
+
+print full documentation and exit.
+
+=item B<--input-file>
+
+read input from the file I<infile> instead of from standard input; a file
+name of "-" stands for standard input.
+
+=item B<--input-string>
+
+read input from the string I<instring> instead of from standard input.
+All occurrences of the line separator character (default is a semicolon)
+in I<instring> are converted to newlines before the reading begins.
+
+=item B<--line-separator>
+
+set the line separator character to I<linesep>.  By default this is a
+semicolon.
+
+=item B<--output-file>
+
+write output to the file I<outfile> instead of to standard output; a
+file name of "-" stands for standard output.
+
+=back
+
+=head1 INPUT
+
+B<GeodSolve> measures all angles in degrees and all lengths (I<s12>) in
+meters.  On input angles (latitude, longitude, azimuth, arc length) can
+be as decimal degrees or degrees (d), minutes ('), seconds (").  A
+decimal point can only appear in the least significant component and the
+designator (d, ', or ") for this component is optional; thus C<40d30>,
+C<40d30'>, C<40.5d>, and C<40.5> are all equivalent.  By default,
+latitude precedes longitude for each point; however on input either may
+be given first by appending (or prepending) I<N> or I<S> to the latitude
+and I<E> or I<W> to the longitude.  Azimuths are measured clockwise from
+north; however this may be overridden with I<E> or I<W>.
+
+See the C<QUOTING> section of GeoConvert(1) for how to quote the DMS
+designators ' and ".
+
+=head1 AUXILIARY SPHERE
+
+Geodesics on the ellipsoid can be transferred to the I<auxiliary sphere>
+on which the distance is measured in terms of the arc length I<a12>
+(measured in degrees) instead of I<s12>.  In terms of I<a12>, 180
+degrees is the distance from one equator crossing to the next or from
+the minimum latitude to the maximum latitude.  Geodesics with I<a12>
+E<gt> 180 degrees do not correspond to shortest paths.  With the B<-a>
+flag, I<s12> (on both input and output) is replaced by I<a12>.  The
+B<-a> flag does I<not> affect the full output given by the B<-f> flag
+(which always includes both I<s12> and I<a12>).
+
+=head1 ADDITIONAL QUANTITIES
+
+The B<-f> flag reports four additional quantities.
+
+The reduced length of the geodesic, I<m12>, is defined such that if the
+initial azimuth is perturbed by dI<azi1> (radians) then the second point
+is displaced by I<m12> dI<azi1> in the direction perpendicular to the
+geodesic.  I<m12> is given in meters.  On a curved surface the
+reduced length obeys a symmetry relation, I<m12> + I<m21> = 0.  On a
+flat surface, we have I<m12> = I<s12>.
+
+I<M12> and I<M21> are geodesic scales.  If two geodesics are parallel at
+point 1 and separated by a small distance I<dt>, then they are separated
+by a distance I<M12> I<dt> at point 2.  I<M21> is defined similarly
+(with the geodesics being parallel to one another at point 2).  I<M12>
+and I<M21> are dimensionless quantities.  On a flat surface, we have
+I<M12> = I<M21> = 1.
+
+If points 1, 2, and 3 lie on a single geodesic, then the following
+addition rules hold,
+I<s13> = I<s12> + I<s23>,
+I<a13> = I<a12> + I<a23>,
+I<S13> = I<S12> + I<S23>,
+I<m13> = I<m12> I<M23> + I<m23> I<M21>,
+I<M13> = I<M12> I<M23> - (1 - I<M12> I<M21>) I<m23> / I<m12>, and
+I<M31> = I<M32> I<M21> - (1 - I<M23> I<M32>) I<m12> / I<m23>.
+
+Finally, I<S12> is the area between the geodesic from point 1 to point 2
+and the equator; i.e., it is the area, measured counter-clockwise, of
+the geodesic quadrilateral with corners (I<lat1>,I<lon1>), (0,I<lon1>),
+(0,I<lon2>), and (I<lat2>,I<lon2>).  It is given in meters^2.
+
+=head1 PRECISION
+
+I<prec> gives precision of the output with I<prec> = 0 giving 1 m
+precision, I<prec> = 3 giving 1 mm precision, etc.  I<prec> is the
+number of digits after the decimal point for lengths.  For decimal
+degrees, the number of digits after the decimal point is 5 + I<prec>.
+For DMS (degree, minute, seconds) output, the number of digits after the
+decimal point in the seconds component is 1 + I<prec>.  The minimum
+value of I<prec> is 0 and the maximum is 10.
+
+=head1 ERRORS
+
+An illegal line of input will print an error message to standard output
+beginning with C<ERROR:> and causes B<GeodSolve> to return an exit code
+of 1.  However, an error does not cause B<GeodSolve> to terminate;
+following lines will be converted.
+
+=head1 ACCURACY
+
+Using the (default) series solution, GeodSolve is accurate to about 15
+nm (15 nanometers) for the WGS84 ellipsoid.  The approximate maximum
+error (expressed as a distance) for an ellipsoid with the same major
+radius as the WGS84 ellipsoid and different values of the flattening is
+
+   |f|     error
+   0.01    25 nm
+   0.02    30 nm
+   0.05    10 um
+   0.1    1.5 mm
+   0.2    300 mm
+
+If B<-E> is specified, GeodSolve is accurate to about 40 nm (40
+nanometers) for the WGS84 ellipsoid.  The approximate maximum error
+(expressed as a distance) for an ellipsoid with a quarter meridian of
+10000 km and different values of the I<a/b> = 1 - I<f> is
+
+   1-f    error (nm)
+   1/128   387
+   1/64    345
+   1/32    269
+   1/16    210
+   1/8     115
+   1/4      69
+   1/2      36
+     1      15
+     2      25
+     4      96
+     8     318
+    16     985
+    32    2352
+    64    6008
+   128   19024
+
+=head1 MULTIPLE SOLUTIONS
+
+The shortest distance returned for the inverse problem is (obviously)
+uniquely defined.  However, in a few special cases there are multiple
+azimuths which yield the same shortest distance.  Here is a catalog of
+those cases:
+
+=over
+
+=item I<lat1> = -I<lat2> (with neither point at a pole)
+
+If I<azi1> = I<azi2>, the geodesic is unique.  Otherwise there are two
+geodesics and the second one is obtained by setting [I<azi1>,I<azi2>] =
+[I<azi2>,I<azi1>], [I<M12>,I<M21>] = [I<M21>,I<M12>], I<S12> = -I<S12>.
+(This occurs when the longitude difference is near +/-180 for oblate
+ellipsoids.)
+
+=item I<lon2> = I<lon1> +/- 180 (with neither point at a pole)
+
+If I<azi1> = 0 or +/-180, the geodesic is unique.  Otherwise there are
+two geodesics and the second one is obtained by setting
+[I<azi1>,I<azi2>] = [-I<azi1>,-I<azi2>], I<S12> = -I<S12>.  (This occurs
+when I<lat2> is near -I<lat1> for prolate ellipsoids.)
+
+=item Points 1 and 2 at opposite poles
+
+There are infinitely many geodesics which can be generated by setting
+[I<azi1>,I<azi2>] = [I<azi1>,I<azi2>] + [I<d>,-I<d>], for arbitrary
+I<d>.  (For spheres, this prescription applies when points 1 and 2 are
+antipodal.)
+
+=item I<s12> = 0 (coincident points)
+
+There are infinitely many geodesics which can be generated by setting
+[I<azi1>,I<azi2>] = [I<azi1>,I<azi2>] + [I<d>,I<d>], for arbitrary I<d>.
+
+=back
+
+=head1 EXAMPLES
+
+Route from JFK Airport to Singapore Changi Airport:
+
+   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
+   GeodSolve -i -: -p 0
+
+   003:18:29.9 177:29:09.2 15347628
+
+Waypoints on the route at intervals of 2000km:
+
+   for ((i = 0; i <= 16; i += 2)); do echo ${i}000000;done |
+   GeodSolve -l 40:38:23N 073:46:44W 003:18:29.9 -: -p 0
+
+   40:38:23.0N 073:46:44.0W 003:18:29.9
+   58:34:45.1N 071:49:36.7W 004:48:48.8
+   76:22:28.4N 065:32:17.8W 010:41:38.4
+   84:50:28.0N 075:04:39.2E 150:55:00.9
+   67:26:20.3N 098:00:51.2E 173:27:20.3
+   49:33:03.2N 101:06:52.6E 176:07:54.3
+   31:34:16.5N 102:30:46.3E 177:03:08.4
+   13:31:56.0N 103:26:50.7E 177:24:55.0
+   04:32:05.7S 104:14:48.7E 177:28:43.6
+
+=head1 SEE ALSO
+
+GeoConvert(1).  The algorithms are described in C. F. F. Karney,
+I<Algorithms for geodesics>, J. Geodesy 87, 43-55 (2013); DOI:
+L<http://dx.doi.org/10.1007/s00190-012-0578-z>;
+addenda: L<http://geographiclib.sf.net/geod-addenda.html>.
+The wikipedia page, Geodesics on an ellipsoid,
+L<http://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid>.
+
+=head1 AUTHOR
+
+B<GeodSolve> was written by Charles Karney.
+
+=head1 HISTORY
+
+B<GeodSolve> was added to GeographicLib, L<http://geographiclib.sf.net>,
+in 2009-03.  Prior to version 1.30, it was called B<Geod>.  (The name
+was changed to avoid a conflict with the B<geod> utility in I<proj.4>.)
diff --git a/man/GeodSolve.usage b/man/GeodSolve.usage
new file mode 100644
index 0000000..48bc726
--- /dev/null
+++ b/man/GeodSolve.usage
@@ -0,0 +1,285 @@
+int usage(int retval, bool brief) {
+  if (brief)
+    ( retval ? std::cerr : std::cout ) << "Usage:\n"
+"    GeodSolve [ -i | -l lat1 lon1 azi1 ] [ -a ] [ -e a f ] [ -d | -: ] [ -b\n"
+"    ] [ -f ] [ -p prec ] [ -E ] [ --comment-delimiter commentdelim ] [\n"
+"    --version | -h | --help ] [ --input-file infile | --input-string\n"
+"    instring ] [ --line-separator linesep ] [ --output-file outfile ]\n"
+"\n"
+"For full documentation type:\n"
+"    GeodSolve --help\n"
+"or visit:\n"
+"    http://geographiclib.sf.net/1.34/GeodSolve.1.html\n";
+  else
+    ( retval ? std::cerr : std::cout ) << "Man page:\n"
+"NAME\n"
+"       GeodSolve -- perform geodesic calculations\n"
+"\n"
+"SYNOPSIS\n"
+"       GeodSolve [ -i | -l lat1 lon1 azi1 ] [ -a ] [ -e a f ] [ -d | -: ] [ -b\n"
+"       ] [ -f ] [ -p prec ] [ -E ] [ --comment-delimiter commentdelim ] [\n"
+"       --version | -h | --help ] [ --input-file infile | --input-string\n"
+"       instring ] [ --line-separator linesep ] [ --output-file outfile ]\n"
+"\n"
+"DESCRIPTION\n"
+"       The shortest path between two points on the ellipsoid at (lat1, lon1)\n"
+"       and (lat2, lon2) is called the geodesic.  Its length is s12 and the\n"
+"       geodesic from point 1 to point 2 has forward azimuths azi1 and azi2 at\n"
+"       the two end points.\n"
+"\n"
+"       GeodSolve operates in one of three modes:\n"
+"\n"
+"       1.  By default, GeodSolve accepts lines on the standard input\n"
+"           containing lat1 lon1 azi1 s12 and prints lat2 lon2 azi2 on standard\n"
+"           output.  This is the direct geodesic calculation.\n"
+"\n"
+"       2.  Command line arguments -l lat1 lon1 azi1 specify a geodesic line.\n"
+"           GeodSolve then accepts a sequence of s12 values (one per line) on\n"
+"           standard input and prints lat2 lon2 azi2 for each.  This generates\n"
+"           a sequence of points on a single geodesic.\n"
+"\n"
+"       3.  With the -i command line argument, GeodSolve performs the inverse\n"
+"           geodesic calculation.  It reads lines containing lat1 lon1 lat2\n"
+"           lon2 and prints the corresponding values of azi1 azi2 s12.\n"
+"\n"
+"OPTIONS\n"
+"       -i  perform an inverse geodesic calculation (see 3 above).\n"
+"\n"
+"       -l  line mode (see 2 above); generate a sequence of points along the\n"
+"           geodesic specified by lat1 lon1 azi1.\n"
+"\n"
+"       -a  arc mode; on input and output s12 is replaced by a12 the arc length\n"
+"           (in degrees) on the auxiliary sphere.  See \"AUXILIARY SPHERE\".\n"
+"\n"
+"       -e  specify the ellipsoid via a f; the equatorial radius is a and the\n"
+"           flattening is f.  Setting f = 0 results in a sphere.  Specify f < 0\n"
+"           for a prolate ellipsoid.  A simple fraction, e.g., 1/297, is\n"
+"           allowed for f.  (Also, if f > 1, the flattening is set to 1/f.)  By\n"
+"           default, the WGS84 ellipsoid is used, a = 6378137 m, f =\n"
+"           1/298.257223563.\n"
+"\n"
+"       -d  output angles as degrees, minutes, seconds instead of decimal\n"
+"           degrees.\n"
+"\n"
+"       -:  like -d, except use : as a separator instead of the d, ', and \"\n"
+"           delimiters.\n"
+"\n"
+"       -b  report the back azimuth at point 2 instead of the forward azimuth.\n"
+"\n"
+"       -f  full output; each line of output consists of 12 quantities: lat1\n"
+"           lon1 azi1 lat2 lon2 azi2 s12 a12 m12 M12 M21 S12.  a12 is described\n"
+"           in \"AUXILIARY SPHERE\".  The four quantities m12, M12, M21, and S12\n"
+"           are described in \"ADDITIONAL QUANTITIES\".\n"
+"\n"
+"       -p  set the output precision to prec (default 3); prec is the precision\n"
+"           relative to 1 m.  See \"PRECISION\".\n"
+"\n"
+"       -E  use \"exact\" algorithms (based on elliptic integrals) for the\n"
+"           geodesic calculations.  These are more accurate than the (default)\n"
+"           series expansions for |f| > 0.02.\n"
+"\n"
+"       --comment-delimiter\n"
+"           set the comment delimiter to commentdelim (e.g., \"#\" or \"//\").  If\n"
+"           set, the input lines will be scanned for this delimiter and, if\n"
+"           found, the delimiter and the rest of the line will be removed prior\n"
+"           to processing and subsequently appended to the output line\n"
+"           (separated by a space).\n"
+"\n"
+"       --version\n"
+"           print version and exit.\n"
+"\n"
+"       -h  print usage and exit.\n"
+"\n"
+"       --help\n"
+"           print full documentation and exit.\n"
+"\n"
+"       --input-file\n"
+"           read input from the file infile instead of from standard input; a\n"
+"           file name of \"-\" stands for standard input.\n"
+"\n"
+"       --input-string\n"
+"           read input from the string instring instead of from standard input.\n"
+"           All occurrences of the line separator character (default is a\n"
+"           semicolon) in instring are converted to newlines before the reading\n"
+"           begins.\n"
+"\n"
+"       --line-separator\n"
+"           set the line separator character to linesep.  By default this is a\n"
+"           semicolon.\n"
+"\n"
+"       --output-file\n"
+"           write output to the file outfile instead of to standard output; a\n"
+"           file name of \"-\" stands for standard output.\n"
+"\n"
+"INPUT\n"
+"       GeodSolve measures all angles in degrees and all lengths (s12) in\n"
+"       meters.  On input angles (latitude, longitude, azimuth, arc length) can\n"
+"       be as decimal degrees or degrees (d), minutes ('), seconds (\").  A\n"
+"       decimal point can only appear in the least significant component and\n"
+"       the designator (d, ', or \") for this component is optional; thus\n"
+"       \"40d30\", \"40d30'\", \"40.5d\", and 40.5 are all equivalent.  By default,\n"
+"       latitude precedes longitude for each point; however on input either may\n"
+"       be given first by appending (or prepending) N or S to the latitude and\n"
+"       E or W to the longitude.  Azimuths are measured clockwise from north;\n"
+"       however this may be overridden with E or W.\n"
+"\n"
+"       See the \"QUOTING\" section of GeoConvert(1) for how to quote the DMS\n"
+"       designators ' and \".\n"
+"\n"
+"AUXILIARY SPHERE\n"
+"       Geodesics on the ellipsoid can be transferred to the auxiliary sphere\n"
+"       on which the distance is measured in terms of the arc length a12\n"
+"       (measured in degrees) instead of s12.  In terms of a12, 180 degrees is\n"
+"       the distance from one equator crossing to the next or from the minimum\n"
+"       latitude to the maximum latitude.  Geodesics with a12 > 180 degrees do\n"
+"       not correspond to shortest paths.  With the -a flag, s12 (on both input\n"
+"       and output) is replaced by a12.  The -a flag does not affect the full\n"
+"       output given by the -f flag (which always includes both s12 and a12).\n"
+"\n"
+"ADDITIONAL QUANTITIES\n"
+"       The -f flag reports four additional quantities.\n"
+"\n"
+"       The reduced length of the geodesic, m12, is defined such that if the\n"
+"       initial azimuth is perturbed by dazi1 (radians) then the second point\n"
+"       is displaced by m12 dazi1 in the direction perpendicular to the\n"
+"       geodesic.  m12 is given in meters.  On a curved surface the reduced\n"
+"       length obeys a symmetry relation, m12 + m21 = 0.  On a flat surface, we\n"
+"       have m12 = s12.\n"
+"\n"
+"       M12 and M21 are geodesic scales.  If two geodesics are parallel at\n"
+"       point 1 and separated by a small distance dt, then they are separated\n"
+"       by a distance M12 dt at point 2.  M21 is defined similarly (with the\n"
+"       geodesics being parallel to one another at point 2).  M12 and M21 are\n"
+"       dimensionless quantities.  On a flat surface, we have M12 = M21 = 1.\n"
+"\n"
+"       If points 1, 2, and 3 lie on a single geodesic, then the following\n"
+"       addition rules hold, s13 = s12 + s23, a13 = a12 + a23, S13 = S12 + S23,\n"
+"       m13 = m12 M23 + m23 M21, M13 = M12 M23 - (1 - M12 M21) m23 / m12, and\n"
+"       M31 = M32 M21 - (1 - M23 M32) m12 / m23.\n"
+"\n"
+"       Finally, S12 is the area between the geodesic from point 1 to point 2\n"
+"       and the equator; i.e., it is the area, measured counter-clockwise, of\n"
+"       the geodesic quadrilateral with corners (lat1,lon1), (0,lon1),\n"
+"       (0,lon2), and (lat2,lon2).  It is given in meters^2.\n"
+"\n"
+"PRECISION\n"
+"       prec gives precision of the output with prec = 0 giving 1 m precision,\n"
+"       prec = 3 giving 1 mm precision, etc.  prec is the number of digits\n"
+"       after the decimal point for lengths.  For decimal degrees, the number\n"
+"       of digits after the decimal point is 5 + prec.  For DMS (degree,\n"
+"       minute, seconds) output, the number of digits after the decimal point\n"
+"       in the seconds component is 1 + prec.  The minimum value of prec is 0\n"
+"       and the maximum is 10.\n"
+"\n"
+"ERRORS\n"
+"       An illegal line of input will print an error message to standard output\n"
+"       beginning with \"ERROR:\" and causes GeodSolve to return an exit code of\n"
+"       1.  However, an error does not cause GeodSolve to terminate; following\n"
+"       lines will be converted.\n"
+"\n"
+"ACCURACY\n"
+"       Using the (default) series solution, GeodSolve is accurate to about 15\n"
+"       nm (15 nanometers) for the WGS84 ellipsoid.  The approximate maximum\n"
+"       error (expressed as a distance) for an ellipsoid with the same major\n"
+"       radius as the WGS84 ellipsoid and different values of the flattening is\n"
+"\n"
+"          |f|     error\n"
+"          0.01    25 nm\n"
+"          0.02    30 nm\n"
+"          0.05    10 um\n"
+"          0.1    1.5 mm\n"
+"          0.2    300 mm\n"
+"\n"
+"       If -E is specified, GeodSolve is accurate to about 40 nm (40\n"
+"       nanometers) for the WGS84 ellipsoid.  The approximate maximum error\n"
+"       (expressed as a distance) for an ellipsoid with a quarter meridian of\n"
+"       10000 km and different values of the a/b = 1 - f is\n"
+"\n"
+"          1-f    error (nm)\n"
+"          1/128   387\n"
+"          1/64    345\n"
+"          1/32    269\n"
+"          1/16    210\n"
+"          1/8     115\n"
+"          1/4      69\n"
+"          1/2      36\n"
+"            1      15\n"
+"            2      25\n"
+"            4      96\n"
+"            8     318\n"
+"           16     985\n"
+"           32    2352\n"
+"           64    6008\n"
+"          128   19024\n"
+"\n"
+"MULTIPLE SOLUTIONS\n"
+"       The shortest distance returned for the inverse problem is (obviously)\n"
+"       uniquely defined.  However, in a few special cases there are multiple\n"
+"       azimuths which yield the same shortest distance.  Here is a catalog of\n"
+"       those cases:\n"
+"\n"
+"       lat1 = -lat2 (with neither point at a pole)\n"
+"           If azi1 = azi2, the geodesic is unique.  Otherwise there are two\n"
+"           geodesics and the second one is obtained by setting [azi1,azi2] =\n"
+"           [azi2,azi1], [M12,M21] = [M21,M12], S12 = -S12.  (This occurs when\n"
+"           the longitude difference is near +/-180 for oblate ellipsoids.)\n"
+"\n"
+"       lon2 = lon1 +/- 180 (with neither point at a pole)\n"
+"           If azi1 = 0 or +/-180, the geodesic is unique.  Otherwise there are\n"
+"           two geodesics and the second one is obtained by setting [azi1,azi2]\n"
+"           = [-azi1,-azi2], S12 = -S12.  (This occurs when lat2 is near -lat1\n"
+"           for prolate ellipsoids.)\n"
+"\n"
+"       Points 1 and 2 at opposite poles\n"
+"           There are infinitely many geodesics which can be generated by\n"
+"           setting [azi1,azi2] = [azi1,azi2] + [d,-d], for arbitrary d.  (For\n"
+"           spheres, this prescription applies when points 1 and 2 are\n"
+"           antipodal.)\n"
+"\n"
+"       s12 = 0 (coincident points)\n"
+"           There are infinitely many geodesics which can be generated by\n"
+"           setting [azi1,azi2] = [azi1,azi2] + [d,d], for arbitrary d.\n"
+"\n"
+"EXAMPLES\n"
+"       Route from JFK Airport to Singapore Changi Airport:\n"
+"\n"
+"          echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |\n"
+"          GeodSolve -i -: -p 0\n"
+"\n"
+"          003:18:29.9 177:29:09.2 15347628\n"
+"\n"
+"       Waypoints on the route at intervals of 2000km:\n"
+"\n"
+"          for ((i = 0; i <= 16; i += 2)); do echo ${i}000000;done |\n"
+"          GeodSolve -l 40:38:23N 073:46:44W 003:18:29.9 -: -p 0\n"
+"\n"
+"          40:38:23.0N 073:46:44.0W 003:18:29.9\n"
+"          58:34:45.1N 071:49:36.7W 004:48:48.8\n"
+"          76:22:28.4N 065:32:17.8W 010:41:38.4\n"
+"          84:50:28.0N 075:04:39.2E 150:55:00.9\n"
+"          67:26:20.3N 098:00:51.2E 173:27:20.3\n"
+"          49:33:03.2N 101:06:52.6E 176:07:54.3\n"
+"          31:34:16.5N 102:30:46.3E 177:03:08.4\n"
+"          13:31:56.0N 103:26:50.7E 177:24:55.0\n"
+"          04:32:05.7S 104:14:48.7E 177:28:43.6\n"
+"\n"
+"SEE ALSO\n"
+"       GeoConvert(1).  The algorithms are described in C. F. F. Karney,\n"
+"       Algorithms for geodesics, J. Geodesy 87, 43-55 (2013); DOI:\n"
+"       http://dx.doi.org/10.1007/s00190-012-0578-z\n"
+"       <http://dx.doi.org/10.1007/s00190-012-0578-z>; addenda:\n"
+"       http://geographiclib.sf.net/geod-addenda.html\n"
+"       <http://geographiclib.sf.net/geod-addenda.html>.  The wikipedia page,\n"
+"       Geodesics on an ellipsoid,\n"
+"       <http://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid>.\n"
+"\n"
+"AUTHOR\n"
+"       GeodSolve was written by Charles Karney.\n"
+"\n"
+"HISTORY\n"
+"       GeodSolve was added to GeographicLib, <http://geographiclib.sf.net>, in\n"
+"       2009-03.  Prior to version 1.30, it was called Geod.  (The name was\n"
+"       changed to avoid a conflict with the geod utility in proj.4.)\n"
+;
+  return retval;
+}
diff --git a/man/GeodesicProj.1 b/man/GeodesicProj.1
index 9bde582..a4cc668 100644
--- a/man/GeodesicProj.1
+++ b/man/GeodesicProj.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GEODESICPROJ 1"
-.TH GEODESICPROJ 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
+.TH GEODESICPROJ 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -237,11 +237,10 @@ code of 1.  However, an error does not cause \fBGeodesicProj\fR to
 terminate; following lines will be converted.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
-The ellipsoidal gnomonic projection is derived in Section 13 of
-C. F. F. Karney, \fIGeodesics on an ellipsoid of revolution\fR, Feb. 2011;
-preprint <http://arxiv.org/abs/1102.1215>.  See also Section 8 of
-C. F. F. Karney, \fIAlgorithms for geodesics\fR, Sept. 2011; preprint
-<http://arxiv.org/abs/1109.4448>.
+The ellipsoidal gnomonic projection is derived in Section 8 of
+C. F. F. Karney, \fIAlgorithms for geodesics\fR, J. Geodesy 87, 43\-55 (2013); \s-1DOI\s0
+http://dx.doi.org/10.1007/s00190\-012\-0578\-z <http://dx.doi.org/10.1007/s00190-012-0578-z>;
+addenda: http://geographiclib.sf.net/geod\-addenda.html <http://geographiclib.sf.net/geod-addenda.html>.
 .SH "AUTHOR"
 .IX Header "AUTHOR"
 \&\fBGeodesicProj\fR was written by Charles Karney.
diff --git a/man/GeodesicProj.1.html b/man/GeodesicProj.1.html
index 2d3f493..c40ca5a 100644
--- a/man/GeodesicProj.1.html
+++ b/man/GeodesicProj.1.html
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>GeodesicProj -- perform projections based on geodesics</title>
+<title></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rev="made" href="mailto:root at localhost" />
 </head>
@@ -10,197 +10,131 @@
 <body style="background-color: white">
 
 
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
 
-<ul>
+<h1 id="NAME">NAME</h1>
 
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
+<p>GeodesicProj -- perform projections based on geodesics</p>
 
--->
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
 
+<p><b>GeodesicProj</b> ( <b>-z</b> | <b>-c</b> | <b>-g</b> ) <i>lat0</i> <i>lon0</i> [ <b>-r</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
-</div>
-<!-- INDEX END -->
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>Perform projections based on geodesics. Convert geodetic coordinates to either azimuthal equidistant, Cassini-Soldner, or gnomonic coordinates. The center of the projection (<i>lat0</i>, <i>lon0</i>) is specified by either the <b>-c</b> option (for Cassini-Soldner), the <b>-z</b> option (for azimuthal equidistant), or the <b>-g</b> option (for gnomonic). At least one of these options must be given (the last one given is used).</p>
+
+<p>Geodetic coordinates are provided on standard input as a set of lines containing (blank separated) <i>latitude</i> and <i>longitude</i> (decimal degrees or degrees, minutes, seconds). For each set of geodetic coordinates, the corresponding projected coordinates <i>x</i>, <i>y</i> (meters) are printed on standard output together with the azimuth <i>azi</i> (degrees) and reciprocal scale <i>rk</i>. For Cassini-Soldner, <i>azi</i> is the bearing of the easting direction and the scale in  [...]
+
+<h1 id="OPTIONS">OPTIONS</h1>
 
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>GeodesicProj -- perform projections based on geodesics</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>GeodesicProj</strong> ( <strong>-z</strong> | <strong>-c</strong> | <strong>-g</strong> ) <em>lat0</em> <em>lon0</em> [ <strong>-r</strong> ]
-[ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Perform projections based on geodesics.  Convert geodetic coordinates to
-either azimuthal equidistant, Cassini-Soldner, or gnomonic coordinates.
-The center of the projection (<em>lat0</em>, <em>lon0</em>) is specified by either the <strong>-c</strong>
-option (for Cassini-Soldner), the <strong>-z</strong> option (for azimuthal equidistant),
-or the <strong>-g</strong> option (for gnomonic).  At least one of these options must be
-given (the last one given is used).</p>
-<p>Geodetic coordinates are provided on standard input as a set of lines
-containing (blank separated) <em>latitude</em> and <em>longitude</em> (decimal
-degrees or degrees, minutes, seconds).  For each set of geodetic
-coordinates, the corresponding projected coordinates <em>x</em>, <em>y</em> (meters)
-are printed on standard output together with the azimuth <em>azi</em>
-(degrees) and reciprocal scale <em>rk</em>.  For Cassini-Soldner, <em>azi</em> is
-the bearing of the easting direction and the scale in the easting
-direction is 1 and the scale in the northing direction is 1/<em>rk</em>.  For
-azimuthal equidistant and gnomonic, <em>azi</em> is the bearing of the radial
-direction and the scale in the azimuthal direction is 1/<em>rk</em>.  For
-azimuthal equidistant and gnomonic, the scales in the radial direction
-are 1 and 1/<em>rk</em>^2, respectively.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
 <dl>
-<dt><strong><a name="z" class="item"><strong>-z</strong></a></strong></dt>
 
+<dt id="z"><b>-z</b></dt>
 <dd>
-<p>use the azimuthal equidistant projection centered at latitude = <em>lat0</em>,
-longitude = <em>lon0</em>.</p>
-</dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
 
-<dd>
-<p>use the Cassini-Soldner projection centered at latitude = <em>lat0</em>,
-longitude = <em>lon0</em>.</p>
-</dd>
-<dt><strong><a name="g" class="item"><strong>-g</strong></a></strong></dt>
+<p>use the azimuthal equidistant projection centered at latitude = <i>lat0</i>, longitude = <i>lon0</i>.</p>
 
-<dd>
-<p>use the ellipsoidal gnomonic projection centered at latitude = <em>lat0</em>,
-longitude = <em>lon0</em>.</p>
 </dd>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
-
+<dt id="c"><b>-c</b></dt>
 <dd>
-<p>perform the reverse projection.  <em>x</em> and <em>y</em> are given on standard
-input and each line of standard output gives <em>latitude</em>, <em>longitude</em>,
-<em>azi</em>, and <em>rk</em>.</p>
-</dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
 
+<p>use the Cassini-Soldner projection centered at latitude = <i>lat0</i>, longitude = <i>lon0</i>.</p>
+
+</dd>
+<dt id="g"><b>-g</b></dt>
 <dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.</p>
+
+<p>use the ellipsoidal gnomonic projection centered at latitude = <i>lat0</i>, longitude = <i>lon0</i>.</p>
+
 </dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
+<dt id="r"><b>-r</b></dt>
+<dd>
 
+<p>perform the reverse projection. <i>x</i> and <i>y</i> are given on standard input and each line of standard output gives <i>latitude</i>, <i>longitude</i>, <i>azi</i>, and <i>rk</i>.</p>
+
+</dd>
+<dt id="e"><b>-e</b></dt>
 <dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
+
+<p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563.</p>
+
 </dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
 
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
+
+</dd>
+<dt id="version"><b>--version</b></dt>
 <dd>
+
 <p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
 
+</dd>
+<dt id="h"><b>-h</b></dt>
 <dd>
+
 <p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
 
+</dd>
+<dt id="help"><b>--help</b></dt>
 <dd>
+
 <p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
 
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
 </dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
+<dt id="input-file"><b>--input-file</b></dt>
 <dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
 
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
 <dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
 </dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
 
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
+
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
 <dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 48.648 -2.007 | GeodesicProj -c 48.836 2.337
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
+<pre><code>   echo 48.648 -2.007 | GeodesicProj -c 48.836 2.337
    => -319919 -11791 86.7 0.999
    echo -319919 -11791 | GeodesicProj -c 48.836 2.337 -r
-   => 48.648 -2.007 86.7 0.999</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>GeodesicProj</strong> to return an exit
-code of 1.  However, an error does not cause <strong>GeodesicProj</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The ellipsoidal gnomonic projection is derived in Section 13 of
-C. F. F. Karney, <em>Geodesics on an ellipsoid of revolution</em>, Feb. 2011;
-preprint <a href="http://arxiv.org/abs/1102.1215">http://arxiv.org/abs/1102.1215</a>.  See also Section 8 of
-C. F. F. Karney, <em>Algorithms for geodesics</em>, Sept. 2011; preprint
-<a href="http://arxiv.org/abs/1109.4448">http://arxiv.org/abs/1109.4448</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>GeodesicProj</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>GeodesicProj</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-08.  Prior to version 1.9 it was
-called EquidistantTest.</p>
+   => 48.648 -2.007 86.7 0.999</code></pre>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>GeodesicProj</b> to return an exit code of 1. However, an error does not cause <b>GeodesicProj</b> to terminate; following lines will be converted.</p>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>The ellipsoidal gnomonic projection is derived in Section 8 of C. F. F. Karney, <i>Algorithms for geodesics</i>, J. Geodesy 87, 43-55 (2013); DOI <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">http://dx.doi.org/10.1007/s00190-012-0578-z</a>; addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">http://geographiclib.sf.net/geod-addenda.html</a>.</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>GeodesicProj</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>GeodesicProj</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-08. Prior to version 1.9 it was called EquidistantTest.</p>
+
 
 </body>
 
 </html>
+
+
diff --git a/man/GeodesicProj.pod b/man/GeodesicProj.pod
index 721aed8..2e2e961 100644
--- a/man/GeodesicProj.pod
+++ b/man/GeodesicProj.pod
@@ -1,5 +1,3 @@
-=for comment $Id: c2031e302eb69c8ce23ee8dd7152e58cf10df751 $
-
 =head1 NAME
 
 GeodesicProj -- perform projections based on geodesics
@@ -129,11 +127,10 @@ terminate; following lines will be converted.
 
 =head1 SEE ALSO
 
-The ellipsoidal gnomonic projection is derived in Section 13 of
-C. F. F. Karney, I<Geodesics on an ellipsoid of revolution>, Feb. 2011;
-preprint L<http://arxiv.org/abs/1102.1215>.  See also Section 8 of
-C. F. F. Karney, I<Algorithms for geodesics>, Sept. 2011; preprint
-L<http://arxiv.org/abs/1109.4448>.
+The ellipsoidal gnomonic projection is derived in Section 8 of
+C. F. F. Karney, I<Algorithms for geodesics>, J. Geodesy 87, 43-55 (2013); DOI
+L<http://dx.doi.org/10.1007/s00190-012-0578-z>;
+addenda: L<http://geographiclib.sf.net/geod-addenda.html>.
 
 =head1 AUTHOR
 
diff --git a/man/GeodesicProj.usage b/man/GeodesicProj.usage
index 07bade1..9a5ab25 100644
--- a/man/GeodesicProj.usage
+++ b/man/GeodesicProj.usage
@@ -9,7 +9,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    GeodesicProj --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/html/GeodesicProj.1.html\n";
+"    http://geographiclib.sf.net/1.34/GeodesicProj.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -109,11 +109,12 @@ int usage(int retval, bool brief) {
 "       following lines will be converted.\n"
 "\n"
 "SEE ALSO\n"
-"       The ellipsoidal gnomonic projection is derived in Section 13 of C. F.\n"
-"       F. Karney, Geodesics on an ellipsoid of revolution, Feb. 2011; preprint\n"
-"       <http://arxiv.org/abs/1102.1215>.  See also Section 8 of C. F. F.\n"
-"       Karney, Algorithms for geodesics, Sept. 2011; preprint\n"
-"       <http://arxiv.org/abs/1109.4448>.\n"
+"       The ellipsoidal gnomonic projection is derived in Section 8 of C. F. F.\n"
+"       Karney, Algorithms for geodesics, J. Geodesy 87, 43-55 (2013); DOI\n"
+"       http://dx.doi.org/10.1007/s00190-012-0578-z\n"
+"       <http://dx.doi.org/10.1007/s00190-012-0578-z>; addenda:\n"
+"       http://geographiclib.sf.net/geod-addenda.html\n"
+"       <http://geographiclib.sf.net/geod-addenda.html>.\n"
 "\n"
 "AUTHOR\n"
 "       GeodesicProj was written by Charles Karney.\n"
@@ -122,5 +123,5 @@ int usage(int retval, bool brief) {
 "       GeodesicProj was added to GeographicLib, <http://geographiclib.sf.net>,\n"
 "       in 2009-08.  Prior to version 1.9 it was called EquidistantTest.\n"
 ;
-    return retval;
+  return retval;
 }
diff --git a/man/GeoidEval.1 b/man/GeoidEval.1
index cfbb076..681a096 100644
--- a/man/GeoidEval.1
+++ b/man/GeoidEval.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GEOIDEVAL 1"
-.TH GEOIDEVAL 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
+.TH GEOIDEVAL 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -162,22 +162,22 @@ This utility can also compute the direction of gravity accurately.
 .IP "\fB\-n\fR" 4
 .IX Item "-n"
 use geoid \fIname\fR instead of the default \f(CW\*(C`egm96\-5\*(C'\fR.  See
-\&\s-1GEOIDS\s0.
+\&\*(L"\s-1GEOIDS\s0\*(R".
 .IP "\fB\-d\fR" 4
 .IX Item "-d"
 read geoid data from \fIdir\fR instead of the default.  See
-\&\s-1GEOIDS\s0.
+\&\*(L"\s-1GEOIDS\s0\*(R".
 .IP "\fB\-l\fR" 4
 .IX Item "-l"
 use bilinear interpolation instead of cubic.  See
-\&\s-1INTERPOLATION\s0.
+\&\*(L"\s-1INTERPOLATION\s0\*(R".
 .IP "\fB\-a\fR" 4
 .IX Item "-a"
-cache the entire data set in memory.  See \s-1CACHE\s0.
+cache the entire data set in memory.  See \*(L"\s-1CACHE\s0\*(R".
 .IP "\fB\-c\fR" 4
 .IX Item "-c"
 cache the data bounded by \fIsouth\fR \fIwest\fR \fInorth\fR \fIeast\fR in memory.
-See \s-1CACHE\s0.
+See \*(L"\s-1CACHE\s0\*(R".
 .IP "\fB\-g\fR" 4
 .IX Item "-g"
 print the northerly and easterly gradients after the geoid height (i.e.,
@@ -243,9 +243,8 @@ file name of \*(L"\-\*(R" stands for standard output.
 .SH "GEOIDS"
 .IX Header "GEOIDS"
 \&\fBGeoidEval\fR computes geoid heights by interpolating on the data in a
-regularly spaced table (see \s-1INTERPOLATION\s0).  The
-following geoid tables are available (however, some may not be
-installed):
+regularly spaced table (see \*(L"\s-1INTERPOLATION\s0\*(R").  The following geoid
+tables are available (however, some may not be installed):
 .PP
 .Vb 9
 \&                                  bilinear error    cubic error
diff --git a/man/GeoidEval.1.html b/man/GeoidEval.1.html
index 13b32d2..91f8f36 100644
--- a/man/GeoidEval.1.html
+++ b/man/GeoidEval.1.html
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>GeoidEval -- look up geoid heights</title>
+<title></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rev="made" href="mailto:root at localhost" />
 </head>
@@ -10,372 +10,277 @@
 <body style="background-color: white">
 
 
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
 
-<ul>
+<h1 id="NAME">NAME</h1>
 
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#geoids">GEOIDS</a></li>
-	<li><a href="#interpolation">INTERPOLATION</a></li>
-	<li><a href="#cache">CACHE</a></li>
-	<li><a href="#environment">ENVIRONMENT</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#abbreviations">ABBREVIATIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
+<p>GeoidEval -- look up geoid heights</p>
 
--->
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
 
+<p><b>GeoidEval</b> [ <b>-n</b> <i>name</i> ] [ <b>-d</b> <i>dir</i> ] [ <b>-l</b> ] [ <b>-a</b> | <b>-c</b> <i>south</i> <i>west</i> <i>north</i> <i>east</i> ] [ <b>-g</b> ] [ <b>-z</b> <i>zone</i> ] [ <b>--msltohae</b> ] [ <b>--haetomsl</b> ] [ <b>-v</b> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--outpu [...]
 
-</div>
-<!-- INDEX END -->
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p><b>GeoidEval</b> reads in positions on standard input and prints out the corresponding geoid heights on standard output. Optionally, it also prints the northerly and easterly gradients of the geoid height.</p>
+
+<p>Positions are given as latitude and longitude, UTM/UPS, or MGRS, in any of the formats accepted by GeoConvert(1). (MGRS coordinates signify the <i>center</i> of the corresponding MGRS square.) If the <b>-z</b> option is specified then the specified zone is prepended to each line of input (which must be in UTM/UPS coordinates). This allows a file with UTM eastings and northings in a single zone to be used as standard input.</p>
+
+<p>More accurate results for the geoid height are provided by Gravity(1). This utility can also compute the direction of gravity accurately.</p>
+
+<h1 id="OPTIONS">OPTIONS</h1>
 
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>GeoidEval -- look up geoid heights</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>GeoidEval</strong> [ <strong>-n</strong> <em>name</em> ] [ <strong>-d</strong> <em>dir</em> ] [ <strong>-l</strong> ]
-[ <strong>-a</strong> | <strong>-c</strong> <em>south</em> <em>west</em> <em>north</em> <em>east</em> ] [ <strong>-g</strong> ]
-[ <strong>-z</strong> <em>zone</em> ] [ <strong>--msltohae</strong> ] [ <strong>--haetomsl</strong> ]
-[ <strong>-v</strong> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p><strong>GeoidEval</strong> reads in positions on standard input and prints out the
-corresponding geoid heights on standard output.  Optionally, it also
-prints the northerly and easterly gradients of the geoid height.</p>
-<p>Positions are given as latitude and longitude, UTM/UPS, or MGRS, in any
-of the formats accepted by <a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>.  (MGRS coordinates signify the
-<em>center</em> of the corresponding MGRS square.)  If the <strong>-z</strong> option is
-specified then the specified zone is prepended to each line of input
-(which must be in UTM/UPS coordinates).  This allows a file with UTM
-eastings and northings in a single zone to be used as standard input.</p>
-<p>More accurate results for the geoid height are provided by <a href="Gravity.1.html"><code>Gravity(1)</code></a>.
-This utility can also compute the direction of gravity accurately.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
 <dl>
-<dt><strong><a name="n" class="item"><strong>-n</strong></a></strong></dt>
 
+<dt id="n"><b>-n</b></dt>
 <dd>
-<p>use geoid <em>name</em> instead of the default <code>egm96-5</code>.  See
-<a href="#geoids">GEOIDS</a>.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
 
-<dd>
-<p>read geoid data from <em>dir</em> instead of the default.  See
-<a href="#geoids">GEOIDS</a>.</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
+<p>use geoid <i>name</i> instead of the default <code>egm96-5</code>. See <a href="#GEOIDS">"GEOIDS"</a>.</p>
 
-<dd>
-<p>use bilinear interpolation instead of cubic.  See
-<a href="#interpolation">INTERPOLATION</a>.</p>
 </dd>
-<dt><strong><a name="a" class="item"><strong>-a</strong></a></strong></dt>
-
+<dt id="d"><b>-d</b></dt>
 <dd>
-<p>cache the entire data set in memory.  See <a href="#cache">CACHE</a>.</p>
-</dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
 
-<dd>
-<p>cache the data bounded by <em>south</em> <em>west</em> <em>north</em> <em>east</em> in memory.
-See <a href="#cache">CACHE</a>.</p>
-</dd>
-<dt><strong><a name="g" class="item"><strong>-g</strong></a></strong></dt>
+<p>read geoid data from <i>dir</i> instead of the default. See <a href="#GEOIDS">"GEOIDS"</a>.</p>
 
-<dd>
-<p>print the northerly and easterly gradients after the geoid height (i.e.,
-the rate at which the geoid height changes per unit distance along the
-WGS84 ellipsoid in the specified directions).  As a result of the way
-that the geoid data is stored, the calculation of gradients can result
-in large quantization errors.  This is particularly acute at high
-latitudes and for the easterly gradient.</p>
 </dd>
-<dt><strong><a name="z" class="item"><strong>-z</strong></a></strong></dt>
-
+<dt id="l"><b>-l</b></dt>
 <dd>
-<p>prefix each line of input by <em>zone</em>, e.g., <code>38N</code>.  This should be used
-when the input consists of UTM/UPS eastings and northings.</p>
-</dd>
-<dt><strong><a name="msltohae" class="item"><strong>--msltohae</strong></a></strong></dt>
 
+<p>use bilinear interpolation instead of cubic. See <a href="#INTERPOLATION">"INTERPOLATION"</a>.</p>
+
+</dd>
+<dt id="a"><b>-a</b></dt>
 <dd>
-<p>standard input should include a final token on each line which is
-treated as a height (in meters) above the geoid and the output echoes
-the input line with the height converted to height above ellipsoid
-(HAE).  If <strong>-z</strong> <em>zone</em> is specified then the <em>third</em> token is treated
-as the height; this makes it possible to convert LIDAR data where each
-line consists of: easting northing height intensity.</p>
+
+<p>cache the entire data set in memory. See <a href="#CACHE">"CACHE"</a>.</p>
+
 </dd>
-<dt><strong><a name="haetomsl" class="item"><strong>--haetomsl</strong></a></strong></dt>
+<dt id="c"><b>-c</b></dt>
+<dd>
+
+<p>cache the data bounded by <i>south</i> <i>west</i> <i>north</i> <i>east</i> in memory. See <a href="#CACHE">"CACHE"</a>.</p>
 
+</dd>
+<dt id="g"><b>-g</b></dt>
 <dd>
-<p>this is similar to <strong>--msltohae</strong> except that the height token is treated
-as a height (in meters) above the ellipsoid and the output echoes the
-input line with the height converted to height above the geoid (MSL).</p>
+
+<p>print the northerly and easterly gradients after the geoid height (i.e., the rate at which the geoid height changes per unit distance along the WGS84 ellipsoid in the specified directions). As a result of the way that the geoid data is stored, the calculation of gradients can result in large quantization errors. This is particularly acute at high latitudes and for the easterly gradient.</p>
+
 </dd>
-<dt><strong><a name="v" class="item"><strong>-v</strong></a></strong></dt>
+<dt id="z"><b>-z</b></dt>
+<dd>
 
+<p>prefix each line of input by <i>zone</i>, e.g., <code>38N</code>. This should be used when the input consists of UTM/UPS eastings and northings.</p>
+
+</dd>
+<dt id="msltohae"><b>--msltohae</b></dt>
 <dd>
-<p>print information about the geoid on standard error before processing
-the input.</p>
+
+<p>standard input should include a final token on each line which is treated as a height (in meters) above the geoid and the output echoes the input line with the height converted to height above ellipsoid (HAE). If <b>-z</b> <i>zone</i> is specified then the <i>third</i> token is treated as the height; this makes it possible to convert LIDAR data where each line consists of: easting northing height intensity.</p>
+
 </dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
+<dt id="haetomsl"><b>--haetomsl</b></dt>
+<dd>
 
+<p>this is similar to <b>--msltohae</b> except that the height token is treated as a height (in meters) above the ellipsoid and the output echoes the input line with the height converted to height above the geoid (MSL).</p>
+
+</dd>
+<dt id="v"><b>-v</b></dt>
 <dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
+
+<p>print information about the geoid on standard error before processing the input.</p>
+
 </dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
+
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
 
+</dd>
+<dt id="version"><b>--version</b></dt>
 <dd>
+
 <p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
 
+</dd>
+<dt id="h"><b>-h</b></dt>
 <dd>
+
 <p>print usage, the default geoid path and name, and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
 
+</dd>
+<dt id="help"><b>--help</b></dt>
 <dd>
+
 <p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
 
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
 </dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
+<dt id="input-file"><b>--input-file</b></dt>
 <dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
 
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
 <dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
 </dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
 
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
+
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
 <dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="geoids">GEOIDS</a></h1>
-<p><strong>GeoidEval</strong> computes geoid heights by interpolating on the data in a
-regularly spaced table (see <a href="#interpolation">INTERPOLATION</a>).  The
-following geoid tables are available (however, some may not be
-installed):</p>
-<pre>
-                                  bilinear error    cubic error
+
+<h1 id="GEOIDS">GEOIDS</h1>
+
+<p><b>GeoidEval</b> computes geoid heights by interpolating on the data in a regularly spaced table (see <a href="#INTERPOLATION">"INTERPOLATION"</a>). The following geoid tables are available (however, some may not be installed):</p>
+
+<pre><code>                                  bilinear error    cubic error
    name         geoid    grid     max      rms      max      rms
-   egm84-30     EGM84    30'      1.546 m  70 mm    0.274 m  14 mm
-   egm84-15     EGM84    15'      0.413 m  18 mm    0.021 m  1.2 mm
-   egm96-15     EGM96    15'      1.152 m  40 mm    0.169 m  7.0 mm
-   egm96-5      EGM96     5'      0.140 m  4.6 mm   .0032 m  0.7 mm
-   egm2008-5    EGM2008   5'      0.478 m  12 mm    0.294 m  4.5 mm
-   egm2008-2_5  EGM2008   2.5'    0.135 m  3.2 mm   0.031 m  0.8 mm
-   egm2008-1    EGM2008   1'      0.025 m  0.8 mm   .0022 m  0.7 mm</pre>
-<p>By default, the <code>egm96-5</code> geoid is used.  This may changed by setting
-the environment variable <a href="#geoid_name"><code>GEOID_NAME</code></a> or with the <strong>-n</strong> option.  The
-errors listed here are estimates of the quantization and interpolation
-errors in the reported heights compared to the specified geoid.</p>
-<p>The geoid data will be loaded from a directory specified at compile
-time.  This may changed by setting the environment variables
-<a href="#geoid_path"><code>GEOID_PATH</code></a> or <a href="#geographiclib_data"><code>GEOGRAPHICLIB_DATA</code></a>, or with the <strong>-d</strong> option.  The
-<strong>-h</strong> option prints the default geoid path and name.  Use the <strong>-v</strong>
-option to ascertain the full path name of the data file.</p>
-<p>Instructions for downloading and installing geoid data are available at
-<a href="http://geographiclib.sf.net/html/geoid.html#geoidinst">http://geographiclib.sf.net/html/geoid.html#geoidinst</a>.</p>
-<p><strong>NOTE</strong>: all the geoids above apply to the WGS84 ellipsoid (<em>a</em> =
-6378137 m, <em>f</em> = 1/298.257223563) only.</p>
-<p>
-</p>
-<hr />
-<h1><a name="interpolation">INTERPOLATION</a></h1>
-<p>Cubic interpolation is used to compute the geoid height unless <strong>-l</strong> is
-specified in which case bilinear interpolation is used.  The cubic
-interpolation is based on a least-squares fit of a cubic polynomial to a
-12-point stencil</p>
-<pre>
-   . 1 1 .
+   egm84-30     EGM84    30'      1.546 m  70 mm    0.274 m  14 mm
+   egm84-15     EGM84    15'      0.413 m  18 mm    0.021 m  1.2 mm
+   egm96-15     EGM96    15'      1.152 m  40 mm    0.169 m  7.0 mm
+   egm96-5      EGM96     5'      0.140 m  4.6 mm   .0032 m  0.7 mm
+   egm2008-5    EGM2008   5'      0.478 m  12 mm    0.294 m  4.5 mm
+   egm2008-2_5  EGM2008   2.5'    0.135 m  3.2 mm   0.031 m  0.8 mm
+   egm2008-1    EGM2008   1'      0.025 m  0.8 mm   .0022 m  0.7 mm</code></pre>
+
+<p>By default, the <code>egm96-5</code> geoid is used. This may changed by setting the environment variable <code>GEOID_NAME</code> or with the <b>-n</b> option. The errors listed here are estimates of the quantization and interpolation errors in the reported heights compared to the specified geoid.</p>
+
+<p>The geoid data will be loaded from a directory specified at compile time. This may changed by setting the environment variables <code>GEOID_PATH</code> or <code>GEOGRAPHICLIB_DATA</code>, or with the <b>-d</b> option. The <b>-h</b> option prints the default geoid path and name. Use the <b>-v</b> option to ascertain the full path name of the data file.</p>
+
+<p>Instructions for downloading and installing geoid data are available at <a href="http://geographiclib.sf.net/html/geoid.html#geoidinst">http://geographiclib.sf.net/html/geoid.html#geoidinst</a>.</p>
+
+<p><b>NOTE</b>: all the geoids above apply to the WGS84 ellipsoid (<i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563) only.</p>
+
+<h1 id="INTERPOLATION">INTERPOLATION</h1>
+
+<p>Cubic interpolation is used to compute the geoid height unless <b>-l</b> is specified in which case bilinear interpolation is used. The cubic interpolation is based on a least-squares fit of a cubic polynomial to a 12-point stencil</p>
+
+<pre><code>   . 1 1 .
    1 2 2 1
    1 2 2 1
-   . 1 1 .</pre>
-<p>The cubic is constrained to be independent of longitude when evaluating
-the height at one of the poles.  Cubic interpolation is considerably
-more accurate than bilinear; however it results in small discontinuities
-in the returned height on cell boundaries.  The gradients are computed
-by differentiating the interpolated results.</p>
-<p>
-</p>
-<hr />
-<h1><a name="cache">CACHE</a></h1>
-<p>By default, the data file is randomly read to compute the geoid heights
-at the input positions.  Usually this is sufficient for interactive use.
-If many heights are to be computed, use <strong>-c</strong> <em>south</em> <em>west</em> <em>north</em>
-<em>east</em> to notify <strong>GeoidEval</strong> to read a rectangle of data into memory;
-heights within the this rectangle can then be computed without any disk
-access.  If <strong>-a</strong> is specified all the geoid data is read; in the case
-of <code>egm2008-1</code>, this requires about 0.5 GB of RAM.  The evaluation of
-heights outside the cached area causes the necessary data to be read
-from disk.  Use the <strong>-v</strong> option to verify the size of the cache.</p>
-<p>Regardless of whether any cache is requested (with the <strong>-a</strong> or <strong>-c</strong>
-options), the data for the last grid cell in cached.  This allows
-the geoid height along a continuous path to be returned with little
-disk overhead.</p>
-<p>
-</p>
-<hr />
-<h1><a name="environment">ENVIRONMENT</a></h1>
+   . 1 1 .</code></pre>
+
+<p>The cubic is constrained to be independent of longitude when evaluating the height at one of the poles. Cubic interpolation is considerably more accurate than bilinear; however it results in small discontinuities in the returned height on cell boundaries. The gradients are computed by differentiating the interpolated results.</p>
+
+<h1 id="CACHE">CACHE</h1>
+
+<p>By default, the data file is randomly read to compute the geoid heights at the input positions. Usually this is sufficient for interactive use. If many heights are to be computed, use <b>-c</b> <i>south</i> <i>west</i> <i>north</i> <i>east</i> to notify <b>GeoidEval</b> to read a rectangle of data into memory; heights within the this rectangle can then be computed without any disk access. If <b>-a</b> is specified all the geoid data is read; in the case of <code>egm2008-1</code>, this [...]
+
+<p>Regardless of whether any cache is requested (with the <b>-a</b> or <b>-c</b> options), the data for the last grid cell in cached. This allows the geoid height along a continuous path to be returned with little disk overhead.</p>
+
+<h1 id="ENVIRONMENT">ENVIRONMENT</h1>
+
 <dl>
-<dt><strong><a name="geoid_name" class="item"><strong>GEOID_NAME</strong></a></strong></dt>
 
+<dt id="GEOID_NAME"><b>GEOID_NAME</b></dt>
 <dd>
-<p>Override the compile-time default geoid name of <code>egm96-5</code>.  The <strong>-h</strong>
-option reports the value of <strong>GEOID_NAME</strong>, if defined, otherwise it
-reports the compile-time value.  If the <strong>-n</strong> <em>name</em> option is used,
-then <em>name</em> takes precedence.</p>
-</dd>
-<dt><strong><a name="geoid_path" class="item"><strong>GEOID_PATH</strong></a></strong></dt>
 
-<dd>
-<p>Override the compile-time default geoid path.  This is typically
-<code>/usr/local/share/GeographicLib/geoids</code> on Unix-like systems and
-<code>C:/Documents and Settings/All Users/Application
-Data/GeographicLib/geoids</code> on Windows systems.  The <strong>-h</strong> option reports
-the value of <strong>GEOID_PATH</strong>, if defined, otherwise it reports the
-compile-time value.  If the <strong>-d</strong> <em>dir</em> option is used, then <em>dir</em>
-takes precedence.</p>
+<p>Override the compile-time default geoid name of <code>egm96-5</code>. The <b>-h</b> option reports the value of <b>GEOID_NAME</b>, if defined, otherwise it reports the compile-time value. If the <b>-n</b> <i>name</i> option is used, then <i>name</i> takes precedence.</p>
+
 </dd>
-<dt><strong><a name="geographiclib_data" class="item"><strong>GEOGRAPHICLIB_DATA</strong></a></strong></dt>
+<dt id="GEOID_PATH"><b>GEOID_PATH</b></dt>
+<dd>
 
+<p>Override the compile-time default geoid path. This is typically <code>/usr/local/share/GeographicLib/geoids</code> on Unix-like systems and <code>C:/Documents and Settings/All Users/Application Data/GeographicLib/geoids</code> on Windows systems. The <b>-h</b> option reports the value of <b>GEOID_PATH</b>, if defined, otherwise it reports the compile-time value. If the <b>-d</b> <i>dir</i> option is used, then <i>dir</i> takes precedence.</p>
+
+</dd>
+<dt id="GEOGRAPHICLIB_DATA"><b>GEOGRAPHICLIB_DATA</b></dt>
 <dd>
-<p>Another way of overriding the compile-time default magnetic path.  If it
-is set (and if <strong>MAGNETIC_PATH</strong> is not set), then
-$<strong>GEOGRAPHICLIB_DATA</strong>/magnetic is used.</p>
+
+<p>Another way of overriding the compile-time default magnetic path. If it is set (and if <b>MAGNETIC_PATH</b> is not set), then $<b>GEOGRAPHICLIB_DATA</b>/magnetic is used.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>GeoidEval</strong> to return an exit code
-of 1.  However, an error does not cause <strong>GeoidEval</strong> to terminate;
-following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="abbreviations">ABBREVIATIONS</a></h1>
-<p>The geoid is usually approximated by an "earth gravity model". The
-models published by the NGA are:</p>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>GeoidEval</b> to return an exit code of 1. However, an error does not cause <b>GeoidEval</b> to terminate; following lines will be converted.</p>
+
+<h1 id="ABBREVIATIONS">ABBREVIATIONS</h1>
+
+<p>The geoid is usually approximated by an "earth gravity model". The models published by the NGA are:</p>
+
 <dl>
-<dt><strong><a name="egm84" class="item"><strong>EGM84</strong></a></strong></dt>
 
+<dt id="EGM84"><b>EGM84</b></dt>
 <dd>
-<p>An earth gravity model published by the NGA in 1984,
-<a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html</a>.</p>
-</dd>
-<dt><strong><a name="egm96" class="item"><strong>EGM96</strong></a></strong></dt>
 
-<dd>
-<p>An earth gravity model published by the NGA in 1996,
-<a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html</a>.</p>
-</dd>
-<dt><strong><a name="egm2008" class="item"><strong>EGM2008</strong></a></strong></dt>
+<p>An earth gravity model published by the NGA in 1984, <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html</a>.</p>
 
-<dd>
-<p>An earth gravity model published by the NGA in 2008,
-<a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008</a>.</p>
 </dd>
-<dt><strong><a name="wgs84" class="item"><strong>WGS84</strong></a></strong></dt>
+<dt id="EGM96"><b>EGM96</b></dt>
+<dd>
+
+<p>An earth gravity model published by the NGA in 1996, <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html</a>.</p>
 
+</dd>
+<dt id="EGM2008"><b>EGM2008</b></dt>
 <dd>
-<p>World Geodetic System 1984,
-<a href="http://en.wikipedia.org/wiki/WGS84">http://en.wikipedia.org/wiki/WGS84</a>.</p>
+
+<p>An earth gravity model published by the NGA in 2008, <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008</a>.</p>
+
 </dd>
-<dt><strong><a name="hae" class="item"><strong>HAE</strong></a></strong></dt>
+<dt id="WGS84"><b>WGS84</b></dt>
+<dd>
 
+<p>World Geodetic System 1984, <a href="http://en.wikipedia.org/wiki/WGS84">http://en.wikipedia.org/wiki/WGS84</a>.</p>
+
+</dd>
+<dt id="HAE"><b>HAE</b></dt>
 <dd>
+
 <p>Height above the WGS84 ellipsoid.</p>
-</dd>
-<dt><strong><a name="msl" class="item"><strong>MSL</strong></a></strong></dt>
 
+</dd>
+<dt id="MSL"><b>MSL</b></dt>
 <dd>
-<p>Mean sea level, used as a convenient short hand for the geoid.
-(However, typically, the geoid differs by a few meters from mean sea
-level.)</p>
+
+<p>Mean sea level, used as a convenient short hand for the geoid. (However, typically, the geoid differs by a few meters from mean sea level.)</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
 <p>The height of the EGM96 geoid at Timbuktu</p>
-<pre>
-    echo 16:46:33N 3:00:34W | GeoidEval
-    => 28.7068 -0.02e-6 -1.73e-6</pre>
-<p>The first number returned is the height of the geoid and the 2nd and 3rd
-are its slopes in the northerly and easterly directions.</p>
+
+<pre><code>    echo 16:46:33N 3:00:34W | GeoidEval
+    => 28.7068 -0.02e-6 -1.73e-6</code></pre>
+
+<p>The first number returned is the height of the geoid and the 2nd and 3rd are its slopes in the northerly and easterly directions.</p>
+
 <p>Convert a point in UTM zone 18N from MSL to HAE</p>
-<pre>
-   echo 531595 4468135 23 | GeoidEval --msltohae -z 18N
-   => 531595 4468135 -10.842</pre>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p><a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>, <a href="Gravity.1.html"><code>Gravity(1)</code></a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>GeoidEval</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>GeoidEval</strong> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>,
-in 2009-09.</p>
+
+<pre><code>   echo 531595 4468135 23 | GeoidEval --msltohae -z 18N
+   => 531595 4468135 -10.842</code></pre>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>GeoConvert(1), Gravity(1).</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>GeoidEval</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>GeoidEval</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-09.</p>
+
 
 </body>
 
 </html>
+
+
diff --git a/man/GeoidEval.pod b/man/GeoidEval.pod
index ded4b1a..c6ca929 100644
--- a/man/GeoidEval.pod
+++ b/man/GeoidEval.pod
@@ -1,5 +1,3 @@
-=for comment $Id: a3894e4de1e548a59e099d2a170ab330b25dbb21 $
-
 =head1 NAME
 
 GeoidEval -- look up geoid heights
@@ -39,26 +37,26 @@ This utility can also compute the direction of gravity accurately.
 =item B<-n>
 
 use geoid I<name> instead of the default C<egm96-5>.  See
-L<GEOIDS|geoids>.
+L</GEOIDS>.
 
 =item B<-d>
 
 read geoid data from I<dir> instead of the default.  See
-L<GEOIDS|geoids>.
+L</GEOIDS>.
 
 =item B<-l>
 
 use bilinear interpolation instead of cubic.  See
-L<INTERPOLATION|interpolation>.
+L</INTERPOLATION>.
 
 =item B<-a>
 
-cache the entire data set in memory.  See L<CACHE|cache>.
+cache the entire data set in memory.  See L</CACHE>.
 
 =item B<-c>
 
 cache the data bounded by I<south> I<west> I<north> I<east> in memory.
-See L<CACHE|cache>.
+See L</CACHE>.
 
 =item B<-g>
 
@@ -140,9 +138,8 @@ file name of "-" stands for standard output.
 =head1 GEOIDS
 
 B<GeoidEval> computes geoid heights by interpolating on the data in a
-regularly spaced table (see L<INTERPOLATION|interpolation>).  The
-following geoid tables are available (however, some may not be
-installed):
+regularly spaced table (see L</INTERPOLATION>).  The following geoid
+tables are available (however, some may not be installed):
 
                                   bilinear error    cubic error
    name         geoid    grid     max      rms      max      rms
diff --git a/man/GeoidEval.usage b/man/GeoidEval.usage
index 43ead01..7278111 100644
--- a/man/GeoidEval.usage
+++ b/man/GeoidEval.usage
@@ -10,7 +10,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    GeoidEval --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/html/GeoidEval.1.html\n";
+"    http://geographiclib.sf.net/1.34/GeoidEval.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -39,16 +39,16 @@ int usage(int retval, bool brief) {
 "       This utility can also compute the direction of gravity accurately.\n"
 "\n"
 "OPTIONS\n"
-"       -n  use geoid name instead of the default \"egm96-5\".  See GEOIDS.\n"
+"       -n  use geoid name instead of the default \"egm96-5\".  See \"GEOIDS\".\n"
 "\n"
-"       -d  read geoid data from dir instead of the default.  See GEOIDS.\n"
+"       -d  read geoid data from dir instead of the default.  See \"GEOIDS\".\n"
 "\n"
-"       -l  use bilinear interpolation instead of cubic.  See INTERPOLATION.\n"
+"       -l  use bilinear interpolation instead of cubic.  See \"INTERPOLATION\".\n"
 "\n"
-"       -a  cache the entire data set in memory.  See CACHE.\n"
+"       -a  cache the entire data set in memory.  See \"CACHE\".\n"
 "\n"
 "       -c  cache the data bounded by south west north east in memory.  See\n"
-"           CACHE.\n"
+"           \"CACHE\".\n"
 "\n"
 "       -g  print the northerly and easterly gradients after the geoid height\n"
 "           (i.e., the rate at which the geoid height changes per unit distance\n"
@@ -112,8 +112,8 @@ int usage(int retval, bool brief) {
 "\n"
 "GEOIDS\n"
 "       GeoidEval computes geoid heights by interpolating on the data in a\n"
-"       regularly spaced table (see INTERPOLATION).  The following geoid tables\n"
-"       are available (however, some may not be installed):\n"
+"       regularly spaced table (see \"INTERPOLATION\").  The following geoid\n"
+"       tables are available (however, some may not be installed):\n"
 "\n"
 "                                         bilinear error    cubic error\n"
 "          name         geoid    grid     max      rms      max      rms\n"
@@ -256,5 +256,5 @@ int usage(int retval, bool brief) {
 "       GeoidEval was added to GeographicLib, <http://geographiclib.sf.net>, in\n"
 "       2009-09.\n"
 ;
-    return retval;
+  return retval;
 }
diff --git a/man/Gravity.1 b/man/Gravity.1
index f3a97ca..97e247b 100644
--- a/man/Gravity.1
+++ b/man/Gravity.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GRAVITY 1"
-.TH GRAVITY 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
+.TH GRAVITY 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -165,11 +165,11 @@ and \fI\s-1GM\s0\fR = 3986004.418e8 m^3/s^2.
 .IP "\fB\-n\fR" 4
 .IX Item "-n"
 use gravity field model \fIname\fR instead of the default \f(CW\*(C`egm96\*(C'\fR.  See
-\&\s-1MODELS\s0.
+\&\*(L"\s-1MODELS\s0\*(R".
 .IP "\fB\-d\fR" 4
 .IX Item "-d"
 read gravity models from \fIdir\fR instead of the default.  See
-\&\s-1MODELS\s0.
+\&\*(L"\s-1MODELS\s0\*(R".
 .IP "\fB\-G\fR" 4
 .IX Item "-G"
 compute the acceleration due to gravity (including the centrifugal
diff --git a/man/Gravity.1.html b/man/Gravity.1.html
index d929096..3fbdba1 100644
--- a/man/Gravity.1.html
+++ b/man/Gravity.1.html
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>Gravity -- compute the earth's gravity field</title>
+<title></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rev="made" href="mailto:root at localhost" />
 </head>
@@ -10,290 +10,200 @@
 <body style="background-color: white">
 
 
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#models">MODELS</a></li>
-	<li><a href="#environment">ENVIRONMENT</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>Gravity -- compute the earth's gravity field</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>Gravity</strong> [ <strong>-n</strong> <em>name</em> ] [ <strong>-d</strong> <em>dir</em> ]
-[ <strong>-G</strong> | <strong>-D</strong> | <strong>-A</strong> | <strong>-H</strong> ] [ <strong>-c</strong> <em>lat</em> <em>h</em> ]
-[ <strong>-p</strong> <em>prec</em> ]
-[ <strong>-v</strong> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p><strong>Gravity</strong> reads in positions on standard input and prints out the
-gravitational field on standard output.</p>
-<p>The input line is of the form <em>lat</em> <em>lon</em> <em>h</em>.  <em>lat</em> and <em>lon</em> are
-the latitude and longitude expressed as decimal degrees or degrees,
-minutes, and seconds; see <a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a> for details.  <em>h</em> is the height
-above the ellipsoid in meters; this quantity is optional and defaults to
-0.  Alternatively, the gravity field can be computed at various points
-on a circle of latitude (constant <em>lat</em> and <em>h</em>) via the <strong>-c</strong> option;
-in this case only the longitude should be given on the input lines.  The
-quantities printed out are governed by the <strong>-G</strong> (default), <strong>-D</strong>,
-<strong>-A</strong>, or <strong>-H</strong> options.</p>
-<p>All the supported gravity models use WGS84 as the reference ellipsoid
-<em>a</em> = 6378137 m, <em>f</em> = 1/298.257223563, <em>omega</em> = 7292115e-11 rad/s,
-and <em>GM</em> = 3986004.418e8 m^3/s^2.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Gravity -- compute the earth's gravity field</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<p><b>Gravity</b> [ <b>-n</b> <i>name</i> ] [ <b>-d</b> <i>dir</i> ] [ <b>-G</b> | <b>-D</b> | <b>-A</b> | <b>-H</b> ] [ <b>-c</b> <i>lat</i> <i>h</i> ] [ <b>-p</b> <i>prec</i> ] [ <b>-v</b> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p><b>Gravity</b> reads in positions on standard input and prints out the gravitational field on standard output.</p>
+
+<p>The input line is of the form <i>lat</i> <i>lon</i> <i>h</i>. <i>lat</i> and <i>lon</i> are the latitude and longitude expressed as decimal degrees or degrees, minutes, and seconds; see GeoConvert(1) for details. <i>h</i> is the height above the ellipsoid in meters; this quantity is optional and defaults to 0. Alternatively, the gravity field can be computed at various points on a circle of latitude (constant <i>lat</i> and <i>h</i>) via the <b>-c</b> option; in this case only the lon [...]
+
+<p>All the supported gravity models use WGS84 as the reference ellipsoid <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563, <i>omega</i> = 7292115e-11 rad/s, and <i>GM</i> = 3986004.418e8 m^3/s^2.</p>
+
+<h1 id="OPTIONS">OPTIONS</h1>
+
 <dl>
-<dt><strong><a name="n" class="item"><strong>-n</strong></a></strong></dt>
 
+<dt id="n"><b>-n</b></dt>
 <dd>
-<p>use gravity field model <em>name</em> instead of the default <code>egm96</code>.  See
-<a href="#models">MODELS</a>.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
 
-<dd>
-<p>read gravity models from <em>dir</em> instead of the default.  See
-<a href="#models">MODELS</a>.</p>
-</dd>
-<dt><strong><a name="g" class="item"><strong>-G</strong></a></strong></dt>
+<p>use gravity field model <i>name</i> instead of the default <code>egm96</code>. See <a href="#MODELS">"MODELS"</a>.</p>
 
-<dd>
-<p>compute the acceleration due to gravity (including the centrifugal
-acceleration due the the earth's rotation) <strong>g</strong>.  The output consists of
-<em>gx</em> <em>gy</em> <em>gz</em> (all in m/s^2), where the <em>x</em>, <em>y</em>, and <em>z</em>
-components are in easterly, northerly, and up directions, respectively.
-Usually <em>gz</em> is negative.</p>
 </dd>
-<dt><strong><a name="d" class="item"><strong>-D</strong></a></strong></dt>
-
+<dt id="d"><b>-d</b></dt>
 <dd>
-<p>compute the gravity disturbance <strong>delta</strong> = <strong>g</strong> - <strong>gamma</strong>, where
-<strong>gamma</strong> is the "normal" gravity due to the reference ellipsoid .  The
-output consists of <em>deltax</em> <em>deltay</em> <em>deltaz</em> (all in mGal, 1 mGal =
-10^-5 m/s^2), where the <em>x</em>, <em>y</em>, and <em>z</em> components are in easterly,
-northerly, and up directions, respectively.  Note that <em>deltax</em> =
-<em>gx</em>, because <em>gammax</em> = 0.</p>
-</dd>
-<dt><strong><a name="a" class="item"><strong>-A</strong></a></strong></dt>
 
-<dd>
-<p>computes the gravitational anomaly.  The output consists of 3 items
-<em>Dg01</em> <em>xi</em> <em>eta</em>, where <em>Dg01</em> is in mGal (1 mGal = 10^-5 m/s^2)
-and <em>xi</em> and <em>eta</em> are in arcseconds.  The gravitational anomaly
-compares the gravitational field <strong>g</strong> at <em>P</em> with the normal gravity
-<strong>gamma</strong> at <em>Q</em> where the <em>P</em> is vertically above <em>Q</em> and the
-gravitational potential at <em>P</em> equals the normal potential at <em>Q</em>.
-<em>Dg01</em> gives the difference in the magnitudes of these two vectors and
-<em>xi</em> and <em>eta</em> give the difference in their directions (as northerly
-and easterly components).  The calculation uses a spherical
-approximation to match the results of the NGA's synthesis programs.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-H</strong></a></strong></dt>
+<p>read gravity models from <i>dir</i> instead of the default. See <a href="#MODELS">"MODELS"</a>.</p>
 
-<dd>
-<p>compute the height of the geoid above the reference ellipsoid (in
-meters).  In this case, <em>h</em> should be zero.  The results accurately
-match the results of the NGA's synthesis programs.  <a href="GeoidEval.1.html"><code>GeoidEval(1)</code></a> can
-compute geoid heights much more quickly by interpolating on a grid of
-precomputed results; however the results from <a href="GeoidEval.1.html"><code>GeoidEval(1)</code></a> are only
-accurate to a few millimeters.</p>
 </dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
-
+<dt id="G"><b>-G</b></dt>
 <dd>
-<p>evaluate the field on a circle of latitude given by <em>lat</em> and <em>h</em>
-instead of reading these quantities from the input lines.  In this case,
-<strong>Gravity</strong> can calculate the field considerably more quickly.  If geoid
-heights are being computed (the <strong>-H</strong> option), then <em>h</em> must be zero.</p>
+
+<p>compute the acceleration due to gravity (including the centrifugal acceleration due the the earth's rotation) <b>g</b>. The output consists of <i>gx</i> <i>gy</i> <i>gz</i> (all in m/s^2), where the <i>x</i>, <i>y</i>, and <i>z</i> components are in easterly, northerly, and up directions, respectively. Usually <i>gz</i> is negative.</p>
+
 </dd>
-<dt><strong><a name="p" class="item"><strong>-p</strong></a></strong></dt>
+<dt id="D"><b>-D</b></dt>
+<dd>
 
+<p>compute the gravity disturbance <b>delta</b> = <b>g</b> - <b>gamma</b>, where <b>gamma</b> is the "normal" gravity due to the reference ellipsoid . The output consists of <i>deltax</i> <i>deltay</i> <i>deltaz</i> (all in mGal, 1 mGal = 10^-5 m/s^2), where the <i>x</i>, <i>y</i>, and <i>z</i> components are in easterly, northerly, and up directions, respectively. Note that <i>deltax</i> = <i>gx</i>, because <i>gammax</i> = 0.</p>
+
+</dd>
+<dt id="A"><b>-A</b></dt>
 <dd>
-<p>set the output precision to <em>prec</em>.  By default <em>prec</em> is 5 for
-acceleration due to gravity, 3 for the gravity disturbance and anomaly,
-and 4 for the geoid height.</p>
+
+<p>computes the gravitational anomaly. The output consists of 3 items <i>Dg01</i> <i>xi</i> <i>eta</i>, where <i>Dg01</i> is in mGal (1 mGal = 10^-5 m/s^2) and <i>xi</i> and <i>eta</i> are in arcseconds. The gravitational anomaly compares the gravitational field <b>g</b> at <i>P</i> with the normal gravity <b>gamma</b> at <i>Q</i> where the <i>P</i> is vertically above <i>Q</i> and the gravitational potential at <i>P</i> equals the normal potential at <i>Q</i>. <i>Dg01</i> gives the diff [...]
+
 </dd>
-<dt><strong><a name="v" class="item"><strong>-v</strong></a></strong></dt>
+<dt id="H"><b>-H</b></dt>
+<dd>
+
+<p>compute the height of the geoid above the reference ellipsoid (in meters). In this case, <i>h</i> should be zero. The results accurately match the results of the NGA's synthesis programs. GeoidEval(1) can compute geoid heights much more quickly by interpolating on a grid of precomputed results; however the results from GeoidEval(1) are only accurate to a few millimeters.</p>
 
+</dd>
+<dt id="c"><b>-c</b></dt>
 <dd>
-<p>print information about the gravity model on standard error before
-processing the input.</p>
+
+<p>evaluate the field on a circle of latitude given by <i>lat</i> and <i>h</i> instead of reading these quantities from the input lines. In this case, <b>Gravity</b> can calculate the field considerably more quickly. If geoid heights are being computed (the <b>-H</b> option), then <i>h</i> must be zero.</p>
+
 </dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
+<dt id="p"><b>-p</b></dt>
+<dd>
+
+<p>set the output precision to <i>prec</i>. By default <i>prec</i> is 5 for acceleration due to gravity, 3 for the gravity disturbance and anomaly, and 4 for the geoid height.</p>
 
+</dd>
+<dt id="v"><b>-v</b></dt>
 <dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
+
+<p>print information about the gravity model on standard error before processing the input.</p>
+
 </dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
+
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
 
+</dd>
+<dt id="version"><b>--version</b></dt>
 <dd>
+
 <p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
 
+</dd>
+<dt id="h"><b>-h</b></dt>
 <dd>
+
 <p>print usage, the default gravity path and name, and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
 
+</dd>
+<dt id="help"><b>--help</b></dt>
 <dd>
+
 <p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
 
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
 </dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
+<dt id="input-file"><b>--input-file</b></dt>
 <dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
 
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
 <dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
 </dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
+
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
 
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
 <dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="models">MODELS</a></h1>
-<p><strong>Gravity</strong> computes the gravity field using one of the following models</p>
-<pre>
-    egm84, earth gravity model 1984.  See
-      <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html</a>
+
+<h1 id="MODELS">MODELS</h1>
+
+<p><b>Gravity</b> computes the gravity field using one of the following models</p>
+
+<pre><code>    egm84, earth gravity model 1984.  See
+      http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html
     egm96, earth gravity model 1996.  See
-      <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html</a>
+      http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html
     egm2008, earth gravity model 2008.  See
-      <a href="http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008">http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008</a>
+      http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
     wgs84, world geodetic system 1984.  This returns the normal
-      gravity for the WGS84 ellipsoid.</pre>
-<p>These models approximate the gravitation field above the surface of the
-earth.  By default, the <code>egm96</code> gravity model is used.  This may
-changed by setting the environment variable <a href="#gravity_name"><code>GRAVITY_NAME</code></a> or with the
-<strong>-n</strong> option.</p>
-<p>The gravity models will be loaded from a directory specified at compile
-time.  This may changed by setting the environment variables
-<a href="#gravity_path"><code>GRAVITY_PATH</code></a> or <a href="#geographiclib_data"><code>GEOGRAPHICLIB_DATA</code></a>, or with the <strong>-d</strong> option.
-The <strong>-h</strong> option prints the default gravity path and name.  Use the
-<strong>-v</strong> option to ascertain the full path name of the data file.</p>
-<p>Instructions for downloading and installing gravity models are
-available at
-<a href="http://geographiclib.sf.net/html/gravity.html#gravityinst">http://geographiclib.sf.net/html/gravity.html#gravityinst</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="environment">ENVIRONMENT</a></h1>
+      gravity for the WGS84 ellipsoid.</code></pre>
+
+<p>These models approximate the gravitation field above the surface of the earth. By default, the <code>egm96</code> gravity model is used. This may changed by setting the environment variable <code>GRAVITY_NAME</code> or with the <b>-n</b> option.</p>
+
+<p>The gravity models will be loaded from a directory specified at compile time. This may changed by setting the environment variables <code>GRAVITY_PATH</code> or <code>GEOGRAPHICLIB_DATA</code>, or with the <b>-d</b> option. The <b>-h</b> option prints the default gravity path and name. Use the <b>-v</b> option to ascertain the full path name of the data file.</p>
+
+<p>Instructions for downloading and installing gravity models are available at <a href="http://geographiclib.sf.net/html/gravity.html#gravityinst">http://geographiclib.sf.net/html/gravity.html#gravityinst</a>.</p>
+
+<h1 id="ENVIRONMENT">ENVIRONMENT</h1>
+
 <dl>
-<dt><strong><a name="gravity_name" class="item"><strong>GRAVITY_NAME</strong></a></strong></dt>
 
+<dt id="GRAVITY_NAME"><b>GRAVITY_NAME</b></dt>
 <dd>
-<p>Override the compile-time default gravity name of <code>egm96</code>.  The <strong>-h</strong>
-option reports the value of <strong>GRAVITY_NAME</strong>, if defined, otherwise it
-reports the compile-time value.  If the <strong>-n</strong> <em>name</em> option is used,
-then <em>name</em> takes precedence.</p>
-</dd>
-<dt><strong><a name="gravity_path" class="item"><strong>GRAVITY_PATH</strong></a></strong></dt>
 
-<dd>
-<p>Override the compile-time default gravity path.  This is typically
-<code>/usr/local/share/GeographicLib/gravity</code> on Unix-like systems and
-<code>C:/Documents and Settings/All Users/Application
-Data/GeographicLib/gravity</code> on Windows systems.  The <strong>-h</strong> option reports
-the value of <strong>GRAVITY_PATH</strong>, if defined, otherwise it reports the
-compile-time value.  If the <strong>-d</strong> <em>dir</em> option is used, then <em>dir</em>
-takes precedence.</p>
+<p>Override the compile-time default gravity name of <code>egm96</code>. The <b>-h</b> option reports the value of <b>GRAVITY_NAME</b>, if defined, otherwise it reports the compile-time value. If the <b>-n</b> <i>name</i> option is used, then <i>name</i> takes precedence.</p>
+
 </dd>
-<dt><strong><a name="geographiclib_data" class="item"><strong>GEOGRAPHICLIB_DATA</strong></a></strong></dt>
+<dt id="GRAVITY_PATH"><b>GRAVITY_PATH</b></dt>
+<dd>
+
+<p>Override the compile-time default gravity path. This is typically <code>/usr/local/share/GeographicLib/gravity</code> on Unix-like systems and <code>C:/Documents and Settings/All Users/Application Data/GeographicLib/gravity</code> on Windows systems. The <b>-h</b> option reports the value of <b>GRAVITY_PATH</b>, if defined, otherwise it reports the compile-time value. If the <b>-d</b> <i>dir</i> option is used, then <i>dir</i> takes precedence.</p>
 
+</dd>
+<dt id="GEOGRAPHICLIB_DATA"><b>GEOGRAPHICLIB_DATA</b></dt>
 <dd>
-<p>Another way of overriding the compile-time default gravity path.  If it
-is set (and if <strong>GRAVITY_PATH</strong> is not set), then
-$<strong>GEOGRAPHICLIB_DATA</strong>/gravity is used.</p>
+
+<p>Another way of overriding the compile-time default gravity path. If it is set (and if <b>GRAVITY_PATH</b> is not set), then $<b>GEOGRAPHICLIB_DATA</b>/gravity is used.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>Gravity</strong> to return an exit
-code of 1.  However, an error does not cause <strong>Gravity</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>Gravity</b> to return an exit code of 1. However, an error does not cause <b>Gravity</b> to terminate; following lines will be converted.</p>
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
 <p>The gravity field from EGM2008 at the top of Mount Everest</p>
-<pre>
-    echo 27:59:17N 86:55:32E 8820 | Gravity -n egm2008
-    => -0.00001 0.00103 -9.76782</pre>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p><a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>, <a href="GeoidEval.1.html"><code>GeoidEval(1)</code></a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>Gravity</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>Gravity</strong> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>,
-in version 1.16.</p>
+
+<pre><code>    echo 27:59:17N 86:55:32E 8820 | Gravity -n egm2008
+    => -0.00001 0.00103 -9.76782</code></pre>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>GeoConvert(1), GeoidEval(1).</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>Gravity</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>Gravity</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in version 1.16.</p>
+
 
 </body>
 
 </html>
+
+
diff --git a/man/Gravity.pod b/man/Gravity.pod
index d30f034..90f0c8e 100644
--- a/man/Gravity.pod
+++ b/man/Gravity.pod
@@ -1,5 +1,3 @@
-=for comment $Id: bf56ca96d0775a0610ee03a5e6d92bb21afeff7b $
-
 =head1 NAME
 
 Gravity -- compute the earth's gravity field
@@ -42,12 +40,12 @@ and I<GM> = 3986004.418e8 m^3/s^2.
 =item B<-n>
 
 use gravity field model I<name> instead of the default C<egm96>.  See
-L<MODELS|models>.
+L</MODELS>.
 
 =item B<-d>
 
 read gravity models from I<dir> instead of the default.  See
-L<MODELS|models>.
+L</MODELS>.
 
 =item B<-G>
 
diff --git a/man/Gravity.usage b/man/Gravity.usage
index 790a828..20b5223 100644
--- a/man/Gravity.usage
+++ b/man/Gravity.usage
@@ -9,7 +9,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    Gravity --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/html/Gravity.1.html\n";
+"    http://geographiclib.sf.net/1.34/Gravity.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -40,9 +40,9 @@ int usage(int retval, bool brief) {
 "\n"
 "OPTIONS\n"
 "       -n  use gravity field model name instead of the default \"egm96\".  See\n"
-"           MODELS.\n"
+"           \"MODELS\".\n"
 "\n"
-"       -d  read gravity models from dir instead of the default.  See MODELS.\n"
+"       -d  read gravity models from dir instead of the default.  See \"MODELS\".\n"
 "\n"
 "       -G  compute the acceleration due to gravity (including the centrifugal\n"
 "           acceleration due the the earth's rotation) g.  The output consists\n"
@@ -191,5 +191,5 @@ int usage(int retval, bool brief) {
 "       Gravity was added to GeographicLib, <http://geographiclib.sf.net>, in\n"
 "       version 1.16.\n"
 ;
-    return retval;
+  return retval;
 }
diff --git a/man/MagneticField.1 b/man/MagneticField.1
index d340791..0659f23 100644
--- a/man/MagneticField.1
+++ b/man/MagneticField.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "MAGNETICFIELD 1"
-.TH MAGNETICFIELD 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
+.TH MAGNETICFIELD 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -183,11 +183,11 @@ The \s-1WGS84\s0 ellipsoid is used, \fIa\fR = 6378137 m, \fIf\fR = 1/298.2572235
 .IP "\fB\-n\fR" 4
 .IX Item "-n"
 use magnetic field model \fIname\fR instead of the default \f(CW\*(C`wmm2010\*(C'\fR.  See
-\&\s-1MODELS\s0.
+\&\*(L"\s-1MODELS\s0\*(R".
 .IP "\fB\-d\fR" 4
 .IX Item "-d"
 read magnetic models from \fIdir\fR instead of the default.  See
-\&\s-1MODELS\s0.
+\&\*(L"\s-1MODELS\s0\*(R".
 .IP "\fB\-t\fR" 4
 .IX Item "-t"
 evaluate the field at \fItime\fR instead of reading the time from the input
diff --git a/man/MagneticField.1.html b/man/MagneticField.1.html
index cf39b66..cac6794 100644
--- a/man/MagneticField.1.html
+++ b/man/MagneticField.1.html
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>MagneticField -- compute the earth's magnetic field</title>
+<title></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rev="made" href="mailto:root at localhost" />
 </head>
@@ -10,71 +10,24 @@
 <body style="background-color: white">
 
 
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
-
-<ul>
-
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#models">MODELS</a></li>
-	<li><a href="#environment">ENVIRONMENT</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
-
--->
-
-
-</div>
-<!-- INDEX END -->
-
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>MagneticField -- compute the earth's magnetic field</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>MagneticField</strong> [ <strong>-n</strong> <em>name</em> ] [ <strong>-d</strong> <em>dir</em> ]
-[ <strong>-t</strong> <em>time</em> | <strong>-c</strong> <em>time</em> <em>lat</em> <em>h</em> ]
-[ <strong>-r</strong> ] [ <strong>-T</strong> <em>tguard</em> ] [ <strong>-H</strong> <em>hguard</em> ] [ <strong>-p</strong> <em>prec</em> ]
-[ <strong>-v</strong> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p><strong>MagneticField</strong> reads in times and positions on standard input and
-prints out the geomagnetic field on standard output and, optionally, its
-rate of change.</p>
-<p>The input line is of the form <em>time</em> <em>lat</em> <em>lon</em> <em>h</em>. <em>time</em> is a
-date of the form 2012-07-03 or a fractional year such as 2012.5.  <em>lat</em>
-and <em>lon</em> are the latitude and longitude expressed as decimal degrees
-or degrees, minutes, and seconds; see <a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a> for details.  <em>h</em>
-is the height above the ellipsoid in meters; this is optional and
-defaults to zero.  Alternatively, <em>time</em> can be given on the command
-line as the argument to the <strong>-t</strong> option, in which case it should not be
-included on the input lines.  Finally, the magnetic field can be
-computed at various points on a circle of latitude (constant <em>time</em>,
-<em>lat</em>, and <em>h</em>) via the <strong>-c</strong> option; in this case only the longitude
-should be given on the input lines.</p>
+
+<h1 id="NAME">NAME</h1>
+
+<p>MagneticField -- compute the earth's magnetic field</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<p><b>MagneticField</b> [ <b>-n</b> <i>name</i> ] [ <b>-d</b> <i>dir</i> ] [ <b>-t</b> <i>time</i> | <b>-c</b> <i>time</i> <i>lat</i> <i>h</i> ] [ <b>-r</b> ] [ <b>-T</b> <i>tguard</i> ] [ <b>-H</b> <i>hguard</i> ] [ <b>-p</b> <i>prec</i> ] [ <b>-v</b> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-fi [...]
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p><b>MagneticField</b> reads in times and positions on standard input and prints out the geomagnetic field on standard output and, optionally, its rate of change.</p>
+
+<p>The input line is of the form <i>time</i> <i>lat</i> <i>lon</i> <i>h</i>. <i>time</i> is a date of the form 2012-07-03 or a fractional year such as 2012.5. <i>lat</i> and <i>lon</i> are the latitude and longitude expressed as decimal degrees or degrees, minutes, and seconds; see GeoConvert(1) for details. <i>h</i> is the height above the ellipsoid in meters; this is optional and defaults to zero. Alternatively, <i>time</i> can be given on the command line as the argument to the <b>-t< [...]
+
 <p>The output consists of the following 7 items:</p>
-<pre>
-  the declination (the direction of the horizontal component of
+
+<pre><code>  the declination (the direction of the horizontal component of
     the magnetic field measured clockwise from north) in degrees,
   the inclination (the direction of the magnetic field measured
     down from the horizontal) in degrees,
@@ -82,225 +35,196 @@ should be given on the input lines.</p>
   the north component of the field in nT,
   the east component of the field in nT,
   the vertical component of the field in nT (down is positive),
-  the total field in nT.</pre>
-<p>If the <strong>-r</strong> option is given, a second line is printed giving the rates
-of change of these quantities in degrees/yr and nT/yr.</p>
-<p>The WGS84 ellipsoid is used, <em>a</em> = 6378137 m, <em>f</em> = 1/298.257223563.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
+  the total field in nT.</code></pre>
+
+<p>If the <b>-r</b> option is given, a second line is printed giving the rates of change of these quantities in degrees/yr and nT/yr.</p>
+
+<p>The WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563.</p>
+
+<h1 id="OPTIONS">OPTIONS</h1>
+
 <dl>
-<dt><strong><a name="n" class="item"><strong>-n</strong></a></strong></dt>
 
+<dt id="n"><b>-n</b></dt>
 <dd>
-<p>use magnetic field model <em>name</em> instead of the default <code>wmm2010</code>.  See
-<a href="#models">MODELS</a>.</p>
-</dd>
-<dt><strong><a name="d" class="item"><strong>-d</strong></a></strong></dt>
 
-<dd>
-<p>read magnetic models from <em>dir</em> instead of the default.  See
-<a href="#models">MODELS</a>.</p>
-</dd>
-<dt><strong><a name="t" class="item"><strong>-t</strong></a></strong></dt>
+<p>use magnetic field model <i>name</i> instead of the default <code>wmm2010</code>. See <a href="#MODELS">"MODELS"</a>.</p>
 
-<dd>
-<p>evaluate the field at <em>time</em> instead of reading the time from the input
-lines.</p>
 </dd>
-<dt><strong><a name="c" class="item"><strong>-c</strong></a></strong></dt>
+<dt id="d"><b>-d</b></dt>
+<dd>
 
+<p>read magnetic models from <i>dir</i> instead of the default. See <a href="#MODELS">"MODELS"</a>.</p>
+
+</dd>
+<dt id="t"><b>-t</b></dt>
 <dd>
-<p>evaluate the field on a circle of latitude given by <em>time</em>, <em>lat</em>,
-<em>h</em> instead of reading these quantities from the input lines.  In this
-case, <strong>MagneticField</strong> can calculate the field considerably more
-quickly.</p>
+
+<p>evaluate the field at <i>time</i> instead of reading the time from the input lines.</p>
+
 </dd>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
+<dt id="c"><b>-c</b></dt>
+<dd>
+
+<p>evaluate the field on a circle of latitude given by <i>time</i>, <i>lat</i>, <i>h</i> instead of reading these quantities from the input lines. In this case, <b>MagneticField</b> can calculate the field considerably more quickly.</p>
 
+</dd>
+<dt id="r"><b>-r</b></dt>
 <dd>
+
 <p>toggle whether to report the rates of change of the field.</p>
-</dd>
-<dt><strong><a name="t" class="item"><strong>-T</strong></a></strong></dt>
 
-<dd>
-<p>signal an error if <em>time</em> lies <em>tguard</em> years (default 50 yr) beyond
-the range for the model.</p>
 </dd>
-<dt><strong><a name="h" class="item"><strong>-H</strong></a></strong></dt>
-
+<dt id="T"><b>-T</b></dt>
 <dd>
-<p>signal an error if <em>h</em> lies <em>hguard</em> meters (default 500000 m) beyond
-the range for the model.</p>
-</dd>
-<dt><strong><a name="p" class="item"><strong>-p</strong></a></strong></dt>
 
-<dd>
-<p>set the output precision to <em>prec</em> (default 1).  Fields are printed
-with precision with <em>prec</em> decimal places; angles use <em>prec</em> + 1
-places.</p>
-</dd>
-<dt><strong><a name="v" class="item"><strong>-v</strong></a></strong></dt>
+<p>signal an error if <i>time</i> lies <i>tguard</i> years (default 50 yr) beyond the range for the model.</p>
 
+</dd>
+<dt id="H"><b>-H</b></dt>
 <dd>
-<p>print information about the magnetic model on standard error before
-processing the input.</p>
+
+<p>signal an error if <i>h</i> lies <i>hguard</i> meters (default 500000 m) beyond the range for the model.</p>
+
 </dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
+<dt id="p"><b>-p</b></dt>
+<dd>
 
+<p>set the output precision to <i>prec</i> (default 1). Fields are printed with precision with <i>prec</i> decimal places; angles use <i>prec</i> + 1 places.</p>
+
+</dd>
+<dt id="v"><b>-v</b></dt>
 <dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
+
+<p>print information about the magnetic model on standard error before processing the input.</p>
+
 </dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
+
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
 
+</dd>
+<dt id="version"><b>--version</b></dt>
 <dd>
+
 <p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
 
+</dd>
+<dt id="h"><b>-h</b></dt>
 <dd>
+
 <p>print usage, the default magnetic path and name, and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
 
+</dd>
+<dt id="help"><b>--help</b></dt>
 <dd>
+
 <p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
 
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
 </dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
+<dt id="input-file"><b>--input-file</b></dt>
 <dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
 
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
 <dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
 </dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
+
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
 
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
 <dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="models">MODELS</a></h1>
-<p><strong>MagneticField</strong> computes the geomagnetic field using one of the
-following models</p>
-<pre>
-    wmm2010, the World Magnetic Model 2010, which approximates the
-      main magnetic field for the period 2010–2015.  See
-      <a href="http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml">http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml</a>
+
+<h1 id="MODELS">MODELS</h1>
+
+<p><b>MagneticField</b> computes the geomagnetic field using one of the following models</p>
+
+<pre><code>    wmm2010, the World Magnetic Model 2010, which approximates the
+      main magnetic field for the period 2010–2015.  See
+      http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml
     igrf11, the International Geomagnetic Reference Field (11th
       generation) which approximates the main magnetic field for
-      the period 1900–2015.  See
-      <a href="http://ngdc.noaa.gov/IAGA/vmod/igrf.html">http://ngdc.noaa.gov/IAGA/vmod/igrf.html</a>
+      the period 1900–2015.  See
+      http://ngdc.noaa.gov/IAGA/vmod/igrf.html
     emm2010, the Enhanced Magnetic Model 2010, which approximates the
-      main and crustal magnetic fields for the period 2010–2015.  See
-      <a href="http://ngdc.noaa.gov/geomag/EMM/index.html">http://ngdc.noaa.gov/geomag/EMM/index.html</a></pre>
-<p>These models approximate the magnetic field due to the earth's core and
-(in the case of emm2010) its crust.  They neglect magnetic fields due to
-the ionosphere, the magnetosphere, nearby magnetized materials,
-electrical machinery, etc.</p>
-<p>By default, the <code>wmm2010</code> magnetic model is used.  This may changed by
-setting the environment variable <a href="#magnetic_name"><code>MAGNETIC_NAME</code></a> or with the <strong>-n</strong>
-option.</p>
-<p>The magnetic models will be loaded from a directory specified at compile
-time.  This may changed by setting the environment variables
-<a href="#magnetic_path"><code>MAGNETIC_PATH</code></a> or <a href="#geographiclib_data"><code>GEOGRAPHICLIB_DATA</code></a>, or with the <strong>-d</strong> option.
-The <strong>-h</strong> option prints the default magnetic path and name.  Use the
-<strong>-v</strong> option to ascertain the full path name of the data file.</p>
-<p>Instructions for downloading and installing magnetic models are
-available at
-<a href="http://geographiclib.sf.net/html/magnetic.html#magneticinst">http://geographiclib.sf.net/html/magnetic.html#magneticinst</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="environment">ENVIRONMENT</a></h1>
+      main and crustal magnetic fields for the period 2010–2015.  See
+      http://ngdc.noaa.gov/geomag/EMM/index.html</code></pre>
+
+<p>These models approximate the magnetic field due to the earth's core and (in the case of emm2010) its crust. They neglect magnetic fields due to the ionosphere, the magnetosphere, nearby magnetized materials, electrical machinery, etc.</p>
+
+<p>By default, the <code>wmm2010</code> magnetic model is used. This may changed by setting the environment variable <code>MAGNETIC_NAME</code> or with the <b>-n</b> option.</p>
+
+<p>The magnetic models will be loaded from a directory specified at compile time. This may changed by setting the environment variables <code>MAGNETIC_PATH</code> or <code>GEOGRAPHICLIB_DATA</code>, or with the <b>-d</b> option. The <b>-h</b> option prints the default magnetic path and name. Use the <b>-v</b> option to ascertain the full path name of the data file.</p>
+
+<p>Instructions for downloading and installing magnetic models are available at <a href="http://geographiclib.sf.net/html/magnetic.html#magneticinst">http://geographiclib.sf.net/html/magnetic.html#magneticinst</a>.</p>
+
+<h1 id="ENVIRONMENT">ENVIRONMENT</h1>
+
 <dl>
-<dt><strong><a name="magnetic_name" class="item"><strong>MAGNETIC_NAME</strong></a></strong></dt>
 
+<dt id="MAGNETIC_NAME"><b>MAGNETIC_NAME</b></dt>
 <dd>
-<p>Override the compile-time default magnetic name of <code>wmm2010</code>.  The <strong>-h</strong>
-option reports the value of <strong>MAGNETIC_NAME</strong>, if defined, otherwise it
-reports the compile-time value.  If the <strong>-n</strong> <em>name</em> option is used,
-then <em>name</em> takes precedence.</p>
-</dd>
-<dt><strong><a name="magnetic_path" class="item"><strong>MAGNETIC_PATH</strong></a></strong></dt>
 
-<dd>
-<p>Override the compile-time default magnetic path.  This is typically
-<code>/usr/local/share/GeographicLib/magnetic</code> on Unix-like systems and
-<code>C:/Documents and Settings/All Users/Application
-Data/GeographicLib/magnetic</code> on Windows systems.  The <strong>-h</strong> option reports
-the value of <strong>MAGNETIC_PATH</strong>, if defined, otherwise it reports the
-compile-time value.  If the <strong>-d</strong> <em>dir</em> option is used, then <em>dir</em>
-takes precedence.</p>
+<p>Override the compile-time default magnetic name of <code>wmm2010</code>. The <b>-h</b> option reports the value of <b>MAGNETIC_NAME</b>, if defined, otherwise it reports the compile-time value. If the <b>-n</b> <i>name</i> option is used, then <i>name</i> takes precedence.</p>
+
 </dd>
-<dt><strong><a name="geographiclib_data" class="item"><strong>GEOGRAPHICLIB_DATA</strong></a></strong></dt>
+<dt id="MAGNETIC_PATH"><b>MAGNETIC_PATH</b></dt>
+<dd>
+
+<p>Override the compile-time default magnetic path. This is typically <code>/usr/local/share/GeographicLib/magnetic</code> on Unix-like systems and <code>C:/Documents and Settings/All Users/Application Data/GeographicLib/magnetic</code> on Windows systems. The <b>-h</b> option reports the value of <b>MAGNETIC_PATH</b>, if defined, otherwise it reports the compile-time value. If the <b>-d</b> <i>dir</i> option is used, then <i>dir</i> takes precedence.</p>
 
+</dd>
+<dt id="GEOGRAPHICLIB_DATA"><b>GEOGRAPHICLIB_DATA</b></dt>
 <dd>
-<p>Another way of overriding the compile-time default magnetic path.  If it
-is set (and if <strong>MAGNETIC_PATH</strong> is not set), then
-$<strong>GEOGRAPHICLIB_DATA</strong>/magnetic is used.</p>
+
+<p>Another way of overriding the compile-time default magnetic path. If it is set (and if <b>MAGNETIC_PATH</b> is not set), then $<b>GEOGRAPHICLIB_DATA</b>/magnetic is used.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>MagneticField</strong> to return an exit
-code of 1.  However, an error does not cause <strong>MagneticField</strong> to
-terminate; following lines will be converted.  If <em>time</em> or <em>h</em> are
-outside the recommended ranges for the model (but inside the ranges
-increase by <em>tguard</em> and <em>hguard</em>), a warning is printed on standard
-error and the field (which may be inaccurate) is returned in the normal
-way.</p>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>MagneticField</b> to return an exit code of 1. However, an error does not cause <b>MagneticField</b> to terminate; following lines will be converted. If <i>time</i> or <i>h</i> are outside the recommended ranges for the model (but inside the ranges increase by <i>tguard</i> and <i>hguard</i>), a warning is printed on standard error and the field (which may be inaccu [...]
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
 <p>The magnetic field from WMM2010 in Timbuktu on 2012-01-01</p>
-<pre>
-    echo 2012-01-01 16:46:33N 3:00:34W 300 | MagneticField -r
+
+<pre><code>    echo 2012-01-01 16:46:33N 3:00:34W 300 | MagneticField -r
     => -2.55 12.43 33771.0 33737.6 -1500.5 7446.0 34582.1
-       0.10 -0.07 34.3 36.8 54.4 -35.3 25.9</pre>
-<p>The first two numbers returned are the declination and inclination of
-the field.  The second line gives the annual change.</p>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p><a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>MagneticField</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>MagneticField</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in version 1.15.</p>
+       0.10 -0.07 34.3 36.8 54.4 -35.3 25.9</code></pre>
+
+<p>The first two numbers returned are the declination and inclination of the field. The second line gives the annual change.</p>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>GeoConvert(1).</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>MagneticField</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>MagneticField</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in version 1.15.</p>
+
 
 </body>
 
 </html>
+
+
diff --git a/man/MagneticField.pod b/man/MagneticField.pod
index 1fdf367..519e2ac 100644
--- a/man/MagneticField.pod
+++ b/man/MagneticField.pod
@@ -1,5 +1,3 @@
-=for comment $Id: fe9a4ece2e3919b375542db7836d269d1dfdb9b6 $
-
 =head1 NAME
 
 MagneticField -- compute the earth's magnetic field
@@ -58,12 +56,12 @@ The WGS84 ellipsoid is used, I<a> = 6378137 m, I<f> = 1/298.257223563.
 =item B<-n>
 
 use magnetic field model I<name> instead of the default C<wmm2010>.  See
-L<MODELS|models>.
+L</MODELS>.
 
 =item B<-d>
 
 read magnetic models from I<dir> instead of the default.  See
-L<MODELS|models>.
+L</MODELS>.
 
 =item B<-t>
 
diff --git a/man/MagneticField.usage b/man/MagneticField.usage
index 0dbb9b7..b6b89d0 100644
--- a/man/MagneticField.usage
+++ b/man/MagneticField.usage
@@ -10,7 +10,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    MagneticField --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/html/MagneticField.1.html\n";
+"    http://geographiclib.sf.net/1.34/MagneticField.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -58,9 +58,10 @@ int usage(int retval, bool brief) {
 "\n"
 "OPTIONS\n"
 "       -n  use magnetic field model name instead of the default \"wmm2010\".\n"
-"           See MODELS.\n"
+"           See \"MODELS\".\n"
 "\n"
-"       -d  read magnetic models from dir instead of the default.  See MODELS.\n"
+"       -d  read magnetic models from dir instead of the default.  See\n"
+"           \"MODELS\".\n"
 "\n"
 "       -t  evaluate the field at time instead of reading the time from the\n"
 "           input lines.\n"
@@ -201,5 +202,5 @@ int usage(int retval, bool brief) {
 "       MagneticField was added to GeographicLib,\n"
 "       <http://geographiclib.sf.net>, in version 1.15.\n"
 ;
-    return retval;
+  return retval;
 }
diff --git a/man/Makefile.am b/man/Makefile.am
index 546b5e7..8fae122 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -2,50 +2,49 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: 1744bf09577749b0b2bb5775499fe4f0259cc02f $
-
-MANPAGES = \
-CartConvert.1 \
-ConicProj.1 \
-GeodesicProj.1 \
-GeoConvert.1 \
-Geod.1 \
-GeoidEval.1 \
-Gravity.1 \
-MagneticField.1 \
-Planimeter.1 \
-TransverseMercatorProj.1
 
 USAGE = \
-CartConvert.usage \
-ConicProj.usage \
-GeodesicProj.usage \
-GeoConvert.usage \
-Geod.usage \
-GeoidEval.usage \
-Gravity.usage \
-MagneticField.usage \
-Planimeter.usage \
-TransverseMercatorProj.usage
+	CartConvert.usage \
+	ConicProj.usage \
+	GeodesicProj.usage \
+	GeoConvert.usage \
+	GeodSolve.usage \
+	GeoidEval.usage \
+	Gravity.usage \
+	MagneticField.usage \
+	Planimeter.usage \
+	TransverseMercatorProj.usage
+
+MANPAGES = \
+	CartConvert.1 \
+	ConicProj.1 \
+	GeodesicProj.1 \
+	GeoConvert.1 \
+	GeodSolve.1 \
+	GeoidEval.1 \
+	Gravity.1 \
+	MagneticField.1 \
+	Planimeter.1 \
+	TransverseMercatorProj.1
 
 HTMLMAN = \
-CartConvert.1.html \
-ConicProj.1.html \
-GeodesicProj.1.html \
-GeoConvert.1.html \
-Geod.1.html \
-GeoidEval.1.html \
-Gravity.1.html \
-MagneticField.1.html \
-Planimeter.1.html \
-TransverseMercatorProj.1.html
+	CartConvert.1.html \
+	ConicProj.1.html \
+	GeodesicProj.1.html \
+	GeoConvert.1.html \
+	GeodSolve.1.html \
+	GeoidEval.1.html \
+	Gravity.1.html \
+	MagneticField.1.html \
+	Planimeter.1.html \
+	TransverseMercatorProj.1.html
 
 POD2MAN = pod2man --center="GeographicLib Utilities" \
 	--release="$(PACKAGE_STRING)"
 PODFIX= sed -e 's%<head>%<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">%' -e 's%<code>\([^<>]*\)(\(.\))</code>%<a href="\1.\2.html">&</a>%'g
 man1_MANS = $(MANPAGES)
 
-SUFFIXES = .pod .1 .usage
+SUFFIXES = .pod .1 .usage .1.html
 
 all: man
 man: manpages usage htmlman
@@ -54,47 +53,97 @@ manpages: $(MANPAGES)
 usage: $(USAGE)
 htmlman: $(HTMLMAN)
 
+if HAVE_PODPROGS
+
 .pod.usage:
-	sh $(srcdir)/makeusage.sh $< > $*.usage
+	sh $(srcdir)/makeusage.sh $< $(VERSION) > $@
 
 .pod.1:
-	pod2html --noindex $^ | $(PODFIX) > $*.1.html
 	$(POD2MAN) $^ > $@
 
-CartConvert.1.html: CartConvert.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-ConicProj.1.html: ConicProj.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-GeodesicProj.1.html: GeodesicProj.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-GeoConvert.1.html: GeoConvert.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-Geod.1.html: Geod.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-GeoidEval.1.html: GeoidEval.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-Gravity.1.html: Gravity.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-MagneticField.1.html: MagneticField.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-Planimeter.1.html: Planimeter.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-TransverseMercatorProj.1.html: TransverseMercatorProj.pod
+.pod.1.html:
 	pod2html --noindex $^ | $(PODFIX) > $@
 
+else
+
+USAGECMD = cat $(srcdir)/$@ 2> /dev/null || \
+	sed "s/@TOOL@/$*/g" $(srcdir)/dummy.usage.in > $@
+MANCMD = cat $(srcdir)/$@ 2> /dev/null || \
+	sed "s/@TOOL@/$*/g" $(srcdir)/dummy.1.in > $@
+HTMLCMD = cat $(srcdir)/$@ 2> /dev/null || \
+	sed "s/@TOOL@/$*/g" $(srcdir)/dummy.1.html.in > $@
+
+CartConvert.usage:
+	$(USAGECMD)
+ConicProj.usage:
+	$(USAGECMD)
+GeodesicProj.usage:
+	$(USAGECMD)
+GeoConvert.usage:
+	$(USAGECMD)
+GeodSolve.usage:
+	$(USAGECMD)
+GeoidEval.usage:
+	$(USAGECMD)
+Gravity.usage:
+	$(USAGECMD)
+MagneticField.usage:
+	$(USAGECMD)
+Planimeter.usage:
+	$(USAGECMD)
+TransverseMercatorProj.usage:
+	$(USAGECMD)
+
+CartConvert.1:
+	$(MANCMD)
+ConicProj.1:
+	$(MANCMD)
+GeodesicProj.1:
+	$(MANCMD)
+GeoConvert.1:
+	$(MANCMD)
+GeodSolve.1:
+	$(MANCMD)
+GeoidEval.1:
+	$(MANCMD)
+Gravity.1:
+	$(MANCMD)
+MagneticField.1:
+	$(MANCMD)
+Planimeter.1:
+	$(MANCMD)
+TransverseMercatorProj.1:
+	$(MANCMD)
+
+CartConvert.1.html:
+	$(HTMLCMD)
+ConicProj.1.html:
+	$(HTMLCMD)
+GeodesicProj.1.html:
+	$(HTMLCMD)
+GeoConvert.1.html:
+	$(HTMLCMD)
+GeodSolve.1.html:
+	$(HTMLCMD)
+GeoidEval.1.html:
+	$(HTMLCMD)
+Gravity.1.html:
+	$(HTMLCMD)
+MagneticField.1.html:
+	$(HTMLCMD)
+Planimeter.1.html:
+	$(HTMLCMD)
+TransverseMercatorProj.1.html:
+	$(HTMLCMD)
+
+endif
+
 EXTRA_DIST = Makefile.mk CMakeLists.txt makeusage.sh \
 	GeoConvert.pod TransverseMercatorProj.pod \
-	CartConvert.pod ConicProj.pod Geod.pod GeodesicProj.pod \
+	CartConvert.pod ConicProj.pod GeodSolve.pod GeodesicProj.pod \
 	GeoidEval.pod Gravity.pod MagneticField.pod Planimeter.pod \
-	GeoConvert.1 TransverseMercatorProj.1 \
-	CartConvert.1 ConicProj.1 Geod.1 GeodesicProj.1 \
-	GeoidEval.1 Gravity.1 MagneticField.1 Planimeter.1 \
-	GeoConvert.usage TransverseMercatorProj.usage \
-	CartConvert.usage ConicProj.usage Geod.usage GeodesicProj.usage \
-	GeoidEval.usage Gravity.usage MagneticField.usage Planimeter.usage \
-	GeoConvert.1.html TransverseMercatorProj.1.html \
-	CartConvert.1.html ConicProj.1.html Geod.1.html GeodesicProj.1.html \
-	GeoidEval.1.html Gravity.1.html MagneticField.1.html Planimeter.1.html
+	$(MANPAGES) $(USAGE) $(HTMLMAN) \
+	dummy.usage.in dummy.1.in dummy.1.html.in
 
 maintainer-clean-local:
 	rm -rf *.usage *.1.html *.1
diff --git a/man/Makefile.in b/man/Makefile.in
index a677552..b434fd5 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,8 +18,24 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: 1744bf09577749b0b2bb5775499fe4f0259cc02f $
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -55,6 +70,11 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -76,6 +96,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 man1dir = $(mandir)/man1
 am__installdirs = "$(DESTDIR)$(man1dir)"
 NROFF = nroff
@@ -91,6 +117,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -101,6 +128,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -109,6 +137,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -144,6 +175,10 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = pod2man --center="GeographicLib Utilities" \
+	--release="$(PACKAGE_STRING)"
+
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -208,66 +243,65 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-MANPAGES = \
-CartConvert.1 \
-ConicProj.1 \
-GeodesicProj.1 \
-GeoConvert.1 \
-Geod.1 \
-GeoidEval.1 \
-Gravity.1 \
-MagneticField.1 \
-Planimeter.1 \
-TransverseMercatorProj.1
-
 USAGE = \
-CartConvert.usage \
-ConicProj.usage \
-GeodesicProj.usage \
-GeoConvert.usage \
-Geod.usage \
-GeoidEval.usage \
-Gravity.usage \
-MagneticField.usage \
-Planimeter.usage \
-TransverseMercatorProj.usage
+	CartConvert.usage \
+	ConicProj.usage \
+	GeodesicProj.usage \
+	GeoConvert.usage \
+	GeodSolve.usage \
+	GeoidEval.usage \
+	Gravity.usage \
+	MagneticField.usage \
+	Planimeter.usage \
+	TransverseMercatorProj.usage
 
-HTMLMAN = \
-CartConvert.1.html \
-ConicProj.1.html \
-GeodesicProj.1.html \
-GeoConvert.1.html \
-Geod.1.html \
-GeoidEval.1.html \
-Gravity.1.html \
-MagneticField.1.html \
-Planimeter.1.html \
-TransverseMercatorProj.1.html
+MANPAGES = \
+	CartConvert.1 \
+	ConicProj.1 \
+	GeodesicProj.1 \
+	GeoConvert.1 \
+	GeodSolve.1 \
+	GeoidEval.1 \
+	Gravity.1 \
+	MagneticField.1 \
+	Planimeter.1 \
+	TransverseMercatorProj.1
 
-POD2MAN = pod2man --center="GeographicLib Utilities" \
-	--release="$(PACKAGE_STRING)"
+HTMLMAN = \
+	CartConvert.1.html \
+	ConicProj.1.html \
+	GeodesicProj.1.html \
+	GeoConvert.1.html \
+	GeodSolve.1.html \
+	GeoidEval.1.html \
+	Gravity.1.html \
+	MagneticField.1.html \
+	Planimeter.1.html \
+	TransverseMercatorProj.1.html
 
 PODFIX = sed -e 's%<head>%<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">%' -e 's%<code>\([^<>]*\)(\(.\))</code>%<a href="\1.\2.html">&</a>%'g
 man1_MANS = $(MANPAGES)
-SUFFIXES = .pod .1 .usage
+SUFFIXES = .pod .1 .usage .1.html
+ at HAVE_PODPROGS_FALSE@USAGECMD = cat $(srcdir)/$@ 2> /dev/null || \
+ at HAVE_PODPROGS_FALSE@	sed "s/@TOOL@/$*/g" $(srcdir)/dummy.usage.in > $@
+
+ at HAVE_PODPROGS_FALSE@MANCMD = cat $(srcdir)/$@ 2> /dev/null || \
+ at HAVE_PODPROGS_FALSE@	sed "s/@TOOL@/$*/g" $(srcdir)/dummy.1.in > $@
+
+ at HAVE_PODPROGS_FALSE@HTMLCMD = cat $(srcdir)/$@ 2> /dev/null || \
+ at HAVE_PODPROGS_FALSE@	sed "s/@TOOL@/$*/g" $(srcdir)/dummy.1.html.in > $@
+
 EXTRA_DIST = Makefile.mk CMakeLists.txt makeusage.sh \
 	GeoConvert.pod TransverseMercatorProj.pod \
-	CartConvert.pod ConicProj.pod Geod.pod GeodesicProj.pod \
+	CartConvert.pod ConicProj.pod GeodSolve.pod GeodesicProj.pod \
 	GeoidEval.pod Gravity.pod MagneticField.pod Planimeter.pod \
-	GeoConvert.1 TransverseMercatorProj.1 \
-	CartConvert.1 ConicProj.1 Geod.1 GeodesicProj.1 \
-	GeoidEval.1 Gravity.1 MagneticField.1 Planimeter.1 \
-	GeoConvert.usage TransverseMercatorProj.usage \
-	CartConvert.usage ConicProj.usage Geod.usage GeodesicProj.usage \
-	GeoidEval.usage Gravity.usage MagneticField.usage Planimeter.usage \
-	GeoConvert.1.html TransverseMercatorProj.1.html \
-	CartConvert.1.html ConicProj.1.html Geod.1.html GeodesicProj.1.html \
-	GeoidEval.1.html Gravity.1.html MagneticField.1.html Planimeter.1.html
+	$(MANPAGES) $(USAGE) $(HTMLMAN) \
+	dummy.usage.in dummy.1.in dummy.1.html.in
 
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .pod .1 .usage
+.SUFFIXES: .pod .1 .usage .1.html
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
@@ -306,9 +340,18 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-man1: $(man1_MANS)
 	@$(NORMAL_INSTALL)
-	test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
-	@list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \
-	{ for i in $$list; do echo "$$i"; done; \
+	@list1='$(man1_MANS)'; \
+	list2=''; \
+	test -n "$(man1dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.1[a-z]*$$/p'; \
+	fi; \
 	} | while read p; do \
 	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; echo "$$p"; \
@@ -335,15 +378,15 @@ uninstall-man1:
 	files=`{ for i in $$list; do echo "$$i"; done; \
 	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
 	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
-	test -z "$$files" || { \
-	  echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
-	  cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
 tags: TAGS
 TAGS:
 
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@list='$(MANS)'; if test -n "$$list"; then \
@@ -352,10 +395,10 @@ distdir: $(DISTFILES)
 	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
 	  if test -n "$$list" && \
 	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
-	    echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+	    echo "error: found man pages containing the 'missing help2man' replacement text:" >&2; \
 	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
 	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
-	    echo "       typically \`make maintainer-clean' will remove them" >&2; \
+	    echo "       typically 'make maintainer-clean' will remove them" >&2; \
 	    exit 1; \
 	  else :; fi; \
 	else :; fi
@@ -405,10 +448,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -512,33 +560,77 @@ manpages: $(MANPAGES)
 usage: $(USAGE)
 htmlman: $(HTMLMAN)
 
-.pod.usage:
-	sh $(srcdir)/makeusage.sh $< > $*.usage
-
-.pod.1:
-	pod2html --noindex $^ | $(PODFIX) > $*.1.html
-	$(POD2MAN) $^ > $@
-
-CartConvert.1.html: CartConvert.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-ConicProj.1.html: ConicProj.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-GeodesicProj.1.html: GeodesicProj.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-GeoConvert.1.html: GeoConvert.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-Geod.1.html: Geod.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-GeoidEval.1.html: GeoidEval.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-Gravity.1.html: Gravity.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-MagneticField.1.html: MagneticField.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-Planimeter.1.html: Planimeter.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
-TransverseMercatorProj.1.html: TransverseMercatorProj.pod
-	pod2html --noindex $^ | $(PODFIX) > $@
+ at HAVE_PODPROGS_TRUE@.pod.usage:
+ at HAVE_PODPROGS_TRUE@	sh $(srcdir)/makeusage.sh $< $(VERSION) > $@
+
+ at HAVE_PODPROGS_TRUE@.pod.1:
+ at HAVE_PODPROGS_TRUE@	$(POD2MAN) $^ > $@
+
+ at HAVE_PODPROGS_TRUE@.pod.1.html:
+ at HAVE_PODPROGS_TRUE@	pod2html --noindex $^ | $(PODFIX) > $@
+
+ at HAVE_PODPROGS_FALSE@CartConvert.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@ConicProj.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@GeodesicProj.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@GeoConvert.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@GeodSolve.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@GeoidEval.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@Gravity.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@MagneticField.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@Planimeter.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@TransverseMercatorProj.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
+
+ at HAVE_PODPROGS_FALSE@CartConvert.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@ConicProj.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@GeodesicProj.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@GeoConvert.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@GeodSolve.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@GeoidEval.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@Gravity.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@MagneticField.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@Planimeter.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@TransverseMercatorProj.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
+
+ at HAVE_PODPROGS_FALSE@CartConvert.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@ConicProj.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@GeodesicProj.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@GeoConvert.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@GeodSolve.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@GeoidEval.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@Gravity.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@MagneticField.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@Planimeter.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@TransverseMercatorProj.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
 
 maintainer-clean-local:
 	rm -rf *.usage *.1.html *.1
diff --git a/man/Makefile.mk b/man/Makefile.mk
index d282b0c..5f54b57 100644
--- a/man/Makefile.mk
+++ b/man/Makefile.mk
@@ -1,8 +1,7 @@
-# $Id: 6d0f3921b8c739428669640b67932b7bf9f925d0 $
 PROGRAMS = CartConvert \
 	ConicProj \
 	GeoConvert \
-	Geod \
+	GeodSolve \
 	GeodesicProj \
 	GeoidEval \
 	Gravity \
@@ -10,7 +9,6 @@ PROGRAMS = CartConvert \
 	Planimeter \
 	TransverseMercatorProj
 
-PODSRC = $(addsuffix .pod,$(PROGRAMS))
 MANPAGES = $(addsuffix .1,$(PROGRAMS))
 USAGE = $(addsuffix .usage,$(PROGRAMS))
 HTMLMAN = $(addsuffix .1.html,$(PROGRAMS))
@@ -19,19 +17,6 @@ PREFIX = /usr/local
 
 DEST = $(PREFIX)/share/man/man1
 
-VERSION:=$(shell grep '\bVERSION=' ../configure | cut -f2 -d\' | head -1)
-
-
-%.1: %.pod
-	pod2man --center="GeographicLib Utilities" \
-	--release="GeographicLib $(VERSION)" $^ > $@
-
-%.1.html: %.pod
-	pod2html --noindex $^ | sed -e 's%<head>%<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">%' -e 's%<code>\([^<>]*\)(\(.\))</code>%<a href="\1.\2.html">&</a>%'g > $@
-
-%.usage: %.pod
-	sh makeusage.sh $< > $@
-
 all: $(MANPAGES) $(USAGE) $(HTMLMAN)
 
 INSTALL = install -b
@@ -40,7 +25,4 @@ install:
 	test -d $(DEST) || mkdir -p $(DEST)
 	$(INSTALL) -m 644 $(MANPAGES) $(DEST)/
 
-maintainer-clean:
-	rm -f *.1 *.usage *.1.html
-
 .PHONY: all install clean
diff --git a/man/Planimeter.1 b/man/Planimeter.1
index 67f3dfd..28bbbf4 100644
--- a/man/Planimeter.1
+++ b/man/Planimeter.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "PLANIMETER 1"
-.TH PLANIMETER 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
+.TH PLANIMETER 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -151,6 +151,15 @@ and the start of the next.  For each polygon print a summary line with
 the number of points, the perimeter (in meters), and the area (in
 meters^2).
 .PP
+The edges of the polygon are given by the \fIshortest\fR geodesic between
+consecutive vertices.  In certain cases, there may be two or many such
+shortest geodesics, and in that case, the polygon is not uniquely
+specified by its vertices.  This only happens with very long edges (for
+the \s-1WGS84\s0 ellipsoid, any edge shorter than 19970 km is uniquely
+specified by its end points).  In such cases, insert an additional
+vertex near the middle of the long edge to define the boundary of the
+polygon.
+.PP
 By default, polygons traversed in a counter-clockwise direction return a
 positive area and those traversed in a clockwise direction return a
 negative area.  This sign convention is reversed if the \fB\-r\fR option is
@@ -263,11 +272,10 @@ covered by the data (assuming the edges of the image are geodesics).
 .Ve
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
-\&\fIGeoConvert\fR\|(1).  The algorithm for the area of geodesic polygon is given
-in Section 15 of C. F. F. Karney, \fIGeodesics on an ellipsoid of
-revolution\fR, Feb. 2011; preprint <http://arxiv.org/abs/1102.1215>.  See
-also Section 6 of C. F. F. Karney, \fIAlgorithms for geodesics\fR,
-Sept. 2011; preprint <http://arxiv.org/abs/1109.4448>.
+\&\fIGeoConvert\fR\|(1).  The algorithm for the area of geodesic polygon is
+given in Section 6 of C. F. F. Karney, \fIAlgorithms for geodesics\fR,
+J. Geodesy 87, 43\-55 (2013); \s-1DOI\s0 http://dx.doi.org/10.1007/s00190\-012\-0578\-z <http://dx.doi.org/10.1007/s00190-012-0578-z>;
+addenda: http://geographiclib.sf.net/geod\-addenda.html <http://geographiclib.sf.net/geod-addenda.html>.
 .SH "AUTHOR"
 .IX Header "AUTHOR"
 \&\fBPlanimeter\fR was written by Charles Karney.
diff --git a/man/Planimeter.1.html b/man/Planimeter.1.html
index 37d5415..b86a5ec 100644
--- a/man/Planimeter.1.html
+++ b/man/Planimeter.1.html
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>Planimeter -- compute the area of geodesic polygons</title>
+<title></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rev="made" href="mailto:root at localhost" />
 </head>
@@ -10,176 +10,122 @@
 <body style="background-color: white">
 
 
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
 
-<ul>
+<h1 id="NAME">NAME</h1>
 
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
+<p>Planimeter -- compute the area of geodesic polygons</p>
 
--->
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
 
+<p><b>Planimeter</b> [ <b>-r</b> ] [ <b>-s</b> ] [ <b>-l</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
-</div>
-<!-- INDEX END -->
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>Measure the area of a geodesic polygon. Reads polygon vertices from standard input, one per line. Vertices may be given as latitude and longitude, UTM/UPS, or MGRS coordinates, interpreted in the same way as GeoConvert(1). (MGRS coordinates signify the center of the corresponding MGRS square.) The end of input, a blank line, or a line which can't be interpreted as a vertex signals the end of one polygon and the start of the next. For each polygon print a summary line with the numb [...]
+
+<p>The edges of the polygon are given by the <i>shortest</i> geodesic between consecutive vertices. In certain cases, there may be two or many such shortest geodesics, and in that case, the polygon is not uniquely specified by its vertices. This only happens with very long edges (for the WGS84 ellipsoid, any edge shorter than 19970 km is uniquely specified by its end points). In such cases, insert an additional vertex near the middle of the long edge to define the boundary of the polygon.</p>
+
+<p>By default, polygons traversed in a counter-clockwise direction return a positive area and those traversed in a clockwise direction return a negative area. This sign convention is reversed if the <b>-r</b> option is given.</p>
+
+<p>Of course, encircling an area in the clockwise direction is equivalent to encircling the rest of the ellipsoid in the counter-clockwise direction. The default interpretation used by <b>Planimeter</b> is the one that results in a smaller magnitude of area; i.e., the magnitude of the area is less than or equal to one half the total area of the ellipsoid. If the <b>-s</b> option is given, then the interpretation used is the one that results in a positive area; i.e., the area is positive  [...]
+
+<p>Only simple polygons are supported for the area computation. Polygons may include one or both poles. There is no need to close the polygon.</p>
+
+<h1 id="OPTIONS">OPTIONS</h1>
 
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>Planimeter -- compute the area of geodesic polygons</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>Planimeter</strong> [ <strong>-r</strong> ] [ <strong>-s</strong> ] [ <strong>-l</strong> ] [ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Measure the area of a geodesic polygon.  Reads polygon vertices from
-standard input, one per line.  Vertices may be given as latitude and
-longitude, UTM/UPS, or MGRS coordinates, interpreted in the same way as
-<a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>.  (MGRS coordinates signify the center of the
-corresponding MGRS square.)  The end of input, a blank line, or a line
-which can't be interpreted as a vertex signals the end of one polygon
-and the start of the next.  For each polygon print a summary line with
-the number of points, the perimeter (in meters), and the area (in
-meters^2).</p>
-<p>By default, polygons traversed in a counter-clockwise direction return a
-positive area and those traversed in a clockwise direction return a
-negative area.  This sign convention is reversed if the <strong>-r</strong> option is
-given.</p>
-<p>Of course, encircling an area in the clockwise direction is equivalent
-to encircling the rest of the ellipsoid in the counter-clockwise
-direction.  The default interpretation used by <strong>Planimeter</strong> is the one
-that results in a smaller magnitude of area; i.e., the magnitude of the
-area is less than or equal to one half the total area of the ellipsoid.
-If the <strong>-s</strong> option is given, then the interpretation used is the one
-that results in a positive area; i.e., the area is positive and less
-than the total area of the ellipsoid.</p>
-<p>Only simple polygons are supported for the area computation.  Polygons
-may include one or both poles.  There is no need to close the polygon.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
 <dl>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
 
+<dt id="r"><b>-r</b></dt>
 <dd>
-<p>toggle whether counter-clockwise traversal of the polygon returns a
-positive (the default) or negative result.</p>
-</dd>
-<dt><strong><a name="s" class="item"><strong>-s</strong></a></strong></dt>
 
+<p>toggle whether counter-clockwise traversal of the polygon returns a positive (the default) or negative result.</p>
+
+</dd>
+<dt id="s"><b>-s</b></dt>
 <dd>
+
 <p>toggle whether to return a signed result (the default) or not.</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
 
-<dd>
-<p>toggle whether the vertices represent a polygon (the default) or a
-polyline.  For a polyline, the number of points and the length of the
-path joining them is returned; the path is not closed and the area is
-not reported.</p>
 </dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
-
+<dt id="l"><b>-l</b></dt>
 <dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.  If entering vertices as UTM/UPS or MGRS
-coordinates, use the default ellipsoid, since the conversion of these
-coordinates to latitude and longitude uses the WGS84 parameters.</p>
-</dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
 
+<p>toggle whether the vertices represent a polygon (the default) or a polyline. For a polyline, the number of points and the length of the path joining them is returned; the path is not closed and the area is not reported.</p>
+
+</dd>
+<dt id="e"><b>-e</b></dt>
 <dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing.  For a given polygon, the last such string found will be
-appended to the output line (separated by a space).</p>
+
+<p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563. If entering vertices as UTM/UPS or MGRS coordinates, use the default ellip [...]
+
 </dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
+
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing. For a given polygon, the last such string found will be appended to the output line (separated by a space).</p>
 
+</dd>
+<dt id="version"><b>--version</b></dt>
 <dd>
+
 <p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
 
+</dd>
+<dt id="h"><b>-h</b></dt>
 <dd>
+
 <p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
 
+</dd>
+<dt id="help"><b>--help</b></dt>
 <dd>
+
 <p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
 
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
 </dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
+<dt id="input-file"><b>--input-file</b></dt>
 <dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
 
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
 <dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
 </dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
+
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
 
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
 <dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
 <p>Example (the area of the 100km MGRS square 18SWK)</p>
-<pre>
-   Planimeter <<EOF
+
+<pre><code>   Planimeter <<EOF
    18N 500000 4400000
    18N 600000 4400000
    18N 600000 4500000
    18N 500000 4500000
    EOF
-   => 4 400139.53295860 10007388597.1913</pre>
-<p>The following code takes the output from gdalinfo and reports the area
-covered by the data (assuming the edges of the image are geodesics).</p>
-<pre>
-   #! /bin/sh
-   egrep '^((Upper|Lower) (Left|Right)|Center) ' |
-   sed -e 's/d /d/g' -e "s/' /'/g" | tr -s '(),\r\t' ' ' | awk '{
+   => 4 400139.53295860 10007388597.1913</code></pre>
+
+<p>The following code takes the output from gdalinfo and reports the area covered by the data (assuming the edges of the image are geodesics).</p>
+
+<pre><code>   #! /bin/sh
+   egrep '^((Upper|Lower) (Left|Right)|Center) ' |
+   sed -e 's/d /d/g' -e "s/' /'/g" | tr -s '(),\r\t' ' ' | awk '{
        if ($1 $2 == "UpperLeft")
            ul = $6 " " $5;
        else if ($1 $2 == "LowerLeft")
@@ -193,28 +139,23 @@ covered by the data (assuming the edges of the image are geodesics).</p>
            ul = ll = ur = lr = "";
        }
    }
-   ' | Planimeter | cut -f3 -d' '</pre>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p><a href="GeoConvert.1.html"><code>GeoConvert(1)</code></a>.  The algorithm for the area of geodesic polygon is given
-in Section 15 of C. F. F. Karney, <em>Geodesics on an ellipsoid of
-revolution</em>, Feb. 2011; preprint <a href="http://arxiv.org/abs/1102.1215">http://arxiv.org/abs/1102.1215</a>.  See
-also Section 6 of C. F. F. Karney, <em>Algorithms for geodesics</em>,
-Sept. 2011; preprint <a href="http://arxiv.org/abs/1109.4448">http://arxiv.org/abs/1109.4448</a>.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>Planimeter</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>Planimeter</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in version 1.4.</p>
+   ' | Planimeter | cut -f3 -d' '</code></pre>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>GeoConvert(1). The algorithm for the area of geodesic polygon is given in Section 6 of C. F. F. Karney, <i>Algorithms for geodesics</i>, J. Geodesy 87, 43-55 (2013); DOI <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">http://dx.doi.org/10.1007/s00190-012-0578-z</a>; addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">http://geographiclib.sf.net/geod-addenda.html</a>.</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>Planimeter</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>Planimeter</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in version 1.4.</p>
+
 
 </body>
 
 </html>
+
+
diff --git a/man/Planimeter.pod b/man/Planimeter.pod
index a15925d..828ddc1 100644
--- a/man/Planimeter.pod
+++ b/man/Planimeter.pod
@@ -1,5 +1,3 @@
-=for comment $Id: 501af1a00d02bb4b2b99db921909290b647be941 $
-
 =head1 NAME
 
 Planimeter -- compute the area of geodesic polygons
@@ -25,6 +23,15 @@ and the start of the next.  For each polygon print a summary line with
 the number of points, the perimeter (in meters), and the area (in
 meters^2).
 
+The edges of the polygon are given by the I<shortest> geodesic between
+consecutive vertices.  In certain cases, there may be two or many such
+shortest geodesics, and in that case, the polygon is not uniquely
+specified by its vertices.  This only happens with very long edges (for
+the WGS84 ellipsoid, any edge shorter than 19970 km is uniquely
+specified by its end points).  In such cases, insert an additional
+vertex near the middle of the long edge to define the boundary of the
+polygon.
+
 By default, polygons traversed in a counter-clockwise direction return a
 positive area and those traversed in a clockwise direction return a
 negative area.  This sign convention is reversed if the B<-r> option is
@@ -151,12 +158,10 @@ covered by the data (assuming the edges of the image are geodesics).
 
 =head1 SEE ALSO
 
-GeoConvert(1).  The algorithm for the area of geodesic polygon is given
-in Section 15 of C. F. F. Karney, I<Geodesics on an ellipsoid of
-revolution>, Feb. 2011; preprint L<http://arxiv.org/abs/1102.1215>.  See
-also Section 6 of C. F. F. Karney, I<Algorithms for geodesics>,
-Sept. 2011; preprint L<http://arxiv.org/abs/1109.4448>.
-
+GeoConvert(1).  The algorithm for the area of geodesic polygon is
+given in Section 6 of C. F. F. Karney, I<Algorithms for geodesics>,
+J. Geodesy 87, 43-55 (2013); DOI L<http://dx.doi.org/10.1007/s00190-012-0578-z>;
+addenda: L<http://geographiclib.sf.net/geod-addenda.html>.
 
 =head1 AUTHOR
 
diff --git a/man/Planimeter.usage b/man/Planimeter.usage
index 5d83e81..3a45ad8 100644
--- a/man/Planimeter.usage
+++ b/man/Planimeter.usage
@@ -9,7 +9,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    Planimeter --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/html/Planimeter.1.html\n";
+"    http://geographiclib.sf.net/1.34/Planimeter.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -32,6 +32,15 @@ int usage(int retval, bool brief) {
 "       the number of points, the perimeter (in meters), and the area (in\n"
 "       meters^2).\n"
 "\n"
+"       The edges of the polygon are given by the shortest geodesic between\n"
+"       consecutive vertices.  In certain cases, there may be two or many such\n"
+"       shortest geodesics, and in that case, the polygon is not uniquely\n"
+"       specified by its vertices.  This only happens with very long edges (for\n"
+"       the WGS84 ellipsoid, any edge shorter than 19970 km is uniquely\n"
+"       specified by its end points).  In such cases, insert an additional\n"
+"       vertex near the middle of the long edge to define the boundary of the\n"
+"       polygon.\n"
+"\n"
 "       By default, polygons traversed in a counter-clockwise direction return\n"
 "       a positive area and those traversed in a clockwise direction return a\n"
 "       negative area.  This sign convention is reversed if the -r option is\n"
@@ -137,10 +146,11 @@ int usage(int retval, bool brief) {
 "\n"
 "SEE ALSO\n"
 "       GeoConvert(1).  The algorithm for the area of geodesic polygon is given\n"
-"       in Section 15 of C. F. F. Karney, Geodesics on an ellipsoid of\n"
-"       revolution, Feb. 2011; preprint <http://arxiv.org/abs/1102.1215>.  See\n"
-"       also Section 6 of C. F. F. Karney, Algorithms for geodesics, Sept.\n"
-"       2011; preprint <http://arxiv.org/abs/1109.4448>.\n"
+"       in Section 6 of C. F. F. Karney, Algorithms for geodesics, J. Geodesy\n"
+"       87, 43-55 (2013); DOI http://dx.doi.org/10.1007/s00190-012-0578-z\n"
+"       <http://dx.doi.org/10.1007/s00190-012-0578-z>; addenda:\n"
+"       http://geographiclib.sf.net/geod-addenda.html\n"
+"       <http://geographiclib.sf.net/geod-addenda.html>.\n"
 "\n"
 "AUTHOR\n"
 "       Planimeter was written by Charles Karney.\n"
@@ -149,5 +159,5 @@ int usage(int retval, bool brief) {
 "       Planimeter was added to GeographicLib, <http://geographiclib.sf.net>,\n"
 "       in version 1.4.\n"
 ;
-    return retval;
+  return retval;
 }
diff --git a/man/TransverseMercatorProj.1 b/man/TransverseMercatorProj.1
index 2558937..0b03ff6 100644
--- a/man/TransverseMercatorProj.1
+++ b/man/TransverseMercatorProj.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
+.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "TRANSVERSEMERCATORPROJ 1"
-.TH TRANSVERSEMERCATORPROJ 1 "2012-04-24" "GeographicLib 1.21" "GeographicLib Utilities"
+.TH TRANSVERSEMERCATORPROJ 1 "2013-12-11" "GeographicLib 1.34" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -134,7 +134,7 @@ TransverseMercatorProj \-\- perform transverse Mercator projection
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
 \&\fBTransverseMercatorProj\fR [ \fB\-s\fR | \fB\-t\fR ]
-[ \fB\-l\fR \fIlon0\fR ] [ \fB\-k\fR \fIk1\fR ] [ \fB\-r\fR ]
+[ \fB\-l\fR \fIlon0\fR ] [ \fB\-k\fR \fIk0\fR ] [ \fB\-r\fR ]
 [ \fB\-e\fR \fIa\fR \fIf\fR ]
 [ \fB\-\-comment\-delimiter\fR \fIcommentdelim\fR ]
 [ \fB\-\-version\fR | \fB\-h\fR | \fB\-\-help\fR ]
@@ -164,7 +164,7 @@ use the sixth-order Krueger series approximation to the transverse
 Mercator projection instead of the exact projection.
 .IP "\fB\-t\fR" 4
 .IX Item "-t"
-use exact algorithm with the \s-1EXTENDED\s0 \s-1DOMAIN\s0.
+use the exact algorithm with the \*(L"\s-1EXTENDED\s0 \s-1DOMAIN\s0\*(R".
 .IP "\fB\-l\fR" 4
 .IX Item "-l"
 specify the longitude of origin \fIlon0\fR (degrees, default 0).
@@ -249,7 +249,7 @@ terminate; following lines will be converted.
 .IX Header "SEE ALSO"
 The algorithms for the transverse Mercator projection are described in
 C. F. F. Karney, \fITransverse Mercator with an accuracy of a few
-nanometers\fR, J. Geod \fB85\fR(8), 475\-485 (Aug. 2011); \s-1DOI\s0
+nanometers\fR, J. Geodesy \fB85\fR(8), 475\-485 (Aug. 2011); \s-1DOI\s0
 http://dx.doi.org/10.1007/s00190\-011\-0445\-3 <http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint
 <http://arxiv.org/abs/1002.1417>.  The explanation of the extended
 domain of the projection with the \fB\-t\fR option is given in Section 5 of
diff --git a/man/TransverseMercatorProj.1.html b/man/TransverseMercatorProj.1.html
index c3868d4..c43bf74 100644
--- a/man/TransverseMercatorProj.1.html
+++ b/man/TransverseMercatorProj.1.html
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
-<title>TransverseMercatorProj -- perform transverse Mercator projection</title>
+<title></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rev="made" href="mailto:root at localhost" />
 </head>
@@ -10,212 +10,141 @@
 <body style="background-color: white">
 
 
-<!-- INDEX BEGIN -->
-<div name="index">
-<p><a name="__index__"></a></p>
-<!--
 
-<ul>
+<h1 id="NAME">NAME</h1>
 
-	<li><a href="#name">NAME</a></li>
-	<li><a href="#synopsis">SYNOPSIS</a></li>
-	<li><a href="#description">DESCRIPTION</a></li>
-	<li><a href="#options">OPTIONS</a></li>
-	<li><a href="#extended_domain">EXTENDED DOMAIN</a></li>
-	<li><a href="#examples">EXAMPLES</a></li>
-	<li><a href="#errors">ERRORS</a></li>
-	<li><a href="#author">AUTHOR</a></li>
-	<li><a href="#see_also">SEE ALSO</a></li>
-	<li><a href="#history">HISTORY</a></li>
-</ul>
+<p>TransverseMercatorProj -- perform transverse Mercator projection</p>
 
--->
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
 
+<p><b>TransverseMercatorProj</b> [ <b>-s</b> | <b>-t</b> ] [ <b>-l</b> <i>lon0</i> ] [ <b>-k</b> <i>k0</i> ] [ <b>-r</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
-</div>
-<!-- INDEX END -->
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>Perform the transverse Mercator projections. Convert geodetic coordinates to transverse Mercator coordinates. The central meridian is given by <i>lon0</i>. The longitude of origin is the equator. The scale on the central meridian is <i>k0</i>. By default an implementation of the exact transverse Mercator projection is used.</p>
+
+<p>Geodetic coordinates are provided on standard input as a set of lines containing (blank separated) <i>latitude</i> and <i>longitude</i> (decimal degrees or degrees, minutes, seconds). For each set of geodetic coordinates, the corresponding projected easting, <i>x</i>, and northing, <i>y</i>, (meters) are printed on standard output together with the meridian convergence <i>gamma</i> (degrees) and scale <i>k</i>. The meridian convergence is the bearing of the <i>y</i> axis measured cloc [...]
+
+<h1 id="OPTIONS">OPTIONS</h1>
 
-<p>
-</p>
-<hr />
-<h1><a name="name">NAME</a></h1>
-<p>TransverseMercatorProj -- perform transverse Mercator projection</p>
-<p>
-</p>
-<hr />
-<h1><a name="synopsis">SYNOPSIS</a></h1>
-<p><strong>TransverseMercatorProj</strong> [ <strong>-s</strong> | <strong>-t</strong> ]
-[ <strong>-l</strong> <em>lon0</em> ] [ <strong>-k</strong> <em>k1</em> ] [ <strong>-r</strong> ]
-[ <strong>-e</strong> <em>a</em> <em>f</em> ]
-[ <strong>--comment-delimiter</strong> <em>commentdelim</em> ]
-[ <strong>--version</strong> | <strong>-h</strong> | <strong>--help</strong> ]
-[ <strong>--input-file</strong> <em>infile</em> | <strong>--input-string</strong> <em>instring</em> ]
-[ <strong>--line-separator</strong> <em>linesep</em> ]
-[ <strong>--output-file</strong> <em>outfile</em> ]</p>
-<p>
-</p>
-<hr />
-<h1><a name="description">DESCRIPTION</a></h1>
-<p>Perform the transverse Mercator projections.  Convert geodetic
-coordinates to transverse Mercator coordinates.  The central meridian is
-given by <em>lon0</em>.  The longitude of origin is the equator.  The scale on
-the central meridian is <em>k0</em>.  By default an implementation of the
-exact transverse Mercator projection is used.</p>
-<p>Geodetic coordinates are provided on standard input as a set of lines
-containing (blank separated) <em>latitude</em> and <em>longitude</em> (decimal
-degrees or degrees, minutes, seconds).  For each set of geodetic
-coordinates, the corresponding projected easting, <em>x</em>, and northing,
-<em>y</em>, (meters) are printed on standard output together with the meridian
-convergence <em>gamma</em> (degrees) and scale <em>k</em>.  The meridian convergence
-is the bearing of the <em>y</em> axis measured clockwise from true north.</p>
-<p>
-</p>
-<hr />
-<h1><a name="options">OPTIONS</a></h1>
 <dl>
-<dt><strong><a name="s" class="item"><strong>-s</strong></a></strong></dt>
 
+<dt id="s"><b>-s</b></dt>
 <dd>
-<p>use the sixth-order Krueger series approximation to the transverse
-Mercator projection instead of the exact projection.</p>
-</dd>
-<dt><strong><a name="t" class="item"><strong>-t</strong></a></strong></dt>
 
-<dd>
-<p>use exact algorithm with the <a href="#extended_domain">EXTENDED DOMAIN</a>.</p>
-</dd>
-<dt><strong><a name="l" class="item"><strong>-l</strong></a></strong></dt>
+<p>use the sixth-order Krueger series approximation to the transverse Mercator projection instead of the exact projection.</p>
 
-<dd>
-<p>specify the longitude of origin <em>lon0</em> (degrees, default 0).</p>
 </dd>
-<dt><strong><a name="k" class="item"><strong>-k</strong></a></strong></dt>
-
+<dt id="t"><b>-t</b></dt>
 <dd>
-<p>specify the scale <em>k0</em> on the central meridian (default 0.9996).</p>
-</dd>
-<dt><strong><a name="r" class="item"><strong>-r</strong></a></strong></dt>
 
-<dd>
-<p>perform the reverse projection.  <em>x</em> and <em>y</em> are given on standard
-input and each line of standard output gives <em>latitude</em>, <em>longitude</em>,
-<em>gamma</em>, and <em>k</em>.</p>
+<p>use the exact algorithm with the <a href="#EXTENDED-DOMAIN">"EXTENDED DOMAIN"</a>.</p>
+
 </dd>
-<dt><strong><a name="e" class="item"><strong>-e</strong></a></strong></dt>
+<dt id="l"><b>-l</b></dt>
+<dd>
 
+<p>specify the longitude of origin <i>lon0</i> (degrees, default 0).</p>
+
+</dd>
+<dt id="k"><b>-k</b></dt>
 <dd>
-<p>specify the ellipsoid via <em>a</em> <em>f</em>; the equatorial radius is <em>a</em> and
-the flattening is <em>f</em>.  Setting <em>f</em> = 0 results in a sphere.  Specify
-<em>f</em> < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
-is allowed for <em>f</em>.  (Also, if <em>f</em> > 1, the flattening is set to
-1/<em>f</em>.)  By default, the WGS84 ellipsoid is used, <em>a</em> = 6378137 m,
-<em>f</em> = 1/298.257223563.  If the exact algorithm is used, <em>f</em> must be
-positive.</p>
+
+<p>specify the scale <i>k0</i> on the central meridian (default 0.9996).</p>
+
 </dd>
-<dt><strong><a name="comment_delimiter" class="item"><strong>--comment-delimiter</strong></a></strong></dt>
+<dt id="r"><b>-r</b></dt>
+<dd>
+
+<p>perform the reverse projection. <i>x</i> and <i>y</i> are given on standard input and each line of standard output gives <i>latitude</i>, <i>longitude</i>, <i>gamma</i>, and <i>k</i>.</p>
 
+</dd>
+<dt id="e"><b>-e</b></dt>
 <dd>
-<p>set the comment delimiter to <em>commentdelim</em> (e.g., "#" or "//").  If
-set, the input lines will be scanned for this delimiter and, if found,
-the delimiter and the rest of the line will be removed prior to
-processing and subsequently appended to the output line (separated by a
-space).</p>
+
+<p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563. If the exact algorithm is used, <i>f</i> must be positive.</p>
+
 </dd>
-<dt><strong><a name="version" class="item"><strong>--version</strong></a></strong></dt>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
 
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
+
+</dd>
+<dt id="version"><b>--version</b></dt>
 <dd>
+
 <p>print version and exit.</p>
-</dd>
-<dt><strong><a name="h" class="item"><strong>-h</strong></a></strong></dt>
 
+</dd>
+<dt id="h"><b>-h</b></dt>
 <dd>
+
 <p>print usage and exit.</p>
-</dd>
-<dt><strong><a name="help" class="item"><strong>--help</strong></a></strong></dt>
 
+</dd>
+<dt id="help"><b>--help</b></dt>
 <dd>
+
 <p>print full documentation and exit.</p>
-</dd>
-<dt><strong><a name="input_file" class="item"><strong>--input-file</strong></a></strong></dt>
 
-<dd>
-<p>read input from the file <em>infile</em> instead of from standard input; a file
-name of "-" stands for standard input.</p>
 </dd>
-<dt><strong><a name="input_string" class="item"><strong>--input-string</strong></a></strong></dt>
-
+<dt id="input-file"><b>--input-file</b></dt>
 <dd>
-<p>read input from the string <em>instring</em> instead of from standard input.
-All occurrences of the line separator character (default is a semicolon)
-in <em>instring</em> are converted to newlines before the reading begins.</p>
-</dd>
-<dt><strong><a name="line_separator" class="item"><strong>--line-separator</strong></a></strong></dt>
 
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
 <dd>
-<p>set the line separator character to <em>linesep</em>.  By default this is a
-semicolon.</p>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
 </dd>
-<dt><strong><a name="output_file" class="item"><strong>--output-file</strong></a></strong></dt>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
+
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
 
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
 <dd>
-<p>write output to the file <em>outfile</em> instead of to standard output; a
-file name of "-" stands for standard output.</p>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
 </dd>
 </dl>
-<p>
-</p>
-<hr />
-<h1><a name="extended_domain">EXTENDED DOMAIN</a></h1>
-<p>The exact transverse Mercator projection has a <em>branch point</em> on the
-equator at longitudes (relative to <em>lon0</em>) of +/- (1 - <em>e</em>) 90, where
-<em>e</em> is the eccentricity of the ellipsoid.  The standard convention for
-handling this branch point is to map positive (negative) latitudes into
-positive (negative) northings <em>y</em>; i.e., a branch cut is placed on the
-equator.  With the <em>extended</em> domain, the northern sheet of the
-projection is extended into the south hemisphere by pushing the branch
-cut south from the branch points.  See the reference below for details.</p>
-<p>
-</p>
-<hr />
-<h1><a name="examples">EXAMPLES</a></h1>
-<pre>
-   echo 0 90 | TransverseMercatorProj
+
+<h1 id="EXTENDED-DOMAIN">EXTENDED DOMAIN</h1>
+
+<p>The exact transverse Mercator projection has a <i>branch point</i> on the equator at longitudes (relative to <i>lon0</i>) of +/- (1 - <i>e</i>) 90, where <i>e</i> is the eccentricity of the ellipsoid. The standard convention for handling this branch point is to map positive (negative) latitudes into positive (negative) northings <i>y</i>; i.e., a branch cut is placed on the equator. With the <i>extended</i> domain, the northern sheet of the projection is extended into the south hemisp [...]
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
+<pre><code>   echo 0 90 | TransverseMercatorProj
    => 25953592.84 9997964.94 90 18.40
    echo 260e5 100e5 | TransverseMercatorProj -r
-   => -0.02 90.00 90.01 18.48</pre>
-<p>
-</p>
-<hr />
-<h1><a name="errors">ERRORS</a></h1>
-<p>An illegal line of input will print an error message to standard output
-beginning with <code>ERROR:</code> and causes <strong>TransverseMercatorProj</strong> to return an exit
-code of 1.  However, an error does not cause <strong>TransverseMercatorProj</strong> to
-terminate; following lines will be converted.</p>
-<p>
-</p>
-<hr />
-<h1><a name="author">AUTHOR</a></h1>
-<p><strong>TransverseMercatorProj</strong> was written by Charles Karney.</p>
-<p>
-</p>
-<hr />
-<h1><a name="see_also">SEE ALSO</a></h1>
-<p>The algorithms for the transverse Mercator projection are described in
-C. F. F. Karney, <em>Transverse Mercator with an accuracy of a few
-nanometers</em>, J. Geod <strong>85</strong>(8), 475-485 (Aug. 2011); DOI
-<a href="http://dx.doi.org/10.1007/s00190-011-0445-3">http://dx.doi.org/10.1007/s00190-011-0445-3</a>; preprint
-<a href="http://arxiv.org/abs/1002.1417">http://arxiv.org/abs/1002.1417</a>.  The explanation of the extended
-domain of the projection with the <strong>-t</strong> option is given in Section 5 of
-this paper.</p>
-<p>
-</p>
-<hr />
-<h1><a name="history">HISTORY</a></h1>
-<p><strong>TransverseMercatorProj</strong> was added to GeographicLib,
-<a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-01.  Prior to version 1.9 it was
-called TransverseMercatorTest (and its interface was slightly
-different).</p>
+   => -0.02 90.00 90.01 18.48</code></pre>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>TransverseMercatorProj</b> to return an exit code of 1. However, an error does not cause <b>TransverseMercatorProj</b> to terminate; following lines will be converted.</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>TransverseMercatorProj</b> was written by Charles Karney.</p>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>The algorithms for the transverse Mercator projection are described in C. F. F. Karney, <i>Transverse Mercator with an accuracy of a few nanometers</i>, J. Geodesy <b>85</b>(8), 475-485 (Aug. 2011); DOI <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">http://dx.doi.org/10.1007/s00190-011-0445-3</a>; preprint <a href="http://arxiv.org/abs/1002.1417">http://arxiv.org/abs/1002.1417</a>. The explanation of the extended domain of the projection with the <b>-t</b> option is given in Se [...]
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>TransverseMercatorProj</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in 2009-01. Prior to version 1.9 it was called TransverseMercatorTest (and its interface was slightly different).</p>
+
 
 </body>
 
 </html>
+
+
diff --git a/man/TransverseMercatorProj.pod b/man/TransverseMercatorProj.pod
index ca690a5..459414a 100644
--- a/man/TransverseMercatorProj.pod
+++ b/man/TransverseMercatorProj.pod
@@ -1,5 +1,3 @@
-=for comment $Id: 8a4775820ec5720d8a4f478595e88eb32f385475 $
-
 =head1 NAME
 
 TransverseMercatorProj -- perform transverse Mercator projection
@@ -7,7 +5,7 @@ TransverseMercatorProj -- perform transverse Mercator projection
 =head1 SYNOPSIS
 
 B<TransverseMercatorProj> [ B<-s> | B<-t> ]
-[ B<-l> I<lon0> ] [ B<-k> I<k1> ] [ B<-r> ]
+[ B<-l> I<lon0> ] [ B<-k> I<k0> ] [ B<-r> ]
 [ B<-e> I<a> I<f> ]
 [ B<--comment-delimiter> I<commentdelim> ]
 [ B<--version> | B<-h> | B<--help> ]
@@ -42,7 +40,7 @@ Mercator projection instead of the exact projection.
 
 =item B<-t>
 
-use exact algorithm with the L<EXTENDED DOMAIN|extended domain>.
+use the exact algorithm with the L</EXTENDED DOMAIN>.
 
 =item B<-l>
 
@@ -144,7 +142,7 @@ B<TransverseMercatorProj> was written by Charles Karney.
 
 The algorithms for the transverse Mercator projection are described in
 C. F. F. Karney, I<Transverse Mercator with an accuracy of a few
-nanometers>, J. Geod B<85>(8), 475-485 (Aug. 2011); DOI
+nanometers>, J. Geodesy B<85>(8), 475-485 (Aug. 2011); DOI
 L<http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint
 L<http://arxiv.org/abs/1002.1417>.  The explanation of the extended
 domain of the projection with the B<-t> option is given in Section 5 of
diff --git a/man/TransverseMercatorProj.usage b/man/TransverseMercatorProj.usage
index 50345f9..189744e 100644
--- a/man/TransverseMercatorProj.usage
+++ b/man/TransverseMercatorProj.usage
@@ -1,7 +1,7 @@
 int usage(int retval, bool brief) {
   if (brief)
     ( retval ? std::cerr : std::cout ) << "Usage:\n"
-"    TransverseMercatorProj [ -s | -t ] [ -l lon0 ] [ -k k1 ] [ -r ] [ -e a\n"
+"    TransverseMercatorProj [ -s | -t ] [ -l lon0 ] [ -k k0 ] [ -r ] [ -e a\n"
 "    f ] [ --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
 "    --input-file infile | --input-string instring ] [ --line-separator\n"
 "    linesep ] [ --output-file outfile ]\n"
@@ -9,14 +9,14 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    TransverseMercatorProj --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/html/TransverseMercatorProj.1.html\n";
+"    http://geographiclib.sf.net/1.34/TransverseMercatorProj.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
 "       TransverseMercatorProj -- perform transverse Mercator projection\n"
 "\n"
 "SYNOPSIS\n"
-"       TransverseMercatorProj [ -s | -t ] [ -l lon0 ] [ -k k1 ] [ -r ] [ -e a\n"
+"       TransverseMercatorProj [ -s | -t ] [ -l lon0 ] [ -k k0 ] [ -r ] [ -e a\n"
 "       f ] [ --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
 "       --input-file infile | --input-string instring ] [ --line-separator\n"
 "       linesep ] [ --output-file outfile ]\n"
@@ -40,7 +40,7 @@ int usage(int retval, bool brief) {
 "       -s  use the sixth-order Krueger series approximation to the transverse\n"
 "           Mercator projection instead of the exact projection.\n"
 "\n"
-"       -t  use exact algorithm with the EXTENDED DOMAIN.\n"
+"       -t  use the exact algorithm with the \"EXTENDED DOMAIN\".\n"
 "\n"
 "       -l  specify the longitude of origin lon0 (degrees, default 0).\n"
 "\n"
@@ -119,7 +119,7 @@ int usage(int retval, bool brief) {
 "SEE ALSO\n"
 "       The algorithms for the transverse Mercator projection are described in\n"
 "       C. F. F. Karney, Transverse Mercator with an accuracy of a few\n"
-"       nanometers, J. Geod 85(8), 475-485 (Aug. 2011); DOI\n"
+"       nanometers, J. Geodesy 85(8), 475-485 (Aug. 2011); DOI\n"
 "       http://dx.doi.org/10.1007/s00190-011-0445-3\n"
 "       <http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint\n"
 "       <http://arxiv.org/abs/1002.1417>.  The explanation of the extended\n"
@@ -132,5 +132,5 @@ int usage(int retval, bool brief) {
 "       called TransverseMercatorTest (and its interface was slightly\n"
 "       different).\n"
 ;
-    return retval;
+  return retval;
 }
diff --git a/man/dummy.1.html.in b/man/dummy.1.html.in
new file mode 100644
index 0000000..ea9aa2e
--- /dev/null
+++ b/man/dummy.1.html.in
@@ -0,0 +1,23 @@
+<html>
+  <head>
+    <title>@TOOL@ -- a GeographicLib utility</title>
+    <meta HTTP-EQUIV="Refresh"
+	  CONTENT="0; URL=http://geographiclib.sourceforge.net/@PROJECT_VERSION@/@TOOL@.1.html">
+  </head>
+  <body topmargin=10 leftmargin=10>
+    <h3>
+      <blockquote>
+	<em>
+	  Online documentation for the @TOOL@ utility is available at
+	  <center>
+	    <a href="http://geographiclib.sourceforge.net/@PROJECT_VERSION@/@TOOL@.1.html">
+	      http://geographiclib.sourceforge.net/@PROJECT_VERSION@/@TOOL@.1.html</a>.
+	  </center>
+	  <br>
+	  You will be redirected there.  Click on the link to go there
+	  directly.
+	</em>
+      </blockquote>
+    </h3>
+  </body>
+</html>
diff --git a/man/dummy.1.in b/man/dummy.1.in
new file mode 100644
index 0000000..cc75044
--- /dev/null
+++ b/man/dummy.1.in
@@ -0,0 +1,12 @@
+.IX Title "@TOOL@ 1"
+.TH @TOOL@ 1 "" "GeographicLib Utilities" "GeographicLib Utilities"
+.SH "NAME"
+ at TOOL@ \-\- a GeographicLib utility
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fB at TOOL@\fR is part of GeographicLib, <http://geographiclib.sf.net>.
+For documentation, see
+.PP
+.Vb 2
+\&   http://geographiclib.sf.net/@PROJECT_VERSION@/@TOOL@.1.html
+.Ve
diff --git a/man/dummy.usage.in b/man/dummy.usage.in
new file mode 100644
index 0000000..0177501
--- /dev/null
+++ b/man/dummy.usage.in
@@ -0,0 +1,8 @@
+// Dummy usage file to be used when the man page isn't available
+
+int usage(int retval, bool /* brief */) {
+  ( retval ? std::cerr : std::cout )
+    << "For full documentation visit on @TOOL@, see\n"
+    << "    http://geographiclib.sf.net/@PROJECT_VERSION@/@TOOL@.1.html\n";
+  return retval;
+}
diff --git a/man/makeusage.sh b/man/makeusage.sh
index 9a26316..5547c8a 100644
--- a/man/makeusage.sh
+++ b/man/makeusage.sh
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Convert a pod file into a usage function for the GeographicLib utilities.
-# $Id: b30e390f45730799e56eb08d7450008f1b1bb540 $
 
 SOURCE=$1
 NAME=`basename $SOURCE .pod`
+VERSION=$2
 
 (
 cat<<EOF
@@ -20,7 +20,7 @@ cat <<EOF
 For full documentation type:\n\\
     $NAME --help\n\\
 or visit:\n\\
-    http://geographiclib.sf.net/html/$NAME.1.html\n";
+    http://geographiclib.sf.net/$VERSION/$NAME.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n\\
 EOF
@@ -30,7 +30,7 @@ tail --lines +5 | sed -e 's/\\/\\\\/g' -e 's/$/\\n\\/' -e 's/"/\\"/g'
 
 cat <<EOF
 ";
-    return retval;
+  return retval;
 }
 EOF
 ) | # Break long strings assuming that files don't contain the ~ character
diff --git a/matlab/CMakeLists.txt b/matlab/CMakeLists.txt
index f9aef61..7d50a50 100644
--- a/matlab/CMakeLists.txt
+++ b/matlab/CMakeLists.txt
@@ -1,12 +1,19 @@
-# $Id: 8da4ccf20ab1de73f6ac4c2d60d6857229a076af $
-
 # Set up the matlab interface.  The .m files just contain the
 # documentation.  The .cpp files implement the interface.
-file (GLOB MATLAB_FILES *.m)
-file (GLOB MATLAB_INTERFACES *.cpp)
+file (GLOB MATLAB_FILES [A-Za-z]*.m)
+file (GLOB MATLAB_INTERFACES [A-Za-z]*.cpp)
+if (COMMON_INSTALL_PATH)
+  set (INSTALL_MATLAB_DIR "libexec/GeographicLib/matlab")
+else ()
+  set (INSTALL_MATLAB_DIR "matlab")
+endif ()
 # Both sets of files get installed
 install (FILES ${MATLAB_FILES} ${MATLAB_INTERFACES}
-  DESTINATION libexec/GeographicLib/matlab)
+  DESTINATION ${INSTALL_MATLAB_DIR})
+# Install "private" functions
+file (GLOB PRIVATE_MATLAB_FILES private/[A-Za-z]*.m)
+install (FILES ${PRIVATE_MATLAB_FILES}
+  DESTINATION ${INSTALL_MATLAB_DIR}/private)
 
 # If MEX then compile the interface routines.  On non-Windows
 # systems, an attempt is made to minimize the number of addition target
@@ -14,57 +21,69 @@ install (FILES ${MATLAB_FILES} ${MATLAB_INTERFACES}
 # On Windows systems, need also to copy the shared library to where the
 # mex files live (in the build and install trees).
 if (MEX)
-  if (WIN32)
+  get_target_property (_LIBTYPE ${PROJECT_LIBRARIES} TYPE)
+  if (MSVC)
+    set (CMAKE_INSTALL_DEBUG_LIBRARIES ON)
     include (InstallRequiredSystemLibraries)
     install (PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
-      DESTINATION libexec/GeographicLib/matlab)
-    add_custom_target (matlab-all)
+      DESTINATION ${INSTALL_MATLAB_DIR})
+    add_custom_target (matlabinterface)
+    if (_LIBTYPE STREQUAL "SHARED_LIBRARY")
+      set (_LIB Geographic-i)
+    else ()
+      set (_LIB Geographic)
+    endif ()
   else ()
     set (INTERFACE_LIST)
+    set (_LIB Geographic)
   endif ()
   foreach (INTERFACE ${MATLAB_INTERFACES})
     get_filename_component (TARGET ${INTERFACE} NAME_WE)
     set (TARGET_INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}.${MEXEXT})
-    if (WIN32)
+    if (MSVC)
       add_custom_target (matlab-${TARGET} DEPENDS ${TARGET_INTERFACE})
       add_custom_command (OUTPUT ${TARGET_INTERFACE}
         COMMAND
-          ${MEX}
+          ${MEX} ${MEXOPTIONS} ${PROJECT_DEFINITIONS}
             -I${PROJECT_BINARY_DIR}/include -I${PROJECT_SOURCE_DIR}/include
-            -L${PROJECT_BINARY_DIR}/src/Release -lGeographic
+            -L${PROJECT_BINARY_DIR}/src/Release -l${_LIB}
             ${INTERFACE}
         COMMENT "Building matlab interface for ${TARGET}"
-        DEPENDS ${INTERFACE} Geographic)
-      add_dependencies (matlab-${TARGET} Geographic)
-      add_dependencies (matlab-all matlab-${TARGET})
+        DEPENDS ${INTERFACE} ${PROJECT_LIBRARIES})
+      add_dependencies (matlabinterface matlab-${TARGET})
       install (PROGRAMS ${TARGET_INTERFACE}
-        DESTINATION libexec/GeographicLib/matlab CONFIGURATIONS Release)
+        DESTINATION ${INSTALL_MATLAB_DIR} CONFIGURATIONS Release)
+      # Put all the matlab targets into a folder in the IDE
+      set_property (TARGET matlab-${TARGET} PROPERTY FOLDER matlab)
     else ()
       set (INTERFACE_LIST ${INTERFACE_LIST} ${TARGET_INTERFACE})
+      if (_LIBTYPE STREQUAL "SHARED_LIBRARY")
+        set (RPATH_OPTS -Wl,-rpath=${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
+      endif ()
       add_custom_command (OUTPUT ${TARGET_INTERFACE}
         COMMAND
-          ${MEX} --mex
+          ${MEX} ${MEXOPTIONS}
             -I${PROJECT_BINARY_DIR}/include -I${PROJECT_SOURCE_DIR}/include
-            -L${PROJECT_BINARY_DIR}/src -lGeographic
-            -Wl,-rpath=${CMAKE_INSTALL_PREFIX}/lib
+            -L${PROJECT_BINARY_DIR}/src -l${_LIB}
+            ${RPATH_OPTS}
             ${INTERFACE}
         COMMENT "Building matlab interface for ${TARGET}"
-        DEPENDS ${INTERFACE} Geographic)
+        DEPENDS ${INTERFACE} ${PROJECT_LIBRARIES})
     endif ()
   endforeach ()
-  if (NOT WIN32)
-    add_custom_target (matlab-all DEPENDS ${INTERFACE_LIST})
-    add_dependencies (matlab-all Geographic)
+  if (NOT MSVC)
+    add_custom_target (matlabinterface DEPENDS ${INTERFACE_LIST})
     install (PROGRAMS ${INTERFACE_LIST}
-      DESTINATION libexec/GeographicLib/matlab CONFIGURATIONS Release)
+      DESTINATION ${INSTALL_MATLAB_DIR} CONFIGURATIONS Release)
   endif ()
-  if (WIN32 AND GEOGRAPHIC_SHARED_LIB)
-    get_target_property (GEOGRAPHIC_LIBRARY_FILE Geographic LOCATION_RELEASE)
-    add_custom_command (TARGET matlab-all POST_BUILD
-      COMMAND ${CMAKE_COMMAND} -E copy ${GEOGRAPHIC_LIBRARY_FILE} ./)
-    get_filename_component (GEOGRAPHIC_LIBRARY_NAME
-      ${GEOGRAPHIC_LIBRARY_FILE} NAME)
-    install (PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${GEOGRAPHIC_LIBRARY_NAME}
-      DESTINATION libexec/GeographicLib/matlab CONFIGURATIONS Release)
+  if (MSVC AND _LIBTYPE STREQUAL "SHARED_LIBRARY")
+    get_target_property (_LOC ${PROJECT_LIBRARIES} LOCATION_RELEASE)
+    add_custom_command (TARGET matlabinterface POST_BUILD
+      COMMAND ${CMAKE_COMMAND} -E copy ${_LOC} ./)
+    get_filename_component (_NAME ${_LOC} NAME)
+    install (PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${_NAME}
+      DESTINATION ${INSTALL_MATLAB_DIR} CONFIGURATIONS Release)
   endif ()
+
+  set_property (TARGET matlabinterface PROPERTY FOLDER matlab)
 endif ()
diff --git a/matlab/Makefile.am b/matlab/Makefile.am
index fd89ba7..456ed2b 100644
--- a/matlab/Makefile.am
+++ b/matlab/Makefile.am
@@ -2,7 +2,6 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: 472c249909687bc3d74ec316a8a7d06e778fd826 $
 
 MATLAB_INTERFACE = \
 $(srcdir)/geodesicdirect.cpp \
@@ -36,15 +35,61 @@ $(srcdir)/polygonarea.m
 
 MATLAB_COMPILESCRIPT = $(srcdir)/geographiclibinterface.m
 
-MATLAB_ALL = $(MATLAB_INTERFACE) $(MATLAB_DOC) $(MATLAB_COMPILESCRIPT)
+MATLAB_GEOD = \
+$(srcdir)/geoddoc.m \
+$(srcdir)/geodreckon.m \
+$(srcdir)/geoddistance.m \
+$(srcdir)/geodarea.m \
+$(srcdir)/defaultellipsoid.m \
+$(srcdir)/ecc2flat.m \
+$(srcdir)/flat2ecc.m \
+$(srcdir)/geodproj.m \
+$(srcdir)/eqdazim_fwd.m \
+$(srcdir)/eqdazim_inv.m \
+$(srcdir)/cassini_fwd.m \
+$(srcdir)/cassini_inv.m \
+$(srcdir)/tranmerc_fwd.m \
+$(srcdir)/tranmerc_inv.m \
+$(srcdir)/gnomonic_fwd.m \
+$(srcdir)/gnomonic_inv.m \
+$(srcdir)/utm_fwd.m \
+$(srcdir)/utm_inv.m
+
+MATLAB_GEOD_PRIVATE = \
+$(srcdir)/private/A1m1f.m \
+$(srcdir)/private/A2m1f.m \
+$(srcdir)/private/A3coeff.m \
+$(srcdir)/private/A3f.m \
+$(srcdir)/private/AngDiff.m \
+$(srcdir)/private/AngNormalize2.m \
+$(srcdir)/private/AngNormalize.m \
+$(srcdir)/private/AngRound.m \
+$(srcdir)/private/atanhee.m \
+$(srcdir)/private/C1f.m \
+$(srcdir)/private/C1pf.m \
+$(srcdir)/private/C2f.m \
+$(srcdir)/private/C3coeff.m \
+$(srcdir)/private/C3f.m \
+$(srcdir)/private/C4coeff.m \
+$(srcdir)/private/C4f.m \
+$(srcdir)/private/cbrt.m \
+$(srcdir)/private/cvmgt.m \
+$(srcdir)/private/SinCosNorm.m \
+$(srcdir)/private/SinCosSeries.m \
+$(srcdir)/private/sumx.m \
+$(srcdir)/private/swap.m
+
+MATLAB_ALL = $(MATLAB_INTERFACE) $(MATLAB_DOC) $(MATLAB_COMPILESCRIPT) \
+	$(MATLAB_GEOD)
 
 matlabdir=$(libexecdir)/GeographicLib/matlab
 
 install:
-	$(INSTALL) -d $(DESTDIR)$(matlabdir)
+	$(INSTALL) -d $(DESTDIR)$(matlabdir)/private
 	$(INSTALL) -m 644 $(MATLAB_ALL) $(DESTDIR)$(matlabdir)
+	$(INSTALL) -m 644 $(MATLAB_GEOD_PRIVATE) $(DESTDIR)$(matlabdir)/private
 
 clean-local:
 	rm -rf *.mex* *.oct
 
-EXTRA_DIST = Makefile.mk CMakeLists.txt $(MATLAB_ALL)
+EXTRA_DIST = Makefile.mk CMakeLists.txt $(MATLAB_ALL) $(MATLAB_GEOD_PRIVATE)
diff --git a/matlab/Makefile.in b/matlab/Makefile.in
index ee0a47a..ce51f72 100644
--- a/matlab/Makefile.in
+++ b/matlab/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,8 +18,24 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: 472c249909687bc3d74ec316a8a7d06e778fd826 $
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -55,6 +70,11 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -66,6 +86,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -76,6 +97,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -84,6 +106,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -119,6 +144,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -214,9 +241,55 @@ $(srcdir)/localcartesianreverse.m \
 $(srcdir)/polygonarea.m
 
 MATLAB_COMPILESCRIPT = $(srcdir)/geographiclibinterface.m
-MATLAB_ALL = $(MATLAB_INTERFACE) $(MATLAB_DOC) $(MATLAB_COMPILESCRIPT)
+MATLAB_GEOD = \
+$(srcdir)/geoddoc.m \
+$(srcdir)/geodreckon.m \
+$(srcdir)/geoddistance.m \
+$(srcdir)/geodarea.m \
+$(srcdir)/defaultellipsoid.m \
+$(srcdir)/ecc2flat.m \
+$(srcdir)/flat2ecc.m \
+$(srcdir)/geodproj.m \
+$(srcdir)/eqdazim_fwd.m \
+$(srcdir)/eqdazim_inv.m \
+$(srcdir)/cassini_fwd.m \
+$(srcdir)/cassini_inv.m \
+$(srcdir)/tranmerc_fwd.m \
+$(srcdir)/tranmerc_inv.m \
+$(srcdir)/gnomonic_fwd.m \
+$(srcdir)/gnomonic_inv.m \
+$(srcdir)/utm_fwd.m \
+$(srcdir)/utm_inv.m
+
+MATLAB_GEOD_PRIVATE = \
+$(srcdir)/private/A1m1f.m \
+$(srcdir)/private/A2m1f.m \
+$(srcdir)/private/A3coeff.m \
+$(srcdir)/private/A3f.m \
+$(srcdir)/private/AngDiff.m \
+$(srcdir)/private/AngNormalize2.m \
+$(srcdir)/private/AngNormalize.m \
+$(srcdir)/private/AngRound.m \
+$(srcdir)/private/atanhee.m \
+$(srcdir)/private/C1f.m \
+$(srcdir)/private/C1pf.m \
+$(srcdir)/private/C2f.m \
+$(srcdir)/private/C3coeff.m \
+$(srcdir)/private/C3f.m \
+$(srcdir)/private/C4coeff.m \
+$(srcdir)/private/C4f.m \
+$(srcdir)/private/cbrt.m \
+$(srcdir)/private/cvmgt.m \
+$(srcdir)/private/SinCosNorm.m \
+$(srcdir)/private/SinCosSeries.m \
+$(srcdir)/private/sumx.m \
+$(srcdir)/private/swap.m
+
+MATLAB_ALL = $(MATLAB_INTERFACE) $(MATLAB_DOC) $(MATLAB_COMPILESCRIPT) \
+	$(MATLAB_GEOD)
+
 matlabdir = $(libexecdir)/GeographicLib/matlab
-EXTRA_DIST = Makefile.mk CMakeLists.txt $(MATLAB_ALL)
+EXTRA_DIST = Makefile.mk CMakeLists.txt $(MATLAB_ALL) $(MATLAB_GEOD_PRIVATE)
 all: all-am
 
 .SUFFIXES:
@@ -262,6 +335,8 @@ TAGS:
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -306,10 +381,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -403,8 +483,9 @@ uninstall-am:
 
 
 install:
-	$(INSTALL) -d $(DESTDIR)$(matlabdir)
+	$(INSTALL) -d $(DESTDIR)$(matlabdir)/private
 	$(INSTALL) -m 644 $(MATLAB_ALL) $(DESTDIR)$(matlabdir)
+	$(INSTALL) -m 644 $(MATLAB_GEOD_PRIVATE) $(DESTDIR)$(matlabdir)/private
 
 clean-local:
 	rm -rf *.mex* *.oct
diff --git a/matlab/Makefile.mk b/matlab/Makefile.mk
index f56d259..6210286 100644
--- a/matlab/Makefile.mk
+++ b/matlab/Makefile.mk
@@ -1,5 +1,3 @@
-# $Id: 2e3bb10fb00f675941b80294bf69a64d97a1f29b $
-
 FUNCTIONS = utmupsforward utmupsreverse mgrsforward mgrsreverse \
 	geodesicdirect geodesicinverse geodesicline \
 	geoidheight geocentricforward geocentricreverse \
@@ -7,8 +5,16 @@ FUNCTIONS = utmupsforward utmupsreverse mgrsforward mgrsreverse \
 
 MATLAB_COMPILESCRIPT = geographiclibinterface.m
 
+MATLAB_GEOD = geoddoc.m geodreckon.m geoddistance.m geodarea.m \
+	defaultellipsoid.m ecc2flat.m flat2ecc.m \
+	geodproj.m eqdazim_fwd.m eqdazim_inv.m cassini_fwd.m cassini_inv.m \
+	tranmerc_fwd.m tranmerc_inv.m gnomonic_fwd.m gnomonic_inv.m \
+	utm_fwd.m utm_inv.m
+
+MATLAB_GEOD_PRIVATE = $(wildcard private/*.m)
+
 MATLABFILES = $(addsuffix .cpp,$(FUNCTIONS)) $(addsuffix .m,$(FUNCTIONS)) \
-	 $(MATLAB_COMPILESCRIPT)
+	 $(MATLAB_COMPILESCRIPT) $(MATLAB_GEOD)
 
 DEST = $(PREFIX)/libexec/GeographicLib/matlab
 INSTALL = install -b
@@ -17,8 +23,9 @@ all:
 	@:
 
 install:
-	test -d $(DEST) || mkdir -p $(DEST)
+	test -d $(DEST)/private || mkdir -p $(DEST)/private
 	$(INSTALL) -m 644 $(MATLABFILES) $(DEST)/
+	$(INSTALL) -m 644 $(MATLAB_GEOD_PRIVATE) $(DEST)/private/
 clean:
 	rm -f *.mex* *.oct
 
diff --git a/matlab/cassini_fwd.m b/matlab/cassini_fwd.m
new file mode 100644
index 0000000..09a9b03
--- /dev/null
+++ b/matlab/cassini_fwd.m
@@ -0,0 +1,92 @@
+function [x, y, azi, rk] = cassini_fwd(lat0, lon0, lat, lon, ellipsoid)
+%CASSINI_FWD  Forward Cassini-Soldner projection
+%
+%   [X, Y] = CASSINI_FWD(LAT0, LON0, LAT, LON)
+%   [X, Y, AZI, RK] = CASSINI_FWD(LAT0, LON0, LAT, LON, ELLIPSOID)
+%
+%   performs the forward Cassini-Soldner projection of points (LAT,LON) to
+%   (X,Y) using (LAT0,LON0) as the center of projection.  These input
+%   arguments can be scalars or arrays of equal size.  The ELLIPSOID vector
+%   is of the form [a, e], where a is the equatorial radius in meters, e is
+%   the eccentricity.  If ellipsoid is omitted, the WGS84 ellipsoid (more
+%   precisely, the value returned by DEFAULTELLIPSOID) is used.  GEODPROJ
+%   defines the projection and gives the restrictions on the allowed ranges
+%   of the arguments.  The inverse projection is given by CASSINI_INV.
+%
+%   AZI and RK give metric properties of the projection at (LAT,LON); AZI
+%   is the azimuth of the easting (X) direction and RK is the reciprocal of
+%   the northing (Y) scale.  The scale in the easting direction is 1.
+%
+%   LAT0, LON0, LAT, LON, AZI are in degrees.  The projected coordinates X,
+%   Y are in meters (more precisely the units used for the equatorial
+%   radius).  RK is dimensionless.
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, CASSINI_INV, GEODDISTANCE, DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  if nargin < 5, ellipsoid = defaultellipsoid; end
+  try
+    Z = lat0 + lon0 + lat + lon;
+    Z = zeros(size(Z));
+  catch err
+    error('lat0, lon0, lat, lon have incompatible sizes')
+  end
+  if length(ellipsoid(:)) ~= 2
+    error('ellipsoid must be a vector of size 2')
+  end
+
+  tiny = sqrt(realmin);
+  degree = pi/180;
+  f = ecc2flat(ellipsoid(2));
+  lat = AngRound(lat);
+  dlon = AngDiff(AngNormalize(lon0), AngNormalize(lon)) + Z;
+  [s12, azi1, azi2, ~, ~, ~, ~, sig12] = ...
+      geoddistance(lat, -abs(dlon), lat, abs(dlon), ellipsoid);
+  c = sig12 < 100 * tiny;
+  sig12(c) = 0;
+  s12(c) = 0;
+  sig12 = 0.5 * sig12;
+  s12 = 0.5 * s12;
+  c = s12 == 0;
+  da = (azi2 - azi2)/2;
+  s = abs(dlon) <= 90;
+  azi1(c & s) = 90 - da(c & s);
+  azi2(c & s) = 90 + da(c & s);
+  s = ~s;
+  azi1(c & s) = -90 - da(c & s);
+  azi2(c & s) = -90 + da(c & s);
+  c = dlon < 0;
+  azi2(c) = azi1(c);
+  s12(c) = -s12(c);
+  sig12(c) = -sig12(c);
+  x = s12;
+  azi = AngNormalize(azi2);
+  [~, ~, ~, ~, ~, ~, rk] = ...
+      geodreckon(lat, dlon, -sig12, azi, ellipsoid, true);
+  [sbet , cbet ] = SinCosNorm((1-f) * sind(lat ), cosd(lat ));
+  [sbet0, cbet0] = SinCosNorm((1-f) * sind(lat0), cosd(lat0));
+  alp = azi * degree;
+  salp = sin(alp); salp(alp == -180) = 0;
+  calp = cos(alp); calp(abs(alp) == 90) = 0;
+  salp0 = salp .* cbet;
+  calp0 = hypot(calp, salp .* sbet);
+  sbet1 = calp0;
+  c = lat + Z >= 0;
+  sbet1(~c) = -sbet1(~c);
+  cbet1 = abs(salp0);
+  c = abs(dlon) <= 90;
+  cbet1(~c) = -cbet1(~c);
+  sbet01 = sbet1 .* cbet0 - cbet1 .* sbet0;
+  cbet01 = cbet1 .* cbet0 + sbet1 .* sbet0;
+  sig01 = atan2(sbet01, cbet01) / degree;
+  [~, ~, ~, ~, ~, ~, ~, y] = geodreckon(lat0, 0, sig01, 0, ellipsoid, true);
+end
diff --git a/matlab/cassini_inv.m b/matlab/cassini_inv.m
new file mode 100644
index 0000000..785febb
--- /dev/null
+++ b/matlab/cassini_inv.m
@@ -0,0 +1,46 @@
+function [lat, lon, azi, rk] = cassini_inv(lat0, lon0, x, y, ellipsoid)
+%CASSINI_INV  Inverse Cassini-Soldner projection
+%
+%   [LAT, LON] = CASSINI_INV(LAT0, LON0, X, Y)
+%   [LAT, LON, AZI, RK] = CASSINI_INV(LAT0, LON0, X, Y, ELLIPSOID)
+%
+%   performs the inverse Cassini-Soldner projection of points (X,Y) to
+%   (LAT,LON) using (LAT0,LON0) as the center of projection.  These input
+%   arguments can be scalars or arrays of equal size.  The ELLIPSOID vector
+%   is of the form [a, e], where a is the equatorial radius in meters, e is
+%   the eccentricity.  If ellipsoid is omitted, the WGS84 ellipsoid (more
+%   precisely, the value returned by DEFAULTELLIPSOID) is used.  GEODPROJ
+%   defines the projection and gives the restrictions on the allowed ranges
+%   of the arguments.  The forward projection is given by CASSINI_FWD.
+%
+%   AZI and RK give metric properties of the projection at (LAT,LON); AZI
+%   is the azimuth of the easting (X) direction and RK is the reciprocal of
+%   the northing (Y) scale.  The scale in the easting direction is 1.
+%
+%   LAT0, LON0, LAT, LON, AZI are in degrees.  The projected coordinates X,
+%   Y are in meters (more precisely the units used for the equatorial
+%   radius).  RK is dimensionless.
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, CASSINI_FWD, GEODRECKON, DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  if nargin < 5, ellipsoid = defaultellipsoid; end
+  try
+    [~] = lat0 + lon0 + x + y;
+  catch err
+    error('lat0, lon0, x, y have incompatible sizes')
+  end
+
+  [lat1, lon1, azi0] = geodreckon(lat0, lon0, y, 0, ellipsoid);
+  [lat, lon, azi, ~, ~, rk] = ...
+      geodreckon(lat1, lon1, x, azi0 + 90, ellipsoid);
+end
diff --git a/matlab/defaultellipsoid.m b/matlab/defaultellipsoid.m
new file mode 100644
index 0000000..4b71da6
--- /dev/null
+++ b/matlab/defaultellipsoid.m
@@ -0,0 +1,16 @@
+function ellipsoid = defaultellipsoid
+%DEFAULTELLIPSOID  Return the WGS84 ellipsoid
+%
+%   ELLIPSOID = DEFAULTELLIPSOID
+%
+%   returns a vector of the equatorial radius and eccentricity for the
+%   WGS84 ellipsoid.  Use ECC2FLAT and FLAT2ECC to convert between
+%   the eccentricity and the flattening.
+%
+%   See also ECC2FLAT, FLAT2ECC.
+
+  a = 6378137;
+  f = 1/298.257223563;
+  e = flat2ecc(f);
+  ellipsoid = [a, e];
+end
diff --git a/matlab/ecc2flat.m b/matlab/ecc2flat.m
new file mode 100644
index 0000000..846edea
--- /dev/null
+++ b/matlab/ecc2flat.m
@@ -0,0 +1,10 @@
+function f = ecc2flat(e)
+%ECC2FLAT   Convert the eccentricity of an ellipsoid to its flattening
+%
+%  F = ECC2FLAT(E) returns the flattening given the eccentricity.
+%
+%   See also FLAT2ECC.
+
+  e2 = e.^2;
+  f = e2 ./ (1 + sqrt(1 - e2));
+end
diff --git a/matlab/eqdazim_fwd.m b/matlab/eqdazim_fwd.m
new file mode 100644
index 0000000..d934ffb
--- /dev/null
+++ b/matlab/eqdazim_fwd.m
@@ -0,0 +1,61 @@
+function [x, y, azi, rk] = eqdazim_fwd(lat0, lon0, lat, lon, ellipsoid)
+%EQDAZIM_FWD  Forward azimuthal equidistant projection
+%
+%   [X, Y] = EQDAZIM_FWD(LAT0, LON0, LAT, LON)
+%   [X, Y, AZI, RK] = EQDAZIM_FWD(LAT0, LON0, LAT, LON, ELLIPSOID)
+%
+%   performs the forward azimuthal equidistant projection of points
+%   (LAT,LON) to (X,Y) using (LAT0,LON0) as the center of projection.
+%   These input arguments can be scalars or arrays of equal size.  The
+%   ELLIPSOID vector is of the form [a, e], where a is the equatorial
+%   radius in meters, e is the eccentricity.  If ellipsoid is omitted, the
+%   WGS84 ellipsoid (more precisely, the value returned by
+%   DEFAULTELLIPSOID) is used.  GEODPROJ defines the projection and gives
+%   the restrictions on the allowed ranges of the arguments.  The inverse
+%   projection is given by EQDAZIM_INV.
+%
+%   AZI and RK give metric properties of the projection at (LAT,LON); AZI
+%   is the azimuth of the geodesic from the center of projection and RK is
+%   the reciprocal of the azimuthal scale.  The scale in the radial
+%   direction is 1.
+%
+%   LAT0, LON0, LAT, LON, AZI are in degrees.  The projected coordinates X,
+%   Y are in meters (more precisely the units used for the equatorial
+%   radius).  RK is dimensionless.
+%
+%   Section 14 of
+%
+%     C. F. F. Karney, Geodesics on an ellipsoid of revolution (2011),
+%     http://arxiv.org/abs/1102.1215
+%     Errata: http://geographiclib.sf.net/geod-addenda.html#geod-errata
+%
+%   describes how to use this projection in the determination of maritime
+%   boundaries (finding the median line).
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, EQDAZIM_INV, GEODDISTANCE, DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  if nargin < 5, ellipsoid = defaultellipsoid; end
+  try
+    [~] = lat0 + lon0 + lat + lon;
+  catch err
+    error('lat0, lon0, lat, lon have incompatible sizes')
+  end
+
+  [s, azi0, azi, ~, m, ~, ~, sig] = ...
+      geoddistance(lat0, lon0, lat, lon, ellipsoid);
+  azi0 = azi0 * (pi/180);
+  x = s .* sin(azi0);
+  y = s .* cos(azi0);
+  rk = m ./ s;
+  rk(sig <= 0.01 * sqrt(realmin)) = 1;
+end
diff --git a/matlab/eqdazim_inv.m b/matlab/eqdazim_inv.m
new file mode 100644
index 0000000..98d5981
--- /dev/null
+++ b/matlab/eqdazim_inv.m
@@ -0,0 +1,59 @@
+function [lat, lon, azi, rk] = eqdazim_inv(lat0, lon0, x, y, ellipsoid)
+%EQDAZIM_INV  Inverse azimuthal equidistant projection
+%
+%   [LAT, LON] = EQDAZIM_INV(LAT0, LON0, X, Y)
+%   [LAT, LON, AZI, RK] = EQDAZIM_INV(LAT0, LON0, X, Y, ELLIPSOID)
+%
+%   performs the inverse azimuthal equidistant projection of points (X,Y)
+%   to (LAT,LON) using (LAT0,LON0) as the center of projection.  These
+%   input arguments can be scalars or arrays of equal size.  The ELLIPSOID
+%   vector is of the form [a, e], where a is the equatorial radius in
+%   meters, e is the eccentricity.  If ellipsoid is omitted, the WGS84
+%   ellipsoid (more precisely, the value returned by DEFAULTELLIPSOID) is
+%   used.  GEODPROJ defines the projection and gives the restrictions on
+%   the allowed ranges of the arguments.  The forward projection is given
+%   by EQDAZIM_FWD.
+%
+%   AZI and RK give metric properties of the projection at (LAT,LON); AZI
+%   is the azimuth of the geodesic from the center of projection and RK is
+%   the reciprocal of the azimuthal scale.  The scale in the radial
+%   direction is 1.
+%
+%   LAT0, LON0, LAT, LON, AZI are in degrees.  The projected coordinates X,
+%   Y are in meters (more precisely the units used for the equatorial
+%   radius).  RK is dimensionless.
+%
+%   Section 14 of
+%
+%     C. F. F. Karney, Geodesics on an ellipsoid of revolution (2011),
+%     http://arxiv.org/abs/1102.1215
+%     Errata: http://geographiclib.sf.net/geod-addenda.html#geod-errata
+%
+%   describes how to use this projection in the determination of maritime
+%   boundaries (finding the median line).
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, EQDAZIM_FWD, GEODRECKON, DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  if nargin < 5, ellipsoid = defaultellipsoid; end
+  try
+    [~] = lat0 + lon0 + x + y;
+  catch err
+    error('lat0, lon0, x, y have incompatible sizes')
+  end
+
+  azi0 = atan2(x, y) / (pi/180);
+  s = hypot(x, y);
+  [lat, lon, azi, ~, m, ~, ~, sig] = geodreckon(lat0, lon0, s, azi0, ellipsoid);
+  rk = m ./ s;
+  rk(sig <= 0.01 * sqrt(realmin)) = 1;
+end
diff --git a/matlab/flat2ecc.m b/matlab/flat2ecc.m
new file mode 100644
index 0000000..801a7e0
--- /dev/null
+++ b/matlab/flat2ecc.m
@@ -0,0 +1,9 @@
+function e = flat2ecc(f)
+%FLAT2ECC   Convert the flattening of an ellipsoid to its eccentricity
+%
+%  E = FLAT2ECC(F) returns the eccentricity given the flattening.
+%
+%   See also ECC2FLAT.
+
+  e = sqrt(f .* (2 - f));
+end
diff --git a/matlab/geocentricforward.cpp b/matlab/geocentricforward.cpp
index 1ace110..8baf909 100644
--- a/matlab/geocentricforward.cpp
+++ b/matlab/geocentricforward.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic geocentricforward.cpp
 
-// $Id: 4b6a1a65868ee6d55166cbedd0206140b4eb06a5 $
-
 #include <algorithm>
 #include <GeographicLib/Geocentric.hpp>
 #include <mex.h>
@@ -54,7 +52,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     f = mxGetScalar(prhs[2]);
   }
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   double* lat = mxGetPr(prhs[0]);
   double* lon = lat + m;
@@ -78,11 +76,11 @@ void mexFunction( int nlhs, mxArray* plhs[],
   try {
     std::vector<double> rotv(rotp ? 9 : 0);
     const Geocentric c(a, f);
-    for (int i = 0; i < m; ++i) {
-      if (!(abs(lat[i]) > 90) && !(lon[i] < -180 || lon[i] > 360)) {
+    for (mwIndex i = 0; i < m; ++i) {
+      if (abs(lat[i]) <= 90 && lon[i] >= -540 && lon[i] < 540) {
         c.Forward(lat[i], lon[i], haveh ? h[i] : 0.0, x[i], y[i], z[i], rotv);
         if (rotp) {
-          for (int k = 0; k < 9; ++k)
+          for (mwIndex k = 0; k < 9; ++k)
             rot[m * k + i] = rotv[k];
         }
       }
diff --git a/matlab/geocentricforward.m b/matlab/geocentricforward.m
index 97badc1..b721db1 100644
--- a/matlab/geocentricforward.m
+++ b/matlab/geocentricforward.m
@@ -1,4 +1,4 @@
-function [geocentric, rot] = geocentricforward(geodetic, a, f)
+function geocentricforward(~, ~, ~)
 %geocentricforward  Convert geographic coordinates to geocentric
 %
 %   [geocentric, rot] = geocentricforward(geodetic)
@@ -31,8 +31,6 @@ end
 % geocentricforward.m
 % Matlab .m file for geographic to geocentric conversions
 %
-% Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
-% the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
+% under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: 387cbf93121f049b4c2398c520072c86d6767fe7 $
diff --git a/matlab/geocentricreverse.cpp b/matlab/geocentricreverse.cpp
index 87b38af..a8f21a7 100644
--- a/matlab/geocentricreverse.cpp
+++ b/matlab/geocentricreverse.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic geocentricreverse.cpp
 
-// $Id: 9ae273ec91d65570bc2839b153f047ecfcf8c91f $
-
 #include <GeographicLib/Geocentric.hpp>
 #include <mex.h>
 
@@ -53,7 +51,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     f = mxGetScalar(prhs[2]);
   }
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   double* x = mxGetPr(prhs[0]);
   double* y = x + m;
@@ -74,10 +72,10 @@ void mexFunction( int nlhs, mxArray* plhs[],
   try {
     std::vector<double> rotv(rotp ? 9 : 0);
     const Geocentric c(a, f);
-    for (int i = 0; i < m; ++i) {
+    for (mwIndex i = 0; i < m; ++i) {
       c.Reverse(x[i], y[i], z[i], lat[i], lon[i], h[i], rotv);
       if (rotp) {
-          for (int k = 0; k < 9; ++k)
+          for (mwIndex k = 0; k < 9; ++k)
             rot[m * k + i] = rotv[k];
       }
     }
diff --git a/matlab/geocentricreverse.m b/matlab/geocentricreverse.m
index c9844ac..91a2990 100644
--- a/matlab/geocentricreverse.m
+++ b/matlab/geocentricreverse.m
@@ -1,4 +1,4 @@
-function [geodetic, rot] = geocentricreverse(geocentric, a, f)
+function geocentricreverse(~, ~, ~)
 %geocentricreverse  Convert geocentric coordinates to geographic
 %
 %   [geodetic, rot] = geocentricreverse(geocentric)
@@ -32,8 +32,6 @@ end
 % geocentricreverse.m
 % Matlab .m file for geocentric to geographic conversions
 %
-% Copyright (c) Charles Karney (2011) <charles at karney.com> and
-% licensed under the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
+% under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: f43cd7eb9b7d5d48f4de6b30d2d7c9c5b0742583 $
diff --git a/matlab/geodarea.m b/matlab/geodarea.m
new file mode 100644
index 0000000..1eea2dd
--- /dev/null
+++ b/matlab/geodarea.m
@@ -0,0 +1,129 @@
+function [A, P, N] = geodarea(lats, lons, ellipsoid)
+%GEODAREA  Surface area of polygon on an ellipsoid
+%
+%   A = GEODAREA(lats, lons)
+%   [A, P, N] = GEODAREA(lats, lons, ellipsoid)
+%
+%   calculates the surface area A of the geodesic polygon specified by the
+%   input vectors lats, lons (in degrees).  The ellipsoid vector is of the
+%   form [a, e], where a is the equatorial radius in meters, e is the
+%   eccentricity.  If ellipsoid is omitted, the WGS84 ellipsoid (more
+%   precisely, the value returned by DEFAULTELLIPSOID) is used.  There is
+%   no need to "close" the polygon by repeating the first point.  Multiple
+%   polygons can be specified by separating the vertices by NaNs in the
+%   vectors.  Thus a series of quadrilaterals can be specified as two 5 x K
+%   arrays where the 5th row is NaN.  The output, A, is in meters^2.
+%   Counter-clockwise traversal counts as a positive area.  Only simple
+%   polygons (which do not intersect themselves) are supported.  Also
+%   returned are the perimeters of the polygons in P (meters) and the
+%   numbers of vertices in N.  GEODDOC gives the restrictions on the
+%   allowed ranges of the arguments.
+%
+%   GEODAREA loosely duplicates the functionality of the AREAINT function
+%   in the MATLAB mapping toolbox.  The major difference is that the
+%   polygon edges are taken to be geodesics and the area contributed by
+%   each edge is computed using a series expansion with is accurate
+%   regardless of the length of the edge.  The formulas are derived in
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
+%   See also GEODDOC, GEODDISTANCE, GEODRECKON, POLYGONAREA,
+%     DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012-2013) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.31.
+
+  if nargin < 2, error('Too few input arguments'), end
+  if nargin < 3, ellipsoid = defaultellipsoid; end
+  if ~isequal(size(lats), size(lons))
+    error('lats, lons have incompatible sizes')
+  end
+  if length(ellipsoid(:)) ~= 2
+    error('ellipsoid must be a vector of size 2')
+  end
+
+  lat1 = lats(:);
+  lon1 = lons(:);
+  M = length(lat1);
+  ind = [0; find(isnan(lat1 + lon1))];
+  if length(ind) == 1 || ind(end) ~= M
+    ind = [ind; M + 1];
+  end
+  K = length(ind) - 1;
+  A = zeros(K, 1); P = A; N = A;
+  if M == 0, return, end
+
+  lat2 = [lat1(2:end, 1); 0];
+  lon2 = [lon1(2:end, 1); 0];
+  m0 = min(M, ind(1:end-1) + 1);
+  m1 = max(1, ind(2:end) - 1);
+  lat2(m1) = lat1(m0); lon2(m1) = lon1(m0);
+
+  a = ellipsoid(1);
+  e2 = ellipsoid(2)^2;
+  f = e2 / (1 + sqrt(1 - e2));
+
+  b = (1 - f) * a;
+  c2 = (a^2 + b^2 * atanhee(1, e2)) / 2;
+  area0 = 4 * pi * c2;
+
+  [s12, ~, ~, S12] = geoddistance(lat1, lon1, lat2, lon2, ellipsoid);
+  cross = transit(lon1, lon2);
+
+  for k = 1 : K
+    N(k) = m1(k) - m0(k) + 1;
+    P(k) = accumulator(s12(m0(k):m1(k)));
+    [As, At] = accumulator(S12(m0(k):m1(k)));
+    crossings = sum(cross(m0(k):m1(k)));
+    if mod(crossings, 2) ~= 0,
+      [As, At] = accumulator( ((As < 0) * 2 - 1) * area0 / 2, As, At);
+    end
+    As = -As; At = -At;
+    if As > area0/2
+      As = accumulator( -area0 / 2, As, At);
+    elseif As <= -area0/2
+      As = accumulator(  area0 / 2, As, At);
+    end
+    A(k) = As;
+  end
+end
+
+function cross = transit(lon1, lon2)
+%TRANSIT  Count crossings of prime meridian
+%
+%   CROSS = TRANSIT(LON1, LON2) return 1 or -1 if crossing prime meridian
+%   in east or west direction.  Otherwise return zero.
+
+  lon1 = AngNormalize(lon1);
+  lon2 = AngNormalize(lon2);
+  lon12 = AngDiff(lon1, lon2);
+  cross = zeros(length(lon1), 1);
+  cross(lon1 < 0 & lon2 >= 0 & lon12 > 0) = 1;
+  cross(lon2 < 0 & lon1 >= 0 & lon12 < 0) = -1;
+
+end
+
+function [s, t] = accumulator(x, s, t)
+%ACCUMULATOR  Accurately sum x
+%
+%   [S, T] = ACCUMULATOR(X, S, T) accumulate the sum of the elements of X
+%   into [S, T] using extended precision.  S and T are scalars.
+
+  if nargin < 3, t = 0; end
+  if nargin < 2, s = 0; end
+
+  for y = x(:)',
+    % Here's Shewchuk's solution...
+    [z, u] = sumx(y, t);
+    [s, t] = sumx(z, s);
+    if s == 0
+      s = u;
+    else
+      t = t + u;
+    end
+  end
+end
diff --git a/matlab/geoddistance.m b/matlab/geoddistance.m
new file mode 100644
index 0000000..f30132f
--- /dev/null
+++ b/matlab/geoddistance.m
@@ -0,0 +1,515 @@
+function [s12, azi1, azi2, S12, m12, M12, M21, a12] = geoddistance ...
+      (lat1, lon1, lat2, lon2, ellipsoid)
+%GEODDISTANCE  Distance between points on an ellipsoid
+%
+%   [s12, azi1, azi2] = GEODDISTANCE(lat1, lon1, lat2, lon2)
+%   [s12, azi1, azi2, S12, m12, M12, M21, a12] =
+%      GEODDISTANCE(lat1, lon1, lat2, lon2, ellipsoid)
+%
+%   solves the inverse geodesic problem of finding of length and azimuths
+%   of the shortest geodesic between points specified by lat1, lon1, lat2,
+%   lon2.  The input latitudes and longitudes, lat1, lon1, lat2, lon2, can
+%   be scalars or arrays of equal size and must be expressed in degrees.
+%   The ellipsoid vector is of the form [a, e], where a is the equatorial
+%   radius in meters, e is the eccentricity.  If ellipsoid is omitted, the
+%   WGS84 ellipsoid (more precisely, the value returned by
+%   DEFAULTELLIPSOID) is used.  The output s12 is the distance in meters
+%   and azi1 and azi2 are the forward azimuths at the end points in
+%   degrees.  The other optional outputs, S12, m12, M12, M21, a12 are
+%   documented in GEODDOC.  GEODDOC also gives the restrictions on the
+%   allowed ranges of the arguments.
+%
+%   When given a combination of scalar and array inputs, the scalar inputs
+%   are automatically expanded to match the size of the arrays.
+%
+%   This is an implementation of the algorithm given in
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
+%   This function duplicates some of the functionality of the DISTANCE
+%   function in the MATLAB mapping toolbox.  Differences are
+%
+%     * When the ellipsoid argument is omitted, use the WGS84 ellipsoid.
+%     * The routines work for prolate (as well as oblate) ellipsoids.
+%     * The azimuth at the second end point azi2 is returned.
+%     * The solution is accurate to round off for abs(e) < 0.2.
+%     * The algorithm converges for all pairs of input points.
+%     * Additional properties of the geodesic are calcuated.
+%
+%   See also GEODDOC, GEODRECKON, GEODAREA, GEODESICINVERSE,
+%     DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012, 2013) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.31.
+%
+% This is a straightforward transcription of the C++ implementation in
+% GeographicLib and the C++ source should be consulted for additional
+% documentation.  This is a vector implementation and the results returned
+% with array arguments are identical to those obtained with multiple calls
+% with scalar arguments.  The biggest change was to eliminate the branching
+% to allow a vectorized solution.
+
+  if nargin < 4, error('Too few input arguments'), end
+  if nargin < 5, ellipsoid = defaultellipsoid; end
+  try
+    Z = lat1 + lon1 + lat2 + lon2;
+    S = size(Z);
+    Z = zeros(S);
+    lat1 = lat1 + Z; lon1 = lon1 + Z;
+    lat2 = lat2 + Z; lon2 = lon2 + Z;
+    Z = Z(:);
+  catch err
+    error('lat1, lon1, s12, azi1 have incompatible sizes')
+  end
+  if length(ellipsoid(:)) ~= 2
+    error('ellipsoid must be a vector of size 2')
+  end
+
+  degree = pi/180;
+  tiny = sqrt(realmin);
+  tol0 = eps;
+  tolb = eps * sqrt(eps);
+  maxit1 = 20;
+  maxit2 = maxit1 + (-log2(eps) + 1) + 10;
+
+  a = ellipsoid(1);
+  e2 = ellipsoid(2)^2;
+  f = e2 / (1 + sqrt(1 - e2));
+
+  f1 = 1 - f;
+  ep2 = e2 / (1 - e2);
+  n = f / (2 - f);
+  b = a * f1;
+
+  areap = nargout >= 4;
+  scalp = nargout >= 6;
+
+  A3x = A3coeff(n);
+  C3x = C3coeff(n);
+
+  lon12 = AngDiff(AngNormalize(lon1(:)), AngNormalize(lon2(:)));
+  lon12 = AngRound(lon12);
+  lonsign = 2 * (lon12 >= 0) - 1;
+  lon12 = lonsign .* lon12;
+  lat1 = AngRound(lat1(:));
+  lat2 = AngRound(lat2(:));
+  swapp = 2 * (abs(lat1) >= abs(lat2)) - 1;
+  lonsign(swapp < 0) = - lonsign(swapp < 0);
+  [lat1(swapp < 0), lat2(swapp < 0)] = swap(lat1(swapp < 0), lat2(swapp < 0));
+
+  latsign = 2 * (lat1 < 0) - 1;
+  lat1 = latsign .* lat1;
+  lat2 = latsign .* lat2;
+
+  phi = lat1 * degree;
+  sbet1 = f1 * sin(phi); cbet1 = cos(phi); cbet1(lat1 == -90) = tiny;
+  [sbet1, cbet1] = SinCosNorm(sbet1, cbet1);
+
+  phi = lat2 * degree;
+  sbet2 = f1 * sin(phi); cbet2 = cos(phi); cbet2(abs(lat2) == 90) = tiny;
+  [sbet2, cbet2] = SinCosNorm(sbet2, cbet2);
+
+  c = cbet1 < -sbet1 & cbet2 == cbet1;
+  sbet2(c) = (2 * (sbet2(c) < 0) - 1) .* sbet1(c);
+  c = ~(cbet1 < -sbet1) & abs(sbet2) == - sbet1;
+  cbet2(c) = cbet1(c);
+
+  dn1 = sqrt(1 + ep2 * sbet1.^2);
+  dn2 = sqrt(1 + ep2 * sbet2.^2);
+  lam12 = lon12 * degree;
+  slam12 = sin(lam12); slam12(lon12 == 180) = 0; clam12 = cos(lam12);
+
+  sig12 = Z; ssig1 = Z; csig1 = Z; ssig2 = Z; csig2 = Z;
+  calp1 = Z; salp1 = Z; calp2 = Z; salp2 = Z;
+  s12 = Z; m12 = Z; M12 = Z; M21 = Z; omg12 = Z;
+
+  m = lat1 == -90 | slam12 == 0;
+
+  if any(m)
+    calp1(m) = clam12(m); salp1(m) = slam12(m);
+    calp2(m) = 1; salp2(m) = 0;
+
+    ssig1(m) = sbet1(m); csig1(m) = calp1(m) .* cbet1(m);
+    ssig2(m) = sbet2(m); csig2(m) = calp2(m) .* cbet2(m);
+
+    sig12(m) = atan2(max(csig1(m) .* ssig2(m) - ssig1(m) .* csig2(m), 0), ...
+                     csig1(m) .* csig2(m) + ssig1(m) .* ssig2(m));
+
+    [s12(m), m12(m), ~, M12(m), M21(m)] = ...
+        Lengths(n, sig12(m), ...
+                ssig1(m), csig1(m), dn1(m), ssig2(m), csig2(m), dn2(m), ...
+                cbet1(m), cbet2(m), scalp, ep2);
+    m = m & (sig12 < 1 | m12 >= 0);
+    m12(m) = m12(m) * b;
+    s12(m) = s12(m) * b;
+  end
+
+  eq = ~m & sbet1 == 0;
+  if f > 0
+    eq = eq & lam12 < pi - f * pi;
+  end
+  calp1(eq) = 0; calp2(eq) = 0; salp1(eq) = 1; salp2(eq) = 1;
+  s12(eq) = a * lam12(eq); sig12(eq) = lam12(eq) / f1; omg12(eq) = sig12(eq);
+  m12(eq) = b * sin(omg12(eq)); M12(eq) = cos(omg12(eq)); M21(eq) = M12(eq);
+
+  g = ~eq & ~m;
+
+  dnm = Z;
+  [sig12(g), salp1(g), calp1(g), salp2(g), calp2(g), dnm(g)] = ...
+      InverseStart(sbet1(g), cbet1(g), dn1(g), sbet2(g), cbet2(g), dn2(g), ...
+                   lam12(g), f, A3x);
+
+  s = g & sig12 >= 0;
+  s12(s) = b * sig12(s) .* dnm(s);
+  m12(s) = b * dnm(s).^2 .* sin(sig12(s) ./ dnm(s));
+  if scalp
+    M12(s) = cos(sig12(s) ./ dnm(s)); M21(s) = M12(s);
+  end
+  omg12(s) = lam12(s) ./ (f1 * dnm(s));
+
+  g = g & sig12 < 0;
+
+  salp1a = Z + tiny; calp1a = Z + 1;
+  salp1b = Z + tiny; calp1b = Z - 1;
+  ssig1 = Z; csig1 = Z; ssig2 = Z; csig2 = Z;
+  epsi = Z; v = Z; dv = Z;
+  numit = Z;
+  tripn = Z > 0;
+  tripb = tripn;
+  gsave = g;
+  for k = 0 : maxit2 - 1
+    if k == 0 && ~any(g), break, end
+    numit(g) = k;
+    [v(g), dv(g), ...
+     salp2(g), calp2(g), sig12(g), ...
+     ssig1(g), csig1(g), ssig2(g), csig2(g), epsi(g), omg12(g)] = ...
+        Lambda12(sbet1(g), cbet1(g), dn1(g), ...
+                 sbet2(g), cbet2(g), dn2(g), ...
+                 salp1(g), calp1(g), f, A3x, C3x);
+    v = v - lam12;
+    g = g & ~(tripb | ~(abs(v) >= ((tripn * 6) + 2) * tol0));
+    if ~any(g), break, end
+
+    c = g & v > 0;
+    if k <= maxit1
+      c = c & calp1 ./ salp1 > calp1b ./ salp1b;
+    end
+    salp1b(c) = salp1(c); calp1b(c) = calp1(c);
+
+    c = g & v < 0;
+    if k <= maxit1
+      c = c & calp1 ./ salp1 < calp1a ./ salp1a;
+    end
+    salp1a(c) = salp1(c); calp1a(c) = calp1(c);
+
+    if k == maxit1, tripn(g) = false; end
+    if k < maxit1
+      dalp1 = -v ./ dv;
+      sdalp1 = sin(dalp1); cdalp1 = cos(dalp1);
+      nsalp1 = salp1 .* cdalp1 + calp1 .* sdalp1;
+      calp1(g) = calp1(g) .* cdalp1(g) - salp1(g) .* sdalp1(g);
+      salp1(g) = nsalp1(g);
+      tripn = g & abs(v) <= 16 * tol0;
+      c = g & ~(dv > 0 & nsalp1 > 0 & abs(dalp1) < pi);
+      tripn(c) = false;
+    else
+      c = g;
+    end
+
+    salp1(c) = (salp1a(c) + salp1b(c))/2;
+    calp1(c) = (calp1a(c) + calp1b(c))/2;
+    [salp1(g), calp1(g)] = SinCosNorm(salp1(g), calp1(g));
+    tripb(c) = (abs(salp1a(c) - salp1(c)) + (calp1a(c) - calp1(c)) < tolb | ...
+                abs(salp1(c) - salp1b(c)) + (calp1(c) - calp1b(c)) < tolb);
+  end
+
+  g = gsave;
+  [s12(g), m12(g), ~, M12(g), M21(g)] = ...
+      Lengths(epsi(g), sig12(g), ...
+              ssig1(g), csig1(g), dn1(g), ssig2(g), csig2(g), dn2(g), ...
+              cbet1(g), cbet2(g), scalp, ep2);
+
+  m12(g) = m12(g) * b;
+  s12(g) = s12(g) * b;
+  omg12(g) = lam12(g) - omg12(g);
+
+  s12 = 0 + s12;
+
+  if areap
+    salp0 = salp1 .* cbet1; calp0 = hypot(calp1, salp1 .* sbet1);
+    ssig1 = sbet1; csig1 = calp1 .* cbet1;
+    ssig2 = sbet2; csig2 = calp2 .* cbet2;
+    k2 = calp0.^2 * ep2;
+    epsi = k2 ./ (2 * (1 + sqrt(1 + k2)) + k2);
+    A4 = (a^2 * e2) * calp0 .* salp0;
+    [ssig1, csig1] = SinCosNorm(ssig1, csig1);
+    [ssig2, csig2] = SinCosNorm(ssig2, csig2);
+
+    C4x = C4coeff(n);
+    C4a = C4f(epsi, C4x);
+    B41 = SinCosSeries(false, ssig1, csig1, C4a);
+    B42 = SinCosSeries(false, ssig2, csig2, C4a);
+    S12 = A4 .* (B42 - B41);
+    S12(calp0 == 0 | salp0 == 0) = 0;
+
+    l = ~m & omg12 < 0.75 * pi & sbet2 - sbet1 < 1.75;
+    alp12 = Z;
+    somg12 = sin(omg12(l)); domg12 = 1 + cos(omg12(l));
+    dbet1 = 1 + cbet1(l); dbet2 = 1 + cbet2(l);
+    alp12(l) = 2 * atan2(somg12 .* (sbet1(l) .* dbet2 + sbet2(l) .* dbet1), ...
+                         domg12 .* (sbet1(l) .* sbet2(l) + dbet1 .* dbet2));
+    l = ~l;
+    salp12 = salp2(l) .* calp1(l) - calp2(l) .* salp1(l);
+    calp12 = calp2(l) .* calp1(l) + salp2(l) .* salp1(l);
+    s = salp12 == 0 & calp12 < 0;
+    salp12(s) = tiny * calp1(s); calp12(s) = -1;
+    alp12(l) = atan2(salp12, calp12);
+    c2 = (a^2 + b^2 * atanhee(1, e2)) / 2;
+    S12 = 0 + swapp .* lonsign .* latsign .* (S12 + c2 * alp12);
+  end
+
+  [salp1(swapp<0), salp2(swapp<0)] = swap(salp1(swapp<0), salp2(swapp<0));
+  [calp1(swapp<0), calp2(swapp<0)] = swap(calp1(swapp<0), calp2(swapp<0));
+  if scalp
+    [M12(swapp<0), M21(swapp<0)] = swap(M12(swapp<0), M21(swapp<0));
+  end
+  salp1 = salp1 .* swapp .* lonsign; calp1 = calp1 .* swapp .* latsign;
+  salp2 = salp2 .* swapp .* lonsign; calp2 = calp2 .* swapp .* latsign;
+
+  azi1 = 0 - atan2(-salp1, calp1) / degree;
+  azi2 = 0 - atan2(-salp2, calp2) / degree;
+  a12 = sig12 / degree;
+
+  s12 = reshape(s12, S); azi1 = reshape(azi1, S); azi2 = reshape(azi2, S);
+  m12 = reshape(m12, S); M12 = reshape(M12, S); M21 = reshape(M21, S);
+  a12 = reshape(a12, S);
+  if (areap)
+    S12 = reshape(S12, S);
+  end
+end
+
+function [sig12, salp1, calp1, salp2, calp2, dnm] = ...
+      InverseStart(sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12, f, A3x)
+%INVERSESTART  Compute a starting point for Newton's method
+
+  N = length(sbet1);
+  f1 = 1 - f;
+  e2 = f * (2 - f);
+  ep2 = e2 / (1 - e2);
+  n = f / (2 - f);
+  tol0 = eps;
+  tol1 = 200 * tol0;
+  tol2 = sqrt(eps);
+  etol2 = 0.1 * tol2 / sqrt( max(0.001, abs(f)) * min(1, 1 - f/2) / 2 );
+  xthresh = 1000 * tol2;
+
+  sig12 = -ones(N, 1); salp2 = NaN(N, 1); calp2 = NaN(N, 1);
+  sbet12 = sbet2 .* cbet1 - cbet2 .* sbet1;
+  cbet12 = cbet2 .* cbet1 + sbet2 .* sbet1;
+  sbet12a = sbet2 .* cbet1 + cbet2 .* sbet1;
+  s = cbet12 >= 0 & sbet12 < 0.5 & cbet2 .* lam12 < 0.5;
+  omg12 = lam12;
+  dnm = NaN(N, 1);
+  sbetm2 = (sbet1(s) + sbet2(s)).^2;
+  sbetm2 = sbetm2 ./ (sbetm2 + (cbet1(s) + cbet2(s)).^2);
+  dnm(s) = sqrt(1 + ep2 * sbetm2);
+  omg12(s) = omg12(s) ./ (f1 * dnm(s));
+  somg12 = sin(omg12); comg12 = cos(omg12);
+
+  salp1 = cbet2 .* somg12;
+  t = cbet2 .* sbet1 .* somg12.^2;
+  calp1 = cvmgt(sbet12  + t ./ (1 + comg12), ...
+                sbet12a - t ./ (1 - comg12), ...
+                comg12 >= 0);
+
+  ssig12 = hypot(salp1, calp1);
+  csig12 = sbet1 .* sbet2 + cbet1 .* cbet2 .* comg12;
+
+  s = s & ssig12 < etol2;
+  salp2(s) = cbet1(s) .* somg12(s);
+  calp2(s) = somg12(s).^2 ./ (1 + comg12(s));
+  calp2(s & comg12 < 0) = 1 - comg12(s & comg12 < 0);
+  calp2(s) = sbet12(s) - cbet1(s) .* sbet2(s) .* calp2(s);
+  [salp2, calp2] = SinCosNorm(salp2, calp2);
+  sig12(s) = atan2(ssig12(s), csig12(s));
+
+  s = ~(s | abs(n) > 0.1 | csig12 >= 0 | ssig12 >= 6 * abs(n) * pi * cbet1.^2);
+
+  if any(s)
+    if f >= 0
+      k2 = sbet1(s).^2 * ep2;
+      epsi = k2 ./ (2 * (1 + sqrt(1 + k2)) + k2);
+      lamscale = f * cbet1(s) .* A3f(epsi, A3x) * pi;
+      betscale = lamscale .* cbet1(s);
+      x = (lam12(s) - pi) ./ lamscale;
+      y = sbet12a(s) ./ betscale;
+    else
+      cbet12a = cbet2(s) .* cbet1(s) - sbet2(s) .* sbet1(s);
+      bet12a = atan2(sbet12a(s), cbet12a);
+      [~, m12b, m0] = ...
+          Lengths(n, pi + bet12a, ...
+                  sbet1(s), -cbet1(s), dn1(s), sbet2(s), cbet2(s), dn2(s), ...
+                  cbet1(s), cbet2(s), false);
+      x = -1 + m12b ./ (cbet1(s) .* cbet2(s) .* m0 * pi);
+      betscale = cvmgt(sbet12a(s) ./ x, - f * cbet1(s).^2 * pi, x < -0.01);
+      lamscale = betscale ./ cbet1(s);
+      y = (lam12(s) - pi) ./ lamscale;
+    end
+    k = Astroid(x, y);
+    if f >= 0
+      omg12a = -x .* k ./ (1 + k);
+    else
+      omg12a = -y .* (1 + k) ./ k;
+    end
+    omg12a = lamscale .* omg12a;
+    somg12 = sin(omg12a); comg12 = -cos(omg12a);
+    salp1(s) = cbet2(s) .* somg12;
+    calp1(s) = sbet12a(s) - cbet2(s) .* sbet1(s) .* somg12.^2 ./ (1 - comg12);
+
+    str = y > -tol1 & x > -1 - xthresh;
+    if any(str)
+      salp1s = salp1(s); calp1s = calp1(s);
+      if f >= 0
+        salp1s(str) = min(1, -x(str));
+        calp1s(str) = -sqrt(1 - salp1s(str).^2);
+      else
+        calp1s(str) = max(cvmgt(0, -1, x(str) > -tol1), x(str));
+        salp1s(str) = sqrt(1 - calp1s(str).^2);
+      end
+      salp1(s) = salp1s; calp1(s) = calp1s;
+    end
+  end
+
+  calp1(salp1 <= 0) = 0; salp1(salp1 <= 0) = 1;
+  [salp1, calp1] = SinCosNorm(salp1, calp1);
+end
+
+function k = Astroid(x, y)
+% ASTROID  Solve the astroid equation
+%
+%   K = ASTROID(X, Y) solves the quartic polynomial Eq. (55)
+%
+%     K^4 + 2 * K^3 - (X^2 + Y^2 - 1) * K^2 - 2*Y^2 * K - Y^2 = 0
+%
+%   for the positive root K.  X and Y are column vectors of the same size
+%   and the returned value K has the same size.
+
+  k = zeros(length(x), 1);
+  p = x.^2;
+  q = y.^2;
+  r = (p + q - 1) / 6;
+  fl1 = ~(q == 0 & r <= 0);
+  p = p(fl1);
+  q = q(fl1);
+  r = r(fl1);
+  S = p .* q / 4;
+  r2 = r.^2;
+  r3 = r .* r2;
+  disc = S .* (S + 2 * r3);
+  u = r;
+  fl2 = disc >= 0;
+  T3 = S(fl2) + r3(fl2);
+  T3 = T3 + (1 - 2 * (T3 < 0)) .* sqrt(disc(fl2));
+  T = cbrt(T3);
+  u(fl2) = u(fl2) + T + cvmgt(r2(fl2) ./ T, 0, T ~= 0);
+  ang = atan2(sqrt(-disc(~fl2)), -(S(~fl2) + r3(~fl2)));
+  u(~fl2) = u(~fl2) + 2 * r(~fl2) .* cos(ang / 3);
+  v = sqrt(u.^2 + q);
+  uv = u + v;
+  fl2 = u < 0;
+  uv(fl2) = q(fl2) ./ (v(fl2) - u(fl2));
+  w = (uv - q) ./ (2 * v);
+  k(fl1) = uv ./ (sqrt(uv + w.^2) + w);
+end
+
+function [lam12, dlam12, ...
+          salp2, calp2, sig12, ssig1, csig1, ssig2, csig2, epsi, domg12] = ...
+    Lambda12(sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1, f, A3x, C3x)
+%LAMBDA12  Solve the hybrid problem
+
+  tiny = sqrt(realmin);
+  f1 = 1 - f;
+  e2 = f * (2 - f);
+  ep2 = e2 / (1 - e2);
+
+  calp1(sbet1 == 0 & calp1 == 0) = -tiny;
+
+  salp0 = salp1 .* cbet1;
+  calp0 = hypot(calp1, salp1 .* sbet1);
+
+  ssig1 = sbet1; somg1 = salp0 .* sbet1;
+  csig1 = calp1 .* cbet1; comg1 = csig1;
+  [ssig1, csig1] = SinCosNorm(ssig1, csig1);
+
+  salp2 = cvmgt(salp0 ./ cbet2, salp1, cbet2 ~= cbet1);
+  calp2 = cvmgt(sqrt((calp1 .* cbet1).^2 + ...
+                     cvmgt((cbet2 - cbet1) .* (cbet1 + cbet2), ...
+                           (sbet1 - sbet2) .* (sbet1 + sbet2), ...
+                           cbet1 < -sbet1)) ./ cbet2, ...
+                abs(calp1), cbet2 ~= cbet1 | abs(sbet2) ~= -sbet1);
+  ssig2 = sbet2; somg2 = salp0 .* sbet2;
+  csig2 = calp2 .* cbet2;  comg2 = csig2;
+  [ssig2, csig2] = SinCosNorm(ssig2, csig2);
+
+  sig12 = atan2(max(csig1 .* ssig2 - ssig1 .* csig2, 0), ...
+                csig1 .* csig2 + ssig1 .* ssig2);
+
+  omg12 = atan2(max(comg1 .* somg2 - somg1 .* comg2, 0), ...
+                comg1 .* comg2 + somg1 .* somg2);
+  k2 = calp0.^2 * ep2;
+  epsi = k2 ./ (2 * (1 + sqrt(1 + k2)) + k2);
+  C3a = C3f(epsi, C3x);
+  B312 = SinCosSeries(true, ssig2, csig2, C3a) - ...
+         SinCosSeries(true, ssig1, csig1, C3a);
+  h0 = -f * A3f(epsi, A3x);
+  domg12 = salp0 .* h0 .* (sig12 + B312);
+  lam12 = omg12 + domg12;
+
+  [~, dlam12] = ...
+      Lengths(epsi, sig12, ...
+              ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, false);
+  dlam12 = dlam12 .* f1 ./ (calp2 .* cbet2);
+  z = calp2 == 0;
+  dlam12(z) = - 2 * f1 .* dn1(z) ./ sbet1(z);
+end
+
+function [s12b, m12b, m0, M12, M21] = ...
+      Lengths(epsi, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, ...
+              cbet1, cbet2, scalp, ep2)
+%LENGTHS  Compute various lengths associate with a geodesic
+
+  if isempty(sig12)
+    s12b = [];
+    m12b = [];
+    m0 = [];
+    M12 = [];
+    M21 = [];
+    return
+  end
+
+  C1a = C1f(epsi);
+  C2a = C2f(epsi);
+  A1m1 = A1m1f(epsi);
+  AB1 = (1 + A1m1) .* (SinCosSeries(true, ssig2, csig2, C1a) - ...
+                       SinCosSeries(true, ssig1, csig1, C1a));
+  A2m1 = A2m1f(epsi);
+  AB2 = (1 + A2m1) .* (SinCosSeries(true, ssig2, csig2, C2a) - ...
+                       SinCosSeries(true, ssig1, csig1, C2a));
+  m0 = A1m1 - A2m1;
+  J12 = m0 .* sig12 + (AB1 - AB2);
+  m12b = dn2 .* (csig1 .* ssig2) - dn1 .* (ssig1 .* csig2) - ...
+         csig1 .* csig2 .* J12;
+  s12b = (1 + A1m1) .* sig12 + AB1;
+  if scalp
+    csig12 = csig1 .* csig2 + ssig1 .* ssig2;
+    t = ep2 * (cbet1 - cbet2) .* (cbet1 + cbet2) ./ (dn1 + dn2);
+    M12 = csig12 + (t .* ssig2 - csig2 .* J12) .* ssig1 ./ dn1;
+    M21 = csig12 - (t .* ssig1 - csig1 .* J12) .* ssig2 ./ dn2;
+  else
+    M12 = sig12 + NaN; M21 = M12;
+  end
+end
diff --git a/matlab/geoddoc.m b/matlab/geoddoc.m
new file mode 100644
index 0000000..27165b3
--- /dev/null
+++ b/matlab/geoddoc.m
@@ -0,0 +1,198 @@
+function geoddoc
+%GEODDOC  Geodesics on an ellipsoid of revolution
+%
+%   This package includes three routines GEODDISTANCE, GEODRECKON, and
+%   GEODAREA which solve various problems involving geodesics on the
+%   surface of an ellipsoid of revolution.  These are based on the paper
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
+%   which, in turn, is based on the classic solution of the geodesic
+%   problems pioneered by Legendre (1806), Bessel (1825), and Helmert
+%   (1880).  Links for these and other original papers on geodesics are
+%   given in
+%
+%     http://geographiclib.sf.net/geodesic-papers/biblio.html
+%
+%   The shortest path between two points on the ellipsoid at (lat1, lon1)
+%   and (lat2, lon2) is called the geodesic.  Its length is s12 and the
+%   geodesic from point 1 to point 2 has forward azimuths azi1 and azi2 at
+%   the two end points.
+%
+%   Traditionally two geodesic problems are considered:
+%     * the direct problem -- given lat1, lon1, s12, and azi1, determine
+%       lat2, lon2, and azi2.  This is solved by GEODRECKON.
+%     * the inverse problem -- given lat1, lon1, lat2, lon2, determine s12,
+%       azi1, and azi2.  This is solved by GEODDISTANCE.
+%   In addition, GEODAREA computes the area of an ellipsoidal polygon
+%   where the edges are defined as shortest geodesics.
+%
+%   The parameters of the ellipsoid are specified by the optional ELLIPSOID
+%   argument to the routines.  This is a two-element vector of the form
+%   [a,e], where a is the equatorial radius, e is the eccentricity e =
+%   sqrt(a^2-b^2)/a, and b is the polar semi-axis.  Typically, a and b are
+%   measured in meters and the linear and area quantities returned by the
+%   routines are then in meters and meters^2.  However, other units can be
+%   employed.  If ELLIPSOID is omitted, then the WGS84 ellipsoid (more
+%   precisely, the value returned by DEFAULTELLIPSOID) is assumed [6378137,
+%   0.0818191908426215] corresponding to a = 6378137 meters and a
+%   flattening f = (a-b)/a = 1/298.257223563.  The flattening and
+%   eccentricity are related by
+%
+%       e = sqrt(f * (2 - f))
+%       f = e^2 / (1 + sqrt(1 - e^2))
+%
+%   (The functions ECC2FLAT and FLAT2ECC implement these conversions.)  For
+%   a sphere, set e = 0; for a prolate ellipsoid (b > a), specify e as a
+%   pure imaginary number.
+%
+%   All angles (latitude, longitude, azimuth) are measured in degrees with
+%   latitudes increasing northwards, longitudes increasing eastwards, and
+%   azimuths measured clockwise from north.  For a point at a pole, the
+%   azimuth is defined by keeping the longitude fixed, writing lat =
+%   +/-(90-eps), and taking the limit eps -> 0+.
+%
+%   The routines also calculate several other quantities of interest
+%     * S12 is the area between the geodesic from point 1 to point 2 and
+%       the equator; i.e., it is the area, measured counter-clockwise, of
+%       the quadrilateral with corners (lat1,lon1), (0,lon1), (0,lon2), and
+%       (lat2,lon2).  It is given in meters^2.
+%     * m12, the reduced length of the geodesic is defined such that if the
+%       initial azimuth is perturbed by dazi1 (radians) then the second
+%       point is displaced by m12 dazi1 in the direction perpendicular to
+%       the geodesic.  m12 is given in meters.  On a curved surface the
+%       reduced length obeys a symmetry relation, m12 + m21 = 0.  On a flat
+%       surface, we have m12 = s12.
+%     * M12 and M21 are geodesic scales.  If two geodesics are parallel at
+%       point 1 and separated by a small distance dt, then they are
+%       separated by a distance M12 dt at point 2.  M21 is defined
+%       similarly (with the geodesics being parallel to one another at
+%       point 2).  M12 and M21 are dimensionless quantities.  On a flat
+%       surface, we have M12 = M21 = 1.
+%     * a12 is the arc length on the auxiliary sphere.  This is a construct
+%       for converting the problem to one in spherical trigonometry.  a12
+%       is measured in degrees.  The spherical arc length from one equator
+%       crossing to the next is always 180 degrees.
+%
+%   If points 1, 2, and 3 lie on a single geodesic, then the following
+%   addition rules hold:
+%     * s13 = s12 + s23
+%     * a13 = a12 + a23
+%     * S13 = S12 + S23
+%     * m13 = m12*m23 + m23*m21
+%     * M13 = M12*M23 - (1 - M12*M21) * m23/m12
+%     * M31 = M32*M21 - (1 - M23*M32) * m12/m23
+%
+%   Restrictions on the inputs:
+%     * All latitudes must lie in [-90, 90].
+%     * All longitudes and azimuths must lie in [-540, 540).  On output,
+%       these quantities lie in [-180, 180).
+%     * The distance s12 is unrestricted.  This allows geodesics to wrap
+%       around the ellipsoid.  Such geodesics are no longer shortest paths.
+%       However they retain the property that they are the straightest
+%       curves on the surface.
+%     * Similarly, the spherical arc length, a12, is unrestricted.
+%     * The equatorial radius, a, must be positive.
+%     * The eccentricity, e, should be satisfy abs(e) < 0.2 in order to
+%       retain full accuracy (this corresponds to flattenings satisfying
+%       abs(f) <= 1/50, approximately).  This condition holds for most
+%       applications in geodesy.
+%
+%    Larger values of e can be used with a corresponding drop in accuracy.
+%    The following table gives the approximate maximum error in
+%    GEODDISTANCE and GEODRECKON (expressed as a distance) for an ellipsoid
+%    with the same major radius as the WGS84 ellipsoid and different values
+%    of the flattening.
+%
+%         |f|     error
+%         0.01    25 nm
+%         0.02    30 nm
+%         0.05    10 um
+%         0.1    1.5 mm
+%         0.2    300 mm
+%
+%   The shortest distance returned by GEODDISTANCE is (obviously) uniquely
+%   defined.  However, in a few special cases there are multiple azimuths
+%   which yield the same shortest distance.  Here is a catalog of those
+%   cases:
+%     * lat1 = -lat2 (with neither point at a pole).  If azi1 = azi2, the
+%       geodesic is unique.  Otherwise there are two geodesics and the
+%       second one is obtained by setting [azi1,azi2] = [azi2,azi1],
+%       [M12,M21] = [M21,M12], S12 = -S12.  (This occurs when the longitude
+%       difference is near +/-180 for oblate ellipsoids.)
+%     * lon2 = lon1 +/- 180 (with neither point at a pole).  If azi1 = 0 or
+%       +/-180, the geodesic is unique.  Otherwise there are two geodesics
+%       and the second one is obtained by setting [azi1,azi2] =
+%       [-azi1,-azi2], S12 = -S12.  (This occurs when lat2 is near -lat1
+%       for prolate ellipsoids.)
+%     * Points 1 and 2 at opposite poles.  There are infinitely many
+%       geodesics which can be generated by setting [azi1,azi2] =
+%       [azi1,azi2] + [d,-d], for arbitrary d.  (For spheres, this
+%       prescription applies when points 1 and 2 are antipodal.)
+%     * s12 = 0 (coincident points).  There are infinitely many geodesics
+%       which can be generated by setting [azi1,azi2] = [azi1,azi2] +
+%       [d,d], for arbitrary d.
+%
+%   In order to compute intermediate points on a geodesic, proceed as in
+%   the following example which plots the track from JFK Airport to
+%   Singapore Changi Airport.
+%
+%       lat1 = 40.64; lon1 = -73.78;
+%       lat2 =  1.36; lon2 = 103.99;
+%       [s12,  azi1] = geoddistance(lat1, lon1, lat2, lon2);
+%       [lats, lons] = geodreckon(lat1, lon1, s12 * [0:100]/100, azi1);
+%       plot(lons, lats);
+%
+%   These routines are transcriptions of the C++ classes, Geodesic,
+%   GeodesicLine, and PolygonArea, provided by GeographicLib which is
+%   available at
+%
+%     http://geographiclib.sf.net
+%
+%   An alternate MATLAB interface is provided by the wrapper functions,
+%   GEODESICDIRECT, GEODESICLINE, GEODESICINVERSE, and POLYGONAREA which
+%   are part of GeographicLib.  However these depend on being able to
+%   compile and link the interface code, which limits their usefulness.
+%   GEODDISTANCE, GEODRECKON, and GEODAREA are native implementations which
+%   will work on any MATLAB platform.  They are fully vectorized so that
+%   their speed is competitive with the compiled C++ code.  Implementations
+%   of these routines in Python and Javascript are also available; see
+%
+%     http://geographiclib.sf.net/html/other.html
+%
+%   The restriction on e above arises because the formulation is in terms
+%   of series expansions in e^2.  The exact solutions (valid for any e) can
+%   be expressed in terms of elliptic integrals.  These are provided by the
+%   C++ classes GeodesicExact and GeodesicLineExact.
+%
+%   The routines duplicate some of the functionality of the DISTANCE,
+%   RECKON, and AREAINT functions in the MATLAB mapping toolbox.  The major
+%   improvements offered by GEODDISTANCE, GEODRECKON, and GEODAREA are
+%
+%     * The routines are accurate to round off for abs(e) < 0.2.  For
+%       example, for the WGS84 ellipsoid, the error in the distance
+%       returned by GEODDISTANCE is less then 15 nanometers.
+%     * The routines work for prolate (as well as oblate) ellipsoids.
+%     * GEODDISTANCE converges for all inputs.
+%     * Differential and integral properties of the geodesics are computed.
+%     * GEODAREA is accurate regardless of the length of the edges of the
+%       polygon.
+%
+%   This package is used by the MATLAB File Exchange package "Geodesic
+%   projections for an ellipsoid":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39366
+%
+%   See also GEODDISTANCE, GEODRECKON, GEODAREA,
+%     DEFAULTELLIPSOID, ECC2FLAT, FLAT2ECC,
+%     GEODESICDIRECT, GEODESICLINE, GEODESICINVERSE, POLYGONAREA.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.31.
+
+  help geoddoc
+end
diff --git a/matlab/geodesicdirect.cpp b/matlab/geodesicdirect.cpp
index 57cf9cd..770feec 100644
--- a/matlab/geodesicdirect.cpp
+++ b/matlab/geodesicdirect.cpp
@@ -2,7 +2,7 @@
  * \file geodesicdirect.cpp
  * \brief Matlab mex file for geographic to UTM/UPS conversions
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic geodesicdirect.cpp
 
-// $Id: 8865cbe511d3dd56c0eed73e62ec32d5b5d35f99 $
-
 #include <algorithm>
 #include <GeographicLib/Geodesic.hpp>
 #include <mex.h>
@@ -54,7 +52,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     f = mxGetScalar(prhs[2]);
   }
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   double* lat1 = mxGetPr(prhs[0]);
   double* lon1 = lat1 + m;
@@ -85,10 +83,10 @@ void mexFunction( int nlhs, mxArray* plhs[],
 
   try {
     const Geodesic g(a, f);
-    for (int i = 0; i < m; ++i) {
-      if (!(abs(lat1[i]) > 90) &&
-          !(lon1[i] < -180 || lon1[i] > 360) &&
-          !(azi1[i] < -180 || azi1[i] > 360)) {
+    for (mwIndex i = 0; i < m; ++i) {
+      if (abs(lat1[i]) <= 90 &&
+          lon1[i] >= -540 && lon1[i] < 540 &&
+          azi1[i] >= -540 && azi1[i] < 540) {
         if (aux)
           a12[i] = g.Direct(lat1[i], lon1[i], azi1[i], s12[i],
                             lat2[i], lon2[i], azi2[i], m12[i],
diff --git a/matlab/geodesicdirect.m b/matlab/geodesicdirect.m
index 85d01aa..4e55756 100644
--- a/matlab/geodesicdirect.m
+++ b/matlab/geodesicdirect.m
@@ -1,4 +1,4 @@
-function [latlong, aux] = geodesicdirect(geodesic, a, f)
+function geodesicdirect(~, ~, ~)
 %geodesicdirect  Solve direct geodesic problem
 %
 %   [latlong, aux] = geodesicdirect(geodesic)
@@ -25,17 +25,27 @@ function [latlong, aux] = geodesicdirect(geodesic, a, f)
 %   f = flattening (0 means a sphere)
 %   If a and f are omitted, the WGS84 values are used.
 %
+% The algorithm used in this function is given in
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
 % This is an interface to the GeographicLib C++ routine
 %     Geodesic::Direct
 % See the documentation on this function for more information:
 % http://geographiclib.sf.net/html/classGeographicLib_1_1Geodesic.html
+%
+% A native MATLAB implementation is available as GEODRECKON.
+%
+% See also GEODRECKON.
+
   error('Error: executing .m file instead of compiled routine');
 end
 % geodesicdirect.m
 % Matlab .m file for solving direct geodesic problem
 %
-% Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and
-% licensed under the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
+% under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: edeee2fe9d9c273cfa9d7512139223f70c464cc1 $
diff --git a/matlab/geodesicinverse.cpp b/matlab/geodesicinverse.cpp
index ae001b1..c3b1b2a 100644
--- a/matlab/geodesicinverse.cpp
+++ b/matlab/geodesicinverse.cpp
@@ -2,7 +2,7 @@
  * \file geodesicinverse.cpp
  * \brief Matlab mex file for geographic to UTM/UPS conversions
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic geodesicinverse.cpp
 
-// $Id: d12c1b02556b3e154c216cacd112deaab845ee1b $
-
 #include <algorithm>
 #include <GeographicLib/Geodesic.hpp>
 #include <mex.h>
@@ -54,7 +52,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     f = mxGetScalar(prhs[2]);
   }
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   double* lat1 = mxGetPr(prhs[0]);
   double* lon1 = lat1 + m;
@@ -85,10 +83,9 @@ void mexFunction( int nlhs, mxArray* plhs[],
 
   try {
     const Geodesic g(a, f);
-    for (int i = 0; i < m; ++i) {
-      if (!(abs(lat1[i]) > 90 || abs(lat2[i]) > 90) &&
-          !(lon1[i] < -180 || lon1[i] > 360 ||
-            lon2[i] < -180 || lon2[i] > 360)) {
+    for (mwIndex i = 0; i < m; ++i) {
+      if (abs(lat1[i]) <= 90 && lon1[i] >= -540 && lon1[i] < 540 &&
+          abs(lat2[i]) <= 90 && lon2[i] >= -540 && lon2[i] < 540) {
         if (aux)
           a12[i] = g.Inverse(lat1[i], lon1[i], lat2[i], lon2[i],
                              s12[i], azi1[i], azi2[i],
diff --git a/matlab/geodesicinverse.m b/matlab/geodesicinverse.m
index be96d6d..cbe0309 100644
--- a/matlab/geodesicinverse.m
+++ b/matlab/geodesicinverse.m
@@ -1,4 +1,4 @@
-function [geodesic, aux] = geodesicinverse(latlong, a, f)
+function geodesicinverse(~, ~, ~)
 %geodesicinverse  Solve inverse geodesic problem
 %
 %   [geodesic, aux] = geodesicinverse(latlong)
@@ -25,17 +25,27 @@ function [geodesic, aux] = geodesicinverse(latlong, a, f)
 %   f = flattening (0 means a sphere)
 %   If a and f are omitted, the WGS84 values are used.
 %
+% The algorithm used in this function is given in
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
 % This is an interface to the GeographicLib C++ routine
 %     Geodesic::Inverse
 % See the documentation on this function for more information:
 % http://geographiclib.sf.net/html/classGeographicLib_1_1Geodesic.html
+%
+% A native MATLAB implementation is available as GEODDISTANCE.
+%
+% See also GEODDISTANCE.
+
   error('Error: executing .m file instead of compiled routine');
 end
 % geodesicinverse.m
 % Matlab .m file for solving inverse geodesic problem
 %
-% Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and
-% licensed under the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
+% under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: 44fec214f6813db5c4fb8a24cfede46d2586309d $
diff --git a/matlab/geodesicline.cpp b/matlab/geodesicline.cpp
index c4047b3..4de50e4 100644
--- a/matlab/geodesicline.cpp
+++ b/matlab/geodesicline.cpp
@@ -2,7 +2,7 @@
  * \file geodesicline.cpp
  * \brief Matlab mex file for geographic to UTM/UPS conversions
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic geodesicline.cpp
 
-// $Id: f9bab46d15d25940301b5b91f79ac9f610277f8c $
-
 #include <GeographicLib/GeodesicLine.hpp>
 #include <mex.h>
 
@@ -68,7 +66,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     f = mxGetScalar(prhs[5]);
   }
 
-  int m = mxGetM(prhs[3]);
+  mwSize m = mxGetM(prhs[3]);
 
   double* s12 = mxGetPr(prhs[3]);
 
@@ -94,14 +92,14 @@ void mexFunction( int nlhs, mxArray* plhs[],
 
   try {
     const Geodesic g(a, f);
-    if (abs(lat1) > 90)
+    if (!(abs(lat1) <= 90))
       throw GeographicErr("Invalid latitude");
-    if (lon1 < -180 || lon1 > 360)
+    if (!(lon1 >= -540 || lon1 < 540))
       throw GeographicErr("Invalid longitude");
-    if (azi1 < -180 || azi1 > 360)
+    if (!(azi1 >= -540 || azi1 < 540))
       throw GeographicErr("Invalid azimuth");
     const GeodesicLine l(g, lat1, lon1, azi1);
-    for (int i = 0; i < m; ++i)
+    for (mwIndex i = 0; i < m; ++i)
       if (aux)
         a12[i] = l.Position(s12[i], lat2[i], lon2[i], azi2[i],
                             m12[i], M12[i], M21[i], S12[i]);
diff --git a/matlab/geodesicline.m b/matlab/geodesicline.m
index 05721f5..bd291a4 100644
--- a/matlab/geodesicline.m
+++ b/matlab/geodesicline.m
@@ -1,4 +1,4 @@
-function [latlong, aux] = geodesicline(lat1, lon1, azi1, distances, a, f)
+function geodesicline(~, ~, ~, ~, ~, ~)
 %geodesicline  Compute points along a geodesic
 %
 %   [latlong, aux] = geodesicline(lat1, lon1, azi1, distances)
@@ -28,17 +28,27 @@ function [latlong, aux] = geodesicline(lat1, lon1, azi1, distances, a, f)
 %       geodesicdirect([repmat([lat1, lon1, azi1],size(distances)), ...
 %                       distances], a, f)
 %
+% The algorithm used in this function is given in
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
 % This is an interface to the GeographicLib C++ routine
 %     GeodesicLine::Position
 % See the documentation on this function for more information:
 % http://geographiclib.sf.net/html/classGeographicLib_1_1GeodesicLine.html
+%
+% A native MATLAB implementation is available as GEODRECKON.
+%
+% See also GEODRECKON.
+
   error('Error: executing .m file instead of compiled routine');
 end
 % geodesicline.m
 % Matlab .m file for computing points along a geodesic
 %
-% Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and
-% licensed under the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
+% under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: 49924160d0b03dc6e7c930fc43c9850808cc527f $
diff --git a/matlab/geodproj.m b/matlab/geodproj.m
new file mode 100644
index 0000000..9381259
--- /dev/null
+++ b/matlab/geodproj.m
@@ -0,0 +1,139 @@
+function geodproj
+%GEODPROJ  Geodesic projections for an ellipsoid
+%
+%   This package implements four projections based on geodesics:
+%     * the azimuthal equidistant projection (eqdazim)
+%     * the Cassini-Soldner projection (cassini)
+%     * the transverse Mercator projection (tranmerc)
+%     * the ellipsoidal gnomonic projection (gnomonic)
+%
+%   The package implements the forward projection (from geographic to
+%   projected coordinates) and inverse projection (from projected to
+%   geographic coordinates) with abbreviated function names (listed in
+%   parentheses in the list above) suffixed by _FWD and _INV.  In addition,
+%   implementations of the UTM projection are provided with UTM_FWD and
+%   UTM_INV.  For each function, metric properties of the projection are
+%   also returned.
+%
+%   This package requires the availability of MATLAB File Exchange package
+%   "Geodesics on an ellipsoid of revolution" for performing the necessary
+%   geodesic computations:
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   The azimuthal equidistant inverse projection is a geodesic projection
+%   defined by
+%
+%     [S,AZI0] = GEODDISTANCE(LAT0,LON0,LAT,LON)
+%     X = S.*SIND(AZI0), Y = S.*COSD(AZI0)
+%
+%   Thus all distances and azimuths relative to the center point are
+%   correct.
+%
+%   The Cassini-Solder projection is a rectangular geodesic projection
+%   whose inverse is specified by
+%
+%     [LAT1,LON1,AZI1] = GEODRECKON(LAT0,LON0,Y,0)
+%     [LAT,LON] = GEODRECKON(LAT1,LON1,X,AZI1+90)
+%
+%   Cassini-Soldner is a transverse cylindrical projection where the
+%   meridian LON0 maps to a straight line with constant scale and distances
+%   perpendicular to the central meridian are true.  Cassini-Soldner was
+%   widely used for large scale maps until about 1930 (when it was
+%   supplanted by various conformal projections, in particular, by the
+%   transverse Mercator projection).
+%
+%   The transverse Mercator projection is also a cylindrical projection
+%   which maps the central meridian to a straight line at constant scale.
+%   However the behavior either side of the central meridian is determined
+%   by the condition of conformality.  The implementation used in this
+%   package is based on the series method described in
+%
+%     C. F. F. Karney, Transverse Mercator with an accuracy of a few
+%     nanometers, J. Geodesy 85(8), 475-485 (Aug. 2011);
+%     Addenda: http://geographiclib.sf.net/tm-addenda.html
+%
+%   The ellipsoidal gnomonic projection is defined by
+%
+%     [~,AZI0,~,~,m,M] = GEODDISTANCE(LAT0,LON0,LAT,LON)
+%     RHO = m./M, X = RHO.*SIND(AZI0), Y = RHO.*COSD(AZI0)
+%
+%   Obviously this is an azimuthal projection.  It also enjoys approximately
+%   the property of the spherical gnomonic projection, that geodesics map
+%   to straight lines.  The projection is derived in Section 8 of
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
+%   The parameters of the ellipsoid are specified by the optional ELLIPSOID
+%   argument to the routines.  This is a two-element vector of the form
+%   [a,e], where a is the equatorial radius, e is the eccentricity e =
+%   sqrt(a^2-b^2)/a, and b is the polar semi-axis.  Typically, a and b are
+%   measured in meters and the linear and area quantities returned by the
+%   routines are then in meters and meters^2.  However, other units can be
+%   employed.  If ELLIPSOID is omitted, then the WGS84 ellipsoid (more
+%   precisely, the value returned by DEFAULTELLIPSOID) is assumed [6378137,
+%   0.0818191908426215] corresponding to a = 6378137 meters and a
+%   flattening f = (a-b)/a = 1/298.257223563.  The flattening and
+%   eccentricity are related by
+%
+%       e = sqrt(f * (2 - f))
+%       f = e^2 / (1 + sqrt(1 - e^2))
+%
+%   (The functions ECC2FLAT and FLAT2ECC implement these conversions.)  For
+%   a sphere, set e = 0; for a prolate ellipsoid (b > a), specify e as a
+%   pure imaginary number.
+%
+%   All angles (latitude, longitude, azimuth) are measured in degrees with
+%   latitudes increasing northwards, longitudes increasing eastwards, and
+%   azimuths measured clockwise from north.  For a point at a pole, the
+%   azimuth is defined by keeping the longitude fixed, writing lat =
+%   +/-(90-eps), and taking the limit eps -> 0+.
+%
+%   Restrictions on the inputs:
+%     * All latitudes must lie in [-90, 90].
+%     * All longitudes and azimuths must lie in [-540, 540).  On output,
+%       these quantities lie in [-180, 180).
+%     * The equatorial radius, a, must be positive.
+%     * The eccentricity, e, should be satisfy abs(e) < 0.2 in order to
+%       retain full accuracy (this corresponds to flattenings satisfying
+%       abs(f) <= 1/50, approximately).  This condition holds for most
+%       applications in geodesy.
+%
+%   These routines are fully vectorized so that their speed is competitive
+%   with the compiled C++ code.  These MATLAB versions are transcriptions
+%   of several C++ classes provided by GeographicLib which is available at
+%
+%     http://geographiclib.sf.net
+%
+%   The routines duplicate some of the functionality of the EQDAZIM,
+%   CASSINISTD, TRANMERC, and GNOMONIC projections in the the MATLAB
+%   mapping toolbox.  The major improvements offered by this package are
+%
+%     * The azimuthal equidistant and gnomonic projections are defined
+%       for the ellipsoid (instead of just for the sphere).
+%     * The Cassini-Soldner projection is essentially exact (instead of
+%       being defined in terms of an approximate series).
+%     * The transverse Mercator projection uses a much more accurate
+%       series which greatly extends its domain of applicability.
+%
+%   The primary importance of the two azimuthal projections is that they
+%   offer a convenient way of solving various geometrical problems on the
+%   ellipsoid.  In particular the azimuthal equidistant projection allows
+%   problems associated with determining maritime boundaries to be solved
+%   easily.  Similarly the gnomonic projection allows the intersection of
+%   two geodesics to be determined quickly.
+%
+%   See also EQDAZIM_FWD, EQDAZIM_INV, CASSINI_FWD, CASSINI_INV,
+%     TRANMERC_FWD, TRANMERC_INV, GNOMONIC_FWD, GNOMONIC_INV, UTM_FWD,
+%     UTM_INV, DEFAULTELLIPSOID, ECC2FLAT, FLAT2ECC, GEODDISTANCE,
+%     GEODRECKON.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  help geodproj
+end
diff --git a/matlab/geodreckon.m b/matlab/geodreckon.m
new file mode 100644
index 0000000..bdd152a
--- /dev/null
+++ b/matlab/geodreckon.m
@@ -0,0 +1,250 @@
+function [lat2, lon2, azi2, S12, m12, M12, M21, a12_s12] = geodreckon ...
+      (lat1, lon1, s12_a12, azi1, ellipsoid, arcmode)
+%GEODRECKON  Point at specified azimuth, range on an ellipsoid
+%
+%   [lat2, lon2, azi2] = GEODRECKON(lat1, lon1, s12, azi1)
+%   [lat2, lon2, azi2, S12, m12, M12, M21, a12_s12] =
+%     GEODRECKON(lat1, lon1, s12_a12, azi1, ellipsoid, arcmode)
+%
+%   solves the direct geodesic problem of finding the final point and
+%   azimuth given lat1, lon1, s12, and azi1.  The input arguments lat1,
+%   lon1, s12, azi1, can be scalars or arrays of equal size.  lat1, lon1,
+%   azi1 are given in degrees and s12 in meters.  The ellipsoid vector is
+%   of the form [a, e], where a is the equatorial radius in meters, e is
+%   the eccentricity.  If ellipsoid is omitted, the WGS84 ellipsoid (more
+%   precisely, the value returned by DEFAULTELLIPSOID) is used.  lat2,
+%   lon2, and azi2 give the position and forward azimuths at the end point
+%   in degrees.  The other outputs, S12, m12, M12, M21, a12 are documented
+%   in GEODDOC.  GEODDOC also gives the restrictions on the allowed ranges
+%   of the arguments.
+%
+%   If arcmode if false (the default), then, in the long form of the call,
+%   the input argument s12_a12 is the distance s12 (in meters) and the
+%   final output variable a12_s12 is the arc length on the auxiliary sphere
+%   a12 (in degrees).  If arcmode is true, then the roles of s12_a12 and
+%   a12_s12 are reversed; s12_a12 is interpreted as the arc length on the
+%   auxiliary sphere a12 (in degrees) and the corresponding distance s12 is
+%   returned in the final output variable a12_s12 (in meters).  The two
+%   optional arguments, ellispoid and arcmode, may be given in any order
+%   and either or both may be omitted.
+%
+%   When given a combination of scalar and array inputs, GEODRECKON behaves
+%   as though the inputs were expanded to match the size of the arrays.
+%   However, in the particular case where LAT1 and AZI1 are the same for
+%   all the input points, they should be specified as scalars since this
+%   will considerably speed up the calculations.  (In particular a series
+%   of points along a single geodesic is efficiently computed by specifying
+%   an array for S12 only.)
+%
+%   This is an implementation of the algorithm given in
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
+%   This function duplicates some of the functionality of the RECKON
+%   function in the MATLAB mapping toolbox.  Differences are
+%
+%     * When the ellipsoid argument is omitted, use the WGS84 ellipsoid.
+%     * The routines work for prolate (as well as oblate) ellipsoids.
+%     * The azimuth at the end point azi2 is returned.
+%     * The solution is accurate to round off for abs(e) < 0.2.
+%     * Redundant calculations are avoided when computing multiple
+%       points on a single geodesic.
+%     * Additional properties of the geodesic are calcuated.
+%
+%   See also GEODDOC, GEODDISTANCE, GEODAREA, GEODESICDIRECT, GEODESICLINE,
+%     DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.31.
+%
+% This is a straightforward transcription of the C++ implementation in
+% GeographicLib and the C++ source should be consulted for additional
+% documentation.  This is a vector implementation and the results returned
+% with array arguments are identical to those obtained with multiple calls
+% with scalar arguments.
+
+  if nargin < 4, error('Too few input arguments'), end
+  try
+    S = size(lat1 + lon1 + s12_a12 + azi1);
+  catch err
+    error('lat1, lon1, s12, azi1 have incompatible sizes')
+  end
+  if nargin <= 4
+    ellipsoid = defaultellipsoid; arcmode = false;
+  elseif nargin == 5
+    arg5 = ellipsoid(:);
+    if length(arg5) == 2
+      ellipsoid = arg5; arcmode = false;
+    else
+      arcmode = arg5; ellipsoid = defaultellipsoid;
+    end
+  else
+    arg5 = ellipsoid(:);
+    arg6 = arcmode;
+    if length(arg5) == 2
+      ellipsoid = arg5; arcmode = arg6;
+    else
+      arcmode = arg5; ellipsoid = arg6;
+    end
+  end
+  if length(ellipsoid) ~= 2
+    error('ellipsoid must be a vector of size 2')
+  end
+  arcmode = logical(arcmode);
+  if ~isscalar(arcmode)
+    error('arcmode must be true or false')
+  end
+
+  degree = pi/180;
+  tiny = sqrt(realmin);
+
+  a = ellipsoid(1);
+  e2 = ellipsoid(2)^2;
+  f = e2 / (1 + sqrt(1 - e2));
+  f1 = 1 - f;
+  ep2 = e2 / (1 - e2);
+  n = f / (2 - f);
+  b = a * f1;
+
+  areap = nargout >= 4;
+  redlp = nargout >= 5;
+  scalp = nargout >= 6;
+
+  A3x = A3coeff(n);
+  C3x = C3coeff(n);
+
+  lat1 = lat1(:);
+  lon1 = AngNormalize(lon1(:));
+  azi1 = AngRound(AngNormalize(azi1(:)));
+  s12_a12 = s12_a12(:);
+
+  alp1 = azi1 * degree;
+  salp1 = sin(alp1); salp1(azi1 == -180) = 0;
+  calp1 = cos(alp1); calp1(abs(azi1) == 90) = 0;
+  phi = lat1 * degree;
+  sbet1 = f1 * sin(phi);
+  cbet1 = cos(phi); cbet1(abs(lat1) == 90) = tiny;
+  [sbet1, cbet1] = SinCosNorm(sbet1, cbet1);
+  dn1 = sqrt(1 + ep2 * sbet1.^2);
+
+  salp0 = salp1 .* cbet1; calp0 = hypot(calp1, salp1 .* sbet1);
+  ssig1 = sbet1; somg1 = salp0 .* sbet1;
+  csig1 = cbet1 .* calp1; csig1(sbet1 == 0 & calp1 == 0) = 1; comg1 = csig1;
+  [ssig1, csig1] = SinCosNorm(ssig1, csig1);
+
+  k2 = calp0.^2 * ep2;
+  epsi = k2 ./ (2 * (1 + sqrt(1 + k2)) + k2);
+  A1m1 = A1m1f(epsi);
+  C1a = C1f(epsi);
+  B11 = SinCosSeries(true, ssig1, csig1, C1a);
+  s = sin(B11); c = cos(B11);
+  stau1 = ssig1 .* c + csig1 .* s; ctau1 = csig1 .* c - ssig1 .* s;
+
+  C1pa = C1pf(epsi);
+  C3a = C3f(epsi, C3x);
+  A3c = -f * salp0 .* A3f(epsi, A3x);
+  B31 = SinCosSeries(true, ssig1, csig1, C3a);
+
+  if arcmode
+    sig12 = s12_a12 * degree;
+    ssig12 = sin(sig12);
+    csig12 = cos(sig12);
+    s12a = abs(s12_a12);
+    s12a = s12a - 180 * floor(s12a / 180);
+    ssig12(s12a == 0) = 0;
+    csig12(s12a == 90) = 0;
+  else
+    tau12 = s12_a12 ./ (b * (1 + A1m1));
+    s = sin(tau12); c = cos(tau12);
+    B12 = - SinCosSeries(true,  stau1 .* c + ctau1 .* s, ...
+                         ctau1 .* c - stau1 .* s, C1pa);
+    sig12 = tau12 - (B12 - B11);
+    ssig12 = sin(sig12); csig12 = cos(sig12);
+    if abs(f) > 0.01
+      ssig2 = ssig1 .* csig12 + csig1 .* ssig12;
+      csig2 = csig1 .* csig12 - ssig1 .* ssig12;
+      B12 =  SinCosSeries(true, ssig2, csig2, C1a);
+      serr = (1 + A1m1) .* (sig12 + (B12 - B11)) - s12_a12/b;
+      sig12 = sig12 - serr ./ sqrt(1 + k2 .* ssig2.^2);
+      ssig12 = sin(sig12); csig12 = cos(sig12);
+    end
+  end
+
+  ssig2 = ssig1 .* csig12 + csig1 .* ssig12;
+  csig2 = csig1 .* csig12 - ssig1 .* ssig12;
+  dn2 = sqrt(1 + k2 .* ssig2.^2);
+  if arcmode || redlp || scalp
+    if arcmode || abs(f) > 0.01
+      B12 = SinCosSeries(true, ssig2, csig2, C1a);
+    end
+    AB1 = (1 + A1m1) .* (B12 - B11);
+  end
+  sbet2 = calp0 .* ssig2;
+  cbet2 = hypot(salp0, calp0 .* csig2);
+  cbet2(cbet2 == 0) = tiny;
+  somg2 = salp0 .* ssig2; comg2 = csig2;
+  salp2 = salp0; calp2 = calp0 .* csig2;
+  omg12 = atan2(somg2 .* comg1 - comg2 .* somg1, ...
+                comg2 .* comg1 + somg2 .* somg1);
+  lam12 = omg12 + ...
+          A3c .* ( sig12 + (SinCosSeries(true, ssig2, csig2, C3a) - B31));
+  lon12 = lam12 / degree;
+  lon12 = AngNormalize2(lon12);
+  lon2 = AngNormalize(lon1 + lon12);
+  lat2 = atan2(sbet2, f1 * cbet2) / degree;
+  azi2 = 0 - atan2(-salp2, calp2) / degree;
+  if arcmode
+    a12_s12 = b * ((1 + A1m1) .* sig12 + AB1);
+  else
+    a12_s12 = sig12 / degree;
+  end
+
+  if redlp || scalp
+    A2m1 = A2m1f(epsi);
+    C2a = C2f(epsi);
+    B21 = SinCosSeries(true, ssig1, csig1, C2a);
+    B22 = SinCosSeries(true, ssig2, csig2, C2a);
+    AB2 = (1 + A2m1) .* (B22 - B21);
+    J12 = (A1m1 - A2m1) .* sig12 + (AB1 - AB2);
+    if redlp
+      m12 = b * ((dn2 .* (csig1 .* ssig2) - dn1 .* (ssig1 .* csig2)) ...
+                 - csig1 .* csig2 .* J12);
+      m12 = reshape(m12, S);
+    end
+    if scalp
+      t = k2 .* (ssig2 - ssig1) .* (ssig2 + ssig1) ./ (dn1 + dn2);
+      M12 = csig12 + (t .* ssig2 - csig2 .* J12) .* ssig1 ./ dn1;
+      M21 = csig12 - (t .* ssig1 - csig1 .* J12) .* ssig2 ./  dn2;
+      M12 = reshape(M12, S); M21 = reshape(M21, S);
+    end
+  end
+
+  if areap
+    C4x = C4coeff(n);
+    C4a = C4f(eps, C4x);
+    A4 = (a^2 * e2) * calp0 .* salp0;
+    B41 = SinCosSeries(false, ssig1, csig1, C4a);
+    B42 = SinCosSeries(false, ssig2, csig2, C4a);
+    salp12 = calp0 .* salp0 .* ...
+             cvmgt(csig1 .* (1 - csig12) + ssig12 .* ssig1, ...
+                   ssig12 .* (csig1 .* ssig12 ./ (1 + csig12) + ssig1), ...
+                   csig12 <= 0);
+    calp12 = salp0.^2 + calp0.^2 .* csig1 .* csig2;
+    s = calp0 == 0 | salp0 == 0;
+    salp12(s) = salp2(s) .* calp1(s) - calp2(s) .* salp1(s);
+    calp12(s) = calp2(s) .* calp1(s) + salp2(s) .* salp1(s);
+    s = s & salp12 == 0 & calp12 < 0;
+    salp12(s) = tiny * calp1(s); calp12(s) = -1;
+    c2 = (a^2 + b^2 * atanhee(1, e2)) / 2;
+    S12 = c2 * atan2(salp12, calp12) + A4 .* (B42 - B41);
+  end
+
+  lat2 = reshape(lat2, S);
+  lon2 = reshape(lon2, S);
+  azi2 = reshape(azi2, S);
+
+end
diff --git a/matlab/geographiclibinterface.m b/matlab/geographiclibinterface.m
index fb1b2a0..420a3f6 100644
--- a/matlab/geographiclibinterface.m
+++ b/matlab/geographiclibinterface.m
@@ -1,4 +1,4 @@
-function geographiclibinterface(incdir, libdir);
+function geographiclibinterface(incdir, libdir)
 % geographiclibinterface  Use mex to compile interface to GeographicLib
 %
 %   geographiclibinterface
@@ -29,18 +29,17 @@ function geographiclibinterface(incdir, libdir);
 %
 % Run 'mex -setup' to configure the C++ compiler for Matlab to use.
 %
-% Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+% Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
 % under the MIT/X11 License.  For more information, see
 % http://geographiclib.sf.net/html/other.html#matlab
-%
-% $Id: b277d1bf94adefbdb95fba08d5db4cc128b72e48 $
+
   funs = {'geodesicdirect', 'geodesicinverse', 'geodesicline', ...
           'geoidheight', ...
           'utmupsforward', 'utmupsreverse', ...
           'mgrsforward', 'mgrsreverse', ...
           'geocentricforward', 'geocentricreverse', ...
           'localcartesianforward', 'localcartesianreverse', ...
-	  'polygonarea'};
+          'polygonarea'};
   lib='Geographic';
   if (ispc && ...
       strcmp(mex.getCompilerConfigurations().Manufacturer, 'Microsoft') && ...
diff --git a/matlab/geoidheight.cpp b/matlab/geoidheight.cpp
index cf44d86..e1825e0 100644
--- a/matlab/geoidheight.cpp
+++ b/matlab/geoidheight.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic geoidheight.cpp
 
-// $Id: f57e9aa3c45ed9f63687fdba9bb6f79000895174 $
-
 #include <string>
 #include <algorithm>
 #include <GeographicLib/Geoid.hpp>
@@ -41,7 +39,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
   if (mxGetN(prhs[0]) != 2)
     mexErrMsgTxt("latlong coordinates must be M x 2 matrix.");
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   double* lat = mxGetPr(prhs[0]);
   double* lon = lat + m;
@@ -68,12 +66,12 @@ void mexFunction( int nlhs, mxArray* plhs[],
       mexErrMsgTxt("geoid name cannot be empty.");
     if (mxGetM(prhs[1]) != 1)
       mexErrMsgTxt("geoid name cannot be a vector of strings.");
-    int n = mxGetN(prhs[1]);
+    mwSize n = mxGetN(prhs[1]);
     if (n < 1)
       mexErrMsgTxt("geoid name cannot be empty.");
     mxChar* ptr = mxGetChars(prhs[1]);
     geoidname.resize(n);
-    for (int i = 0; i < n; ++i)
+    for (mwIndex i = 0; i < n; ++i)
       geoidname[i] = ptr[i];
   }
   string geoiddir("");
@@ -82,19 +80,19 @@ void mexFunction( int nlhs, mxArray* plhs[],
       mexErrMsgTxt("geoid directory must be a string.");
     if (mxGetM(prhs[2]) > 1)
       mexErrMsgTxt("geoid directory cannot be a vector of strings.");
-    int n = mxGetN(prhs[2]);
+    mwSize n = mxGetN(prhs[2]);
     if (n > 0 && mxGetM(prhs[2]) == 1) {
       mxChar* ptr = mxGetChars(prhs[2]);
       geoiddir.resize(n);
-      for (int i = 0; i < n; ++i)
+      for (mwIndex i = 0; i < n; ++i)
         geoiddir[i] = ptr[i];
     } // else string is empty and do nothing
   }
 
   try {
     const Geoid g(geoidname, geoiddir);
-    for (int i = 0; i < m; ++i) {
-      if (!(abs(lat[i]) > 90) && !(lon[i] < -180 || lon[i] > 360)) {
+    for (mwIndex i = 0; i < m; ++i) {
+      if (abs(lat[i]) <= 90 && lon[i] >= -540 && lon[i] < 540) {
         // g() can throw an exception, e.g., because of an I/O failure.  Treat
         // this as fatal.
         if (gradient)
diff --git a/matlab/geoidheight.m b/matlab/geoidheight.m
index e688b3f..7068c14 100644
--- a/matlab/geoidheight.m
+++ b/matlab/geoidheight.m
@@ -1,4 +1,4 @@
-function [height, gradient] = geoidheight(latlong, geoidname, geoiddir)
+function geoidheight(~, ~, ~)
 %geoidheight  Compute geoid height
 %
 %   CAUTION: THIS MAY CAUSE MATLAB TO CRASH!!  This occurs when the interface
@@ -33,8 +33,6 @@ end
 % geoidheight.m
 % Matlab .m file for looking up geoid heights
 %
-% Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+% Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
 % under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: 519a47a6a226677a008a17b23e1acaf44ddd8c03 $
diff --git a/matlab/gnomonic_fwd.m b/matlab/gnomonic_fwd.m
new file mode 100644
index 0000000..e0f4d1c
--- /dev/null
+++ b/matlab/gnomonic_fwd.m
@@ -0,0 +1,70 @@
+function [x, y, azi, rk] = gnomonic_fwd(lat0, lon0, lat, lon, ellipsoid)
+%GNOMONIC_FWD  Forward ellipsoidal gnomonic projection
+%
+%   [X, Y] = GNOMONIC_FWD(LAT0, LON0, LAT, LON)
+%   [X, Y, AZI, RK] = GNOMONIC_FWD(LAT0, LON0, LAT, LON, ELLIPSOID)
+%
+%   performs the forward ellipsoidal gnomonic projection of points
+%   (LAT,LON) to (X,Y) using (LAT0,LON0) as the center of projection.
+%   These input arguments can be scalars or arrays of equal size.  The
+%   ELLIPSOID vector is of the form [a, e], where a is the equatorial
+%   radius in meters, e is the eccentricity.  If ellipsoid is omitted, the
+%   WGS84 ellipsoid (more precisely, the value returned by
+%   DEFAULTELLIPSOID) is used.  GEODPROJ defines the projection and gives
+%   the restrictions on the allowed ranges of the arguments.  The inverse
+%   projection is given by GNOMONIC_INV.
+%
+%   AZI and RK give metric properties of the projection at (LAT,LON); AZI
+%   is the azimuth of the geodesic from the center of projection and RK is
+%   the reciprocal of the azimuthal scale.  The scale in the radial
+%   direction is 1/RK^2.
+%
+%   If the point lies "over the horizon", i.e., if RK <= 0, then NaNs are
+%   returned for X and Y (the correct values are returned for AZI and RK).
+%
+%   LAT0, LON0, LAT, LON, AZI are in degrees.  The projected coordinates X,
+%   Y are in meters (more precisely the units used for the equatorial
+%   radius).  RK is dimensionless.
+%
+%   The ellipsoidal gnomonic projection is an azimuthal projection about a
+%   center point.  All geodesics through the center point are projected
+%   into straight lines with the correct azimuth relative to the center
+%   point.  In addition all geodesics are pass close to the center point
+%   are very nearly straight.  The projection is derived in Section 8 of
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
+%   which also includes methods for solving the "intersection" and
+%   "interception" problems using the gnomonic projection.
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, GNOMONIC_INV, GEODDISTANCE, DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  if nargin < 5, ellipsoid = defaultellipsoid; end
+  try
+    [~] = lat0 + lon0 + lat + lon;
+  catch err
+    error('lat0, lon0, lat, lon have incompatible sizes')
+  end
+
+  [~, azi0, azi, ~, m, M] = geoddistance(lat0, lon0, lat, lon, ellipsoid);
+  rho = m ./ M;
+  azi0 = azi0 * (pi/180);
+  x = rho .* sin(azi0);
+  y = rho .* cos(azi0);
+  rk = M;
+  x(M <= 0) = NaN;
+  y(M <= 0) = NaN;
+end
diff --git a/matlab/gnomonic_inv.m b/matlab/gnomonic_inv.m
new file mode 100644
index 0000000..58973db
--- /dev/null
+++ b/matlab/gnomonic_inv.m
@@ -0,0 +1,98 @@
+function [lat, lon, azi, rk] = gnomonic_inv(lat0, lon0, x, y, ellipsoid)
+%GNOMONIC_INV  Inverse ellipsoidal gnomonic projection
+%
+%   [LAT, LON] = GNOMONIC_INV(LAT0, LON0, X, Y)
+%   [LAT, LON, AZI, RK] = GNOMONIC_INV(LAT0, LON0, X, Y, ELLIPSOID)
+%
+%   performs the inverse ellipsoidal gnomonic projection of points (X,Y) to
+%   (LAT,LON) using (LAT0,LON0) as the center of projection.  These input
+%   arguments can be scalars or arrays of equal size.  The ELLIPSOID vector
+%   is of the form [a, e], where a is the equatorial radius in meters, e is
+%   the eccentricity.  If ellipsoid is omitted, the WGS84 ellipsoid (more
+%   precisely, the value returned by DEFAULTELLIPSOID) is used.  GEODPROJ
+%   defines the projection and gives the restrictions on the allowed ranges
+%   of the arguments.  The forward projection is given by GNOMONIC_FWD.
+%
+%   AZI and RK give metric properties of the projection at (LAT,LON); AZI
+%   is the azimuth of the geodesic from the center of projection and RK is
+%   the reciprocal of the azimuthal scale.  The scale in the radial
+%   direction is 1/RK^2.
+%
+%   In principle, all finite X and Y are allowed.  However, it's possible
+%   that the inverse projection fails for very large X and Y (when the
+%   geographic position is close to the "horizon").  In that case, NaNs are
+%   returned for the corresponding output variables.
+%
+%   LAT0, LON0, LAT, LON, AZI are in degrees.  The projected coordinates X,
+%   Y are in meters (more precisely the units used for the equatorial
+%   radius).  RK is dimensionless.
+%
+%   The ellipsoidal gnomonic projection is an azimuthal projection about a
+%   center point.  All geodesics through the center point are projected
+%   into straight lines with the correct azimuth relative to the center
+%   point.  In addition all geodesics are pass close to the center point
+%   are very nearly straight.  The projection is derived in Section 8 of
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
+%   which also includes methods for solving the "intersection" and
+%   "interception" problems using the gnomonic projection.
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, GNOMONIC_FWD, GEODRECKON, DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  if nargin < 5, ellipsoid = defaultellipsoid; end
+  try
+    Z = lat0 + lon0 + x + y;
+    Z = zeros(size(Z));
+  catch err
+    error('lat0, lon0, x, y have incompatible sizes')
+  end
+  if length(ellipsoid(:)) ~= 2
+    error('ellipsoid must be a vector of size 2')
+  end
+  a = ellipsoid(1);
+  numit = 10;
+  eps1 = a * 0.01 * sqrt(eps);
+
+  lat0 = lat0 + Z; lon0 = lon0 + Z; x = x + Z; y = y + Z;
+  azi0 = atan2(x, y) / (pi/180);
+  rho = hypot(x, y);
+  s = a * atan(rho / a);
+  little = rho <= a;
+  rho(~little) = 1 ./ rho(~little);
+  g = Z == 0; trip = ~g;
+  lat = Z; lon = Z; azi = Z; m = Z; M = Z; ds = Z;
+  for k = 1 : numit
+    [lat(g), lon(g), azi(g), ~, m(g), M(g)] = ...
+        geodreckon(lat0(g), lon0(g), s(g), azi0(g), ellipsoid);
+    g = g & ~trip;
+    if ~any(g), break, end
+    c = little & g;
+    ds(c) = (m(c) ./ M(c) - rho(c)) .* M(c).^2;
+    c = ~little & g;
+    ds(c) = (rho(c) - M(c) ./ m(c)) .* m(c).^2;
+    s(g) = s(g) - ds(g);
+    trip(g) = ~(abs(ds(g)) >= eps1);
+  end
+  c = ~trip;
+  if any(c)
+    lat(c) = NaN;
+    lon(c) = NaN;
+    azi(c) = NaN;
+    M(c) = NaN;
+  end
+  rk = M;
+end
diff --git a/matlab/localcartesianforward.cpp b/matlab/localcartesianforward.cpp
index 650cc2e..f247b62 100644
--- a/matlab/localcartesianforward.cpp
+++ b/matlab/localcartesianforward.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic localcartesianforward.cpp
 
-// $Id: e58202b672e8578b5d8b3ff97c899544c1a7bbe7 $
-
 #include <algorithm>
 #include <GeographicLib/LocalCartesian.hpp>
 #include <mex.h>
@@ -64,7 +62,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     f = mxGetScalar(prhs[3]);
   }
 
-  int m = mxGetM(prhs[1]);
+  mwSize m = mxGetM(prhs[1]);
 
   double* lat = mxGetPr(prhs[1]);
   double* lon = lat + m;
@@ -88,16 +86,16 @@ void mexFunction( int nlhs, mxArray* plhs[],
   try {
     std::vector<double> rotv(rotp ? 9 : 0);
     const Geocentric c(a, f);
-    if (abs(lat0) > 90)
+    if (!(abs(lat0) <= 90))
       throw GeographicErr("Invalid latitude");
-    if (lon0 < -180 || lon0 > 360)
+    if (!(lon0 >= -540 || lon0 < 540))
       throw GeographicErr("Invalid longitude");
     const LocalCartesian l(lat0, lon0, h0, c);
-    for (int i = 0; i < m; ++i) {
-      if (!(abs(lat[i]) > 90) && !(lon[i] < -180 || lon[i] > 360)) {
+    for (mwIndex i = 0; i < m; ++i) {
+      if (abs(lat[i]) <= 90 && lon[i] >= -540 && lon[i] < 540) {
         l.Forward(lat[i], lon[i], haveh ? h[i] : 0.0, x[i], y[i], z[i], rotv);
         if (rotp) {
-          for (int k = 0; k < 9; ++k)
+          for (mwIndex k = 0; k < 9; ++k)
             rot[m * k + i] = rotv[k];
         }
       }
diff --git a/matlab/localcartesianforward.m b/matlab/localcartesianforward.m
index 5c6822d..09415b1 100644
--- a/matlab/localcartesianforward.m
+++ b/matlab/localcartesianforward.m
@@ -1,4 +1,4 @@
-function [cartesian, rot] = localcartesianforward(origin, geodetic, a, f)
+function localcartesianforward(~, ~, ~, ~)
 %localcartesianforward  Convert geographic coordinates to local cartesian
 %
 %   [cartesian, rot] = localcartesianforward(origin, geodetic)
@@ -39,5 +39,3 @@ end
 % Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
 % the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: fdc671d6023a46268b868154bf94777c9b14f5fa $
diff --git a/matlab/localcartesianreverse.cpp b/matlab/localcartesianreverse.cpp
index 9f594bb..6541822 100644
--- a/matlab/localcartesianreverse.cpp
+++ b/matlab/localcartesianreverse.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic localcartesianreverse.cpp
 
-// $Id: 10fe61f546a91a36af5ce60d35bc9e13df21c769 $
-
 #include <GeographicLib/LocalCartesian.hpp>
 #include <mex.h>
 
@@ -63,7 +61,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     f = mxGetScalar(prhs[3]);
   }
 
-  int m = mxGetM(prhs[1]);
+  mwSize m = mxGetM(prhs[1]);
 
   double* x = mxGetPr(prhs[1]);
   double* y = x + m;
@@ -84,15 +82,15 @@ void mexFunction( int nlhs, mxArray* plhs[],
   try {
     std::vector<double> rotv(rotp ? 9 : 0);
     const Geocentric c(a, f);
-    if (abs(lat0) > 90)
+    if (!(abs(lat0) <= 90))
       throw GeographicErr("Invalid latitude");
-    if (lon0 < -180 || lon0 > 360)
+    if (!(lon0 >= -540 || lon0 < 540))
       throw GeographicErr("Invalid longitude");
     const LocalCartesian l(lat0, lon0, h0, c);
-    for (int i = 0; i < m; ++i) {
+    for (mwIndex i = 0; i < m; ++i) {
       l.Reverse(x[i], y[i], z[i], lat[i], lon[i], h[i], rotv);
       if (rotp) {
-          for (int k = 0; k < 9; ++k)
+          for (mwIndex k = 0; k < 9; ++k)
             rot[m * k + i] = rotv[k];
       }
     }
diff --git a/matlab/localcartesianreverse.m b/matlab/localcartesianreverse.m
index 0e14ffa..edba383 100644
--- a/matlab/localcartesianreverse.m
+++ b/matlab/localcartesianreverse.m
@@ -1,4 +1,4 @@
-function [geodetic, rot] = localcartesianreverse(origin, cartesian, a, f)
+function localcartesianreverse(~, ~, ~, ~)
 %localcartesianreverse  Convert local cartesian coordinates to geographic
 %
 %   [geodetic, rot] = localcartesianreverse(origin, cartesian)
@@ -36,8 +36,6 @@ end
 % localcartesianreverse.m
 % Matlab .m file for local cartesian to geographic conversions
 %
-% Copyright (c) Charles Karney (2011) <charles at karney.com> and
-% licensed under the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
+% the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: d125a552e78aaec23ab0069c078301fa3e66569f $
diff --git a/matlab/mgrsforward.cpp b/matlab/mgrsforward.cpp
index e479820..bd35731 100644
--- a/matlab/mgrsforward.cpp
+++ b/matlab/mgrsforward.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic mgrsforward.cpp
 
-// $Id: 30421c0aa01eeec69a89f3332dfba997451204e9 $
-
 #include <GeographicLib/MGRS.hpp>
 #include <mex.h>
 
@@ -54,7 +52,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
       mexErrMsgTxt("Precision outside the legal range [0, 11].");
   }
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   double* x = mxGetPr(prhs[0]);
   double* y = x + m;
@@ -65,7 +63,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
   plhs[0] = mxCreateCellArray(1, &m);
   mxArray* mgrs = plhs[0];
 
-  for (int i = 0; i < m; ++i) {
+  for (mwIndex i = 0; i < m; ++i) {
     try {
       mgrsstr = "INVALID";
       int ZONE = int(zone[i]);
diff --git a/matlab/mgrsforward.m b/matlab/mgrsforward.m
index bf818fc..2656cc8 100644
--- a/matlab/mgrsforward.m
+++ b/matlab/mgrsforward.m
@@ -1,4 +1,4 @@
-function mgrs = mgrsforward(utmups, prec)
+function mgrsforward(~, ~)
 %mgrsforward  Convert UTM/UPS coordinates to MGRS
 %
 %   mgrs = mgrsforward(utmups)
@@ -26,8 +26,6 @@ end
 % mgrsforward.m
 % Matlab .m file for UTM/UPS to MGRS conversions
 %
-% Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and
-% licensed under the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
+% under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: 57f3730b6e64bd895c1644a69b90a39388a1f816 $
diff --git a/matlab/mgrsreverse.cpp b/matlab/mgrsreverse.cpp
index 37b2623..0709ace 100644
--- a/matlab/mgrsreverse.cpp
+++ b/matlab/mgrsreverse.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic mgrsreverse.cpp
 
-// $Id: fea6af03d0363148520e514fd8374020871160b9 $
-
 #include <GeographicLib/MGRS.hpp>
 #include <mex.h>
 
@@ -34,7 +32,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
   if (!mxIsCell(prhs[0]) || mxGetN(prhs[0]) != 1)
     mexErrMsgTxt("mgrs coordinates should be in a M x 1 cell array.");
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   plhs[0] = mxCreateDoubleMatrix(m, 4, mxREAL);
   double* x = mxGetPr(plhs[0]);
@@ -50,15 +48,15 @@ void mexFunction( int nlhs, mxArray* plhs[],
   }
 
   string mgrsstr;
-  for (int i = 0; i < m; ++i) {
+  for (mwIndex i = 0; i < m; ++i) {
     try {
       mxArray* mgrs = mxGetCell(prhs[0], i);
       if (!mxIsChar(mgrs) || mxGetM(mgrs) != 1)
         throw GeographicErr("Cell element not a string");
-      int n = mxGetN(mgrs);
+      mwSize n = mxGetN(mgrs);
       mxChar* mgrschar = mxGetChars(mgrs);
       mgrsstr.resize(n);
-      for (int k = 0; k < n; ++k)
+      for (mwIndex k = 0; k < n; ++k)
         mgrsstr[k] = mgrschar[k];
       int ZONE, PREC;
       bool HEMI;
diff --git a/matlab/mgrsreverse.m b/matlab/mgrsreverse.m
index 5975079..da76426 100644
--- a/matlab/mgrsreverse.m
+++ b/matlab/mgrsreverse.m
@@ -1,4 +1,4 @@
-function [utmups, prec] = mgrsreverse(utmups)
+function mgrsreverse(~)
 %mgrsreverse  Convert UTM/UPS coordinates to MGRS
 %
 %   [utmups, prec] = mgrsreverse(mgrs)
@@ -31,8 +31,6 @@ end
 % mgrsreverse.m
 % Matlab .m file for MGRS to UTM/UPS conversions
 %
-% Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and
-% licensed under the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
+% under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: b04bd9800243ee766cb0d63b0318bc42464c410c $
diff --git a/matlab/polygonarea.cpp b/matlab/polygonarea.cpp
index 5fe73dd..dbfa6e5 100644
--- a/matlab/polygonarea.cpp
+++ b/matlab/polygonarea.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic polygonarea.cpp
 
-// $Id: cbdd83aa0963df0a278c3c4254a8935c3d77828b $
-
 #include <algorithm>
 #include <GeographicLib/PolygonArea.hpp>
 #include <mex.h>
@@ -54,7 +52,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     f = mxGetScalar(prhs[2]);
   }
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   double* lat = mxGetPr(prhs[0]);
   double* lon = lat + m;
@@ -72,10 +70,10 @@ void mexFunction( int nlhs, mxArray* plhs[],
   try {
     const Geodesic g(a, f);
     PolygonArea p(g, false);
-    for (int i = 0; i < m; ++i) {
-      if (abs(lat[i]) > 90)
+    for (mwIndex i = 0; i < m; ++i) {
+      if (!(abs(lat[i]) <= 90))
         throw GeographicErr("Invalid latitude");
-      if (lon[i] < -180 || lon[i] > 360)
+      if (!(lon[i] >= -540 || lon[i] < 540))
         throw GeographicErr("Invalid longitude");
       p.AddPoint(lat[i], lon[i]);
     }
diff --git a/matlab/polygonarea.m b/matlab/polygonarea.m
index 236666c..0c23da4 100644
--- a/matlab/polygonarea.m
+++ b/matlab/polygonarea.m
@@ -1,4 +1,4 @@
-function [area, perimeter] = polygonarea(latlong, a, f)
+function polygonarea(~, ~, ~)
 %polygonarea  Compute area of a geodesic polygon
 %
 %   [area, perimeter] = polygonarea(latlong)
@@ -16,22 +16,32 @@ function [area, perimeter] = polygonarea(latlong, a, f)
 %   If a and f are omitted, the WGS84 values are used.
 %
 % Only simple polygons (which do not intersect themselves) are supported.
-% There is no need to "close" the polygon. Counter-clockwise traversal
+% There is no need to "close" the polygon.  Counter-clockwise traversal
 % counts as a positive area.  A polygon may encircle one or both poles.
 % The total area of the WGS84 ellipsoid is given by
 %   8 * polygonarea([ 0 0; 0 90; 90 0 ])
 %
+% The algorithm used in this function is given in
+%
+%     C. F. F. Karney, Algorithms for geodesics,
+%     J. Geodesy 87, 43-55 (2013);
+%     http://dx.doi.org/10.1007/s00190-012-0578-z
+%     Addenda: http://geographiclib.sf.net/geod-addenda.html
+%
 % This is an interface to the GeographicLib C++ class
 %     Geodesic::PolygonArea
 % See the documentation on this function for more information:
 % http://geographiclib.sf.net/html/classGeographicLib_1_1PolygonArea
+%
+% A native MATLAB implementation is available as GEODAREA.
+%
+% See also GEODAREA.
+
   error('Error: executing .m file instead of compiled routine');
 end
 % polygonarea.m
 % Matlab .m file for finding polygon areas
 %
-% Copyright (c) Charles Karney (2011) <charles at karney.com> and
-% licensed under the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
+% the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: 6e5fb482c0c2c1d543c110f912fc42888877906e $
diff --git a/matlab/private/A1m1f.m b/matlab/private/A1m1f.m
new file mode 100644
index 0000000..f83c615
--- /dev/null
+++ b/matlab/private/A1m1f.m
@@ -0,0 +1,10 @@
+function A1m1 = A1m1f(epsi)
+%A1M1F  Evaluate A_1 - 1
+%
+%   A1M1 = A1M1F(EPSI) evaluates A_1 - 1 using Eq. (17).  EPSI and A1M1 are
+%   K x 1 arrays.
+
+  eps2 = epsi.^2;
+  t = eps2.*(eps2.*(eps2+4)+64)/256;
+  A1m1 = (t + epsi) ./ (1 - epsi);
+end
diff --git a/matlab/private/A2m1f.m b/matlab/private/A2m1f.m
new file mode 100644
index 0000000..3de421e
--- /dev/null
+++ b/matlab/private/A2m1f.m
@@ -0,0 +1,10 @@
+function A2m1 = A2m1f(epsi)
+%A2M1F  Evaluate A_2 - 1
+%
+%   A2M1 = A2M1F(EPSI) evaluates A_2 - 1 using Eq. (42).  EPSI and A2M1 are
+%   K x 1 arrays.
+
+  eps2 = epsi.^2;
+  t = eps2.*(eps2.*(25*eps2+36)+64)/256;
+  A2m1 = t .* (1 - epsi) - epsi;
+end
diff --git a/matlab/private/A3coeff.m b/matlab/private/A3coeff.m
new file mode 100644
index 0000000..6ded9c2
--- /dev/null
+++ b/matlab/private/A3coeff.m
@@ -0,0 +1,15 @@
+function A3x = A3coeff(n)
+%A3COEFF  Evaluate coefficients for A_3
+%
+%   A3x = A3COEFF(N) evaluates the coefficients of epsilon^l in Eq. (24).  N
+%   is a scalar.  A3x is a 1 x 6 array.
+
+  nA3 = 6;
+  A3x = zeros(1, nA3);
+  A3x(0+1) = 1;
+  A3x(1+1) = (n-1)/2;
+  A3x(2+1) = (n*(3*n-1)-2)/8;
+  A3x(3+1) = ((-n-3)*n-1)/16;
+  A3x(4+1) = (-2*n-3)/64;
+  A3x(5+1) = -3/128;
+end
diff --git a/matlab/private/A3f.m b/matlab/private/A3f.m
new file mode 100644
index 0000000..a747d75
--- /dev/null
+++ b/matlab/private/A3f.m
@@ -0,0 +1,12 @@
+function A3 = A3f(epsi, A3x)
+%A3F  Evaluate A_3
+%
+%   A3 = A3F(EPSI, A3X) evaluates A_3 using Eq. (24) and the coefficient
+%   vector A3X.  EPSI and A3 are K x 1 arrays.  A3X is a 1 x 6 array.
+
+  nA3 = 6;
+  A3 = zeros(length(epsi), 1);
+  for i = nA3 : -1 : 1
+    A3 = epsi .* A3 + A3x(i);
+  end
+end
diff --git a/matlab/private/AngDiff.m b/matlab/private/AngDiff.m
new file mode 100644
index 0000000..d09faa4
--- /dev/null
+++ b/matlab/private/AngDiff.m
@@ -0,0 +1,13 @@
+function d = AngDiff(x, y)
+%ANGDIFF  Compute angle difference accurately
+%
+%   D = ANGDIFF(X, Y) computes Y - X, reduces the result to (-180,180] and
+%   rounds the result.  X and Y must be in [-180,180].  X and Y can be any
+%   compatible shapes.
+
+  [d, t] = sumx(-x, y);
+  c = (d - 180) + t > 0;
+  d(c) = (d(c) - 360) + t(c);
+  c = (d + 180) + t <= 0;
+  d(c) = (d(c) + 360) + t(c);
+end
diff --git a/matlab/private/AngNormalize.m b/matlab/private/AngNormalize.m
new file mode 100644
index 0000000..e340544
--- /dev/null
+++ b/matlab/private/AngNormalize.m
@@ -0,0 +1,9 @@
+function x = AngNormalize(x)
+%ANGNORMALIZE  Reduce angle to range [-180, 180)
+%
+%   X = ANGNORMALIZE(X) reduces angles in [-540, 540) to the range
+%   [-180, 180).  X can be any shape.
+
+  x(x >= 180) = x(x >= 180) - 360;
+  x(x < -180) = x(x < -180) + 360;
+end
diff --git a/matlab/private/AngNormalize2.m b/matlab/private/AngNormalize2.m
new file mode 100644
index 0000000..f872d43
--- /dev/null
+++ b/matlab/private/AngNormalize2.m
@@ -0,0 +1,8 @@
+function x = AngNormalize2(x)
+%ANGNORMALIZE2  Reduce any angle to range [-180, 180)
+%
+%   X = ANGNORMALIZE(X) reduces arbitrary angles to the range [-180, 180).
+%   X can be any shape.
+
+  x = AngNormalize(mod(x, 360));
+end
diff --git a/matlab/private/AngRound.m b/matlab/private/AngRound.m
new file mode 100644
index 0000000..e468b09
--- /dev/null
+++ b/matlab/private/AngRound.m
@@ -0,0 +1,11 @@
+function y = AngRound(x)
+%ANGROUND  Round tiny values so that tiny values become zero.
+%
+%   Y = ANGROUND(X) rounds X by adding and subtracting 1/16 to it if it is
+%   small.  X and Y can be any shape.
+
+  z = 1/16;
+  y = abs(x);
+  y(y < z) = z - (z - y(y < z));
+  y(x < 0) = -y(x < 0);
+end
diff --git a/matlab/private/C1f.m b/matlab/private/C1f.m
new file mode 100644
index 0000000..6d022b0
--- /dev/null
+++ b/matlab/private/C1f.m
@@ -0,0 +1,22 @@
+function C1 = C1f(epsi)
+%C1F  Evaluate C_{1,k}
+%
+%   C1 = C1F(EPSI) evaluates C_{1,l} using Eq. (18).  EPSI is a K x 1
+%   array and C1 is a K x 6 array.
+
+  nC1 = 6;
+  C1 = zeros(length(epsi), nC1);
+  eps2 = epsi.^2;
+  d = epsi;
+  C1(:,1) = d.*((6-eps2).*eps2-16)/32;
+  d = d.*epsi;
+  C1(:,2) = d.*((64-9*eps2).*eps2-128)/2048;
+  d = d.*epsi;
+  C1(:,3) = d.*(9*eps2-16)/768;
+  d = d.*epsi;
+  C1(:,4) = d.*(3*eps2-5)/512;
+  d = d.*epsi;
+  C1(:,5) = -7*d/1280;
+  d = d.*epsi;
+  C1(:,6) = -7*d/2048;
+end
diff --git a/matlab/private/C1pf.m b/matlab/private/C1pf.m
new file mode 100644
index 0000000..3f052ce
--- /dev/null
+++ b/matlab/private/C1pf.m
@@ -0,0 +1,22 @@
+function c = C1pf(epsi)
+%C1PF  Evaluate C'_{1,k}
+%
+%   C1P = C1PF(EPSI) evaluates C'_{1,l} using Eq. (21).  EPSI is an
+%   K x 1 array and C1 is a K x 6 array.
+
+  nC1p = 6;
+  c = zeros(length(epsi), nC1p);
+  eps2 = epsi.^2;
+  d = epsi;
+  c(:,1) = d.*(eps2.*(205*eps2-432)+768)/1536;
+  d = d.*epsi;
+  c(:,2) = d.*(eps2.*(4005*eps2-4736)+3840)/12288;
+  d = d.*epsi;
+  c(:,3) = d.*(116-225*eps2)/384;
+  d = d.*epsi;
+  c(:,4) = d.*(2695-7173*eps2)/7680;
+  d = d.*epsi;
+  c(:,5) = 3467*d/7680;
+  d = d.*epsi;
+  c(:,6) = 38081*d/61440;
+end
diff --git a/matlab/private/C2f.m b/matlab/private/C2f.m
new file mode 100644
index 0000000..09be4b4
--- /dev/null
+++ b/matlab/private/C2f.m
@@ -0,0 +1,22 @@
+function C2 = C2f(epsi)
+%C2F  Evaluate C_{2,k}
+%
+%   C2 = C2F(EPSI) evaluates C_{2,l} using Eq. (43).  EPSI is an
+%   K x 1 array and C2 is a K x 6 array.
+
+  nC2 = 6;
+  C2 = zeros(length(epsi), nC2);
+  eps2 = epsi.^2;
+  d = epsi;
+  C2(:,1) = d.*(eps2.*(eps2+2)+16)/32;
+  d = d.*epsi;
+  C2(:,2) = d.*(eps2.*(35*eps2+64)+384)/2048;
+  d = d.*epsi;
+  C2(:,3) = d.*(15*eps2+80)/768;
+  d = d.*epsi;
+  C2(:,4) = d.*(7*eps2+35)/512;
+  d = d.*epsi;
+  C2(:,5) = 63*d/1280;
+  d = d.*epsi;
+  C2(:,6) = 77*d/2048;
+end
diff --git a/matlab/private/C3coeff.m b/matlab/private/C3coeff.m
new file mode 100644
index 0000000..12c4199
--- /dev/null
+++ b/matlab/private/C3coeff.m
@@ -0,0 +1,25 @@
+function C3x = C3coeff(n)
+%C3COEFF  Evaluate coefficients for C_3
+%
+%   C3x = C3COEFF(N) evaluates the coefficients of epsilon^l in Eq. (25).
+%   N is a scalar.  C3x is a 1 x 15 array.
+
+  nC3 = 6;
+  nC3x = (nC3 * (nC3 - 1)) / 2;
+  C3x = zeros(1, nC3x);
+  C3x(0+1) = (1-n)/4;
+  C3x(1+1) = (1-n*n)/8;
+  C3x(2+1) = ((3-n)*n+3)/64;
+  C3x(3+1) = (2*n+5)/128;
+  C3x(4+1) = 3/128;
+  C3x(5+1) = ((n-3)*n+2)/32;
+  C3x(6+1) = ((-3*n-2)*n+3)/64;
+  C3x(7+1) = (n+3)/128;
+  C3x(8+1) = 5/256;
+  C3x(9+1) = (n*(5*n-9)+5)/192;
+  C3x(10+1) = (9-10*n)/384;
+  C3x(11+1) = 7/512;
+  C3x(12+1) = (7-14*n)/512;
+  C3x(13+1) = 7/512;
+  C3x(14+1) = 21/2560;
+end
diff --git a/matlab/private/C3f.m b/matlab/private/C3f.m
new file mode 100644
index 0000000..1fae41b
--- /dev/null
+++ b/matlab/private/C3f.m
@@ -0,0 +1,25 @@
+function C3 = C3f(epsi, C3x)
+%C3F  Evaluate C_3
+%
+%   C3 = C3F(EPSI, C3X) evaluates C_{3,l} using Eq. (25) and the
+%   coefficient vector C3X.  EPSI is a K x 1 array.  C3X is a 1 x 15 array.
+%   C3 is a K x 5 array.
+
+  nC3 = 6;
+  nC3x = size(C3x, 2);
+  j = nC3x;
+  C3 = zeros(length(epsi), nC3 - 1);
+  for k = nC3 - 1 : -1 : 1
+    t = C3(:, k);
+    for i = nC3 - k : -1 : 1
+      t = epsi .* t + C3x(j);
+      j = j - 1;
+    end
+    C3(:, k) = t;
+  end
+  mult = ones(length(epsi), 1);
+  for k = 1 : nC3 - 1
+    mult = mult .* epsi;
+    C3(:, k) = C3(:, k) .* mult;
+  end
+end
diff --git a/matlab/private/C4coeff.m b/matlab/private/C4coeff.m
new file mode 100644
index 0000000..2339118
--- /dev/null
+++ b/matlab/private/C4coeff.m
@@ -0,0 +1,32 @@
+function C4x = C4coeff(n)
+%C4COEFF  Evaluate coefficients for C_4
+%
+%   C4x = C4COEFF(N) evaluates the coefficients of epsilon^l in expansion
+%   of the area (Eq. (65) expressed in terms of n and epsi).  N is a
+%   scalar.  C4x is a 1 x 21 array.
+
+  nC4 = 6;
+  nC4x = (nC4 * (nC4 + 1)) / 2;
+  C4x = zeros(1, nC4x);
+  C4x(0+1) = (n*(n*(n*(n*(100*n+208)+572)+3432)-12012)+30030)/45045;
+  C4x(1+1) = (n*(n*(n*(64*n+624)-4576)+6864)-3003)/15015;
+  C4x(2+1) = (n*((14144-10656*n)*n-4576)-858)/45045;
+  C4x(3+1) = ((-224*n-4784)*n+1573)/45045;
+  C4x(4+1) = (1088*n+156)/45045;
+  C4x(5+1) = 97/15015;
+  C4x(6+1) = (n*(n*((-64*n-624)*n+4576)-6864)+3003)/135135;
+  C4x(7+1) = (n*(n*(5952*n-11648)+9152)-2574)/135135;
+  C4x(8+1) = (n*(5792*n+1040)-1287)/135135;
+  C4x(9+1) = (468-2944*n)/135135;
+  C4x(10+1) = 1/9009;
+  C4x(11+1) = (n*((4160-1440*n)*n-4576)+1716)/225225;
+  C4x(12+1) = ((4992-8448*n)*n-1144)/225225;
+  C4x(13+1) = (1856*n-936)/225225;
+  C4x(14+1) = 8/10725;
+  C4x(15+1) = (n*(3584*n-3328)+1144)/315315;
+  C4x(16+1) = (1024*n-208)/105105;
+  C4x(17+1) = -136/63063;
+  C4x(18+1) = (832-2560*n)/405405;
+  C4x(19+1) = -128/135135;
+  C4x(20+1) = 128/99099;
+end
diff --git a/matlab/private/C4f.m b/matlab/private/C4f.m
new file mode 100644
index 0000000..d17f107
--- /dev/null
+++ b/matlab/private/C4f.m
@@ -0,0 +1,26 @@
+function C4 = C4f(epsi, C4x)
+%C4F  Evaluate C_4
+%
+%   C4 = C4F(EPSI, C4X) evaluates C_{4,l} in the expansion for the area
+%   (Eq. (65) expressed in terms of n and epsi) using the coefficient
+%   vector C4X.  K2 is a K x 1 array.  C4X is a 1 x 15 array.  C4 is a K x
+%   5 array.
+
+  nC4 = 6;
+  nC4x = size(C4x, 2);
+  j = nC4x;
+  C4 = zeros(length(epsi), nC4);
+  for k = nC4 : -1 : 1
+    t = C4(:, k);
+    for i = nC4 - k : -1 : 0
+      t = epsi .* t + C4x(j);
+      j = j - 1;
+    end
+    C4(:, k) = t;
+  end
+  mult = ones(length(epsi), 1);
+  for k = 2 : nC4
+    mult = mult .* epsi;
+    C4(:, k) = C4(:, k) .* mult;
+  end
+end
diff --git a/matlab/private/SinCosNorm.m b/matlab/private/SinCosNorm.m
new file mode 100644
index 0000000..9e53341
--- /dev/null
+++ b/matlab/private/SinCosNorm.m
@@ -0,0 +1,10 @@
+function [sinx, cosx] = SinCosNorm(sinx, cosx)
+%SINCOSNORM  Normalize sinx and cosx
+%
+%   [SINX, COSX] = SINCOSNORM(SINX, COSX) normalize SINX and COSX so that
+%   SINX^2 + COSX^2 = 1.  SINX and COSX can be any shape.
+
+  r = hypot(sinx, cosx);
+  sinx = sinx ./ r;
+  cosx = cosx ./ r;
+end
diff --git a/matlab/private/SinCosSeries.m b/matlab/private/SinCosSeries.m
new file mode 100644
index 0000000..e5531fc
--- /dev/null
+++ b/matlab/private/SinCosSeries.m
@@ -0,0 +1,35 @@
+function y = SinCosSeries(sinp, sinx, cosx, c)
+%SINSCOSERIES  Evaluate a sine or cosine series using Clenshaw summation
+%
+%   Y = SINCOSSERIES(SINP, SINX, COSX, C) evaluate
+%     y = sum(c[i] * sin( 2*i    * x), i, 1, n), if  sinp
+%     y = sum(c[i] * cos((2*i-1) * x), i, 1, n), if ~sinp
+%
+%   where n is the size of C.  x is given via its sine and cosine in SINX
+%   and COSX.  SINP is a scalar.  SINX, COSX, and Y are K x 1 arrays.  C is
+%   a K x N array.
+
+  if isempty(sinx)
+    y = [];
+    return
+  end
+  n = size(c, 2);
+  ar = 2 * (cosx - sinx) .* (cosx + sinx);
+  y1 = zeros(length(sinx), 1);
+  if mod(n, 2)
+    y0 = c(:, n);
+    n = n - 1;
+  else
+    y0 = y1;
+  end
+
+  for k = n : -2 : 1
+    y1 = ar .* y0 - y1 + c(:, k);
+    y0 = ar .* y1 - y0 + c(:, k-1);
+  end
+  if sinp
+    y = 2 * sinx .* cosx .* y0;
+  else
+    y = cosx .* (y0 - y1);
+  end
+end
diff --git a/matlab/private/atanhee.m b/matlab/private/atanhee.m
new file mode 100644
index 0000000..66c2bb3
--- /dev/null
+++ b/matlab/private/atanhee.m
@@ -0,0 +1,15 @@
+function y = atanhee(x, e2)
+%ATANHEE   atanh(e*x)/e
+%
+%   ATANHEE(X, E2) returns atanh(E*X)/E where E = SQRT(E2)
+%   E2 is a scalar; X can be any shape.
+
+  e = sqrt(abs(e2));
+  if (e2 > 0)
+    y = atanh(e * x) / e;
+  elseif (e2 < 0)
+    y = atan(e * x) / e;
+  else
+    y = x;
+  end
+end
diff --git a/matlab/private/cbrt.m b/matlab/private/cbrt.m
new file mode 100644
index 0000000..5c9405c
--- /dev/null
+++ b/matlab/private/cbrt.m
@@ -0,0 +1,9 @@
+function y = cbrt(x)
+%CBRT   The real cube root
+%
+%   CBRT(X) is the real cube root of X (assuming X is real).  X
+%   can be any shape.
+
+  y = abs(x).^(1/3);
+  y(x < 0) = -y(x < 0);
+end
diff --git a/matlab/private/cvmgt.m b/matlab/private/cvmgt.m
new file mode 100644
index 0000000..2eb12e5
--- /dev/null
+++ b/matlab/private/cvmgt.m
@@ -0,0 +1,23 @@
+function z = cvmgt(x, y, p)
+%CVMGT  Conditional merge of two vectors
+%
+%   Z = CVMGT(X, Y, P) return a vector Z whose elements are X if P is true
+%   and Y otherwise.  P, X, and Y should be the same shape except that X
+%   and Y may be scalars.  CVMGT stands for conditional vector merge true
+%   (an intrinsic function for the Cray fortran compiler).  It implements
+%   the C++ statement
+%
+%     Z = P ? X : Y;
+
+  z = zeros(size(p));
+  if isscalar(x)
+    z(p) = x;
+  else
+    z(p) = x(p);
+  end
+  if isscalar(y)
+    z(~p) = y;
+  else
+    z(~p) = y(~p);
+  end
+end
diff --git a/matlab/private/sumx.m b/matlab/private/sumx.m
new file mode 100644
index 0000000..d9b6118
--- /dev/null
+++ b/matlab/private/sumx.m
@@ -0,0 +1,14 @@
+function [s, t] = sumx(u, v)
+%SUM   Error free sum
+%
+%   [S, T] = SUMX(U, V) returns the rounded sum U + V in S and the error in
+%   T, such that S + T = U + V, exactly.  U and V can be any compatible
+%   shapes.
+
+  s = u + v;
+  up = s - v;
+  vpp = s - up;
+  up = up - u;
+  vpp = vpp -  v;
+  t = -(up + vpp);
+end
diff --git a/matlab/private/swap.m b/matlab/private/swap.m
new file mode 100644
index 0000000..e3b520f
--- /dev/null
+++ b/matlab/private/swap.m
@@ -0,0 +1,8 @@
+function [a, b] = swap(x, y)
+%SWAP  Swap two variables.
+%
+%   [A, B] = SWAP(X, Y) sets A to Y and B to X.
+
+  a = y;
+  b = x;
+end
diff --git a/matlab/tranmerc_fwd.m b/matlab/tranmerc_fwd.m
new file mode 100644
index 0000000..6ba3e90
--- /dev/null
+++ b/matlab/tranmerc_fwd.m
@@ -0,0 +1,170 @@
+function [x, y, gam, k] = tranmerc_fwd(lat0, lon0, lat, lon, ellipsoid)
+%TRANMERC_FWD  Forward transverse Mercator projection
+%
+%   [X, Y] = TRANMERC_FWD(LAT0, LON0, LAT, LON)
+%   [X, Y, GAM, K] = TRANMERC_FWD(LAT0, LON0, LAT, LON, ELLIPSOID)
+%
+%   performs the forward transverse Mercator projection of points (LAT,LON)
+%   to (X,Y) using (LAT0,LON0) as the center of projection.  These input
+%   arguments can be scalars or arrays of equal size.  The ELLIPSOID vector
+%   is of the form [a, e], where a is the equatorial radius in meters, e is
+%   the eccentricity.  If ellipsoid is omitted, the WGS84 ellipsoid (more
+%   precisely, the value returned by DEFAULTELLIPSOID) is used.  GEODPROJ
+%   defines the projection and gives the restrictions on the allowed ranges
+%   of the arguments.  The inverse projection is given by TRANMERC_INV.
+%
+%   GAM and K give metric properties of the projection at (LAT,LON); GAM is
+%   the meridian convergence at the point and K is the scale.
+%
+%   LAT0, LON0, LAT, LON, GAM are in degrees.  The projected coordinates X,
+%   Y are in meters (more precisely the units used for the equatorial
+%   radius).  K is dimensionless.
+%
+%   This implementation of the projection is based on the series method
+%   described in
+%
+%     C. F. F. Karney, Transverse Mercator with an accuracy of a few
+%     nanometers, J. Geodesy 85(8), 475-485 (Aug. 2011);
+%     Addenda: http://geographiclib.sf.net/tm-addenda.html
+%
+%   This extends the series given by Krueger (1912) to sixth order in the
+%   flattening.  This is a substantially better series than that used by
+%   the MATLAB mapping toolbox.  In particular the errors in the projection
+%   are less than 5 nanometers withing 3900 km of the central meridian (and
+%   less than 1 mm within 7600 km of the central meridian).  The mapping
+%   can be continued accurately over the poles to the opposite meridian.
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, TRANMERC_INV, GEODDISTANCE, DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  if nargin < 5, ellipsoid = defaultellipsoid; end
+  try
+    Z = lat0 + lon0 + lat + lon;
+    Z = zeros(size(Z));
+  catch err
+    error('lat0, lon0, lat, lon have incompatible sizes')
+  end
+  if length(ellipsoid(:)) ~= 2
+    error('ellipsoid must be a vector of size 2')
+  end
+
+  degree = pi/180;
+  maxpow = 6;
+
+  a = ellipsoid(1);
+  f = ecc2flat(ellipsoid(2));
+  e2 = f * (2 - f);
+  e2m = 1 - e2;
+  cc = sqrt(e2m) * exp(e2 * atanhee(1, e2));
+  n = f / (2 -f);
+  alp = alpf(n);
+  b1 = (1 - f) * (A1m1f(n) + 1);
+  a1 = b1 * a;
+
+  lon = AngDiff(AngNormalize(lon0), AngNormalize(lon));
+
+  latsign = 1 - 2 * (lat < 0);
+  lonsign = 1 - 2 * (lon < 0);
+  lon = lon .* lonsign;
+  lat = lat .* latsign;
+  backside = lon > 90;
+  latsign(backside & lat == 0) = -1;
+  lon(backside) = 180 - lon(backside);
+  phi = lat * degree;
+  lam = lon * degree;
+  c = max(0, cos(lam));
+  tau = tan(phi);
+  taup = taupf(tau, e2);
+  xip = atan2(taup, c);
+  etap = asinh(sin(lam) ./ hypot(taup, c));
+  gam = atan(tan(lam) .* taup ./ hypot(1, taup));
+  k = sqrt(e2m + e2 * cos(phi).^2) .* hypot(1, tau) ./ hypot(taup, c);
+  c = ~(lat ~= 90);
+  if any(c)
+    xip(c) = pi/2;
+    etap(c) = 0;
+    gam(c) = lam;
+    k = cc;
+  end
+  c0 = cos(2 * xip); ch0 = cosh(2 * etap);
+  s0 = sin(2 * xip); sh0 = sinh(2 * etap);
+  ar = 2 * c0 .* ch0; ai = -2 * s0 .* sh0;
+  j = maxpow;
+  xi0 = Z; yr0 = Z;
+  if mod(j, 2)
+    xi0 = xi0 + alp(j);
+    yr0 = yr0 + 2 * maxpow * alp(j);
+    j = j - 1;
+  end
+  xi1 = Z; eta0 = Z; eta1 = Z;
+  yi0 = Z; yr1 = Z; yi1 = Z;
+  for j = j : -2 : 1
+    xi1  = ar .* xi0 - ai .* eta0 - xi1 + alp(j);
+    eta1 = ai .* xi0 + ar .* eta0 - eta1;
+    yr1 = ar .* yr0 - ai .* yi0 - yr1 + 2 * j * alp(j);
+    yi1 = ai .* yr0 + ar .* yi0 - yi1;
+    xi0  = ar .* xi1 - ai .* eta1 - xi0 + alp(j-1);
+    eta0 = ai .* xi1 + ar .* eta1 - eta0;
+    yr0 = ar .* yr1 - ai .* yi1 - yr0 + 2 * (j-1) * alp(j-1);
+    yi0 = ai .* yr1 + ar .* yi1 - yi0;
+  end
+  ar = ar/2; ai = ai/2;
+  yr1 = 1 - yr1 + ar .* yr0 - ai .* yi0;
+  yi1 =   - yi1 + ai .* yr0 + ar .* yi0;
+  ar = s0 .* ch0; ai = c0 .* sh0;
+  xi  = xip  + ar .* xi0 - ai .* eta0;
+  eta = etap + ai .* xi0 + ar .* eta0;
+  gam = gam - atan2(yi1, yr1);
+  k = k .* (b1 * hypot(yr1, yi1));
+  gam = gam / degree;
+  xi(backside) = pi - xi(backside);
+  y = a1 * xi .* latsign;
+  x = a1 * eta .* lonsign;
+  gam(backside) = 180 - gam(backside);
+  gam = gam .* latsign .* lonsign;
+
+  if isscalar(lat0) && lat0 == 0
+    y0 = 0;
+  else
+    [sbet0, cbet0] = SinCosNorm((1-f) * sind(lat0), cosd(lat0));
+    y0 = a1 * (atan2(sbet0, cbet0) + ...
+               SinCosSeries(true, sbet0, cbet0, C1f(n)));
+  end
+  y = y - y0;
+end
+
+function alp = alpf(n)
+  alp = zeros(1,6);
+  nx = n^2;
+
+  alp(1) = n*(n*(n*(n*(n*(31564*n-66675)+34440)+47250)-100800)+ ...
+              75600)/151200;
+  alp(2) = nx*(n*(n*((863232-1983433*n)*n+748608)-1161216)+524160)/ ...
+           1935360;
+  nx = nx * n;
+  alp(3) = nx*(n*(n*(670412*n+406647)-533952)+184464)/725760;
+  nx = nx * n;
+  alp(4) = nx*(n*(6601661*n-7732800)+2230245)/7257600;
+  nx = nx * n;
+  alp(5) = (3438171-13675556*n)*nx/7983360;
+  nx = nx * n;
+  alp(6) = 212378941*nx/319334400;
+end
+
+function taup = taupf(tau, e2)
+  tau1 = hypot(1, tau);
+  sig = sinh( e2 * atanhee(tau ./ tau1, e2) );
+  taup = hypot(1, sig) .* tau - sig .* tau1;
+  overflow = 1/eps^2;
+  c = ~(abs(tau) < overflow);
+  taup(c) = tau(c);
+end
diff --git a/matlab/tranmerc_inv.m b/matlab/tranmerc_inv.m
new file mode 100644
index 0000000..b889d03
--- /dev/null
+++ b/matlab/tranmerc_inv.m
@@ -0,0 +1,185 @@
+function [lat, lon, gam, k] = tranmerc_inv(lat0, lon0, x, y, ellipsoid)
+%TRANMERC_INV  Inverse transverse Mercator projection
+%
+%   [LAT, LON] = TRANMERC_INV(LAT0, LON0, X, Y)
+%   [LAT, LON, GAM, K] = TRANMERC_INV(LAT0, LON0, X, Y, ELLIPSOID)
+%
+%   performs the inverse transverse Mercator projection of points (X,Y) to
+%   (LAT,LON) using (LAT0,LON0) as the center of projection.  These input
+%   arguments can be scalars or arrays of equal size.  The ELLIPSOID vector
+%   is of the form [a, e], where a is the equatorial radius in meters, e is
+%   the eccentricity.  If ellipsoid is omitted, the WGS84 ellipsoid (more
+%   precisely, the value returned by DEFAULTELLIPSOID) is used.  GEODPROJ
+%   defines the projection and gives the restrictions on the allowed ranges
+%   of the arguments.  The forward projection is given by TRANMERC_FWD.
+%
+%   GAM and K give metric properties of the projection at (LAT,LON); GAM is
+%   the meridian convergence at the point and K is the scale.
+%
+%   LAT0, LON0, LAT, LON, GAM are in degrees.  The projected coordinates X,
+%   Y are in meters (more precisely the units used for the equatorial
+%   radius).  K is dimensionless.
+%
+%   This implementation of the projection is based on the series method
+%   described in
+%
+%     C. F. F. Karney, Transverse Mercator with an accuracy of a few
+%     nanometers, J. Geodesy 85(8), 475-485 (Aug. 2011);
+%     Addenda: http://geographiclib.sf.net/tm-addenda.html
+%
+%   This extends the series given by Krueger (1912) to sixth order in the
+%   flattening.  This is a substantially better series than that used by
+%   the MATLAB mapping toolbox.  In particular the errors in the projection
+%   are less than 5 nanometers withing 3900 km of the central meridian (and
+%   less than 1 mm within 7600 km of the central meridian).  The mapping
+%   can be continued accurately over the poles to the opposite meridian.
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, TRANMERC_FWD, GEODRECKON, DEFAULTELLIPSOID.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  if nargin < 5, ellipsoid = defaultellipsoid; end
+  try
+    Z = lat0 + lon0 + x + y;
+    Z = zeros(size(Z));
+  catch err
+    error('lat0, lon0, x, y have incompatible sizes')
+  end
+  if length(ellipsoid(:)) ~= 2
+    error('ellipsoid must be a vector of size 2')
+  end
+
+  degree = pi/180;
+  maxpow = 6;
+
+  a = ellipsoid(1);
+  f = ecc2flat(ellipsoid(2));
+  e2 = f * (2 - f);
+  e2m = 1 - e2;
+  cc = sqrt(e2m) * exp(e2 * atanhee(1, e2));
+  n = f / (2 -f);
+  bet = betf(n);
+  b1 = (1 - f) * (A1m1f(n) + 1);
+  a1 = b1 * a;
+
+  if isscalar(lat0) && lat0 == 0
+    y0 = 0;
+  else
+    [sbet0, cbet0] = SinCosNorm((1-f) * sind(lat0), cosd(lat0));
+    y0 = a1 * (atan2(sbet0, cbet0) + ...
+               SinCosSeries(true, sbet0, cbet0, C1f(n)));
+  end
+  y = y + y0;
+
+  xi = y / a1;
+  eta = x / a1;
+  xisign = 1 - 2 * (xi < 0 );
+  etasign = 1 - 2 * (eta < 0 );
+  xi = xi .* xisign;
+  eta = eta .* etasign;
+  backside = xi > pi/2;
+  xi(backside) = pi - xi(backside);
+
+  c0 = cos(2 * xi); ch0 = cosh(2 * eta);
+  s0 = sin(2 * xi); sh0 = sinh(2 * eta);
+  ar = 2 * c0 .* ch0; ai = -2 * s0 .* sh0;
+  j = maxpow;
+  xip0 = Z; yr0 = Z;
+  if mod(j, 2)
+    xip0 = xip0 + bet(j);
+    yr0 = yr0 - 2 * maxpow * bet(j);
+    j = j - 1;
+  end
+  xip1 = Z; etap0 = Z; etap1 = Z;
+  yi0 = Z; yr1 = Z; yi1 = Z;
+  for j = j : -2 : 1
+    xip1  = ar .* xip0 - ai .* etap0 - xip1 - bet(j);
+    etap1 = ai .* xip0 + ar .* etap0 - etap1;
+    yr1 = ar .* yr0 - ai .* yi0 - yr1 - 2 * j * bet(j);
+    yi1 = ai .* yr0 + ar .* yi0 - yi1;
+    xip0  = ar .* xip1 - ai .* etap1 - xip0 - bet(j-1);
+    etap0 = ai .* xip1 + ar .* etap1 - etap0;
+    yr0 = ar .* yr1 - ai .* yi1 - yr0 - 2 * (j-1) * bet(j-1);
+    yi0 = ai .* yr1 + ar .* yi1 - yi0;
+  end
+  ar = ar/2; ai = ai/2;
+  yr1 = 1 - yr1 + ar .* yr0 - ai .* yi0;
+  yi1 =   - yi1 + ai .* yr0 + ar .* yi0;
+  ar = s0 .* ch0; ai = c0 .* sh0;
+  xip  = xi  + ar .* xip0 - ai .* etap0;
+  etap = eta + ai .* xip0 + ar .* etap0;
+  gam = atan2(yi1, yr1);
+  k = b1 ./ hypot(yr1, yi1);
+  s = sinh(etap);
+  c = max(0, cos(xip));
+  r = hypot(s, c);
+  lam = atan2(s, c);
+  taup = sin(xip)./r;
+  tau = tauf(taup, e2);
+  phi = atan(tau);
+  gam = gam + atan(tan(xip) .* tanh(etap));
+  c = r ~= 0;
+  k(c) = k(c) .* sqrt(e2m + e2 * cos(phi(c)).^2) .* ...
+         hypot(1, tau(c)) .* r(c);
+  c = ~c;
+  if any(c)
+    phi(c) = pi/2;
+    lam(c) = 0;
+    k(c) = k(c) * cc;
+  end
+  lat = phi / degree .* xisign;
+  lon = lam / degree;
+  lon(backside) = 180 - lon(backside);
+  lon = lon .* etasign;
+  lon = AngNormalize(lon + AngNormalize(lon0));
+  gam = gam/degree;
+  gam(backside) = 180 - gam(backside);
+  gam = gam .* xisign .* etasign;
+end
+
+function bet = betf(n)
+  bet = zeros(1,6);
+  nx = n^2;
+  bet(1) = n*(n*(n*(n*(n*(384796*n-382725)-6720)+932400)-1612800)+ ...
+              1209600)/2419200;
+  bet(2) = nx*(n*(n*((1695744-1118711*n)*n-1174656)+258048)+80640)/ ...
+           3870720;
+  nx = nx * n;
+  bet(3) = nx*(n*(n*(22276*n-16929)-15984)+12852)/362880;
+  nx = nx * n;
+  bet(4) = nx*((-830251*n-158400)*n+197865)/7257600;
+  nx = nx * n;
+  bet(5) = (453717-435388*n)*nx/15966720;
+  nx = nx * n;
+  bet(6) = 20648693*nx/638668800;
+end
+
+function tau = tauf(taup, e2)
+  overflow = 1/eps^2;
+  tol = 0.1 * sqrt(eps);
+  numit = 5;
+  e2m = 1 - e2;
+  tau = taup / e2m;
+  stol = tol * max(1, abs(taup));
+  g = ~(abs(taup) < overflow);
+  tau(g) = taup(g);
+  g = ~g;
+  for i = 1 : numit
+    if ~any(g), break, end
+    tau1 = hypot(1, tau);
+    sig = sinh(e2 * atanhee( tau ./ tau1, e2 ) );
+    taupa = hypot(1, sig) .* tau - sig .* tau1;
+    dtau = (taup - taupa) .* (1 + e2m .* tau.^2) ./ ...
+           (e2m * tau1 .* hypot(1, taupa));
+    tau(g) = tau(g) + dtau(g);
+    g = g & abs(dtau) >= stol;
+  end
+end
diff --git a/matlab/utm_fwd.m b/matlab/utm_fwd.m
new file mode 100644
index 0000000..cc835f8
--- /dev/null
+++ b/matlab/utm_fwd.m
@@ -0,0 +1,50 @@
+function [x, y, gam, k] = utm_fwd(zone, northp, lat, lon)
+%UTM_FWD  Forward UTM projection
+%
+%   [X, Y] = UTM_FWD(ZONE, NORTHP, LAT, LON)
+%   [X, Y, GAM, K] = UTM_FWD(ZONE, NORTHP, LAT, LON)
+%
+%   performs the forward universal transverse Mercator projection of points
+%   (LAT,LON) to (X,Y) using ZONE and NORTHP.  LAT and LON can be scalars
+%   or arrays of equal size.  ZONE should be an integer in [1,60] and
+%   NORTHP is a logical indicating whether the transformation should use
+%   the false northing for the northern (NORTHP = true) or southern (NORTHP
+%   = false) hemisphere.  The inverse projection is given by UTM_INV.
+%
+%   GAM and K give metric properties of the projection at (LAT,LON); GAM is
+%   the meridian convergence at the point and K is the scale.
+%
+%   LAT, LON, GAM are in degrees.  The projected coordinates X, Y are in
+%   meters.  K is dimensionless.
+%
+%   This implementation for the UTM projection is based on the series
+%   method described in
+%
+%     C. F. F. Karney, Transverse Mercator with an accuracy of a few
+%     nanometers, J. Geodesy 85(8), 475-485 (Aug. 2011);
+%     Addenda: http://geographiclib.sf.net/tm-addenda.html
+%
+%   This extends the series given by Krueger (1912) to sixth order in the
+%   flattening.  This is a substantially better series than that used by
+%   the MATLAB mapping toolbox.  In particular the errors in the projection
+%   are less than 5 nanometers withing 3900 km of the central meridian (and
+%   less than 1 mm within 7600 km of the central meridian).  The mapping
+%   can be continued accurately over the poles to the opposite meridian.
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, UTM_INV, TRANMERC_FWD.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  lon0 = -183 + 6 * zone; lat0 = 0;
+  fe = 500e3; fn = cvmgt(0,10000e3,logical(northp)); k0 = 0.9996;
+  [x, y, gam, k] = tranmerc_fwd(lat0, lon0, lat, lon);
+  x = x * k0 + fe; y = y * k0 + fn; k = k * k0;
+end
diff --git a/matlab/utm_inv.m b/matlab/utm_inv.m
new file mode 100644
index 0000000..23ad351
--- /dev/null
+++ b/matlab/utm_inv.m
@@ -0,0 +1,51 @@
+function [lat, lon, gam, k] = utm_inv(zone, northp, x, y)
+%UTM_INV  Forward transverse Mercator projection
+%
+%   [LAT, LON] = UTM_INV(ZONE, NORTHP, X, Y)
+%   [LAT, LON, GAM, K] = UTM_INV(ZONE, NORTHP, X, Y)
+%
+%   performs the inverse universal transverse Mercator projection of points
+%   (X,Y) to (LAT,LON) using ZONE and NORTHP.  X and Y can be scalars or
+%   arrays of equal size.  ZONE should be an integer in [1,60] and NORTHP
+%   is a logical indicating whether the transformation should use the false
+%   northing for the northern (NORTHP = true) or southern (NORTHP = false)
+%   hemisphere.  The forward projection is given by UTM_FWD.
+%
+%   GAM and K give metric properties of the projection at (LAT,LON); GAM is
+%   the meridian convergence at the point and K is the scale.
+%
+%   LAT, LON, GAM are in degrees.  The projected coordinates X, Y are in
+%   meters.  K is dimensionless.
+%
+%   This implementation for the UTM projection is based on the series
+%   method described in
+%
+%     C. F. F. Karney, Transverse Mercator with an accuracy of a few
+%     nanometers, J. Geodesy 85(8), 475-485 (Aug. 2011);
+%     Addenda: http://geographiclib.sf.net/tm-addenda.html
+%
+%   This extends the series given by Krueger (1912) to sixth order in the
+%   flattening.  This is a substantially better series than that used by
+%   the MATLAB mapping toolbox.  In particular the errors in the projection
+%   are less than 5 nanometers withing 3900 km of the central meridian (and
+%   less than 1 mm within 7600 km of the central meridian).  The mapping
+%   can be continued accurately over the poles to the opposite meridian.
+%
+%   This routine depends on the MATLAB File Exchange package "Geodesics on
+%   an ellipsoid of revolution":
+%
+%     http://www.mathworks.com/matlabcentral/fileexchange/39108
+%
+%   See also GEODPROJ, UTM_FWD, TRANMERC_INV.
+
+% Copyright (c) Charles Karney (2012) <charles at karney.com>.
+%
+% This file was distributed with GeographicLib 1.29.
+
+  if nargin < 4, error('Too few input arguments'), end
+  lon0 = -183 + 6 * zone; lat0 = 0;
+  fe = 500e3; fn = cvmgt(0, 10000e3, logical(northp)); k0 = 0.9996;
+  x = (x - fe) / k0; y = (y - fn) / k0;
+  [lat, lon, gam, k] = tranmerc_inv(lat0, lon0, x, y);
+  k = k * k0;
+end
diff --git a/matlab/utmupsforward.cpp b/matlab/utmupsforward.cpp
index 1a78332..b76905e 100644
--- a/matlab/utmupsforward.cpp
+++ b/matlab/utmupsforward.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic utmupsforward.cpp
 
-// $Id: 53830253ba4e2c0a9e1d904d0649dffecb8ce3b1 $
-
 #include <GeographicLib/UTMUPS.hpp>
 #include <mex.h>
 
@@ -54,7 +52,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
       mexErrMsgTxt("setzone outside the legal range.");
   }
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   double* lat = mxGetPr(prhs[0]);
   double* lon = lat + m;
@@ -74,7 +72,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     k = gamma + m;
   }
 
-  for (int i = 0; i < m; ++i) {
+  for (mwIndex i = 0; i < m; ++i) {
     int ZONE;
     bool HEMI;
     try {
diff --git a/matlab/utmupsforward.m b/matlab/utmupsforward.m
index 98cee98..874d4ab 100644
--- a/matlab/utmupsforward.m
+++ b/matlab/utmupsforward.m
@@ -1,4 +1,4 @@
-function [utmups, scale] = utmupsforward(latlong, setzone)
+function utmupsforward(~, ~)
 %utmupsforward  Convert geographic coordinates to UTM/UPS
 %
 %   [utmups, scale] = utmupsforward(latlong)
@@ -35,8 +35,6 @@ end
 % utmupsforward.m
 % Matlab .m file for geographic to UTM/UPS conversions
 %
-% Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+% Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
 % under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: 8160e1e84c6c5fb707b89cc429562926805bc3f3 $
diff --git a/matlab/utmupsreverse.cpp b/matlab/utmupsreverse.cpp
index 62f9f3a..56d3643 100644
--- a/matlab/utmupsreverse.cpp
+++ b/matlab/utmupsreverse.cpp
@@ -15,8 +15,6 @@
 // mex -I../include -L../windows/Release
 //    -lGeographic utmupsreverse.cpp
 
-// $Id: 097c8ccdb535c826583b1d640d08e79bd1ad6c38 $
-
 #include <GeographicLib/UTMUPS.hpp>
 #include <mex.h>
 
@@ -37,7 +35,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
   if (mxGetN(prhs[0]) != 4)
     mexErrMsgTxt("utmups coordinates must be M x 4 matrix.");
 
-  int m = mxGetM(prhs[0]);
+  mwSize m = mxGetM(prhs[0]);
 
   double* x = mxGetPr(prhs[0]);
   double* y = x + m;
@@ -57,7 +55,7 @@ void mexFunction( int nlhs, mxArray* plhs[],
     k = gamma + m;
   }
 
-  for (int i = 0; i < m; ++i) {
+  for (mwIndex i = 0; i < m; ++i) {
     try {
       int ZONE = int(zone[i]);
       if (double(ZONE) != zone[i])
diff --git a/matlab/utmupsreverse.m b/matlab/utmupsreverse.m
index 1852277..4e9b52f 100644
--- a/matlab/utmupsreverse.m
+++ b/matlab/utmupsreverse.m
@@ -1,4 +1,4 @@
-function [latlong, scale] = utmupsreverse(utmups)
+function utmupsreverse(~)
 %utmupsreverse  Convert UTM/UPS coordinates to geographic
 %
 %   [latlong, scale] = utmupsreverse(utmups)
@@ -28,8 +28,6 @@ end
 % utmupsreverse.m
 % Matlab .m file for UTM/UPS to geographic conversions
 %
-% Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and
-% licensed under the MIT/X11 License.  For more information, see
+% Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
+% under the MIT/X11 License.  For more information, see
 % http://geographiclib.sourceforge.net/
-%
-% $Id: 98449c5ba8fd3017faab27c68f942a28096fa848 $
diff --git a/maxima/Makefile.mk b/maxima/Makefile.mk
index 17ed6b5..dba8c12 100644
--- a/maxima/Makefile.mk
+++ b/maxima/Makefile.mk
@@ -1,5 +1,3 @@
-# $Id: 51c7fc1cd5e30c0da414d752529eca09a8f036b9 $
-
 MAXIMA = tm ellint tmseries geod
 MAXIMASOURCES = $(addsuffix .mac,$(MAXIMA))
 
diff --git a/maxima/ellint.mac b/maxima/ellint.mac
index 6f611e1..0733713 100644
--- a/maxima/ellint.mac
+++ b/maxima/ellint.mac
@@ -1,88 +1,159 @@
 /*
-
-Written by Charles Karney <charles at karney.com>
-http://geographiclib.sourceforge.net/
-
-$Id: 23c6d3303abe67aa05500f9f794547c8f3f122a5 $
-
-*/
-
-/* Implementation of methods given in
-
+Implementation of methods given in
 B. C. Carlson
 Computation of elliptic integrals
 Numerical Algorithms 10, 13-26 (1995)
 
+Copyright (c) Charles Karney (2009-2013) <charles at karney.com> and
+licensed under the MIT/X11 License.  For more information, see
+http://geographiclib.sourceforge.net/
 */
 
 /* fpprec:120$  Should be set outside */
 etol:0.1b0^fpprec$ /* For Carlson */
-ca:sqrt(etol)$  /* For Bulirsch */
-eps:0.1b0^fpprec$ /* For eirx */
+tolRF : (3 * etol)^(1/8b0)$
+tolRD : (etol/5)^(1/8b0)$
+tolRG0 : 2.7b0 * sqrt(etol)$
+tolJAC:sqrt(etol)$  /* For Bulirsch */
 pi:bfloat(%pi)$
-ratprint:false$
-rf(x,y,z) := block(
-  [a0:(x+y+z)/3, q,x0:x,y0:y,z0:z,an,ln,xx,yy,zz,n,e2,e3],
-  q:(3*etol)^(-1/6)*max(abs(a0-x),abs(a0-y),abs(a0-z)),
+atan2x(y,x) := -atan2(-y, x)$  /* fix atan2(0b0,-1b0) = -pi */
+rf(x,y,z) := block([a0:(x+y+z)/3, q,x0:x,y0:y,z0:z,
+  an,ln,xx,yy,zz,e2,e3,mul:1b0],
+  q:max(abs(a0-x),abs(a0-y),abs(a0-z))/tolRF,
   an:a0,
-  n:0,
-  while q >= abs(an) do (
-    n:n+1,
+  while q >= mul * abs(an) do (
     ln:sqrt(x0)*sqrt(y0)+sqrt(y0)*sqrt(z0)+sqrt(z0)*sqrt(x0),
     an:(an+ln)/4,
     x0:(x0+ln)/4,
     y0:(y0+ln)/4,
     z0:(z0+ln)/4,
-    q:q/4),
-  xx:(a0-x)/(4^n*an),
-  yy:(a0-y)/(4^n*an),
+    mul:mul*4),
+  xx:(a0-x)/(mul*an),
+  yy:(a0-y)/(mul*an),
   zz:-xx-yy,
   e2:xx*yy-zz^2,
   e3:xx*yy*zz,
-  (1-e2/10+e3/14+e2^2/24-3*e2*e3/44) / sqrt(an))$
-rd(x,y,z) := block(
-  [a0:(x+y+3*z)/5, q,x0:x,y0:y,z0:z,an,ln,xx,yy,zz,n,e2,e3,e4,e5,s],
-  q:(etol/4)^(-1/6)*max(abs(a0-x),abs(a0-y),abs(a0-z)),
+  (e3 * (6930 * e3 + e2 * (15015 * e2 - 16380) + 17160) +
+    e2 * ((10010 - 5775 * e2) * e2 - 24024) + 240240) /
+  (240240 * sqrt(an)))$
+rd(x,y,z) := block([a0:(x+y+3*z)/5, q,x0:x,y0:y,z0:z,
+  an,ln,xx,yy,zz,e2,e3,e4,e5,s:0b0,mul:1b0],
+  q:max(abs(a0-x),abs(a0-y),abs(a0-z))/tolRD,
   an:a0,
-  n:0,
-  s:0,
-  while q >= abs(an) do (
+  while q >= mul*abs(an) do (
     ln:sqrt(x0)*sqrt(y0)+sqrt(y0)*sqrt(z0)+sqrt(z0)*sqrt(x0),
-    s:s+1/(4^n*sqrt(z0)*(z0+ln)),
-    n:n+1,
+    s:s+1/(mul*sqrt(z0)*(z0+ln)),
     an:(an+ln)/4,
     x0:(x0+ln)/4,
     y0:(y0+ln)/4,
     z0:(z0+ln)/4,
-    q:q/4),
-  xx:(a0-x)/(4^n*an),
-  yy:(a0-y)/(4^n*an),
+    mul:4*mul),
+  xx:(a0-x)/(mul*an),
+  yy:(a0-y)/(mul*an),
   zz:-(xx+yy)/3,
   e2:xx*yy-6*zz^2,
   e3:(3*xx*yy-8*zz^2)*zz,
   e4:3*(xx*yy-zz^2)*zz^2,
   e5:xx*yy*zz^3,
-  (1-3*e2/14+e3/6+9*e2^2/88-3*e4/22-9*e2*e3/52+3*e5/26)/(4^n*an*sqrt(an))
-  +3*s)$
+  ((471240 - 540540 * e2) * e5 +
+    (612612 * e2 - 540540 * e3 - 556920) * e4 +
+    e3 * (306306 * e3 + e2 * (675675 * e2 - 706860) + 680680) +
+    e2 * ((417690 - 255255 * e2) * e2 - 875160) + 4084080) /
+  (4084080 * mul * an * sqrt(an)) + 3 * s)$
 
 /* R_G(x,y,0) */
-rg0(x,y) := block(
-  [x0:sqrt(x),y0:sqrt(y),xn,yn,t,s,n],
+rg0(x,y) := block([x0:sqrt(max(x,y)),y0:sqrt(min(x,y)),xn,yn,
+  t,s:0b0,mul:0.25b0],
   xn:x0,
   yn:y0,
-  n:0,
-  s:0,
-  while abs(xn-yn) >= 2.7b0 * sqrt(etol) * abs(xn) do (
+  while abs(xn-yn) > tolRG0 * xn do (
     t:(xn+yn)/2,
     yn:sqrt(xn*yn),
     xn:t,
-    n:n+1,
-    s:s+(xn-yn)^2*2^(n-2)),
-   ((x0+y0)^2/4 - s)*pi/(2*(xn+yn)) )$
+    mul : 2*mul,
+    s:s+mul*(xn-yn)^2),
+  ((x0+y0)^2/4 - s)*pi/(2*(xn+yn)) )$
+
+rg(x, y, z) := (
+  if z = 0b0 then (z:y, y:0b0),
+  (z * rf(x, y, z) - (x-z) * (y-z) * rd(x, y, z) / 3
+    + sqrt(x * y / z)) / 2)$
+
+rj(x, y, z, p) := block([A0:(x + y + z + 2*p)/5,An,delta:(p-x) * (p-y) * (p-z),
+  Q,x0:x,y0:y,z0:z,p0:p,mul:1b0,mul3:1b0,s:0b0,X,Y,Z,P,E2,E3,E4,E5],
+  An : A0,
+  Q : max(abs(A0-x), abs(A0-y), abs(A0-z), abs(A0-p)) / tolRD,
+  while Q >= mul * abs(An) do block([lam,d0,e0],
+    lam : sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0),
+    d0 : (sqrt(p0)+sqrt(x0)) * (sqrt(p0)+sqrt(y0)) * (sqrt(p0)+sqrt(z0)),
+    e0 : delta/(mul3 * d0^2),
+    s : s + rc(1b0, 1b0 + e0)/(mul * d0),
+    An : (An + lam)/4,
+    x0 : (x0 + lam)/4,
+    y0 : (y0 + lam)/4,
+    z0 : (z0 + lam)/4,
+    p0 : (p0 + lam)/4,
+    mul : 4*mul,
+    mul3 : 64*mul3),
+  X : (A0 - x) / (mul * An),
+  Y : (A0 - y) / (mul * An),
+  Z : (A0 - z) / (mul * An),
+  P : -(X + Y + Z) / 2,
+  E2 : X*Y + X*Z + Y*Z - 3*P*P,
+  E3 : X*Y*Z + 2*P * (E2 + 2*P*P),
+  E4 : (2*X*Y*Z + P * (E2 + 3*P*P)) * P,
+  E5 : X*Y*Z*P*P,
+  ((471240 - 540540 * E2) * E5 +
+    (612612 * E2 - 540540 * E3 - 556920) * E4 +
+    E3 * (306306 * E3 + E2 * (675675 * E2 - 706860) + 680680) +
+    E2 * ((417690 - 255255 * E2) * E2 - 875160) + 4084080) /
+  (4084080 * mul * An * sqrt(An)) + 6 * s)$
+
+rd(x, y, z) := block([A0:(x + y + 3*z)/5,An,Q,x0:x,y0:y,z0:z,
+  mul:1b0,s:0b0,X,Y,Z,E2,E3,E4,E5],
+  An : A0,
+  Q : max(abs(A0-x), abs(A0-y), abs(A0-z)) / tolRD,
+  while Q >= mul * abs(An) do block([lam],
+    lam : sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0),
+    s : s + 1/(mul * sqrt(z0) * (z0 + lam)),
+    An : (An + lam)/4,
+    x0 : (x0 + lam)/4,
+    y0 : (y0 + lam)/4,
+    z0 : (z0 + lam)/4,
+    mul : 4*mul),
+  X : (A0 - x) / (mul * An),
+  Y : (A0 - y) / (mul * An),
+  Z : -(X + Y) / 3,
+  E2 : X*Y - 6*Z*Z,
+  E3 : (3*X*Y - 8*Z*Z)*Z,
+  E4 : 3 * (X*Y - Z*Z) * Z*Z,
+  E5 : X*Y*Z*Z*Z,
+  ((471240 - 540540 * E2) * E5 +
+    (612612 * E2 - 540540 * E3 - 556920) * E4 +
+    E3 * (306306 * E3 + E2 * (675675 * E2 - 706860) + 680680) +
+    E2 * ((417690 - 255255 * E2) * E2 - 875160) + 4084080) /
+  (4084080 * mul * An * sqrt(An)) + 3 * s)$
+
+rc(x, y):=if x < y then atan(sqrt((y - x) / x)) / sqrt(y - x)
+else ( if x = y and y > 0b0 then 1 / sqrt(y) else
+  atanh( if y > 0b0 then sqrt((x - y) / x)
+    else sqrt(x / (x - y)) ) / sqrt(x - y) )$
 
 /* k^2 = m */
-ec(m):=2*rg0(1b0-m,1b0)$
-kc(m):=rf(0b0,1b0-m,1b0)$
+ec(k2):=2*rg0(1b0-k2,1b0)$
+kc(k2):=rf(0b0,1b0-k2,1b0)$
+dc(k2):=rd(0b0,1b0-k2,1b0)/3$
+pic(k2,alpha2):=if alpha2 # 0b0 then
+kc(k2)+alpha2*rj(0b0,1b0-k2,1b0,1b0-alpha2)/3
+else kc(k2)$
+gc(k2,alpha2):=if alpha2 # 0b0 then (if k2 # 1b0 then
+kc(k2) + (alpha2-k2)*rj(0b0,1b0-k2,1b0,1b0-alpha2)/3
+else rc(1b0,1b0-alpha2))
+else ec(k2)$
+hc(k2,alpha2):=if alpha2 # 0b0 then (if k2 # 1b0 then
+kc(k2) - (1b0-alpha2)*rj(0b0,1b0-k2,1b0,1b0-alpha2)/3
+else rc(1b0,1b0-alpha2))
+else kc(k2) - dc(k2)$
 
 /* Implementation of methods given in
 
@@ -107,13 +178,13 @@ sncndn(x,mc):=block([bo, a, b, c, d, l, sn, cn, dn, m, n],
       m[i]:a,
       n[i]:mc:sqrt(mc),
       c:(a+mc)/2,
-      if abs(a-mc)<=ca*a then return(false),
+      if abs(a-mc)<=tolJAC*a then return(false),
       mc:a*mc,
       a:c
       ),
     x:c*x,
     sn:sin(x),
-    cn:sin(pi/2-x),
+    cn:cos(x),
     if sn#0b0 then (
       a:cn/sn,
       c:a*c,
@@ -149,11 +220,62 @@ sncndn(x,mc):=block([bo, a, b, c, d, l, sn, cn, dn, m, n],
   [sn,cn,dn]
   )$
 
+Delta(sn, k2):=sqrt(1 - k2 * sn*sn)$
+
 /* Versions of incomplete functions in terms of Jacobi elliptic function
-with u = am(phi) real and in [0,K(m)] */
-eirx(sn,cn,dn,m,ec):=block([t],
-  t:if abs(sn) < eps then abs(sn) else
-  (rf((cn/sn)^2,(dn/sn)^2,1/sn^2)-m/3b0*rd((cn/sn)^2,(dn/sn)^2,1/sn^2)),
-  if cn < 0 then t:2*ec - t,
-  if sn < 0 then t:-t,
-  t)$
+with u = am(phi) real and in [0,K(k2)] */
+
+eirx(sn,cn,dn,k2,ec):=block([t,cn2:cn*cn,dn2:dn*dn,sn2:sn*sn,ei,kp2:1b0-k2],
+  ei : (if  k2 <= 0b0 then
+    rf(cn2, dn2, 1b0) - k2 * sn2 * rd(cn2, dn2, 1b0) / 3 else
+    (if kp2 >= 0b0 then
+      kp2 * rf(cn2, dn2, 1b0) +
+      k2 * kp2 * sn2 * rd(cn2, 1b0, dn2) / 3 +
+      k2 * abs(cn) / dn else
+      - kp2 * sn2 * rd(dn2, 1b0, cn2) / 3 + dn / abs(cn) ) ),
+  ei : ei * abs(sn),
+  if cn < 0b0 then ei : 2 * ec - ei,
+  if sn < 0 then ei : -ei,
+  ei)$
+
+dirx(sn, cn, dn, k2, dc):=block(
+  [di:abs(sn) * sn*sn * rd(cn*cn, dn*dn, 1b0) / 3],
+  if cn < 0b0 then di : 2 * dc - di,
+  if sn < 0b0 then di : -di,
+  di)$
+
+hirx(sn, cn, dn, k2, alpha2, hc):=block(
+  [cn2 : cn*cn, dn2 : dn*dn, sn2 : sn*sn, hi, alphap2:1b0-alpha2],
+  hi : abs(sn) * (rf(cn2, dn2, 1b0) -
+    alphap2 * sn2 *
+    rj(cn2, dn2, 1b0, cn2 + alphap2 * sn2) / 3),
+  if cn < 0 then hi : 2 * hc - hi,
+  if sn < 0 then hi : -hi,
+  hi)$
+
+deltae(sn, cn, dn, k2, ec):=(
+  if cn < 0 then (cn : -cn, sn : -sn),
+  eirx(sn, cn, dn, k2, ec) * (pi/2) / ec - atan2x(sn, cn))$
+deltad(sn, cn, dn, k2, dc):=(
+  if cn < 0 then (cn : -cn, sn : -sn),
+  dirx(sn, cn, dn, k2, ec) * (pi/2) / dc - atan2x(sn, cn))$
+deltah(sn, cn, dn, k2, alpha2, hc):=(
+  if cn < 0 then (cn : -cn, sn : -sn),
+  hirx(sn, cn, dn, k2, alpha2, hc) * (pi/2) / hc - atan2x(sn, cn))$
+
+einv(x, k2, ec):=block(
+  [n : floor(x / (2 * ec) + 0.5b0), phi, eps : k2/(sqrt(1b0-k2) + 1b0)^2,
+  err:1b0],
+  x : x - 2 * ec * n,
+  phi : pi * x / (2 * ec),
+  phi : phi - eps * sin(2 * phi) / 2,
+  while abs(err) > tolJAC do block([sn:sin(phi), cn:cos(phi), dn],
+    dn : Delta(sn, k2),
+    err : (eirx(sn, cn, dn, k2, ec) - x)/dn,
+    phi : phi - err),
+  n * pi + phi)$
+
+deltaeinv(stau, ctau, k2, ec) := block([tau],
+  if ctau < 0 then (ctau : -ctau, stau : -stau),
+  tau : atan2x(stau, ctau),
+  einv(tau * ec / (pi/2), k2, ec) - tau)$
diff --git a/maxima/geod.mac b/maxima/geod.mac
index 3a7d406..48bc682 100644
--- a/maxima/geod.mac
+++ b/maxima/geod.mac
@@ -1,22 +1,16 @@
 /*
+Compute the series expansions for the ellipsoidal geodesic problem.
 
-Compute the series expansions for the spheroidal geodesic problem.
-
-Written by Charles Karney <charles at karney.com>
+Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and
+licensed under the MIT/X11 License.  For more information, see
 http://geographiclib.sourceforge.net/
 
-$Id: 35d5f547992b5bd4e6a53ef7060f6fbfc23b2e25 $
-
 References:
 
    Charles F. F. Karney,
-   Geodesics on an ellipsoid of revolution, Feb. 2011.
-   preprint http://arxiv.org/abs/1102.1215
-   resource page http://geographiclib.sf.net/geod.html
-
-   Charles F. F. Karney,
-   Algorithms for geodesics, Sept. 2011.
-   preprint http://arxiv.org/abs/1109.4448
+   Algorithms for geodesics, J. Geodesy 87, 43-55 (2013),
+   http://dx.doi.org/10.1007/s00190-012-0578-z
+   Addenda: http://geographiclib.sf.net/geod-addenda.html
 
 There are 4 sections in this file
 
@@ -26,11 +20,14 @@ There are 4 sections in this file
 (4) Calls to the above.
 
 Edit the section at the end, to modify what is done.  As distributed
-this code computes the 8th order series.  This takes less that 10 secs.
+this code computes the 8th order series.  This takes about 10 secs.  If
+you want to compute accurate geodesics using geodesic.mac, then you need
+alse to uncomment the last line of this file so that the series get
+saved as geodNN.lsp.
+
 To run the code, start Maxima and enter
 
   load("geod.mac")$
-
 */
 
 /* EXPANSIONS FOR INTEGRALS */
@@ -195,7 +192,10 @@ as a series
 
     sum(C4[l] * cos((2*l+1)*sigma), l, 0, maxpow-1) )
 
-valid for ep2 and k2 small.
+valid for ep2 and k2 small.  It is convenient to write k2 = 4 * eps /
+(1 - eps)^2 and ep2 = 4 * n / (1 - n)^2 and to expand in eps and n.
+This procedure leads to a series which converges even for very
+eccentric ellipsoids.
 
 */
 
@@ -208,7 +208,8 @@ computeI4(maxpow):=block([int,t,intexp,area, x,ep2,k2],
     tf(k2*sin(sigma)^2)=subst([x=k2*sin(sigma)^2],t)],
     int),
   int:subst([abs(sin(sigma))=sin(sigma)],int),
-  intexp:jtaylor(int,ep2,k2,maxpow),
+  int:subst([k2=4*eps/(1-eps)^2,ep2=4*n/(1-n)^2],int),
+  intexp:jtaylor(int,n,eps,maxpow),
   area:trigreduce(integrate(intexp,sigma)),
   area:expand(area-subst(sigma=%pi/2,area)),
   for i:0 thru maxpow do C4[i]:coeff(area,cos((2*i+1)*sigma)),
@@ -229,21 +230,21 @@ code.  STATIC_ASSERT is a macro to cause a compile-time error if the
 assertion is false.  */
 
 codeA1(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The scale factor A1-1 = mean value of I1-1
+  print("  // The scale factor A1-1 = mean value of (d/dsigma)I1 - 1
   Math::real Geodesic::A1m1f(real eps) throw() {
     real
-      eps2 = sq(eps),
+      eps2 = Math::sq(eps),
       t;
-    switch (nA1/2) {"),
+    switch (nA1_/2) {"),
   for n:0 thru entier(maxpow/2) do block([
     q:horner(ataylor(subst([eps=sqrt(eps2)],A1*(1-eps)-1),eps2,n)),
-    linel:600],
+    linel:1200],
     print(concat(tab2,"case ",string(n),":")),
     print(concat(tab3,"t = ",string(q),";")),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nA1 >= ",string(0),
-      " && nA1 <= ",string(maxpow),", \"Bad value of nA1\");")),
+  print(concat(tab3,"STATIC_ASSERT(nA1_ >= ",string(0),
+      " && nA1_ <= ",string(maxpow),", \"Bad value of nA1_\");")),
   print(concat(tab3,"t = 0;")),
   print("    }
     return (t + eps) / (1 - eps);
@@ -254,20 +255,20 @@ codeC1(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C1[l] in the Fourier expansion of B1
   void Geodesic::C1f(real eps, real c[]) throw() {
     real
-      eps2 = sq(eps),
+      eps2 = Math::sq(eps),
       d = eps;
-    switch (nC1) {"),
+    switch (nC1_) {"),
   for n:0 thru maxpow do (
     print(concat(tab2,"case ",string(n),":")),
     for m:1 thru n do block([q:d*horner(
         subst([eps=sqrt(eps2)],ataylor(C1[m],eps,n)/eps^m)),
-      linel:600],
+      linel:1200],
       if m>1 then print(concat(tab3,"d *= eps;")),
       print(concat(tab3,"c[",string(m),"] = ",string(q),";"))),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC1 >= ",string(0),
-      " && nC1 <= ",string(maxpow),", \"Bad value of nC1\");")),
+  print(concat(tab3,"STATIC_ASSERT(nC1_ >= ",string(0),
+      " && nC1_ <= ",string(maxpow),", \"Bad value of nC1_\");")),
   print("    }
   }"),
 'done)$
@@ -276,40 +277,40 @@ codeC1p(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C1p[l] in the Fourier expansion of B1p
   void Geodesic::C1pf(real eps, real c[]) throw() {
     real
-      eps2 = sq(eps),
+      eps2 = Math::sq(eps),
       d = eps;
-    switch (nC1p) {"),
+    switch (nC1p_) {"),
   for n:0 thru maxpow do (
     print(concat(tab2,"case ",string(n),":")),
     for m:1 thru n do block([q:d*horner(
         subst([eps=sqrt(eps2)],ataylor(C1p[m],eps,n)/eps^m)),
-      linel:600],
+      linel:1200],
       if m>1 then print(concat(tab3,"d *= eps;")),
       print(concat(tab3,"c[",string(m),"] = ",string(q),";"))),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC1p >= ",string(0),
-      " && nC1p <= ",string(maxpow),", \"Bad value of nC1p\");")),
+  print(concat(tab3,"STATIC_ASSERT(nC1p_ >= ",string(0),
+      " && nC1p_ <= ",string(maxpow),", \"Bad value of nC1p_\");")),
   print("    }
   }"),
 'done)$
 
 codeA2(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The scale factor A2-1 = mean value of I2-1
+  print("  // The scale factor A2-1 = mean value of (d/dsigma)I2 - 1
   Math::real Geodesic::A2m1f(real eps) throw() {
     real
-      eps2 = sq(eps),
+      eps2 = Math::sq(eps),
       t;
-    switch (nA2/2) {"),
+    switch (nA2_/2) {"),
   for n:0 thru entier(maxpow/2) do block([
     q:horner(ataylor(subst([eps=sqrt(eps2)],A2/(1-eps)-1),eps2,n)),
-    linel:600],
+    linel:1200],
     print(concat(tab2,"case ",string(n),":")),
     print(concat(tab3,"t = ",string(q),";")),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nA2 >= ",string(0),
-      " && nA2 <= ",string(maxpow),", \"Bad value of nA2\");")),
+  print(concat(tab3,"STATIC_ASSERT(nA2_ >= ",string(0),
+      " && nA2_ <= ",string(maxpow),", \"Bad value of nA2_\");")),
   print(concat(tab3,"t = 0;")),
   print("    }
     return t * (1 - eps) - eps;
@@ -320,40 +321,40 @@ codeC2(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C2[l] in the Fourier expansion of B2
   void Geodesic::C2f(real eps, real c[]) throw() {
     real
-      eps2 = sq(eps),
+      eps2 = Math::sq(eps),
       d = eps;
-    switch (nC2) {"),
+    switch (nC2_) {"),
   for n:0 thru maxpow do (
     print(concat(tab2,"case ",string(n),":")),
     for m:1 thru n do block([q:d*horner(
         subst([eps=sqrt(eps2)],ataylor(C2[m],eps,n)/eps^m)),
-      linel:600],
+      linel:1200],
       if m>1 then print(concat(tab3,"d *= eps;")),
       print(concat(tab3,"c[",string(m),"] = ",string(q),";"))),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC2 >= ",string(0),
-      " && nC2 <= ",string(maxpow),", \"Bad value of nC2\");")),
+  print(concat(tab3,"STATIC_ASSERT(nC2_ >= ",string(0),
+      " && nC2_ <= ",string(maxpow),", \"Bad value of nC2_\");")),
   print("    }
   }"),
 'done)$
 
 codeA3(maxpow):=block([tab2:"    ",tab3:"      "],
-  print("  // The scale factor A3 = mean value of I3
+  print("  // The scale factor A3 = mean value of (d/dsigma)I3
   void Geodesic::A3coeff() throw() {
-    switch (nA3) {"),
+    switch (nA3_) {"),
   for nn:0 thru maxpow do block(
     [q:if nn=0 then 0 else
     jtaylor(subst([n=_n],A3),_n,eps,nn-1),
-    linel:600],
+    linel:1200],
     print(concat(tab2,"case ",string(nn),":")),
     for i : 0 thru nn-1 do
     print(concat(tab3,"_A3x[",i,"] = ",
         string(horner(coeff(q,eps,i))),";")),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nA3 >= ",string(0),
-      " && nA3 <= ",string(maxpow),", \"Bad value of nA3\");")),
+  print(concat(tab3,"STATIC_ASSERT(nA3_ >= ",string(0),
+      " && nA3_ <= ",string(maxpow),", \"Bad value of nA3_\");")),
   print("    }
   }"),
 'done)$
@@ -361,14 +362,14 @@ codeA3(maxpow):=block([tab2:"    ",tab3:"      "],
 codeC3(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C3[l] in the Fourier expansion of B3
   void Geodesic::C3coeff() throw() {
-    switch (nC3) {"),
+    switch (nC3_) {"),
   for nn:0 thru maxpow do block([c],
     print(concat(tab2,"case ",string(nn),":")),
     c:0,
     for m:1 thru nn-1 do block(
       [q:if nn = 0 then 0 else
       jtaylor(subst([n=_n],C3[m]),_n,eps,nn-1),
-      linel:600],
+      linel:1200],
       for j:m thru nn-1 do (
         print(concat(tab3,"_C3x[",c,"] = ",
             string(horner(coeff(q,eps,j))),";")),
@@ -376,8 +377,8 @@ codeC3(maxpow):=block([tab2:"    ",tab3:"      "],
     ),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC3 >= ",string(0),
-      " && nC3 <= ",string(maxpow),", \"Bad value of nC3\");")),
+  print(concat(tab3,"STATIC_ASSERT(nC3_ >= ",string(0),
+      " && nC3_ <= ",string(maxpow),", \"Bad value of nC3_\");")),
   print("    }
   }"),
 'done)$
@@ -385,22 +386,22 @@ codeC3(maxpow):=block([tab2:"    ",tab3:"      "],
 codeC4(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C4[l] in the Fourier expansion of I4
   void Geodesic::C4coeff() throw() {
-    switch (nC4) {"),
+    switch (nC4_) {"),
   for nn:0 thru maxpow do block([c],
     print(concat(tab2,"case ",string(nn),":")),
     c:0,
     for m:0 thru nn-1 do block(
-      [q:jtaylor(subst([ep2=_ep2],C4[m]),_ep2,k2,nn-1),
-      linel:600],
+      [q:jtaylor(subst([n=_n],C4[m]),_n,eps,nn-1),
+      linel:1200],
       for j:m thru nn-1 do (
         print(concat(tab3,"_C4x[",c,"] = ",
-            string(horner(coeff(q,k2,j))),";")),
+            string(horner(coeff(q,eps,j))),";")),
         c:c+1)
     ),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC3 >= ",string(0),
-      " && nC4 <= ",string(maxpow),", \"Bad value of nC4\");")),
+  print(concat(tab3,"STATIC_ASSERT(nC4_ >= ",string(0),
+      " && nC4_ <= ",string(maxpow),", \"Bad value of nC4_\");")),
   print("    }
   }"),
 'done)$
@@ -428,7 +429,7 @@ printcode():=(
 /* FORMAT FOR DISPLAY */
 
 dispA1(ord):=block(
-  [tt:ataylor(A1*(1-eps),eps,ord),ttt,linel:600],
+  [tt:ataylor(A1*(1-eps),eps,ord),ttt,linel:1200],
   for j:2 step 2 thru ord do (ttt:coeff(tt,eps,j),
     print(concat(if j = 2 then "A1 = (1 " else "        ",
         if ttt>0 then "+ " else "- ",
@@ -436,7 +437,7 @@ dispA1(ord):=block(
         if j=ord or j = ord-1 then ") / (1 - eps);" else ""))))$
 
 dispC1(ord):=for i:1 thru ord do
-block([tt:ataylor(C1[i],eps,ord),ttt,linel:600],
+block([tt:ataylor(C1[i],eps,ord),ttt,linel:1200],
   print(),
   for j:i step 2 thru ord do (ttt:coeff(tt,eps,j), print(concat(
         if j = i then concat("C1[",string(i),"] = ") else "        ",
@@ -445,7 +446,7 @@ block([tt:ataylor(C1[i],eps,ord),ttt,linel:600],
         if j=ord or j=ord-1 then ";" else ""))))$
 
 dispC1p(ord):=for i:1 thru ord do
-block([tt:ataylor(C1p[i],eps,ord),ttt,linel:600],
+block([tt:ataylor(C1p[i],eps,ord),ttt,linel:1200],
   print(),
   for j:i step 2 thru ord do (ttt:coeff(tt,eps,j), print(concat(
         if j = i then concat("C1p[",string(i),"] = ") else "         ",
@@ -454,7 +455,7 @@ block([tt:ataylor(C1p[i],eps,ord),ttt,linel:600],
         if j=ord or j=ord-1 then ";" else ""))))$
 
 dispA2(ord):=block(
-  [tt:ataylor(A2/(1-eps),eps,ord),ttt,linel:600],
+  [tt:ataylor(A2/(1-eps),eps,ord),ttt,linel:1200],
   for j:2 step 2 thru ord do (ttt:coeff(tt,eps,j),
     print(concat(if j = 2 then "A2 = (1 " else "        ",
         if ttt>0 then "+ " else "- ",
@@ -462,7 +463,7 @@ dispA2(ord):=block(
         if j=ord or j = ord-1 then ") * (1 - eps);" else ""))))$
 
 dispC2(ord):=for i:1 thru ord do
-block([tt:ataylor(C2[i],eps,ord),ttt,linel:600],
+block([tt:ataylor(C2[i],eps,ord),ttt,linel:1200],
   print(),
   for j:i step 2 thru ord do (ttt:coeff(tt,eps,j), print(concat(
         if j = i then concat("C2[",string(i),"] = ") else "        ",
@@ -471,7 +472,7 @@ block([tt:ataylor(C2[i],eps,ord),ttt,linel:600],
         if j=ord or j=ord-1 then ";" else ""))))$
 
 dispA3(ord):=(ord:ord-1,block(
-  [tt:jtaylor(A3,n,eps,ord),ttt,t4,linel:600,s],
+  [tt:jtaylor(A3,n,eps,ord),ttt,t4,linel:1200,s],
   for j:1 thru ord do (ttt:expand(coeff(tt,eps,j)),
     if ttt # 0 then block([a:taylor(ttt+n^(ord+1),n,0,ord+1),paren,s],
       paren : is(length(a) > 2),
@@ -495,7 +496,7 @@ dispA3(ord):=(ord:ord-1,block(
 
 dispC3(ord):=(ord:ord-1,for i:1 thru ord do
 block([tt:jtaylor(C3[i],eps,n,ord),
-  ttt,t4,linel:600],
+  ttt,t4,linel:1200],
   for j:i thru ord do (
     ttt:coeff(tt,eps,j),
     if ttt # 0 then block([a:taylor(ttt+n^(ord+1),n,0,ord+1),paren,s],
@@ -519,29 +520,28 @@ block([tt:jtaylor(C3[i],eps,n,ord),
       print(concat(s,if j = ord then ";" else ""))))))$
 
 dispC4(ord):=(ord:ord-1,for i:0 thru ord do
-block([tt:jtaylor(C4[i],ep2,k2,ord),
-  ttt,t4,linel:600],
-  tt:expand(subst([z=1],tt)),
+block([tt:jtaylor(C4[i],n,eps,ord),
+  ttt,t4,linel:1200],
   for j:i thru ord do (
-    ttt:coeff(tt,k2,j),
-    if ttt # 0 then block([a:taylor(ttt+ep2^(ord+1),ep2,0,ord+1),paren,s],
+    ttt:coeff(tt,eps,j),
+    if ttt # 0 then block([a:taylor(ttt+n^(ord+1),n,0,ord+1),paren,s],
       paren : is(length(a) > 2),
       s:if j = i then concat("C4[",i,"] = ") else "        ",
-      if subst([ep2=1],part(a,1)) > 0 then s:concat(s,"+ ")
+      if subst([n=1],part(a,1)) > 0 then s:concat(s,"+ ")
       else (s:concat(s,"- "), a:-a),
       if paren then s:concat(s,"("),
       for k:1 thru length(a)-1 do block([term:part(a,k),nn],
-        nn:subst([ep2=1],term),
+        nn:subst([n=1],term),
         term:term/nn,
         if nn > 0 and k > 1 then s:concat(s," + ")
         else if nn < 0 then (s:concat(s," - "), nn:-nn),
-        if lopow(term,ep2) = 0 then s:concat(s,string(nn))
+        if lopow(term,n) = 0 then s:concat(s,string(nn))
         else (
           if nn # 1 then s:concat(s,string(nn)," * "),
           s:concat(s,string(term))
           )),
       if paren then s:concat(s,")"),
-      if j>0 then s:concat(s," * ", string(k2^j)),
+      if j>0 then s:concat(s," * ", string(eps^j)),
       print(concat(s,if j = ord then ";" else ""))))))$
 
 dispseries():=(
@@ -569,13 +569,16 @@ dispseries():=(
 
 /* Timings for computeall(n)
    n   time(s)
-   8     4
-  10     8
-  12    16
-  20   128
-  30   771 (13m)
+   8     8
+  10    19
+  12    43
+  20   571
+  30  6671 (111m)
   */
 maxpow:8$
 computeall()$
 printcode()$
 dispseries()$
+/* Save the values needed for geodesic.mac  This is commented out
+here to avoid accidentally overwriting files in a user's directory. */
+/* save(concat("geod",maxpow,".lsp"), values, arrays)$ */
diff --git a/maxima/geodesic.mac b/maxima/geodesic.mac
new file mode 100644
index 0000000..c1c202c
--- /dev/null
+++ b/maxima/geodesic.mac
@@ -0,0 +1,1195 @@
+/*
+Solve the direct and inverse geodesic problems accurately.
+
+Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed
+under the MIT/X11 License.  For more information, see
+http://geographiclib.sourceforge.net/
+
+References:
+
+   Charles F. F. Karney,
+   Algorithms for geodesics, J. Geodesy 87, 43-55 (2013),
+   http://dx.doi.org/10.1007/s00190-012-0578-z
+   Addenda: http://geographiclib.sf.net/geod-addenda.html
+
+This program solves the geodesic problem either using series expansions
+(exact : false) or using elliptic integrals (exact : true).  Elliptic
+integrals give reliably high accuracy (especially when f is large).
+Note that the area calculation always uses the series expansion (I don't
+know how to express the integrals in terms of elliptic integrals).
+
+Before running this file, you need to compute and save the series
+expansions by editing god.mac setting maxpow appropriately (near the end
+of the file) and uncommenting the last line (to save the results).  If
+you're testing the accuracy of the series expansions (exact : false) or
+if you're interested in accurate results for the area, that pick a
+largish value of maxpow (e.g., 20).  This program can truncate the
+series to a smaller power.  If you just want to compute accurate
+geodesics and are not interested in the area, then use elliptic
+integrals (exact : true) and leave maxpow at some small value (6 or 8).
+
+To use this program,
+
+(1) Edit the file name for the series "geod30.lsp" to reflect the value
+of maxpow that you used.
+
+(2) Set fpprec (the number of decimal digits of precision).
+
+(3) Set exact (true for elliptic integrals, false for series).
+
+(4) If exact = false, set the order of the series you want to use, by
+replacing the "20" in min(maxpow,20) below.
+
+(5) Start maxima and run
+
+  load("geodesic.mac")$
+
+(If you want to change fpprec, exact, or the order of the series, you
+should edit this file and run this command again.)
+
+(6) Define an ellipsoid with
+
+  g:geod_init(radius, flattening)$
+
+The ellipsoids wgs84 and grs80 are pre-defined.
+
+(7) To solve a direct problem, run
+
+  geod_direct(ellipsoid, lat1, lon1, azi1, s12);
+
+e.g.,
+
+  geod_direct(wgs84, -30, 0, 45, 1b7);
+
+This returns a list, [a12, lat2, lon2, azi2, s12, m12, M12, M21, S12], e.g.,
+
+[9.00979560785581153132573611946234278938679821643464129576496b1,
+3.795350501490084914310911431201705948430953526031024848204b1,
+6.3403810943391419431089434638892210208040664981080107562114b1,
+5.09217379721155238753530133334186917347878103616352193700526b1,1.0b7,
+6.35984161356437923135381788735707599997546833534230510111197b6,
+-1.42475315175601879366432145888870774855600761387337970018946b-3,
+-7.47724030796032158868881196081763293754486469000152919698785b-4,
+4.18229766667689593851692491830627309580972454148317773382384b12]
+
+(8) To solve an inverse problem, run
+
+  geod_inverse(ellipsoid, lat1, lon1, lat2, lon2);
+
+e.g.,
+
+  geod_inverse(wgs84, -30, 0, 29.9b0, 179.9b0);
+
+This returns a list, [a12, s12, azi1, azi2, m12, M12, M21, S12], e.g.,
+
+[1.79898924051433853264945993266804037171884583041584874134816b2,
+1.99920903023269266279365620501124020214744990997998731526732b7,
+1.70994569965518052741917124376016361591705298855243347424863b2,
+8.99634915141674951478756137150809390696858860117887233257945b0,
+6.04691725017600149958466836698242794713940408239599801996017b4,
+-9.95488849775559128989753386111595867497859420132749768254471b-1,
+-1.00448979492598025351148808245250847420628601706577993586242b0,
+-1.14721359300439474273586680489951630835335433189068889945966b14]
+
+(9) Use geod_polygonarea(ellipsoid, points) to compute polygon areas.
+
+(10) The interface is copied from the C library for geodesics which is
+documented at
+
+  http://geographiclib.sourceforge.net/html/C/index.html
+
+*/
+
+/* Load series created by geod.mac (NEED TO UNCOMMENT THE LAST LINE OF
+geod.mac TO GENERATE THIS FILE). */
+load("geod30.lsp")$
+
+/* Edit to reflect precision and order of the series to be used */
+( fpprec:60, exact:true,
+  GEOGRAPHICLIB_GEODESIC_ORDER:if exact then maxpow else min(maxpow,20))$
+
+if exact then load("ellint.mac")$
+
+( nA1   :GEOGRAPHICLIB_GEODESIC_ORDER,
+  nC1   :GEOGRAPHICLIB_GEODESIC_ORDER,
+  nC1p  :GEOGRAPHICLIB_GEODESIC_ORDER,
+  nA2   :GEOGRAPHICLIB_GEODESIC_ORDER,
+  nC2   :GEOGRAPHICLIB_GEODESIC_ORDER,
+  nA3   :GEOGRAPHICLIB_GEODESIC_ORDER,
+  nA3x  :nA3,
+  nC3   :GEOGRAPHICLIB_GEODESIC_ORDER,
+  nC3x  :((nC3 * (nC3 - 1)) / 2),
+  nC4   :GEOGRAPHICLIB_GEODESIC_ORDER,
+  nC4x  :((nC4 * (nC4 + 1)) / 2) )$
+
+taylordepth:5$
+jtaylor(expr,var1,var2,ord):=expand(subst([zz=1],
+    ratdisrep(taylor(subst([var1=zz*var1,var2=zz*var2],expr),zz,0,ord))))$
+ataylor(expr,var,ord):=expand(ratdisrep(taylor(expr,var,0,ord)))$
+if not exact then (
+  A1m1f(eps):=''((horner(ataylor(A1*(1-eps)-1,eps,nA1))
+      +eps)/(1-eps)),
+  C1f(eps):=''(block([l:[]],for i:1 thru nC1 do
+      l:endcons(horner(ataylor(C1[i],eps,nC1)),l),l)),
+  C1pf(eps):=''(block([l:[]],for i:1 thru nC1p do
+      l:endcons(horner(ataylor(C1p[i],eps,nC1p)),l),l)),
+  A2m1f(eps):=''(horner(ataylor(A2/(1-eps)-1,eps,nA2))
+    *(1-eps) - eps),
+  C2f(eps):=''(block([l:[]],for i:1 thru nC2 do
+      l:endcons(horner(ataylor(C2[i],eps,nC2)),l),l)),
+  A3coeff(n):=
+  ''(block([q:jtaylor(A3,n,eps,nA3-1),l:[]],
+      for i:0 thru nA3-1 do l:endcons(horner(coeff(q,eps,i)),l),
+      l)),
+  C3coeff(n):=
+  ''(block([q,l:[]],
+      for m:1 thru nC3-1 do (
+        q:jtaylor(C3[m],n,eps,nC3-1),
+        for j:m thru nC3-1 do l:endcons(horner(coeff(q,eps,j)),l)),
+      l)))$
+C4coeff(n):=
+''(block([q,l:[]],
+    for m:0 thru nC4-1 do (
+      q:jtaylor(C4[m],n,eps,nC4-1),
+      for j:m thru nC4-1 do l:endcons(horner(coeff(q,eps,j)),l)),
+    l))$
+
+( digits:floor((fpprec-1)*log(10.0)/log(2.0)),
+  epsilon : 0.5b0^(digits - 1),
+  realmin : 0.1b0^(3*fpprec),
+  pi : bfloat(%pi),
+  maxit1 : 100,
+  maxit2 : maxit1 + digits + 10,
+  tiny : sqrt(realmin),
+  tol0 : epsilon,
+  tol1 : 200 * tol0,
+  tol2 : sqrt(tol0),
+  tolb : tol0 * tol2,
+  xthresh : 1000 * tol2,
+  degree : pi/180,
+  NaN : 'nan )$
+
+sq(x):=x^2$
+/*
+log1px(x):=block([y,z],
+    y : 1 + x,
+    z : y - 1,
+    if z = 0b0 then x else x * log(y) / z)$
+
+atanhx(x):=block([y:abs(x)],
+  y : log1px(2 * y/(1 - y))/2,
+  if x < 0b0 then -y else y)$
+*/
+atanhx(x):=atanh(x)$
+hypotx(x, y):= sqrt(x * x + y * y)$
+atan2x(y,x) := -atan2(-y, x)$  /* fix atan2(0b0,-1b0) = -pi */
+
+/*
+pow(x,y):=x^y$
+cbrtx(x) := block([y:pow(abs(x), 1/3b0)],
+  if x < 0b0 then -y else y)$
+*/
+cbrtx(x):=x^(1/3)$
+
+sumx(u, v):=block([s,up,vpp,t],
+  s : u + v,
+  up : s - v,
+  vpp : s - up,
+  up : up-u,
+  vpp : vpp-v,
+  t : -(up + vpp),
+  [s,t])$
+
+swapx(x, y):=[y,x]$
+
+SinCosNorm(sinx, cosx):=block([r : hypotx(sinx, cosx)],
+  [sinx/r, cosx/r])$
+
+AngNormalize(x):= if x >= 180b0 then x - 360b0
+else (if x < -180b0 then x + 360b0 else x)$
+AngNormalize2(x):=AngNormalize(mod(x, 360b0))$
+
+AngDiff(x, y) := block([t,d,r:sumx(-x,y)],
+  d:r[1], t:r[2],
+  if (d - 180b0) + t > 0b0 then d : d - 360b0
+  else if (d + 180b0) + t <= 0b0 then d : d + 360b0,
+  d + t)$
+
+AngRound(x) := block([z:1/16b0, y:abs(x)],
+  y : if y < z then z - (z - y) else y,
+  if x < 0b0 then -y else y)$
+
+/* Indices in geodesic struct */
+block([i:0], g_a:(i:i+1), g_f:(i:i+1), g_f1:(i:i+1), g_e2:(i:i+1),
+  g_ep2:(i:i+1), g_n:(i:i+1), g_b:(i:i+1), g_c2:(i:i+1), g_etol2:(i:i+1),
+  g_A3x:(i:i+1), g_C3x:(i:i+1), g_C4x:(i:i+1) )$
+geod_init(a, f):= (a:bfloat(a),f:bfloat(f),
+  block([f1,e2,ep2,n,b,c2,etol2],
+    f1:1-f, e2:f*(2-f), ep2:e2/f1^2, n:f/(2-f), b:a*f1,
+    c2 : (sq(a) + sq(b) *
+      (if e2 = 0b0 then 1b0 else
+        (if e2 > 0b0 then atanhx(sqrt(e2)) else atan(sqrt(-e2))) /
+        sqrt(abs(e2))))/2, /* authalic radius squared */
+    /* The sig12 threshold for "really short".  Using the auxiliary sphere
+    solution with dnm computed at (bet1 + bet2) / 2, the relative error in
+    the azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2.
+    (Error measured for 1/100 < b/a < 100 and abs(f) >= 1/1000.  For a
+    given f and sig12, the max error occurs for lines near the pole.  If
+    the old rule for computing dnm = (dn1 + dn2)/2 is used, then the error
+    increases by a factor of 2.)  Setting this equal to epsilon gives
+    sig12 = etol2.  Here 0.1 is a safety factor (error decreased by 100)
+    and max(0.001, abs(f)) stops etol2 getting too large in the nearly
+    spherical case. */
+    etol2 : 0.1b0 * tol2 / sqrt( max(0.001b0, abs(f)) * min(1b0, 1-f/2) / 2 ),
+    [ a, f, f1, e2,
+    ep2, n, b, c2, etol2,
+    if exact then [] else bfloat(A3coeff(n)),
+    if exact then [] else bfloat(C3coeff(n)),
+    bfloat(C4coeff(n))]))$
+
+/* Indices into geodesicline struct */
+block([i:0],
+  l_lat1:(i:i+1), l_lon1:(i:i+1), l_azi1:(i:i+1), l_a:(i:i+1), l_f:(i:i+1),
+  l_b:(i:i+1), l_c2:(i:i+1), l_f1:(i:i+1), l_salp0:(i:i+1), l_calp0:(i:i+1),
+  l_k2:(i:i+1), l_salp1:(i:i+1), l_calp1:(i:i+1),
+  l_ssig1:(i:i+1), l_csig1:(i:i+1), l_dn1:(i:i+1),
+  l_stau1:(i:i+1), l_ctau1:(i:i+1), l_somg1:(i:i+1), l_comg1:(i:i+1),
+  if exact then (l_e2:(i:i+1), l_cchi1:(i:i+1), l_A4:(i:i+1), l_B41:(i:i+1),
+    l_E0:(i:i+1), l_D0:(i:i+1), l_H0:(i:i+1),
+    l_E1:(i:i+1), l_D1:(i:i+1), l_H1:(i:i+1),
+    l_C4a:(i:i+1), l_E:(i:i+1),
+    e_k2:1, e_alpha2:2, e_ec:3, e_dc:4, e_hc:5)
+  else (l_A1m1:(i:i+1), l_A2m1:(i:i+1), l_A3c:(i:i+1),
+    l_B11:(i:i+1), l_B21:(i:i+1), l_B31:(i:i+1),
+    l_A4:(i:i+1), l_B41:(i:i+1), l_C1a:(i:i+1), l_C1pa:(i:i+1),
+    l_C2a:(i:i+1), l_C3a:(i:i+1),
+    l_C4a:(i:i+1) ))$
+
+Ef(k2, alpha2):=if exact then [k2, alpha2, ec(k2), dc(k2), hc(k2, alpha2)]
+else []$
+
+geod_lineinit(g,lat1,lon1,azi1):=block([a, f,
+  b, c2, f1, salp0, calp0,
+  k2, salp1, calp1,
+  ssig1, csig1, dn1,
+  stau1, ctau1, somg1, comg1,
+  A1m1, A2m1, A3c, B11, B21, B31,
+  A4, B41, C1a, C1pa, C2a, C3a,
+  C4a,
+  alp1, cbet1, sbet1, phi, eps,
+  e2, cchi1, A4, B41, E0, D0, H0, E1, D1, H1, C4a, E],
+  lat1:bfloat(lat1),lon1:bfloat(lon1), azi1:bfloat(azi1),
+  a : g[g_a],
+  f : g[g_f],
+  b : g[g_b],
+  c2 : g[g_c2],
+  f1 : g[g_f1],
+  e2 : g[g_e2],
+  /* If caps is 0 assume the standard direct calculation
+  caps = (caps ? caps : GEOD_DISTANCE_IN | GEOD_LONGITUDE) |
+  GEOD_LATITUDE | GEOD_AZIMUTH, Always allow latitude and azimuth
+  Guard against underflow in salp0 */
+  azi1 : AngRound(AngNormalize(azi1)),
+  lon1 : AngNormalize(lon1),
+  /* alp1 is in [0, pi] */
+  alp1 : azi1 * degree,
+  /* Enforce sin(pi) == 0 and cos(pi/2) == 0.  Better to face the ensuing
+  problems directly than to skirt them. */
+  salp1 : if azi1  = -180b0 then 0b0 else sin(alp1),
+  calp1 : if abs(azi1) = 90b0 then 0b0 else cos(alp1),
+  phi : lat1 * degree,
+  /* Ensure cbet1 = +epsilon at poles */
+  sbet1 : f1 * sin(phi),
+  cbet1 : if abs(lat1) = 90b0 then tiny else cos(phi),
+  block([t:SinCosNorm(sbet1, cbet1)], sbet1:t[1], cbet1:t[2]),
+  dn1 : sqrt(1 + g[g_ep2] * sq(sbet1)),
+  /* Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0), */
+  salp0 : salp1 * cbet1, /* alp0 in [0, pi/2 - |bet1|] */
+  /* Alt: calp0 : hypot(sbet1, calp1 * cbet1).  The following
+  is slightly better (consider the case salp1 = 0). */
+  calp0 : hypotx(calp1, salp1 * sbet1),
+  /* Evaluate sig with tan(bet1) = tan(sig1) * cos(alp1).
+  sig = 0 is nearest northward crossing of equator.
+  With bet1 = 0, alp1 = pi/2, we have sig1 = 0 (equatorial line).
+  With bet1 =  pi/2, alp1 = -pi, sig1 =  pi/2
+  With bet1 = -pi/2, alp1 =  0 , sig1 = -pi/2
+  Evaluate omg1 with tan(omg1) = sin(alp0) * tan(sig1).
+  With alp0 in (0, pi/2], quadrants for sig and omg coincide.
+  No atan2(0,0) ambiguity at poles since cbet1 = +epsilon.
+  With alp0 = 0, omg1 = 0 for alp1 = 0, omg1 = pi for alp1 = pi. */
+  ssig1 : sbet1, somg1 : salp0 * sbet1,
+  csig1 : comg1 : if sbet1 # 0b0 or calp1 # 0b0 then cbet1 * calp1 else 1b0,
+  /* Without normalization we have schi1 = somg1. */
+  cchi1 : f1 * dn1 * comg1,
+  /* sig1 in (-pi, pi] */
+  block([t:SinCosNorm(ssig1, csig1)], ssig1:t[1], csig1:t[2]),
+  /* SinCosNorm (somg1, comg1); -- don't need to normalize!
+  SinCosNorm (schi1, cchi1); -- don't need to normalize! */
+  k2 : sq(calp0) * g[g_ep2],
+  eps : k2 / (2 * (1 + sqrt(1 + k2)) + k2),
+  E:Ef(-k2,-g[g_ep2]),
+  block([s,c],
+    if exact then (E0 : E[e_ec]/(pi/2),
+      E1 : deltae(ssig1,csig1,dn1,E[e_k2],E[e_ec]),
+      s:sin(E1),c:cos(E1))
+    else ( A1m1 : A1m1f(eps),
+      C1a : C1f(eps),
+      B11 : SinCosSeries(true, ssig1, csig1, C1a),
+      s : sin(B11), c : cos(B11)),
+    /* tau1 = sig1 + B11 */
+    stau1 : ssig1 * c + csig1 * s,
+    ctau1 : csig1 * c - ssig1 * s
+    /* Not necessary because C1pa reverts C1a
+    B11 = -SinCosSeries(true, stau1, ctau1, C1pa, nC1p) */
+    ),
+  if exact then (D0 : E[e_dc]/(pi/2),
+    D1 : deltad(ssig1, csig1, dn1, E[e_k2], E[e_dc]),
+    H0 : E[e_hc]/(pi/2),
+    H1 : deltah(ssig1, csig1, dn1, E[e_k2], E[e_alpha2], E[e_hc]))
+  else ( C1pa: C1pf(eps),
+    A2m1 : A2m1f(eps),
+    C2a : C2f(eps),
+    B21 : SinCosSeries(true, ssig1, csig1, C2a),
+    C3a : C3f(g, eps),
+    A3c : -f * salp0 * A3f(g, eps),
+    B31 : SinCosSeries(true, ssig1, csig1, C3a)),
+  C4a : C4f(g, eps),
+  /* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0) */
+  A4 : sq(a) * calp0 * salp0 * e2,
+  B41 : SinCosSeries(false, ssig1, csig1, C4a),
+  if exact then
+    [ lat1, lon1, azi1, a, f,
+    b, c2, f1, salp0, calp0,
+    k2, salp1, calp1,
+    ssig1, csig1, dn1,
+    stau1, ctau1, somg1, comg1,
+    e2, cchi1, A4, B41, E0, D0, H0, E1, D1, H1, C4a, E]
+  else
+    [ lat1, lon1, azi1, a, f,
+    b, c2, f1, salp0, calp0,
+    k2, salp1, calp1,
+    ssig1, csig1, dn1,
+    stau1, ctau1, somg1, comg1,
+    A1m1, A2m1, A3c, B11, B21, B31,
+    A4, B41, C1a, C1pa, C2a, C3a,
+    C4a] )$
+
+/* Return [a12, lat2, lon2, azi2, s12, m12, M12, M21, S12] */
+geod_genposition(l, arcmode,  s12_a12):=block(
+  [ lat2 : 0, lon2 : 0, azi2 : 0, s12 : 0,
+  m12 : 0, M12 : 0, M21 : 0, S12 : 0,
+  /* Avoid warning about uninitialized B12. */
+  sig12, ssig12, csig12, B12 : 0, E2 : 0, AB1 : 0,
+  omg12, lam12, lon12,
+  ssig2, csig2, sbet2, cbet2, somg2, comg2, salp2, calp2, dn2],
+  s12_a12 : bfloat(s12_a12),
+  if (arcmode) then block([s12a],
+    /* Interpret s12_a12 as spherical arc length */
+    sig12 : s12_a12 * degree,
+    s12a : abs(s12_a12),
+    s12a : s12a - 180 * floor(s12a / 180),
+    ssig12 : if s12a =  0b0 then 0b0 else sin(sig12),
+    csig12 : if s12a = 90b0 then 0b0 else cos(sig12))
+  else block([tau12 : s12_a12 / (l[l_b] *
+      (if exact then l[l_E0] else (1 + l[l_A1m1]))),s,c],
+    /* Interpret s12_a12 as distance */
+    s : sin(tau12),
+    c : cos(tau12),
+    /* tau2 = tau1 + tau12 */
+    if exact then (E2 : - deltaeinv(l[l_stau1] * c + l[l_ctau1] * s,
+        l[l_ctau1] * c - l[l_stau1] * s,
+        l[l_E][e_k2], l[l_E][e_ec]),
+      sig12 : tau12 - (E2 - l[l_E1]), ssig12 : sin(sig12), csig12 : cos(sig12))
+    else (B12 : - SinCosSeries(true,
+        l[l_stau1] * c + l[l_ctau1] * s,
+        l[l_ctau1] * c - l[l_stau1] * s,
+        l[l_C1pa]),
+      sig12 : tau12 - (B12 - l[l_B11]),
+      ssig12 : sin(sig12), csig12 : cos(sig12),
+      if abs(l[l_f]) > 0.01 then block(
+        /* Reverted distance series is inaccurate for |f| > 1/100, so correct
+        sig12 with 1 Newton iteration.  The following table shows the
+        approximate maximum error for a = WGS_a() and various f relative to
+        GeodesicExact.
+            erri = the error in the inverse solution (nm)
+            errd = the error in the direct solution (series only) (nm)
+            errda = the error in the direct solution (series + 1 Newton) (nm)
+              f     erri  errd errda
+            -1/5    12e6 1.2e9  69e6
+            -1/10  123e3  12e6 765e3
+            -1/20   1110 108e3  7155
+            -1/50  18.63 200.9 27.12
+            -1/100 18.63 23.78 23.37
+            -1/150 18.63 21.05 20.26
+             1/150 22.35 24.73 25.83
+             1/100 22.35 25.03 25.31
+             1/50  29.80 231.9 30.44
+             1/20   5376 146e3  10e3
+             1/10  829e3  22e6 1.5e6
+             1/5   157e6 3.8e9 280e6
+        */
+        [ssig2 : l[l_ssig1] * csig12 + l[l_csig1] * ssig12,
+        csig2 : l[l_csig1] * csig12 - l[l_ssig1] * ssig12,
+        serr],
+        B12 : SinCosSeries(true, ssig2, csig2, l[l_C1a]),
+        serr : (1 + l[l_A1m1]) * (sig12 + (B12 - l[l_B11])) - s12_a12 / l[l_b],
+        sig12 : sig12 - serr / sqrt(1 + l[l_k2] * sq(ssig2)),
+        ssig12 : sin(sig12), csig12 : cos(sig12)
+        /* Update B12 below */
+        ))),
+  /* sig2 = sig1 + sig12 */
+  ssig2 : l[l_ssig1] * csig12 + l[l_csig1] * ssig12,
+  csig2 : l[l_csig1] * csig12 - l[l_ssig1] * ssig12,
+  dn2 : sqrt(1 + l[l_k2] * sq(ssig2)),
+  if exact then (if arcmode
+    then E2 : deltae(ssig2, csig2, dn2, l[l_E][e_k2], l[l_E][e_ec]),
+    AB1 : l[l_E0] * (E2 - l[l_E1]))
+  else (if arcmode or abs(l[l_f]) > 0.01b0
+    then B12 : SinCosSeries(true, ssig2, csig2, l[l_C1a]),
+    AB1 : (1 + l[l_A1m1]) * (B12 - l[l_B11])),
+  /* sin(bet2) = cos(alp0) * sin(sig2) */
+  sbet2 : l[l_calp0] * ssig2,
+  /* Alt: cbet2 = hypot(csig2, salp0 * ssig2); */
+  cbet2 : hypotx(l[l_salp0], l[l_calp0] * csig2),
+  if cbet2 = 0b0 then
+  /* I.e., salp0 = 0, csig2 = 0.  Break the degeneracy in this case */
+  cbet2 : csig2 : tiny,
+  if not exact then (
+    /* tan(omg2) = sin(alp0) * tan(sig2) */
+    somg2 : l[l_salp0] * ssig2, comg2 : csig2),  /* No need to normalize */
+  /* tan(alp0) = cos(sig2)*tan(alp2) */
+  salp2 : l[l_salp0], calp2 : l[l_calp0] * csig2, /* No need to normalize */
+  if not exact then
+  /* omg12 = omg2 - omg1 */
+  omg12 : atan2x(somg2 * l[l_comg1] - comg2 * l[l_somg1],
+    comg2 * l[l_comg1] + somg2 * l[l_somg1]),
+  s12 : if arcmode then l[l_b] *
+  ((if exact then l[l_E0] else (1 + l[l_A1m1])) * sig12 + AB1) else s12_a12,
+  if exact then block([somg2:l[l_salp0] * ssig2,
+    comg2 : csig2, /* No need to normalize */
+    cchi2],
+    /* Without normalization we have schi2 = somg2. */
+    cchi2 : l[l_f1] * dn2 *  comg2,
+    lam12 : atan2x(somg2 * l[l_cchi1] - cchi2 * l[l_somg1],
+      cchi2 * l[l_cchi1] + somg2 * l[l_somg1]) -
+    l[l_e2]/l[l_f1] * l[l_salp0] * l[l_H0] *
+    (sig12 + deltah(ssig2, csig2, dn2,
+        l[l_E][e_k2], l[l_E][e_alpha2], l[l_E][e_hc]) - l[l_H1] ) )
+  else lam12 : omg12 + l[l_A3c] *
+  ( sig12 + (SinCosSeries(true, ssig2, csig2, l[l_C3a]) - l[l_B31])),
+  lon12 : lam12 / degree,
+  /* Use AngNormalize2 because longitude might have wrapped multiple times. */
+  lon12 : AngNormalize2(lon12),
+  lon2 : AngNormalize(l[l_lon1] + lon12),
+  lat2 : atan2x(sbet2, l[l_f1] * cbet2) / degree,
+  /* minus signs give range [-180, 180). 0- converts -0 to +0. */
+  azi2 : 0 - atan2x(-salp2, calp2) / degree,
+  block([B22, AB2, J12],
+    if exact then J12 : l[l_k2] * l[l_D0] *
+    (sig12 + deltad(ssig2, csig2, dn2, l[l_E][e_k2], l[l_E][e_dc]) - l[l_D1])
+    else ( B22 : SinCosSeries(true, ssig2, csig2, l[l_C2a]),
+      AB2 : (1 + l[l_A2m1]) * (B22 - l[l_B21]),
+      J12 : (l[l_A1m1] - l[l_A2m1]) * sig12 + (AB1 - AB2)),
+    /* Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure
+    accurate cancellation in the case of coincident points. */
+    m12 : l[l_b] * ((dn2 * (l[l_csig1] * ssig2) -
+        l[l_dn1] * (l[l_ssig1] * csig2))
+      - l[l_csig1] * csig2 * J12),
+    block([t : l[l_k2] * (ssig2 - l[l_ssig1]) *
+      (ssig2 + l[l_ssig1]) / (l[l_dn1] + dn2)],
+      M12 : csig12 + (t *  ssig2 -  csig2 * J12) * l[l_ssig1] / l[l_dn1],
+      M21 : csig12 - (t * l[l_ssig1] - l[l_csig1] * J12) *  ssig2 /  dn2)),
+  block([ B42 : SinCosSeries(false, ssig2, csig2, l[l_C4a]), salp12, calp12],
+    if l[l_calp0] = 0b0 or l[l_salp0] = 0b0 then (
+      /* alp12 = alp2 - alp1, used in atan2 so no need to normalized */
+      salp12 : salp2 * l[l_calp1] - calp2 * l[l_salp1],
+      calp12 : calp2 * l[l_calp1] + salp2 * l[l_salp1],
+      /* The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+      salp12 = -0 and alp12 = -180.  However this depends on the sign being
+      attached to 0 correctly.  The following ensures the correct
+      behavior. */
+      if salp12 = 0b0 and calp12 < 0b0 then (
+        salp12 : tiny * l[l_calp1],
+        calp12 : -1))
+    else (
+      /* tan(alp) = tan(alp0) * sec(sig)
+      tan(alp2-alp1) = (tan(alp2) -tan(alp1)) / (tan(alp2)*tan(alp1)+1)
+      = calp0 * salp0 * (csig1-csig2) / (salp0^2 + calp0^2 * csig1*csig2)
+      If csig12 > 0, write
+        csig1 - csig2 = ssig12 * (csig1 * ssig12 / (1 + csig12) + ssig1)
+      else
+        csig1 - csig2 = csig1 * (1 - csig12) + ssig12 * ssig1
+      No need to normalize */
+      salp12 : l[l_calp0] * l[l_salp0] *
+      ( if csig12 <= 0b0 then l[l_csig1] * (1 - csig12) + ssig12 * l[l_ssig1]
+        else ssig12 * (l[l_csig1] * ssig12 / (1 + csig12) + l[l_ssig1])),
+      calp12 : sq(l[l_salp0]) + sq(l[l_calp0]) * l[l_csig1] * csig2),
+    S12 : l[l_c2] * atan2x(salp12, calp12) + l[l_A4] * (B42 - l[l_B41])),
+  [if arcmode then s12_a12 else sig12 / degree,
+  lat2, lon2, azi2, s12, m12, M12, M21, S12])$
+
+geod_position(l, s12) := geod_genposition(l, false, s12)$
+
+geod_gendirect(g, lat1, lon1, azi1, arcmode, s12_a12):=
+block([l:geod_lineinit(g, lat1, lon1, azi1)],
+  geod_genposition(l, arcmode, s12_a12))$
+
+geod_direct(g, lat1, lon1, azi1, s12):=
+  geod_gendirect(g, lat1, lon1, azi1, false, s12)$
+
+/* Return [a12, s12, azi1, azi2, m12, M12, M21, S12] */
+geod_geninverse(g, lat1, lon1, lat2, lon2):=block(
+  [s12 : 0b0, azi1 : 0b0, azi2 : 0b0,
+  m12 : 0b0, M12 : 0b0, M21 : 0b0, S12 : 0b0,
+  lon12, latsign, lonsign, swapp,
+  phi, sbet1, cbet1, sbet2, cbet2, s12x : 0b0, m12x : 0b0,
+  dn1, dn2, lam12, slam12, clam12,
+  a12 : 0b0, sig12, calp1 : 0b0, salp1 : 0b0, calp2 : 0b0, salp2 : 0b0,
+  /* index zero elements of these arrays are unused */
+  C1a, C2a, C3a,
+  meridian,  omg12 : 0b0,
+  /* Initialize for the meridian.  No longitude calculation is done in this
+  case to let the parameter default to 0. */
+  E : Ef(-g[g_ep2],  0b0)],
+  lat1:bfloat(lat1),lon1:bfloat(lon1),
+  lat2:bfloat(lat2),lon2:bfloat(lon2),
+  /* Compute longitude difference (AngDiff does this carefully).  Result is
+  in [-180, 180] but -180 is only for west-going geodesics.  180 is for
+  east-going and meridional geodesics. */
+  lon12 : AngDiff(AngNormalize(lon1), AngNormalize(lon2)),
+  /* If very close to being on the same half-meridian, then make it so. */
+  lon12 : AngRound(lon12),
+  /* Make longitude difference positive. */
+  lonsign : if lon12 >= 0b0 then 1 else -1,
+  lon12 : lon12 * lonsign,
+  /* If really close to the equator, treat as on equator. */
+  lat1 : AngRound(lat1),
+  lat2 : AngRound(lat2),
+  /* Swap points so that point with higher (abs) latitude is point 1 */
+  swapp : if abs(lat1) >= abs(lat2) then 1 else -1,
+  if swapp < 0 then (lonsign : -lonsign,
+    block([t:swapx(lat1, lat2)], lat1:t[1], lat2:t[2])),
+  /* Make lat1 <= 0 */
+  latsign : if lat1 < 0b0 then 1 else -1,
+  lat1 : lat1 * latsign,
+  lat2 : lat2 * latsign,
+  /* Now we have
+      0 <= lon12 <= 180
+      -90 <= lat1 <= 0
+      lat1 <= lat2 <= -lat1
+  longsign, swapp, latsign register the transformation to bring the
+  coordinates to this canonical form.  In all cases, 1 means no change was
+  made.  We make these transformations so that there are few cases to
+  check, e.g., on verifying quadrants in atan2.  In addition, this
+  enforces some symmetries in the results returned. */
+  phi : lat1 * degree,
+  /* Ensure cbet1 = +epsilon at poles */
+  sbet1 : g[g_f1] * sin(phi),
+  cbet1 : if lat1 = -90b0 then tiny else cos(phi),
+  block([t:SinCosNorm(sbet1, cbet1)], sbet1:t[1], cbet1:t[2]),
+  phi : lat2 * degree,
+  /* Ensure cbet2 = +epsilon at poles */
+  sbet2 : g[g_f1] * sin(phi),
+  cbet2 : if abs(lat2) = 90b0 then tiny else cos(phi),
+  block([t:SinCosNorm(sbet2, cbet2)], sbet2:t[1], cbet2:t[2]),
+  /* If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of the
+  |bet1| - |bet2|.  Alternatively (cbet1 >= -sbet1), abs(sbet2) + sbet1 is
+  a better measure.  This logic is used in assigning calp2 in Lambda12.
+  Sometimes these quantities vanish and in that case we force bet2 = +/-
+  bet1 exactly.  An example where is is necessary is the inverse problem
+  48.522876735459 0 -48.52287673545898293 179.599720456223079643
+  which failed with Visual Studio 10 (Release and Debug) */
+  if cbet1 < -sbet1 then
+  ( if cbet2 = cbet1 then sbet2 : if sbet2 < 0b0 then sbet1 else -sbet1 )
+  else (    if abs(sbet2) = -sbet1 then cbet2 : cbet1 ),
+  dn1 : sqrt(1 + g[g_ep2] * sq(sbet1)),
+  dn2 : sqrt(1 + g[g_ep2] * sq(sbet2)),
+  lam12 : lon12 * degree,
+  slam12 : if lon12 = 180b0 then 0b0 else sin(lam12),
+  clam12 : cos(lam12),      /* lon12 == 90 isn't interesting */
+  meridian : is(lat1 = -90b0 or slam12 = 0b0),
+  if meridian then block(
+    /* Endpoints are on a single full meridian, so the geodesic might lie on
+    a meridian. */
+    [ ssig1, csig1, ssig2, csig2],
+    calp1 : clam12, salp1 : slam12, /* Head to the target longitude */
+    calp2 : 1b0, salp2 : 0b0,           /* At the target we're heading north */
+    /* tan(bet) : tan(sig) * cos(alp) */
+    ssig1 : sbet1, csig1 : calp1 * cbet1,
+    ssig2 : sbet2, csig2 : calp2 * cbet2,
+    /* sig12 = sig2 - sig1 */
+    sig12 : atan2x(max(csig1 * ssig2 - ssig1 * csig2, 0b0),
+      csig1 * csig2 + ssig1 * ssig2),
+    block([r],
+      r:Lengths(g, g[g_n], E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+        cbet1, cbet2),
+      s12x:r[1], m12x:r[2], M12:r[4], M21:r[5]),
+    /* Add the check for sig12 since zero length geodesics might yield m12 <
+    0.  Test case was
+       echo 20.001 0 20.001 0 | GeodTest -i
+    In fact, we will have sig12 > pi/2 for meridional geodesic which is
+    not a shortest path. */
+    if sig12 < 1b0 or m12x >= 0b0 then (
+      m12x : m12x * g[g_b],
+      s12x : s12x * g[g_b],
+      a12 : sig12 / degree )
+    else
+    /* m12 < 0, i.e., prolate and too close to anti-podal */
+    meridian : false ),
+  if not meridian and
+  sbet1 = 0b0 and           /* and sbet2 == 0 */
+  /* Mimic the way Lambda12 works with calp1 = 0 */
+  (g[g_f] <= 0b0 or lam12 <= pi - g[g_f] * pi) then (
+    /* Geodesic runs along equator */
+    calp1 : calp2 : 0b0, salp1 : salp2 : 1b0,
+    s12x : g[g_a] * lam12,
+    sig12 : omg12 : lam12 / g[g_f1],
+    m12x : g[g_b] * sin(sig12),
+    M12 : M21 : cos(sig12),
+    a12 : lon12 / g[g_f1] )
+  else if not meridian then block([dnm],
+    /* Now point1 and point2 belong within a hemisphere bounded by a
+    meridian and geodesic is neither meridional or equatorial.
+    Figure a starting point for Newton's method */
+    block([r],
+      r : InverseStart(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12),
+      sig12:r[1], salp1:r[2], calp1:r[3], salp2:r[4], calp2:r[5],
+      dnm:r[6]),
+    if sig12 >= 0b0 then (
+      /* Short lines (InverseStart sets salp2, calp2, dnm) */
+      s12x : sig12 * g[g_b] * dnm,
+      m12x : sq(dnm) * g[g_b] * sin(sig12 / dnm),
+      M12 : M21 : cos(sig12 / dnm),
+      a12 : sig12 / degree,
+      omg12 : lam12 / (g[g_f1] * dnm))
+    else block(
+      /* Newton's method.  This is a straightforward solution of f(alp1) =
+      lambda12(alp1) - lam12 = 0 with one wrinkle.  f(alp) has exactly one
+      root in the interval (0, pi) and its derivative is positive at the
+      root.  Thus f(alp) is positive for alp > alp1 and negative for alp <
+      alp1.  During the course of the iteration, a range (alp1a, alp1b) is
+      maintained which brackets the root and with each evaluation of
+      f(alp) the range is shrunk, if possible.  Newton's method is
+      restarted whenever the derivative of f is negative (because the new
+      value of alp1 is then further from the solution) or if the new
+      estimate of alp1 lies outside (0,pi); in this case, the new starting
+      guess is taken to be (alp1a + alp1b) / 2. */
+      [ssig1 : 0b0, csig1 : 0b0, ssig2 : 0b0, csig2 : 0b0, eps : 0b0,
+      numit : 0,
+      /* Bracketing range */
+      salp1a : tiny, calp1a : 1b0, salp1b : tiny, calp1b : -1b0,
+      tripn : false, tripb : false, contflag, dv, v],
+      for i:0 thru maxit2-1 do (
+        contflag:false,
+        numit:i,
+        /* the WGS84 test set: mean : 1.47, sd = 1.25, max = 16
+        WGS84 and random input: mean = 2.85, sd = 0.60 */
+        block([r],
+          r : Lambda12(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1,
+            is(numit < maxit1)),
+          v : r[1] - lam12,
+          salp2:r[2], calp2:r[3], sig12:r[4],
+          ssig1:r[5], csig1:r[6], ssig2:r[7], csig2:r[8],
+          if exact then E:r[9] else eps:r[9], omg12:r[10], dv:r[11]),
+        /* 2 * tol0 is approximately 1 ulp for a number in [0, pi]. */
+        /* Reversed test to allow escape with NaNs */
+        if tripb or not(abs(v) >= (if tripn then 8 else 2) * tol0) then
+        return(true),
+        /* Update bracketing values */
+        if v > 0b0 and (numit > maxit1 or calp1/salp1 > calp1b/salp1b)
+        then ( salp1b : salp1, calp1b : calp1 )
+        else if v < 0b0 and (numit > maxit1 or calp1/salp1 < calp1a/salp1a)
+        then ( salp1a : salp1, calp1a : calp1 ),
+        if numit < maxit1 and dv > 0b0 then block(
+          [dalp1, sdalp1, cdalp1,nsalp1],
+          dalp1 : -v/dv,
+          sdalp1 : sin(dalp1), cdalp1 : cos(dalp1),
+          nsalp1 : salp1 * cdalp1 + calp1 * sdalp1,
+          if nsalp1 > 0b0 and abs(dalp1) < pi then (
+            calp1 : calp1 * cdalp1 - salp1 * sdalp1,
+            salp1 : nsalp1,
+            block([t:SinCosNorm(salp1, calp1)], salp1:t[1], calp1:t[2]),
+            /* In some regimes we don't get quadratic convergence because
+            slope -> 0.  So use convergence conditions based on epsilon
+            instead of sqrt(epsilon). */
+            tripn : is(abs(v) <= 16 * tol0),
+            contflag:true ) ),
+        if not contflag then (
+          /* Either dv was not postive or updated value was outside legal
+          range.  Use the midpoint of the bracket as the next estimate.
+          This mechanism is not needed for the WGS84 ellipsoid, but it does
+          catch problems with more eccentric ellipsoids.  Its efficacy is
+          such for the WGS84 test set with the starting guess set to alp1 =
+          90deg:
+          the WGS84 test set: mean = 5.21, sd = 3.93, max = 24
+          WGS84 and random input: mean = 4.74, sd = 0.99 */
+          salp1 : (salp1a + salp1b)/2,
+          calp1 : (calp1a + calp1b)/2,
+          block([t:SinCosNorm(salp1, calp1)], salp1:t[1], calp1:t[2]),
+          tripn : false,
+          tripb : is(abs(salp1a - salp1) + (calp1a - calp1) < tolb or
+            abs(salp1 - salp1b) + (calp1 - calp1b) < tolb)) ),
+      block([r],
+        r:Lengths(g, eps, E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+          cbet1, cbet2),
+        s12x:r[1], m12x:r[2], M12:r[4], M21:r[5]),
+      m12x : m12x * g[g_b],
+      s12x : s12x * g[g_b],
+      a12 : sig12 / degree,
+      if not exact then omg12 : lam12 - omg12 ) ),
+  s12 : 0b0 + s12x,           /* Convert -0 to 0 */
+  m12 : 0b0 + m12x,             /* Convert -0 to 0 */
+  block(
+    /* From Lambda12: sin(alp1) * cos(bet1) = sin(alp0) */
+    [ salp0 : salp1 * cbet1,
+    calp0 : hypotx(calp1, salp1 * sbet1), /* calp0 > 0 */
+    alp12],
+    if calp0 # 0b0 and salp0 # 0b0 then block(
+      /* From Lambda12: tan(bet) = tan(sig) * cos(alp) */
+      [ssig1 : sbet1, csig1 : calp1 * cbet1,
+      ssig2 : sbet2, csig2 : calp2 * cbet2,
+      k2 : sq(calp0) * g[g_ep2], eps,
+      /* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0). */
+      A4 : sq(g[g_a]) * calp0 * salp0 * g[g_e2],
+      C4a, B41, B42],
+      eps : k2 / (2 * (1 + sqrt(1 + k2)) + k2),
+      block([t:SinCosNorm(ssig1, csig1)], ssig1:t[1], csig1:t[2]),
+      block([t:SinCosNorm(ssig2, csig2)], ssig2:t[1], csig2:t[2]),
+      C4a : C4f(g, eps),
+      B41 : SinCosSeries(false, ssig1, csig1, C4a),
+      B42 : SinCosSeries(false, ssig2, csig2, C4a),
+      S12 : A4 * (B42 - B41))
+    else S12 : 0, /* Avoid problems with indeterminate sig1, sig2 on equator */
+    if not meridian and
+    omg12 < 0.75b0 * pi and   /* Long difference too big */
+    sbet2 - sbet1 < 1.75b0 then block( /* Lat difference too big */
+      /* Use tan(Gamma/2) = tan(omg12/2)
+      * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2))
+      with tan(x/2) = sin(x)/(1+cos(x)) */
+      [somg12 : sin(omg12), domg12 : 1 + cos(omg12),
+      dbet1 : 1 + cbet1, dbet2 : 1 + cbet2],
+      alp12 : 2 * atan2x( somg12 * ( sbet1 * dbet2 + sbet2 * dbet1 ),
+        domg12 * ( sbet1 * sbet2 + dbet1 * dbet2 ) ))
+    else block(
+      /* alp12 = alp2 - alp1, used in atan2 so no need to normalize */
+      [salp12 : salp2 * calp1 - calp2 * salp1,
+      calp12 : calp2 * calp1 + salp2 * salp1],
+      /* The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+      salp12 = -0 and alp12 = -180.  However this depends on the sign
+      being attached to 0 correctly.  The following ensures the correct
+      behavior. */
+      if salp12 = 0b0 and calp12 < 0b0 then (
+        salp12 : tiny * calp1,
+        calp12 : -1b0),
+      alp12 : atan2x(salp12, calp12) ),
+    S12 : S12 + g[g_c2] * alp12,
+    S12 : S12 * swapp * lonsign * latsign,
+    /* Convert -0 to 0 */
+    S12 : S12 + 0b0 ),
+  /* Convert calp, salp to azimuth accounting for lonsign, swapp, latsign. */
+  if swapp < 0 then (
+    block([t:swapx(salp1, salp2)], salp1:t[1], salp2:t[2]),
+    block([t:swapx(calp1, calp2)], calp1:t[1], calp2:t[2]),
+    block([t:swapx(M12, M21)], M12:t[1], M21:t[2])),
+  salp1 : salp1 * swapp * lonsign, calp1 : calp1 * swapp * latsign,
+  salp2 : salp2 * swapp * lonsign, calp2 : calp2 * swapp * latsign,
+  /* minus signs give range [-180, 180). 0- converts -0 to +0. */
+  azi1 : 0b0 - atan2x(-salp1, calp1) / degree,
+  azi2 : 0b0 - atan2x(-salp2, calp2) / degree,
+  [a12, s12, azi1, azi2, m12, M12, M21, S12]
+)$
+
+geod_inverse(g, lat1, lon1, lat2, lon2):=
+geod_geninverse(g, lat1, lon1, lat2, lon2)$
+
+SinCosSeries(sinp, sinx, cosx, c):=block([n:length(c), ar, y0, y1, n2, k],
+  /* Evaluate
+  * y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :
+  *            sum(c[i] * cos((2*i-1) * x), i, 1, n)
+  * using Clenshaw summation.  where n = length(c)
+  * Approx operation count = (n + 5) mult and (2 * n + 2) add */
+  /* 2 * cos(2 * x) */
+  ar : 2 * (cosx - sinx) * (cosx + sinx),
+  /* accumulators for sum */
+  if mod(n, 2)=1 then (y0 : c[n], n2 : n - 1)
+  else (y0 : 0b0, n2 : n),
+  y1 : 0b0,
+  /* Now n2 is even */
+  for k : n2 thru 1 step -2 do (
+    /* Unroll loop x 2, so accumulators return to their original role */
+    y1 : ar * y0 - y1 + c[k],
+    y0 : ar * y1 - y0 + c[k-1]),
+  if sinp then 2 * sinx * cosx * y0 /* sin(2 * x) * y0 */
+  else cosx * (y0 - y1) /* cos(x) * (y0 - y1) */
+  )$
+
+/* Return [s12b, m12b, m0, M12, M21] */
+Lengths(g, eps, E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2):=
+block([scalep:true, C1a, C2a,
+  s12b : 0b0, m12b : 0b0, m0 : 0b0, M12 : 0b0, M21 : 0b0,
+  A1m1, AB1, A2m1, AB2, J12],
+  /* Return m12b = (reduced length)/b; also calculate s12b = distance/b,
+  and m0 = coefficient of secular term in expression for reduced length. */
+  if exact then (
+    m0 : - E[e_k2] * E[e_dc] / (pi/2),
+    J12 : m0 *
+      (sig12 + deltad(ssig2, csig2, dn2, E[e_k2], E[e_dc])
+      - deltad(ssig1, csig1, dn1, E[e_k2], E[e_dc])) )
+  else (C1a : C1f(eps), C2a : C2f(eps),
+    A1m1 : A1m1f(eps),
+    AB1 : (1 + A1m1) * (SinCosSeries(true, ssig2, csig2, C1a) -
+      SinCosSeries(true, ssig1, csig1, C1a)),
+    A2m1 : A2m1f(eps),
+    AB2 : (1 + A2m1) * (SinCosSeries(true, ssig2, csig2, C2a) -
+      SinCosSeries(true, ssig1, csig1, C2a)),
+    m0 : A1m1 - A2m1,
+    J12 : m0 * sig12 + (AB1 - AB2)),
+  /* Missing a factor of b.
+  Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure accurate
+  cancellation in the case of coincident points. */
+  m12b : dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12,
+  /* Missing a factor of b */
+  s12b : if exact then
+  E[e_ec] / (pi/2) *
+  (sig12 + deltae(ssig2, csig2, dn2, E[e_k2], E[e_ec])
+  - deltae(ssig1, csig1, dn1, E[e_k2], E[e_ec]))
+  else (1 + A1m1) * sig12 + AB1,
+  if scalep then block([csig12 : csig1 * csig2 + ssig1 * ssig2,
+    t : g[g_ep2] * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2)],
+    M12 : csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1,
+    M21 : csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2 ),
+  [s12b, m12b, m0, M12, M21])$
+
+Astroid(x, y):= block(
+  /* Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.
+  This solution is adapted from Geocentric::Reverse. */
+  [k, p : sq(x), q : sq(y), r],
+  r : (p + q - 1) / 6,
+  if not(q = 0b0 and r <= 0b0) then block(
+    /* Avoid possible division by zero when r = 0 by multiplying equations
+    for s and t by r^3 and r, resp. */
+    [S : p * q / 4,            /* S = r^3 * s */
+    r2 : sq(r),
+    r3, disc, u, v, uv, w],
+    r3 : r * r2,
+    /* The discrimant of the quadratic equation for T3.  This is zero on
+    the evolute curve p^(1/3)+q^(1/3) = 1 */
+    disc : S * (S + 2 * r3),
+    u : r,
+    v, uv, w,
+    if disc >= 0b0 then block([T3 : S + r3, T],
+      /* Pick the sign on the sqrt to maximize abs(T3).  This minimizes loss
+      of precision due to cancellation.  The result is unchanged because
+      of the way the T is used in definition of u. */
+      /* T3 = (r * t)^3 */
+      T3 : T3 + (if T3 < 0b0 then -sqrt(disc) else sqrt(disc)),
+      /* N.B. cbrtx always returns the real root.  cbrtx(-8) = -2. */
+      T : cbrtx(T3),            /* T = r * t */
+      /* T can be zero, but then r2 / T -> 0. */
+      u : u + T + (if T # 0b0 then r2 / T else 0b0))
+    else block(
+      /* T is complex, but the way u is defined the result is real. */
+      [ang : atan2x(sqrt(-disc), -(S + r3))],
+      /* There are three possible cube roots.  We choose the root which
+      avoids cancellation.  Note that disc < 0 implies that r < 0. */
+      u : u + 2 * r * cos(ang / 3)),
+    v : sqrt(sq(u) + q),              /* guaranteed positive */
+    /* Avoid loss of accuracy when u < 0. */
+    uv : if u < 0b0 then q / (v - u) else u + v, /* u+v, guaranteed positive */
+    w : (uv - q) / (2 * v),           /* positive? */
+    /* Rearrange expression for k to avoid loss of accuracy due to
+    subtraction.  Division by 0 not possible because uv > 0, w >= 0. */
+    k : uv / (sqrt(uv + sq(w)) + w))   /* guaranteed positive */
+  else                /* q == 0 && r <= 0 */
+  /* y = 0 with |x| <= 1.  Handle this case directly.
+  for y small, positive root is k = abs(y)/sqrt(1-x^2) */
+  k : 0b0,
+  k)$
+
+/* Return [sig12, salp1, calp1, salp2, calp2, dnm] */
+InverseStart(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12):=block(
+  [ salp1 : 0b0, calp1 : 0b0, salp2 : 0b0, calp2 : 0b0, dnm : 0b0,
+  /* Return a starting point for Newton's method in salp1 and calp1 (function
+  value is -1).  If Newton's method doesn't need to be used, return also
+  salp2 and calp2 and function value is sig12. */
+  sig12 : -1b0,               /* Return value */
+  /* bet12 = bet2 - bet1 in [0, pi); bet12a = bet2 + bet1 in (-pi, 0] */
+  sbet12 : sbet2 * cbet1 - cbet2 * sbet1,
+  cbet12 : cbet2 * cbet1 + sbet2 * sbet1,
+  sbet12a : sbet2 * cbet1 + cbet2 * sbet1,
+  shortline, omg12, somg12, comg12, ssig12, csig12, E:[]],
+  shortline : is(cbet12 >= 0b0 and sbet12 < 0.5b0 and cbet2 * lam12 < 0.5b0),
+  omg12 : lam12,
+  if shortline then block([sbetm2 : sq(sbet1 + sbet2)],
+    /* sin((bet1+bet2)/2)^2
+     * =  (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2) */
+    sbetm2 : sbetm2 / (sbetm2 + sq(cbet1 + cbet2)),
+    dnm : sqrt(1 + g[g_ep2] * sbetm2),
+    omg12 : omg12 / (g[g_f1] * dnm)),
+  somg12 : sin(omg12), comg12 : cos(omg12),
+  salp1 : cbet2 * somg12,
+  calp1 : if comg12 >= 0b0
+  then sbet12 + cbet2 * sbet1 * sq(somg12) / (1 + comg12)
+  else sbet12a - cbet2 * sbet1 * sq(somg12) / (1 - comg12),
+  ssig12 : hypotx(salp1, calp1),
+  csig12 : sbet1 * sbet2 + cbet1 * cbet2 * comg12,
+  if shortline and ssig12 < g[g_etol2] then (
+    /* really short lines */
+    salp2 : cbet1 * somg12,
+    calp2 : sbet12 - cbet1 * sbet2 *
+    (if comg12 >= 0 then sq(somg12) / (1 + comg12) else 1 - comg12),
+    block([t:SinCosNorm(salp2, calp2)], salp2:t[1], calp2:t[2]),
+    /* Set return value */
+    sig12 : atan2x(ssig12, csig12))
+  else if abs(g[g_n]) > 0.1b0 or /* No astroid calc if too eccentric */
+  csig12 >= 0 or
+  ssig12 >= 6 * abs(g[g_n]) * pi * sq(cbet1) then true
+  /* Nothing to do, zeroth order spherical approximation is OK */
+  else block(
+    /* Scale lam12 and bet2 to x, y coordinate system where antipodal point
+    is at origin and singular point is at y = 0, x = -1. */
+    [y, lamscale, betscale,x],
+    if g[g_f] >= 0 then (            /* In fact f == 0 does not get here */
+      /* x = dlong, y = dlat */
+      if exact then block([k2 : sq(sbet1) * g[g_ep2]],
+        E : Ef(-k2, -g[g_ep2]),
+        lamscale : g[g_e2]/g[g_f1] * cbet1 * 2 * E[e_hc])
+      else block([k2 : sq(sbet1) * g[g_ep2],eps],
+        eps : k2 / (2 * (1 + sqrt(1 + k2)) + k2),
+        lamscale : g[g_f] * cbet1 * A3f(g, eps) * pi),
+      betscale : lamscale * cbet1,
+      x : (lam12 - pi) / lamscale,
+      y : sbet12a / betscale)
+    else block(                    /* f < 0 */
+      /* x = dlat, y = dlong */
+      [cbet12a : cbet2 * cbet1 - sbet2 * sbet1,bet12a,m12b, m0],
+      bet12a : atan2x(sbet12a, cbet12a),
+      /* In the case of lon12 = 180, this repeats a calculation made in
+      * Inverse. */
+      block([r],
+        r:Lengths(g, g[g_n], E, pi + bet12a,
+          sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
+          cbet1, cbet2),
+        m12b:r[2], m0:r[3]),
+      x : -1 + m12b / (cbet1 * cbet2 * m0 * pi),
+      betscale : if x < -0.01b0 then sbet12a / x else
+      -g[g_f] * sq(cbet1) * pi,
+      lamscale : betscale / cbet1,
+      y : (lam12 - pi) / lamscale),
+    if y > -tol1 and x > -1 - xthresh then (
+      /* strip near cut */
+      if g[g_f] >= 0b0 then (
+        salp1 : min(1b0, -x), calp1 : - sqrt(1 - sq(salp1)))
+      else (
+        calp1 : max(if x > -tol1 then 0b0 else -1b0, x),
+        salp1 : sqrt(1 - sq(calp1))))
+    else block(
+      /* Estimate alp1, by solving the astroid problem.
+      Could estimate alpha1 = theta + pi/2, directly, i.e.,
+        calp1 = y/k; salp1 = -x/(1+k);  for f >= 0
+        calp1 = x/(1+k); salp1 = -y/k;  for f < 0 (need to check)
+      However, it's better to estimate omg12 from astroid and use
+      spherical formula to compute alp1.  This reduces the mean number of
+      Newton iterations for astroid cases from 2.24 (min 0, max 6) to 2.12
+      (min 0 max 5).  The changes in the number of iterations are as
+      follows:
+      change percent
+         1       5
+         0      78
+        -1      16
+        -2       0.6
+        -3       0.04
+        -4       0.002
+      The histogram of iterations is (m = number of iterations estimating
+      alp1 directly, n = number of iterations estimating via omg12, total
+      number of trials = 148605):
+       iter    m      n
+         0   148    186
+         1 13046  13845
+         2 93315 102225
+         3 36189  32341
+         4  5396      7
+         5   455      1
+         6    56      0
+      Because omg12 is near pi, estimate work with omg12a = pi - omg12 */
+      [k : Astroid(x, y),omg12a],
+      omg12a : lamscale *
+      ( if g[g_f] >= 0b0 then -x * k/(1 + k) else -y * (1 + k)/k ),
+      somg12 : sin(omg12a), comg12 : -cos(omg12a),
+      /* Update spherical estimate of alp1 using omg12 instead of lam12 */
+      salp1 : cbet2 * somg12,
+      calp1 : sbet12a - cbet2 * sbet1 * sq(somg12) / (1 - comg12))),
+  if salp1 > 0 then              /* Sanity check on starting guess */
+  block([t:SinCosNorm(salp1, calp1)], salp1:t[1], calp1:t[2])
+  else ( salp1 : 1b0, calp1 : 0b0 ),
+  [sig12, salp1, calp1, salp2, calp2, dnm]
+  )$
+
+/* Return [lam12, salp2, calp2, sig12, ssig1, csig1, ssig2, csig2,
+(E or eps), (omg12 or domg12), dlam12]
+*/
+Lambda12(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1, diffp):=
+block([salp2 : 0b0, calp2 : 0b0, sig12 : 0b0,
+  ssig1 : 0b0, csig1 : 0b0, ssig2 : 0b0, csig2 : 0b0, eps : 0b0, E : [],
+  domg12 : 0b0, dlam12 : 0b0,
+  salp0, calp0,
+  somg1, comg1, somg2, comg2, cchi1, cchi2, omg12:0, lam12,
+  B312, h0, k2],
+  if sbet1 = 0b0 and calp1 = 0b0 then
+  /* Break degeneracy of equatorial line.  This case has already been
+  handled. */
+  calp1 : -tiny,
+  /* sin(alp1) * cos(bet1) = sin(alp0) */
+  salp0 : salp1 * cbet1,
+  calp0 : hypotx(calp1, salp1 * sbet1), /* calp0 > 0 */
+  /* tan(bet1) = tan(sig1) * cos(alp1)
+  tan(omg1) = sin(alp0) * tan(sig1) = tan(omg1)=tan(alp1)*sin(bet1) */
+  ssig1 : sbet1, somg1 : salp0 * sbet1,
+  csig1 : comg1 : calp1 * cbet1,
+  /* Without normalization we have schi1 = somg1. */
+  if exact then cchi1 : g[g_f1] * dn1 * comg1,
+  block([t:SinCosNorm(ssig1, csig1)], ssig1:t[1], csig1:t[2]),
+  /* SinCosNorm (&somg1, &comg1); -- don't need to normalize! */
+  /* Enforce symmetries in the case abs(bet2) = -bet1.  Need to be careful
+  about this case, since this can yield singularities in the Newton
+  iteration.
+  sin(alp2) * cos(bet2) = sin(alp0) */
+  salp2 : if cbet2 # cbet1 then salp0 / cbet2 else salp1,
+  /* calp2 = sqrt(1 - sq(salp2))
+         = sqrt(sq(calp0) - sq(sbet2)) / cbet2
+  and subst for calp0 and rearrange to give; choose positive sqrt
+  to give alp2 in [0, pi/2]. */
+  calp2 : if cbet2 # cbet1 or abs(sbet2) # -sbet1 then
+  sqrt(sq(calp1 * cbet1) +
+    (if cbet1 < -sbet1 then
+      (cbet2 - cbet1) * (cbet1 + cbet2) else
+      (sbet1 - sbet2) * (sbet1 + sbet2))) / cbet2 else
+  abs(calp1),
+  /* tan(bet2) = tan(sig2) * cos(alp2)
+  tan(omg2) = sin(alp0) * tan(sig2). */
+  ssig2 : sbet2, somg2 : salp0 * sbet2,
+  csig2 : comg2 : calp2 * cbet2,
+  /* Without normalization we have schi2 = somg2. */
+  if exact then cchi2 : g[g_f1] * dn2 * comg2,
+  block([t:SinCosNorm(ssig2, csig2)], ssig2:t[1], csig2:t[2]),
+  /* SinCosNorm (&somg2, &comg2); -- don't need to normalize! */
+  /* sig12 = sig2 - sig1, limit to [0, pi] */
+  sig12 : atan2x(max(csig1 * ssig2 - ssig1 * csig2, 0b0),
+    csig1 * csig2 + ssig1 * ssig2),
+  /* omg12 = omg2 - omg1, limit to [0, pi] */
+  omg12 : atan2x(max(comg1 * somg2 - somg1 * comg2, 0b0),
+    comg1 * comg2 + somg1 * somg2),
+  k2 : sq(calp0) * g[g_ep2],
+  if exact then block([chi12],
+    E : Ef(-k2, -g[g_ep2]),
+    chi12 : atan2x(max(cchi1 * somg2 - somg1 * cchi2, 0b0),
+                       cchi1 * cchi2 + somg1 * somg2),
+    lam12 : chi12 -
+      g[g_e2]/g[g_f1] * salp0 * E[e_hc] / (pi/2) *
+      (sig12 + deltah(ssig2, csig2, dn2, E[e_k2], E[e_alpha2], E[e_hc]) -
+       deltah(ssig1, csig1, dn1, E[e_k2], E[e_alpha2], E[e_hc]) ) )
+  else (eps : k2 / (2 * (1 + sqrt(1 + k2)) + k2),
+    C3a : C3f(g, eps),
+    B312 : (SinCosSeries(true, ssig2, csig2, C3a) -
+      SinCosSeries(true, ssig1, csig1, C3a)),
+    h0 : -g[g_f] * A3f(g, eps),
+    domg12 : salp0 * h0 * (sig12 + B312),
+    lam12 : omg12 + domg12),
+  if diffp then (
+    if calp2 = 0b0 then
+    dlam12 : - 2 * g[g_f1] * dn1 / sbet1
+    else (block([r],
+        r:Lengths(g, eps, E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+          cbet1, cbet2),
+        dlam12:r[2]),
+      dlam12 : dlam12 * g[g_f1] / (calp2 * cbet2))),
+  [lam12, salp2, calp2, sig12, ssig1, csig1, ssig2, csig2,
+  if exact then E else eps, if exact then omg12 else domg12, dlam12])$
+
+A3f(g, eps):=block(
+  /* Evaluate sum(A3x[k] * eps^k, k, 0, nA3x-1) by Horner's method */
+  [v : 0b0],
+  for i:nA3x step -1 thru 1 do
+  v : eps * v + g[g_A3x][i],
+  v)$
+
+C3f(g, eps):=block(
+  /* Evaluate C3 coeffs by Horner's method
+  * Elements c[1] thru c[nC3 - 1] are set */
+  [i, j, k, mult : 1b0, c : makelist(0, i, 1, nC3-1)],
+  j : nC3x,
+  for k : nC3-1 step -1 thru 1 do block(
+    [t : 0b0],
+    for i : nC3 - k step -1 thru 1 do (
+      t : eps * t + g[g_C3x][j],
+      j : j - 1),
+    c[k] : t),
+  for k:1 thru nC3-1 do (
+    mult : mult * eps,
+    c[k] : c[k] * mult),
+  c)$
+
+C4f(g, eps):=block(
+  /* Evaluate C4 coeffs by Horner's method
+  * Elements c[1] thru c[nC4] are set */
+  [i, j, k, mult : 1b0, c : makelist(0, i, 1, nC4)],
+  j : nC4x,
+  for k : nC4-1 step -1 thru 0 do block(
+    [t : 0b0],
+    for i : nC4 - k step -1 thru 1 do (
+      t : eps * t + g[g_C4x][j],
+      j : j - 1),
+    c[k+1] : t),
+  for k : 2 thru nC4 do (
+    mult : mult * eps,
+    c[k] : c[k] * mult),
+  c)$
+
+transit(lon1, lon2):=block([lon12],
+  /* Return 1 or -1 if crossing prime meridian in east or west direction.
+  * Otherwise return zero. */
+  /* Compute lon12 the same way as Geodesic::Inverse. */
+  lon1 : AngNormalize(lon1),
+  lon2 : AngNormalize(lon2),
+  lon12 : AngDiff(lon1, lon2),
+  if lon1 < 0b0 and lon2 >= 0b0 and lon12 > 0b0 then 1 else
+  (if lon2 < 0b0 and lon1 >= 0b0 and lon12 < 0b0 then -1 else 0))$
+
+/* Return [P, A, mins, maxs] */
+geod_polygonarea(g, points) := block([n:length(points), crossings : 0,
+  area0 : 4 * pi * g[g_c2], A : 0, P : 0, mins : g[g_a] * 100, maxs : 0b0],
+  for i : 1 thru n do block(
+    [ s12, S12, r ],
+    r:geod_geninverse(g,
+      points[i][1], points[i][2],
+      points[mod(i,n)+1][1], points[mod(i,n)+1][2]),
+    s12:r[2], S12:r[8],
+    if s12 > maxs then maxs:s12,
+    if s12 < mins then mins:s12,
+    P : P + s12,
+    /* The minus sign is due to the counter-clockwise convention */
+    A : A - S12,
+    crossings : crossings + transit(points[i][2], points[mod(i,n)+1][2])),
+  if mod(crossings, 2) = 1 then
+  A : A + (if A < 0b0 then 1 else -1) * area0/2,
+  /* Put area in (-area0/2, area0/2] */
+  if A > area0/2 then
+  A : A - area0
+  else if A <= -area0/2 then
+  A : A + area0,
+  [P, A, mins, maxs])$
+
+wgs84:geod_init(6378137b0, 1/298.257223563b0)$
+
+flat(a, GM, omega, J2):=block(
+  [e2:3*J2, K : 2 * (a*omega)^2 * a / (15 * GM), e2a, q0],
+  for j:0 thru 100 do (
+    e2a:e2,q0:qf(e2/(1-e2)),
+    e2:3*J2+K*e2*sqrt(e2)/q0,
+    if e2 = e2a then return(done)),
+  e2/(1+sqrt(1-e2)))$
+qf(ep2):=block([ep,fpprec:3*fpprec],ep:sqrt(ep2),
+  ((1 + 3/ep2) * atan(ep) - 3/ep)/2)$
+/* 1/298.257222100882711243162836607614495 */
+fgrs80:flat(6378137b0, 3986005b8, 7292115b-11, 108263b-8)$
+grs80:geod_init(6378137b0, fgrs80)$
diff --git a/maxima/tm.mac b/maxima/tm.mac
index ef4eef3..a6487c0 100644
--- a/maxima/tm.mac
+++ b/maxima/tm.mac
@@ -2,11 +2,10 @@
 
 Arbitrary precision Transverse Mercator Projection
 
-Written by Charles Karney <charles at karney.com>
+Copyright (c) Charles Karney (2009-2010) <charles at karney.com> and
+licensed under the MIT/X11 License.  For more information, see
 http://geographiclib.sourceforge.net/
 
-$Id: 688c810de1f36d1e2239f39a973835acfc5a8649 $
-
 Reference:
 
    Charles F. F. Karney,
diff --git a/maxima/tmseries.mac b/maxima/tmseries.mac
index 0a83431..f39378c 100644
--- a/maxima/tmseries.mac
+++ b/maxima/tmseries.mac
@@ -1,12 +1,10 @@
 /*
-
 Compute series approximations for Transverse Mercator Projection
 
-Written by Charles Karney <charles at karney.com>
+Copyright (c) Charles Karney (2009-2010) <charles at karney.com> and
+licensed under the MIT/X11 License.  For more information, see
 http://geographiclib.sourceforge.net/
 
-$Id: c790f624c09d809837ba853444e8f82db01a1665 $
-
 Reference:
 
    Charles F. F. Karney,
@@ -99,7 +97,6 @@ reverta(expr,var1,var2,eps,pow):=block([tauacc:1,sigacc:0,dsig],
     sigacc:sigacc+expand(diff(tauacc,var2,n-1))),
   var2+sigacc)$
 
-
 /* Expansion for atan(x+eps) for small eps.  Equivalent to
    taylor(atan(x + eps), eps, 0, maxpow) but tidied up a bit.
  */
diff --git a/missing b/missing
index 28055d2..9a55648 100755
--- a/missing
+++ b/missing
@@ -1,10 +1,9 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-01-06.18; # UTC
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -26,7 +25,7 @@ scriptversion=2009-04-28.21; # UTC
 # the same distribution terms that you use for the rest of that program.
 
 if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
+  echo 1>&2 "Try '$0 --help' for more information"
   exit 1
 fi
 
@@ -34,7 +33,7 @@ run=:
 sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
 sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
 
-# In the cases where this matters, `missing' is being run in the
+# In the cases where this matters, 'missing' is being run in the
 # srcdir already.
 if test -f configure.ac; then
   configure_ac=configure.ac
@@ -65,7 +64,7 @@ case $1 in
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
 error status if there is no known handling for PROGRAM.
 
 Options:
@@ -74,21 +73,20 @@ Options:
   --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
+  aclocal      touch file 'aclocal.m4'
+  autoconf     touch file 'configure'
+  autoheader   touch file 'config.h.in'
   autom4te     touch the output file, or create a stub one
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
+  automake     touch all 'Makefile.in' files
+  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
+  flex         create 'lex.yy.c', if possible, from existing .c
   help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
+  lex          create 'lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
 
-Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
-\`g' are ignored when checking the name.
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
 
 Send bug reports to <bug-automake at gnu.org>."
     exit $?
@@ -100,8 +98,8 @@ Send bug reports to <bug-automake at gnu.org>."
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
+    echo 1>&2 "$0: Unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
@@ -122,22 +120,13 @@ case $1 in
     # Not GNU programs, they don't have --version.
     ;;
 
-  tar*)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
   *)
     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
        # We have it, but it failed.
        exit 1
     elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
        # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # running '$TOOL --version' or '$TOOL --help' to check whether
        # $TOOL exists and not knowing $TOOL uses missing.
        exit 1
     fi
@@ -149,27 +138,27 @@ esac
 case $program in
   aclocal*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
+         to install the Automake and Perl packages.  Grab them from
          any GNU archive site."
     touch aclocal.m4
     ;;
 
   autoconf*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+WARNING: '$1' is $msg.  You should only need it if
+         you modified '${configure_ac}'.  You might want to install the
+         Autoconf and GNU m4 packages.  Grab them from any GNU
          archive site."
     touch configure
     ;;
 
   autoheader*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acconfig.h' or '${configure_ac}'.  You might want
+         to install the Autoconf and GNU m4 packages.  Grab them
          from any GNU archive site."
     files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
     test -z "$files" && files="config.h"
@@ -186,9 +175,9 @@ WARNING: \`$1' is $msg.  You should only need it if
 
   automake*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
+         You might want to install the Automake and Perl packages.
          Grab them from any GNU archive site."
     find . -type f -name Makefile.am -print |
 	   sed 's/\.am$/.in/' |
@@ -197,10 +186,10 @@ WARNING: \`$1' is $msg.  You should only need it if
 
   autom4te*)
     echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
+WARNING: '$1' is needed, but is $msg.
          You might have modified some files without having the
          proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
+         You can get '$1' as part of Autoconf from any GNU
          archive site."
 
     file=`echo "$*" | sed -n "$sed_output"`
@@ -220,13 +209,13 @@ WARNING: \`$1' is needed, but is $msg.
 
   bison*|yacc*)
     echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
+WARNING: '$1' $msg.  You should only need it if
+         you modified a '.y' file.  You may need the Bison package
          in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
+         Bison from any GNU archive site."
     rm -f y.tab.c y.tab.h
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.y)
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
@@ -250,13 +239,13 @@ WARNING: \`$1' $msg.  You should only need it if
 
   lex*|flex*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.l' file.  You may need the Flex package
          in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
+         Flex from any GNU archive site."
     rm -f lex.yy.c
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.l)
 	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
@@ -273,10 +262,10 @@ WARNING: \`$1' is $msg.  You should only need it if
 
   help2man*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: '$1' is $msg.  You should only need it if
 	 you modified a dependency of a manual page.  You may need the
-	 \`Help2man' package in order for those modifications to take
-	 effect.  You can get \`Help2man' from any GNU archive site."
+	 Help2man package in order for those modifications to take
+	 effect.  You can get Help2man from any GNU archive site."
 
     file=`echo "$*" | sed -n "$sed_output"`
     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
@@ -291,12 +280,12 @@ WARNING: \`$1' is $msg.  You should only need it if
 
   makeinfo*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.texi' or '.texinfo' file, or any other file
          indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
+         call might also be the consequence of using a buggy 'make' (AIX,
+         DU, IRIX).  You might want to install the Texinfo package or
+         the GNU make package.  Grab either from any GNU archive site."
     # The file to touch is that specified with -o ...
     file=`echo "$*" | sed -n "$sed_output"`
     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
@@ -318,49 +307,14 @@ WARNING: \`$1' is $msg.  You should only need it if
     touch $file
     ;;
 
-  tar*)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case $firstarg in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case $firstarg in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
   *)
     echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
+WARNING: '$1' is needed, and is $msg.
          You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
+         proper tools for further handling them.  Check the 'README' file,
          it often tells you about the needed prerequisites for installing
          this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
+         some other package would contain this missing '$1' program."
     exit 1
     ;;
 esac
diff --git a/python/Makefile.am b/python/Makefile.am
index 43cec4b..97f7ea8 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -2,7 +2,6 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: 9b974cbcac490c66540bdd090786d14e12719d82 $
 
 PACKAGE=geographiclib
 PYTHON_FILES = \
diff --git a/python/Makefile.in b/python/Makefile.in
index 1f8a30d..6a0d08a 100644
--- a/python/Makefile.in
+++ b/python/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,8 +18,24 @@
 # Makefile.am
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
-# $Id: 9b974cbcac490c66540bdd090786d14e12719d82 $
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -55,6 +70,11 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -66,6 +86,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -76,6 +97,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -84,6 +106,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -119,6 +144,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -242,6 +269,8 @@ TAGS:
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -286,10 +315,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/python/Makefile.mk b/python/Makefile.mk
index b9580bb..e758c2d 100644
--- a/python/Makefile.mk
+++ b/python/Makefile.mk
@@ -1,5 +1,3 @@
-# $Id: 74272e0080b7bb7ccfad039d79f938781045eea9 $
-
 MODULES = __init__ geomath constants accumulator geodesiccapability \
 	geodesic geodesicline polygonarea
 PACKAGE = geographiclib
diff --git a/python/README.txt b/python/README.txt
index d0f7982..22f9c17 100644
--- a/python/README.txt
+++ b/python/README.txt
@@ -1,5 +1,3 @@
-# $Id: 92df59eea0946f2839236c682bd67a621193e67d $
-
 This is a python implementation of the geodesic routines from
 GeographicLib.  This contains implementations of the classes
 
diff --git a/python/geographiclib/CMakeLists.txt b/python/geographiclib/CMakeLists.txt
index e223409..eb5db69 100644
--- a/python/geographiclib/CMakeLists.txt
+++ b/python/geographiclib/CMakeLists.txt
@@ -1,17 +1,21 @@
-# $Id: 1cd13969a90a73112ab8c4bd44fc2194ff0af9ff $
-
 # Install the python files.
 # Probably full-time python users should install the python package from
 # http://pypi.python.org/pypi/geographiclib
-file (GLOB PYTHON_FILES *.py)
+file (GLOB PYTHON_FILES [A-Za-z_]*.py)
+if (COMMON_INSTALL_PATH)
+  set (INSTALL_PYTHON_DIR "lib${LIB_SUFFIX}/python/site-packages")
+else ()
+  set (INSTALL_PYTHON_DIR "python")
+endif ()
+
 install (FILES ${PYTHON_FILES}
-  DESTINATION lib/python/site-packages/geographiclib)
+  DESTINATION ${INSTALL_PYTHON_DIR}/geographiclib)
 
 # Only install setup.py under Windows because the installation tree is,
-# e.g., c:/Program Files/GeographicLib/lib/python/site-packages.  Don't
+# e.g., c:/Program Files/GeographicLib/${INSTALL_PYTHON_PATH}.  Don't
 # install on other systems where this command would create, e.g.,
-# /usr/local/lib/python/site-packages/setup.py which is likely to cause
+# /usr/local/${INSTALL_PYTHON_PATH}/setup.py which is likely to cause
 # conflicts.
-if (WIN32)
-  install (FILES ../setup.py DESTINATION lib/python/site-packages)
+if (NOT COMMON_INSTALL_PATH)
+  install (FILES ../setup.py DESTINATION ${INSTALL_PYTHON_DIR})
 endif ()
diff --git a/python/geographiclib/__init__.py b/python/geographiclib/__init__.py
index e69de29..1e89458 100644
--- a/python/geographiclib/__init__.py
+++ b/python/geographiclib/__init__.py
@@ -0,0 +1 @@
+"""geographiclib: geodesic routines from GeographicLib"""
diff --git a/python/geographiclib/accumulator.py b/python/geographiclib/accumulator.py
index 7c85d88..9f6a2f2 100644
--- a/python/geographiclib/accumulator.py
+++ b/python/geographiclib/accumulator.py
@@ -1,36 +1,24 @@
+"""accumulator.py: transcription of GeographicLib::Accumulator class."""
 # accumulator.py
 #
-# This is a rather literal translation of the GeographicLib::Accumulator
-# class from to python.  See the documentation for the C++ class for
-# more information at
+# This is a rather literal translation of the GeographicLib::Accumulator class
+# from to python.  See the documentation for the C++ class for more information
+# at
 #
 #    http://geographiclib.sourceforge.net/html/annotated.html
 #
-# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
-# under the MIT/X11 License.  For more information, see
+# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
+# the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: bbf905e5f404f97b10497ac32fa02b4203cb0c7d $
 ######################################################################
 
+from geographiclib.geomath import Math
+
 class Accumulator(object):
   """Like math.fsum, but allows a running sum"""
 
-  def sum(u, v):
-    # Error free transformation of a sum.  Note that t can be the same as one
-    # of the first two arguments.
-      s = u + v
-      up = s - v
-      vpp = s - up
-      up -= u
-      vpp -= v
-      t = -(up + vpp)
-      # u + v =       s      + t
-      #       = round(u + v) + t
-      return s, t
-  sum = staticmethod(sum)
-
-  def Set(self, y = 0.0):
+  def Set(self, y):
+    """Set value from argument"""
     if type(self) == type(y):
       self._s, self._t = y._s, y._t
     else:
@@ -40,10 +28,11 @@ class Accumulator(object):
     self.Set(y)
 
   def Add(self, y):
+    """Add a value"""
     # Here's Shewchuk's solution...
     # hold exact sum as [s, t, u]
-    y, u = Accumulator.sum(y, self._t) # Accumulate starting at
-    self._s, self._t = Accumulator.sum(y, self._s) # least significant end
+    y, u = Math.sum(y, self._t)             # Accumulate starting at
+    self._s, self._t = Math.sum(y, self._s) # least significant end
     # Start is _s, _t decreasing and non-adjacent.  Sum is now (s + t + u)
     # exactly with s, t, u non-adjacent and in decreasing order (except
     # for possible zeros).  The following code tries to normalize the
@@ -78,6 +67,7 @@ class Accumulator(object):
       self._t += u              # otherwise just accumulate u to t.
 
   def Sum(self, y = 0.0):
+    """Return sum + y"""
     if y == 0.0:
       return self._s
     else:
@@ -86,5 +76,6 @@ class Accumulator(object):
       return b._s
 
   def Negate(self):
+    """Negate sum"""
     self._s *= -1
     self._t *= -1
diff --git a/python/geographiclib/constants.py b/python/geographiclib/constants.py
index 634cf46..1434efb 100644
--- a/python/geographiclib/constants.py
+++ b/python/geographiclib/constants.py
@@ -1,15 +1,14 @@
+"""constants.py: transcription of GeographicLib::Constants class."""
 # constants.py
 #
-# This is a translation of the GeographicLib::Constants class to python.
-# See the documentation for the C++ class for more information at
+# This is a translation of the GeographicLib::Constants class to python.  See
+# the documentation for the C++ class for more information at
 #
 #    http://geographiclib.sourceforge.net/html/annotated.html
 #
-# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
-# under the MIT/X11 License.  For more information, see
+# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
+# the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: dd3c90107aedf80bead4c3f5c670df2b3eed7492 $
 ######################################################################
 
 class Constants(object):
diff --git a/python/geographiclib/geodesic.py b/python/geographiclib/geodesic.py
index 01c50d2..fc46ca7 100644
--- a/python/geographiclib/geodesic.py
+++ b/python/geographiclib/geodesic.py
@@ -1,27 +1,21 @@
+"""geodesic.py: transcription of GeographicLib::Geodesic class."""
 # geodesic.py
 #
-# This is a rather literal translation of the GeographicLib::Geodesic
-# class to python.  See the documentation for the C++ class for more
-# information at
+# This is a rather literal translation of the GeographicLib::Geodesic class to
+# python.  See the documentation for the C++ class for more information at
 #
 #    http://geographiclib.sourceforge.net/html/annotated.html
 #
 # The algorithms are derived in
 #
 #    Charles F. F. Karney,
-#    Geodesics on an ellipsoid of revolution, Feb. 2011,
-#    http://arxiv.org/abs/1102.1215
-#    errata: http://geographiclib.sourceforge.net/geod-errata.html
+#    Algorithms for geodesics, J. Geodesy 87, 43-55 (2013),
+#    http://dx.doi.org/10.1007/s00190-012-0578-z
+#    Addenda: http://geographiclib.sf.net/geod-addenda.html
 #
-#    Charles F. F. Karney,
-#    Algorithms for geodesics, Sept. 2011,
-#    http://arxiv.org/abs/1109.4448
-#
-# Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and
-# licensed under the MIT/X11 License.  For more information, see
+# Copyright (c) Charles Karney (2011-2013) <charles at karney.com> and licensed
+# under the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: 95edebf1ac240458e1ba8a63577c589f330f849d $
 ######################################################################
 
 import math
@@ -34,7 +28,7 @@ class Geodesic(object):
   Solve geodesic problems.  The following illustrates its use
 
     import sys
-    sys.path.append("/usr/local/lib/python/site-packages");
+    sys.path.append("/usr/local/lib/python/site-packages")
     from geographiclib.geodesic import Geodesic
 
     # The geodesic inverse problem
@@ -61,51 +55,58 @@ class Geodesic(object):
     help(Geodesic.Line)
     help(line.Position)
     help(Geodesic.Area)
+
+  All angles (latitudes, longitudes, azimuths, spherical arc lengths) are
+  measured in degrees.  All lengths (distance, reduced length) are measured in
+  meters.  All areas are measures in square meters.
   """
 
-  GEOD_ORD = 6
-  nA1_ = GEOD_ORD
-  nC1_ = GEOD_ORD
-  nC1p_ = GEOD_ORD
-  nA2_ = GEOD_ORD
-  nC2_ = GEOD_ORD
-  nA3_ = GEOD_ORD
+  GEOGRAPHICLIB_GEODESIC_ORDER = 6
+  nA1_ = GEOGRAPHICLIB_GEODESIC_ORDER
+  nC1_ = GEOGRAPHICLIB_GEODESIC_ORDER
+  nC1p_ = GEOGRAPHICLIB_GEODESIC_ORDER
+  nA2_ = GEOGRAPHICLIB_GEODESIC_ORDER
+  nC2_ = GEOGRAPHICLIB_GEODESIC_ORDER
+  nA3_ = GEOGRAPHICLIB_GEODESIC_ORDER
   nA3x_ = nA3_
-  nC3_ = GEOD_ORD
-  nC3x_ = (nC3_ * (nC3_ - 1)) / 2
-  nC4_ = GEOD_ORD
-  nC4x_ = (nC4_ * (nC4_ + 1)) / 2
-  maxit_ = 50
+  nC3_ = GEOGRAPHICLIB_GEODESIC_ORDER
+  nC3x_ = (nC3_ * (nC3_ - 1)) // 2
+  nC4_ = GEOGRAPHICLIB_GEODESIC_ORDER
+  nC4x_ = (nC4_ * (nC4_ + 1)) // 2
+  maxit1_ = 20
+  maxit2_ = maxit1_ + Math.digits + 10
 
   tiny_ = math.sqrt(Math.minval)
   tol0_ = Math.epsilon
   tol1_ = 200 * tol0_
-  tol2_ = math.sqrt(Math.epsilon)
+  tol2_ = math.sqrt(tol0_)
+  tolb_ = tol0_ * tol2_
   xthresh_ = 1000 * tol2_
 
   CAP_NONE = GeodesicCapability.CAP_NONE
   CAP_C1   = GeodesicCapability.CAP_C1
-  CAP_C1p  = 1<<1
-  CAP_C2   = 1<<2
-  CAP_C3   = 1<<3
-  CAP_C4   = 1<<4
+  CAP_C1p  = 1 << 1
+  CAP_C2   = 1 << 2
+  CAP_C3   = 1 << 3
+  CAP_C4   = 1 << 4
   CAP_ALL  = 0x1F
   OUT_ALL  = 0x7F80
-  NONE          = 0
-  LATITUDE      = 1<<7  | CAP_NONE
-  LONGITUDE     = 1<<8  | CAP_C3
-  AZIMUTH       = 1<<9  | CAP_NONE
-  DISTANCE      = 1<<10 | CAP_C1
-  DISTANCE_IN   = 1<<11 | CAP_C1 | CAP_C1p
-  REDUCEDLENGTH = 1<<12 | CAP_C1 | CAP_C2
-  GEODESICSCALE = 1<<13 | CAP_C1 | CAP_C2
-  AREA          = 1<<14 | CAP_C4
-  ALL           = OUT_ALL| CAP_ALL
+  EMPTY         = 0
+  LATITUDE      = 1 << 7  | CAP_NONE
+  LONGITUDE     = 1 << 8  | CAP_C3
+  AZIMUTH       = 1 << 9  | CAP_NONE
+  DISTANCE      = 1 << 10 | CAP_C1
+  DISTANCE_IN   = 1 << 11 | CAP_C1 | CAP_C1p
+  REDUCEDLENGTH = 1 << 12 | CAP_C1 | CAP_C2
+  GEODESICSCALE = 1 << 13 | CAP_C1 | CAP_C2
+  AREA          = 1 << 14 | CAP_C4
+  ALL           = OUT_ALL | CAP_ALL
 
   def SinCosSeries(sinp, sinx, cosx, c, n):
+    """Private: Evaluate a trig series using Clenshaw summation."""
     # Evaluate
     # y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :
-    #            sum(c[i] * cos((2*i+1) * x), i, 0, n-1) :
+    #            sum(c[i] * cos((2*i+1) * x), i, 0, n-1)
     # using Clenshaw summation.  N.B. c[0] is unused for sin series
     # Approx operation count = (n + 5) mult and (2 * n + 2) add
     k = (n + sinp)             # Point to one beyond last element
@@ -116,7 +117,7 @@ class Geodesic(object):
     else:
       y0 = 0
     # Now n is even
-    n //= 2
+    n = n // 2
     while n:                    # while n--:
       n -= 1
       # Unroll loop x 2, so accumulators return to their original role
@@ -126,31 +127,28 @@ class Geodesic(object):
              else cosx * (y0 - y1) )      # cos(x) * (y0 - y1)
   SinCosSeries = staticmethod(SinCosSeries)
 
-  def AngNormalize(x):
-    # Place angle in [-180, 180).  Assumes x is in [-540, 540).
-    return (x - 360 if x >= 180 else
-            (x + 360 if x < -180 else x))
-  AngNormalize = staticmethod(AngNormalize)
-
   def AngRound(x):
+    """Private: Round an angle so that small values underflow to zero."""
     # The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
     # for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
     # is about 1000 times more resolution than we get with angles around 90
     # degrees.)  We use this to avoid having to deal with near singular
     # cases when x is non-zero but tiny (e.g., 1.0e-200).
-    z = 0.0625                  # 1/16
+    z = 1/16.0
     y = abs(x)
     # The compiler mustn't "simplify" z - (z - y) to y
-    y = z - (z - y) if y < z else y
+    if y < z: y = z - (z - y)
     return -y if x < 0 else y
   AngRound = staticmethod(AngRound)
 
   def SinCosNorm(sinx, cosx):
+    """Private: Normalize sin and cos."""
     r = math.hypot(sinx, cosx)
     return sinx/r, cosx/r
   SinCosNorm = staticmethod(SinCosNorm)
 
   def Astroid(x, y):
+    """Private: solve astroid equation."""
     # Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.
     # This solution is adapted from Geocentric::Reverse.
     p = Math.sq(x)
@@ -197,12 +195,14 @@ class Geodesic(object):
   Astroid = staticmethod(Astroid)
 
   def A1m1f(eps):
+    """Private: return A1-1."""
     eps2 = Math.sq(eps)
     t = eps2*(eps2*(eps2+4)+64)/256
     return (t + eps) / (1 - eps)
   A1m1f = staticmethod(A1m1f)
 
   def C1f(eps, c):
+    """Private: return C1."""
     eps2 = Math.sq(eps)
     d = eps
     c[1] = d*((6-eps2)*eps2-16)/32
@@ -219,6 +219,7 @@ class Geodesic(object):
   C1f = staticmethod(C1f)
 
   def C1pf(eps, c):
+    """Private: return C1'"""
     eps2 = Math.sq(eps)
     d = eps
     c[1] = d*(eps2*(205*eps2-432)+768)/1536
@@ -235,12 +236,14 @@ class Geodesic(object):
   C1pf = staticmethod(C1pf)
 
   def A2m1f(eps):
+    """Private: return A2-1"""
     eps2 = Math.sq(eps)
     t = eps2*(eps2*(25*eps2+36)+64)/256
     return t * (1 - eps) - eps
   A2m1f = staticmethod(A2m1f)
 
   def C2f(eps, c):
+    """Private: return C2"""
     eps2 = Math.sq(eps)
     d = eps
     c[1] = d*(eps2*(eps2+2)+16)/32
@@ -275,20 +278,30 @@ class Geodesic(object):
                  (Math.atanh(math.sqrt(self._e2)) if self._e2 > 0 else
                   math.atan(math.sqrt(-self._e2))) /
                  math.sqrt(abs(self._e2))))/2
-    # The sig12 threshold for "really short"
-    self._etol2 = 10 * Geodesic.tol2_ / max(0.1, math.sqrt(abs(self._e2)))
+    # The sig12 threshold for "really short".  Using the auxiliary sphere
+    # solution with dnm computed at (bet1 + bet2) / 2, the relative error in
+    # the azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2.
+    # (Error measured for 1/100 < b/a < 100 and abs(f) >= 1/1000.  For a given
+    # f and sig12, the max error occurs for lines near the pole.  If the old
+    # rule for computing dnm = (dn1 + dn2)/2 is used, then the error increases
+    # by a factor of 2.)  Setting this equal to epsilon gives sig12 = etol2.
+    # Here 0.1 is a safety factor (error decreased by 100) and max(0.001,
+    # abs(f)) stops etol2 getting too large in the nearly spherical case.
+    self._etol2 = 0.1 * Geodesic.tol2_ / math.sqrt( max(0.001, abs(self._f)) *
+                                                    min(1.0, 1-self._f/2) / 2 )
     if not(Math.isfinite(self._a) and self._a > 0):
       raise ValueError("Major radius is not positive")
     if not(Math.isfinite(self._b) and self._b > 0):
       raise ValueError("Minor radius is not positive")
-    self._A3x = range(Geodesic.nA3x_)
-    self._C3x = range(Geodesic.nC3x_)
-    self._C4x = range(Geodesic.nC4x_)
+    self._A3x = list(range(Geodesic.nA3x_))
+    self._C3x = list(range(Geodesic.nC3x_))
+    self._C4x = list(range(Geodesic.nC4x_))
     self.A3coeff()
     self.C3coeff()
     self.C4coeff()
 
   def A3coeff(self):
+    """Private: return coefficients for A3"""
     _n = self._n
     self._A3x[0] = 1
     self._A3x[1] = (_n-1)/2
@@ -298,6 +311,7 @@ class Geodesic(object):
     self._A3x[5] = -3/128.0
 
   def C3coeff(self):
+    """Private: return coefficients for C3"""
     _n = self._n
     self._C3x[0] = (1-_n)/4
     self._C3x[1] = (1-_n*_n)/8
@@ -316,44 +330,46 @@ class Geodesic(object):
     self._C3x[14] = 21/2560.0
 
   def C4coeff(self):
-    _ep2 = self._ep2
-    self._C4x[0] = (_ep2*(_ep2*(_ep2*((832-640*_ep2)*_ep2-1144)+1716)-3003)+
-                    30030)/45045
-    self._C4x[1] = (_ep2*(_ep2*((832-640*_ep2)*_ep2-1144)+1716)-3003)/60060
-    self._C4x[2] = (_ep2*((208-160*_ep2)*_ep2-286)+429)/18018
-    self._C4x[3] = ((104-80*_ep2)*_ep2-143)/10296
-    self._C4x[4] = (13-10*_ep2)/1430
-    self._C4x[5] = -1/156.0
-    self._C4x[6] = (_ep2*(_ep2*(_ep2*(640*_ep2-832)+1144)-1716)+3003)/540540
-    self._C4x[7] = (_ep2*(_ep2*(160*_ep2-208)+286)-429)/108108
-    self._C4x[8] = (_ep2*(80*_ep2-104)+143)/51480
-    self._C4x[9] = (10*_ep2-13)/6435
-    self._C4x[10] = 5/3276.0
-    self._C4x[11] = (_ep2*((208-160*_ep2)*_ep2-286)+429)/900900
-    self._C4x[12] = ((104-80*_ep2)*_ep2-143)/257400
-    self._C4x[13] = (13-10*_ep2)/25025
-    self._C4x[14] = -1/2184.0
-    self._C4x[15] = (_ep2*(80*_ep2-104)+143)/2522520
-    self._C4x[16] = (10*_ep2-13)/140140
-    self._C4x[17] = 5/45864.0
-    self._C4x[18] = (13-10*_ep2)/1621620
-    self._C4x[19] = -1/58968.0
-    self._C4x[20] = 1/792792.0
+    """Private: return coefficients for C4"""
+    _n = self._n
+    self._C4x[0] = (_n*(_n*(_n*(_n*(100*_n+208)+572)+3432)-12012)+30030)/45045
+    self._C4x[1] = (_n*(_n*(_n*(64*_n+624)-4576)+6864)-3003)/15015
+    self._C4x[2] = (_n*((14144-10656*_n)*_n-4576)-858)/45045
+    self._C4x[3] = ((-224*_n-4784)*_n+1573)/45045
+    self._C4x[4] = (1088*_n+156)/45045
+    self._C4x[5] = 97/15015.0
+    self._C4x[6] = (_n*(_n*((-64*_n-624)*_n+4576)-6864)+3003)/135135
+    self._C4x[7] = (_n*(_n*(5952*_n-11648)+9152)-2574)/135135
+    self._C4x[8] = (_n*(5792*_n+1040)-1287)/135135
+    self._C4x[9] = (468-2944*_n)/135135
+    self._C4x[10] = 1/9009.0
+    self._C4x[11] = (_n*((4160-1440*_n)*_n-4576)+1716)/225225
+    self._C4x[12] = ((4992-8448*_n)*_n-1144)/225225
+    self._C4x[13] = (1856*_n-936)/225225
+    self._C4x[14] = 8/10725.0
+    self._C4x[15] = (_n*(3584*_n-3328)+1144)/315315
+    self._C4x[16] = (1024*_n-208)/105105
+    self._C4x[17] = -136/63063.0
+    self._C4x[18] = (832-2560*_n)/405405
+    self._C4x[19] = -128/135135.0
+    self._C4x[20] = 128/99099.0
 
   def A3f(self, eps):
-    # Evaluation sum(_A3c[k] * eps^k, k, 0, nA3x_-1) by Horner's method
+    """Private: return A3"""
+    # Evaluate sum(_A3x[k] * eps^k, k, 0, nA3x_-1) by Horner's method
     v = 0
     for i in range(Geodesic.nA3x_-1, -1, -1):
       v = eps * v + self._A3x[i]
     return v
 
   def C3f(self, eps, c):
-    # Evaluation C3 coeffs by Horner's method
+    """Private: return C3"""
+    # Evaluate C3 coeffs by Horner's method
     # Elements c[1] thru c[nC3_ - 1] are set
     j = Geodesic.nC3x_; k = Geodesic.nC3_ - 1
     while k:
       t = 0
-      for i in range(Geodesic.nC3_ - k):
+      for _ in range(Geodesic.nC3_ - k):
         j -= 1
         t = eps * t + self._C3x[j]
       c[k] = t
@@ -364,29 +380,31 @@ class Geodesic(object):
       mult *= eps
       c[k] *= mult
 
-  def C4f(self, k2, c):
-    # Evaluation C4 coeffs by Horner's method
+  def C4f(self, eps, c):
+    """Private: return C4"""
+    # Evaluate C4 coeffs by Horner's method
     # Elements c[0] thru c[nC4_ - 1] are set
     j = Geodesic.nC4x_; k = Geodesic.nC4_
     while k:
       t = 0
-      for i in range(Geodesic.nC4_ - k + 1):
+      for _ in range(Geodesic.nC4_ - k + 1):
         j -= 1
-        t = k2 * t + self._C4x[j]
+        t = eps * t + self._C4x[j]
       k -= 1
       c[k] = t
 
     mult = 1
     for k in range(1, Geodesic.nC4_):
-      mult *= k2
+      mult *= eps
       c[k] *= mult
 
-  # return s12b, m12a, m0, M12, M21
+  # return s12b, m12b, m0, M12, M21
   def Lengths(self, eps, sig12,
-              ssig1, csig1, ssig2, csig2, cbet1, cbet2, scalep,
+              ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2, scalep,
               # Scratch areas of the right size
               C1a, C2a):
-    # Return m12a = (reduced length)/_a; also calculate s12b = distance/_b,
+    """Private: return a bunch of lengths"""
+    # Return m12b = (reduced length)/_b; also calculate s12b = distance/_b,
     # and m0 = coefficient of secular term in expression for reduced length.
     Geodesic.C1f(eps, C1a)
     Geodesic.C2f(eps, C2a)
@@ -398,40 +416,32 @@ class Geodesic(object):
     AB2 = (1 + A2m1) * (
       Geodesic.SinCosSeries(True, ssig2, csig2, C2a, Geodesic.nC2_) -
       Geodesic.SinCosSeries(True, ssig1, csig1, C2a, Geodesic.nC2_))
-    cbet1sq = Math.sq(cbet1)
-    cbet2sq = Math.sq(cbet2)
-    w1 = math.sqrt(1 - self._e2 * cbet1sq)
-    w2 = math.sqrt(1 - self._e2 * cbet2sq)
-    # Make sure it's OK to have repeated dummy arguments
-    m0x = A1m1 - A2m1
-    J12 = m0x * sig12 + (AB1 - AB2)
-    m0 = m0x
-    # Missing a factor of _a.
+    m0 = A1m1 - A2m1
+    J12 = m0 * sig12 + (AB1 - AB2)
+    # Missing a factor of _b.
     # Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure accurate
     # cancellation in the case of coincident points.
-    m12a = ((w2 * (csig1 * ssig2) - w1 * (ssig1 * csig2))
-            - self._f1 * csig1 * csig2 * J12)
+    m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12
     # Missing a factor of _b
     s12b = (1 + A1m1) * sig12 + AB1
     if scalep:
       csig12 = csig1 * csig2 + ssig1 * ssig2
-      J12 *= self._f1
-      M12 = csig12 + (self._e2 * (cbet1sq - cbet2sq) * ssig2 / (w1 + w2)
-                      - csig2 * J12) * ssig1 / w1
-      M21 = csig12 - (self._e2 * (cbet1sq - cbet2sq) * ssig1 / (w1 + w2)
-                        - csig1 * J12) * ssig2 / w2
+      t = self._ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2)
+      M12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1
+      M21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2
     else:
       M12 = M21 = Math.nan
-    return s12b, m12a, m0, M12, M21
+    return s12b, m12b, m0, M12, M21
 
-  # return sig12, salp1, calp1, salp2, calp2
-  def InverseStart(self, sbet1, cbet1, sbet2, cbet2, lam12,
+  # return sig12, salp1, calp1, salp2, calp2, dnm
+  def InverseStart(self, sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12,
                    # Scratch areas of the right size
                    C1a, C2a):
+    """Private: Find a starting value for Newton's method."""
     # Return a starting point for Newton's method in salp1 and calp1 (function
     # value is -1).  If Newton's method doesn't need to be used, return also
     # salp2 and calp2 and function value is sig12.
-    sig12 = -1; salp2 = calp2 = Math.nan # Return values
+    sig12 = -1; salp2 = calp2 = dnm = Math.nan # Return values
     # bet12 = bet2 - bet1 in [0, pi); bet12a = bet2 + bet1 in (-pi, 0]
     sbet12 = sbet2 * cbet1 - cbet2 * sbet1
     cbet12 = cbet2 * cbet1 + sbet2 * sbet1
@@ -443,9 +453,15 @@ class Geodesic(object):
     sbet12a = sbet2 * cbet1
     sbet12a += cbet2 * sbet1
 
-    shortline = cbet12 >= 0 and sbet12 < 0.5 and lam12 <= math.pi / 6
-    omg12 = (lam12 if not shortline else
-             lam12 / math.sqrt(1 - self._e2 * Math.sq((cbet1 + cbet2) / 2)))
+    shortline = cbet12 >= 0 and sbet12 < 0.5 and cbet2 * lam12 < 0.5
+    omg12 = lam12
+    if shortline:
+      sbetm2 = Math.sq(sbet1 + sbet2)
+      # sin((bet1+bet2)/2)^2
+      # =  (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2)
+      sbetm2 /= sbetm2 + Math.sq(cbet1 + cbet2)
+      dnm = math.sqrt(1 + self._ep2 * sbetm2)
+      omg12 /= self._f1 * dnm
     somg12 = math.sin(omg12); comg12 = math.cos(omg12)
 
     salp1 = cbet2 * somg12
@@ -459,11 +475,14 @@ class Geodesic(object):
     if shortline and ssig12 < self._etol2:
       # really short lines
       salp2 = cbet1 * somg12
-      calp2 = sbet12 - cbet1 * sbet2 * Math.sq(somg12) / (1 + comg12)
+      calp2 = sbet12 - cbet1 * sbet2 * (Math.sq(somg12) / (1 + comg12)
+                                        if comg12 >= 0 else 1 - comg12)
       salp2, calp2 = Geodesic.SinCosNorm(salp2, calp2)
       # Set return value
       sig12 = math.atan2(ssig12, csig12)
-    elif csig12 >= 0 or ssig12 >= 3 * abs(self._f) * math.pi * Math.sq(cbet1):
+    elif (abs(self._n) >= 0.1 or # Skip astroid calc if too eccentric
+          csig12 >= 0 or
+          ssig12 >= 6 * abs(self._n) * math.pi * Math.sq(cbet1)):
       # Nothing to do, zeroth order spherical approximation is OK
       pass
     else:
@@ -486,14 +505,14 @@ class Geodesic(object):
         # x = dlat, y = dlong
         cbet12a = cbet2 * cbet1 - sbet2 * sbet1
         bet12a = math.atan2(sbet12a, cbet12a)
-        # real m12a, m0, dummy
+        # real m12b, m0, dummy
         # In the case of lon12 = 180, this repeats a calculation made in
         # Inverse.
-        dummy, m12a, m0, dummy, dummy = self.Lengths(
-          self._n, math.pi + bet12a, sbet1, -cbet1, sbet2, cbet2,
-          cbet1, cbet2, dummy, False, C1a, C2a)
-        x = -1 + m12a/(self._f1 * cbet1 * cbet2 * m0 * math.pi)
-        betscale = (sbet12a / x if x < -real(0.01)
+        dummy, m12b, m0, dummy, dummy = self.Lengths(
+          self._n, math.pi + bet12a, sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
+          cbet1, cbet2, False, C1a, C2a)
+        x = -1 + m12b / (cbet1 * cbet2 * m0 * math.pi)
+        betscale = (sbet12a / x if x < -0.01
                     else -self._f * Math.sq(cbet1) * math.pi)
         lamscale = betscale / cbet1
         y = (lam12 - math.pi) / lamscale
@@ -547,15 +566,18 @@ class Geodesic(object):
         # Update spherical estimate of alp1 using omg12 instead of lam12
         salp1 = cbet2 * somg12
         calp1 = sbet12a - cbet2 * sbet1 * Math.sq(somg12) / (1 - comg12)
-    salp1, calp1 = Geodesic.SinCosNorm(salp1, calp1)
-    return sig12, salp1, calp1, salp2, calp2
+    if salp1 > 0:               # Sanity check on starting guess
+      salp1, calp1 = Geodesic.SinCosNorm(salp1, calp1)
+    else:
+      salp1 = 1; calp1 = 0
+    return sig12, salp1, calp1, salp2, calp2, dnm
 
   # return lam12, salp2, calp2, sig12, ssig1, csig1, ssig2, csig2, eps,
   # domg12, dlam12
-  def Lambda12(self, sbet1, cbet1, sbet2, cbet2, salp1, calp1, diffp,
+  def Lambda12(self, sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1, diffp,
                # Scratch areas of the right size
                C1a, C2a, C3a):
-
+    """Private: Solve hybrid problem"""
     if sbet1 == 0 and calp1 == 0:
       # Break degeneracy of equatorial line.  This case has already been
       # handled.
@@ -612,11 +634,12 @@ class Geodesic(object):
 
     if diffp:
       if calp2 == 0:
-        dlam12 = - 2 * math.sqrt(1 - self._e2 * Math.sq(cbet1)) / sbet1
+        dlam12 = - 2 * self._f1 * dn1 / sbet1
       else:
         dummy, dlam12, dummy, dummy, dummy = self.Lengths(
-          eps, sig12, ssig1, csig1, ssig2, csig2, cbet1, cbet2, False, C1a, C2a)
-        dlam12 /= calp2 * cbet2
+          eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2,
+          False, C1a, C2a)
+        dlam12 *= self._f1 / (calp2 * cbet2)
     else:
       dlam12 = Math.nan
 
@@ -625,19 +648,19 @@ class Geodesic(object):
 
   # return a12, s12, azi1, azi2, m12, M12, M21, S12
   def GenInverse(self, lat1, lon1, lat2, lon2, outmask):
+    """Private: General version of the inverse problem"""
     a12 = s12 = azi1 = azi2 = m12 = M12 = M21 = S12 = Math.nan # return vals
 
     outmask &= Geodesic.OUT_ALL
-    lon1 = Geodesic.AngNormalize(lon1)
-    lon12 = Geodesic.AngNormalize(Geodesic.AngNormalize(lon2) - lon1)
-    # If very close to being on the same meridian, then make it so.
-    # Not sure this is necessary...
+    # Compute longitude difference (AngDiff does this carefully).  Result is
+    # in [-180, 180] but -180 is only for west-going geodesics.  180 is for
+    # east-going and meridional geodesics.
+    lon12 = Math.AngDiff(Math.AngNormalize(lon1), Math.AngNormalize(lon2))
+    # If very close to being on the same half-meridian, then make it so.
     lon12 = Geodesic.AngRound(lon12)
     # Make longitude difference positive.
     lonsign = 1 if lon12 >= 0 else -1
     lon12 *= lonsign
-    if lon12 == 180:
-      lonsign = 1
     # If really close to the equator, treat as on equator.
     lat1 = Geodesic.AngRound(lat1)
     lat2 = Geodesic.AngRound(lat2)
@@ -691,15 +714,18 @@ class Geodesic(object):
       if abs(sbet2) == -sbet1:
         cbet2 = cbet1
 
+    dn1 = math.sqrt(1 + self._ep2 * Math.sq(sbet1))
+    dn2 = math.sqrt(1 + self._ep2 * Math.sq(sbet2))
+
     lam12 = lon12 * Math.degree
     slam12 = 0 if lon12 == 180 else math.sin(lam12)
     clam12 = math.cos(lam12)      # lon12 == 90 isn't interesting
 
     # real a12, sig12, calp1, salp1, calp2, salp2
     # index zero elements of these arrays are unused
-    C1a = range(Geodesic.nC1_ + 1)
-    C2a = range(Geodesic.nC2_ + 1)
-    C3a = range(Geodesic.nC3_)
+    C1a = list(range(Geodesic.nC1_ + 1))
+    C2a = list(range(Geodesic.nC2_ + 1))
+    C3a = list(range(Geodesic.nC3_))
 
     meridian = lat1 == -90 or slam12 == 0
 
@@ -720,18 +746,18 @@ class Geodesic(object):
                          csig1 * csig2 + ssig1 * ssig2)
 
       s12x, m12x, dummy, M12, M21 = self.Lengths(
-        self._n, sig12, ssig1, csig1, ssig2, csig2, cbet1, cbet2,
+        self._n, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2,
         (outmask & Geodesic.GEODESICSCALE) != 0, C1a, C2a)
 
       # Add the check for sig12 since zero length geodesics might yield m12 <
       # 0.  Test case was
       #
-      #    echo 20.001 0 20.001 0 | Geod -i
+      #    echo 20.001 0 20.001 0 | GeodSolve -i
       #
       # In fact, we will have sig12 > pi/2 for meridional geodesic which is
       # not a shortest path.
       if sig12 < 1 or m12x >= 0:
-        m12x *= self._a
+        m12x *= self._b
         s12x *= self._b
         a12 = sig12 / Math.degree
       else:
@@ -748,11 +774,11 @@ class Geodesic(object):
       # Geodesic runs along equator
       calp1 = calp2 = 0; salp1 = salp2 = 1
       s12x = self._a * lam12
-      m12x = self._b * math.sin(lam12 / self._f1)
+      sig12 = omg12 = lam12 / self._f1
+      m12x = self._b * math.sin(sig12)
       if outmask & Geodesic.GEODESICSCALE:
-        M12 = M21 = math.cos(lam12 / self._f1)
+        M12 = M21 = math.cos(sig12)
       a12 = lon12 / self._f1
-      sig12 = omg12 = lam12 / self._f1
 
     elif not meridian:
 
@@ -760,61 +786,90 @@ class Geodesic(object):
       # meridian and geodesic is neither meridional or equatorial.
 
       # Figure a starting point for Newton's method
-      sig12, salp1, calp1, salp2, calp2 = self.InverseStart(
-        sbet1, cbet1, sbet2, cbet2, lam12, C1a, C2a)
+      sig12, salp1, calp1, salp2, calp2, dnm = self.InverseStart(
+        sbet1, cbet1, dn1, sbet2, cbet2, dn2, lam12, C1a, C2a)
 
       if sig12 >= 0:
-        # Short lines (InverseStart sets salp2, calp2)
-        wm = math.sqrt(1 - self._e2 * Math.sq((cbet1 + cbet2) / 2))
-        s12x = sig12 * self._a * wm
-        m12x = (Math.sq(wm) * self._a / self._f1 *
-                math.sin(sig12 * self._f1 / wm))
+        # Short lines (InverseStart sets salp2, calp2, dnm)
+        s12x = sig12 * self._b * dnm
+        m12x = (Math.sq(dnm) * self._b * math.sin(sig12 / dnm))
         if outmask & Geodesic.GEODESICSCALE:
-          M12 = M21 = math.cos(sig12 * self._f1 / wm)
+          M12 = M21 = math.cos(sig12 / dnm)
         a12 = sig12 / Math.degree
-        omg12 = lam12 / wm
+        omg12 = lam12 / (self._f1 * dnm)
       else:
 
-        # Newton's method
+        # Newton's method.  This is a straightforward solution of f(alp1) =
+        # lambda12(alp1) - lam12 = 0 with one wrinkle.  f(alp) has exactly one
+        # root in the interval (0, pi) and its derivative is positive at the
+        # root.  Thus f(alp) is positive for alp > alp1 and negative for alp <
+        # alp1.  During the course of the iteration, a range (alp1a, alp1b) is
+        # maintained which brackets the root and with each evaluation of f(alp)
+        # the range is shrunk if possible.  Newton's method is restarted
+        # whenever the derivative of f is negative (because the new value of
+        # alp1 is then further from the solution) or if the new estimate of
+        # alp1 lies outside (0,pi); in this case, the new starting guess is
+        # taken to be (alp1a + alp1b) / 2.
         # real ssig1, csig1, ssig2, csig2, eps
-        ov = numit = trip = 0
-
-        while numit < Geodesic.maxit_:
+        numit = 0
+        tripn = tripb = False
+        # Bracketing range
+        salp1a = Geodesic.tiny_; calp1a = 1
+        salp1b = Geodesic.tiny_; calp1b = -1
+
+        while numit < Geodesic.maxit2_:
+          # the WGS84 test set: mean = 1.47, sd = 1.25, max = 16
+          # WGS84 and random input: mean = 2.85, sd = 0.60
           (nlam12, salp2, calp2, sig12, ssig1, csig1, ssig2, csig2,
            eps, omg12, dv) = self.Lambda12(
-            sbet1, cbet1, sbet2, cbet2, salp1, calp1, trip < 1, C1a, C2a, C3a)
+            sbet1, cbet1, dn1, sbet2, cbet2, dn2,
+            salp1, calp1, numit < Geodesic.maxit1_, C1a, C2a, C3a)
           v = nlam12 - lam12
-          if not(abs(v) > Geodesic.tiny_) or not(trip < 1):
-            if not(abs(v) <= max(Geodesic.tol1_, ov)):
-              numit = Geodesic.maxit_
+          # 2 * tol0 is approximately 1 ulp for a number in [0, pi].
+          # Reversed test to allow escape with NaNs
+          if tripb or not (abs(v) >= (8 if tripn else 2) * Geodesic.tol0_):
             break
-          dalp1 = -v/dv
-          sdalp1 = math.sin(dalp1); cdalp1 = math.cos(dalp1)
-          nsalp1 = salp1 * cdalp1 + calp1 * sdalp1
-          calp1 = calp1 * cdalp1 - salp1 * sdalp1
-          salp1 = max(0.0, nsalp1)
-          salp1, calp1 = Geodesic.SinCosNorm(salp1, calp1)
-          # In some regimes we don't get quadratic convergence because slope
-          # -> 0.  So use convergence conditions based on epsilon instead of
-          # sqrt(epsilon).  The first criterion is a test on abs(v) against
-          # 100 * epsilon.  The second takes credit for an anticipated
-          # reduction in abs(v) by v/ov (due to the latest update in alp1) and
-          # checks this against epsilon.
-          if not(abs(v) >= Geodesic.tol1_ and
-                 Math.sq(v) >= ov * Geodesic.tol0_):
-            trip += 1
-          ov = abs(v)
-          numit += 1
+          # Update bracketing values
+          if v > 0 and (numit > Geodesic.maxit1_ or
+                        calp1/salp1 > calp1b/salp1b):
+            salp1b = salp1; calp1b = calp1
+          elif v < 0 and (numit > Geodesic.maxit1_ or
+                          calp1/salp1 < calp1a/salp1a):
+            salp1a = salp1; calp1a = calp1
 
-        if numit >= Geodesic.maxit_:
-          # Signal failure.
-          return a12, s12, azi1, azi2, m12, M12, M21, S12
+          numit += 1
+          if numit < Geodesic.maxit1_ and dv > 0:
+            dalp1 = -v/dv
+            sdalp1 = math.sin(dalp1); cdalp1 = math.cos(dalp1)
+            nsalp1 = salp1 * cdalp1 + calp1 * sdalp1
+            if nsalp1 > 0 and abs(dalp1) < math.pi:
+              calp1 = calp1 * cdalp1 - salp1 * sdalp1
+              salp1 = nsalp1
+              salp1, calp1 = Geodesic.SinCosNorm(salp1, calp1)
+              # In some regimes we don't get quadratic convergence because
+              # slope -> 0.  So use convergence conditions based on epsilon
+              # instead of sqrt(epsilon).
+              tripn = abs(v) <= 16 * Geodesic.tol0_
+              continue
+          # Either dv was not postive or updated value was outside legal range.
+          # Use the midpoint of the bracket as the next estimate.  This
+          # mechanism is not needed for the WGS84 ellipsoid, but it does catch
+          # problems with more eccentric ellipsoids.  Its efficacy is such for
+          # the WGS84 test set with the starting guess set to alp1 = 90deg:
+          # the WGS84 test set: mean = 5.21, sd = 3.93, max = 24
+          # WGS84 and random input: mean = 4.74, sd = 0.99
+          salp1 = (salp1a + salp1b)/2
+          calp1 = (calp1a + calp1b)/2
+          salp1, calp1 = Geodesic.SinCosNorm(salp1, calp1)
+          tripn = False
+          tripb = (abs(salp1a - salp1) + (calp1a - calp1) < Geodesic.tolb_ or
+                   abs(salp1 - salp1b) + (calp1 - calp1b) < Geodesic.tolb_)
 
         s12x, m12x, dummy, M12, M21 = self.Lengths(
-          eps, sig12, ssig1, csig1, ssig2, csig2, cbet1, cbet2,
+          eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, cbet1, cbet2,
           (outmask & Geodesic.GEODESICSCALE) != 0, C1a, C2a)
 
-        m12x *= self._a
+        m12x *= self._b
         s12x *= self._b
         a12 = sig12 / Math.degree
         omg12 = lam12 - omg12
@@ -836,12 +891,13 @@ class Geodesic(object):
         ssig1 = sbet1; csig1 = calp1 * cbet1
         ssig2 = sbet2; csig2 = calp2 * cbet2
         k2 = Math.sq(calp0) * self._ep2
+        eps = k2 / (2 * (1 + math.sqrt(1 + k2)) + k2)
         # Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0).
         A4 = Math.sq(self._a) * calp0 * salp0 * self._e2
         ssig1, csig1 = Geodesic.SinCosNorm(ssig1, csig1)
         ssig2, csig2 = Geodesic.SinCosNorm(ssig2, csig2)
-        C4a = range(Geodesic.nC4_)
-        self.C4f(k2, C4a)
+        C4a = list(range(Geodesic.nC4_))
+        self.C4f(eps, C4a)
         B41 = Geodesic.SinCosSeries(False, ssig1, csig1, C4a, Geodesic.nC4_)
         B42 = Geodesic.SinCosSeries(False, ssig2, csig2, C4a, Geodesic.nC4_)
         S12 = A4 * (B42 - B41)
@@ -894,20 +950,23 @@ class Geodesic(object):
     return a12, s12, azi1, azi2, m12, M12, M21, S12
 
   def CheckPosition(lat, lon):
-    if not (abs(lat) <= 90):
+    """Check that lat and lon are legal and return normalized lon"""
+    if (abs(lat) > 90):
       raise ValueError("latitude " + str(lat) + " not in [-90, 90]")
-    if not (lon >= -180 and lon <= 360):
-      raise ValueError("longitude " + str(lon) + " not in [-180, 360]")
-    return Geodesic.AngNormalize(lon)
+    if (lon < -540 or lon >= 540):
+      raise ValueError("longitude " + str(lon) + " not in [-540, 540)")
+    return Math.AngNormalize(lon)
   CheckPosition = staticmethod(CheckPosition)
 
   def CheckAzimuth(azi):
-    if not (azi >= -180 and azi <= 360):
-      raise ValueError("azimuth " + str(azi) + " not in [-180, 360]")
-    return Geodesic.AngNormalize(azi)
+    """Check that azi is legal and return normalized value"""
+    if (azi < -540 or azi >= 540):
+      raise ValueError("azimuth " + str(azi) + " not in [-540, 540)")
+    return Math.AngNormalize(azi)
   CheckAzimuth = staticmethod(CheckAzimuth)
 
   def CheckDistance(s):
+    """Check that s is a legal distance"""
     if not (Math.isfinite(s)):
       raise ValueError("distance " + str(s) + " not a finite number")
   CheckDistance = staticmethod(CheckDistance)
@@ -964,11 +1023,12 @@ class Geodesic(object):
 
   # return a12, lat2, lon2, azi2, s12, m12, M12, M21, S12
   def GenDirect(self, lat1, lon1, azi1, arcmode, s12_a12, outmask):
+    """Private: General version of direct problem"""
     from geographiclib.geodesicline import GeodesicLine
     line = GeodesicLine(
       self, lat1, lon1, azi1,
       # Automatically supply DISTANCE_IN if necessary
-      outmask | ( Geodesic.NONE if arcmode else Geodesic.DISTANCE_IN))
+      outmask | ( Geodesic.EMPTY if arcmode else Geodesic.DISTANCE_IN))
     return line.GenPosition(arcmode, s12_a12, outmask)
 
   def Direct(self, lat1, lon1, azi1, s12,
@@ -998,7 +1058,6 @@ class Geodesic(object):
       Geodesic.LATITUDE
       Geodesic.LONGITUDE
       Geodesic.AZIMUTH
-      Geodesic.DISTANCE
       Geodesic.REDUCEDLENGTH
       Geodesic.GEODESICSCALE
       Geodesic.AREA
@@ -1023,6 +1082,58 @@ class Geodesic(object):
     if outmask & Geodesic.AREA: result['S12'] = S12
     return result
 
+  def ArcDirect(self, lat1, lon1, azi1, a12,
+                outmask = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE):
+    """
+    Solve the direct geodesic problem.  Compute geodesic starting at
+    (lat1, lon1) with azimuth azi1 and spherical arc length a12.
+    Return a dictionary with (some) of the following entries:
+
+      lat1 latitude of point 1
+      lon1 longitude of point 1
+      azi1 azimuth of line at point 1
+      lat2 latitude of point 2
+      lon2 longitude of point 2
+      azi2 azimuth of line at point 2
+      s12 distance from 1 to 2
+      a12 arc length on auxiliary sphere from 1 to 2
+      m12 reduced length of geodesic
+      M12 geodesic scale 2 relative to 1
+      M21 geodesic scale 1 relative to 2
+      S12 area between geodesic and equator
+
+    outmask determines which fields get included and if outmask is
+    omitted, then only the basic geodesic fields are computed.  The mask
+    is an or'ed combination of the following values
+
+      Geodesic.LATITUDE
+      Geodesic.LONGITUDE
+      Geodesic.AZIMUTH
+      Geodesic.DISTANCE
+      Geodesic.REDUCEDLENGTH
+      Geodesic.GEODESICSCALE
+      Geodesic.AREA
+      Geodesic.ALL
+    """
+
+    lon1 = Geodesic.CheckPosition(lat1, lon1)
+    azi1 = Geodesic.CheckAzimuth(azi1)
+    Geodesic.CheckDistance(a12)
+
+    result = {'lat1': lat1, 'lon1': lon1, 'azi1': azi1, 'a12': a12}
+    a12, lat2, lon2, azi2, s12, m12, M12, M21, S12 = self.GenDirect(
+      lat1, lon1, azi1, True, a12, outmask)
+    outmask &= Geodesic.OUT_ALL
+    if outmask & Geodesic.DISTANCE: result['s12'] = s12
+    if outmask & Geodesic.LATITUDE: result['lat2'] = lat2
+    if outmask & Geodesic.LONGITUDE: result['lon2'] = lon2
+    if outmask & Geodesic.AZIMUTH: result['azi2'] = azi2
+    if outmask & Geodesic.REDUCEDLENGTH: result['m12'] = m12
+    if outmask & Geodesic.GEODESICSCALE:
+      result['M12'] = M12; result['M21'] = M21
+    if outmask & Geodesic.AREA: result['S12'] = S12
+    return result
+
   def Line(self, lat1, lon1, azi1, caps = ALL):
     """
     Return a GeodesicLine object to compute points along a geodesic
diff --git a/python/geographiclib/geodesiccapability.py b/python/geographiclib/geodesiccapability.py
index 6d46cf6..1c7c0e7 100644
--- a/python/geographiclib/geodesiccapability.py
+++ b/python/geographiclib/geodesiccapability.py
@@ -1,16 +1,15 @@
+"""geodesiccapability.py: capability constants for geodesic{,line}.py"""
 # geodesiccapability.py
 #
 # This gathers the capability constants need by geodesic.py and
-# geodesicline.py.  See the documentation for the
-# GeographicLib::Geodesic class for more information at
+# geodesicline.py.  See the documentation for the GeographicLib::Geodesic class
+# for more information at
 #
 #    http://geographiclib.sourceforge.net/html/annotated.html
 #
-# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
-# under the MIT/X11 License.  For more information, see
+# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
+# the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: 91d8d768ad86c1d65a1d9b5f67ad310466670a49 $
 ######################################################################
 
 class GeodesicCapability(object):
@@ -19,21 +18,21 @@ class GeodesicCapability(object):
   """
 
   CAP_NONE = 0
-  CAP_C1   = 1<<0
-  CAP_C1p  = 1<<1
-  CAP_C2   = 1<<2
-  CAP_C3   = 1<<3
-  CAP_C4   = 1<<4
+  CAP_C1   = 1 << 0
+  CAP_C1p  = 1 << 1
+  CAP_C2   = 1 << 2
+  CAP_C3   = 1 << 3
+  CAP_C4   = 1 << 4
   CAP_ALL  = 0x1F
   OUT_ALL  = 0x7F80
-  NONE          = 0
-  LATITUDE      = 1<<7  | CAP_NONE
-  LONGITUDE     = 1<<8  | CAP_C3
-  AZIMUTH       = 1<<9  | CAP_NONE
-  DISTANCE      = 1<<10 | CAP_C1
-  DISTANCE_IN   = 1<<11 | CAP_C1 | CAP_C1p
-  REDUCEDLENGTH = 1<<12 | CAP_C1 | CAP_C2
-  GEODESICSCALE = 1<<13 | CAP_C1 | CAP_C2
-  AREA          = 1<<14 | CAP_C4
-  ALL           = OUT_ALL| CAP_ALL
+  EMPTY         = 0
+  LATITUDE      = 1 << 7  | CAP_NONE
+  LONGITUDE     = 1 << 8  | CAP_C3
+  AZIMUTH       = 1 << 9  | CAP_NONE
+  DISTANCE      = 1 << 10 | CAP_C1
+  DISTANCE_IN   = 1 << 11 | CAP_C1 | CAP_C1p
+  REDUCEDLENGTH = 1 << 12 | CAP_C1 | CAP_C2
+  GEODESICSCALE = 1 << 13 | CAP_C1 | CAP_C2
+  AREA          = 1 << 14 | CAP_C4
+  ALL           = OUT_ALL | CAP_ALL
 
diff --git a/python/geographiclib/geodesicline.py b/python/geographiclib/geodesicline.py
index 15e1769..6d2589b 100644
--- a/python/geographiclib/geodesicline.py
+++ b/python/geographiclib/geodesicline.py
@@ -1,27 +1,21 @@
+"""geodesicline.py: transcription of GeographicLib::GeodesicLine class."""
 # geodesicline.py
 #
-# This is a rather literal translation of the
-# GeographicLib::GeodesicLine class to python.  See the documentation
-# for the C++ class for more information at
+# This is a rather literal translation of the GeographicLib::GeodesicLine class
+# to python.  See the documentation for the C++ class for more information at
 #
 #    http://geographiclib.sourceforge.net/html/annotated.html
 #
 # The algorithms are derived in
 #
 #    Charles F. F. Karney,
-#    Geodesics on an ellipsoid of revolution, Feb. 2011,
-#    http://arxiv.org/abs/1102.1215
-#    errata: http://geographiclib.sourceforge.net/geod-errata.html
+#    Algorithms for geodesics, J. Geodesy 87, 43-55 (2013),
+#    http://dx.doi.org/10.1007/s00190-012-0578-z
+#    Addenda: http://geographiclib.sf.net/geod-addenda.html
 #
-#    Charles F. F. Karney,
-#    Algorithms for geodesics, Sept. 2011,
-#    http://arxiv.org/abs/1109.4448
-#
-# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
+# Copyright (c) Charles Karney (2011-2013) <charles at karney.com> and licensed
 # under the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: d5d0b60d8d88eaea0cdc504a6b73fc6fb6049f0c $
 ######################################################################
 
 import math
@@ -40,10 +34,9 @@ class GeodesicLine(object):
     self._f1 = geod._f1
     self._caps = caps | Geodesic.LATITUDE | Geodesic.AZIMUTH
 
-    azi1 = Geodesic.AngNormalize(azi1)
     # Guard against underflow in salp0
-    azi1 = Geodesic.AngRound(azi1)
-    lon1 = Geodesic.AngNormalize(lon1)
+    azi1 = Geodesic.AngRound(Math.AngNormalize(azi1))
+    lon1 = Math.AngNormalize(lon1)
     self._lat1 = lat1
     self._lon1 = lon1
     self._azi1 = azi1
@@ -59,6 +52,7 @@ class GeodesicLine(object):
     sbet1 = self._f1 * math.sin(phi)
     cbet1 = Geodesic.tiny_ if abs(lat1) == 90 else math.cos(phi)
     sbet1, cbet1 = Geodesic.SinCosNorm(sbet1, cbet1)
+    self._dn1 = math.sqrt(1 + geod._ep2 * Math.sq(sbet1))
 
     # Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0),
     self._salp0 = self._salp1 * cbet1 # alp0 in [0, pi/2 - |bet1|]
@@ -79,14 +73,15 @@ class GeodesicLine(object):
                                  if sbet1 != 0 or self._calp1 != 0 else 1)
     # sig1 in (-pi, pi]
     self._ssig1, self._csig1 = Geodesic.SinCosNorm(self._ssig1, self._csig1)
-    self._somg1, self._comg1 = Geodesic.SinCosNorm(self._somg1, self._comg1)
+    # No need to normalize
+    # self._somg1, self._comg1 = Geodesic.SinCosNorm(self._somg1, self._comg1)
 
     self._k2 = Math.sq(self._calp0) * geod._ep2
     eps = self._k2 / (2 * (1 + math.sqrt(1 + self._k2)) + self._k2)
 
     if self._caps & Geodesic.CAP_C1:
       self._A1m1 = Geodesic.A1m1f(eps)
-      self._C1a = range(Geodesic.nC1_ + 1)
+      self._C1a = list(range(Geodesic.nC1_ + 1))
       Geodesic.C1f(eps, self._C1a)
       self._B11 = Geodesic.SinCosSeries(
         True, self._ssig1, self._csig1, self._C1a, Geodesic.nC1_)
@@ -98,26 +93,26 @@ class GeodesicLine(object):
       #    _B11 = -SinCosSeries(true, _stau1, _ctau1, _C1pa, nC1p_)
 
     if self._caps & Geodesic.CAP_C1p:
-      self._C1pa = range(Geodesic.nC1p_ + 1)
+      self._C1pa = list(range(Geodesic.nC1p_ + 1))
       Geodesic.C1pf(eps, self._C1pa)
 
     if self._caps & Geodesic.CAP_C2:
       self._A2m1 = Geodesic.A2m1f(eps)
-      self._C2a = range(Geodesic.nC2_ + 1)
+      self._C2a = list(range(Geodesic.nC2_ + 1))
       Geodesic.C2f(eps, self._C2a)
       self._B21 = Geodesic.SinCosSeries(
         True, self._ssig1, self._csig1, self._C2a, Geodesic.nC2_)
 
     if self._caps & Geodesic.CAP_C3:
-      self._C3a = range(Geodesic.nC3_)
+      self._C3a = list(range(Geodesic.nC3_))
       geod.C3f(eps, self._C3a)
       self._A3c = -self._f * self._salp0 * geod.A3f(eps)
       self._B31 = Geodesic.SinCosSeries(
         True, self._ssig1, self._csig1, self._C3a, Geodesic.nC3_-1)
 
     if self._caps & Geodesic.CAP_C4:
-      self._C4a = range(Geodesic.nC4_)
-      geod.C4f(self._k2, self._C4a)
+      self._C4a = list(range(Geodesic.nC4_))
+      geod.C4f(eps, self._C4a)
       # Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0)
       self._A4 = Math.sq(self._a) * self._calp0 * self._salp0 * geod._e2
       self._B41 = Geodesic.SinCosSeries(
@@ -125,7 +120,7 @@ class GeodesicLine(object):
 
   # return a12, lat2, lon2, azi2, s12, m12, M12, M21, S12
   def GenPosition(self, arcmode, s12_a12, outmask):
-
+    """Private: General solution of position along geodesic"""
     from geographiclib.geodesic import Geodesic
     a12 = lat2 = lon2 = azi2 = s12 = m12 = M12 = M21 = S12 = Math.nan
     outmask &= self._caps & Geodesic.OUT_ALL
@@ -147,20 +142,53 @@ class GeodesicLine(object):
       tau12 = s12_a12 / (self._b * (1 + self._A1m1))
       s = math.sin(tau12); c = math.cos(tau12)
       # tau2 = tau1 + tau12
-      B12 = - Geodesic.SinCosSeries(True, self._stau1 * c + self._ctau1 * s,
-                                     self._ctau1 * c - self._stau1 * s,
-                                     self._C1pa, Geodesic.nC1p_)
+      B12 = - Geodesic.SinCosSeries(True,
+                                    self._stau1 * c + self._ctau1 * s,
+                                    self._ctau1 * c - self._stau1 * s,
+                                    self._C1pa, Geodesic.nC1p_)
       sig12 = tau12 - (B12 - self._B11)
       ssig12 = math.sin(sig12); csig12 = math.cos(sig12)
+      if abs(self._f) > 0.01:
+        # Reverted distance series is inaccurate for |f| > 1/100, so correct
+        # sig12 with 1 Newton iteration.  The following table shows the
+        # approximate maximum error for a = WGS_a() and various f relative to
+        # GeodesicExact.
+        #     erri = the error in the inverse solution (nm)
+        #     errd = the error in the direct solution (series only) (nm)
+        #     errda = the error in the direct solution (series + 1 Newton) (nm)
+        #
+        #       f     erri  errd errda
+        #     -1/5    12e6 1.2e9  69e6
+        #     -1/10  123e3  12e6 765e3
+        #     -1/20   1110 108e3  7155
+        #     -1/50  18.63 200.9 27.12
+        #     -1/100 18.63 23.78 23.37
+        #     -1/150 18.63 21.05 20.26
+        #      1/150 22.35 24.73 25.83
+        #      1/100 22.35 25.03 25.31
+        #      1/50  29.80 231.9 30.44
+        #      1/20   5376 146e3  10e3
+        #      1/10  829e3  22e6 1.5e6
+        #      1/5   157e6 3.8e9 280e6
+        ssig2 = self._ssig1 * csig12 + self._csig1 * ssig12
+        csig2 = self._csig1 * csig12 - self._ssig1 * ssig12
+        B12 = Geodesic.SinCosSeries(True, ssig2, csig2,
+                                    self._C1a, Geodesic.nC1_)
+        serr = ((1 + self._A1m1) * (sig12 + (B12 - self._B11)) -
+                s12_a12 / self._b)
+        sig12 = sig12 - serr / math.sqrt(1 + self._k2 * Math.sq(ssig2))
+        ssig12 = math.sin(sig12); csig12 = math.cos(sig12)
+        # Update B12 below
 
     # real omg12, lam12, lon12
     # real ssig2, csig2, sbet2, cbet2, somg2, comg2, salp2, calp2
     # sig2 = sig1 + sig12
     ssig2 = self._ssig1 * csig12 + self._csig1 * ssig12
     csig2 = self._csig1 * csig12 - self._ssig1 * ssig12
+    dn2 = math.sqrt(1 + self._k2 * Math.sq(ssig2))
     if outmask & (
       Geodesic.DISTANCE | Geodesic.REDUCEDLENGTH | Geodesic.GEODESICSCALE):
-      if arcmode:
+      if arcmode or abs(self._f) > 0.01:
         B12 = Geodesic.SinCosSeries(True, ssig2, csig2,
                                     self._C1a, Geodesic.nC1_)
       AB1 = (1 + self._A1m1) * (B12 - self._B11)
@@ -188,10 +216,10 @@ class GeodesicLine(object):
                                        self._C3a, Geodesic.nC3_-1)
                  - self._B31))
       lon12 = lam12 / Math.degree
-      # Can't use AngNormalize because longitude might have wrapped multiple
-      # times.
-      lon12 = lon12 - 360 * math.floor(lon12/360 + 0.5)
-      lon2 = Geodesic.AngNormalize(self._lon1 + lon12)
+      # Use Math.AngNormalize2 because longitude might have wrapped
+      # multiple times.
+      lon12 = Math.AngNormalize2(lon12)
+      lon2 = Math.AngNormalize(self._lon1 + lon12)
 
     if outmask & Geodesic.LATITUDE:
       lat2 = math.atan2(sbet2, self._f1 * cbet2) / Math.degree
@@ -201,24 +229,20 @@ class GeodesicLine(object):
       azi2 = 0 - math.atan2(-salp2, calp2) / Math.degree
 
     if outmask & (Geodesic.REDUCEDLENGTH | Geodesic.GEODESICSCALE):
-      ssig1sq = Math.sq(self._ssig1)
-      ssig2sq = Math.sq( ssig2)
-      w1 = math.sqrt(1 + self._k2 * ssig1sq)
-      w2 = math.sqrt(1 + self._k2 * ssig2sq)
       B22 = Geodesic.SinCosSeries(True, ssig2, csig2, self._C2a, Geodesic.nC2_)
       AB2 = (1 + self._A2m1) * (B22 - self._B21)
       J12 = (self._A1m1 - self._A2m1) * sig12 + (AB1 - AB2)
       if outmask & Geodesic.REDUCEDLENGTH:
         # Add parens around (_csig1 * ssig2) and (_ssig1 * csig2) to ensure
         # accurate cancellation in the case of coincident points.
-        m12 = self._b * ((w2 * (self._csig1 * ssig2) -
-                          w1 * (self._ssig1 * csig2))
-                  - self._csig1 * csig2 * J12)
+        m12 = self._b * ((      dn2 * (self._csig1 * ssig2) -
+                          self._dn1 * (self._ssig1 * csig2))
+                         - self._csig1 * csig2 * J12)
       if outmask & Geodesic.GEODESICSCALE:
-        M12 = csig12 + (self._k2 * (ssig2sq - ssig1sq) * ssig2 / (w1 + w2)
-                        - csig2 * J12) * self._ssig1 / w1
-        M21 = csig12 - (self._k2 * (ssig2sq - ssig1sq) * self._ssig1 / (w1 + w2)
-                        - self._csig1 * J12) * ssig2 / w2
+        t = (self._k2 * (ssig2 - self._ssig1) *
+             (ssig2 + self._ssig1) / (self._dn1 + dn2))
+        M12 = csig12 + (t * ssig2 - csig2 * J12) * self._ssig1 / self._dn1
+        M21 = csig12 - (t * self._ssig1 - self._csig1 * J12) * ssig2 / dn2
 
     if outmask & Geodesic.AREA:
       B42 = Geodesic.SinCosSeries(False, ssig2, csig2, self._C4a, Geodesic.nC4_)
@@ -279,7 +303,6 @@ class GeodesicLine(object):
       Geodesic.LATITUDE
       Geodesic.LONGITUDE
       Geodesic.AZIMUTH
-      Geodesic.DISTANCE
       Geodesic.REDUCEDLENGTH
       Geodesic.GEODESICSCALE
       Geodesic.AREA
@@ -302,3 +325,56 @@ class GeodesicLine(object):
       result['M12'] = M12; result['M21'] = M21
     if outmask & Geodesic.AREA: result['S12'] = S12
     return result
+
+  def ArcPosition(self, a12,
+                  outmask = GeodesicCapability.LATITUDE |
+                  GeodesicCapability.LONGITUDE | GeodesicCapability.AZIMUTH |
+                  GeodesicCapability.DISTANCE):
+    """
+    Return the point a spherical arc length a12 along the geodesic line.
+    Return a dictionary with (some) of the following entries:
+
+      lat1 latitude of point 1
+      lon1 longitude of point 1
+      azi1 azimuth of line at point 1
+      lat2 latitude of point 2
+      lon2 longitude of point 2
+      azi2 azimuth of line at point 2
+      s12 distance from 1 to 2
+      a12 arc length on auxiliary sphere from 1 to 2
+      m12 reduced length of geodesic
+      M12 geodesic scale 2 relative to 1
+      M21 geodesic scale 1 relative to 2
+      S12 area between geodesic and equator
+
+    outmask determines which fields get included and if outmask is
+    omitted, then only the basic geodesic fields are computed.  The mask
+    is an or'ed combination of the following values
+
+      Geodesic.LATITUDE
+      Geodesic.LONGITUDE
+      Geodesic.AZIMUTH
+      Geodesic.DISTANCE
+      Geodesic.REDUCEDLENGTH
+      Geodesic.GEODESICSCALE
+      Geodesic.AREA
+      Geodesic.ALL
+    """
+
+    from geographiclib.geodesic import Geodesic
+    Geodesic.CheckDistance(a12)
+    result = {'lat1': self._lat1, 'lon1': self._lon1, 'azi1': self._azi1,
+              'a12': a12}
+    a12, lat2, lon2, azi2, s12, m12, M12, M21, S12 = self.GenPosition(
+      True, a12, outmask)
+    outmask &= Geodesic.OUT_ALL
+    if outmask & Geodesic.DISTANCE: result['s12'] = s12
+    if outmask & Geodesic.LATITUDE: result['lat2'] = lat2
+    if outmask & Geodesic.LONGITUDE: result['lon2'] = lon2
+    if outmask & Geodesic.AZIMUTH: result['azi2'] = azi2
+    if outmask & Geodesic.REDUCEDLENGTH: result['m12'] = m12
+    if outmask & Geodesic.GEODESICSCALE:
+      result['M12'] = M12; result['M21'] = M21
+    if outmask & Geodesic.AREA: result['S12'] = S12
+    return result
+
diff --git a/python/geographiclib/geomath.py b/python/geographiclib/geomath.py
index 83ffca9..0b3a19e 100644
--- a/python/geographiclib/geomath.py
+++ b/python/geographiclib/geomath.py
@@ -1,16 +1,14 @@
+"""geomath.py: transcription of GeographicLib::Math class."""
 # geomath.py
 #
-# This is a rather literal translation of the GeographicLib::Math class
-# to python.  See the documentation for the C++ class for more
-# information at
+# This is a rather literal translation of the GeographicLib::Math class to
+# python.  See the documentation for the C++ class for more information at
 #
 #    http://geographiclib.sourceforge.net/html/annotated.html
 #
-# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
-# under the MIT/X11 License.  For more information, see
+# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
+# the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: 9c5444e65f8541f8528ef2a504465e5565987c15 $
 ######################################################################
 
 import sys
@@ -22,19 +20,21 @@ class Math(object):
 
   This defines constants:
     epsilon, difference between 1 and the next bigger number
-    minval, minimum positive number
+    digits, the number of digits in the fraction of a real number
+    minval, minimum normalized positive number
     maxval, maximum finite number
     degree, the number of radians in a degree
     nan, not a number
-    int, infinity
+    inf, infinity
   """
-  
-  epsilon = math.pow(2.0, -52)
+
+  digits = 53
+  epsilon = math.pow(2.0, 1-digits)
   minval = math.pow(2.0, -1022)
   maxval = math.pow(2.0, 1023) * (2 - epsilon)
   degree = math.pi/180
-  nan = float("nan")
-  inf = float("inf")
+  inf = float("inf") if sys.version_info > (2, 6) else 2 * maxval
+  nan = float("nan") if sys.version_info > (2, 6) else inf - inf
 
   def sq(x):
     """Square a number"""
@@ -75,6 +75,45 @@ class Math(object):
     return -y if x < 0 else y
   atanh = staticmethod(atanh)
 
+  def sum(u, v):
+    """Error free transformation of a sum."""
+    # Error free transformation of a sum.  Note that t can be the same as one
+    # of the first two arguments.
+    s = u + v
+    up = s - v
+    vpp = s - up
+    up -= u
+    vpp -= v
+    t = -(up + vpp)
+    # u + v =       s      + t
+    #       = round(u + v) + t
+    return s, t
+  sum = staticmethod(sum)
+
+  def AngNormalize(x):
+    """reduce angle in [-540,540) to [-180,180)"""
+
+    return (x - 360 if x >= 180 else
+            (x + 360 if x < -180 else x))
+  AngNormalize = staticmethod(AngNormalize)
+
+  def AngNormalize2(x):
+    """reduce arbitrary angle to [-180,180)"""
+
+    return Math.AngNormalize(math.fmod(x, 360))
+  AngNormalize2 = staticmethod(AngNormalize2)
+
+  def AngDiff(x, y):
+    """compute y - x and reduce to [-180,180] accurately"""
+
+    d, t = Math.sum(-x, y)
+    if (d - 180) + t > 0:       # y - x > 180
+      d -= 360                  # exact
+    elif (d + 180) + t <= 0:    # y - x <= -180
+      d += 360                  # exact
+    return d + t
+  AngDiff = staticmethod(AngDiff)
+
   def isfinite(x):
     """Test for finiteness"""
 
diff --git a/python/geographiclib/polygonarea.py b/python/geographiclib/polygonarea.py
index 9692908..d3a2436 100644
--- a/python/geographiclib/polygonarea.py
+++ b/python/geographiclib/polygonarea.py
@@ -1,16 +1,21 @@
+"""polygonarea.py: transcription of GeographicLib::PolygonArea class."""
 # polygonarea.py
 #
-# This is a rather literal translation of the GeographicLib::PolygonArea
-# class to python.  See the documentation for the C++ class for more
-# information at
+# This is a rather literal translation of the GeographicLib::PolygonArea class
+# to python.  See the documentation for the C++ class for more information at
 #
 #    http://geographiclib.sourceforge.net/html/annotated.html
 #
-# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
+# The algorithms are derived in
+#
+#    Charles F. F. Karney,
+#    Algorithms for geodesics, J. Geodesy 87, 43-55 (2013),
+#    http://dx.doi.org/10.1007/s00190-012-0578-z
+#    Addenda: http://geographiclib.sf.net/geod-addenda.html
+#
+# Copyright (c) Charles Karney (2011-2013) <charles at karney.com> and licensed
 # under the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: 4a2cf9d0cb7eeb7c9c3a2248f44e84a04e4e0b35 $
 ######################################################################
 
 import math
@@ -21,13 +26,13 @@ class PolygonArea(object):
   """Area of a geodesic polygon"""
 
   def transit(lon1, lon2):
+    """Count crossings of prime meridian."""
     # Return 1 or -1 if crossing prime meridian in east or west direction.
     # Otherwise return zero.
-    from geographiclib.geodesic import Geodesic
-    lon1 = Geodesic.AngNormalize(lon1)
-    lon2 = Geodesic.AngNormalize(lon2)
-    # treat lon12 = -180 as an eastward geodesic, so convert to 180.
-    lon12 = -Geodesic.AngNormalize(lon1 - lon2) # In (-180, 180]
+    # Compute lon12 the same way as Geodesic::Inverse.
+    lon1 = Math.AngNormalize(lon1)
+    lon2 = Math.AngNormalize(lon2)
+    lon12 = Math.AngDiff(lon1, lon2)
     cross = (1 if lon1 < 0 and lon2 >= 0 and lon12 > 0
              else (-1 if lon2 < 0 and lon1 >= 0 and lon12 < 0 else 0))
     return cross
@@ -38,24 +43,28 @@ class PolygonArea(object):
     self._earth = earth
     self._area0 = 4 * math.pi * earth._c2
     self._polyline = polyline
-    self._mask = Geodesic.DISTANCE | (0 if self._polyline else Geodesic.AREA)
+    self._mask = (Geodesic.LATITUDE | Geodesic.LONGITUDE |
+                  Geodesic.DISTANCE |
+                  (Geodesic.EMPTY if self._polyline else Geodesic.AREA))
     if not self._polyline: self._areasum = Accumulator()
     self._perimetersum = Accumulator()
     self.Clear()
 
   def Clear(self):
+    """Reset to empty polygon."""
     self._num = 0
     self._crossings = 0
     if not self._polyline: self._areasum.Set(0)
     self._perimetersum.Set(0)
-    self._lat0 = self._lon0 = self._lat1 = self._lon1 = 0
+    self._lat0 = self._lon0 = self._lat1 = self._lon1 = Math.nan
 
   def AddPoint(self, lat, lon):
+    """Add a vertex to the polygon."""
     if self._num == 0:
       self._lat0 = self._lat1 = lat
       self._lon0 = self._lon1 = lon
     else:
-      t, s12, t, t, t, t, t, S12 = self._earth.GenInverse(
+      _, s12, _, _, _, _, _, S12 = self._earth.GenInverse(
         self._lat1, self._lon1, lat, lon, self._mask)
       self._perimetersum.Add(s12)
       if not self._polyline:
@@ -65,8 +74,22 @@ class PolygonArea(object):
       self._lon1 = lon
     self._num += 1
 
+  def AddEdge(self, azi, s):
+    """Add an edge to the polygon."""
+    if self._num != 0:
+      _, lat, lon, _, _, _, _, _, S12 = self._earth.GenDirect(
+        self._lat1, self._lon1, azi, False, s, self._mask)
+      self._perimetersum.Add(s)
+      if not self._polyline:
+        self._areasum.Add(S12)
+        self._crossings += PolygonArea.transit(self._lon1, lon)
+      self._lat1 = lat
+      self._lon1 = lon
+      self._num += 1
+
   # return number, perimeter, area
   def Compute(self, reverse, sign):
+    """Return the number, perimeter, and area for the polygon."""
     if self._polyline: area = Math.nan
     if self._num < 2:
       perimeter = 0
@@ -77,7 +100,7 @@ class PolygonArea(object):
       perimeter = self._perimetersum.Sum()
       return self._num, perimeter, area
 
-    t, s12, t, t, t, t, t, S12 = self._earth.GenInverse(
+    _, s12, _, _, _, _, _, S12 = self._earth.GenInverse(
       self._lat1, self._lon1, self._lat0, self._lon0, self._mask)
     perimeter = self._perimetersum.Sum(s12)
     tempsum = Accumulator(self._areasum)
@@ -93,18 +116,19 @@ class PolygonArea(object):
       if tempsum.Sum() > self._area0/2:
         tempsum.Add( -self._area0 )
       elif tempsum.Sum() <= -self._area0/2:
-        tempsum.Add( +self._area0 )
+        tempsum.Add(  self._area0 )
     else:
       if tempsum.Sum() >= self._area0:
         tempsum.Add( -self._area0 )
       elif tempsum.Sum() < 0:
-        tempsum.Add( +self._area0 )
+        tempsum.Add(  self._area0 )
 
     area = 0 + tempsum.Sum()
     return self._num, perimeter, area
 
   # return number, perimeter, area
-  def TestCompute(self, lat, lon, reverse, sign):
+  def TestPoint(self, lat, lon, reverse, sign):
+    """Return the results for a tentative additional vertex."""
     if self._polyline: area = Math.nan
     if self._num == 0:
       perimeter = 0
@@ -115,7 +139,7 @@ class PolygonArea(object):
     tempsum = 0 if self._polyline else self._areasum.Sum()
     crossings = self._crossings; num = self._num + 1
     for i in ([0] if self._polyline else [0, 1]):
-      t, s12, t, t, t, t, t, S12 = self._earth.GenInverse(
+      _, s12, _, _, _, _, _, S12 = self._earth.GenInverse(
         self._lat1 if i == 0 else lat, self._lon1 if i == 0 else lon,
         self._lat0 if i != 0 else lat, self._lon0 if i != 0 else lon,
         self._mask)
@@ -148,7 +172,58 @@ class PolygonArea(object):
     area = 0 + tempsum
     return num, perimeter, area
 
+  # return number, perimeter, area (for backward compatibility)
+  def TestCompute(self, lat, lon, reverse, sign):
+    return self.TestPoint(lat, lon, reverse, sign)
+
+  # return num, perimeter, area
+  def TestEdge(self, azi, s, reverse, sign):
+    """Return the results for a tentative additional edge."""
+    if self._num == 0:               # we don't have a starting point!
+      return 0, Math.nan, Math.nan
+    num = self._num + 1
+    perimeter = self._perimetersum.Sum() + s
+    if self._polyline:
+      return num, perimeter, Math.nan
+
+    tempsum =  self._areasum.Sum()
+    crossings = self._crossings
+    _, lat, lon, _, _, _, _, _, S12 = self._earth.GenDirect(
+      self._lat1, self._lon1, azi, False, s, self._mask)
+    tempsum += S12
+    crossings += PolygonArea.transit(self._lon1, lon)
+    _, s12, _, _, _, _, _, S12 = self._earth.GenInverse(
+      lat, lon, self._lat0, self._lon0, self._mask)
+    perimeter += s12
+    tempsum += S12
+    crossings += PolygonArea.transit(lon, self._lon0)
+
+    if crossings & 1:
+      tempsum += (1 if tempsum < 0 else -1) * self._area0/2
+    # area is with the clockwise sense.  If !reverse convert to
+    # counter-clockwise convention.
+    if not reverse: tempsum *= -1
+    # If sign put area in (-area0/2, area0/2], else put area in [0, area0)
+    if sign:
+      if tempsum > self._area0/2:
+        tempsum -= self._area0
+      elif tempsum <= -self._area0/2:
+        tempsum += self._area0
+    else:
+      if tempsum >= self._area0:
+        tempsum -= self._area0
+      elif tempsum < 0:
+        tempsum += self._area0
+
+    area = 0 + tempsum
+    return num, perimeter, area
+
+  def CurrentPoint(self):
+    """Return the current point as a lat, lon tuple."""
+    return self._lat1, self._lon1
+
   def Area(earth, points, polyline):
+    """Return the number, perimeter, and area for a set of vertices."""
     poly = PolygonArea(earth, polyline)
     for p in points:
       poly.AddPoint(p['lat'], p['lon'])
diff --git a/python/setup.py b/python/setup.py
index ba54dfd..c03e307 100644
--- a/python/setup.py
+++ b/python/setup.py
@@ -11,13 +11,11 @@
 #
 # The initial version of this file was provided by
 # Andrew MacIntyre <Andrew.MacIntyre at acma.gov.au>.
-#
-# $Id: e5d240fa0c0790fdbbc0c3ff654325abf8f9ec71 $
 
 from distutils.core import setup
 
 setup(name="geographiclib",
-      version="1.20",
+      version="1.34",
       description=
         "A translation of the GeographicLib::Geodesic class to Python",
       author="Charles Karney",
diff --git a/src/Accumulator.cpp b/src/Accumulator.cpp
new file mode 100644
index 0000000..2d2d556
--- /dev/null
+++ b/src/Accumulator.cpp
@@ -0,0 +1,23 @@
+/**
+ * \file Accumulator.cpp
+ * \brief Implementation for GeographicLib::Accumulator class
+ *
+ * Copyright (c) Charles Karney (2013) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#include <GeographicLib/Accumulator.hpp>
+
+namespace GeographicLib {
+
+  /// \cond SKIP
+
+  // Need to instantiate Accumulator to get the code into the shared library
+  // (without this, NETGeographic complains about not finding the == and !=
+  // operators).
+  template class GEOGRAPHICLIB_EXPORT Accumulator<Math::real>;
+
+  /// \endcond
+
+} // namespace GeographicLib
diff --git a/src/AlbersEqualArea.cpp b/src/AlbersEqualArea.cpp
index f583a5f..055a187 100644
--- a/src/AlbersEqualArea.cpp
+++ b/src/AlbersEqualArea.cpp
@@ -2,19 +2,13 @@
  * \file AlbersEqualArea.cpp
  * \brief Implementation for GeographicLib::AlbersEqualArea class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #include <GeographicLib/AlbersEqualArea.hpp>
 
-#define GEOGRAPHICLIB_ALBERSEQUALAREA_CPP \
-  "$Id: a7aa5e2e232feec5c866f0d645f110fd0bb38dd2 $"
-
-RCSID_DECL(GEOGRAPHICLIB_ALBERSEQUALAREA_CPP)
-RCSID_DECL(GEOGRAPHICLIB_ALBERSEQUALAREA_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -45,7 +39,7 @@ namespace GeographicLib {
     if (!(Math::isfinite(k0) && k0 > 0))
       throw GeographicErr("Scale is not positive");
     if (!(abs(stdlat) <= 90))
-      throw GeographicErr("Standard latitude not in [-90, 90]");
+      throw GeographicErr("Standard latitude not in [-90d, 90d]");
     real
       phi = stdlat * Math::degree<real>(),
       sphi = sin(phi),
@@ -71,9 +65,9 @@ namespace GeographicLib {
     if (!(Math::isfinite(k1) && k1 > 0))
       throw GeographicErr("Scale is not positive");
     if (!(abs(stdlat1) <= 90))
-      throw GeographicErr("Standard latitude 1 not in [-90, 90]");
+      throw GeographicErr("Standard latitude 1 not in [-90d, 90d]");
     if (!(abs(stdlat2) <= 90))
-      throw GeographicErr("Standard latitude 2 not in [-90, 90]");
+      throw GeographicErr("Standard latitude 2 not in [-90d, 90d]");
     real
       phi1 = stdlat1 * Math::degree<real>(),
       phi2 = stdlat2 * Math::degree<real>();
@@ -101,9 +95,9 @@ namespace GeographicLib {
     if (!(Math::isfinite(k1) && k1 > 0))
       throw GeographicErr("Scale is not positive");
     if (!(coslat1 >= 0))
-      throw GeographicErr("Standard latitude 1 not in [-90, 90]");
+      throw GeographicErr("Standard latitude 1 not in [-90d, 90d]");
     if (!(coslat2 >= 0))
-      throw GeographicErr("Standard latitude 2 not in [-90, 90]");
+      throw GeographicErr("Standard latitude 2 not in [-90d, 90d]");
     if (!(abs(sinlat1) <= 1 && coslat1 <= 1) || (coslat1 == 0 && sinlat1 == 0))
       throw GeographicErr("Bad sine/cosine of standard latitude 1");
     if (!(abs(sinlat2) <= 1 && coslat2 <= 1) || (coslat2 == 0 && sinlat2 == 0))
@@ -379,12 +373,7 @@ namespace GeographicLib {
   void AlbersEqualArea::Forward(real lon0, real lat, real lon,
                                 real& x, real& y, real& gamma, real& k)
     const throw() {
-    if (lon - lon0 >= 180)
-      lon -= lon0 + 360;
-    else if (lon - lon0 < -180)
-      lon -= lon0 - 360;
-    else
-      lon -= lon0;
+    lon = Math::AngDiff(Math::AngNormalize(lon0), Math::AngNormalize(lon));
     lat *= _sign;
     real
       lam = lon * Math::degree<real>(),
@@ -426,13 +415,7 @@ namespace GeographicLib {
     gamma = _sign * theta / Math::degree<real>();
     lat = phi / Math::degree<real>();
     lon = lam / Math::degree<real>();
-    // Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)
-    if (lon + lon0 >= 180)
-      lon += lon0 - 360;
-    else if (lon + lon0 < -180)
-      lon += lon0 + 360;
-    else
-      lon += lon0;
+    lon = Math::AngNormalize(lon + Math::AngNormalize(lon0));
     k = _k0 * (den != 0 ? (_nrho0 + _n0 * drho) * hyp(_fm * tphi) / _a : 1);
   }
 
@@ -440,7 +423,7 @@ namespace GeographicLib {
     if (!(Math::isfinite(k) && k > 0))
       throw GeographicErr("Scale is not positive");
     if (!(abs(lat) < 90))
-      throw GeographicErr("Latitude for SetScale not in (-90, 90)");
+      throw GeographicErr("Latitude for SetScale not in (-90d, 90d)");
     real x, y, gamma, kold;
     Forward(0, lat, 0, x, y, gamma, kold);
     k /= kold;
diff --git a/src/AzimuthalEquidistant.cpp b/src/AzimuthalEquidistant.cpp
index 1fba6bf..f55d2b7 100644
--- a/src/AzimuthalEquidistant.cpp
+++ b/src/AzimuthalEquidistant.cpp
@@ -9,12 +9,6 @@
 
 #include <GeographicLib/AzimuthalEquidistant.hpp>
 
-#define GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP \
-  "$Id: 324fc318b35a411f024cfd5046ba58b8ef819df7 $"
-
-RCSID_DECL(GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_CPP)
-RCSID_DECL(GEOGRAPHICLIB_AZIMUTHALEQUIDISTANT_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 32aeb9d..45a0193 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,31 +1,85 @@
-# $Id: db0813d9df0e4b911eb0282bbf2e5bebca5c6563 $
-
 # Build the library...
 
 # Include all the .cpp files in the library.
-file (GLOB SOURCES *.cpp)
+file (GLOB SOURCES [A-Za-z]*.cpp)
 file (GLOB HEADERS
   ${PROJECT_BINARY_DIR}/include/GeographicLib/Config.h
-  ../include/GeographicLib/*.hpp)
+  ../include/GeographicLib/[A-Za-z]*.hpp)
 
 # Define the library and specify whether it is shared or not.
-if (GEOGRAPHIC_SHARED_LIB)
-  add_library (Geographic SHARED ${SOURCES} ${HEADERS})
-else ()
-  add_library (Geographic STATIC ${SOURCES} ${HEADERS})
+if (GEOGRAPHICLIB_SHARED_LIB)
+  add_library (${PROJECT_SHARED_LIBRARIES} SHARED ${SOURCES} ${HEADERS})
+endif ()
+if (GEOGRAPHICLIB_STATIC_LIB)
+  add_library (${PROJECT_STATIC_LIBRARIES} STATIC ${SOURCES} ${HEADERS})
 endif ()
 
 # Set the version number on the library
-if (WIN32)
-  set_target_properties (Geographic PROPERTIES VERSION "${LIBVERSIONFULL}" )
+if (MSVC)
+  if (GEOGRAPHICLIB_SHARED_LIB)
+    set_target_properties (${PROJECT_SHARED_LIBRARIES} PROPERTIES
+      VERSION "${LIBVERSIONFULL}" OUTPUT_NAME ${LIBNAME} IMPORT_SUFFIX -i.lib
+      PDB_NAME ${LIBNAME}${CMAKE_DEBUG_POSTFIX})
+    if (CMAKE_VERSION VERSION_LESS 2.8.11)
+      set_target_properties (${PROJECT_SHARED_LIBRARIES} PROPERTIES
+        COMPILE_DEFINITIONS GEOGRAPHICLIB_SHARED_LIB=1)
+    else ()
+      target_compile_definitions (${PROJECT_SHARED_LIBRARIES}
+        PUBLIC GEOGRAPHICLIB_SHARED_LIB=1)
+    endif ()
+  endif ()
+  if (GEOGRAPHICLIB_STATIC_LIB)
+    set_target_properties (${PROJECT_STATIC_LIBRARIES} PROPERTIES
+      VERSION "${LIBVERSIONFULL}" OUTPUT_NAME ${LIBNAME})
+    if (CMAKE_VERSION VERSION_LESS 2.8.11)
+      set_target_properties (${PROJECT_STATIC_LIBRARIES} PROPERTIES
+        COMPILE_DEFINITIONS GEOGRAPHICLIB_SHARED_LIB=0)
+    else ()
+      target_compile_definitions (${PROJECT_STATIC_LIBRARIES}
+        PUBLIC GEOGRAPHICLIB_SHARED_LIB=0)
+    endif ()
+  endif ()
 else ()
-  set_target_properties (Geographic PROPERTIES
-    VERSION "${LIBVERSIONFULL}" SOVERSION "${LIBVERSION}" )
+  set_target_properties (
+    ${PROJECT_SHARED_LIBRARIES} ${PROJECT_STATIC_LIBRARIES} PROPERTIES
+    VERSION "${LIBVERSIONFULL}" SOVERSION "${LIBVERSION}"
+    OUTPUT_NAME ${LIBNAME})
 endif ()
 
 # Specify where the library is installed, adding it to the export depends
-install (TARGETS Geographic
+install (TARGETS ${PROJECT_SHARED_LIBRARIES} ${PROJECT_STATIC_LIBRARIES}
   EXPORT depends
   RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
-  ARCHIVE DESTINATION lib)
+  LIBRARY DESTINATION lib${LIB_SUFFIX}
+  ARCHIVE DESTINATION lib${LIB_SUFFIX})
+
+if (MSVC AND PACKAGE_DEBUG_LIBS)
+  if (GEOGRAPHICLIB_SHARED_LIB)
+    install (FILES
+      "${CMAKE_CURRENT_BINARY_DIR}/Debug/${LIBNAME}${CMAKE_DEBUG_POSTFIX}-i.lib"
+      DESTINATION lib${LIB_SUFFIX} CONFIGURATIONS Release)
+    install (PROGRAMS
+      "${CMAKE_CURRENT_BINARY_DIR}/Debug/${LIBNAME}${CMAKE_DEBUG_POSTFIX}.dll"
+      DESTINATION bin CONFIGURATIONS Release)
+  endif ()
+  if (GEOGRAPHICLIB_STATIC_LIB)
+    install (FILES
+      "${CMAKE_CURRENT_BINARY_DIR}/Debug/${LIBNAME}${CMAKE_DEBUG_POSTFIX}.lib"
+      DESTINATION lib${LIB_SUFFIX} CONFIGURATIONS Release)
+  endif ()
+endif ()
+
+if (MSVC AND GEOGRAPHICLIB_SHARED_LIB)
+  # Install pdb file for shared library in debug mode.
+  get_target_property (_P ${PROJECT_SHARED_LIBRARIES} LOCATION_DEBUG)
+  get_filename_component (_P ${_P} PATH)
+  get_target_property (_N ${PROJECT_SHARED_LIBRARIES} PDB_NAME)
+  set (_PDB ${_P}/${_N}.pdb)
+  install (FILES ${_PDB} DESTINATION bin
+    RENAME ${LIBNAME}${CMAKE_DEBUG_POSTFIX}.pdb CONFIGURATIONS Debug)
+endif ()
+
+# Put the library into a folder in the IDE
+set_target_properties (
+  ${PROJECT_SHARED_LIBRARIES} ${PROJECT_STATIC_LIBRARIES}
+  PROPERTIES FOLDER library)
diff --git a/src/CassiniSoldner.cpp b/src/CassiniSoldner.cpp
index e0cf058..8ba1053 100644
--- a/src/CassiniSoldner.cpp
+++ b/src/CassiniSoldner.cpp
@@ -9,12 +9,6 @@
 
 #include <GeographicLib/CassiniSoldner.hpp>
 
-#define GEOGRAPHICLIB_CASSINISOLDNER_CPP \
-  "$Id: 2823df38f3e31fd8b882e2f55ad72d6419b03246 $"
-
-RCSID_DECL(GEOGRAPHICLIB_CASSINISOLDNER_CPP)
-RCSID_DECL(GEOGRAPHICLIB_CASSINISOLDNER_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -40,7 +34,7 @@ namespace GeographicLib {
                                real& azi, real& rk) const throw() {
     if (!Init())
       return;
-    real dlon = AngNormalize(lon - LongitudeOrigin());
+    real dlon = Math::AngDiff(LongitudeOrigin(), Math::AngNormalize(lon));
     real sig12, s12, azi1, azi2;
     lat = AngRound(lat);
     sig12 = _earth.Inverse(lat, -abs(dlon), lat, abs(dlon), s12, azi1, azi2);
@@ -64,8 +58,8 @@ namespace GeographicLib {
       sig12 = -sig12;
     }
     x = s12;
-    azi = AngNormalize(azi2);
-    GeodesicLine perp(_earth.Line(lat, dlon, azi2, Geodesic::GEODESICSCALE));
+    azi = Math::AngNormalize(azi2);
+    GeodesicLine perp(_earth.Line(lat, dlon, azi, Geodesic::GEODESICSCALE));
     real t;
     perp.GenPosition(true, -sig12,
                      Geodesic::GEODESICSCALE,
diff --git a/src/CircularEngine.cpp b/src/CircularEngine.cpp
index e9b00df..e15cccd 100644
--- a/src/CircularEngine.cpp
+++ b/src/CircularEngine.cpp
@@ -8,13 +8,6 @@
  **********************************************************************/
 
 #include <GeographicLib/CircularEngine.hpp>
-#include <limits>
-
-#define GEOGRAPHICLIB_CIRCULARENGINE_CPP \
-  "$Id: bdd0d21aa34063706e4042410f06bb0f7844fea9 $"
-
-RCSID_DECL(GEOGRAPHICLIB_CIRCULARENGINE_CPP)
-RCSID_DECL(GEOGRAPHICLIB_CIRCULARENGINE_HPP)
 
 namespace GeographicLib {
 
diff --git a/src/DMS.cpp b/src/DMS.cpp
index 84d07f0..be83c3d 100644
--- a/src/DMS.cpp
+++ b/src/DMS.cpp
@@ -8,15 +8,12 @@
  **********************************************************************/
 
 #include <GeographicLib/DMS.hpp>
-#include <algorithm>
 #include <GeographicLib/Utility.hpp>
 
-#define GEOGRAPHICLIB_DMS_CPP "$Id: db38ddc05f7c27732da3aa820191a51200ce92ac $"
-
-RCSID_DECL(GEOGRAPHICLIB_DMS_CPP)
-RCSID_DECL(GEOGRAPHICLIB_DMS_HPP)
-RCSID_DECL(GEOGRAPHICLIB_CONSTANTS_HPP)
-RCSID_DECL(GEOGRAPHICLIB_MATH_HPP)
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
 
 namespace GeographicLib {
 
@@ -31,15 +28,18 @@ namespace GeographicLib {
   Math::real DMS::Decode(const std::string& dms, flag& ind) {
     string errormsg;
     string dmsa = dms;
-    replace(dmsa, "\xc2\xb0", 'd'); // degree symbol (U+00b0 = UTF-8 c2 b0)
-    replace(dmsa, "\xc2\xba", 'd'); // alt symbol (U+00ba = UTF-8 c2 ba)
-    replace(dmsa, "\xe2\x81\xb0", 'd');  // sup zero (U+2070 = UTF-8 e2 81 b0)
-    replace(dmsa, "\xe2\x80\xb2", '\''); // prime (U+2032 = UTF-8 e2 80 b2)
-    replace(dmsa, "\xc2\xb4", '\'');     // acute accent (U+00b4 = UTF-8 c2 b4)
-    replace(dmsa, "\xe2\x80\xb3", '"');  // dbl prime (U+2033 = UTF-8 e2 80 b3)
-    replace(dmsa, "\xb0", 'd');          // bare degree symbol (b0)
-    replace(dmsa, "\xba", 'd');          // bare alt symbol (ba)
-    replace(dmsa, "\xb4", 'd');          // bare acute accent (b4)
+    replace(dmsa, "\xc2\xb0", 'd');      // U+00b0 degree symbol
+    replace(dmsa, "\xc2\xba", 'd');      // U+00ba alt symbol
+    replace(dmsa, "\xe2\x81\xb0", 'd');  // U+2070 sup zero
+    replace(dmsa, "\xcb\x9a", 'd');      // U+02da ring above
+    replace(dmsa, "\xe2\x80\xb2", '\''); // U+2032 prime
+    replace(dmsa, "\xc2\xb4", '\'');     // U+00b4 acute accent
+    replace(dmsa, "\xe2\x80\x99", '\''); // U+2019 right single quote
+    replace(dmsa, "\xe2\x80\xb3", '"');  // U+2033 double prime
+    replace(dmsa, "\xe2\x80\x9d", '"');  // U+201d right double quote
+    replace(dmsa, "\xb0", 'd');          // 0xb0 bare degree symbol
+    replace(dmsa, "\xba", 'd');          // 0xba bare alt symbol
+    replace(dmsa, "\xb4", '\'');         // 0xb4 bare acute accent
     replace(dmsa, "''", '"');            // '' -> "
     do {                       // Executed once (provides the ability to break)
       int sign = 1;
@@ -93,15 +93,17 @@ namespace GeographicLib {
       real fcurrent = 0;
       unsigned ncurrent = 0, p = beg;
       bool pointseen = false;
-      unsigned digcount = 0;
+      unsigned digcount = 0, intcount = 0;
       while (p < end) {
         char x = dmsa[p++];
         if ((k = Utility::lookup(digits_, x)) >= 0) {
           ++ncurrent;
           if (digcount > 0)
             ++digcount;         // Count of decimal digits
-          else
+          else {
             icurrent = 10 * icurrent + k;
+            ++intcount;
+          }
         } else if (x == '.') {
           if (pointseen) {
             errormsg = "Multiple decimal points in "
@@ -135,15 +137,17 @@ namespace GeographicLib {
             break;
           }
           if (digcount > 1) {
-            istringstream s(dmsa.substr(p - digcount - 1, digcount));
+            istringstream s(dmsa.substr(p - intcount - digcount - 1,
+                                        intcount + digcount));
             s >> fcurrent;
+            icurrent = 0;
           }
           ipieces[k] = icurrent;
           fpieces[k] = icurrent + fcurrent;
           if (p < end) {
             npiece = k + 1;
             icurrent = fcurrent = 0;
-            ncurrent = digcount = 0;
+            ncurrent = digcount = intcount = 0;
           }
         } else if (Utility::lookup(signs_, x) >= 0) {
           errormsg = "Internal sign in DMS string "
@@ -169,8 +173,10 @@ namespace GeographicLib {
           break;
         }
         if (digcount > 1) {
-          istringstream s(dmsa.substr(p - digcount, digcount));
+          istringstream s(dmsa.substr(p - intcount - digcount,
+                                      intcount + digcount));
           s >> fcurrent;
+          icurrent = 0;
         }
         ipieces[npiece] = icurrent;
         fpieces[npiece] = icurrent + fcurrent;
@@ -225,14 +231,13 @@ namespace GeographicLib {
     real
       lat1 = ia == LATITUDE ? a : b,
       lon1 = ia == LATITUDE ? b : a;
-    if (lat1 < -90 || lat1 > 90)
+    if (abs(lat1) > 90)
       throw GeographicErr("Latitude " + Utility::str(lat1)
                           + "d not in [-90d, 90d]");
-    if (lon1 < -180 || lon1 > 360)
+    if (lon1 < -540 || lon1 >= 540)
       throw GeographicErr("Longitude " + Utility::str(lon1)
-                          + "d not in [-180d, 360d]");
-    if (lon1 >= 180)
-      lon1 -= 360;
+                          + "d not in [-540d, 540d)");
+    lon1 = Math::AngNormalize(lon1);
     lat = lat1;
     lon = lon1;
   }
@@ -252,14 +257,13 @@ namespace GeographicLib {
     if (ind == LATITUDE)
       throw GeographicErr("Azimuth " + azistr
                           + " has a latitude hemisphere, N/S");
-    if (azi < -180 || azi > 360)
-      throw GeographicErr("Azimuth " + azistr + " not in range [-180d, 360d]");
-    if (azi >= 180) azi -= 360;
-    return azi;
+    if (azi < -540 || azi >= 540)
+      throw GeographicErr("Azimuth " + azistr + " not in range [-540d, 540d)");
+    return Math::AngNormalize(azi);
   }
 
   string DMS::Encode(real angle, component trailing, unsigned prec, flag ind,
-		     char dmssep) {
+                     char dmssep) {
     // Assume check on range of input angle has been made by calling
     // routine (which might be able to offer a better diagnostic).
     if (!Math::isfinite(angle))
@@ -268,7 +272,7 @@ namespace GeographicLib {
 
     // 15 - 2 * trailing = ceiling(log10(2^53/90/60^trailing)).
     // This suffices to give full real precision for numbers in [-90,90]
-    prec = min(15 - 2 * unsigned(trailing), prec);
+    prec = min(15 + Math::extradigits - 2 * unsigned(trailing), prec);
     real scale = 1;
     for (unsigned i = 0; i < unsigned(trailing); ++i)
       scale *= 60;
@@ -312,19 +316,19 @@ namespace GeographicLib {
       if (ind != NONE)
         s << setw(1 + min(int(ind), 2));
       s << setprecision(0) << pieces[0]
-	<< (dmssep ? dmssep : char(tolower(dmsindicators_[0])));
+        << (dmssep ? dmssep : char(tolower(dmsindicators_[0])));
       switch (trailing) {
       case MINUTE:
         s << setw(2 + prec + (prec ? 1 : 0)) << setprecision(prec) << pieces[1];
-	if (!dmssep)
-	  s << char(tolower(dmsindicators_[1]));
+        if (!dmssep)
+          s << char(tolower(dmsindicators_[1]));
         break;
       case SECOND:
         s << setw(2)
-	  << pieces[1] << (dmssep ? dmssep : char(tolower(dmsindicators_[1])))
+          << pieces[1] << (dmssep ? dmssep : char(tolower(dmsindicators_[1])))
           << setw(2 + prec + (prec ? 1 : 0)) << setprecision(prec) << pieces[2];
-	if (!dmssep)
-	  s << char(tolower(dmsindicators_[2]));
+        if (!dmssep)
+          s << char(tolower(dmsindicators_[2]));
         break;
       default:
         break;
@@ -335,7 +339,4 @@ namespace GeographicLib {
     return s.str();
   }
 
-  string DMS::Encode(real angle, component trailing, unsigned prec, flag ind)
-  { return Encode(angle, trailing, prec, ind, char(0)); }
-
 } // namespace GeographicLib
diff --git a/src/Ellipsoid.cpp b/src/Ellipsoid.cpp
new file mode 100644
index 0000000..7ad23c7
--- /dev/null
+++ b/src/Ellipsoid.cpp
@@ -0,0 +1,123 @@
+/**
+ * \file Ellipsoid.cpp
+ * \brief Implementation for GeographicLib::Ellipsoid class
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#include <GeographicLib/Ellipsoid.hpp>
+
+namespace GeographicLib {
+
+  using namespace std;
+
+  const Math::real Ellipsoid::stol_ =
+    0.01 * sqrt(numeric_limits<real>::epsilon());
+
+  Ellipsoid::Ellipsoid(real a, real f)
+    : _a(a)
+    , _f(f <= 1 ? f : 1/f)
+    , _f1(1 - _f)
+    , _f12(Math::sq(_f1))
+    , _e2(_f * (2 - _f))
+    , _e12(_e2 / (1 - _e2))
+    , _n(_f / (2  - _f))
+    , _b(_a * _f1)
+    , _tm(_a, _f, real(1))
+    , _ell(-_e12)
+    , _au(_a, _f, real(0), real(1), real(0), real(1), real(1))
+  {}
+
+  const Ellipsoid Ellipsoid::WGS84(Constants::WGS84_a<real>(),
+                                   Constants::WGS84_f<real>());
+
+  Math::real Ellipsoid::QuarterMeridian() const throw()
+  { return _b * _ell.E(); }
+
+  Math::real Ellipsoid::Area() const throw() {
+    return 4 * Math::pi<real>() *
+      ((Math::sq(_a) + Math::sq(_b) *
+        (_e2 == 0 ? 1 :
+         (_e2 > 0 ? Math::atanh(sqrt(_e2)) : atan(sqrt(-_e2))) /
+         sqrt(abs(_e2))))/2);
+  }
+
+  Math::real Ellipsoid::ParametricLatitude(real phi) const throw()
+  { return atand(_f1 * tand(phi)); }
+
+  Math::real Ellipsoid::InverseParametricLatitude(real beta) const throw()
+  { return atand(tand(beta) / _f1); }
+
+  Math::real Ellipsoid::GeocentricLatitude(real phi) const throw()
+  { return atand(_f12 * tand(phi)); }
+
+  Math::real Ellipsoid::InverseGeocentricLatitude(real theta) const throw()
+  { return atand(tand(theta) / _f12); }
+
+  Math::real Ellipsoid::RectifyingLatitude(real phi) const throw() {
+    return abs(phi) == 90 ? phi:
+      90 * MeridianDistance(phi) / QuarterMeridian();
+  }
+
+  Math::real Ellipsoid::InverseRectifyingLatitude(real mu) const throw() {
+    if (abs(mu) == 90)
+      return mu;
+    return InverseParametricLatitude(_ell.Einv(mu * _ell.E() / 90) /
+                                     Math::degree<real>());
+  }
+
+  Math::real Ellipsoid::AuthalicLatitude(real phi) const throw()
+  { return atand(_au.txif(tand(phi))); }
+
+  Math::real Ellipsoid::InverseAuthalicLatitude(real xi) const throw()
+  { return atand(_au.tphif(tand(xi))); }
+
+  Math::real Ellipsoid::ConformalLatitude(real phi) const throw()
+  { return atand(_tm.taupf(tand(phi))); }
+
+  Math::real Ellipsoid::InverseConformalLatitude(real chi) const throw()
+  { return atand(_tm.tauf(tand(chi))); }
+
+  Math::real Ellipsoid::IsometricLatitude(real phi) const throw()
+  { return Math::asinh(_tm.taupf(tand(phi))) / Math::degree<real>(); }
+
+  Math::real Ellipsoid::InverseIsometricLatitude(real psi) const throw()
+  { return atand(_tm.tauf(sinh(psi * Math::degree<real>()))); }
+
+  Math::real Ellipsoid::CircleRadius(real phi) const throw() {
+    return abs(phi) == 90 ? 0 :
+      // a * cos(beta)
+      _a / Math::hypot(real(1), _f1 * tand(phi));
+  }
+
+  Math::real Ellipsoid::CircleHeight(real phi) const throw() {
+    real tbeta = _f1 * tand(phi);
+    // b * sin(beta)
+    return _b * tbeta / Math::hypot(real(1), _f1 * tand(phi));
+  }
+
+  Math::real Ellipsoid::MeridianDistance(real phi) const throw()
+  { return _b * _ell.Ed( ParametricLatitude(phi) ); }
+
+  Math::real Ellipsoid::MeridionalCurvatureRadius(real phi) const throw() {
+    real v = 1 - _e2 * Math::sq(sin(phi * Math::degree<real>()));
+    return _a * (1 - _e2) / (v * sqrt(v));
+  }
+
+  Math::real Ellipsoid::TransverseCurvatureRadius(real phi) const throw() {
+    real v = 1 - _e2 * Math::sq(sin(phi * Math::degree<real>()));
+    return _a / sqrt(v);
+  }
+
+  Math::real Ellipsoid::NormalCurvatureRadius(real phi, real azi)
+    const throw() {
+    real
+      alpha = azi * Math::degree<real>(),
+      v = 1 - _e2 * Math::sq(sin(phi * Math::degree<real>()));
+    return _a / (sqrt(v) *
+                 (Math::sq(cos(alpha)) * v / (1 - _e2) + Math::sq(sin(alpha))));
+  }
+
+} // namespace GeographicLib
diff --git a/src/EllipticFunction.cpp b/src/EllipticFunction.cpp
index 98396ad..3f8b412 100644
--- a/src/EllipticFunction.cpp
+++ b/src/EllipticFunction.cpp
@@ -2,31 +2,23 @@
  * \file EllipticFunction.cpp
  * \brief Implementation for GeographicLib::EllipticFunction class
  *
- * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2008-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #include <GeographicLib/EllipticFunction.hpp>
 
-#define GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP \
-  "$Id: 00b30b3d051fce1da7eb0c7e74c1c03854de6ea3 $"
-
-RCSID_DECL(GEOGRAPHICLIB_ELLIPTICFUNCTION_CPP)
-RCSID_DECL(GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
 
   const Math::real EllipticFunction::tol_ =
     numeric_limits<real>::epsilon() * real(0.01);
-  const Math::real EllipticFunction::tolRF_ = pow(3 * tol_, 1/real(6));
-  const Math::real EllipticFunction::tolRD_ =
-    pow(real(0.25) * tol_, 1/real(6));
+  const Math::real EllipticFunction::tolRF_ = pow(3 * tol_, 1/real(8));
+  const Math::real EllipticFunction::tolRD_ = pow(real(0.2) * tol_, 1/real(8));
   const Math::real EllipticFunction::tolRG0_ = real(2.7) * sqrt(tol_);
   const Math::real EllipticFunction::tolJAC_ = sqrt(tol_);
-  const Math::real EllipticFunction::tolJAC1_ = sqrt(6 * tol_);
 
   /*
    * Implementation of methods given in
@@ -39,77 +31,81 @@ namespace GeographicLib {
   Math::real EllipticFunction::RF(real x, real y, real z) throw() {
     // Carlson, eqs 2.2 - 2.7
     real
-      a0 = (x + y + z)/3,
-      an = a0,
-      q = max(max(abs(a0-x), abs(a0-y)), abs(a0-z)) / tolRF_,
+      A0 = (x + y + z)/3,
+      An = A0,
+      Q = max(max(abs(A0-x), abs(A0-y)), abs(A0-z)) / tolRF_,
       x0 = x,
       y0 = y,
       z0 = z,
       mul = 1;
-    while (q >= mul * abs(an)) {
+    while (Q >= mul * abs(An)) {
       // Max 6 trips
-      real ln = sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0);
-      an = (an + ln)/4;
-      x0 = (x0 + ln)/4;
-      y0 = (y0 + ln)/4;
-      z0 = (z0 + ln)/4;
+      real lam = sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0);
+      An = (An + lam)/4;
+      x0 = (x0 + lam)/4;
+      y0 = (y0 + lam)/4;
+      z0 = (z0 + lam)/4;
       mul *= 4;
     }
     real
-      xx = (a0 - x) / (mul * an),
-      yy = (a0 - y) / (mul * an),
-      zz = - xx - yy,
-      e2 = xx * yy - zz * zz,
-      e3 = xx * yy * zz;
-    return (1 - e2 / 10 + e3 / 14 + e2 * e2 / 24 - 3 * e2 * e3 / 44) / sqrt(an);
+      X = (A0 - x) / (mul * An),
+      Y = (A0 - y) / (mul * An),
+      Z = - (X + Y),
+      E2 = X*Y - Z*Z,
+      E3 = X*Y*Z;
+    // http://dlmf.nist.gov/19.36.E1
+    // Polynomial is
+    // (1 - E2/10 + E3/14 + E2^2/24 - 3*E2*E3/44
+    //    - 5*E2^3/208 + 3*E3^2/104 + E2^2*E3/16)
+    // convert to Horner form...
+    return (E3 * (6930 * E3 + E2 * (15015 * E2 - 16380) + 17160) +
+            E2 * ((10010 - 5775 * E2) * E2 - 24024) + 240240) /
+      (240240 * sqrt(An));
   }
 
-  Math::real EllipticFunction::RD(real x, real y, real z) throw() {
-    // Carlson, eqs 2.28 - 2.34
-    real
-      a0 = (x + y + 3 * z)/5,
-      an = a0,
-      q = max(max(abs(a0-x), abs(a0-y)), abs(a0-z)) / tolRD_,
-      x0 = x,
-      y0 = y,
-      z0 = z,
-      mul = 1,
-      s = 0;
-    while (q >= mul * abs(an)) {
-      // Max 7 trips
-      real ln = sqrt(x0)*sqrt(y0) +
-        sqrt(y0)*sqrt(z0) +
-        sqrt(z0)*sqrt(x0);
-      s += 1/(mul * sqrt(z0) * (z0 + ln ));
-      an = (an + ln)/4;
-      x0 = (x0 + ln)/4;
-      y0 = (y0 + ln)/4;
-      z0 = (z0 + ln)/4;
-      mul *= 4;
+  Math::real EllipticFunction::RF(real x, real y) throw() {
+    // Carlson, eqs 2.36 - 2.38
+    real xn = sqrt(x), yn = sqrt(y);
+    if (xn < yn) swap(xn, yn);
+    while (abs(xn-yn) > tolRG0_ * xn) {
+      // Max 4 trips
+      real t = (xn + yn) /2;
+      yn = sqrt(xn * yn);
+      xn = t;
     }
-    real
-      xx = (a0 - x) / (mul * an),
-      yy = (a0 - y) / (mul * an),
-      zz = -(xx + yy) / 3,
-      e2 = xx * yy - 6 * zz * zz,
-      e3 = (3 * xx * yy - 8 * zz * zz)*zz,
-      e4 = 3 * (xx * yy - zz * zz) * zz * zz,
-      e5 = xx * yy * zz * zz * zz;
-    return (1 - 3 * e2 / 14 + e3 / 6 + 9 * e2 * e2 / 88 - 3 * e4 / 22
-            - 9 * e2 * e3 / 52 + 3 * e5 / 26) / (mul * an * sqrt(an))
-      + 3 * s;
-  }
-
-  Math::real EllipticFunction::RG0(real x, real y) throw() {
+    return Math::pi<real>() / (xn + yn);
+  }
+
+  Math::real EllipticFunction::RC(real x, real y) throw() {
+    return ( !(x >= y) ?        // x < y  and catch nans
+             // http://dlmf.nist.gov/19.2.E18
+             atan(sqrt((y - x) / x)) / sqrt(y - x) :
+             ( x == y && y > 0 ? 1 / sqrt(y) :
+               Math::atanh( y > 0 ?
+                            // http://dlmf.nist.gov/19.2.E19
+                            sqrt((x - y) / x) :
+                            // http://dlmf.nist.gov/19.2.E20
+                            sqrt(x / (x - y)) ) / sqrt(x - y) ) );
+  }
+
+  Math::real EllipticFunction::RG(real x, real y, real z) throw() {
+    if (z == 0)
+      swap(y, z);
+    // Carlson, eq 1.7
+    return (z * RF(x, y, z) - (x-z) * (y-z) * RD(x, y, z) / 3
+            + sqrt(x * y / z)) / 2;
+  }
+
+  Math::real EllipticFunction::RG(real x, real y) throw() {
     // Carlson, eqs 2.36 - 2.39
     real
-      x0 = sqrt(x),
-      y0 = sqrt(y),
+      x0 = sqrt(max(x, y)),
+      y0 = sqrt(min(x, y)),
       xn = x0,
       yn = y0,
       s = 0,
       mul = real(0.25);
-    while (abs(xn-yn) >= tolRG0_ * abs(xn)) {
+    while (abs(xn-yn) > tolRG0_ * xn) {
       // Max 4 trips
       real t = (xn + yn) /2;
       yn = sqrt(xn * yn);
@@ -118,25 +114,153 @@ namespace GeographicLib {
       t = xn - yn;
       s += mul * t * t;
     }
-    x0 = (x0 + y0)/2;
-    return (x0 * x0 - s) * Math::pi<real>() / (2 * (xn + yn));
+    return (Math::sq( (x0 + y0)/2 ) - s) * Math::pi<real>() / (2 * (xn + yn));
   }
 
-  EllipticFunction::EllipticFunction(real m) throw()
-    : _m(m)
-    , _m1(1 - m)
-      // Don't initialize _kc, _ec, _kec since this constructor might be called
+  Math::real EllipticFunction::RJ(real x, real y, real z, real p) throw() {
+    // Carlson, eqs 2.17 - 2.25
+    real
+      A0 = (x + y + z + 2*p)/5,
+      An = A0,
+      delta = (p-x) * (p-y) * (p-z),
+      Q = max(max(abs(A0-x), abs(A0-y)), max(abs(A0-z), abs(A0-p))) / tolRD_,
+      x0 = x,
+      y0 = y,
+      z0 = z,
+      p0 = p,
+      mul = 1,
+      mul3 = 1,
+      s = 0;
+    while (Q >= mul * abs(An)) {
+      // Max 7 trips
+      real
+        lam = sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0),
+        d0 = (sqrt(p0)+sqrt(x0)) * (sqrt(p0)+sqrt(y0)) * (sqrt(p0)+sqrt(z0)),
+        e0 = delta/(mul3 * Math::sq(d0));
+      s += RC(1, 1 + e0)/(mul * d0);
+      An = (An + lam)/4;
+      x0 = (x0 + lam)/4;
+      y0 = (y0 + lam)/4;
+      z0 = (z0 + lam)/4;
+      p0 = (p0 + lam)/4;
+      mul *= 4;
+      mul3 *= 64;
+    }
+    real
+      X = (A0 - x) / (mul * An),
+      Y = (A0 - y) / (mul * An),
+      Z = (A0 - z) / (mul * An),
+      P = -(X + Y + Z) / 2,
+      E2 = X*Y + X*Z + Y*Z - 3*P*P,
+      E3 = X*Y*Z + 2*P * (E2 + 2*P*P),
+      E4 = (2*X*Y*Z + P * (E2 + 3*P*P)) * P,
+      E5 = X*Y*Z*P*P;
+    // http://dlmf.nist.gov/19.36.E2
+    // Polynomial is
+    // (1 - 3*E2/14 + E3/6 + 9*E2^2/88 - 3*E4/22 - 9*E2*E3/52 + 3*E5/26
+    //    - E2^3/16 + 3*E3^2/40 + 3*E2*E4/20 + 45*E2^2*E3/272
+    //    - 9*(E3*E4+E2*E5)/68)
+    return ((471240 - 540540 * E2) * E5 +
+            (612612 * E2 - 540540 * E3 - 556920) * E4 +
+            E3 * (306306 * E3 + E2 * (675675 * E2 - 706860) + 680680) +
+            E2 * ((417690 - 255255 * E2) * E2 - 875160) + 4084080) /
+      (4084080 * mul * An * sqrt(An)) + 6 * s;
+  }
+
+  Math::real EllipticFunction::RD(real x, real y, real z) throw() {
+    // Carlson, eqs 2.28 - 2.34
+    real
+      A0 = (x + y + 3*z)/5,
+      An = A0,
+      Q = max(max(abs(A0-x), abs(A0-y)), abs(A0-z)) / tolRD_,
+      x0 = x,
+      y0 = y,
+      z0 = z,
+      mul = 1,
+      s = 0;
+    while (Q >= mul * abs(An)) {
+      // Max 7 trips
+      real lam = sqrt(x0)*sqrt(y0) + sqrt(y0)*sqrt(z0) + sqrt(z0)*sqrt(x0);
+      s += 1/(mul * sqrt(z0) * (z0 + lam));
+      An = (An + lam)/4;
+      x0 = (x0 + lam)/4;
+      y0 = (y0 + lam)/4;
+      z0 = (z0 + lam)/4;
+      mul *= 4;
+    }
+    real
+      X = (A0 - x) / (mul * An),
+      Y = (A0 - y) / (mul * An),
+      Z = -(X + Y) / 3,
+      E2 = X*Y - 6*Z*Z,
+      E3 = (3*X*Y - 8*Z*Z)*Z,
+      E4 = 3 * (X*Y - Z*Z) * Z*Z,
+      E5 = X*Y*Z*Z*Z;
+    // http://dlmf.nist.gov/19.36.E2
+    // Polynomial is
+    // (1 - 3*E2/14 + E3/6 + 9*E2^2/88 - 3*E4/22 - 9*E2*E3/52 + 3*E5/26
+    //    - E2^3/16 + 3*E3^2/40 + 3*E2*E4/20 + 45*E2^2*E3/272
+    //    - 9*(E3*E4+E2*E5)/68)
+    return ((471240 - 540540 * E2) * E5 +
+            (612612 * E2 - 540540 * E3 - 556920) * E4 +
+            E3 * (306306 * E3 + E2 * (675675 * E2 - 706860) + 680680) +
+            E2 * ((417690 - 255255 * E2) * E2 - 875160) + 4084080) /
+      (4084080 * mul * An * sqrt(An)) + 3 * s;
+  }
+
+  EllipticFunction::EllipticFunction(real k2, real alpha2) throw()
+    : _k2(k2)
+    , _kp2(1 - k2)
+    , _alpha2(alpha2)
+    , _alphap2(1 - alpha2)
+    , _eps(_k2/Math::sq(sqrt(_kp2) + 1))
+      // Don't initialize _Kc, _Ec, _Dc since this constructor might be called
       // before the static real constants tolRF_, etc., are initialized.
     , _init(false)
   {}
 
+  EllipticFunction::EllipticFunction(real k2, real alpha2,
+                                     real kp2, real alphap2) throw()
+    : _k2(k2)
+    , _kp2(kp2)
+    , _alpha2(alpha2)
+    , _alphap2(alphap2)
+    , _eps(_k2/Math::sq(sqrt(_kp2) + 1))
+    , _init(false)
+  {}
+
+  void EllipticFunction::Reset(real k2, real alpha2,
+                               real kp2, real alphap2) throw() {
+    _k2 = k2;
+    _kp2 = kp2;
+    _alpha2 = alpha2;
+    _alphap2 = alphap2;
+    _eps = _k2/Math::sq(sqrt(_kp2) + 1);
+    _init = false;
+  }
+
   bool EllipticFunction::Init() const throw() {
-    // Complete elliptic integral K(m), Carlson eq. 4.1
-    _kc = RF(real(0), _m1, real(1));
-    // Complete elliptic integral E(m), Carlson eq. 4.2
-    _ec = 2 * RG0(_m1, real(1));
-    // K - E, Carlson eq.4.3
-    _kec = _m / 3 * RD(real(0), _m1, real(1));
+    // Complete elliptic integral K(k), Carlson eq. 4.1
+    // http://dlmf.nist.gov/19.25.E1
+    _Kc = _kp2 ? RF(_kp2, 1) : Math::infinity<real>();
+    // Complete elliptic integral E(k), Carlson eq. 4.2
+    // http://dlmf.nist.gov/19.25.E1
+    _Ec = _kp2 ? 2 * RG(_kp2, 1) : 1;
+    // D(k) = (K(k) - E(k))/m, Carlson eq.4.3
+    // http://dlmf.nist.gov/19.25.E1
+    _Dc = _kp2 ? RD(real(0), _kp2, 1) / 3 : Math::infinity<real>();
+    if (_alpha2) {
+      // http://dlmf.nist.gov/19.25.E2
+      real rj = _kp2 ? RJ(0, _kp2, 1, _alphap2) : Math::infinity<real>();
+      // Pi(alpha^2, k)
+      _Pic = _Kc + _alpha2 * rj / 3;
+      // G(alpha^2, k)
+      _Gc = _kp2 ? _Kc + (_alpha2 - _k2) * rj / 3 :  RC(1, _alphap2);
+      // H(alpha^2, k)
+      _Hc = _kp2 ? _Kc - _alphap2 * rj / 3 : RC(1, _alphap2);
+    } else {
+      _Pic = _Kc; _Gc = _Ec; _Hc = _Kc - _Dc;
+    }
     return _init = true;
   }
 
@@ -151,12 +275,15 @@ namespace GeographicLib {
   void EllipticFunction::sncndn(real x, real& sn, real& cn, real& dn)
     const throw() {
     // Bulirsch's sncndn routine, p 89.
-    //
-    // Assume _m1 is in [0, 1].  See Bulirsch article for code to treat
-    // negative _m1.
-    if (_m1 != 0) {
-      real mc = _m1;
-      real c;
+    if (_kp2 != 0) {
+      real mc = _kp2, d = 0;
+      if (_kp2 < 0) {
+        d = 1 - mc;
+        mc /= -d;
+        d = sqrt(d);
+        x *= d;
+      }
+      real c = 0;           // To suppress warning about uninitialized variable
       real m[num_], n[num_];
       unsigned l = 0;
       for (real a = 1; l < num_; ++l) {
@@ -168,26 +295,30 @@ namespace GeographicLib {
           ++l;
           break;
         }
-        mc = a * mc;
+        mc *= a;
         a = c;
       }
-      x = c * x;
+      x *= c;
       sn = sin(x);
       cn = cos(x);
       dn = 1;
       if (sn != 0) {
         real a = cn / sn;
-        c = a * c;
+        c *= a;
         while (l--) {
           real b = m[l];
-          a = c * a;
-          c = dn * c;
+          a *= c;
+          c *= dn;
           dn = (n[l] + a) / (b + a);
           a = c / b;
         }
-        a = 1 / sqrt(c * c + 1);
+        a = 1 / sqrt(c*c + 1);
         sn = sn < 0 ? -a : a;
         cn = c * sn;
+        if (_kp2 < 0) {
+          swap(cn, dn);
+          sn /= d;
+        }
       }
     } else {
       sn = tanh(x);
@@ -195,24 +326,199 @@ namespace GeographicLib {
     }
   }
 
+  Math::real EllipticFunction::F(real sn, real cn, real dn) const throw() {
+    // Carlson, eq. 4.5 and
+    // http://dlmf.nist.gov/19.25.E5
+    real fi = abs(sn) * RF(cn*cn, dn*dn, 1);
+    // Enforce usual trig-like symmetries
+    if (cn < 0)
+      fi = 2 * K() - fi;
+    if (sn < 0)
+      fi = -fi;
+    return fi;
+  }
+
   Math::real EllipticFunction::E(real sn, real cn, real dn) const throw() {
     real
-      cn2 = cn * cn, dn2 = dn * dn, sn2 = sn * sn,
-      // Carlson, eq. 4.6
-      ei = abs(sn) * (RF(cn2, dn2, real(1)) -
-                      (_m / 3) * sn2 * RD(cn2, dn2, real(1)));
+      cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn,
+      ei = ( _k2 <= 0 ?
+             // Carlson, eq. 4.6 and
+             // http://dlmf.nist.gov/19.25.E9
+             RF(cn2, dn2, 1) - _k2 * sn2 * RD(cn2, dn2, 1) / 3 :
+             ( _kp2 >= 0 ?
+               // http://dlmf.nist.gov/19.25.E10
+               _kp2 * RF(cn2, dn2, 1) +
+               _k2 * _kp2 * sn2 * RD(cn2, 1, dn2) / 3 +
+               _k2 * abs(cn) / dn :
+               // http://dlmf.nist.gov/19.25.E11
+               - _kp2 * sn2 * RD(dn2, 1, cn2) / 3 + dn / abs(cn) ) );
+    ei *= abs(sn);
     // Enforce usual trig-like symmetries
-    if (cn < 0) {
+    if (cn < 0)
       ei = 2 * E() - ei;
-    }
     if (sn < 0)
       ei = -ei;
     return ei;
   }
 
+  Math::real EllipticFunction::D(real sn, real cn, real dn) const throw() {
+    // Carlson, eq. 4.8 and
+    // http://dlmf.nist.gov/19.25.E5
+    real di = abs(sn) * sn*sn * RD(cn*cn, dn*dn, 1) / 3;
+    // Enforce usual trig-like symmetries
+    if (cn < 0)
+      di = 2 * D() - di;
+    if (sn < 0)
+      di = -di;
+    return di;
+  }
+
+  Math::real EllipticFunction::Pi(real sn, real cn, real dn) const throw() {
+    // Carlson, eq. 4.5 and
+    // http://dlmf.nist.gov/19.25.E5
+    real
+      cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn,
+      pii = abs(sn) * (RF(cn2, dn2, 1) +
+                       _alpha2 * sn2 * RJ(cn2, dn2, 1, 1 - _alpha2 * sn2) / 3);
+    // Enforce usual trig-like symmetries
+    if (cn < 0)
+      pii = 2 * Pi() - pii;
+    if (sn < 0)
+      pii = -pii;
+    return pii;
+  }
+
+  Math::real EllipticFunction::G(real sn, real cn, real dn) const throw() {
+    real
+      cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn,
+      gi = abs(sn) * (RF(cn2, dn2, 1) +
+                      (_alpha2 - _k2) * sn2 *
+                      RJ(cn2, dn2, 1, cn2 + _alphap2 * sn2) / 3);
+    // Enforce usual trig-like symmetries
+    if (cn < 0)
+      gi = 2 * G() - gi;
+    if (sn < 0)
+      gi = -gi;
+    return gi;
+  }
+
+  Math::real EllipticFunction::H(real sn, real cn, real dn) const throw() {
+    real
+      cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn,
+      hi = abs(sn) * (RF(cn2, dn2, 1) -
+                      _alphap2 * sn2 *
+                      RJ(cn2, dn2, 1, cn2 + _alphap2 * sn2) / 3);
+    // Enforce usual trig-like symmetries
+    if (cn < 0)
+      hi = 2 * H() - hi;
+    if (sn < 0)
+      hi = -hi;
+    return hi;
+  }
+
+  Math::real EllipticFunction::deltaF(real sn, real cn, real dn) const throw() {
+    // Function is periodic with period pi
+    if (cn < 0) { cn = -cn; sn = -sn; }
+    return F(sn, cn, dn) * (Math::pi<real>()/2) / K() - atan2(sn, cn);
+  }
+
+  Math::real EllipticFunction::deltaE(real sn, real cn, real dn) const throw() {
+    // Function is periodic with period pi
+    if (cn < 0) { cn = -cn; sn = -sn; }
+    return E(sn, cn, dn) * (Math::pi<real>()/2) / E() - atan2(sn, cn);
+  }
+
+  Math::real EllipticFunction::deltaPi(real sn, real cn, real dn)
+    const throw() {
+    // Function is periodic with period pi
+    if (cn < 0) { cn = -cn; sn = -sn; }
+    return Pi(sn, cn, dn) * (Math::pi<real>()/2) / Pi() - atan2(sn, cn);
+  }
+
+  Math::real EllipticFunction::deltaD(real sn, real cn, real dn) const throw() {
+    // Function is periodic with period pi
+    if (cn < 0) { cn = -cn; sn = -sn; }
+    return D(sn, cn, dn) * (Math::pi<real>()/2) / D() - atan2(sn, cn);
+  }
+
+  Math::real EllipticFunction::deltaG(real sn, real cn, real dn) const throw() {
+    // Function is periodic with period pi
+    if (cn < 0) { cn = -cn; sn = -sn; }
+    return G(sn, cn, dn) * (Math::pi<real>()/2) / G() - atan2(sn, cn);
+  }
+
+  Math::real EllipticFunction::deltaH(real sn, real cn, real dn) const throw() {
+    // Function is periodic with period pi
+    if (cn < 0) { cn = -cn; sn = -sn; }
+    return H(sn, cn, dn) * (Math::pi<real>()/2) / H() - atan2(sn, cn);
+  }
+
+  Math::real EllipticFunction::F(real phi) const throw() {
+    real sn = sin(phi), cn = cos(phi);
+    return (deltaF(sn, cn, Delta(sn, cn)) + phi) * K() / (Math::pi<real>()/2);
+  }
+
   Math::real EllipticFunction::E(real phi) const throw() {
-    real sn = sin(phi);
-    return E(sn, cos(phi), sqrt(1 - _m * sn * sn));
+    real sn = sin(phi), cn = cos(phi);
+    return (deltaE(sn, cn, Delta(sn, cn)) + phi) * E() / (Math::pi<real>()/2);
+  }
+
+  Math::real EllipticFunction::Ed(real ang) const throw() {
+    real n = ceil(ang/360 - real(0.5));
+    ang -= 360 * n;
+    real
+      phi = ang * Math::degree<real>(),
+      sn = abs(ang) == 180 ? 0 : sin(phi),
+      cn = abs(ang) ==  90 ? 0 : cos(phi);
+    return E(sn, cn, Delta(sn, cn)) + 4 * E() * n;
+  }
+
+  Math::real EllipticFunction::Pi(real phi) const throw() {
+    real sn = sin(phi), cn = cos(phi);
+    return (deltaPi(sn, cn, Delta(sn, cn)) + phi) * Pi() / (Math::pi<real>()/2);
+  }
+
+  Math::real EllipticFunction::D(real phi) const throw() {
+    real sn = sin(phi), cn = cos(phi);
+    return (deltaD(sn, cn, Delta(sn, cn)) + phi) * D() / (Math::pi<real>()/2);
+  }
+
+  Math::real EllipticFunction::G(real phi) const throw() {
+    real sn = sin(phi), cn = cos(phi);
+    return (deltaG(sn, cn, Delta(sn, cn)) + phi) * G() / (Math::pi<real>()/2);
+  }
+
+  Math::real EllipticFunction::H(real phi) const throw() {
+    real sn = sin(phi), cn = cos(phi);
+    return (deltaH(sn, cn, Delta(sn, cn)) + phi) * H() / (Math::pi<real>()/2);
+  }
+
+  Math::real EllipticFunction::Einv(real x) const throw() {
+    _init || Init();
+    real n = floor(x / (2 * _Ec) + 0.5);
+    x -= 2 * _Ec * n;           // x now in [-ec, ec)
+    // Linear approximation
+    real phi = Math::pi<real>() * x / (2 * _Ec); // phi in [-pi/2, pi/2)
+    // First order correction
+    phi -= _eps * sin(2 * phi) / 2;
+    for (int i = 0; i < num_; ++i) {
+      real
+        sn = sin(phi),
+        cn = cos(phi),
+        dn = Delta(sn, cn),
+        err = (E(sn, cn, dn) - x)/dn;
+      phi = phi - err;
+      if (abs(err) < tolJAC_)
+        break;
+    }
+    return n * Math::pi<real>() + phi;
+  }
+
+  Math::real EllipticFunction::deltaEinv(real stau, real ctau) const throw() {
+    // Function is periodic with period pi
+    if (ctau < 0) { ctau = -ctau; stau = -stau; }
+    real tau = atan2(stau, ctau);
+    return Einv( tau * E() / (Math::pi<real>()/2) ) - tau;
   }
 
 } // namespace GeographicLib
diff --git a/src/GeoCoords.cpp b/src/GeoCoords.cpp
index 9e21bab..5e723f6 100644
--- a/src/GeoCoords.cpp
+++ b/src/GeoCoords.cpp
@@ -8,18 +8,9 @@
  **********************************************************************/
 
 #include <GeographicLib/GeoCoords.hpp>
-#include <vector>
-#include <sstream>
-#include <iomanip>
 #include <GeographicLib/MGRS.hpp>
 #include <GeographicLib/DMS.hpp>
 
-#define GEOGRAPHICLIB_GEOCOORDS_CPP \
-  "$Id: 084d4ec9163dc9d8989b54b12a04bf0f44a8c23f $"
-
-RCSID_DECL(GEOGRAPHICLIB_GEOCOORDS_CPP)
-RCSID_DECL(GEOGRAPHICLIB_GEOCOORDS_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -66,9 +57,8 @@ namespace GeographicLib {
     CopyToAlt();
   }
 
-
   string GeoCoords::GeoRepresentation(int prec, bool swaplatlong) const {
-    prec = max(0, min(9, prec) + 5);
+    prec = max(0, min(9 + Math::extradigits, prec) + 5);
     ostringstream os;
     os << fixed << setprecision(prec);
     real a = swaplatlong ? _long : _lat;
@@ -86,17 +76,14 @@ namespace GeographicLib {
   }
 
   string GeoCoords::DMSRepresentation(int prec, bool swaplatlong,
-				      char dmssep) const {
-    prec = max(0, min(10, prec) + 5);
+                                      char dmssep) const {
+    prec = max(0, min(10 + Math::extradigits, prec) + 5);
     return DMS::Encode(swaplatlong ? _long : _lat, unsigned(prec),
                        swaplatlong ? DMS::LONGITUDE : DMS::LATITUDE, dmssep) +
       " " + DMS::Encode(swaplatlong ? _lat : _long, unsigned(prec),
                         swaplatlong ? DMS::LATITUDE : DMS::LONGITUDE, dmssep);
   }
 
-  string GeoCoords::DMSRepresentation(int prec, bool swaplatlong) const
-  { return DMSRepresentation(prec, swaplatlong, char(0)); }
-
   string GeoCoords::MGRSRepresentation(int prec) const {
     // Max precision is um
     prec = max(0, min(6, prec) + 5);
@@ -114,12 +101,13 @@ namespace GeographicLib {
     return mgrs;
   }
 
-  void GeoCoords::UTMUPSString(int zone, real easting, real northing, int prec,
-                               std::string& utm) const {
+  void GeoCoords::UTMUPSString(int zone, bool northp,
+                               real easting, real northing, int prec,
+                               std::string& utm) {
     ostringstream os;
-    prec = max(-5, min(9, prec));
+    prec = max(-5, min(9 + Math::extradigits, prec));
     real scale = prec < 0 ? pow(real(10), -prec) : real(1);
-    os << UTMUPS::EncodeZone(zone, _northp) << fixed << setfill('0');
+    os << UTMUPS::EncodeZone(zone, northp) << fixed << setfill('0');
     if (Math::isfinite(easting)) {
       os << " " << setprecision(max(0, prec)) << easting / scale;
       if (prec < 0 && abs(easting / scale) > real(0.5))
@@ -137,13 +125,33 @@ namespace GeographicLib {
 
   string GeoCoords::UTMUPSRepresentation(int prec) const {
     string utm;
-    UTMUPSString(_zone, _easting, _northing, prec, utm);
+    UTMUPSString(_zone, _northp, _easting, _northing, prec, utm);
+    return utm;
+  }
+
+  string GeoCoords::UTMUPSRepresentation(bool northp, int prec) const {
+    real e, n;
+    int z;
+    UTMUPS::Transfer(_zone, _northp, _easting, _northing,
+                     _zone,  northp,  e,        n,       z);
+    string utm;
+    UTMUPSString(_zone, northp, e, n, prec, utm);
     return utm;
   }
 
   string GeoCoords::AltUTMUPSRepresentation(int prec) const {
     string utm;
-    UTMUPSString(_alt_zone, _alt_easting, _alt_northing, prec, utm);
+    UTMUPSString(_alt_zone, _northp, _alt_easting, _alt_northing, prec, utm);
+    return utm;
+  }
+
+  string GeoCoords::AltUTMUPSRepresentation(bool northp, int prec) const {
+    real e, n;
+    int z;
+    UTMUPS::Transfer(_alt_zone, _northp, _alt_easting, _alt_northing,
+                     _alt_zone,  northp,      e,            n,       z);
+    string utm;
+    UTMUPSString(_alt_zone, northp, e, n, prec, utm);
     return utm;
   }
 
diff --git a/src/Geocentric.cpp b/src/Geocentric.cpp
index eb59f46..9f62493 100644
--- a/src/Geocentric.cpp
+++ b/src/Geocentric.cpp
@@ -9,12 +9,6 @@
 
 #include <GeographicLib/Geocentric.hpp>
 
-#define GEOGRAPHICLIB_GEOCENTRIC_CPP \
-  "$Id: b5135e8042dbbbcddfd5894c66b729bf5c43cab9 $"
-
-RCSID_DECL(GEOGRAPHICLIB_GEOCENTRIC_CPP)
-RCSID_DECL(GEOGRAPHICLIB_GEOCENTRIC_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -40,7 +34,7 @@ namespace GeographicLib {
   void Geocentric::IntForward(real lat, real lon, real h,
                               real& X, real& Y, real& Z,
                               real M[dim2_]) const throw() {
-    lon = lon >= 180 ? lon - 360 : (lon < -180 ? lon + 360 : lon);
+    lon = Math::AngNormalize(lon);
     real
       phi = lat * Math::degree<real>(),
       lam = lon * Math::degree<real>(),
diff --git a/src/Geodesic.cpp b/src/Geodesic.cpp
index 6807788..a1e350a 100644
--- a/src/Geodesic.cpp
+++ b/src/Geodesic.cpp
@@ -2,7 +2,7 @@
  * \file Geodesic.cpp
  * \brief Implementation for GeographicLib::Geodesic class
  *
- * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2009-2013) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  *
@@ -29,11 +29,10 @@
 #include <GeographicLib/Geodesic.hpp>
 #include <GeographicLib/GeodesicLine.hpp>
 
-#define GEOGRAPHICLIB_GEODESIC_CPP \
-  "$Id: dd137806b8a5ba58211a37eb87e163b8a9bd7aa7 $"
-
-RCSID_DECL(GEOGRAPHICLIB_GEODESIC_CPP)
-RCSID_DECL(GEOGRAPHICLIB_GEODESIC_HPP)
+#if defined(_MSC_VER)
+// Squelch warnings about potentially uninitialized local variables
+#  pragma warning (disable: 4701)
+#endif
 
 namespace GeographicLib {
 
@@ -48,7 +47,9 @@ namespace GeographicLib {
   // 52.784459512564 0 -52.784459512563990912 179.634407464943777557
   // which otherwise failed for Visual Studio 10 (Release and Debug)
   const Math::real Geodesic::tol1_ = 200 * tol0_;
-  const Math::real Geodesic::tol2_ = sqrt(numeric_limits<real>::epsilon());
+  const Math::real Geodesic::tol2_ = sqrt(tol0_);
+  // Check on bisection interval
+  const Math::real Geodesic::tolb_ = tol0_ * tol2_;
   const Math::real Geodesic::xthresh_ = 1000 * tol2_;
 
   Geodesic::Geodesic(real a, real f)
@@ -63,8 +64,18 @@ namespace GeographicLib {
            (_e2 == 0 ? 1 :
             (_e2 > 0 ? Math::atanh(sqrt(_e2)) : atan(sqrt(-_e2))) /
             sqrt(abs(_e2))))/2) // authalic radius squared
-      // The sig12 threshold for "really short"
-    , _etol2(10 * tol2_ / max(real(0.1), sqrt(abs(_e2))))
+      // The sig12 threshold for "really short".  Using the auxiliary sphere
+      // solution with dnm computed at (bet1 + bet2) / 2, the relative error in
+      // the azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2.
+      // (Error measured for 1/100 < b/a < 100 and abs(f) >= 1/1000.  For a
+      // given f and sig12, the max error occurs for lines near the pole.  If
+      // the old rule for computing dnm = (dn1 + dn2)/2 is used, then the error
+      // increases by a factor of 2.)  Setting this equal to epsilon gives
+      // sig12 = etol2.  Here 0.1 is a safety factor (error decreased by 100)
+      // and max(0.001, abs(f)) stops etol2 getting too large in the nearly
+      // spherical case.
+    , _etol2(0.1 * tol2_ /
+             sqrt( max(real(0.001), abs(_f)) * min(real(1), 1 - _f/2) / 2 ))
   {
     if (!(Math::isfinite(_a) && _a > 0))
       throw GeographicErr("Major radius is not positive");
@@ -83,7 +94,7 @@ namespace GeographicLib {
                                     const real c[], int n) throw() {
     // Evaluate
     // y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :
-    //            sum(c[i] * cos((2*i+1) * x), i, 0, n-1) :
+    //            sum(c[i] * cos((2*i+1) * x), i, 0, n-1)
     // using Clenshaw summation.  N.B. c[0] is unused for sin series
     // Approx operation count = (n + 5) mult and (2 * n + 2) add
     c += (n + sinp);            // Point to one beyond last element
@@ -126,16 +137,16 @@ namespace GeographicLib {
                                   real& m12, real& M12, real& M21, real& S12)
     const throw() {
     outmask &= OUT_ALL;
-    lon1 = AngNormalize(lon1);
-    real lon12 = AngNormalize(AngNormalize(lon2) - lon1);
-    // If very close to being on the same meridian, then make it so.
-    // Not sure this is necessary...
+    // Compute longitude difference (AngDiff does this carefully).  Result is
+    // in [-180, 180] but -180 is only for west-going geodesics.  180 is for
+    // east-going and meridional geodesics.
+    real lon12 = Math::AngDiff(Math::AngNormalize(lon1),
+                               Math::AngNormalize(lon2));
+    // If very close to being on the same half-meridian, then make it so.
     lon12 = AngRound(lon12);
     // Make longitude difference positive.
     int lonsign = lon12 >= 0 ? 1 : -1;
     lon12 *= lonsign;
-    if (lon12 == 180)
-      lonsign = 1;
     // If really close to the equator, treat as on equator.
     lat1 = AngRound(lat1);
     lat2 = AngRound(lat2);
@@ -192,8 +203,12 @@ namespace GeographicLib {
     }
 
     real
+      dn1 = sqrt(1 + _ep2 * Math::sq(sbet1)),
+      dn2 = sqrt(1 + _ep2 * Math::sq(sbet2));
+
+    real
       lam12 = lon12 * Math::degree<real>(),
-      slam12 = lon12 == 180 ? 0 : sin(lam12),
+      slam12 = abs(lon12) == 180 ? 0 : sin(lam12),
       clam12 = cos(lam12);      // lon12 == 90 isn't interesting
 
     real a12, sig12, calp1, salp1, calp2, salp2;
@@ -220,19 +235,19 @@ namespace GeographicLib {
                     csig1 * csig2 + ssig1 * ssig2);
       {
         real dummy;
-        Lengths(_n, sig12, ssig1, csig1, ssig2, csig2,
+        Lengths(_n, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
                 cbet1, cbet2, s12x, m12x, dummy,
                 (outmask & GEODESICSCALE) != 0U, M12, M21, C1a, C2a);
       }
       // Add the check for sig12 since zero length geodesics might yield m12 <
       // 0.  Test case was
       //
-      //    echo 20.001 0 20.001 0 | Geod -i
+      //    echo 20.001 0 20.001 0 | GeodSolve -i
       //
       // In fact, we will have sig12 > pi/2 for meridional geodesic which is
       // not a shortest path.
       if (sig12 < 1 || m12x >= 0) {
-        m12x *= _a;
+        m12x *= _b;
         s12x *= _b;
         a12 = sig12 / Math::degree<real>();
       } else
@@ -249,11 +264,11 @@ namespace GeographicLib {
       // Geodesic runs along equator
       calp1 = calp2 = 0; salp1 = salp2 = 1;
       s12x = _a * lam12;
-      m12x = _b * sin(lam12 / _f1);
+      sig12 = omg12 = lam12 / _f1;
+      m12x = _b * sin(sig12);
       if (outmask & GEODESICSCALE)
-        M12 = M21 = cos(lam12 / _f1);
+        M12 = M21 = cos(sig12);
       a12 = lon12 / _f1;
-      sig12 = omg12 = lam12 / _f1;
 
     } else if (!meridian) {
 
@@ -261,76 +276,92 @@ namespace GeographicLib {
       // meridian and geodesic is neither meridional or equatorial.
 
       // Figure a starting point for Newton's method
-      sig12 = InverseStart(sbet1, cbet1, sbet2, cbet2,
+      real dnm;
+      sig12 = InverseStart(sbet1, cbet1, dn1, sbet2, cbet2, dn2,
                            lam12,
-                           salp1, calp1, salp2, calp2,
+                           salp1, calp1, salp2, calp2, dnm,
                            C1a, C2a);
 
       if (sig12 >= 0) {
-        // Short lines (InverseStart sets salp2, calp2)
-        real wm = sqrt(1 - _e2 * Math::sq((cbet1 + cbet2) / 2));
-        s12x = sig12 * _a * wm;
-        m12x = Math::sq(wm) * _a / _f1 * sin(sig12 * _f1 / wm);
+        // Short lines (InverseStart sets salp2, calp2, dnm)
+        s12x = sig12 * _b * dnm;
+        m12x = Math::sq(dnm) * _b * sin(sig12 / dnm);
         if (outmask & GEODESICSCALE)
-          M12 = M21 = cos(sig12 * _f1 / wm);
+          M12 = M21 = cos(sig12 / dnm);
         a12 = sig12 / Math::degree<real>();
-        omg12 = lam12 / wm;
+        omg12 = lam12 / (_f1 * dnm);
       } else {
 
-        // Newton's method
+        // Newton's method.  This is a straightforward solution of f(alp1) =
+        // lambda12(alp1) - lam12 = 0 with one wrinkle.  f(alp) has exactly one
+        // root in the interval (0, pi) and its derivative is positive at the
+        // root.  Thus f(alp) is positive for alp > alp1 and negative for alp <
+        // alp1.  During the course of the iteration, a range (alp1a, alp1b) is
+        // maintained which brackets the root and with each evaluation of
+        // f(alp) the range is shrunk, if possible.  Newton's method is
+        // restarted whenever the derivative of f is negative (because the new
+        // value of alp1 is then further from the solution) or if the new
+        // estimate of alp1 lies outside (0,pi); in this case, the new starting
+        // guess is taken to be (alp1a + alp1b) / 2.
         real ssig1, csig1, ssig2, csig2, eps;
-        real ov = 0;
         unsigned numit = 0;
-        for (unsigned trip = 0; numit < maxit_; ++numit) {
+        // Bracketing range
+        real salp1a = tiny_, calp1a = 1, salp1b = tiny_, calp1b = -1;
+        for (bool tripn = false, tripb = false; numit < maxit2_; ++numit) {
+          // the WGS84 test set: mean = 1.47, sd = 1.25, max = 16
+          // WGS84 and random input: mean = 2.85, sd = 0.60
           real dv;
-          real v = Lambda12(sbet1, cbet1, sbet2, cbet2, salp1, calp1,
+          real v = Lambda12(sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1,
                             salp2, calp2, sig12, ssig1, csig1, ssig2, csig2,
-                            eps, omg12, trip < 1, dv, C1a, C2a, C3a) - lam12;
-          if (!(abs(v) > tiny_) || !(trip < 1)) {
-            if (!(abs(v) <= max(tol1_, ov)))
-              numit = maxit_;
-            break;
+                            eps, omg12, numit < maxit1_, dv, C1a, C2a, C3a)
+            - lam12;
+          // 2 * tol0 is approximately 1 ulp for a number in [0, pi].
+          // Reversed test to allow escape with NaNs
+          if (tripb || !(abs(v) >= (tripn ? 8 : 2) * tol0_)) break;
+          // Update bracketing values
+          if (v > 0 && (numit > maxit1_ || calp1/salp1 > calp1b/salp1b))
+            { salp1b = salp1; calp1b = calp1; }
+          else if (v < 0 && (numit > maxit1_ || calp1/salp1 < calp1a/salp1a))
+            { salp1a = salp1; calp1a = calp1; }
+          if (numit < maxit1_ && dv > 0) {
+            real
+              dalp1 = -v/dv;
+            real
+              sdalp1 = sin(dalp1), cdalp1 = cos(dalp1),
+              nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
+            if (nsalp1 > 0 && abs(dalp1) < Math::pi<real>()) {
+              calp1 = calp1 * cdalp1 - salp1 * sdalp1;
+              salp1 = nsalp1;
+              SinCosNorm(salp1, calp1);
+              // In some regimes we don't get quadratic convergence because
+              // slope -> 0.  So use convergence conditions based on epsilon
+              // instead of sqrt(epsilon).
+              tripn = abs(v) <= 16 * tol0_;
+              continue;
+            }
           }
-          real
-            dalp1 = -v/dv;
-          real
-            sdalp1 = sin(dalp1), cdalp1 = cos(dalp1),
-            nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
-          calp1 = calp1 * cdalp1 - salp1 * sdalp1;
-          salp1 = max(real(0), nsalp1);
+          // Either dv was not postive or updated value was outside legal
+          // range.  Use the midpoint of the bracket as the next estimate.
+          // This mechanism is not needed for the WGS84 ellipsoid, but it does
+          // catch problems with more eccentric ellipsoids.  Its efficacy is
+          // such for the WGS84 test set with the starting guess set to alp1 =
+          // 90deg:
+          // the WGS84 test set: mean = 5.21, sd = 3.93, max = 24
+          // WGS84 and random input: mean = 4.74, sd = 0.99
+          salp1 = (salp1a + salp1b)/2;
+          calp1 = (calp1a + calp1b)/2;
           SinCosNorm(salp1, calp1);
-          // In some regimes we don't get quadratic convergence because slope
-          // -> 0.  So use convergence conditions based on epsilon instead of
-          // sqrt(epsilon).  The first criterion is a test on abs(v) against
-          // 100 * epsilon.  The second takes credit for an anticipated
-          // reduction in abs(v) by v/ov (due to the latest update in alp1) and
-          // checks this against epsilon.
-          if (!(abs(v) >= tol1_ && Math::sq(v) >= ov * tol0_)) ++trip;
-          ov = abs(v);
+          tripn = false;
+          tripb = (abs(salp1a - salp1) + (calp1a - calp1) < tolb_ ||
+                   abs(salp1 - salp1b) + (calp1 - calp1b) < tolb_);
         }
-
-        if (numit >= maxit_) {
-          // Signal failure.
-          if (outmask & DISTANCE)
-            s12 = Math::NaN<real>();
-          if (outmask & AZIMUTH)
-            azi1 = azi2 = Math::NaN<real>();
-          if (outmask & REDUCEDLENGTH)
-            m12 = Math::NaN<real>();
-          if (outmask & GEODESICSCALE)
-            M12 = M21 = Math::NaN<real>();
-          if (outmask & AREA)
-            S12 = Math::NaN<real>();
-          return Math::NaN<real>();
-        }
-
         {
           real dummy;
-          Lengths(eps, sig12, ssig1, csig1, ssig2, csig2,
+          Lengths(eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
                   cbet1, cbet2, s12x, m12x, dummy,
                   (outmask & GEODESICSCALE) != 0U, M12, M21, C1a, C2a);
         }
-        m12x *= _a;
+        m12x *= _b;
         s12x *= _b;
         a12 = sig12 / Math::degree<real>();
         omg12 = lam12 - omg12;
@@ -355,12 +386,13 @@ namespace GeographicLib {
           ssig1 = sbet1, csig1 = calp1 * cbet1,
           ssig2 = sbet2, csig2 = calp2 * cbet2,
           k2 = Math::sq(calp0) * _ep2,
+          eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2),
           // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0).
           A4 = Math::sq(_a) * calp0 * salp0 * _e2;
         SinCosNorm(ssig1, csig1);
         SinCosNorm(ssig2, csig2);
         real C4a[nC4_];
-        C4f(k2, C4a);
+        C4f(eps, C4a);
         real
           B41 = SinCosSeries(false, ssig1, csig1, C4a, nC4_),
           B42 = SinCosSeries(false, ssig2, csig2, C4a, nC4_);
@@ -423,13 +455,14 @@ namespace GeographicLib {
   }
 
   void Geodesic::Lengths(real eps, real sig12,
-                         real ssig1, real csig1, real ssig2, real csig2,
+                         real ssig1, real csig1, real dn1,
+                         real ssig2, real csig2, real dn2,
                          real cbet1, real cbet2,
-                         real& s12b, real& m12a, real& m0,
+                         real& s12b, real& m12b, real& m0,
                          bool scalep, real& M12, real& M21,
                          // Scratch areas of the right size
                          real C1a[], real C2a[]) const throw() {
-    // Return m12a = (reduced length)/_a; also calculate s12b = distance/_b,
+    // Return m12b = (reduced length)/_b; also calculate s12b = distance/_b,
     // and m0 = coefficient of secular term in expression for reduced length.
     C1f(eps, C1a);
     C2f(eps, C2a);
@@ -439,29 +472,20 @@ namespace GeographicLib {
                           SinCosSeries(true, ssig1, csig1, C1a, nC1_)),
       A2m1 = A2m1f(eps),
       AB2 = (1 + A2m1) * (SinCosSeries(true, ssig2, csig2, C2a, nC2_) -
-                          SinCosSeries(true, ssig1, csig1, C2a, nC2_)),
-      cbet1sq = Math::sq(cbet1),
-      cbet2sq = Math::sq(cbet2),
-      w1 = sqrt(1 - _e2 * cbet1sq),
-      w2 = sqrt(1 - _e2 * cbet2sq),
-      // Make sure it's OK to have repeated dummy arguments
-      m0x = A1m1 - A2m1,
-      J12 = m0x * sig12 + (AB1 - AB2);
-    m0 = m0x;
-    // Missing a factor of _a.
+                          SinCosSeries(true, ssig1, csig1, C2a, nC2_));
+    m0 = A1m1 - A2m1;
+    real J12 = m0 * sig12 + (AB1 - AB2);
+    // Missing a factor of _b.
     // Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure accurate
     // cancellation in the case of coincident points.
-    m12a = (w2 * (csig1 * ssig2) - w1 * (ssig1 * csig2))
-      - _f1 * csig1 * csig2 * J12;
+    m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12;
     // Missing a factor of _b
     s12b = (1 + A1m1) * sig12 + AB1;
     if (scalep) {
       real csig12 = csig1 * csig2 + ssig1 * ssig2;
-      J12 *= _f1;
-      M12 = csig12 + (_e2 * (cbet1sq - cbet2sq) * ssig2 / (w1 + w2)
-                      - csig2 * J12) * ssig1 / w1;
-      M21 = csig12 - (_e2 * (cbet1sq - cbet2sq) * ssig1 / (w1 + w2)
-                      - csig1 * J12) * ssig2 / w2;
+      real t = _ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2);
+      M12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1;
+      M21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2;
     }
   }
 
@@ -517,12 +541,14 @@ namespace GeographicLib {
     return k;
   }
 
-  Math::real Geodesic::InverseStart(real sbet1, real cbet1,
-                                    real sbet2, real cbet2,
+  Math::real Geodesic::InverseStart(real sbet1, real cbet1, real dn1,
+                                    real sbet2, real cbet2, real dn2,
                                     real lam12,
                                     real& salp1, real& calp1,
                                     // Only updated if return val >= 0
                                     real& salp2, real& calp2,
+                                    // Only updated for short lines
+                                    real& dnm,
                                     // Scratch areas of the right size
                                     real C1a[], real C2a[]) const throw() {
     // Return a starting point for Newton's method in salp1 and calp1 (function
@@ -551,11 +577,17 @@ namespace GeographicLib {
     real sbet12a = sbet2 * cbet1 + cbet2 * sbet1;
 #endif
     bool shortline = cbet12 >= 0 && sbet12 < real(0.5) &&
-      lam12 <= Math::pi<real>() / 6;
-    real
-      omg12 = (!shortline ? lam12 :
-               lam12 / sqrt(1 - _e2 * Math::sq((cbet1 + cbet2) / 2))),
-      somg12 = sin(omg12), comg12 = cos(omg12);
+      cbet2 * lam12 < real(0.5);
+    real omg12 = lam12;
+    if (shortline) {
+      real sbetm2 = Math::sq(sbet1 + sbet2);
+      // sin((bet1+bet2)/2)^2
+      // =  (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2)
+      sbetm2 /= sbetm2 + Math::sq(cbet1 + cbet2);
+      dnm = sqrt(1 + _ep2 * sbetm2);
+      omg12 /= _f1 * dnm;
+    }
+    real somg12 = sin(omg12), comg12 = cos(omg12);
 
     salp1 = cbet2 * somg12;
     calp1 = comg12 >= 0 ?
@@ -569,12 +601,14 @@ namespace GeographicLib {
     if (shortline && ssig12 < _etol2) {
       // really short lines
       salp2 = cbet1 * somg12;
-      calp2 = sbet12 - cbet1 * sbet2 * Math::sq(somg12) / (1 + comg12);
+      calp2 = sbet12 - cbet1 * sbet2 *
+        (comg12 >= 0 ? Math::sq(somg12) / (1 + comg12) : 1 - comg12);
       SinCosNorm(salp2, calp2);
       // Set return value
       sig12 = atan2(ssig12, csig12);
-    } else if (csig12 >= 0 ||
-               ssig12 >= 3 * abs(_f) * Math::pi<real>() * Math::sq(cbet1)) {
+    } else if (abs(_n) > real(0.1) || // Skip astroid calc if too eccentric
+               csig12 >= 0 ||
+               ssig12 >= 6 * abs(_n) * Math::pi<real>() * Math::sq(cbet1)) {
       // Nothing to do, zeroth order spherical approximation is OK
     } else {
       // Scale lam12 and bet2 to x, y coordinate system where antipodal point
@@ -601,13 +635,14 @@ namespace GeographicLib {
         real
           cbet12a = cbet2 * cbet1 - sbet2 * sbet1,
           bet12a = atan2(sbet12a, cbet12a);
-        real m12a, m0, dummy;
+        real m12b, m0, dummy;
         // In the case of lon12 = 180, this repeats a calculation made in
         // Inverse.
-        Lengths(_n, Math::pi<real>() + bet12a, sbet1, -cbet1, sbet2, cbet2,
-                cbet1, cbet2, dummy, m12a, m0, false,
+        Lengths(_n, Math::pi<real>() + bet12a,
+                sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
+                cbet1, cbet2, dummy, m12b, m0, false,
                 dummy, dummy, C1a, C2a);
-        x = -1 + m12a/(_f1 * cbet1 * cbet2 * m0 * Math::pi<real>());
+        x = -1 + m12b / (cbet1 * cbet2 * m0 * Math::pi<real>());
         betscale = x < -real(0.01) ? sbet12a / x :
           -_f * Math::sq(cbet1) * Math::pi<real>();
         lamscale = betscale / cbet1;
@@ -616,6 +651,7 @@ namespace GeographicLib {
 
       if (y > -tol1_ && x > -1 - xthresh_) {
         // strip near cut
+        // Need real(x) here to cast away the volatility of x for min/max
         if (_f >= 0) {
           salp1 = min(real(1), -real(x)); calp1 = - sqrt(1 - Math::sq(salp1));
         } else {
@@ -659,18 +695,23 @@ namespace GeographicLib {
         // Because omg12 is near pi, estimate work with omg12a = pi - omg12
         real k = Astroid(x, y);
         real
-          omg12a = lamscale * ( _f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k ),
-          somg12 = sin(omg12a), comg12 = -cos(omg12a);
+          omg12a = lamscale * ( _f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k );
+        somg12 = sin(omg12a); comg12 = -cos(omg12a);
         // Update spherical estimate of alp1 using omg12 instead of lam12
         salp1 = cbet2 * somg12;
         calp1 = sbet12a - cbet2 * sbet1 * Math::sq(somg12) / (1 - comg12);
       }
     }
-    SinCosNorm(salp1, calp1);
+    if (salp1 > 0)              // Sanity check on starting guess
+      SinCosNorm(salp1, calp1);
+    else {
+      salp1 = 1; calp1 = 0;
+    }
     return sig12;
   }
 
-  Math::real Geodesic::Lambda12(real sbet1, real cbet1, real sbet2, real cbet2,
+  Math::real Geodesic::Lambda12(real sbet1, real cbet1, real dn1,
+                                real sbet2, real cbet2, real dn2,
                                 real salp1, real calp1,
                                 real& salp2, real& calp2,
                                 real& sig12,
@@ -741,13 +782,13 @@ namespace GeographicLib {
 
     if (diffp) {
       if (calp2 == 0)
-        dlam12 = - 2 * sqrt(1 - _e2 * Math::sq(cbet1)) / sbet1;
+        dlam12 = - 2 * _f1 * dn1 / sbet1;
       else {
         real dummy;
-        Lengths(eps, sig12, ssig1, csig1, ssig2, csig2,
+        Lengths(eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
                 cbet1, cbet2, dummy, dlam12, dummy,
                 false, dummy, dummy, C1a, C2a);
-        dlam12 /= calp2 * cbet2;
+        dlam12 *= _f1 / (calp2 * cbet2);
       }
     }
 
@@ -755,20 +796,21 @@ namespace GeographicLib {
   }
 
   Math::real Geodesic::A3f(real eps) const throw() {
-    // Evaluation sum(_A3c[k] * eps^k, k, 0, nA3x_-1) by Horner's method
+    // Evaluate sum(_A3x[k] * eps^k, k, 0, nA3x_-1) by Horner's method
     real v = 0;
-    for (int i = nA3x_; i; )
+    for (int i = nA3x_; i > 0; )
       v = eps * v + _A3x[--i];
     return v;
   }
 
   void Geodesic::C3f(real eps, real c[]) const throw() {
-    // Evaluation C3 coeffs by Horner's method
+    // Evaluate C3 coeffs by Horner's method
     // Elements c[1] thru c[nC3_ - 1] are set
-    for (int j = nC3x_, k = nC3_ - 1; k; ) {
+    for (int j = nC3x_, k = nC3_ - 1; k > 0; ) {
       real t = 0;
-      for (int i = nC3_ - k; i; --i)
+      for (int i = nC3_ - k; i > 0; --i) {
         t = eps * t + _C3x[--j];
+      }
       c[k--] = t;
     }
 
@@ -779,26 +821,26 @@ namespace GeographicLib {
     }
   }
 
-  void Geodesic::C4f(real k2, real c[]) const throw() {
-    // Evaluation C4 coeffs by Horner's method
+  void Geodesic::C4f(real eps, real c[]) const throw() {
+    // Evaluate C4 coeffs by Horner's method
     // Elements c[0] thru c[nC4_ - 1] are set
-    for (int j = nC4x_, k = nC4_; k; ) {
+    for (int j = nC4x_, k = nC4_; k > 0; ) {
       real t = 0;
-      for (int i = nC4_ - k + 1; i; --i)
-        t = k2 * t + _C4x[--j];
+      for (int i = nC4_ - k + 1; i > 0; --i)
+        t = eps * t + _C4x[--j];
       c[--k] = t;
     }
 
     real mult = 1;
     for (int k = 1; k < nC4_; ) {
-      mult *= k2;
+      mult *= eps;
       c[k++] *= mult;
     }
   }
 
   // Generated by Maxima on 2010-09-04 10:26:17-04:00
 
-  // The scale factor A1-1 = mean value of I1-1
+  // The scale factor A1-1 = mean value of (d/dsigma)I1 - 1
   Math::real Geodesic::A1m1f(real eps) throw() {
     real
       eps2 = Math::sq(eps),
@@ -1012,7 +1054,7 @@ namespace GeographicLib {
     }
   }
 
-  // The scale factor A2-1 = mean value of I2-1
+  // The scale factor A2-1 = mean value of (d/dsigma)I2 - 1
   Math::real Geodesic::A2m1f(real eps) throw() {
     real
       eps2 = Math::sq(eps),
@@ -1133,7 +1175,7 @@ namespace GeographicLib {
     }
   }
 
-  // The scale factor A3 = mean value of I3
+  // The scale factor A3 = mean value of (d/dsigma)I3
   void Geodesic::A3coeff() throw() {
     switch (nA3_) {
     case 0:
@@ -1305,6 +1347,8 @@ namespace GeographicLib {
     }
   }
 
+  // Generated by Maxima on 2012-10-19 08:02:34-04:00
+
   // The coefficients C4[l] in the Fourier expansion of I4
   void Geodesic::C4coeff() throw() {
     switch (nC4_) {
@@ -1314,150 +1358,147 @@ namespace GeographicLib {
       _C4x[0] = 2/real(3);
       break;
     case 2:
-      _C4x[0] = (10-_ep2)/15;
-      _C4x[1] = -1/real(20);
-      _C4x[2] = 1/real(180);
+      _C4x[0] = (10-4*_n)/15;
+      _C4x[1] = -1/real(5);
+      _C4x[2] = 1/real(45);
       break;
     case 3:
-      _C4x[0] = (_ep2*(4*_ep2-7)+70)/105;
-      _C4x[1] = (4*_ep2-7)/140;
-      _C4x[2] = 1/real(42);
-      _C4x[3] = (7-4*_ep2)/1260;
-      _C4x[4] = -1/real(252);
-      _C4x[5] = 1/real(2100);
+      _C4x[0] = (_n*(8*_n-28)+70)/105;
+      _C4x[1] = (16*_n-7)/35;
+      _C4x[2] = -2/real(105);
+      _C4x[3] = (7-16*_n)/315;
+      _C4x[4] = -2/real(105);
+      _C4x[5] = 4/real(525);
       break;
     case 4:
-      _C4x[0] = (_ep2*((12-8*_ep2)*_ep2-21)+210)/315;
-      _C4x[1] = ((12-8*_ep2)*_ep2-21)/420;
-      _C4x[2] = (3-2*_ep2)/126;
-      _C4x[3] = -1/real(72);
-      _C4x[4] = (_ep2*(8*_ep2-12)+21)/3780;
-      _C4x[5] = (2*_ep2-3)/756;
-      _C4x[6] = 1/real(360);
-      _C4x[7] = (3-2*_ep2)/6300;
-      _C4x[8] = -1/real(1800);
-      _C4x[9] = 1/real(17640);
+      _C4x[0] = (_n*(_n*(4*_n+24)-84)+210)/315;
+      _C4x[1] = ((48-32*_n)*_n-21)/105;
+      _C4x[2] = (-32*_n-6)/315;
+      _C4x[3] = 11/real(315);
+      _C4x[4] = (_n*(32*_n-48)+21)/945;
+      _C4x[5] = (64*_n-18)/945;
+      _C4x[6] = -1/real(105);
+      _C4x[7] = (12-32*_n)/1575;
+      _C4x[8] = -8/real(1575);
+      _C4x[9] = 8/real(2205);
       break;
     case 5:
-      _C4x[0] = (_ep2*(_ep2*(_ep2*(64*_ep2-88)+132)-231)+2310)/3465;
-      _C4x[1] = (_ep2*(_ep2*(64*_ep2-88)+132)-231)/4620;
-      _C4x[2] = (_ep2*(16*_ep2-22)+33)/1386;
-      _C4x[3] = (8*_ep2-11)/792;
-      _C4x[4] = 1/real(110);
-      _C4x[5] = (_ep2*((88-64*_ep2)*_ep2-132)+231)/41580;
-      _C4x[6] = ((22-16*_ep2)*_ep2-33)/8316;
-      _C4x[7] = (11-8*_ep2)/3960;
-      _C4x[8] = -1/real(495);
-      _C4x[9] = (_ep2*(16*_ep2-22)+33)/69300;
-      _C4x[10] = (8*_ep2-11)/19800;
-      _C4x[11] = 1/real(1925);
-      _C4x[12] = (11-8*_ep2)/194040;
-      _C4x[13] = -1/real(10780);
-      _C4x[14] = 1/real(124740);
+      _C4x[0] = (_n*(_n*(_n*(16*_n+44)+264)-924)+2310)/3465;
+      _C4x[1] = (_n*(_n*(48*_n-352)+528)-231)/1155;
+      _C4x[2] = (_n*(1088*_n-352)-66)/3465;
+      _C4x[3] = (121-368*_n)/3465;
+      _C4x[4] = 4/real(1155);
+      _C4x[5] = (_n*((352-48*_n)*_n-528)+231)/10395;
+      _C4x[6] = ((704-896*_n)*_n-198)/10395;
+      _C4x[7] = (80*_n-99)/10395;
+      _C4x[8] = 4/real(1155);
+      _C4x[9] = (_n*(320*_n-352)+132)/17325;
+      _C4x[10] = (384*_n-88)/17325;
+      _C4x[11] = -8/real(1925);
+      _C4x[12] = (88-256*_n)/24255;
+      _C4x[13] = -16/real(8085);
+      _C4x[14] = 64/real(31185);
       break;
     case 6:
-      _C4x[0] = (_ep2*(_ep2*(_ep2*((832-640*_ep2)*_ep2-1144)+1716)-3003)+
-                30030)/45045;
-      _C4x[1] = (_ep2*(_ep2*((832-640*_ep2)*_ep2-1144)+1716)-3003)/60060;
-      _C4x[2] = (_ep2*((208-160*_ep2)*_ep2-286)+429)/18018;
-      _C4x[3] = ((104-80*_ep2)*_ep2-143)/10296;
-      _C4x[4] = (13-10*_ep2)/1430;
-      _C4x[5] = -1/real(156);
-      _C4x[6] = (_ep2*(_ep2*(_ep2*(640*_ep2-832)+1144)-1716)+3003)/540540;
-      _C4x[7] = (_ep2*(_ep2*(160*_ep2-208)+286)-429)/108108;
-      _C4x[8] = (_ep2*(80*_ep2-104)+143)/51480;
-      _C4x[9] = (10*_ep2-13)/6435;
-      _C4x[10] = 5/real(3276);
-      _C4x[11] = (_ep2*((208-160*_ep2)*_ep2-286)+429)/900900;
-      _C4x[12] = ((104-80*_ep2)*_ep2-143)/257400;
-      _C4x[13] = (13-10*_ep2)/25025;
-      _C4x[14] = -1/real(2184);
-      _C4x[15] = (_ep2*(80*_ep2-104)+143)/2522520;
-      _C4x[16] = (10*_ep2-13)/140140;
-      _C4x[17] = 5/real(45864);
-      _C4x[18] = (13-10*_ep2)/1621620;
-      _C4x[19] = -1/real(58968);
-      _C4x[20] = 1/real(792792);
+      _C4x[0] = (_n*(_n*(_n*(_n*(100*_n+208)+572)+3432)-12012)+30030)/45045;
+      _C4x[1] = (_n*(_n*(_n*(64*_n+624)-4576)+6864)-3003)/15015;
+      _C4x[2] = (_n*((14144-10656*_n)*_n-4576)-858)/45045;
+      _C4x[3] = ((-224*_n-4784)*_n+1573)/45045;
+      _C4x[4] = (1088*_n+156)/45045;
+      _C4x[5] = 97/real(15015);
+      _C4x[6] = (_n*(_n*((-64*_n-624)*_n+4576)-6864)+3003)/135135;
+      _C4x[7] = (_n*(_n*(5952*_n-11648)+9152)-2574)/135135;
+      _C4x[8] = (_n*(5792*_n+1040)-1287)/135135;
+      _C4x[9] = (468-2944*_n)/135135;
+      _C4x[10] = 1/real(9009);
+      _C4x[11] = (_n*((4160-1440*_n)*_n-4576)+1716)/225225;
+      _C4x[12] = ((4992-8448*_n)*_n-1144)/225225;
+      _C4x[13] = (1856*_n-936)/225225;
+      _C4x[14] = 8/real(10725);
+      _C4x[15] = (_n*(3584*_n-3328)+1144)/315315;
+      _C4x[16] = (1024*_n-208)/105105;
+      _C4x[17] = -136/real(63063);
+      _C4x[18] = (832-2560*_n)/405405;
+      _C4x[19] = -128/real(135135);
+      _C4x[20] = 128/real(99099);
       break;
     case 7:
-      _C4x[0] = (_ep2*(_ep2*(_ep2*(_ep2*(_ep2*(512*_ep2-640)+832)-1144)+1716)-
-                3003)+30030)/45045;
-      _C4x[1] = (_ep2*(_ep2*(_ep2*(_ep2*(512*_ep2-640)+832)-1144)+1716)-
-                3003)/60060;
-      _C4x[2] = (_ep2*(_ep2*(_ep2*(128*_ep2-160)+208)-286)+429)/18018;
-      _C4x[3] = (_ep2*(_ep2*(64*_ep2-80)+104)-143)/10296;
-      _C4x[4] = (_ep2*(8*_ep2-10)+13)/1430;
-      _C4x[5] = (4*_ep2-5)/780;
-      _C4x[6] = 1/real(210);
-      _C4x[7] = (_ep2*(_ep2*(_ep2*((640-512*_ep2)*_ep2-832)+1144)-1716)+
-                3003)/540540;
-      _C4x[8] = (_ep2*(_ep2*((160-128*_ep2)*_ep2-208)+286)-429)/108108;
-      _C4x[9] = (_ep2*((80-64*_ep2)*_ep2-104)+143)/51480;
-      _C4x[10] = ((10-8*_ep2)*_ep2-13)/6435;
-      _C4x[11] = (5-4*_ep2)/3276;
-      _C4x[12] = -1/real(840);
-      _C4x[13] = (_ep2*(_ep2*(_ep2*(128*_ep2-160)+208)-286)+429)/900900;
-      _C4x[14] = (_ep2*(_ep2*(64*_ep2-80)+104)-143)/257400;
-      _C4x[15] = (_ep2*(8*_ep2-10)+13)/25025;
-      _C4x[16] = (4*_ep2-5)/10920;
-      _C4x[17] = 1/real(2520);
-      _C4x[18] = (_ep2*((80-64*_ep2)*_ep2-104)+143)/2522520;
-      _C4x[19] = ((10-8*_ep2)*_ep2-13)/140140;
-      _C4x[20] = (5-4*_ep2)/45864;
-      _C4x[21] = -1/real(8820);
-      _C4x[22] = (_ep2*(8*_ep2-10)+13)/1621620;
-      _C4x[23] = (4*_ep2-5)/294840;
-      _C4x[24] = 1/real(41580);
-      _C4x[25] = (5-4*_ep2)/3963960;
-      _C4x[26] = -1/real(304920);
-      _C4x[27] = 1/real(4684680);
+      _C4x[0] = (_n*(_n*(_n*(_n*(_n*(56*_n+100)+208)+572)+3432)-12012)+30030)/
+        45045;
+      _C4x[1] = (_n*(_n*(_n*(_n*(16*_n+64)+624)-4576)+6864)-3003)/15015;
+      _C4x[2] = (_n*(_n*(_n*(1664*_n-10656)+14144)-4576)-858)/45045;
+      _C4x[3] = (_n*(_n*(10736*_n-224)-4784)+1573)/45045;
+      _C4x[4] = ((1088-4480*_n)*_n+156)/45045;
+      _C4x[5] = (291-464*_n)/45045;
+      _C4x[6] = 10/real(9009);
+      _C4x[7] = (_n*(_n*(_n*((-16*_n-64)*_n-624)+4576)-6864)+3003)/135135;
+      _C4x[8] = (_n*(_n*((5952-768*_n)*_n-11648)+9152)-2574)/135135;
+      _C4x[9] = (_n*((5792-10704*_n)*_n+1040)-1287)/135135;
+      _C4x[10] = (_n*(3840*_n-2944)+468)/135135;
+      _C4x[11] = (112*_n+15)/135135;
+      _C4x[12] = 10/real(9009);
+      _C4x[13] = (_n*(_n*(_n*(128*_n-1440)+4160)-4576)+1716)/225225;
+      _C4x[14] = (_n*(_n*(6784*_n-8448)+4992)-1144)/225225;
+      _C4x[15] = (_n*(1664*_n+1856)-936)/225225;
+      _C4x[16] = (168-1664*_n)/225225;
+      _C4x[17] = -4/real(25025);
+      _C4x[18] = (_n*((3584-1792*_n)*_n-3328)+1144)/315315;
+      _C4x[19] = ((1024-2048*_n)*_n-208)/105105;
+      _C4x[20] = (1792*_n-680)/315315;
+      _C4x[21] = 64/real(315315);
+      _C4x[22] = (_n*(3072*_n-2560)+832)/405405;
+      _C4x[23] = (2048*_n-384)/405405;
+      _C4x[24] = -512/real(405405);
+      _C4x[25] = (640-2048*_n)/495495;
+      _C4x[26] = -256/real(495495);
+      _C4x[27] = 512/real(585585);
       break;
     case 8:
-      _C4x[0] = (_ep2*(_ep2*(_ep2*(_ep2*(_ep2*((8704-7168*_ep2)*_ep2-10880)+
-                14144)-19448)+29172)-51051)+510510)/765765;
-      _C4x[1] = (_ep2*(_ep2*(_ep2*(_ep2*((8704-7168*_ep2)*_ep2-10880)+14144)-
-                19448)+29172)-51051)/1021020;
-      _C4x[2] = (_ep2*(_ep2*(_ep2*((2176-1792*_ep2)*_ep2-2720)+3536)-4862)+
-                7293)/306306;
-      _C4x[3] = (_ep2*(_ep2*((1088-896*_ep2)*_ep2-1360)+1768)-2431)/175032;
-      _C4x[4] = (_ep2*((136-112*_ep2)*_ep2-170)+221)/24310;
-      _C4x[5] = ((68-56*_ep2)*_ep2-85)/13260;
-      _C4x[6] = (17-14*_ep2)/3570;
-      _C4x[7] = -1/real(272);
-      _C4x[8] = (_ep2*(_ep2*(_ep2*(_ep2*(_ep2*(7168*_ep2-8704)+10880)-14144)+
-                19448)-29172)+51051)/9189180;
-      _C4x[9] = (_ep2*(_ep2*(_ep2*(_ep2*(1792*_ep2-2176)+2720)-3536)+4862)-
-                7293)/1837836;
-      _C4x[10] = (_ep2*(_ep2*(_ep2*(896*_ep2-1088)+1360)-1768)+2431)/875160;
-      _C4x[11] = (_ep2*(_ep2*(112*_ep2-136)+170)-221)/109395;
-      _C4x[12] = (_ep2*(56*_ep2-68)+85)/55692;
-      _C4x[13] = (14*_ep2-17)/14280;
-      _C4x[14] = 7/real(7344);
-      _C4x[15] = (_ep2*(_ep2*(_ep2*((2176-1792*_ep2)*_ep2-2720)+3536)-4862)+
-                7293)/15315300;
-      _C4x[16] = (_ep2*(_ep2*((1088-896*_ep2)*_ep2-1360)+1768)-2431)/4375800;
-      _C4x[17] = (_ep2*((136-112*_ep2)*_ep2-170)+221)/425425;
-      _C4x[18] = ((68-56*_ep2)*_ep2-85)/185640;
-      _C4x[19] = (17-14*_ep2)/42840;
-      _C4x[20] = -7/real(20400);
-      _C4x[21] = (_ep2*(_ep2*(_ep2*(896*_ep2-1088)+1360)-1768)+2431)/42882840;
-      _C4x[22] = (_ep2*(_ep2*(112*_ep2-136)+170)-221)/2382380;
-      _C4x[23] = (_ep2*(56*_ep2-68)+85)/779688;
-      _C4x[24] = (14*_ep2-17)/149940;
-      _C4x[25] = 1/real(8976);
-      _C4x[26] = (_ep2*((136-112*_ep2)*_ep2-170)+221)/27567540;
-      _C4x[27] = ((68-56*_ep2)*_ep2-85)/5012280;
-      _C4x[28] = (17-14*_ep2)/706860;
-      _C4x[29] = -7/real(242352);
-      _C4x[30] = (_ep2*(56*_ep2-68)+85)/67387320;
-      _C4x[31] = (14*_ep2-17)/5183640;
-      _C4x[32] = 7/real(1283568);
-      _C4x[33] = (17-14*_ep2)/79639560;
-      _C4x[34] = -1/real(1516944);
-      _C4x[35] = 1/real(26254800);
+      _C4x[0] = (_n*(_n*(_n*(_n*(_n*(_n*(588*_n+952)+1700)+3536)+9724)+58344)-
+        204204)+510510)/765765;
+      _C4x[1] = (_n*(_n*(_n*(_n*(_n*(96*_n+272)+1088)+10608)-77792)+116688)-
+        51051)/255255;
+      _C4x[2] = (_n*(_n*(_n*(_n*(3232*_n+28288)-181152)+240448)-77792)-14586)/
+        765765;
+      _C4x[3] = (_n*(_n*((182512-154048*_n)*_n-3808)-81328)+26741)/765765;
+      _C4x[4] = (_n*(_n*(12480*_n-76160)+18496)+2652)/765765;
+      _C4x[5] = (_n*(20960*_n-7888)+4947)/765765;
+      _C4x[6] = (4192*_n+850)/765765;
+      _C4x[7] = 193/real(85085);
+      _C4x[8] = (_n*(_n*(_n*(_n*((-96*_n-272)*_n-1088)-10608)+77792)-116688)+
+        51051)/2297295;
+      _C4x[9] = (_n*(_n*(_n*((-1344*_n-13056)*_n+101184)-198016)+155584)-43758)/
+        2297295;
+      _C4x[10] = (_n*(_n*(_n*(103744*_n-181968)+98464)+17680)-21879)/2297295;
+      _C4x[11] = (_n*(_n*(52608*_n+65280)-50048)+7956)/2297295;
+      _C4x[12] = ((1904-39840*_n)*_n+255)/2297295;
+      _C4x[13] = (510-1472*_n)/459459;
+      _C4x[14] = 349/real(2297295);
+      _C4x[15] = (_n*(_n*(_n*(_n*(160*_n+2176)-24480)+70720)-77792)+29172)/
+        3828825;
+      _C4x[16] = (_n*(_n*((115328-41472*_n)*_n-143616)+84864)-19448)/3828825;
+      _C4x[17] = (_n*((28288-126528*_n)*_n+31552)-15912)/3828825;
+      _C4x[18] = (_n*(64256*_n-28288)+2856)/3828825;
+      _C4x[19] = (-928*_n-612)/3828825;
+      _C4x[20] = 464/real(1276275);
+      _C4x[21] = (_n*(_n*(_n*(7168*_n-30464)+60928)-56576)+19448)/5360355;
+      _C4x[22] = (_n*(_n*(35840*_n-34816)+17408)-3536)/1786785;
+      _C4x[23] = ((30464-2560*_n)*_n-11560)/5360355;
+      _C4x[24] = (1088-16384*_n)/5360355;
+      _C4x[25] = -16/real(97461);
+      _C4x[26] = (_n*((52224-32256*_n)*_n-43520)+14144)/6891885;
+      _C4x[27] = ((34816-77824*_n)*_n-6528)/6891885;
+      _C4x[28] = (26624*_n-8704)/6891885;
+      _C4x[29] = 128/real(2297295);
+      _C4x[30] = (_n*(45056*_n-34816)+10880)/8423415;
+      _C4x[31] = (24576*_n-4352)/8423415;
+      _C4x[32] = -6784/real(8423415);
+      _C4x[33] = (8704-28672*_n)/9954945;
+      _C4x[34] = -1024/real(3318315);
+      _C4x[35] = 1024/real(1640925);
       break;
     default:
-      STATIC_ASSERT(nC3_ >= 0 && nC4_ <= 8, "Bad value of nC4_");
+      STATIC_ASSERT(nC4_ >= 0 && nC4_ <= 8, "Bad value of nC4_");
     }
   }
 
diff --git a/src/GeodesicExact.cpp b/src/GeodesicExact.cpp
new file mode 100644
index 0000000..fad2bc9
--- /dev/null
+++ b/src/GeodesicExact.cpp
@@ -0,0 +1,7954 @@
+/**
+ * \file GeodesicExact.cpp
+ * \brief Implementation for GeographicLib::GeodesicExact class
+ *
+ * Copyright (c) Charles Karney (2012-2013) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ *
+ * This is a reformulation of the geodesic problem.  The notation is as
+ * follows:
+ * - at a general point (no suffix or 1 or 2 as suffix)
+ *   - phi = latitude
+ *   - beta = latitude on auxiliary sphere
+ *   - omega = longitude on auxiliary sphere
+ *   - lambda = longitude
+ *   - alpha = azimuth of great circle
+ *   - sigma = arc length along great circle
+ *   - s = distance
+ *   - tau = scaled distance (= sigma at multiples of pi/2)
+ * - at northwards equator crossing
+ *   - beta = phi = 0
+ *   - omega = lambda = 0
+ *   - alpha = alpha0
+ *   - sigma = s = 0
+ * - a 12 suffix means a difference, e.g., s12 = s2 - s1.
+ * - s and c prefixes mean sin and cos
+ **********************************************************************/
+
+#include <GeographicLib/GeodesicExact.hpp>
+#include <GeographicLib/GeodesicLineExact.hpp>
+
+#if defined(_MSC_VER)
+// Squelch warnings about potentially uninitialized local variables
+#  pragma warning (disable: 4701)
+#endif
+
+namespace GeographicLib {
+
+  using namespace std;
+
+  // Underflow guard.  We require
+  //   tiny_ * epsilon() > 0
+  //   tiny_ + epsilon() == epsilon()
+  const Math::real GeodesicExact::tiny_ = sqrt(numeric_limits<real>::min());
+  const Math::real GeodesicExact::tol0_ = numeric_limits<real>::epsilon();
+  // Increase multiplier in defn of tol1_ from 100 to 200 to fix inverse case
+  // 52.784459512564 0 -52.784459512563990912 179.634407464943777557
+  // which otherwise failed for Visual Studio 10 (Release and Debug)
+  const Math::real GeodesicExact::tol1_ = 200 * tol0_;
+  const Math::real GeodesicExact::tol2_ = sqrt(tol0_);
+  // Check on bisection interval
+  const Math::real GeodesicExact::tolb_ = tol0_ * tol2_;
+  const Math::real GeodesicExact::xthresh_ = 1000 * tol2_;
+
+  GeodesicExact::GeodesicExact(real a, real f)
+    : _a(a)
+    , _f(f <= 1 ? f : 1/f)
+    , _f1(1 - _f)
+    , _e2(_f * (2 - _f))
+    , _ep2(_e2 / Math::sq(_f1))       // e2 / (1 - e2)
+    , _n(_f / ( 2 - _f))
+    , _b(_a * _f1)
+    , _c2((Math::sq(_a) + Math::sq(_b) *
+           (_e2 == 0 ? 1 :
+            (_e2 > 0 ? Math::atanh(sqrt(_e2)) : atan(sqrt(-_e2))) /
+            sqrt(abs(_e2))))/2) // authalic radius squared
+      // The sig12 threshold for "really short".  Using the auxiliary sphere
+      // solution with dnm computed at (bet1 + bet2) / 2, the relative error in
+      // the azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2.
+      // (Error measured for 1/100 < b/a < 100 and abs(f) >= 1/1000.  For a
+      // given f and sig12, the max error occurs for lines near the pole.  If
+      // the old rule for computing dnm = (dn1 + dn2)/2 is used, then the error
+      // increases by a factor of 2.)  Setting this equal to epsilon gives
+      // sig12 = etol2.  Here 0.1 is a safety factor (error decreased by 100)
+      // and max(0.001, abs(f)) stops etol2 getting too large in the nearly
+      // spherical case.
+    , _etol2(0.1 * tol2_ /
+             sqrt( max(real(0.001), abs(_f)) * min(real(1), 1 - _f/2) / 2 ))
+  {
+    if (!(Math::isfinite(_a) && _a > 0))
+      throw GeographicErr("Major radius is not positive");
+    if (!(Math::isfinite(_b) && _b > 0))
+      throw GeographicErr("Minor radius is not positive");
+    C4coeff();
+  }
+
+  const GeodesicExact GeodesicExact::WGS84(Constants::WGS84_a<real>(),
+                                           Constants::WGS84_f<real>());
+
+  Math::real GeodesicExact::CosSeries(real sinx, real cosx,
+                                      const real c[], int n) throw() {
+    // Evaluate
+    // y = sum(c[i] * cos((2*i+1) * x), i, 0, n-1)
+    // using Clenshaw summation.
+    // Approx operation count = (n + 5) mult and (2 * n + 2) add
+    c += n ;                    // Point to one beyond last element
+    real
+      ar = 2 * (cosx - sinx) * (cosx + sinx), // 2 * cos(2 * x)
+      y0 = n & 1 ? *--c : 0, y1 = 0;          // accumulators for sum
+    // Now n is even
+    n /= 2;
+    while (n--) {
+      // Unroll loop x 2, so accumulators return to their original role
+      y1 = ar * y0 - y1 + *--c;
+      y0 = ar * y1 - y0 + *--c;
+    }
+    return cosx * (y0 - y1);    // cos(x) * (y0 - y1)
+  }
+
+  GeodesicLineExact GeodesicExact::Line(real lat1, real lon1, real azi1,
+                                        unsigned caps) const throw() {
+    return GeodesicLineExact(*this, lat1, lon1, azi1, caps);
+  }
+
+  Math::real GeodesicExact::GenDirect(real lat1, real lon1, real azi1,
+                                      bool arcmode, real s12_a12,
+                                      unsigned outmask,
+                                      real& lat2, real& lon2, real& azi2,
+                                      real& s12, real& m12,
+                                      real& M12, real& M21,
+                                      real& S12) const throw() {
+    return GeodesicLineExact(*this, lat1, lon1, azi1,
+                        // Automatically supply DISTANCE_IN if necessary
+                        outmask | (arcmode ? NONE : DISTANCE_IN))
+      .                         // Note the dot!
+      GenPosition(arcmode, s12_a12, outmask,
+                  lat2, lon2, azi2, s12, m12, M12, M21, S12);
+  }
+
+  Math::real GeodesicExact::GenInverse(real lat1, real lon1,
+                                       real lat2, real lon2,
+                                       unsigned outmask,
+                                       real& s12, real& azi1, real& azi2,
+                                       real& m12, real& M12, real& M21,
+                                       real& S12) const throw() {
+    outmask &= OUT_ALL;
+    // Compute longitude difference (AngDiff does this carefully).  Result is
+    // in [-180, 180] but -180 is only for west-going geodesics.  180 is for
+    // east-going and meridional geodesics.
+    real lon12 = Math::AngDiff(Math::AngNormalize(lon1),
+                               Math::AngNormalize(lon2));
+    // If very close to being on the same half-meridian, then make it so.
+    lon12 = AngRound(lon12);
+    // Make longitude difference positive.
+    int lonsign = lon12 >= 0 ? 1 : -1;
+    lon12 *= lonsign;
+    // If really close to the equator, treat as on equator.
+    lat1 = AngRound(lat1);
+    lat2 = AngRound(lat2);
+    // Swap points so that point with higher (abs) latitude is point 1
+    int swapp = abs(lat1) >= abs(lat2) ? 1 : -1;
+    if (swapp < 0) {
+      lonsign *= -1;
+      swap(lat1, lat2);
+    }
+    // Make lat1 <= 0
+    int latsign = lat1 < 0 ? 1 : -1;
+    lat1 *= latsign;
+    lat2 *= latsign;
+    // Now we have
+    //
+    //     0 <= lon12 <= 180
+    //     -90 <= lat1 <= 0
+    //     lat1 <= lat2 <= -lat1
+    //
+    // longsign, swapp, latsign register the transformation to bring the
+    // coordinates to this canonical form.  In all cases, 1 means no change was
+    // made.  We make these transformations so that there are few cases to
+    // check, e.g., on verifying quadrants in atan2.  In addition, this
+    // enforces some symmetries in the results returned.
+
+    real phi, sbet1, cbet1, sbet2, cbet2, s12x, m12x;
+    // Initialize for the meridian.  No longitude calculation is done in this
+    // case to let the parameter default to 0.
+    EllipticFunction E(-_ep2);
+
+    phi = lat1 * Math::degree<real>();
+    // Ensure cbet1 = +epsilon at poles
+    sbet1 = _f1 * sin(phi);
+    cbet1 = lat1 == -90 ? tiny_ : cos(phi);
+    SinCosNorm(sbet1, cbet1);
+
+    phi = lat2 * Math::degree<real>();
+    // Ensure cbet2 = +epsilon at poles
+    sbet2 = _f1 * sin(phi);
+    cbet2 = abs(lat2) == 90 ? tiny_ : cos(phi);
+    SinCosNorm(sbet2, cbet2);
+
+    // If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of the
+    // |bet1| - |bet2|.  Alternatively (cbet1 >= -sbet1), abs(sbet2) + sbet1 is
+    // a better measure.  This logic is used in assigning calp2 in Lambda12.
+    // Sometimes these quantities vanish and in that case we force bet2 = +/-
+    // bet1 exactly.  An example where is is necessary is the inverse problem
+    // 48.522876735459 0 -48.52287673545898293 179.599720456223079643
+    // which failed with Visual Studio 10 (Release and Debug)
+
+    if (cbet1 < -sbet1) {
+      if (cbet2 == cbet1)
+        sbet2 = sbet2 < 0 ? sbet1 : -sbet1;
+    } else {
+      if (abs(sbet2) == -sbet1)
+        cbet2 = cbet1;
+    }
+
+    real
+      dn1 = (_f >= 0 ? sqrt(1 + _ep2 * Math::sq(sbet1)) :
+             sqrt(1 - _e2 * Math::sq(cbet1)) / _f1),
+      dn2 = (_f >= 0 ? sqrt(1 + _ep2 * Math::sq(sbet2)) :
+             sqrt(1 - _e2 * Math::sq(cbet2)) / _f1);
+
+    real
+      lam12 = lon12 * Math::degree<real>(),
+      slam12 = abs(lon12) == 180 ? 0 : sin(lam12),
+      clam12 = cos(lam12);      // lon12 == 90 isn't interesting
+
+    real a12, sig12, calp1, salp1, calp2, salp2;
+
+    bool meridian = lat1 == -90 || slam12 == 0;
+
+    if (meridian) {
+
+      // Endpoints are on a single full meridian, so the geodesic might lie on
+      // a meridian.
+
+      calp1 = clam12; salp1 = slam12; // Head to the target longitude
+      calp2 = 1; salp2 = 0;           // At the target we're heading north
+
+      real
+        // tan(bet) = tan(sig) * cos(alp)
+        ssig1 = sbet1, csig1 = calp1 * cbet1,
+        ssig2 = sbet2, csig2 = calp2 * cbet2;
+
+      // sig12 = sig2 - sig1
+      sig12 = atan2(max(csig1 * ssig2 - ssig1 * csig2, real(0)),
+                    csig1 * csig2 + ssig1 * ssig2);
+      {
+        real dummy;
+        Lengths(E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+                cbet1, cbet2, s12x, m12x, dummy,
+                (outmask & GEODESICSCALE) != 0U, M12, M21);
+      }
+      // Add the check for sig12 since zero length geodesics might yield m12 <
+      // 0.  Test case was
+      //
+      //    echo 20.001 0 20.001 0 | GeodSolve -i
+      //
+      // In fact, we will have sig12 > pi/2 for meridional geodesic which is
+      // not a shortest path.
+      if (sig12 < 1 || m12x >= 0) {
+        m12x *= _b;
+        s12x *= _b;
+        a12 = sig12 / Math::degree<real>();
+      } else
+        // m12 < 0, i.e., prolate and too close to anti-podal
+        meridian = false;
+    }
+
+    real omg12;
+    if (!meridian &&
+        sbet1 == 0 &&   // and sbet2 == 0
+        // Mimic the way Lambda12 works with calp1 = 0
+        (_f <= 0 || lam12 <= Math::pi<real>() - _f * Math::pi<real>())) {
+
+      // Geodesic runs along equator
+      calp1 = calp2 = 0; salp1 = salp2 = 1;
+      s12x = _a * lam12;
+      sig12 = omg12 = lam12 / _f1;
+      m12x = _b * sin(sig12);
+      if (outmask & GEODESICSCALE)
+        M12 = M21 = cos(sig12);
+      a12 = lon12 / _f1;
+
+    } else if (!meridian) {
+
+      // Now point1 and point2 belong within a hemisphere bounded by a
+      // meridian and geodesic is neither meridional or equatorial.
+
+      // Figure a starting point for Newton's method
+      real dnm;
+      sig12 = InverseStart(E, sbet1, cbet1, dn1, sbet2, cbet2, dn2,
+                           lam12,
+                           salp1, calp1, salp2, calp2, dnm);
+
+      if (sig12 >= 0) {
+        // Short lines (InverseStart sets salp2, calp2, dnm)
+        s12x = sig12 * _b * dnm;
+        m12x = Math::sq(dnm) * _b * sin(sig12 / dnm);
+        if (outmask & GEODESICSCALE)
+          M12 = M21 = cos(sig12 / dnm);
+        a12 = sig12 / Math::degree<real>();
+        omg12 = lam12 / (_f1 * dnm);
+      } else {
+
+        // Newton's method.  This is a straightforward solution of f(alp1) =
+        // lambda12(alp1) - lam12 = 0 with one wrinkle.  f(alp) has exactly one
+        // root in the interval (0, pi) and its derivative is positive at the
+        // root.  Thus f(alp) is positive for alp > alp1 and negative for alp <
+        // alp1.  During the course of the iteration, a range (alp1a, alp1b) is
+        // maintained which brackets the root and with each evaluation of
+        // f(alp) the range is shrunk, if possible.  Newton's method is
+        // restarted whenever the derivative of f is negative (because the new
+        // value of alp1 is then further from the solution) or if the new
+        // estimate of alp1 lies outside (0,pi); in this case, the new starting
+        // guess is taken to be (alp1a + alp1b) / 2.
+        real ssig1, csig1, ssig2, csig2;
+        unsigned numit = 0;
+        // Bracketing range
+        real salp1a = tiny_, calp1a = 1, salp1b = tiny_, calp1b = -1;
+        for (bool tripn = false, tripb = false; numit < maxit2_; ++numit) {
+          // 1/4 meridan = 10e6 m and random input.  max err is estimated max
+          // error in nm (checking solution of inverse problem by direct
+          // solution).  iter is mean and sd of number of iterations
+          //
+          //           max   iter
+          // log2(b/a) err mean  sd
+          //    -7     387 5.33 3.68
+          //    -6     345 5.19 3.43
+          //    -5     269 5.00 3.05
+          //    -4     210 4.76 2.44
+          //    -3     115 4.55 1.87
+          //    -2      69 4.35 1.38
+          //    -1      36 4.05 1.03
+          //     0      15 0.01 0.13
+          //     1      25 5.10 1.53
+          //     2      96 5.61 2.09
+          //     3     318 6.02 2.74
+          //     4     985 6.24 3.22
+          //     5    2352 6.32 3.44
+          //     6    6008 6.30 3.45
+          //     7   19024 6.19 3.30
+          real dv;
+          real v = Lambda12(sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1,
+                            salp2, calp2, sig12, ssig1, csig1, ssig2, csig2,
+                            E, omg12, numit < maxit1_, dv) - lam12;
+         // 2 * tol0 is approximately 1 ulp for a number in [0, pi].
+          // Reversed test to allow escape with NaNs
+          if (tripb || !(abs(v) >= (tripn ? 8 : 2) * tol0_)) break;
+          // Update bracketing values
+          if (v > 0 && (numit > maxit1_ || calp1/salp1 > calp1b/salp1b))
+            { salp1b = salp1; calp1b = calp1; }
+          else if (v < 0 && (numit > maxit1_ || calp1/salp1 < calp1a/salp1a))
+            { salp1a = salp1; calp1a = calp1; }
+          if (numit < maxit1_ && dv > 0) {
+            real
+              dalp1 = -v/dv;
+            real
+              sdalp1 = sin(dalp1), cdalp1 = cos(dalp1),
+              nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
+            if (nsalp1 > 0 && abs(dalp1) < Math::pi<real>()) {
+              calp1 = calp1 * cdalp1 - salp1 * sdalp1;
+              salp1 = nsalp1;
+              SinCosNorm(salp1, calp1);
+              // In some regimes we don't get quadratic convergence because
+              // slope -> 0.  So use convergence conditions based on epsilon
+              // instead of sqrt(epsilon).
+              tripn = abs(v) <= 16 * tol0_;
+              continue;
+            }
+          }
+          // Either dv was not postive or updated value was outside legal
+          // range.  Use the midpoint of the bracket as the next estimate.
+          // This mechanism is not needed for the WGS84 ellipsoid, but it does
+          // catch problems with more eccentric ellipsoids.  Its efficacy is
+          // such for the WGS84 test set with the starting guess set to alp1 =
+          // 90deg:
+          // the WGS84 test set: mean = 5.21, sd = 3.93, max = 24
+          // WGS84 and random input: mean = 4.74, sd = 0.99
+          salp1 = (salp1a + salp1b)/2;
+          calp1 = (calp1a + calp1b)/2;
+          SinCosNorm(salp1, calp1);
+          tripn = false;
+          tripb = (abs(salp1a - salp1) + (calp1a - calp1) < tolb_ ||
+                   abs(salp1 - salp1b) + (calp1 - calp1b) < tolb_);
+        }
+        {
+          real dummy;
+          Lengths(E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+                  cbet1, cbet2, s12x, m12x, dummy,
+                  (outmask & GEODESICSCALE) != 0U, M12, M21);
+        }
+        m12x *= _b;
+        s12x *= _b;
+        a12 = sig12 / Math::degree<real>();
+      }
+    }
+
+    if (outmask & DISTANCE)
+      s12 = 0 + s12x;           // Convert -0 to 0
+
+    if (outmask & REDUCEDLENGTH)
+      m12 = 0 + m12x;           // Convert -0 to 0
+
+    if (outmask & AREA) {
+      real
+        // From Lambda12: sin(alp1) * cos(bet1) = sin(alp0)
+        salp0 = salp1 * cbet1,
+        calp0 = Math::hypot(calp1, salp1 * sbet1); // calp0 > 0
+      real alp12;
+      if (calp0 != 0 && salp0 != 0) {
+        real
+          // From Lambda12: tan(bet) = tan(sig) * cos(alp)
+          ssig1 = sbet1, csig1 = calp1 * cbet1,
+          ssig2 = sbet2, csig2 = calp2 * cbet2,
+          k2 = Math::sq(calp0) * _ep2,
+          eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2),
+          // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0).
+          A4 = Math::sq(_a) * calp0 * salp0 * _e2;
+        SinCosNorm(ssig1, csig1);
+        SinCosNorm(ssig2, csig2);
+        real C4a[nC4_];
+        C4f(eps, C4a);
+        real
+          B41 = CosSeries(ssig1, csig1, C4a, nC4_),
+          B42 = CosSeries(ssig2, csig2, C4a, nC4_);
+        S12 = A4 * (B42 - B41);
+      } else
+        // Avoid problems with indeterminate sig1, sig2 on equator
+        S12 = 0;
+
+      if (!meridian &&
+          omg12 < real(0.75) * Math::pi<real>() && // Long difference too big
+          sbet2 - sbet1 < real(1.75)) {            // Lat difference too big
+        // Use tan(Gamma/2) = tan(omg12/2)
+        // * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2))
+        // with tan(x/2) = sin(x)/(1+cos(x))
+        real
+          somg12 = sin(omg12), domg12 = 1 + cos(omg12),
+          dbet1 = 1 + cbet1, dbet2 = 1 + cbet2;
+        alp12 = 2 * atan2( somg12 * ( sbet1 * dbet2 + sbet2 * dbet1 ),
+                           domg12 * ( sbet1 * sbet2 + dbet1 * dbet2 ) );
+      } else {
+        // alp12 = alp2 - alp1, used in atan2 so no need to normalize
+        real
+          salp12 = salp2 * calp1 - calp2 * salp1,
+          calp12 = calp2 * calp1 + salp2 * salp1;
+        // The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+        // salp12 = -0 and alp12 = -180.  However this depends on the sign
+        // being attached to 0 correctly.  The following ensures the correct
+        // behavior.
+        if (salp12 == 0 && calp12 < 0) {
+          salp12 = tiny_ * calp1;
+          calp12 = -1;
+        }
+        alp12 = atan2(salp12, calp12);
+      }
+      S12 += _c2 * alp12;
+      S12 *= swapp * lonsign * latsign;
+      // Convert -0 to 0
+      S12 += 0;
+    }
+
+    // Convert calp, salp to azimuth accounting for lonsign, swapp, latsign.
+    if (swapp < 0) {
+      swap(salp1, salp2);
+      swap(calp1, calp2);
+      if (outmask & GEODESICSCALE)
+        swap(M12, M21);
+    }
+
+    salp1 *= swapp * lonsign; calp1 *= swapp * latsign;
+    salp2 *= swapp * lonsign; calp2 *= swapp * latsign;
+
+    if (outmask & AZIMUTH) {
+      // minus signs give range [-180, 180). 0- converts -0 to +0.
+      azi1 = 0 - atan2(-salp1, calp1) / Math::degree<real>();
+      azi2 = 0 - atan2(-salp2, calp2) / Math::degree<real>();
+    }
+
+    // Returned value in [0, 180]
+    return a12;
+  }
+
+  void GeodesicExact::Lengths(const EllipticFunction& E,
+                              real sig12,
+                              real ssig1, real csig1, real dn1,
+                              real ssig2, real csig2, real dn2,
+                              real cbet1, real cbet2,
+                              real& s12b, real& m12b, real& m0,
+                              bool scalep, real& M12, real& M21) const throw() {
+    // Return m12b = (reduced length)/_b; also calculate s12b = distance/_b,
+    // and m0 = coefficient of secular term in expression for reduced length.
+
+    // It's OK to have repeated dummy arguments,
+    // e.g., s12b = m0 = M12 = M21 = dummy
+    m0 = - E.k2() * E.D() / (Math::pi<real>() / 2);
+    real J12 = m0 *
+      (sig12 + E.deltaD(ssig2, csig2, dn2) - E.deltaD(ssig1, csig1, dn1));
+    // Missing a factor of _b.
+    // Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure accurate
+    // cancellation in the case of coincident points.
+    m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12;
+    // Missing a factor of _b
+    s12b = E.E() / (Math::pi<real>() / 2) *
+      (sig12 + E.deltaE(ssig2, csig2, dn2) - E.deltaE(ssig1, csig1, dn1));
+    if (scalep) {
+      real csig12 = csig1 * csig2 + ssig1 * ssig2;
+      real t = _ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2);
+      M12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1;
+      M21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2;
+    }
+  }
+
+  Math::real GeodesicExact::Astroid(real x, real y) throw() {
+    // Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.
+    // This solution is adapted from Geocentric::Reverse.
+    real k;
+    real
+      p = Math::sq(x),
+      q = Math::sq(y),
+      r = (p + q - 1) / 6;
+    if ( !(q == 0 && r <= 0) ) {
+      real
+        // Avoid possible division by zero when r = 0 by multiplying equations
+        // for s and t by r^3 and r, resp.
+        S = p * q / 4,            // S = r^3 * s
+        r2 = Math::sq(r),
+        r3 = r * r2,
+        // The discrimant of the quadratic equation for T3.  This is zero on
+        // the evolute curve p^(1/3)+q^(1/3) = 1
+        disc = S * (S + 2 * r3);
+      real u = r;
+      if (disc >= 0) {
+        real T3 = S + r3;
+        // Pick the sign on the sqrt to maximize abs(T3).  This minimizes loss
+        // of precision due to cancellation.  The result is unchanged because
+        // of the way the T is used in definition of u.
+        T3 += T3 < 0 ? -sqrt(disc) : sqrt(disc); // T3 = (r * t)^3
+        // N.B. cbrt always returns the real root.  cbrt(-8) = -2.
+        real T = Math::cbrt(T3); // T = r * t
+        // T can be zero; but then r2 / T -> 0.
+        u += T + (T != 0 ? r2 / T : 0);
+      } else {
+        // T is complex, but the way u is defined the result is real.
+        real ang = atan2(sqrt(-disc), -(S + r3));
+        // There are three possible cube roots.  We choose the root which
+        // avoids cancellation.  Note that disc < 0 implies that r < 0.
+        u += 2 * r * cos(ang / 3);
+      }
+      real
+        v = sqrt(Math::sq(u) + q),    // guaranteed positive
+        // Avoid loss of accuracy when u < 0.
+        uv = u < 0 ? q / (v - u) : u + v, // u+v, guaranteed positive
+        w = (uv - q) / (2 * v);           // positive?
+      // Rearrange expression for k to avoid loss of accuracy due to
+      // subtraction.  Division by 0 not possible because uv > 0, w >= 0.
+      k = uv / (sqrt(uv + Math::sq(w)) + w);   // guaranteed positive
+    } else {               // q == 0 && r <= 0
+      // y = 0 with |x| <= 1.  Handle this case directly.
+      // for y small, positive root is k = abs(y)/sqrt(1-x^2)
+      k = 0;
+    }
+    return k;
+  }
+
+  Math::real GeodesicExact::InverseStart(EllipticFunction& E,
+                                         real sbet1, real cbet1, real dn1,
+                                         real sbet2, real cbet2, real dn2,
+                                         real lam12,
+                                         real& salp1, real& calp1,
+                                         // Only updated if return val >= 0
+                                         real& salp2, real& calp2,
+                                         // Only updated for short lines
+                                         real& dnm)
+    const throw() {
+    // Return a starting point for Newton's method in salp1 and calp1 (function
+    // value is -1).  If Newton's method doesn't need to be used, return also
+    // salp2 and calp2 and function value is sig12.
+    real
+      sig12 = -1,               // Return value
+      // bet12 = bet2 - bet1 in [0, pi); bet12a = bet2 + bet1 in (-pi, 0]
+      sbet12 = sbet2 * cbet1 - cbet2 * sbet1,
+      cbet12 = cbet2 * cbet1 + sbet2 * sbet1;
+#if defined(__GNUC__) && __GNUC__ == 4 && \
+  (__GNUC_MINOR__ < 6 || defined(__MINGW32__))
+    // Volatile declaration needed to fix inverse cases
+    // 88.202499451857 0 -88.202499451857 179.981022032992859592
+    // 89.262080389218 0 -89.262080389218 179.992207982775375662
+    // 89.333123580033 0 -89.333123580032997687 179.99295812360148422
+    // which otherwise fail with g++ 4.4.4 x86 -O3 (Linux)
+    // and g++ 4.4.0 (mingw) and g++ 4.6.1 (tdm mingw).
+    real sbet12a;
+    {
+      volatile real xx1 = sbet2 * cbet1;
+      volatile real xx2 = cbet2 * sbet1;
+      sbet12a = xx1 + xx2;
+    }
+#else
+    real sbet12a = sbet2 * cbet1 + cbet2 * sbet1;
+#endif
+    bool shortline = cbet12 >= 0 && sbet12 < real(0.5) &&
+      cbet2 * lam12 < real(0.5);
+    real omg12 = lam12;
+    if (shortline) {
+      real sbetm2 = Math::sq(sbet1 + sbet2);
+      // sin((bet1+bet2)/2)^2
+      // =  (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2)
+      sbetm2 /= sbetm2 + Math::sq(cbet1 + cbet2);
+      dnm = sqrt(1 + _ep2 * sbetm2);
+      omg12 /= _f1 * dnm;
+    }
+    real somg12 = sin(omg12), comg12 = cos(omg12);
+
+    salp1 = cbet2 * somg12;
+    calp1 = comg12 >= 0 ?
+      sbet12 + cbet2 * sbet1 * Math::sq(somg12) / (1 + comg12) :
+      sbet12a - cbet2 * sbet1 * Math::sq(somg12) / (1 - comg12);
+
+    real
+      ssig12 = Math::hypot(salp1, calp1),
+      csig12 = sbet1 * sbet2 + cbet1 * cbet2 * comg12;
+
+    if (shortline && ssig12 < _etol2) {
+      // really short lines
+      salp2 = cbet1 * somg12;
+      calp2 = sbet12 - cbet1 * sbet2 *
+        (comg12 >= 0 ? Math::sq(somg12) / (1 + comg12) : 1 - comg12);
+      SinCosNorm(salp2, calp2);
+      // Set return value
+      sig12 = atan2(ssig12, csig12);
+    } else if (abs(_n) > real(0.1) || // Skip astroid calc if too eccentric
+               csig12 >= 0 ||
+               ssig12 >= 6 * abs(_n) * Math::pi<real>() * Math::sq(cbet1)) {
+      // Nothing to do, zeroth order spherical approximation is OK
+    } else {
+      // Scale lam12 and bet2 to x, y coordinate system where antipodal point
+      // is at origin and singular point is at y = 0, x = -1.
+      real y, lamscale, betscale;
+      // Volatile declaration needed to fix inverse case
+      // 56.320923501171 0 -56.320923501171 179.664747671772880215
+      // which otherwise fails with g++ 4.4.4 x86 -O3
+      volatile real x;
+      if (_f >= 0) {            // In fact f == 0 does not get here
+        // x = dlong, y = dlat
+        {
+          real k2 = Math::sq(sbet1) * _ep2;
+          E.Reset(-k2, -_ep2, 1 + k2, 1 + _ep2);
+          lamscale = _e2/_f1 * cbet1 * 2 * E.H();
+        }
+        betscale = lamscale * cbet1;
+
+        x = (lam12 - Math::pi<real>()) / lamscale;
+        y = sbet12a / betscale;
+      } else {                  // _f < 0
+        // x = dlat, y = dlong
+        real
+          cbet12a = cbet2 * cbet1 - sbet2 * sbet1,
+          bet12a = atan2(sbet12a, cbet12a);
+        real m12b, m0, dummy;
+        // In the case of lon12 = 180, this repeats a calculation made in
+        // Inverse.
+        Lengths(E, Math::pi<real>() + bet12a,
+                sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
+                cbet1, cbet2, dummy, m12b, m0, false,
+                dummy, dummy);
+        x = -1 + m12b / (cbet1 * cbet2 * m0 * Math::pi<real>());
+        betscale = x < -real(0.01) ? sbet12a / x :
+          -_f * Math::sq(cbet1) * Math::pi<real>();
+        lamscale = betscale / cbet1;
+        y = (lam12 - Math::pi<real>()) / lamscale;
+      }
+
+      if (y > -tol1_ && x > -1 - xthresh_) {
+        // strip near cut
+        // Need real(x) here to cast away the volatility of x for min/max
+        if (_f >= 0) {
+          salp1 = min(real(1), -real(x)); calp1 = - sqrt(1 - Math::sq(salp1));
+        } else {
+          calp1 = max(real(x > -tol1_ ? 0 : -1), real(x));
+          salp1 = sqrt(1 - Math::sq(calp1));
+        }
+      } else {
+        // Estimate alp1, by solving the astroid problem.
+        //
+        // Could estimate alpha1 = theta + pi/2, directly, i.e.,
+        //   calp1 = y/k; salp1 = -x/(1+k);  for _f >= 0
+        //   calp1 = x/(1+k); salp1 = -y/k;  for _f < 0 (need to check)
+        //
+        // However, it's better to estimate omg12 from astroid and use
+        // spherical formula to compute alp1.  This reduces the mean number of
+        // Newton iterations for astroid cases from 2.24 (min 0, max 6) to 2.12
+        // (min 0 max 5).  The changes in the number of iterations are as
+        // follows:
+        //
+        // change percent
+        //    1       5
+        //    0      78
+        //   -1      16
+        //   -2       0.6
+        //   -3       0.04
+        //   -4       0.002
+        //
+        // The histogram of iterations is (m = number of iterations estimating
+        // alp1 directly, n = number of iterations estimating via omg12, total
+        // number of trials = 148605):
+        //
+        //  iter    m      n
+        //    0   148    186
+        //    1 13046  13845
+        //    2 93315 102225
+        //    3 36189  32341
+        //    4  5396      7
+        //    5   455      1
+        //    6    56      0
+        //
+        // Because omg12 is near pi, estimate work with omg12a = pi - omg12
+        real k = Astroid(x, y);
+        real
+          omg12a = lamscale * ( _f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k );
+        somg12 = sin(omg12a); comg12 = -cos(omg12a);
+        // Update spherical estimate of alp1 using omg12 instead of lam12
+        salp1 = cbet2 * somg12;
+        calp1 = sbet12a - cbet2 * sbet1 * Math::sq(somg12) / (1 - comg12);
+      }
+    }
+    if (salp1 > 0)              // Sanity check on starting guess
+      SinCosNorm(salp1, calp1);
+    else {
+      salp1 = 1; calp1 = 0;
+    }
+    return sig12;
+  }
+
+  Math::real GeodesicExact::Lambda12(real sbet1, real cbet1, real dn1,
+                                     real sbet2, real cbet2, real dn2,
+                                     real salp1, real calp1,
+                                     real& salp2, real& calp2,
+                                     real& sig12,
+                                     real& ssig1, real& csig1,
+                                     real& ssig2, real& csig2,
+                                     EllipticFunction& E,
+                                     real& omg12,
+                                     bool diffp, real& dlam12) const
+    throw() {
+
+    if (sbet1 == 0 && calp1 == 0)
+      // Break degeneracy of equatorial line.  This case has already been
+      // handled.
+      calp1 = -tiny_;
+
+    real
+      // sin(alp1) * cos(bet1) = sin(alp0)
+      salp0 = salp1 * cbet1,
+      calp0 = Math::hypot(calp1, salp1 * sbet1); // calp0 > 0
+
+    real somg1, comg1, somg2, comg2, cchi1, cchi2, lam12;
+    // tan(bet1) = tan(sig1) * cos(alp1)
+    // tan(omg1) = sin(alp0) * tan(sig1) = tan(omg1)=tan(alp1)*sin(bet1)
+    ssig1 = sbet1; somg1 = salp0 * sbet1;
+    csig1 = comg1 = calp1 * cbet1;
+    // Without normalization we have schi1 = somg1.
+    cchi1 = _f1 * dn1 * comg1;
+    SinCosNorm(ssig1, csig1);
+    // SinCosNorm(somg1, comg1); -- don't need to normalize!
+    // SinCosNorm(schi1, cchi1); -- don't need to normalize!
+
+    // Enforce symmetries in the case abs(bet2) = -bet1.  Need to be careful
+    // about this case, since this can yield singularities in the Newton
+    // iteration.
+    // sin(alp2) * cos(bet2) = sin(alp0)
+    salp2 = cbet2 != cbet1 ? salp0 / cbet2 : salp1;
+    // calp2 = sqrt(1 - sq(salp2))
+    //       = sqrt(sq(calp0) - sq(sbet2)) / cbet2
+    // and subst for calp0 and rearrange to give (choose positive sqrt
+    // to give alp2 in [0, pi/2]).
+    calp2 = cbet2 != cbet1 || abs(sbet2) != -sbet1 ?
+      sqrt(Math::sq(calp1 * cbet1) +
+           (cbet1 < -sbet1 ?
+            (cbet2 - cbet1) * (cbet1 + cbet2) :
+            (sbet1 - sbet2) * (sbet1 + sbet2))) / cbet2 :
+      abs(calp1);
+    // tan(bet2) = tan(sig2) * cos(alp2)
+    // tan(omg2) = sin(alp0) * tan(sig2).
+    ssig2 = sbet2; somg2 = salp0 * sbet2;
+    csig2 = comg2 = calp2 * cbet2;
+    // Without normalization we have schi2 = somg2.
+    cchi2 = _f1 * dn2 * comg2;
+    SinCosNorm(ssig2, csig2);
+    // SinCosNorm(somg2, comg2); -- don't need to normalize!
+    // SinCosNorm(schi2, cchi2); -- don't need to normalize!
+
+    // sig12 = sig2 - sig1, limit to [0, pi]
+    sig12 = atan2(max(csig1 * ssig2 - ssig1 * csig2, real(0)),
+                  csig1 * csig2 + ssig1 * ssig2);
+
+    // omg12 = omg2 - omg1, limit to [0, pi]
+    omg12 = atan2(max(comg1 * somg2 - somg1 * comg2, real(0)),
+                  comg1 * comg2 + somg1 * somg2);
+    real k2 = Math::sq(calp0) * _ep2;
+    E.Reset(-k2, -_ep2, 1 + k2, 1 + _ep2);
+    real chi12 = atan2(max(cchi1 * somg2 - somg1 * cchi2, real(0)),
+                       cchi1 * cchi2 + somg1 * somg2);
+    lam12 = chi12 -
+      _e2/_f1 * salp0 * E.H() / (Math::pi<real>() / 2) *
+      (sig12 + E.deltaH(ssig2, csig2, dn2) - E.deltaH(ssig1, csig1, dn1) );
+
+    if (diffp) {
+      if (calp2 == 0)
+        dlam12 = - 2 * _f1 * dn1 / sbet1;
+      else {
+        real dummy;
+        Lengths(E, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+                cbet1, cbet2, dummy, dlam12, dummy,
+                false, dummy, dummy);
+        dlam12 *= _f1 / (calp2 * cbet2);
+      }
+    }
+
+    return lam12;
+  }
+
+  void GeodesicExact::C4f(real eps, real c[]) const throw() {
+    // Evaluate C4 coeffs by Horner's method
+    // Elements c[0] thru c[nC4_ - 1] are set
+    for (int j = nC4x_, k = nC4_; k; ) {
+      real t = 0;
+      for (int i = nC4_ - k + 1; i; --i)
+        t = eps * t + _C4x[--j];
+      c[--k] = t;
+    }
+
+    real mult = 1;
+    for (int k = 1; k < nC4_; ) {
+      mult *= eps;
+      c[k++] *= mult;
+    }
+  }
+
+  // Generated by Maxima on 2012-10-19 10:22:27-04:00
+
+  // The coefficients C4[l] in the Fourier expansion of I4
+  void GeodesicExact::C4coeff() throw()
+  {
+    // Include only orders 24, 27, and 30 (using orders 24 and 27 to check for
+    // convergence of the order 30 results).
+    switch (nC4_) {
+    case 24:
+      _C4x[0] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(real(1999358874607380.L)*_n+
+        real(2285587345521480.L))+real(2629224603764220.L))+
+        real(3045433903974000.L))+real(3554456427923940.L))+
+        real(4183714264446360.L))+real(4970972324960460.L))+
+        real(5969200033218240.L))+real(7254236151480500.L))+
+        real(8937218938623976.L))+real(11185401342439324.L))+
+        real(14258313799153424.L))+real(18573329817318276.L))+
+        real(24830654835987000.L))+real(34266303673662060.L))+
+        real(49202897582694240.L))+real(74363470210208340.L))+
+        real(120397999387956360.L))+real(214996427478493500.L))+
+        real(447192569155266480.L))+real(1229779565176982820.L))+
+        real(7378677391061896920.L))-real(25825370868716639220.L))+
+        real(64563427171791598050.L))/real(96845140757687397075.L);
+      _C4x[1] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(14352196832160.L)*_n+real(18143010491760.L))+
+        real(23203305935040.L))+real(30058828143120.L))+real(39500055997920.L))+
+        real(52742411935920.L))+real(71702102501120.L))+real(99486667220304.L))+
+        real(141299904167968.L))+real(206182513224688.L))+
+        real(310525890362688.L))+real(485577250125968.L))+
+        real(794580954751584.L))+real(1375236267839280.L))+
+        real(2555994679620480.L))+real(5218489137558480.L))+
+        real(12140974728197280.L))+real(34399428396558960.L))+
+        real(137597713586235840.L))+real(1341577707465799440.L))-
+        real(9838236521415862560.L))+real(14757354782123793840.L))-
+        real(6456342717179159805.L))/real(32281713585895799025.L);
+      _C4x[2] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(112031767409760.L)*_n+real(143707902522240.L))+
+        real(186817232975520.L))+real(246503156195520.L))+
+        real(330747808183520.L))+real(452274800391680.L))+
+        real(631991683893024.L))+real(905472855280448.L))+
+        real(1335746999551328.L))+real(2039925298739328.L))+
+        real(3248344362911648.L))+real(5446614749664704.L))+
+        real(9751675353769440.L))+real(19040308193114880.L))+
+        real(41960912657102880.L))+real(111185768563490880.L))+
+        real(408746149182641760.L))+real(3577540553242131840.L))-
+        real(22910019312108267360.L))+real(30409094702558120640.L))-
+        real(9838236521415862560.L))-real(1844669347765474230.L))/
+        real(96845140757687397075.L);
+      _C4x[3] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(32480160924480.L)*_n+real(42473724825840.L))+
+        real(56434964292640.L))+real(76351584942160.L))+
+        real(105450461374720.L))+real(149151421424048.L))+
+        real(216924643757536.L))+real(326106771851536.L))+
+        real(510258085727936.L))+real(838941256641136.L))+
+        real(1469287881877408.L))+real(2798320262169040.L))+
+        real(5995739072484480.L))+real(15388225732922160.L))+
+        real(54558315006660960.L))+real(458055546543653520.L))-
+        real(2783173921025795520.L))+real(3297430922013008880.L))-
+        real(68798856793117920.L))-real(1469347012938732720.L))+
+        real(483127686319528965.L))/real(13835020108241056725.L);
+      _C4x[4] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(61593373053120.L)*_n+real(82664196067968.L))+
+        real(113184908345408.L))+real(158600828072960.L))+
+        real(228343862806464.L))+real(339524138046848.L))+
+        real(524951894472512.L))+real(851973503469312.L))+
+        real(1471189694291648.L))+real(2759208118818944.L))+
+        real(5813897943174720.L))+real(14652252730710528.L))+
+        real(50920388417623488.L))+real(417865440759569280.L))-
+        real(2463552872040872640.L))+real(2735888019452816640.L))+
+        real(225475244952235200.L))-real(1375977135862358400.L))+
+        real(334165875852287040.L))+real(47913489552349980.L))/
+        real(13835020108241056725.L);
+      _C4x[5] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(116901815052000.L)*_n+real(162665178856240.L))+
+        real(232452294471424.L))+real(342889966787280.L))+
+        real(525669616244512.L))+real(845442310622320.L))+
+        real(1445880195597120.L))+real(2683983711876112.L))+
+        real(5593692396246880.L))+real(13932464215913904.L))+
+        real(47800768353056640.L))+real(386485049557054800.L))-
+        real(2233470221772257376.L))+real(2379929378403817200.L))+
+        real(326011035683974080.L))-real(1258599165902406000.L))+
+        real(378682783189010400.L))-real(142511917642887120.L))+
+        real(89377086280345155.L))/real(13835020108241056725.L);
+      _C4x[6] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1629228407930528.L)*_n+real(2388939356529152.L))+
+        real(3639389570725216.L))+real(5814633717932480.L))+
+        real(9875158781915168.L))+real(18197230911760768.L))+
+        real(37631963274426080.L))+real(92958596676550976.L))+
+        real(316045988259680672.L))+real(2528358390442176768.L))-
+        real(14403436411319236512.L))+real(14914788310942924992.L))+
+        real(2554348100439188256.L))-real(8119802402735802240.L))+
+        real(2646945490303642080.L))-real(1252011393900765120.L))+
+        real(530155896464614560.L))+real(107498213739246750.L))/
+        real(96845140757687397075.L);
+      _C4x[7] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(3578093269775104.L)*_n+real(5687997784397712.L))+
+        real(9609462802875040.L))+real(17610495752958640.L))+
+        real(36208089438373440.L))+real(88888351651007440.L))+
+        real(300146061507531232.L))+real(2381912272287266544.L))-
+        real(13423345505071318656.L))+real(13611289619044517904.L))+
+        real(2653631568740192544.L))-real(7554826635271531728.L))+
+        real(2567126221667232960.L))-real(1319935100341621680.L))+
+        real(712057517830938720.L))-real(318327837391067280.L))+
+        real(219675761488319535.L))/real(96845140757687397075.L);
+      _C4x[8] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(9344882134297728.L)*_n+real(17052302334045440.L))+
+        real(34902155158209920.L))+real(85267266561630720.L))+
+        real(286371850542771840.L))+real(2258215493643556608.L))-
+        real(12619091028769110144.L))+real(12592255538342194176.L))+
+        real(2674310239814054016.L))-real(7087386899159449344.L))+
+        real(2469789916329642368.L))-real(1324326286853409280.L))+
+        real(781134200132711040.L))-real(449188282392433920.L))+
+        real(207035569049258880.L))+real(46274153678962440.L))/
+        real(96845140757687397075.L);
+      _C4x[9] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(33710695719142240.L)*_n+real(82033363026426448.L))+
+        real(274307634242074048.L))+real(2151953414651649840.L))-
+        real(11943746423313440736.L))+real(11768554506156380688.L))+
+        real(2656740683050806912.L))-real(6694324846705525008.L))+
+        real(2372534111370988768.L))-real(1304152339674541616.L))+
+        real(804586292246013760.L))-real(508295041968638288.L))+
+        real(303435464042162592.L))-real(142566159766005360.L))+
+        real(101847069252273345.L))/real(96845140757687397075.L);
+      _C4x[10] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(37662210790798880.L)*_n+real(294198823886647680.L))-
+        real(1623746230123937568.L))+real(1583642912939883840.L))+
+        real(374294071218757536.L))-real(908376065974705920.L))+
+        real(325845462025050720.L))-real(182042393354443584.L))+
+        real(115324345382009120.L))-real(76410130129858432.L))+
+        real(50299418752812000.L))-real(30764544658330560.L))+
+        real(14642991880422048.L))+real(3412871389794750.L))/
+        real(13835020108241056725.L);
+      _C4x[11] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1501075919503116528.L)-real(1552143373356932928.L)*_n)*_n+
+        real(367714452841178784.L))-real(866854101764130480.L))+
+        real(313774899291644032.L))-real(177299477003547728.L))+
+        real(114271319608011360.L))-real(77874555660641264.L))+
+        real(53885331728867392.L))-real(36449668807965072.L))+
+        real(22671434367950368.L))-real(10890804038539568.L))+
+        real(7910659659501261.L))/real(13835020108241056725.L);
+      _C4x[12] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(360538238351793216.L)*_n-real(830474209202681472.L))+
+        real(302723808493726400.L))-real(172487985807946240.L))+
+        real(112510525811343680.L))-real(78092355283414400.L))+
+        real(55660125309751232.L))-real(39649081749780736.L))+
+        real(27338126785513024.L))-real(17212736021193856.L))+
+        real(8325051251152064.L))+real(1983486709822292.L))/
+        real(13835020108241056725.L);
+      _C4x[13] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(2048343300695481504.L)*_n-real(1174575214532756400.L))+
+        real(772892184384100480.L))-real(543333033447540560.L))+
+        real(394812426258146400.L))-real(290054001262275824.L))+
+        real(210932617298009152.L))-real(147501043346970768.L))+
+        real(93725243308252192.L))-real(45566335422656048.L))+
+        real(33407285962107981.L))/real(96845140757687397075.L);
+      _C4x[14] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(757239210080028960.L)*_n-
+        real(537300905287869184.L))+real(395714242456307936.L))-
+        real(296644998767853120.L))+real(222719570867903648.L))-
+        real(164471843537244544.L))+real(116250524440194144.L))-
+        real(74392957708678336.L))+real(36314075371167776.L))+
+        real(8765349343650438.L))/real(96845140757687397075.L);
+      _C4x[15] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(394009676853677440.L)*_n-
+        real(299555477286704240.L))+real(229664829361176608.L))-
+        real(175256533651561040.L))+real(130955550851978944.L))-
+        real(93338256894526000.L))+real(60065708572935520.L))-
+        real(29414891274803216.L))+real(21690166092926695.L))/
+        real(96845140757687397075.L);
+      _C4x[16] = (_n*(_n*(_n*(_n*(_n*(_n*(real(233488686343708928.L)*_n-
+        real(182065233526783488.L))+real(140688277401572096.L))-
+        real(106104539418465280.L))+real(76131914426443008.L))-
+        real(49214116938230272.L))+real(24163608542877440.L))+
+        real(5881417679788560.L))/real(96845140757687397075.L);
+      _C4x[17] = (_n*(_n*(_n*(_n*(_n*(real(21019513180253472.L)*_n-
+        real(16404720495540944.L))+real(12464612278064320.L))-
+        real(8992138901419440.L))+real(5834254120326240.L))-
+        real(2870694135369360.L))+real(2124887947607295.L))/
+        real(13835020108241056725.L);
+      _C4x[18] = (_n*(_n*(_n*(_n*(real(13580299535160224.L)*_n-
+        real(10381521524479360.L))+real(7522850187332960.L))-
+        real(4895874088539840.L))+real(2413265325968160.L))+
+        real(590734532916630.L))/real(13835020108241056725.L);
+      _C4x[19] = (_n*(_n*(_n*(real(4472222311616.L)*_n-real(3252828257712.L))+
+        real(2122366467168.L))-real(1047720937104.L))+real(777582423783.L))/
+        real(7076736628256295.L);
+      _C4x[20] = (_n*(_n*(real(223285780800.L)*_n-real(146003016320.L))+
+        real(72167144896.L))+real(17737080900.L))/real(569392602273495.L);
+      _C4x[21] = (_n*(real(19420000.L)*_n-real(9609488.L))+real(7145551.L))/
+        real(87882790905.L);
+      _C4x[22] = (real(5189536.L)*_n+real(1279278.L))/real(54629842995.L);
+      _C4x[23] = real(2113.L)/real(34165005.L);
+      _C4x[24] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*((-real(14352196832160.L)*_n-
+        real(18143010491760.L))*_n-real(23203305935040.L))-
+        real(30058828143120.L))-real(39500055997920.L))-real(52742411935920.L))-
+        real(71702102501120.L))-real(99486667220304.L))-
+        real(141299904167968.L))-real(206182513224688.L))-
+        real(310525890362688.L))-real(485577250125968.L))-
+        real(794580954751584.L))-real(1375236267839280.L))-
+        real(2555994679620480.L))-real(5218489137558480.L))-
+        real(12140974728197280.L))-real(34399428396558960.L))-
+        real(137597713586235840.L))-real(1341577707465799440.L))+
+        real(9838236521415862560.L))-real(14757354782123793840.L))+
+        real(6456342717179159805.L))/real(290535422273062191225.L);
+      _C4x[25] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*((-real(37872873213120.L)*_n-real(48650645326080.L))*_n-
+        real(63349788344640.L))-real(83751522099840.L))-
+        real(112631492155840.L))-real(154435297694720.L))-
+        real(216509174726208.L))-real(311436523472256.L))-
+        real(461690986550976.L))-real(709436759006976.L))-
+        real(1138594931329856.L))-real(1928726420080768.L))-
+        real(3500601409045440.L))-real(6964159416936960.L))-
+        real(15761967190992960.L))-real(43451909553548160.L))-
+        real(169973646194761920.L))-real(1651172563034830080.L))+
+        real(12796587363519933120.L))-real(25042783872694922880.L))+
+        real(19676473042831725120.L))-real(5534008043296422690.L))/
+        real(290535422273062191225.L);
+      _C4x[26] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(11276216410560.L)*_n-real(14808964439760.L))*_n-
+        real(19775083935840.L))-real(26911076211952.L))-real(37426002516736.L))-
+        real(53377042346256.L))-real(78413480238496.L))-
+        real(119335663136560.L))-real(189587691508800.L))-
+        real(317745076104016.L))-real(570337600574176.L))-
+        real(1121753565657456.L))-real(2509425832455552.L))-
+        real(6835169002204560.L))-real(26381516514654240.L))-
+        real(251476405115755440.L))+real(1874335241372170560.L))-
+        real(3287602513899706320.L))+real(1778941868507763360.L))+
+        real(319423263682333200.L))-real(395286288806887335.L))/
+        real(41505060324723170175.L);
+      _C4x[27] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(22293547029120.L)*_n-real(30187829221632.L))*_n-
+        real(41765992461184.L))-real(59246321780736.L))-real(86549704883328.L))-
+        real(130956016858880.L))-real(206803820912000.L))-
+        real(344451241367040.L))-real(614280013891200.L))-
+        real(1199884405036288.L))-real(2663730758641536.L))-
+        real(7188536589640704.L))-real(27392007578988672.L))-
+        real(255694722422158080.L))+real(1829483620446449280.L))-
+        real(2903123099919413760.L))+real(950464878721729920.L))+
+        real(1179408973596307200.L))-real(904213546423835520.L))+
+        real(143740468657049940.L))/real(41505060324723170175.L);
+      _C4x[28] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(314227949431392.L)*_n-real(444118245821936.L))*_n-
+        real(646350803626752.L))-real(974173792477200.L))-
+        real(1532163562752928.L))-real(2541011617045552.L))-
+        real(4510409446842432.L))-real(8763719809996368.L))-
+        real(19331398316031200.L))-real(51734190824153712.L))-
+        real(194771904021722496.L))-real(1783527709272757392.L))+
+        real(12327423427055247840.L))-real(18094891139289678000.L))+
+        real(3507250699552568640.L))+real(9095826566764430640.L))-
+        real(5038504512201871200.L))+real(240795998775912720.L))+
+        real(32249464121774025.L))/real(290535422273062191225.L);
+      _C4x[29] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(676805490635072.L)*_n-real(1017107280444416.L))*_n-
+        real(1594713745528512.L))-real(2635732053411968.L))-
+        real(4660438333855808.L))-real(9013600870649088.L))-
+        real(19767938645110208.L))-real(52495817642344832.L))-
+        real(195480281809194816.L))-real(1760179895295155712.L))+
+        real(11824626509324258112.L))-real(16334739668315101824.L))+
+        real(1710845777953679808.L))+real(8831369095501451520.L))-
+        real(4080645506014096320.L))+real(706306529801792640.L))-
+        real(930808062495124800.L))+real(322494641217740250.L))/
+        real(290535422273062191225.L);
+      _C4x[30] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(234626124936960.L)*_n-real(386642889659472.L))*_n-
+        real(681291516288544.L))-real(1312131284359408.L))-
+        real(2862343556835648.L))-real(7547594230014864.L))-
+        real(27829430493060192.L))-real(246968747677612080.L))+
+        real(1620521417412248704.L))-real(2133351424824285904.L))+
+        real(88481749384377696.L))+real(1191321558116675728.L))-
+        real(497828914064756160.L))+real(139660898732647920.L))-
+        real(153511823317682400.L))+real(26761872865788240.L))+
+        real(6305357410923885.L))/real(41505060324723170175.L);
+      _C4x[31] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(4847557372167936.L)*_n-real(9299738212233728.L))*_n-
+        real(20186836594754816.L))-real(52886353091367936.L))-
+        real(193292214083564288.L))-real(1693873158585284096.L))+
+        real(10898220796744732416.L))-real(13798321323280807936.L))-
+        real(78275445405081344.L))+real(7837137740291016192.L))-
+        real(3094585124345421056.L))+real(1114048185423143936.L))-
+        real(1060048784781036288.L))+real(320499506783715840.L))-
+        real(294791386382895360.L))+real(138822461036887320.L))/
+        real(290535422273062191225.L);
+      _C4x[32] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(20252388370301728.L)*_n-real(52745822321880688.L))*_n-
+        real(191268063112166208.L))-real(1657850837456732688.L))+
+        real(10490563891587064992.L))-real(12861854000462901168.L))-
+        real(542049980036777856.L))+real(7379432078766515376.L))-
+        real(2820825068533490592.L))+real(1175289058330498832.L))-
+        real(1013781619318412224.L))+real(405766933644837744.L))-
+        real(400129854074239968.L))+real(106421061090067920.L))+
+        real(26045852034778485.L))/real(290535422273062191225.L);
+      _C4x[33] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(26991371956800576.L)*_n-real(231714588162759936.L))*_n+
+        real(1445534059265992256.L))-real(1725175886601230720.L))-
+        real(122816338489832256.L))+real(996460010778919424.L))-
+        real(373834302508781760.L))+real(170833322112089472.L))-
+        real(137893474113071680.L))+real(65398981000896768.L))-
+        real(62562454225008576.L))+real(24803908618368128.L))-
+        real(18609017165394240.L))+real(10238614169384250.L))/
+        real(41505060324723170175.L);
+      _C4x[34] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1397065280037743040.L)*_n-real(1629617303203516880.L))-
+        real(154602841897228768.L))+real(945831163359565584.L))-
+        real(351046497363368320.L))+real(170621111324559856.L))-
+        real(131595528641218848.L))+real(69747367167890128.L))-
+        real(64126777100688576.L))+real(31033916201205168.L))-
+        real(27584611975678048.L))+real(9027432761923216.L))+
+        real(2232336230654433.L))/real(41505060324723170175.L);
+      _C4x[35] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(6309561957305042688.L)-real(1240589737259444352.L)*_n)*_n-
+        real(2327800175547030912.L))+real(1180980622816562176.L))-
+        real(882415277427055232.L))+real(504866510659064064.L))-
+        real(448407655736528768.L))+real(245693318054356480.L))-
+        real(224849316251462784.L))+real(103838551260338944.L))-
+        real(69226282290225536.L))+real(41653220906268132.L))/
+        real(290535422273062191225.L);
+      _C4x[36] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(1161351729795236112.L)-
+        real(2219511793934405088.L)*_n)*_n-real(848452198446344576.L))+
+        real(512670721913356272.L))-real(442910285238138144.L))+
+        real(264138399004226768.L))-real(241047580754142400.L))+
+        real(131028203398605744.L))-real(108394165078944864.L))+
+        real(39960256179269776.L))+real(9923358345356673.L))/
+        real(290535422273062191225.L);
+      _C4x[37] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(73543186501015040.L)-
+        real(116928193770523584.L)*_n)*_n-real(62178132929994816.L))+
+        real(39406949879342208.L))-real(35564764459944128.L))+
+        real(21367914697321216.L))-real(18783130966863168.L))+
+        real(9532087098753408.L))-real(5903541051061696.L))+
+        real(3756578290135902.L))/real(41505060324723170175.L);
+      _C4x[38] = (_n*(_n*(_n*(_n*(_n*(_n*((real(282962846327606480.L)-
+        real(426748832985298048.L)*_n)*_n-real(252224625488402784.L))+
+        real(162322457781691760.L))-real(145413778689772096.L))+
+        real(85282246727300112.L))-real(67164218836484896.L))+
+        real(26689586825247920.L))+real(6642057399330675.L))/
+        real(290535422273062191225.L);
+      _C4x[39] = (_n*(_n*(_n*(_n*(_n*((real(171060891416497152.L)-
+        real(252813007696723456.L)*_n)*_n-real(153870471779809792.L))+
+        real(98423709472671744.L))-real(83861959821448704.L))+
+        real(45293147485078528.L))-real(26715359837770240.L))+
+        real(17644253039365680.L))/real(290535422273062191225.L);
+      _C4x[40] = (_n*(_n*(_n*(_n*((real(15405921597572848.L)-
+        real(22703107707125856.L)*_n)*_n-real(13556613226824768.L))+
+        real(8376749793922704.L))-real(6372917643153440.L))+
+        real(2663272940347440.L))+real(663613230544875.L))/
+        real(41505060324723170175.L);
+      _C4x[41] = (_n*(_n*(_n*((real(9770829888267520.L)-
+        real(14611840804674368.L)*_n)*_n-real(8131320889364160.L))+
+        real(4585714449598080.L))-real(2614574103174720.L))+
+        real(1772203598749890.L))/real(41505060324723170175.L);
+      _C4x[42] = (_n*(_n*((real(365612970361968.L)-real(570013933313984.L)*_n)*
+        _n-real(271274216878560.L))+real(117458505580752.L))+
+        real(29290376930661.L))/real(2526394976287497315.L);
+      _C4x[43] = (_n*((real(138477414656.L)-real(237999188352.L)*_n)*_n-
+        real(77042430080.L))+real(53211242700.L))/real(1708177806820485.L);
+      _C4x[44] = ((real(571443856.L)-real(1286021216.L)*_n)*_n+
+        real(142575393.L))/real(16459191268065.L);
+      _C4x[45] = (real(3837834.L)-real(5479232.L)*_n)/real(163889528985.L);
+      _C4x[46] = real(3401.L)/real(512475075.L);
+      _C4x[47] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(317370445920.L)*_n+real(448806691200.L))+
+        real(646426411680.L))+real(950282020800.L))+real(1429333656800.L))+
+        real(2206218538496.L))+real(3507168057120.L))+real(5767343027264.L))+
+        real(9865192020320.L))+real(17676995656320.L))+real(33488086215584.L))+
+        real(67912902115520.L))+real(150025774673376.L))+
+        real(370434011539200.L))+real(1064997783175200.L))+
+        real(3833992019430720.L))+real(20234957880328800.L))+
+        real(275195427172471680.L))-real(3095948555690306400.L))+
+        real(8943851383105329600.L))-real(9838236521415862560.L))+
+        real(3689338695530948460.L))/real(484225703788436985375.L);
+      _C4x[48] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(273006835200.L)*_n+real(395945493120.L))+
+        real(586817304320.L))+real(891220401024.L))+real(1391712466944.L))+
+        real(2243902395520.L))+real(3755043092736.L))+real(6565741243776.L))+
+        real(12100962105856.L))+real(23789480601216.L))+real(50729386801920.L))+
+        real(120302855176064.L))+real(330215461714944.L))+
+        real(1127177777969280.L))+real(5598845488692480.L))+
+        real(71202708932284800.L))-real(749271583225889280.L))+
+        real(2083622520020142720.L))-real(2594699741911875840.L))+
+        real(1533231665675199360.L))-real(351365590050566520.L))/
+        real(69175100541205283625.L);
+      _C4x[49] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(7644783328320.L)*_n+real(11463151921536.L))+
+        real(17653672535744.L))+real(28034955275264.L))+real(46140945264960.L))+
+        real(79214129622656.L))+real(143068810189760.L))+
+        real(275002958065920.L))+real(571859737257536.L))+
+        real(1318302812812160.L))+real(3504178013294784.L))+
+        real(11527906439099904.L))+real(54835346728147776.L))+
+        real(661558101207857280.L))-real(6494356481802369600.L))+
+        real(16206710265246923520.L))-real(16001804691764015040.L))+
+        real(3577540553242131840.L))+real(3990333694000839360.L))-
+        real(2012366561198699160.L))/real(484225703788436985375.L);
+      _C4x[50] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(26475115861248.L)*_n+real(41539614960256.L))+
+        real(67477113432064.L))+real(114199555532160.L))+
+        real(203050973821696.L))+real(383622693306496.L))+
+        real(782605912198656.L))+real(1765867311381376.L))+
+        real(4580992737583360.L))+real(14651295594681984.L))+
+        real(67377092736070656.L))+real(778778239819321728.L))-
+        real(7199681361473583360.L))+real(16239641848872758400.L))-
+        real(12428950128767854080.L))-real(2389855025445148800.L))+
+        real(8126359084740046080.L))-real(3577540553242131840.L))+
+        real(361193998163869080.L))/real(484225703788436985375.L);
+      _C4x[51] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(89155245351584.L)*_n+real(149153978591744.L))+
+        real(261880564871520.L))+real(487975648687296.L))+
+        real(980374150402080.L))+real(2174528832954240.L))+
+        real(5532123220926176.L))+real(17294742643411520.L))+
+        real(77366539476712864.L))+real(863002470868620544.L))-
+        real(7585193591402132384.L))+real(15693208464551092160.L))-
+        real(9404921336417883360.L))-real(5330137948636394880.L))+
+        real(7799830764418529760.L))-real(1945537950304455360.L))-
+        real(117362755705907040.L))-real(77398713892257660.L))/
+        real(484225703788436985375.L);
+      _C4x[52] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(45457260285952.L)*_n+real(83737812023040.L))+
+        real(166114946518528.L))+real(363250972247296.L))+
+        real(909240139877376.L))+real(2788853668680448.L))+
+        real(12189279787747840.L))+real(131948929260364032.L))-
+        real(1111345019796781056.L))+real(2137393780481191680.L))-
+        real(1013996939409947136.L))-real(946776414349689600.L))+
+        real(953399774476010496.L))-real(157582628508775680.L))+
+        real(79357549100597760.L))-real(114167762356381440.L))+
+        real(25149161936980080.L))/real(69175100541205283625.L);
+      _C4x[53] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(189942318453120.L)*_n+real(410351442545408.L))+
+        real(1012980928078976.L))+real(3056778654199296.L))+
+        real(13096988628924288.L))+real(138181348526526720.L))-
+        real(1122379551011288448.L))+real(2028828416671970304.L))-
+        real(767178257387676288.L))-real(1016842863895980288.L))+
+        real(803459266534551680.L))-real(116643672730650112.L))+
+        real(140636860055192448.L))-real(111923990629344000.L))+
+        real(4746847262152320.L))+real(1110640545311280.L))/
+        real(69175100541205283625.L);
+      _C4x[54] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(7723646961783296.L)*_n+real(22978281808751360.L))+
+        real(96762881664332800.L))+real(998464281242844416.L))-
+        real(7861085196794636800.L))+real(13474627907417558784.L))-
+        real(4069958123809507328.L))-real(7215931220612210432.L))+
+        real(4792611664543980032.L))-real(761042021420289280.L))+
+        real(1171179839815236608.L))-real(655357035854691072.L))+
+        real(180682893468360192.L))-real(278195942665939200.L))+
+        real(89992312678304400.L))/real(484225703788436985375.L);
+      _C4x[55] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(14405141768265248.L)*_n+real(145779293550749568.L))-
+        real(1117102949679865632.L))+real(1828848446054729280.L))-
+        real(439926848739167328.L))-real(1017771749695568640.L))+
+        real(593959280462034528.L))-real(112253626276183104.L))+
+        real(174438761801173280.L))-real(79460142388452736.L))+
+        real(44691887225228256.L))-real(49229092559224512.L))+
+        real(6235198201372320.L))+real(1707469271938500.L))/
+        real(69175100541205283625.L);
+      _C4x[56] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(12188663518101012096.L)-real(7749529107656271360.L)*_n)*_n-
+        real(2314483605629072640.L))-real(6944389649078990976.L))+
+        real(3673561422166408192.L))-real(830336738803978112.L))+
+        real(1204673222855945472.L))-real(496615277157238400.L))+
+        real(402217782648790528.L))-real(342841473955274112.L))+
+        real(102042733322129152.L))-real(125663564514481280.L))+
+        real(51126839230125960.L))/real(484225703788436985375.L);
+      _C4x[57] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(1715470547628895552.L)*_n-real(6727179272983684480.L))*_n+
+        real(3300033497372594752.L))-real(872680083478257152.L))+
+        real(1159736499501920704.L))-real(464678016017634944.L))+
+        real(454556055863112000.L))-real(324768900924362496.L))+
+        real(155830643201675456.L))-real(176199306882910080.L))+
+        real(34298996071878720.L))+real(9223035149802040.L))/
+        real(484225703788436985375.L);
+      _C4x[58] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(3007114594707828480.L)*_n-real(906082597706305152.L))+
+        real(1105003357916695552.L))-real(449113673374669184.L))+
+        real(481005369829173504.L))-real(306747238116099200.L))+
+        real(197728999714817536.L))-real(193306485202325376.L))+
+        real(66552336586597120.L))-real(66923361204828800.L))+
+        real(31588680499089000.L))/real(484225703788436985375.L);
+      _C4x[59] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(149903898094015968.L)*_n-
+        real(63199387988859136.L))+real(70121541761931296.L))-
+        real(41821199445902016.L))+real(32494611518933600.L))-
+        real(28082826645933184.L))+real(13534411038166176.L))-
+        real(14448864464082496.L))+real(3591867311832800.L))+
+        real(949287373306860.L))/real(69175100541205283625.L);
+      _C4x[60] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(70080677533798400.L)*_n-
+        real(40403373734660608.L))+real(35306683625667584.L))-
+        real(27815314208570880.L))+real(16801954707449856.L))-
+        real(16857385363206656.L))+real(6576235280520192.L))-
+        real(5690097165903360.L))+real(2972595592208480.L))/
+        real(69175100541205283625.L);
+      _C4x[61] = (_n*(_n*(_n*(_n*(_n*(_n*(real(259248276999003392.L)*_n-
+        real(191355050237148672.L))+real(135196316193908480.L))-
+        real(125874310826349568.L))+real(63496051286798592.L))-
+        real(63243207899802112.L))+real(18410296043928320.L))+
+        real(4805639607595680.L))/real(484225703788436985375.L);
+      _C4x[62] = (_n*(_n*(_n*(_n*(_n*(real(21165482601397248.L)*_n-
+        real(18455065204743680.L))+real(11108412154980352.L))-
+        real(10988575908254208.L))+real(4725632718443520.L))-
+        real(3665098842785280.L))+real(2057863819620960.L))/
+        real(69175100541205283625.L);
+      _C4x[63] = (_n*(_n*(_n*(_n*(real(89112323189788000.L)*_n-
+        real(84868458671222912.L))+real(45057962898080160.L))-
+        real(42170268387240000.L))+real(13691762960410080.L))+
+        real(3542556815251020.L))/real(484225703788436985375.L);
+      _C4x[64] = (_n*(_n*(_n*(real(476846773530112.L)*_n-
+        real(459452602159488.L))+real(212997480208128.L))-
+        real(152371943821440.L))+real(90201719611080.L))/
+        real(4210658293812495525.L);
+      _C4x[65] = (_n*(_n*(real(76425666259392.L)*_n-real(67918143488384.L))+
+        real(23864233771840.L))+real(6135010589400.L))/
+        real(1113162537444682725.L);
+      _C4x[66] = (_n*(real(1053643008.L)*_n-real(709188480.L))+
+        real(436906360.L))/real(27431985446775.L);
+      _C4x[67] = (real(61416608.L)*_n+real(15713412.L))/real(3707025060375.L);
+      _C4x[68] = real(10384.L)/real(854125125.L);
+      _C4x[69] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(16545868800.L)*_n-real(26558972160.L))*_n-
+        real(43799006720.L))-real(74458311424.L))-real(131016159232.L))-
+        real(239806362880.L))-real(459418505728.L))-real(928488660736.L))-
+        real(1999821730816.L))-real(4653431335168.L))-real(11922014164480.L))-
+        real(34573841076992.L))-real(118538883692544.L))-
+        real(518607616154880.L))-real(3407992906160640.L))-
+        real(59639875857811200.L))+real(906526113038730240.L))-
+        real(3852735980414603520.L))+real(7705471960829207040.L))-
+        real(7155081106484263680.L))+real(2459559130353965640.L))/
+        real(677915985303811779525.L);
+      _C4x[70] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(58538142720.L)*_n-real(97662466048.L))*_n-
+        real(168340530176.L))-real(301206585344.L))-real(562729180160.L))-
+        real(1105930520576.L))-real(2308674507776.L))-real(5186350862336.L))-
+        real(12768092589056.L))-real(35381461391360.L))-
+        real(115132593931264.L))-real(474155534770176.L))-
+        real(2904202650467328.L))-real(46822859058554880.L))+
+        real(647518652170521600.L))-real(2481018835684945920.L))+
+        real(4532630565193651200.L))-real(4403126834759546880.L))+
+        real(2201563417379773440.L))-real(447192569155266480.L))/
+        real(225971995101270593175.L);
+      _C4x[71] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(1182937339392.L)*_n-real(2077423296256.L))*_n-
+        real(3802400960512.L))-real(7305888334080.L))-real(14874238192128.L))-
+        real(32495024308992.L))-real(77533332022272.L))-
+        real(207382612288768.L))-real(648129037319680.L))-
+        real(2547646522697472.L))-real(14773759952623616.L))-
+        real(223035848787675392.L))+real(2840932521296432640.L))-
+        real(9742784937492499200.L))+real(14947456886420567040.L))-
+        real(9871251452694293760.L))-real(323759326085260800.L))+
+        real(3852735980414603520.L))-real(1461975706853755800.L))/
+        real(677915985303811779525.L);
+      _C4x[72] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(6792109998080.L)*_n-real(12807852130304.L))*_n-
+        real(25543125909504.L))-real(54542001618944.L))-
+        real(126863277277184.L))-real(329740727844864.L))-
+        real(997480431632384.L))-real(3776015044788224.L))-
+        real(20945473526677504.L))-real(299514399427461120.L))+
+        real(3556918619555610624.L))-real(11032967086722301952.L))+
+        real(14155439335028834304.L))-real(5073464222040883200.L))-
+        real(5779955968848445440.L))+real(6434290606831288320.L))-
+        real(2072059686945669120.L))+real(137597713586235840.L))/
+        real(677915985303811779525.L);
+      _C4x[73] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(5498545266688.L)*_n-real(11517729268224.L))*_n-
+        real(26224700544000.L))-real(66552173766144.L))-
+        real(195930593347584.L))-real(718803292203520.L))-
+        real(3841803656018944.L))-real(52482742277303808.L))+
+        real(587039826765991936.L))-real(1667227192323994112.L))+
+        real(1804800343146912768.L))-real(179108019727873536.L))-
+        real(1118922391426406400.L))+real(731871768512448000.L))-
+        real(71080994899921920.L))-real(14118827754094080.L))-
+        real(15898895477401200.L))/real(96845140757687397075.L);
+      _C4x[74] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(35047232526336.L)*_n-real(87145686519808.L))*_n-
+        real(250690278295552.L))-real(895441870528512.L))-
+        real(4636554886002688.L))-real(60909165336457216.L))+
+        real(647030786881591296.L))-real(1701163016492072960.L))+
+        real(1569827665973733376.L))+real(199123813177257984.L))-
+        real(1156588948961511424.L))+real(493641069365731328.L))-
+        real(5537459281065984.L))+real(97709908415139840.L))-
+        real(91528952336885760.L))+real(14331827310729120.L))/
+        real(96845140757687397075.L);
+      _C4x[75] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(305285790954496.L)*_n-real(1065479510857216.L))*_n-
+        real(5367450969573376.L))-real(68156970345970176.L))+
+        real(692250924670313472.L))-real(1700792328461852160.L))+
+        real(1350276171120070656.L))+real(447958408510029312.L))-
+        real(1089580388522673152.L))+real(320713760839981568.L))-
+        real(27927099204524032.L))+real(156890446098642432.L))-
+        real(69929474315480064.L))-real(3111645696929280.L))-
+        real(1658353690944240.L))/real(96845140757687397075.L);
+      _C4x[76] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(42229901571899392.L)*_n-real(520507823176384512.L))*_n+
+        real(5082527022402486272.L))-real(11761333412881776640.L))+
+        real(8094934215344406528.L))+real(4248953186446409728.L))-
+        real(6925601345339801600.L))+real(1490686984511176704.L))-
+        real(493932233363537920.L))+real(1168235552825901056.L))-
+        real(301464818968707072.L))+real(164057815030480896.L))-
+        real(251302433428193280.L))+real(59732484360696000.L))/
+        real(677915985303811779525.L);
+      _C4x[77] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(5257878379207406592.L)*_n-real(11535963820106860288.L))+
+        real(6925708096131216896.L))+real(4941017122645820160.L))-
+        real(6204077377016465408.L))+real(1054133475733859584.L))-
+        real(755149447055721984.L))+real(1077253339035498240.L))-
+        real(219013245834249216.L))+real(335393525246959872.L))-
+        real(271285432312742400.L))+real(9794275265096448.L))+
+        real(2778718129058424.L))/real(677915985303811779525.L);
+      _C4x[78] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(5928474029428380672.L)*_n+real(5353966408098588672.L))-
+        real(5543142534577005568.L))+real(815909855239413760.L))-
+        real(938300516833369088.L))+real(938842870494599168.L))-
+        real(216299111776670720.L))+real(433964216427384832.L))-
+        real(229218182294162432.L))+real(74346910989223936.L))-
+        real(119253523284460544.L))+real(36991849087314128.L))/
+        real(677915985303811779525.L);
+      _C4x[79] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(695425721257037568.L)-
+        real(4966296417574646272.L)*_n)*_n-real(1049722309639055360.L))+
+        real(804126897969488128.L))-real(252106372259470848.L))+
+        real(471035971008664320.L))-real(191180581081469952.L))+
+        real(145544404923278592.L))-real(153181806523501056.L))+
+        real(15430278351984384.L))+real(4563635253280152.L))/
+        real(677915985303811779525.L);
+      _C4x[80] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(98700779151294464.L)-
+        real(158129642176020480.L)*_n)*_n-real(42775972435689472.L))+
+        real(67135745639350272.L))-real(24535176192491520.L))+
+        real(28605295271804928.L))-real(21639588578820096.L))+
+        real(6613915913256960.L))-real(9259482278559744.L))+
+        real(3453672900064128.L))/real(96845140757687397075.L);
+      _C4x[81] = (_n*(_n*(_n*(_n*(_n*(_n*((real(64180463283399680.L)-
+        real(49222696013062144.L)*_n)*_n-real(24040453782874112.L))+
+        real(33482163531023360.L))-real(20089351832301568.L))+
+        real(11542142133902336.L))-real(13185985838921728.L))+
+        real(2044543018972160.L))+real(583241277623200.L))/
+        real(96845140757687397075.L);
+      _C4x[82] = (_n*(_n*(_n*(_n*(_n*((real(35923936524951552.L)-
+        real(24968440568492032.L)*_n)*_n-real(18747458754613248.L))+
+        real(15819949076201472.L))-real(14330204513759232.L))+
+        real(4661828567015424.L))-real(5553113534976000.L))+
+        real(2366924995310400.L))/real(96845140757687397075.L);
+      _C4x[83] = (_n*(_n*(_n*(_n*((real(133168047742901248.L)-
+        real(126150281396164608.L)*_n)*_n-real(100154530892681216.L))+
+        real(52047248303490048.L))-real(59189313238272000.L))+
+        real(11893293825960960.L))+real(3297500546790240.L))/
+        real(677915985303811779525.L);
+      _C4x[84] = (_n*(_n*(_n*((real(69695693352140800.L)-
+        real(97688010118627328.L)*_n)*_n-real(68445171555532800.L))+
+        real(24262380620513280.L))-real(25086978805432320.L))+
+        real(11812840276083840.L))/real(677915985303811779525.L);
+      _C4x[85] = (_n*(_n*((real(7314406029616896.L)-real(14381433989094400.L)*
+        _n)*_n-real(8001235764039168.L))+real(1917432226983168.L))+
+        real(520752507222024.L))/real(135583197060762355905.L);
+      _C4x[86] = (_n*((real(1294831347712.L)-real(3365292432384.L)*_n)*_n-
+        real(1193044751360.L))+real(606224480400.L))/real(47225077346138055.L);
+      _C4x[87] = ((real(37023086848.L)-real(135977211392.L)*_n)*_n+
+        real(9903771944.L))/real(3264406268166225.L);
+      _C4x[88] = (real(16812224.L)-real(31178752.L)*_n)/real(1729945028175.L);
+      _C4x[89] = real(70576.L)/real(29211079275.L);
+      _C4x[90] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(1806732800.L)*_n+real(3354817536.L))+
+        real(6474635776.L))+real(13058088960.L))+real(27705484800.L))+
+        real(62364503040.L))+real(150565728768.L))+real(395569133568.L))+
+        real(1153743306240.L))+real(3845811020800.L))+real(15328303925760.L))+
+        real(79025922461696.L))+real(622329139385856.L))+
+        real(13335624415411200.L))-real(255599467962048000.L))+
+        real(1431357020587468800.L))-real(4079367508674286080.L))+
+        real(6604690252139320320.L))-real(5503908543449433600.L))+
+        real(1788770276621065920.L))/real(871606266819186573675.L);
+      _C4x[91] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(31160807424.L)*_n+real(61322082304.L))+
+        real(126640553984.L))+real(276675840000.L))+real(646157094912.L))+
+        real(1635731822592.L))+real(4575772680192.L))+real(14548153690112.L))+
+        real(54940157440000.L))+real(266218026891264.L))+
+        real(1951122775261184.L))+real(38446111277615104.L))-
+        real(667848070723792896.L))+real(3333906103852800000.L))-
+        real(8342766634281246720.L))+real(11900711228312954880.L))-
+        real(9842283512991928320.L))+real(4403126834759546880.L))-
+        real(825586281517415040.L))/real(871606266819186573675.L);
+      _C4x[92] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(341540329472.L)*_n+real(727668064256.L))+
+        real(1652933732352.L))+real(4057463574528.L))+real(10966330669056.L))+
+        real(33541411577856.L))+real(121216399689728.L))+
+        real(558455712346112.L))+real(3859568036222976.L))+
+        real(70941192605581312.L))-real(1132276604451657728.L))+
+        real(5075123766412578816.L))-real(10946236136820590592.L))+
+        real(12254549796135198720.L))-real(5602740337728092160.L))-
+        real(1990267857197813760.L))+real(3367096991286712320.L))-
+        real(1100781708689886720.L))/real(871606266819186573675.L);
+      _C4x[93] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(469241266176.L)*_n+real(1122157381632.L))+real(2946084098048.L))+
+        real(8722115483648.L))+real(30380136603648.L))+real(134171246389248.L))+
+        real(882676460449792.L))+real(15296036786436096.L))-
+        real(226926232758206464.L))+real(923361337578817536.L))-
+        real(1723285590740496384.L))+real(1446044552747849728.L))-
+        real(24723824313016320.L))-real(929937542568007680.L))+
+        real(689388279303352320.L))-real(177215631120353280.L))+
+        real(6937699844684160.L))/real(124515180974169510525.L);
+      _C4x[94] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(4792552670208.L)*_n+real(13797968873472.L))+
+        real(46567221906432.L))+real(198358745567232.L))+
+        real(1251006461596672.L))+real(20607164849461248.L))-
+        real(286876098739086336.L))+real(1070950837277220864.L))-
+        real(1744206736765459456.L))+real(1046601014161680384.L))+
+        real(529534896386501632.L))-real(1054375146901442560.L))+
+        real(422040761261061120.L))+real(13801312887060480.L))-
+        real(2921136776709120.L))-real(16674822433714560.L))/
+        real(124515180974169510525.L);
+      _C4x[95] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(457253050314752.L)*_n+real(1887492834805760.L))+
+        real(11474960739164160.L))+real(180846368857290752.L))-
+        real(2380842436087263232.L))+real(8230732165125679104.L))-
+        real(11800798848150781952.L))+real(4673866832177256448.L))+
+        real(5933823659285458944.L))-real(6529078157228505088.L))+
+        real(1217244458772930560.L))+real(131933777549801472.L))+
+        real(767894888560300032.L))-real(498456005927147520.L))+
+        real(58787877631271040.L))/real(871606266819186573675.L);
+      _C4x[96] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(2034847651719168.L)*_n+real(30843702130925568.L))-
+        real(386471325623330816.L))+real(1247190874458378240.L))-
+        real(1586744442263844864.L))+real(347403149298647040.L))+
+        real(998125552961239040.L))-real(744993018003247104.L))+
+        real(40773037287516160.L))-real(53852832074948608.L))+
+        real(150636060145391616.L))-real(37627628509261824.L))-
+        real(4724621221459968.L))-real(3069310381324800.L))/
+        real(124515180974169510525.L);
+      _C4x[97] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(9052129090954414080.L)-real(2984381197523116032.L)*_n)*_n-
+        real(10290707408154349568.L))+real(635622021192259584.L))+
+        real(7314257541586731008.L))-real(3970718183852808192.L))-
+        real(40914328438910976.L))-real(850755590059182080.L))+
+        real(940894939424219136.L))-real(83120546467510272.L))+
+        real(186629253504626688.L))-real(219415473714898944.L))+
+        real(40429168019388288.L))/real(871606266819186573675.L);
+      _C4x[98] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(9443940305919116800.L)*_n-real(762942869175079936.L))*_n+
+        real(7228014979728711168.L))-real(2959689807403814912.L))-
+        real(36572693608381952.L))-real(1133362591992056832.L))+
+        real(701394424243054080.L))-real(78029044292978688.L))+
+        real(368220571488225792.L))-real(196902513544332288.L))-
+        real(6240663471641088.L))-real(3026445874275264.L))/
+        real(871606266819186573675.L);
+      _C4x[99] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(6923992234055540736.L)*_n-real(2194738354062471168.L))+
+        real(112113459619725312.L))-real(1242876977080782848.L))+
+        real(481676035337183232.L))-real(169171412057518080.L))+
+        real(437503652620812288.L))-real(128676265734868992.L))+
+        real(70483563070169088.L))-real(110377237616013312.L))+
+        real(27114236814276864.L))/real(871606266819186573675.L);
+      _C4x[100] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(43194640264409088.L)*_n-
+        real(176681272721178624.L))+real(46742589687320576.L))-
+        real(40223654794616832.L))+real(60694833131581440.L))-
+        real(13244118889218048.L))+real(22297358447087616.L))-
+        real(18017382895755264.L))+real(577794647764992.L))+
+        real(180445453095936.L))/real(124515180974169510525.L);
+      _C4x[101] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(33922707161907200.L)*_n-
+        real(53833689181081600.L))+real(53389011405594624.L))-
+        real(13631522973020160.L))+real(30408258580267008.L))-
+        real(15285124271149056.L))+real(5425597726531584.L))-
+        real(8837278156664832.L))+real(2666877652373760.L))/
+        real(124515180974169510525.L);
+      _C4x[102] = (_n*(_n*(_n*(_n*(_n*(_n*(real(313833724893591552.L)*_n-
+        real(121949742953385984.L))+real(236693559212730368.L))-
+        real(87728361723125760.L))+real(80399991459207168.L))-
+        real(81231846402158592.L))+real(6873156243179520.L))+
+        real(2132364860640000.L))/real(871606266819186573675.L);
+      _C4x[103] = (_n*(_n*(_n*(_n*(_n*(real(33782729382322176.L)*_n-
+        real(11390490463793152.L))+real(16501329095311360.L))-
+        real(11364797211217920.L))+real(3604696586526720.L))-
+        real(5386139578183680.L))+real(1896701494728960.L))/
+        real(124515180974169510525.L);
+      _C4x[104] = (_n*(_n*(_n*(_n*(real(137907822072991744.L)*_n-
+        real(72278885831720960.L))+real(48390416246108160.L))-
+        real(54127280904560640.L))+real(7031949305794560.L))+
+        real(2090449232686080.L))/real(871606266819186573675.L);
+      _C4x[105] = (_n*(_n*(_n*(real(1268559669477376.L)*_n-
+        real(1055625510481920.L))+real(337844092723200.L))-
+        real(446064994013184.L))+real(176958549427968.L))/
+        real(15847386669439755885.L);
+      _C4x[106] = (_n*(_n*(real(11327093819904.L)*_n-real(13040475800576.L))+
+        real(2209574022656.L))+real(635330794560.L))/real(303589782939458925.L);
+      _C4x[107] = (_n*(real(23101878272.L)*_n-real(26986989568.L))+
+        real(11760203136.L))/real(1399031257785525.L);
+      _C4x[108] = (real(2135226368.L)*_n+real(598833664.L))/
+        real(340304900542425.L);
+      _C4x[109] = real(567424.L)/real(87633237825.L);
+      _C4x[110] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(392933376.L)*_n-real(865908736.L))*_n-real(2015985664.L))-
+        real(5002905600.L))-real(13385551872.L))-real(39200544768.L))-
+        real(128292691968.L))-real(483473385472.L))-real(2197606297600.L))-
+        real(13053781407744.L))-real(119901399597056.L))-
+        real(3042498014775296.L))+real(70412096913371136.L))-
+        real(488972895231744000.L))+real(1799420254452817920.L))-
+        real(4048695572518840320.L))+real(5698164139100590080.L))-
+        real(4403126834759546880.L))+real(1375977135862358400.L))/
+        real(1065296548334561367825.L);
+      _C4x[111] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((-real(10859667456.L)*_n-real(26129596416.L))*_n-real(67565166592.L))-
+        real(190510645248.L))-real(597656199168.L))-real(2147714695168.L))-
+        real(9251328565248.L))-real(51687700119552.L))-real(442510004084736.L))-
+        real(10350198236184576.L))+real(217800892368052224.L))-
+        real(1352607688854388736.L))+real(4365550008629010432.L))-
+        real(8449451629604536320.L))+real(10196714775232634880.L))-
+        real(7524848336802693120.L))+real(3108089530418503680.L))-
+        real(550390854344943360.L))/real(1065296548334561367825.L);
+      _C4x[112] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(28322922496.L)*_n-real(77318326272.L))*_n-real(233990443008.L))-
+        real(807704598528.L))-real(3324931350528.L))-real(17642111838208.L))-
+        real(142325808197632.L))-real(3105726287394816.L))+
+        real(60163327626133504.L))-real(337509386084304896.L))+
+        real(955387198567870464.L))-real(1536585681053964288.L))+
+        real(1352359321669509120.L))-real(401084780036843520.L))-
+        real(377800356454379520.L))+real(410906573257082880.L))-
+        real(122566030589420160.L))/real(152185221190651623975.L);
+      _C4x[113] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(3451898904576.L)*_n-real(11509470429184.L))*_n-
+        real(45566660952064.L))-real(231289205489664.L))-
+        real(1772892123971584.L))-real(36430772070547456.L))+
+        real(656327536659873792.L))-real(3359914290911510528.L))+
+        real(8398146137172262912.L))-real(11093579178112155648.L))+
+        real(6125882406813188096.L))+real(2648948920916049920.L))-
+        real(6159280396664586240.L))+real(3575132732167127040.L))-
+        real(763390410979983360.L))+real(10223978718481920.L))/
+        real(1065296548334561367825.L);
+      _C4x[114] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(76683653804032.L)*_n-real(374463390386176.L))*_n-
+        real(2745016498610176.L))-real(53512872384018432.L))+
+        real(904156832243331072.L))-real(4262573203092793344.L))+
+        real(9482935732681162752.L))-real(10205760518322690048.L))+
+        real(2403880569128636416.L))+real(5958539126415669248.L))-
+        real(5957055786116915200.L))+real(1498212950990063616.L))+
+        real(298006753603055616.L))+real(48008247895480320.L))-
+        real(111611767676760960.L))/real(1065296548334561367825.L);
+      _C4x[115] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(554014149025792.L)*_n-real(10308000440942592.L))*_n+
+        real(164484462983684096.L))-real(719825874104074240.L))+
+        real(1436205938503901184.L))-real(1246004554450534400.L))-
+        real(105163267509248000.L))+real(1032509428877082624.L))-
+        real(613525591346421760.L))+real(1918121007546368.L))-
+        real(1044076473114624.L))+real(111223341156089856.L))-
+        real(54798832518438912.L))+real(4984983412427520.L))/
+        real(152185221190651623975.L);
+      _C4x[116] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(198527119152488448.L)*_n-real(812046458690959360.L))+
+        real(1463063303185608704.L))-real(1006189438757087232.L))-
+        real(437331274659282944.L))+real(1030813109133715456.L))-
+        real(368173541652836352.L))-real(60736720782428160.L))-
+        real(99244829673136128.L))+real(128697004859443200.L))-
+        real(15795452235878400.L))-real(3877914909370368.L))-
+        real(3732916453425024.L))/real(152185221190651623975.L);
+      _C4x[117] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(10161768486526976000.L)*_n-real(5391658475412127744.L))-
+        real(4639245548691324928.L))+real(6560265942775365632.L))-
+        real(1288318466069168128.L))-real(246271563805360128.L))-
+        real(1138793026234286080.L))+real(625782633730408448.L))+
+        real(17323466731225088.L))+real(212323226814906368.L))-
+        real(187612989987684352.L))+real(27777611745286144.L))/
+        real(1065296548334561367825.L);
+      _C4x[118] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(5661337451056508928.L)-
+        real(5624892992935469056.L)*_n)*_n-real(473813810441388032.L))+
+        real(151095731556732928.L))-real(1260342903828406272.L))+
+        real(311162912578990080.L))-real(75331672625922048.L))+
+        real(376502965042778112.L))-real(132150153865863168.L))-
+        real(12217548259381248.L))-real(6620294465535744.L))/
+        real(1065296548334561367825.L);
+      _C4x[119] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(78263723078057984.L)-
+        real(5034390572679168.L)*_n)*_n-real(166737284054204416.L))+
+        real(15583915068260352.L))-real(35331513829539840.L))+
+        real(55980919345840128.L))-real(7948506096353280.L))+
+        real(10959902127390720.L))-real(14302725018796032.L))+
+        real(2871205591908864.L))/real(152185221190651623975.L);
+      _C4x[120] = (_n*(_n*(_n*(_n*(_n*(_n*((real(33212974310010880.L)-
+        real(975767634379243520.L)*_n)*_n-real(395544530406187008.L))+
+        real(319933879478456320.L))-real(41679209874046976.L))+
+        real(168633590086463488.L))-real(98771750032105472.L))-
+        real(2270478922428416.L))-real(1039330428371200.L))/
+        real(1065296548334561367825.L);
+      _C4x[121] = (_n*(_n*(_n*(_n*(_n*((real(227465211760410624.L)-
+        real(483044026864402432.L)*_n)*_n-real(80632288666288128.L))+
+        real(214632992863027200.L))-real(67273596127051776.L))+
+        real(36701859280257024.L))-real(58103190002565120.L))+
+        real(14534198890122240.L))/real(1065296548334561367825.L);
+      _C4x[122] = (_n*(_n*(_n*(_n*((real(30832813228552192.L)-
+        real(20115348541956096.L)*_n)*_n-real(6893529524879360.L))+
+        real(12232673379717120.L))-real(9848731208785920.L))+
+        real(289254201569280.L))+real(95586646544640.L))/
+        real(152185221190651623975.L);
+      _C4x[123] = (_n*(_n*(_n*((real(1572942643527680.L)-
+        real(666117418074112.L)*_n)*_n-real(760917298298880.L))+
+        real(286428586475520.L))-real(469663005818880.L))+
+        real(139020022863360.L))/real(13835020108241056725.L);
+      _C4x[124] = (_n*(_n*((real(4481427708850176.L)-real(4302902592716800.L)*
+        _n)*_n-real(4381314699976704.L))+real(322683226951680.L))+
+        real(103467567151872.L))/real(96845140757687397075.L);
+      _C4x[125] = (_n*((real(5356912246784.L)-real(16274729926656.L)*_n)*_n-
+        real(8300880265216.L))+real(2806096398336.L))/
+        real(371054179148227575.L);
+      _C4x[126] = ((real(5079242752.L)-real(45133008896.L)*_n)*_n+
+        real(1557031040.L))/real(1399031257785525.L);
+      _C4x[127] = (real(39440128.L)-real(104833024.L)*_n)/real(6786707418225.L);
+      _C4x[128] = real(14777984.L)/real(14401062082575.L);
+      _C4x[129] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(169275392.L)*_n+real(459210752.L))+real(1348931584.L))+
+        real(4358086656.L))+real(15819288576.L))+real(66522136576.L))+
+        real(339738054656.L))+real(2285510549504.L))+real(23997860769792.L))+
+        real(703937249247232.L))-real(19094297885831168.L))+
+        real(158209896768315392.L))-real(711944535457419264.L))+
+        real(2034127244164055040.L))-real(3898743884647772160.L))+
+        real(4962037671369891840.L))-real(3626104452154920960.L))+
+        real(1100781708689886720.L))/real(1258986829849936161975.L);
+      _C4x[130] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(2586574848.L)*_n+real(8045019136.L))+real(27997405184.L))+
+        real(112329211904.L))+real(544229883904.L))+real(3449647939584.L))+
+        real(33850264354816.L))+real(918775240900608.L))-
+        real(22781969157455872.L))+real(170000845693206528.L))-
+        real(676483696526589952.L))+real(1672504622979334144.L))-
+        real(2712169658885406720.L))+real(2897090317445775360.L))-
+        real(1963003913948528640.L))+real(763390410979983360.L))-
+        real(129503730434104320.L))/real(419662276616645387325.L);
+      _C4x[131] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(257397153792.L)*_n+real(991547604992.L))+real(4590186438656.L))+
+        real(27638225534976.L))+real(255782598500352.L))+
+        real(6489129888202752.L))-real(148657574541385728.L))+
+        real(1008897492888649728.L))-real(3569681789506560000.L))+
+        real(7568884147602505728.L))-real(9830056295264837632.L))+
+        real(7043422417166041088.L))-real(1014218688873406464.L))-
+        real(2830708542577950720.L))+real(2453754892435660800.L))-
+        real(688414567044449280.L))/real(1258986829849936161975.L);
+      _C4x[132] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(9881440452608.L)*_n+real(56879822225408.L))+
+        real(500059034288128.L))+real(11953729657683968.L))-
+        real(255233639750139904.L))+real(1589618325900509184.L))-
+        real(5037608201230352384.L))+real(9151828754188976128.L))-
+        real(9141447965273128960.L))+real(2873266155477745664.L))+
+        real(4081748845846396928.L))-real(5442357228092080128.L))+
+        real(2653374372573904896.L))-real(478897090117877760.L))-
+        real(6815985812321280.L))/real(1258986829849936161975.L);
+      _C4x[133] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(119846784831488.L)*_n+real(2717226071605248.L))-
+        real(54472512256217088.L))+real(313795243407974400.L))-
+        real(897176437303652352.L))+real(1397445741687767040.L))-
+        real(1015935087271563264.L))-real(174507545995321344.L))+
+        real(929743493931929600.L))-real(632793424783261696.L))+
+        real(85099239783493632.L))+real(46941397942247424.L))+
+        real(13716642255851520.L))-real(14711522172556800.L))/
+        real(179855261407133737425.L);
+      _C4x[134] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(398673786674020352.L)-real(74312835739680768.L)*_n)*_n-
+        real(1035243455580602368.L))+real(1382705355455004672.L))-
+        real(659652413541056512.L))-real(600562940514205696.L))+
+        real(954064446949294080.L))-real(336068503539220480.L))-
+        real(70785526733209600.L))-real(29585858716827648.L))+
+        real(105774834699075584.L))-real(42086948419600384.L))+
+        real(2946537966071808.L))/real(179855261407133737425.L);
+      _C4x[135] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1297878816003129344.L)-real(1134727193625591808.L)*_n)*_n-
+        real(312050739452739584.L))-real(852430315341479936.L))+
+        real(809425076323778560.L))-real(96223542886465536.L))-
+        real(61961501075865600.L))-real(131412737654390784.L))+
+        real(101236061902766080.L))-real(2207953883824128.L))-
+        real(2251654854770688.L))-real(3985164375568384.L))/
+        real(179855261407133737425.L);
+      _C4x[136] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(61664578920644608.L)*
+        _n-real(6753982490852524032.L))*_n+real(4273998523688026112.L))+
+        real(260984894785126400.L))+real(126415132245491712.L))-
+        real(1200871864213504000.L))+real(332075616826032128.L))+
+        real(41286869034270720.L))+real(229470885042323456.L))-
+        real(158524418181627904.L))+real(19285050112462848.L))/
+        real(1258986829849936161975.L);
+      _C4x[137] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(2937968846665752576.L)*
+        _n+real(580225142869786624.L))+real(704289592006991872.L))-
+        real(1090927053558988800.L))+real(29599362495324160.L))-
+        real(137634015480872960.L))+real(358358593764089856.L))-
+        real(80588156826533888.L))-real(12856700074975232.L))-
+        real(8778140571196416.L))/real(1258986829849936161975.L);
+      _C4x[138] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1101287614239211520.L)*_n-
+        real(799007335375470592.L))-real(73108334853292032.L))-
+        real(349601572574822400.L))+real(313582557425958912.L))-
+        real(10680775242317824.L))+real(85512153885376512.L))-
+        real(89525206309109760.L))+real(15037121091328000.L))/
+        real(1258986829849936161975.L);
+      _C4x[139] = (_n*(_n*(_n*(_n*(_n*((-real(18013691360657408.L)*_n-
+        real(478168461578895360.L))*_n+real(195166094969552896.L))-
+        real(29821159111589888.L))+real(175097180747317248.L))-
+        real(73698183549648896.L))-real(5325049517096960.L))-
+        real(2624601201223680.L))/real(1258986829849936161975.L);
+      _C4x[140] = (_n*(_n*(_n*(_n*(_n*(real(12874658156445696.L)*_n-
+        real(15040116181336064.L))+real(28678326775054336.L))-
+        real(5145330094276608.L))+real(5563981038551040.L))-
+        real(7692796360949760.L))+real(1628377902213120.L))/
+        real(179855261407133737425.L);
+      _C4x[141] = (_n*(_n*(_n*(_n*(real(24927020799975424.L)*_n-
+        real(3592207192850432.L))+real(13059067482710016.L))-
+        real(8079662562951168.L))-real(136102453714944.L))-
+        real(59727120933888.L))/real(179855261407133737425.L);
+      _C4x[142] = (_n*(_n*(_n*(real(1584279953604608.L)*_n-
+        real(515572530610176.L))+real(279647089459200.L))-
+        real(445527616978944.L))+real(112723010408448.L))/
+        real(16350478309739430675.L);
+      _C4x[143] = (_n*(_n*(real(163424955432960.L)*_n-real(131077278072832.L))+
+        real(3599008759808.L))+real(1233827696640.L))/
+        real(3946667178212966025.L);
+      _C4x[144] = (_n*(real(108562612224.L)*_n-real(178562334720.L))+
+        real(52104335360.L))/real(9793218804498675.L);
+      _C4x[145] = (real(12387831808.L)*_n+real(4069857792.L))/
+        real(7675766090012475.L);
+      _C4x[146] = real(20016128.L)/real(4800354027525.L);
+      _C4x[147] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(149946368.L)*_n-real(529858560.L))*_n-real(2113011712.L))-
+        real(9810411520.L))-real(55628267520.L))-real(418139144192.L))-
+        real(4941644431360.L))-real(164556759564288.L))+
+        real(5119543630888960.L))-real(49275607447306240.L))+
+        real(261864656719970304.L))-real(904056552961802240.L))+
+        real(2169735727108325376.L))-real(3698413171207372800.L))+
+        real(4362230919885619200.L))-real(3053561643919933440.L))+
+        real(906526113038730240.L))/real(1452677111365310956125.L);
+      _C4x[148] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(12531793920.L)*_n-real(55567712256.L))*_n-real(299357700096.L))-
+        real(2124741083136.L))-real(23538174263296.L))-real(728322363883520.L))+
+        real(20831996264841216.L))-real(181963207909310464.L))+
+        real(863667010530967552.L))-real(2611406069778874368.L))+
+        real(5361990589980344320.L))-real(7626949828623204352.L))+
+        real(7419585808083714048.L))-real(4703622904920145920.L))+
+        real(1744892367954247680.L))-real(286271404117493760.L))/
+        real(1452677111365310956125.L);
+      _C4x[149] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(927214993408.L)*_n-real(6257462149120.L))*_n-
+        real(65484820316160.L))-real(1898837211414528.L))+
+        real(50385219863838720.L))-real(402944765957701632.L))+
+        real(1719846441419538432.L))-real(4554766547979927552.L))+
+        real(7846395409544380416.L))-real(8602387447067115520.L))+
+        real(5080156900163846144.L))+real(125177061179326464.L))-
+        real(2799414277283119104.L))+real(2105250574379581440.L))-
+        real(565726822422666240.L))/real(1452677111365310956125.L);
+      _C4x[150] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(19910873841664.L)*_n-real(544816899293184.L))*_n+
+        real(13512995641491456.L))-real(99717350728663040.L))+
+        real(385414844182953984.L))-real(896609185272168448.L))+
+        real(1279117834987765760.L))-real(987215180807012352.L))+
+        real(67172913134960640.L))+real(666861948268183552.L))-
+        real(665817143445553152.L))+real(283228906102718464.L))-
+        real(43351363178987520.L))-real(2032095149015040.L))/
+        real(207525301623615850875.L);
+      _C4x[151] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(21786850633973760.L)*_n-real(149363323062452224.L))+
+        real(526184551103856640.L))-real(1078816846619344896.L))+
+        real(1256009240219222016.L))-real(562837422305181696.L))-
+        real(501940701699244032.L))+real(878451802467205120.L))-
+        real(444054908754198528.L))+real(9362254906785792.L))+
+        real(41507684515053568.L))+real(18063067991244800.L))-
+        real(13377959731015680.L))/real(207525301623615850875.L);
+      _C4x[152] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(656886378301227008.L)*_n-real(1190392899378872320.L))+
+        real(1107092246979674112.L))-real(116574070874570752.L))-
+        real(837731635679985664.L))+real(764530737517953024.L))-
+        real(135302007315496960.L))-real(87352112740040704.L))-
+        real(54114460244115456.L))+real(96797148336619520.L))-
+        real(32388949501542400.L))+real(1693412624179200.L))/
+        real(207525301623615850875.L);
+      _C4x[153] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(6220637223153827840.L)*_n+real(1855146056207302656.L))-
+        real(6694680161110982656.L))+real(3652579978774315008.L))+
+        real(399894681956646912.L))-real(151881061471354880.L))-
+        real(1015637781855076352.L))+real(521501468079685632.L))+
+        real(39324846131773440.L))-real(3853722403471360.L))-
+        real(28081452791992320.L))/real(1452677111365310956125.L);
+      _C4x[154] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(1958671363707240448.L)-
+        real(6479713082658521088.L)*_n)*_n+real(799422552669683712.L))+
+        real(596762606859976704.L))-real(1082398437607997440.L))+
+        real(106014542466646016.L))+real(23867686451675136.L))+
+        real(236421650048876544.L))-real(133108134403112960.L))+
+        real(13465173306654720.L))/real(1452677111365310956125.L);
+      _C4x[155] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(584562717890707456.L)*_n+
+        real(1133625790197268480.L))-real(764347409406099456.L))-
+        real(119825618372526080.L))-real(214732003115270144.L))+
+        real(322021955268378624.L))-real(41862722661122048.L))-
+        real(10871997875486720.L))-real(10004602669824000.L))/
+        real(1452677111365310956125.L);
+      _C4x[156] = (_n*(_n*(_n*(_n*(_n*((-real(360984858245726208.L)*_n-
+        real(87667595082203136.L))*_n-real(422169720932270080.L))+
+        real(224180053135589376.L))+real(11620233304866816.L))+
+        real(93320750352564224.L))-real(79286784268697600.L))+
+        real(11333055676723200.L))/real(1452677111365310956125.L);
+      _C4x[157] = (_n*(_n*(_n*(_n*((real(11853630101913600.L)-
+        real(69785117676797952.L)*_n)*_n-real(6119178497425408.L))+
+        real(24807372915081216.L))-real(7446974715658240.L))-
+        real(909143107043328.L))-real(528353597048832.L))/
+        real(207525301623615850875.L);
+      _C4x[158] = (_n*(_n*(_n*((real(24909053679370240.L)-
+        real(20706317340508160.L)*_n)*_n-real(1991732527890432.L))+
+        real(6073259315429376.L))-real(7057052877717504.L))+
+        real(1285162878025728.L))/real(207525301623615850875.L);
+      _C4x[159] = (_n*(_n*((real(13601006154940416.L)-real(2358313674080256.L)*
+        _n)*_n-real(6413660820340736.L))-real(375056979197952.L))-
+        real(174118985576448.L))/real(207525301623615850875.L);
+      _C4x[160] = (_n*((real(70517228830720.L)-real(75577194184704.L)*_n)*_n-
+        real(101051637170176.L))+real(22175812657152.L))/
+        real(4553846744091883875.L);
+      _C4x[161] = ((-real(103808499187712.L)*_n-real(1278584029184.L))*_n-
+        real(541336621056.L))/real(4260050179956923625.L);
+      _C4x[162] = (real(34096398336.L)-real(133717557248.L)*_n)/
+        real(8856653180783625.L);
+      _C4x[163] = real(383798272.L)/real(2232164622799125.L);
+      _C4x[164] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(300810240.L)*_n+real(1528561664.L))+real(9530114048.L))+
+        real(79173255168.L))+real(1040248602624.L))+real(38772902461440.L))-
+        real(1360928876396544.L))+real(14919812867162112.L))-
+        real(91383853811367936.L))+real(369265368462262272.L))-
+        real(1059928372437975040.L))+real(2235485294596456448.L))-
+        real(3482198247352172544.L))+real(3869109163724636160.L))-
+        real(2617338551931371520.L))+real(763390410979983360.L))/
+        real(1646367392880685750275.L);
+      _C4x[165] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(56632541184.L)*_n+real(445279371264.L))+real(5501075062784.L))+
+        real(191308975570944.L))-real(6207447116021760.L))+
+        real(62207244709134336.L))-real(343558934130327552.L))+
+        real(1230884561540874240.L))-real(3068508179679674368.L))+
+        real(5483031228682076160.L))-real(7044447029126234112.L))+
+        real(6362535069236068352.L))-real(3823590232386699264.L))+
+        real(1365567940138106880.L))-real(218111545994280960.L))/
+        real(1646367392880685750275.L);
+      _C4x[166] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(2391044784128.L)*_n+real(78145847820288.L))-
+        real(2362062434992128.L))+real(21806224685137920.L))-
+        real(109329533708009472.L))+real(348468691379159040.L))-
+        real(749907814303924224.L))+real(1099803348493664256.L))-
+        real(1045479927285022720.L))+real(505852702924734464.L))+
+        real(120187917227261952.L))-real(381491995975090176.L))+
+        real(260108179073925120.L))-real(67736504967168000.L))/
+        real(235195341840097964325.L);
+      _C4x[167] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(41240607786008576.L)-real(4816557198802944.L)*_n)*_n-
+        real(188906347105878016.L))+real(537899510193979392.L))-
+        real(995896220956229632.L))+real(1162322253485441024.L))-
+        real(683754595921428480.L))-real(170867380692975616.L))+
+        real(680936272925032448.L))-real(561807627048714240.L))+
+        real(213368433485545472.L))-real(27455863346692096.L))-
+        real(2438514178818048.L))/real(235195341840097964325.L);
+      _C4x[168] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(5015157907517341696.L)-real(1963496830352752640.L)*_n)*_n-
+        real(7959455151219539968.L))+real(7066414745468796928.L))-
+        real(1205923638707486720.L))-real(4741698503339671552.L))+
+        real(5382302573200408576.L))-real(2064785082675101696.L))-
+        real(228174121518235648.L))+real(229963148852985856.L))+
+        real(144056081552244736.L))-real(84715788878938112.L))/
+        real(1646367392880685750275.L);
+      _C4x[169] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(5101546684427010048.L)-
+        real(8209118419716407296.L)*_n)*_n+real(2084680626216108032.L))-
+        real(6225070833373020160.L))+real(3866278385824038912.L))-
+        real(42589676569624576.L))-real(532652706878193664.L))-
+        real(500488835704553472.L))+real(605816413569941504.L))-
+        real(175110895664889856.L))+real(6343874051407872.L))/
+        real(1646367392880685750275.L);
+      _C4x[170] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(638926083481141248.L)*
+        _n-real(865003604119912448.L))+real(264318996107493376.L))+
+        real(119786763567759360.L))+real(27135460419567616.L))-
+        real(144009119639011328.L))+real(51310560333004800.L))+
+        real(9657211345174528.L))+real(958005652750336.L))-
+        real(3916209768824832.L))/real(235195341840097964325.L);
+      _C4x[171] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(257519614605393920.L)*_n+
+        real(707084672843644928.L))+real(951638781007495168.L))-
+        real(867584213670952960.L))-real(45673240443486208.L))-
+        real(11628525625278464.L))+real(234906617891520512.L))-
+        real(111448526733967360.L))+real(9405754953728000.L))/
+        real(1646367392880685750275.L);
+      _C4x[172] = (_n*(_n*(_n*(_n*(_n*(_n*(real(1297245565824532480.L)*_n-
+        real(412672078605975552.L))-real(161685655913234432.L))-
+        real(280630559576686592.L))+real(276405190496354304.L))-
+        real(14057077774745600.L))-real(7771762209849344.L))-
+        real(10626569204170752.L))/real(1646367392880685750275.L);
+      _C4x[173] = (_n*(_n*(_n*(_n*((-real(110445053607936.L)*_n-
+        real(64128886153674752.L))*_n+real(19890493406052352.L))+
+        real(2558162612256768.L))+real(14116845844955136.L))-
+        real(9969001956900864.L))+real(1226698065543168.L))/
+        real(235195341840097964325.L);
+      _C4x[174] = (_n*(_n*(_n*((-real(28684297699328.L)*_n-
+        real(9693923228254208.L))*_n+real(23620418839511040.L))-
+        real(4911054773551104.L))-real(886809947013120.L))-
+        real(629766424559616.L))/real(235195341840097964325.L);
+      _C4x[175] = (_n*(_n*(_n*(real(140945199254732800.L)*_n-
+        real(105404375236608.L))+real(46148979941965824.L))-
+        real(44976731928920064.L))+real(7137650489131008.L))/
+        real(1646367392880685750275.L);
+      _C4x[176] = (_n*(_n*(real(96129231059681280.L)*_n-
+        real(34421773029081088.L))-real(3412639660638208.L))-
+        real(1802629157683200.L))/real(1646367392880685750275.L);
+      _C4x[177] = (_n*(real(10114609184768.L)*_n-real(12593113071616.L))+
+        real(2426416627712.L))/real(689722410088263825.L);
+      _C4x[178] = (-real(3482423656448.L)*_n-real(1549836288000.L))/
+        real(4045128729436574325.L);
+      _C4x[179] = real(248348672.L)/real(87234019741575.L);
+      _C4x[180] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(1693450240.L)*_n-real(15410397184.L))*_n-real(222858051584.L))-
+        real(9192894627840.L))+real(359358608179200.L))-
+        real(4420110880604160.L))+real(30646102105522176.L))-
+        real(141738222238040064.L))+real(472460740793466880.L))-
+        real(1181151851983667200.L))+real(2253274302245765120.L))-
+        real(3267247738256359424.L))+real(3459438781683204096.L))-
+        real(2275946566896844800.L))+real(654334637982842880.L))/
+        real(1840057674396060544425.L);
+      _C4x[181] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(61641588736.L)*_n-real(2381668417536.L))*_n+
+        real(86500760879104.L))-real(978983583744000.L))+
+        real(6172754149638144.L))-real(25594546813403136.L))+
+        real(75155917068304384.L))-real(161986539700617216.L))+
+        real(259593813622784000.L))-real(307359075329376256.L))+
+        real(261304078747828224.L))-real(150284725687156736.L))+
+        real(52021635814785024.L))-real(8128380596060160.L))/
+        real(87621794018860025925.L);
+      _C4x[182] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(5285432285724672.L)*_n-real(55412982395961344.L))+
+        real(319743695216705536.L))-real(1193876712442036224.L))+
+        real(3086708369231183872.L))-real(5661769139308986368.L))+
+        real(7282574686883414016.L))-real(6102012183017160704.L))+
+        real(2354179944623374336.L))+real(1282935130412285952.L))-
+        real(2502320409336086528.L))+real(1588104937790242816.L))-
+        real(403980515624189952.L))/real(1840057674396060544425.L);
+      _C4x[183] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(603798871570644992.L)*_n-real(2039337822724292608.L))+
+        real(4644753579465244672.L))-real(7165143090901024768.L))+
+        real(6988672051322028032.L))-real(2940454207150358528.L))-
+        real(2288935641272025088.L))+real(4598992935197868032.L))-
+        real(3296581035499716608.L))+real(1134355847674068992.L))-
+        real(119988600614944768.L))-real(17701806631419904.L))/
+        real(1840057674396060544425.L);
+      _C4x[184] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(5968264113194795008.L)*_n-real(7626405621199798272.L))+
+        real(5068461112891015168.L))+real(912357630233018368.L))-
+        real(5219403061313667072.L))+real(4490483850622271488.L))-
+        real(1279758793422405632.L))-real(376269579253972992.L))+
+        real(166908374111223808.L))+real(152899952527802368.L))-
+        real(76584293960810496.L))/real(1840057674396060544425.L);
+      _C4x[185] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(341776000018808832.L)*
+        _n+real(567344213465759744.L))-real(827921502658625536.L))+
+        real(360134481241178112.L))+real(68079636942159872.L))-
+        real(53432144046850048.L))-real(82107844175855616.L))+
+        real(76293255540506624.L))-real(19398007076159488.L))+
+        real(404460020760576.L))/real(262865382056580077775.L);
+      _C4x[186] = (_n*(_n*(_n*(_n*(_n*(_n*((real(71849889235468288.L)-
+        real(680728882055217152.L)*_n)*_n+real(124968317697916928.L))+
+        real(69475315626803200.L))-real(133450238712086528.L))+
+        real(32481179049918464.L))+real(11309002154573824.L))+
+        real(2197304911593472.L))-real(3757781191393280.L))/
+        real(262865382056580077775.L);
+      _C4x[187] = (_n*(_n*(_n*(_n*(_n*(_n*(real(323066502771113984.L)*_n+
+        real(1137036911978741760.L))-real(624204446930305024.L))-
+        real(133699938788835328.L))-real(51609859484811264.L))+
+        real(227350919581270016.L))-real(93239859434487808.L))+
+        real(6531637533474816.L))/real(1840057674396060544425.L);
+      _C4x[188] = (_n*(_n*(_n*(_n*((-real(16269578710548480.L)*_n-
+        real(18971230665703424.L))*_n-real(46510233582829568.L))+
+        real(32607942700695552.L))+real(726848479690752.L))-
+        real(623885324648448.L))-real(1550951395917824.L))/
+        real(262865382056580077775.L);
+      _C4x[189] = (_n*(_n*(_n*((real(67157483088510976.L)-
+        real(433933481381199872.L)*_n)*_n+real(14001368954044416.L))+
+        real(101779908304306176.L))-real(61181036681232384.L))+
+        real(6527114028187648.L))/real(1840057674396060544425.L);
+      _C4x[190] = (_n*(_n*((real(152140918225895424.L)-
+        real(95773494987456512.L)*_n)*_n-real(20248671783223296.L))-
+        real(5382884572004352.L))-real(4859128704303104.L))/
+        real(1840057674396060544425.L);
+      _C4x[191] = (_n*(_n*(real(7095719106183168.L)*_n+
+        real(49228189624434688.L))-real(40728868243374080.L))+
+        real(5687198492000256.L))/real(1840057674396060544425.L);
+      _C4x[192] = ((-real(329029822447616.L)*_n-real(46948345708544.L))*_n-
+        real(28862909874176.L))/real(23896852914234552525.L);
+      _C4x[193] = (real(1671067926528.L)-real(9780355661824.L)*_n)/
+        real(645860889573906825.L);
+      _C4x[194] = -real(1494646784.L)/real(2827408522212225.L);
+      _C4x[195] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(48432676864.L)*_n+real(2190647230464.L))-real(94380384845824.L))+
+        real(1287005247897600.L))-real(9961420618727424.L))+
+        real(51862634332422144.L))-real(196645821843767296.L))+
+        real(566952888952160256.L))-real(1272009686751641600.L))+
+        real(2238737048682889216.L))-real(3061802140110422016.L))+
+        real(3115517967129903104.L))-real(2002832978869223424.L))+
+        real(568986641724211200.L))/real(2033747955911435338575.L);
+      _C4x[196] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(6610643125796864.L)-real(523788223512576.L)*_n)*_n-
+        real(46881311163416576.L))+real(220938352327655424.L))-
+        real(747159252333756416.L))+real(1886699773214326784.L))-
+        real(3625669618330238976.L))+real(5320634804012580864.L))-
+        real(5890153090652307456.L))+real(4761648149984968704.L))-
+        real(2639749213528784896.L))+real(890147990608543744.L))-
+        real(136556794013810688.L))/real(2033747955911435338575.L);
+      _C4x[197] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(544038581413347328.L)-real(126941576636137472.L)*_n)*_n-
+        real(1643991086401585152.L))+real(3618678115535945728.L))-
+        real(5834843432180252672.L))+real(6716211146048667648.L))-
+        real(5007540727675092992.L))+real(1447244351603212288.L))+
+        real(1545584596293255168.L))-real(2323890249119301632.L))+
+        real(1396611502506508288.L))-real(348978473590849536.L))/
+        real(2033747955911435338575.L);
+      _C4x[198] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(5266727356965322752.L)-
+        real(2756463006190665728.L)*_n)*_n-real(6963465468539568128.L))+
+        real(5719909963527094272.L))-real(1423154789952258048.L))-
+        real(2959880191536529408.L))+real(4297713798518669312.L))-
+        real(2757397451341037568.L))+real(867914543982968832.L))-
+        real(72281205021605888.L))-real(17265801541976064.L))/
+        real(2033747955911435338575.L);
+      _C4x[199] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(444126663286980608.L)-
+        real(966912165446418432.L)*_n)*_n+real(345651087915614208.L))-
+        real(744445050127122432.L))+real(517074840215093248.L))-
+        real(101080804666376192.L))-real(62394006286368768.L))+
+        real(15643139282829312.L))+real(22275238818480128.L))-
+        real(9905955262562304.L))/real(290535422273062191225.L);
+      _C4x[200] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(710218084304027648.L)*_n-
+        real(709090024339013632.L))+real(203844154306854912.L))+
+        real(103854010636697600.L))-real(28133857492467712.L))-
+        real(87328827277049856.L))+real(66685395475103744.L))-
+        real(15096625990991872.L))+real(81976993775616.L))/
+        real(290535422273062191225.L);
+      _C4x[201] = (_n*(_n*(_n*(_n*(_n*((real(99169604814766080.L)-
+        real(53149231795404800.L)*_n)*_n+real(100260298685939712.L))-
+        real(117838563713744896.L))+real(17846031391653888.L))+
+        real(11511359778848768.L))+real(3169950864769024.L))-
+        real(3570017709326336.L))/real(290535422273062191225.L);
+      _C4x[202] = (_n*(_n*(_n*(_n*(_n*(real(1171712691992002560.L)*_n-
+        real(394057564356083712.L))-real(173652682823696384.L))-
+        real(88988577844690944.L))+real(215927395247456256.L))-
+        real(78039665264820224.L))+real(4471199881494528.L))/
+        real(2033747955911435338575.L);
+      _C4x[203] = (_n*(_n*(_n*((-real(65920966719438848.L)*_n-
+        real(348661929545302016.L))*_n+real(181886268409380864.L))+
+        real(17649366208610304.L))-real(1074337604960256.L))-
+        real(10834137276612608.L))/real(2033747955911435338575.L);
+      _C4x[204] = (_n*(_n*(_n*(real(11011782881574912.L)*_n+
+        real(4327721945530368.L))+real(102469660183625728.L))-
+        real(53519316930265088.L))+real(4966146828926976.L))/
+        real(2033747955911435338575.L);
+      _C4x[205] = (_n*(_n*(real(136016599216816128.L)*_n-
+        real(9313406913871872.L))-real(4221217831649280.L))-
+        real(5125342338744320.L))/real(2033747955911435338575.L);
+      _C4x[206] = (_n*(real(668758276308992.L)*_n-real(477170401017856.L))+
+        real(59038150950912.L))/real(26412311115732926475.L);
+      _C4x[207] = (-real(1208684118016.L)*_n-real(883938951168.L))/
+        real(713846246371160175.L);
+      _C4x[208] = real(287309824.L)/real(148810974853275.L);
+      _C4x[209] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(24678311657472.L)*_n-real(369489166204928.L))+
+        real(3157452874842112.L))-real(18268120204443648.L))+
+        real(77583127781834752.L))-real(253026791743029248.L))+
+        real(650640321624932352.L))-real(1337427327784583168.L))+
+        real(2202821481056960512.L))-real(2869464824008409088.L))+
+        real(2823917763309862912.L))-real(1780295981217087488.L))+
+        real(500708244717305856.L))/real(2227438237426810132725.L);
+      _C4x[210] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(16378172836675584.L)*_n-real(86489256255553536.L))+
+        real(331081487162015744.L))-real(958553485744275456.L))+
+        real(2147642037233516544.L))-real(3759255191610720256.L))+
+        real(5128576652808290304.L))-real(5366271878665076736.L))+
+        real(4157204449212760064.L))-real(2233786281215655936.L))+
+        real(736674199124312064.L))-real(111268498826067968.L))/
+        real(2227438237426810132725.L);
+      _C4x[211] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(809529512386625536.L)*_n-real(2078719438869233664.L))+
+        real(4020052597896380416.L))-real(5821051415941873664.L))+
+        real(6081044383317098496.L))-real(4051450217369698304.L))+
+        real(757849373588586496.L))+real(1691002138898989056.L))-
+        real(2149173164502941696.L))+real(1237691866808320000.L))-
+        real(305029160574910464.L))/real(2227438237426810132725.L);
+      _C4x[212] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(802909617603477504.L)*
+        _n-real(926237361266753536.L))+real(637684875184308224.L))-
+        real(31906892208930816.L))-real(475861484333694976.L))+
+        real(562832578407563264.L))-real(329572016845750272.L))+
+        real(95466227731791872.L))-real(5760893052780544.L))-
+        real(2333933234552832.L))/real(318205462489544304675.L);
+      _C4x[213] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(194647213882736640.L)*_n+
+        real(485794295631052800.L))-real(701841324407521280.L))+
+        real(405140857159680000.L))-real(42948328433909760.L))-
+        real(63702075858485248.L))+real(8627437810221056.L))+
+        real(22169150944182272.L))-real(8993358434795520.L))/
+        real(318205462489544304675.L);
+      _C4x[214] = (_n*(_n*(_n*(_n*(_n*((real(598890563890053120.L)-
+        real(3987743082702438400.L)*_n)*_n+real(802552761320210432.L))-
+        real(31290010082738176.L))-real(620350774462906368.L))+
+        real(405987260408791040.L))-real(82481975532716032.L))-
+        real(877636051009536.L))/real(2227438237426810132725.L);
+      _C4x[215] = (_n*(_n*(_n*(_n*(_n*(real(60307593536471040.L)*_n+
+        real(119290583037509632.L))-real(100276895844663296.L))+
+        real(6844801282473984.L))+real(10874506180558848.L))+
+        real(3907787251777536.L))-real(3372178159960064.L))/
+        real(318205462489544304675.L);
+      _C4x[216] = (_n*(_n*(_n*((-real(197900536584863744.L)*_n-
+        real(180300611814686720.L))*_n-real(120607123473170432.L))+
+        real(202315081944399872.L))-real(65390123583275008.L))+
+        real(2978975313821696.L))/real(2227438237426810132725.L);
+      _C4x[217] = (_n*(_n*((real(139684621842382848.L)-
+        real(353014314325508096.L)*_n)*_n+real(25349864640479232.L))+
+        real(1911343804317696.L))-real(10650881074921472.L))/
+        real(2227438237426810132725.L);
+      _C4x[218] = (_n*((real(101318852092100608.L)-real(8027178214096896.L)*_n)*
+        _n-real(46764643938467840.L))+real(3772359809433600.L))/
+        real(2227438237426810132725.L);
+      _C4x[219] = ((-real(152769050705920.L)*_n-real(418140072706048.L))*_n-
+        real(751457599750144.L))/real(318205462489544304675.L);
+      _C4x[220] = (real(14058862411776.L)-real(127643206811648.L)*_n)/
+        real(8600147634852548775.L);
+      _C4x[221] = -real(15328083968.L)/real(12549725545959525.L);
+      _C4x[222] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(6238128780083200.L)-real(980277379727360.L)*_n)*_n-
+        real(29319205266391040.L))+real(106615291877785600.L))-
+        real(308569258223206400.L))+real(722933690694369280.L))-
+        real(1382079114562764800.L))+real(2153133778476728320.L))-
+        real(2691417223095910400.L))+real(2574399082961305600.L))-
+        real(1596127431436009472.L))+real(445073995304271872.L))/
+        real(2421128518942184926875.L);
+      _C4x[223] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(151302978047836160.L)-
+        real(46340385223475200.L)*_n)*_n-real(387095521279344640.L))+
+        real(786492807006126080.L))-real(1273690921338142720.L))+
+        real(1633874904665292800.L))-real(1629398535063470080.L))+
+        real(1216988657399889920.L))-real(636578682332250112.L))+
+        real(205951926636904448.L))-real(30694758296846336.L))/
+        real(807042839647394975625.L);
+      _C4x[224] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(613398131937116160.L)-
+        real(353176552923463680.L)*_n)*_n-real(810035007203573760.L))+
+        real(775741322412687360.L))-real(461596370613043200.L))+
+        real(33697887934218240.L))+real(251349543319240704.L))-
+        real(283518236668985344.L))+real(157807320410095616.L))-
+        real(38474535745355776.L))/real(345875502706026418125.L);
+      _C4x[225] = (_n*(_n*(_n*(_n*(_n*(_n*((real(3297227422469980160.L)-
+        real(5830281188815667200.L)*_n)*_n+real(696358578704875520.L))-
+        real(3494674226898534400.L))+real(3569076415464734720.L))-
+        real(1933285643597643776.L))+real(517156926346231808.L))-
+        real(18722902421536768.L))-real(15212358217498624.L))/
+        real(2421128518942184926875.L);
+      _C4x[226] = (_n*(_n*(_n*(_n*(_n*(_n*(real(3963714898734612480.L)*_n-
+        real(4459891610489978880.L))+real(2163224956643573760.L))-
+        real(17999754952704000.L))-real(426158455900864512.L))+
+        real(19812801107197952.L))+real(152060329126264832.L))-
+        real(57338888665956352.L))/real(2421128518942184926875.L);
+      _C4x[227] = (_n*(_n*(_n*(_n*(_n*(real(1225959357284352.L)*_n+
+        real(110230452085719040.L))+real(15775238516113408.L))-
+        real(87216323486023680.L))+real(50306500832264192.L))-
+        real(9214092459900928.L))-real(257530269794304.L))/
+        real(345875502706026418125.L);
+      _C4x[228] = (_n*(_n*(_n*(_n*(real(128353505483161600.L)*_n-
+        real(82721016702304256.L))-real(1180765631021056.L))+
+        real(9787003046461440.L))+real(4450057961078784.L))-
+        real(3175164028125184.L))/real(345875502706026418125.L);
+      _C4x[229] = (_n*(_n*((-real(165619962893828096.L)*_n-
+        real(145512823517085696.L))*_n+real(187715111434059776.L))-
+        real(54870384553492480.L))+real(1889580991119360.L))/
+        real(2421128518942184926875.L);
+      _C4x[230] = (_n*(_n*(real(102718373275631616.L)*_n+
+        real(29542937545146368.L))+real(4515145522872320.L))-
+        real(10367884381388800.L))/real(2421128518942184926875.L);
+      _C4x[231] = (_n*(real(14110835341262848.L)*_n-real(5835412345978880.L))+
+        real(407436955484160.L))/real(345875502706026418125.L);
+      _C4x[232] = (-real(43854032011264.L)*_n-real(143292457025536.L))/
+        real(65435905917356349375.L);
+      _C4x[233] = real(2902458368.L)/real(2407236357920625.L);
+      _C4x[234] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(10693935051571200.L)*_n-real(42872957797662720.L))+
+        real(137779761811292160.L))-real(361671874754641920.L))+
+        real(784128938543677440.L))-real(1410056424574156800.L))+
+        real(2094940973653032960.L))-real(2527591826907463680.L))+
+        real(2359085705113632768.L))-real(1441663486458331136.L))+
+        real(399031857859002368.L))/real(2614818800457559721025.L);
+      _C4x[235] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(583395287582638080.L)*
+        _n-real(1348482775174348800.L))+real(2524611517895147520.L))-
+        real(3827547376881500160.L))+real(4657607980823347200.L))-
+        real(4456128626231869440.L))+real(3224387411622494208.L))-
+        real(1647615413095235584.L))+real(524241267803029504.L))-
+        real(77231972488839168.L))/real(2614818800457559721025.L);
+      _C4x[236] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(4452734606172487680.L)*_n-
+        real(5424760468222771200.L))+real(4796408446310154240.L))-
+        real(2535397130030284800.L))-real(157731504909189120.L))+
+        real(1777430131548094464.L))-real(1832820339751518208.L))+
+        real(992313828341448704.L))-real(239887187275939840.L))/
+        real(2614818800457559721025.L);
+      _C4x[237] = (_n*(_n*(_n*(_n*(_n*(_n*(real(2258184011450941440.L)*_n+
+        real(1381255217110056960.L))-real(3518150036095500288.L))+
+        real(3209311024414982144.L))-real(1623888280732827648.L))+
+        real(401705515572264960.L))-real(4048195118170112.L))-
+        real(14042176816152576.L))/real(2614818800457559721025.L);
+      _C4x[238] = (_n*(_n*(_n*(_n*((real(228921349727322112.L)-
+        real(562937157774213120.L)*_n)*_n+real(24711961115623424.L))-
+        real(55887751173636096.L))-real(1855106299461632.L))+
+        real(21069521020256256.L))-real(7486450123669504.L))/
+        real(373545542922508531575.L);
+      _C4x[239] = (_n*(_n*(_n*(_n*(real(97291441461526528.L)*_n+
+        real(32123246891499520.L))-real(84057876275920896.L))+
+        real(43581287092453376.L))-real(7209389563838464.L))-
+        real(339898250821632.L))/real(373545542922508531575.L);
+      _C4x[240] = (_n*(_n*((-real(66288410624524288.L)*_n-
+        real(6852777288400896.L))*_n+real(8491519040290816.L))+
+        real(4834380761530368.L))-real(2984972570853376.L))/
+        real(373545542922508531575.L);
+      _C4x[241] = (_n*((real(172942003544260608.L)-real(163896815303786496.L)*
+        _n)*_n-real(46114698784931840.L))+real(1089589582233600.L))/
+        real(2614818800457559721025.L);
+      _C4x[242] = (_n*(real(31258382748876800.L)*_n+real(6726498337685504.L))-
+        real(10025808311615488.L))/real(2614818800457559721025.L);
+      _C4x[243] = (real(3398493536256.L)-real(56733296754688.L)*_n)/
+        real(4157104611220285725.L);
+      _C4x[244] = -real(582454607872.L)/real(288579494587524525.L);
+      _C4x[245] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(170026089043722240.L)-
+        real(58554903114547200.L)*_n)*_n-real(411313112466063360.L))+
+        real(834996544104038400.L))-real(1424795690336256000.L))+
+        real(2031882549696921600.L))-real(2377302583145398272.L))+
+        real(2171856680898265088.L))-real(1310603169507573760.L))+
+        real(360415871614582784.L))/real(2808509081972934515175.L);
+      _C4x[246] = (_n*(_n*(_n*(_n*(_n*(_n*((real(2647511501069352960.L)-
+        real(1516151007703203840.L)*_n)*_n-real(3792386420417495040.L))+
+        real(4408366847754240000.L))-real(4067729748271300608.L))+
+        real(2862696747795218432.L))-real(1433061071832219648.L))+
+        real(449349658116882432.L))-real(65530158475378688.L))/
+        real(2808509081972934515175.L);
+      _C4x[247] = (_n*(_n*(_n*(_n*(_n*((real(4198570027269488640.L)-
+        real(5118317585309368320.L)*_n)*_n-real(1949569984921337856.L))-
+        real(453045651958136832.L))+real(1762571242759520256.L))-
+        real(1694325356766429184.L))+real(896675218674679808.L))-
+        real(215313377847672832.L))/real(2808509081972934515175.L);
+      _C4x[248] = (_n*(_n*(_n*(_n*(_n*(real(267933980987228160.L)*_n-
+        real(492793387607392256.L))+real(410379639039459328.L))-
+        real(195380945828708352.L))+real(44674453442920448.L))+
+        real(845227552145408.L))-real(1843374562738176.L))/
+        real(401215583138990645025.L);
+      _C4x[249] = (_n*(_n*(_n*(_n*(real(163502924524158976.L)*_n+
+        real(42469753851215872.L))-real(49912274105663488.L))-
+        real(5582142956371968.L))+real(20297667682762752.L))-
+        real(6866083684286464.L))/real(401215583138990645025.L);
+      _C4x[250] = (_n*(_n*(_n*(real(44734128792272896.L)*_n-
+        real(79835715386474496.L))+real(37744834022211584.L))-
+        real(5635422294114304.L))-real(388978276564992.L))/
+        real(401215583138990645025.L);
+      _C4x[251] = (_n*((real(49953188366778368.L)-real(74946983894188032.L)*_n)*
+        _n+real(35654638795489280.L))-real(19632924991160320.L))/
+        real(2808509081972934515175.L);
+      _C4x[252] = (_n*(real(9324812086280192.L)*_n-real(2283208909520896.L))+
+        real(29408983252992.L))/real(165206416586643206775.L);
+      _C4x[253] = (real(503944082096128.L)*_n-real(567753001926656.L))/
+        real(165206416586643206775.L);
+      _C4x[254] = real(58116276224.L)/real(103318584481953225.L);
+      _C4x[255] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(202480048417013760.L)*_n-
+        real(456912214519971840.L))+real(876525472752599040.L))-
+        real(1429117618618368000.L))+real(1966465843218874368.L))-
+        real(2239586099221495808.L))+real(2007904778612375552.L))-
+        real(1198265754978353152.L))+real(327650792376893440.L))/
+        real(3002199363488309309325.L);
+      _C4x[256] = (_n*(_n*(_n*(_n*(_n*(_n*(real(911160217876561920.L)*_n-
+        real(1242217413743738880.L))+real(1387196835138895872.L))-
+        real(1239838929574690816.L))+real(851381763539206144.L))-
+        real(418521095293894656.L))+real(129542243781443584.L))-
+        real(18722902421536768.L))/real(1000733121162769769775.L);
+      _C4x[257] = (_n*(_n*(_n*(_n*(_n*(real(520911200075120640.L)*_n-
+        real(208391508259241984.L))-real(96144337569579008.L))+
+        real(246667260368781312.L))-real(224103568074866688.L))+
+        real(116374488232230912.L))-real(27795196838150144.L))/
+        real(428885623355472758475.L);
+      _C4x[258] = (_n*(_n*(_n*((real(366345454624964608.L)-
+        real(474676418299559936.L)*_n)*_n-real(165014498938191872.L))+
+        real(34798031190622208.L))+real(1805466812284928.L))-
+        real(1690455104290816.L))/real(428885623355472758475.L);
+      _C4x[259] = (_n*(_n*(_n*(real(373610477705494528.L)*_n-
+        real(305608638465048576.L))-real(59551336466743296.L))+
+        real(136262682188709888.L))-real(44230139344584704.L))/
+        real(3002199363488309309325.L);
+      _C4x[260] = (_n*((real(13465169149558784.L)-real(30897376252133376.L)*_n)*
+        _n-real(1808696627691520.L))-real(171154983616512.L))/
+        real(176599962558135841725.L);
+      _C4x[261] = (_n*(real(341673238331392.L)*_n+real(309100206358528.L))-
+        real(155043755982848.L))/real(25228566079733691675.L);
+      _C4x[262] = (real(3810709733376.L)-real(1924351507038208.L)*_n)/
+        real(176599962558135841725.L);
+      _C4x[263] = -real(1476797661184.L)/real(478590684439392525.L);
+      _C4x[264] = (_n*(_n*(_n*(_n*(_n*((real(909770194660884480.L)-
+        real(498207487552389120.L)*_n)*_n-real(1425306638302052352.L))+
+        real(1900408851069403136.L))-real(2113385705068560384.L))+
+        real(1863415352856150016.L))-real(1101109072142270464.L))+
+        real(299566438744588288.L))/real(3195889645003684103475.L);
+      _C4x[265] = (_n*(_n*(_n*(_n*((real(560302913537179648.L)-
+        real(519868682663362560.L)*_n)*_n-real(486804237712359424.L))+
+        real(327052722979209216.L))-real(158186669168656384.L))+
+        real(48400398775484416.L))-real(6939763059720192.L))/
+        real(456555663571954871925.L);
+      _C4x[266] = (_n*(_n*(_n*((-real(1048899801879412736.L)*_n-
+        real(835131033220284416.L))*_n+real(1677679165723115520.L))-
+        real(1455141654393520128.L))+real(743713444598906880.L))-
+        real(176874986701586432.L))/real(3195889645003684103475.L);
+      _C4x[267] = (_n*(_n*(_n*(real(134470959271772160.L)*_n-
+        real(57546136495325184.L))+real(11146092968148992.L))+
+        real(1006087499153408.L))-real(637989474533376.L))/
+        real(187993508529628476675.L);
+      _C4x[268] = (_n*((-real(15454666720542720.L)*_n-real(4436117101215744.L))*
+        _n+real(7664351959842816.L))-real(2402175208652800.L))/
+        real(187993508529628476675.L);
+      _C4x[269] = (_n*(real(1667752980905984.L)*_n-real(200351634423808.L))-
+        real(25132001132544.L))/real(26856215504232639525.L);
+      _C4x[270] = (real(314116728160256.L)*_n-real(145792664862720.L))/
+        real(26856215504232639525.L);
+      _C4x[271] = -real(2147483648.L)/real(26814079094227425.L);
+      _C4x[272] = (_n*(_n*(_n*(_n*(_n*(real(55044919340826624.L)*_n-
+        real(83246945916682240.L))+real(107933971257491456.L))-
+        real(117508759030333440.L))+real(102078315925340160.L))-
+        real(59788727899127808.L))+real(16192780472680448.L))/
+        real(199387054501121111625.L);
+      _C4x[273] = (_n*(_n*(_n*(_n*(real(217227076325867520.L)*_n-
+        real(184013716268777472.L))+real(121227891471024128.L))-
+        real(57787857254744064.L))+real(17499139872915456.L))-
+        real(2491196995796992.L))/real(199387054501121111625.L);
+      _C4x[274] = (_n*(_n*((real(95351263268438016.L)-real(56045268763672576.L)*
+        _n)*_n-real(79560042910580736.L))+real(40119152072982528.L))-
+        real(9509081215664128.L))/real(199387054501121111625.L);
+      _C4x[275] = (_n*((real(8639412615249920.L)-real(48866969662783488.L)*_n)*
+        _n+real(1175652807999488.L))-real(585000315518976.L))/
+        real(199387054501121111625.L);
+      _C4x[276] = ((real(1044982722985984.L)-real(735504559505408.L)*_n)*_n-
+        real(317834022354944.L))/real(28483864928731587375.L);
+      _C4x[277] = (-real(8108898254848.L)*_n-real(1327144894464.L))/
+        real(1499150785722715125.L);
+      _C4x[278] = -real(2407329169408.L)/real(499716928574238375.L);
+      _C4x[279] = (_n*(_n*(_n*((real(104155911865499648.L)-
+        real(82368195607920640.L)*_n)*_n-real(111257451310874624.L))+
+        real(95363529695035392.L))-real(55413942930898944.L))+
+        real(14947181974781952.L))/real(210780600472613746575.L);
+      _C4x[280] = (_n*(_n*((real(36522202861928448.L)-real(56425837225836544.L)*
+        _n)*_n-real(17182617963069440.L))+real(5154785388920832.L))-
+        real(729130828038144.L))/real(70260200157537915525.L);
+      _C4x[281] = (_n*(_n*(real(91775548375695360.L)*_n-
+        real(74104609810939904.L))+real(36942628620599296.L))-
+        real(8732613405573120.L))/real(210780600472613746575.L);
+      _C4x[282] = (_n*(real(50027779063808.L)*_n+real(9620726743040.L))-
+        real(4037269258240.L))/real(1584816544906870275.L);
+      _C4x[283] = (real(52432960749568.L)*_n-real(15539191676928.L))/
+        real(1584816544906870275.L);
+      _C4x[284] = -real(3058016714752.L)/real(3697905271449363975.L);
+      _C4x[285] = (_n*(_n*(_n*(real(5288650929602560.L)*_n-
+        real(5553083476082688.L))+real(4702611231997952.L))-
+        real(2713044941537280.L))+real(729130828038144.L))/
+        real(11693376128637177975.L);
+      _C4x[286] = (_n*(_n*(real(5231476324958208.L)*_n-
+        real(2432119720640512.L))+real(723478651076608.L))-
+        real(101739185307648.L))/real(11693376128637177975.L);
+      _C4x[287] = ((real(256735965085696.L)-real(520068999938048.L)*_n)*_n-
+        real(60559038873600.L))/real(1670482304091025425.L);
+      _C4x[288] = (real(70368744177664.L)*_n-real(25975962206208.L))/
+        real(11693376128637177975.L);
+      _C4x[289] = -real(33775622815744.L)/real(3897792042879059325.L);
+      _C4x[290] = (_n*((real(4417837720403968.L)-real(5274357278441472.L)*_n)*
+        _n-real(2532175278768128.L))+real(678261235384320.L))/
+        real(12293036442926264025.L);
+      _C4x[291] = ((real(646512837132288.L)-real(2190227162529792.L)*_n)*_n-
+        real(90434831384576.L))/real(12293036442926264025.L);
+      _C4x[292] = (real(1666859627708416.L)*_n-real(392525651116032.L))/
+        real(12293036442926264025.L);
+      _C4x[293] = -real(274877906944.L)/real(141299269458922575.L);
+      _C4x[294] = (_n*(real(4160551999504384.L)*_n-real(2370547069485056.L))+
+        real(633043819692032.L))/real(12892696757215350075.L);
+      _C4x[295] = (real(193514046488576.L)*_n-real(26938034880512.L))/
+        real(4297565585738450025.L);
+      _C4x[296] = -real(364762982514688.L)/real(12892696757215350075.L);
+      _C4x[297] = (real(53876069761024.L)-real(202310139510784.L)*_n)/
+        real(1226577915591312375.L);
+      _C4x[298] = -real(2199023255552.L)/real(408859305197104125.L);
+      _C4x[299] = real(2199023255552.L)/real(55699673461634475.L);
+      break;
+    case 27:
+      _C4x[0] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(73279454609476440.L)*_n+
+        real(82454378140777500.L))+real(93228416884505760.L))+
+        real(105966020354191140.L))+real(121136129312638440.L))+
+        real(139348903999503660.L))+real(161407996910622000.L))+
+        real(188386190679968820.L))+real(221736856015657080.L))+
+        real(263461533222904380.L))+real(316367601760566720.L))+
+        real(384474516028466500.L))+real(473672603747070728.L))+
+        real(592826271149284172.L))+real(755690631355131472.L))+
+        real(984386480317868628.L))+real(1316024706307311000.L))+
+        real(1816114094704089180.L))+real(2607753571882794720.L))+
+        real(3941263921141042020.L))+real(6381093967561687080.L))+
+        real(11394810656360155500.L))+real(23701206165229123440.L))+
+        real(65178316954380089460.L))+real(391069901726280536760.L))-
+        real(1368744656041981878660.L))+real(3421861640104954696650.L))/
+        real(5132792460157432044975.L);
+      _C4x[1] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(399778803106800.L)*_n+
+        real(490891181489280.L))+real(608126372190480.L))+
+        real(760666432104480.L))+real(961579556063280.L))+
+        real(1229775214557120.L))+real(1593117891585360.L))+
+        real(2093502967889760.L))+real(2795347832603760.L))+
+        real(3800211432559360.L))+real(5272793362676112.L))+
+        real(7488894920902304.L))+real(10927673200908464.L))+
+        real(16457872189222464.L))+real(25735594256676304.L))+
+        real(42112790601833952.L))+real(72887522195481840.L))+
+        real(135467718019885440.L))+real(276579924290599440.L))+
+        real(643471660594455840.L))+real(1823169705017624880.L))+
+        real(7292678820070499520.L))+real(71103618495687370320.L))-
+        real(521426535635040715680.L))+real(782139803452561073520.L))-
+        real(342186164010495469665.L))/real(1710930820052477348325.L);
+      _C4x[2] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(3010654119732480.L)*_n+
+        real(3737020406174880.L))+real(4684931252738880.L))+
+        real(5937683672717280.L))+real(7616518833678720.L))+
+        real(9901313347702560.L))+real(13064667278362560.L))+
+        real(17529633833726560.L))+real(23970564420759040.L))+
+        real(33495559246330272.L))+real(47990061329863744.L))+
+        real(70794590976220384.L))+real(108116040833184384.L))+
+        real(172162251234317344.L))+real(288670581732229312.L))+
+        real(516838793749780320.L))+real(1009136334235088640.L))+
+        real(2223928370826452640.L))+real(5892845733865016640.L))+
+        real(21663545906680013280.L))+real(189609649321832987520.L))-
+        real(1214231023541738170080.L))+real(1611682019235580393920.L))-
+        real(521426535635040715680.L))-real(97767475431570134190.L))/
+        real(5132792460157432044975.L);
+      _C4x[3] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(real(5834686968581520.L)*_n+
+        real(7342506319890720.L))+real(9346630441971120.L))+
+        real(12050139702982080.L))+real(15757751910386640.L))+
+        real(20937371752569440.L))+real(28326438013541360.L))+
+        real(39122121170021120.L))+real(55335177348321808.L))+
+        real(80479042834045856.L))+real(120985612356919856.L))+
+        real(189305749805064256.L))+real(311247206213861456.L))+
+        real(545105804176518368.L))+real(1038176817264713840.L))+
+        real(2224419195891742080.L))+real(5709031746914121360.L))+
+        real(20241134867471216160.L))+real(169938607767695455920.L))-
+        real(1032557524700570137920.L))+real(1223346872066826294480.L))-
+        real(25524375870246748320.L))-real(545127741800269839120.L))+
+        real(179240371624545246015.L))/real(5132792460157432044975.L);
+      _C4x[4] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(10416271523395200.L)*_n+
+        real(13342415562164160.L))+real(17326857288733440.L))+
+        real(22851141402707520.L))+real(30668416741216128.L))+
+        real(41991600996146368.L))+real(58840907215068160.L))+
+        real(84715573101198144.L))+real(125963455215380608.L))+
+        real(194757152849301952.L))+real(316082169787114752.L))+
+        real(545811376582201408.L))+real(1023666212081828224.L))+
+        real(2156956136917821120.L))+real(5435985763093605888.L))+
+        real(18891464102938314048.L))+real(155028078521800202880.L))-
+        real(913978115527163749440.L))+real(1015014455216994973440.L))+
+        real(83651315877279259200.L))-real(510487517404934966400.L))+
+        real(123975539941198491840.L))+real(17775904623921842580.L))/
+        real(5132792460157432044975.L);
+      _C4x[5] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(18231267003264720.L)*_n+
+        real(23904587445748800.L))+real(31884596097096624.L))+
+        real(43370573384292000.L))+real(60348781355665040.L))+
+        real(86239801248898304.L))+real(127212177678080880.L))+
+        real(195023427626713952.L))+real(313659097240880720.L))+
+        real(536421552566531520.L))+real(995757957106037552.L))+
+        real(2075259879007592480.L))+real(5168944224104058384.L))+
+        real(17734085058984013440.L))+real(143385953385667330800.L))-
+        real(828617452277507486496.L))+real(882953799387816181200.L))+
+        real(120950094238754383680.L))-real(466940290549792626000.L))+
+        real(140491312563122858400.L))-real(52871921445511121520.L))+
+        real(33158899010008052505.L))/real(5132792460157432044975.L);
+      _C4x[6] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(32446016535854208.L)*_n+real(43908972002315616.L))+
+        real(60769437236647744.L))+real(86349105620317984.L))+
+        real(126613785896045056.L))+real(192887647248436448.L))+
+        real(308175587050421440.L))+real(523383415441503904.L))+
+        real(964453238323320704.L))+real(1994494053544582240.L))+
+        real(4926805623857201728.L))+real(16750437377763075616.L))+
+        real(134002994693435368704.L))-real(763382129799919535136.L))+
+        real(790483780479975024576.L))+real(135380449323276977568.L))-
+        real(430349527344997518720.L))+real(140288110986093030240.L))-
+        real(66356603876740551360.L))+real(28098262512624571680.L))+
+        real(5697405328180077750.L))/real(5132792460157432044975.L);
+      _C4x[7] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(60581247490791312.L)*_n+real(85700968320660192.L))+
+        real(125083452282385712.L))+real(189638943298080512.L))+
+        real(301463882573078736.L))+real(509301528552377120.L))+
+        real(933356274906807920.L))+real(1919028740233792320.L))+
+        real(4711082637503394320.L))+real(15907741259899155296.L))+
+        real(126241350431225126832.L))-real(711437311768779888768.L))+
+        real(721398349809359448912.L))+real(140642473143230204832.L))-
+        real(400405811669391181584.L))+real(136057689748363346880.L))-
+        real(69956560318105949040.L))+real(37739048445039752160.L))-
+        real(16871375381726565840.L))+real(11642815358880935355.L))/
+        real(5132792460157432044975.L);
+      _C4x[8] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(123091137335271168.L)*_n+real(185909365170469248.L))+
+        real(294370065853298688.L))+real(495278753117779584.L))+
+        real(903772023704408320.L))+real(1849814223385125760.L))+
+        real(4519165127766428160.L))+real(15177708078766907520.L))+
+        real(119685421163108500224.L))-real(668811824524762837632.L))+
+        real(667389543532136291328.L))+real(141738442710144862848.L))-
+        real(375631505655450815232.L))+real(130898865565471045504.L))-
+        real(70189293203230691840.L))+real(41400112607033685120.L))-
+        real(23806978966798997760.L))+real(10972885159610720640.L))+
+        real(2452530144985009320.L))/real(5132792460157432044975.L);
+      _C4x[9] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(287296256497127376.L)*_n+real(481781561695060224.L))+
+        real(876111306741185072.L))+real(1786666873114538720.L))+
+        real(4347768240400601744.L))+real(14538304614829924544.L))+
+        real(114053530976537441520.L))-real(633018560435612359008.L))+
+        real(623733388826288176464.L))+real(140807256201692766336.L))-
+        real(354799216875392825424.L))+real(125744307902662404704.L))-
+        real(69120074002750705648.L))+real(42643073489038729280.L))-
+        real(26939637224337829264.L))+real(16082079594234617376.L))-
+        real(7556006467598284080.L))+real(5397894670370487285.L))/
+        real(5132792460157432044975.L);
+      _C4x[10] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(850423688931780096.L)*_n+real(1729050899529515040.L))+
+        real(4193853449435620672.L))+real(13972680203386384480.L))+
+        real(109147763661946289280.L))-real(602409851375980837728.L))+
+        real(587531520700696904640.L))+real(138863100422159045856.L))-
+        real(337007520476615896320.L))+real(120888666411293817120.L))-
+        real(67537727934498569664.L))+real(42785332136725383520.L))-
+        real(28348158278177478272.L))+real(18661084357293252000.L))-
+        real(11413646068240637760.L))+real(5432549987636579808.L))+
+        real(1266175285613852250.L))/real(5132792460157432044975.L);
+      _C4x[11] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(4054829827005054864.L)*_n+real(13467892269760445088.L))+
+        real(104824666763974068912.L))-real(575845191515422116288.L))+
+        real(556899166135656231888.L))+real(136422062004077328864.L))-
+        real(321602871754492408080.L))+real(116410487637199935872.L))-
+        real(65778105968316207088.L))+real(42394659574572214560.L))-
+        real(28891460150097908944.L))+real(19991458071409802432.L))-
+        real(13522827127755041712.L))+real(8411102150509586528.L))-
+        real(4040488298298179728.L))+real(2934854733674967831.L))/
+        real(5132792460157432044975.L);
+      _C4x[12] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(100977470540922059136.L)*_n-real(552506769358398638784.L))+
+        real(530553108888378191616.L))+real(133759686428515283136.L))-
+        real(308105931614194826112.L))+real(112310532951172494400.L))-
+        real(63993042734748055040.L))+real(41741405076008505280.L))-
+        real(28972263810146742400.L))+real(20649906489917707072.L))-
+        real(14709809329168653056.L))+real(10142445037425331904.L))-
+        real(6385925063862920576.L))+real(3088594014177415744.L))+
+        real(735873569344070332.L))/real(5132792460157432044975.L);
+      _C4x[13] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(507586637531726245584.L)*_n+real(131027601388705205184.L))-
+        real(296158881021639629136.L))+real(108562194936860519712.L))-
+        real(62252486370236089200.L))+real(40963285772357325440.L))-
+        real(28796650772719649680.L))+real(20925058591681759200.L))-
+        real(15372862066900618672.L))+real(11179428716794485056.L))-
+        real(7817555297389450704.L))+real(4967437895337366176.L))-
+        real(2415015777400770544.L))+real(1770586155991722993.L))/
+        real(5132792460157432044975.L);
+      _C4x[14] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(105131003030739340512.L)-real(285489665610381827712.L)*_n)*_n-
+        real(60587621581596867264.L))+real(40133678134241534880.L))-
+        real(28476947980257066752.L))+real(20972854850184320608.L))-
+        real(15722184934696215360.L))+real(11804137255998893344.L))-
+        real(8717007707473960832.L))+real(6161277795330289632.L))-
+        real(3942826758559951808.L))+real(1924645994671892128.L))+
+        real(464563515213473214.L))/real(5132792460157432044975.L);
+      _C4x[15] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(39292728267222564960.L)-real(59010550425783810672.L)*_n)*_n-
+        real(28077285046087750096.L))+real(20882512873244904320.L))-
+        real(15876440296195324720.L))+real(12172235956142360224.L))-
+        real(9288596283532735120.L))+real(6940644195154884032.L))-
+        real(4946927615409878000.L))+real(3183482554365582560.L))-
+        real(1558989237564570448.L))+real(1149578802925114835.L))/
+        real(5132792460157432044975.L);
+      _C4x[16] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(20707365067708766976.L)-
+        real(27635532225080719872.L)*_n)*_n-real(15906168596965246976.L))+
+        real(12374900376216573184.L))-real(9649457376919524864.L))+
+        real(7456478702283321088.L))-real(5623540589178659840.L))+
+        real(4034991464601479424.L))-real(2608348197726204416.L))+
+        real(1280671252772504320.L))+real(311715137028793680.L))/
+        real(5132792460157432044975.L);
+      _C4x[17] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(12468085246860903552.L)-
+        real(15855041516975600688.L)*_n)*_n-real(9870408910275714768.L))+
+        real(7798239389874038112.L))-real(6086151303845690224.L))+
+        real(4624371155161862720.L))-real(3336083532426612240.L))+
+        real(2164508278641035040.L))-real(1065027524222032560.L))+
+        real(788333428562306445.L))/real(5132792460157432044975.L);
+      _C4x[18] = (_n*(_n*(_n*(_n*(_n*(_n*((real(8021530412008264608.L)-
+        real(9996115166702637312.L)*_n)*_n-real(6404012293728389312.L))+
+        real(5038291127544443104.L))-real(3851544485581842560.L))+
+        real(2790977419500528160.L))-real(1816369286848280640.L))+
+        real(895321435934187360.L))+real(219162511712069730.L))/
+        real(5132792460157432044975.L);
+      _C4x[19] = (_n*(_n*(_n*(_n*(_n*((real(5331029878955287584.L)-
+        real(6621237790858860144.L)*_n)*_n-real(4221855364828848208.L))+
+        real(3243725203726642880.L))-real(2359292599459802160.L))+
+        real(1539363010469286240.L))-real(759917234286216720.L))+
+        real(563984419881928815.L))/real(5132792460157432044975.L);
+      _C4x[20] = (_n*(_n*(_n*(_n*((real(51817378494884800.L)-
+        real(65073071800845696.L)*_n)*_n-real(39980888638081280.L))+
+        real(29171170832616000.L))-real(19074564067126400.L))+
+        real(9428276644937920.L))+real(2317260934180500.L))/
+        real(74388296524020754275.L);
+      _C4x[21] = (_n*(_n*(_n*((real(361041904727488.L)-real(466255241229968.L)*
+        _n)*_n-real(264131842052080.L))+real(173031986380000.L))-
+        real(85620432375632.L))+real(63666780808939.L))/
+        real(783034700252850045.L);
+      _C4x[22] = (_n*(_n*((real(5855833375392.L)-real(7985963133568.L)*_n)*_n-
+        real(3842271070528.L))+real(1903039177952.L))+real(469120197546.L))/
+        real(20033145835167465.L);
+      _C4x[23] = (_n*((real(3356542766368.L)-real(5108468470032.L)*_n)*_n-
+        real(1663823690672.L))+real(1238988173709.L))/real(20033145835167465.L);
+      _C4x[24] = ((real(15209307520.L)-real(30660788480.L)*_n)*_n+
+        real(3757742824.L))/real(208244759201325.L);
+      _C4x[25] = (real(247203.L)-real(331600.L)*_n)/real(5135632425.L);
+      _C4x[26] = real(4654.L)/real(327806325.L);
+      _C4x[27] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(399778803106800.L)*_n-
+        real(490891181489280.L))*_n-real(608126372190480.L))-
+        real(760666432104480.L))-real(961579556063280.L))-
+        real(1229775214557120.L))-real(1593117891585360.L))-
+        real(2093502967889760.L))-real(2795347832603760.L))-
+        real(3800211432559360.L))-real(5272793362676112.L))-
+        real(7488894920902304.L))-real(10927673200908464.L))-
+        real(16457872189222464.L))-real(25735594256676304.L))-
+        real(42112790601833952.L))-real(72887522195481840.L))-
+        real(135467718019885440.L))-real(276579924290599440.L))-
+        real(643471660594455840.L))-real(1823169705017624880.L))-
+        real(7292678820070499520.L))-real(71103618495687370320.L))+
+        real(521426535635040715680.L))-real(782139803452561073520.L))+
+        real(342186164010495469665.L))/real(15398377380472296134925.L);
+      _C4x[28] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(1014435878376960.L)*_n-
+        real(1260383830896960.L))*_n-real(1581799194264960.L))-
+        real(2007262280295360.L))-real(2578484202282240.L))-
+        real(3357538782265920.L))-real(4438830671291520.L))-
+        real(5969469084259520.L))-real(8185070777820160.L))-
+        real(11474986260489024.L))-real(16506135744029568.L))-
+        real(24469622287201728.L))-real(37600148227369728.L))-
+        real(60345531360482368.L))-real(102222500264280704.L))-
+        real(185531874679408320.L))-real(369100449097658880.L))-
+        real(835384261122626880.L))-real(2302951206338052480.L))-
+        real(9008603248322381760.L))-real(87512145840845994240.L))+
+        real(678219130266556455360.L))-real(1327267545252830912640.L))+
+        real(1042853071270081431360.L))-real(293302426294710402570.L))/
+        real(15398377380472296134925.L);
+      _C4x[29] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*((-real(2006004018678960.L)*_n-
+        real(2531531290838880.L))*_n-real(3232904796095760.L))-
+        real(4183476288317760.L))-real(5494125807150960.L))-
+        real(7336556140196640.L))-real(9984009274634192.L))-
+        real(13885046933709056.L))-real(19802882710460976.L))-
+        real(29091401168482016.L))-real(44273531023663760.L))-
+        real(70337033549764800.L))-real(117883423234589936.L))-
+        real(211595249813019296.L))-real(416170572858916176.L))-
+        real(930996983841009792.L))-real(2535847699817891760.L))-
+        real(9787542626936723040.L))-real(93297746297945268240.L))+
+        real(695378374549075277760.L))-real(1219700532656791044720.L))+
+        real(659987433216380206560.L))+real(118506030826145617200.L))-
+        real(146651213147355201285.L))/real(15398377380472296134925.L);
+      _C4x[30] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*((-real(3694849737457920.L)*_n-
+        real(4760445953139840.L))*_n-real(6223414389050880.L))-
+        real(8270905947803520.L))-real(11199684641225472.L))-
+        real(15495183203099264.L))-real(21980385380653056.L))-
+        real(32109940511714688.L))-real(48584682254644480.L))-
+        real(76724217558352000.L))-real(127791410547171840.L))-
+        real(227897885153635200.L))-real(445157114268462848.L))-
+        real(988244111456009856.L))-real(2666947074756701184.L))-
+        real(10162434811804797312.L))-real(94862742018620647680.L))+
+        real(678738423185632682880.L))-real(1077058670070102504960.L))+
+        real(352622470005761800320.L))+real(437560729204229971200.L))-
+        real(335463225723242977920.L))+real(53327713871765527740.L))/
+        real(15398377380472296134925.L);
+      _C4x[31] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*((-real(6758223524849520.L)*_n-
+        real(8951762407416000.L))*_n-real(12080032395751440.L))-
+        real(16654081319863776.L))-real(23538267028562608.L))-
+        real(34256592592217856.L))-real(51631211001291600.L))-
+        real(81204668825905184.L))-real(134673615703414256.L))-
+        real(239051700682648896.L))-real(464477149929807504.L))-
+        real(1024564110749653600.L))-real(2741912113680146736.L))-
+        real(10322910913151292288.L))-real(94526968591456141776.L))+
+        real(653353441633928135520.L))-real(959029230382352934000.L))+
+        real(185884287076286137920.L))+real(482078808038514823920.L))-
+        real(267040739146699173600.L))+real(12762187935123374160.L))+
+        real(1709221598454023325.L))/real(15398377380472296134925.L);
+      _C4x[32] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(12751056151078656.L)*_n-real(17533868589458112.L))*
+        _n-real(24715750057252224.L))-real(35870691003658816.L))-
+        real(53906685863554048.L))-real(84519828513011136.L))-
+        real(139693798830834304.L))-real(247003231694357824.L))-
+        real(477720846144401664.L))-real(1047700748190841024.L))-
+        real(2782278335044276096.L))-real(10360454935887325248.L))-
+        real(93289534450643252736.L))+real(626705204994185679936.L))-
+        real(865741202420700396672.L))+real(90674826231545029824.L))+
+        real(468062562061576930560.L))-real(216274211818747104960.L))+
+        real(37434246079495009920.L))-real(49332827312241614400.L))+
+        real(17092215984540233250.L))/real(15398377380472296134925.L);
+      _C4x[33] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(25638930531053104.L)*_n-real(37128128339304864.L))*_n-
+        real(55663588474380816.L))-real(87046292351612160.L))-
+        real(143444512063664112.L))-real(252759152543049824.L))-
+        real(486800706497340368.L))-real(1061929459586025408.L))-
+        real(2800157459335514544.L))-real(10324718712925331232.L))-
+        real(91625405388394081680.L))+real(601213445859944269184.L))-
+        real(791473378609810070384.L))+real(32826729021604125216.L))+
+        real(441980298061286695088.L))-real(184694527118024535360.L))+
+        real(51814193429812378320.L))-real(56952886450860170400.L))+
+        real(9928654833207437040.L))+real(2339287599452761335.L))/
+        real(15398377380472296134925.L);
+      _C4x[34] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(57046296213407232.L)*_n-real(89000869775895808.L))*_n-
+        real(146271938549788672.L))-real(256920540724900608.L))-
+        real(492886125248387584.L))-real(1069902339522005248.L))-
+        real(2802976713842500608.L))-real(10244487346428907264.L))-
+        real(89775277405020057088.L))+real(577605702227470818048.L))-
+        real(731311030133882820608.L))-real(4148598606469311232.L))+
+        real(415368300235423858176.L))-real(164013011590307315968.L))+
+        real(59044553827426628608.L))-real(56182585593394923264.L))+
+        real(16986473859536939520.L))-real(15623943478293454080.L))+
+        real(7357590434955027960.L))/real(15398377380472296134925.L);
+      _C4x[35] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(148399691433251568.L)*_n-real(259882287247989504.L))*_n-
+        real(496754089097984784.L))-real(1073376583625991584.L))-
+        real(2795528583059676464.L))-real(10137207344944809024.L))-
+        real(87866094385206832464.L))+real(555999886254114444576.L))-
+        real(681678262024533761904.L))-real(28728648941949226368.L))+
+        real(391109900174625314928.L))-real(149503728632275001376.L))+
+        real(62290320091516438096.L))-real(53730425823875847872.L))+
+        real(21505647483176400432.L))-real(21206882265934718304.L))+
+        real(5640316237773599760.L))+real(1380430157843259705.L))/
+        real(15398377380472296134925.L);
+      _C4x[36] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(498948237066515456.L)*_n-real(1073565488192531520.L))*_n-
+        real(2781014060142274944.L))-real(10013798995973013696.L))-
+        real(85966112208383936256.L))+real(536293135987683126976.L))-
+        real(640040253929056597120.L))-real(45564861579727766976.L))+
+        real(369686663998979106304.L))-real(138692526230758032960.L))+
+        real(63379162503585194112.L))-real(51158478895949593280.L))+
+        real(24263021951332700928.L))-real(23210670517478181696.L))+
+        real(9202250097414575488.L))-real(6903945368361263040.L))+
+        real(3798525856841556750.L))/real(15398377380472296134925.L);
+      _C4x[37] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(2761626385176977328.L)*_n-real(9881260996472837600.L))*_n-
+        real(84111917256741155600.L))+real(518311218894002667840.L))-
+        real(604588019488504762480.L))-real(57357654343871872928.L))+
+        real(350903361606398831664.L))-real(130238250521809646720.L))+
+        real(63300432301411706576.L))-real(48821941125892192608.L))+
+        real(25876273219287237488.L))-real(23791034304355461696.L))+
+        real(11513582910647117328.L))-real(10233891042976555808.L))+
+        real(3349177554673513136.L))+real(828196741572794643.L))/
+        real(15398377380472296134925.L);
+      _C4x[38] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(501867522242416287360.L)-real(82322441463711096576.L)*_n)*_n-
+        real(574009531663154112000.L))-real(65751256074750550656.L))+
+        real(334406783737167262464.L))-real(123373409303992638336.L))+
+        real(62591973009277795328.L))-real(46768009703633927296.L))+
+        real(26757925064930395392.L))-real(23765605754036024704.L))+
+        real(13021745856880893440.L))-real(11917013761327527552.L))+
+        real(5503443216797964032.L))-real(3668992961381953408.L))+
+        real(2207620708032210996.L))/real(15398377380472296134925.L);
+      _C4x[39] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(547335486519270798960.L)*_n-real(71787788534944699200.L))*_n+
+        real(319844608645066204656.L))-real(117634125078523469664.L))+
+        real(61551641679147513936.L))-real(44967966517656262528.L))+
+        real(27171548261407882416.L))-real(23474245117621321632.L))+
+        real(13999335147224018704.L))-real(12775521779969547200.L))+
+        real(6944494780126104432.L))-real(5744890749184077792.L))+
+        real(2117893577501298128.L))+real(525937992303903669.L))/
+        real(15398377380472296134925.L);
+      _C4x[40] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(306909278919632597760.L)*_n-real(112725550038496105920.L))+
+        real(60347491278611545728.L))-real(43380359888864249664.L))+
+        real(27284522191876579840.L))-real(23068087317028076736.L))+
+        real(14619978405235959168.L))-real(13194527614639271488.L))+
+        real(7927496352706171136.L))-real(6968541588706235328.L))+
+        real(3536404313637514368.L))-real(2190213729943889216.L))+
+        real(1393690545640419642.L))/real(15398377380472296134925.L);
+      _C4x[41] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(59075629315009097424.L)*_n-real(41967513576903298080.L))+
+        real(27203908876725102576.L))-real(22617688148220796544.L))+
+        real(14997030855363143440.L))-real(13367905150885347552.L))+
+        real(8603090262429663280.L))-real(7706930270557921088.L))+
+        real(4519959076546905936.L))-real(3559703598333699488.L))+
+        real(1414548101738139760.L))+real(352029042164525775.L))/
+        real(15398377380472296134925.L);
+      _C4x[42] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(26998986839438173184.L)*_n-real(22157016743179454976.L))+
+        real(15205913595735953408.L))-real(13399089407926343168.L))+
+        real(9066227245074349056.L))-real(8155135004329918976.L))+
+        real(5216456602051602432.L))-real(4444683870536781312.L))+
+        real(2400536816709161984.L))-real(1415914071401822720.L))+
+        real(935145411086381040.L))/real(15398377380472296134925.L);
+      _C4x[43] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(15297648024600690192.L)*
+        _n-real(13345966126725050752.L))+real(9379373988588606192.L))-
+        real(8422852959343692576.L))+real(5715596912699526608.L))-
+        real(5029503507151988928.L))+real(3107774173545323184.L))-
+        real(2364352445609926240.L))+real(988074260868900240.L))+
+        real(246200508532148625.L))/real(15398377380472296134925.L);
+      _C4x[44] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(9584901514820353536.L)*_n-
+        real(8574694453100341056.L))+real(6074974826240713344.L))-
+        real(5420992938534190528.L))+real(3624977888547249920.L))-
+        real(3016720049954103360.L))+real(1701300060800887680.L))-
+        real(970006992277821120.L))+real(657487535136209190.L))/
+        real(15398377380472296134925.L);
+      _C4x[45] = (_n*(_n*(_n*(_n*(_n*(_n*(real(6333140675850554704.L)*_n-
+        real(5683913893686193248.L))+real(4008028819571478256.L))-
+        real(3474234923548732480.L))+real(2228411054356194960.L))-
+        real(1653416351874823200.L))+real(715909591514683440.L))+
+        real(178524847392378795.L))/real(15398377380472296134925.L);
+      _C4x[46] = (_n*(_n*(_n*(_n*(_n*(real(37337498257965312.L)*_n-
+        real(33038238862440320.L))+real(22823087545861632.L))-
+        real(18656042377348224.L))+real(10854829102639872.L))-
+        real(6039124966680960.L))+real(4171069681524900.L))/
+        real(133898933743237357695.L);
+      _C4x[47] = (_n*(_n*(_n*(_n*(real(195075922055654512.L)*_n-
+        real(167040749263423040.L))+real(110137034045154576.L))-
+        real(80209044218286368.L))+real(35640909297543088.L))+
+        real(8892416283104739.L))/real(1026558492031486408995.L);
+      _C4x[48] = (_n*(_n*(_n*(real(696434041088.L)*_n-real(561462728640.L))+
+        real(334369174656.L))-real(182661157184.L))+real(127941872058.L))/
+        real(5463585227772945.L);
+      _C4x[49] = (_n*(_n*(real(24560261753712.L)*_n-real(17633845750752.L))+
+        real(7989870443984.L))+real(1994225640693.L))/
+        real(300497187527511975.L);
+      _C4x[50] = (_n*(real(29556996608.L)*_n-real(15922652416.L))+
+        real(11273228472.L))/real(624734277603975.L);
+      _C4x[51] = (real(22113584.L)*_n+real(5520955.L))/real(1063075911975.L);
+      _C4x[52] = real(4654.L)/real(327806325.L);
+      _C4x[53] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(6530703079680.L)*_n+
+        real(8826217303200.L))+real(12093266011200.L))+real(16820633633760.L))+
+        real(23786754633600.L))+real(34260599819040.L))+real(50364947102400.L))+
+        real(75754683810400.L))+real(116929582540288.L))+
+        real(185879907027360.L))+real(305669180444992.L))+
+        real(522855177076960.L))+real(936880769784960.L))+
+        real(1774868569425952.L))+real(3599383812122560.L))+
+        real(7951366057688928.L))+real(19633002611577600.L))+
+        real(56444882508285600.L))+real(203201577029828160.L))+
+        real(1072452767657426400.L))+real(14585357640140999040.L))-
+        real(164085273451586239200.L))+real(474024123304582468800.L))-
+        real(521426535635040715680.L))+real(195534950863140268380.L))/
+        real(25663962300787160224875.L);
+      _C4x[54] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(37005054560640.L)*_n+
+        real(50928622145280.L))+real(71200352945280.L))+
+        real(101285535859200.L))+real(146895777947520.L))+
+        real(217709219902720.L))+real(330642768779904.L))+
+        real(516325325236224.L))+real(832487788737920.L))+
+        real(1393120987405056.L))+real(2435890001440896.L))+
+        real(4489456941272576.L))+real(8825897303051136.L))+
+        real(18820602503512320.L))+real(44632359270319744.L))+
+        real(122509936296244224.L))+real(418182955626602880.L))+
+        real(2077171676304910080.L))+real(26416205013877660800.L))-
+        real(277979757376804922880.L))+real(773023954927472949120.L))-
+        real(962633604249305936640.L))+real(568828947965498962560.L))-
+        real(130356633908760178920.L))/real(25663962300787160224875.L);
+      _C4x[55] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(real(136917721288320.L)*_n+
+        real(192816953576640.L))+real(276619716268800.L))+
+        real(405173516400960.L))+real(607547051841408.L))+
+        real(935644644394432.L))+real(1485852629588992.L))+
+        real(2445470099042880.L))+real(4198348870000768.L))+
+        real(7582646940057280.L))+real(14575156777493760.L))+
+        real(30308566074649408.L))+real(69870049079044480.L))+
+        real(185721434704623552.L))+real(610979041272294912.L))+
+        real(2906273376591832128.L))+real(35062579364016435840.L))-
+        real(344200893535525588800.L))+real(858955644058086946560.L))-
+        real(848095648663492797120.L))+real(189609649321832987520.L))+
+        real(211487685782044486080.L))-real(106655427743531055480.L))/
+        real(25663962300787160224875.L);
+      _C4x[56] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(427935160909440.L)*_n+
+        real(620824675084800.L))+real(921346670048640.L))+
+        real(1403181140646144.L))+real(2201599592893568.L))+
+        real(3576287011899392.L))+real(6052576443204480.L))+
+        real(10761701612549888.L))+real(20332002745244288.L))+
+        real(41478113346528768.L))+real(93590967503212928.L))+
+        real(242792615091918080.L))+real(776518666518145152.L))+
+        real(3570985915011744768.L))+real(41275246710424051584.L))-
+        real(381583112158099918080.L))+real(860701017990256195200.L))-
+        real(658734356824696266240.L))-real(126662316348592886400.L))+
+        real(430697031491222442240.L))-real(189609649321832987520.L))+
+        real(19143281902685061240.L))/real(25663962300787160224875.L);
+      _C4x[57] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(1254039517896320.L)*_n+real(1892426879208800.L))+
+        real(2940069405374528.L))+real(4725228003633952.L))+
+        real(7905160865362432.L))+real(13879669938190560.L))+
+        real(25862709380426688.L))+real(51959829971310240.L))+
+        real(115250028146574720.L))+real(293202530709087328.L))+
+        real(916621360100810560.L))+real(4100426592265781792.L))+
+        real(45739130956036888832.L))-real(402015260344313016352.L))+
+        real(831740048621207884480.L))-real(498460830830147818080.L))-
+        real(282497311277728928640.L))+real(413391030514182077280.L))-
+        real(103113511366136134080.L))-real(6220226052413073120.L))-
+        real(4102131836289655980.L))/real(25663962300787160224875.L);
+      _C4x[58] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(3677378369773824.L)*_n+real(5857872785118720.L))+
+        real(9706237783157504.L))+real(16864643566088192.L))+
+        real(31066728260547840.L))+real(61628645158373888.L))+
+        real(134766110703746816.L))+real(337328091894506496.L))+
+        real(1034664711080446208.L))+real(4522222801254448640.L))+
+        real(48953052755595055872.L))-real(412309002344605771776.L))+
+        real(792973092558522113280.L))-real(376192864521090387456.L))-
+        real(351254049723734841600.L))+real(353711316330599894016.L))-
+        real(58463155176755777280.L))+real(29441650716321768960.L))-
+        real(42356239834217514240.L))+real(9330339078619609680.L))/
+        real(25663962300787160224875.L);
+      _C4x[59] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(11430048901807872.L)*_n+real(19683848342623104.L))+
+        real(35908345936361472.L))+real(70468600146107520.L))+
+        real(152240385184346368.L))+real(375815924317300096.L))+
+        real(1134064880707938816.L))+real(4858982781330910848.L))+
+        real(51265280303341413120.L))-real(416402813425188014208.L))+
+        real(752695342585300982784.L))-real(284623133490827902848.L))-
+        real(377248702505408686848.L))+real(298083387884318673280.L))-
+        real(43274802583071191552.L))+real(52176275080476398208.L))-
+        real(41523800523486624000.L))+real(1761080334258510720.L))+
+        real(412047642310484880.L))/real(25663962300787160224875.L);
+      _C4x[60] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(40384078766338816.L)*_n+real(78512715059802112.L))+
+        real(167840903915859200.L))+real(409353288974514688.L))+
+        real(1217848935863822080.L))+real(5128432728209638400.L))+
+        real(52918606905870754048.L))-real(416637515430115750400.L))+
+        real(714155279093130615552.L))-real(215707780561903888384.L))-
+        real(382444354692447152896.L))+real(254008418220830941696.L))-
+        real(40335227135275331840.L))+real(62072531510207540224.L))-
+        real(34733922900298626816.L))+real(9576193353823090176.L))-
+        real(14744384961294777600.L))+real(4769592571950133200.L))/
+        real(25663962300787160224875.L);
+      _C4x[61] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(181752888575196672.L)*_n+real(438584148172930080.L))+
+        real(1288575418374434368.L))+real(5344307596026407008.L))+
+        real(54084117907328089728.L))-real(414445194331230149472.L))+
+        real(678502773486304562880.L))-real(163212860882231078688.L))-
+        real(377593319137055965440.L))+real(220358893051414809888.L))-
+        real(41646095348463931584.L))+real(64716780628235286880.L))-
+        real(29479712826115965056.L))+real(16580690160559682976.L))-
+        real(18263993339472293952.L))+real(2313258532709130720.L))+
+        real(633471099889183500.L))/real(25663962300787160224875.L);
+      _C4x[62] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1348366608490174080.L)*_n+real(5517248802270313728.L))+
+        real(54884109770278089600.L))-real(410725042705782382080.L))+
+        real(645999166459353641088.L))-real(122667631098340849920.L))-
+        real(368052651401186521728.L))+real(194698755374819634176.L))-
+        real(44007847156610839936.L))+real(63847680811365110016.L))-
+        real(26320609689333635200.L))+real(21317542480385897984.L))-
+        real(18170598119629527936.L))+real(5408264866072845056.L))-
+        real(6660168919267507840.L))+real(2709722479196675880.L))/
+        real(25663962300787160224875.L);
+      _C4x[63] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(55407314304087368064.L)*_n-real(406054191572349887424.L))+
+        real(616535942225097879296.L))-real(90919939024331464256.L))-
+        real(356540501468135277440.L))+real(174901775360747521856.L))-
+        real(46252044424347629056.L))+real(61466034473601797312.L))-
+        real(24627934848934652032.L))+real(24091470960744936000.L))-
+        real(17212751748991212288.L))+real(8259024089688799168.L))-
+        real(9338563264794234240.L))+real(1817846791809572160.L))+
+        real(488820862939508120.L))/real(25663962300787160224875.L);
+      _C4x[64] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(589863493951969521024.L)*_n-real(65740435573486634496.L))-
+        real(344448817745720924544.L))+real(159377073519514909440.L))-
+        real(48022377678434173056.L))+real(58565177969584864256.L))-
+        real(23803024688857466752.L))+real(25493284600946195712.L))-
+        real(16257603620153257600.L))+real(10479636984885329408.L))-
+        real(10245243715723244928.L))+real(3527273839089647360.L))-
+        real(3546938143855926400.L))+real(1674200066451717000.L))/
+        real(25663962300787160224875.L);
+      _C4x[65] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(146986382004362764512.L)-real(332485530657606817920.L)*_n)*_n-
+        real(49272023678007622080.L))+real(55614346192879924128.L))-
+        real(23446972943866739456.L))+real(26015091993676510816.L))-
+        real(15515664994429647936.L))+real(12055500873524365600.L))-
+        real(10418728685641211264.L))+real(5021266495159651296.L))-
+        real(5360528716174606016.L))+real(1332582772689968800.L))+
+        real(352185615496845060.L))/real(25663962300787160224875.L);
+      _C4x[66] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(52820294377651973120.L)-real(50060658829976585728.L)*_n)*_n-
+        real(23322350804746445312.L))+real(25999931365039206400.L))-
+        real(14989651655559085568.L))+real(13098779625122673664.L))-
+        real(10319481571379796480.L))+real(6233525196463896576.L))-
+        real(6254089969749669376.L))+real(2439783289072991232.L))-
+        real(2111026048550146560.L))+real(1102832964709346080.L))/
+        real(25663962300787160224875.L);
+      _C4x[67] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(25671030711491374848.L)-
+        real(23295867752115878400.L)*_n)*_n-real(14630133575110608896.L))+
+        real(13740158680947179776.L))-real(10141817662568879616.L))+
+        real(7165404758277149440.L))-real(6671338473796527104.L))+
+        real(3365290718200325376.L))-real(3351890018689511936.L))+
+        real(975745690328200960.L))+real(254698899202571040.L))/
+        real(25663962300787160224875.L);
+      _C4x[68] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(14092212633933705216.L)-
+        real(14385412688913695232.L)*_n)*_n-real(9961622044992609792.L))+
+        real(7852394045118379008.L))-real(6846829190959905280.L))+
+        real(4121220909497710592.L))-real(4076761661962311168.L))+
+        real(1753209738542545920.L))-real(1359751670673338880.L))+
+        real(763467477079376160.L))/real(25663962300787160224875.L);
+      _C4x[69] = (_n*(_n*(_n*(_n*(_n*(_n*((real(8339801374638293920.L)-
+        real(9803797102758335744.L)*_n)*_n-real(6902495651553394624.L))+
+        real(4722953129058764000.L))-real(4498028309574814336.L))+
+        real(2388072033598248480.L))-real(2235024224523720000.L))+
+        real(725663436901734240.L))+real(187755511208304060.L))/
+        real(25663962300787160224875.L);
+      _C4x[70] = (_n*(_n*(_n*(_n*(_n*((real(5190797136892005120.L)-
+        real(6900850279756457088.L)*_n)*_n-real(4740867620388853120.L))+
+        real(2906381084666032640.L))-real(2800363610162079360.L))+
+        real(1298219641868540160.L))-real(928706997591676800.L))+
+        real(549779481029532600.L))/real(25663962300787160224875.L);
+      _C4x[71] = (_n*(_n*(_n*(_n*((real(221725351825043520.L)-
+        real(325240456165524608.L)*_n)*_n-real(211162456243553024.L))+
+        real(117466249040685504.L))-real(104390186541646208.L))+
+        real(36679327307318080.L))+real(9429511275907800.L))/
+        real(1710930820052477348325.L);
+      _C4x[72] = (_n*(_n*(_n*((real(142732096833824256.L)-
+        real(227139329872510080.L)*_n)*_n-real(133726552915187584.L))+
+        real(65715633278448384.L))-real(44232030890087040.L))+
+        real(27249816031410280.L))/real(1710930820052477348325.L);
+      _C4x[73] = (_n*(_n*((real(45127039356960.L)-real(77938036150912.L)*_n)*_n-
+        real(38447602473280.L))+real(14332118226272.L))+real(3666866110908.L))/
+        real(865067661064049625.L);
+      _C4x[74] = (_n*((real(1356636312064.L)-real(2636988382464.L)*_n)*_n-
+        real(871294451456.L))+real(553528081392.L))/real(45529876898107875.L);
+      _C4x[75] = ((real(40707880576.L)-real(104352359168.L)*_n)*_n+
+        real(10376961584.L))/real(3123671388019875.L);
+      _C4x[76] = (real(5603312.L)-real(8609536.L)*_n)/real(590597728875.L);
+      _C4x[77] = real(2894476.L)/real(1093234093875.L);
+      _C4x[78] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*((-real(242883621120.L)*_n-
+        real(365079728640.L))*_n-real(559688344320.L))-real(876931046400.L))-
+        real(1407625524480.L))-real(2321347356160.L))-real(3946290505472.L))-
+        real(6943856439296.L))-real(12709737232640.L))-real(24349180803584.L))-
+        real(49209899019008.L))-real(105990551733248.L))-
+        real(246631860763904.L))-real(631866750717440.L))-
+        real(1832413577080576.L))-real(6282560835704832.L))-
+        real(27486203656208640.L))-real(180623624026513920.L))-
+        real(3160913420463993600.L))+real(48045883991052702720.L))-
+        real(204195006961973986560.L))+real(408390013923947973120.L))-
+        real(379219298643665975040.L))+real(130356633908760178920.L))/
+        real(35929547221102024314825.L);
+      _C4x[79] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*((-real(784468838400.L)*_n-real(1211352253440.L))*
+        _n-real(1913950924800.L))-real(3102521564160.L))-real(5176110700544.L))-
+        real(8922048099328.L))-real(15963949023232.L))-real(29824646548480.L))-
+        real(58614317590528.L))-real(122359748912128.L))-
+        real(274876595703808.L))-real(676708907219968.L))-
+        real(1875217453742080.L))-real(6102027478356992.L))-
+        real(25130243342819328.L))-real(153922740474768384.L))-
+        real(2481611530103408640.L))+real(34318488565037644800.L))-
+        real(131493998291302133760.L))+real(240229419955263513600.L))-
+        real(233365722242255984640.L))+real(116682861121127992320.L))-
+        real(23701206165229123440.L))/real(11976515740367341438275.L);
+      _C4x[80] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*((-real(14100417918720.L)*_n-real(22528414182400.L))*_n-
+        real(36999879082240.L))-real(62695678987776.L))-
+        real(110103434701568.L))-real(201527250907136.L))-
+        real(387212081706240.L))-real(788334624182784.L))-
+        real(1722236288376576.L))-real(4109266597180416.L))-
+        real(10991278451304704.L))-real(34350838977943040.L))-
+        real(135025265702966016.L))-real(783009277489051648.L))-
+        real(11820899985746795776.L))+real(150569423628710929920.L))-
+        real(516367601687102457600.L))+real(792215214980290053120.L))-
+        real(523176326992797569280.L))-real(17159244282518822400.L))+
+        real(204195006961973986560.L))-real(77484712463249057400.L))/
+        real(35929547221102024314825.L);
+      _C4x[81] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(69291376017408.L)*_n-real(115728070557696.L))*_n-
+        real(200070531596288.L))-real(359981829898240.L))-
+        real(678816162906112.L))-real(1353785673203712.L))-
+        real(2890726085804032.L))-real(6723753695690752.L))-
+        real(17476258575777792.L))-real(52866462876516352.L))-
+        real(200128797373775872.L))-real(1110110096913907712.L))-
+        real(15874263169655439360.L))+real(188516686836447363072.L))-
+        real(584747255596282003456.L))+real(750238284756528218112.L))-
+        real(268893603768166809600.L))-real(306337666348967608320.L))+
+        real(341017402162058280960.L))-real(109819163408120463360.L))+
+        real(7292678820070499520.L))/real(35929547221102024314825.L);
+      _C4x[82] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(316266632392192.L)*_n-real(560813613253632.L))*_n-
+        real(1040848049682944.L))-real(2039960293941248.L))-
+        real(4273077558511104.L))-real(9729363901824000.L))-
+        real(24690856467239424.L))-real(72690250131953664.L))-
+        real(266676021407505920.L))-real(1425309156383028224.L))-
+        real(19471097384879712768.L))+real(217791775730183008256.L))-
+        real(618541288352201815552.L))+real(669580927307504636928.L))-
+        real(66449075319041081856.L))-real(415120207219196774400.L))+
+        real(271524426118118208000.L))-real(26371049107871032320.L))-
+        real(5238085096768903680.L))-real(5898490222115845200.L))/
+        real(35929547221102024314825.L);
+      _C4x[83] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(1461823265378304.L)*_n-real(2822457846364160.L))*_n-
+        real(5815680367099904.L))-real(13002523267270656.L))-
+        real(32331049698848768.L))-real(93006093247649792.L))-
+        real(332208933966077952.L))-real(1720161862706997248.L))-
+        real(22597300339825627136.L))+real(240048421933070370816.L))-
+        real(631131479118559068160.L))+real(582406064076255082496.L))+
+        real(73874934688762712064.L))-real(429094500064720738304.L))+
+        real(183140836734686322688.L))-real(2054397393275480064.L))+
+        real(36250376022016880640.L))-real(33957241316984616960.L))+
+        real(5317107932280503520.L))/real(35929547221102024314825.L);
+      _C4x[84] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(1067471421138432.L)*_n-real(2349101840916480.L))*_n-
+        real(5738576033176064.L))-real(16180146920588288.L))-
+        real(56470414075432448.L))-real(284474901387388928.L))-
+        real(3612319428336419328.L))+real(36689299007526614016.L))-
+        real(90141993408478164480.L))+real(71564637069363744768.L))+
+        real(23741795651031553536.L))-real(57747760591701677056.L))+
+        real(16997829324519023104.L))-real(1480136257839773696.L))+
+        real(8315193643228048896.L))-real(3706262138720443392.L))-
+        real(164917221937251840.L))-real(87892745620044720.L))/
+        real(5132792460157432044975.L);
+      _C4x[85] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(48042986241130496.L)*_n-real(133090957390725120.L))*_n-
+        real(455144450749743104.L))-real(2238184783310667776.L))-
+        real(27586914628348379136.L))+real(269373932187331772416.L))-
+        real(623350670882734161920.L))+real(429031513413253545984.L))+
+        real(225194518881659715584.L))-real(367056871303009484800.L))+
+        real(79006410179092365312.L))-real(26178408368267509760.L))+
+        real(61916484299772755968.L))-real(15977635405341474816.L))+
+        real(8695064196615487488.L))-real(13319028971694243840.L))+
+        real(3165821671116888000.L))/real(35929547221102024314825.L);
+      _C4x[86] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(511389029512050432.L)*_n-real(2461546726962537984.L))*_n-
+        real(29550293698669995264.L))+real(278667554097992549376.L))-
+        real(611406082465663595264.L))+real(367062529094954495488.L))+
+        real(261873907500228468480.L))-real(328816100981872666624.L))+
+        real(55869074213894557952.L))-real(40022920693953265152.L))+
+        real(57094426968881406720.L))-real(11607702029215208448.L))+
+        real(17775856838088873216.L))-real(14378127912575347200.L))+
+        real(519096589050111744.L))+real(147272060840096472.L))/
+        real(35929547221102024314825.L);
+      _C4x[87] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(285448955427901504512.L)-real(31223733481256085504.L)*_n)*_n-
+        real(597132006171262619648.L))+real(314209123559704175616.L))+
+        real(283760219629225199616.L))-real(293786554332581295104.L))+
+        real(43243222327688929280.L))-real(49729927392168561664.L))+
+        real(49758672136213755904.L))-real(11463852924163548160.L))+
+        real(23000103470651396096.L))-real(12148563661590608896.L))+
+        real(3940386282428868608.L))-real(6320436734076408832.L))+
+        real(1960568001627648784.L))/real(35929547221102024314825.L);
+      _C4x[88] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(269270113711154254848.L)-real(581745027768314771712.L)*_n)*_n+
+        real(295866519843524886784.L))-real(263213710131456252416.L))+
+        real(36857563226622991104.L))-real(55635282410869934080.L))+
+        real(42618725592382870784.L))-real(13361637729751954944.L))+
+        real(24964906463459208960.L))-real(10132570797317907456.L))+
+        real(7713853460933765376.L))-real(8118635745745555968.L))+
+        real(817804752655172352.L))+real(241872668423848056.L))/
+        real(35929547221102024314825.L);
+      _C4x[89] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(301508380982742810624.L)*_n-real(237098342869246836736.L))+
+        real(34055388652539379712.L))-real(58666097247303598080.L))+
+        real(36617989065130246144.L))-real(15869885773640794112.L))+
+        real(24907361632198950912.L))-real(9102550367414353920.L))+
+        real(10612564545839628288.L))-real(8028287362742255616.L))+
+        real(2453762803818332160.L))-real(3435267925345665024.L))+
+        real(1281312645923791488.L))/real(35929547221102024314825.L);
+      _C4x[90] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(33241434114054288384.L)*_n-real(59708543117484410880.L))+
+        real(31913638267091926016.L))-real(18261620220846055424.L))+
+        real(23810951878141281280.L))-real(8919008353446295552.L))+
+        real(12421882670009666560.L))-real(7453149529783881728.L))+
+        real(4282134731677766656.L))-real(4892000746239961088.L))+
+        real(758525460038671360.L))+real(216382513998207200.L))/
+        real(35929547221102024314825.L);
+      _C4x[91] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(4052094133266980864.L)*_n-real(2891602662168268800.L))+
+        real(3185306291627917312.L))-real(1323327350130077696.L))+
+        real(1903968635822432256.L))-real(993615313994502144.L))+
+        real(838457301038678016.L))-real(759500839229239296.L))+
+        real(247076914051817472.L))-real(294315017353728000.L))+
+        real(125447024751451200.L))/real(5132792460157432044975.L);
+      _C4x[92] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(20712624738972171264.L)*
+        _n-real(9864755493535784960.L))+real(13599413786714850304.L))-
+        real(6685964913996724224.L))+real(7057906530373766144.L))-
+        real(5308190137312104448.L))+real(2758504160084972544.L))-
+        real(3137033601628416000.L))+real(630344572775930880.L))+
+        real(174767528979882720.L))/real(35929547221102024314825.L);
+      _C4x[93] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(13471407830586753024.L)*_n-
+        real(6632511891899056128.L))+real(7850812427279368192.L))-
+        real(5177464536287248384.L))+real(3693871747663462400.L))-
+        real(3627594092443238400.L))+real(1285906172887203840.L))-
+        real(1329609876687912960.L))+real(626080534632443520.L))/
+        real(35929547221102024314825.L);
+      _C4x[94] = (_n*(_n*(_n*(_n*(_n*(_n*(real(8315448511392994048.L)*_n-
+        real(5060090885926992384.L))+real(4459535157381056768.L))-
+        real(3811080007110016000.L))+real(1938317597848477440.L))-
+        real(2120327477470379520.L))+real(508119540150539520.L))+
+        real(137999414413836360.L))/real(35929547221102024314825.L);
+      _C4x[95] = (_n*(_n*(_n*(_n*(_n*(real(335889721529219072.L)*_n-
+        real(257030660167255040.L))+real(169115738491932672.L))-
+        real(170690997462948864.L))+real(65675140787300352.L))-
+        real(60512422833730560.L))+real(30748311870368400.L))/
+        real(2395303148073468287655.L);
+      _C4x[96] = (_n*(_n*(_n*(_n*(real(1016222889010513664.L)*_n-
+        real(930326412265980928.L))+real(478801204975292672.L))-
+        real(498875776721986048.L))+real(135831004466592512.L))+
+        real(36335146679814136.L))/real(11976515740367341438275.L);
+      _C4x[97] = (_n*(_n*(_n*(real(20760216502272.L)*_n-real(20955891089408.L))+
+        real(8660978450432.L))-real(7275842387968.L))+real(3923283780416.L))/
+        real(403698241829889825.L);
+      _C4x[98] = (_n*(_n*(real(15929987148288.L)*_n-real(15815039865856.L))+
+        real(4741616422400.L))+real(1254038195696.L))/
+        real(519040596638429775.L);
+      _C4x[99] = (_n*(real(969805824.L)*_n-real(756467712.L))+
+        real(427576864.L))/real(56794025236725.L);
+      _C4x[100] = (real(76231168.L)*_n+real(19985680.L))/real(10276400482425.L);
+      _C4x[101] = real(433472.L)/real(72882272925.L);
+      _C4x[102] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(real(18103127040.L)*_n+real(30658521600.L))+
+        real(53362944000.L))+real(95756838400.L))+real(177805329408.L))+
+        real(343155696128.L))+real(692078714880.L))+real(1468390694400.L))+
+        real(3305318661120.L))+real(7979983624704.L))+real(20965164079104.L))+
+        real(61148395230720.L))+real(203827984102400.L))+
+        real(812400108065280.L))+real(4188373890469888.L))+
+        real(32983444387450368.L))+real(706788094016793600.L))-
+        real(13546771801988544000.L))+real(75861922091135846400.L))-
+        real(216206477959737162240.L))+real(350048583363383976960.L))-
+        real(291707152802819980800.L))+real(94804824660916493760.L))/
+        real(46195132141416888404775.L);
+      _C4x[103] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(273177999360.L)*_n+real(481049600000.L))+
+        real(875104847872.L))+real(1651522793472.L))+real(3250070362112.L))+
+        real(6711949361152.L))+real(14663819520000.L))+real(34246326030336.L))+
+        real(86693786597376.L))+real(242515952050176.L))+
+        real(771052145575936.L))+real(2911828344320000.L))+
+        real(14109555425236992.L))+real(103409507088842752.L))+
+        real(2037643897713600512.L))-real(35395947748361023488.L))+
+        real(176697023504198400000.L))-real(442166631616906076160.L))+
+        real(630737695100586608640.L))-real(521641026188572200960.L))+
+        real(233365722242255984640.L))-real(43756072920422997120.L))/
+        real(46195132141416888404775.L);
+      _C4x[104] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(2513346781184.L)*_n+real(4653198092288.L))+
+        real(8967832989696.L))+real(18101637462016.L))+real(38566407405568.L))+
+        real(87605487814656.L))+real(215045569449984.L))+
+        real(581215525459968.L))+real(1777694813626368.L))+
+        real(6424469183555584.L))+real(29598152754343936.L))+
+        real(204557105919817728.L))+real(3759883208095809536.L))-
+        real(60010660035937859584.L))+real(268981559619866677248.L))-
+        real(580150515251491301376.L))+real(649491139195165532160.L))-
+        real(296945237899588884480.L))-real(105484196431484129280.L))+
+        real(178456140538195752960.L))-real(58341430560563996160.L))/
+        real(46195132141416888404775.L);
+      _C4x[105] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(19013924386816.L)*_n+real(37632291803136.L))+
+        real(78471447259136.L))+real(174088509751296.L))+
+        real(416320388585472.L))+real(1092997200375808.L))+
+        real(3235904844433408.L))+real(11271030679953408.L))+
+        real(49777532410411008.L))+real(327472966826872832.L))+
+        real(5674829647767791616.L))-real(84189632353294598144.L))+
+        real(342567056241741305856.L))-real(639338954164724158464.L))+
+        real(536482529069452249088.L))-real(9172538820129054720.L))-
+        real(345006828292730849280.L))+real(255763051621543710720.L))-
+        real(65746999145651066880.L))+real(2573886642377823360.L))/
+        real(46195132141416888404775.L);
+      _C4x[106] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(136634213689344.L)*_n+real(296980894577664.L))+
+        real(694382762737664.L))+real(1778037040647168.L))+
+        real(5119046452058112.L))+real(17276439327286272.L))+
+        real(73591094605443072.L))+real(464123397252365312.L))+
+        real(7645258159150123008.L))-real(106431032632201030656.L))+
+        real(397322760629848940544.L))-real(647100699339985458176.L))+
+        real(388288976253983422464.L))+real(196457446559392105472.L))-
+        real(391173179500435189760.L))+real(156577122427853675520.L))+
+        real(5120287081099438080.L))-real(1083741744159083520.L))-
+        real(6186359122908101760.L))/real(46195132141416888404775.L);
+      _C4x[107] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(1048407575824384.L)*_n+real(2626638683471872.L))+
+        real(7380467755382784.L))+real(24234411666681856.L))+
+        real(100037120244705280.L))+real(608172919175700480.L))+
+        real(9584857549436409856.L))-real(126184649112624951296.L))+
+        real(436228804751660992512.L))-real(625442338951991443456.L))+
+        real(247714942105394591744.L))+real(314492653942129324032.L))-
+        real(346041142333110769664.L))+real(64513956314965319680.L))+
+        real(6992490210139478016.L))+real(40698429093695901696.L))-
+        real(26418168314138818560.L))+real(3115757514457365120.L))/
+        real(46195132141416888404775.L);
+      _C4x[108] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(9965526918987776.L)*_n+real(31941212397987840.L))+
+        real(128254430705700864.L))+real(754928478787811328.L))+
+        real(11443013490573385728.L))-real(143380861806255732736.L))+
+        real(462707814424058327040.L))-real(588682188079886444544.L))+
+        real(128886568389798051840.L))+real(370304580148619683840.L))-
+        real(276392409679204675584.L))+real(15126796833668495360.L))-
+        real(19979400699805933568.L))+real(55885978313940289536.L))-
+        real(13959850176936136704.L))-real(1752834473161648128.L))-
+        real(1138714151471500800.L))/real(46195132141416888404775.L);
+      _C4x[109] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(157539740750432256.L)*_n+real(901048006842634240.L))+
+        real(13192536862516271104.L))-real(158172203468725149696.L))+
+        real(479762841820583946240.L))-real(545407492632180527104.L))+
+        real(33687967123189757952.L))+real(387655649704096743424.L))-
+        real(210448063744198834176.L))-real(2168459407262281728.L))-
+        real(45090046273136650240.L))+real(49867431789483614208.L))-
+        real(4405388962778044416.L))+real(9891350435745214464.L))-
+        real(11629020106889644032.L))+real(2142745905027579264.L))/
+        real(46195132141416888404775.L);
+      _C4x[110] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(14821072658522649600.L)*_n-real(170799381732787991040.L))+
+        real(489794152476524021760.L))-real(500528836213713190400.L))-
+        real(40435972066279236608.L))+real(383084793925621691904.L))-
+        real(156863559792402190336.L))-real(1938352761244243456.L))-
+        real(60068217375579012096.L))+real(37173904484881866240.L))-
+        real(4135539347527870464.L))+real(19515690288875966976.L))-
+        real(10435833217849611264.L))-real(330755163996977664.L))-
+        real(160401631336588992.L))/real(46195132141416888404775.L);
+      _C4x[111] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(494643829831786352640.L)*_n-real(456729009019156316160.L))-
+        real(97179455474204364800.L))+real(366971588404943659008.L))-
+        real(116321132765310971904.L))+real(5942013359845441536.L))-
+        real(65872479785281490944.L))+real(25528829872870711296.L))-
+        real(8966084839048458240.L))+real(23187693588903051264.L))-
+        real(6819842083948056576.L))+real(3735628842718961664.L))-
+        real(5849993593648705536.L))+real(1437054551156673792.L))/
+        real(46195132141416888404775.L);
+      _C4x[112] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(345500549750762024960.L)-real(140110654925523861504.L)*_n)*_n-
+        real(86855575265351786496.L))+real(16025211538095771648.L))-
+        real(65548752179557269504.L))+real(17341500773995933696.L))-
+        real(14922975928802844672.L))+real(22517783091816714240.L))-
+        real(4913568107899895808.L))+real(8272319983869505536.L))-
+        real(6684449054325202944.L))+real(214361814320812032.L))+
+        real(66945263098592256.L))/real(46195132141416888404775.L);
+      _C4x[113] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(25687197355740815360.L)-real(66003204519449473024.L)*_n)*_n-
+        real(61803020428320116736.L))+real(12585324357067571200.L))-
+        real(19972298686181273600.L))+real(19807323231475605504.L))-
+        real(5057295022990479360.L))+real(11281463933279059968.L))-
+        real(5670781104596299776.L))+real(2012896756543217664.L))-
+        real(3278630196122652672.L))+real(989411609030664960.L))/
+        real(46195132141416888404775.L);
+      _C4x[114] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(10454815561036474368.L)-real(56505827080219357184.L)*_n)*_n-
+        real(23462799663937798144.L))+real(16633187419360352256.L))-
+        real(6463336376529457152.L))+real(12544758638274709504.L))-
+        real(4649603171325665280.L))+real(4261199547337979904.L))-
+        real(4305287859314405376.L))+real(364277280888514560.L))+
+        real(113015337613920000.L))/real(46195132141416888404775.L);
+      _C4x[115] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(13802796245122646016.L)-
+        real(25434405874663133184.L)*_n)*_n-real(8337694044015652864.L))+
+        real(12533392600841527296.L))-real(4225871962067259392.L))+
+        real(6121993094360514560.L))-real(4216339765361848320.L))+
+        real(1337342433601413120.L))-real(1998257783506145280.L))+
+        real(703676254544444160.L))/real(46195132141416888404775.L);
+      _C4x[116] = (_n*(_n*(_n*(_n*(_n*(_n*((real(11801027199330217984.L)-
+        real(10162290103828054016.L)*_n)*_n-real(4394816238218551296.L))+
+        real(7309114569868562432.L))-real(3830780949081210880.L))+
+        real(2564692061043732480.L))-real(2868745887941713920.L))+
+        real(372693313207111680.L))+real(110793809332362240.L))/
+        real(46195132141416888404775.L);
+      _C4x[117] = (_n*(_n*(_n*(_n*(_n*((real(7862329335452393472.L)-
+        real(4954857180036468736.L)*_n)*_n-real(3544201182159908864.L))+
+        real(3697851436526551040.L))-real(3077148363054796800.L))+
+        real(984815530288128000.L))-real(1300279457548431360.L))+
+        real(515834171582526720.L))/real(46195132141416888404775.L);
+      _C4x[118] = (_n*(_n*(_n*(_n*((real(4561351010191782400.L)-
+        real(3476050711360447488.L)*_n)*_n-real(3007934134419658752.L))+
+        real(1723564576918052352.L))-real(1984277919243045888.L))+
+        real(336215412009404928.L))+real(96673839692633280.L))/
+        real(46195132141416888404775.L);
+      _C4x[119] = (_n*(_n*(_n*((real(271211726605918208.L)-
+        real(321074139364931584.L)*_n)*_n-real(251667480938514432.L))+
+        real(84756609940000768.L))-real(99010380079880192.L))+
+        real(43146056709216384.L))/real(5132792460157432044975.L);
+      _C4x[120] = (_n*(_n*((real(126104873342976.L)-real(236083241017344.L)*_n)*
+        _n-real(143668734849024.L))+real(29310252353536.L))+
+        real(8220189705728.L))/real(4671365369745867975.L);
+      _C4x[121] = (_n*((real(4726530879488.L)-real(13190908925952.L)*_n)*_n-
+        real(4952243259392.L))+real(2326694308224.L))/
+        real(359335797672759075.L);
+      _C4x[122] = ((real(1497740028928.L)-real(6393343404032.L)*_n)*_n+
+        real(412184096896.L))/real(281641571148919275.L);
+      _C4x[123] = (real(42776448.L)-real(85649408.L)*_n)/real(8407964031075.L);
+      _C4x[124] = real(74207744.L)/real(61002462438225.L);
+      _C4x[125] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*((-real(2537256960.L)*_n-real(4922368000.L))*_n-
+        real(9913649152.L))-real(20825468928.L))-real(45893163008.L))-
+        real(106847240192.L))-real(265153996800.L))-real(709434249216.L))-
+        real(2077628872704.L))-real(6799512674304.L))-real(25624089430016.L))-
+        real(116473133772800.L))-real(691850414610432.L))-
+        real(6354774178643968.L))-real(161252394783090688.L))+
+        real(3731841136408670208.L))-real(25915563447282432000.L))+
+        real(95369273485999349760.L))-real(214580865343498536960.L))+
+        real(302002699372331274240.L))-real(233365722242255984640.L))+
+        real(72926788200704995200.L))/real(56460717061731752494725.L);
+      _C4x[126] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(57693732864.L)*_n-real(118378242048.L))*_n-
+        real(254261280768.L))-real(575562375168.L))-real(1384868610048.L))-
+        real(3580953829376.L))-real(10097064198144.L))-real(31675778555904.L))-
+        real(113828878843904.L))-real(490320413958144.L))-
+        real(2739448106336256.L))-real(23453030216491008.L))-
+        real(548560506517782528.L))+real(11543447295506767872.L))-
+        real(71688207509282603008.L))+real(231374150457337552896.L))-
+        real(447820936369040424960.L))+real(540425883087329648640.L))-
+        real(398816961850542735360.L))+real(164728745112180695040.L))-
+        real(29170715280281998080.L))/real(56460717061731752494725.L);
+      _C4x[127] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(808445556736.L)*_n-real(1786041962496.L))*_n-
+        real(4184459012096.L))-real(10507804246016.L))-real(28685099046912.L))-
+        real(86810454355968.L))-real(299658406053888.L))-
+        real(1233549531045888.L))-real(6545223491975168.L))-
+        real(52802874841321472.L))-real(1152224452623476736.L))+
+        real(22320594549295529984.L))-real(125215982237277116416.L))+
+        real(354448650668679942144.L))-real(570073287671020750848.L))+
+        real(501725308339387883520.L))-real(148802453393668945920.L))-
+        real(140163932244574801920.L))+real(152446338678377748480.L))-
+        real(45471997348674879360.L))/real(56460717061731752494725.L);
+      _C4x[128] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(9597691920384.L)*_n-real(23494436962304.L))*_n-
+        real(62361803423744.L))-real(182950641942528.L))-
+        real(610001932746752.L))-real(2415033030459392.L))-
+        real(12258327890952192.L))-real(93963282570493952.L))-
+        real(1930830919739015168.L))+real(34785359442973310976.L))-
+        real(178075457418310057984.L))+real(445101745270129934336.L))-
+        real(587959696439944249344.L))+real(324671767561098969088.L))+
+        real(140394292808550645760.L))-real(326441861023223070720.L))+
+        real(189482034804857733120.L))-real(40459691781939118080.L))+
+        real(541870872079541760.L))/real(56460717061731752494725.L);
+      _C4x[129] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((-real(115017067874304.L)*_n-real(328354924756992.L))*_n-
+        real(1062119704868864.L))-real(4064233651613696.L))-
+        real(19846559690467328.L))-real(145485874426339328.L))-
+        real(2836182236352976896.L))+real(47920312108896546816.L))-
+        real(225916379763918047232.L))+real(502595593832101625856.L))-
+        real(540905307471102572544.L))+real(127405670163817730048.L))+
+        real(315802573700030470144.L))-real(315723956664196505600.L))+
+        real(79405286402473371648.L))+real(15794357940961947648.L))+
+        real(2544437138460456960.L))-real(5915423686868330880.L))/
+        real(56460717061731752494725.L);
+      _C4x[130] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(1664495212691456.L)*_n-real(6180472042659840.L))*_n-
+        real(29166995845136384.L))-real(205539249288568832.L))-
+        real(3824268163589701632.L))+real(61023735766946799616.L))-
+        real(267055399292611543040.L))+real(532832403184947339264.L))-
+        real(462267689701148262400.L))-real(39015572245931008000.L))+
+        real(383060998113397653504.L))-real(227617994389522472960.L))+
+        real(711622893799702528.L))-real(387352371525525504.L))+
+        real(41263859568909336576.L))-real(20330366864340836352.L))+
+        real(1849428846010609920.L))/real(56460717061731752494725.L);
+      _C4x[131] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(40019005873637376.L)*_n-real(272261294199951360.L))*_n-
+        real(4858877431278753792.L))+real(73653561205573214208.L))-
+        real(301269236174345922560.L))+real(542796485481860829184.L))-
+        real(373296281778879363072.L))-real(162249902898593972224.L))+
+        real(382431663488608434176.L))-real(136592383953202286592.L))-
+        real(22533323410280847360.L))-real(36819831808733503488.L))+
+        real(47746588802853427200.L))-real(5860112779510886400.L))-
+        real(1438706431376406528.L))-real(1384912004220683904.L))/
+        real(56460717061731752494725.L);
+      _C4x[132] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(85554928869091901440.L)-real(5911898202030080000.L)*_n)*_n-
+        real(329037136989733519360.L))+real(538573729785929728000.L))-
+        real(285757899196842770432.L))-real(245880014080640221184.L))+
+        real(347694094967094378496.L))-real(68280878701665910784.L))-
+        real(13052392881684086784.L))-real(60356030390417162240.L))+
+        real(33166479587711647744.L))+real(918143736754929664.L))+
+        real(11253131021190037504.L))-real(9943488469347270656.L))+
+        real(1472213422500165632.L))/real(56460717061731752494725.L);
+      _C4x[133] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(524897089413599477760.L)-real(351118684368217559040.L)*_n)*_n-
+        real(205389679022947020800.L))-real(298119328625579859968.L))+
+        real(300050884905994973184.L))-real(25112131953393565696.L))+
+        real(8008073772506845184.L))-real(66798173902905532416.L))+
+        real(16491634366686474240.L))-real(3992578649173868544.L))+
+        real(19954657147267239936.L))-real(7003958154890747904.L))-
+        real(647530057747206144.L))-real(350875606673394432.L))/
+        real(56460717061731752494725.L);
+      _C4x[134] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(134450348908761120768.L)*_n-real(327239199686486179840.L))*_n+
+        real(251011872757925052416.L))-real(1867758902463971328.L))+
+        real(29035841261959512064.L))-real(61859532384109838336.L))+
+        real(5781632490324590592.L))-real(13107991630759280640.L))+
+        real(20768921077306687488.L))-real(2948895761747066880.L))+
+        real(4066123689261957120.L))-real(5306310981973327872.L))+
+        real(1065217274598188544.L))/real(56460717061731752494725.L);
+      _C4x[135] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(206053883225512914944.L)*_n+real(7720736017805680640.L))+
+        real(45397379103692066816.L))-real(51715684622099906560.L))+
+        real(1760287638430576640.L))-real(20963860111527911424.L))+
+        real(16956495612358184960.L))-real(2208998123324489728.L))+
+        real(8937580274582564864.L))-real(5234902751701590016.L))-
+        real(120335382888706048.L))-real(55084512703673600.L))/
+        real(56460717061731752494725.L);
+      _C4x[136] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(56164240858270859264.L)*_n-real(40506307406240514048.L))+
+        real(2510618052392648704.L))-real(25601333423813328896.L))+
+        real(12055656223301763072.L))-real(4273511299313270784.L))+
+        real(11375548621740441600.L))-real(3565500594733744128.L))+
+        real(1945198541853622272.L))-real(3079469070135951360.L))+
+        real(770312541176478720.L))/real(56460717061731752494725.L);
+      _C4x[137] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(5855674501258481664.L)*
+        _n-real(27112441910496690176.L))+real(8045236379185967104.L))-
+        real(7462794309065711616.L))+real(11438973707792863232.L))-
+        real(2557499453730242560.L))+real(4538321823875051520.L))-
+        real(3653879278459576320.L))+real(107313308782202880.L))+
+        real(35462645868061440.L))/real(56460717061731752494725.L);
+      _C4x[138] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(5578913399404363776.L)*_n-
+        real(10492014814329421824.L))+real(10109913939708706816.L))-
+        real(2718425183160451072.L))+real(6419178928236462080.L))-
+        real(3105303494357729280.L))+real(1168915061406597120.L))-
+        real(1916694726746849280.L))+real(567340713305372160.L))/
+        real(56460717061731752494725.L);
+      _C4x[139] = (_n*(_n*(_n*(_n*(_n*(_n*(real(8321651132554350592.L)*_n-
+        real(3732077199843581952.L))+real(7253697442863263744.L))-
+        real(2508592211553894400.L))+real(2612672354259652608.L))-
+        real(2554306470086418432.L))+real(188124321312829440.L))+
+        real(60321591649541376.L))/real(56460717061731752494725.L);
+      _C4x[140] = (_n*(_n*(_n*(_n*(_n*(real(2409402339733405696.L)*_n-
+        real(771797135840051200.L))+real(1289305518469545984.L))-
+        real(825470576609918976.L))+real(271707946069131264.L))-
+        real(421028947932020736.L))+real(142328015420000256.L))/
+        real(18820239020577250831575.L);
+      _C4x[141] = (_n*(_n*(_n*(_n*(real(4673381031931672576.L)*_n-
+        real(2204999319298383872.L))+real(1674107785629976576.L))-
+        real(1821433246212952064.L))+real(204983045455648768.L))+
+        real(62837115694559360.L))/real(56460717061731752494725.L);
+      _C4x[142] = (_n*(_n*(_n*(real(6479517679616.L)*_n-real(4996902068224.L))+
+        real(1604074520576.L))-real(2261353160704.L))+real(850763001088.L))/
+        real(146396065718531475.L);
+      _C4x[143] = (_n*(_n*(real(262985717004288.L)*_n-real(300145979420672.L))+
+        real(44168174921728.L))+real(13069811607424.L))/
+        real(12736457717512238325.L);
+      _C4x[144] = (_n*(real(2999519051776.L)*_n-real(3815382990848.L))+
+        real(1566641629696.L))/real(344228586959790225.L);
+      _C4x[145] = (real(19006687232.L)*_n+real(5473719680.L))/
+        real(6052799884148325.L);
+      _C4x[146] = real(356096.L)/real(98232628725.L);
+      _C4x[147] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(651542528.L)*_n+real(1480134656.L))+
+        real(3538968576.L))+real(8971595776.L))+real(24338169856.L))+
+        real(71493373952.L))+real(230978592768.L))+real(838422294528.L))+
+        real(3525673238528.L))+real(18006116896768.L))+real(121132059123712.L))+
+        real(1271886620798976.L))+real(37308674210103296.L))-
+        real(1011997787949051904.L))+real(8385124528720715776.L))-
+        real(37733060379243220992.L))+real(107808743940694917120.L))-
+        real(206633425886331924480.L))+real(262987996582604267520.L))-
+        real(192183535964210810880.L))+real(58341430560563996160.L))/
+        real(66726301982046616584675.L);
+      _C4x[148] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(7458340864.L)*_n+real(18373115904.L))+
+        real(48303816704.L))+real(137088466944.L))+real(426386014208.L))+
+        real(1483862474752.L))+real(5953448230912.L))+real(28844183846912.L))+
+        real(182831340797952.L))+real(1794064010805248.L))+
+        real(48695087767732224.L))-real(1207444365345161216.L))+
+        real(9010044821739945984.L))-real(35853635915909267456.L))+
+        real(88642745017904709632.L))-real(143744991920926556160.L))+
+        real(153545786824626094080.L))-real(104039207439272017920.L))+
+        real(40459691781939118080.L))-real(6863697713007528960.L))/
+        real(22242100660682205528225.L);
+      _C4x[149] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(490704814080.L)*_n+real(1351320182784.L))+
+        real(4066117287936.L))+real(13642049150976.L))+real(52552023064576.L))+
+        real(243279881248768.L))+real(1464825953353728.L))+
+        real(13556477720518656.L))+real(343923884074745856.L))-
+        real(7878851450693443584.L))+real(53471567123098435584.L))-
+        real(189193134843847680000.L))+real(401150859822932803584.L))-
+        real(520992983649036394496.L))+real(373301388109800177664.L))-
+        real(53753590510290542592.L))-real(150027552756631388160.L))+
+        real(130049009299090022400.L))-real(36485972053355811840.L))/
+        real(66726301982046616584675.L);
+      _C4x[150] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(9749494448128.L)*_n+real(31673898237952.L))+
+        real(117735157710848.L))+real(523716343988224.L))+
+        real(3014630577946624.L))+real(26503128817270784.L))+
+        real(633547671857250304.L))-real(13527382906757414912.L))+
+        real(84249771272726986752.L))-real(266993234665208676352.L))+
+        real(485046923972015734784.L))-real(484496742159475834880.L))+
+        real(152283106240320520192.L))+real(216332688829859037184.L))-
+        real(288444933088880246784.L))+real(140628841746416959488.L))-
+        real(25381545776247521280.L))-real(361247248053027840.L))/
+        real(66726301982046616584675.L);
+      _C4x[151] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(222873818431488.L)*_n+real(956950274150400.L))+
+        real(5293125928886272.L))+real(44463157172482048.L))+
+        real(1008090872565547008.L))-real(20209302047056539648.L))+
+        real(116418035304358502400.L))-real(332852458239655022592.L))+
+        real(518452370166161571840.L))-real(376911917377749970944.L))-
+        real(64742299564264218624.L))+real(344934836248745881600.L))-
+        real(234766360594590089216.L))+real(31571817959676137472.L))+
+        real(17415258636573794304.L))+real(5088874276920913920.L))-
+        real(5457974726018572800.L))/real(66726301982046616584675.L);
+      _C4x[152] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(8348766968020992.L)*_n+real(67330122517184512.L))+
+        real(1455753628881190912.L))-real(27570062059421564928.L))+
+        real(147907974856061550592.L))-real(384075322020403478528.L))+
+        real(512983686873806733312.L))-real(244731045423731965952.L))-
+        real(222808850930770313216.L))+real(353957909818188103680.L))-
+        real(124681414813050798080.L))-real(26261430418020761600.L))-
+        real(10976353583943057408.L))+real(39242463673357041664.L))-
+        real(15614257863671742464.L))+real(1093165585412640768.L))/
+        real(66726301982046616584675.L);
+      _C4x[153] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1962969852477898752.L)*_n-real(35305448761504137216.L))+
+        real(177444036314716831744.L))-real(420983788835094560768.L))+
+        real(481513040737160986624.L))-real(115770824336966385664.L))-
+        real(316251646991689056256.L))+real(300296703316121845760.L))-
+        real(35698934410878713856.L))-real(22987716899146137600.L))-
+        real(48754125669778980864.L))+real(37558578965926215680.L))-
+        real(819150890898751488.L))-real(835363951119925248.L))-
+        real(1478495983335870464.L))/real(66726301982046616584675.L);
+      _C4x[154] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(204342801095639105536.L)*_n-real(445279393128034074624.L))+
+        real(434697594718445436928.L))-real(3268222682794164224.L))-
+        real(357961072015183773696.L))+real(226521921755465383936.L))+
+        real(13832199423611699200.L))+real(6700002009011060736.L))-
+        real(63646208803315712000.L))+real(17600007691779702784.L))+
+        real(2188204058816348160.L))+real(12161956907243143168.L))-
+        real(8401794163626278912.L))+real(1022107655960530944.L))/
+        real(66726301982046616584675.L);
+      _C4x[155] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(380310685278830297088.L)*_n+real(88396387765523898368.L))-
+        real(364041147913263235072.L))+real(155712348873284886528.L))+
+        real(30751932572098691072.L))+real(37327348376370569216.L))-
+        real(57819133838626406400.L))+real(1568766212252180480.L))-
+        real(7294602820486266880.L))+real(18993005469496762368.L))-
+        real(4271172311806296064.L))-real(681405103973687296.L))-
+        real(465241450273410048.L))/real(66726301982046616584675.L);
+      _C4x[156] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(97442281219530752000.L)-real(348150405088168148992.L)*_n)*_n+
+        real(27296601451329912832.L))+real(58368243554678210560.L))-
+        real(42347388774899941376.L))-real(3874741747224477696.L))-
+        real(18528883346465587200.L))+real(16619875543575822336.L))-
+        real(566081087842844672.L))+real(4532144155924955136.L))-
+        real(4744835934382817280.L))+real(796967417840384000.L))/
+        real(66726301982046616584675.L);
+      _C4x[157] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(13745492203103485952.L)*_n+real(68343033702309838848.L))-
+        real(25868893155690938368.L))-real(954725642114842624.L))-
+        real(25342928463681454080.L))+real(10343803033386303488.L))-
+        real(1580521432914264064.L))+real(9280150579607814144.L))-
+        real(3906003728131391488.L))-real(282227624406138880.L))-
+        real(139103863664855040.L))/real(66726301982046616584675.L);
+      _C4x[158] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(6052176817707810816.L)-
+        real(12742218592723501056.L)*_n)*_n-real(26781807051222712320.L))+
+        real(4776498176041353216.L))-real(5579883103275679744.L))+
+        real(10639659233545158656.L))-real(1908917464976621568.L))+
+        real(2064236965302435840.L))-real(2854027449912360960.L))+
+        real(604128201721067520.L))/real(66726301982046616584675.L);
+      _C4x[159] = (_n*(_n*(_n*(_n*(_n*(_n*((real(1822932896645865472.L)-
+        real(24339113121844232192.L)*_n)*_n-real(9913814970209812480.L))+
+        real(9247924716790882304.L))-real(1332708868547510272.L))+
+        real(4844914036085415936.L))-real(2997554810854883328.L))-
+        real(50494010328244224.L))-real(22158761866472448.L))/
+        real(66726301982046616584675.L);
+      _C4x[160] = (_n*(_n*(_n*(_n*(_n*((real(6758659105338556416.L)-
+        real(12991045950855118848.L)*_n)*_n-real(2398014289541398528.L))+
+        real(6465446490660405248.L))-real(2104051497420128256.L))+
+        real(1141239772082995200.L))-real(1818198204891070464.L))+
+        real(460022605476876288.L))/real(66726301982046616584675.L);
+      _C4x[161] = (_n*(_n*(_n*(_n*((real(6668275491371253760.L)-
+        real(4329224030377279488.L)*_n)*_n-real(1505170500759191552.L))+
+        real(2763025721505054720.L))-real(2216123540377370624.L))+
+        real(60848441102073856.L))+real(20860324867092480.L))/
+        real(66726301982046616584675.L);
+      _C4x[162] = (_n*(_n*(_n*((real(308820567264067584.L)-
+        real(126294781074407424.L)*_n)*_n-real(144990888561147904.L))+
+        real(56899510631006208.L))-real(93587555186442240.L))+
+        real(27308767935877120.L))/real(5132792460157432044975.L);
+      _C4x[163] = (_n*(_n*((real(388156105125888.L)-real(339203576086528.L)*_n)*
+        _n-real(369629960888320.L))+real(24292538175488.L))+
+        real(7980991130112.L))/real(15052177302514463475.L);
+      _C4x[164] = (_n*((real(120871642169344.L)-real(354970809581568.L)*_n)*_n-
+        real(191418588348416.L))+real(62763351585792.L))/
+        real(15052177302514463475.L);
+      _C4x[165] = ((real(1780095066112.L)-real(17835349360640.L)*_n)*_n+
+        real(558875851776.L))/real(970098745068499725.L);
+      _C4x[166] = (real(365122560.L)-real(1010843648.L)*_n)/
+        real(110050906984515.L);
+      _C4x[167] = real(71266816.L)/real(128782976258475.L);
+      _C4x[168] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(307560448.L)*_n-real(843448320.L))*_n-
+        real(2483486720.L))-real(7947157504.L))-real(28082503680.L))-
+        real(111989620736.L))-real(519951810560.L))-real(2948298178560.L))-
+        real(22161374642176.L))-real(261907154862080.L))-
+        real(8721508256907264.L))+real(271335812437114880.L))-
+        real(2611607194707230720.L))+real(13878826806158426112.L))-
+        real(47914997306975518720.L))+real(114995993536741244928.L))-
+        real(196015898073990758400.L))+real(231198238753937817600.L))-
+        real(161838767127756472320.L))+real(48045883991052702720.L))/
+        real(76991886902361480674625.L);
+      _C4x[169] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(16500916224.L)*_n-real(51019251712.L))*_n-
+        real(173614825472.L))-real(664185077760.L))-real(2945088749568.L))-
+        real(15865958105088.L))-real(112611277406208.L))-
+        real(1247523235954688.L))-real(38601085285826560.L))+
+        real(1104095802036584448.L))-real(9644050019193454592.L))+
+        real(45774351558141280256.L))-real(138404521698280341504.L))+
+        real(284185501268958248960.L))-real(404228340917029830656.L))+
+        real(393238047828436844544.L))-real(249292013960767733760.L))+
+        real(92479295501575127040.L))-real(15172384418227169280.L))/
+        real(76991886902361480674625.L);
+      _C4x[170] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((-real(607647105024.L)*_n-real(2240944275456.L))*_n-
+        real(9542163824640.L))-real(49142394650624.L))-real(331645493903360.L))-
+        real(3470695476756480.L))-real(100638372204969984.L))+
+        real(2670416652783452160.L))-real(21356072595758186496.L))+
+        real(91151861395235536896.L))-real(241402627042936160256.L))+
+        real(415858956705852162048.L))-real(455926534694557122560.L))+
+        real(269248315708683845632.L))+real(6634384242504302592.L))-
+        real(148368956696005312512.L))+real(111578280442117816320.L))-
+        real(29983521588401310720.L))/real(76991886902361480674625.L);
+      _C4x[171] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(23257096912896.L)*_n-real(115073105264640.L))*_n-
+        real(742550052798464.L))-real(7386934195257344.L))-
+        real(202127069637771264.L))+real(5013321382993330176.L))-
+        real(36995137120333987840.L))+real(142988907191875928064.L))-
+        real(332642007735974494208.L))+real(474552716780461096960.L))-
+        real(366256832079401582592.L))+real(24921150773070397440.L))+
+        real(247405782807496097792.L))-real(247018160218300219392.L))+
+        real(105077924164108550144.L))-real(16083355739404369920.L))-
+        real(753907300284579840.L))/real(76991886902361480674625.L);
+      _C4x[172] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(1403304034959360.L)*_n-real(13339247254175744.L))*_n-
+        real(346427973580881920.L))+real(8082921585204264960.L))-
+        real(55413792856169775104.L))+real(195214468459530813440.L))-
+        real(400241050095776956416.L))+real(465979428121331367936.L))-
+        real(208812683675222409216.L))-real(186220000330419535872.L))+
+        real(325905618715333099520.L))-real(164744371147807653888.L))+
+        real(3473396570417528832.L))+real(15399350955084873728.L))+
+        real(6701398224751820800.L))-real(4963223060206817280.L))/
+        real(76991886902361480674625.L);
+      _C4x[173] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(11777061016963121152.L)-real(533661238691889152.L)*_n)*_n-
+        real(75455325407142739968.L))+real(243704846349755219968.L))-
+        real(441635765669561630720.L))+real(410731223629459095552.L))-
+        real(43248980294465748992.L))-real(310798436837274681344.L))+
+        real(283640903619160571904.L))-real(50197044714049372160.L))-
+        real(32407633826555101184.L))-real(20076464750566834176.L))+
+        real(35911742032885841920.L))-real(12016300265072230400.L))+
+        real(628256083570483200.L))/real(76991886902361480674625.L);
+      _C4x[174] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(286148909711074787328.L)-real(96132830538509320192.L)*_n)*_n-
+        real(459322475079133298688.L))+real(329693772827152875520.L))+
+        real(98322740978987040768.L))-real(354818048538882080768.L))+
+        real(193586738875038695424.L))+real(21194418143702286336.L))-
+        real(8049696257981808640.L))-real(53828802438319046656.L))+
+        real(27639577808223338496.L))+real(2084216844983992320.L))-
+        real(204247287383982080.L))-real(1488316997975592960.L))/
+        real(76991886902361480674625.L);
+      _C4x[175] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(238885037369572982784.L)-real(457820427413996175360.L)*_n)*_n+
+        real(204486446203126415360.L))-real(343424793380901617664.L))+
+        real(103809582276483743744.L))+real(42369395291493236736.L))+
+        real(31628418163578765312.L))-real(57367117193223864320.L))+
+        real(5618770750732238848.L))+real(1264987381938782208.L))+
+        real(12530347452590456832.L))-real(7054731123364986880.L))+
+        real(713654185252700160.L))/real(76991886902361480674625.L);
+      _C4x[176] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(275417027187888226304.L)*_n-real(301342817914012303360.L))+
+        real(35131687135579078656.L))+real(30981824048207495168.L))+
+        real(60082166880455229440.L))-real(40510412698523271168.L))-
+        real(6350757773743882240.L))-real(11380796165109317632.L))+
+        real(17067163629224067072.L))-real(2218724301039468544.L))-
+        real(576215887400796160.L))-real(530243941500672000.L))/
+        real(76991886902361480674625.L);
+      _C4x[177] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(5655004308495138816.L)-
+        real(8356947575790632960.L)*_n)*_n+real(70887283939275177984.L))-
+        real(19132197487023489024.L))-real(4646382539356766208.L))-
+        real(22374995209410314240.L))+real(11881542816186236928.L))+
+        real(615872365157941248.L))+real(4945999768685903872.L))-
+        real(4202199566240972800.L))+real(600651950866329600.L))/
+        real(76991886902361480674625.L);
+      _C4x[178] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(67558047217549443072.L)*
+        _n-real(2743652916231405568.L))+real(4821533341629415424.L))-
+        real(25890278658092040192.L))+real(4397696767809945600.L))-
+        real(2270215222544826368.L))+real(9203535351495131136.L))-
+        real(2762827619509207040.L))-real(337292092713074688.L))-
+        real(196019184505116672.L))/real(76991886902361480674625.L);
+      _C4x[179] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(15637559539358760960.L)*_n-
+        real(22863959879354155008.L))-real(161048855052288000.L))-
+        real(7682043733328527360.L))+real(9241258915046359040.L))-
+        real(738932767847350272.L))+real(2253179206024298496.L))-
+        real(2618166617633193984.L))+real(476795427747545088.L))/
+        real(76991886902361480674625.L);
+      _C4x[180] = (_n*(_n*(_n*(_n*(_n*((-real(592800441219416064.L)*_n-
+        real(12126096896479985664.L))*_n+real(6529775616064225280.L))-
+        real(874934373083774976.L))+real(5045973283482894336.L))-
+        real(2379468164346413056.L))-real(139146139282440192.L))-
+        real(64598143648862208.L))/real(76991886902361480674625.L);
+      _C4x[181] = (_n*(_n*(_n*(_n*(_n*(real(3435305292766642176.L)*_n-
+        real(2909952940750929920.L))+real(6181581113329188864.L))-
+        real(1277783622080790528.L))+real(1192234787840983040.L))-
+        real(1708480029636165632.L))+real(374926464594468864.L))/
+        real(76991886902361480674625.L);
+      _C4x[182] = (_n*(_n*(_n*(_n*(real(5623558958487961600.L)*_n-
+        real(868119664699375616.L))+real(2923396157365026816.L))-
+        real(1876131005819518976.L))-real(23107849159442432.L))-
+        real(9783576752345088.L))/real(76991886902361480674625.L);
+      _C4x[183] = (_n*(_n*(_n*(real(911117337493504.L)*_n-
+        real(303923513524224.L))+real(163915625398272.L))-
+        real(262220129763328.L))+real(66863037136896.L))/
+        real(17367896887516688625.L);
+      _C4x[184] = (_n*(_n*(real(12647945517072384.L)*_n-
+        real(10109638066176000.L))+real(263225254150144.L))+
+        real(92573294601216.L))/real(538404803513017347375.L);
+      _C4x[185] = (_n*(real(94119501758464.L)*_n-real(155024489185280.L))+
+        real(44741643048960.L))/real(14551481176027495875.L);
+      _C4x[186] = (real(15683878912.L)*_n+real(5250319360.L))/
+        real(18158399652444975.L);
+      _C4x[187] = real(319913984.L)/real(128782976258475.L);
+      _C4x[188] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(276037632.L)*_n+real(955908096.L))+real(3667918848.L))+
+        real(15942942720.L))+real(81013768192.L))+real(505096044544.L))+
+        real(4196182523904.L))+real(55133175939072.L))+
+        real(2054963830456320.L))-real(72129230449016832.L))+
+        real(790750081959591936.L))-real(4843344252002500608.L))+
+        real(19571064528499900416.L))-real(56176203739212677120.L))+
+        real(118480720613612191744.L))-real(184556507109665144832.L))+
+        real(205062785677405716480.L))-real(138718943252362690560.L))+
+        real(40459691781939118080.L))/real(87257471822676344764575.L);
+      _C4x[189] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(24947195904.L)*_n+real(104111013888.L))+real(505867141120.L))+
+        real(3001524682752.L))+real(23599806676992.L))+real(291556978327552.L))+
+        real(10139375705260032.L))-real(328994697149153280.L))+
+        real(3296983969584119808.L))-real(18208623508907360256.L))+
+        real(65236881761666334720.L))-real(162630933523022741504.L))+
+        real(290600655120150036480.L))-real(373355692543690407936.L))+
+        real(337214358669511622656.L))-real(202650282316495060992.L))+
+        real(72375100827319664640.L))-real(11559911937696890880.L))/
+        real(87257471822676344764575.L);
+      _C4x[190] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1785062227968.L)*_n+real(10133931294720.L))+
+        real(75861675999232.L))+real(887077614911488.L))+
+        real(28992109541326848.L))-real(876325163382079488.L))+
+        real(8090109358186168320.L))-real(40561257005671514112.L))+
+        real(129281884501668003840.L))-real(278215799106755887104.L))+
+        real(408027042291149438976.L))-real(387873053022743429120.L))+
+        real(187671352785076486144.L))+real(44589717291314184192.L))-
+        real(141533530506758455296.L))+real(96500134436426219520.L))-
+        real(25130243342819328000.L))/real(87257471822676344764575.L);
+      _C4x[191] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(183355364081664.L)*_n+real(2040474989756416.L))+
+        real(63051054530953216.L))-real(1786942720755892224.L))+
+        real(15300265488609181696.L))-real(70084254776280743936.L))+
+        real(199560718281966354432.L))-real(369477497974761193472.L))+
+        real(431221556043098619904.L))-real(253672955086849966080.L))-
+        real(63391798237093953536.L))+real(252627357255187038208.L))-
+        real(208430629635072983040.L))+real(79159688823137370112.L))-
+        real(10186125301622767616.L))-real(904688760341495808.L))/
+        real(87257471822676344764575.L);
+      _C4x[192] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(115822890136371200.L)*_n-real(3094995547629027328.L))+
+        real(24723587148946604032.L))-real(104065332008695889920.L))+
+        real(265803369098419109888.L))-real(421851123014635618304.L))+
+        real(374519981509846237184.L))-real(63913952851496796160.L))-
+        real(251310020677002592256.L))+real(285262036379621654528.L))-
+        real(109433609381780389888.L))-real(12093228440466489344.L))+
+        real(12188046889208250368.L))+real(7634972322268971008.L))-
+        real(4489936810583719936.L))/real(87257471822676344764575.L);
+      _C4x[193] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(35967097995930370048.L)*_n-real(139835176343423680512.L))+
+        real(321551406140639150080.L))-real(435083276244969586688.L))+
+        real(270381974274631532544.L))+real(110488073189453725696.L))-
+        real(329928754168770068480.L))+real(204912754448674062336.L))-
+        real(2257252858190102528.L))-real(28230593464544264192.L))-
+        real(26525908292341334016.L))+real(32108269919206899712.L))-
+        real(9280877470239162368.L))+real(336225324724617216.L))/
+        real(87257471822676344764575.L);
+      _C4x[194] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(363842629597642358784.L)*_n-real(416193006026396532736.L))+
+        real(148788575136578011136.L))+real(237041576971503403008.L))-
+        real(320916337128487518208.L))+real(98062347555880042496.L))+
+        real(44440889283638722560.L))+real(10067255815659585536.L))-
+        real(53427383386073202688.L))+real(19036217883544780800.L))+
+        real(3582825409059749888.L))+real(355420097170374656.L))-
+        real(1452913824234012672.L))/real(87257471822676344764575.L);
+      _C4x[195] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(30511855713581006848.L)*_n+real(310370866219193466880.L))-
+        real(262823594717752066048.L))+real(13648539574085877760.L))+
+        real(37475487660713181184.L))+real(50436855393397243904.L))-
+        real(45981963324560506880.L))-real(2420681743504769024.L))-
+        real(616311858139758592.L))+real(12450050748250587136.L))-
+        real(5906771916900270080.L))+real(498505012547584000.L))/
+        real(87257471822676344764575.L);
+      _C4x[196] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(187684170744439767040.L)*_n-real(34197579604009156608.L))*_n+
+        real(5020232442064142336.L))+real(68754014988700221440.L))-
+        real(21871620166116704256.L))-real(8569339763401424896.L))-
+        real(14873419657564389376.L))+real(14649475096306778112.L))-
+        real(745025122061516800.L))-real(411903397122015232.L))-
+        real(563208167821049856.L))/real(87257471822676344764575.L);
+      _C4x[197] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(65114834110003544064.L)-
+        real(30188401165698859008.L)*_n)*_n-real(268375796035878912.L))-
+        real(40975114888544256.L))-real(23791816763013332992.L))+
+        real(7379373053645422592.L))+real(949078329147260928.L))+
+        real(5237349808478355456.L))-real(3698499726010220544.L))+
+        real(455104982316515328.L))/real(87257471822676344764575.L);
+      _C4x[198] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(10483623998426972160.L)*_n+
+        real(13521235277915357184.L))-real(22960109307694153728.L))-
+        real(10641874446450688.L))-real(3596445517682311168.L))+
+        real(8763175389458595840.L))-real(1822001320987459584.L))-
+        real(329006490341867520.L))-real(233643343511617536.L))/
+        real(87257471822676344764575.L);
+      _C4x[199] = (_n*(_n*(_n*(_n*(_n*((-real(15814081220999380992.L)*_n-
+        real(2326930085278384128.L))*_n-real(9660863485571497984.L))+
+        real(7470095560500838400.L))-real(5586431887540224.L))+
+        real(2445895936924188672.L))-real(2383766792232763392.L))+
+        real(378295475923943424.L))/real(87257471822676344764575.L);
+      _C4x[200] = (_n*(_n*(_n*(_n*((real(3827411013507481600.L)-
+        real(13214027205766545408.L)*_n)*_n-real(979582502360317952.L))+
+        real(5094849246163107840.L))-real(1824353970541297664.L))-
+        real(180869902013825024.L))-real(95539345357209600.L))/
+        real(87257471822676344764575.L);
+      _C4x[201] = (_n*(_n*(_n*((real(5609365261323862016.L)-
+        real(3839901122350809088.L)*_n)*_n-real(646145409716584448.L))+
+        real(1279609322574184448.L))-real(1593167327803211776.L))+
+        real(306968393988472832.L))/real(87257471822676344764575.L);
+      _C4x[202] = (_n*(_n*((real(276571089505615872.L)-
+        real(51553415930576896.L)*_n)*_n-real(140985119656640512.L))-
+        real(6829032790294528.L))-real(3039228960768000.L))/
+        real(7932497438425122251325.L);
+      _C4x[203] = (_n*((real(5254038644850688.L)-real(6219477419556864.L)*_n)*
+        _n-real(7711766672310272.L))+real(1737170897240064.L))/
+        real(610192110648086327025.L);
+      _C4x[204] = ((-real(2603006914985984.L)*_n-real(23041190002688.L))*_n-
+        real(9413532237824.L))/real(181408465327809448575.L);
+      _C4x[205] = (real(47654830080.L)-real(185838075904.L)*_n)/
+        real(20579519606104305.L);
+      _C4x[206] = real(223215616.L)/real(2189310596394075.L);
+      _C4x[207] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((-real(508035072.L)*_n-real(2390753280.L))*_n-real(13198950400.L))-
+        real(89752862720.L))-real(816751050752.L))-real(11811476733952.L))-
+        real(487223415275520.L))+real(19046006233497600.L))-
+        real(234265876672020480.L))+real(1624243411592675328.L))-
+        real(7512125778616123392.L))+real(25040419262053744640.L))-
+        real(62601048155134361600.L))+real(119423538019025551360.L))-
+        real(173164130127587049472.L))+real(183350255429209817088.L))-
+        real(120625168045532774400.L))+real(34679735813090672640.L))/
+        real(97523056742991208854525.L);
+      _C4x[208] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(29964107776.L)*_n-real(194248704000.L))*_n-real(1676794658816.L))-
+        real(22869029421056.L))-real(883598982905856.L))+
+        real(32091782286147584.L))-real(363202909569024000.L))+
+        real(2290091789515751424.L))-real(9495576867772563456.L))+
+        real(27882845232340926464.L))-real(60097006228928987136.L))+
+        real(96309304854052864000.L))-real(114030216947198590976.L))+
+        real(96943813215444271104.L))-real(55755633229935149056.L))+
+        real(19300026887285243904.L))-real(3015629201138319360.L))/
+        real(32507685580997069618175.L);
+      _C4x[209] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(17507396616192.L)*_n-real(226472133394432.L))*_n-
+        real(8246941263069184.L))+real(280127911143407616.L))-
+        real(2936888066985951232.L))+real(16946415846485393408.L))-
+        real(63275465759427919872.L))+real(163595543569252745216.L))-
+        real(300073764383376277504.L))+real(385976458404820942848.L))-
+        real(323406645699909517312.L))+real(124771537065038839808.L))+
+        real(67995561911851155456.L))-real(132622981694812585984.L))+
+        real(84169561702882869248.L))-real(21410967328082067456.L))/
+        real(97523056742991208854525.L);
+      _C4x[210] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(616804785697325056.L)-real(19306773085159424.L)*_n)*_n-
+        real(6025733289954770944.L))+real(32001340193244184576.L))-
+        real(108084904604387508224.L))+real(246171939711657967616.L))-
+        real(379752583817754312704.L))+real(370399618720067485696.L))-
+        real(155844072978969001984.L))-real(121313588987417329664.L))+
+        real(243746625565487005696.L))-real(174718794881484980224.L))+
+        real(60120859926725656576.L))-real(6359395832592072704.L))-
+        real(938195751465254912.L))/real(97523056742991208854525.L);
+      _C4x[211] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(51373746005049606144.L)-real(10456599624384249856.L)*_n)*_n-
+        real(157611347412635877376.L))+real(316317997999324135424.L))-
+        real(404199497923589308416.L))+real(268628438983223803904.L))+
+        real(48354954402349973504.L))-real(276628362249624354816.L))+
+        real(237995644082980388864.L))-real(67827216051387498496.L))-
+        real(19942287700460568576.L))+real(8846143827894861824.L))+
+        real(8103697483973525504.L))-real(4058967579922956288.L))/
+        real(97523056742991208854525.L);
+      _C4x[212] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(365704313453078904832.L)-real(206894718449275109376.L)*_n)*_n-
+        real(378355260748577374208.L))+real(126798896006978076672.L))+
+        real(210484703195796865024.L))-real(307158877486350073856.L))+
+        real(133609892540477079552.L))+real(25257545305541312512.L))-
+        real(19823325441381367808.L))-real(30462010189242433536.L))+
+        real(28304797805527957504.L))-real(7196660625255170048.L))+
+        real(150054667702173696.L))/real(97523056742991208854525.L);
+      _C4x[213] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(316280474750539005952.L)*_n-real(16506738140957900800.L))*_n+
+        real(302475017617010065408.L))-real(252550415242485563392.L))+
+        real(26656308906358734848.L))+real(46363245865927180288.L))+
+        real(25775342097543987200.L))-real(49510038562184101888.L))+
+        real(12050517427519750144.L))+real(4195639799346888704.L))+
+        real(815200122201178112.L))-real(1394136822006906880.L))/
+        real(97523056742991208854525.L);
+      _C4x[214] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(329133446088160706560.L)*_n-real(163807190522737459200.L))-
+        real(38038366367114067968.L))+real(17122524646869041152.L))+
+        real(60262956334873313280.L))-real(33082835687306166272.L))-
+        real(7086096755808272384.L))-real(2735322552694996992.L))+
+        real(12049598737807310848.L))-real(4941712550027853824.L))+
+        real(346176789274165248.L))/real(97523056742991208854525.L);
+      _C4x[215] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(56736646042272399360.L)*
+        _n-real(25695486169747292160.L))*_n+real(65009144065716387840.L))-
+        real(6036013701613486080.L))-real(7038326576975970304.L))-
+        real(17255296659229769728.L))+real(12097546741958049792.L))+
+        real(269660785965268992.L))-real(231461455444574208.L))-
+        real(575402967885512704.L))/real(97523056742991208854525.L);
+      _C4x[216] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(47970221770628136960.L)*_n+
+        real(11183652170713006080.L))+real(6654450689051197440.L))-
+        real(22998474513203593216.L))+real(3559346603691081728.L))+
+        real(742072554564354048.L))+real(5394335140128227328.L))-
+        real(3242594944105316352.L))+real(345937043493945344.L))/
+        real(97523056742991208854525.L);
+      _C4x[217] = (_n*(_n*(_n*(_n*(_n*(_n*(real(21206076828361949184.L)*_n-
+        real(17866586398261248000.L))-real(2689482293101723648.L))-
+        real(5075995234335195136.L))+real(8063468665972457472.L))-
+        real(1073179604510834688.L))-real(285292882316230656.L))-
+        real(257533821328064512.L))/real(97523056742991208854525.L);
+      _C4x[218] = (_n*(_n*(_n*(_n*((-real(2168602113922301952.L)*_n-
+        real(11032586230347857920.L))*_n+real(5592120435094323200.L))+
+        real(376073112627707904.L))+real(2609094050095038464.L))-
+        real(2158630016898826240.L))+real(301421520076013568.L))/
+        real(97523056742991208854525.L);
+      _C4x[219] = (_n*(_n*(_n*(_n*(real(1508398731138433024.L)*_n-
+        real(1433188842334060544.L))+real(4994077430489022464.L))-
+        real(1342770705408720896.L))-real(191596198836568064.L))-
+        real(117789535196512256.L))/real(97523056742991208854525.L);
+      _C4x[220] = (_n*(_n*(_n*(real(439902674335301632.L)*_n-
+        real(18168502642802688.L))+real(125141764267835392.L))-
+        real(134254942169858048.L))+real(22938749427449856.L))/
+        real(8865732431181018986775.L);
+      _C4x[221] = (_n*(_n*(real(3097302916756144128.L)*_n-
+        real(1250796651410358272.L))-real(104045262882209792.L))-
+        real(51553400218484736.L))/real(97523056742991208854525.L);
+      _C4x[222] = (_n*(real(1654857408708608.L)*_n-real(2162255416262656.L))+
+        real(434335999066112.L))/real(202750637719316442525.L);
+      _C4x[223] = (-real(51213500416.L)*_n-real(22070231040.L))/
+        real(115003197798818175.L);
+      _C4x[224] = real(482213888.L)/real(271875172101225.L);
+      _C4x[225] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(2231369728.L)*_n+real(16436428800.L))+real(162611068928.L))+
+        real(2566931873792.L))+real(116104303214592.L))-
+        real(5002160396828672.L))+real(68211278138572800.L))-
+        real(527955292792553472.L))+real(2748719619618373632.L))-
+        real(10422228557719666688.L))+real(30048503114464493568.L))-
+        real(67416513397837004800.L))+real(118653063580193128448.L))-
+        real(162275513425852366848.L))+real(165122452257884864512.L))-
+        real(106150147880068841472.L))+real(30156292011383193600.L))/
+        real(107788641663306072944475.L);
+      _C4x[226] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1087553667072.L)*_n+real(16236561825792.L))+
+        real(690353678057472.L))-real(27760775846166528.L))+
+        real(350364085667233792.L))-real(2484709491661078528.L))+
+        real(11709732673365737472.L))-real(39599440373689090048.L))+
+        real(99995087980359319552.L))-real(192160489771502665728.L))+
+        real(281993644612666785792.L))-real(312178113804572295168.L))+
+        real(252367351949203341312.L))-real(139906708317025599488.L))+
+        real(47177843502252818432.L))-real(7237510082731966464.L))/
+        real(107788641663306072944475.L);
+      _C4x[227] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(2321342460329984.L)*_n-real(87624051406667776.L))+
+        real(1029554699684020224.L))-real(6727903561715286016.L))+
+        real(28834044814907408384.L))-real(87131527579284013056.L))+
+        real(191789940123405123584.L))-real(309246701905553391616.L))+
+        real(355959190740579385344.L))-real(265399658566779928576.L))+
+        real(76703950634970251264.L))+real(81915983603542523904.L))-
+        real(123166183203322986496.L))+real(74020409632844939264.L))-
+        real(18495859100315025408.L))/real(107788641663306072944475.L);
+      _C4x[228] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(2278819789407256576.L)*_n-real(13791909517065191424.L))+
+        real(53989401256123170816.L))-real(146092539328105283584.L))+
+        real(279136549919162105856.L))-real(369063669832597110784.L))+
+        real(303155228066935996416.L))-real(75427203867469676544.L))-
+        real(156873650151436058624.L))+real(227778831321489473536.L))-
+        real(146142064921074991104.L))+real(45999470831097348096.L))-
+        real(3830903866145112064.L))-real(915087481724731392.L))/
+        real(107788641663306072944475.L);
+      _C4x[229] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(85484487412933459968.L)*_n-real(207519696313245499392.L))+
+        real(342343487242872291328.L))-real(358724413380621238272.L))+
+        real(164770992079469805568.L))+real(128236553616692871168.L))-
+        real(276189113597162422272.L))+real(191834765719799595008.L))-
+        real(37500978531225567232.L))-real(23148176332242812928.L))+
+        real(5803604673929674752.L))+real(8264113601656127488.L))-
+        real(3675109402410614784.L))/real(107788641663306072944475.L);
+      _C4x[230] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(372550883422473551872.L)*_n-real(291388465640112128000.L))+
+        real(975048550637371392.L))+real(263490909276794257408.L))-
+        real(263072399029774057472.L))+real(75626181247843172352.L))+
+        real(38529837946214809600.L))-real(10437661129705521152.L))-
+        real(32398994919785496576.L))+real(24740281721263489024.L))-
+        real(5600848242657984512.L))+real(30413464690753536.L))/
+        real(107788641663306072944475.L);
+      _C4x[231] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(44497094977089699840.L)-real(20453173018838958080.L)*_n)*_n-
+        real(25084538434617344000.L))-real(2816909285156454400.L))+
+        real(5255989055182602240.L))+real(5313795830354804736.L))-
+        real(6245443876828479488.L))+real(945839663757656064.L))+
+        real(610102068278984704.L))+real(168007395832758272.L))-
+        real(189210938594295808.L))/real(15398377380472296134925.L);
+      _C4x[232] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(74424581090432778240.L)*
+        _n-real(57976932679695728640.L))*_n-real(6807209333374320640.L))+
+        real(62100772675576135680.L))-real(20885050910872436736.L))-
+        real(9203592189655908352.L))-real(4716394625768620032.L))+
+        real(11444151948115181568.L))-real(4136102259035471872.L))+
+        real(236973593719209984.L))/real(107788641663306072944475.L);
+      _C4x[233] = (_n*(_n*(_n*(_n*(_n*(_n*((real(53404883454205624320.L)-
+        real(49919870083698524160.L)*_n)*_n+real(5371662883105013760.L))-
+        real(3493811236130258944.L))-real(18479082265901006848.L))+
+        real(9639972225697185792.L))+real(935416409056346112.L))-
+        real(56939893062893568.L))-real(574209275660468224.L))/
+        real(107788641663306072944475.L);
+      _C4x[234] = (_n*(_n*(_n*(_n*(_n*(_n*(real(15457734150169034752.L)*_n+
+        real(13197922425624330240.L))-real(20617355585946386432.L))+
+        real(583624492723470336.L))+real(229369263113109504.L))+
+        real(5430891989732163584.L))-real(2836523797304049664.L))+
+        real(263205781933129728.L))/real(107788641663306072944475.L);
+      _C4x[235] = (_n*(_n*(_n*(_n*((-real(11962142467521773568.L)*_n-
+        real(3835029043890094080.L))*_n-real(6418457916310814720.L))+
+        real(7208879758491254784.L))-real(493610566435209216.L))-
+        real(223724545077411840.L))-real(271643143953448960.L))/
+        real(107788641663306072944475.L);
+      _C4x[236] = (_n*(_n*(_n*((real(3800113671217086464.L)-
+        real(11642532714023747584.L)*_n)*_n+real(495534653961142272.L))+
+        real(2729202525616996352.L))-real(1947332406553870336.L))+
+        real(240934694030671872.L))/real(107788641663306072944475.L);
+      _C4x[237] = (_n*(_n*((real(4768962585824329728.L)-
+        real(2057594272357548032.L)*_n)*_n-real(935950551405821952.L))-
+        real(182507675768061952.L))-real(133472129809514496.L))/
+        real(107788641663306072944475.L);
+      _C4x[238] = (_n*(_n*(real(12188605917167616.L)*_n+
+        real(209617809536188416.L))-real(194671790054703104.L))+
+        real(29729696344178688.L))/real(15398377380472296134925.L);
+      _C4x[239] = ((-real(291547312553984.L)*_n-real(34631982252032.L))*_n-
+        real(19399622787072.L))/real(32013258587260490925.L);
+      _C4x[240] = (real(29689380864.L)-real(164450271232.L)*_n)/
+        real(18158399652444975.L);
+      _C4x[241] = -real(1325662208.L)/real(4764970121563575.L);
+      _C4x[242] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(32992395264.L)*_n-real(564536541184.L))*_n-real(27783262633984.L))+
+        real(1307950517846016.L))-real(19582925808861184.L))+
+        real(167345002366631936.L))-real(968210370835513344.L))+
+        real(4111905772437241856.L))-real(13410419962380550144.L))+
+        real(34483937046121414656.L))-real(70883648372582907904.L))+
+        real(116749538496018907136.L))-real(152081635672445681664.L))+
+        real(149667641455422734336.L))-real(94355687004505636864.L))+
+        real(26537536970017210368.L))/real(118054226583620937034425.L);
+      _C4x[243] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(7907221388132352.L)-real(179214691074048.L)*_n)*_n-
+        real(110141401777307648.L))+real(868043160343805952.L))-
+        real(4583930581544337408.L))+real(17547318819586834432.L))-
+        real(50803334744446599168.L))+real(113825027973376376832.L))-
+        real(199240525155368173568.L))+real(271814562598839386112.L))-
+        real(284412409569249067008.L))+real(220331835808276283392.L))-
+        real(118390672904429764608.L))+real(39043732553588539392.L))-
+        real(5897230437781602304.L))/real(118054226583620937034425.L);
+      _C4x[244] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(2561037277769760768.L)-real(350567539966738432.L)*_n)*_n-
+        real(12399283285044232192.L))+real(42905064156491153408.L))-
+        real(110172130260069384192.L))+real(213062787688508162048.L))-
+        real(308515725044919304192.L))+real(322295352315806220288.L))-
+        real(214726861520594010112.L))+real(40166016800195084288.L))+
+        real(89623113361646419968.L))-real(113906177718655909888.L))+
+        real(65597668940840960000.L))-real(16166545510470254592.L))/
+        real(118054226583620937034425.L);
+      _C4x[245] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(79209066571491180544.L)-real(25253493510248595456.L)*_n)*_n-
+        real(180253741898516135936.L))+real(297879468130890153984.L))-
+        real(343634061029965561856.L))+real(236581088693378351104.L))-
+        real(11837457009513332736.L))-real(176544610687800836096.L))+
+        real(208810886589205970944.L))-real(122271218249773350912.L))+
+        real(35417970488494784512.L))-real(2137291322581581824.L))-
+        real(865889230019100672.L))/real(118054226583620937034425.L);
+      _C4x[246] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(344914019934535680000.L)-real(247585518351380643840.L)*_n)*_n-
+        real(296981563986159861760.L))+real(72214116350495293440.L))+
+        real(180229683679120588800.L))-real(260383131355190394880.L))+
+        real(150307258006241280000.L))-real(15933829848980520960.L))-
+        real(23633470143498027008.L))+real(3200779427592011776.L))+
+        real(8224755000291622912.L))-real(3336535979309137920.L))/
+        real(118054226583620937034425.L);
+      _C4x[247] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(192533439800284282880.L)*_n-real(97694516686796881920.L))*_n+
+        real(280623774829473955840.L))-real(211350383383229235200.L))+
+        real(31741199886172815360.L))+real(42535296349971152896.L))-
+        real(1658370534385123328.L))-real(32878591046534037504.L))+
+        real(21517324801665925120.L))-real(4371544703233949696.L))-
+        real(46514710703505408.L))/real(118054226583620937034425.L);
+      _C4x[248] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(283747078852281630720.L)*_n-real(104725943690503127040.L))-
+        real(45187191658543841280.L))+real(22374117202030755840.L))+
+        real(44256806306916073472.L))-real(37202728358370082816.L))+
+        real(2539421275797848064.L))+real(4034441792987332608.L))+
+        real(1449789070409465856.L))-real(1251078097345183744.L))/
+        real(118054226583620937034425.L);
+      _C4x[249] = (_n*(_n*(_n*(_n*(_n*(_n*((-real(56321598004490403840.L)*_n-
+        real(27898989264249028608.L))*_n+real(58187271506195644416.L))-
+        real(10488728438997778432.L))-real(9555932426178396160.L))-
+        real(6392177544078032896.L))+real(10722699343053193216.L))-
+        real(3465676549913575424.L))+real(157885691632549888.L))/
+        real(118054226583620937034425.L);
+      _C4x[250] = (_n*(_n*(_n*(_n*(_n*(_n*(real(38349135283249741824.L)*_n+
+        real(12282222191403073536.L))+real(799906936383340544.L))-
+        real(18709758659251929088.L))+real(7403284957646290944.L))+
+        real(1343542825945399296.L))+real(101301221628837888.L))-
+        real(564496696970838016.L))/real(118054226583620937034425.L);
+      _C4x[251] = (_n*(_n*(_n*(_n*(_n*(real(18385522823692025856.L)*_n-
+        real(17311052281214402560.L))-real(1558081911333584896.L))-
+        real(425440445347135488.L))+real(5369899160881332224.L))-
+        real(2478526128738795520.L))+real(199935069899980800.L))/
+        real(118054226583620937034425.L);
+      _C4x[252] = (_n*(_n*(_n*((-real(3802164536732024832.L)*_n-
+        real(7479383126163062784.L))*_n+real(6285211757526908928.L))-
+        real(56677317811896320.L))-real(155129966973943808.L))-
+        real(278790769507303424.L))/real(118054226583620937034425.L);
+      _C4x[253] = (_n*(_n*(_n*(real(2211182557075079168.L)*_n+
+        real(432380266489577472.L))+real(2803723207373225984.L))-
+        real(1752158299903492096.L))+real(192986004326449152.L))/
+        real(118054226583620937034425.L);
+      _C4x[254] = (_n*(_n*(real(4452041207794630656.L)*_n-
+        real(599668749687062528.L))-real(161334163675283456.L))-
+        real(144190013656006656.L))/real(118054226583620937034425.L);
+      _C4x[255] = (_n*(real(3209073398906880.L)*_n-real(2605184622526464.L))+
+        real(357815264739328.L))/real(245434982502330430425.L);
+      _C4x[256] = (-real(5140337655808.L)*_n-real(3300780933120.L))/
+        real(5150932701410224575.L);
+      _C4x[257] = real(5125439488.L)/real(4059048622072675.L);
+      _C4x[258] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(6671795486720.L)*_n-real(340738126643200.L))+
+        real(5556652526796800.L))-real(51954701125550080.L))+
+        real(330620825344409600.L))-real(1553917879118725120.L))+
+        real(5650610469522636800.L))-real(16354170685829939200.L))+
+        real(38315485606801571840.L))-real(73250193071826534400.L))+
+        real(114116090259266600960.L))-real(142645112824083251200.L))+
+        real(136443151396949196800.L))-real(84594753866108502016.L))+
+        real(23588921751126409216.L))/real(128319811503935801124375.L);
+      _C4x[259] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(11324896281886720.L)*_n-real(98216454473646080.L))+
+        real(574557871270789120.L))-real(2456040416844185600.L))+
+        real(8019057836535316480.L))-real(20516062627805265920.L))+
+        real(41684118771324682240.L))-real(67505618830921564160.L))+
+        real(86595369947260518400.L))-real(86358122358363914240.L))+
+        real(64500398842194165760.L))-real(33738670163609255936.L))+
+        real(10915452111755935744.L))-real(1626822189732855808.L))/
+        real(42773270501311933708125.L);
+      _C4x[260] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(5082421303600742400.L)*_n-real(19822592539093893120.L))+
+        real(58166028350049484800.L))-real(131028501134605025280.L))+
+        real(227570706948670095360.L))-real(300522987672525864960.L))+
+        real(287800030615107010560.L))-real(171252253497439027200.L))+
+        real(12501916423594967040.L))+real(93250680571438301184.L))-
+        real(105185265804193562624.L))+real(58546515872145473536.L))-
+        real(14274052761526992896.L))/real(128319811503935801124375.L);
+      _C4x[261] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(105383790898346721280.L)*_n-real(208136914244678451200.L))+
+        real(303710159217224581120.L))-real(309004903007230361600.L))+
+        real(174753053390908948480.L))+real(36907004671358402560.L))-
+        real(185217734025622323200.L))+real(189161050019630940160.L))-
+        real(102464139110675120128.L))+real(27409317096350285824.L))-
+        real(992313828341448704.L))-real(806254985527427072.L))/
+        real(128319811503935801124375.L);
+      _C4x[262] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(328074409958965248000.L)*_n-real(228469922819714580480.L))-
+        real(4950401898239754240.L))+real(210076889632934461440.L))-
+        real(236374255355968880640.L))+real(114650922702109409280.L))-
+        real(953987012493312000.L))-real(22586398162745819136.L))+
+        real(1050078458681491456.L))+real(8059197443692036096.L))-
+        real(3038961099295686656.L))/real(128319811503935801124375.L);
+      _C4x[263] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(273011545894803210240.L)-
+        real(167521473070544977920.L)*_n)*_n-real(160170217749904097280.L))+
+        real(454830921552494592.L))+real(40895497723801763840.L))+
+        real(5852613489478074368.L))-real(32357256013314785280.L))+
+        real(18663711808770015232.L))-real(3418428302623244288.L))-
+        real(95543730093686784.L))/real(128319811503935801124375.L);
+      _C4x[264] = (_n*(_n*(_n*(_n*(_n*(_n*((-real(46646098507207802880.L)*_n-
+        real(55181590728680669184.L))*_n+real(7128506606441988096.L))+
+        real(47619150534252953600.L))-real(30689497196554878976.L))-
+        real(438064049108811776.L))+real(3630978130237194240.L))+
+        real(1650971503560228864.L))-real(1177985854434443264.L))/
+        real(128319811503935801124375.L);
+      _C4x[265] = (_n*(_n*(_n*(_n*(_n*((real(50775488411895595008.L)-
+        real(43492866392894472192.L)*_n)*_n-real(2264894610960547840.L))-
+        real(8777858033372889088.L))-real(7712179646405541888.L))+
+        real(9948900906005168128.L))-real(2908130381335101440.L))+
+        real(100147792529326080.L))/real(128319811503935801124375.L);
+      _C4x[266] = (_n*(_n*(_n*(_n*(_n*(real(15383330024249622528.L)*_n+
+        real(5036585180505047040.L))-real(18179914265933119488.L))+
+        real(5444073783608475648.L))+real(1565775689892757504.L))+
+        real(239302712712232960.L))-real(549497872213606400.L))/
+        real(128319811503935801124375.L);
+      _C4x[267] = (_n*(_n*(_n*((-real(13628378796670320640.L)*_n-
+        real(2963709054448304128.L))*_n-real(1115654555757969408.L))+
+        real(5235119911608516608.L))-real(2164937980358164480.L))+
+        real(151159110484623360.L))/real(128319811503935801124375.L);
+      _C4x[268] = (_n*(_n*((real(5355581624668913664.L)-
+        real(8210655445732294656.L)*_n)*_n+real(263609424050913280.L))-
+        real(85997756774088704.L))-real(280996508227076096.L))/
+        real(128319811503935801124375.L);
+      _C4x[269] = (_n*(_n*(real(83743415950376960.L)*_n+
+        real(945290515333513216.L))-real(524622164293320704.L))+
+        real(51572682709270528.L))/real(42773270501311933708125.L);
+      _C4x[270] = ((-real(25148353415217152.L)*_n-real(10257395112476672.L))*_n-
+        real(11627232501956608.L))/real(9870754731071984701875.L);
+      _C4x[271] = (real(2074519535616.L)-real(16716281151488.L)*_n)/
+        real(1866279964279066875.L);
+      _C4x[272] = -real(8589934592.L)/real(13236028115454375.L);
+      _C4x[273] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(15852186076446720.L)-real(1561200143892480.L)*_n)*_n-
+        real(110021720030576640.L))+real(566778557733273600.L))-
+        real(2272266763276124160.L))+real(7302327375998484480.L))-
+        real(19168609361996021760.L))+real(41558833742814904320.L))-
+        real(74732990502430310400.L))+real(111031871603610746880.L))-
+        real(133962366826095575040.L))+real(125031542371022536704.L))-
+        real(76408164782291550208.L))+real(21148688466527125504.L))/
+        real(138585396424250665214325.L);
+      _C4x[274] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(2958823112268840960.L)-real(626676031385763840.L)*_n)*_n-
+        real(10753638090040934400.L))+real(30919950241879818240.L))-
+        real(71469587084240486400.L))+real(133804410448442818560.L))-
+        real(202860010974719508480.L))+real(246853222983637401600.L))-
+        real(236174817190289080320.L))+real(170892532815992193024.L))-
+        real(87323616894047485952.L))+real(27784787193560563712.L))-
+        real(4093294541908475904.L))/real(138585396424250665214325.L);
+      _C4x[275] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(73680257925355929600.L)-real(28673750990051082240.L)*_n)*_n-
+        real(148892120936255324160.L))+real(235994934127141847040.L))-
+        real(287512304815806873600.L))+real(254209647654438174720.L))-
+        real(134376047891605094400.L))-real(8359769760187023360.L))+
+        real(94203796972049006592.L))-real(97139478006830465024.L))+
+        real(52592632902096781312.L))-real(12714020925624811520.L))/
+        real(138585396424250665214325.L);
+      _C4x[276] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(298838728973588889600.L)-real(228610468883894108160.L)*_n)*_n-
+        real(269577861315837296640.L))+real(119683752606899896320.L))+
+        real(73206526506833018880.L))-real(186461951913061515264.L))+
+        real(170093484293994053632.L))-real(86066078878839865344.L))+
+        real(21290392325330042880.L))-real(214554341263015936.L))-
+        real(744235371256086528.L))/real(138585396424250665214325.L);
+      _C4x[277] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(160060419859745341440.L)*
+        _n-real(65897571137303347200.L))*_n+real(223302306570499522560.L))-
+        real(208849685534233067520.L))+real(84929820748836503552.L))+
+        real(9168137573896290304.L))-real(20734355685418991616.L))-
+        real(688244437100265472.L))+real(7816792298515070976.L))-
+        real(2777472995881385984.L))/real(138585396424250665214325.L);
+      _C4x[278] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(249984959643144683520.L)*_n-
+        real(113873120333238632448.L))-real(20504062484885274624.L))+
+        real(36095124782226341888.L))+real(11917724596746321920.L))-
+        real(31185472098366652416.L))+real(16168657511300202496.L))-
+        real(2674683528184070144.L))-real(126102251054825472.L))/
+        real(138585396424250665214325.L);
+      _C4x[279] = (_n*(_n*(_n*(_n*(_n*((-real(54742125407367069696.L)*_n-
+        real(6775438503925776384.L))*_n+real(48145735679794479104.L))-
+        real(24593000341698510848.L))-real(2542380373996732416.L))+
+        real(3150353563947892736.L))+real(1793555262527766528.L))-
+        real(1107424823786602496.L))/real(138585396424250665214325.L);
+      _C4x[280] = (_n*(_n*(_n*(_n*(_n*(real(41679303178092281856.L)*_n+
+        real(3830125412210442240.L))-real(7342331959281975296.L))-
+        real(8686531211100684288.L))+real(9165926187845812224.L))-
+        real(2444079035601387520.L))+real(57748247858380800.L))/
+        real(138585396424250665214325.L);
+      _C4x[281] = (_n*(_n*(_n*(_n*(real(8765911069127344128.L)*_n-
+        real(17118224765014769664.L))+real(3775201851733966848.L))+
+        real(1656694285690470400.L))+real(356504411897331712.L))-
+        real(531367840515620864.L))/real(138585396424250665214325.L);
+      _C4x[282] = (_n*(_n*((-real(3764539380404846592.L)*_n-
+        real(1776277878460121088.L))*_n+real(5047770078955700224.L))-
+        real(1891317913911033856.L))+real(113295579018166272.L))/
+        real(138585396424250665214325.L);
+      _C4x[283] = (_n*(_n*(real(4462595121208098816.L)*_n+
+        real(490548487658668032.L))-real(20052314052100096.L))-
+        real(279713923702194176.L))/real(138585396424250665214325.L);
+      _C4x[284] = (_n*(real(72600258860810240.L)*_n-real(36211635924238336.L))+
+        real(3179186667651072.L))/real(3553471703185914492675.L);
+      _C4x[285] = (-real(19301314592768.L)*_n-real(29359205253120.L))/
+        real(26202570698478098925.L);
+      _C4x[286] = real(2785017856.L)/real(3260242714754025.L);
+      _C4x[287] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(35821823081840640.L)*_n-real(200668545967718400.L))+
+        real(878961399693312000.L))-real(3103409865071001600.L))+
+        real(9011382719317278720.L))-real(21799594960701358080.L))+
+        real(44254816837514035200.L))-real(75514171587821568000.L))+
+        real(107689775133936844800.L))-real(125997036906706108416.L))+
+        real(115108404087608049664.L))-real(69461967983901409280.L))+
+        real(19102041195572887552.L))/real(148850981344565529304275.L);
+      _C4x[288] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(4581213151910952960.L)*_n-real(14619590189383680000.L))+
+        real(37857543608944558080.L))-real(80356003408269803520.L))+
+        real(140318109556675706880.L))-real(200996480282127237120.L))+
+        real(233643442930974720000.L))-real(215589676658378932224.L))+
+        real(151722927633146576896.L))-real(75952236807107641344.L))+
+        real(23815531880194768896.L))-real(3473098399195070464.L))/
+        real(148850981344565529304275.L);
+      _C4x[289] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(88673504147149946880.L)*_n-real(163403083004384378880.L))+
+        real(239244894822822051840.L))-real(271270832021396520960.L))+
+        real(222524211445282897920.L))-real(103327209200830906368.L))-
+        real(24011419553781252096.L))+real(93416275866254573568.L))-
+        real(89799243908620746752.L))+real(47523786589758029824.L))-
+        real(11411609025926660096.L))/real(148850981344565529304275.L);
+      _C4x[290] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(285723804270896087040.L)*_n-real(228591337462101442560.L))+
+        real(72073398978021949440.L))+real(99403506946261647360.L))-
+        real(182826346802342526976.L))+real(152250846083639410688.L))-
+        real(72486330902450798592.L))+real(16574222227323486208.L))+
+        real(313579421845946368.L))-real(683891962775863296.L))/
+        real(148850981344565529304275.L);
+      _C4x[291] = (_n*(_n*(_n*(_n*(_n*(_n*((real(224623684749612810240.L)-
+        real(111637412341182627840.L)*_n)*_n-real(180732219385152798720.L))+
+        real(60659584998462980096.L))+real(15756278678801088512.L))-
+        real(18517453693201154048.L))-real(2070975036814000128.L))+
+        real(7530434710304980992.L))-real(2547317046870278144.L))/
+        real(148850981344565529304275.L);
+      _C4x[292] = (_n*(_n*(_n*(_n*(_n*((-real(74345380106981081088.L)*_n-
+        real(33446175416569036800.L))*_n+real(29766270857812901888.L))+
+        real(16596361781933244416.L))-real(29619050408382038016.L))+
+        real(14003333422240497664.L))-real(2090741671116406784.L))-
+        real(144310940605612032.L))/real(148850981344565529304275.L);
+      _C4x[293] = (_n*(_n*(_n*(_n*((real(46654792779977195520.L)-
+        real(18352967315387056128.L)*_n)*_n-real(19119835431189872640.L))-
+        real(3972190146391965696.L))+real(2647518983439253504.L))+
+        real(1889695856160931840.L))-real(1040545024531496960.L))/
+        real(148850981344565529304275.L);
+      _C4x[294] = (_n*(_n*(_n*(_n*(real(8042800387494772736.L)*_n-
+        real(5581953713670455296.L))-real(9353280430893170688.L))+
+        real(8401655689738452992.L))-real(2057171227478327296.L))+
+        real(26497493910945792.L))/real(148850981344565529304275.L);
+      _C4x[295] = (_n*(_n*((real(2384423818371268608.L)-
+        real(15719743509969764352.L)*_n)*_n+real(1656962409224470528.L))+
+        real(454053617968611328.L))-real(511545454735917056.L))/
+        real(148850981344565529304275.L);
+      _C4x[296] = (_n*((real(1608466708345913344.L)-real(790392194996371456.L)*
+        _n)*_n-real(551028320356007936.L))+real(27909353679880192.L))/
+        real(49616993781521843101425.L);
+      _C4x[297] = (_n*(real(644036807813496832.L)*_n+real(40723815822524416.L))-
+        real(275993534497030144.L))/real(148850981344565529304275.L);
+      _C4x[298] = (real(986902953984.L)-real(12603581530112.L)*_n)/
+        real(1481236940069912025.L);
+      _C4x[299] = -real(455065206784.L)/real(430714287538059525.L);
+      _C4x[300] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1265500302606336000.L)-real(329030078677647360.L)*_n)*_n-
+        real(4024290962288148480.L))+real(10731442566101729280.L))-
+        real(24216347369558507520.L))+real(46455850055887749120.L))-
+        real(75743233786773504000.L))+real(104222689690600341504.L))-
+        real(118698063258739277824.L))+real(106418953266455904256.L))-
+        real(63508085013852717056.L))+real(17365491995975352320.L))/
+        real(159116566264880393394225.L);
+      _C4x[301] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(14882283558650511360.L)-real(6276881500927426560.L)*_n)*_n-
+        real(29370263865120522240.L))+real(48291491547457781760.L))-
+        real(65837522928418160640.L))+real(73521432262361481216.L))-
+        real(65711463267458613248.L))+real(45123233467577925632.L))-
+        real(22181618050576416768.L))+real(6865738920416509952.L))-
+        real(992313828341448704.L))/real(53038855421626797798075.L);
+      _C4x[302] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(238276389608211087360.L)-
+        real(174523148574067261440.L)*_n)*_n-real(253161974471998832640.L))+
+        real(193258055227869757440.L))-real(77313249564178776064.L))-
+        real(35669549238313811968.L))+real(91513553596817866752.L))-
+        real(83142423755775541248.L))+real(43174935134157668352.L))-
+        real(10312018026953703424.L))/real(159116566264880393394225.L);
+      _C4x[303] = (_n*(_n*(_n*(_n*(_n*(_n*((real(31841725142595010560.L)-
+        real(188279571245653032960.L)*_n)*_n+real(117579283767723294720.L))-
+        real(176104951189136736256.L))+real(135914163665861869568.L))-
+        real(61220379106069184512.L))+real(12910069571720839168.L))+
+        real(669828187357708288.L))-real(627158843691892736.L))/
+        real(159116566264880393394225.L);
+      _C4x[304] = (_n*(_n*(_n*(_n*(_n*(_n*(real(217810521794505867264.L)*_n-
+        real(153744045020188508160.L))+real(41144727522385068032.L))+
+        real(19801355318391209984.L))-real(16197257838647574528.L))-
+        real(3156220832737394688.L))+real(7221922156001624064.L))-
+        real(2344197385262989312.L))/real(159116566264880393394225.L);
+      _C4x[305] = (_n*(_n*(_n*(_n*((real(22938676783197716480.L)-
+        real(40412169997639483392.L)*_n)*_n+real(20050083815169720320.L))-
+        real(27838536003172171776.L))+real(12132117403752464384.L))-
+        real(1629635661550059520.L))-real(154210640238477312.L))/
+        real(159116566264880393394225.L);
+      _C4x[306] = (_n*(_n*(_n*(_n*(real(43830217809177083904.L)*_n-
+        real(14345956578488745984.L))-real(4890152593885495296.L))+
+        real(2154933114156089344.L))+real(1949495001503236096.L))-
+        real(977860968983822336.L))/real(159116566264880393394225.L);
+      _C4x[307] = (_n*(_n*((-real(3719479336609251328.L)*_n-
+        real(9760288647306805248.L))*_n+real(7673076722048172032.L))-
+        real(1733840707841425408.L))+real(3433449469771776.L))/
+        real(159116566264880393394225.L);
+      _C4x[308] = (_n*(_n*(real(1246618329292996608.L)*_n+
+        real(1596423229205905408.L))+real(533862837164965888.L))-
+        real(490989441616183296.L))/real(159116566264880393394225.L);
+      _C4x[309] = (_n*(real(241150525200924672.L)*_n-real(76097818233667584.L))+
+        real(3185457252794368.L))/real(8374556119204231231275.L);
+      _C4x[310] = (real(116805930582016.L)*_n-real(331208416296960.L))/
+        real(194757119051261191425.L);
+      _C4x[311] = real(76235669504.L)/real(153472907053791325.L);
+      _C4x[312] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1721080411544616960.L)*_n-real(5011381198321090560.L))+
+        real(12425880866012528640.L))-real(26404996840276623360.L))+
+        real(48217820317026877440.L))-real(75541251830008774656.L))+
+        real(100721669106678366208.L))-real(112009442368633700352.L))+
+        real(98761013701375950848.L))-real(58358780823540334592.L))+
+        real(15877021253463179264.L))/real(169382151185195257484175.L);
+      _C4x[313] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(51120883802969210880.L)*
+        _n-real(94718035280548331520.L))+real(147759931167583764480.L))-
+        real(192871281268107509760.L))+real(207872380922293649408.L))-
+        real(180604372191285346304.L))+real(121336560225286619136.L))-
+        real(58687254261571518464.L))+real(17956547945704718336.L))-
+        real(2574652095156191232.L))/real(169382151185195257484175.L);
+      _C4x[314] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(233990948034277539840.L)*_n-
+        real(234191667386621362176.L))+real(166614854742533210112.L))-
+        real(55591689499608875008.L))-real(44261944760675074048.L))+
+        real(88916995783325122560.L))-real(77122507682856566784.L))+
+        real(39416812563742064640.L))-real(9374374295184080896.L))/
+        real(169382151185195257484175.L);
+      _C4x[315] = (_n*(_n*(_n*(_n*(_n*((real(129491872198837665792.L)-
+        real(1518245134972485632.L)*_n)*_n-real(167545388578629484544.L))+
+        real(121158334303866716160.L))-real(51849068982287990784.L))+
+        real(10042629764302241792.L))+real(906484836737220608.L))-
+        real(574828516554571776.L))/real(169382151185195257484175.L);
+      _C4x[316] = (_n*(_n*(_n*(_n*((real(25652339856428236800.L)-
+        real(128817646927041527808.L)*_n)*_n+real(22035468388032053248.L))-
+        real(13924654715208990720.L))-real(3996941508195385344.L))+
+        real(6905581115818377216.L))-real(2164359862996172800.L))/
+        real(169382151185195257484175.L);
+      _C4x[317] = (_n*(_n*(_n*(_n*(real(16232352634898481152.L)*_n+
+        real(22471975741209706496.L))-real(25967942334035263488.L))+
+        real(10518518050574041088.L))-real(1263617758310957056.L))-
+        real(158507531142955008.L))/real(169382151185195257484175.L);
+      _C4x[318] = (_n*(_n*((-real(10270004577038237696.L)*_n-
+        real(5425519030381314048.L))*_n+real(1690772493784055808.L))+
+        real(1981134204506734592.L))-real(919514337289175040.L))/
+        real(169382151185195257484175.L);
+      _C4x[319] = (_n*((real(367876730725072896.L)-real(523988449653424128.L)*
+        _n)*_n-real(76996497190682624.L))-real(713971740966912.L))/
+        real(8914850062378697762325.L);
+      _C4x[320] = (_n*(real(78774441852534784.L)*_n+real(31478708665581568.L))-
+        real(24754434852519936.L))/real(8914850062378697762325.L);
+      _C4x[321] = (real(10340133765120.L)-real(309821760864256.L)*_n)/
+        real(41464418894784640755.L);
+      _C4x[322] = -real(98573794410496.L)/real(63225886967224806825.L);
+      _C4x[323] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(14067034942655692800.L)-
+        real(6042430918549831680.L)*_n)*_n-real(28363423715898163200.L))+
+        real(49595472326084788224.L))-real(75005498270930698240.L))+
+        real(97248508102999801856.L))-real(105875391886330429440.L))+
+        real(91972562648731484160.L))-real(53869643837114155008.L))+
+        real(14589695205885083648.L))/real(179647736105510121574125.L);
+      _C4x[324] = (_n*(_n*(_n*(_n*(_n*(_n*((real(149245124639427919872.L)-
+        real(100215113757480714240.L)*_n)*_n-real(187432707323852750848.L))+
+        real(195721595769606635520.L))-real(165796358358168502272.L))+
+        real(109226330215392739328.L))-real(52066859386524401664.L))+
+        real(15766725025496825856.L))-real(2244568493213089792.L))/
+        real(179647736105510121574125.L);
+      _C4x[325] = (_n*(_n*(_n*(_n*(_n*((real(142606201206746382336.L)-
+        real(215080052857843482624.L)*_n)*_n-real(37499493979751710720.L))-
+        real(50496787156068990976.L))+real(85911488204862652416.L))-
+        real(71683598662433243136.L))+real(36147356017757257728.L))-
+        real(8567682175313379328.L))/real(179647736105510121574125.L);
+      _C4x[326] = (_n*(_n*(_n*(_n*(_n*(real(136581376733532389376.L)*_n-
+        real(158005196148881489920.L))+real(107944816840187838464.L))-
+        real(44029139666167922688.L))+real(7784110766340177920.L))+
+        real(1059263180007538688.L))-real(527085284282597376.L))/
+        real(179647736105510121574125.L);
+      _C4x[327] = (_n*(_n*(_n*(_n*(real(13495181522029772800.L)*_n+
+        real(22995041460089257984.L))-real(11782208651530338304.L))-
+        real(4638827256800608256.L))+real(6590706033872601088.L))-
+        real(2004579178992631808.L))/real(179647736105510121574125.L);
+      _C4x[328] = (_n*(_n*(_n*(real(1265879281930600448.L)*_n-
+        real(1267904444910010368.L))+real(480426383076491264.L))-
+        real(51142821293326336.L))-real(8370302849384448.L))/
+        real(9455144005553164293375.L);
+      _C4x[329] = (_n*((real(9505621619507200.L)-real(42699430985465856.L)*_n)*
+        _n+real(14970984683536384.L))-real(6507010744909824.L))/
+        real(1350734857936166327625.L);
+      _C4x[330] = (_n*(real(47788073878028288.L)*_n-real(9288124475637760.L))-
+        real(195764609351680.L))/real(1350734857936166327625.L);
+      _C4x[331] = (real(139397458558976.L)*_n-real(96668976414720.L))/
+        real(38592424512461895075.L);
+      _C4x[332] = real(4294967296.L)/real(27767187952228725.L);
+      _C4x[333] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(15634981129939845120.L)*_n-
+        real(30097338675134201856.L))+real(50639966659749609472.L))-
+        real(74213744242736496640.L))+real(93844476590815182848.L))-
+        real(100242963631098036224.L))+real(85922540255226888192.L))-
+        real(49927962580739948544.L))+real(13467410959278538752.L))/
+        real(189913321025824985664075.L);
+      _C4x[334] = (_n*(_n*(_n*(_n*(_n*(_n*(real(49858217603252617216.L)*_n-
+        real(60491202854456918016.L))+real(61398847229284843520.L))-
+        real(50839679340478726144.L))+real(32906504778597531648.L))-
+        real(15481538784725565440.L))+real(4644461635417669632.L))-
+        real(656946876062367744.L))/real(63304440341941661888025.L);
+      _C4x[335] = (_n*(_n*(_n*(_n*(_n*(real(121130233672878784512.L)*_n-
+        real(22460671662164541440.L))-real(54915866362539671552.L))+
+        real(82689769086501519360.L))-real(66768253439656853504.L))+
+        real(33285308387159965696.L))-real(7868084678421381120.L))/
+        real(189913321025824985664075.L);
+      _C4x[336] = (_n*(_n*(_n*((real(5061923935373754368.L)-
+        real(7792939020077498368.L)*_n)*_n-real(1972709952573145088.L))+
+        real(315525202555437056.L))+real(60677923568353280.L))-
+        real(25463057211719680.L))/real(9995437948727630824425.L);
+      _C4x[337] = (_n*(_n*(_n*(real(1214256936128610304.L)*_n-
+        real(516349145942851584.L))-real(269481366435921920.L))+
+        real(330694683447525376.L))-real(98005681906384896.L))/
+        real(9995437948727630824425.L);
+      _C4x[338] = (_n*((real(417355922206097408.L)-real(1171522492569747456.L)*
+        _n)*_n-real(38839698495373312.L))-real(8265819179974656.L))/
+        real(9995437948727630824425.L);
+      _C4x[339] = (_n*(real(46264700517744640.L)*_n+real(104456628295696384.L))-
+        real(42917065568288768.L))/real(9995437948727630824425.L);
+      _C4x[340] = (-real(10984670917296128.L)*_n-real(369538986147840.L))/
+        real(1999087589745526164885.L);
+      _C4x[341] = -real(481783661461504.L)/real(212668892526119804775.L);
+      _C4x[342] = (_n*(_n*(_n*(_n*(_n*((real(2705144950491709440.L)-
+        real(1664074014999445504.L)*_n)*_n-real(3854104364947865600.L))+
+        real(4765074487571906560.L))-real(5003328211950501888.L))+
+        real(4237052720030154752.L))-real(2444453492325089280.L))+
+        real(656946876062367744.L))/real(10535731891902097355475.L);
+      _C4x[343] = (_n*(_n*(_n*(_n*((real(9122922853564416000.L)-
+        real(9221291760855023616.L)*_n)*_n-real(7399880380699901952.L))+
+        real(4713560168787345408.L))-real(2191339868297101312.L))+
+        real(651854264620023808.L))-real(91667005962190848.L))/
+        real(10535731891902097355475.L);
+      _C4x[344] = (_n*(_n*(_n*((-real(525427469856014336.L)*_n-
+        real(3049207427590258688.L))*_n+real(4177991903188353024.L))-
+        real(3280075182609268736.L))+real(1619233731795484672.L))-
+        real(381945858175795200.L))/real(10535731891902097355475.L);
+      _C4x[345] = (_n*(_n*(_n*(real(4512114245415993344.L)*_n-
+        real(1683149991985545216.L))+real(240555551971344384.L))+
+        real(63402238504075264.L))-real(23404341947793408.L))/
+        real(10535731891902097355475.L);
+      _C4x[346] = (_n*((-real(422387287414800384.L)*_n-
+        real(288021468942434304.L))*_n+real(315088146683396096.L))-
+        real(91295508470956032.L))/real(10535731891902097355475.L);
+      _C4x[347] = (_n*(real(362953186375368704.L)*_n-real(28952340182597632.L))-
+        real(8074607235956736.L))/real(10535731891902097355475.L);
+      _C4x[348] = (real(103462944662093824.L)*_n-real(40486251517706240.L))/
+        real(10535731891902097355475.L);
+      _C4x[349] = -real(15530601742336.L)/real(74721502779447498975.L);
+      _C4x[350] = (_n*(_n*(_n*(_n*(_n*(real(2732117070232682496.L)*_n-
+        real(3794607041989836800.L))+real(4596895388010545152.L))-
+        real(4752195907875766272.L))+real(3980471786083975168.L))-
+        real(2281489926170083328.L))+real(611113373081272320.L))/
+        real(11076025835076563886525.L);
+      _C4x[351] = (_n*(_n*(_n*(_n*(real(8586653649302716416.L)*_n-
+        real(6835567032860147712.L))+real(4291072825814417408.L))-
+        real(1973394673439342592.L))+real(582508066256191488.L))-
+        real(81481783077502976.L))/real(11076025835076563886525.L);
+      _C4x[352] = (_n*(_n*((real(4003933165197459456.L)-
+        real(3151270693950193664.L)*_n)*_n-real(3068015673494994944.L))+
+        real(1501840524565282816.L))-real(353665611655544832.L))/
+        real(11076025835076563886525.L);
+      _C4x[353] = (_n*((real(180610178024996864.L)-real(1438992439921606656.L)*
+        _n)*_n+real(64567720829517824.L))-real(21546854491619328.L))/
+        real(11076025835076563886525.L);
+      _C4x[354] = ((real(300168873406103552.L)-real(301121050475757568.L)*_n)*
+        _n-real(85269600635191296.L))/real(11076025835076563886525.L);
+      _C4x[355] = (-real(20983079904477184.L)*_n-real(7828247911858176.L))/
+        real(11076025835076563886525.L);
+      _C4x[356] = -real(38242113925677056.L)/real(11076025835076563886525.L);
+      _C4x[357] = (_n*(_n*(_n*((real(4435148431471673344.L)-
+        real(3729556635555725312.L)*_n)*_n-real(4520439747461513216.L))+
+        real(3748657351553449984.L))-real(2135862909606035456.L))+
+        real(570372481542520832.L))/real(11616319778251030417575.L);
+      _C4x[358] = (_n*(_n*((real(1306413327844376576.L)-
+        real(2109021631748767744.L)*_n)*_n-real(594862178905882624.L))+
+        real(174356155886206976.L))-real(24271169427341312.L))/
+        real(3872106592750343472525.L);
+      _C4x[359] = (_n*(_n*(real(3832937116845735936.L)*_n-
+        real(2875521973796995072.L))+real(1397413308205629440.L))-
+        real(328651447245733888.L))/real(11616319778251030417575.L);
+      _C4x[360] = (_n*(real(132504345286541312.L)*_n+real(64633691527184384.L))-
+        real(19871473648795648.L))/real(11616319778251030417575.L);
+      _C4x[361] = (real(285991770477559808.L)*_n-real(79839662461419520.L))/
+        real(11616319778251030417575.L);
+      _C4x[362] = -real(109401406963712.L)/real(168352460554362759675.L);
+      _C4x[363] = (_n*(_n*(_n*(real(4280073311490146304.L)*_n-
+        real(4306171319487037440.L))+real(3538404340043612160.L))-
+        real(2005095792691380224.L))+real(533965727401508864.L))/
+        real(12156613721425496948625.L);
+      _C4x[364] = (_n*(_n*(real(3590600356037394432.L)*_n-
+        real(1620099597202358272.L))+real(471787245339148288.L))-
+        real(65383558457327616.L))/real(12156613721425496948625.L);
+      _C4x[365] = ((real(1304091159286513664.L)-real(2700435742189944832.L)*_n)*
+        _n-real(306405303358849024.L))/real(12156613721425496948625.L);
+      _C4x[366] = (real(2779565395017728.L)*_n-real(798245441765376.L))/
+        real(528548422670673780375.L);
+      _C4x[367] = -real(3257852953100288.L)/real(528548422670673780375.L);
+      _C4x[368] = (_n*((real(145522562959409152.L)-real(178595872722911232.L)*
+        _n)*_n-real(82049955711156224.L))+real(21794519485775872.L))/
+        real(552039463678259281725.L);
+      _C4x[369] = ((real(18577348462903296.L)-real(64176294690029568.L)*_n)*_n-
+        real(2564061115973632.L))/real(552039463678259281725.L);
+      _C4x[370] = (real(53058033109958656.L)*_n-real(12457466742702080.L))/
+        real(552039463678259281725.L);
+      _C4x[371] = -real(35184372088832.L)/real(26287593508488537225.L);
+      _C4x[372] = (_n*(real(137922738588221440.L)*_n-real(77405618595430400.L))+
+        real(20512488927789056.L))/real(575530504685844783075.L);
+      _C4x[373] = (real(5629499534213120.L)*_n-real(774056185954304.L))/
+        real(191843501561948261025.L);
+      _C4x[374] = -real(11681211533492224.L)/real(575530504685844783075.L);
+      _C4x[375] = (real(3870280929771520.L)-real(14636698788954112.L)*_n)/
+        real(119804309138686056885.L);
+      _C4x[376] = -real(140737488355328.L)/real(39934769712895352295.L);
+      _C4x[377] = real(281474976710656.L)/real(9577116718477165935.L);
+      break;
+    case 30:
+      _C4x[0] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(189921507297691265460.L)*_n+real(211051356190277606640.L))+
+        real(235437542304700439340.L))+real(263732757139505707560.L))+
+        real(296753306928658222500.L))+real(335529072367336230240.L))+
+        real(381371707254733912860.L))+real(435968929396185745560.L))+
+        real(501516705494213672340.L))+real(580907380881328578000.L))+
+        real(678001900257207783180.L))+real(798030944800349830920.L))+
+        real(948198058069232863620.L))+real(1138606998736279625280.L))+
+        real(1383723783186450933500.L))+real(1704747700885707550072.L))+
+        real(2133581749866273735028.L))+real(2719730582247118167728.L))+
+        real(3542806942664009192172.L))+real(4736372918000012289000.L))+
+        real(6536194626840016958820.L))+real(9385305105206178197280.L))+
+        real(14184608852186610229980.L))+real(22965557189254511800920.L))+
+        real(41009923552240199644500.L))+real(85300640988659615260560.L))+
+        real(234576762718813941966540.L))+real(1407460576312883651799240.L))-
+        real(4926112017095092781297340.L))+real(12315280042737731953243350.L))/
+        real(18472920064106597929865025.L);
+      _C4x[1] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(814084305459122880.L)*
+        _n+real(977257180095608880.L))+real(1181333738586811680.L))+
+        real(1438803912381373200.L))+real(1766717362179918720.L))+
+        real(2188646813513537520.L))+real(2737638489144023520.L))+
+        real(3460724822271744720.L))+real(4425960997191074880.L))+
+        real(5733631291815710640.L))+real(7534517181435246240.L))+
+        real(10060456849540932240.L))+real(13676960945781136640.L))+
+        real(18976783312271327088.L))+real(26952532820327392096.L))+
+        real(39328695850069561936.L))+real(59231882009011647936.L))+
+        real(92622403729778018096.L))+real(151563933376000393248.L))+
+        real(262322192381539142160.L))+real(487548317153567698560.L))+
+        real(995411147521867384560.L))+real(2315854506479446568160.L))+
+        real(6561587768358431943120.L))+real(26246351073433727772480.L))+
+        real(255901922965978845781680.L))-real(1876614101750511535732320.L))+
+        real(2814921152625767303598480.L))-real(1231528004273773195324335.L))/
+        real(6157640021368865976621675.L);
+      _C4x[2] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(5965802290210445280.L)*_n+
+        real(7221486469779266880.L))+real(8808931664298199200.L))+
+        real(10835344176917195520.L))+real(13449536441823393120.L))+
+        real(16861067578607229120.L))+real(21369723538109490720.L))+
+        real(27411851282409713280.L))+real(35634826738381513440.L))+
+        real(47019737534826853440.L))+real(63089152167581889440.L))+
+        real(86270061350311784960.L))+real(120550517727542648928.L))+
+        real(172716230726179614656.L))+real(254789732923417162016.L))+
+        real(389109630958630598016.L))+real(619611942192308121056.L))+
+        real(1038925423654293293888.L))+real(1860102818705459371680.L))+
+        real(3631881666912084015360.L))+real(8003918206604403051360.L))+
+        real(21208351796180194887360.L))+real(77967101718141367794720.L))+
+        real(682405127909276922084480.L))-real(4370017453726715674117920.L))+
+        real(5800443587228853837718080.L))-real(1876614101750511535732320.L))-
+        real(351865144078220912949810.L))/real(18472920064106597929865025.L);
+      _C4x[3] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(11175914208053605920.L)*_n+
+        real(13667937175788838800.L))+real(16861339550162167680.L))+
+        real(20999038399924890480.L))+real(26425680245286701280.L))+
+        real(33638522960654060880.L))+real(43368452791032505920.L))+
+        real(56712149125481517360.L))+real(75353600937497414560.L))+
+        real(101946850410735354640.L))+real(140800514090906010880.L))+
+        real(199151303276610186992.L))+real(289644075159731035744.L))+
+        real(435427218872554561744.L))+real(681311393548426257344.L))+
+        real(1120178695163687380144.L))+real(1961835789231289606432.L))+
+        real(3736398365335705110160.L))+real(8005684686014379745920.L))+
+        real(20546805257143922774640.L))+real(72847844388028906959840.L))+
+        real(611609049355935945856080.L))-real(3716174531397351926374080.L))+
+        real(4402825392568507833833520.L))-real(91862228757018047203680.L))-
+        real(1961914742739171150992880.L))+real(645086097476738340407985.L))/
+        real(18472920064106597929865025.L);
+      _C4x[4] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(19114287421443758400.L)*_n+
+        real(23678423776028874240.L))+real(29628855166877803200.L))+
+        real(37488161212699324800.L))+real(48019353608228811840.L))+
+        real(62359359382151650560.L))+real(82241257908344364480.L))+
+        real(110375631851636844672.L))+real(151127771985130778432.L))+
+        real(211768425067030307840.L))+real(304891347591212120256.L))+
+        real(453342475320154808192.L))+real(700930993104637725248.L))+
+        real(1137579729063825992448.L))+real(1964375144319342867392.L))+
+        real(3684174697282499778176.L))+real(7762885136767238210880.L))+
+        real(19564112761373887590912.L))+real(67990379306474992258752.L))+
+        real(557946054599958930165120.L))-real(3289407237782262334234560.L))+
+        real(3653037024325964909410560.L))+real(301061085842328053860800.L))-
+        real(1837244575140360944073600.L))+real(446187968248373372132160.L))+
+        real(63975480741494711445420.L))/real(18472920064106597929865025.L);
+      _C4x[5] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(31662052475060350080.L)*_n+
+        real(39866290420131056400.L))+real(50802965833298388000.L))+
+        real(65614329944749727280.L))+real(86032610217249931200.L))+
+        real(114752661353450749776.L))+real(156090693610066908000.L))+
+        real(217195264099038478960.L))+real(310377044694784996096.L))+
+        real(457836627463413087120.L))+real(701889316028543513248.L))+
+        real(1128859090969929711280.L))+real(1930581167686946940480.L))+
+        real(3583732887624629149648.L))+real(7468860304548325335520.L))+
+        real(18603030262550506124016.L))+real(63824972127283464370560.L))+
+        real(516046046235016723549200.L))-real(2982194210746749443899104.L))+
+        real(3177750723996750436138800.L))+real(435299389165277026864320.L))-
+        real(1680518105688703660974000.L))+real(505628233914679167381600.L))-
+        real(190286045282394526350480.L))+real(119338877537018980965495.L))/
+        real(18472920064106597929865025.L);
+      _C4x[6] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(real(52418567655926775840.L)*_n+
+        real(67404971592604453440.L))+real(87973765278231581280.L))+
+        real(116773213512539294592.L))+real(158028390236333901984.L))+
+        real(218709204614695230656.L))+real(310770431127524424416.L))+
+        real(455683015439866156544.L))+real(694202642447122776352.L))+
+        real(1109123937794466762560.L))+real(1883656912173972550496.L))+
+        real(3471067204725631213696.L))+real(7178184098706951481760.L))+
+        real(17731573440262069019072.L))+real(60284824122569309141984.L))+
+        real(482276777901673891965696.L))-real(2747412285149910406954464.L))+
+        real(2844951125947430113449024.L))+real(487234237114473842267232.L))-
+        real(1548827948914646069873280.L))+real(504896911438948815833760.L))-
+        real(238817417352389244344640.L))+real(101125646782935833476320.L))+
+        real(20504961776120099822250.L))/real(18472920064106597929865025.L);
+      _C4x[7] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(88777991863066500960.L)*_n+
+        real(117383085554502957840.L))+real(158209294686425258304.L))+
+        real(218031909719357931888.L))+real(308437784986056031008.L))+
+        real(450175344764306177488.L))+real(682510556929791762688.L))+
+        real(1084968513380510370864.L))+real(1832976201260005254880.L))+
+        real(3359149233389601704080.L))+real(6906584436101418559680.L))+
+        real(16955186412374716157680.L))+real(57251960794377059910304.L))+
+        real(454342620201979231468368.L))-real(2560462885055838819676032.L))+
+        real(2596312660963884656634288.L))+real(506172260842485507190368.L))-
+        real(1441060516198138862520816.L))+real(489671625404359685421120.L))-
+        real(251773660584863310594960.L))+real(135822835353698068023840.L))-
+        real(60720079998833910458160.L))+real(41902492476612486342645.L))/
+        real(18472920064106597929865025.L);
+      _C4x[8] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(157352525335910459520.L)*_n+
+        real(216112107357009394176.L))+real(304641374195939670912.L))+
+        real(443005003269640933632.L))+real(669087805248518823552.L))+
+        real(1059437867006021978112.L))+real(1782508232470888722816.L))+
+        real(3252675513312165543680.L))+real(6657481389963067610240.L))+
+        real(16264475294831374947840.L))+real(54624571375482100164480.L))+
+        real(430747830766027492306176.L))-real(2407053756464621452637568.L))+
+        real(2401934967172158512489472.L))+real(510116655313811361389952.L))-
+        real(1351897788853967484019968.L))+real(471105017170130292768896.L))-
+        real(252611266238427259932160.L))+real(148999005272714232746880.L))-
+        real(85681317301509592938240.L))+real(39491413689438983583360.L))+
+        real(8826655991801048542680.L))/real(18472920064106597929865025.L);
+      _C4x[9] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(300081463107326685888.L)*_n+
+        real(435075662163761717136.L))+real(655092328287902057184.L))+
+        real(1033979227133161426224.L))+real(1733931840540521746176.L))+
+        real(3153124592961525074128.L))+real(6430214076339224853280.L))+
+        real(15647617897201765676656.L))+real(52323358308772898433856.L))+
+        real(410478657984558252030480.L))-real(2278233799007768880069792.L))+
+        real(2244816466385811147093936.L))+real(506765315069892266043264.L))-
+        real(1276922381534538778700976.L))+real(452553764141681994529696.L))-
+        real(248763146335899789627152.L))+real(153472421487050386678720.L))-
+        real(96955754370391847521136.L))+real(57879404459650387936224.L))-
+        real(27194067276886224403920.L))+real(19427022918663383738715.L))/
+        real(18472920064106597929865025.L);
+      _C4x[10] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(641124631098159779424.L)*_n+
+        real(1009278149678541276480.L))+real(1687900338358129074720.L))+
+        real(3060674856465476565504.L))+real(6222854187406724628960.L))+
+        real(15093678564518798798528.L))+real(50287676051987597743520.L))+
+        real(392822801419344695118720.L))-real(2168073055102155034983072.L))+
+        real(2114525943001808159799360.L))+real(499768298419350406035744.L))-
+        real(1212890066195340610855680.L))+real(435078310414246447814880.L))-
+        real(243068282836260352220736.L))+real(153984410360074655288480.L))-
+        real(102025021643160744300928.L))+real(67161242601898413948000.L))-
+        real(41077712199598055298240.L))+real(19551747405504050728992.L))+
+        real(4556964852924254247750.L))/real(18472920064106597929865025.L);
+      _C4x[11] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(1644593340680774363808.L)*_n+
+        real(2974985345798576277648.L))+real(6033217672533824666880.L))+
+        real(14593332547391192455536.L))+real(48470944278867841871712.L))+
+        real(377263975683542674014288.L))-real(2072466844264004196520512.L))+
+        real(2004280098922226778564912.L))+real(490983001152674306581536.L))-
+        real(1157448735444418176679920.L))+real(418961345006282569203328.L))-
+        real(236735403379970029309712.L))+real(152578379808885400201440.L))-
+        real(103980365080202374289456.L))+real(71949257599003878952768.L))-
+        real(48668654832790395121488.L))+real(30271556639684001914272.L))-
+        real(14541717385575148841072.L))+real(10562542186496209223769.L))/
+        real(18472920064106597929865025.L);
+      _C4x[12] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(5859225767839481941440.L)*_n+real(14138836591954902297600.L))+
+        real(46836981518114363714112.L))+real(363417916476778490830464.L))-
+        real(1988471862920876700983616.L))+real(1909460638889273111625984.L))+
+        real(481401111456226504006464.L))-real(1108873247879487179177088.L))+
+        real(404205608091269807345600.L))-real(230310960802358250088960.L))+
+        real(150227316868554610502720.L))-real(104271177452718125897600.L))+
+        real(74319013457213827752128.L))-real(52940603775677982348544.L))+
+        real(36502659689693769522496.L))-real(22982944304842651153024.L))+
+        real(11115849857024519262656.L))+real(2648408976069309124868.L))/
+        real(18472920064106597929865025.L);
+      _C4x[13] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(45357313447133764627200.L)*_n+real(350992057688664545142288.L))-
+        real(1913915380779142223674464.L))+real(1826804308476682757856816.L))+
+        real(471568337397950033457216.L))-real(1065875812796881025260464.L))+
+        real(390715339577761010443488.L))-real(224046698446479685030800.L))+
+        real(147426865494714014258560.L))-real(103639146131018019198320.L))+
+        real(75309285871462651360800.L))-real(55326930578775326600528.L))+
+        real(40234763951743351716544.L))-real(28135381515304633083696.L))+
+        real(17877808985319180867424.L))-real(8691641782865373187856.L))+
+        real(6372339575414211051807.L))/real(18472920064106597929865025.L);
+      _C4x[14] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1753933532511317034765888.L)-real(1847153977649346830327136.L)*
+        _n)*_n+real(461789084706692153759712.L))-
+        real(1027477306531764197935488.L))+real(378366479907630886502688.L))-
+        real(218054850072167125283136.L))+real(144441107605135284033120.L))-
+        real(102488535780945183240448.L))+real(75481304605813369868192.L))-
+        real(56584143579971679080640.L))+real(42483089984340017145056.L))-
+        real(31372510739198785034368.L))+real(22174438785393712385568.L))-
+        real(14190233504057266556992.L))+real(6926800934824139768672.L))+
+        real(1671964091253290097186.L))/real(18472920064106597929865025.L);
+      _C4x[15] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(452232258222178731259872.L)*_n-real(992920225077050004699120.L))+
+        real(367034239977241909375680.L))-real(212378970982395934608528.L))+
+        real(141414529033734011291040.L))-real(101050148880869812595504.L))+
+        real(75156163830808410647680.L))-real(57139308626006973667280.L))+
+        real(43807877206156354446176.L))-real(33429658024434313696880.L))+
+        real(24979378458362427631168.L))-real(17803992487860150922000.L))+
+        real(11457353713161731633440.L))-real(5610802265994889042352.L))+
+        real(4137334111727488291165.L))/real(18472920064106597929865025.L);
+      _C4x[16] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(356603400938676393126144.L)*_n-real(207028189392477859501056.L))+
+        real(138426858316142976126720.L))-real(99460280478065510819328.L))+
+        real(74525806878683852346624.L))-real(57246300780477923866624.L))+
+        real(44537266454003446889216.L))-real(34728397099533369985536.L))+
+        real(26835866849517672595712.L))-real(20239122580453996764160.L))+
+        real(14521934281100724446976.L))-real(9387445163616609693184.L))+
+        real(4609135838728243047680.L))+real(1121862778166628454320.L))/
+        real(18472920064106597929865025.L);
+      _C4x[17] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(135521498207840115389760.L)*_n-real(97801324580930546164080.L))+
+        real(73708932658832728524384.L))-real(57062294419595186876112.L))+
+        real(44872638803452391883648.L))-real(35523601668082297450032.L))+
+        real(28065863564156663165088.L))-real(21904058542540639116176.L))+
+        real(16643111787427543929280.L))-real(12006564633203377451760.L))+
+        real(7790065294829085108960.L))-real(3833034059675095183440.L))+
+        real(2837212009395740895555.L))/real(18472920064106597929865025.L);
+      _C4x[18] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(72780887999907980778720.L)*_n-real(56687797467093094390464.L))+
+        real(44942288203091579409312.L))-real(35976018484962791685888.L))+
+        real(28869487952817744324192.L))-real(23048040245128473133888.L))+
+        real(18132809768032450731296.L))-real(13861708603609051373440.L))+
+        real(10044727732782400847840.L))-real(6537113063366962023360.L))+
+        real(3222261847927140308640.L))+real(788765879651738958270.L))/
+        real(18472920064106597929865025.L);
+      _C4x[19] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(44830467165217313564448.L)*_n-real(36190573016423876920944.L))+
+        real(29376003983353192454784.L))-real(23829834809301037658256.L))+
+        real(19186376534360080014816.L))-real(15194457458019024700592.L))+
+        real(11674167008212187725120.L))-real(8491094065455827973840.L))+
+        real(5540167474678961177760.L))-real(2734942126196093975280.L))+
+        real(2029779927155061805185.L))/real(18472920064106597929865025.L);
+      _C4x[20] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(9890530249207254091968.L)*_n-real(8118063630608987537920.L))+
+        real(6643669716759343956800.L))-real(5386553664458604177792.L))+
+        real(4289287139671079089600.L))-real(3309498018794454114560.L))+
+        real(2414702008011454632000.L))-real(1578935189784522012800.L))+
+        real(780444455838026203840.L))+real(191815908348659248500.L))/
+        real(6157640021368865976621675.L);
+      _C4x[21] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(6817412133444875030656.L)*_n-
+        real(5620052783236574483024.L))+real(4583277918914439827040.L))-
+        real(3666544959812840807920.L))+real(2839166746024591046720.L))-
+        real(2077083941506777485200.L))+real(1360691529974839700000.L))-
+        real(673303240421980556080.L))+real(500663785927046642285.L))/
+        real(6157640021368865976621675.L);
+      _C4x[22] = (_n*(_n*(_n*(_n*(_n*(_n*(real(960262614181115850976.L)*_n-
+        real(786986354599569927744.L))+real(632056913425981822112.L))-
+        real(490933242387825553792.L))+real(359984540096369636448.L))-
+        real(236201765928323876032.L))+real(116988418102754605088.L))+
+        real(28838938497325330374.L))/real(1231528004273773195324335.L);
+      _C4x[23] = (_n*(_n*(_n*(_n*(_n*(real(23484957834366375456.L)*_n-
+        real(18925443258702887248.L))+real(14738796727059217088.L))-
+        real(10828987655927003952.L))+real(7115236278117316448.L))-
+        real(3526991761547102992.L))+real(2626420759498248999.L))/
+        real(42466482905992179149115.L);
+      _C4x[24] = (_n*(_n*(_n*(_n*(real(2668340077443716480.L)*_n-
+        real(2082843371271969280.L))+real(1532978845352494720.L))-
+        real(1008471996361473280.L))+real(500253303269582720.L))+
+        real(123596899995061064.L))/real(6849432726772932120825.L);
+      _C4x[25] = (_n*(_n*(_n*(real(2156823602081600.L)*_n-
+        real(1589847612210000.L))+real(1046997801668000.L))-
+        real(519691524492400.L))+real(387422508833217.L))/
+        real(8048687105491107075.L);
+      _C4x[26] = (_n*(_n*(real(7937931437280.L)*_n-real(5232466998720.L))+
+        real(2598654782880.L))+real(643173496654.L))/real(45302178830156325.L);
+      _C4x[27] = (_n*(real(21708121824.L)*_n-real(10786479696.L))+
+        real(8048130587.L))/real(210707808512355.L);
+      _C4x[28] = (real(121722048.L)*_n+real(30168404.L))/real(2653289816265.L);
+      _C4x[29] = real(3361.L)/real(109067695.L);
+      _C4x[30] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(814084305459122880.L)*_n-real(977257180095608880.L))*_n-
+        real(1181333738586811680.L))-real(1438803912381373200.L))-
+        real(1766717362179918720.L))-real(2188646813513537520.L))-
+        real(2737638489144023520.L))-real(3460724822271744720.L))-
+        real(4425960997191074880.L))-real(5733631291815710640.L))-
+        real(7534517181435246240.L))-real(10060456849540932240.L))-
+        real(13676960945781136640.L))-real(18976783312271327088.L))-
+        real(26952532820327392096.L))-real(39328695850069561936.L))-
+        real(59231882009011647936.L))-real(92622403729778018096.L))-
+        real(151563933376000393248.L))-real(262322192381539142160.L))-
+        real(487548317153567698560.L))-real(995411147521867384560.L))-
+        real(2315854506479446568160.L))-real(6561587768358431943120.L))-
+        real(26246351073433727772480.L))-real(255901922965978845781680.L))+
+        real(1876614101750511535732320.L))-real(2814921152625767303598480.L))+
+        real(1231528004273773195324335.L))/real(55418760192319793789595075.L);
+      _C4x[31] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(2005643965009613760.L)*
+        _n-real(2429409496302821760.L))*_n-real(2965661919767726400.L))-
+        real(3650954726278679040.L))-real(4536121407398159040.L))-
+        real(5692895300159591040.L))-real(7224136946783000640.L))-
+        real(9279964644013781760.L))-real(12083782077375046080.L))-
+        real(15975351585978180480.L))-real(21484119234250012480.L))-
+        real(29458069729374755840.L))-real(41298475551499997376.L))-
+        real(59405582542762415232.L))-real(88066170611639019072.L))-
+        real(135322933470303651072.L))-real(217183567366376042432.L))-
+        real(367898778451146253696.L))-real(667729216971190543680.L))-
+        real(1328392516302474309120.L))-real(3006547955780334141120.L))-
+        real(8288321391610650875520.L))-real(32421963090712251954240.L))-
+        real(314956212881204733269760.L))+real(2440910649829336682840640.L))-
+        real(4776835895364938454591360.L))+real(3753228203501023071464640.L))-
+        real(1055595432234662738849430.L))/real(55418760192319793789595075.L);
+      _C4x[32] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(3816953936920456800.L)*_n-
+        real(4677189639754023600.L))*_n-real(5782666059330422400.L))-
+        real(7219608463225577040.L))-real(9110981115729129120.L))-
+        real(11635224361148640240.L))-real(15056331161655618240.L))-
+        real(19773358779936305040.L))-real(26404265548567707360.L))-
+        real(35932449379408457008.L))-real(49972283914418892544.L))-
+        real(71270574874949052624.L))-real(104699952805366775584.L))-
+        real(159340438154165872240.L))-real(253142983745603515200.L))-
+        real(424262440221289179664.L))-real(761531304077056446304.L))-
+        real(1497797891719239317424.L))-real(3350658144843794241408.L))-
+        real(9126515871644592444240.L))-real(35225365914345266220960.L))-
+        real(335778588926305020395760.L))+real(2502666770002121924658240.L))-
+        real(4389702217031790969947280.L))+real(2375294772145752363409440.L))+
+        real(426503204943298076302800.L))-real(527797716117331369424715.L))/
+        real(55418760192319793789595075.L);
+      _C4x[33] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(6688421299693756800.L)*_n-
+        real(8318723752159902720.L))*_n-real(10456318988493686400.L))-
+        real(13297764205111054080.L))-real(17132844985350284160.L))-
+        real(22398068386194117120.L))-real(29766990506144868480.L))-
+        real(40307665023770473728.L))-real(55767164347954251136.L))-
+        real(79107406984970348544.L))-real(115563675901661162112.L))-
+        real(174856271434465483520.L))-real(276130458992508848000.L))-
+        real(459921286559271452160.L))-real(820204488667933084800.L))-
+        real(1602120454252197789952.L))-real(3556690557130179471744.L))-
+        real(9598342522049367561216.L))-real(36574602887685465525888.L))-
+        real(341411008525015711000320.L))+real(2442779585045092025685120.L))-
+        real(3876334153582298915351040.L))+real(1269088269550736719351680.L))+
+        real(1574781064406023666348800.L))-real(1207332149377951477534080.L))+
+        real(191926442224484134336260.L))/real(55418760192319793789595075.L);
+      _C4x[34] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(11462002110786579840.L)*_n-
+        real(14532667058590206000.L))*_n-real(18665387532273821280.L))-
+        real(24322846465933422480.L))-real(32217392904290184000.L))-
+        real(43476036592309432560.L))-real(59938038670189729824.L))-
+        real(84714223035796826192.L))-real(123289476739392063744.L))-
+        real(185820728393648468400.L))-real(292255603104432757216.L))-
+        real(484690342916587907344.L))-real(860347070756853376704.L))-
+        real(1671653262597377206896.L))-real(3687406234588003306400.L))-
+        real(9868141697134848102864.L))-real(37152156376431500944512.L))-
+        real(340202559960650654251824.L))+real(2351419036440507359736480.L))-
+        real(3451546200146088209466000.L))+real(668997549187553810374080.L))+
+        real(1735001630130614851288080.L))-real(961079620188970325786400.L))+
+        real(45931114378509023601840.L))+real(6151488532836029946675.L))/
+        real(55418760192319793789595075.L);
+      _C4x[35] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*((-real(19847244376334498880.L)*_n-
+        real(25801395373244530560.L))*_n-real(34092435167930139840.L))-
+        real(45891051087732082944.L))-real(63104393053459745088.L))-
+        real(88951984456050754176.L))-real(129098616922168078784.L))-
+        real(194010162422931018752.L))-real(304186862818327078464.L))-
+        real(502757981992172660096.L))-real(888964630867993808576.L))-
+        real(1719317325273701588736.L))-real(3770674992738836845376.L))-
+        real(10013419727824349669504.L))-real(37287277314258483567552.L))-
+        real(335749034487865066596864.L))+real(2255512032774074262089664.L))-
+        real(3115802587512100727622528.L))+real(326338699607330562336576.L))+
+        real(1684557160859615373085440.L))-real(778370888335670830751040.L))+
+        real(134725851640102540702080.L))-real(177548845496757570225600.L))+
+        real(61514885328360299466750.L))/real(55418760192319793789595075.L);
+      _C4x[36] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*((-real(35580188330979656480.L)*_n-
+        real(47800971987094641840.L))*_n-real(65598887342296596928.L))-
+        real(92274510981260121296.L))-real(133624133893158205536.L))-
+        real(200333254919296556784.L))-real(313279606173452163840.L))-
+        real(516256798917127139088.L))-real(909680190002436316576.L))-
+        real(1751995742683927984432.L))-real(3821884125050105443392.L))-
+        real(10077766696148516843856.L))-real(37158662647818267103968.L))-
+        real(329759833992830299966320.L))+real(2163767191649939424793216.L))-
+        real(2848512689616706443312016.L))+real(118143397748753246652384.L))+
+        real(1590687092722570815621712.L))-real(664715603097770302760640.L))+
+        real(186479282153894749573680.L))-real(204973438336645753269600.L))+
+        real(35733228744713565906960.L))+real(8419096070430488044665.L))/
+        real(55418760192319793789595075.L);
+      _C4x[37] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*((-real(67614346374123618048.L)*_n-
+        real(94942623276258132992.L))*_n-real(137228018043831245056.L))-
+        real(205309620072052627968.L))-real(320314130323449012992.L))-
+        real(526432706840689430528.L))-real(924657026068917288192.L))-
+        real(1773897164768946914816.L))-real(3850578519939696887552.L))-
+        real(10087913193119159688192.L))-real(36869909959797637243136.L))-
+        real(323101223380667185459712.L))+real(2078802922316667474154752.L))-
+        real(2631988397451844271368192.L))-real(14930806384683051123968.L))+
+        real(1494910512547290465575424.L))-real(590282828713516030168832.L))+
+        real(212501349224908436360192.L))-real(202201125550628328827136.L))+
+        real(61134319420473445332480.L))-real(56230572578378141233920.L))+
+        real(26479967975403145628040.L))/real(55418760192319793789595075.L);
+      _C4x[38] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(140135640797037619776.L)*_n-
+        real(209265279469938687024.L))*_n-real(325786240806027892128.L))-
+        real(534090489468272393232.L))-real(935316351805514224896.L))-
+        real(1787817966663647237616.L))-real(3863082324469943710816.L))-
+        real(10061107370431775593936.L))-real(36483809234456367677376.L))-
+        real(316230073692359390037936.L))+real(2001043590628557886029024.L))-
+        real(2453360065026297009092496.L))-real(103394407542075265698432.L))+
+        real(1407604530728476508425872.L))-real(538063919347557729952224.L))+
+        real(224182862009367660707504.L))-real(193375802540129176491328.L))+
+        real(77398825291951865154768.L))-real(76323569275099051176096.L))+
+        real(20299498139747185536240.L))+real(4968168138077891678295.L))/
+        real(55418760192319793789595075.L);
+      _C4x[39] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(330035192316442762432.L)*_n-
+        real(539787852319707457920.L))*_n-real(942651980471728721984.L))-
+        real(1795714705202389126144.L))-real(3863762192004920940480.L))-
+        real(10008869602452047523456.L))-real(36039662586506876291904.L))-
+        real(309392037837973786585344.L))+real(1930118996419671573986624.L))-
+        real(2303504873890674693034880.L))-real(163987936825440233346624.L))+
+        real(1330502303732325803588096.L))-real(499154401904498160623040.L))+
+        real(228101605850403113609088.L))-real(184119365546522586214720.L))+
+        real(87322616002846390639872.L))-real(83535203192403975923904.L))+
+        real(33118898100595057181312.L))-real(24847299380732185680960.L))+
+        real(13670894558772762743250.L))/real(55418760192319793789595075.L);
+      _C4x[40] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(947388313020058838496.L)*_n-real(1799003943382836775600.L))*
+        _n-real(3855720267295109129984.L))-real(9939093360251941403472.L))-
+        real(35562658326305742522400.L))-real(302718790207011419004400.L))+
+        real(1865402076799515601556160.L))-real(2175912282139128640165520.L))-
+        real(206430197983594870667872.L))+real(1262901198421429395158736.L))-
+        real(468727463627992918545280.L))+real(227818255852780731967024.L))-
+        real(175710166112086001196192.L))+real(93128707316214767719312.L))-
+        real(85623932461375306643904.L))+real(41437384895418975263472.L))-
+        real(36831773863672624352992.L))+real(12053690019269973776464.L))+
+        real(2980680072920487920157.L))/real(55418760192319793789595075.L);
+      _C4x[41] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(3841207564338212515968.L)*_n-real(9857294793660195600384.L))*_n-
+        real(35069211459881194299264.L))-real(296278466827896236577024.L))+
+        real(1806221212550456218208640.L))-real(2065860304455691649088000.L))-
+        real(236638770613027231810944.L))+real(1203530014670064977607936.L))-
+        real(444020900085069505371264.L))+real(225268510860390785385472.L))-
+        real(168318066923378504338304.L))+real(96301772308684493015808.L))-
+        real(85532415108775652909696.L))+real(46865263338914335490560.L))-
+        real(42889332527017771659648.L))+real(19806892137255872551168.L))-
+        real(13204705668013650315392.L))+real(7945226928207927374604.L))/
+        real(55418760192319793789595075.L);
+      _C4x[42] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(34570132243058804572416.L)*_n-real(290103005755605244351536.L))*_n+
+        real(1751942018638081895464224.L))-real(1969860415982855605457040.L))-
+        real(258364250937265972420800.L))+real(1151120746513593270556944.L))-
+        real(423365216157605967320736.L))+real(221524358403251902655664.L))-
+        real(161839711497044888838272.L))+real(97790402192806968815184.L))-
+        real(84483808178319136553568.L))+real(50383607194859243315696.L))-
+        real(45979102886110400372800.L))+real(24993236713673849850768.L))-
+        real(20675861806313495973408.L))+real(7622298985427171962672.L))+
+        real(1892850834301749304731.L))/real(55418760192319793789595075.L);
+      _C4x[43] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1701994960858239813972672.L)*_n-
+        real(1885287950016774159024000.L))-real(274065984469264122532800.L))+
+        real(1104566494831757719338240.L))-real(405699254588547485206080.L))+
+        real(217190621111722953075072.L))-real(156125915240022434540736.L))+
+        real(98196995368563810844160.L))-real(83022046253984048172864.L))+
+        real(52617302280444217045632.L))-real(47487104885086738085312.L))+
+        real(28531059373389509918464.L))-real(25079781177753740945472.L))+
+        real(12727519124781414210432.L))-real(7882579214068057288384.L))+
+        real(5015892273759870291558.L))/real(55418760192319793789595075.L);
+      _C4x[44] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1062944632259898279572304.L)-real(285404106963266611203744.L)*
+        _n)*_n-real(390317526654249104686656.L))+
+        real(212613189904717741628976.L))-real(151041081363274969789920.L))+
+        real(97906868047333644171024.L))-real(81401059645446646761856.L))+
+        real(53974314048451953240560.L))-real(48111090638036365839648.L))+
+        real(30962521854484358144720.L))-real(27737242043737957995712.L))+
+        real(16267332716492314463664.L))-real(12811373250402984457312.L))+
+        real(5090958618155564996240.L))+real(1266952522750128264225.L))/
+        real(55418760192319793789595075.L);
+      _C4x[45] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(207990932412946446206976.L)-real(376732087321994151448064.L)*_n)*
+        _n-real(146474601612938666443264.L))+real(97169353635137985289216.L))-
+        real(79743103258702858458624.L))+real(54726083031053696315392.L))-
+        real(48223322779126909061632.L))+real(32629351855022582252544.L))-
+        real(29350330880583378394624.L))+real(18774027310783717152768.L))-
+        real(15996417250061875941888.L))+real(8639532003336273980416.L))-
+        real(5095874742975159969280.L))+real(3365588334499885362960.L))/
+        real(55418760192319793789595075.L);
+      _C4x[46] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(96147780439629766979536.L)-real(142339128738509340355008.L)*_n)*
+        _n-real(78107652208277513893408.L))+real(55056235240537884001008.L))-
+        real(48032132090083457656448.L))+real(33756366984930393685008.L))-
+        real(30313847800677949581024.L))+real(20570433288805596262192.L))-
+        real(18101183122240008151872.L))+real(11184879250589618139216.L))-
+        real(8509304451750124537760.L))+real(3556079264867171963760.L))+
+        real(886075630207202901375.L))/real(55418760192319793789595075.L);
+      _C4x[47] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(55090871324183468777088.L)-real(76523089763985821705664.L)*_n)*
+        _n-real(47658833209034917312320.L))+real(34496060551838452376064.L))-
+        real(30860325336708127460544.L))+real(21863834399640327325056.L))-
+        real(19510153585784551710272.L))+real(13046295420881552462080.L))-
+        real(10857175459784817992640.L))+real(6122978918822394760320.L))-
+        real(3491055165207878210880.L))+real(2366297638955216874810.L))/
+        real(55418760192319793789595075.L);
+      _C4x[48] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(34954321124911591136592.L)-real(47176442350469959824736.L)*_n)*
+        _n-real(31132163789696460427136.L))+real(22792973292386146379696.L))-
+        real(20456406103376609499552.L))+real(14424895721637750243344.L))-
+        real(12503771489851888195520.L))+real(8020051384627945661040.L))-
+        real(5950645450397488696800.L))+real(2576558619861345700560.L))+
+        real(642510925765171283205.L))/real(55418760192319793789595075.L);
+      _C4x[49] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(23453686777064094620672.L)-
+        real(31219511051863266258816.L)*_n)*_n-real(21086659018714357475456.L))+
+        real(15453430466497973157120.L))-real(13674031491581111843200.L))+
+        real(9446133588918941560320.L))-real(7721456099348769690240.L))+
+        real(4492650943146103422720.L))-real(2499503236834749129600.L))+
+        real(1726343175137933236500.L))/real(55418760192319793789595075.L);
+      _C4x[50] = (_n*(_n*(_n*(_n*(_n*(_n*((real(5407589072646469496816.L)-
+        real(7165426380527719942528.L)*_n)*_n-real(4837362034234238303520.L))+
+        real(3510391217391502943440.L))-real(3005898282995297604800.L))+
+        real(1981915927642556595120.L))-real(1443361750708063192160.L))+
+        real(641358162809287868560.L))+real(160019031014469778305.L))/
+        real(18472920064106597929865025.L);
+      _C4x[51] = (_n*(_n*(_n*(_n*(_n*((real(757562138772545005440.L)-
+        real(1007548363563399060928.L)*_n)*_n-real(665218929187409178944.L))+
+        real(470942424602221403392.L))-real(379672162975286765760.L))+
+        real(226107025984450495104.L))-real(123519074556567739456.L))+
+        real(86516815491975991122.L))/real(3694584012821319585973005.L);
+      _C4x[52] = (_n*(_n*(_n*(_n*((real(91200994242608567600.L)-
+        real(122944302767324211936.L)*_n)*_n-real(77327312120249875264.L))+
+        real(52063113028397988432.L))-real(37380420194747347872.L))+
+        real(16937015255732167024.L))+real(4227381449623069023.L))/
+        real(636997243589882687236725.L);
+      _C4x[53] = (_n*(_n*(_n*((real(2010823247286486016.L)-
+        real(2787158949471683840.L)*_n)*_n-real(1603653185828168448.L))+
+        real(972166889809842688.L))-real(523716116426936576.L))+
+        real(370790699985183192.L))/real(20548298180318796362475.L);
+      _C4x[54] = (_n*(_n*((real(106111501951975728.L)-
+        real(155064719533064896.L)*_n)*_n-real(75346950652689248.L))+
+        real(34656942644604176.L))+real(8652573946332745.L))/
+        real(1666078230836659164525.L);
+      _C4x[55] = (_n*((real(5071657205888.L)-real(8250530877888.L)*_n)*_n-
+        real(2702497967936.L))+real(1929520489962.L))/
+        real(135906536490468975.L);
+      _C4x[56] = ((real(1519083436272.L)-real(3263721307296.L)*_n)*_n+
+        real(379339642199.L))/real(91657896702874425.L);
+      _C4x[57] = (real(90505212.L)-real(125915776.L)*_n)/real(7959869448795.L);
+      _C4x[58] = real(917561.L)/real(273868982145.L);
+      _C4x[59] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(10225920963679200.L)*
+        _n+real(13348403825839680.L))+real(17610819000996000.L))+
+        real(23504000383768320.L))+real(31765556074216800.L))+
+        real(43523664374308800.L))+real(60537460447902240.L))+
+        real(85608529926326400.L))+real(123303898748724960.L))+
+        real(181263444621537600.L))+real(272641107033629600.L))+
+        real(420829567562496512.L))+real(668981785391468640.L))+
+        real(1100103380421526208.L))+real(1881755782299979040.L))+
+        real(3371833890456071040.L))+real(6387751981364001248.L))+
+        real(12954182339829093440.L))+real(28616966441622451872.L))+
+        real(70659176399067782400.L))+real(203145132147319874400.L))+
+        real(731322475730351547840.L))+real(3859757510799077613600.L))+
+        real(52492702146867455544960.L))-real(590542899152258874880800.L))+
+        real(1706012819773192305211200.L))-real(1876614101750511535732320.L))+
+        real(703730288156441825899620.L))/real(92364600320532989649325125.L);
+      _C4x[60] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(55388496851101440.L)*_n+
+        real(73297116867312000.L))+real(98160656573506560.L))+
+        real(133181191363743360.L))+real(183292111100862720.L))+
+        real(256250070250062720.L))+real(364526643557260800.L))+
+        real(528677904833124480.L))+real(783535482429889280.L))+
+        real(1189983324838874496.L))+real(1858254845525170176.L))+
+        real(2996123551667774080.L))+real(5013842433670796544.L))+
+        real(8766768115185784704.L))+real(16157555531640001024.L))+
+        real(31764404393681038464.L))+real(67735348410140839680.L))+
+        real(160631861013880758656.L))+real(440913260730182962176.L))+
+        real(1505040457300143765120.L))+real(7475740863021371377920.L))+
+        real(95071921844945701219200.L))-real(1000449146799120917445120.L))+
+        real(2782113213783975143882880.L))-real(3464518341693252065967360.L))+
+        real(2047215383727830766253440.L))-real(469153525437627883933080.L))/
+        real(92364600320532989649325125.L);
+      _C4x[61] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(193786477152168000.L)*_n+
+        real(260786717022574080.L))+real(355789016082678720.L))+
+        real(492766878916663680.L))+real(693948215922327360.L))+
+        real(995554358851411200.L))+real(1458219485527055040.L))+
+        real(2186561839577227392.L))+real(3367385075175560768.L))+
+        real(5347583613890782208.L))+real(8801246886455325120.L))+
+        real(15109857583132764032.L))+real(27289946337266150720.L))+
+        real(52455989242200042240.L))+real(109080529302663219392.L))+
+        real(251462306635481083520.L))+real(668411443501940163648.L))+
+        real(2198913569538989388288.L))+real(10459677882354003828672.L))+
+        real(126190223131095152588160.L))-real(1238779015834356594091200.L))+
+        real(3091381362965054920669440.L))-real(3052296239539910576834880.L))+
+        real(682405127909276922084480.L))+real(761144181129578105401920.L))-
+        real(383852884448968268672520.L))/real(92364600320532989649325125.L);
+      _C4x[62] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(564397049921172480.L)*_n+
+        real(775607788496883840.L))+real(1083186997807084800.L))+
+        real(1540138644113074560.L))+real(2234348005630195200.L))+
+        real(3315926665505055360.L))+real(5050048925185472256.L))+
+        real(7923556934823951232.L))+real(12871056955825911808.L))+
+        real(21783222619092923520.L))+real(38731364103567046912.L))+
+        real(73174877880134192512.L))+real(149279729934157036032.L))+
+        real(336833892044063327872.L))+real(873810621715813169920.L))+
+        real(2794690680798804402048.L))+real(12851978308127269420032.L))+
+        real(148549612910816161650816.L))-real(1373317620657001605169920.L))+
+        real(3097662963746932046524800.L))-real(2370784950212081862197760.L))-
+        real(455857676538585798153600.L))+real(1550078616336909569621760.L))-
+        real(682405127909276922084480.L))+real(68896671567763535402760.L))/
+        real(92364600320532989649325125.L);
+      _C4x[63] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1510159456347225120.L)*_n+
+        real(2131225074243766080.L))+real(3067263814697368160.L))+
+        real(4513288224908855680.L))+real(6810844338272471200.L))+
+        real(10581309789942926272.L))+real(17006095585078593248.L))+
+        real(28450673954439392768.L))+real(49952932107547825440.L))+
+        real(93079891060155650112.L))+real(187003428066745553760.L))+
+        real(414784851299522417280.L))+real(1055235908022005293472.L))+
+        real(3298920275002817205440.L))+real(14757435305564548669408.L))+
+        real(164615132310776762906368.L))-real(1446852921979182545850848.L))+
+        real(2993432434987727176243520.L))-real(1793960530157701997269920.L))-
+        real(1016707823288546414175360.L))+real(1487794318820541296130720.L))-
+        real(371105527406723946553920.L))-real(22386593562634650158880.L))-
+        real(14763572478806471872020.L))/real(92364600320532989649325125.L);
+      _C4x[64] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(real(3926503759589752320.L)*_n+
+        real(5736057719114897664.L))+real(8589583111438156800.L))+
+        real(13234884752815992576.L))+real(21082484153642273280.L))+
+        real(34932749781583856896.L))+real(60695852194351403008.L))+
+        real(111809155009711676160.L))+real(221801493924987622912.L))+
+        real(485023232422784790784.L))+real(1214043802728328879104.L))+
+        real(3723758295178525902592.L))+real(16275479861714760655360.L))+
+        real(176182036867386606083328.L))-real(1483900099438236172621824.L))+
+        real(2853910160118121085694720.L))-real(1353918119411404304454144.L))-
+        real(1264163324955721694918400.L))+real(1273007027473829018563584.L))-
+        real(210408895481144042430720.L))+real(105960500928042046487040.L))-
+        real(152440107163348833749760.L))+real(33579890343951975238320.L))/
+        real(92364600320532989649325125.L);
+      _C4x[65] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(10348807236233434752.L)*_n+
+        real(15833236058289707520.L))+real(25030870678909246848.L))+
+        real(41136745997606531328.L))+real(70842170185100551296.L))+
+        real(129234137024964937728.L))+real(253616491925840964480.L))+
+        real(547913146278462578432.L))+real(1352561511617963045504.L))+
+        real(4081499505667871798784.L))+real(17487479030009948141952.L))+
+        real(184503743811725745818880.L))-real(1498633725517251663134592.L))+
+        real(2708950537964498237039616.L))-real(1024358657433489622349952.L))-
+        real(1357718080316965863965952.L))+real(1072802112995662905134720.L))-
+        real(155746014496473218395648.L))+real(187782414014634557150592.L))-
+        real(149444158084028359776000.L))+real(6338128122996380081280.L))+
+        real(1482959464675435083120.L))/real(92364600320532989649325125.L);
+      _C4x[66] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(28813974765118858240.L)*_n+
+        real(47018702229964543744.L))+real(80348922982315178496.L))+
+        real(145342299480053398784.L))+real(282567261500227801088.L))+
+        real(604059413193177260800.L))+real(1473262487019278362112.L))+
+        real(4383038320173895665920.L))+real(18457229388826488601600.L))+
+        real(190454066254228843818752.L))-real(1499478418032986585689600.L))+
+        real(2570244849456177085371648.L))-real(776332302242292094294016.L))-
+        real(1376417232538117303272704.L))+real(914176297176770559163904.L))-
+        real(145166482459855919292160.L))+real(223399040905236937266176.L))-
+        real(125007388518174757910784.L))+real(34464719880409301543424.L))-
+        real(53065041475699904582400.L))+real(17165763666448529386800.L))/
+        real(92364600320532989649325125.L);
+      _C4x[67] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(89213549963721942624.L)*_n+
+        real(160178600054690713152.L))+real(308847440495627304480.L))+
+        real(654128645982132822528.L))+real(1578464349274375357920.L))+
+        real(4637582930729589290432.L))+real(19234163038099038821792.L))+
+        real(194648740348473794931072.L))-real(1491588254398097307949728.L))+
+        real(2441931481777210121805120.L))-real(587403086315149652198112.L))-
+        real(1358958355574264419618560.L))+real(793071656092041900786912.L))-
+        real(149884297159121689770816.L))+real(232915693481018797481120.L))-
+        real(106097486461191358236544.L))+real(59673903887854299030624.L))-
+        real(65732112028760785933248.L))+real(8325417459220161461280.L))+
+        real(2279862488501171416500.L))/real(92364600320532989649325125.L);
+      _C4x[68] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(332676211076188667136.L)*_n+
+        real(698771409436338781824.L))+real(1670231531257124333568.L))+
+        real(4852771423956136513920.L))+real(19856578439370859107072.L))+
+        real(197527911063230844470400.L))-real(1478199428698110793105920.L))+
+        real(2324951000087213754275712.L))-real(441480804322928718862080.L))-
+        real(1324621492392870291699072.L))+real(700720820593975863399424.L))-
+        real(158384241916642412929664.L))+real(229787803240103030947584.L))-
+        real(94727874271911753084800.L))+real(76721835386908846844416.L))-
+        real(65395982632546671041664.L))+real(19464345252996169356544.L))-
+        real(23969947940443760716160.L))+real(9752291202628836492120.L))/
+        real(92364600320532989649325125.L);
+      _C4x[69] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(1750360477507800441536.L)*_n+real(5034896784851855780864.L))+
+        real(20354291808487928837440.L))+real(199410924180410437662336.L))-
+        real(1461389035468887244838976.L))+real(2218912856068127267586304.L))-
+        real(327220860548568939857344.L))-real(1283189264783818863506560.L))+
+        real(629471489523330331159744.L))-real(166461107883227116972544.L))+
+        real(221216258070492868525888.L))-real(88635937521315812663168.L))+
+        real(86705203987721024664000.L))-real(61948693544619373024512.L))+
+        real(29724227698789988205632.L))-real(33609489189994449029760.L))+
+        real(6542430603722650203840.L))+real(1759266285719289723880.L))/
+        real(92364600320532989649325125.L);
+      _C4x[70] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(20750676603924363380736.L)*_n+real(200532809147824922866560.L))-
+        real(1442514123424746242631936.L))+real(2122918714733138306165376.L))-
+        real(236599827628978397551104.L))-real(1239671295066849607433856.L))+
+        real(573598087596734159074560.L))-real(172832537264684588828544.L))+
+        real(210776075512535926457344.L))-real(85667085855198022840448.L))+
+        real(91750331278805358367488.L))-real(58511115428931574102400.L))+
+        real(37716213508602300539392.L))-real(36872632132887958495872.L))+
+        real(12694658546883640848640.L))-real(12765430379737479113600.L))+
+        real(6025446039159729483000.L))/real(92364600320532989649325125.L);
+      _C4x[71] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(2035928845700220481028928.L)-real(1422473440015137751405920.L)*
+        _n)*_n-real(163882404607538930695200.L))-
+        real(1196615424836726937694080.L))+real(529003988833701589478688.L))-
+        real(177330013217149431865920.L))+real(200156031948174846936672.L))-
+        real(84385655624976395302144.L))+real(93628316085241762426784.L))-
+        real(55840878314952302921664.L))+real(43387747643814191794400.L))-
+        real(37497004539622719339136.L))+real(18071538116079585014304.L))-
+        real(19292542849512407051584.L))+real(4795965398911197711200.L))+
+        real(1267516030173145370940.L))/real(92364600320532989649325125.L);
+      _C4x[72] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(104913580559080807621632.L)*_n-real(1155273392742248110536192.L))*
+        _n+real(492787395690658718947328.L))-real(180168311129085732035072.L))+
+        real(190100239465169451258880.L))-real(83937140546282456677888.L))+
+        real(93573752982776103833600.L))-real(53947756308357148959232.L))+
+        real(47142507870816502516736.L))-real(37139814175395887531520.L))+
+        real(22434457182073563777024.L))-real(22508469801129060084224.L))+
+        real(8780780057373695443968.L))-real(7597582748731977469440.L))+
+        real(3969095839988936541920.L))/real(92364600320532989649325125.L);
+      _C4x[73] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(462884984899016179918080.L)*_n-real(181657666546014617932800.L))+
+        real(180890017322133425173248.L))-real(83841828039865046361600.L))+
+        real(92390039530657458077952.L))-real(52653850736823081416704.L))+
+        real(49450831092728900013824.L))-real(36500401767585397737984.L))+
+        real(25788291725039460834560.L))-real(24010147167193701047296.L))+
+        real(12111681294802971028224.L))-real(12063452177263553457664.L))+
+        real(3511708739491195255040.L))+real(916661338230053172960.L))/
+        real(92364600320532989649325125.L);
+      _C4x[74] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(172586112286902449903616.L)*_n-real(83843124463314953697792.L))+
+        real(90582884130577018475520.L))-real(51773100267400389139968.L))+
+        real(50717873269527405072384.L))-real(35851877739928402641408.L))+
+        real(28260766168381046049792.L))-real(24641738258264699102720.L))+
+        real(14832274053282260420608.L))-real(14672265221402357893632.L))+
+        real(6309801849014622766080.L))-real(4893746262753346629120.L))+
+        real(2747719450008674799840.L))/real(92364600320532989649325125.L);
+      _C4x[75] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(88464230067365972517088.L)*_n-real(51158198782477902887360.L))+
+        real(51256618816174764684192.L))-real(35283865772827250342656.L))+
+        real(30014945147323219818080.L))-real(24842081849940667251776.L))+
+        real(16997908311482491636000.L))-real(16188403886159756795264.L))+
+        real(8594671248920096279520.L))-real(8043852184060868280000.L))+
+        real(2611662709409341529760.L))+real(675732084838686311940.L))/
+        real(92364600320532989649325125.L);
+      _C4x[76] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(51296797078671665468160.L)*_n-real(34811196771702299960448.L))+
+        real(31206641459411733076992.L))-real(24836160156843489059712.L))+
+        real(18681678895674326426880.L))-real(17062382565779482378880.L))+
+        real(10460065523713051471360.L))-real(10078508632973323616640.L))+
+        real(4672292491084876035840.L))-real(3342416484332444803200.L))+
+        real(1978656352225287827400.L))/real(92364600320532989649325125.L);
+      _C4x[77] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(10656202668643435975104.L)*_n-real(8245754510254482276864.L))+
+        real(6654020647736230357568.L))-real(5852702008698615320960.L))+
+        real(3989947706091658142400.L))-real(3799868400102736666880.L))+
+        real(2113805151487135644480.L))-real(1878501406816923512960.L))+
+        real(660044494895188849600.L))+real(169684055409960861000.L))/
+        real(30788200106844329883108375.L);
+      _C4x[78] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(20913313546959607811072.L)*
+        _n-real(17830005446551747023232.L))+real(13178164975286764714240.L))-
+        real(12262116723167456668800.L))+real(7705392247574002460160.L))-
+        real(7219227959126401722240.L))+real(3547658462537036010240.L))-
+        real(2387866187601348854400.L))+real(1471081318455683965800.L))/
+        real(92364600320532989649325125.L);
+      _C4x[79] = (_n*(_n*(_n*(_n*(_n*(_n*(real(4711180203722749927520.L)*_n-
+        real(4275879978901995198528.L))+real(2940155760331451541280.L))-
+        real(2773854532947431196032.L))+real(1606094390631317806560.L))-
+        real(1368369818748899046080.L))+real(510087411385434104992.L))+
+        real(130505638655798393988.L))/real(30788200106844329883108375.L);
+      _C4x[80] = (_n*(_n*(_n*(_n*(_n*(real(111825452951270045184.L)*_n-
+        real(104540386919149525760.L))+real(67360700047710462976.L))-
+        real(61489086780213337344.L))+real(31633938350439698944.L))-
+        real(20316775186789342976.L))+real(12907124073180226032.L))/
+        real(1061662072649804478727875.L);
+      _C4x[81] = (_n*(_n*(_n*(_n*(real(7474051807931633280.L)*_n-
+        real(6961858298376531456.L))+real(4168952324633580928.L))-
+        real(3432280681360430848.L))+real(1338933524782046336.L))+
+        real(341311351846317424.L))/real(102741490901593981812375.L);
+      _C4x[82] = (_n*(_n*(_n*(real(3522180730272768.L)*_n-
+        real(3142089987455744.L))+real(1676633863151104.L))-
+        real(1037928664983808.L))+real(675511217288336.L))/
+        real(71199924394729024125.L);
+      _C4x[83] = (_n*(_n*(real(4862227565319072.L)*_n-real(3892692316249152.L))+
+        real(1573706902301664.L))+real(400010797142476.L))/
+        real(151082766398571343875.L);
+      _C4x[84] = (_n*(real(412763643136.L)*_n-real(248137794944.L))+
+        real(164642704408.L))/real(21823308738779625.L);
+      _C4x[85] = (real(17366491968.L)*_n+real(4404238552.L))/
+        real(2056299607605375.L);
+      _C4x[86] = real(185528.L)/real(30429886905.L);
+      _C4x[87] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(284983078248960.L)*_n-
+        real(407691551904000.L))*_n-real(592093576919040.L))-
+        real(874138152410880.L))-real(1313921943375360.L))-
+        real(2014318351207680.L))-real(3156074835993600.L))-
+        real(5066044262603520.L))-real(8354529134819840.L))-
+        real(14202699529193728.L))-real(24990939325026304.L))-
+        real(45742344300271360.L))-real(87632701712098816.L))-
+        real(177106426569409792.L))-real(381459995687959552.L))-
+        real(887628066889290496.L))-real(2274088435832066560.L))-
+        real(6594856463912993024.L))-real(22610936447701690368.L))-
+        real(98922846958694895360.L))-real(650064422871423598080.L))-
+        real(11376127400249912966400.L))+real(172917136483798677089280.L))-
+        real(734897830056144377629440.L))+real(1469795660112288755258880.L))-
+        real(1364810255818553844168960.L))+real(469153525437627883933080.L))/
+        real(129310440448746185509055175.L);
+      _C4x[88] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(861653267328000.L)*_n-
+        real(1257419066695680.L))*_n-real(1866580716426240.L))-
+        real(2823303349401600.L))-real(4359656760130560.L))-
+        real(6888309378355200.L))-real(11165975109411840.L))-
+        real(18628822411257856.L))-real(32110451109481472.L))-
+        real(57454252534611968.L))-real(107338902927979520.L))-
+        real(210952929008310272.L))-real(440372736334748672.L))-
+        real(989280867938004992.L))-real(2435475357084664832.L))-
+        real(6748907616017745920.L))-real(21961196894606814208.L))-
+        real(90443745790806761472.L))-real(553967942968691414016.L))-
+        real(8931319896842167695360.L))+real(123512240345570483635200.L))-
+        real(473246899850396379402240.L))+real(864585682418993385446400.L))-
+        real(839883234349879288719360.L))+real(419941617174939644359680.L))-
+        real(85300640988659615260560.L))/real(43103480149582061836351725.L);
+      _C4x[89] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(14274538625341440.L)*_n-
+        real(21343252110508800.L))*_n-real(32551079991252480.L))-
+        real(50747404089473280.L))-real(81079762642457600.L))-
+        real(133162564816981760.L))-real(225641748677005824.L))-
+        real(396262261490943232.L))-real(725296576014782464.L))-
+        real(1393576282060757760.L))-real(2837216312433839616.L))-
+        real(6198328401867297024.L))-real(14789250483252317184.L))-
+        real(39557611146245629696.L))-real(123628669481617000960.L))-
+        real(485955931264974691584.L))-real(2818050389683096881152.L))-
+        real(42543419048702717997824.L))+real(541899355639730636782080.L))-
+        real(1858406998471881744902400.L))+real(2851182558714063901178880.L))-
+        real(1882911600847078451838720.L))-real(61756120172785241817600.L))+
+        real(734897830056144377629440.L))-real(278867480155233357582600.L))/
+        real(129310440448746185509055175.L);
+      _C4x[90] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*((-real(63272655802122240.L)*_n-
+        real(97514239231672320.L))*_n-real(153883215408742400.L))-
+        real(249379662286651392.L))-real(416505325937147904.L))-
+        real(720053843215040512.L))-real(1295574605803765760.L))-
+        real(2443059370299097088.L))-real(4872274637860159488.L))-
+        real(10403723182808711168.L))-real(24198789550791016448.L))-
+        real(62897054614224273408.L))-real(190266399892582350848.L))-
+        real(720263541748219363328.L))-real(3995286238793153855488.L))-
+        real(57131473147589926256640.L))+real(678471555924374059696128.L))-
+        real(2104505372891018930438144.L))+real(2700107586838745056985088.L))-
+        real(967748079961632347750400.L))-real(1102509261189934422343680.L))+
+        real(1227321630381247753175040.L))-real(395239169105825547632640.L))+
+        real(26246351073433727772480.L))/real(129310440448746185509055175.L);
+      _C4x[91] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*((-real(252522425678361600.L)*_n-
+        real(404540409892093440.L))*_n-real(667306280226658304.L))-
+        real(1138243609979499008.L))-real(2018368194099821568.L))-
+        real(3746012130808915456.L))-real(7341817097894551552.L))-
+        real(15378806133081463296.L))-real(35015980682664576000.L))-
+        real(88862392425594686976.L))-real(261612210224901236736.L))-
+        real(959767001045613806080.L))-real(5129687653822518578176.L))-
+        real(70076479488182086252032.L))+real(783832600852928646713344.L))-
+        real(2226130096779574334171648.L))+real(2409821757379709188303872.L))-
+        real(239150222073228853599744.L))-real(1494017625781889191065600.L))+
+        real(977216409599107430592000.L))-real(94909405739227845319680.L))-
+        real(18851868263271284344320.L))-real(21228666309394926874800.L))/
+        real(129310440448746185509055175.L);
+      _C4x[92] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*((-real(973495431253567488.L)*_n-
+        real(1641257265622900736.L))*_n-real(2873832677337503744.L))-
+        real(5261101932096516096.L))-real(10158025789064611840.L))-
+        real(20930633641192554496.L))-real(46796081238907090944.L))-
+        real(116359447866156716032.L))-real(334728929598291601408.L))-
+        real(1195619953343914549248.L))-real(6190862543882483095552.L))-
+        real(81327683923032432062464.L))+real(863934270537120264566784.L))-
+        real(2271442193347694086307840.L))+real(2096079424610442041903104.L))+
+        real(265875889944857000718336.L))-real(1544311105732929937156096.L))+
+        real(659123871408136075354112.L))-real(7393776218398452750336.L))+
+        real(130465103303238753423360.L))-real(122212111499827636439040.L))+
+        real(19136271448277532168480.L))/real(129310440448746185509055175.L);
+      _C4x[93] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(3840807064263579648.L)*_n-
+        real(6947503040769950208.L))*_n-real(13239954509886692352.L))-
+        real(26892807512740517376.L))-real(59180922678208880640.L))-
+        real(144571946003804580352.L))-real(407626441370380739584.L))-
+        real(1422659141802369662464.L))-real(7166776190652489263104.L))-
+        real(91005163358079412130304.L))+real(924313509896617986905088.L))-
+        real(2270947239939790397744640.L))+real(1802927901688480821940224.L))+
+        real(598127057836437928232448.L))-real(1454839332586740350071808.L))+
+        real(428226314172607749059072.L))-real(37289072743757418723328.L))+
+        real(209484673453844235836928.L))-real(93371862060784130374656.L))-
+        real(4154759572265185605120.L))-real(2214281940405786630960.L))/
+        real(129310440448746185509055175.L);
+      _C4x[94] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(16517156456001093632.L)*_n-
+        real(33127887155820871680.L))*_n-real(71891304803438116864.L))-
+        real(172906707481828655104.L))-real(478994355649219706880.L))-
+        real(1638064878248325431296.L))-real(8055227035135093325824.L))-
+        real(99285305747425816510464.L))+real(969476781942207048925184.L))-
+        real(2243439064506960248750080.L))+real(1544084416774299511996416.L))+
+        real(810475073455093316386816.L))-real(1321037679819531135795200.L))+
+        real(284344070234553422757888.L))-real(94216091717394767626240.L))+
+        real(222837426994882148728832.L))-real(57503509823823967862784.L))+
+        real(31293536043619139469312.L))-real(47935185269127583580160.L))+
+        real(11393792194349679912000.L))/real(129310440448746185509055175.L);
+      _C4x[95] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(84714001464288978432.L)*_n-real(200941415186676672256.L))*
+        _n-real(547998684961299804160.L))-real(1840489117213869504768.L))-
+        real(8859106670338174204416.L))-real(106351507021513312955136.L))+
+        real(1002924527198675185204224.L))-real(2200450490793923279355136.L))+
+        real(1321058042212741229261312.L))+real(942484193093322258059520.L))-
+        real(1183409147433759727179776.L))+real(201072798095806514069248.L))-
+        real(144042491577537801282048.L))+real(205482842661004182785280.L))-
+        real(41776119603145535204352.L))+real(63975308760281854704384.L))-
+        real(51746882357358674572800.L))+real(1868228623991352166656.L))+
+        real(530032146963507202728.L))/real(129310440448746185509055175.L);
+      _C4x[96] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(614135397419521059840.L)*_n-real(2029496796056565006336.L))*_n-
+        real(9583769587121662514176.L))-real(112374216799040651728896.L))+
+        real(1027330790585017514738688.L))-real(2149078090210374168113152.L))+
+        real(1130838635691375328041984.L))+real(1021253030445581493417984.L))-
+        real(1057337809042960081079296.L))+real(155632357157352456478720.L))-
+        real(178978008684414653428736.L))+real(179081461018233307498496.L))-
+        real(41258406674064609827840.L))+real(82777372390874374549504.L))-
+        real(43722680618064601416704.L))+real(14181450230461498120192.L))-
+        real(22747251805940995386368.L))+real(7056084237857907973616.L))/
+        real(129310440448746185509055175.L);
+      _C4x[97] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(10235580119040855076864.L)*_n-real(117504174823777438113024.L))*_n+
+        real(1044730268341507622493696.L))-real(2093700354938164863391488.L))+
+        real(969103139246444163197952.L))+real(1064823604916846067535616.L))-
+        real(947306142763111052445184.L))+real(132650370052616144983296.L))-
+        real(200231381396720892753920.L))+real(153384793406985951951616.L))-
+        real(48088534189377285843456.L))+real(89848698361989693047040.L))-
+        real(36467122299547148934144.L))+real(27762158605900621588224.L))-
+        real(29218970048938255928832.L))+real(2943279304805965294848.L))+
+        real(870499733657429153544.L))/real(129310440448746185509055175.L);
+      _C4x[98] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1056674213554723884269568.L)*_n-
+        real(2037015865816681711632384.L))+real(831503687880225443905536.L))+
+        real(1085128663156891375435776.L))-real(853316935986419365412864.L))+
+        real(122565343760489227583488.L))-real(211139283993045649489920.L))+
+        real(131788142645403755872256.L))-real(57115718899333218009088.L))+
+        real(89641594514284024332288.L))-real(32760078772324259758080.L))+
+        real(38194619800476822208512.L))-real(28893806218509377961984.L))+
+        real(8831092330942177443840.L))-real(12363529263319048421376.L))+
+        real(4611444212679725565312.L))/real(129310440448746185509055175.L);
+      _C4x[99] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(714135758963408477853696.L)*_n+real(1090077500564781946573824.L))-
+        real(773726121568277926055936.L))+real(119635921376481383894016.L))-
+        real(214891046679826394757120.L))+real(114857184123263841731584.L))-
+        real(65723571174824953470976.L))+real(85695615809430471326720.L))-
+        real(32099511064053217691648.L))+real(44706355729364789949440.L))-
+        real(26823885157692190339072.L))+real(15411402899308282194944.L))-
+        real(17606310685717619955712.L))+real(2729933130679178224640.L))+
+        real(778760667879547712800.L))/real(129310440448746185509055175.L);
+      _C4x[100] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(120480286056717284327424.L)-real(706459247949592149282816.L)*_n)*
+        _n-real(213966319828151508709376.L))+real(102084407499395048906752.L))-
+        real(72848145868005195878400.L))+real(80247421404982120841216.L))-
+        real(33338585931827047395328.L))+real(47966681842274535825408.L))-
+        real(25032150605463492513792.L))+real(21123254785067415257088.L))-
+        real(19134104642702225584128.L))+real(6224608695707437572096.L))-
+        real(7414678232192469504000.L))+real(3160386894563310081600.L))/
+        real(129310440448746185509055175.L);
+      _C4x[101] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(92670063848109897812992.L)-real(210136488069104402829312.L)*_n)*
+        _n-real(78232536984927882131456.L))+real(74544736435560844379136.L))-
+        real(35503255021235290071040.L))+real(48944290218386746244096.L))-
+        real(24062787725474210482176.L))+real(25401405602815184352256.L))-
+        real(19104176304186263908352.L))+real(9927856472145816185856.L))-
+        real(11290183932260669184000.L))+real(2268610117420575237120.L))+
+        real(628988336798597909280.L))/real(129310440448746185509055175.L);
+      _C4x[102] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(69208318099843060432896.L)-real(81988009811609591316480.L)*_n)*
+        _n-real(37941510567141484167168.L))+real(48483596782281724133376.L))-
+        real(23870410298944703004672.L))+real(28255073925778446123008.L))-
+        real(18633694866097806934016.L))+real(13294244419840801177600.L))-
+        real(13055711138703215001600.L))+real(4627976316221046620160.L))-
+        real(4785265946199798743040.L))+real(2253263844142164228480.L))/
+        real(129310440448746185509055175.L);
+      _C4x[103] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(47206155369671896290048.L)-real(40273611851703196723712.L)*_n)*
+        _n-real(24235646318026101360640.L))+real(29927299192503385578752.L))-
+        real(18211267098451245590016.L))+real(16049867031414423308032.L))-
+        real(13716076945588947584000.L))+real(6976005034656670306560.L))-
+        real(7631058591415895892480.L))+real(1828722225001791732480.L))+
+        real(496659892475397059640.L))/real(129310440448746185509055175.L);
+      _C4x[104] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(30711479976291538214912.L)-
+        real(24932406073642308228096.L)*_n)*_n-real(17998624599329955245056.L))+
+        real(18133006616754891601920.L))-real(13875800189129263334400.L))+
+        real(9129713142486985297920.L))-real(9214753498037294423040.L))+
+        real(3545472475402409502720.L))-real(3266763146678944281600.L))+
+        real(1659947616321838074000.L))/real(129310440448746185509055175.L);
+      _C4x[105] = (_n*(_n*(_n*(_n*(_n*(_n*((real(19598298905831804524800.L)-
+        real(18007563017934550689792.L)*_n)*_n-real(13861414449459155004928.L))+
+        real(10972158532646516030208.L))-real(10044734273235796079616.L))+
+        real(5169616610118234979584.L))-real(5386361761267283360256.L))+
+        real(1466567355225799352064.L))+real(392310578701953226392.L))/
+        real(129310440448746185509055175.L);
+      _C4x[106] = (_n*(_n*(_n*(_n*(_n*((real(12461790289419602509824.L)-
+        real(13830379080573634625536.L)*_n)*_n-real(10458128276836454744064.L))+
+        real(6649800424078438268928.L))-real(6712477850991396667392.L))+
+        real(2774237839297767456768.L))-real(2330558536889172344832.L))+
+        real(1256685070887155093184.L))/real(129310440448746185509055175.L);
+      _C4x[107] = (_n*(_n*(_n*(_n*((real(273869977857081110016.L)-
+        real(367632485074535353344.L)*_n)*_n-real(259373075001239046144.L))+
+        real(136851540683345478144.L))-real(135864050075113980928.L))+
+        real(40734340002567411200.L))+real(10773207634081740848.L))/
+        real(4458980705129178810657075.L);
+      _C4x[108] = (_n*(_n*(_n*((real(39250680271724544.L)-
+        real(62311098358585344.L)*_n)*_n-real(39111918089431040.L))+
+        real(17175919641194496.L))-real(13397556821096448.L))+
+        real(7572676586130656.L))/real(1005860750085535486275.L);
+      _C4x[109] = (_n*(_n*((real(29942233233848832.L)-real(55137815989807104.L)*
+        _n)*_n-real(28441333182559232.L))+real(9190102048751104.L))+
+        real(2409387702333040.L))/real(1238878684468285019775.L);
+      _C4x[110] = (_n*((real(416718490812416.L)-real(901706506321920.L)*_n)*_n-
+        real(306118121340928.L))+real(179714891668416.L))/
+        real(30216553279714268775.L);
+      _C4x[111] = ((real(132451998132480.L)-real(386245198689792.L)*_n)*_n+
+        real(34487905553192.L))/real(21784026783049821675.L);
+      _C4x[112] = (real(1965206256.L)-real(3245452288.L)*_n)/
+        real(411259921521075.L);
+      _C4x[113] = real(594728.L)/real(456448303575.L);
+      _C4x[114] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(15423387840000.L)*_n+
+        real(24410637619200.L))+real(39434803868160.L))+real(65153154216960.L))+
+        real(110340019238400.L))+real(192053235456000.L))+
+        real(344628861401600.L))+real(639921380539392.L))+
+        real(1235017350364672.L))+real(2490791294853120.L))+
+        real(5284738109145600.L))+real(11895841861370880.L))+
+        real(28719961065309696.L))+real(75453625520695296.L))+
+        real(220073074435361280.L))+real(733576914784537600.L))+
+        real(2923827988926942720.L))+real(15073957631801126912.L))+
+        real(118707416350433874432.L))+real(2543730350366440166400.L))-
+        real(48754831715356769856000.L))+real(273027057605997911193600.L))-
+        real(778127114177094046901760.L))+real(1259824851524818933079040.L))-
+        real(1049854042937349110899200.L))+real(341202563954638461042240.L))/
+        real(166256280576959381368785225.L);
+      _C4x[115] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(211886621245440.L)*_n+
+        real(344887437219840.L))+real(574763649085440.L))+
+        real(983167619696640.L))+real(1731297510400000.L))+
+        real(3149502347491328.L))+real(5943830533705728.L))+
+        real(11697003233241088.L))+real(24156305750786048.L))+
+        real(52775086452480000.L))+real(123252527383179264.L))+
+        real(312010937963956224.L))+real(872814911428583424.L))+
+        real(2775016671927793664.L))+real(10479670211207680000.L))+
+        real(50780289975427934208.L))+real(372170816012745064448.L))+
+        real(7333480387871248242688.L))-real(127390015946351323533312.L))+
+        real(635932587591610041600000.L))-real(1591357707189244968099840.L))+
+        real(2270024964667011204495360.L))-real(1877386053252671351255040.L))+
+        real(839883234349879288719360.L))-real(157478106440602366634880.L))/
+        real(166256280576959381368785225.L);
+      _C4x[116] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1733813683845120.L)*_n+
+        real(2921279796817920.L))+real(5060946682767360.L))+
+        real(9045535065481216.L))+real(16746859934144512.L))+
+        real(32275230929915904.L))+real(65147793225795584.L))+
+        real(138800500252639232.L))+real(315292150644946944.L))+
+        real(773949004450492416.L))+real(2091794676130424832.L))+
+        real(6397923634241298432.L))+real(23121664591616546816.L))+
+        real(106523751762883825664.L))+real(736201024205424003072.L))+
+        real(13531819665936818520064.L))-real(215978365469340356642816.L))+
+        real(968064633071900171415552.L))-real(2087961704390117193652224.L))+
+        real(2337518609963400750243840.L))-real(1068705911200620395243520.L))-
+        real(379637622956911381278720.L))+real(642263649796966514903040.L))-
+        real(209970808587469822179840.L))/real(166256280576959381368785225.L);
+      _C4x[117] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(real(11281902452101120.L)*_n+
+        real(19856137297704960.L))+real(36154474616020992.L))+
+        real(68431113868150784.L))+real(135438618199486464.L))+
+        real(282418738685630464.L))+real(626544546594914304.L))+
+        real(1498337078519113728.L))+real(3933696924152532992.L))+
+        real(11646021535115835392.L))+real(40564439417152315392.L))+
+        real(179149339145069217792.L))+real(1178575207609915322368.L))+
+        real(20423711902316282025984.L))-real(302998486839507258720256.L))+
+        real(1232898835414026959775744.L))-real(2300980896038842246311936.L))+
+        real(1930800622120958644467712.L))-real(33011967213644467937280.L))-
+        real(1241679575025538326558720.L))+real(920491222785935814881280.L))-
+        real(236623449925198189701120.L))+real(9263418025917786272640.L))/
+        real(166256280576959381368785225.L);
+      _C4x[118] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(66291179380177920.L)*_n+
+        real(123502498083074048.L))+real(240276116509910016.L))+
+        real(491746535067949056.L))+real(1068834239585012736.L))+
+        real(2499083563092852736.L))+real(6399155309289157632.L))+
+        real(18423448180957145088.L))+real(62177905138903292928.L))+
+        real(264854349484989616128.L))+real(1670380106711262757888.L))+
+        real(27515284114781292705792.L))-real(383045286443291509330944.L))+
+        real(1429964615506826337017856.L))-real(2328915416924607663975424.L))+
+        real(1397452025538086337447936.L))+real(707050350167252187593728.L))-
+        real(1407832273022066247946240.L))+real(563521063617845378196480.L))+
+        real(18427913204876877649920.L))-real(3900386537228541588480.L))-
+        real(22264706483346258234240.L))/real(166256280576959381368785225.L);
+      _C4x[119] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(382965711284199424.L)*_n+
+        real(770977653102635008.L))+real(1645917529390166016.L))+
+        real(3773218865391958016.L))+real(9453272621815267328.L))+
+        real(26562303451622639616.L))+real(87219647588387999744.L))+
+        real(360033595760694302720.L))+real(2188814336113346027520.L))+
+        real(34495902320421639071744.L))-real(454138552156337199714304.L))+
+        real(1569987468301227912050688.L))-real(2250966977888217204998144.L))+
+        real(891526076637315135686656.L))+real(1131859061537723437191168.L))-
+        real(1245402071256865660020736.L))+real(232185728777560185528320.L))+
+        real(25165972266291981379584.L))+real(146473646308211550203904.L))-
+        real(95078987762585607997440.L))+real(11213611294532057066880.L))/
+        real(166256280576959381368785225.L);
+      _C4x[120] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(2355597954345252864.L)*_n+
+        real(5306628405977763840.L))+real(13041221262183229440.L))+
+        real(35865931381437005824.L))+real(114956423420358236160.L))+
+        real(461587696109817409536.L))+real(2716987595157332969472.L))+
+        real(41183405552573615235072.L))-real(516027721640714382116864.L))+
+        real(1665285424112185919016960.L))-real(2118667194899511313913856.L))+
+        real(463862759634883188572160.L))+real(1332726183954882242140160.L))-
+        real(994736282435457627426816.L))+real(54441341804372914800640.L))-
+        real(71905863118601554911232.L))+real(201133635951871102040064.L))-
+        real(50241500786793155997696.L))-real(6308451268908771612672.L))-
+        real(4098232231145931379200.L))/real(166256280576959381368785225.L);
+      _C4x[121] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(17098913794908082176.L)*_n+real(46134404084977125376.L))+
+        real(144720746208363184128.L))+real(566985526960805689344.L))+
+        real(3242871776626640629760.L))+real(47479940168196059703296.L))-
+        real(569261760283941813755904.L))+real(1726666467712281622517760.L))-
+        real(1962921565983217717047296.L))+real(121242993676359938869248.L))+
+        real(1395172683285044179582976.L))-real(757402581415371604199424.L))-
+        real(7804285406736951939072.L))-real(162279076537018804213760.L))+
+        real(179472887010351527534592.L))-real(15854994877038181853184.L))+
+        real(35598970218247026855936.L))-real(41852843364695828871168.L))+
+        real(7711742512194257771136.L))/real(166256280576959381368785225.L);
+      _C4x[122] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(175932069921886992896.L)*_n+real(674224356017709817856.L))+
+        real(3758175988521507276288.L))+real(53341040498023015910400.L))-
+        real(614706974856303979752960.L))+real(1762769154763009954314240.L))-
+        real(1801403281533153772249600.L))-real(145529063466538972552192.L))+
+        real(1378722173338312469162496.L))-real(564551951692855483019264.L))-
+        real(6976131587718032198144.L))-real(216185514334708864533504.L))+
+        real(133788882241089836597760.L))-real(14883806111752805799936.L))+
+        real(70236969349664605146624.L))-real(37558563751040750939136.L))-
+        real(1190387835225122612736.L))-real(577285471180383782208.L))/
+        real(166256280576959381368785225.L);
+      _C4x[123] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(4257384430093558022144.L)*_n+real(58755135352811110797312.L))-
+        real(653307147328584716083200.L))+real(1780223143564599083151360.L))-
+        real(1643767703459943581859840.L))-real(349748860251661508915200.L))+
+        real(1320730746669392228769792.L))-real(418639756822354187882496.L))+
+        real(21385306082083744088064.L))-real(237075054747228085907456.L))+
+        real(91878258712461689954304.L))-real(32268939335735401205760.L))+
+        real(83452509226462081499136.L))-real(24544611660129055617024.L))+
+        real(13444528204945543028736.L))-real(21054126943541691224064.L))+
+        real(5171959329612868977408.L))/real(166256280576959381368785225.L);
+      _C4x[124] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1784021138885207529431040.L)-real(685970634918942781599744.L)*
+        _n)*_n-real(1494945320904017106948096.L))-
+        real(504258247076960377552896.L))+real(1243456478552992527831040.L))-
+        real(312593215380001079599104.L))+real(57674736325606682161152.L))-
+        real(235909959094226612944896.L))+real(62412061285611365371904.L))-
+        real(53707790367761437974528.L))+real(81041501347448354549760.L))-
+        real(17683931620331725012992.L))+real(29772079621946350424064.L))-
+        real(24057332146516405395456.L))+real(771488169740602503168.L))+
+        real(240936001891833529344.L))/real(166256280576959381368785225.L);
+      _C4x[125] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(1357135428823881153355776.L)*_n-real(619993760047485238751232.L))*
+        _n+real(1159678825439692254855168.L))-real(237545533065498653413376.L))+
+        real(92448223283311194480640.L))-real(222429070521524100132864.L))+
+        real(45294582361086188748800.L))-real(71880302971566403686400.L))+
+        real(71286556310080704208896.L))-real(18201204787742735216640.L))+
+        real(40601988695871336824832.L))-real(20409141195442082893824.L))+
+        real(7244415426799040372736.L))-real(11799790075845426966528.L))+
+        real(3560892380901363191040.L))/real(166256280576959381368785225.L);
+      _C4x[126] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1076448934906472409118720.L)*_n-real(185548840598543086510080.L))+
+        real(121883495804173713770496.L))-real(203364471661709466505216.L))+
+        real(37626881204170271250432.L))-real(84442615990512135520256.L))+
+        real(59862841522277907769344.L))-real(23261547619129516290048.L))+
+        real(45148586339150679504896.L))-real(16733921813601069342720.L))+
+        real(15336057170869389674496.L))-real(15494731005672544948224.L))+
+        real(1311033933917763901440.L))+real(406742200072498080000.L))/
+        real(166256280576959381368785225.L);
+      _C4x[127] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(144999955520959822282752.L)*_n-real(182819205307386653790208.L))+
+        real(36265912363576915795968.L))-real(91538426742912616329216.L))+
+        real(49676263686196403011584.L))-real(30007360864412334657536.L))+
+        real(45107679970428656738304.L))-real(15208913191480066551808.L))+
+        real(22033053146603491901440.L))-real(15174606815537292103680.L))+
+        real(4813095418531485818880.L))-real(7191729762838616862720.L))+
+        real(2532530840105454531840.L))/real(166256280576959381368785225.L);
+      _C4x[128] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(38669172193378346979328.L)*_n-real(94242807079707850416128.L))+
+        real(41806794187103815397376.L))-real(36574082083677166403584.L))+
+        real(42471896890389454524416.L))-real(15816943641348566114304.L))+
+        real(26305503336956956192768.L))-real(13786980635743277957120.L))+
+        real(9230326727696393195520.L))-real(10324616450702228398080.L))+
+        real(1341323234232394936320.L))+real(398746919787171701760.L))/
+        real(166256280576959381368785225.L);
+      _C4x[129] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(36358165736989723385856.L)*_n-real(42024245141348829499392.L))+
+        real(38769283601188777721856.L))-real(17832530990951250980864.L))+
+        real(28296523278293164105728.L))-real(12755580054593512001536.L))+
+        real(13308567320059057192960.L))-real(11074656958634213683200.L))+
+        real(3544351093506972672000.L))-real(4679705767716804464640.L))+
+        real(1856487183525513665280.L))/real(166256280576959381368785225.L);
+      _C4x[130] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(34961875576232693810688.L)*_n-real(20500376327075499659264.L))+
+        real(28588870662014648326656.L))-real(12510306510186250509312.L))+
+        real(16416302285680224857600.L))-real(10825554949776351848448.L))+
+        real(6203108912328070414848.L))-real(7141416231355722150912.L))+
+        real(1210039267821848335872.L))+real(347929149053787174720.L))/
+        real(166256280576959381368785225.L);
+      _C4x[131] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(27807481879669030633472.L)*
+        _n-real(12996334083051604891648.L))+real(18419615947032059203584.L))-
+        real(10399912448169498937344.L))+real(8784819036492296675328.L))-
+        real(8151761375079420966912.L))+real(2745351352566564876288.L))-
+        real(3207045221167399299072.L))+real(1397543922868227894144.L))/
+        real(166256280576959381368785225.L);
+      _C4x[132] = (_n*(_n*(_n*(_n*(_n*(_n*(real(19451667812668025489408.L)*_n-
+        real(10175337301239971131392.L))+real(10949542328618408957952.L))-
+        real(8402323186343432822784.L))+real(4488136881866794100736.L))-
+        real(5113243688000272011264.L))+real(1043166858801298896896.L))+
+        real(292560752143799147008.L))/real(166256280576959381368785225.L);
+      _C4x[133] = (_n*(_n*(_n*(_n*(_n*(real(33326152373781835776.L)*_n-
+        real(22182225700218402816.L))+real(16468539213228613632.L))-
+        real(16188661697554925568.L))+real(5800677560629563392.L))-
+        real(6077685110278166528.L))+real(2855456530016678016.L))/
+        real(440998091716072629625425.L);
+      _C4x[134] = (_n*(_n*(_n*(_n*(real(1743899320985515008.L)*_n-
+        real(1476206937214611456.L))+real(769465150290668544.L))-
+        real(851356787711113216.L))+real(199443555472139264.L))+
+        real(54887670894962048.L))/real(37504236538903537416825.L);
+      _C4x[135] = (_n*(_n*(_n*(real(28150215791353856.L)*_n-
+        real(28391775516788736.L))+real(10815834865864704.L))-
+        real(10325524592973824.L))+real(5156944760482944.L))/
+        real(1013628014564960470725.L);
+      _C4x[136] = (_n*(_n*(real(135967115813947392.L)*_n-
+        real(145018936369369088.L))+real(37812934392010752.L))+
+        real(10255361879519744.L))/real(8430418365040280988225.L);
+      _C4x[137] = (_n*(real(245769011032064.L)*_n-real(216898146789376.L))+
+        real(113908615347072.L))/real(28008034435349770725.L);
+      _C4x[138] = (real(322327509504.L)*_n+real(86419033792.L))/
+        real(85130803754862525.L);
+      _C4x[139] = real(4519424.L)/real(1369344910725.L);
+      _C4x[140] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(1509229117440.L)*_n-
+        real(2673546024960.L))*_n-real(4867128668160.L))-real(9131587799040.L))-
+        real(17715602432000.L))-real(35679223298048.L))-real(74950862671872.L))-
+        real(165169493665792.L))-real(384543217451008.L))-
+        real(954289234483200.L))-real(2553253862928384.L))-
+        real(7477386312861696.L))-real(24471446114820096.L))-
+        real(92221097858627584.L))-real(419186808448307200.L))-
+        real(2489969642182944768.L))-real(22870832268939640832.L))-
+        real(580347368824343386112.L))+real(13430896249934804078592.L))-
+        real(93270112846769472768000.L))+real(343234015276111659786240.L))-
+        real(772276534371251234519040.L))+real(1086907715041020255989760.L))-
+        real(839883234349879288719360.L))+real(262463510734337277724800.L))/
+        real(203202120705172577228515275.L);
+      _C4x[141] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*((-real(30080573890560.L)*_n-
+        real(55401635266560.L))*_n-real(105354433372160.L))-
+        real(207639744577536.L))-real(426043293130752.L))-
+        real(915086349484032.L))-real(2071448988229632.L))-
+        real(4984142127562752.L))-real(12887852831924224.L))-
+        real(36339334049120256.L))-real(114001127022698496.L))-
+        real(409670134959210496.L))-real(1764663169835360256.L))-
+        real(9859273734704185344.L))-real(84407455749151137792.L))-
+        real(1974269262957499318272.L))+real(41544866816528857571328.L))-
+        real(258005858825908088225792.L))+real(832715567495957852872704.L))-
+        real(1611707549992176489431040.L))+real(1944992753231299405455360.L))-
+        real(1435342245700103304560640.L))+real(592858753658738321448960.L))-
+        real(104985404293734911089920.L))/real(203202120705172577228515275.L);
+      _C4x[142] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*((-real(356377645240320.L)*_n-
+        real(689149620418560.L))*_n-real(1385236399480832.L))-
+        real(2909595558692864.L))-real(6427965023023104.L))-
+        real(15059867984533504.L))-real(37817587481411584.L))-
+        real(103237671469836288.L))-real(312430825227128832.L))-
+        real(1078470603387942912.L))-real(4439544762234150912.L))-
+        real(23556259347618629632.L))-real(190037546553915977728.L))-
+        real(4146855804991892772864.L))+real(80331819782914612412416.L))-
+        real(450652320071960341981184.L))+real(1275660693756579111776256.L))-
+        real(2051693762328003682301952.L))+real(1805709384713456992788480.L))-
+        real(535540029763814536366080.L))-real(504449992148224712110080.L))+
+        real(548654372903481516779520.L))-real(163653718457880890816640.L))/
+        real(203202120705172577228515275.L);
+      _C4x[143] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*((-real(3388311204741120.L)*_n-
+        real(6978286282539008.L))*_n-real(15090843503476736.L))-
+        real(34542093221462016.L))-real(84556478627332096.L))-
+        real(224440130522054656.L))-real(658439360351158272.L))-
+        real(2195396955955560448.L))-real(8691703876623351808.L))-
+        real(44117722079536939008.L))-real(338173853971207733248.L))-
+        real(6949060480140715589632.L))+real(125192508635260946202624.L))-
+        real(640893571248497898684416.L))+real(1601921181227197633675264.L))-
+        real(2116066947487359353389056.L))+real(1168493691452395189747712.L))+
+        real(505279059817973774090240.L))-real(1174864257822579831521280.L))+
+        real(681945843262682981498880.L))-real(145614430723198885969920.L))+
+        real(1950193268614270794240.L))/real(203202120705172577228515275.L);
+      _C4x[144] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(29783676799279104.L)*_n-real(66783770293413888.L))*
+        _n-real(159847560838557696.L))-real(413946427279620096.L))-
+        real(1181749374200414208.L))-real(3822568817823041536.L))-
+        real(14627176912157691904.L))-real(71427768325991913472.L))-
+        real(523603662060395241472.L))-real(10207419868634363848704.L))+
+        real(172465203279918671990784.L))-real(813073050770341051987968.L))+
+        real(1808841542201733751455744.L))-real(1946718201588498158585856.L))+
+        real(458533006919580010442752.L))+real(1136573462746409662048256.L))-
+        real(1136290520034443223654400.L))+real(285779625762501664561152.L))+
+        real(56843894229522049585152.L))+real(9157429261319184599040.L))-
+        real(21289609849039122837120.L))/real(203202120705172577228515275.L);
+      _C4x[145] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(269451846663593984.L)*_n-real(682649077269381120.L))*_n-
+        real(1902332600302673920.L))-real(5990518270476550144.L))-
+        real(22243518881532764160.L))-real(104972018046645846016.L))-
+        real(739735758189559226368.L))-real(13763541120759336173568.L))+
+        real(219624425025241531817984.L))-real(961132382054108943400960.L))+
+        real(1917663819062625474011136.L))-real(1663701415234432596377600.L))-
+        real(140417044513105697792000.L))+real(1378636532210118154960896.L))-
+        real(819197161807891380183040.L))+real(2561130794785129398272.L))-
+        real(1394081185120366288896.L))+real(148508630588504702337024.L))-
+        real(73168990344762670030848.L))+real(6656094416792185102080.L))/
+        real(203202120705172577228515275.L);
+      _C4x[146] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(2831187952337965056.L)*_n-real(8704297725028550656.L))*_n-
+        real(31463779835313553408.L))-real(144028402139220916224.L))-
+        real(979868397825624944640.L))-real(17487099875172234897408.L))+
+        real(265079166778857997934592.L))-real(1084267980991470975293440.L))+
+        real(1953524551249217124233216.L))-real(1343493318122186827696128.L))-
+        real(583937400532039706034176.L))+real(1376371556895501754599424.L))-
+        real(491595989847575029444608.L))-real(81097430953600769648640.L))-
+        real(132514574679631879053312.L))+real(171839973101469484492800.L))-
+        real(21090545893459680153600.L))-real(5177904446523687094272.L))-
+        real(4984298303190241370496.L))/real(203202120705172577228515275.L);
+      _C4x[147] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((-real(42164554818087878656.L)*_n-real(187794586344044363776.L))*_n-
+        real(1237820389692004302848.L))-real(21276921629106257920000.L))+
+        real(307912188999861753282560.L))-real(1184204656026050936176640.L))+
+        real(1938326853499561091072000.L))-real(1028442679209437130784768.L))-
+        real(884922170676224156041216.L))+real(1251351047786572668207104.L))-
+        real(245742882447295612911616.L))-real(46975561981181028335616.L))-
+        real(217221353375111366901760.L))+real(119366160036174220230656.L))+
+        real(3304399308580991860736.L))+real(40500018545262944976896.L))-
+        real(35786615001180827090944.L))+real(5298496107578096109568.L))/
+        real(203202120705172577228515275.L);
+      _C4x[148] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(1508191457506470068224.L)*_n-real(25057490773531995082752.L))*_n+
+        real(347661023376368060620800.L))-real(1263676145041214994984960.L))+
+        real(1889104624799544520458240.L))-real(739197454803586327859200.L))-
+        real(1072931463723461916024832.L))+real(1079883134776675908489216.L))-
+        real(90378562900263442939904.L))+real(28821057507252135817216.L))-
+        real(240406627876557011165184.L))+real(59353392085704620789760.L))-
+        real(14369290558376752889856.L))+real(71816811073014796529664.L))-
+        real(25207245399451801706496.L))-real(2330460677832194912256.L))-
+        real(1262801308417546560768.L))/real(203202120705172577228515275.L);
+      _C4x[149] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(384157060738624636698624.L)*_n-real(1325640286490171952168960.L))+
+        real(1818375681717492525907968.L))-real(483886805722631273644032.L))-
+        real(1177733879671663761244160.L))+real(903391730055772263645184.L))-
+        real(6722064289967832809472.L))+real(104499992701792283918336.L))-
+        real(222632457050411308171264.L))+real(20808095332678201540608.L))-
+        real(47175661879102651023360.L))+real(74747346957226768269312.L))-
+        real(10613075846527693701120.L))+real(14633979157653783674880.L))-
+        real(19097413224122007011328.L))+real(3833716971278880569856.L))/
+        real(203202120705172577228515275.L);
+      _C4x[150] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1735035615479764409491456.L)*_n-real(263908522000477623406592.L))-
+        real(1224009998714426275643392.L))+real(741587925728620980883456.L))+
+        real(27786928928082644623360.L))+real(163385167394187748470784.L))-
+        real(186124748954937563709440.L))+real(6335275210711645327360.L))-
+        real(75448932541388953214976.L))+real(61026427708877107671040.L))-
+        real(7950184245844838531072.L))+real(32166351408222650945536.L))-
+        real(18840415003374022467584.L))-real(433087043016453066752.L))-
+        real(198249161220521286400.L))/real(203202120705172577228515275.L);
+      _C4x[151] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(602017899186674245435392.L)-real(1230565698081099411652608.L)*
+        _n)*_n+real(31742011530137720356864.L))+
+        real(202135102848916822491136.L))-real(145782200355059610058752.L))+
+        real(9035714370561142685696.L))-real(92139198992304170696704.L))+
+        real(43388306747663045296128.L))-real(15380367166228461551616.L))+
+        real(40940599489643849318400.L))-real(12832236640446745116672.L))+
+        real(7000769552131186556928.L))-real(11083009183419288944640.L))+
+        real(2772354835694146913280.L))/real(203202120705172577228515275.L);
+      _C4x[152] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(18443598179278392803328.L)*_n+real(223119117407864259923968.L))-
+        real(109451968063979174371328.L))+real(21074572530029275508736.L))-
+        real(97577678435877587943424.L))+real(28954805728690295607296.L))-
+        real(26858596718327496105984.L))+real(41168866374346514771968.L))-
+        real(9204440533975142973440.L))+real(16333420244126310420480.L))-
+        real(13150311523176015175680.L))+real(386220598307148165120.L))+
+        real(127630062479153122560.L))/real(203202120705172577228515275.L);
+      _C4x[153] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(36542158751968925810688.L)-real(80260892944829572005888.L)*_n)*
+        _n-real(94824240932929013661696.L))+real(20078509324456305229824.L))-
+        real(37760761316771589144576.L))+real(36385580269011635830784.L))-
+        real(9783612234194463408128.L))+real(23102624962723027025920.L))-
+        real(11175987276193467678720.L))+real(4206925306002343034880.L))-
+        real(6898184321561910558720.L))+real(2041859227186034403840.L))/
+        real(203202120705172577228515275.L);
+      _C4x[154] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(16488890321654728691712.L)-real(87208333471391658008576.L)*_n)*
+        _n-real(45809077918610146557952.L))+real(29949622426063107780608.L))-
+        real(13431745842237051445248.L))+real(26106057096864886214656.L))-
+        real(9028423369382465945600.L))+real(9403007802980489736192.L))-
+        real(9192948985841019936768.L))+real(677059432404873154560.L))+
+        real(217097408346699412224.L))/real(203202120705172577228515275.L);
+      _C4x[155] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(24006981966100691419136.L)-
+        real(50445848972662873325568.L)*_n)*_n-real(18393271224818951716864.L))+
+        real(26014317062101581299712.L))-real(8333093675665032806400.L))+
+        real(13920631682915687989248.L))-real(8912605815657295183872.L))+
+        real(2933630693708410257408.L))-real(4545849550822027886592.L))+
+        real(1536715582489742764032.L))/real(203202120705172577228515275.L);
+      _C4x[156] = (_n*(_n*(_n*(_n*(_n*(_n*((real(24057954746398648850432.L)-
+        real(23282906528843549360128.L)*_n)*_n-real(9228903276836773351424.L))+
+        real(16819498333922089601024.L))-real(7935792550154883555328.L))+
+        real(6025113920482285697024.L))-real(6555338253120414478336.L))+
+        real(737733980594879916032.L))+real(226150779384719136640.L))/
+        real(203202120705172577228515275.L);
+      _C4x[157] = (_n*(_n*(_n*(_n*(_n*((real(1387947585015300440064.L)-
+        real(863101789858062770176.L)*_n)*_n-real(562629390413564534784.L))+
+        real(691828035753203171328.L))-real(533526894075147067392.L))+
+        real(171269495608139563008.L))-real(241448143622761439232.L))+
+        real(90837269845846427904.L))/real(15630932361936352094501175.L);
+      _C4x[158] = (_n*(_n*(_n*(_n*((real(866186923153107769344.L)-
+        real(569180110351342301184.L)*_n)*_n-real(510674583004295897088.L))+
+        real(322751588064965486592.L))-real(368356854557834498048.L))+
+        real(54205790186264983552.L))+real(16040043923515570816.L))/
+        real(15630932361936352094501175.L);
+      _C4x[159] = (_n*(_n*(_n*((real(1396004848943169536.L)-
+        real(1421006686098669568.L)*_n)*_n-real(1215708449370816512.L))+
+        real(399424955491647488.L))-real(508067845210292224.L))+
+        real(208618699335208448.L))/real(45838511325326545731675.L);
+      _C4x[160] = (_n*(_n*((real(587099505297537024.L)-
+        real(1029146611646324736.L)*_n)*_n-real(677087690482118656.L))+
+        real(120598133734467584.L))+real(34730953897228160.L))/
+        real(38405239218516835613025.L);
+      _C4x[161] = (_n*((real(6669452902088704.L)-real(19450166986039296.L)*_n)*
+        _n-real(7692029488013312.L))+real(3395611120122624.L))/
+        real(936713151671142332025.L);
+      _C4x[162] = ((real(665065126582272.L)-real(3230970624380928.L)*_n)*_n+
+        real(187530626331776.L))/real(239624294613548038425.L);
+      _C4x[163] = (real(304969986048.L)-real(650254352384.L)*_n)/
+        real(104048760144831975.L);
+      _C4x[164] = real(3108352.L)/real(4619256832179.L);
+      _C4x[165] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(257316433920.L)*_n+
+        real(517719121920.L))+real(1079888875520.L))+real(2344901558272.L))+
+        real(5327004626944.L))+real(12736747905024.L))+real(32288773197824.L))+
+        real(87593073311744.L))+real(257304652853248.L))+
+        real(831291955372032.L))+real(3017481838006272.L))+
+        real(12688897985462272.L))+real(64804014711468032.L))+
+        real(435954280786239488.L))+real(4577519948255514624.L))+
+        real(134273918482161762304.L))-real(3642180038828637802496.L))+
+        real(30178063178865856077824.L))-real(135801284304896352350208.L))+
+        real(388003669442561006714880.L))-real(743673699764908596203520.L))+
+        real(946493799700792758804480.L))-real(691668545935194708357120.L))+
+        real(209970808587469822179840.L))/real(240147960833385773088245325.L);
+      _C4x[166] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(_n*(real(2448085319680.L)*_n+
+        real(5198109163520.L))+real(11525969215488.L))+real(26842568769536.L))+
+        real(66124844138496.L))+real(173845436317696.L))+
+        real(493381392531456.L))+real(1534563265134592.L))+
+        real(5340421046632448.L))+real(21426460183052288.L))+
+        real(103810217665036288.L))+real(658009995531829248.L))+
+        real(6456836374888087552.L))+real(175253620876068274176.L))-
+        real(4345592270877235216384.L))+real(32427151313442065596416.L))-
+        real(129037235661357453574144.L))+real(319025239319439049965568.L))-
+        real(517338225923414675619840.L))+real(552611286781829312593920.L))-
+        real(374437107573939992494080.L))+real(145614430723198885969920.L))-
+        real(24702448069114096727040.L))/real(80049320277795257696081775.L);
+      _C4x[167] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(126342544613376.L)*_n+
+        real(287468136923136.L))+real(690492253741056.L))+
+        real(1766046625873920.L))+real(4863401337839616.L))+
+        real(14633956119281664.L))+real(49097734894362624.L))+
+        real(189134731009409024.L))+real(875564292614316032.L))+
+        real(5271908606120067072.L))+real(48789763316146642944.L))+
+        real(1237782058785010335744.L))-real(28355986371045703458816.L))+
+        real(192444170076031269666816.L))-real(680906092303007800320000.L))+
+        real(1443741944502735160098816.L))-real(1875053748152881983791104.L))+
+        real(1343511695807170839412736.L))-real(193459172246535662788608.L))-
+        real(539949162371116365987840.L))+real(468046384467424990617600.L))-
+        real(131313013420027566812160.L))/real(240147960833385773088245325.L);
+      _C4x[168] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(1794028353814528.L)*_n+real(4477787992637440.L))+
+        real(12006817381318656.L))+real(35088430518812672.L))+
+        real(113994359758389248.L))+real(423728832601341952.L))+
+        real(1884855122013618176.L))+real(10849655450029899776.L))+
+        real(95384760613357551616.L))+real(2280138071014243844096.L))-
+        real(48685051081419936268288.L))+real(303214926810544425320448.L))-
+        real(960908651560086026190848.L))+real(1745683879375284629487616.L))-
+        real(1743703775031953529733120.L))+real(548066899358913552171008.L))+
+        real(778581347098662674825216.L))-real(1038113314186880008175616.L))+
+        real(506123201445354637197312.L))-real(91348183248714829086720.L))-
+        real(1300128845742847196160.L))/real(240147960833385773088245325.L);
+      _C4x[169] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(24778942658555904.L)*_n+real(70552539374690304.L))+
+        real(222740581213900800.L))+real(802122872534925312.L))+
+        real(3444064036667289600.L))+real(19049960218061692928.L))+
+        real(160022902663762890752.L))+real(3628119050363403681792.L))-
+        real(72733278067356486193152.L))+real(418988509060386250137600.L))-
+        real(1197935997204518426308608.L))+real(1865910080228015497052160.L))-
+        real(1356505990642522145427456.L))-real(233007536131786922827776.L))+
+        real(1241420475659236427878400.L))-real(844924131779929731088384.L))+
+        real(113626972836874418761728.L))+real(62677515833029085700096.L))+
+        real(18314858522638369198080.L))-real(19643251038940843507200.L))/
+        real(240147960833385773088245325.L);
+      _C4x[170] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(386613842950619136.L)*_n+real(1353278838292938752.L))+
+        real(5629515198463213568.L))+real(30047212317907550208.L))+
+        real(242321110939347058688.L))+real(5239257310343406092288.L))-
+        real(99224653351858212175872.L))+real(532320801506965520580608.L))-
+        real(1382287083951432119222272.L))+real(1846228289058830433189888.L))-
+        real(880787032480011345461248.L))-real(801889054499842357264384.L))+
+        real(1273894517435658985144320.L))-real(448728411912169822289920.L))-
+        real(94514888074456720998400.L))-real(39503896548611063611392.L))+
+        real(141233626760411992948736.L))-real(56195714051354601127936.L))+
+        real(3934302941900094124032.L))/real(240147960833385773088245325.L);
+      _C4x[171] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(8489275551543689216.L)*_n+real(43876825675639291904.L))+
+        real(341077744362532929536.L))+real(7064728499067957608448.L))-
+        real(127064310092653389840384.L))+real(638621086696665877446656.L))-
+        real(1515120656017505324204032.L))+real(1732965433613042390859776.L))-
+        real(416659196788742022004736.L))-real(1138189677523088913465344.L))+
+        real(1080767835234722522890240.L))-real(128480464944752491167744.L))-
+        real(82732793120026949222400.L))-real(175466098285534552129536.L))+
+        real(135173325698368450232320.L))-real(2948124056344606605312.L))-
+        real(3006474860080610967552.L))-real(5321107044025797799936.L))/
+        real(240147960833385773088245325.L);
+      _C4x[172] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(454620391029060141056.L)*_n+real(9056118414265227608064.L))-
+        real(155383610610520554078208.L))+real(735429741143205140824064.L))-
+        real(1602560535867794634571776.L))+real(1564476643391685127503872.L))-
+        real(11762333435376197042176.L))-real(1288301898182646401531904.L))+
+        real(815252396397919916785664.L))+real(49782085725578505420800.L))+
+        real(24113307230430807588864.L))-real(229062705483133247488000.L))+
+        real(63342427682715150319616.L))+real(7875346407680037027840.L))+
+        real(43770882909168072261632.L))-real(30238057194890977804288.L))+
+        real(3678565453801950867456.L))/real(240147960833385773088245325.L);
+      _C4x[173] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(821731396929669016010752.L)-real(183529127146933632196608.L)*_n)*
+        _n-real(1652332061873336752283648.L))+
+        real(1368738156318510239219712.L))+real(318138599568120510226432.L))-
+        real(1310184091339834383024128.L))+real(560408743594952306614272.L))+
+        real(110676205326983189168128.L))+real(134341126806557678608384.L))-
+        real(208091062685216436633600.L))+real(5645989597895597547520.L))-
+        real(26253275550930074501120.L))+real(68355826684718847762432.L))-
+        real(15371949150190859534336.L))-real(2452376969201300578304.L))-
+        real(1674403979534002762752.L))/real(240147960833385773088245325.L);
+      _C4x[174] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1164631760887444407287808.L)-real(1672063719072874003365888.L)*
+        _n)*_n+real(573973535120174555987968.L))-
+        real(1252993307912317168222208.L))+real(350694770109091176448000.L))+
+        real(98240468623336356282368.L))+real(210067308553286879805440.L))-
+        real(152408252200864889012224.L))-real(13945195548260895227904.L))-
+        real(66685451163929648332800.L))+real(59814932081329384587264.L))-
+        real(2037325835146397974528.L))+real(16311186817173913534464.L))-
+        real(17076664527843759390720.L))+real(2868285736807542016000.L))/
+        real(240147960833385773088245325.L);
+      _C4x[175] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(764135057651395492102144.L)*_n-real(1152635155842632424554496.L))+
+        real(193854344540972493389824.L))+real(49470026438969445941248.L))+
+        real(245966578294613110013952.L))-real(93102146467331687186432.L))-
+        real(3436057585971318603776.L))-real(91209199540789553233920.L))+
+        real(37227347117157306253312.L))-real(5688296637058436366336.L))+
+        real(33399261936008523104256.L))-real(14057707417544877965312.L))-
+        real(1015737220237693829120.L))-real(500634805329813288960.L))/
+        real(240147960833385773088245325.L);
+      _C4x[176] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(85305679257713609146368.L)*_n-real(11089919412196939628544.L))+
+        real(250145458939405349093376.L))-real(45859244715211880300544.L))+
+        real(21781784366930411126784.L))-real(96387723577350541639680.L))+
+        real(17190616935572830224384.L))-real(20081999288689171398656.L))+
+        real(38292133581529026002944.L))-real(6870193956450861023232.L))+
+        real(7429188838123466588160.L))-real(10271644792234587095040.L))+
+        real(2174257397994122004480.L))/real(240147960833385773088245325.L);
+      _C4x[177] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(233644519885353150324736.L)*_n-real(15261470871563375230976.L))+
+        real(49510531225464097431552.L))-real(87596468125517391659008.L))+
+        real(6560735495028469833728.L))-real(35679820077785115115520.L))+
+        real(33283281055730385412096.L))-real(4796419217902489468928.L))+
+        real(17436845615871411953664.L))-real(10788199764266725097472.L))-
+        real(181727943171350962176.L))-real(79749383957434340352.L))/
+        real(240147960833385773088245325.L);
+      _C4x[178] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(72827313088752745316352.L)*_n-real(71814852403093401698304.L))+
+        real(5368140613167144763392.L))-real(46754774377127572733952.L))+
+        real(24324414120113464541184.L))-real(8630453428059493302272.L))+
+        real(23269141919886798487552.L))-real(7572481339215041593344.L))+
+        real(4107321939726699724800.L))-real(6543695339402962599936.L))+
+        real(1655621357111277760512.L))/real(240147960833385773088245325.L);
+      _C4x[179] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(10764550869353176596480.L)*_n-real(51670552302968450056192.L))+
+        real(16060470891565481099264.L))-real(15580877285327828877312.L))+
+        real(23999123493445142282240.L))-real(5417108632232330395648.L))+
+        real(9944129571696691937280.L))-real(7975828621818156875776.L))+
+        real(218993539526363807744.L))+real(75076309196665835520.L))/
+        real(240147960833385773088245325.L);
+      _C4x[180] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(826878773833583034368.L)*_n-
+        real(1747178392781595934720.L))+real(1635903775474357501952.L))-
+        real(454534917086792318976.L))+real(1111445221583379234816.L))-
+        real(521822207931571306496.L))+real(204781338760991342592.L))-
+        real(336821611116005621760.L))+real(98284255801221754880.L))/
+        real(18472920064106597929865025.L);
+      _C4x[181] = (_n*(_n*(_n*(_n*(_n*(_n*(real(1321660083498000748544.L)*_n-
+        real(660353884216987901952.L))+real(1270351981574471856128.L))-
+        real(416290641584376266752.L))+real(476368073420692180992.L))-
+        real(453631696169838714880.L))+real(29813236108711227392.L))+
+        real(9794743193350123008.L))/real(18472920064106597929865025.L);
+      _C4x[182] = (_n*(_n*(_n*(_n*(_n*(real(1260483950616081825792.L)*_n-
+        real(390902614476836814848.L))+real(720904661188272259072.L))-
+        real(435641120796265562112.L))+real(148340810697106948096.L))-
+        real(234920185317888671744.L))+real(77026888103827504128.L))/
+        real(18472920064106597929865025.L);
+      _C4x[183] = (_n*(_n*(_n*(_n*(real(79781508316395626496.L)*_n-
+        real(34630877306189807616.L))+real(29159418113056612352.L))-
+        real(30875112149841756160.L))+real(3081556390752739328.L))+
+        real(967480605650617344.L))/real(1679356369464236175442275.L);
+      _C4x[184] = (_n*(_n*(_n*(real(1205956028389326848.L)*_n-
+        real(871339038836637696.L))+real(283151198814568448.L))-
+        real(416899622605373440.L))+real(150586549927756800.L))/
+        real(45388009985519896633575.L);
+      _C4x[185] = (_n*(_n*(real(11679472316977152.L)*_n-
+        real(13107134511882240.L))+real(1711437269741568.L))+
+        real(518364816254464.L))/real(936713151671142332025.L);
+      _C4x[186] = (_n*(real(110139925594112.L)*_n-real(148869233901568.L))+
+        real(58325556617216.L))/real(21784026783049821675.L);
+      _C4x[187] = (real(16241983488.L)*_n+real(4782743552.L))/
+        real(9458978194984725.L);
+      _C4x[188] = real(139264.L)/real(63626127165.L);
+      _C4x[189] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*((-real(75441766400.L)*_n-real(175710732288.L))*_n-
+        real(429272596480.L))-real(1106910052352.L))-real(3035570503680.L))-
+        real(8938068705280.L))-real(28601819856896.L))-real(101068930744320.L))-
+        real(403050645028864.L))-real(1871306566205440.L))-
+        real(10610925144637440.L))-real(79758787337191424.L))-
+        real(942603850348625920.L))-real(31388708216609243136.L))+
+        real(976537588961176453120.L))-real(9399174293751323361280.L))+
+        real(49949897675364175577088.L))-real(172446075307804891873280.L))+
+        real(413870580738731740495872.L))-real(705461217168292739481600.L))+
+        real(832082461275422205542400.L))-real(582457722892795543879680.L))+
+        real(172917136483798677089280.L))/real(277093800961598968947975375.L);
+      _C4x[190] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*((-real(3111445069824.L)*_n-real(7812137615360.L))*_n-
+        real(20813588463616.L))-real(59386797490176.L))-
+        real(183618286911488.L))-real(624839756873728.L))-
+        real(2390402094858240.L))-real(10599374409695232.L))-
+        real(57101583220211712.L))-real(405287987384942592.L))-
+        real(4489836126200922112.L))-real(138925305943689789440.L))+
+        real(3973640791529667428352.L))-real(34708936019077243076608.L))+
+        real(164741891257750467641344.L))-real(498117873592110949072896.L))+
+        real(1022783619066980738007040.L))-real(1454817798960390360530944.L))+
+        real(1415263734134544203513856.L))-real(897201958244803073802240.L))+
+        real(332832984510168882216960.L))-real(54605411521199582238720.L))/
+        real(277093800961598968947975375.L);
+      _C4x[191] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(79854773207040.L)*_n-real(221557201502208.L))*_n-
+        real(664458787160064.L))-real(2186921930981376.L))-
+        real(8065158447366144.L))-real(34342247604879360.L))-
+        real(176863478347595776.L))-real(1193592132558192640.L))-
+        real(12491033020846571520.L))-real(362197501565686972416.L))+
+        real(9610829533367644323840.L))-real(76860505272133713199104.L))+
+        real(328055549161452697288704.L))-real(868808054727527240761344.L))+
+        real(1496676385184361931210752.L))-real(1640879598365711084093440.L))+
+        real(969024688235553160429568.L))+real(23877148888772985028608.L))-
+        real(533979875148923119730688.L))+real(401570231311182020935680.L))-
+        real(107910694196656317281280.L))/real(277093800961598968947975375.L);
+      _C4x[192] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(1787250441453568.L)*_n-real(5709575309230080.L))*_n-
+        real(20379043833577472.L))-real(83702291789512704.L))-
+        real(414148105847439360.L))-real(2672437640021671936.L))-
+        real(26585576168731181056.L))-real(727455323626338779136.L))+
+        real(18042943657392995303424.L))-real(133145498496082022236160.L))+
+        real(514617076983561465102336.L))-real(1197178585841772204654592.L))+
+        real(1707915227692879487959040.L))-real(1318158338653766295748608.L))+
+        real(89691221632280360386560.L))+real(890413412324178455953408.L))-
+        real(889018358625662489591808.L))+real(378175449066626671968256.L))-
+        real(57883997306116327342080.L))-real(2713312373724202844160.L))/
+        real(277093800961598968947975375.L);
+      _C4x[193] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(42928828177711104.L)*_n-real(170700156826812416.L))*_n-
+        real(814790242912436224.L))-real(5050491221818736640.L))-
+        real(48007950867778502656.L))-real(1246794276917594030080.L))+
+        real(29090434785150149591040.L))-real(199434240489355020599296.L))+
+        real(702576871985851397570560.L))-real(1440467539294701266141184.L))+
+        real(1677059961808671593201664.L))-real(751516848547125450768384.L))-
+        real(670205781189179909603328.L))+real(1172934321756483825172480.L))-
+        real(592914991760959746342912.L))+real(12500754256932686266368.L))+
+        real(55422264087350460547072.L))+real(24118332210881803059200.L))-
+        real(17862639793684335390720.L))/real(277093800961598968947975375.L);
+      _C4x[194] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((-real(1422100676438130688.L)*_n-real(8500178320434921472.L))*_n-
+        real(77540766521811271680.L))-real(1920646798052109058048.L))+
+        real(42385642600050273026048.L))-real(271563716140306721144832.L))+
+        real(877093742012769036664832.L))-real(1589447120644752308961280.L))+
+        real(1478221673842423284891648.L))-real(155653080079782230622208.L))-
+        real(1118563574177351578157056.L))+real(1020823612125358898282496.L))-
+        real(180659163925863690403840.L))-real(116635074141771809161216.L))-
+        real(72255196637290036199424.L))+real(129246359576356145070080.L))-
+        real(43246664653994957209600.L))+real(2261093644770169036800.L))/
+        real(277093800961598968947975375.L);
+      _C4x[195] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(115550504205888258048.L)*_n-real(2741123455591345029120.L))*_n+
+        real(57484180955459937107968.L))-real(345982057108095043371008.L))+
+        real(1029849926050158159593472.L))-real(1653101587809800741978112.L))+
+        real(1186567888404923198996480.L))+real(353863544783374359724032.L))-
+        real(1276990156691436608684032.L))+real(696718673211264264830976.L))+
+        real(76278710899184528523264.L))-real(28970856832476529295360.L))-
+        real(193729859975510248914944.L))+real(99474840531795795247104.L))+
+        real(7501096425097388359680.L))-real(735085987294951505920.L))-
+        real(5356452875714159063040.L))/real(277093800961598968947975375.L);
+      _C4x[196] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(73936074989479620771840.L)*_n-real(419941766920906498637824.L))+
+        real(1157359604143959839866880.L))-real(1647695718262972235120640.L))+
+        real(859747249493093165039616.L))+real(735946719885051968880640.L))-
+        real(1235985831377864921972736.L))+real(373610686613064993734656.L))+
+        real(152487453654084159012864.L))+real(113830676970719976357888.L))-
+        real(206464254778412687687680.L))+real(20221955931885327613952.L))+
+        real(4552689587597677166592.L))+real(45096720481873054138368.L))-
+        real(25389977312990587781120.L))+real(2568441412724467875840.L))/
+        real(277093800961598968947975375.L);
+      _C4x[197] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1259284817770600319942656.L)*_n-
+        real(1590616063503911985741824.L))+real(535775086987426103033856.L))+
+        real(991225880849209726468096.L))-real(1084532801672530279792640.L))+
+        real(126438942000949104082944.L))+real(111503584749498775109632.L))+
+        real(216235718602758370754560.L))-real(145796975301985252933632.L))-
+        real(22856377227704232181760.L))-real(40959485398228434157568.L))+
+        real(61424721901577417392128.L))-real(7985188759441047289856.L))-
+        real(2073800978755465379840.L))-real(1908347945460918528000.L))/
+        real(277093800961598968947975375.L);
+      _C4x[198] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(236733498233124738826240.L)*_n+real(1138759225202582193438720.L))-
+        real(888034239400996557553664.L))-real(30076654325270488023040.L))+
+        real(20352360506274004598784.L))+real(255123334897451365564416.L))-
+        real(68856778755797536997376.L))-real(16722330759145001582592.L))-
+        real(80527607758667720949760.L))+real(42761672595454266703872.L))+
+        real(2216524642203430551552.L))+real(17800653167500568035328.L))-
+        real(15123716238901261107200.L))+real(2161746371167920230400.L))/
+        real(277093800961598968947975375.L);
+      _C4x[199] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(687450483950084219731968.L)*_n-real(108699568870896450797568.L))*
+        _n-real(76154908051131797340160.L))+real(243141411935960445616128.L))-
+        real(9874406845516828639232.L))+real(17352698496524266110976.L))-
+        real(93179112890473252651008.L))+real(15827310667347994214400.L))-
+        real(8170504585938830098432.L))+real(33123523730030976958464.L))-
+        real(9943416602613636136960.L))-real(1213914241674355802112.L))-
+        real(705473045033914902528.L))/real(277093800961598968947975375.L);
+      _C4x[200] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(201964962830957590609920.L)-real(155273019420878287405056.L)*_n)*
+        _n+real(20745527087238522863616.L))+real(56279576782152180695040.L))-
+        real(82287391605795603873792.L))-real(579614829333184512000.L))-
+        real(27647675396249369968640.L))+real(33259290835251846184960.L))-
+        real(2659419031482613628928.L))+real(8109191962481450287104.L))-
+        real(9422781656861865148416.L))+real(1715986744463414771712.L))/
+        real(277093800961598968947975375.L);
+      _C4x[201] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(26171083601417378201600.L)*_n+real(86270411167545844039680.L))-
+        real(59603899820817350918144.L))-real(2133488787948678414336.L))-
+        real(43641822730431468404736.L))+real(23500662442215146782720.L))-
+        real(3148888808728506138624.L))+real(18160457847254936715264.L))-
+        real(8563705923482740588544.L))-real(500786955277502251008.L))-
+        real(232488718992255086592.L))/real(277093800961598968947975375.L);
+      _C4x[202] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(7212441055062359277568.L)-
+        real(35610732121616972513280.L)*_n)*_n-real(50613726020626482724864.L))+
+        real(12363663748667145191424.L))-real(10472920633762596782080.L))+
+        real(22247510426871750721536.L))-real(4598743255868765110272.L))+
+        real(4290853001439697960960.L))-real(6148819626660560109568.L))+
+        real(1349360346075493441536.L))/real(277093800961598968947975375.L);
+      _C4x[203] = (_n*(_n*(_n*(_n*(_n*(_n*((real(5203700604330893901824.L)-
+        real(48900911314275175235584.L)*_n)*_n-real(19853106229379914530816.L))+
+        real(20239188691598173798400.L))-real(3124362673253052841984.L))+
+        real(10521302770356731510784.L))-real(6752195489944448794624.L))-
+        real(83165149124833312768.L))-real(35211092731689971712.L))/
+        real(277093800961598968947975375.L);
+      _C4x[204] = (_n*(_n*(_n*(_n*(_n*((real(1162731928529984815104.L)-
+        real(2103889244558006943744.L)*_n)*_n-real(411962859164558950400.L))+
+        real(1118176952494940225536.L))-real(372992867284225622016.L))+
+        real(201166926510657896448.L))-real(321812014233212157952.L))+
+        real(82058264093589848064.L))/real(21314907766276843765228875.L);
+      _C4x[205] = (_n*(_n*(_n*(_n*((real(1175732900060890726400.L)-
+        real(762577061907395641344.L)*_n)*_n-real(266356124826903248896.L))+
+        real(500719515075378610176.L))-real(400230461401841664000.L))+
+        real(10420824586550050816.L))+real(3664884159967540224.L))/
+        real(21314907766276843765228875.L);
+      _C4x[206] = (_n*(_n*(_n*((real(67522179001937297408.L)-
+        real(26979889106708070400.L)*_n)*_n-real(30955581145869975552.L))+
+        real(12533235212662341632.L))-real(20643526053379440640.L))+
+        real(5957931413328660480.L))/real(1937718887843349433202625.L);
+      _C4x[207] = (_n*(_n*((real(8937338642882297856.L)-
+        real(7264491379390939136.L)*_n)*_n-real(8331323368101773312.L))+
+        real(497573960000798720.L))+real(166567353005081600.L))/
+        real(576078588277752534195375.L);
+      _C4x[208] = (_n*((real(67893913511264256.L)-real(193468457828745216.L)*
+        _n)*_n-real(109001388295454720.L))+real(34903794537431040.L))/
+        real(14050697275067134980375.L);
+      _C4x[209] = ((real(330570665558016.L)-real(3670039933747200.L)*_n)*_n+
+        real(105796914356224.L))/real(326760401745747325125.L);
+      _C4x[210] = (real(118608642048.L)-real(339124158464.L)*_n)/
+        real(58423100616082125.L);
+      _C4x[211] = real(13087612928.L)/real(40785938165944125.L);
+      _C4x[212] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(_n*(real(38323224576.L)*_n+real(106018897920.L))+
+        real(312755748864.L))+real(993459437568.L))+real(3440313237504.L))+
+        real(13200839933952.L))+real(57378650849280.L))+
+        real(291568551723008.L))+real(1817840664313856.L))+
+        real(15102060903530496.L))+real(198424300204720128.L))+
+        real(7395814825812295680.L))-real(259593100386011578368.L))+
+        real(2845909544972571377664.L))-real(17431195962956999688192.L))+
+        real(70436261238071141597184.L))-real(202178157257426424954880.L))+
+        real(426412113488390278086656.L))-real(664218869087684856250368.L))+
+        real(738020965652983173611520.L))-real(499249476765253323325440.L))+
+        real(145614430723198885969920.L))/real(314039641089812164807705425.L);
+      _C4x[213] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(_n*(real(2356747960320.L)*_n+real(7255434461184.L))+
+        real(24284564029440.L))+real(89784958058496.L))+
+        real(374695538982912.L))+real(1820615840890880.L))+
+        real(10802487333224448.L))+real(84935704230494208.L))+
+        real(1049313565000859648.L))+real(36491613163230855168.L))-
+        real(1184051915039802654720.L))+real(11865845306533247188992.L))-
+        real(65532836008557589561344.L))+real(234787537460237138657280.L))-
+        real(585308729749358846672896.L))+real(1045871757777419981291520.L))-
+        real(1343707137464741778161664.L))+real(1213634476851572329938944.L))-
+        real(729338366057065724510208.L))+real(260477987877523473039360.L))-
+        real(41604123063771110277120.L))/real(314039641089812164807705425.L);
+      _C4x[214] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(95622952648704.L)*_n+real(341967649112064.L))+
+        real(1376125295001600.L))+real(6424438958456832.L))+
+        real(36472018729697280.L))+real(273026171921235968.L))+
+        real(3192592336066445312.L))+real(104342602239235325952.L))-
+        real(3153894263012104077312.L))+real(29116303580112019783680.L))-
+        real(145979963963411779289088.L))+real(465285502321503145820160.L))-
+        real(1001298660985214437687296.L))+real(1468489325205846830874624.L))-
+        real(1395955117828853601402880.L))+real(675429198673490273632256.L))+
+        real(160478392531439748907008.L))-real(509379176293823680610304.L))+
+        real(347303983836697964052480.L))-real(90443745790806761472000.L))/
+        real(314039641089812164807705425.L);
+      _C4x[215] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(3749725005152256.L)*_n+real(16886650371571712.L))+
+        real(92132322509324288.L))+real(659895955329908736.L))+
+        real(7343669488133341184.L))+real(226920745256900624384.L))-
+        real(6431206852000456114176.L))+real(55065655493504444923904.L))-
+        real(252233232939834397425664.L))+real(718219025096796909600768.L))-
+        real(1329749515211165535305728.L))+real(1551966380199111933034496.L))-
+        real(912968965357573027921920.L))-real(228147081855301138776064.L))+
+        real(909205858761418150510592.L))-real(750141836056627665960960.L))+
+        real(284895720074471395033088.L))-real(36659864960540340649984.L))-
+        real(3255974848469043412992.L))/real(314039641089812164807705425.L);
+      _C4x[216] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(193889231431008256.L)*_n+real(1334234851179495424.L))+
+        real(14195942025094234112.L))+real(416846581600799948800.L))-
+        real(11138888975916869353472.L))+real(88980190149058827911168.L))-
+        real(374531129899296507822080.L))+real(956626325385210376486912.L))-
+        real(1518242191729673590276096.L))+real(1347897413453936607625216.L))-
+        real(230026316312536969379840.L))-real(904464764416532329529344.L))+
+        real(1026658068930258334646272.L))-real(393851560165027623206912.L))-
+        real(43523529157238895149056.L))+real(43864780754260493074432.L))+
+        real(27478265387846026657792.L))-real(16159282581290808049664.L))/
+        real(314039641089812164807705425.L);
+      _C4x[217] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(24354651895482023936.L)*_n+real(682547908895860850688.L))-
+        real(17279401597770331586560.L))+real(129445585687353401802752.L))-
+        real(503266799659981826162688.L))+real(1157263510700160301137920.L))-
+        real(1565864711205645542490112.L))+real(973104725414398885625856.L))+
+        real(397646575408843958779904.L))-real(1187413586253403476459520.L))+
+        real(737481003260777950347264.L))-real(8123853036626178998272.L))-
+        real(101601905878894806827008.L))-real(95466743944136461123584.L))+
+        real(115557663439225632063488.L))-real(33401878015390745362432.L))+
+        real(1210074943683897360384.L))/real(314039641089812164807705425.L);
+      _C4x[218] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(174789494833237517664256.L)-real(24767165321852208807936.L)*_n)*
+        _n-real(630581566453052440838144.L))+real(1309469623921914849263616.L))-
+        real(1497878628689001121316864.L))+real(535490081916544262078464.L))+
+        real(853112635520440747425792.L))-real(1154977897325426578030592.L))+
+        real(352926388853612272943104.L))+real(159942760531815762493440.L))+
+        real(36232053680558848344064.L))-real(192285152806477456474112.L))+
+        real(68511348162877666099200.L))+real(12894588647206039846912.L))+
+        real(1279156929716178386944.L))-real(5229036853418211606528.L))/
+        real(314039641089812164807705425.L);
+      _C4x[219] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1411523848449549596622848.L)-real(750796173889068810108928.L)*
+        _n)*_n-real(1347519277492177146478592.L))+
+        real(109812168713178043645952.L))+real(1117024747522877287301120.L))-
+        real(945902117389189685706752.L))+real(49121093927135074058240.L))+
+        real(134874280090906739081216.L))+real(181522242560836680810496.L))-
+        real(165489086005093264261120.L))-real(8712033594873663717376.L))-
+        real(2218106377444991172608.L))+real(44807732642953863102464.L))-
+        real(21258472128924072017920.L))+real(1794119540158754816000.L))/
+        real(314039641089812164807705425.L);
+      _C4x[220] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(1146200471619475550240768.L)*_n-real(261875871122117134123008.L))*
+        _n+real(1218326021822826050486272.L))-real(675475330509238721576960.L))-
+        real(123077088994828954632192.L))+real(18067816558988848267264.L))+
+        real(247445699944332096962560.L))-real(78715960977854018617344.L))-
+        real(30841053808481728200704.L))-real(53529437347574237364224.L))+
+        real(52723460871608094425088.L))-real(2681345414299398963200.L))-
+        real(1482440326242132819968.L))-real(2026986195987958431744.L))/
+        real(314039641089812164807705425.L);
+      _C4x[221] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1201262920050208181059584.L)*_n-real(415750371721314383167488.L))-
+        real(179174664712868242391040.L))-real(108648055795350193569792.L))+
+        real(234348287961902755086336.L))-real(965884489933128204288.L))-
+        real(147469438483870777344.L))-real(85626748530084985438208.L))+
+        real(26558363620069875908608.L))+real(3415732906600992079872.L))+
+        real(18849221960713601286144.L))-real(13310900513910783737856.L))+
+        real(1637922831357138665472.L))/real(314039641089812164807705425.L);
+      _C4x[222] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(156547756038606249000960.L)*_n-real(203064063039653428592640.L))*
+        _n+real(175481801560763903508480.L))+real(37730562770338672803840.L))+
+        real(48662925765217370505216.L))-real(82633433398391259267072.L))-
+        real(38300106132776026112.L))-real(12943607418138637893632.L))+
+        real(31538668226661486428160.L))-real(6557382754233867042816.L))-
+        real(1184094358740381204480.L))-real(840882393298311512064.L))/
+        real(314039641089812164807705425.L);
+      _C4x[223] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(103839089292858941767680.L)*_n+real(37954623472046002667520.L))+
+        real(87921831512023599415296.L))-real(56914878314376772190208.L))-
+        real(8374621376916904476672.L))-real(34769447684571821244416.L))+
+        real(26884873922242517401600.L))-real(20105568363257266176.L))+
+        real(8802779476990155030528.L))-real(8579176685245715447808.L))+
+        real(1361485417850272382976.L))/real(314039641089812164807705425.L);
+      _C4x[224] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(106397118712333538426880.L)*_n-real(26353269446097441390592.L))+
+        real(1150308504748652232704.L))-real(47557283913553796923392.L))+
+        real(13774852237613426278400.L))-real(3525517425994784309248.L))+
+        real(18336362436941025116160.L))-real(6565849939978130292736.L))-
+        real(650950777347756261376.L))-real(343846103940597350400.L))/
+        real(314039641089812164807705425.L);
+      _C4x[225] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(19648756765982143283200.L)*
+        _n-real(47558967248843745787904.L))+real(2954409512541331914752.L))-
+        real(13819804139340561907712.L))+real(20188105575504579395584.L))-
+        real(2325477329569987428352.L))+real(4605313951944489828352.L))-
+        real(5733809212763759181824.L))+real(1104779249964513722368.L))/
+        real(314039641089812164807705425.L);
+      _C4x[226] = (_n*(_n*(_n*(_n*(_n*((-real(475664108904792457216.L)*_n-
+        real(24102154397918989123584.L))*_n+real(15522335200959713509376.L))-
+        real(2040948183275608735744.L))+real(10949172862437826756608.L))-
+        real(5581459902086741229568.L))-real(270354579134970068992.L))-
+        real(120320035327844352000.L))/real(314039641089812164807705425.L);
+      _C4x[227] = (_n*(_n*(_n*(_n*(_n*(real(681822016249028149248.L)*_n-
+        real(476134816118335864832.L))+real(1082746294884628430848.L))-
+        real(246222891562836688896.L))+real(208002135910993887232.L))-
+        real(305301130790091358208.L))+real(68772858650836893696.L))/
+        real(24156895468447089600592725.L);
+      _C4x[228] = (_n*(_n*(_n*(_n*(real(1019737540579528146944.L)*_n-
+        real(165420699690441637888.L))+real(526156322565434245120.L))-
+        real(346624209820278587392.L))-real(3068233984327942144.L))-
+        real(1253534193385357312.L))/real(24156895468447089600592725.L);
+      _C4x[229] = (_n*(_n*(_n*(real(20176394120014594048.L)*_n-
+        real(6848788448664354816.L))+real(3674985233203068928.L))-
+        real(5895747338098442240.L))+real(1511858300431564800.L))/
+        real(652889066714786205421425.L);
+      _C4x[230] = (_n*(_n*(real(227962473897000960.L)*_n-
+        real(181666859005771776.L))+real(4531352468717568.L))+
+        real(1623576417009664.L))/real(15924123578409419644425.L);
+      _C4x[231] = (_n*(real(87718379913216.L)*_n-real(144562380079104.L))+
+        real(41360414670848.L))/real(21784026783049821675.L);
+      _C4x[232] = (real(1221967478784.L)*_n+real(415240683520.L))/
+        real(2449875352501043775.L);
+      _C4x[233] = real(474546176.L)/real(302118060488475.L);
+      _C4x[234] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*((-real(34760294400.L)*_n-real(118491709440.L))*_n-
+        real(441537527808.L))-real(1828418224128.L))-real(8604321054720.L))-
+        real(47503022489600.L))-real(323020552929280.L))-
+        real(2939487031656448.L))-real(42509504765493248.L))-
+        real(1753517071576596480.L))+real(68546576434357862400.L))-
+        real(843122890142601707520.L))+real(5845652038322038505472.L))-
+        real(27036140677239428087808.L))+real(90120468924131426959360.L))-
+        real(225301172310328567398400.L))+real(429805313330472959344640.L))-
+        real(623217704329185791049728.L))+real(659877569289726131699712.L))-
+        real(434129979795872455065600.L))+real(124812369191313330831360.L))/
+        real(350985481218025360667435475.L);
+      _C4x[235] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*((-real(1129750462464.L)*_n-real(4510936203264.L))*_n-
+        real(20401298079744.L))-real(107840823885824.L))-
+        real(699101085696000.L))-real(6034783977078784.L))-
+        real(82305636886380544.L))-real(3180072739478175744.L))+
+        real(115498324447845154816.L))-real(1307167271538917376000.L))+
+        real(8242040350467189374976.L))-real(34174581147113455878144.L))+
+        real(100350359991194994343936.L))-real(216289125417915424702464.L))+
+        real(346617188169736257536000.L))-real(410394750792967728922624.L))+
+        real(348900783762383931703296.L))-real(200664523994536601452544.L))+
+        real(69460796767339592810496.L))-real(10853249494896811376640.L))/
+        real(116995160406008453555811825.L);
+      _C4x[236] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(242559872925696.L)*_n-real(1232842657366016.L))*_n-
+        real(7655098394083328.L))-real(63009120421675008.L))-
+        real(815073208086560768.L))-real(29680741605785993216.L))+
+        real(1008180352205124009984.L))-real(10569860153082438483968.L))+
+        real(60990150631500930875392.L))-real(227728401268181083619328.L))+
+        real(588780361305740630032384.L))-real(1079965478015771222736896.L))+
+        real(1389129273798950573309952.L))-real(1163940517873974352805888.L))+
+        real(449052761897074784468992.L))+real(244716027320752308486144.L))-
+        real(477310111119630496956416.L))+real(302926252568675446423552.L))-
+        real(77058071413767360774144.L))/real(350985481218025360667435475.L);
+      _C4x[237] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((-real(20724700514615296.L)*_n-real(163367289792495616.L))*_n-
+        real(2014034275887742976.L))-real(69485076333488766976.L))+
+        real(2219880423724672876544.L))-real(21686614110547220627456.L))+
+        real(115172823355485820289024.L))-real(388997571671190642098176.L))+
+        real(885972811022257025449984.L))-real(1366729549160097771421696.L))+
+        real(1333068227773522881019904.L))-real(560882818651309438140416.L))-
+        real(436607606765714969460736.L))+real(877244105410187733499904.L))-
+        real(628812942778464443826176.L))+real(216374974876285638017024.L))-
+        real(22887465601498869661696.L))-real(3376566509523452428288.L))/
+        real(350985481218025360667435475.L);
+      _C4x[238] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(4148491175365443584.L)*_n-real(136210816196921524224.L))*_n+
+        real(4112824759486986059776.L))-real(37633302048158915231744.L))+
+        real(184894111872173532512256.L))-real(567243239338076522676224.L))+
+        real(1138428474799567563390976.L))-real(1454713993026997920989184.L))+
+        real(966793751900622470250496.L))+real(174029480894057554640896.L))-
+        real(995585475736398052982784.L))+real(856546323054646419521536.L))-
+        real(244110150568943607087104.L))-real(71772293433957586305024.L))+
+        real(31837271636593607704576.L))+real(29165207244820718288896.L))-
+        real(14608224320142719680512.L))/real(350985481218025360667435475.L);
+      _C4x[239] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(6771994398722315255808.L)*_n-real(58302747011422546296832.L))+
+        real(266206116333677472382976.L))-real(744614091698941118644224.L))+
+        real(1316169824117630978490368.L))-real(1361700583434129969774592.L))+
+        real(456349226729114097942528.L))+real(757534446801672917221376.L))-
+        real(1105464800073373915807744.L))+real(480862003253177009307648.L))+
+        real(90901905554643183730688.L))-real(71344148263531542740992.L))-
+        real(109632774671083518296064.L))+real(101868967302095119056896.L))-
+        real(25900781590293357002752.L))+real(540046749060123131904.L))/
+        real(350985481218025360667435475.L);
+      _C4x[240] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(354709244620360674967552.L)*_n-real(907545477431171639410688.L))+
+        real(1410500412077264089382912.L))-real(1138293428627189882421248.L))-
+        real(59407750569307484979200.L))+real(1088607588403619225403392.L))-
+        real(908928944457705542647808.L))+real(95936055753985086717952.L))+
+        real(166861321871471921856512.L))+real(92765456209060809932800.L))-
+        real(178186628785300582694912.L))+real(43369812221643580768256.L))+
+        real(15100107637849452445696.L))+real(2933905239802040025088.L))-
+        real(5017498422402857861120.L))/real(350985481218025360667435475.L);
+      _C4x[241] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1426804803851522574123008.L)*_n-real(840209013575262186504192.L))-
+        real(496630593742902415851520.L))+real(1184551272471290382909440.L))-
+        real(589542078691332115660800.L))-real(136900080555243530616832.L))+
+        real(61623966204081679106048.L))+real(216886379849209054494720.L))-
+        real(119065125638614892412928.L))-real(25502862224153972310016.L))-
+        real(9844425867149294174208.L))+real(43366505857368511741952.L))-
+        real(17785223467550245912576.L))+real(1245890264597720727552.L))/
+        real(350985481218025360667435475.L);
+      _C4x[242] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1111177566917860746854400.L)-real(819912639586453998796800.L)*
+        _n)*_n-real(277464011665858253291520.L))-
+        real(204195189106138365296640.L))-real(92478054724920504483840.L))+
+        real(233967909492513279836160.L))-real(21723613312106936401920.L))-
+        real(25330937350536517124096.L))-real(62101812676567941251072.L))+
+        real(43539070724307021201408.L))+real(970509168689003102208.L))-
+        real(833029778145022574592.L))-real(2070875281419960221696.L))/
+        real(350985481218025360667435475.L);
+      _C4x[243] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(37501384436491852185600.L)*_n-real(156820502467363555246080.L))*_n-
+        real(210728061936941515407360.L))+real(172644828152490664919040.L))+
+        real(40249964162396108881920.L))+real(23949368029895259586560.L))-
+        real(82771509773019731984384.L))+real(12810088426684203139072.L))+
+        real(2670719123877110218752.L))+real(19414212169321490153472.L))-
+        real(11670099203835033550848.L))+real(1245027419534709293056.L))/
+        real(350985481218025360667435475.L);
+      _C4x[244] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(84800051272131839262720.L)-real(264705504861770549821440.L)*_n)*
+        _n+real(48103900366085214437376.L))+real(76320670505274655113216.L))-
+        real(64301844447342231552000.L))-real(9679446772873103409152.L))-
+        real(18268506848372367294464.L))+real(29020423728834874441728.L))-
+        real(3862373396634494042112.L))-real(1026769083456114130944.L))-
+        real(926864222959704178688.L))/real(350985481218025360667435475.L);
+      _C4x[245] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(17040329021547538808832.L)*_n+real(104102126249085780361216.L))-
+        real(28787312733256159330304.L))-real(7804799008006364725248.L))-
+        real(39706277843021940654080.L))+real(20126041445904469196800.L))+
+        real(1353487132347120746496.L))+real(9390129486292043431936.L))-
+        real(7768909430818875637760.L))+real(1084816050753572831232.L))/
+        real(350985481218025360667435475.L);
+      _C4x[246] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1538576775560051032064.L)*
+        _n+real(11696841452753850466304.L))-real(46711589139438944387072.L))+
+        real(5428727033367220453376.L))-real(5158046643560283897856.L))+
+        real(17973684672329991847936.L))-real(4832631768765986504704.L))-
+        real(689554719612808462336.L))-real(423924537172247609344.L))/
+        real(350985481218025360667435475.L);
+      _C4x[247] = (_n*(_n*(_n*(_n*(_n*((-real(38871421772234661822464.L)*_n-
+        real(2834982596851997343744.L))*_n-real(17449094233977276858368.L))+
+        real(17415306974260256309248.L))-real(719272851125915615232.L))+
+        real(4954237305599335333888.L))-real(5315018905562510262272.L))+
+        real(908122151083312349184.L))/real(350985481218025360667435475.L);
+      _C4x[248] = (_n*(_n*(_n*(_n*((real(10579612556489078079488.L)-
+        real(26970900492980428210176.L)*_n)*_n-real(1920614827565082738688.L))+
+        real(11147193197405362716672.L))-real(4501617148425879420928.L))-
+        real(374458901113073041408.L))-real(185540687386326564864.L))/
+        real(350985481218025360667435475.L);
+      _C4x[249] = (_n*(_n*(_n*((real(1008566220850160730112.L)-
+        real(602834335072111296512.L)*_n)*_n-real(144241694179103604736.L))+
+        real(220365777115864367104.L))-real(287932417995784060928.L))+
+        real(57837484643640672256.L))/real(26998883170617335435956575.L);
+      _C4x[250] = (_n*(_n*((real(14768730917217239040.L)-
+        real(2984159999753715712.L)*_n)*_n-real(7967891541553315840.L))-
+        real(324951555039035392.L))-real(140036432547348480.L))/
+        real(729699545151819876647475.L);
+      _C4x[251] = (_n*((real(30674408653717504.L)-real(39005275696398336.L)*_n)*
+        _n-real(45794506234134528.L))+real(10522262427795456.L))/
+        real(5932516627250568102825.L);
+      _C4x[252] = ((-real(6558828537577472.L)*_n-real(40136675950592.L))*_n-
+        real(15708310798336.L))/real(729246229927810697025.L);
+      _C4x[253] = (real(448813334528.L)-real(1742758477824.L)*_n)/
+        real(304232886911894325.L);
+      _C4x[254] = real(1104084992.L)/real(17220729447843075.L);
+      _C4x[255] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(_n*(real(59828600832.L)*_n+real(265958719488.L))+
+        real(1347255533568.L))+real(8030699651072.L))+real(59154707251200.L))+
+        real(585237237071872.L))+real(9238387813777408.L))+
+        real(417859387269316608.L))-real(18002775268186390528.L))+
+        real(245492390020723507200.L))-real(1900111098760399945728.L))+
+        real(9892641911006526701568.L))-real(37509600579233080410112.L))+
+        real(108144562708957712351232.L))-real(242632031718815380275200.L))+
+        real(427032375825115069284352.L))-real(584029572819642668285952.L))+
+        real(594275705676127627378688.L))-real(382034382220367760457728.L))+
+        real(108532494948968113766400.L))/real(387931321346238556527165525.L);
+      _C4x[256] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(_n*(real(10351382888448.L)*_n+real(59157457666048.L))+
+        real(416147233046528.L))+real(3914105647792128.L))+
+        real(58435386011025408.L))+real(2484582887328841728.L))-
+        real(99911032270353334272.L))+real(1260960344316374417408.L))-
+        real(8942469460488221622272.L))+real(42143327891443289161728.L))-
+        real(142518385904907035082752.L))+real(359882321641313191067648.L))-
+        real(691585602687638093955072.L))+real(1014895126960987762065408.L))-
+        real(1123529031582655690309632.L))+real(908270099665182825381888.L))-
+        real(503524243232975132557312.L))+real(169793058764607893536768.L))-
+        real(26047798787752347303936.L))/real(387931321346238556527165525.L);
+      _C4x[257] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(1631184712892416.L)*_n+real(14652169630253056.L))+
+        real(207909583444770816.L))+real(8354511514727612416.L))-
+        real(315358961012597325824.L))+real(3705367364162788786176.L))-
+        real(24213724918613314371584.L))+real(103773727288851762774016.L))-
+        real(313586367757843162988544.L))+real(690251994504135039778816.L))-
+        real(1112978880158086656425984.L))+real(1281097127475345207853056.L))-
+        real(955173371181840962945024.L))+real(276057518335257934299136.L))+
+        real(294815624989149543530496.L))-real(443275093348759428399104.L))+
+        real(266399454268608936411136.L))-real(66566596902033776443392.L))/
+        real(387931321346238556527165525.L);
+      _C4x[258] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(549079324393734144.L)*_n+real(20948185607395344384.L))-
+        real(745922130393186697216.L))+real(8201472422076716417024.L))-
+        real(49637082351917623934976.L))+real(194307855120787291766784.L))-
+        real(525787049041850915618816.L))+real(1004612443159064418975744.L))-
+        real(1328260147727517001711616.L))+real(1091055665812902651101184.L))-
+        real(271462506719023365881856.L))-real(564588266895018374987776.L))+
+        real(819776013926040615256064.L))-real(525965291650948892983296.L))+
+        real(165552095521119355797504.L))-real(13787423014256258318336.L))-
+        real(3293399846727308279808.L))/real(387931321346238556527165525.L);
+      _C4x[259] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(15220161420201602056192.L)-real(1472588543149162364928.L)*_n)*_n-
+        real(85702411275349202567168.L))+real(307658670199147522424832.L))-
+        real(746863387031370552311808.L))+real(1232094210587097376489472.L))-
+        real(1291049163756855836540928.L))+real(593010800494011830239232.L))+
+        real(461523356466477643333632.L))-real(994004619836187557756928.L))+
+        real(690413321825558742433792.L))-real(134966021733880816467968.L))-
+        real(83310286619741883727872.L))+real(20887173221472899432448.L))+
+        real(29742544852360402829312.L))-real(13226718739275802607616.L))/
+        real(387931321346238556527165525.L);
+      _C4x[260] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(435034857939829388214272.L)-real(131675314027856838787072.L)*_n)*
+        _n-real(948698098882376449916928.L))+real(1340810629437482313187328.L))-
+        real(1048707087838763548672000.L))+real(3509199733743899639808.L))+
+        real(948303782487182532411392.L))-real(946797564108156832841728.L))+
+        real(272178626310987577294848.L))+real(138668886768427099750400.L))-
+        real(37565142405810170626048.L))-real(116603982716308002177024.L))+
+        real(89040273914827296997376.L))-real(20157452825326086258688.L))+
+        real(109458059422021976064.L))/real(387931321346238556527165525.L);
+      _C4x[261] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1331062244050061764853760.L)-real(1112169839020350363402240.L)*
+        _n)*_n-real(684421689374159667200000.L))-
+        real(515276787863609870909440.L))+real(1121015313757820808069120.L))-
+        real(631954776783314747392000.L))-real(70966395620946555699200.L))+
+        real(132414132267215298232320.L))+real(133870458354128595714048.L))-
+        real(157341467588939883741184.L))+real(23828538649046629220352.L))+
+        real(15370301406152461647872.L))+real(4232610323214679146496.L))-
+        real(4766791176006094290944.L))/real(387931321346238556527165525.L);
+      _C4x[262] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(278236178658557637427200.L)*_n-real(883117636635223025254400.L))*
+        _n+real(1044896784492538437304320.L))-real(267854067344467568885760.L))-
+        real(208658980714224927375360.L))-real(24499146390814179983360.L))+
+        real(223500680859398512312320.L))-real(75165298228229899812864.L))-
+        real(33123728290571614158848.L))-real(16974304258141263495168.L))+
+        real(41187502861266538463232.L))-real(14885832030268663267328.L))+
+        real(852867963795436732416.L))/real(387931321346238556527165525.L);
+      _C4x[263] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(825152530344188549529600.L)*_n+real(16093135374109932257280.L))-
+        real(173091267703238940426240.L))-real(179661612431230988451840.L))+
+        real(192204175551686041927680.L))+real(19332614716294944522240.L))-
+        real(12574226638832801939456.L))-real(66506217074977723645952.L))+
+        real(34694260040284171665408.L))+real(3366563656193789657088.L))-
+        real(204926675133353951232.L))-real(2066579183102025138176.L))/
+        real(387931321346238556527165525.L);
+      _C4x[264] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(49148219012744698920960.L)*_n-real(258309901964713729720320.L))*_n+
+        real(97424668981259296309248.L))+real(55632385206458356072448.L))+
+        real(47499322809821964533760.L))-real(74201862753821044768768.L))+
+        real(2100464549311769739264.L))+real(825499977944081104896.L))+
+        real(19545780271046056738816.L))-real(10208649146497274740736.L))+
+        real(947277609177333891072.L))/real(387931321346238556527165525.L);
+      _C4x[265] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(3886406473063184990208.L)*_n+real(31651070108403767443456.L))+
+        real(93506396640812094980096.L))-real(43051750740610863071232.L))-
+        real(13802269528960448593920.L))-real(23100030040802622177280.L))+
+        real(25944758250810025967616.L))-real(1776504428600317968384.L))-
+        real(805184637733605212160.L))-real(977643675088462807040.L))/
+        real(387931321346238556527165525.L);
+      _C4x[266] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(102667449090387528908800.L)*
+        _n-real(4176143654067686604800.L))-real(1664558069512969125888.L))-
+        real(41901475237771467554816.L))+real(13676609102710294183936.L))+
+        real(1783429219606151036928.L))+real(9822399889695569870848.L))-
+        real(7008449331187379339264.L))+real(867123963816388067328.L))/
+        real(387931321346238556527165525.L);
+      _C4x[267] = (_n*(_n*(_n*(_n*(_n*(_n*(real(24680978487302704594944.L)*_n-
+        real(41852681246037032042496.L))-real(888324737424044326912.L))-
+        real(7405281786214815367168.L))+real(17163496346381762691072.L))-
+        real(3368486034509553205248.L))-real(656845125089254965248.L))-
+        real(480366195184442671104.L))/real(387931321346238556527165525.L);
+      _C4x[268] = (_n*(_n*(_n*(_n*((-real(5019745509032155152384.L)*_n-
+        real(20553178504582563627008.L))*_n+real(14273677180576945143808.L))+
+        real(307067548871203749888.L))+real(5280901475645194764288.L))-
+        real(4904366406848135299072.L))+real(748980239998893686784.L))/
+        real(387931321346238556527165525.L);
+      _C4x[269] = (_n*(_n*(_n*(_n*(real(5984633002620612509696.L)*_n-
+        real(2481313182312589950976.L))+real(11100632093381464424448.L))-
+        real(3532921645127981596672.L))-real(419664577389087686656.L))-
+        real(235081389196733054976.L))/real(387931321346238556527165525.L);
+      _C4x[270] = (_n*(_n*(_n*(real(3492920937966206976.L)*_n-
+        real(257661145165332480.L))+real(906922006895656960.L))-
+        real(1043443055627075584.L))+real(188380220089171968.L))/
+        real(115215717655550506839075.L);
+      _C4x[271] = (_n*(_n*(real(1945805193171959808.L)*_n-
+        real(857735694188019712.L))-real(61147943509426176.L))-
+        real(28926926391607296.L))/real(103975159835496798854775.L);
+      _C4x[272] = (_n*(real(1318364018376704.L)*_n-real(1784303872638976.L))+
+        real(370082037891072.L))/real(268669663657614467325.L);
+      _C4x[273] = (-real(4212251426816.L)*_n-real(1768612691968.L))/
+        real(17149127467507306425.L);
+      _C4x[274] = real(7370964992.L)/real(6344479270257975.L);
+      _C4x[275] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*((-real(218791673856.L)*_n-real(1400536825856.L))*_n-
+        real(11110140870656.L))-real(118739630555136.L))-
+        real(2031767011721216.L))-real(99991962219708416.L))+
+        real(4707313913727811584.L))-real(70478949986091401216.L))+
+        real(602274663517508337664.L))-real(3484589124637012525056.L))+
+        real(14798748875001633439744.L))-real(48264101444607599968256.L))+
+        real(124107689428990971346944.L))-real(255110250492925885546496.L))+
+        real(420181589047172046782464.L))-real(547341806785132008308736.L))+
+        real(538653841598066420875264.L))-real(339586117529215787073536.L))+
+        real(95508595555091940114432.L))/real(424877161474451752386895575.L);
+      _C4x[276] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((-real(84110928248832.L)*_n-real(856422384402432.L))*_n-
+        real(13896008693972992.L))-real(644993673175498752.L))+
+        real(28458089775888334848.L))-real(396398904996530225152.L))+
+        real(3124087334077357621248.L))-real(16497566162978070331392.L))+
+        real(63152800431693017120768.L))-real(182841201745263310405632.L))+
+        real(409656275676181580218368.L))-real(717066650034170056671232.L))+
+        real(978260610793222950617088.L))-real(1023600262039727392161792.L))+
+        real(792974277073986343927808.L))-real(426088031783042722824192.L))+
+        real(140518393460365153271808.L))-real(21224132345575986692096.L))/
+        real(424877161474451752386895575.L);
+      _C4x[277] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(52995609652625408.L)*_n-real(2330821839456043008.L))*_n+
+        real(96862625780142702592.L))-real(1261692576340291616768.L))+
+        real(9217173162693369004032.L))-real(44625020542874191659008.L))+
+        real(154415325899211661115392.L))-real(396509496805989713707008.L))+
+        real(766812972890940875210752.L))-real(1110348094436664575787008.L))+
+        real(1159940972984586586816512.L))-real(772801974612617842393088.L))+
+        real(144557494463902108352512.L))+real(322553584988565465464832.L))-
+        real(409948333609442619686912.L))+real(236086010518086615040000.L))-
+        real(58183397292182446276608.L))/real(424877161474451752386895575.L);
+      _C4x[278] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(244993523835664859136.L)*_n-real(2997692002079598444544.L))+
+        real(20391608393570038317056.L))-real(90887323143384695046144.L))+
+        real(285073430590796758777856.L))-real(648733217092759573233664.L))+
+        real(1072068205803073664188416.L))-real(1236738985646846057119744.L))+
+        real(851455338207468685623296.L))-real(42603007777238484516864.L))-
+        real(635384053865395209109504.L))+real(751510380834552289427456.L))-
+        real(440054114480934289932288.L))+real(127469275788092729458688.L))-
+        real(7692111469971112984576.L))-real(3116335338838743318528.L))/
+        real(424877161474451752386895575.L);
+      _C4x[279] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(37691298526665312829440.L)*_n-real(155231442352606952816640.L))+
+        real(442426812329801977692160.L))-real(891060280546618937180160.L))+
+        real(1241345557744393912320000.L))-real(1068836648786189342474240.L))+
+        real(259898604745432561090560.L))+real(648646631561154999091200.L))-
+        real(937118889747330231173120.L))+real(540955821564462366720000.L))-
+        real(57345853626480894935040.L))-real(85056859046449399201792.L))+
+        real(11519605159903650381824.L))+real(29600893246049550860288.L))-
+        real(12008192989533587374080.L))/real(424877161474451752386895575.L);
+      _C4x[280] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(610114148412857715261440.L)*_n-real(1084876624977513425141760.L))+
+        real(1248343393947934250762240.L))-real(692927849841223134085120.L))-
+        real(351602565555781978030080.L))+real(1009964965611276767068160.L))-
+        real(760650029796242017484800.L))+real(114236578390335962480640.L))+
+        real(153084531563546179272704.L))-real(5968475553252058857472.L))-
+        real(118330049176476000976896.L))+real(77440851961195664506880.L))-
+        real(15733189386938984955904.L))-real(167406443821915963392.L))/
+        real(424877161474451752386895575.L);
+      _C4x[281] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1110888451586257091297280.L)*_n-real(228267823844477695426560.L))-
+        real(809765012940224766935040.L))+real(1021205736789361588961280.L))-
+        real(376908671342120754216960.L))-real(162628702779099284766720.L))+
+        real(80524447810108690268160.L))+real(159280245898590948425728.L))-
+        real(133892619361773928054784.L))+real(9139377171596455182336.L))+
+        real(14519956012961410056192.L))+real(5217790864403667615744.L))-
+        real(4502630072345316294656.L))/real(424877161474451752386895575.L);
+      _C4x[282] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(801154767786817817149440.L)-real(1052891185037563951841280.L)*
+        _n)*_n-real(24710033090930163056640.L))-
+        real(202701431218160963420160.L))-real(100408462362032253960192.L))+
+        real(209415990150798124253184.L))-real(37748933651953004576768.L))-
+        real(34391800801816047779840.L))-real(23005446981136840392704.L))+
+        real(38590994935648442384384.L))-real(12472969903138957950976.L))+
+        real(568230604185547046912.L))/real(424877161474451752386895575.L);
+      _C4x[283] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(183866786074538299883520.L)*_n-real(86129889566253152993280.L))-
+        real(229792121168218294321152.L))+real(138018537884415820824576.L))+
+        real(44203717666859661656064.L))+real(2878865064043642617856.L))-
+        real(67336421414647692787712.L))+real(26644422562569001107456.L))+
+        real(4835410630577492066304.L))+real(364583096642187558912.L))-
+        real(2031623612398046019584.L))/real(424877161474451752386895575.L);
+      _C4x[284] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(28133120349842308071424.L)-
+        real(254148764020971940085760.L)*_n)*_n+
+        real(51387655305315066314752.L))+real(66169496642467601055744.L))-
+        real(62302477160090634813440.L))-real(5607536798889572040704.L))-
+        real(1531160162804340621312.L))+real(19326267080011914674176.L))-
+        real(8920215537330925076480.L))+real(719566316570030899200.L))/
+        real(424877161474451752386895575.L);
+      _C4x[285] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1371367456260262723584.L)*
+        _n+real(98855476420049331290112.L))-real(22542012433755831009280.L))-
+        real(13683990167698557370368.L))-real(26918299871060862959616.L))+
+        real(22620477115339345231872.L))-real(203981666805014855680.L))-
+        real(558312751139223764992.L))-real(1003367979456785022976.L))/
+        real(424877161474451752386895575.L);
+      _C4x[286] = (_n*(_n*(_n*(_n*(_n*(_n*(real(13649032136962154168320.L)*_n+
+        real(7286845967462937133056.L))-real(41512992559738646429696.L))+
+        real(7958046022913209925632.L))+real(1556136579095989321728.L))+
+        real(10090599823336240316416.L))-real(6306017721352668053504.L))+
+        real(694556629570890498048.L))/real(424877161474451752386895575.L);
+      _C4x[287] = (_n*(_n*(_n*(_n*((-real(34318875673746789629952.L)*_n-
+        real(5038999903868073017344.L))*_n-real(9798467436492636553216.L))+
+        real(16022896306852875730944.L))-real(2158207830123738038272.L))-
+        real(580641655067345158144.L))-real(518939859147967954944.L))/
+        real(424877161474451752386895575.L);
+      _C4x[288] = (_n*(_n*(_n*((real(11055183047499901304832.L)-
+        real(22707465323068388278272.L)*_n)*_n+real(860451088355301523456.L))+
+        real(5555287933242279198720.L))-real(4509884598563389833216.L))+
+        real(619420803280280748032.L))/real(424877161474451752386895575.L);
+      _C4x[289] = (_n*(_n*((real(10831353523562392584192.L)-
+        real(3462497935151689891840.L)*_n)*_n-real(2682702072802950774784.L))-
+        real(424003224041735323648.L))-real(272266502944032030720.L))/
+        real(424877161474451752386895575.L);
+      _C4x[290] = (_n*((real(675885624548392960.L)-real(31342333790257152.L)*
+        _n)*_n-real(684782710505340928.L))+real(111840867077062656.L))/
+        real(88571432452460236061475.L);
+      _C4x[291] = ((-real(1814487552229376.L)*_n-real(184753168842752.L))*_n-
+        real(96932582653952.L))/real(294257250672625368975.L);
+      _C4x[292] = (real(6775423107072.L)-real(35958875488256.L)*_n)/
+        real(6260792567502667425.L);
+      _C4x[293] = -real(133782044672.L)/real(854691993121895775.L);
+      _C4x[294] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (_n*(real(2131964723200.L)*_n+real(24479971409920.L))+
+        real(451349472870400.L))+real(24011791956705280.L))-
+        real(1226316517788876800.L))+real(19998392443941683200.L))-
+        real(186984969350854737920.L))+real(1189904350414530150400.L))-
+        real(5592550446948291706880.L))+real(20336547079811969843200.L))-
+        real(58858660298301951180800.L))+real(137897432698878857052160.L))-
+        real(263627444865503697305600.L))+real(410703808843100496855040.L))-
+        real(513379761053875621068800.L))+real(491058901877620159283200.L))-
+        real(304456519164124498755584.L))+real(84896529382303946768384.L))/
+        real(461823001602664948246625625.L);
+      _C4x[295] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1106013134520320.L)*_n+real(55661334993305600.L))-
+        real(2674155356862545920.L))+real(40758301718510305280.L))-
+        real(353481019650652241920.L))+real(2067833778703570042880.L))-
+        real(8839289460222223974400.L))+real(28860589153690604011520.L))-
+        real(73837309397471152046080.L))+real(150021143457997531381760.L))-
+        real(242952722172486709411840.L))+real(311656736440190605721600.L))-
+        real(310802882367751727349760.L))+real(232136935433056802570240.L))-
+        real(121425473918829712113664.L))+real(39284712150209612742656.L))-
+        real(5854933060848548052992.L))/real(153941000534221649415541875.L);
+      _C4x[296] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(419177000924526673920.L)-real(29293344283479244800.L)*_n)*_n-
+        real(3387238778254707916800.L))+real(18291634271659071897600.L))-
+        real(71341510548198921338880.L))+real(209339536031828095795200.L))-
+        real(471571575583443485982720.L))+real(819026974308263673200640.L))-
+        real(1081582232633420587991040.L))+real(1035792310183770131005440.L))-
+        real(616336860337283058892800.L))+real(44994397208518286376960.L))+
+        real(335609199376606445961216.L))-real(378561771629292631883776.L))+
+        real(210708910623851559256064.L))-real(51372315888735647432704.L))/
+        real(461823001602664948246625625.L);
+      _C4x[297] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(40261740731122287902720.L)-real(8046011327061667348480.L)*_n)*_n-
+        real(143699953344005936250880.L))+real(379276263443149849886720.L))-
+        real(749084754366597745868800.L))+real(1093052863022791267450880.L))-
+        real(1112108645923022071398400.L))+real(628936239153881305579520.L))+
+        real(132828309812218890813440.L))-real(666598624758214741196800.L))+
+        real(680790619020651753635840.L))-real(368768436659319757340672.L))+
+        real(98646132229764678680576.L))-real(3571337468200873885696.L))-
+        real(2901711692913210032128.L))/real(461823001602664948246625625.L);
+      _C4x[298] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(573795873750841609420800.L)-real(241588440061028440473600.L)*_n)*
+        _n-real(987956266795360824852480.L))+real(1180739801442315927552000.L))-
+        real(822263252228152775147520.L))-real(17816496431764875509760.L))+
+        real(756066725788931126722560.L))-real(850710945026132001423360.L))+
+        real(412628670804891763998720.L))-real(3433399257963429888000.L))-
+        real(81288446987722203070464.L))+real(3779232372794687750144.L))+
+        real(29005051599847637909504.L))-real(10937220996365176274944.L))/
+        real(461823001602664948246625625.L);
+      _C4x[299] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1070366992642500282286080.L)-real(1141187065421929339944960.L)*
+        _n)*_n-real(343608082124824274534400.L))-
+        real(602909781580891375534080.L))+real(982568553675396753653760.L))-
+        real(576452613681904846110720.L))+real(1636936486667428036608.L))+
+        real(147182896307962548060160.L))+real(21063555948631589650432.L))-
+        real(116453764391919912222720.L))+real(67170698799763284819968.L))-
+        real(12302923461141056192512.L))-real(343861884607178735616.L))/
+        real(461823001602664948246625625.L);
+      _C4x[300] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(169684103167341074841600.L)*_n-real(956643098881719848140800.L))+
+        real(850164249529518391296000.L))-real(167879308527440882565120.L))-
+        real(198598545032521728393216.L))+real(25655495276584715157504.L))+
+        real(171381322772776380006400.L))-real(110451500410401009434624.L))-
+        real(1576592512742613581824.L))+real(13067890290723662069760.L))+
+        real(5941846441313263681536.L))-real(4239571090109561307136.L))/
+        real(461823001602664948246625625.L);
+      _C4x[301] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(530604327587900345548800.L)*_n+real(131977168891895076618240.L))-
+        real(152481283706816437420032.L))-real(156530826148027205419008.L))+
+        real(182740982794412246433792.L))-real(8151355704847011676160.L))-
+        real(31591511062109027827712.L))-real(27756134547413545254912.L))+
+        real(35806094360712600092672.L))-real(10466361242425030082560.L))+
+        real(360431905313044561920.L))/real(461823001602664948246625625.L);
+      _C4x[302] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(15009248562197676687360.L)*_n-real(244298467285940249296896.L))+
+        real(82996432784741690769408.L))+real(55364604757274391478272.L))+
+        real(18126670064637664296960.L))-real(65429511443093297037312.L))+
+        real(19593221547206903857152.L))+real(5635226707924034256896.L))+
+        real(861250463051326423040.L))-real(1977642842096769433600.L))/
+        real(461823001602664948246625625.L);
+      _C4x[303] = (_n*(_n*(_n*(_n*(_n*(_n*((real(34865811169337222889472.L)-
+        real(25049300432913906532352.L)*_n)*_n+real(78359610398675725975552.L))-
+        real(49048535289216483983360.L))-real(10666388886959446556672.L))-
+        real(4015240746172931899392.L))+real(18841196561879051272192.L))-
+        real(7791611791309033963520.L))+real(544021638634159472640.L))/
+        real(461823001602664948246625625.L);
+      _C4x[304] = (_n*(_n*(_n*(_n*(_n*(_n*(real(94061782322562648244224.L)*_n-
+        real(4989223438082088370176.L))-real(10675229986370302771200.L))-
+        real(29550148949190528466944.L))+real(19274738267183420276736.L))+
+        real(948730317159236894720.L))-real(309505926629945245696.L))-
+        real(1011306433109246869504.L))/real(461823001602664948246625625.L);
+      _C4x[305] = (_n*(_n*(_n*(_n*(_n*(real(5623976056189811163136.L)*_n-
+        real(13014239125021214638080.L))+real(1057831365290118610944.L))+
+        real(301392554005406679040.L))+real(3402100564685314064384.L))-
+        real(1888115169291661213696.L))+real(185610085070664630272.L))/
+        real(153941000534221649415541875.L);
+      _C4x[306] = (_n*(_n*(_n*((-real(7204219494115185786880.L)*_n-
+        real(12030549499987697336320.L))*_n+real(14665794240663271768064.L))-
+        real(1176616011237764890624.L))-real(479912745127446052864.L))-
+        real(544003327069043818496.L))/real(461823001602664948246625625.L);
+      _C4x[307] = (_n*(_n*(_n*(real(2658511695217153802240.L)*_n+
+        real(349127854472439005184.L))+real(1921492373325488324608.L))-
+        real(1378850491311721545728.L))+real(171117741739182391296.L))/
+        real(153941000534221649415541875.L);
+      _C4x[308] = (_n*(_n*(real(2163491964727590912.L)*_n-
+        real(406434038878830592.L))-real(83541496652890112.L))-
+        real(62479567859744768.L))/real(96273296143978517458125.L);
+      _C4x[309] = (_n*(real(16548080031629312.L)*_n-real(14844900281417728.L))+
+        real(2205061056823296.L))/real(2238913863813453894375.L);
+      _C4x[310] = (-real(169771903483904.L)*_n-real(99720831696896.L))/
+        real(279013581812618874375.L);
+      _C4x[311] = real(17725128704.L)/real(20644734133379125.L);
+      _C4x[312] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
+        real(101130373693440.L)*_n-real(5783393245593600.L))*_n+
+        real(318472188057354240.L))-real(5618759317869035520.L))+
+        real(57052017689131745280.L))-real(395968170390045327360.L))+
+        real(2039836029282051686400.L))-real(8177888081030770851840.L))+
+        real(26281076226218545643520.L))-real(68987825093823682314240.L))+
+        real(149570242640390840647680.L))-real(268964032818246687129600.L))+
+        real(399603705901395078021120.L))-real(482130558207117974568960.L))+
+        real(449988520993310109597696.L))-real(274992985051467289198592.L))+
+        real(76114129791031124688896.L))/real(498768841730878144106355675.L);
+      _C4x[313] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(2241681145882214400.L)*_n-real(37115504492921487360.L))+
+        real(351320319454127063040.L))-real(2255407036957364060160.L))+
+        real(10648804381055558615040.L))-real(38702343486057322905600.L))+
+        real(111280900920525465845760.L))-real(257219043916181510553600.L))+
+        real(481562073203945703997440.L))-real(730093179498015511019520.L))+
+        real(888424749518111008358400.L))-real(849993167067850400071680.L))+
+        real(615042225604755902693376.L))-real(314277697201676901941248.L))+
+        real(99997449109624468799488.L))-real(14731767056328604778496.L))/
+        real(498768841730878144106355675.L);
+      _C4x[314] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(1208159862249058467840.L)*_n-real(7201842428551354122240.L))+
+        real(31264908658453575106560.L))-real(103196829813193844981760.L))+
+        real(265175248273355990630400.L))-real(535862743249582911651840.L))+
+        real(849345767923583507496960.L))-real(1034756785032088938086400.L))+
+        real(914900521908322990817280.L))-real(483619396361886734745600.L))-
+        real(30086811366913097072640.L))+real(339039465302404374724608.L))-
+        real(349604981346582843621376.L))+real(189280885814646315941888.L))-
+        real(45757761311323696660480.L))/real(498768841730878144106355675.L);
+      _C4x[315] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(68207297251862139371520.L)*_n-real(204793910887769104711680.L))+
+        real(469636245011109846712320.L))-real(822769077513134895267840.L))+
+        real(1075520585575946413670400.L))-real(970210722875698430607360.L))+
+        real(430741825632232726855680.L))+real(263470288898092034949120.L))-
+        real(671076564935108393435136.L))+real(612166449974084599021568.L))-
+        real(309751817884944675373056.L))+real(76624121978862824325120.L))-
+        real(772181074205594353664.L))-real(2678503101150655414272.L))/
+        real(498768841730878144106355675.L);
+      _C4x[316] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(689117160334118501744640.L)*_n-real(1034688320756786606899200.L))+
+        real(1068813441805893469470720.L))-real(576057451075223483842560.L))-
+        real(237165358523154746572800.L))+real(803665001347227781693440.L))-
+        real(751650018237704810004480.L))+real(305662424875062576283648.L))+
+        real(32996127128452748804096.L))-real(74622946111822950825984.L))-
+        real(2476991729123855433728.L))+real(28132635482355740442624.L))-
+        real(9996125312177108156416.L))/real(498768841730878144106355675.L);
+      _C4x[317] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(841202287667440684892160.L)*_n-real(31822983215997014507520.L))-
+        real(759798172382769709056000.L))+real(899695869755677715988480.L))-
+        real(409829360079325838180352.L))-real(73794120883102103371776.L))+
+        real(129906354091232604454912.L))+real(42891890823690012590080.L))-
+        real(112236514082021582045184.L))+real(58190998383169428783104.L))-
+        real(9626186017934468448256.L))-real(453842001546316873728.L))/
+        real(498768841730878144106355675.L);
+      _C4x[318] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(652784685276097192919040.L)-real(986085308861541997608960.L)*_n)*
+        _n-real(11218993662206077304832.L))-real(197016909341114083835904.L))-
+        real(24384803175628869206016.L))+real(173276502711580330295296.L))-
+        real(88510208229772940541952.L))-real(9150026966014239965184.L))+
+        real(11338122476648465956864.L))+real(6455005389837431734272.L))-
+        real(3985621940807982383104.L))/real(498768841730878144106355675.L);
+      _C4x[319] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(212798284515636821360640.L)*_n-real(83194912498082880946176.L))-
+        real(191220929987421979803648.L))+real(150003812137954122399744.L))+
+        real(13784621358545381621760.L))-real(26425052721455829090304.L))-
+        real(31262825828751362752512.L))+real(32988168350057078194176.L))-
+        real(8796240449129393684480.L))+real(207835944042312499200.L))/
+        real(498768841730878144106355675.L);
+      _C4x[320] = (_n*(_n*(_n*(_n*(_n*(_n*((real(34136227676090491994112.L)-
+        real(231179334978353145839616.L)*_n)*_n+
+        real(56184392327783535083520.L))+real(31548513937789311516672.L))-
+        real(61608490929288156020736.L))+real(13586951464390546685952.L))+
+        real(5962442734200002969600.L))+real(1283059378418496831488.L))-
+        real(1912392858015719489536.L))/real(498768841730878144106355675.L);
+      _C4x[321] = (_n*(_n*(_n*(_n*(_n*(_n*(real(12469653863753758801920.L)*_n+
+        real(84140281217544571846656.L))-real(35861382419886548975616.L))-
+        real(13548577230077042884608.L))-real(6392824084577975795712.L))+
+        real(18166924514161565106176.L))-real(6806853172165810847744.L))+
+        real(407750788886380412928.L))/real(498768841730878144106355675.L);
+      _C4x[322] = (_n*(_n*(_n*(_n*(_n*(real(8591822783548697346048.L)*_n-
+        real(5956188858648178458624.L))-real(31027084247774816894976.L))+
+        real(16060879841227947638784.L))+real(1765484007083546247168.L))-
+        real(72168278273508245504.L))-real(1006690411404196839424.L))/
+        real(498768841730878144106355675.L);
+      _C4x[323] = (_n*(_n*(_n*((-real(11698685736190165909504.L)*_n-
+        real(208814656795250262016.L))*_n+real(1794788189999726592.L))+
+        real(3396748311320728698880.L))-real(1694233809987339026432.L))+
+        real(148744606619390705664.L))/real(166256280576959381368785225.L);
+      _C4x[324] = (_n*(_n*((real(4396636324659424395264.L)-
+        real(4641420323221227438080.L)*_n)*_n-real(131572048073775382528.L))-
+        real(122467555239752892416.L))-real(186285243621640765440.L))/
+        real(166256280576959381368785225.L);
+      _C4x[325] = (_n*(_n*(real(7834633575818330112.L)*_n+
+        real(48016071755227463680.L))-real(30789299598841085952.L))+
+        real(3463955104036552704.L))/real(4055031233584375155336225.L);
+      _C4x[326] = ((-real(3429529750010331136.L)*_n-real(929121136795451392.L))*
+        _n-real(825547048093745152.L))/real(1288808376565576599758025.L);
+      _C4x[327] = (real(233411205660672.L)-real(1720396395053056.L)*_n)/
+        real(301334668357628384325.L);
+      _C4x[328] = -real(5320214577152.L)/real(14381121797311898475.L);
+      _C4x[329] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(1565371771807334400.L)-real(82484461043712000.L)*_n)*_n-
+        real(17152002128231792640.L))+real(128922741271544463360.L))-
+        real(722206096937818521600.L))+real(3163382077496229888000.L))-
+        real(11169172104390534758400.L))+real(32431966406822886113280.L))-
+        real(78456742263564187729920.L))+real(159273085798213012684800.L))-
+        real(271775503544569823232000.L))+real(387575500707038704435200.L))-
+        real(453463335827235284189184.L))+real(414275146311301370740736.L))-
+        real(249993622774061171998720.L))+real(68748246262866822299648.L))/
+        real(535714681859091339966085725.L);
+      _C4x[330] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(796882849483079024640.L)-real(114000123919293480960.L)*_n)*_n-
+        real(4118491001867584143360.L))+real(16487786133727519703040.L))-
+        real(52615905091591864320000.L))+real(136249299448591464529920.L))-
+        real(289201256266363022868480.L))+real(505004876294475869061120.L))-
+        real(723386332535375926394880.L))+real(840882751108578017280000.L))-
+        real(775907246293505777074176.L))+real(546050816551694530248704.L))-
+        real(273352100268780401197056.L))+real(85712099236820973256704.L))-
+        real(12499681138703058599936.L))/real(535714681859091339966085725.L);
+      _C4x[331] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(48058037906451852165120.L)-real(13105596121129817210880.L)*_n)*
+        _n-real(138658708703314748375040.L))+real(319135941425592658821120.L))-
+        real(588087695732779379589120.L))+real(861042376467336564572160.L))-
+        real(976303724445006078935040.L))+real(800864636991573149614080.L))-
+        real(371874625913790432018432.L))-real(86417098974058726293504.L))+
+        real(336205176842650210271232.L))-real(323187478827126067560448.L))+
+        real(171038107936539149336576.L))-real(41070380884310049685504.L))/
+        real(535714681859091339966085725.L);
+      _C4x[332] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(550610802488938038558720.L)-real(270232313099228943482880.L)*_n)*
+        _n-real(869263158552465411932160.L))+real(1028319971570955017256960.L))-
+        real(822700223526103091773440.L))+real(259392162921900996034560.L))+
+        real(357753221499595668848640.L))-real(657992022141630754586624.L))+
+        real(547950795055018239066112.L))-real(260878304917920424132608.L))+
+        real(59650625796137226862592.L))+real(1128572339223560978432.L))-
+        real(2461327174030332002304.L))/real(535714681859091339966085725.L);
+      _C4x[333] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(923787631913692676751360.L)-real(1034710286547361380433920.L)*
+        _n)*_n-real(346245234157604422287360.L))-
+        real(401783047015916277596160.L))+real(808420641413856504053760.L))-
+        real(650455257567164922593280.L))+real(218313846409468265365504.L))+
+        real(56706846965005117554688.L))-real(66644315841830953418752.L))-
+        real(7453439157493586460672.L))+real(27102034522387626590208.L))-
+        real(9167794051686131040256.L))/real(535714681859091339966085725.L);
+      _C4x[334] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(226510654976894781358080.L)*_n-real(838505504646919335444480.L))+
+        real(786839317157396965490688.L))-real(267569023005024910835712.L))-
+        real(120372785324231963443200.L))+real(107128808817268633894912.L))+
+        real(59730306053177746653184.L))-real(106598962419766954819584.L))+
+        real(50397996986643551092736.L))-real(7524579274347948015616.L))-
+        real(519375075239597703168.L))/real(535714681859091339966085725.L);
+      _C4x[335] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(458442854818227859488768.L)*_n+real(96306110255016387280896.L))-
+        real(172464876600679899070464.L))-real(66052329368078015004672.L))+
+        real(167910599215137926676480.L))-real(68812287716852351631360.L))-
+        real(14295912336864684539904.L))+real(9528420821397873360896.L))+
+        real(6801015386323193692160.L))-real(3744921543288857559040.L))/
+        real(535714681859091339966085725.L);
+      _C4x[336] = (_n*(_n*(_n*(_n*(_n*(_n*((-real(11512968925967443558400.L)*_n-
+        real(206825135944362465689600.L))*_n+real(115844139308050768986112.L))+
+        real(28946038594593687076864.L))-real(20089451415499968610304.L))-
+        real(33662456270784521306112.L))+real(30237558827368692318208.L))-
+        real(7403759247694499938304.L))+real(95364480585493905408.L))/
+        real(535714681859091339966085725.L);
+      _C4x[337] = (_n*(_n*(_n*(_n*(_n*((real(49947882271217396219904.L)-
+        real(5203944850077889069056.L)*_n)*_n+real(42407517492739936616448.L))-
+        real(56575356892381181902848.L))+real(8581541322318195720192.L))+
+        real(5963407710798869430272.L))+real(1634138971069032169472.L))-
+        real(1841052091594565484544.L))/real(535714681859091339966085725.L);
+      _C4x[338] = (_n*(_n*(_n*(_n*(_n*(real(28145849041027147497472.L)*_n-
+        real(7883630470704981344256.L))-real(4911902270365057941504.L))-
+        real(2844621509791940870144.L))+real(5788871683336942125056.L))-
+        real(1983150924961272561664.L))+real(100445763893888811008.L))/
+        real(178571560619697113322028575.L);
+      _C4x[339] = (_n*(_n*(_n*((-real(450597459332782096384.L)*_n-
+        real(31486405223959270260736.L))*_n+real(13073372565100757516288.L))+
+        real(2317888471320775098368.L))+real(146565013145265373184.L))-
+        real(993300730654811488256.L))/real(535714681859091339966085725.L);
+      _C4x[340] = (_n*(_n*((-real(1162207852366183530496.L)*_n-
+        real(336827775939520757760.L))*_n+real(3355305437742864793600.L))-
+        real(1519433631680467828736.L))+real(118976779410317770752.L))/
+        real(178571560619697113322028575.L);
+      _C4x[341] = (_n*(_n*(real(1296975958388225605632.L)*_n+
+        real(24071140691780042752.L))-real(27946396176690970624.L))-
+        real(62889101902200438784.L))/real(59523853539899037774009525.L);
+      _C4x[342] = (_n*(real(15460645461047640064.L)*_n-
+        real(8947273598989500416.L))+real(914444779889098752.L))/
+        real(1384275663718582273814175.L);
+      _C4x[343] = (-real(14832869272715264.L)*_n-real(16076005412175872.L))/
+        real(25846223855796368985675.L);
+      _C4x[344] = real(11005853696.L)/real(17940058163291825.L);
+      _C4x[345] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(5091307533222543360.L)*_n-real(41198029324953845760.L))+
+        real(249300895402284810240.L))-real(1184179253160852848640.L))+
+        real(4554535589080203264000.L))-real(14483423173275046379520.L))+
+        real(38622461795400123678720.L))-real(87154634183041068564480.L))+
+        real(167194604351140009082880.L))-real(272599898398597840896000.L))+
+        real(375097460196470629072896.L))-real(427194329668202660888576.L))+
+        real(383001812805974799417344.L))-real(228565597964855928684544.L))+
+        real(62498405693515292999680.L))/real(572660521987304535825815775.L);
+      _C4x[346] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(514187426110352916480.L)*_n-real(2247933497525686763520.L))+
+        real(7881743693103004385280.L))-real(22590496521837808189440.L))+
+        real(53561338527583190384640.L))-real(105703579650568759541760.L))+
+        real(173801078079300556554240.L))-real(236949245019376960143360.L))+
+        real(264603634712238970896384.L))-real(236495556299583549079552.L))+
+        real(162398517249812954349568.L))-real(79831643364024523948032.L))+
+        real(24709794374579019317248.L))-real(3571337468200873885696.L))/
+        real(190886840662434845275271925.L);
+      _C4x[347] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(68255699287613405921280.L)*_n-real(176108899047462320209920.L))+
+        real(369147506618944727285760.L))-real(628108811718068073922560.L))+
+        real(857556726199951703408640.L))-real(911129946124723798671360.L))+
+        real(695535740765103257026560.L))-real(278250385181479415054336.L))-
+        real(128374707708691409272832.L))+real(329357279394947502440448.L))-
+        real(299229583097036172951552.L))+real(155386591547833448398848.L))-
+        real(37112952879006378622976.L))/real(572660521987304535825815775.L);
+      _C4x[348] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(618578444832325364613120.L)*_n-real(890387086357713345576960.L))+
+        real(959846801282704563240960.L))-real(677618176913105265623040.L))+
+        real(114598368788199443005440.L))+real(423167842280036137697280.L))-
+        real(633801719329703113785344.L))+real(489155075033436868575232.L))-
+        real(220332144402742995058688.L))+real(46463340388623300165632.L))+
+        real(2410711646300392128512.L))-real(2257144678447121956864.L))/
+        real(572660521987304535825815775.L);
+      _C4x[349] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(761367907818236144517120.L)*_n-real(141932181921238163128320.L))-
+        real(518471155546357606907904.L))+real(783900067938426616283136.L))-
+        real(553324818027658440867840.L))+real(148079874353063859847168.L))+
+        real(71265077790889964732416.L))-real(58293930961292620726272.L))-
+        real(11359238777021883482112.L))+real(25991697839449845006336.L))-
+        real(8436766389561498533888.L))/real(572660521987304535825815775.L);
+      _C4x[350] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(662012426056248019910656.L)-real(856864870222817214332928.L)*_n)*
+        _n-real(151202452659623967064064.L))-real(145443399821504500727808.L))+
+        real(82556297742728581611520.L))+real(72160251650795823431680.L))-
+        real(100190891075416646221824.L))+real(43663490536105119318016.L))-
+        real(5865058745918664212480.L))-real(555004094218279845888.L))/
+        real(572660521987304535825815775.L);
+      _C4x[351] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(162244546902089766273024.L)*
+        _n-real(135698369282461491265536.L))-real(98336804674514213404672.L))+
+        real(157744953895228324970496.L))-real(51631097725980996796416.L))-
+        real(17599659185393897570304.L))+real(7755604277847765549056.L))+
+        real(7016232510410146709504.L))-real(3519321627372776587264.L))/
+        real(572660521987304535825815775.L);
+      _C4x[352] = (_n*(_n*(_n*(_n*(_n*((real(83244152479985965203456.L)-
+        real(207256316991167648497664.L)*_n)*_n+
+        real(38488841588026346831872.L))-real(13386406132456695529472.L))-
+        real(35127278841657192087552.L))+real(27615403122651371143168.L))-
+        real(6240092707521290043392.L))+real(12356984641708621824.L))/
+        real(572660521987304535825815775.L);
+      _C4x[353] = (_n*(_n*(_n*(_n*(_n*(real(39426942372718181351424.L)*_n+
+        real(50524659025021289627648.L))-real(50882305733861696339968.L))+
+        real(4486579367125494792192.L))+real(5745527201912053563392.L))+
+        real(1921372350956712230912.L))-real(1767071000376643682304.L))/
+        real(572660521987304535825815775.L);
+      _C4x[354] = (_n*(_n*(_n*((-real(12922609861994402021376.L)*_n-
+        real(14663330997699015081984.L))*_n-real(10377016441700863705088.L))+
+        real(16490114063764429996032.L))-real(5203644908636423061504.L))+
+        real(217824752403331678208.L))/real(572660521987304535825815775.L);
+      _C4x[355] = (_n*(_n*((real(10363105915761611243520.L)-
+        real(31108224082047813025792.L)*_n)*_n+real(2665258414019276963840.L))+
+        real(343454172582539952128.L))-real(973879596736504135680.L))/
+        real(572660521987304535825815775.L);
+      _C4x[356] = (_n*((real(1095127986104170446848.L)-
+        real(228080158859782520832.L)*_n)*_n-real(454138721074839289856.L))+
+        real(31606851391048384512.L))/real(63628946887478281758423975.L);
+      _C4x[357] = (_n*(real(76084294790401753088.L)*_n-
+        real(15295746883276767232.L))-real(63038841724082323456.L))/
+        real(63628946887478281758423975.L);
+      _C4x[358] = (real(14181714112806912.L)-real(152607815888797696.L)*_n)/
+        real(27628722052747842708825.L);
+      _C4x[359] = -real(54965112406016.L)/real(91993525147884048975.L);
+      _C4x[360] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(430994768322594078720.L)-real(84197065396353761280.L)*_n)*_n-
+        real(1793048747701048442880.L))+real(6194168401149076439040.L))-
+        real(18035960932757604925440.L))+real(44720745236779090575360.L))-
+        real(95031583628155567472640.L))+real(173535935320979731906560.L))-
+        real(271872965336201579986944.L))+real(362497287114935439982592.L))-
+        real(403121983084712687566848.L))+real(355440888311252047101952.L))-
+        real(210033252183921664196608.L))+real(57141399491213982171136.L))/
+        real(609606362115517731685545825.L);
+      _C4x[361] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(31970970891211914608640.L)-real(10176476723924655144960.L)*_n)*
+        _n-real(83688392887351608606720.L))+real(183984060806886189957120.L))-
+        real(340890208974693445140480.L))+real(531787992272133968363520.L))-
+        real(694143741283918927626240.L))+real(748132698939334844219392.L))-
+        real(649995135516435961348096.L))+real(436690280250806542270464.L))-
+        real(211215428087395894951936.L))+real(64625616056591281291264.L))-
+        real(9266172890467132243968.L))/real(609606362115517731685545825.L);
+      _C4x[362] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(413825184882267751710720.L)-real(214034860114736295444480.L)*_n)*
+        _n-real(656543496537894058721280.L))+real(842133421975364865884160.L))-
+        real(842855810924450282471424.L))+real(599646862218377023193088.L))-
+        real(200074490509092341153792.L))-real(159298739193669591498752.L))+
+        real(320012267824187116093440.L))-real(277563905150600783855616.L))+
+        real(141861108416907690639360.L))-real(33738373088367507144704.L))/
+        real(609606362115517731685545825.L);
+      _C4x[363] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(877392490929897477242880.L)-real(889289452672089367511040.L)*_n)*
+        _n-real(540149494276991068667904.L))-real(5464164240765975789568.L))+
+        real(466041248043616759185408.L))-real(602995853494487514873856.L))+
+        real(436048845159616311459840.L))-real(186604799267254478831616.L))+
+        real(36143424521723768209408.L))+real(3262438927417256968192.L))-
+        real(2068807831079903821824.L))/real(609606362115517731685545825.L);
+      _C4x[364] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(32795003990588742696960.L)*_n-real(595091362362469753290752.L))+
+        real(740478006614137644253184.L))-real(463614711290422458580992.L))+
+        real(92322771143285224243200.L))+real(79305650728527359639552.L))-
+        real(50114832320037157601280.L))-real(14384992487995191853056.L))+
+        real(24853186435830339600384.L))-real(7789531146923225907200.L))/
+        real(609606362115517731685545825.L);
+      _C4x[365] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(537149830091282443141120.L)*
+        _n-real(59380568619727814918144.L))-real(155035323673074726862848.L))+
+        real(58420237132999633666048.L))+real(80876640692613733679104.L))-
+        real(93458624460192913293312.L))+real(37856146464015973875712.L))-
+        real(4547760312161134444544.L))-real(570468604583495073792.L))/
+        real(609606362115517731685545825.L);
+      _C4x[366] = (_n*(_n*(_n*(_n*(_n*((-real(94150496146393625788416.L)*_n-
+        real(121614752059864419139584.L))*_n+real(144694292247282918096896.L))-
+        real(36961746472760617467904.L))-real(19526442990342349258752.L))+
+        real(6085090205128816852992.L))+real(7130102002019737796608.L))-
+        real(3309332099903740968960.L))/real(609606362115517731685545825.L);
+      _C4x[367] = (_n*(_n*(_n*(_n*(_n*(real(53913608561960329150464.L)*_n+
+        real(43584033194830477656064.L))-real(6826182834845181280256.L))-
+        real(35830854175750795296768.L))+real(25155778723711209701376.L))-
+        real(5265097474396068511744.L))-real(48822101619058409472.L))/
+        real(609606362115517731685545825.L);
+      _C4x[368] = (_n*(_n*(_n*(_n*(real(56042554411652231462912.L)*_n-
+        real(44939383802842058850304.L))+real(1192635094428580577280.L))+
+        real(5386675108318181064704.L))+real(2152545577261133201408.L))-
+        real(1692733009650165743616.L))/real(609606362115517731685545825.L);
+      _C4x[369] = (_n*(_n*((-real(13699127493087568330752.L)*_n-
+        real(11904434636260707926016.L))*_n+real(15575442621543982563328.L))-
+        real(4554973193376618250240.L))+real(152019767703424204800.L))/
+        real(609606362115517731685545825.L);
+      _C4x[370] = (_n*(_n*(real(7950434773662726881280.L)*_n+
+        real(2855725742065350344704.L))+real(517630575411575390208.L))-
+        real(950421023617361903616.L))/real(609606362115517731685545825.L);
+      _C4x[371] = (_n*(real(152087537775491940352.L)*_n-
+        real(58176974110576345088.L))+real(3577681766573408256.L))/
+        real(9676291462151075106119775.L);
+      _C4x[372] = (-real(4223018003857408.L)*_n-real(81684179116359680.L))/
+        real(88233660749097949295925.L);
+      _C4x[373] = real(1187558457344.L)/real(2967533069286582225.L);
+      _C4x[374] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(684808837435647590400.L)*_n-real(2552815166218441850880.L))+
+        real(8054336620689201561600.L))-real(21746708875860844216320.L))+
+        real(50627258758617838387200.L))-real(102079961953517489356800.L))+
+        real(178494104901579152818176.L))-real(269944788277079582965760.L))+
+        real(349997380662696286879744.L))-real(381045535398903215554560.L))+
+        real(331009252972784611491840.L))-real(193876848169773843873792.L))+
+        real(52508313045980416049152.L))/real(646552202243730927545275875.L);
+      _C4x[375] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(41268460411269005967360.L)*_n-real(99928379768550771916800.L))+
+        real(205730769682747034173440.L))-real(360674194413173090549760.L))+
+        real(537133203577301083619328.L))-real(674570313658546050301952.L))+
+        real(704402023174814281236480.L))-real(596701093731048439676928.L))+
+        real(393105562445198468841472.L))-real(187388626932101321588736.L))+
+        real(56744443366763076255744.L))-real(8078202007073910161408.L))/
+        real(646552202243730927545275875.L);
+      _C4x[376] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(452376341730091125964800.L)*_n-real(674450171758867308871680.L))+
+        real(817648238648469693136896.L))-real(774073110235378693963776.L))+
+        real(513239718143080230027264.L))-real(134960678833126406881280.L))-
+        real(181737936974692298522624.L))+real(309195446049300686045184.L))-
+        real(257989271586097242046464.L))+real(130094334307908370563072.L))-
+        real(30835088148952852201472.L))/real(646552202243730927545275875.L);
+      _C4x[377] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(786923868284873405890560.L)*_n-real(413347858199903649923072.L))-
+        real(103348181187335221673984.L))+real(491556374863983069364224.L))-
+        real(568660700939824482222080.L))+real(388493395807836030631936.L))-
+        real(158460873658538353754112.L))+real(28015014648058300334080.L))+
+        real(3812288184847131738112.L))-real(1896979938133067956224.L))/
+        real(646552202243730927545275875.L);
+      _C4x[378] = (_n*(_n*(_n*(_n*(_n*(_n*((real(685831146636741636521984.L)-
+        real(639377792612952067538944.L)*_n)*_n-
+        real(382867698419535095791616.L))+real(48569158297785152307200.L))+
+        real(82759154214861239484416.L))-real(42404168936857687556096.L))-
+        real(16695139297225389113344.L))+real(23719951015907491315712.L))-
+        real(7214480465194481876992.L))/real(646552202243730927545275875.L);
+      _C4x[379] = (_n*(_n*(_n*(_n*(_n*(_n*(real(10632884446466437808128.L)*_n-
+        real(153880538970079591661568.L))+real(35977262383266109849600.L))+
+        real(86562091177696389234688.L))-real(86700573847391418974208.L))+
+        real(32852036501153549123584.L))-real(3497197262858948182016.L))-
+        real(572369679143757938688.L))/real(646552202243730927545275875.L);
+      _C4x[380] = (_n*(_n*(_n*(_n*((real(130175705428439072768000.L)-
+        real(136933609611924112146432.L)*_n)*_n-
+        real(24646700522200039948288.L))-real(20438808531519984893952.L))+
+        real(4550027383744652902400.L))+real(7166116325514310320128.L))-
+        real(3114691312233750724608.L))/real(646552202243730927545275875.L);
+      _C4x[381] = (_n*(_n*(_n*(_n*(real(45293223486842050969600.L)*_n-
+        real(712846732076804734976.L))-real(35931867530174037753856.L))+
+        real(22874573958974166532096.L))-real(4445918678380099665920.L))-
+        real(93706058264540610560.L))/real(646552202243730927545275875.L);
+      _C4x[382] = (_n*(_n*((-real(5576612242752010190848.L)*_n-
+        real(201813586968620040192.L))*_n+real(706097888679988035584.L))+
+        real(333624816480246824960.L))-real(231361244667523891200.L))/
+        real(92364600320532989649325125.L);
+      _C4x[383] = (_n*((real(697656587238061899776.L)-
+        real(624972980070106791936.L)*_n)*_n-real(190024448782494597120.L))+
+        real(4762250782797987840.L))/real(30788200106844329883108375.L);
+      _C4x[384] = (_n*(real(139418120787643596800.L)*_n+
+        real(31886793471382519808.L))-real(44017945317094719488.L))/
+        real(30788200106844329883108375.L);
+      _C4x[385] = (real(1220363417550848.L)-real(22658460747300864.L)*_n)/
+        real(4456245492378684307875.L);
+      _C4x[386] = -real(602006238527488.L)/real(697370271282346822875.L);
+      _C4x[387] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(10102049320864422297600.L)-real(3461193947640433213440.L)*_n)*_n-
+        real(25543753282757182095360.L))+real(56270297086653502586880.L))-
+        real(108320321891807992479744.L))+real(182253240008438844489728.L))-
+        real(267095265529608651407360.L))+real(337746271250343843069952.L))-
+        real(360774426108321832370176.L))+real(309235222378561570603008.L))-
+        real(179690737328083074809856.L))+real(48469212042443460968448.L))/
+        real(683498042371944123405005925.L);
+      _C4x[388] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(75219482769268754350080.L)-real(38704807234037927116800.L)*_n)*
+        _n-real(125571610340742553141248.L))+real(179439725154106169360384.L))-
+        real(217707839073190447939584.L))+real(220974451178196151828480.L))-
+        real(182972005946382935392256.L))+real(118430510698172516401152.L))-
+        real(55718058086227310018560.L))+real(16715417425868193005568.L))-
+        real(2364351806948461510656.L))/real(227832680790648041135001975.L);
+      _C4x[389] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        ((real(786548209383195382120448.L)-real(683101994568560085565440.L)*_n)*
+        _n-real(706579164741323777376256.L))+real(435947710988690745458688.L))-
+        real(80835957312130184642560.L))-real(197642203038780277915648.L))+
+        real(297600478942318968176640.L))-real(240298944129325015760896.L))+
+        real(119793824885388716539904.L))-real(28317236757638550650880.L))/
+        real(683498042371944123405005925.L);
+      _C4x[390] = (_n*(_n*(_n*(_n*(_n*(_n*((-real(298745284339035784871936.L)*
+        _n-real(181844661380492338135040.L))*_n+
+        real(503875109365855117377536.L))-real(532888963131919415902208.L))+
+        real(346139420624792697438208.L))-real(134895879266904234262528.L))+
+        real(21575928875943341326336.L))+real(4149217091527565639680.L))-
+        real(1741189315194603438080.L))/real(683498042371944123405005925.L);
+      _C4x[391] = (_n*(_n*(_n*(_n*(_n*(_n*(real(625481215297630861524992.L)*_n-
+        real(311507795764883547488256.L))+real(14633262856967473332224.L))+
+        real(83032103549410501197824.L))-real(35308470948718134165504.L))-
+        real(18427405318254776811520.L))+real(22613233148825232736256.L))-
+        real(6701726534440505573376.L))/real(683498042371944123405005925.L);
+      _C4x[392] = (_n*(_n*(_n*(_n*((real(15856161641610625417216.L)-
+        real(145577684510862143913984.L)*_n)*_n+
+        real(89830906421704545796096.L))-real(80109879564411900788736.L))+
+        real(28539215316375146856448.L))-real(2655897422812122447872.L))-
+        real(565224981345846951936.L))/real(683498042371944123405005925.L);
+      _C4x[393] = (_n*(_n*(_n*(_n*(real(115195355797583978037248.L)*_n-
+        real(14454755071549901897728.L))-real(20615553181563458945024.L))+
+        real(3163626486103896227840.L))+real(7142848699488014434304.L))-
+        real(2934711860625154244608.L))/real(683498042371944123405005925.L);
+      _C4x[394] = (_n*(_n*(_n*(real(4790677141391228796928.L)*_n-
+        real(35567790313061593645056.L))+real(20775776885963204067328.L))-
+        real(3755713909978132643840.L))-real(126347227058877235200.L))/
+        real(683498042371944123405005925.L);
+      _C4x[395] = (_n*((real(4453118791104489062400.L)-
+        real(3436000960308748222464.L)*_n)*_n+real(2477022964560338878464.L))-
+        real(1548407882056757936128.L))/real(683498042371944123405005925.L);
+      _C4x[396] = (_n*(real(1962353802634460135424.L)*_n-
+        real(499842059402672603136.L))+real(8401322357326610432.L))/
+        real(97642577481706303343572275.L);
+      _C4x[397] = (real(16341584613992300544.L)*_n-
+        real(18302119760210427904.L))/real(13948939640243757620510325.L);
+      _C4x[398] = real(601295421440.L)/real(2991617395646009559.L);
+      _C4x[399] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(12302261468031614976000.L)*_n-real(29364963243258072268800.L))+
+        real(61601167336968044937216.L))-real(113791045219677083009024.L))+
+        real(184980516859573583216640.L))-real(263547510579499997593600.L))+
+        real(325840558534654542479360.L))-real(342132586461387269603328.L))+
+        real(289733902048382012096512.L))-real(167154174258681930055680.L))+
+        real(44922684332020768702464.L))/real(720443882500157319264735975.L);
+      _C4x[400] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
+        (real(243623288494230249406464.L)*_n-real(389328658348144555196416.L))+
+        real(536118971670202735919104.L))-real(630561151899027369885696.L))+
+        real(623834587649588330496000.L))-real(506011220312639995379712.L))+
+        real(322317957901847466344448.L))-real(149846011534024084815872.L))+
+        real(44574446468981848014848.L))-real(6268281534700572377088.L))/
+        real(720443882500157319264735975.L);
+      _C4x[401] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(750855312428744679882752.L)*
+        _n-real(641572543317776256729088.L))+real(367180187548114218909696.L))-
+        real(35929255816224116310016.L))-real(208507853106049479344128.L))+
+        real(285695264331922768134144.L))-real(224294821062004405436416.L))+
+        real(110724821813907037356032.L))-real(26117839727919051571200.L))/
+        real(720443882500157319264735975.L);
+      _C4x[402] = (_n*(_n*(_n*(_n*(_n*((real(506293824663714237775872.L)-
+        real(243700933293988116430848.L)*_n)*_n-
+        real(497074568318784553091072.L))+real(308542884215791040856064.L))-
+        real(115095479601963567415296.L))+real(16449429199352500322304.L))+
+        real(4335508471147170627584.L))-real(1600412306732061032448.L))/
+        real(720443882500157319264735975.L);
+      _C4x[403] = (_n*(_n*(_n*(_n*((-real(249298506016595411730432.L)*_n-
+        real(11351149548067983720448.L))*_n+real(81144543681383241875456.L))-
+        real(28883265100711465058304.L))-real(19695196067752600141824.L))+
+        real(21546042558357308440576.L))-real(6242878164752444424192.L))/
+        real(720443882500157319264735975.L);
+      _C4x[404] = (_n*(_n*(_n*((real(91209757380984898060288.L)-
+        real(1707339911901640392704.L)*_n)*_n-real(73805944053491853950976.L))+
+        real(24819101837534087348224.L))-real(1979789974026208673792.L))-
+        real(552149717401957564416.L))/real(720443882500157319264735975.L);
+      _C4x[405] = (_n*(_n*((-real(6128787188242108645376.L)*_n-
+        real(20268943947737811910656.L))*_n+real(1927072923661279166464.L))+
+        real(7074899618938637778944.L))-real(2768490365032270397440.L))/
+        real(720443882500157319264735975.L);
+      _C4x[406] = (_n*((real(18855843921432353439744.L)-
+        real(34853732511257991315456.L)*_n)*_n-real(3172551820670635343872.L))-
+        real(149741728961717600256.L))/real(720443882500157319264735975.L);
+      _C4x[407] = (_n*(real(3945617037685545762816.L)*_n+
+        real(2583909558702116438016.L))-real(1479950648782536835072.L))/
+        real(720443882500157319264735975.L);
+      _C4x[408] = (real(23195812695638016.L)-real(2724235770884784128.L)*_n)/
+        real(639258103371923087191425.L);
+      _C4x[409] = -real(1197385342517248.L)/real(993297829878681822495.L);
+      _C4x[410] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(66589585784217811288064.L)-
+        real(33158338822878951112704.L)*_n)*_n-
+        real(118540943658973948542976.L))+real(186824897379581061758976.L))-
+        real(259479024138307030220800.L))+real(314340303527549088038912.L))-
+        real(324959908376452773445632.L))+real(272188641204208305963008.L))-
+        real(156010562641436468051968.L))+real(41788543564670482513920.L))/
+        real(757389722628370515124466025.L);
+      _C4x[411] = (_n*(_n*(_n*(_n*(_n*(_n*((real(531198236319819837210624.L)-
+        real(398859949671889162469376.L)*_n)*_n-
+        real(607454052298520879169536.L))+real(587163963192969051242496.L))-
+        real(467422909274009760694272.L))+real(293427850902015676776448.L))-
+        real(134942701164455685783552.L))+real(39832484078664630140928.L))-
+        real(5571805808622731001856.L))/real(757389722628370515124466025.L);
+      _C4x[412] = (_n*(_n*(_n*(_n*(_n*((real(306240140184498280071168.L)-
+        real(579809277507653160927232.L)*_n)*_n+real(1257057495520674578432.L))-
+        real(215487041323008192937984.L))+real(273792953769367475060736.L))-
+        real(209793979769261249265664.L))+real(102697356910298604240896.L))-
+        real(24184008190617811156992.L))/real(757389722628370515124466025.L);
+      _C4x[413] = (_n*(_n*(_n*(_n*(_n*(real(501397294896890083540992.L)*_n-
+        real(462122628304144865165312.L))+real(275231659927247534424064.L))-
+        real(98399742034279384743936.L))+real(12350304583527310557184.L))+
+        real(4415205318043258322944.L))-real(1473395456991421267968.L))/
+        real(757389722628370515124466025.L);
+      _C4x[414] = (_n*(_n*(_n*((real(77833008168170371940352.L)-
+        real(30943485290391929880576.L)*_n)*_n-real(23130375511799578492928.L))-
+        real(20590958552582778257408.L))+real(20525847732382766989312.L))-
+        real(5830820561035016011776.L))/real(757389722628370515124466025.L);
+      _C4x[415] = (_n*(_n*(_n*(real(91136767717745964875776.L)*_n-
+        real(67857240372806990954496.L))+real(21606218822048907526144.L))-
+        real(1434843986948054319104.L))-real(535303420460773933056.L))/
+        real(757389722628370515124466025.L);
+      _C4x[416] = (_n*((real(834578222963094454272.L)-
+        real(19559284417295441461248.L)*_n)*_n+real(6973703617663878561792.L))-
+        real(2615033992351722766336.L))/real(757389722628370515124466025.L);
+      _C4x[417] = (_n*(real(743768959490749104128.L)*_n-
+        real(116456150644453015552.L))-real(7222774071354720256.L))/
+        real(32929987940363935440194175.L);
+      _C4x[418] = (real(16531983056844619776.L)*_n-real(8785618937002852352.L))/
+        real(4704283991480562205742025.L);
+      _C4x[419] = real(549755813888.L)/real(1740393633548117723175.L);
+      _C4x[420] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(71219613512572130557952.L)*
+        _n-real(122624092620436692533248.L))+real(187917440639110775570432.L))-
+        real(255030812295936052559872.L))+real(303279884892464494936064.L))-
+        real(309112190371165735223296.L))+real(256336938356576463355904.L))-
+        real(146052441621770310516736.L))+real(39002640660359117012992.L))/
+        real(794335562756583710984196075.L);
+      _C4x[421] = (_n*(_n*(_n*(_n*(_n*(_n*(real(174707351035972396515328.L)*_n-
+        real(194742529282177752891392.L))+real(184289690819822922760192.L))-
+        real(144217008200612487102464.L))+real(89333849771326314643456.L))-
+        real(40677270655763159711744.L))+real(11922648295654719225856.L))-
+        real(1659686836611026255872.L))/real(264778520918861236994732025.L);
+      _C4x[422] = (_n*(_n*(_n*(_n*(_n*(real(252397644512405722497024.L)*_n+
+        real(31981428882762287284224.L))-real(219470015896624149037056.L))+
+        real(262100072987028269039616.L))-real(196631068090212320018432.L))+
+        real(95556519428409146736640.L))-real(22473514614110528995328.L))/
+        real(794335562756583710984196075.L);
+      _C4x[423] = (_n*(_n*(_n*((real(245742594093529094422528.L)-
+        real(428598209718128243376128.L)*_n)*_n-
+        real(84273202879125803499520.L))+real(9060779635038981455872.L))+
+        real(4419716460320395362304.L))-real(1358831239578295205888.L))/
+        real(794335562756583710984196075.L);
+      _C4x[424] = (_n*(_n*(_n*(real(73626674659528185741312.L)*_n-
+        real(18021206944965917147136.L))-real(21189610875612953575424.L))+
+        real(19556403257026017230848.L))-real(5459515958774328197120.L))/
+        real(794335562756583710984196075.L);
+      _C4x[425] = (_n*((real(818572051655419756544.L)-
+        real(2708590336148043202560.L)*_n)*_n-real(43243651582941724672.L))-
+        real(22442932828756770816.L))/real(34536328815503639608008525.L);
+      _C4x[426] = ((real(297747462928717578240.L)-real(5366082936477057024.L)*
+        _n)*_n-real(107536332602428358656.L))/
+        real(34536328815503639608008525.L);
+      _C4x[427] = (-real(98209856336580050944.L)*_n-
+        real(7703147677873078272.L))/real(34536328815503639608008525.L);
+      _C4x[428] = -real(1109241755926003712.L)/real(651628845575540369962425.L);
+      _C4x[429] = (_n*(_n*(_n*(_n*(_n*((real(188372446548648574058496.L)-
+        real(126096309848139072798720.L)*_n)*_n-
+        real(250314737530861843906560.L))+real(292675693113007694413824.L))-
+        real(294460300997843107184640.L))+real(241959627176522243112960.L))-
+        real(137110455400029271097344.L))+real(36513110405442577629184.L))/
+        real(831281402884796906843926125.L);
+      _C4x[430] = (_n*(_n*(_n*(_n*((real(520863521641793354465280.L)-
+        real(561194652455965003087872.L)*_n)*_n-
+        real(401254993895625439838208.L))+real(245528842946193068654592.L))-
+        real(110784030556294460997632.L))+real(32261283623536299081728.L))-
+        real(4470993110870519709696.L))/real(831281402884796906843926125.L);
+      _C4x[431] = (_n*(_n*(_n*(_n*(real(57297393616934582353920.L)*_n-
+        real(221146988973022337040384.L))+real(250749421703545132941312.L))-
+        real(184658496486690617556992.L))+real(89175057563171090857984.L))-
+        real(20952301048981455110144.L))/real(831281402884796906843926125.L);
+      _C4x[432] = (_n*(_n*(_n*(real(9549604208874704863232.L)*_n-
+        real(3142626702968525684736.L))+real(278836078435249422336.L))+
+        real(190069461276707258368.L))-real(54584821553358176256.L))/
+        real(36142669690643343775822875.L);
+      _C4x[433] = (_n*((-real(587443175818952441856.L)*_n-
+        real(937028772502704226304.L))*_n+real(810391095806533828608.L))-
+        real(222775242785950793728.L))/real(36142669690643343775822875.L);
+      _C4x[434] = (_n*(real(713879932158309564416.L)*_n-
+        real(27755262291019300864.L))-real(21558511513897009152.L))/
+        real(36142669690643343775822875.L);
+      _C4x[435] = (real(291535807171969155072.L)*_n-
+        real(101844234847588974592.L))/real(36142669690643343775822875.L);
+      _C4x[436] = -real(2014305302085632.L)/real(9092495519658702836685.L);
+      _C4x[437] = (_n*(_n*(_n*(_n*(_n*(real(8186477613872805052416.L)*_n-
+        real(10670408855688912568320.L))+real(12283982877768699346944.L))-
+        real(12212564372665392955392.L))+real(9950978377727357222912.L))-
+        real(5610658021484573753344.L))+real(1490331036956839903232.L))/
+        real(37749010565783047943637225.L);
+      _C4x[438] = (_n*(_n*(_n*(_n*(real(21349350625296808673280.L)*_n-
+        real(16210790175313206706176.L))+real(9808141367520744439808.L))-
+        real(4388439207198911889408.L))+real(1270337665241790283776.L))-
+        real(175333063171392929792.L))/real(37749010565783047943637225.L);
+      _C4x[439] = (_n*(_n*((real(10427075990122364141568.L)-
+        real(9611077358625893646336.L)*_n)*_n-real(7554153085891571089408.L))+
+        real(3628161362092082855936.L))-real(851854033332710932480.L))/
+        real(37749010565783047943637225.L);
+      _C4x[440] = (_n*((real(185985153811519373312.L)-
+        real(2698532126922450665472.L)*_n)*_n+real(186397233177423773696.L))-
+        real(50524793503934840832.L))/real(37749010565783047943637225.L);
+      _C4x[441] = ((real(772751830912226820096.L)-real(944604126143104155648.L)*
+        _n)*_n-real(209538601630667112448.L))/
+        real(37749010565783047943637225.L);
+      _C4x[442] = (-real(3042181548288770048.L)*_n-real(4130451769182388224.L))/
+        real(7549802113156609588727445.L);
+      _C4x[443] = -real(19316123519745523712.L)/
+        real(7549802113156609588727445.L);
+      _C4x[444] = (_n*(_n*(_n*((real(11862734745972926054400.L)-
+        real(10452819550754832384000.L)*_n)*_n-real(11665022500206710620160.L))+
+        real(9431294787401170288640.L))-real(5293073605174126182400.L))+
+        real(1402664505371143438336.L))/real(39355351440922752111451575.L);
+      _C4x[445] = (_n*(_n*((real(3011956765289579806720.L)-
+        real(5030318121789612359680.L)*_n)*_n-real(1337197542359779246080.L))+
+        real(384950807649027358720.L))-real(52930736051741261824.L))/
+        real(13118450480307584037150525.L);
+      _C4x[446] = (_n*(_n*(real(9972455762875310407680.L)*_n-
+        real(7120731442828038635520.L))+real(3403775562370347171840.L))-
+        real(798772925871731769344.L))/real(39355351440922752111451575.L);
+      _C4x[447] = (_n*(real(22195990763495489536.L)*_n+
+        real(36331664093904633856.L))-real(9370513080930271232.L))/
+        real(7871070288184550422290315.L);
+      _C4x[448] = (real(147460236699085307904.L)*_n-
+        real(39499524219294711808.L))/real(7871070288184550422290315.L);
+      _C4x[449] = -real(101260622871658496.L)/real(201822315081655139033085.L);
+      _C4x[450] = (_n*(_n*(_n*(real(2292165577145369755648.L)*_n-
+        real(2231203726689375879168.L))+real(1791034284009158868992.L))-
+        real(1000872099887471132672.L))+real(264653680258706309120.L))/
+        real(8192338463212491255853185.L);
+      _C4x[451] = (_n*(_n*(real(1669110583097171116032.L)*_n-
+        real(735699027927989485568.L))+real(210709915765783396352.L))-
+        real(28871310573677051904.L))/real(8192338463212491255853185.L);
+      _C4x[452] = ((real(640165294932485996544.L)-
+        real(1344790611331525902336.L)*_n)*_n-real(150181466405179752448.L))/
+        real(8192338463212491255853185.L);
+      _C4x[453] = (real(2711166975677038592.L)*_n-real(669628969594650624.L))/
+        real(630179881785576250450245.L);
+      _C4x[454] = -real(260856934666600448.L)/real(57289080162325113677295.L);
+      _C4x[455] = (_n*((real(131041238357599322112.L)-
+        real(164338602202563084288.L)*_n)*_n-real(72938047765078867968.L))+
+        real(19247540382451367936.L))/real(654892818326187083801235.L);
+      _C4x[456] = ((real(14834857172558413824.L)-real(52043597293893451776.L)*
+        _n)*_n-real(2026056882363301888.L))/real(654892818326187083801235.L);
+      _C4x[457] = (real(46409594160052961280.L)*_n-
+        real(10885763249307910144.L))/real(654892818326187083801235.L);
+      _C4x[458] = -real(562949953421312.L)/real(591592428478940455105.L);
+      _C4x[459] = (_n*(real(13871086852301127680.L)*_n-
+        real(7692148163548807168.L))+real(2026056882363301888.L))/
+        real(75511750540755324128025.L);
+      _C4x[460] = (real(504403158265495552.L)*_n-real(68679894317400064.L))/
+        real(25170583513585108042675.L);
+      _C4x[461] = -real(1142225455491842048.L)/real(75511750540755324128025.L);
+      _C4x[462] = (real(274719577269600256.L)-real(1044835113549955072.L)*_n)/
+        real(11179661768371567468305.L);
+      _C4x[463] = -real(9007199254740992.L)/real(3726553922790522489435.L);
+      _C4x[464] = real(9007199254740992.L)/real(399032089736190248415.L);
+      break;
+    default:
+      STATIC_ASSERT(nC4_ == 24 || nC4_ == 27 || nC4_ == 30,
+                    "Bad value of nC4_");
+    }
+  }
+
+} // namespace GeographicLib
diff --git a/src/GeodesicLine.cpp b/src/GeodesicLine.cpp
index fb7d235..02775d6 100644
--- a/src/GeodesicLine.cpp
+++ b/src/GeodesicLine.cpp
@@ -2,7 +2,7 @@
  * \file GeodesicLine.cpp
  * \brief Implementation for GeographicLib::GeodesicLine class
  *
- * Copyright (c) Charles Karney (2009-2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  *
@@ -28,12 +28,6 @@
 
 #include <GeographicLib/GeodesicLine.hpp>
 
-#define GEOGRAPHICLIB_GEODESICLINE_CPP \
-  "$Id: d95fea8e73fd86fdc558e5b0397a97241cfe40c2 $"
-
-RCSID_DECL(GEOGRAPHICLIB_GEODESICLINE_CPP)
-RCSID_DECL(GEOGRAPHICLIB_GEODESICLINE_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -49,10 +43,9 @@ namespace GeographicLib {
       // Always allow latitude and azimuth
     , _caps(caps | LATITUDE | AZIMUTH)
   {
-    azi1 = Geodesic::AngNormalize(azi1);
     // Guard against underflow in salp0
-    azi1 = Geodesic::AngRound(azi1);
-    lon1 = Geodesic::AngNormalize(lon1);
+    azi1 = Geodesic::AngRound(Math::AngNormalize(azi1));
+    lon1 = Math::AngNormalize(lon1);
     _lat1 = lat1;
     _lon1 = lon1;
     _azi1 = azi1;
@@ -68,6 +61,7 @@ namespace GeographicLib {
     sbet1 = _f1 * sin(phi);
     cbet1 = abs(lat1) == 90 ? Geodesic::tiny_ : cos(phi);
     Geodesic::SinCosNorm(sbet1, cbet1);
+    _dn1 = sqrt(1 + g._ep2 * Math::sq(sbet1));
 
     // Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0),
     _salp0 = _salp1 * cbet1; // alp0 in [0, pi/2 - |bet1|]
@@ -86,7 +80,7 @@ namespace GeographicLib {
     _ssig1 = sbet1; _somg1 = _salp0 * sbet1;
     _csig1 = _comg1 = sbet1 != 0 || _calp1 != 0 ? cbet1 * _calp1 : 1;
     Geodesic::SinCosNorm(_ssig1, _csig1); // sig1 in (-pi, pi]
-    Geodesic::SinCosNorm(_somg1, _comg1);
+    // Geodesic::SinCosNorm(_somg1, _comg1); -- don't need to normalize!
 
     _k2 = Math::sq(_calp0) * g._ep2;
     real eps = _k2 / (2 * (1 + sqrt(1 + _k2)) + _k2);
@@ -119,7 +113,7 @@ namespace GeographicLib {
     }
 
     if (_caps & CAP_C4) {
-      g.C4f(_k2, _C4a);
+      g.C4f(eps, _C4a);
       // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0)
       _A4 = Math::sq(_a) * _calp0 * _salp0 * g._e2;
       _B41 = Geodesic::SinCosSeries(false, _ssig1, _csig1, _C4a, nC4_);
@@ -154,12 +148,43 @@ namespace GeographicLib {
         s = sin(tau12),
         c = cos(tau12);
       // tau2 = tau1 + tau12
-      B12 = - Geodesic::SinCosSeries(true, _stau1 * c + _ctau1 * s,
+      B12 = - Geodesic::SinCosSeries(true,
+                                     _stau1 * c + _ctau1 * s,
                                      _ctau1 * c - _stau1 * s,
                                      _C1pa, nC1p_);
       sig12 = tau12 - (B12 - _B11);
-      ssig12 = sin(sig12);
-      csig12 = cos(sig12);
+      ssig12 = sin(sig12); csig12 = cos(sig12);
+      if (abs(_f) > 0.01) {
+        // Reverted distance series is inaccurate for |f| > 1/100, so correct
+        // sig12 with 1 Newton iteration.  The following table shows the
+        // approximate maximum error for a = WGS_a() and various f relative to
+        // GeodesicExact.
+        //     erri = the error in the inverse solution (nm)
+        //     errd = the error in the direct solution (series only) (nm)
+        //     errda = the error in the direct solution (series + 1 Newton) (nm)
+        //
+        //       f     erri  errd errda
+        //     -1/5    12e6 1.2e9  69e6
+        //     -1/10  123e3  12e6 765e3
+        //     -1/20   1110 108e3  7155
+        //     -1/50  18.63 200.9 27.12
+        //     -1/100 18.63 23.78 23.37
+        //     -1/150 18.63 21.05 20.26
+        //      1/150 22.35 24.73 25.83
+        //      1/100 22.35 25.03 25.31
+        //      1/50  29.80 231.9 30.44
+        //      1/20   5376 146e3  10e3
+        //      1/10  829e3  22e6 1.5e6
+        //      1/5   157e6 3.8e9 280e6
+        real
+          ssig2 = _ssig1 * csig12 + _csig1 * ssig12,
+          csig2 = _csig1 * csig12 - _ssig1 * ssig12;
+        B12 = Geodesic::SinCosSeries(true, ssig2, csig2, _C1a, nC1_);
+        real serr = (1 + _A1m1) * (sig12 + (B12 - _B11)) - s12_a12 / _b;
+        sig12 = sig12 - serr / sqrt(1 + _k2 * Math::sq(ssig2));
+        ssig12 = sin(sig12); csig12 = cos(sig12);
+        // Update B12 below
+      }
     }
 
     real omg12, lam12, lon12;
@@ -167,8 +192,9 @@ namespace GeographicLib {
     // sig2 = sig1 + sig12
     ssig2 = _ssig1 * csig12 + _csig1 * ssig12;
     csig2 = _csig1 * csig12 - _ssig1 * ssig12;
+    real dn2 = sqrt(1 + _k2 * Math::sq(ssig2));
     if (outmask & (DISTANCE | REDUCEDLENGTH | GEODESICSCALE)) {
-      if (arcmode)
+      if (arcmode || abs(_f) > 0.01)
         B12 = Geodesic::SinCosSeries(true, ssig2, csig2, _C1a, nC1_);
       AB1 = (1 + _A1m1) * (B12 - _B11);
     }
@@ -195,10 +221,10 @@ namespace GeographicLib {
         ( sig12 + (Geodesic::SinCosSeries(true, ssig2, csig2, _C3a, nC3_-1)
                    - _B31));
       lon12 = lam12 / Math::degree<real>();
-      // Can't use AngNormalize because longitude might have wrapped multiple
+      // Use Math::AngNormalize2 because longitude might have wrapped multiple
       // times.
-      lon12 = lon12 - 360 * floor(lon12/360 + real(0.5));
-      lon2 = Geodesic::AngNormalize(_lon1 + lon12);
+      lon12 = Math::AngNormalize2(lon12);
+      lon2 = Math::AngNormalize(_lon1 + lon12);
     }
 
     if (outmask & LATITUDE)
@@ -210,23 +236,18 @@ namespace GeographicLib {
 
     if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) {
       real
-        ssig1sq = Math::sq(_ssig1),
-        ssig2sq = Math::sq( ssig2),
-        w1 = sqrt(1 + _k2 * ssig1sq),
-        w2 = sqrt(1 + _k2 * ssig2sq),
         B22 = Geodesic::SinCosSeries(true, ssig2, csig2, _C2a, nC2_),
         AB2 = (1 + _A2m1) * (B22 - _B21),
         J12 = (_A1m1 - _A2m1) * sig12 + (AB1 - AB2);
       if (outmask & REDUCEDLENGTH)
         // Add parens around (_csig1 * ssig2) and (_ssig1 * csig2) to ensure
         // accurate cancellation in the case of coincident points.
-        m12 = _b * ((w2 * (_csig1 * ssig2) - w1 * (_ssig1 * csig2))
-                  - _csig1 * csig2 * J12);
+        m12 = _b * ((dn2 * (_csig1 * ssig2) - _dn1 * (_ssig1 * csig2))
+                    - _csig1 * csig2 * J12);
       if (outmask & GEODESICSCALE) {
-        M12 = csig12 + (_k2 * (ssig2sq - ssig1sq) *  ssig2 / (w1 + w2)
-                        - csig2 * J12) * _ssig1 / w1;
-        M21 = csig12 - (_k2 * (ssig2sq - ssig1sq) * _ssig1 / (w1 + w2)
-                        - _csig1 * J12) * ssig2 / w2;
+        real t = _k2 * (ssig2 - _ssig1) * (ssig2 + _ssig1) / (_dn1 + dn2);
+        M12 = csig12 + (t *  ssig2 -  csig2 * J12) * _ssig1 / _dn1;
+        M21 = csig12 - (t * _ssig1 - _csig1 * J12) *  ssig2 /  dn2;
       }
     }
 
diff --git a/src/GeodesicLineExact.cpp b/src/GeodesicLineExact.cpp
new file mode 100644
index 0000000..9dde3b8
--- /dev/null
+++ b/src/GeodesicLineExact.cpp
@@ -0,0 +1,252 @@
+/**
+ * \file GeodesicLineExact.cpp
+ * \brief Implementation for GeographicLib::GeodesicLineExact class
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ *
+ * This is a reformulation of the geodesic problem.  The notation is as
+ * follows:
+ * - at a general point (no suffix or 1 or 2 as suffix)
+ *   - phi = latitude
+ *   - beta = latitude on auxiliary sphere
+ *   - omega = longitude on auxiliary sphere
+ *   - lambda = longitude
+ *   - alpha = azimuth of great circle
+ *   - sigma = arc length along great circle
+ *   - s = distance
+ *   - tau = scaled distance (= sigma at multiples of pi/2)
+ * - at northwards equator crossing
+ *   - beta = phi = 0
+ *   - omega = lambda = 0
+ *   - alpha = alpha0
+ *   - sigma = s = 0
+ * - a 12 suffix means a difference, e.g., s12 = s2 - s1.
+ * - s and c prefixes mean sin and cos
+ **********************************************************************/
+
+#include <GeographicLib/GeodesicLineExact.hpp>
+
+namespace GeographicLib {
+
+  using namespace std;
+
+  GeodesicLineExact::GeodesicLineExact(const GeodesicExact& g,
+                                       real lat1, real lon1, real azi1,
+                                       unsigned caps) throw()
+    : _a(g._a)
+    , _f(g._f)
+    , _b(g._b)
+    , _c2(g._c2)
+    , _f1(g._f1)
+    , _e2(g._e2)
+    , _E(0, 0)
+      // Always allow latitude and azimuth
+    , _caps(caps | LATITUDE | AZIMUTH)
+  {
+    azi1 = GeodesicExact::AngRound(Math::AngNormalize(azi1));
+    lon1 = Math::AngNormalize(lon1);
+    _lat1 = lat1;
+    _lon1 = lon1;
+    _azi1 = azi1;
+    // alp1 is in [0, pi]
+    real alp1 = azi1 * Math::degree<real>();
+    // Enforce sin(pi) == 0 and cos(pi/2) == 0.  Better to face the ensuing
+    // problems directly than to skirt them.
+    _salp1 =     azi1  == -180 ? 0 : sin(alp1);
+    _calp1 = abs(azi1) ==   90 ? 0 : cos(alp1);
+    real cbet1, sbet1, phi;
+    phi = lat1 * Math::degree<real>();
+    // Ensure cbet1 = +epsilon at poles
+    sbet1 = _f1 * sin(phi);
+    cbet1 = abs(lat1) == 90 ? GeodesicExact::tiny_ : cos(phi);
+    GeodesicExact::SinCosNorm(sbet1, cbet1);
+    _dn1 = (_f >= 0 ? sqrt(1 + g._ep2 * Math::sq(sbet1)) :
+            sqrt(1 - _e2 * Math::sq(cbet1)) / _f1);
+
+    // Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0),
+    _salp0 = _salp1 * cbet1; // alp0 in [0, pi/2 - |bet1|]
+    // Alt: calp0 = hypot(sbet1, calp1 * cbet1).  The following
+    // is slightly better (consider the case salp1 = 0).
+    _calp0 = Math::hypot(_calp1, _salp1 * sbet1);
+    // Evaluate sig with tan(bet1) = tan(sig1) * cos(alp1).
+    // sig = 0 is nearest northward crossing of equator.
+    // With bet1 = 0, alp1 = pi/2, we have sig1 = 0 (equatorial line).
+    // With bet1 =  pi/2, alp1 = -pi, sig1 =  pi/2
+    // With bet1 = -pi/2, alp1 =  0 , sig1 = -pi/2
+    // Evaluate omg1 with tan(omg1) = sin(alp0) * tan(sig1).
+    // With alp0 in (0, pi/2], quadrants for sig and omg coincide.
+    // No atan2(0,0) ambiguity at poles since cbet1 = +epsilon.
+    // With alp0 = 0, omg1 = 0 for alp1 = 0, omg1 = pi for alp1 = pi.
+    _ssig1 = sbet1; _somg1 = _salp0 * sbet1;
+    _csig1 = _comg1 = sbet1 != 0 || _calp1 != 0 ? cbet1 * _calp1 : 1;
+    // Without normalization we have schi1 = somg1.
+    _cchi1 = _f1 * _dn1 * _comg1;
+    GeodesicExact::SinCosNorm(_ssig1, _csig1); // sig1 in (-pi, pi]
+    // GeodesicExact::SinCosNorm(_somg1, _comg1); -- don't need to normalize!
+    // GeodesicExact::SinCosNorm(_schi1, _cchi1); -- don't need to normalize!
+
+    _k2 = Math::sq(_calp0) * g._ep2;
+    _E.Reset(-_k2, -g._ep2, 1 + _k2, 1 + g._ep2);
+
+    if (_caps & CAP_E) {
+      _E0 = _E.E() / (Math::pi<real>() / 2);
+      _E1 = _E.deltaE(_ssig1, _csig1, _dn1);
+      real s = sin(_E1), c = cos(_E1);
+      // tau1 = sig1 + B11
+      _stau1 = _ssig1 * c + _csig1 * s;
+      _ctau1 = _csig1 * c - _ssig1 * s;
+      // Not necessary because Einv inverts E
+      //    _E1 = -_E.deltaEinv(_stau1, _ctau1);
+    }
+
+    if (_caps & CAP_D) {
+      _D0 = _E.D() / (Math::pi<real>() / 2);
+      _D1 = _E.deltaD(_ssig1, _csig1, _dn1);
+    }
+
+    if (_caps & CAP_H) {
+      _H0 = _E.H() / (Math::pi<real>() / 2);
+      _H1 = _E.deltaH(_ssig1, _csig1, _dn1);
+    }
+
+    if (_caps & CAP_C4) {
+      real eps = _k2 / (2 * (1 + sqrt(1 + _k2)) + _k2);
+      g.C4f(eps, _C4a);
+      // Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0)
+      _A4 = Math::sq(_a) * _calp0 * _salp0 * _e2;
+      _B41 = GeodesicExact::CosSeries(_ssig1, _csig1, _C4a, nC4_);
+    }
+  }
+
+  Math::real GeodesicLineExact::GenPosition(bool arcmode, real s12_a12,
+                                            unsigned outmask,
+                                            real& lat2, real& lon2, real& azi2,
+                                            real& s12, real& m12,
+                                            real& M12, real& M21,
+                                            real& S12)
+  const throw() {
+    outmask &= _caps & OUT_ALL;
+    if (!( Init() && (arcmode || (_caps & DISTANCE_IN & OUT_ALL)) ))
+      // Uninitialized or impossible distance calculation requested
+      return Math::NaN<real>();
+
+    // Avoid warning about uninitialized B12.
+    real sig12, ssig12, csig12, E2 = 0, AB1 = 0;
+    if (arcmode) {
+      // Interpret s12_a12 as spherical arc length
+      sig12 = s12_a12 * Math::degree<real>();
+      real s12a = abs(s12_a12);
+      s12a -= 180 * floor(s12a / 180);
+      ssig12 = s12a ==  0 ? 0 : sin(sig12);
+      csig12 = s12a == 90 ? 0 : cos(sig12);
+    } else {
+      // Interpret s12_a12 as distance
+      real
+        tau12 = s12_a12 / (_b * _E0),
+        s = sin(tau12),
+        c = cos(tau12);
+      // tau2 = tau1 + tau12
+      E2 = - _E.deltaEinv(_stau1 * c + _ctau1 * s, _ctau1 * c - _stau1 * s);
+      sig12 = tau12 - (E2 - _E1);
+      ssig12 = sin(sig12);
+      csig12 = cos(sig12);
+    }
+
+    real lam12, lon12;
+    real ssig2, csig2, sbet2, cbet2, salp2, calp2;
+    // sig2 = sig1 + sig12
+    ssig2 = _ssig1 * csig12 + _csig1 * ssig12;
+    csig2 = _csig1 * csig12 - _ssig1 * ssig12;
+    real dn2 = _E.Delta(ssig2, csig2);
+    if (outmask & (DISTANCE | REDUCEDLENGTH | GEODESICSCALE)) {
+      if (arcmode) {
+        E2 = _E.deltaE(ssig2, csig2, dn2);
+      }
+      AB1 = _E0 * (E2 - _E1);
+    }
+    // sin(bet2) = cos(alp0) * sin(sig2)
+    sbet2 = _calp0 * ssig2;
+    // Alt: cbet2 = hypot(csig2, salp0 * ssig2);
+    cbet2 = Math::hypot(_salp0, _calp0 * csig2);
+    if (cbet2 == 0)
+      // I.e., salp0 = 0, csig2 = 0.  Break the degeneracy in this case
+      cbet2 = csig2 = GeodesicExact::tiny_;
+    // tan(alp0) = cos(sig2)*tan(alp2)
+    salp2 = _salp0; calp2 = _calp0 * csig2; // No need to normalize
+
+    if (outmask & DISTANCE)
+      s12 = arcmode ? _b * (_E0 * sig12 + AB1) : s12_a12;
+
+    if (outmask & LONGITUDE) {
+      real somg2 = _salp0 * ssig2, comg2 = csig2;  // No need to normalize
+      // Without normalization we have schi2 = somg2.
+      real cchi2 =  _f1 * dn2 *  comg2;
+      lam12 = atan2(somg2 * _cchi1 - cchi2 * _somg1,
+                    cchi2 * _cchi1 + somg2 * _somg1) -
+        _e2/_f1 * _salp0 * _H0 * (sig12 + _E.deltaH(ssig2, csig2, dn2) - _H1 );
+      lon12 = lam12 / Math::degree<real>();
+      // Use Math::AngNormalize2 because longitude might have wrapped multiple
+      // times.
+      lon12 = Math::AngNormalize2(lon12);
+      lon2 = Math::AngNormalize(_lon1 + lon12);
+    }
+
+    if (outmask & LATITUDE)
+      lat2 = atan2(sbet2, _f1 * cbet2) / Math::degree<real>();
+
+    if (outmask & AZIMUTH)
+      // minus signs give range [-180, 180). 0- converts -0 to +0.
+      azi2 = 0 - atan2(-salp2, calp2) / Math::degree<real>();
+
+    if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) {
+      real J12 = _k2 * _D0 * (sig12 + _E.deltaD(ssig2, csig2, dn2) - _D1);
+      if (outmask & REDUCEDLENGTH)
+        // Add parens around (_csig1 * ssig2) and (_ssig1 * csig2) to ensure
+        // accurate cancellation in the case of coincident points.
+        m12 = _b * ((dn2 * (_csig1 * ssig2) - _dn1 * (_ssig1 * csig2))
+                  - _csig1 * csig2 * J12);
+      if (outmask & GEODESICSCALE) {
+        real t = _k2 * (ssig2 - _ssig1) * (ssig2 + _ssig1) / (_dn1 + dn2);
+        M12 = csig12 + (t *  ssig2 -  csig2 * J12) * _ssig1 / _dn1;
+        M21 = csig12 - (t * _ssig1 - _csig1 * J12) *  ssig2 /  dn2;
+      }
+    }
+
+    if (outmask & AREA) {
+      real
+        B42 = GeodesicExact::CosSeries(ssig2, csig2, _C4a, nC4_);
+      real salp12, calp12;
+      if (_calp0 == 0 || _salp0 == 0) {
+        // alp12 = alp2 - alp1, used in atan2 so no need to normalized
+        salp12 = salp2 * _calp1 - calp2 * _salp1;
+        calp12 = calp2 * _calp1 + salp2 * _salp1;
+        // The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+        // salp12 = -0 and alp12 = -180.  However this depends on the sign being
+        // attached to 0 correctly.  The following ensures the correct behavior.
+        if (salp12 == 0 && calp12 < 0) {
+          salp12 = GeodesicExact::tiny_ * _calp1;
+          calp12 = -1;
+        }
+      } else {
+        // tan(alp) = tan(alp0) * sec(sig)
+        // tan(alp2-alp1) = (tan(alp2) -tan(alp1)) / (tan(alp2)*tan(alp1)+1)
+        // = calp0 * salp0 * (csig1-csig2) / (salp0^2 + calp0^2 * csig1*csig2)
+        // If csig12 > 0, write
+        //   csig1 - csig2 = ssig12 * (csig1 * ssig12 / (1 + csig12) + ssig1)
+        // else
+        //   csig1 - csig2 = csig1 * (1 - csig12) + ssig12 * ssig1
+        // No need to normalize
+        salp12 = _calp0 * _salp0 *
+          (csig12 <= 0 ? _csig1 * (1 - csig12) + ssig12 * _ssig1 :
+           ssig12 * (_csig1 * ssig12 / (1 + csig12) + _ssig1));
+        calp12 = Math::sq(_salp0) + Math::sq(_calp0) * _csig1 * csig2;
+      }
+      S12 = _c2 * atan2(salp12, calp12) + _A4 * (B42 - _B41);
+    }
+
+    return arcmode ? s12_a12 : sig12 / Math::degree<real>();
+  }
+
+} // namespace GeographicLib
diff --git a/src/Geographic.pro b/src/Geographic.pro
index 6136a7f..559a8e3 100644
--- a/src/Geographic.pro
+++ b/src/Geographic.pro
@@ -1,5 +1,3 @@
-# $Id: fb1395afc191fe67ced4b6e7227b5afaa2559a1c $
-
 VERSION = 9.2.4
 
 TEMPLATE = lib
@@ -12,11 +10,13 @@ SOURCES += AzimuthalEquidistant.cpp
 SOURCES += CassiniSoldner.cpp
 SOURCES += CircularEngine.cpp
 SOURCES += DMS.cpp
+SOURCES += Ellipsoid.cpp
 SOURCES += EllipticFunction.cpp
 SOURCES += GeoCoords.cpp
 SOURCES += Geocentric.cpp
 SOURCES += Geodesic.cpp
 SOURCES += GeodesicLine.cpp
+SOURCES += Geohash.cpp
 SOURCES += Geoid.cpp
 SOURCES += Gnomonic.cpp
 SOURCES += GravityCircle.cpp
@@ -43,11 +43,13 @@ HEADERS += $$INCLUDEDIR/CassiniSoldner.hpp
 HEADERS += $$INCLUDEDIR/CircularEngine.hpp
 HEADERS += $$INCLUDEDIR/Constants.hpp
 HEADERS += $$INCLUDEDIR/DMS.hpp
+HEADERS += $$INCLUDEDIR/Ellipsoid.hpp
 HEADERS += $$INCLUDEDIR/EllipticFunction.hpp
 HEADERS += $$INCLUDEDIR/GeoCoords.hpp
 HEADERS += $$INCLUDEDIR/Geocentric.hpp
 HEADERS += $$INCLUDEDIR/Geodesic.hpp
 HEADERS += $$INCLUDEDIR/GeodesicLine.hpp
+HEADERS += $$INCLUDEDIR/Geohash.hpp
 HEADERS += $$INCLUDEDIR/Geoid.hpp
 HEADERS += $$INCLUDEDIR/Gnomonic.hpp
 HEADERS += $$INCLUDEDIR/GravityCircle.hpp
diff --git a/src/Geohash.cpp b/src/Geohash.cpp
new file mode 100644
index 0000000..8716d12
--- /dev/null
+++ b/src/Geohash.cpp
@@ -0,0 +1,99 @@
+/**
+ * \file Geohash.cpp
+ * \brief Implementation for GeographicLib::Geohash class
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#include <GeographicLib/Geohash.hpp>
+#include <GeographicLib/Utility.hpp>
+
+namespace GeographicLib {
+
+  using namespace std;
+
+  const int Geohash::decprec_[] = {-2, -1, 0, 0, 1, 2, 3, 3, 4, 5,
+                                   6, 6, 7, 8, 9, 9, 10, 11, 12};
+  const Math::real Geohash::loneps_ = 180 * std::pow(0.5, 45);
+  const Math::real Geohash::lateps_ = 90 * std::pow(0.5, 45);
+  const Math::real Geohash::shift_ = std::pow(2.0, 45);
+  const string Geohash::lcdigits_ = "0123456789bcdefghjkmnpqrstuvwxyz";
+  const string Geohash::ucdigits_ = "0123456789BCDEFGHJKMNPQRSTUVWXYZ";
+
+  void Geohash::Forward(real lat, real lon, int len, std::string& geohash) {
+    if (abs(lat) > 90)
+      throw GeographicErr("Latitude " + Utility::str(lat)
+                          + "d not in [-90d, 90d]");
+    if (lon < -540 || lon >= 540)
+      throw GeographicErr("Longitude " + Utility::str(lon)
+                          + "d not in [-540d, 540d)");
+    if (Math::isnan(lat) || Math::isnan(lon)) {
+      geohash = "nan";
+      return;
+    }
+    if (lat == 90) lat -= lateps_ / 2;
+    lon = Math::AngNormalize(lon); // lon in [-180,180)
+    // lon/loneps_ in [-2^45,2^45); lon/eps + shift_ in [0,2^46)
+    // similarly for lat
+    len = max(0, min(int(maxlen_), len));
+    unsigned long long
+      ulon = (unsigned long long)(floor(lon/loneps_) + shift_),
+      ulat = (unsigned long long)(floor(lat/lateps_) + shift_);
+    char geohash1[maxlen_];
+    unsigned byte = 0;
+    for (unsigned i = 0; i < 5 * unsigned(len);) {
+      if ((i & 1) == 0) {
+        byte = (byte << 1) + unsigned((ulon & mask_) != 0);
+        ulon <<= 1;
+      } else {
+        byte = (byte << 1) + unsigned((ulat & mask_) != 0);
+        ulat <<= 1;
+      }
+      ++i;
+      if (i % 5 == 0) {
+        geohash1[(i/5)-1] = lcdigits_[byte];
+        byte = 0;
+      }
+    }
+    geohash.resize(len);
+    copy(geohash1, geohash1 + len, geohash.begin());
+  }
+
+  void Geohash::Reverse(const std::string& geohash, real& lat, real& lon,
+                        int& len, bool centerp) {
+    len = min(int(maxlen_), int(geohash.length()));
+    if (len >= 3 &&
+        toupper(geohash[0]) == 'N' &&
+        toupper(geohash[1]) == 'A' &&
+        toupper(geohash[2]) == 'N') {
+      lat = lon = Math::NaN<real>();
+      return;
+    }
+    unsigned long long ulon = 0, ulat = 0;
+    for (unsigned k = 0, j = 0; k < unsigned(len); ++k) {
+      int byte = Utility::lookup(ucdigits_, geohash[k]);
+      if (byte < 0)
+        throw GeographicErr("Illegal character in geohash " + geohash);
+      for (unsigned i = 0, m = 16; i < 5; ++i, m >>= 1) {
+        if (j == 0)
+          ulon = (ulon << 1) + unsigned((byte & m) != 0);
+        else
+          ulat = (ulat << 1) + unsigned((byte & m) != 0);
+        j ^= 1;
+      }
+    }
+    ulon <<= 1; ulat <<= 1;
+    if (centerp) {
+      ulon += 1;
+      ulat += 1;
+    }
+    int s = 5 * (maxlen_ - len);
+    ulon <<=     (s / 2);
+    ulat <<= s - (s / 2);
+    lon = ulon * loneps_ - 180;
+    lat = ulat * lateps_ - 90;
+  }
+
+} // namespace GeographicLib
diff --git a/src/Geoid.cpp b/src/Geoid.cpp
index 7555dc4..2d2c249 100644
--- a/src/Geoid.cpp
+++ b/src/Geoid.cpp
@@ -8,19 +8,11 @@
  **********************************************************************/
 
 #include <GeographicLib/Geoid.hpp>
-#include <sstream>
 #include <cstdlib>
-#include <algorithm>
 #include <GeographicLib/Utility.hpp>
 
-#define GEOGRAPHICLIB_GEOID_CPP \
-  "$Id: 5c3c23dd877485af9c9e298ddb28c5aac12b5e6a $"
-
-RCSID_DECL(GEOGRAPHICLIB_GEOID_CPP)
-RCSID_DECL(GEOGRAPHICLIB_GEOID_HPP)
-
 #if !defined(GEOGRAPHICLIB_DATA)
-#  if defined(_MSC_VER)
+#  if defined(_WIN32)
 #    define GEOGRAPHICLIB_DATA \
   "C:/Documents and Settings/All Users/Application Data/GeographicLib"
 #  else
@@ -34,7 +26,7 @@ RCSID_DECL(GEOGRAPHICLIB_GEOID_HPP)
 
 #if defined(_MSC_VER)
 // Squelch warnings about unsafe use of getenv
-#pragma warning (disable: 4996)
+#  pragma warning (disable: 4996)
 #endif
 
 namespace GeographicLib {
@@ -316,6 +308,7 @@ namespace GeographicLib {
       if (gradp) gradn = grade = Math::NaN<real>();
       return Math::NaN<real>();
     }
+    lon = Math::AngNormalize(lon);
     real
       fx =  lon * _rlonres,
       fy = -lat * _rlatres;
@@ -452,10 +445,8 @@ namespace GeographicLib {
       CacheClear();
       return;
     }
-    if (west >= 180)
-      west -= 360;              // west in [-180, 180)
-    if (east >= 180)
-      east -= 360;
+    west = Math::AngNormalize(west); // west in [-180, 180)
+    east = Math::AngNormalize(east);
     if (east <= west)
       east += 360;              // east - west in (0, 360]
     int
diff --git a/src/Gnomonic.cpp b/src/Gnomonic.cpp
index 8b5401d..762731b 100644
--- a/src/Gnomonic.cpp
+++ b/src/Gnomonic.cpp
@@ -2,18 +2,17 @@
  * \file Gnomonic.cpp
  * \brief Implementation for GeographicLib::Gnomonic class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #include <GeographicLib/Gnomonic.hpp>
 
-#define GEOGRAPHICLIB_GNOMONIC_CPP \
-  "$Id: 1abf2f2ebdc8a805d0d205051120809f0c0e6071 $"
-
-RCSID_DECL(GEOGRAPHICLIB_GNOMONIC_CPP)
-RCSID_DECL(GEOGRAPHICLIB_GNOMONIC_HPP)
+#if defined(_MSC_VER)
+// Squelch warnings about potentially uninitialized local variables
+#  pragma warning (disable: 4701)
+#endif
 
 namespace GeographicLib {
 
@@ -67,6 +66,7 @@ namespace GeographicLib {
       // else solve 1/rho(s) = 1/rho with d(1/rho(s))/ds = -1/m^2
       real ds = little ? (m/M - rho) * M * M : (rho - M/m) * m * m;
       s -= ds;
+      // Reversed test to allow escape with NaNs
       if (!(abs(ds) >= eps_ * _a))
         ++trip;
     }
diff --git a/src/GravityCircle.cpp b/src/GravityCircle.cpp
index c5f530a..ddc5581 100644
--- a/src/GravityCircle.cpp
+++ b/src/GravityCircle.cpp
@@ -12,14 +12,6 @@
 #include <sstream>
 #include <GeographicLib/Geocentric.hpp>
 
-#define GEOGRAPHICLIB_GRAVITYCIRCLE_CPP \
-  "$Id: 94c2bce8fa9f379b5e3d0e176c89b4989762ef3a $"
-
-RCSID_DECL(GEOGRAPHICLIB_GRAVITYCIRCLE_CPP)
-RCSID_DECL(GEOGRAPHICLIB_GRAVITYCIRCLE_HPP)
-
-#define GRAVITY_DEFAULT_PATH "/home/ckarney/geographiclib/gravity"
-
 namespace GeographicLib {
 
   using namespace std;
@@ -78,7 +70,7 @@ namespace GeographicLib {
 
   Math::real GravityCircle::W(real clam, real slam,
                               real& gX, real& gY, real& gZ) const throw() {
-    real Wres = V(clam, slam, gX, gY, gZ) + _frot * _P / 2;
+    real Wres = V(clam, slam, gX, gY, gZ) + _frot * _Px / 2;
     gX += _frot * clam;
     gY += _frot * slam;
     return Wres;
@@ -126,8 +118,8 @@ namespace GeographicLib {
       deltaZ *= f;
       if (correct) {
         real r3 = _GMmodel * _dzonal0 * _invR * _invR * _invR;
-        deltaX += _P * clam * r3;
-        deltaY += _P * slam * r3;
+        deltaX += _Px * clam * r3;
+        deltaY += _Px * slam * r3;
         deltaZ += _Z * r3;
       }
     }
diff --git a/src/GravityModel.cpp b/src/GravityModel.cpp
index d90130c..9081b5e 100644
--- a/src/GravityModel.cpp
+++ b/src/GravityModel.cpp
@@ -2,7 +2,7 @@
  * \file GravityModel.cpp
  * \brief Implementation for GeographicLib::GravityModel class
  *
- * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2011-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
@@ -12,14 +12,9 @@
 #include <GeographicLib/SphericalEngine.hpp>
 #include <GeographicLib/GravityCircle.hpp>
 #include <GeographicLib/Utility.hpp>
-#define GEOGRAPHICLIB_GRAVITYMODEL_CPP \
-  "$Id: 1897d0d53c7339ecdf20b1348637340e9f687f30 $"
-
-RCSID_DECL(GEOGRAPHICLIB_GRAVITYMODEL_CPP)
-RCSID_DECL(GEOGRAPHICLIB_GRAVITYMODEL_HPP)
 
 #if !defined(GEOGRAPHICLIB_DATA)
-#  if defined(_MSC_VER)
+#  if defined(_WIN32)
 #    define GEOGRAPHICLIB_DATA \
   "C:/Documents and Settings/All Users/Application Data/GeographicLib"
 #  else
@@ -33,7 +28,7 @@ RCSID_DECL(GEOGRAPHICLIB_GRAVITYMODEL_HPP)
 
 #if defined(_MSC_VER)
 // Squelch warnings about unsafe use of getenv
-#pragma warning (disable: 4996)
+#  pragma warning (disable: 4996)
 #endif
 
 namespace GeographicLib {
@@ -67,11 +62,11 @@ namespace GeographicLib {
       if (_id != string(id))
         throw GeographicErr("ID mismatch: " + _id + " vs " + id);
       int N, M;
-      SphericalEngine::coeff::readcoeffs(coeffstr, N, M, _C, _S);
-      if (!(M < 0 || _C[0] == 0))
+      SphericalEngine::coeff::readcoeffs(coeffstr, N, M, _Cx, _Sx);
+      if (!(M < 0 || _Cx[0] == 0))
         throw GeographicErr("A degree 0 term should be zero");
-      _C[0] = 1;                // Include the 1/r term in the sum
-      _gravitational = SphericalHarmonic(_C, _S, N, N, M, _amodel, _norm);
+      _Cx[0] = 1;               // Include the 1/r term in the sum
+      _gravitational = SphericalHarmonic(_Cx, _Sx, N, N, M, _amodel, _norm);
       SphericalEngine::coeff::readcoeffs(coeffstr, N, M, _CC, _CS);
       if (N < 0) {
         N = M = 0;
@@ -101,7 +96,7 @@ namespace GeographicLib {
       // goes out to n = 18.
       mult *= amult;
       real
-        r = _C[n],                                         // the model term
+        r = _Cx[n],                                        // the model term
         s = - mult * _earth.Jn(n) / sqrt(real(2 * n + 1)), // the normal term
         t = r - s;                                         // the difference
       if (t == r)               // the normal term is negligible
@@ -110,7 +105,7 @@ namespace GeographicLib {
       _zonal.push_back(s);
     }
     int nmx1 = int(_zonal.size()) - 1;
-    _disturbing = SphericalHarmonic1(_C, _S,
+    _disturbing = SphericalHarmonic1(_Cx, _Sx,
                                      _gravitational.Coefficients().N(),
                                      nmx, _gravitational.Coefficients().mmx(),
                                      _zonal,
diff --git a/src/LambertConformalConic.cpp b/src/LambertConformalConic.cpp
index 4d5af6d..5c666d7 100644
--- a/src/LambertConformalConic.cpp
+++ b/src/LambertConformalConic.cpp
@@ -2,19 +2,13 @@
  * \file LambertConformalConic.cpp
  * \brief Implementation for GeographicLib::LambertConformalConic class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #include <GeographicLib/LambertConformalConic.hpp>
 
-#define GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP \
-  "$Id: da8f6ce89092006a26946d671edca1a7836e7ce6 $"
-
-RCSID_DECL(GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_CPP)
-RCSID_DECL(GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -43,7 +37,7 @@ namespace GeographicLib {
     if (!(Math::isfinite(k0) && k0 > 0))
       throw GeographicErr("Scale is not positive");
     if (!(abs(stdlat) <= 90))
-      throw GeographicErr("Standard latitude not in [-90, 90]");
+      throw GeographicErr("Standard latitude not in [-90d, 90d]");
     real
       phi = stdlat * Math::degree<real>(),
       sphi = sin(phi),
@@ -68,9 +62,9 @@ namespace GeographicLib {
     if (!(Math::isfinite(k1) && k1 > 0))
       throw GeographicErr("Scale is not positive");
     if (!(abs(stdlat1) <= 90))
-      throw GeographicErr("Standard latitude 1 not in [-90, 90]");
+      throw GeographicErr("Standard latitude 1 not in [-90d, 90d]");
     if (!(abs(stdlat2) <= 90))
-      throw GeographicErr("Standard latitude 2 not in [-90, 90]");
+      throw GeographicErr("Standard latitude 2 not in [-90d, 90d]");
     real
       phi1 = stdlat1 * Math::degree<real>(),
       phi2 = stdlat2 * Math::degree<real>();
@@ -96,9 +90,9 @@ namespace GeographicLib {
     if (!(Math::isfinite(k1) && k1 > 0))
       throw GeographicErr("Scale is not positive");
     if (!(coslat1 >= 0))
-      throw GeographicErr("Standard latitude 1 not in [-90, 90]");
+      throw GeographicErr("Standard latitude 1 not in [-90d, 90d]");
     if (!(coslat2 >= 0))
-      throw GeographicErr("Standard latitude 2 not in [-90, 90]");
+      throw GeographicErr("Standard latitude 2 not in [-90d, 90d]");
     if (!(abs(sinlat1) <= 1 && coslat1 <= 1) || (coslat1 == 0 && sinlat1 == 0))
       throw GeographicErr("Bad sine/cosine of standard latitude 1");
     if (!(abs(sinlat2) <= 1 && coslat2 <= 1) || (coslat2 == 0 && sinlat2 == 0))
@@ -314,6 +308,21 @@ namespace GeographicLib {
       * (tchi1 >= 0 ? scchi1 + tchi1 : 1 / (scchi1 - tchi1)) /
       (_scchi0 + _tchi0);
     _nrho0 = polar ? 0 : _a * _k0 / _scbet0;
+    {
+      // Figure _drhomax using code at beginning of Forward with lat = -90
+      real
+        sphi = -1, cphi =  epsx_,
+        tphi = sphi/cphi,
+        scphi = 1/cphi, shxi = sinh(eatanhe(sphi)),
+        tchi = hyp(shxi) * tphi - shxi * scphi, scchi = hyp(tchi),
+        psi = Math::asinh(tchi),
+        dpsi = Dasinh(tchi, _tchi0, scchi, _scchi0) * (tchi - _tchi0);
+      _drhomax = - _scale * (2 * _nc < 1 && dpsi != 0 ?
+                             (exp(Math::sq(_nc)/(1 + _n) * psi ) *
+                              (tchi > 0 ? 1/(scchi + tchi) : (scchi - tchi))
+                              - (_t0nm1 + 1))/(-_n) :
+                             Dexp(-_n * psi, -_n * _psi0) * dpsi);
+    }
   }
 
   const LambertConformalConic
@@ -324,13 +333,7 @@ namespace GeographicLib {
   void LambertConformalConic::Forward(real lon0, real lat, real lon,
                                       real& x, real& y, real& gamma, real& k)
     const throw() {
-    if (lon - lon0 >= 180)
-      lon -= lon0 + 360;
-    else if (lon - lon0 < -180)
-      lon -= lon0 - 360;
-    else
-      lon -= lon0;
-    lat *= _sign;
+    lon = Math::AngDiff(Math::AngNormalize(lon0), Math::AngNormalize(lon));
     // From Snyder, we have
     //
     // theta = n * lambda
@@ -343,9 +346,9 @@ namespace GeographicLib {
     // and drho is evaluated with divided differences
     real
       lam = lon * Math::degree<real>(),
-      phi = lat * Math::degree<real>(),
+      phi = _sign * lat * Math::degree<real>(),
       sphi = sin(phi), cphi = abs(lat) != 90 ? cos(phi) : epsx_,
-      tphi = sphi/cphi, tbet = _fm * tphi, scbet = hyp(tbet),
+      tphi = sphi/cphi, scbet = hyp(_fm * tphi),
       scphi = 1/cphi, shxi = sinh(eatanhe(sphi)),
       tchi = hyp(shxi) * tphi - shxi * scphi, scchi = hyp(tchi),
       psi = Math::asinh(tchi),
@@ -386,9 +389,17 @@ namespace GeographicLib {
     // dpsi = - Dlog1p(t^n-1, t0^n-1) * drho / scale
     y *= _sign;
     real
-      nx = _n * x, ny = _n * y, y1 = _nrho0 - ny,
+      // Guard against 0 * inf in computation of ny
+      nx = _n * x, ny = _n ? _n * y : 0, y1 = _nrho0 - ny,
       den = Math::hypot(nx, y1) + _nrho0, // 0 implies origin with polar aspect
-      drho = den != 0 ? (x*nx - 2*y*_nrho0 + y*ny) / den : 0,
+      // isfinite test is to avoid inf/inf
+      drho = ((den != 0 && Math::isfinite(den))
+              ? (x*nx + y * (ny - 2*_nrho0)) / den
+              : den);
+    drho = min(drho, _drhomax);
+    if (_n == 0)
+      drho = max(drho, -_drhomax);
+    real
       tnm1 = _t0nm1 + _n * drho/_scale,
       dpsi = (den == 0 ? 0 :
               (tnm1 + 1 != 0 ? - Dlog1p(tnm1, _t0nm1) * drho / _scale :
@@ -439,13 +450,7 @@ namespace GeographicLib {
       lam = _n != 0 ? gamma / _n : x / y1;
     lat = phi / Math::degree<real>();
     lon = lam / Math::degree<real>();
-    // Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)
-    if (lon + lon0 >= 180)
-      lon += lon0 - 360;
-    else if (lon + lon0 < -180)
-      lon += lon0 + 360;
-    else
-      lon += lon0;
+    lon = Math::AngNormalize(lon + Math::AngNormalize(lon0));
     k = _k0 * (scbet/_scbet0) /
       (exp(_nc != 0 ? - (Math::sq(_nc)/(1 + _n)) * dpsi : 0)
        * (tchi >= 0 ? scchi + tchi : 1 / (scchi - tchi)) / (_scchi0 + _tchi0));
@@ -456,7 +461,7 @@ namespace GeographicLib {
     if (!(Math::isfinite(k) && k > 0))
       throw GeographicErr("Scale is not positive");
     if (!(abs(lat) <= 90))
-      throw GeographicErr("Latitude for SetScale not in [-90, 90]");
+      throw GeographicErr("Latitude for SetScale not in [-90d, 90d]");
     if (abs(lat) == 90 && !(_nc == 0 && lat * _n > 0))
       throw GeographicErr("Incompatible polar latitude in SetScale");
     real x, y, gamma, kold;
diff --git a/src/LocalCartesian.cpp b/src/LocalCartesian.cpp
index 7eb6d6d..cbcd4ed 100644
--- a/src/LocalCartesian.cpp
+++ b/src/LocalCartesian.cpp
@@ -9,19 +9,13 @@
 
 #include <GeographicLib/LocalCartesian.hpp>
 
-#define GEOGRAPHICLIB_LOCALCARTESIAN_CPP \
-  "$Id: 4d15764c089e07855bf6db300271e18f4fa89624 $"
-
-RCSID_DECL(GEOGRAPHICLIB_LOCALCARTESIAN_CPP)
-RCSID_DECL(GEOGRAPHICLIB_LOCALCARTESIAN_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
 
   void LocalCartesian::Reset(real lat0, real lon0, real h0) throw() {
     _lat0 = lat0;
-    _lon0 = lon0 >= 180 ? lon0 - 360 : (lon0 < -180 ? lon0 + 360 : lon0);
+    _lon0 = Math::AngNormalize(lon0);
     _h0 = h0;
     _earth.Forward(_lat0, _lon0, _h0, _x0, _y0, _z0);
     real
diff --git a/src/MGRS.cpp b/src/MGRS.cpp
index a05207f..c88f19c 100644
--- a/src/MGRS.cpp
+++ b/src/MGRS.cpp
@@ -10,11 +10,6 @@
 #include <GeographicLib/MGRS.hpp>
 #include <GeographicLib/Utility.hpp>
 
-#define GEOGRAPHICLIB_MGRS_CPP "$Id: e4e6b419c8cd8544b3edab85b3352add0d1dd7cb $"
-
-RCSID_DECL(GEOGRAPHICLIB_MGRS_CPP)
-RCSID_DECL(GEOGRAPHICLIB_MGRS_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -134,9 +129,33 @@ namespace GeographicLib {
   void MGRS::Forward(int zone, bool northp, real x, real y,
                      int prec, std::string& mgrs) {
     real lat, lon;
-    if (zone > 0)
-      UTMUPS::Reverse(zone, northp, x, y, lat, lon);
-    else
+    if (zone > 0) {
+      // Does a rough estimate for latitude determine the latitude band?
+      real ys = northp ? y : y - utmNshift_;
+      // A cheap calculation of the latitude which results in an "allowed"
+      // latitude band would be
+      //   lat = ApproxLatitudeBand(ys) * 8 + 4;
+      //
+      // Here we do a more careful job using the band letter corresponding to
+      // the actual latitude.
+      ys /= tile_;
+      if (abs(ys) < 1)
+        lat = 0.9 * ys;         // accurate enough estimate near equator
+      else {
+        real
+          // The poleward bound a fit from above of lat(x,y)
+          // for x = 500km and y = [0km, 950km]
+          latp = real(0.901) * ys + (ys > 0 ? 1 : -1) * real(0.135),
+          // The equatorward bound is a fit from below of lat(x,y)
+          // for x = 900km and y = [0km, 950km]
+          late = real(0.902) * ys * (1 - real(1.85e-6) * ys * ys);
+        if (LatitudeBand(latp) == LatitudeBand(late))
+          lat = latp;
+        else
+          // bounds straddle a band boundary so need to compute lat accurately
+          UTMUPS::Reverse(zone, northp, x, y, lat, lon);
+      }
+    } else
       // Latitude isn't needed for UPS specs or for INVALID
       lat = 0;
     Forward(zone, northp, x, y, lat, prec, mgrs);
@@ -313,6 +332,27 @@ namespace GeographicLib {
     // 90 deg = 100 tiles; 1 band = 8 deg = 100*8/90 tiles
     real c = 100 * (8 * iband + 4)/real(90);
     bool northp = iband >= 0;
+    //  iband minrow maxrow
+    //   -10    -90    -81
+    //    -9    -80    -72
+    //    -8    -71    -63
+    //    -7    -63    -54
+    //    -6    -54    -45
+    //    -5    -45    -36
+    //    -4    -36    -27
+    //    -3    -27    -18
+    //    -2    -18     -9
+    //    -1     -9     -1
+    //     0      0      8
+    //     1      8     17
+    //     2     17     26
+    //     3     26     35
+    //     4     35     44
+    //     5     44     53
+    //     6     53     62
+    //     7     62     70
+    //     8     71     79
+    //     9     80     94
     int
       minrow = iband > -10 ?
       int(floor(c - real(4.3) - real(0.1) * northp)) : -90,
diff --git a/src/MagneticCircle.cpp b/src/MagneticCircle.cpp
index ae329f6..aa7e972 100644
--- a/src/MagneticCircle.cpp
+++ b/src/MagneticCircle.cpp
@@ -12,14 +12,6 @@
 #include <sstream>
 #include <GeographicLib/Geocentric.hpp>
 
-#define GEOGRAPHICLIB_MAGNETICCIRCLE_CPP \
-  "$Id: 8cd933c406708a1f8b90e029e89bb99d2eb177b0 $"
-
-RCSID_DECL(GEOGRAPHICLIB_MAGNETICCIRCLE_CPP)
-RCSID_DECL(GEOGRAPHICLIB_MAGNETICCIRCLE_HPP)
-
-#define MAGNETIC_DEFAULT_PATH "/home/ckarney/geographiclib/magnetic"
-
 namespace GeographicLib {
 
   using namespace std;
diff --git a/src/MagneticModel.cpp b/src/MagneticModel.cpp
index 6eb100d..cdfefb6 100644
--- a/src/MagneticModel.cpp
+++ b/src/MagneticModel.cpp
@@ -13,14 +13,8 @@
 #include <GeographicLib/MagneticCircle.hpp>
 #include <GeographicLib/Utility.hpp>
 
-#define GEOGRAPHICLIB_MAGNETICMODEL_CPP \
-  "$Id: b0287ac014f10e4c6656b67f21c764432a47559a $"
-
-RCSID_DECL(GEOGRAPHICLIB_MAGNETICMODEL_CPP)
-RCSID_DECL(GEOGRAPHICLIB_MAGNETICMODEL_HPP)
-
 #if !defined(GEOGRAPHICLIB_DATA)
-#  if defined(_MSC_VER)
+#  if defined(_WIN32)
 #    define GEOGRAPHICLIB_DATA \
   "C:/Documents and Settings/All Users/Application Data/GeographicLib"
 #  else
@@ -34,7 +28,7 @@ RCSID_DECL(GEOGRAPHICLIB_MAGNETICMODEL_HPP)
 
 #if defined(_MSC_VER)
 // Squelch warnings about unsafe use of getenv
-#pragma warning (disable: 4996)
+#  pragma warning (disable: 4996)
 #endif
 
 namespace GeographicLib {
diff --git a/src/Makefile.am b/src/Makefile.am
index 866fb6f..83edcff 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,23 +2,28 @@
 # Makefile.am
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
-# $Id: f4da355113a782652c871e23951589bb90e4578b $
 
 AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -Wall -Wextra
 
 lib_LTLIBRARIES = libGeographic.la
 
-libGeographic_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
-libGeographic_la_SOURCES = AlbersEqualArea.cpp \
+libGeographic_la_LDFLAGS = \
+		-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
+libGeographic_la_SOURCES = Accumulator.cpp \
+		AlbersEqualArea.cpp \
 		AzimuthalEquidistant.cpp \
 		CassiniSoldner.cpp \
 		CircularEngine.cpp \
 		DMS.cpp \
+		Ellipsoid.cpp \
 		EllipticFunction.cpp \
 		GeoCoords.cpp \
 		Geocentric.cpp \
 		Geodesic.cpp \
+		GeodesicExact.cpp \
 		GeodesicLine.cpp \
+		GeodesicLineExact.cpp \
+		Geohash.cpp \
 		Geoid.cpp \
 		Gnomonic.cpp \
 		GravityCircle.cpp \
@@ -44,11 +49,15 @@ libGeographic_la_SOURCES = AlbersEqualArea.cpp \
 		../include/GeographicLib/CircularEngine.hpp \
 		../include/GeographicLib/Constants.hpp \
 		../include/GeographicLib/DMS.hpp \
+		../include/GeographicLib/Ellipsoid.hpp \
 		../include/GeographicLib/EllipticFunction.hpp \
 		../include/GeographicLib/GeoCoords.hpp \
 		../include/GeographicLib/Geocentric.hpp \
 		../include/GeographicLib/Geodesic.hpp \
+		../include/GeographicLib/GeodesicExact.hpp \
 		../include/GeographicLib/GeodesicLine.hpp \
+		../include/GeographicLib/GeodesicLineExact.hpp \
+		../include/GeographicLib/Geohash.hpp \
 		../include/GeographicLib/Geoid.hpp \
 		../include/GeographicLib/Gnomonic.hpp \
 		../include/GeographicLib/GravityCircle.hpp \
@@ -74,8 +83,8 @@ libGeographic_la_SOURCES = AlbersEqualArea.cpp \
 		../include/GeographicLib/Config.h
 
 ../include/GeographicLib/Config.h: ../include/GeographicLib/Config-ac.h
-	( egrep '\bVERSION\b|\bHAVE_LONG_DOUBLE\b' $< | \
-	  sed -e s/VERSION/GEOGRAPHICLIB_VERSION_STRING/; \
+	( egrep '\bVERSION\b|\bGEOGRAPHICLIB_|\bHAVE_LONG_DOUBLE\b' $< | \
+	  sed -e 's/ VERSION / GEOGRAPHICLIB_VERSION_STRING /'; \
 	  grep WORDS_BIGENDIAN $< | tail -1 ) > $@
 
 $(libGeographic_la_OBJECTS): ../include/GeographicLib/Config.h
diff --git a/src/Makefile.in b/src/Makefile.in
index 0d81c9b..b461730 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,9 +18,25 @@
 # Makefile.am
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
-# $Id: f4da355113a782652c871e23951589bb90e4578b $
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -42,7 +57,8 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = src
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -75,13 +91,20 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(libdir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 libGeographic_la_LIBADD =
-am_libGeographic_la_OBJECTS = AlbersEqualArea.lo \
+am_libGeographic_la_OBJECTS = Accumulator.lo AlbersEqualArea.lo \
 	AzimuthalEquidistant.lo CassiniSoldner.lo CircularEngine.lo \
-	DMS.lo EllipticFunction.lo GeoCoords.lo Geocentric.lo \
-	Geodesic.lo GeodesicLine.lo Geoid.lo Gnomonic.lo \
+	DMS.lo Ellipsoid.lo EllipticFunction.lo GeoCoords.lo \
+	Geocentric.lo Geodesic.lo GeodesicExact.lo GeodesicLine.lo \
+	GeodesicLineExact.lo Geohash.lo Geoid.lo Gnomonic.lo \
 	GravityCircle.lo GravityModel.lo LambertConformalConic.lo \
 	LocalCartesian.lo MGRS.lo MagneticCircle.lo MagneticModel.lo \
 	NormalGravity.lo OSGB.lo PolarStereographic.lo PolygonArea.lo \
@@ -115,6 +138,11 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	$(LDFLAGS) -o $@
 SOURCES = $(libGeographic_la_SOURCES)
 DIST_SOURCES = $(libGeographic_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -128,6 +156,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -138,6 +167,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = -DGEOGRAPHICLIB_DATA=\"$(geographiclib_data)\" @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -146,6 +176,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -181,6 +214,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -247,17 +282,24 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -Wall -Wextra
 lib_LTLIBRARIES = libGeographic.la
-libGeographic_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
-libGeographic_la_SOURCES = AlbersEqualArea.cpp \
+libGeographic_la_LDFLAGS = \
+		-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
+
+libGeographic_la_SOURCES = Accumulator.cpp \
+		AlbersEqualArea.cpp \
 		AzimuthalEquidistant.cpp \
 		CassiniSoldner.cpp \
 		CircularEngine.cpp \
 		DMS.cpp \
+		Ellipsoid.cpp \
 		EllipticFunction.cpp \
 		GeoCoords.cpp \
 		Geocentric.cpp \
 		Geodesic.cpp \
+		GeodesicExact.cpp \
 		GeodesicLine.cpp \
+		GeodesicLineExact.cpp \
+		Geohash.cpp \
 		Geoid.cpp \
 		Gnomonic.cpp \
 		GravityCircle.cpp \
@@ -283,11 +325,15 @@ libGeographic_la_SOURCES = AlbersEqualArea.cpp \
 		../include/GeographicLib/CircularEngine.hpp \
 		../include/GeographicLib/Constants.hpp \
 		../include/GeographicLib/DMS.hpp \
+		../include/GeographicLib/Ellipsoid.hpp \
 		../include/GeographicLib/EllipticFunction.hpp \
 		../include/GeographicLib/GeoCoords.hpp \
 		../include/GeographicLib/Geocentric.hpp \
 		../include/GeographicLib/Geodesic.hpp \
+		../include/GeographicLib/GeodesicExact.hpp \
 		../include/GeographicLib/GeodesicLine.hpp \
+		../include/GeographicLib/GeodesicLineExact.hpp \
+		../include/GeographicLib/Geohash.hpp \
 		../include/GeographicLib/Geoid.hpp \
 		../include/GeographicLib/Gnomonic.hpp \
 		../include/GeographicLib/GravityCircle.hpp \
@@ -350,7 +396,6 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
-	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
 	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
 	list2=; for p in $$list; do \
 	  if test -f $$p; then \
@@ -358,6 +403,8 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	  else :; fi; \
 	done; \
 	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
 	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
 	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
 	}
@@ -373,13 +420,15 @@ uninstall-libLTLIBRARIES:
 
 clean-libLTLIBRARIES:
 	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
-libGeographic.la: $(libGeographic_la_OBJECTS) $(libGeographic_la_DEPENDENCIES) 
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libGeographic.la: $(libGeographic_la_OBJECTS) $(libGeographic_la_DEPENDENCIES) $(EXTRA_libGeographic_la_DEPENDENCIES) 
 	$(libGeographic_la_LINK) -rpath $(libdir) $(libGeographic_la_OBJECTS) $(libGeographic_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -388,16 +437,21 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Accumulator.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/AlbersEqualArea.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/AzimuthalEquidistant.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CassiniSoldner.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CircularEngine.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DMS.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Ellipsoid.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/EllipticFunction.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeoCoords.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Geocentric.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Geodesic.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeodesicExact.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeodesicLine.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeodesicLineExact.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Geohash.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Geoid.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Gnomonic.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GravityCircle.Plo at am__quote@
@@ -493,6 +547,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -543,10 +611,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -632,7 +705,7 @@ uninstall-am: uninstall-libLTLIBRARIES
 .MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \
 	distclean-compile distclean-generic distclean-libtool \
 	distclean-tags distdir dvi dvi-am html html-am info info-am \
 	install install-am install-data install-data-am install-dvi \
@@ -647,8 +720,8 @@ uninstall-am: uninstall-libLTLIBRARIES
 
 
 ../include/GeographicLib/Config.h: ../include/GeographicLib/Config-ac.h
-	( egrep '\bVERSION\b|\bHAVE_LONG_DOUBLE\b' $< | \
-	  sed -e s/VERSION/GEOGRAPHICLIB_VERSION_STRING/; \
+	( egrep '\bVERSION\b|\bGEOGRAPHICLIB_|\bHAVE_LONG_DOUBLE\b' $< | \
+	  sed -e 's/ VERSION / GEOGRAPHICLIB_VERSION_STRING /'; \
 	  grep WORDS_BIGENDIAN $< | tail -1 ) > $@
 
 $(libGeographic_la_OBJECTS): ../include/GeographicLib/Config.h
diff --git a/src/Makefile.mk b/src/Makefile.mk
index 7ed91b2..560313b 100644
--- a/src/Makefile.mk
+++ b/src/Makefile.mk
@@ -1,5 +1,3 @@
-# $Id: fcc7381297d2c8de25e002260cfc217eb6448551 $
-
 LIBSTEM = Geographic
 LIBRARY = lib$(LIBSTEM).a
 
@@ -10,16 +8,21 @@ INCLUDEPATH = ../include
 PREFIX = /usr/local
 GEOGRAPHICLIB_DATA = $(PREFIX)/share/GeographicLib
 
-MODULES = AlbersEqualArea \
+MODULES = Accumulator \
+	AlbersEqualArea \
 	AzimuthalEquidistant \
 	CassiniSoldner \
 	CircularEngine \
 	DMS \
+	Ellipsoid \
 	EllipticFunction \
 	GeoCoords \
 	Geocentric \
 	Geodesic \
+	GeodesicExact \
 	GeodesicLine \
+	GeodesicLineExact \
+	Geohash \
 	Geoid \
 	Gnomonic \
 	GravityCircle \
@@ -38,8 +41,7 @@ MODULES = AlbersEqualArea \
 	TransverseMercatorExact \
 	UTMUPS \
 	Utility
-EXTRAHEADERS = Accumulator \
-	Constants \
+EXTRAHEADERS = Constants \
 	Math \
 	SphericalHarmonic \
 	SphericalHarmonic1 \
@@ -73,6 +75,7 @@ clean:
 TAGS: $(HEADERS) $(SOURCES)
 	etags $^
 
+Accumulator.o: Accumulator.hpp Config.h Constants.hpp Math.hpp
 AlbersEqualArea.o: AlbersEqualArea.hpp Config.h Constants.hpp Math.hpp
 AzimuthalEquidistant.o: AzimuthalEquidistant.hpp Config.h Constants.hpp \
 	Geodesic.hpp Math.hpp
@@ -81,12 +84,19 @@ CassiniSoldner.o: CassiniSoldner.hpp Config.h Constants.hpp Geodesic.hpp \
 CircularEngine.o: CircularEngine.hpp Config.h Constants.hpp Math.hpp \
 	SphericalEngine.hpp
 DMS.o: Config.h Constants.hpp DMS.hpp Math.hpp Utility.hpp
+Ellipsoid.o: Config.h Constants.hpp Ellipsoid.hpp AlbersEqualArea.hpp \
+	EllipticFunction.hpp Math.hpp TransverseMercator.hpp
 EllipticFunction.o: Config.h Constants.hpp EllipticFunction.hpp Math.hpp
 GeoCoords.o: Config.h Constants.hpp DMS.hpp GeoCoords.hpp MGRS.hpp Math.hpp \
 	UTMUPS.hpp Utility.hpp
 Geocentric.o: Config.h Constants.hpp Geocentric.hpp Math.hpp
 Geodesic.o: Config.h Constants.hpp Geodesic.hpp GeodesicLine.hpp Math.hpp
+GeodesicExact.o: Config.h Constants.hpp GeodesicExact.hpp \
+	GeodesicLineExact.hpp Math.hpp
 GeodesicLine.o: Config.h Constants.hpp Geodesic.hpp GeodesicLine.hpp Math.hpp
+GeodesicLineExact.o: Config.h Constants.hpp GeodesicExact.hpp \
+	GeodesicLineExact.hpp Math.hpp
+Geohash.o: Config.h Constants.hpp Geohash.hpp Utility.hpp
 Geoid.o: Config.h Constants.hpp Geoid.hpp Math.hpp
 Gnomonic.o: Config.h Constants.hpp Geodesic.hpp GeodesicLine.hpp Gnomonic.hpp \
 	Math.hpp
diff --git a/src/NormalGravity.cpp b/src/NormalGravity.cpp
index 7106b8a..3c598b9 100644
--- a/src/NormalGravity.cpp
+++ b/src/NormalGravity.cpp
@@ -9,12 +9,6 @@
 
 #include <GeographicLib/NormalGravity.hpp>
 
-#define GEOGRAPHICLIB_NORMALGRAVITY_CPP \
-  "$Id: ccd3d6bd4bddefb0b40cbce0006d863f08d64db4 $"
-
-RCSID_DECL(GEOGRAPHICLIB_NORMALGRAVITY_CPP)
-RCSID_DECL(GEOGRAPHICLIB_NORMALGRAVITY_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
diff --git a/src/OSGB.cpp b/src/OSGB.cpp
index 104928d..0d01891 100644
--- a/src/OSGB.cpp
+++ b/src/OSGB.cpp
@@ -10,11 +10,6 @@
 #include <GeographicLib/OSGB.hpp>
 #include <GeographicLib/Utility.hpp>
 
-#define GEOGRAPHICLIB_OSGB_CPP "$Id: 4bfb35c88866ed936faad797f3cef6f4ece36196 $"
-
-RCSID_DECL(GEOGRAPHICLIB_OSGB_CPP)
-RCSID_DECL(GEOGRAPHICLIB_OSGB_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -25,14 +20,19 @@ namespace GeographicLib {
   const TransverseMercator
   OSGB::OSGBTM_(MajorRadius(), Flattening(), CentralScale());
 
+  Math::real OSGB::northoffset_ = 0;
+  bool OSGB::init_ = false;
+
   Math::real OSGB::computenorthoffset() throw() {
-    real x, y;
-    OSGBTM_.Forward(real(0), OriginLatitude(), real(0), x, y);
-    return FalseNorthing() - y;
+    if (!init_) {
+      real x, y;
+      OSGBTM_.Forward(real(0), OriginLatitude(), real(0), x, y);
+      northoffset_ = FalseNorthing() - y;
+      init_ = true;
+    }
+    return northoffset_;
   }
 
-  const Math::real OSGB::northoffset_ = computenorthoffset();
-
   void OSGB::GridReference(real x, real y, int prec, std::string& gridref) {
     CheckCoords(x, y);
     if (!(prec >= 0 && prec <= maxprec_))
diff --git a/src/PolarStereographic.cpp b/src/PolarStereographic.cpp
index 9d7f18c..ff26240 100644
--- a/src/PolarStereographic.cpp
+++ b/src/PolarStereographic.cpp
@@ -2,19 +2,13 @@
  * \file PolarStereographic.cpp
  * \brief Implementation for GeographicLib::PolarStereographic class
  *
- * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2008-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #include <GeographicLib/PolarStereographic.hpp>
 
-#define GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP \
-  "$Id: 3a2dee07e6ef1c55ddcdc2178d818c8edd4d1cd4 $"
-
-RCSID_DECL(GEOGRAPHICLIB_POLARSTEREOGRAPHIC_CPP)
-RCSID_DECL(GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -84,7 +78,7 @@ namespace GeographicLib {
     rho *= 2 * _k0 * _a / _c;
     k = lat != 90 ? (rho / _a) * secphi * sqrt(_e2m + _e2 / Math::sq(secphi)) :
       _k0;
-    lon = lon >= 180 ? lon - 360 : (lon < -180 ? lon + 360 : lon);
+    lon = Math::AngNormalize(lon);
     real
       lam = lon * Math::degree<real>();
     x = rho * (lon == -180 ? 0 : sin(lam));
@@ -101,17 +95,19 @@ namespace GeographicLib {
       taup = (1 / t - t) / 2,
       tau = taup * _Cx,
       stol = tol_ * max(real(1), abs(taup));
-    // min iterations = 1, max iterations = 2; mean = 1.99
-    for (int i = 0; i < numit_; ++i) {
-      real
-        tau1 = Math::hypot(real(1), tau),
-        sig = sinh( eatanhe( tau / tau1 ) ),
-        taupa = Math::hypot(real(1), sig) * tau - sig * tau1,
-        dtau = (taup - taupa) * (1 + _e2m * Math::sq(tau)) /
-        ( _e2m * tau1 * Math::hypot(real(1), taupa) );
-      tau += dtau;
-      if (!(abs(dtau) >= stol))
-        break;
+    if (abs(tau) < overflow_) {
+      // min iterations = 1, max iterations = 2; mean = 1.99
+      for (int i = 0; i < numit_; ++i) {
+        real
+          tau1 = Math::hypot(real(1), tau),
+          sig = sinh( eatanhe( tau / tau1 ) ),
+          taupa = Math::hypot(real(1), sig) * tau - sig * tau1,
+          dtau = (taup - taupa) * (1 + _e2m * Math::sq(tau)) /
+          ( _e2m * tau1 * Math::hypot(real(1), taupa) );
+        tau += dtau;
+        if (!(abs(dtau) >= stol))
+          break;
+      }
     }
     real
       phi = atan(tau),
diff --git a/src/PolygonArea.cpp b/src/PolygonArea.cpp
index d0da1a0..4df9a2a 100644
--- a/src/PolygonArea.cpp
+++ b/src/PolygonArea.cpp
@@ -2,25 +2,19 @@
  * \file PolygonArea.cpp
  * \brief Implementation for GeographicLib::PolygonArea class
  *
- * Copyright (c) Charles Karney (2010, 2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #include <GeographicLib/PolygonArea.hpp>
 
-#define GEOGRAPHICLIB_POLYGONAREA_CPP \
-  "$Id: ae2fce0b24653309ca8835d962b1a3e047a6768a $"
-
-RCSID_DECL(GEOGRAPHICLIB_POLYGONAREA_CPP)
-RCSID_DECL(GEOGRAPHICLIB_POLYGONAREA_HPP)
-RCSID_DECL(GEOGRAPHICLIB_ACCUMULATOR_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
 
   void PolygonArea::AddPoint(real lat, real lon) throw() {
+    lon = Math::AngNormalize(lon);
     if (_num == 0) {
       _lat0 = _lat1 = lat;
       _lon0 = _lon1 = lon;
@@ -32,12 +26,26 @@ namespace GeographicLib {
         _areasum += S12;
         _crossings += transit(_lon1, lon);
       }
-      _lat1 = lat;
-      _lon1 = lon;
+      _lat1 = lat; _lon1 = lon;
     }
     ++_num;
   }
 
+  void PolygonArea::AddEdge(real azi, real s) throw() {
+    if (_num) {                 // Do nothing if _num is zero
+      real lat, lon, S12, t;
+      _earth.GenDirect(_lat1, _lon1, azi, false, s, _mask,
+                       lat, lon, t, t, t, t, t, S12);
+      _perimetersum += s;
+      if (!_polyline) {
+        _areasum += S12;
+        _crossings += transit(_lon1, lon);
+      }
+      _lat1 = lat; _lon1 = lon;
+      ++_num;
+    }
+  }
+
   unsigned PolygonArea::Compute(bool reverse, bool sign,
                                 real& perimeter, real& area) const throw() {
     real s12, S12, t;
@@ -79,8 +87,8 @@ namespace GeographicLib {
     return _num;
   }
 
-  unsigned PolygonArea::TestCompute(real lat, real lon, bool reverse, bool sign,
-                                    real& perimeter, real& area) const throw() {
+  unsigned PolygonArea::TestPoint(real lat, real lon, bool reverse, bool sign,
+                                  real& perimeter, real& area) const throw() {
     if (_num == 0) {
       perimeter = 0;
       if (!_polyline)
@@ -89,7 +97,8 @@ namespace GeographicLib {
     }
     perimeter = _perimetersum();
     real tempsum = _polyline ? 0 : _areasum();
-    int crossings = _crossings, num = _num + 1;
+    int crossings = _crossings;
+    unsigned num = _num + 1;
     for (int i = 0; i < (_polyline ? 1 : 2); ++i) {
       real s12, S12, t;
       _earth.GenInverse(i == 0 ? _lat1 : lat, i == 0 ? _lon1 : lon,
@@ -128,4 +137,53 @@ namespace GeographicLib {
     return num;
   }
 
+  unsigned PolygonArea::TestEdge(real azi, real s, bool reverse, bool sign,
+                                 real& perimeter, real& area) const throw() {
+    if (_num == 0) {            // we don't have a starting point!
+      perimeter = Math::NaN<real>();
+      if (!_polyline)
+        area = Math::NaN<real>();
+      return 0;
+    }
+    unsigned num = _num + 1;
+    perimeter = _perimetersum() + s;
+    if (_polyline)
+      return num;
+
+    real tempsum =  _areasum();
+    int crossings = _crossings;
+    {
+      real lat, lon, s12, S12, t;
+      _earth.GenDirect(_lat1, _lon1, azi, false, s, _mask,
+                       lat, lon, t, t, t, t, t, S12);
+      tempsum += S12;
+      crossings += transit(_lon1, lon);
+      _earth.GenInverse(lat, lon, _lat0, _lon0, _mask, s12, t, t, t, t, t, S12);
+      perimeter += s12;
+      tempsum += S12;
+      crossings += transit(lon, _lon0);
+    }
+
+    if (crossings & 1)
+      tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
+    // area is with the clockwise sense.  If !reverse convert to
+    // counter-clockwise convention.
+    if (!reverse)
+      tempsum *= -1;
+    // If sign put area in (-area0/2, area0/2], else put area in [0, area0)
+    if (sign) {
+      if (tempsum > _area0/2)
+        tempsum -= _area0;
+      else if (tempsum <= -_area0/2)
+        tempsum += _area0;
+    } else {
+      if (tempsum >= _area0)
+        tempsum -= _area0;
+      else if (tempsum < 0)
+        tempsum += _area0;
+    }
+    area = 0 + tempsum;
+    return num;
+  }
+
 } // namespace GeographicLib
diff --git a/src/SphericalEngine.cpp b/src/SphericalEngine.cpp
index 53cd9b5..489659d 100644
--- a/src/SphericalEngine.cpp
+++ b/src/SphericalEngine.cpp
@@ -131,16 +131,14 @@
  **********************************************************************/
 
 #include <GeographicLib/SphericalEngine.hpp>
-#include <limits>
-#include <algorithm>
 #include <GeographicLib/CircularEngine.hpp>
 #include <GeographicLib/Utility.hpp>
 
-#define GEOGRAPHICLIB_SPHERICALENGINE_CPP \
-  "$Id: 861a718d09c83cdd9bf58939d938a25797b9f306 $"
-
-RCSID_DECL(GEOGRAPHICLIB_SPHERICALENGINE_CPP)
-RCSID_DECL(GEOGRAPHICLIB_SPHERICALENGINE_HPP)
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions and potentially
+// uninitialized local variables
+#  pragma warning (disable: 4127 4701)
+#endif
 
 namespace GeographicLib {
 
@@ -208,6 +206,7 @@ namespace GeographicLib {
           A = t * Ax;
           B = - q2 * w / (root_[n - m + 2] * root_[n + m + 2]);
           break;
+        default: break;       // To suppress warning message from Visual Studio
         }
         R = c[0].Cv(--k[0]);
         for (int l = 1; l < L; ++l)
@@ -245,6 +244,7 @@ namespace GeographicLib {
           A = cl * v * uq;
           B = - v * root_[2 * m + 3] / (root_[8] * root_[m + 2]) * uq2;
           break;
+        default: break;       // To suppress warning message from Visual Studio
         }
         v = A * vc  + B * vc2  +  wc ; vc2  = vc ; vc  = v;
         v = A * vs  + B * vs2  +  ws ; vs2  = vs ; vs  = v;
@@ -269,6 +269,7 @@ namespace GeographicLib {
           A = uq;
           B = - root_[3]/2 * uq2;
           break;
+        default: break;       // To suppress warning message from Visual Studio
         }
         qs = q / scale_;
         vc = qs * (wc + A * (cl * vc + sl * vs ) + B * vc2);
@@ -335,6 +336,7 @@ namespace GeographicLib {
           A = t * Ax;
           B = - q2 * w / (root_[n - m + 2] * root_[n + m + 2]);
           break;
+        default: break;       // To suppress warning message from Visual Studio
         }
         R = c[0].Cv(--k[0]);
         for (int l = 1; l < L; ++l)
@@ -397,82 +399,82 @@ namespace GeographicLib {
   }
 
   /// \cond SKIP
-  template
-  Math::real SphericalEngine::Value<true, SphericalEngine::FULL, 1>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<true, SphericalEngine::FULL, 1>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
-  template
-  Math::real SphericalEngine::Value<false, SphericalEngine::FULL, 1>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<false, SphericalEngine::FULL, 1>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
-  template
-  Math::real SphericalEngine::Value<true, SphericalEngine::SCHMIDT, 1>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<true, SphericalEngine::SCHMIDT, 1>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
-  template
-  Math::real SphericalEngine::Value<false, SphericalEngine::SCHMIDT, 1>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<false, SphericalEngine::SCHMIDT, 1>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
 
-  template
-  Math::real SphericalEngine::Value<true, SphericalEngine::FULL, 2>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<true, SphericalEngine::FULL, 2>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
-  template
-  Math::real SphericalEngine::Value<false, SphericalEngine::FULL, 2>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<false, SphericalEngine::FULL, 2>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
-  template
-  Math::real SphericalEngine::Value<true, SphericalEngine::SCHMIDT, 2>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<true, SphericalEngine::SCHMIDT, 2>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
-  template
-  Math::real SphericalEngine::Value<false, SphericalEngine::SCHMIDT, 2>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<false, SphericalEngine::SCHMIDT, 2>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
 
-  template
-  Math::real SphericalEngine::Value<true, SphericalEngine::FULL, 3>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<true, SphericalEngine::FULL, 3>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
-  template
-  Math::real SphericalEngine::Value<false, SphericalEngine::FULL, 3>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<false, SphericalEngine::FULL, 3>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
-  template
-  Math::real SphericalEngine::Value<true, SphericalEngine::SCHMIDT, 3>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<true, SphericalEngine::SCHMIDT, 3>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
-  template
-  Math::real SphericalEngine::Value<false, SphericalEngine::SCHMIDT, 3>
+  template Math::real GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Value<false, SphericalEngine::SCHMIDT, 3>
   (const coeff[], const real[], real, real, real, real, real&, real&, real&);
 
-  template
-  CircularEngine SphericalEngine::Circle<true, SphericalEngine::FULL, 1>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<true, SphericalEngine::FULL, 1>
   (const coeff[], const real[], real, real, real);
-  template
-  CircularEngine SphericalEngine::Circle<false, SphericalEngine::FULL, 1>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<false, SphericalEngine::FULL, 1>
   (const coeff[], const real[], real, real, real);
-  template
-  CircularEngine SphericalEngine::Circle<true, SphericalEngine::SCHMIDT, 1>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<true, SphericalEngine::SCHMIDT, 1>
   (const coeff[], const real[], real, real, real);
-  template
-  CircularEngine SphericalEngine::Circle<false, SphericalEngine::SCHMIDT, 1>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<false, SphericalEngine::SCHMIDT, 1>
   (const coeff[], const real[], real, real, real);
 
-  template
-  CircularEngine SphericalEngine::Circle<true, SphericalEngine::FULL, 2>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<true, SphericalEngine::FULL, 2>
   (const coeff[], const real[], real, real, real);
-  template
-  CircularEngine SphericalEngine::Circle<false, SphericalEngine::FULL, 2>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<false, SphericalEngine::FULL, 2>
   (const coeff[], const real[], real, real, real);
-  template
-  CircularEngine SphericalEngine::Circle<true, SphericalEngine::SCHMIDT, 2>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<true, SphericalEngine::SCHMIDT, 2>
   (const coeff[], const real[], real, real, real);
-  template
-  CircularEngine SphericalEngine::Circle<false, SphericalEngine::SCHMIDT, 2>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<false, SphericalEngine::SCHMIDT, 2>
   (const coeff[], const real[], real, real, real);
 
-  template
-  CircularEngine SphericalEngine::Circle<true, SphericalEngine::FULL, 3>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<true, SphericalEngine::FULL, 3>
   (const coeff[], const real[], real, real, real);
-  template
-  CircularEngine SphericalEngine::Circle<false, SphericalEngine::FULL, 3>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<false, SphericalEngine::FULL, 3>
   (const coeff[], const real[], real, real, real);
-  template
-  CircularEngine SphericalEngine::Circle<true, SphericalEngine::SCHMIDT, 3>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<true, SphericalEngine::SCHMIDT, 3>
   (const coeff[], const real[], real, real, real);
-  template
-  CircularEngine SphericalEngine::Circle<false, SphericalEngine::SCHMIDT, 3>
+  template CircularEngine GEOGRAPHICLIB_EXPORT
+  SphericalEngine::Circle<false, SphericalEngine::SCHMIDT, 3>
   (const coeff[], const real[], real, real, real);
   /// \endcond
 
diff --git a/src/TransverseMercator.cpp b/src/TransverseMercator.cpp
index 5dd84cb..7f66b9e 100644
--- a/src/TransverseMercator.cpp
+++ b/src/TransverseMercator.cpp
@@ -2,7 +2,7 @@
  * \file TransverseMercator.cpp
  * \brief Implementation for GeographicLib::TransverseMercator class
  *
- * Copyright (c) Charles Karney (2008-2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2008-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  *
@@ -29,10 +29,10 @@
  *  - evaluating the convergence and scale using the expression for the
  *    projection or its inverse.
  *
- * If the preprocessor variable TM_TX_MAXPOW is set to an integer between 4 and
- * 8, then this specifies the order of the series used for the forward and
- * reverse transformations.  The default value is 6.  (The series accurate to
- * 12th order is given in \ref tmseries.)
+ * If the preprocessor variable GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER is set
+ * to an integer between 4 and 8, then this specifies the order of the series
+ * used for the forward and reverse transformations.  The default value is 6.
+ * (The series accurate to 12th order is given in \ref tmseries.)
  *
  * Other equivalent implementations are given in
  *  - http://www.ign.fr/DISPLAY/000/526/702/5267021/NTG_76.pdf
@@ -41,12 +41,6 @@
 
 #include <GeographicLib/TransverseMercator.hpp>
 
-#define GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP \
-  "$Id: 7b5a1854a015da061b8fdad0a4b35be7e06fcb9a $"
-
-RCSID_DECL(GEOGRAPHICLIB_TRANSVERSEMERCATOR_CPP)
-RCSID_DECL(GEOGRAPHICLIB_TRANSVERSEMERCATOR_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -214,17 +208,107 @@ namespace GeographicLib {
                           Constants::WGS84_f<real>(),
                           Constants::UTM_k0<real>());
 
+  // Engsager and Poder (2007) use trigonometric series to convert between phi
+  // and phip.
+
+  // Conversion from phi to phip:
+  //
+  //     phip = phi + sum(c[j] * sin(2*j*phi), j, 1, 6)
+  //
+  //       c[1] = - 2 * n
+  //              + 2/3 * n^2
+  //              + 4/3 * n^3
+  //              - 82/45 * n^4
+  //              + 32/45 * n^5
+  //              + 4642/4725 * n^6;
+  //       c[2] =   5/3 * n^2
+  //              - 16/15 * n^3
+  //              - 13/9 * n^4
+  //              + 904/315 * n^5
+  //              - 1522/945 * n^6;
+  //       c[3] = - 26/15 * n^3
+  //              + 34/21 * n^4
+  //              + 8/5 * n^5
+  //              - 12686/2835 * n^6;
+  //       c[4] =   1237/630 * n^4
+  //              - 12/5 * n^5
+  //              - 24832/14175 * n^6;
+  //       c[5] = - 734/315 * n^5
+  //              + 109598/31185 * n^6;
+  //       c[6] =   444337/155925 * n^6;
+
+  // Conversion from phip to phi:
+  //
+  //     phi = phip + sum(d[j] * sin(2*j*phip), j, 1, 6)
+  //
+  //       d[1] =   2 * n
+  //              - 2/3 * n^2
+  //              - 2 * n^3
+  //              + 116/45 * n^4
+  //              + 26/45 * n^5
+  //              - 2854/675 * n^6;
+  //       d[2] =   7/3 * n^2
+  //              - 8/5 * n^3
+  //              - 227/45 * n^4
+  //              + 2704/315 * n^5
+  //              + 2323/945 * n^6;
+  //       d[3] =   56/15 * n^3
+  //              - 136/35 * n^4
+  //              - 1262/105 * n^5
+  //              + 73814/2835 * n^6;
+  //       d[4] =   4279/630 * n^4
+  //              - 332/35 * n^5
+  //              - 399572/14175 * n^6;
+  //       d[5] =   4174/315 * n^5
+  //              - 144838/6237 * n^6;
+  //       d[6] =   601676/22275 * n^6;
+
+  // In order to maintain sufficient relative accuracy close to the pole use
+  //
+  //     S = sum(c[i]*sin(2*i*phi),i,1,6)
+  //     taup = (tau + tan(S)) / (1 - tau * tan(S))
+
+  // taupf and tauf are adapted from TransverseMercatorExact (taup and
+  // taupinv).  tau = tan(phi), taup = sinh(psi)
+  Math::real TransverseMercator::taupf(real tau) const throw() {
+    if (!(abs(tau) < overflow_))
+      return tau;
+    real
+      tau1 = Math::hypot(real(1), tau),
+      sig = sinh( eatanhe(tau / tau1) );
+    return Math::hypot(real(1), sig) * tau - sig * tau1;
+  }
+
+  Math::real TransverseMercator::tauf(real taup) const throw() {
+    if (!(abs(taup) < overflow_))
+      return taup;
+    real
+      // To lowest order in e^2, taup = (1 - e^2) * tau = _e2m * tau; so use
+      // tau = taup/_e2m as a starting guess.  Only 1 iteration is needed for
+      // |lat| < 3.35 deg, otherwise 2 iterations are needed.  If, instead, tau
+      // = taup is used the mean number of iterations increases to 1.99 (2
+      // iterations are needed except near tau = 0).
+      tau = taup/_e2m,
+      stol = tol_ * max(real(1), abs(taup));
+    // min iterations = 1, max iterations = 2; mean = 1.94
+    for (int i = 0; i < numit_; ++i) {
+      real
+        tau1 = Math::hypot(real(1), tau),
+        sig = sinh( eatanhe( tau / tau1 ) ),
+        taupa = Math::hypot(real(1), sig) * tau - sig * tau1,
+        dtau = (taup - taupa) * (1 + _e2m * Math::sq(tau)) /
+        ( _e2m * tau1 * Math::hypot(real(1), taupa) );
+      tau += dtau;
+      if (!(abs(dtau) >= stol))
+        break;
+    }
+    return tau;
+  }
+
   void TransverseMercator::Forward(real lon0, real lat, real lon,
                                    real& x, real& y, real& gamma, real& k)
     const throw() {
-    // Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)
-    if (lon - lon0 > 180)
-      lon -= lon0 + 360;
-    else if (lon - lon0 <= -180)
-      lon -= lon0 - 360;
-    else
-      lon -= lon0;
-    // Now lon in (-180, 180]
+    lon = Math::AngDiff(Math::AngNormalize(lon0), Math::AngNormalize(lon));
     // Explicitly enforce the parity
     int
       latsign = lat < 0 ? -1 : 1,
@@ -262,9 +346,7 @@ namespace GeographicLib {
       real
         c = max(real(0), cos(lam)), // cos(pi/2) might be negative
         tau = tan(phi),
-        secphi = Math::hypot(real(1), tau),
-        sig = sinh( eatanhe(tau / secphi) ),
-        taup = Math::hypot(real(1), sig) * tau - sig * secphi;
+        taup = taupf(tau);
       xip = atan2(taup, c);
       // Used to be
       //   etap = Math::atanh(sin(lam) / cosh(psi));
@@ -281,7 +363,8 @@ namespace GeographicLib {
       // This form has cancelling errors.  This property is lost if cosh(psip)
       // is replaced by 1/cos(phi), even though it's using "primary" data (phi
       // instead of psip).
-      k = sqrt(_e2m + _e2 * Math::sq(cos(phi))) * secphi / Math::hypot(taup, c);
+      k = sqrt(_e2m + _e2 * Math::sq(cos(phi))) * Math::hypot(real(1), tau)
+        / Math::hypot(taup, c);
     } else {
       xip = Math::pi<real>()/2;
       etap = 0;
@@ -296,7 +379,7 @@ namespace GeographicLib {
     //   zeta = xi + i*eta
     //   zeta' = xi' + i*eta'
     //
-    // The conversion from conformal to rectifying latitude can be expresses as
+    // The conversion from conformal to rectifying latitude can be expressed as
     // a series in _n:
     //
     //   zeta = zeta' + sum(h[j-1]' * sin(2 * j * zeta'), j = 1..maxpow_)
@@ -450,25 +533,7 @@ namespace GeographicLib {
       // Use Newton's method to solve for tau
       real
         taup = sin(xip)/r,
-        // To lowest order in e^2, taup = (1 - e^2) * tau = _e2m * tau; so use
-        // tau = taup/_e2m as a starting guess.  Only 1 iteration is needed for
-        // |lat| < 3.35 deg, otherwise 2 iterations are needed.  If, instead,
-        // tau = taup is used the mean number of iterations increases to 1.99
-        // (2 iterations are needed except near tau = 0).
-        tau = taup/_e2m,
-        stol = tol_ * max(real(1), abs(taup));
-      // min iterations = 1, max iterations = 2; mean = 1.94
-      for (int i = 0; i < numit_; ++i) {
-        real
-          tau1 = Math::hypot(real(1), tau),
-          sig = sinh( eatanhe( tau / tau1 ) ),
-          taupa = Math::hypot(real(1), sig) * tau - sig * tau1,
-          dtau = (taup - taupa) * (1 + _e2m * Math::sq(tau)) /
-          ( _e2m * tau1 * Math::hypot(real(1), taupa) );
-        tau += dtau;
-        if (!(abs(dtau) >= stol))
-          break;
-      }
+        tau = tauf(taup);
       phi = atan(tau);
       gamma += atan(tanx(xip) * tanh(etap)); // Krueger p 19 (31)
       // Note cos(phi') * cosh(eta') = r
@@ -484,13 +549,7 @@ namespace GeographicLib {
     if (backside)
       lon = 180 - lon;
     lon *= etasign;
-    // Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)
-    if (lon + lon0 >= 180)
-      lon += lon0 - 360;
-    else if (lon + lon0 < -180)
-      lon += lon0 + 360;
-    else
-      lon += lon0;
+    lon = Math::AngNormalize(lon + Math::AngNormalize(lon0));
     gamma /= Math::degree<real>();
     if (backside)
       gamma = 180 - gamma;
diff --git a/src/TransverseMercatorExact.cpp b/src/TransverseMercatorExact.cpp
index c700bf9..f2ac01a 100644
--- a/src/TransverseMercatorExact.cpp
+++ b/src/TransverseMercatorExact.cpp
@@ -6,7 +6,7 @@
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  *
- * The relevant section of Lee's paper is part V, pp 67–101,
+ * The relevant section of Lee's paper is part V, pp 67--101,
  * <a href="http://dx.doi.org/10.3138/X687-1574-4325-WM62">Conformal
  * Projections Based On Jacobian Elliptic Functions</a>.
  *
@@ -41,12 +41,6 @@
 
 #include <GeographicLib/TransverseMercatorExact.hpp>
 
-#define GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP \
-  "$Id: 125a2d11919018a84fb0c09ea2e77011a35a4a2d $"
-
-RCSID_DECL(GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_CPP)
-RCSID_DECL(GEOGRAPHICLIB_TRANSVERSEMERCATOREXACT_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -67,7 +61,6 @@ namespace GeographicLib {
     , _mu(_f * (2 - _f))        // e^2
     , _mv(1 - _mu)              // 1 - e^2
     , _e(sqrt(_mu))
-    , _ep2(_mu / _mv)           // e^2 / (1 - e^2)
     , _extendp(extendp)
     , _Eu(_mu)
     , _Ev(_mv)
@@ -350,9 +343,9 @@ namespace GeographicLib {
   }
 
   void TransverseMercatorExact::Scale(real tau, real /*lam*/,
-                                       real snu, real cnu, real dnu,
-                                       real snv, real cnv, real dnv,
-                                       real& gamma, real& k) const throw() {
+                                      real snu, real cnu, real dnu,
+                                      real snv, real cnv, real dnv,
+                                      real& gamma, real& k) const throw() {
     real sec2 = 1 + Math::sq(tau);    // sec(phi)^2
     // Lee 55.12 -- negated for our sign convention.  gamma gives the bearing
     // (clockwise from true north) of grid north
@@ -378,18 +371,11 @@ namespace GeographicLib {
   void TransverseMercatorExact::Forward(real lon0, real lat, real lon,
                                         real& x, real& y, real& gamma, real& k)
     const throw() {
-    // Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)
-    if (lon - lon0 > 180)
-      lon -= lon0 + 360;
-    else if (lon - lon0 <= -180)
-      lon -= lon0 - 360;
-    else
-      lon -= lon0;
-    // Now lon in (-180, 180]
+    lon = Math::AngDiff(Math::AngNormalize(lon0), Math::AngNormalize(lon));
     // Explicitly enforce the parity
     int
-      latsign = !_extendp && lat < 0 ? -1 : 1,
-      lonsign = !_extendp && lon < 0 ? -1 : 1;
+      latsign = (!_extendp && lat < 0) ? -1 : 1,
+      lonsign = (!_extendp && lon < 0) ? -1 : 1;
     lon *= lonsign;
     lat *= latsign;
     bool backside = !_extendp && lon > 90;
@@ -425,11 +411,16 @@ namespace GeographicLib {
     y = xi * _a * _k0 * latsign;
     x = eta * _a * _k0 * lonsign;
 
-    // Recompute (tau, lam) from (u, v) to improve accuracy of Scale
-    zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau, lam);
-    tau=taupinv(tau);
-    Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k);
-    gamma /= Math::degree<real>();
+    if (lat == 90) {
+      gamma = lon;
+      k = 1;
+    } else {
+      // Recompute (tau, lam) from (u, v) to improve accuracy of Scale
+      zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau, lam);
+      tau=taupinv(tau);
+      Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k);
+      gamma /= Math::degree<real>();
+    }
     if (backside)
       gamma = 180 - gamma;
     gamma *= latsign * lonsign;
@@ -472,24 +463,20 @@ namespace GeographicLib {
       phi = atan(tau);
       lat = phi / Math::degree<real>();
       lon = lam / Math::degree<real>();
+      Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k);
+      gamma /= Math::degree<real>();
     } else {
       tau = overflow_;
       phi = Math::pi<real>()/2;
       lat = 90;
-      lon = lam = 0;
+      lon = lam = gamma = 0;
+      k = 1;
     }
-    Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k);
-    gamma /= Math::degree<real>();
+
     if (backside)
       lon = 180 - lon;
     lon *= lonsign;
-    // Avoid losing a bit of accuracy in lon (assuming lon0 is an integer)
-    if (lon + lon0 >= 180)
-      lon += lon0 - 360;
-    else if (lon + lon0 < -180)
-      lon += lon0 + 360;
-    else
-      lon += lon0;
+    lon = Math::AngNormalize(lon + Math::AngNormalize(lon0));
     lat *= latsign;
     if (backside)
       y = 2 * _Eu.E() - y;
diff --git a/src/UTMUPS.cpp b/src/UTMUPS.cpp
index 4a8bb5e..2abf43e 100644
--- a/src/UTMUPS.cpp
+++ b/src/UTMUPS.cpp
@@ -8,18 +8,11 @@
  **********************************************************************/
 
 #include <GeographicLib/UTMUPS.hpp>
-#include <iomanip>
 #include <GeographicLib/MGRS.hpp>
 #include <GeographicLib/PolarStereographic.hpp>
 #include <GeographicLib/TransverseMercator.hpp>
 #include <GeographicLib/Utility.hpp>
 
-#define GEOGRAPHICLIB_UTMUPS_CPP \
-  "$Id: 5672b003ee47cd660377c111e3fca2b81da86323 $"
-
-RCSID_DECL(GEOGRAPHICLIB_UTMUPS_CPP)
-RCSID_DECL(GEOGRAPHICLIB_UTMUPS_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
@@ -53,12 +46,13 @@ namespace GeographicLib {
       return setzone;
     if (Math::isnan(lat) || Math::isnan(lon)) // Check if lat or lon is a NaN
       return INVALID;
-    // Assume lon is in [-180, 360].
     if (setzone == UTM || (lat >= -80 && lat < 84)) {
-      // Assume lon is in [-180, 360].
+      // Assume lon is in [-540, 540).
       int ilon = int(floor(lon));
       if (ilon >= 180)
         ilon -= 360;
+      else if (ilon < -180)
+        ilon += 360;
       int zone = (ilon + 186)/6;
       int band = MGRS::LatitudeBand(lat);
       if (band == 7 && zone == 31 && ilon >= 3)
@@ -144,12 +138,12 @@ namespace GeographicLib {
   }
 
   void UTMUPS::CheckLatLon(real lat, real lon) {
-    if (lat < -90 || lat > 90)
+    if (abs(lat) > 90)
       throw GeographicErr("Latitude " + Utility::str(lat)
                           + "d not in [-90d, 90d]");
-    if (lon < -180 || lon > 360)
-      throw GeographicErr("Latitude " + Utility::str(lon)
-                          + "d not in [-180d, 360d]");
+    if (lon < -540 || lon >= 540)
+      throw GeographicErr("Longitude " + Utility::str(lon)
+                          + "d not in [-540d, 540d)");
     }
 
   bool UTMUPS::CheckCoords(bool utmp, bool northp, real x, real y,
@@ -183,6 +177,40 @@ namespace GeographicLib {
     return true;
   }
 
+  void UTMUPS::Transfer(int zonein, bool northpin, real xin, real yin,
+                        int zoneout, bool northpout, real& xout, real& yout,
+                        int& zone) {
+    bool northp = northpin;
+    if (zonein != zoneout) {
+      // Determine lat, lon
+      real lat, lon;
+      GeographicLib::UTMUPS::Reverse(zonein, northpin, xin, yin, lat, lon);
+      // Try converting to zoneout
+      real x, y;
+      int zone1;
+      GeographicLib::UTMUPS::Forward(lat, lon, zone1, northp, x, y,
+                                     zoneout == UTMUPS::MATCH
+                                     ? zonein : zoneout);
+      if (zone1 == 0 && northp != northpout)
+        throw GeographicErr
+          ("Attempt to transfer UPS coordinates between hemispheres");
+      zone = zone1;
+      xout = x;
+      yout = y;
+    } else {
+      if (zoneout == 0 && northp != northpout)
+        throw GeographicErr
+          ("Attempt to transfer UPS coordinates between hemispheres");
+      zone = zoneout;
+      xout = xin;
+      yout = yin;
+    }
+    if (northp != northpout)
+      // Can't get here if UPS
+      yout += (northpout ? -1 : 1) * MGRS::utmNshift_;
+    return;
+  }
+
   void UTMUPS::DecodeZone(const std::string& zonestr, int& zone, bool& northp) {
     unsigned zlen = unsigned(zonestr.size());
     if (zlen == 0)
@@ -198,7 +226,7 @@ namespace GeographicLib {
       northp = false;
       return;
     }
-    char hemi = toupper(zonestr[zlen - 1]);
+    char hemi = char(toupper(zonestr[zlen - 1]));
     bool northp1 = hemi == 'N';
     if (! (northp1 || hemi == 'S'))
       throw GeographicErr(string("Illegal hemisphere letter ") + hemi + " in "
@@ -240,6 +268,36 @@ namespace GeographicLib {
     return os.str();
   }
 
+  void UTMUPS::DecodeEPSG(int epsg, int& zone, bool& northp) throw() {
+    if (epsg >= epsg01N && epsg <= epsg60N) {
+      zone = epsg - epsg01N + 1;
+      northp = true;
+    } else if (epsg == epsgN) {
+      zone = UPS;
+      northp = true;
+    } else if (epsg >= epsg01S && epsg <= epsg60S) {
+      zone = epsg - epsg01S + 1;
+      northp = false;
+    } else if (epsg == epsgS) {
+      zone = UPS;
+      northp = false;
+    } else {
+      zone = INVALID;
+      northp = false;
+    }
+  }
+
+  int UTMUPS::EncodeEPSG(int zone, bool northp) throw() {
+    int epsg = -1;
+    if (zone == UPS)
+      epsg = epsgS;
+    else if (zone >= MINUTMZONE && zone <= MAXUTMZONE)
+      epsg = epsg + (zone - MINUTMZONE) + epsg01S;
+    if (epsg >= 0 && northp)
+      epsg += epsgN - epsgS;
+    return epsg;
+  }
+
   Math::real UTMUPS::UTMShift() throw() { return real(MGRS::utmNshift_); }
 
 } // namespace GeographicLib
diff --git a/src/Utility.cpp b/src/Utility.cpp
index 681fef1..b8c6223 100644
--- a/src/Utility.cpp
+++ b/src/Utility.cpp
@@ -9,12 +9,6 @@
 
 #include <GeographicLib/Utility.hpp>
 
-#define GEOGRAPHICLIB_UTILITY_CPP \
-  "$Id: 6f06d5d8fa9d731dc5a5fa4516838f639a2ba40b $"
-
-RCSID_DECL(GEOGRAPHICLIB_UTILITY_CPP)
-RCSID_DECL(GEOGRAPHICLIB_UTILITY_HPP)
-
 namespace GeographicLib {
 
   using namespace std;
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 0c1d14e..98233fe 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -1,16 +1,9 @@
-# $Id: 6e59195303d0fbf5e3d86159e0c2808bc1014fec $
-
 # Build the tools...
 
-# Where to find the *.usage files for the --help option.  For a
-# maintainer these are in the build tree; otherwise they are in the
-# source tree.
-if (MAINTAINER)
-  set (MANDIR ${PROJECT_BINARY_DIR}/man)
-else ()
-  set (MANDIR ${PROJECT_SOURCE_DIR}/man)
-endif ()
-include_directories (${MANDIR})
+# Where to find the *.usage files for the --help option.
+include_directories (${PROJECT_BINARY_DIR}/man)
+# Only needed if target_compile_definitions is not supported
+add_definitions (${PROJECT_DEFINITIONS})
 
 # Loop over all the tools, specifying the source and library.
 add_custom_target (tools ALL)
@@ -23,20 +16,29 @@ foreach (TOOL ${TOOLS})
   add_dependencies (tools ${TOOL})
 
   set_source_files_properties (${TOOL}.cpp PROPERTIES
-    OBJECT_DEPENDS ${MANDIR}/${TOOL}.usage)
+    OBJECT_DEPENDS ${PROJECT_BINARY_DIR}/man/${TOOL}.usage)
 
-  target_link_libraries (${TOOL} Geographic)
+  target_link_libraries (${TOOL} ${PROJECT_LIBRARIES})
 
 endforeach ()
 
-# Set the run time path for shared libraries for non-Windows machines.
-if (NOT WIN32)
-  set_target_properties (${TOOLS} PROPERTIES
-    INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib)
+if (MSVC)
+  get_target_property (_LIBTYPE ${PROJECT_LIBRARIES} TYPE)
+  if (_LIBTYPE STREQUAL "SHARED_LIBRARY")
+    # Copy the shared library on Windows systems to this directory
+    # (examples) so that the tests can be run.
+    add_custom_command (TARGET tools POST_BUILD
+      COMMAND ${CMAKE_COMMAND} -E
+      copy $<TARGET_FILE:${PROJECT_LIBRARIES}> ${CMAKE_CFG_INTDIR}
+      COMMENT "Copying shared library to tools directory")
+  endif ()
 endif ()
 
 # Specify where the tools are installed
-install (TARGETS ${TOOLS} DESTINATION bin)
+install (TARGETS ${TOOLS} EXPORT depends DESTINATION bin)
+
+# Put all the tools into a folder in the IDE
+set_property (TARGET tools ${TOOLS} PROPERTY FOLDER tools)
 
 # Create the scripts for downloading the data files on non-Windows
 # systems.  This needs to substitute ${GEOGRAPHICLIB_DATA} as the
@@ -44,28 +46,16 @@ install (TARGETS ${TOOLS} DESTINATION bin)
 # expected to be run with write access to /usr/local.
 if (NOT WIN32)
   foreach (SCRIPT ${SCRIPTS})
+    configure_file (${SCRIPT}.sh scripts/${SCRIPT} @ONLY)
     add_custom_command (OUTPUT ${SCRIPT}
-      COMMAND
-        sed -e "s%@DEFAULTDIR@%${GEOGRAPHICLIB_DATA}%"
-          ${CMAKE_CURRENT_SOURCE_DIR}/${SCRIPT}.sh >
-          ${SCRIPT}
-      COMMAND chmod +x ${SCRIPT}
+      COMMAND ${CMAKE_COMMAND} -E
+        copy scripts/${SCRIPT} ${SCRIPT} && chmod +x ${SCRIPT}
       DEPENDS ${SCRIPT}.sh)
     install (PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${SCRIPT} DESTINATION sbin)
   endforeach ()
   add_custom_target (scripts ALL DEPENDS ${SCRIPTS})
 endif ()
 
-# Copy the shared library on Windows systems to this directory (tools) so
-# that the tests can be run.
-if (WIN32 AND GEOGRAPHIC_SHARED_LIB)
-  get_target_property (GEOGRAPHIC_LIBRARY_FILE Geographic
-    "LOCATION_${CMAKE_CFG_INTDIR}")
-  add_custom_command (TARGET tools POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E
-    copy ${GEOGRAPHIC_LIBRARY_FILE} ${CMAKE_CFG_INTDIR}/)
-endif ()
-
 # Turn on testing
 enable_testing ()
 
@@ -88,68 +78,89 @@ set_tests_properties (GeoConvert4 PROPERTIES WILL_FAIL ON)
 # Check fix for DMS::Decode bug fixed on 2011-03-22
 add_test (GeoConvert5 GeoConvert --input-string "5d. 0")
 set_tests_properties (GeoConvert5 PROPERTIES WILL_FAIL ON)
+if (NOT (MSVC AND MSVC_VERSION MATCHES "1[78].."))
+  # Check fix for DMS::Decode double rounding bug fixed on 2012-11-15
+  # This test is known to fail for VS 11 and 12 bug reported 2013-01-10
+  # http://connect.microsoft.com/VisualStudio/feedback/details/776287
+  # OK to skip this test for these compilers because this is a question
+  # of accuracy of the least significant bit.
+  add_test (GeoConvert6 GeoConvert -p 9
+    --input-string "0 179.99999999999998578")
+  set_tests_properties (GeoConvert6
+    PROPERTIES PASS_REGULAR_EXPRESSION  "179\\.9999999999999[7-9]")
+endif ()
 
-add_test (Geod0 Geod -i -p 0 --input-string "40.6 -73.8 49d01'N 2d33'E")
-set_tests_properties (Geod0
+add_test (GeodSolve0
+  GeodSolve -i -p 0 --input-string "40.6 -73.8 49d01'N 2d33'E")
+set_tests_properties (GeodSolve0
   PROPERTIES PASS_REGULAR_EXPRESSION "53\\.47022 111\\.59367 5853226")
-add_test (Geod1
-  Geod -p 0 --input-string "40d38'23\"N 073d46'44\"W 53d30' 5850e3")
-set_tests_properties (Geod1
+add_test (GeodSolve1
+  GeodSolve -p 0 --input-string "40d38'23\"N 073d46'44\"W 53d30' 5850e3")
+set_tests_properties (GeodSolve1
   PROPERTIES PASS_REGULAR_EXPRESSION "49\\.01467 2\\.56106 111\\.62947")
 # Check fix for antipodal prolate bug found 2010-09-04
-add_test (Geod2
-  Geod -i -p 0 -e 6.4e6 -1/150 --input-string "0.07476 0 -0.07476 180")
-set_tests_properties (Geod2
+add_test (GeodSolve2
+  GeodSolve -i -p 0 -e 6.4e6 -1/150 --input-string "0.07476 0 -0.07476 180")
+set_tests_properties (GeodSolve2
   PROPERTIES PASS_REGULAR_EXPRESSION "90\\.00078 90\\.00078 20106193")
 # Another check for similar bug
-add_test (Geod3
-  Geod -i -p 0 -e 6.4e6 -1/150 --input-string "0.1 0 -0.1 180")
-set_tests_properties (Geod3
+add_test (GeodSolve3
+  GeodSolve -i -p 0 -e 6.4e6 -1/150 --input-string "0.1 0 -0.1 180")
+set_tests_properties (GeodSolve3
   PROPERTIES PASS_REGULAR_EXPRESSION "90\\.00105 90\\.00105 20106193")
 # Check fix for short line bug found 2010-05-21
-add_test (Geod4
-  Geod -i --input-string "36.493349428792 0 36.49334942879201 .0000008")
-set_tests_properties (Geod4 PROPERTIES PASS_REGULAR_EXPRESSION ".* .* 0\\.072")
+add_test (GeodSolve4
+  GeodSolve -i --input-string "36.493349428792 0 36.49334942879201 .0000008")
+set_tests_properties (GeodSolve4
+  PROPERTIES PASS_REGULAR_EXPRESSION ".* .* 0\\.072")
 # Check fix for point2=pole bug found 2010-05-03 (but only with long double)
-add_test (Geod5
-  Geod -p 0 --input-string "0.01777745589997 30 0 10e6")
-set_tests_properties (Geod5
+add_test (GeodSolve5 GeodSolve -p 0 --input-string "0.01777745589997 30 0 10e6")
+set_tests_properties (GeodSolve5
   PROPERTIES PASS_REGULAR_EXPRESSION
   "90\\.00000 -150\\.00000 -180\\.00000;90\\.00000 30\\.00000 0\\.00000")
 
 # Check fix for volatile sbet12a bug found 2011-06-25 (gcc 4.4.4 x86 -O3)
 # Found again on 2012-03-27 with tdm-mingw32 (g++ 4.6.1).
-add_test (Geod6 Geod -i --input-string
+add_test (GeodSolve6 GeodSolve -i --input-string
   "88.202499451857 0 -88.202499451857 179.981022032992859592")
-add_test (Geod7 Geod -i --input-string
+add_test (GeodSolve7 GeodSolve -i --input-string
   "89.262080389218 0 -89.262080389218 179.992207982775375662")
-add_test (Geod8 Geod -i --input-string
+add_test (GeodSolve8 GeodSolve -i --input-string
   "89.333123580033 0 -89.333123580032997687 179.99295812360148422")
-set_tests_properties (Geod6
+set_tests_properties (GeodSolve6
   PROPERTIES PASS_REGULAR_EXPRESSION ".* .* 20003898.214")
-set_tests_properties (Geod7
+set_tests_properties (GeodSolve7
   PROPERTIES PASS_REGULAR_EXPRESSION ".* .* 20003925.854")
-set_tests_properties (Geod8
+set_tests_properties (GeodSolve8
   PROPERTIES PASS_REGULAR_EXPRESSION ".* .* 20003926.881")
 
 # Check fix for volatile x bug found 2011-06-25 (gcc 4.4.4 x86 -O3)
-add_test (Geod9 Geod -i --input-string
+add_test (GeodSolve9 GeodSolve -i --input-string
   "56.320923501171 0 -56.320923501171 179.664747671772880215")
-set_tests_properties (Geod9
+set_tests_properties (GeodSolve9
   PROPERTIES PASS_REGULAR_EXPRESSION ".* .* 19993558.287")
 
 # Check fix for adjust tol1_ bug found 2011-06-25 (Visual Studio 10 rel + debug)
-add_test (Geod10 Geod -i --input-string
+add_test (GeodSolve10 GeodSolve -i --input-string
   "52.784459512564 0 -52.784459512563990912 179.634407464943777557")
-set_tests_properties (Geod10
+set_tests_properties (GeodSolve10
   PROPERTIES PASS_REGULAR_EXPRESSION ".* .* 19991596.095")
 
 # Check fix for bet2 = -bet1 bug found 2011-06-25 (Visual Studio 10 rel + debug)
-add_test (Geod11 Geod -i --input-string
+add_test (GeodSolve11 GeodSolve -i --input-string
   "48.522876735459 0 -48.52287673545898293 179.599720456223079643")
-set_tests_properties (Geod11
+set_tests_properties (GeodSolve11
   PROPERTIES PASS_REGULAR_EXPRESSION ".* .* 19989144.774")
 
+# Check fix for inverse geodesics on extreme prolate/oblate ellipsoids
+# Reported 2012-08-29 Stefan Guenther <stefan.gunther at embl.de>; fixed 2012-10-07
+add_test (GeodSolve12
+  GeodSolve -i -e 89.8 -1.83 -p 0 --input-string "0 0 -10 160")
+add_test (GeodSolve13
+  GeodSolve -i -e 89.8 -1.83 -p 0 --input-string "0 0 -10 160" -E)
+set_tests_properties (GeodSolve12 GeodSolve13
+  PROPERTIES PASS_REGULAR_EXPRESSION "120\\.27.* 105\\.15.* 267")
+
 # Check fix for pole-encircling bug found 2011-03-16
 add_test (Planimeter0 Planimeter --input-string "89 0;89 90;89 180;89 270")
 add_test (Planimeter1
@@ -175,6 +186,13 @@ add_test (Planimeter5 Planimeter --input-string "89,0.1;89,90.1;89,-179.9")
 set_tests_properties (Planimeter5
   PROPERTIES PASS_REGULAR_EXPRESSION
   "3 539297\\.[0-9]+ 1247615283[89]\\.[0-9]+")
+# Check fix for Planimeter lon12 rounding bug found 2012-12-03
+add_test (Planimeter6 Planimeter --input-string "9 -0.00000000000001;9 180;9 0")
+add_test (Planimeter7 Planimeter --input-string "9  0.00000000000001;9 0;9 180")
+add_test (Planimeter8 Planimeter --input-string "9  0.00000000000001;9 180;9 0")
+add_test (Planimeter9 Planimeter --input-string "9 -0.00000000000001;9 0;9 180")
+set_tests_properties (Planimeter6 Planimeter7 Planimeter8 Planimeter9
+  PROPERTIES PASS_REGULAR_EXPRESSION "3 36026861\\.[0-9]+ -?0.0[0-9]+")
 
 # Check fix for AlbersEqualArea::Reverse bug found 2011-05-01
 add_test (ConicProj0
@@ -182,6 +200,34 @@ add_test (ConicProj0
 set_tests_properties (ConicProj0
   PROPERTIES PASS_REGULAR_EXPRESSION
   "39\\.95[0-9]+ -75\\.17[0-9]+ 1\\.67[0-9]+ 0\\.99[0-9]+")
+# Check fix for AlbersEqualArea prolate bug found 2012-05-15
+add_test (ConicProj1
+  ConicProj -a 0 0 -e 6.4e6 -0.5 -r --input-string "0 8605508")
+set_tests_properties (ConicProj1
+  PROPERTIES PASS_REGULAR_EXPRESSION "^85\\.00")
+# Check fix for LambertConformalConic::Forward bug found 2012-07-14
+add_test (ConicProj2 ConicProj -c -30 -30 --input-string "-30 0")
+set_tests_properties (ConicProj2
+  PROPERTIES PASS_REGULAR_EXPRESSION "^-?0\\.0+ -?0\\.0+ -?0\\.0+ 1\\.0+")
+# Check fixes for LambertConformalConic::Reverse overflow bugs found 2012-07-14
+add_test (ConicProj3 ConicProj -r -c 0 0 --input-string "1113195 -1e10")
+set_tests_properties (ConicProj3
+  PROPERTIES PASS_REGULAR_EXPRESSION "^-90\\.0+ 10\\.00[0-9]+ ")
+add_test (ConicProj4 ConicProj -r -c 0 0 --input-string "1113195 inf")
+set_tests_properties (ConicProj4
+  PROPERTIES PASS_REGULAR_EXPRESSION "^90\\.0+ 10\\.00[0-9]+ ")
+add_test (ConicProj5 ConicProj -r -c 45 45 --input-string "0 -1e100")
+set_tests_properties (ConicProj5
+  PROPERTIES PASS_REGULAR_EXPRESSION "^-90\\.0+ -?0\\.00[0-9]+ ")
+add_test (ConicProj6 ConicProj -r -c 45 45 --input-string "0 -inf")
+set_tests_properties (ConicProj6
+  PROPERTIES PASS_REGULAR_EXPRESSION "^-90\\.0+ -?0\\.00[0-9]+ ")
+add_test (ConicProj7 ConicProj -r -c 90 90 --input-string "0 -1e150")
+set_tests_properties (ConicProj7
+  PROPERTIES PASS_REGULAR_EXPRESSION "^-90\\.0+ -?0\\.00[0-9]+ ")
+add_test (ConicProj8 ConicProj -r -c 90 90 --input-string "0 -inf")
+set_tests_properties (ConicProj8
+  PROPERTIES PASS_REGULAR_EXPRESSION "^-90\\.0+ -?0\\.00[0-9]+ ")
 
 add_test (CartConvert0
   CartConvert -e 6.4e6 1/100 -r --input-string "10e3 0 1e3")
@@ -194,6 +240,20 @@ set_tests_properties (CartConvert1
   PROPERTIES PASS_REGULAR_EXPRESSION
   "4\\.42[0-9]+ 0\\.0[0]+ -6398614\\.[0-9]+")
 
+# Test fix to bad meridian convergence at pole with
+# TransverseMercatorExact found 2013-06-26
+add_test (TransverseMercatorProj0
+  TransverseMercatorProj -k 1 --input-string "90 75")
+set_tests_properties (TransverseMercatorProj0
+  PROPERTIES PASS_REGULAR_EXPRESSION
+  "^0\\.0+ 10001965\\.7293[0-9]+ 75\\.0+ 1\\.0+")
+# Test fix to bad scale at pole with TransverseMercatorExact
+# found 2013-06-30 (quarter meridian = 10001965.7293127228128889202m)
+add_test (TransverseMercatorProj1
+  TransverseMercatorProj -k 1 -r --input-string "0 10001965.7293127228")
+set_tests_properties (TransverseMercatorProj1
+  PROPERTIES PASS_REGULAR_EXPRESSION "90\\.0+ 0\\.0+ 0\\.0+ (1\\.0+|0\\.9999+)")
+
 if (EXISTS ${GEOGRAPHICLIB_DATA}/geoids/egm96-5.pgm)
   # Check fix for single-cell cache bug found 2010-11-23
   add_test (GeoidEval0 GeoidEval -n egm96-5 --input-string "0d1 0d1;0d4 0d4")
@@ -227,9 +287,15 @@ endif ()
 
 if (EXISTS ${GEOGRAPHICLIB_DATA}/gravity/egm2008.egm)
   # Verify no overflow at poles with high degree model
-  add_test (Gravity0
-    Gravity -n egm2008 -p 6 --input-string "90 110 0")
+  add_test (Gravity0 Gravity -n egm2008 -p 6 --input-string "90 110 0")
   set_tests_properties (Gravity0
-    PROPERTIES PASS_REGULAR_EXPRESSION
-    "-0\\.000146 0\\.000078 -9\\.832294")
+    PROPERTIES PASS_REGULAR_EXPRESSION "-0\\.000146 0\\.000078 -9\\.832294")
+  # Check fix for invR bug in GravityCircle found by Mathieu Peyrega on
+  # 2013-04-09
+  add_test (Gravity1 Gravity -n egm2008 -A -c -18 4000 --input-string "-86")
+  set_tests_properties (Gravity1
+    PROPERTIES PASS_REGULAR_EXPRESSION "-7\\.438 1\\.305 -1\\.563")
+  add_test (Gravity2 Gravity -n egm2008 -D -c -18 4000 --input-string "-86")
+  set_tests_properties (Gravity2
+    PROPERTIES PASS_REGULAR_EXPRESSION "7\\.404 -6\\.168 7\\.616")
 endif ()
diff --git a/tools/CartConvert.cpp b/tools/CartConvert.cpp
index 2055672..45f504c 100644
--- a/tools/CartConvert.cpp
+++ b/tools/CartConvert.cpp
@@ -27,6 +27,12 @@
 #include <GeographicLib/DMS.hpp>
 #include <GeographicLib/Utility.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions and potentially
+// uninitialized local variables
+#  pragma warning (disable: 4127 4701)
+#endif
+
 #include "CartConvert.usage"
 
 int main(int argc, char* argv[]) {
@@ -90,9 +96,8 @@ int main(int argc, char* argv[]) {
         cdelim = argv[m];
      } else if (arg == "--version") {
         std::cout
-          << argv[0]
-          << ": $Id: b9e53a72ea7d026978678f3ab9d726a2d8485079 $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
         return 0;
       } else
         return usage(!(arg == "-h" || arg == "--help"), arg != "--help");
diff --git a/tools/ConicProj.cpp b/tools/ConicProj.cpp
index 507fd5b..2135f63 100644
--- a/tools/ConicProj.cpp
+++ b/tools/ConicProj.cpp
@@ -27,6 +27,12 @@
 #include <GeographicLib/DMS.hpp>
 #include <GeographicLib/Utility.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions and potentially
+// uninitialized local variables
+#  pragma warning (disable: 4127 4701)
+#endif
+
 #include "ConicProj.usage"
 
 int main(int argc, char* argv[]) {
@@ -69,9 +75,9 @@ int main(int argc, char* argv[]) {
           lon0 = DMS::Decode(std::string(argv[m]), ind);
           if (ind == DMS::LATITUDE)
             throw GeographicErr("Bad hemisphere");
-          if (!(lon0 >= -180 && lon0 <= 360))
+          if (!(lon0 >= -540 && lon0 < 540))
             throw GeographicErr("Bad longitude");
-          if (lon0 >= 180) lon0 -= 360;
+          lon0 = Math::AngNormalize(lon0);
         }
         catch (const std::exception& e) {
           std::cerr << "Error decoding argument of " << arg << ": "
@@ -120,9 +126,8 @@ int main(int argc, char* argv[]) {
         cdelim = argv[m];
       } else if (arg == "--version") {
         std::cout
-          << argv[0]
-          << ": $Id: 8efb8dcae1b8e8f1abac4d5d6f60e8730ecaa81c $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
         return 0;
       } else
         return usage(!(arg == "-h" || arg == "--help"), arg != "--help");
diff --git a/tools/GeoConvert.cpp b/tools/GeoConvert.cpp
index d68605e..51e026a 100644
--- a/tools/GeoConvert.cpp
+++ b/tools/GeoConvert.cpp
@@ -29,6 +29,11 @@
 #include <GeographicLib/DMS.hpp>
 #include <GeographicLib/Utility.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 #include "GeoConvert.usage"
 
 int main(int argc, char* argv[]) {
@@ -42,6 +47,7 @@ int main(int argc, char* argv[]) {
     bool centerp = true, swaplatlong = false;
     std::string istring, ifile, ofile, cdelim;
     char lsep = ';', dmssep = char(0);
+    bool sethemisphere = false, northp = false;
 
     for (int m = 1; m < argc; ++m) {
       std::string arg(argv[m]);
@@ -49,10 +55,10 @@ int main(int argc, char* argv[]) {
         outputmode = GEOGRAPHIC;
       else if (arg == "-d") {
         outputmode = DMS;
-	dmssep = '\0';
+        dmssep = '\0';
       } else if (arg == "-:") {
         outputmode = DMS;
-	dmssep = ':';
+        dmssep = ':';
       } else if (arg == "-u")
         outputmode = UTMUPS;
       else if (arg == "-m")
@@ -76,8 +82,8 @@ int main(int argc, char* argv[]) {
         if (++m == argc) return usage(1, true);
         std::string zonestr(argv[m]);
         try {
-          bool northp;
           UTMUPS::DecodeZone(zonestr, zone, northp);
+          sethemisphere = true;
         }
         catch (const std::exception&) {
           std::istringstream str(zonestr);
@@ -91,12 +97,15 @@ int main(int argc, char* argv[]) {
             std::cerr << "Zone " << zone << " not in [0, 60]\n";
             return 1;
           }
+          sethemisphere = false;
         }
-      } else if (arg == "-s")
+      } else if (arg == "-s") {
         zone = UTMUPS::STANDARD;
-      else if (arg == "-t")
+        sethemisphere = false;
+      } else if (arg == "-t") {
         zone = UTMUPS::UTM;
-      else if (arg == "--input-string") {
+        sethemisphere = false;
+      } else if (arg == "--input-string") {
         if (++m == argc) return usage(1, true);
         istring = argv[m];
       } else if (arg == "--input-file") {
@@ -117,9 +126,8 @@ int main(int argc, char* argv[]) {
         cdelim = argv[m];
       } else if (arg == "--version") {
         std::cout
-          << argv[0]
-          << ": $Id: e39b9974b58d123fd979b1c3c086ae3ccccba72d $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
         return 0;
       } else
         return usage(!(arg == "-h" || arg == "--help"), arg != "--help");
@@ -187,7 +195,9 @@ int main(int argc, char* argv[]) {
           os = p.DMSRepresentation(prec, swaplatlong, dmssep);
           break;
         case UTMUPS:
-          os = p.AltUTMUPSRepresentation(prec);
+          os = (sethemisphere
+                ? p.AltUTMUPSRepresentation(northp, prec)
+                : p.AltUTMUPSRepresentation(prec));
           break;
         case MGRS:
           os = p.AltMGRSRepresentation(prec);
@@ -197,10 +207,9 @@ int main(int argc, char* argv[]) {
             real
               gamma = p.AltConvergence(),
               k = p.AltScale();
-            os =
-              Utility::str<real>(gamma, std::max(-5,std::min(8,prec))+5)
-              + " " +
-              Utility::str<real>(k, std::max(-5,std::min(8,prec))+7);
+            int prec1 = std::max(-5, std::min( Math::extradigits + 8, prec ));
+            os = Utility::str<real>(gamma, prec1 + 5) + " "
+              + Utility::str<real>(k, prec1 + 7);
           }
         }
       }
diff --git a/tools/Geod.cpp b/tools/Geod.cpp
deleted file mode 100644
index f39273b..0000000
--- a/tools/Geod.cpp
+++ /dev/null
@@ -1,307 +0,0 @@
-/**
- * \file Geod.cpp
- * \brief Command line utility for geodesic calculations
- *
- * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed
- * under the MIT/X11 License.  For more information, see
- * http://geographiclib.sourceforge.net/
- *
- * Compile and link with
- *   g++ -g -O3 -I../include -I../man -o Geod \
- *       Geod.cpp \
- *       ../src/DMS.cpp \
- *       ../src/Geodesic.cpp \
- *       ../src/GeodesicLine.cpp
- *
- * See the <a href="Geod.1.html">man page</a> for usage
- * information.
- **********************************************************************/
-
-#include <iostream>
-#include <sstream>
-#include <string>
-#include <sstream>
-#include <fstream>
-#include <GeographicLib/Geodesic.hpp>
-#include <GeographicLib/GeodesicLine.hpp>
-#include <GeographicLib/DMS.hpp>
-#include <GeographicLib/Utility.hpp>
-
-#include "Geod.usage"
-
-typedef GeographicLib::Math::real real;
-
-std::string LatLonString(real lat, real lon, int prec, bool dms, char dmssep) {
-  using namespace GeographicLib;
-  return dms ?
-    DMS::Encode(lat, prec + 5, DMS::LATITUDE, dmssep) + " " +
-    DMS::Encode(lon, prec + 5, DMS::LONGITUDE, dmssep) :
-    DMS::Encode(lat, prec + 5, DMS::NUMBER) + " " +
-    DMS::Encode(lon, prec + 5, DMS::NUMBER);
-}
-
-std::string AzimuthString(real azi, int prec, bool dms, char dmssep) {
-  using namespace GeographicLib;
-  return dms ? DMS::Encode(azi, prec + 5, DMS::AZIMUTH, dmssep) :
-    DMS::Encode(azi >= 180 ? azi - 360 : azi, prec + 5, DMS::NUMBER);
-}
-
-std::string DistanceStrings(real s12, real a12,
-                            bool full, bool arcmode, int prec, bool dms) {
-  using namespace GeographicLib;
-  std::string s;
-  if (full || !arcmode)
-    s += Utility::str<real>(s12, prec);
-  if (full)
-    s += " ";
-  if (full || arcmode)
-    s += DMS::Encode(a12, prec + 5, dms ? DMS::NONE : DMS::NUMBER);
-  return s;
-}
-
-real ReadDistance(const std::string& s, bool arcmode) {
-  using namespace GeographicLib;
-  return arcmode ? DMS::DecodeAngle(s) : Utility::num<real>(s);
-}
-
-int main(int argc, char* argv[]) {
-  try {
-    using namespace GeographicLib;
-    bool linecalc = false, inverse = false, arcmode = false,
-      dms = false, full = false;
-    real
-      a = Constants::WGS84_a<real>(),
-      f = Constants::WGS84_f<real>();
-    real lat1, lon1, azi1, lat2, lon2, azi2, s12, m12, a12, M12, M21, S12;
-    real azi2sense = 0;
-    int prec = 3;
-    std::string istring, ifile, ofile, cdelim;
-    char lsep = ';', dmssep = char(0);
-
-    for (int m = 1; m < argc; ++m) {
-      std::string arg(argv[m]);
-      if (arg == "-i") {
-        inverse = true;
-        linecalc = false;
-      } else if (arg == "-a")
-        arcmode = true;
-      else if (arg == "-l") {
-        inverse = false;
-        linecalc = true;
-        if (m + 3 >= argc) return usage(1, true);
-        try {
-          DMS::DecodeLatLon(std::string(argv[m + 1]), std::string(argv[m + 2]),
-                            lat1, lon1);
-          azi1 = DMS::DecodeAzimuth(std::string(argv[m + 3]));
-        }
-        catch (const std::exception& e) {
-          std::cerr << "Error decoding arguments of -l: " << e.what() << "\n";
-          return 1;
-        }
-        m += 3;
-      } else if (arg == "-e") {
-        if (m + 2 >= argc) return usage(1, true);
-        try {
-          a = Utility::num<real>(std::string(argv[m + 1]));
-          f = Utility::fract<real>(std::string(argv[m + 2]));
-        }
-        catch (const std::exception& e) {
-          std::cerr << "Error decoding arguments of -e: " << e.what() << "\n";
-          return 1;
-        }
-        m += 2;
-      }
-      else if (arg == "-d") {
-        dms = true;
-	dmssep = '\0';
-      } else if (arg == "-:") {
-	dms = true;
-	dmssep = ':';
-      } else if (arg == "-b")
-        azi2sense = 180;
-      else if (arg == "-f")
-        full = true;
-      else if (arg == "-p") {
-        if (++m == argc) return usage(1, true);
-        try {
-          prec = Utility::num<int>(std::string(argv[m]));
-        }
-        catch (const std::exception&) {
-          std::cerr << "Precision " << argv[m] << " is not a number\n";
-          return 1;
-        }
-      } else if (arg == "--input-string") {
-        if (++m == argc) return usage(1, true);
-        istring = argv[m];
-      } else if (arg == "--input-file") {
-        if (++m == argc) return usage(1, true);
-        ifile = argv[m];
-      } else if (arg == "--output-file") {
-        if (++m == argc) return usage(1, true);
-        ofile = argv[m];
-      } else if (arg == "--line-separator") {
-        if (++m == argc) return usage(1, true);
-        if (std::string(argv[m]).size() != 1) {
-          std::cerr << "Line separator must be a single character\n";
-          return 1;
-        }
-        lsep = argv[m][0];
-      } else if (arg == "--comment-delimiter") {
-        if (++m == argc) return usage(1, true);
-        cdelim = argv[m];
-      } else if (arg == "--version") {
-        std::cout
-          << argv[0]
-          << ": $Id: 68e3a8ec4a5717094498179912279a756f6e3f8b $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
-        return 0;
-      } else
-        return usage(!(arg == "-h" || arg == "--help"), arg != "--help");
-    }
-
-    if (!ifile.empty() && !istring.empty()) {
-      std::cerr << "Cannot specify --input-string and --input-file together\n";
-      return 1;
-    }
-    if (ifile == "-") ifile.clear();
-    std::ifstream infile;
-    std::istringstream instring;
-    if (!ifile.empty()) {
-      infile.open(ifile.c_str());
-      if (!infile.is_open()) {
-        std::cerr << "Cannot open " << ifile << " for reading\n";
-        return 1;
-      }
-    } else if (!istring.empty()) {
-      std::string::size_type m = 0;
-      while (true) {
-        m = istring.find(lsep, m);
-        if (m == std::string::npos)
-          break;
-        istring[m] = '\n';
-      }
-      instring.str(istring);
-    }
-    std::istream* input = !ifile.empty() ? &infile :
-      (!istring.empty() ? &instring : &std::cin);
-
-    std::ofstream outfile;
-    if (ofile == "-") ofile.clear();
-    if (!ofile.empty()) {
-      outfile.open(ofile.c_str());
-      if (!outfile.is_open()) {
-        std::cerr << "Cannot open " << ofile << " for writing\n";
-        return 1;
-      }
-    }
-    std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
-
-    const Geodesic geod(a, f);
-    GeodesicLine l;
-    if (linecalc)
-      l = geod.Line(lat1, lon1, azi1);
-
-    // Max precision = 10: 0.1 nm in distance, 10^-15 deg (= 0.11 nm),
-    // 10^-11 sec (= 0.3 nm).
-    prec = std::min(10, std::max(0, prec));
-    std::string s;
-    int retval = 0;
-    while (std::getline(*input, s)) {
-      try {
-        std::string eol("\n");
-        if (!cdelim.empty()) {
-          std::string::size_type m = s.find(cdelim);
-          if (m != std::string::npos) {
-            eol = " " + s.substr(m) + "\n";
-            s = s.substr(0, m);
-          }
-        }
-        std::istringstream str(s);
-        if (inverse) {
-          std::string slat1, slon1, slat2, slon2;
-          if (!(str >> slat1 >> slon1 >> slat2 >> slon2))
-            throw GeographicErr("Incomplete input: " + s);
-          std::string strc;
-          if (str >> strc)
-            throw GeographicErr("Extraneous input: " + strc);
-          DMS::DecodeLatLon(slat1, slon1, lat1, lon1);
-          DMS::DecodeLatLon(slat2, slon2, lat2, lon2);
-          a12 = geod.Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2,
-                             m12, M12, M21, S12);
-          if (full)
-            *output << LatLonString(lat1, lon1, prec, dms, dmssep) << " ";
-          *output << AzimuthString(azi1, prec, dms, dmssep) << " ";
-          if (full)
-            *output << LatLonString(lat2, lon2, prec, dms, dmssep) << " ";
-          *output << AzimuthString(azi2 + azi2sense, prec, dms, dmssep) << " "
-                  << DistanceStrings(s12, a12, full, arcmode, prec, dms);
-          if (full)
-            *output << " " << Utility::str<real>(m12, prec)
-                    << " " << Utility::str<real>(M12, prec+7)
-                    << " " << Utility::str<real>(M21, prec+7)
-                    << " " << Utility::str<real>(S12, std::max(prec-7, 0));
-          *output << eol;
-        } else {
-          if (linecalc) {
-            std::string ss12;
-            if (!(str >> ss12))
-              throw GeographicErr("Incomplete input: " + s);
-            std::string strc;
-            if (str >> strc)
-              throw GeographicErr("Extraneous input: " + strc);
-            s12 = ReadDistance(ss12, arcmode);
-            if (arcmode)
-              l.ArcPosition(s12, lat2, lon2, azi2, a12, m12, M12, M21, S12);
-            else
-              a12 = l.Position(s12, lat2, lon2, azi2, m12, M12, M21, S12);
-          } else {
-            std::string slat1, slon1, sazi1, ss12;
-            if (!(str >> slat1 >> slon1 >> sazi1 >> ss12))
-              throw GeographicErr("Incomplete input: " + s);
-            std::string strc;
-            if (str >> strc)
-              throw GeographicErr("Extraneous input: " + strc);
-            DMS::DecodeLatLon(slat1, slon1, lat1, lon1);
-            azi1 = DMS::DecodeAzimuth(sazi1);
-            s12 = ReadDistance(ss12, arcmode);
-            if (arcmode)
-              geod.ArcDirect(lat1, lon1, azi1, s12, lat2, lon2, azi2, a12,
-                             m12, M12, M21, S12);
-            else
-              a12 = geod.Direct(lat1, lon1, azi1, s12, lat2, lon2, azi2,
-                                m12, M12, M21, S12);
-          }
-          if (arcmode)
-            std::swap(s12, a12);
-          if (full)
-            *output << LatLonString(lat1, lon1, prec, dms, dmssep) << " "
-                    << AzimuthString(azi1, prec, dms, dmssep) << " ";
-          *output << LatLonString(lat2, lon2, prec, dms, dmssep) << " "
-                  << AzimuthString(azi2 + azi2sense, prec, dms, dmssep);
-          if (full)
-            *output << " "
-                    << DistanceStrings(s12, a12, full, arcmode, prec, dms)
-                    << " " << Utility::str<real>(m12, prec)
-                    << " " << Utility::str<real>(M12, prec+7)
-                    << " " << Utility::str<real>(M21, prec+7)
-                    << " " << Utility::str<real>(S12, std::max(prec-7, 0));
-          *output << eol;
-        }
-      }
-      catch (const std::exception& e) {
-        // Write error message cout so output lines match input lines
-        *output << "ERROR: " << e.what() << "\n";
-        retval = 1;
-      }
-    }
-    return retval;
-  }
-  catch (const std::exception& e) {
-    std::cerr << "Caught exception: " << e.what() << "\n";
-    return 1;
-  }
-  catch (...) {
-    std::cerr << "Caught unknown exception\n";
-    return 1;
-  }
-}
diff --git a/tools/GeodSolve.cpp b/tools/GeodSolve.cpp
new file mode 100644
index 0000000..d3671f6
--- /dev/null
+++ b/tools/GeodSolve.cpp
@@ -0,0 +1,335 @@
+/**
+ * \file GeodSolve.cpp
+ * \brief Command line utility for geodesic calculations
+ *
+ * Copyright (c) Charles Karney (2009-2012) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ *
+ * Compile and link with
+ *   g++ -g -O3 -I../include -I../man -o GeodSolve \
+ *       GeodSolve.cpp \
+ *       ../src/DMS.cpp \
+ *       ../src/Geodesic.cpp \
+ *       ../src/GeodesicLine.cpp
+ *
+ * See the <a href="GeodSolve.1.html">man page</a> for usage
+ * information.
+ **********************************************************************/
+
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <sstream>
+#include <fstream>
+#include <GeographicLib/Geodesic.hpp>
+#include <GeographicLib/GeodesicLine.hpp>
+#include <GeographicLib/GeodesicExact.hpp>
+#include <GeographicLib/GeodesicLineExact.hpp>
+#include <GeographicLib/DMS.hpp>
+#include <GeographicLib/Utility.hpp>
+
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions and potentially
+// uninitialized local variables
+#  pragma warning (disable: 4127 4701)
+#endif
+
+#include "GeodSolve.usage"
+
+typedef GeographicLib::Math::real real;
+
+std::string LatLonString(real lat, real lon, int prec, bool dms, char dmssep) {
+  using namespace GeographicLib;
+  return dms ?
+    DMS::Encode(lat, prec + 5, DMS::LATITUDE, dmssep) + " " +
+    DMS::Encode(lon, prec + 5, DMS::LONGITUDE, dmssep) :
+    DMS::Encode(lat, prec + 5, DMS::NUMBER) + " " +
+    DMS::Encode(lon, prec + 5, DMS::NUMBER);
+}
+
+std::string AzimuthString(real azi, int prec, bool dms, char dmssep) {
+  using namespace GeographicLib;
+  return dms ? DMS::Encode(azi, prec + 5, DMS::AZIMUTH, dmssep) :
+    DMS::Encode(azi >= 180 ? azi - 360 : azi, prec + 5, DMS::NUMBER);
+}
+
+std::string DistanceStrings(real s12, real a12,
+                            bool full, bool arcmode, int prec, bool dms) {
+  using namespace GeographicLib;
+  std::string s;
+  if (full || !arcmode)
+    s += Utility::str<real>(s12, prec);
+  if (full)
+    s += " ";
+  if (full || arcmode)
+    s += DMS::Encode(a12, prec + 5, dms ? DMS::NONE : DMS::NUMBER);
+  return s;
+}
+
+real ReadDistance(const std::string& s, bool arcmode) {
+  using namespace GeographicLib;
+  return arcmode ? DMS::DecodeAngle(s) : Utility::num<real>(s);
+}
+
+int main(int argc, char* argv[]) {
+  try {
+    using namespace GeographicLib;
+    bool linecalc = false, inverse = false, arcmode = false,
+      dms = false, full = false, exact = false;
+    real
+      a = Constants::WGS84_a<real>(),
+      f = Constants::WGS84_f<real>();
+    real lat1, lon1, azi1, lat2, lon2, azi2, s12, m12, a12, M12, M21, S12;
+    real azi2sense = 0;
+    int prec = 3;
+    std::string istring, ifile, ofile, cdelim;
+    char lsep = ';', dmssep = char(0);
+
+    for (int m = 1; m < argc; ++m) {
+      std::string arg(argv[m]);
+      if (arg == "-i") {
+        inverse = true;
+        linecalc = false;
+      } else if (arg == "-a")
+        arcmode = true;
+      else if (arg == "-l") {
+        inverse = false;
+        linecalc = true;
+        if (m + 3 >= argc) return usage(1, true);
+        try {
+          DMS::DecodeLatLon(std::string(argv[m + 1]), std::string(argv[m + 2]),
+                            lat1, lon1);
+          azi1 = DMS::DecodeAzimuth(std::string(argv[m + 3]));
+        }
+        catch (const std::exception& e) {
+          std::cerr << "Error decoding arguments of -l: " << e.what() << "\n";
+          return 1;
+        }
+        m += 3;
+      } else if (arg == "-e") {
+        if (m + 2 >= argc) return usage(1, true);
+        try {
+          a = Utility::num<real>(std::string(argv[m + 1]));
+          f = Utility::fract<real>(std::string(argv[m + 2]));
+        }
+        catch (const std::exception& e) {
+          std::cerr << "Error decoding arguments of -e: " << e.what() << "\n";
+          return 1;
+        }
+        m += 2;
+      }
+      else if (arg == "-d") {
+        dms = true;
+        dmssep = '\0';
+      } else if (arg == "-:") {
+        dms = true;
+        dmssep = ':';
+      } else if (arg == "-b")
+        azi2sense = 180;
+      else if (arg == "-f")
+        full = true;
+      else if (arg == "-p") {
+        if (++m == argc) return usage(1, true);
+        try {
+          prec = Utility::num<int>(std::string(argv[m]));
+        }
+        catch (const std::exception&) {
+          std::cerr << "Precision " << argv[m] << " is not a number\n";
+          return 1;
+        }
+      } else if (arg == "-E")
+        exact = true;
+      else if (arg == "--input-string") {
+        if (++m == argc) return usage(1, true);
+        istring = argv[m];
+      } else if (arg == "--input-file") {
+        if (++m == argc) return usage(1, true);
+        ifile = argv[m];
+      } else if (arg == "--output-file") {
+        if (++m == argc) return usage(1, true);
+        ofile = argv[m];
+      } else if (arg == "--line-separator") {
+        if (++m == argc) return usage(1, true);
+        if (std::string(argv[m]).size() != 1) {
+          std::cerr << "Line separator must be a single character\n";
+          return 1;
+        }
+        lsep = argv[m][0];
+      } else if (arg == "--comment-delimiter") {
+        if (++m == argc) return usage(1, true);
+        cdelim = argv[m];
+      } else if (arg == "--version") {
+        std::cout
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
+        return 0;
+      } else
+        return usage(!(arg == "-h" || arg == "--help"), arg != "--help");
+    }
+
+    if (!ifile.empty() && !istring.empty()) {
+      std::cerr << "Cannot specify --input-string and --input-file together\n";
+      return 1;
+    }
+    if (ifile == "-") ifile.clear();
+    std::ifstream infile;
+    std::istringstream instring;
+    if (!ifile.empty()) {
+      infile.open(ifile.c_str());
+      if (!infile.is_open()) {
+        std::cerr << "Cannot open " << ifile << " for reading\n";
+        return 1;
+      }
+    } else if (!istring.empty()) {
+      std::string::size_type m = 0;
+      while (true) {
+        m = istring.find(lsep, m);
+        if (m == std::string::npos)
+          break;
+        istring[m] = '\n';
+      }
+      instring.str(istring);
+    }
+    std::istream* input = !ifile.empty() ? &infile :
+      (!istring.empty() ? &instring : &std::cin);
+
+    std::ofstream outfile;
+    if (ofile == "-") ofile.clear();
+    if (!ofile.empty()) {
+      outfile.open(ofile.c_str());
+      if (!outfile.is_open()) {
+        std::cerr << "Cannot open " << ofile << " for writing\n";
+        return 1;
+      }
+    }
+    std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
+
+    const Geodesic geod(a, f);
+    const GeodesicExact geode(a, f);
+    GeodesicLine l;
+    GeodesicLineExact le;
+    if (linecalc) {
+      if (exact)
+        le = geode.Line(lat1, lon1, azi1);
+      else
+        l = geod.Line(lat1, lon1, azi1);
+    }
+
+    // Max precision = 10: 0.1 nm in distance, 10^-15 deg (= 0.11 nm),
+    // 10^-11 sec (= 0.3 nm).
+    prec = std::min(10 + Math::extradigits, std::max(0, prec));
+    std::string s;
+    int retval = 0;
+    while (std::getline(*input, s)) {
+      try {
+        std::string eol("\n");
+        if (!cdelim.empty()) {
+          std::string::size_type m = s.find(cdelim);
+          if (m != std::string::npos) {
+            eol = " " + s.substr(m) + "\n";
+            s = s.substr(0, m);
+          }
+        }
+        std::istringstream str(s);
+        if (inverse) {
+          std::string slat1, slon1, slat2, slon2;
+          if (!(str >> slat1 >> slon1 >> slat2 >> slon2))
+            throw GeographicErr("Incomplete input: " + s);
+          std::string strc;
+          if (str >> strc)
+            throw GeographicErr("Extraneous input: " + strc);
+          DMS::DecodeLatLon(slat1, slon1, lat1, lon1);
+          DMS::DecodeLatLon(slat2, slon2, lat2, lon2);
+          a12 = exact ?
+            geode.Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2,
+                          m12, M12, M21, S12) :
+            geod.Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2,
+                         m12, M12, M21, S12);
+          if (full)
+            *output << LatLonString(lat1, lon1, prec, dms, dmssep) << " ";
+          *output << AzimuthString(azi1, prec, dms, dmssep) << " ";
+          if (full)
+            *output << LatLonString(lat2, lon2, prec, dms, dmssep) << " ";
+          *output << AzimuthString(azi2 + azi2sense, prec, dms, dmssep) << " "
+                  << DistanceStrings(s12, a12, full, arcmode, prec, dms);
+          if (full)
+            *output << " " << Utility::str<real>(m12, prec)
+                    << " " << Utility::str<real>(M12, prec+7)
+                    << " " << Utility::str<real>(M21, prec+7)
+                    << " " << Utility::str<real>(S12, std::max(prec-7, 0));
+          *output << eol;
+        } else {
+          if (linecalc) {
+            std::string ss12;
+            if (!(str >> ss12))
+              throw GeographicErr("Incomplete input: " + s);
+            std::string strc;
+            if (str >> strc)
+              throw GeographicErr("Extraneous input: " + strc);
+            s12 = ReadDistance(ss12, arcmode);
+            if (arcmode)
+              exact ?
+                le.ArcPosition(s12, lat2, lon2, azi2, a12, m12, M12, M21, S12) :
+                l.ArcPosition(s12, lat2, lon2, azi2, a12, m12, M12, M21, S12);
+            else
+              a12 = exact ?
+                le.Position(s12, lat2, lon2, azi2, m12, M12, M21, S12) :
+                l.Position(s12, lat2, lon2, azi2, m12, M12, M21, S12);
+          } else {
+            std::string slat1, slon1, sazi1, ss12;
+            if (!(str >> slat1 >> slon1 >> sazi1 >> ss12))
+              throw GeographicErr("Incomplete input: " + s);
+            std::string strc;
+            if (str >> strc)
+              throw GeographicErr("Extraneous input: " + strc);
+            DMS::DecodeLatLon(slat1, slon1, lat1, lon1);
+            azi1 = DMS::DecodeAzimuth(sazi1);
+            s12 = ReadDistance(ss12, arcmode);
+            if (arcmode)
+              exact ?
+                geode.ArcDirect(lat1, lon1, azi1, s12, lat2, lon2, azi2, a12,
+                                m12, M12, M21, S12) :
+                geod.ArcDirect(lat1, lon1, azi1, s12, lat2, lon2, azi2, a12,
+                               m12, M12, M21, S12);
+            else
+              a12 = exact ?
+                geode.Direct(lat1, lon1, azi1, s12, lat2, lon2, azi2,
+                             m12, M12, M21, S12) :
+                geod.Direct(lat1, lon1, azi1, s12, lat2, lon2, azi2,
+                            m12, M12, M21, S12);
+          }
+          if (arcmode)
+            std::swap(s12, a12);
+          if (full)
+            *output << LatLonString(lat1, lon1, prec, dms, dmssep) << " "
+                    << AzimuthString(azi1, prec, dms, dmssep) << " ";
+          *output << LatLonString(lat2, lon2, prec, dms, dmssep) << " "
+                  << AzimuthString(azi2 + azi2sense, prec, dms, dmssep);
+          if (full)
+            *output << " "
+                    << DistanceStrings(s12, a12, full, arcmode, prec, dms)
+                    << " " << Utility::str<real>(m12, prec)
+                    << " " << Utility::str<real>(M12, prec+7)
+                    << " " << Utility::str<real>(M21, prec+7)
+                    << " " << Utility::str<real>(S12, std::max(prec-7, 0));
+          *output << eol;
+        }
+      }
+      catch (const std::exception& e) {
+        // Write error message cout so output lines match input lines
+        *output << "ERROR: " << e.what() << "\n";
+        retval = 1;
+      }
+    }
+    return retval;
+  }
+  catch (const std::exception& e) {
+    std::cerr << "Caught exception: " << e.what() << "\n";
+    return 1;
+  }
+  catch (...) {
+    std::cerr << "Caught unknown exception\n";
+    return 1;
+  }
+}
diff --git a/tools/GeodesicProj.cpp b/tools/GeodesicProj.cpp
index 368b539..f7493e2 100644
--- a/tools/GeodesicProj.cpp
+++ b/tools/GeodesicProj.cpp
@@ -32,6 +32,12 @@
 #include <GeographicLib/DMS.hpp>
 #include <GeographicLib/Utility.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions and potentially
+// uninitialized local variables
+#  pragma warning (disable: 4127 4701)
+#endif
+
 #include "GeodesicProj.usage"
 
 int main(int argc, char* argv[]) {
@@ -97,9 +103,8 @@ int main(int argc, char* argv[]) {
         cdelim = argv[m];
       } else if (arg == "--version") {
         std::cout
-          << argv[0]
-          << ": $Id: d6745c19af3da288a8f95b4c6a9003906409800c $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
         return 0;
       } else
         return usage(!(arg == "-h" || arg == "--help"), arg != "--help");
diff --git a/tools/GeoidEval.cpp b/tools/GeoidEval.cpp
index dd43946..8d92c6d 100644
--- a/tools/GeoidEval.cpp
+++ b/tools/GeoidEval.cpp
@@ -30,6 +30,12 @@
 #include <GeographicLib/Utility.hpp>
 #include <GeographicLib/GeoCoords.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions and potentially
+// uninitialized local variables
+#  pragma warning (disable: 4127 4701)
+#endif
+
 #include "GeoidEval.usage"
 
 int main(int argc, char* argv[]) {
@@ -119,9 +125,8 @@ int main(int argc, char* argv[]) {
         cdelim = argv[m];
       } else if (arg == "--version") {
         std::cout
-          << argv[0]
-          << ": $Id: 6db1ff0b8309a39d0d9b0250dd73be964c5efb7c $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
         return 0;
       } else {
         int retval = usage(!(arg == "-h" || arg == "--help"), arg != "--help");
diff --git a/tools/Gravity.cpp b/tools/Gravity.cpp
index 2321a67..f6e4799 100644
--- a/tools/Gravity.cpp
+++ b/tools/Gravity.cpp
@@ -2,7 +2,7 @@
  * \file Gravity.cpp
  * \brief Command line utility for evaluating gravity fields
  *
- * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2011-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  *
@@ -31,6 +31,12 @@
 #include <GeographicLib/DMS.hpp>
 #include <GeographicLib/Utility.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions and potentially
+// uninitialized local variables
+#  pragma warning (disable: 4127 4701)
+#endif
+
 #include "Gravity.usage"
 
 int main(int argc, char* argv[]) {
@@ -117,9 +123,8 @@ int main(int argc, char* argv[]) {
         cdelim = argv[m];
       } else if (arg == "--version") {
         std::cout
-          << argv[0]
-          << ": $Id: c87c647c3e973929010cdb2fd5d1eaa6aa739eca $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
         return 0;
       } else {
         int retval = usage(!(arg == "-h" || arg == "--help"), arg != "--help");
@@ -223,8 +228,9 @@ int main(int argc, char* argv[]) {
             lon = DMS::Decode(strb, ind);
             if (ind == DMS::LATITUDE)
               throw GeographicErr("Bad hemisphere letter on " + strb);
-            if (lon < -180 || lon > 360)
-              throw GeographicErr("Longitude " + strb + "not in [-180d, 360d]");
+            if (lon < -540 || lon >= 540)
+              throw GeographicErr("Longitude " + strb +
+                                  " not in [-540d, 540d)");
           } else {
             if (!(str >> stra >> strb))
               throw GeographicErr("Incomplete input: " + s);
diff --git a/tools/MagneticField.cpp b/tools/MagneticField.cpp
index 94cee09..d5e21ac 100644
--- a/tools/MagneticField.cpp
+++ b/tools/MagneticField.cpp
@@ -2,7 +2,7 @@
  * \file MagneticField.cpp
  * \brief Command line utility for evaluating magnetic fields
  *
- * Copyright (c) Charles Karney (2011, 2012) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2011-2012) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  *
@@ -30,6 +30,11 @@
 #include <GeographicLib/DMS.hpp>
 #include <GeographicLib/Utility.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 #include "MagneticField.usage"
 
 int main(int argc, char* argv[]) {
@@ -139,9 +144,8 @@ int main(int argc, char* argv[]) {
         cdelim = argv[m];
       } else if (arg == "--version") {
         std::cout
-          << argv[0]
-          << ": $Id: cd55a73582dee908c12a23bee33362e7607268af $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
         return 0;
       } else {
         int retval = usage(!(arg == "-h" || arg == "--help"), arg != "--help");
@@ -272,8 +276,9 @@ int main(int argc, char* argv[]) {
             lon = DMS::Decode(strb, ind);
             if (ind == DMS::LATITUDE)
               throw GeographicErr("Bad hemisphere letter on " + strb);
-            if (lon < -180 || lon > 360)
-              throw GeographicErr("Longitude " + strb + "not in [-180d, 360d]");
+            if (lon < -540 || lon >= 540)
+              throw GeographicErr("Longitude " + strb +
+                                  " not in [-540d, 540d)");
           } else {
             if (!(str >> stra >> strb))
               throw GeographicErr("Incomplete input: " + s);
diff --git a/tools/Makefile.am b/tools/Makefile.am
index f1d639a..2fbf610 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -2,7 +2,6 @@
 # Makefile.am
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
-# $Id: c212f6390b52c0be8aaa7ceba4ccabefe63fb1fd $
 
 AM_CPPFLAGS = -Wall -funroll-loops -finline-functions -fomit-frame-pointer
 INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
@@ -14,7 +13,7 @@ DEPS = $(top_builddir)/src/libGeographic.la
 bin_PROGRAMS = CartConvert \
 	ConicProj \
 	GeoConvert \
-	Geod \
+	GeodSolve \
 	GeodesicProj \
 	GeoidEval \
 	Gravity \
@@ -49,13 +48,15 @@ GeoConvert_SOURCES = GeoConvert.cpp \
 	../include/GeographicLib/Math.hpp \
 	../include/GeographicLib/UTMUPS.hpp \
 	../include/GeographicLib/Utility.hpp
-Geod_SOURCES = Geod.cpp \
-	../man/Geod.usage \
+GeodSolve_SOURCES = GeodSolve.cpp \
+	../man/GeodSolve.usage \
 	../include/GeographicLib/Config.h \
 	../include/GeographicLib/Constants.hpp \
 	../include/GeographicLib/DMS.hpp \
 	../include/GeographicLib/Geodesic.hpp \
+	../include/GeographicLib/GeodesicExact.hpp \
 	../include/GeographicLib/GeodesicLine.hpp \
+	../include/GeographicLib/GeodesicLineExact.hpp \
 	../include/GeographicLib/Math.hpp \
 	../include/GeographicLib/Utility.hpp
 GeodesicProj_SOURCES = GeodesicProj.cpp \
@@ -137,13 +138,13 @@ sbin_SCRIPTS = geographiclib-get-geoids \
 
 geographiclib_data=$(datadir)/GeographicLib
 geographiclib-get-geoids: geographiclib-get-geoids.sh
-	sed -e "s%@DEFAULTDIR@%$(geographiclib_data)%" $< > $@
+	sed -e "s%@GEOGRAPHICLIB_DATA@%$(geographiclib_data)%" $< > $@
 	chmod +x $@
 geographiclib-get-gravity: geographiclib-get-gravity.sh
-	sed -e "s%@DEFAULTDIR@%$(geographiclib_data)%" $< > $@
+	sed -e "s%@GEOGRAPHICLIB_DATA@%$(geographiclib_data)%" $< > $@
 	chmod +x $@
 geographiclib-get-magnetic: geographiclib-get-magnetic.sh
-	sed -e "s%@DEFAULTDIR@%$(geographiclib_data)%" $< > $@
+	sed -e "s%@GEOGRAPHICLIB_DATA@%$(geographiclib_data)%" $< > $@
 	chmod +x $@
 
 CLEANFILES = $(sbin_SCRIPTS)
diff --git a/tools/Makefile.in b/tools/Makefile.in
index d16498c..187b449 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -19,10 +18,26 @@
 # Makefile.am
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
-# $Id: c212f6390b52c0be8aaa7ceba4ccabefe63fb1fd $
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -43,11 +58,12 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 bin_PROGRAMS = CartConvert$(EXEEXT) ConicProj$(EXEEXT) \
-	GeoConvert$(EXEEXT) Geod$(EXEEXT) GeodesicProj$(EXEEXT) \
+	GeoConvert$(EXEEXT) GeodSolve$(EXEEXT) GeodesicProj$(EXEEXT) \
 	GeoidEval$(EXEEXT) Gravity$(EXEEXT) MagneticField$(EXEEXT) \
 	Planimeter$(EXEEXT) TransverseMercatorProj$(EXEEXT)
 subdir = tools
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -73,10 +89,10 @@ am_GeoConvert_OBJECTS = GeoConvert.$(OBJEXT)
 GeoConvert_OBJECTS = $(am_GeoConvert_OBJECTS)
 GeoConvert_LDADD = $(LDADD)
 GeoConvert_DEPENDENCIES = $(top_builddir)/src/libGeographic.la
-am_Geod_OBJECTS = Geod.$(OBJEXT)
-Geod_OBJECTS = $(am_Geod_OBJECTS)
-Geod_LDADD = $(LDADD)
-Geod_DEPENDENCIES = $(top_builddir)/src/libGeographic.la
+am_GeodSolve_OBJECTS = GeodSolve.$(OBJEXT)
+GeodSolve_OBJECTS = $(am_GeodSolve_OBJECTS)
+GeodSolve_LDADD = $(LDADD)
+GeodSolve_DEPENDENCIES = $(top_builddir)/src/libGeographic.la
 am_GeodesicProj_OBJECTS = GeodesicProj.$(OBJEXT)
 GeodesicProj_OBJECTS = $(am_GeodesicProj_OBJECTS)
 GeodesicProj_LDADD = $(LDADD)
@@ -123,6 +139,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 SCRIPTS = $(sbin_SCRIPTS)
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include/GeographicLib
 depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -147,15 +169,20 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
 SOURCES = $(CartConvert_SOURCES) $(ConicProj_SOURCES) \
-	$(GeoConvert_SOURCES) $(Geod_SOURCES) $(GeodesicProj_SOURCES) \
-	$(GeoidEval_SOURCES) $(Gravity_SOURCES) \
-	$(MagneticField_SOURCES) $(Planimeter_SOURCES) \
-	$(TransverseMercatorProj_SOURCES)
+	$(GeoConvert_SOURCES) $(GeodSolve_SOURCES) \
+	$(GeodesicProj_SOURCES) $(GeoidEval_SOURCES) \
+	$(Gravity_SOURCES) $(MagneticField_SOURCES) \
+	$(Planimeter_SOURCES) $(TransverseMercatorProj_SOURCES)
 DIST_SOURCES = $(CartConvert_SOURCES) $(ConicProj_SOURCES) \
-	$(GeoConvert_SOURCES) $(Geod_SOURCES) $(GeodesicProj_SOURCES) \
-	$(GeoidEval_SOURCES) $(Gravity_SOURCES) \
-	$(MagneticField_SOURCES) $(Planimeter_SOURCES) \
-	$(TransverseMercatorProj_SOURCES)
+	$(GeoConvert_SOURCES) $(GeodSolve_SOURCES) \
+	$(GeodesicProj_SOURCES) $(GeoidEval_SOURCES) \
+	$(Gravity_SOURCES) $(MagneticField_SOURCES) \
+	$(Planimeter_SOURCES) $(TransverseMercatorProj_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -169,6 +196,7 @@ AWK = @AWK@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+COL = @COL@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -179,6 +207,7 @@ CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
 ECHO_C = @ECHO_C@
@@ -187,6 +216,9 @@ ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GEOGRAPHICLIB_VERSION_MAJOR = @GEOGRAPHICLIB_VERSION_MAJOR@
+GEOGRAPHICLIB_VERSION_MINOR = @GEOGRAPHICLIB_VERSION_MINOR@
+GEOGRAPHICLIB_VERSION_PATCH = @GEOGRAPHICLIB_VERSION_PATCH@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -222,6 +254,8 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
 POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
@@ -322,13 +356,15 @@ GeoConvert_SOURCES = GeoConvert.cpp \
 	../include/GeographicLib/UTMUPS.hpp \
 	../include/GeographicLib/Utility.hpp
 
-Geod_SOURCES = Geod.cpp \
-	../man/Geod.usage \
+GeodSolve_SOURCES = GeodSolve.cpp \
+	../man/GeodSolve.usage \
 	../include/GeographicLib/Config.h \
 	../include/GeographicLib/Constants.hpp \
 	../include/GeographicLib/DMS.hpp \
 	../include/GeographicLib/Geodesic.hpp \
+	../include/GeographicLib/GeodesicExact.hpp \
 	../include/GeographicLib/GeodesicLine.hpp \
+	../include/GeographicLib/GeodesicLineExact.hpp \
 	../include/GeographicLib/Math.hpp \
 	../include/GeographicLib/Utility.hpp
 
@@ -456,8 +492,11 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do echo "$$p $$p"; done | \
 	sed 's/$(EXEEXT)$$//' | \
 	while read p p1; do if test -f $$p || test -f $$p1; \
@@ -497,40 +536,43 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-CartConvert$(EXEEXT): $(CartConvert_OBJECTS) $(CartConvert_DEPENDENCIES) 
+CartConvert$(EXEEXT): $(CartConvert_OBJECTS) $(CartConvert_DEPENDENCIES) $(EXTRA_CartConvert_DEPENDENCIES) 
 	@rm -f CartConvert$(EXEEXT)
 	$(CXXLINK) $(CartConvert_OBJECTS) $(CartConvert_LDADD) $(LIBS)
-ConicProj$(EXEEXT): $(ConicProj_OBJECTS) $(ConicProj_DEPENDENCIES) 
+ConicProj$(EXEEXT): $(ConicProj_OBJECTS) $(ConicProj_DEPENDENCIES) $(EXTRA_ConicProj_DEPENDENCIES) 
 	@rm -f ConicProj$(EXEEXT)
 	$(CXXLINK) $(ConicProj_OBJECTS) $(ConicProj_LDADD) $(LIBS)
-GeoConvert$(EXEEXT): $(GeoConvert_OBJECTS) $(GeoConvert_DEPENDENCIES) 
+GeoConvert$(EXEEXT): $(GeoConvert_OBJECTS) $(GeoConvert_DEPENDENCIES) $(EXTRA_GeoConvert_DEPENDENCIES) 
 	@rm -f GeoConvert$(EXEEXT)
 	$(CXXLINK) $(GeoConvert_OBJECTS) $(GeoConvert_LDADD) $(LIBS)
-Geod$(EXEEXT): $(Geod_OBJECTS) $(Geod_DEPENDENCIES) 
-	@rm -f Geod$(EXEEXT)
-	$(CXXLINK) $(Geod_OBJECTS) $(Geod_LDADD) $(LIBS)
-GeodesicProj$(EXEEXT): $(GeodesicProj_OBJECTS) $(GeodesicProj_DEPENDENCIES) 
+GeodSolve$(EXEEXT): $(GeodSolve_OBJECTS) $(GeodSolve_DEPENDENCIES) $(EXTRA_GeodSolve_DEPENDENCIES) 
+	@rm -f GeodSolve$(EXEEXT)
+	$(CXXLINK) $(GeodSolve_OBJECTS) $(GeodSolve_LDADD) $(LIBS)
+GeodesicProj$(EXEEXT): $(GeodesicProj_OBJECTS) $(GeodesicProj_DEPENDENCIES) $(EXTRA_GeodesicProj_DEPENDENCIES) 
 	@rm -f GeodesicProj$(EXEEXT)
 	$(CXXLINK) $(GeodesicProj_OBJECTS) $(GeodesicProj_LDADD) $(LIBS)
-GeoidEval$(EXEEXT): $(GeoidEval_OBJECTS) $(GeoidEval_DEPENDENCIES) 
+GeoidEval$(EXEEXT): $(GeoidEval_OBJECTS) $(GeoidEval_DEPENDENCIES) $(EXTRA_GeoidEval_DEPENDENCIES) 
 	@rm -f GeoidEval$(EXEEXT)
 	$(CXXLINK) $(GeoidEval_OBJECTS) $(GeoidEval_LDADD) $(LIBS)
-Gravity$(EXEEXT): $(Gravity_OBJECTS) $(Gravity_DEPENDENCIES) 
+Gravity$(EXEEXT): $(Gravity_OBJECTS) $(Gravity_DEPENDENCIES) $(EXTRA_Gravity_DEPENDENCIES) 
 	@rm -f Gravity$(EXEEXT)
 	$(CXXLINK) $(Gravity_OBJECTS) $(Gravity_LDADD) $(LIBS)
-MagneticField$(EXEEXT): $(MagneticField_OBJECTS) $(MagneticField_DEPENDENCIES) 
+MagneticField$(EXEEXT): $(MagneticField_OBJECTS) $(MagneticField_DEPENDENCIES) $(EXTRA_MagneticField_DEPENDENCIES) 
 	@rm -f MagneticField$(EXEEXT)
 	$(CXXLINK) $(MagneticField_OBJECTS) $(MagneticField_LDADD) $(LIBS)
-Planimeter$(EXEEXT): $(Planimeter_OBJECTS) $(Planimeter_DEPENDENCIES) 
+Planimeter$(EXEEXT): $(Planimeter_OBJECTS) $(Planimeter_DEPENDENCIES) $(EXTRA_Planimeter_DEPENDENCIES) 
 	@rm -f Planimeter$(EXEEXT)
 	$(CXXLINK) $(Planimeter_OBJECTS) $(Planimeter_LDADD) $(LIBS)
-TransverseMercatorProj$(EXEEXT): $(TransverseMercatorProj_OBJECTS) $(TransverseMercatorProj_DEPENDENCIES) 
+TransverseMercatorProj$(EXEEXT): $(TransverseMercatorProj_OBJECTS) $(TransverseMercatorProj_DEPENDENCIES) $(EXTRA_TransverseMercatorProj_DEPENDENCIES) 
 	@rm -f TransverseMercatorProj$(EXEEXT)
 	$(CXXLINK) $(TransverseMercatorProj_OBJECTS) $(TransverseMercatorProj_LDADD) $(LIBS)
 install-sbinSCRIPTS: $(sbin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
 	@list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -558,9 +600,7 @@ uninstall-sbinSCRIPTS:
 	@list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(sbindir)" && rm -f $$files
+	dir='$(DESTDIR)$(sbindir)'; $(am__uninstall_files_from_dir)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -571,7 +611,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CartConvert.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ConicProj.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeoConvert.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Geod.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeodSolve.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeodesicProj.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeoidEval.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Gravity.Po at am__quote@
@@ -655,6 +695,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -705,10 +759,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -794,27 +853,28 @@ uninstall-am: uninstall-binPROGRAMS uninstall-sbinSCRIPTS
 .MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-	clean-generic clean-libtool ctags distclean distclean-compile \
-	distclean-generic distclean-libtool distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-binPROGRAMS install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-sbinSCRIPTS install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
-	uninstall-am uninstall-binPROGRAMS uninstall-sbinSCRIPTS
+	clean-generic clean-libtool cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-binPROGRAMS install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-sbinSCRIPTS install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-sbinSCRIPTS
 
 geographiclib-get-geoids: geographiclib-get-geoids.sh
-	sed -e "s%@DEFAULTDIR@%$(geographiclib_data)%" $< > $@
+	sed -e "s%@GEOGRAPHICLIB_DATA@%$(geographiclib_data)%" $< > $@
 	chmod +x $@
 geographiclib-get-gravity: geographiclib-get-gravity.sh
-	sed -e "s%@DEFAULTDIR@%$(geographiclib_data)%" $< > $@
+	sed -e "s%@GEOGRAPHICLIB_DATA@%$(geographiclib_data)%" $< > $@
 	chmod +x $@
 geographiclib-get-magnetic: geographiclib-get-magnetic.sh
-	sed -e "s%@DEFAULTDIR@%$(geographiclib_data)%" $< > $@
+	sed -e "s%@GEOGRAPHICLIB_DATA@%$(geographiclib_data)%" $< > $@
 	chmod +x $@
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/tools/Makefile.mk b/tools/Makefile.mk
index b97427e..42ddc12 100644
--- a/tools/Makefile.mk
+++ b/tools/Makefile.mk
@@ -1,15 +1,13 @@
-# $Id: f2db3b0aaaea655853962095ae51f7c160a211ec $
-
-PROGRAMS = GeoConvert \
-	TransverseMercatorProj \
-	CartConvert \
-	Geod \
+PROGRAMS = CartConvert \
+	ConicProj \
+	GeoConvert \
+	GeodSolve \
 	GeodesicProj \
 	GeoidEval \
 	Gravity \
 	MagneticField \
 	Planimeter \
-	ConicProj
+	TransverseMercatorProj
 SCRIPTS = geographiclib-get-geoids \
 	geographiclib-get-gravity \
 	geographiclib-get-magnetic
@@ -46,7 +44,7 @@ clean:
 GeoConvert: GeoConvert.o
 TransverseMercatorProj: TransverseMercatorProj.o
 CartConvert: CartConvert.o
-Geod: Geod.o
+GeodSolve: GeodSolve.o
 GeodesicProj: GeodesicProj.o
 GeoidEval: GeoidEval.o
 Gravity: Gravity.o
@@ -60,8 +58,9 @@ ConicProj.o: ConicProj.usage Config.h AlbersEqualArea.hpp Constants.hpp \
 	DMS.hpp LambertConformalConic.hpp Math.hpp Utility.hpp
 GeoConvert.o: GeoConvert.usage Config.h Constants.hpp DMS.hpp GeoCoords.hpp \
 	Math.hpp UTMUPS.hpp Utility.hpp
-Geod.o: Geod.usage Config.h Constants.hpp DMS.hpp Geodesic.hpp \
-	GeodesicLine.hpp Math.hpp Utility.hpp
+GeodSolve.o: GeodSolve.usage Config.h Constants.hpp DMS.hpp Geodesic.hpp \
+	GeodesicExact.hpp GeodesicLine.hpp GeodesicLineExact.hpp Math.hpp \
+	Utility.hpp
 GeodesicProj.o: GeodesicProj.usage Config.h AzimuthalEquidistant.hpp \
 	CassiniSoldner.hpp Constants.hpp DMS.hpp Geodesic.hpp GeodesicLine.hpp \
 	Gnomonic.hpp Math.hpp Utility.hpp
@@ -82,7 +81,7 @@ TransverseMercatorProj.o: TransverseMercatorProj.usage Config.h Constants.hpp \
 	TransverseMercatorExact.hpp Utility.hpp
 
 %: %.sh
-	sed -e "s%@DEFAULTDIR@%$(GEOGRAPHICLIB_DATA)%" $< > $@
+	sed -e "s%@GEOGRAPHICLIB_DATA@%$(GEOGRAPHICLIB_DATA)%" $< > $@
 	chmod +x $@
 
 INSTALL = install -b
diff --git a/tools/Planimeter.cpp b/tools/Planimeter.cpp
index 54ab7bc..d76f294 100644
--- a/tools/Planimeter.cpp
+++ b/tools/Planimeter.cpp
@@ -32,6 +32,11 @@
 #include <GeographicLib/Utility.hpp>
 #include <GeographicLib/GeoCoords.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 #include "Planimeter.usage"
 
 int main(int argc, char* argv[]) {
@@ -85,9 +90,8 @@ int main(int argc, char* argv[]) {
         cdelim = argv[m];
       } else if (arg == "--version") {
         std::cout
-          << argv[0]
-          << ": $Id: dbb8a9a0d79f172256044e72f65ebc667801eeac $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
         return 0;
       } else
         return usage(!(arg == "-h" || arg == "--help"), arg != "--help");
@@ -161,9 +165,9 @@ int main(int argc, char* argv[]) {
         num = poly.Compute(reverse, sign, perimeter, area);
         if (num > 0) {
           *output << num << " "
-                  << Utility::str<real>(perimeter, 8);
+                  << Utility::str<real>(perimeter, 8 + Math::extradigits+1);
           if (!polyline)
-            *output << " " << Utility::str<real>(area, 3);
+            *output << " " << Utility::str<real>(area, 3  + Math::extradigits+1);
           *output << eol;
         }
         poly.Clear();
@@ -174,9 +178,9 @@ int main(int argc, char* argv[]) {
     num = poly.Compute(reverse, sign, perimeter, area);
     if (num > 0) {
       *output << num << " "
-              << Utility::str<real>(perimeter, 8);
+              << Utility::str<real>(perimeter, 8 + Math::extradigits+1);
       if (!polyline)
-        *output << " " << Utility::str<real>(area, 3);
+        *output << " " << Utility::str<real>(area, 3 + Math::extradigits+1);
       *output << eol;
     }
     poly.Clear();
diff --git a/tools/TransverseMercatorProj.cpp b/tools/TransverseMercatorProj.cpp
index 0368bd0..39831c3 100644
--- a/tools/TransverseMercatorProj.cpp
+++ b/tools/TransverseMercatorProj.cpp
@@ -29,6 +29,12 @@
 #include <GeographicLib/DMS.hpp>
 #include <GeographicLib/Utility.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions and potentially
+// uninitialized local variables
+#  pragma warning (disable: 4127 4701)
+#endif
+
 #include "TransverseMercatorProj.usage"
 
 int main(int argc, char* argv[]) {
@@ -63,9 +69,9 @@ int main(int argc, char* argv[]) {
           lon0 = DMS::Decode(std::string(argv[m]), ind);
           if (ind == DMS::LATITUDE)
             throw GeographicErr("Bad hemisphere");
-          if (!(lon0 >= -180 && lon0 <= 360))
+          if (!(lon0 >= -540 && lon0 < 540))
             throw GeographicErr("Bad longitude");
-          if (lon0 >= 180) lon0 -= 360;
+          lon0 = Math::AngNormalize(lon0);
         }
         catch (const std::exception& e) {
           std::cerr << "Error decoding argument of " << arg << ": "
@@ -114,9 +120,8 @@ int main(int argc, char* argv[]) {
         cdelim = argv[m];
       } else if (arg == "--version") {
         std::cout
-          << argv[0]
-          << ": $Id: dd2a53288a82171129091d16bec6d1457568eb4d $\n"
-          << "GeographicLib version " << GEOGRAPHICLIB_VERSION_STRING << "\n";
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
         return 0;
       } else
         return usage(!(arg == "-h" || arg == "--help"), arg != "--help");
diff --git a/tools/geographiclib-get-geoids.sh b/tools/geographiclib-get-geoids.sh
index 6bf838b..619a4cc 100644
--- a/tools/geographiclib-get-geoids.sh
+++ b/tools/geographiclib-get-geoids.sh
@@ -4,21 +4,25 @@
 # modeled on a similar script geographiclib-datasets-download by
 # Francesco P. Lovergine <frankie at debian.org>
 #
-# Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
-# under the MIT/X11 License.  For more information, see
+# Copyright (c) Charles Karney (2011-2013) <charles at karney.com> and
+# licensed under the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: 292585f16e1696fce69b211553723e5c0d03ac4b $
 
-DEFAULTDIR="@DEFAULTDIR@"
+DEFAULTDIR="@GEOGRAPHICLIB_DATA@"
+SUBDIR=geoids
+NAME=geoid
+MODEL=geoid
+CLASS=Geoid
+TOOL=GeoidEval
+EXT=pgm
 usage() {
     cat <<EOF
-usage: $0 [-p parentdir] [-d] [-h] geoid...
+usage: $0 [-p parentdir] [-d] [-h] $MODEL...
 
 This program downloads and installs the datasets used by the
-GeographicLib::Geoid class and the GeoidEval tool to compute geoid
+GeographicLib::$CLASS class and the $TOOL tool to compute geoid
 heights.  These datasets are NGA earth gravity models evaluated on a
-rectangular grid in latitude and longitude.  geoid is one of more of the
+rectangular grid in latitude and longitude.  $MODEL is one of more of the
 names from this table:
 
                                   size (MB)
@@ -34,7 +38,7 @@ names from this table:
 The size columns give the download and installed sizes of the datasets.
 In addition you can specify
 
-  all = all of the datasets
+  all = all of the supported geoids
   minimal = emg96-5
   best = egm84-15 egm96-5 egm2008-1 (the highest resolution for each
          earth gravity model)
@@ -44,26 +48,31 @@ In addition you can specify
 If no name is specified then minimal is assumed.
 
 -p parentdir (default $DEFAULTDIR) specifies where the
-datasets should be stored.  The "Default geoid path" listed when running
+datasets should be stored.  The "Default $NAME path" listed when running
+
+  $TOOL -h
 
-  GeoidEval -h
+should be parentdir/$SUBDIR.  This script must be run by a user with
+write access to this directory.
 
-should be parentdir/geoids.  This script must
-be run by a user with write access to this directory.
+Normally only datasets which are not already in parentdir are
+downloaded.  You can force the download and reinstallation with -f.
 
 If -d is provided, the temporary directory which holds the downloads,
-${TMPDIR:-/tmp}/geoid-XXXXXXXX, will be saved.  -h prints this help.
+\$TMPDIR/$NAME-XXXXXXXX or ${TMPDIR:-/tmp}/$NAME-XXXXXXXX,
+will be saved.  -h prints this help.
 
-For more information on the geoid datasets, visit
+For more information on the $NAME datasets, visit
 
-  http://geographiclib.sourceforge.net/html/geoid.html
+  http://geographiclib.sourceforge.net/html/$NAME.html
 
 EOF
 }
 
 PARENTDIR="$DEFAULTDIR"
 DEBUG=
-while getopts hp:d c; do
+FORCE=
+while getopts hp:fd c; do
     case $c in
         h )
             usage;
@@ -71,6 +80,8 @@ while getopts hp:d c; do
             ;;
         p ) PARENTDIR="$OPTARG"
             ;;
+	f ) FORCE=y
+	    ;;
         d ) DEBUG=y
             ;;
         * )
@@ -81,9 +92,9 @@ while getopts hp:d c; do
 done
 shift `expr $OPTIND - 1`
 
-test -d "$PARENTDIR"/geoids || mkdir -p "$PARENTDIR"/geoids 2> /dev/null
-if test ! -d "$PARENTDIR"/geoids; then
-    echo Cannot create directory $PARENTDIR/geoids 1>&2
+test -d "$PARENTDIR"/$SUBDIR || mkdir -p "$PARENTDIR"/$SUBDIR 2> /dev/null
+if test ! -d "$PARENTDIR"/$SUBDIR; then
+    echo Cannot create directory $PARENTDIR/$SUBDIR 1>&2
     exit 1
 fi
 
@@ -92,18 +103,18 @@ if test -z "$DEBUG"; then
 trap 'trap "" 0; test "$TEMP" && rm -rf "$TEMP"; exit 1' 1 2 3 9 15
 trap            'test "$TEMP" && rm -rf "$TEMP"'            0
 fi
-TEMP=`mktemp --tmpdir --quiet --directory geoid-XXXXXXXX`
+TEMP=`mktemp --tmpdir --quiet --directory $NAME-XXXXXXXX`
 
 if test -z "$TEMP" -o ! -d "$TEMP"; then
     echo Cannot create temporary directory 1>&2
     exit 1
 fi
 
-WRITETEST="$PARENTDIR"/geoids/write-test-`basename $TEMP`
+WRITETEST="$PARENTDIR"/$SUBDIR/write-test-`basename $TEMP`
 if touch "$WRITETEST" 2> /dev/null; then
     rm -f "$WRITETEST"
 else
-    echo Cannot write in directory $PARENTDIR/geoids 1>&2
+    echo Cannot write in directory $PARENTDIR/$SUBDIR 1>&2
     exit 1
 fi
 
@@ -147,7 +158,7 @@ egm84-15
 EOF
 		;;
 	    * )
-		echo Unknown geoid $1 1>&2
+		echo Unknown $MODEL $1 1>&2
 		exit 1
 		;;
 	esac
@@ -158,21 +169,37 @@ done > $TEMP/list
 sort -u $TEMP/list > $TEMP/todo
 
 while read file; do
+    if test -z "$FORCE" -a -s $PARENTDIR/$SUBDIR/$file.$EXT; then
+	echo $PARENTDIR/$SUBDIR/$file.$EXT already installed, skipping $file...
+	echo $file >> $TEMP/skip
+	continue
+    fi
     echo download $file.tar.bz2 ...
-    URL="http://downloads.sourceforge.net/project/geographiclib/geoids-distrib/$file.tar.bz2?use_mirror=autoselect"
+    echo $file >> $TEMP/download
+    URL="http://downloads.sourceforge.net/project/geographiclib/$SUBDIR-distrib/$file.tar.bz2?use_mirror=autoselect"
     ARCHIVE=$TEMP/$file.tar.bz2
     wget -O$ARCHIVE $URL
     echo unpack $file.tar.bz2 ...
     tar vxojf $ARCHIVE -C $PARENTDIR
-    echo geoid $file installed.
+    echo $MODEL $file installed.
 done < $TEMP/todo
 
 if test "$DEBUG"; then
     echo Saving temporary directory $TEMP
 fi
-cat <<EOF
-
-Geoid datasets `tr '\n' ' ' < $TEMP/todo`
-downloaded and installed in $PARENTDIR/geoids.
-
+echo
+if test -s $TEMP/download; then
+    n=`wc -l < $TEMP/download`
+    s=; test $n -gt 1 && s=s
+    cat <<EOF
+Installed $NAME dataset$s `tr '\n' ' ' < $TEMP/download`in $PARENTDIR/$SUBDIR.
 EOF
+fi
+if test -s $TEMP/skip; then
+    n=`wc -l < $TEMP/skip`
+    s=; test $n -gt 1 && s=s
+    cat <<EOF
+Skipped $NAME dataset$s `tr '\n' ' ' < $TEMP/skip | sed 's/ $//'`.
+EOF
+fi
+echo
diff --git a/tools/geographiclib-get-gravity.sh b/tools/geographiclib-get-gravity.sh
index 996e81e..6db0a27 100644
--- a/tools/geographiclib-get-gravity.sh
+++ b/tools/geographiclib-get-gravity.sh
@@ -5,27 +5,31 @@
 # Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
 # under the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: c51df2bd26c5734d35de1fc47d60c433680c6721 $
 
-DEFAULTDIR="@DEFAULTDIR@"
+DEFAULTDIR="@GEOGRAPHICLIB_DATA@"
+SUBDIR=gravity
+NAME=gravity
+MODEL=gravitymodel
+CLASS=GravityModel
+TOOL=Gravity
+EXT=egm.cof
 usage() {
     cat <<EOF
-usage: $0 [-p parentdir] [-d] [-h] gravitymodel...
+usage: $0 [-p parentdir] [-d] [-h] $MODEL...
 
-This program downloads and installs the gravity models used by the
-GeographicLib::GravityModel class and the Gravity tool to compute
-gravity fields.  gravitymodel is one of more of the names from this
+This program downloads and installs the datasets used by the
+GeographicLib::$CLASS class and the $TOOL tool to compute
+gravity fields.  $MODEL is one of more of the names from this
 table:
 
                        size (kB)
   name     degree    tar.bz2  disk
-  egm84      18       27      26   
-  egm96      360     2100    2100 
+  egm84      18       27      26
+  egm96      360     2100    2100
   egm2008   2190    76000   75000
-  wgs84      20        1       1    
+  wgs84      20        1       1
 
-The size columns give the download and installed sizes of the models.
+The size columns give the download and installed sizes of the datasets.
 In addition you can specify
 
   all = all of the supported gravity models
@@ -34,26 +38,31 @@ In addition you can specify
 If no name is specified then minimal is assumed.
 
 -p parentdir (default $DEFAULTDIR) specifies where the
-datasets should be stored.  The "Default gravity path" listed when running
+datasets should be stored.  The "Default $NAME path" listed when running
 
-  Gravity -h
+  $TOOL -h
 
-should be parentdir/gravity.  This script must be run by a user with
+should be parentdir/$SUBDIR.  This script must be run by a user with
 write access to this directory.
 
+Normally only datasets which are not already in parentdir are
+downloaded.  You can force the download and reinstallation with -f.
+
 If -d is provided, the temporary directory which holds the downloads,
-${TMPDIR:-/tmp}/gravity-XXXXXXXX, will be saved.  -h prints this help.
+\$TMPDIR/$NAME-XXXXXXXX or ${TMPDIR:-/tmp}/$NAME-XXXXXXXX,
+will be saved.  -h prints this help.
 
-For more information on the gravity models, visit
+For more information on the $NAME datasets, visit
 
-  http://geographiclib.sourceforge.net/html/gravity.html
+  http://geographiclib.sourceforge.net/html/$NAME.html
 
 EOF
 }
 
 PARENTDIR="$DEFAULTDIR"
 DEBUG=
-while getopts hp:d c; do
+FORCE=
+while getopts hp:fd c; do
     case $c in
         h )
             usage;
@@ -61,6 +70,8 @@ while getopts hp:d c; do
             ;;
         p ) PARENTDIR="$OPTARG"
             ;;
+	f ) FORCE=y
+	    ;;
         d ) DEBUG=y
             ;;
         * )
@@ -71,9 +82,9 @@ while getopts hp:d c; do
 done
 shift `expr $OPTIND - 1`
 
-test -d "$PARENTDIR"/gravity || mkdir -p "$PARENTDIR"/gravity 2> /dev/null
-if test ! -d "$PARENTDIR"/gravity; then
-    echo Cannot create directory $PARENTDIR/gravity 1>&2
+test -d "$PARENTDIR"/$SUBDIR || mkdir -p "$PARENTDIR"/$SUBDIR 2> /dev/null
+if test ! -d "$PARENTDIR"/$SUBDIR; then
+    echo Cannot create directory $PARENTDIR/$SUBDIR 1>&2
     exit 1
 fi
 
@@ -82,18 +93,18 @@ if test -z "$DEBUG"; then
 trap 'trap "" 0; test "$TEMP" && rm -rf "$TEMP"; exit 1' 1 2 3 9 15
 trap            'test "$TEMP" && rm -rf "$TEMP"'            0
 fi
-TEMP=`mktemp --tmpdir --quiet --directory gravity-XXXXXXXX`
+TEMP=`mktemp --tmpdir --quiet --directory $NAME-XXXXXXXX`
 
 if test -z "$TEMP" -o ! -d "$TEMP"; then
     echo Cannot create temporary directory 1>&2
     exit 1
 fi
 
-WRITETEST="$PARENTDIR"/gravity/write-test-`basename $TEMP`
+WRITETEST="$PARENTDIR"/$SUBDIR/write-test-`basename $TEMP`
 if touch "$WRITETEST" 2> /dev/null; then
     rm -f "$WRITETEST"
 else
-    echo Cannot write in directory $PARENTDIR/gravity 1>&2
+    echo Cannot write in directory $PARENTDIR/$SUBDIR 1>&2
     exit 1
 fi
 
@@ -120,7 +131,7 @@ while test $# -gt 0; do
 		echo egm96; echo wgs84
 		;;
 	    * )
-		echo Unknown gravity model $1 1>&2
+		echo Unknown $MODEL $1 1>&2
 		exit 1
 		;;
 	esac
@@ -131,21 +142,37 @@ done > $TEMP/list
 sort -u $TEMP/list > $TEMP/todo
 
 while read file; do
+    if test -z "$FORCE" -a -s $PARENTDIR/$SUBDIR/$file.$EXT; then
+	echo $PARENTDIR/$SUBDIR/$file.$EXT already installed, skipping $file...
+	echo $file >> $TEMP/skip
+	continue
+    fi
     echo download $file.tar.bz2 ...
-    URL="http://downloads.sourceforge.net/project/geographiclib/gravity-distrib/$file.tar.bz2?use_mirror=autoselect"
+    echo $file >> $TEMP/download
+    URL="http://downloads.sourceforge.net/project/geographiclib/$SUBDIR-distrib/$file.tar.bz2?use_mirror=autoselect"
     ARCHIVE=$TEMP/$file.tar.bz2
     wget -O$ARCHIVE $URL
     echo unpack $file.tar.bz2 ...
     tar vxojf $ARCHIVE -C $PARENTDIR
-    echo gravity $file installed.
+    echo $MODEL $file installed.
 done < $TEMP/todo
 
 if test "$DEBUG"; then
     echo Saving temporary directory $TEMP
 fi
-cat <<EOF
-
-Gravity models `tr '\n' ' ' < $TEMP/todo`
-downloaded and installed in $PARENTDIR/gravity.
-
+echo
+if test -s $TEMP/download; then
+    n=`wc -l < $TEMP/download`
+    s=; test $n -gt 1 && s=s
+    cat <<EOF
+Installed $NAME dataset$s `tr '\n' ' ' < $TEMP/download`in $PARENTDIR/$SUBDIR.
 EOF
+fi
+if test -s $TEMP/skip; then
+    n=`wc -l < $TEMP/skip`
+    s=; test $n -gt 1 && s=s
+    cat <<EOF
+Skipped $NAME dataset$s `tr '\n' ' ' < $TEMP/skip | sed 's/ $//'`.
+EOF
+fi
+echo
diff --git a/tools/geographiclib-get-magnetic.sh b/tools/geographiclib-get-magnetic.sh
index c6a5db9..303eeaf 100644
--- a/tools/geographiclib-get-magnetic.sh
+++ b/tools/geographiclib-get-magnetic.sh
@@ -5,17 +5,21 @@
 # Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
 # under the MIT/X11 License.  For more information, see
 # http://geographiclib.sourceforge.net/
-#
-# $Id: bd05b3437908f70fbcc21d1a91e1fec586276a7b $
 
-DEFAULTDIR="@DEFAULTDIR@"
+DEFAULTDIR="@GEOGRAPHICLIB_DATA@"
+SUBDIR=magnetic
+NAME=magnetic
+MODEL=magneticmodel
+CLASS=MagneticModel
+TOOL=MagneticField
+EXT=wmm.cof
 usage() {
     cat <<EOF
-usage: $0 [-p parentdir] [-d] [-h] magneticmodel...
+usage: $0 [-p parentdir] [-d] [-h] $MODEL...
 
-This program downloads and installs the magnetic models used by the
-GeographicLib::MagneticModel class and the MagneticField tool to compute
-magnetic fields.  magneticmodel is one of more of the names from this
+This program downloads and installs the datasets used by the
+GeographicLib::$CLASS class and the $TOOL tool to compute
+magnetic fields.  $MODEL is one of more of the names from this
 table:
 
                                   size (kB)
@@ -24,7 +28,7 @@ table:
   igrf11     13    1900-2015      7      25
   emm2010   740    2010-2015    3700    4400
 
-The size columns give the download and installed sizes of the models.
+The size columns give the download and installed sizes of the datasets.
 In addition you can specify
 
   all = all of the supported magnetic models
@@ -33,26 +37,30 @@ In addition you can specify
 If no name is specified then minimal is assumed.
 
 -p parentdir (default $DEFAULTDIR) specifies where the
-datasets should be stored.  The "Default magnetic path" listed when running
+datasets should be stored.  The "Default $NAME path" listed when running
 
-  MagneticField -h
+  $TOOL -h
 
-should be parentdir/magnetic.  This script must be run by a user with
+should be parentdir/$SUBDIR.  This script must be run by a user with
 write access to this directory.
 
+Normally only datasets which are not already in parentdir are
+downloaded.  You can force the download and reinstallation with -f.
+
 If -d is provided, the temporary directory which holds the downloads,
-${TMPDIR:-/tmp}/magnetic-XXXXXXXX, will be saved.  -h prints this help.
+\$TMPDIR/$NAME-XXXXXXXX or ${TMPDIR:-/tmp}/$NAME-XXXXXXXX,
+will be saved.  -h prints this help.
 
 For more information on the magnetic models, visit
 
-  http://geographiclib.sourceforge.net/html/magnetic.html
+  http://geographiclib.sourceforge.net/html/$NAME.html
 
 EOF
 }
 
 PARENTDIR="$DEFAULTDIR"
-DEBUG=
-while getopts hp:d c; do
+FORCE=
+while getopts hp:fd c; do
     case $c in
         h )
             usage;
@@ -60,6 +68,8 @@ while getopts hp:d c; do
             ;;
         p ) PARENTDIR="$OPTARG"
             ;;
+	f ) FORCE=y
+	    ;;
         d ) DEBUG=y
             ;;
         * )
@@ -70,9 +80,9 @@ while getopts hp:d c; do
 done
 shift `expr $OPTIND - 1`
 
-test -d "$PARENTDIR"/magnetic || mkdir -p "$PARENTDIR"/magnetic 2> /dev/null
-if test ! -d "$PARENTDIR"/magnetic; then
-    echo Cannot create directory $PARENTDIR/magnetic 1>&2
+test -d "$PARENTDIR"/$SUBDIR || mkdir -p "$PARENTDIR"/$SUBDIR 2> /dev/null
+if test ! -d "$PARENTDIR"/$SUBDIR; then
+    echo Cannot create directory $PARENTDIR/$SUBDIR 1>&2
     exit 1
 fi
 
@@ -81,18 +91,18 @@ if test -z "$DEBUG"; then
 trap 'trap "" 0; test "$TEMP" && rm -rf "$TEMP"; exit 1' 1 2 3 9 15
 trap            'test "$TEMP" && rm -rf "$TEMP"'            0
 fi
-TEMP=`mktemp --tmpdir --quiet --directory magnetic-XXXXXXXX`
+TEMP=`mktemp --tmpdir --quiet --directory $NAME-XXXXXXXX`
 
 if test -z "$TEMP" -o ! -d "$TEMP"; then
     echo Cannot create temporary directory 1>&2
     exit 1
 fi
 
-WRITETEST="$PARENTDIR"/magnetic/write-test-`basename $TEMP`
+WRITETEST="$PARENTDIR"/$SUBDIR/write-test-`basename $TEMP`
 if touch "$WRITETEST" 2> /dev/null; then
     rm -f "$WRITETEST"
 else
-    echo Cannot write in directory $PARENTDIR/magnetic 1>&2
+    echo Cannot write in directory $PARENTDIR/$SUBDIR 1>&2
     exit 1
 fi
 
@@ -129,21 +139,37 @@ done > $TEMP/list
 sort -u $TEMP/list > $TEMP/todo
 
 while read file; do
+    if test -z "$FORCE" -a -s $PARENTDIR/$SUBDIR/$file.$EXT; then
+	echo $PARENTDIR/$SUBDIR/$file.$EXT already installed, skipping $file...
+	echo $file >> $TEMP/skip
+	continue
+    fi
     echo download $file.tar.bz2 ...
-    URL="http://downloads.sourceforge.net/project/geographiclib/magnetic-distrib/$file.tar.bz2?use_mirror=autoselect"
+    echo $file >> $TEMP/download
+    URL="http://downloads.sourceforge.net/project/geographiclib/$SUBDIR-distrib/$file.tar.bz2?use_mirror=autoselect"
     ARCHIVE=$TEMP/$file.tar.bz2
     wget -O$ARCHIVE $URL
     echo unpack $file.tar.bz2 ...
     tar vxojf $ARCHIVE -C $PARENTDIR
-    echo magnetic $file installed.
+    echo $MODEL $file installed.
 done < $TEMP/todo
 
 if test "$DEBUG"; then
     echo Saving temporary directory $TEMP
 fi
-cat <<EOF
-
-Magnetic models `tr '\n' ' ' < $TEMP/todo`
-downloaded and installed in $PARENTDIR/magnetic.
-
+echo
+if test -s $TEMP/download; then
+    n=`wc -l < $TEMP/download`
+    s=; test $n -gt 1 && s=s
+    cat <<EOF
+Installed $NAME dataset$s `tr '\n' ' ' < $TEMP/download`in $PARENTDIR/$SUBDIR.
 EOF
+fi
+if test -s $TEMP/skip; then
+    n=`wc -l < $TEMP/skip`
+    s=; test $n -gt 1 && s=s
+    cat <<EOF
+Skipped $NAME dataset$s `tr '\n' ' ' < $TEMP/skip | sed 's/ $//'`.
+EOF
+fi
+echo
diff --git a/windows/CartConvert-vc10.vcxproj b/windows/CartConvert-vc10.vcxproj
index 3d2decf..de2620a 100644
--- a/windows/CartConvert-vc10.vcxproj
+++ b/windows/CartConvert-vc10.vcxproj
@@ -83,7 +83,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -99,7 +99,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
@@ -133,7 +133,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
diff --git a/windows/ConicProj-vc10.vcxproj b/windows/ConicProj-vc10.vcxproj
index 21d7e70..ccf3200 100644
--- a/windows/ConicProj-vc10.vcxproj
+++ b/windows/ConicProj-vc10.vcxproj
@@ -83,7 +83,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -99,7 +99,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
@@ -133,7 +133,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
diff --git a/windows/GeoConvert-vc10.vcxproj b/windows/GeoConvert-vc10.vcxproj
index 70bd945..9f19d4c 100644
--- a/windows/GeoConvert-vc10.vcxproj
+++ b/windows/GeoConvert-vc10.vcxproj
@@ -83,7 +83,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -99,7 +99,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
@@ -133,7 +133,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
diff --git a/windows/Geod-vc10.vcxproj b/windows/Geod-vc10.vcxproj
deleted file mode 100644
index ca90ccb..0000000
--- a/windows/Geod-vc10.vcxproj
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{F1B64F66-7B95-4087-9619-4ABC20BEB591}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>Geod</RootNamespace>
-    <ProjectName>Geod</ProjectName>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>NotSet</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>NotSet</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>NotSet</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>NotSet</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
-    <IntDir>$(Configuration)64\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
-    <IntDir>$(Configuration)64\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="../man/Geod.usage" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="../tools/Geod.cpp" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
diff --git a/windows/Geod-vc8.vcproj b/windows/Geod-vc8.vcproj
deleted file mode 100644
index 5638bcd..0000000
--- a/windows/Geod-vc8.vcproj
+++ /dev/null
@@ -1,340 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="Geod"
-	ProjectGUID="{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
-	RootNamespace="Geod"
-	Keyword="Win32Proj"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-		<Platform
-			Name="x64"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			CharacterSet="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../include;../man"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Geographic_d.lib"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="$(OutDir)"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			CharacterSet="0"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../include;../man"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Geographic.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="$(OutDir)"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|x64"
-			OutputDirectory="$(ConfigurationName)64"
-			IntermediateDirectory="$(ConfigurationName)64"
-			ConfigurationType="1"
-			CharacterSet="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../include;../man"
-				PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Geographic_d.lib"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="$(OutDir)"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				TargetMachine="17"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|x64"
-			OutputDirectory="$(ConfigurationName)64"
-			IntermediateDirectory="$(ConfigurationName)64"
-			ConfigurationType="1"
-			CharacterSet="0"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../include;../man"
-				PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Geographic.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="$(OutDir)"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="17"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath="..\tools\Geod.cpp"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc;xsd"
-			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
-			>
-			<File
-				RelativePath="..\man\Geod.usage"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
-			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
-			>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/windows/Geod-vc9.vcproj b/windows/Geod-vc9.vcproj
deleted file mode 100644
index 27f48e3..0000000
--- a/windows/Geod-vc9.vcproj
+++ /dev/null
@@ -1,351 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9.00"
-	Name="Geod"
-	ProjectGUID="{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
-	RootNamespace="Geod"
-	Keyword="Win32Proj"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-		<Platform
-			Name="x64"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			CharacterSet="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../include;../man"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Geographic_d.lib"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="$(OutDir)"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			CharacterSet="0"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				AdditionalIncludeDirectories="../include;../man"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Geographic.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="$(OutDir)"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|x64"
-			OutputDirectory="$(ConfigurationName)64"
-			IntermediateDirectory="$(ConfigurationName)64"
-			ConfigurationType="1"
-			CharacterSet="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../include;../man"
-				PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Geographic_d.lib"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="$(OutDir)"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="17"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|x64"
-			OutputDirectory="$(ConfigurationName)64"
-			IntermediateDirectory="$(ConfigurationName)64"
-			ConfigurationType="1"
-			CharacterSet="0"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				AdditionalIncludeDirectories="../include;../man"
-				PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="Geographic.lib"
-				LinkIncremental="1"
-				AdditionalLibraryDirectories="$(OutDir)"
-				GenerateDebugInformation="true"
-				SubSystem="1"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="17"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath="..\tools\Geod.cpp"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc;xsd"
-			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
-			>
-			<File
-				RelativePath="..\man\Geod.usage"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
-			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
-			>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/windows/GeodSolve-vc10.vcxproj b/windows/GeodSolve-vc10.vcxproj
new file mode 100644
index 0000000..a596629
--- /dev/null
+++ b/windows/GeodSolve-vc10.vcxproj
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{F1B64F66-7B95-4087-9619-4ABC20BEB591}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>GeodSolve</RootNamespace>
+    <ProjectName>GeodSolve</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
+    <IntDir>$(Configuration)64\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
+    <IntDir>$(Configuration)64\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/GeodSolve.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/GeodSolve.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/GeodSolve-vc8.vcproj b/windows/GeodSolve-vc8.vcproj
new file mode 100644
index 0000000..cf25546
--- /dev/null
+++ b/windows/GeodSolve-vc8.vcproj
@@ -0,0 +1,340 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="GeodSolve"
+	ProjectGUID="{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
+	RootNamespace="GeodSolve"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic_d.lib"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(ConfigurationName)64"
+			IntermediateDirectory="$(ConfigurationName)64"
+			ConfigurationType="1"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic_d.lib"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(ConfigurationName)64"
+			IntermediateDirectory="$(ConfigurationName)64"
+			ConfigurationType="1"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\tools\GeodSolve.cpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\man\GeodSolve.usage"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/windows/GeodSolve-vc9.vcproj b/windows/GeodSolve-vc9.vcproj
new file mode 100644
index 0000000..368bd52
--- /dev/null
+++ b/windows/GeodSolve-vc9.vcproj
@@ -0,0 +1,351 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="GeodSolve"
+	ProjectGUID="{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
+	RootNamespace="GeodSolve"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic_d.lib"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(ConfigurationName)64"
+			IntermediateDirectory="$(ConfigurationName)64"
+			ConfigurationType="1"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic_d.lib"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(ConfigurationName)64"
+			IntermediateDirectory="$(ConfigurationName)64"
+			ConfigurationType="1"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\tools\GeodSolve.cpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\man\GeodSolve.usage"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/windows/GeodesicProj-vc10.vcxproj b/windows/GeodesicProj-vc10.vcxproj
index c93481c..1885f8d 100644
--- a/windows/GeodesicProj-vc10.vcxproj
+++ b/windows/GeodesicProj-vc10.vcxproj
@@ -83,7 +83,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -99,7 +99,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
@@ -133,7 +133,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
diff --git a/windows/Geographic-vc10.vcxproj b/windows/Geographic-vc10.vcxproj
index a004146..4c8b70c 100644
--- a/windows/Geographic-vc10.vcxproj
+++ b/windows/Geographic-vc10.vcxproj
@@ -86,7 +86,7 @@
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
@@ -100,7 +100,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
@@ -114,7 +114,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>../include</AdditionalIncludeDirectories>
@@ -127,7 +127,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>../include</AdditionalIncludeDirectories>
@@ -146,11 +146,15 @@
     <ClInclude Include="../include/GeographicLib/CircularEngine.hpp" />
     <ClInclude Include="../include/GeographicLib/Constants.hpp" />
     <ClInclude Include="../include/GeographicLib/DMS.hpp" />
+    <ClInclude Include="../include/GeographicLib/Ellipsoid.hpp" />
     <ClInclude Include="../include/GeographicLib/EllipticFunction.hpp" />
     <ClInclude Include="../include/GeographicLib/GeoCoords.hpp" />
     <ClInclude Include="../include/GeographicLib/Geocentric.hpp" />
     <ClInclude Include="../include/GeographicLib/Geodesic.hpp" />
+    <ClInclude Include="../include/GeographicLib/GeodesicExact.hpp" />
     <ClInclude Include="../include/GeographicLib/GeodesicLine.hpp" />
+    <ClInclude Include="../include/GeographicLib/GeodesicLineExact.hpp" />
+    <ClInclude Include="../include/GeographicLib/Geohash.hpp" />
     <ClInclude Include="../include/GeographicLib/Geoid.hpp" />
     <ClInclude Include="../include/GeographicLib/Gnomonic.hpp" />
     <ClInclude Include="../include/GeographicLib/GravityCircle.hpp" />
@@ -176,16 +180,21 @@
     <ClInclude Include="../include/GeographicLib/Config.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="../src/Accumulator.cpp" />
     <ClCompile Include="../src/AlbersEqualArea.cpp" />
     <ClCompile Include="../src/AzimuthalEquidistant.cpp" />
     <ClCompile Include="../src/CassiniSoldner.cpp" />
     <ClCompile Include="../src/CircularEngine.cpp" />
     <ClCompile Include="../src/DMS.cpp" />
+    <ClCompile Include="../src/Ellipsoid.cpp" />
     <ClCompile Include="../src/EllipticFunction.cpp" />
     <ClCompile Include="../src/GeoCoords.cpp" />
     <ClCompile Include="../src/Geocentric.cpp" />
     <ClCompile Include="../src/Geodesic.cpp" />
+    <ClCompile Include="../src/GeodesicExact.cpp" />
     <ClCompile Include="../src/GeodesicLine.cpp" />
+    <ClCompile Include="../src/GeodesicLineExact.cpp" />
+    <ClCompile Include="../src/Geohash.cpp" />
     <ClCompile Include="../src/Geoid.cpp" />
     <ClCompile Include="../src/Gnomonic.cpp" />
     <ClCompile Include="../src/GravityCircle.cpp" />
diff --git a/windows/Geographic-vc8.vcproj b/windows/Geographic-vc8.vcproj
index f1c1446..377b535 100644
--- a/windows/Geographic-vc8.vcproj
+++ b/windows/Geographic-vc8.vcproj
@@ -261,6 +261,10 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			<File
+				RelativePath="..\src\Accumulator.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\AlbersEqualArea.cpp"
 				>
 			</File>
@@ -281,6 +285,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\Ellipsoid.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\EllipticFunction.cpp"
 				>
 			</File>
@@ -297,10 +305,22 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\GeodesicExact.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\GeodesicLine.cpp"
 				>
 			</File>
 			<File
+				RelativePath="..\src\GeodesicLineExact.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\src\Geohash.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\Geoid.cpp"
 				>
 			</File>
@@ -407,6 +427,10 @@
 				>
 			</File>
 			<File
+				RelativePath="../include/GeographicLib/Ellipsoid.hpp"
+				>
+			</File>
+			<File
 				RelativePath="../include/GeographicLib/EllipticFunction.hpp"
 				>
 			</File>
@@ -423,10 +447,22 @@
 				>
 			</File>
 			<File
+				RelativePath="../include/GeographicLib/GeodesicExact.hpp"
+				>
+			</File>
+			<File
 				RelativePath="../include/GeographicLib/GeodesicLine.hpp"
 				>
 			</File>
 			<File
+				RelativePath="../include/GeographicLib/GeodesicLineExact.hpp"
+				>
+			</File>
+			<File
+				RelativePath="../include/GeographicLib/Geohash.hpp"
+				>
+			</File>
+			<File
 				RelativePath="../include/GeographicLib/Geoid.hpp"
 				>
 			</File>
diff --git a/windows/Geographic-vc9.vcproj b/windows/Geographic-vc9.vcproj
index 0f9643d..3a2937b 100644
--- a/windows/Geographic-vc9.vcproj
+++ b/windows/Geographic-vc9.vcproj
@@ -264,6 +264,10 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			<File
+				RelativePath="..\src\Accumulator.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\AlbersEqualArea.cpp"
 				>
 			</File>
@@ -284,6 +288,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\Ellipsoid.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\EllipticFunction.cpp"
 				>
 			</File>
@@ -300,10 +308,22 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\GeodesicExact.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\GeodesicLine.cpp"
 				>
 			</File>
 			<File
+				RelativePath="..\src\GeodesicLineExact.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\src\Geohash.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\Geoid.cpp"
 				>
 			</File>
@@ -410,6 +430,10 @@
 				>
 			</File>
 			<File
+				RelativePath="../include/GeographicLib/Ellipsoid.hpp"
+				>
+			</File>
+			<File
 				RelativePath="../include/GeographicLib/EllipticFunction.hpp"
 				>
 			</File>
@@ -426,10 +450,22 @@
 				>
 			</File>
 			<File
+				RelativePath="../include/GeographicLib/GeodesicExact.hpp"
+				>
+			</File>
+			<File
 				RelativePath="../include/GeographicLib/GeodesicLine.hpp"
 				>
 			</File>
 			<File
+				RelativePath="../include/GeographicLib/GeodesicLineExact.hpp"
+				>
+			</File>
+			<File
+				RelativePath="../include/GeographicLib/Geohash.hpp"
+				>
+			</File>
+			<File
 				RelativePath="../include/GeographicLib/Geoid.hpp"
 				>
 			</File>
diff --git a/windows/GeographicLib-vc10.sln b/windows/GeographicLib-vc10.sln
index 77f9d52..5a6ef59 100644
--- a/windows/GeographicLib-vc10.sln
+++ b/windows/GeographicLib-vc10.sln
@@ -2,12 +2,14 @@ Microsoft Visual Studio Solution File, Format Version 11.00
 # Visual Studio 2010
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Geographic", "Geographic-vc10.vcxproj", "{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{E6598B23-7D6F-4801-8579-C0C6BEBDE659}"
+EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeoConvert", "GeoConvert-vc10.vcxproj", "{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Geod", "Geod-vc10.vcxproj", "{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeodSolve", "GeodSolve-vc10.vcxproj", "{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034} = {C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}
@@ -61,6 +63,18 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Gravity", "Gravity-vc10.vcx
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A} = {3D185FB1-192C-457B-A327-27CFAEB82D8A}
 	EndProjectSection
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{ED7891B2-897F-4B32-87C9-1FB393720C62}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NETGeographic", "NETGeographic-vc10.vcxproj", "{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}"
+	ProjectSection(ProjectDependencies) = postProject
+		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Projections", "../dotnet/Projections/Projections.csproj", "{74B48389-E1D1-491F-B198-ADD4878C3F2B}"
+	ProjectSection(ProjectDependencies) = postProject
+		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
@@ -157,8 +171,38 @@ Global
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|Win32.Build.0 = Release|Win32
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.ActiveCfg = Release|x64
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.Build.0 = Release|x64
+		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Debug|Win32.Build.0 = Debug|Win32
+		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Debug|x64.ActiveCfg = Debug|x64
+		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Debug|x64.Build.0 = Debug|x64
+		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Release|Win32.ActiveCfg = Release|Win32
+		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Release|Win32.Build.0 = Release|Win32
+		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Release|x64.ActiveCfg = Release|x64
+		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Release|x64.Build.0 = Release|x64
+		{74B48389-E1D1-491F-B198-ADD4878C3F2B}.Debug|Win32.ActiveCfg = Debug|x86
+		{74B48389-E1D1-491F-B198-ADD4878C3F2B}.Debug|Win32.Build.0 = Debug|x86
+		{74B48389-E1D1-491F-B198-ADD4878C3F2B}.Debug|x64.ActiveCfg = Debug|x64
+		{74B48389-E1D1-491F-B198-ADD4878C3F2B}.Debug|x64.Build.0 = Debug|x64
+		{74B48389-E1D1-491F-B198-ADD4878C3F2B}.Release|Win32.ActiveCfg = Release|x86
+		{74B48389-E1D1-491F-B198-ADD4878C3F2B}.Release|Win32.Build.0 = Release|x86
+		{74B48389-E1D1-491F-B198-ADD4878C3F2B}.Release|x64.ActiveCfg = Release|x64
+		{74B48389-E1D1-491F-B198-ADD4878C3F2B}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{F1B64F66-7B95-4087-9619-4ABC20BEB591} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{0507FE91-AD45-4630-88EF-DABFA9A02FB4} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{73FED050-34B7-40EE-96FA-6EABA84F6F9B} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{62483C58-6125-4DB8-889D-23F5CB1D9744} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{3D185FB1-192C-457B-A327-27CFAEB82D8A} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D} = {ED7891B2-897F-4B32-87C9-1FB393720C62}
+		{74B48389-E1D1-491F-B198-ADD4878C3F2B} = {ED7891B2-897F-4B32-87C9-1FB393720C62}
+	EndGlobalSection
 EndGlobal
diff --git a/windows/GeographicLib-vc8.sln b/windows/GeographicLib-vc8.sln
index 4bed6f0..847409a 100644
--- a/windows/GeographicLib-vc8.sln
+++ b/windows/GeographicLib-vc8.sln
@@ -7,7 +7,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeoConvert", "GeoConvert-vc
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Geod", "Geod-vc8.vcproj", "{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeodSolve", "GeodSolve-vc8.vcproj", "{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034} = {C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}
diff --git a/windows/GeographicLib-vc9.sln b/windows/GeographicLib-vc9.sln
index 1bc32c4..e84a08a 100644
--- a/windows/GeographicLib-vc9.sln
+++ b/windows/GeographicLib-vc9.sln
@@ -7,7 +7,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeoConvert", "GeoConvert-vc
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Geod", "Geod-vc9.vcproj", "{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeodSolve", "GeodSolve-vc9.vcproj", "{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034} = {C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}
diff --git a/windows/GeoidEval-vc10.vcxproj b/windows/GeoidEval-vc10.vcxproj
index b512122..bdcfffa 100644
--- a/windows/GeoidEval-vc10.vcxproj
+++ b/windows/GeoidEval-vc10.vcxproj
@@ -83,7 +83,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -99,7 +99,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
@@ -133,7 +133,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
diff --git a/windows/Gravity-vc10.vcxproj b/windows/Gravity-vc10.vcxproj
index 91e80c8..6d43ec2 100644
--- a/windows/Gravity-vc10.vcxproj
+++ b/windows/Gravity-vc10.vcxproj
@@ -83,7 +83,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -99,7 +99,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
@@ -133,7 +133,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
diff --git a/windows/MagneticField-vc10.vcxproj b/windows/MagneticField-vc10.vcxproj
index c0571d9..06be34f 100644
--- a/windows/MagneticField-vc10.vcxproj
+++ b/windows/MagneticField-vc10.vcxproj
@@ -83,7 +83,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -99,7 +99,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
@@ -133,7 +133,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
diff --git a/windows/Makefile.mk b/windows/Makefile.mk
deleted file mode 100644
index 239532b..0000000
--- a/windows/Makefile.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-# $Id: 959eb5fb059ac028bdef404e4cb187a4a81bb318 $
-
-PROGRAMS = CartConvert \
-	ConicProj \
-	GeoConvert \
-	Geod \
-	GeodesicProj \
-	GeoidEval \
-	Gravity \
-	MagneticField \
-	Planimeter \
-	TransverseMercatorProj
-
-VSPROJECTS = $(addsuffix -vc8.vcproj,Geographic $(PROGRAMS)) \
-	$(addsuffix -vc9.vcproj,Geographic $(PROGRAMS)) \
-	$(addsuffix -vc10.vcxproj,Geographic $(PROGRAMS))
-
-all:
-	@:
-install:
-	@:
-clean:
-	@:
-
-.PHONY: all install clean
diff --git a/windows/NETGeographic-vc10.vcxproj b/windows/NETGeographic-vc10.vcxproj
new file mode 100644
index 0000000..a809382
--- /dev/null
+++ b/windows/NETGeographic-vc10.vcxproj
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}</ProjectGuid>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <Keyword>ManagedCProj</Keyword>
+    <RootNamespace>NETGeographic</RootNamespace>
+    <ProjectName>NETGeographic</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CLRSupport>true</CLRSupport>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CLRSupport>true</CLRSupport>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <CLRSupport>true</CLRSupport>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <CLRSupport>true</CLRSupport>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)_d</TargetName>
+    <IntDir>$(Configuration)\dotnet\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <TargetName>$(ProjectName)_d</TargetName>
+    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
+    <IntDir>$(Configuration)64\dotnet\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <IntDir>$(Configuration)\dotnet\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
+    <IntDir>$(Configuration)64\dotnet\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <AdditionalIncludeDirectories>../include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <AdditionalIncludeDirectories>..\include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <AdditionalIncludeDirectories>..\include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <AdditionalIncludeDirectories>..\include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="../dotnet/NETGeographicLib/Accumulator.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/AlbersEqualArea.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/AzimuthalEquidistant.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/CassiniSoldner.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/CircularEngine.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/DMS.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/Ellipsoid.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/EllipticFunction.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/Geocentric.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/GeoCoords.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/Geodesic.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/GeodesicExact.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/GeodesicLine.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/GeodesicLineExact.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/Geohash.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/Geoid.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/Gnomonic.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/GravityCircle.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/GravityModel.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/LambertConformalConic.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/LocalCartesian.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/MagneticCircle.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/MagneticModel.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/MGRS.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/NETGeographicLib.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/NormalGravity.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/OSGB.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/PolarStereographic.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/PolygonArea.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/SphericalCoefficients.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/SphericalHarmonic.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/SphericalHarmonic1.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/SphericalHarmonic2.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/Stdafx.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/TransverseMercator.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/TransverseMercatorExact.h" />
+    <ClInclude Include="../dotnet/NETGeographicLib/UTMUPS.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../dotnet/NETGeographicLib/Accumulator.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/AlbersEqualArea.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/AssemblyInfo.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/AzimuthalEquidistant.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/CassiniSoldner.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/CircularEngine.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/DMS.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/Ellipsoid.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/EllipticFunction.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/Geocentric.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/GeoCoords.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/Geodesic.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/GeodesicExact.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/GeodesicLine.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/GeodesicLineExact.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/Geohash.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/Geoid.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/Gnomonic.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/GravityCircle.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/GravityModel.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/LambertConformalConic.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/LocalCartesian.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/MagneticCircle.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/MagneticModel.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/MGRS.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/NETGeographicLib.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/NormalGravity.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/OSGB.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/PolarStereographic.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/PolygonArea.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/SphericalCoefficients.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/SphericalHarmonic.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/SphericalHarmonic1.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/SphericalHarmonic2.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/TransverseMercator.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/TransverseMercatorExact.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/UTMUPS.cpp" />
+    <ClCompile Include="../dotnet/NETGeographicLib/stdafx.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="../dotnet/NETGeographicLib/ReadMe.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="Geographic-vc10.vcxproj">
+      <Project>{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/Planimeter-vc10.vcxproj b/windows/Planimeter-vc10.vcxproj
index 176559b..ff39a08 100644
--- a/windows/Planimeter-vc10.vcxproj
+++ b/windows/Planimeter-vc10.vcxproj
@@ -83,7 +83,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -99,7 +99,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
@@ -133,7 +133,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
diff --git a/windows/TransverseMercatorProj-vc10.vcxproj b/windows/TransverseMercatorProj-vc10.vcxproj
index de8bee9..bbbbd90 100644
--- a/windows/TransverseMercatorProj-vc10.vcxproj
+++ b/windows/TransverseMercatorProj-vc10.vcxproj
@@ -83,7 +83,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -99,7 +99,7 @@
     <ClCompile>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
@@ -133,7 +133,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
+      <WarningLevel>Level4</WarningLevel>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/geographiclib.git



More information about the Pkg-grass-devel mailing list